您的位置:首页 > 编程语言 > C语言/C++

神奇的C语言九:sizeof埋下的陷阱

2014-05-28 09:40 295 查看
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 时,您会更加谨慎的,不是吗?
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  C sizeof