最近遇到一个郁闷的问题:
先看下一个程序:
int a[]={1,2,3,4},*p;
p = a;
printf("%d %d %d",*p,*(p++),*(++p));
如果在vc下你会发现结果是2 2 2,如果是gcc你会发现是3 2 2;
printf的实现是参数从右边开始计算,但是vc的实现你会发现*p和*p++的结果是一样的,我猜测的一种解释是p++会在整个语句结束才开始计算,而不是马上计算。
如果把printf改成 cout<<*p<<*p++<<*(++p)<<endl;
在vc下是3 2 2,在gcc下是1 1 3;解释如下:vc是从右向左计算,而gcc是从左往右将参数压入程序栈,计算顺序也就是从左往右了。