sizeof是一个单目运算符,像c语言的其他操作符++、--等一样,它并不是函数。sizeof操作符以字节形式给出了其操作数的存储大小。
sizeof的计算发生在编译时期!
sizeof使用方法:
1.用于变量:sizeof(var_name) 或 sizeof var_name;
2.用于数据类型: sizeof(type) 必须用括号括住
sizeof计算对象大小也是转换成对对象类型的计算,也就是说,同种类型的不同对象其sizeof值都是一致的。这里,sizeof也可以对一个表达式求值,编译器根据表达式的最终结果类型来确定大小,一般不会对表达式进行计算。
例如:
printf("%d\n",sizeof(2));
printf("%d\n",sizeof(2+3.14));
输出结果为4和8。2的类型被提升为double,等价于求sizeof(double).
sizeof也可以对一个函数调用求值,其结果是函数返回类型的大小,函数并不会被调用!
例如:
char foo()
{
printf("foo()!\n");
return 'a';
}
int main()
{
int s = sizeof(foo());
printf("%d\n",s);
return 0;
}
结果为 1 .
总结sizeof对简单内置数据类型求值结果(32位编译环境)
int *p;
printf("%d\n",sizeof(int));
printf("%d\n",sizeof(short));
printf("%d\n",sizeof(long));
printf("%d\n",sizeof(float));
printf("%d\n",sizeof(double));
printf("%d\n",sizeof(char));
printf("%d\n",sizeof(p));
其结果为:
总结当参数类型如下时,sizeof返回值的含义:
- 数组-编译时分配的数组空间大小
- 指针-存储该指针所用的空间大小
- 类型-该类型所占的空间的大小
- 对象-对象的实际占用空间大小
- 函数-函数返回类型所占空间的大小
C99标准规定,函数、不能确定类型的表达式以及位域成员不能被计算sizeof值!
注意:sizeof(“\0”)= 2;
sizeof计算数组(包括数组、变量、类型、结构体等)所占内存空间,用字节数表示,故将内容为 ‘\0’ 的数组元素计算在内。而strlen()计算字符数组的字符数,以 '\0' 为结束标志,且不将 '\0' 计算在字符数内。