sizeof()函数
1,是什么?
sizeof其实就是一个运算符,和那些+,-一样的东西,在程序编译的时候进行解析转换。虽然我们经常见到sizeof后面跟着个小括号,长得和函数差不多,但它和函数完全是两码事。
2,有什么用?
sizeof其实就是用于告诉我们编译器在为某一特定数据或者某种数据类型的数据在存储空间中开辟空间时,开辟的空间大小,以字节为单位。
3,怎么用?
sizeof(类型),或者sizeof(变量)都可以,得到的就是类型或者变量的存储空间。当对变量用的时候,也可以没有括号,直接 sizeof 变量,但一般不用(我一般都是只记一种通用的用法……)。
4,用的时候要注意什么?
(1)sizeof返回的占用空间大小是为这个变量开辟的大小,而不只是它用到的空间。和现今住房的建筑面积和实用面积的概念差不多。所以对结构体用的时候,大多情况下就得考虑字节对齐的问题了。
(2)对位域成员等连编译器都无法确定存储空间的东西不能用。这个应该比较好理解,因为sizeof返回的都是以字节为单位的数据,你让它去求那些以位为单位的大小,这不是存心难为编译器嘛。所以编译器采用的方案是统一不受理,即使你说你刚好是8位,占一个字节,编译器也不理你。
(3)sizeof返回的数据类型是unsigned int。因为C中不同类型数据混合运算时的自动转换,有时候不注意的话可能会出问题,具体可以参照下面的程序例子。
(4)要注意数组名和指针变量的区别。通常情况下,我们总觉得数组名和指针变量差不多,但是在用sizeof的时候差别很大,对数组名用sizeof返回的是整个数组的大小,而对指针变量进行操作的时候返回的则是指针变量本身所占得空间,在32位机的条件下一般都是4。而且当数组名作为函数参数时,在函数内部,形参也就是个指针,所以不再返回数组的大小。
5,实例分析
源码:
#include<stdio.h>
int main()
{
int iVal = 3;
printf("The size of type int is %d n", sizeof(int));
printf("The size of iVal is %dn", sizeof(iVal));
printf("The size of iVal is %dn", sizeof iVal);
if((iVal - sizeof(int)) < 0)
{
printf("The return type is intn");
}
else
{
printf("The return type is unsigned intn");
}
char chArrayCon[7];
char *chp;
chp = chArrayCon;
printf("The size of chArrayCon is %d, The size of chp is %dn", sizeof(chArrayCon), sizeof(chp));
int iArraySize = 3;
char chArrayVar[iArraySize];
printf("The size of chArrayVar is %dn", sizeof(chArrayVar));
return 0;
}










