C语言程序设计案例精粹
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

3.9 sizeof运算符

sizeof运算符又称为取内存字节运算符,它是C语言最特殊的运算符之一,有些资料也将该运算符看作C语言的库函数。sizeof运算符是一个一元运算符,用于计算操作对象在内存中所占的字节数。其一般表达形式为:

sizeof(操作对象)

C语言的程序和数据都是放在内存中的,不论是常量、变量还是复杂数据类型,都是按字节存储于系统存储区域中的。例如char型变量a在内存中占一个字节,int型变量b在内存中占4个字节等。若要获取这些数据类型在内存中所占的字节数,就可以运用运算符sizeof

来获得。例如:

int a=10, b=0;

b = sizeof(a);

b用于存储变量a在内存中所占的字节数,使用sizeof获取a的内存字节数。除了普通变量外,sizeof运算符还可用于计算数组、结构体、指针以及动态分配内存等的字节数。

当sizeof被用于char型时,其值为1;当用于数组时,其值为数组中字节的总数。当用于结构体变量时,结果比较复杂,将在后续章节详细介绍。

sizeof运算符不能用于函数类型、不完全类型或位字段。这里不完全类型指具有未知存储大小的数据类型,如未知存储大小的数组类型、未知内容的结构体或联合体,以及void类型等。

范例3.13 SizeofUseful.c

SizeofUseful.c使用sizeof运算符分别获取char, short, int long, float, double等几种基本数据类型的内存字节数,获取实型常量1.0以及字符常量’a’的内存字节数,获取强制类型转换之后的字符常量’a’的内存字节数。(光盘\chat3\ SizeofUseful.c)

          01   #include<stdio.h>
          02   main()
          03   {
          04       char c=' a' ;                      //定义char型变量c
          05       short a=5;                      //定义short型变量a
          06       int b=6;                       //定义int型变量b
          07       long d=7;                      //定义long型变量d
          08       float e=8.2;                     //定义float型变量e
          09       double f=2.8;                   //定义double型变量f
          10       printf("char=%d, short=%d, int=%d\n", sizeof(c), sizeof(a), sizeof(b));
          11       printf("long=%d, float=%d, double=%d\n", sizeof(d), sizeof(e), sizeof(f));
          12       printf("1.0=%d, ' a' =%d, (char)' a' =%d\n", sizeof(1.0), sizeof(' a' ), sizeof((char)' a' ));
          13   }

程序第10、11、12行分别输出各种不同数据类型变量和常量所占的内存空间字节。程序第12行中,对于sizeof(1.0),由于C语言对实型常量以double型看待,因此常量1.0占8字节;对于sizeof('a'),由于字符常量在系统中以ASCII码存放,因此,使用sizeof运算符时,系统将'a'解析成常量97,而整型常量97在系统中占4字节,因此输出为4;对于sizeof((char) 'a'),由于对'a'做了强制类型转换,因此系统将'a'当作字符看待,因此输出1。

程序运行结果为:

char=1, short=2, int=4

long=4, float=4, double=8

1.0=8, ' a' =4, (char)' a' =1