关于自加运算符的疑惑 j=i+++i

发布时间:2024-05-17 02:01 发布:上海旅游网

问题描述:

#include <iostream.h>

void main()
{
int i=1;
int j;
j = i+++i;
cout<<"i="<<i<<endl
<<"j="<<j<<endl;
}
在VC6中运行结果为i=2; j=2;
不太明白j为什么等于2,哪个大侠可以详细解释下。
那么 j=i+++i+++i+++i+++i+++i 结果为 i=6;j=6 做何解释?
哈哈 这个二叔还挺有脾气的撒~ 明白了! Thank u~

问题解答:

i+++i的意思是 i + i (此时i=1)
然后再i++
所以 i=2, j=2
i++是指先做完别的事再自身++
而++i是指先自身++,再做别的事
不信你试试++i+i,一楼说的“++的优先级高“
不完全对,二楼说的没错。嘿嘿,握个手吧。
英雄所见略同。给分吧。

补充:
j=i+++i+++i+++i+++i+++i是一个道理。
1. i++之前i=1所以把i++看作i
j=i+i+i+i+i+i=6
2. 计算完1.之后该执行i++
你自己数数有几个i++,5个对吧。
i=1,执行5次i++,i=6
你要是还不明白,就把电脑砸了吧。

后i++(从左到右结合)比前++i(从右到左结合)优先级高,而且++比+(相加)优先级高,编译器从左向右分析代码,尽量选择高优先级运算符,所以

i+++i = (i++)+i 而不是 i+(++i)
++i+i = (++i)+i 不存在歧义

++不仅仅是代码简化,i++和i=i+1编译后的汇编代码不尽相同,使用++效率更高,不过现在的编译器一般都会优化i=i+1

关于优先级最好使用括号()显示标明运算顺序,不要依赖运算符优先级,否则不同的编译器可能会有不同的结果

把j = i+++i;看成j = (i++)+i;

又是一个被国内C语言教材毒害的人啊

“j = i+++i; ”,这样的表达太让人费解了,不同的编译器的解释也不尽相同,建议不使用。考试也不大可能出现吧。

i++一般就用在把i=i+1;这样简单的式子里,是一种简化。
另外字符型指针也用的比较多,比如:

char c[10]="abcde";
char * p;
p=c;

int i=0;
while(*p++) //搞清楚*p++是怎么回事,比j = i+++i;更有实际意义,同样是优先级的问题。
{
i++;
}

cout<<"字符串中含有"<<i<<"个字符"<<endl;

把j = i+++i;看成j = (i++)+i;
i++是先使用再自增,于是j=1+1=2;后面输出j=2;
后面要输出i的时候,i在前面已经使用后完成自增1,故输出i=2;

热点新闻