一、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,它在头文件中 typedef 为 unsigned int
类型。该类型保证能容纳实现所建立的最大对象的字节大小。
1、若操作数具有类型 char、unsigned char 或 signed char,其结果等于1。
ANSI C 正式规定字符类型为1字节。
2、int(4)、unsigned int(4) 、short int(2)、unsigned short(2) 、
long int(4) 、unsigned long(4)、float(4)、double(8)、long double
(8)类型的 sizeof 在 ANSI C 中没有具体规定,大小依赖于实现括号内为 sizeof
的结果。
3、当操作数是指针时,sizeof 依赖于编译器。例如 Microsoft C/C++7.0
中,near 类指针字节数为2,far、huge 类指针字节数为4。一般 Unix 的指针字
节数为4, 一般来说指针字节数为4。
例1:
int *p;
int a[5];
p = a;
sizeof(p)的结果是4。
例2:
const char* pstars[]={"aa","bb","cc","dd"};
const int starCount=size of pstars/sizeof pstars[0];
starCount 是指针数组 pstars 中的元素个数4。
因为 pstars 是一个常指针数组,const 代表指针中的数据不能修改,即不能使
用诸如*pstars[0] = 'c';之类,会有编译错误的。
先放下 const 不谈,pstars 的数组成员是
4
个指针,所以其占用的空间是
4
个指针所
占用的空间即4*4 = 16,而 pstars[0]是该数组的一个元素,即一个指针,所占空
间即为
4
个字节。所以最后计算结果为
4。
4、当操作数具有数组类型时,其结果是数组的总字节数。