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
?
答案 0 :(得分:10)
C标准针对%p
系列功能的printf
格式说明符进行了说明(第7.21.6.2节,第12段)
相应的参数应为指向void的指针。
除void *
和char *
指针(保证大小相同)之外,指向不同类型的指针的内部表示形式可能有所不同。但是,任何对象指针类型都可以转换为void *
。因此,为确保%p
正确处理了所有printf
变量,它们必须为void *
。