为什么在printf中使用指针时强制转换为(void *)p?

时间:2019-02-08 18:11:01

标签: c

char  x = 'G';
char *p = &x;

printf ("Address of x: %p\n", p);
printf ("Address of x: %p\n", (void*)p);

有人可以告诉我(void*)p的确切含义吗?我知道它与p相同,因为它也给了我x的地址,但是为什么将其写为(void*)p

1 个答案:

答案 0 :(得分:10)

C标准针对%p系列功能的printf格式说明符进行了说明(第7.21.6.2节,第12段)

  

相应的参数应为指向void的指针。

void *char *指针(保证大小相同)之外,指向不同类型的指针的内部表示形式可能有所不同。但是,任何对象指针类型都可以转换为void *。因此,为确保%p正确处理了所有printf变量,它们必须为void *