C++数组通过引用传递,但如何理解这一点

C++ Array passed by reference, but how to understand this?

本文关键字:何理解 这一点 数组 引用 C++      更新时间:2023-10-16

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

但是,下面的代码在第 1 个cout中打印0 1,并在第 2 个"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;
}

若要确保编译器不会对执行进行重新排序,请执行以下操作:

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

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

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

相关文章: