C/C++中sizeof的用法
1、基本数据类型的sizeof:
这里的基本数据类型指short、int、long、float、double、char这样的简单内置数据类型,由于它们都是和系统相关的,所以在不同的系统下取值可能不同,这务必引起我们的注意,尽量不要在这方面给自己程序的移植造成麻烦。一般情况下,在32位系统中,int占4个字节,所以sizeof(int)为4。
2、指针变量的sizeof:
指针记录了另一个对象的地址。既然是来存放地址的,那么它当然等于计算机内部地址总线的宽度。所以在32位计算机中,一个指针变量的返回值必定是4(注意结果是以字节为单位),例:char* pc; sizeof(pc)的值为3可以预计,在将来的64位系统中指针变量的sizeof结果为8。
3、数组的sizeof
数组的sizeof值等于数组所占用的内存字节数,如:
char a1[] = "abc";
int a2[3];
sizeof( a1 ); // 结果为4,字符 末尾还存在一个NULL终止符
sizeof( a2 ); // 结果为3*4=12(依赖于int)
此外还有结构体等复杂数据类型的sizeof,这些sizeof都和内存中的存储方式有关。但是有必要说明的是,指针变量和数组,这里以字符指针和字符数组为例,如:char* pc; char chs[5]; sizeof(pc)为4,sizeof(chs)为5。而chs也代表chs中元素的首地址。这里不要把sizeof(chs)的值理解为4,因为sizeof会根据数据类型计算而不是变量的值。但是在函数中的数组会定义为指针。如:
void fun(char chs[10])
{ int i=sizeof(chs);//这时候i的值为4,因为在传参时传递的是首元素的地址,而把首地址赋给chs是非法的。这时候在内存中chs实际为指针类型
}