sizeof的结果等于对象或者类型所占的内存字节数
一:基本数据类型的sizeof
像short、int、long、float等简单的内置数据,sizeof返回的是这些数据内存
例:sizeof(short)=2,sizeof(int)=4;
二:指针变量的sizeof
指针是一个很重要的概念,它记录了另一个对象的地址。既然是来存放地址的,那么它当然等于计算机内部地址总线的宽 度。所以在64位计算机中sizeof(指针)的值为8固定不变的。
例:char *pc="abc",int *pi,char **ppc=&pc;
sizeof(px)=sizeof(pi)=sizeof(ppc)=8;
三:数组指针的sizeof
数组的sizeof等同于所占内存的字节数
例:char a1[]="abc";int a2[3];
sizeof(a1)=4;//这种数组定义默认末尾还有一个NULL终止符所以为4;
sizeof(a2)=12;//依赖于int,sizeof(int)为4,所以为3*4=12;
所以求数组的长度不能直接用sizeof可以用length=sizeof(a2)/sizeof(int);
特别注意:void foo1(char a1[3]){
int c1=sizeof(a1); //a1=???
}
void foo2(char a2[]){
int c2=sizeof(a2); //a2=???
}
此时的c3!=3,因为函数参数里面的c3不再是数组类型,而是蜕变成指针,相当于char *a1;
四:函数的sizeof
函数的sizeof返回的它的返回类型
例:int foo(){}则它的sizeof(foo)等价于sizeof(int)=4;