我正在尝试使用以下代码返回指针的地址:
#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&lt;&lt; p&lt;&lt; endl”和“cout&lt;&lt;&amp; p&lt;&lt; endl”都显示0x28fea8,如果该行留下评论?
不管其他行,不应该“cout&lt;&lt;&amp; p&lt;&lt; endl”显示0x28fea4?
如果有帮助,我正在使用Qt Creator作为我的编译器/ ide。我从以下链接下载了我的编译器:http://web.stanford.edu/~rawatson/qt/windows_install/index.html
编辑:好吧,我有多傻。我的问题是我通过更改值来比较地址,然后重新运行程序。相反,我应该通过在一个程序运行中打印它们进行比较。当我在一个程序中进行比较时,我得到p和&amp; p的不同地址,应该是。答案 0 :(得分:2)
我无法使用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位架构上是正确的,因为它们是在堆栈上分配的。
答案 1 :(得分:1)
int x = 5;
int *p = &x; // b stores addres of variabile a
cout << "Adress of x is : " << p <<endl; // printing the adress of a
cout << "Value of x is : " << *p << endl; // printing the variabile stores in a
int **pp = &p; // pp stores thea adress of p
cout <<"Adress of p is" << pp << endl; //printing the adress of p
cout << "Adress of x is" <<*pp << endl; //printing the adress of x
return 0;
我希望这些评论可以解决您的问题。