返回指针的地址

时间:2015-09-06 16:05:54

标签: c++ pointers

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

#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的不同地址,应该是。

2 个答案:

答案 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;

我希望这些评论可以解决您的问题。