gpt4 book ai didi

c++ - 使用增量运算符按引用传递

转载 作者:太空狗 更新时间:2023-10-29 20:08:55 25 4
gpt4 key购买 nike

大家好,我在学习用 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;
}

为什么我两次都得到 10 分?但是,如果我将函数更改为:

     void MyIncr (float *x) {
*x += 1;
}

旧值得到 10,新值得到 11,这也是我在前一个案例中所期望的。

最佳答案

 void MyIncr (float *x) {
*++x;
}

在此上下文中是未定义的行为。您首先递增指针,然后取消引用它。当指针递增时,它不再指向有效的 float 对象。因此,取消引用它是未定义的行为。

在调用方,指针或指针指向的对象的值没有任何变化。要增加指针指向的对象的值,请使用 ++(*x)

 void MyIncr (float *x) {
++(*x);
}

通过引用传递对象会更好。困惑会减少。

 void MyIncr (float& x) {
++x;
}

关于c++ - 使用增量运算符按引用传递,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51270351/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com