首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >打印指针或地址的格式说明符是否正确?

打印指针或地址的格式说明符是否正确?
EN

Stack Overflow用户
提问于 2012-01-29 21:49:58
回答 4查看 353K关注 0票数 230

我应该使用哪个格式说明符来打印变量的地址?我对下面这两个问题感到困惑。

%u -无符号整数

%x -十六进制值

%p - void指针

打印地址的最佳格式是什么?

EN

回答 4

Stack Overflow用户

发布于 2012-01-29 21:51:19

p是打印指针的转换说明符。使用这个。

int a = 42;

printf("%p\n", (void *) &a);

请记住,省略类型转换是未定义的行为,使用p转换说明符的打印是以实现定义的方式完成的。

票数 61
EN

Stack Overflow用户

发布于 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);
票数 33
EN

Stack Overflow用户

发布于 2012-01-29 23:49:55

作为其他(非常好的)答案的替代方案,您可以转换为uintptr_tintptr_t (来自stdint.h/inttypes.h),并使用相应的整数转换说明符。这将在如何格式化指针方面提供更大的灵活性,但严格地说,不需要实现来提供这些typedefs。

票数 9
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9053658

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档