gpt4 book ai didi

c++ - 返回指针的地址

转载 作者:行者123 更新时间:2023-11-28 00:12:14 30 4
gpt4 key购买 nike

我正在尝试使用以下代码返回指针的地址:

#include <iostream>
using namespace std;

int main(){
int x = 5;
int *p = &x;
//int **pp = &p;
cout << &p << endl;
return 0;
}

然而,打印出来的是 0x28fea8,它与 x 本身的地址相同。现在,如果我取消注释上面唯一的注释行并保留其他所有内容,那么打印的是 0x28fea4,这似乎是指针的正确地址。

我的问题是为什么我需要未注释的行来显示指针的正确地址?

为什么“cout << p << endl”和“cout << &p << endl”都显示 0x28fea8,如果该行留下注释?

“cout << &p << endl”不应该显示 0x28fea4 而不管另一行吗?

如果有帮助,我正在使用 Qt Creator 作为我的编译器/ide。我从以下链接下载了我的编译器:http://web.stanford.edu/~rawatson/qt/windows_install/index.html

编辑:好吧,我真傻。我的问题是我通过更改值然后重新运行程序来比较地址。相反,我应该通过在一个程序运行中打印它们来进行比较。当我在一个程序中进行比较时,我得到了 p 和 &p 的不同地址,这是应该的。

最佳答案

我无法使用 this 重现您所说的内容代码:

#include <cstdio>
using namespace std;

int main() {
int x = 5;
int* p = &x;

printf("x address: %p\n", &x);
printf("p value: %p\n", p);
printf("p address: %p\n", &p);

return 0;
}

我得到以下输出:

x address: 0xbfd6bba8
p value: 0xbfd6bba8
p address: 0xbfd6bbac

这是正确的,实际上 &p&x+4 这在 32 位架构上是正确的,因为它们是在堆栈上分配的。

关于c++ - 返回指针的地址,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32425529/

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