C++数组通过引用传递,但如何理解这一点
C++ Array passed by reference, but how to understand this?
数组通过引用传递。在函数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
,您需要将表达式拆分为单独的语句,例如使用分号 ( ;
(。分号之前的所有内容都会在分号之后的任何内容开始之前执行。
相关文章:
- 理解这行C++指针代码
- 这是什么类型的C++语法,我应该采取什么步骤来理解这一点
- 我无法理解这一点,有人可以帮我解释一下吗?
- 结构本身就包含在内.如何理解这一点?
- 只需要知道我在c ++中打印模式的方式是否有效,或者有另一种方法可以有效地做到这一点
- 我可以直接为指针分配地址吗?如果是,如何做到这一点
- 理解这行代码的作用
- Stroustrup的C++书挑战赛,有人可以帮助我理解这段代码吗?
- 请证明这一点的合理性 C++.
- 为什么要按值传递string_view?为什么Visual Studio不能优化这一点?
- [expr.unary.op]/9 似乎暗示"运算符!()' 不能应用于下面的类型 A.但编译器不同意这一点
- 为什么我有一个无限循环,我如何以不同的方式做到这一点
- 我无法完全理解这段代码来检查一个完美的正方形
- 我想使用 CMake 生成和编译 Visual Studio projet,我需要从构建中排除单元测试文件。有没有办法做到这一点?
- 所有版本的 GCC 都与默认成员初始值设定项作斗争,该初始值设定项捕获了这一点,并结合了继承的构造函数
- 如果有条件使用String.length()的条件,为什么不一致地评估这一点
- 对随机序列进行降采样会降低随机性吗?有没有原理/定理来证明这一点?
- 在C++有没有更好的方法可以做到这一点?检查哪些数字满足条件 [A*B*C = A! + B! + C!]
- 4.5年应该是4年零178年,我如何在C 中做到这一点
- C++数组通过引用传递,但如何理解这一点