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 时,您会更加谨慎的,不是吗?
本文详细解析sizeof运算符的用法,包括它返回类型、在编译期的作用以及与表达式计算的区别。并通过实例展示了sizeof返回值为unsigned int类型的特点,以及其在与signed类型比较时的转换过程,帮助开发者更谨慎地使用sizeof。
1682

被折叠的 条评论
为什么被折叠?



