0

数组通过引用传递。函数内对数组所做的任何更改都changeArray将在调用范围(main此处的函数)中观察到。

但是,下面的代码0 1在第 1个cout打印,并2在第 2 个“cout”打印。我不明白的是,为什么第一个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;
}
4

1 回答 1

3

为了确保编译器不会重新排序执行:

cout << array[0] << endl;
changeArray(array);
cout << array[0] << endl;

这会打印 1,然后打印 2。

C++ 编译器可以通过在单个表达式中重新排序代码的执行来优化代码(例如cout << changeArray(array) << " " << array[0] << endl)。为避免这种情况,并确保changeArray首先被调用,您需要将表达式拆分为单独的语句,例如使用分号 ( ;)。分号之前的所有内容都会在分号之后的任何内容开始之前执行。

于 2013-10-07T18:53:43.937 回答