解析 C 语言中的 sizeof
一、sizeof
的概念
sizeof 是 C 语言的一种单目操作符,如 C 语言的其他操作符++、--等。它并不是函数 。
sizeof 操作符以字节形式给出了其操作数的存储大小。操作数可以是一个表达式或括在括
号内的类型名。操作数的存储大小由操作数的类型决定。
二、sizeof
的使用方法
1
、用于数据类型
sizeof 使用形式:sizeof(type
)
数据类型必须用括号括住。如 sizeof(int
)。
2
、用于变量
sizeof 使用形式:sizeof(var_name)或 sizeof var_name
变量名可以不用括号括住。如 sizeof (var_name),sizeof var_name 等都是正确形式。带
括号的用法更普遍,大多数程序员采用这种形式。
注意:sizeof 操作符不能用于函数类型,不完全类型或位字段。不完全类型指具有未
知存储大小的数据类型,如未知存储大小的数组类型、未知内容的结构或联合类型、void
类型等。
如 sizeof(max)若此时变量 max 定义为 int max(),sizeof(char_v) 若此时 char_v 定义为
char char_v [MAX]且 MAX 未知,sizeof(void)
都不是正确形式。
三、sizeof
的结果
sizeof 操作符的结果类型是 size_t,它在头文件<stddef.h>中 typedef 为 unsigned int 类
型。该类型保证能容纳实现所建立的最大对象的字节大小。
1、若操作数具有类型 char、unsigned char 或 signed char,其结果等于 1
。
ANSI C 正式规定字符类型为 1
字节。
2、int、unsigned int 、short int、unsigned short 、long int 、unsigned long 、float、double、long
double 类型的 sizeof 在 ANSI C 中没有具体规定,大小依赖于实现,一般可能分别为
2、2、2、2、4、4、4、8、10
。
3、当操作数是指针时,sizeof 依赖于编译器。例如 Microsoft C/C++7.0 中,near 类指针
字节数为 2,far、huge 类指针字节数为 4。一般 Unix 的指针字节数为 4
。
4
、当操作数具有数组类型时,其结果是数组的总字节数。