你可能对 sizeof(i++) 有点误解。。。

时间:2022-07-22
本文章向大家介绍你可能对 sizeof(i++) 有点误解。。。,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

各位,今天还是按照惯例给大家分享一个C语言容易出现的小错误,这也是跟sizeof有关的,问题虽小,却可管中窥豹,话不多说,代码先行:

#include<stdio.h>
int main()
{  
    int i;  
    i = 8; 
    printf("%dn",i); 
    printf("%dn",sizeof(i++));  
    printf("%dn",i); 
    return 0;
}

问输出的值是什么?如果你上来就说8,4,9 那就错了。当然第一个是8没问题,第二个是4也没问题(32位int类型为4),主要错在了第三个数,其实本题着重考察的是我们对sizeof的理解。

首先我们要澄清一个误区:sizeof不是函数,不是函数,不是函数!重要的话说三遍,它是一个关键字,更准确地说它是一个单目运算符!其运算符的含义是:求出对象在计算机内存中所占用的字节数。根据C99的规范,sizeof是一个编译时刻就起效果的运算符,在其内的任何运算都没有意义,所以sizeof(i++)在编译的时候被翻译成sizeof((i++的数据类型)),也就是4(32位int),换言之编译时sizeof(i++)就被4取代了!因此当程序最终执行的时候,sizeof里面不会有任何的i++运算,所以i的值是不变的,这就是本题想考察的点了。

当然,关于sizeof还有其他许多用法和需要注意的地方,比如它的对象可以是表达式或者数据类型名,当对象是表达式时,括号可省略等等。。。同时sizeof在各种笔试面试中出现的几率非常高,希望大家对它进行熟练掌握,今天这里我们就不展开了,就到这里吧,感谢各位的耐心阅读。