m++和++m在表达式中的计算问题
我的问题是关于 m++和++m在表达式中的计算问题,代码如下:
程序代码:
#include <stdio.h> int main() { int a=2,x=2,p,q; p=(a++)+(a++); q=(++x)+(++x); printf("a=%d,x=%d,p=%d,q=%d\n",a,x,p,q); return 0; }编译运行结果为:
我现在是这么理解的:
(1)书上写m++这个表达式的结果是m+1以前的结果,副作用是使m+1; ++m这个表达式的结果是m+1以后的结果(当然m也+1);
(2)对于p=(a++)+(a++)这个式子,
第一个 a++的结果是2,之后a+1,a变为3;
第二个 a++就是在a=3的基础上计算,a++的结果是3,之后a+1变为4;
所以 对于a=4,p=5 我是理解的。(当然有可能理解的不对,结果碰巧对了,这里也需要请大家指导);
(3)对于q=(++x)+(++x)这个式子,
第一个 ++x的结果是x+1以后的结果,即3,同时x变为3;
第二个 ++x的结果以x=3为基础,所以 ++x是4,同时x也等于4;
按照这种理解,x=4, q=7. 这与编译运行的结果不一致,编译运行后q实际为8.
所以,对于 m++, ++m这种表达式在运算过程中到底是怎么个顺序呢?