C ++数组通过引用传递,但如何理解呢?

时间:2013-10-07 18:49:36

标签: c++ arrays reference

数组通过引用传递。函数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;
}

1 个答案:

答案 0 :(得分:3)

确保编译器不对执行重新排序:

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

打印1然后打印2。

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