1、sizeof不是一个函数,虽然长得跟个函数似的。
看下面的例子:
int a = 3;
if (sizeof(++a) == 4){
printf("%d\n", a);
}
会输出4吗?输出的是3,显然++a没有被执行。
sizeof的括号里面的语句只会被在编译的时候计算一下类型,然后整个sizeof()返回的是这个类型的字节数,而不会对括号中的表达式生成代码。
这需要注意一下。
2、sizeof返回的是unsigned int类型的值。
举个例子:
int main(){
#define COUNT(array) (sizeof((array)) / sizeof((array)[0]))
int a[] = {1, 2, 3};
int i;
for (i = - COUNT(a) + 1; i < COUNT(a); ++i){
i = i < 0 ? -i: i;
printf("%d ", i);
}
return 0;
}
程序本意是想打印出
3, 2, 1, 1, 2, 3,
不过遗憾的是什么都没有打印出来。如果您知道sizeof返回的是unsigned类型,并且 signed 和 unsigned 在进行比较运算的时候会先被转化为相同的 unsigned 类型,您就知道为什么了。
日后再使用 sizeof 时,您会更加谨慎的,不是吗?