gpt4 book ai didi

c++ - 有人可以解释在 C++ 中通过指针传递和通过引用传递的目的是什么吗?

转载 作者:行者123 更新时间:2023-11-28 01:13:59 24 4
gpt4 key购买 nike

我只是不明白为什么我应该使用它们而不是变量。

例如,有人可以解释为什么这不起作用吗:

void swap(int x, int y) {
int z = x;
x = y;
y = z;
}

int main() {
int x, y;
x = 5, y = 4;
swap(x, y);
cout << x << " " << y;
}

但是这样做:

void swap(int *x, int *y) {
int z = *x;
*x = *y;
*y = z;
}

int main() {
int x, y;
x = 5, y = 4;
swap(&x, &y);
cout << x << " " << y;
}

最佳答案

在您提供的第一个示例中,您按值传递参数,这会在内存中创建变量的拷贝,并且该函数会在该拷贝上运行。这意味着 x 和 y 的原始值不会被修改,只有它们的拷贝才会被修改。当函数结束时,拷贝被销毁,原始值保持不变。

在第二个示例中,您传入了一个指针,该指针只是“指向”存储变量 x 和 y 的内存。当您取消引用(* 运算符)指针时,您可以像使用任何其他变量一样使用该变量,这意味着:

*x = *y;

您实际上是将内存地址 x 处的变量设置为内存地址 y 处变量的值。与第一个代码片段不同,这会全局更改变量的值。

简而言之,按值传递会创建 x 的拷贝供您使用。函数完成后 x 被销毁,原始 x 变量保持不变。通过指针或引用传递意味着您传递存储 x 的位置,然后访问 x 变量。当函数结束时,x 保持修改状态。

它们为什么存在?
简而言之,将指针传递给大型对象很有用,因为创建具有大量内存占用的类或结构的拷贝非常慢。

什么时候应该按值传递
当您只是想要数据的拷贝而不是修改原始数据时,通常是因为修改原始数据是不必要的或对应用程序有害。

什么时候应该通过引用传递
当您想在函数内修改变量的原始值时。

什么时候应该使用指针?
当您想修改内存中的变量或将一个全新的变量分配给该内存地址时。

关于c++ - 有人可以解释在 C++ 中通过指针传递和通过引用传递的目的是什么吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59342089/

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