C语言++i和i++的区别
对于一个如此细节的问题,其实没有很大的必要来讨论,毕竟正儿八经的程序里面,按照前面说的,形成了自己的风格,基本上已经不用太多估计i++
和++i
的区别了。
但是既然聊起这个问题,最简单的区别方法相信很多人已经了然于胸了,那就是:
i++
:先用i
的值然后再加1 所以a=++i
等价于:i=i+1;a=i;
++i
:i
先加1,然后在用i的值 所以a=i++
等价于:a=i;i=i+1;
比如下面的代码:
1 | int a, b; |
毋庸置疑,最后的结果是a=10,b=11
。这个没有问题,那么下面的这个问题呢:
1 | int i = 10; |
你是不是也可以立即给出答案呢,但是你确定结果是这样的吗,或许你实际执行了一下,结果在不同的平台竟然不一样,比如:Linux下面得到的结果是a=30,b=37
,而MacOSX编译后的结果竟然是:a=33,b=36
,同一个代码,竟然有不同的结果,甚至同一个平台不同的编辑器也会有不同的结果,引起这个的原因就是C语言里的副作用,所谓的副作用(side effect
)是指对数据对象或文件的修改,而这个修改可能不同的编辑器有不同的顺序,详情且听下回分解。
建议如下,对于这两个的区别,实在是如果能不用到多个++i/i++就不要用,或者等你去参加面试高速面试官这个有多个结果,分别是为何为何,亦或者是你面试别人,出个考题,保证只有一个答案的新手们,妥妥被教育,暂无他用。
举个例子源码如下:
1 | /*beginner/operator/operator4.c*/ |
相应地Makefile如下所示:
1 | #beginner/operator/Makefile |
输入make
,然后./operator4
输出为:
1 | a : 10 |
第二个结果给的是xx,因为我目前有多个答案,随你去实验吧,等下次来讲讲为何会有这几个答案。