为什么在printf中使用指针时会将其转换为(void*)p?

Kai*_*Kai 6 c

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

printf ("Address of x: %p\n", p);
printf ("Address of x: %p\n", (void*)p);
Run Code Online (Sandbox Code Playgroud)

谁能告诉我究竟(void*)p意味着什么?我知道它是一样的p,因为它也给了我地址x,但为什么写的是(void*)p

Gov*_*mar 10

C标准%p说明了printf家庭功能的格式说明符(第7.21.6.2节,第12段)

相应的参数应该是指向void的指针.

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