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