假设这段代码
int main(){
int i=0, j=0;
cout << i << " " << f1(&i,&j) << " " << j << endl;
cout << i << " " << j << endl;
}
int f1(int *i, int *j){
*i = 20;
*j = 30;
return 10;
}
结果是
20 10 0
20 30
我很困惑,为什么j在我正确显示20
时会为0 编辑:我已经阅读了序列点,但我仍然不确定如何解释这一点。我应该假设在评估f1之前首先评估j,因此j是0而i是20?答案 0 :(得分:2)
这件事:
cout << i << " " << f1(&i,&j) << " " << j << endl;
如果您从右到左考虑评估,j
最初是0
并打印出来。然后,f1
被调用,j
值更改为30
。
但是这种评估顺序是不可预测的