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

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

例如:我有以下代码。

int a =10; int *p = &a; 

那我怎么得到指针p地址呢? 现在我要打印p的地址,我该怎么办?

print(“%s”,???)我传递给???。

要获取p的地址,请执行以下操作:

 int **pp = &p; 

你可以继续:

 int ***ppp = &pp; int ****pppp = &ppp; ... 

或者,仅在C ++ 11中,您可以:

 auto pp = std::addressof(p); 

要在C中打印地址,大多数编译器都支持%p ,因此您只需执行以下操作:

 printf("addr: %p", pp); 

否则你需要投射它(假设一个32位平台)

 printf("addr: 0x%u", (unsigned)pp); 

在C ++中,您可以:

 cout << "addr: " << pp; 
 int a = 10; 

要获取a的地址,你可以: &a (地址a )返回一个int* (指向int的指针)

 int *p = &a; 

然后存储一个int*类型的地址。

最后,如果你这样做&p你得到的是p的类型为int**的地址,即指向int的指针:

 int** p_ptr = &p; 

刚看到你的编辑:

要打印出指针的地址,你需要转换它:

 printf("address of pointer is: 0x%0X\n", (unsigned)&p); printf("address of pointer to pointer is: 0x%0X\n", (unsigned)&p_ptr); 

或者如果你的printf支持它,请使用%p

 printf("address of pointer is: %p\n", p); printf("address of pointer to pointer is: %p\n", p_ptr); 

&a给出地址 – &p给出地址p

 int * * p_to_p = &p; 

您可以使用%p格式化程序。 在打印之前,最好将指针展开为void*

C标准说:

参数应该是指向void的指针。 指针的值以实现定义的方式转换为打印字符序列。

这是你如何做到的:

 printf("%p", (void*)p); 

您可以在C中使用%p

在C:

 printf("%p",p) 

在C ++中:

 cout<<"Address of pointer p is: "< 

你可以用它

在C.

 int a =10; int *p = &a; int **pp = &p; printf("%u",&p); 

在C ++中

 cout< 

有这个C源:

 int a = 10; int * ptr = &a; 

用这个

 printf("The address of ptr is %p\n", (void *) &ptr); 

打印ptr的地址。

请注意,转换说明符p是唯一用于打印指针值的转换说明符它被定义为仅与void*类型指针一起使用。

来自man printf

p

void * pointer参数以hex打印(就像% #x或% #lx一样 )。