鱼C论坛

 找回密码
 立即注册
查看: 5828|回复: 15

问下C中自增自减运算问题

[复制链接]
发表于 2013-3-31 11:11:45 | 显示全部楼层 |阅读模式
1鱼币
#include<stdio.h>

main()
{
      int a,b,c=3;
      a=(c++)+(c++)+(c++);
      c=3;
      b=(++c)+(++c)+(++c);
      printf("a=%d\n",a);
      printf("b=%d\n",b);

}

求解第一个为什么等于9
第二个等于16???

最佳答案

查看完整内容

c++是整个表达式执行完才进行自加,而++c是先自加再执行表达式。 所以 int a,b,c=3; a=(c++)+(c++)+(c++); //a=(3)+(3)+(3) c=3; b=(++c)+(++c)+(++c); //b=(1+3)+(1+c)+(1+c)=4+5+6=15 我不知道你用的是什么编译器给编译出16,不过有些编译器还能给编译出不同答案。有12的也有18的。 还有你这里输出的时候Printf后面用不到\n
小甲鱼最新课程 -> https://ilovefishc.com
发表于 2013-3-31 11:11:46 | 显示全部楼层
c++是整个表达式执行完才进行自加,而++c是先自加再执行表达式。
所以
int a,b,c=3;
      a=(c++)+(c++)+(c++);        //a=(3)+(3)+(3)
      c=3;                           
      b=(++c)+(++c)+(++c);        //b=(1+3)+(1+c)+(1+c)=4+5+6=15
我不知道你用的是什么编译器给编译出16,不过有些编译器还能给编译出不同答案。有12的也有18的。
还有你这里输出的时候Printf后面用不到\n
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2013-3-31 14:44:31 | 显示全部楼层
不要为这种问题纠结   编译器不同答案不同    C99没有规定  所以每个编译器会按自己的优化方式编译  
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2013-3-31 16:13:21 | 显示全部楼层
挺好挺好啊啊啊啊啊 啊
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2013-3-31 16:58:10 | 显示全部楼层
同求。。。。。。。
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2013-4-2 10:28:49 | 显示全部楼层
c++是整个表达式执行完才进行自加,而++c是先自加再执行表达式。
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2013-4-2 23:12:14 From FishC Mobile | 显示全部楼层
不加糖的咖啡 发表于 2013-4-2 10:53
c++是整个表达式执行完才进行自加,而++c是先自加再执行表达式。
所以
int a,b,c=3;

求解最后一句话!
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2013-4-3 17:29:57 | 显示全部楼层
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2013-4-3 21:15:42 | 显示全部楼层
我只是路过打酱油的。
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2013-4-4 00:42:03 | 显示全部楼层
不加糖的咖啡 发表于 2013-4-2 10:53
c++是整个表达式执行完才进行自加,而++c是先自加再执行表达式。
所以
int a,b,c=3;

正解.  ; 作为一个语句的结束. c++ 是在 语句结束后 再自增. 所以是 3+3+3; 第二次 时,c的值已经自增为 4.++c 是 先自增然后在计算. 输出语句不用换行符, 后面也得留几个空格吧.
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2013-4-4 09:15:47 | 显示全部楼层
坦_然 发表于 2013-4-4 00:42
正解.  ; 作为一个语句的结束. c++ 是在 语句结束后 再自增. 所以是 3+3+3; 第二次 时,c的值已经自增为 4 ...

人家问的是C,不是C++。好吧。就算是C++吧。那语法也不能相差太大吧?我觉得这主要还是编译器的问题。
第二次C值自加后不就是4加第二个括号自加5第三个自加6吗?
我不知道你的意思是不是说第一个括号里的自加是不是等于1+4,前面已经重定义C值为3了。
至于后面\n是不是要加我也说了其实无所了。加没错不加也没错。
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2013-4-4 10:38:18 | 显示全部楼层
不加糖的咖啡 发表于 2013-4-4 09:15
人家问的是C,不是C++。好吧。就算是C++吧。那语法也不能相差太大吧?我觉得这主要还是编译器的问题。
  ...

我说的是变量 C,不是c/c++.:( 中间的c赋值没看见 SORRY. 至于回车换行 没必要说人家错啊.是个好习惯.
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2013-4-5 11:52:44 | 显示全部楼层
不加糖的咖啡 发表于 2013-4-2 10:53
c++是整个表达式执行完才进行自加,而++c是先自加再执行表达式。
所以
int a,b,c=3;

正解            
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2013-4-5 11:58:03 | 显示全部楼层
哈哈,不用纠结这个问题
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2013-4-5 13:15:04 | 显示全部楼层

哥们,你活跃榜好像是第一个是不?很给力啊。
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2013-4-5 13:27:03 | 显示全部楼层
不加糖的咖啡 发表于 2013-4-5 13:15
哥们,你活跃榜好像是第一个是不?很给力啊。

......我只是帮大家顶顶啊...顺便得点鱼币而已...人怕出名猪怕壮啊
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-8-4 20:46

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表