C++ 数组通过引用传递,但是这个怎么理解呢?

标签 c++ arrays reference

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

相关文章:

c++ - unique_ptr 和 shared_ptr 的区别

c - 将二进制文件 fread 到动态分配的 C 数组中

javascript - MongoDB - 查找一组文档之间的共同值计数

c - 将函数中局部(函数内)变量的引用返回给调用者

java - WeakReference 如何影响这个程序的工作

c++ - 更改数组中的对象但不更改对象的数量 - C++

c++ - C++ << 和 >> 运算符慢吗?这些运算符有哪些替代方案?

c++ - 通过函数调用 C++ 中的线程更改对象属性

php - Laravel - 在 View 中显示存储在数据库的一行中的数组图像

PHP - 找不到 fatal error 类