gpt4 book ai didi

c++ - 为什么我在赋值后得到不同的指针值?

转载 作者:太空狗 更新时间:2023-10-29 23:43:16 26 4
gpt4 key购买 nike

所以我目前正在学习 C++ 并试图掌握数组和指针之间的关系。下面的代码显示了我所做的分配。

int A[4] = {20, 30, 40, 50};
int p = A[0];
int* q = &p;

现在,如果我打印出指针值,我会得到:

A == 0x7ffda1cb1ea0
&A == 0x7ffda1cb1ea0
&A[0] == 0x7ffda1cb1ea0
&p == 0x7ffda1cb1e94
q == 0x7ffda1cb1e94
&q == 0x7ffda1cb1e98

我真的不明白为什么 &A[0] 和 &p 的值不同,即使赋值是 p = A[0]。我也不明白为什么 q 和 &q 之间只有 4 个字节,即使 q 的大小显示为 8。任何帮助将不胜感激。

最佳答案

I don't really understand why the values for &A[0] and &p are different

它们在内存中是不同的对象,所以有不同的地址。 A[4] 是一个对象,p 是另一个对象,q 是另一个对象。赋值使它们具有相同的值,但它们仍然是两个不同的对象。您可以删除分配,结果将相同。

I also don't understand how there are only 4 bytes between q and &q, even though the size of q is shown as 8

q 设置为p 的地址,&p 为您提供q 的地址。 4 的结果是有道理的,因为这就是 p 的大小。这就是为什么 qp 之后出现 4 的原因,因为 p 占用 4 字节。


如果你用引用尝试同样的事情,也许会更清楚:

int A[4] = { 20, 30, 40, 50 };
int &p = A[0]; // note the "&", this makes p a reference
std::cout << "&A[0]: " << &A[0] << std::endl << "&p: " << &p << std::endl;

对我来说,这会导致:

&A[0]: 008FFD90
&p: 008FFD90

现在 p 不是可以保存数据拷贝的单独对象,而是对同一位置的实际引用。

关于c++ - 为什么我在赋值后得到不同的指针值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55358215/

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