我应该使用哪个格式说明符来打印变量的地址?我对下面这两个问题感到困惑。
%u -无符号整数
%x -十六进制值
%p - void指针
打印地址的最佳格式是什么?
发布于 2012-01-29 21:51:19
p
是打印指针的转换说明符。使用这个。
int a = 42;
printf("%p\n", (void *) &a);
请记住,省略类型转换是未定义的行为,使用p
转换说明符的打印是以实现定义的方式完成的。
发布于 2012-01-29 21:52:14
使用%p
来表示“指针”,不要使用其他任何*。标准并不保证你可以像对待任何特定类型的整数一样对待指针,所以你实际上会得到整数格式的未定义行为。(例如,%u
需要unsigned int
,但如果void*
的大小或对齐要求与unsigned int
不同,该怎么办?)
*)看Jonathan的好答案!除了%p
之外,您还可以使用C99中添加的<inttypes.h>
中特定于指针的宏。
在C中,所有对象指针都可以隐式转换为void*
,但为了将指针作为可变参数传递,您必须显式转换它(因为任意对象指针只能转换,但不等同于空指针):
printf("x lives at %p.\n", (void*)&x);
发布于 2012-01-29 23:49:55
作为其他(非常好的)答案的替代方案,您可以转换为uintptr_t
或intptr_t
(来自stdint.h
/inttypes.h
),并使用相应的整数转换说明符。这将在如何格式化指针方面提供更大的灵活性,但严格地说,不需要实现来提供这些typedefs。
https://stackoverflow.com/questions/9053658
复制相似问题