gpt4 book ai didi

C++ 通过引用交换值

转载 作者:行者123 更新时间:2023-11-27 22:32:21 27 4
gpt4 key购买 nike

我在考试中遇到了一个 C++ 代码片段,它非常令人困惑(至少对我而言)。我试图分析它,但有些东西我无法理解。代码如下:

#include <iostream>

using namespace std;

int* doMagic(int *p, int *q)
{
int* t = new int();
t = p;
p = q;
q = t;
return t;
}

int main()
{
int p = 5, q = 10;
int *t = NULL;
t = doMagic(&p, &q);
cout<<"p = "<<p<<endl;
cout<<"q = "<<q<<endl;
cout<<"t = "<<*t<<endl;
return 0;
}

输出是:

p = 5
q = 10
t = 5

现在我的问题是,当值通过引用传递给 doMagic 函数时,为什么不在其中交换值。

我们将不胜感激。

谢谢。

最佳答案

doMagic 中的变量pp 是函数的局部变量。对这些变量所做的任何更改都在函数本地进行。它们不会更改调用函数中的任何内容。

您可以将这些变量重命名为 xy 而无需更改函数的行为。这也将提醒您,main 中的名称和 doMagic 中的名称是分开且独立的。

您可以通过交换指针指向的对象的值来交换 doMagic 中的值:

void doMagic(int *p, int *q)
{
int t = *p;
*p = *q;
*q = t;
}

虽然 C++ 习惯上使用引用更好

void doMagic(int& p, int& q)
{
int t = p;
p = q;
q = t;
}

然后,该函数可以从 main 调用为:

doMagic(p, q);

话虽如此,如果您不打算在该函数中做更多的事情,您应该改用 std::swap。在用户空间中定义一个复制标准库函数功能的函数没有任何好处。

关于C++ 通过引用交换值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59379759/

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