【发布时间】:2023-04-07 23:50:01
【问题描述】:
我发现我们可以使用%p 格式说明符打印指针值。 N15707.21.6.1(p8):
p 参数应该是一个指向 void 的指针。指针的值为 转换为一系列打印字符,在 实现定义的方式
由于指向 void 的指针可以转换为指向任何其他对象类型的指针,我很好奇是否需要手动转换。示例:
struct test_t{
int a;
}
void foo(){
struct test_t *test_ptr = malloc(sizeof(*test_ptr));
printf("Pointer test_ptr = %p\n", test_ptr);
}
这里我没有将它转换为void *,假设编译器为我做了这个。符合吗?或者我应该自己将这些指针转换为void *
printf("Pointer test_ptr = %p\n", (void *) test_ptr);
标准规定void * 的表示和对齐方式与char * 相同。未指定 void * 表示/对齐是否必须与任何对象类型相同。
【问题讨论】:
-
简短回答 - 是的,您需要强制转换为 void-pointer
标签: c pointers printf language-lawyer