如何在c/c ++中获取指针的地址?

Tru*_*yen 26 c c++

如何在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)

  • 我尝试了 cout &lt;&lt; &amp;p 并收到错误。怎么事情没有那么简单呢? (2认同)

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)


Sad*_*que 5

&a给出地址a- &p给出地址p.

int * * p_to_p = &p;
Run Code Online (Sandbox Code Playgroud)