原标题:你可能对 sizeof(i++) 有点误解。。。
各位,今天还是按照惯例给大家分享一个C语言容易出现的小错误,这也是跟sizeof有关的,问题虽小,却可管中窥豹,话不多说,代码先行:
# include
intmain
{
inti;
i = 8;
printf( "%dn",i);
printf( "%dn", sizeof(i++));
printf( "%dn",i);
return0;
}
问输出的值是什么?如果你上来就说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在各种笔试面试中出现的几率非常高,希望大家对它进行熟练掌握,今天这里我们就不展开了,就到这里吧,感谢各位的耐心阅读。
欢迎大家留言区讨论哦!
Wink !
期末考试 来啦!
对于 printf , 你确定你很熟?
关于数组的一个小陷阱!
空指针 到底是什么意思?
12月编程语言排行榜 来了!
为什么用 if(0 == x) 而不是 if(x == 0) ?
12月 集成开发环境(IDE)排行榜来了!
假如计算机是中国人发明的,那代码应该这么写?
C++写的一个好玩的猜数字游戏
sizeof 你真的弄明白了吗? 来看看这个例子
编程能力的4种境界,你到哪一级了?
请大家来给这几行C语言代码找找茬
一个简单但能考察C语言基础的题目,试试?
八大排序算法 ,C语言详细版讲解,硬核推荐! ! !
堆和栈的区别(非常详细,干货收藏! )
C语言中“悬空指针”和“野指针”究竟是什么意思?
这绝对是C语言的一个经典例题了!
这两个C运算符你可能没用过,但却很有用返回搜狐,查看更多
责任编辑: