数组通过引用传递。函数changeArray
中对数组所做的任何更改都将在调用范围(此处为main
函数)中观察到。
然而,以下代码在第一个0 1
中打印cout
,在第二个“cout”中打印2
。我不明白的是,为什么第一个cout
打印array[0]=1
的原始值而不是array[0]=2
的更改值?
非常感谢。
#include <iostream>
using namespace std;
int changeArray(int array[]) {
array[0]=2*array[0];
return 0;
}
int main() {
int array[]={1,2,3,4};
cout << changeArray(array) << " " << array[0] << endl;
cout << array[0] << endl;
return 0;
}
答案 0 :(得分:3)
确保编译器不对执行重新排序:
cout << array[0] << endl;
changeArray(array);
cout << array[0] << endl;
打印1然后打印2。
允许C ++编译器通过在单个表达式中重新排序代码的执行来优化代码(例如cout << changeArray(array) << " " << array[0] << endl
)。为避免这种情况,并确保首先调用changeArray
,您需要将表达式拆分为单独的语句,例如使用分号(;
)。在分号开始之后,分号之前的所有内容都会在分号之前执行。