今天去参加面试,笔试的第一道题就是这个sizeof的用法,考了六七个,平时觉得很熟,真拿来考到迷糊了。有必要再总结一下。
题是这样的:在32位操作系统环境下,请问以下sizeof的值各是多少。
一:
int p=10;
sizeof(p)=?
这个就简单,int型变量p占4个字节,答案就是4.
二:
char *p="hello";
sizeof(p)=?
这个比较容易错,看上去是字符串的长度5,其实这个和上一个本质上是一样的,只不过p成了一个指针型变量,所以答案还是4.
三:
char p[]="hello";
sizeof(p)=?
这个p和上一个p虽然被看成是指针。但是这个p毕竟不是指针变量,他是一个字符串的首地址。所以sizeof(p)就是字符串的长度再加1(加上结尾的'/0'),所以答案是6.
四:
int p[100];
sizeof(p)=?
这个和上一个类似,p是一个数组的首地址,但是区别在于数组是整形数组。sizeof(p)就是数组的长度×每个元素占用字节.也就是100×4=400。这个用法可以用来求数组元素的个数,sizeof(p)/sizeof(p[0])就是400/4=100.
暂时还没想到其他用法,如有会及时补充上。