数组通过引用传递。在函数 changeArray
中对数组所做的任何更改都将在调用范围(此处为 main
函数)中观察到。
然而,下面的代码在第一个 cout
中打印 0 1
,并在第二个“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
首先被调用,您需要将表达式拆分为单独的语句,例如通过使用分号 ( ;
)。分号之前的所有内容都在分号之后的任何内容开始之前执行。
关于C++ 数组通过引用传递,但是这个怎么理解呢?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19232329/