例如,
int a = 6;
printf("%p", &a);
这会打印右边指针的地址吗? 但如果我们打印没有&?
怎么办?int a = 6;
printf("%p", a);
有人可以告诉我它打印出来的东西吗?
答案 0 :(得分:2)
根据C标准,向printf()
发送错误的匹配类型参数是未定义的行为。并int
!= void *
,因此未定义的行为。
除非在以下详细说明中另有明确说明,否则以下每个陈述都适用:如果函数的参数具有无效值(例如函数域外的值,或者地址空间外的指针)程序,或空指针,或指向不可修改的存储的指针,当相应的参数不是const限定的)或类型(提升后)不具有可变数量的参数的函数,行为是未定义的。< / p>
顺便说一下,你应该写printf("%p", (void *)&a);
warning: format specifies type 'void *' but the argument has type 'int *' [-Wformat-pedantic]
printf("%p", &a);
~~ ^~
答案 1 :(得分:2)