如何在c/c ++中获取指针的地址?
例如:我有以下代码.
int a =10;
int *p = &a;
Run Code Online (Sandbox Code Playgroud)
那我怎么得到指针的地址p
?现在我要打印p的地址,我该怎么办?
print("%s",???)我传递给???.
Log*_*orn 64
要获取p的地址:
int **pp = &p;
Run Code Online (Sandbox Code Playgroud)
你可以继续:
int ***ppp = &pp;
int ****pppp = &ppp;
...
Run Code Online (Sandbox Code Playgroud)
或者,只有在C++ 11中,您才能:
auto pp = std::addressof(p);
Run Code Online (Sandbox Code Playgroud)
要在C中打印地址,大多数编译器都支持%p
,因此您可以简单地执行以下操作:
printf("addr: %p", pp);
Run Code Online (Sandbox Code Playgroud)
否则你需要投射它(假设一个32位平台)
printf("addr: 0x%u", (unsigned)pp);
Run Code Online (Sandbox Code Playgroud)
在C++中,您可以:
cout << "addr: " << pp;
Run Code Online (Sandbox Code Playgroud)
zmo*_*zmo 18
int a = 10;
Run Code Online (Sandbox Code Playgroud)
要获取a的地址,你可以:( &a
地址a
)返回一个int*
(指向int的指针)
int *p = &a;
Run Code Online (Sandbox Code Playgroud)
然后存储p
其中类型的地址int*
.
最后,如果你&p
得到的地址p
是类型int**
,即指向int的指针:
int** p_ptr = &p;
Run Code Online (Sandbox Code Playgroud)
刚看到你的编辑:
要打印出指针的地址,你需要转换它:
printf("address of pointer is: 0x%0X\n", (unsigned)&p);
printf("address of pointer to pointer is: 0x%0X\n", (unsigned)&p_ptr);
Run Code Online (Sandbox Code Playgroud)
或者如果你的printf支持它,请使用%p
:
printf("address of pointer is: %p\n", p);
printf("address of pointer to pointer is: %p\n", p_ptr);
Run Code Online (Sandbox Code Playgroud)