C语言(急) 结果谁能解释下?

[复制链接]
查看11 | 回复5 | 2013-3-5 15:44:17 | 显示全部楼层 |阅读模式
感觉很多人纠结于这个自增自减的问题。。。。根据编译器不同结果会有所不同。。。。按照你得结果是这样计算的:1. a=(i++)+(i++)+(i++);
i是先参与运算,在运算结束时(遇到分号)再进行自增
等同于 a=i+i+i; i++; i++; i++
所以得出 a=3+3+3=9,此时a=6;2. b=(++i)+(++i)+(++i);
i是先自增,自增完成后再进行运算。
同时,由于优先级的关系,等同于:
b=((++i)+(++i))+(++i);
先计算((++i)+(++i)),经过两次自增之后i变为8
所以b=(8+8)+(++8)=16+...
回复

使用道具 举报

千问 | 2013-3-5 15:44:17 | 显示全部楼层
不管是 (i++) 还是(++i)都是i自加 i原来等于3 自加6次 为9 printf("%d,%d\n",i,i++); 这里的i++没有带括号 并且是 i++ 而不是++i因此是9输出完毕才自加 在printf("%d,%d\n",i,i++);之后如果再输出i的话 则为10 而 a = 9则是 i+i+i ...
回复

使用道具 举报

千问 | 2013-3-5 15:44:17 | 显示全部楼层
对于前置表达式,是通过引用(by-reference)来处理的。也就是,该表达式还回的是变量自身。++i表达式还回的就是&i,自然i中的值是增加过后的值,不然运算结果就会丢失。对于后置表达式,是通过传值(by-value)来实现的。也就是用一个临时变量来保存结果,然后还回这个临时变量。所以i++的结果是i还没有变化,要到一个完整语句(出现‘;或者函数调用)后...
回复

使用道具 举报

千问 | 2013-3-5 15:44:17 | 显示全部楼层
i++ 的含义是i暂时不变,下次变++i立即变和编译器有关,只有考试才会这样子写没有程序员会写这种垃圾代码。不要太纠结了 我的编译器运行结果是10,99,25...
回复

使用道具 举报

千问 | 2013-3-5 15:44:17 | 显示全部楼层
在每次语句结尾时,变量 i 才会计算自增,这样执行a=(i++)+(i++)+(i++);时参加计算的 i 是3,那么a = 9;执行完毕之后 i 开始计算自己的增量,++了3次,那么之后 i = 5; 同理,在执行b=(++i)+(++i)+(++i);时,先自增3次,i = 9了,这时候b = 27;楼主您的输出结果有误。 最后print...
回复

使用道具 举报

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

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行