【发布时间】:2018-12-18 14:26:38
【问题描述】:
大家好,我在学习 C++ 编码时有一个非常基本的问题。
我正在阅读有关按引用传递和按值传递之间的区别。我写了一个简单的代码来测试它,但它做了一些我没想到的事情。
#include <iostream>
using namespace std;
void MyIncr (float *x);
int main() {
float score = 10.0;
cout << "Orignal Value = " << score << endl;
MyIncr(&score);
cout << "New Value = " << score << endl;
}
void MyIncr (float *x) {
*++x;
}
我怎么两个 couts 都得到 10?但是,如果我将函数更改为:
void MyIncr (float *x) {
*x += 1;
}
我得到 10 的旧值和 11 的新值,这也是我在前一种情况下所期望的。
【问题讨论】:
-
这不是“按引用传递”,而是“按值传递指针”。通过引用传递将是
void MyIncr (float & x); -
另外
*++x;不会增加指向的值 - 它首先将指针增加 1,然后取消引用它(调用 未定义的行为) -
*x++ 是否也是未定义的行为?
-
@Ali 是的;您正在递增指针,然后取消引用它。
标签: c++ pass-by-reference pre-increment