#include
void main()
{
int i=1;
int e;
e=(++i)+(++i)+(++i);
printf("%d %d",e,i);
}为什么这个程序结果是e=10,i=4呢
谢谢三楼了,很有启发哈
c语言的问题e=(++i)+(++i)+(++i)
答案:3 悬赏:0 手机版
解决时间 2021-01-02 23:18
- 提问者网友:两耳就是菩提
- 2021-01-02 13:48
最佳答案
- 五星知识达人网友:拾荒鲤
- 2021-01-06 17:19
第一个i的初值为1,在用之前先自加1,变为2,2再去加第二个i,此时的i值为2,所以是2自加1变为3,也就是2+3=5,5再去加第三个i。此时的i是3,3自加1等于4,也就是最终i=4。。。5+4等于9,再自加1,赋值给e,所以e为10
首先对不起,上面我的回答错误了,我现在改正如下:
我去查阅了大料资料,找到了规律。关于 e=(++i)+(++i)+(++i);是这样执行的,++在i的前面,表示所有的i都是初值1,即题目中的i=1,在用之前需要自加1,上面的表达式是这样执行的,
i首先自加1,此时i==2,此时的表达式为e=i+(++i)+(++i);(只进行自加运算,没有相互加法运算)
此时i再一次自加1,此时变为i=3,此时的表达式为e=i+i+(++i););(只进行自加运算,没有相互加法运算)
然后i再一次自加1变为i==4,此时的表达式为e=i+i+i;(此时不但进行自加运算,还有有相互加法运算,即e=3+3+4)
也就是说最后一步进行了自加和相互之间的加法;如果是写成e=(i++)+(i++)+(i++);i的初值为1的话,e就是为3,i为4,++在后面表示一个表达式里面的所有的i++都在用完之后再自加3次。
我再举一个例子;
再举一个例子,e=(++i)+(++i);如果i=1,那么e就为6,我分析如下
首先i=1,首先自加1,i=2,此时e=i+(++i);
然后再自加1,此时的i=3,此时e=i+i;e=3+3=6;你去运行试试。
另外建议,如果不是很熟悉,建议少用++或--,不同的编译器的执行顺序不同,我是根据visual c++6.0的编译器 的执行规则讲解的。
首先对不起,上面我的回答错误了,我现在改正如下:
我去查阅了大料资料,找到了规律。关于 e=(++i)+(++i)+(++i);是这样执行的,++在i的前面,表示所有的i都是初值1,即题目中的i=1,在用之前需要自加1,上面的表达式是这样执行的,
i首先自加1,此时i==2,此时的表达式为e=i+(++i)+(++i);(只进行自加运算,没有相互加法运算)
此时i再一次自加1,此时变为i=3,此时的表达式为e=i+i+(++i););(只进行自加运算,没有相互加法运算)
然后i再一次自加1变为i==4,此时的表达式为e=i+i+i;(此时不但进行自加运算,还有有相互加法运算,即e=3+3+4)
也就是说最后一步进行了自加和相互之间的加法;如果是写成e=(i++)+(i++)+(i++);i的初值为1的话,e就是为3,i为4,++在后面表示一个表达式里面的所有的i++都在用完之后再自加3次。
我再举一个例子;
再举一个例子,e=(++i)+(++i);如果i=1,那么e就为6,我分析如下
首先i=1,首先自加1,i=2,此时e=i+(++i);
然后再自加1,此时的i=3,此时e=i+i;e=3+3=6;你去运行试试。
另外建议,如果不是很熟悉,建议少用++或--,不同的编译器的执行顺序不同,我是根据visual c++6.0的编译器 的执行规则讲解的。
全部回答
- 1楼网友:青灯有味
- 2021-01-06 18:37
当i不空而且s【i】.date不等于e的时候 i= s[i].cur
- 2楼网友:duile
- 2021-01-06 17:47
这要看编译器来的,这个算法没有标准,我用VS2005输出的e=12;因为他是先把所有的i自加之后再进行加法运算,结果就是4+4+4=12
而输出10可能是这样算的吧
(++i)+(++i)算一个表达式,在执行表达式之前先对变量自加,因此第一次i自加后i=2,然后再计算第2个++i这时i=3,然后再算加法,得到6
最后再算6+(++i),这时应先自加i再求表达式,因此i=4,再加6就得到10。
而VS2005是把i+i+i整个算作一个表达式,你的编译器是把i+i算作一个表达式。
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯