指针变量的打印地址问题

img

        int a=520;
    int *p;p=&a;
    printf("%d %d\n",a,*p); 
    printf("%p %d\n",a,p);
    printf("%p %p",p,*p);

我的之前的理解:p是一个指针变量,他存储着a的地址,所以输出a的%p和输出p的%d在数值上是相等的,p的%p就是p变量的本身的地址。
可是从结果来看,p的%d和p的%p是一样的,这是不是代表着p的%p是a变量的地址,如果是这样,那么指针变量p的地址怎么获取?

指针变量本身没有地址,只有指向具体的数据地址才有效的!因此& a和p是一样的!

指针变量p的地址得用 &p 获取
p是一个指向a的指针,它的值是a的地址。
而它自己的地址,则是指针的指针,也就是再取指针运算

这么写,"%p", &p 即是p 的地址。供参考:

#include <stdio.h>
int main()
{
    int a=520;
    int *p;
    p=&a;
    printf("%d %d\n",a,*p); 
    printf("%p %p\n",&a,p);
    printf("%p %p",p,&p);
}

img

不知道你这个问题是否已经解决, 如果还没有解决的话:

如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^