gpt4 book ai didi

c - 指针与引用与常规按值传递 C++

转载 作者:太空宇宙 更新时间:2023-11-04 05:08:24 24 4
gpt4 key购买 nike

回答前请阅读。我不想让你为我陈述显而易见的事情。谢谢:D

我试图区分指针和按值传递。我想我理解它们,但我正在阅读的源代码不清楚的一件事是传递指针和按值传递之间的区别。考虑以下...

andy = 25;
fred = andy;
ted = &andy;

第一行将值 25 传递给 andy。第二行将 andy 的值传递给 fred。现在 fred 的值为 25。第三行传递对 ted 的引用。现在ted保存的是andy的内存地址,保存的是25的值。现在看下一段代码

andy = 25;
fred = andy;
ted = &andy;
joe = *andy;

除了我们将 andy 的指针传递给 joe 之外,上面的代码看起来就像第一个片段。现在 joe 持有 25 的指针值。这看起来几乎和刚刚做的一样 (joe = andy)。没有 *

传递指针值与仅按值传递有什么区别???

在我的解释中,如果稍后我决定更改 andy/的值,与我只是按值传递相比,它不会受到影响,那么 joe 的指针值似乎仍然受到影响。

据我所知,按引用传递和按指针传递之间的唯一区别是一个保存地址,另一个保存该地址内的值。如果持有该值引用的任何变量决定更改它,它仍然可以更改。如果是这样的话,引用传递和值传递的意义何在?

这是我正在阅读的链接

http://www.cplusplus.com/doc/tutorial/pointers/

谢谢大家!!!

最佳答案

您所说的与按引用传递或按值传递无关。这些术语仅指进行函数调用时参数发生的情况。典型的例子是 swap() 函数。这个函数:

void swap(int a, int b)
{
int t = a;
a = b;
b = tmp;
}

什么都不做;如果你调用它,参数不会被交换,因为它们是按值传递的。如果您使它们按引用传递(在 C++ 中)或您传递指针(在 C 或 C++ 中),它将执行您想要的操作:

void swap(int *a, int *b)
{
int t = *a;
*a = *b;
*b = t;
}

或仅在 C++ 中,

void swap(int &a, int &b)
{
int t = a;
a = b;
b = a;
}

按引用传递版本的优点是可以保证获得良好的引用。第一个示例,如果您传递了错误的指针,将使您的程序崩溃。

关于c - 指针与引用与常规按值传递 C++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2308368/

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