gpt4 book ai didi

C++ 指针和引用说明

转载 作者:行者123 更新时间:2023-11-30 00:59:33 25 4
gpt4 key购买 nike

这基本上只是为了帮助我更好地理解指针,所以如果你们能确认/否认/解释任何看起来我没有正确理解的东西,我将不胜感激。使用邮箱、阿姨、街道以及所有这些废话的例子简直令人困惑。

int a = 5;

int b = &a; // b will be the memory address of 'a'

int *c = a; // c will be the value of 'a' which is 5

int *d = &a; // d will be a pointer to the memory address of 'a'

int &e = a; // what would this be?


void FunctionA()
{
int a = 20;
FunctionB(&a);
// a is now 15?
}

void FunctionB(int *a)
{
a = 15;
}

谢谢你们的帮助,我只是想在我阅读的所有糟糕的隐喻解释之外提高我的理解。

最佳答案

我会一件一件地处理:

int b = &a; // b will be the memory address of 'a'

没有。编译器(可能)不允许这样做。您已将 b 定义为 int,但 &aint 的地址,因此初始化行不通。

int *c = a;

不——同样的问题,但相反。您已将 c 定义为指向 int 的指针,但您正在尝试使用 int 的 对其进行初始化。

int *d = &a;

是的——您已将 d 定义为指向 int 的指针,并且您正在将 int 的地址分配给它——没问题。 int(或 int 数组)的地址是指向 int 的指针。

int &e = a;

这将 e 定义为对 int 的引用,并将其初始化为对 a 的引用。这是完全合法的,但可能不是很有用。仅供引用,引用最常见的用途是作为函数参数(当然还有其他用途)。

void FunctionA() { int a = 20; FunctionB(&a); }
void FunctionB(int *a) { a = 15; }

要完成这项工作,您需要更改 FunctionB 中的分配:

void FunctionB(int *a) { *a = 15; }

实际上,您试图将一个 int 分配给一个指针,但这是行不通的。您需要将 int 分配给指针指向 atint 以更改调用函数中的值。

关于C++ 指针和引用说明,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4190727/

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