求高手解答C++入门问题!!!
例1:a=1;c=(a++)+(a++);执行后,c的值为2,而a的值为3例2:a=1;b=1;c=(++a)+(a++)+(b*=a++)+(a*=2)+(a*=a++...
例1:a = 1; c = ( a++ ) + ( a++ );执行后,c的值为2,而a的值为3
例2:a = 1; b = 1; c = ( ++a ) + ( a++ ) + ( b *= a++ ) + ( a *= 2 ) + ( a *= a++ );
执行时,先分配临时内存,然后由于5个“()”,其计算顺序是从左向右,
计算++a的值,返回增一后的a的地址,a的值为2
计算a++的值,返回临时内存的地址,a的值仍为2
计算b *= a++中的a++,返回临时内存的地址,a的值仍为2
计算b *= a++中的“*=”,将a的值写入临时内存,计算得b的值为2,返回b的地址
计算a *= 2的值,返回a的地址,a的值为4
计算a *= a++中的a++,返回临时内存的地址,a的值仍为4
计算a *= a++中的“*=”,将a的值写入临时内存,返回a的地址,a的值为16
计算剩下的“+”,为了进行计算,将a的值写入临时内存,得值16 + 16 + 2 + 16 + 16为66,写入c中
计算三个a++欠下的加一,a最后变为19.
例2我看懂了,但是按照例2的计算,例1中a的值应该是2,c的值应该是3啊,求解!!! 展开
例2:a = 1; b = 1; c = ( ++a ) + ( a++ ) + ( b *= a++ ) + ( a *= 2 ) + ( a *= a++ );
执行时,先分配临时内存,然后由于5个“()”,其计算顺序是从左向右,
计算++a的值,返回增一后的a的地址,a的值为2
计算a++的值,返回临时内存的地址,a的值仍为2
计算b *= a++中的a++,返回临时内存的地址,a的值仍为2
计算b *= a++中的“*=”,将a的值写入临时内存,计算得b的值为2,返回b的地址
计算a *= 2的值,返回a的地址,a的值为4
计算a *= a++中的a++,返回临时内存的地址,a的值仍为4
计算a *= a++中的“*=”,将a的值写入临时内存,返回a的地址,a的值为16
计算剩下的“+”,为了进行计算,将a的值写入临时内存,得值16 + 16 + 2 + 16 + 16为66,写入c中
计算三个a++欠下的加一,a最后变为19.
例2我看懂了,但是按照例2的计算,例1中a的值应该是2,c的值应该是3啊,求解!!! 展开
1个回答
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询