#include <stdio.h>
int main(void)
{
int i=10;
printf("%p",i);
return 0;
}
输出: -
0xa
%p - 我读过%p用于在printf中打印指针,但是这里我是一个整数,也没有声明指针所以&#34; 0xa&#34;获得输出。
答案 0 :(得分:4)
您的代码的行为是未定义,因为%p
不是int
类型的合适格式说明符。
允许编译器执行任何,其中包括将代码优化为int main(){}
。
答案 1 :(得分:2)
从技术上讲,它是未定义的行为,因为%p
是int
的错误格式说明符。
但是如果您的平台是32位,那么%p
通常归结为在大多数实现中以十六进制打印提供的值,因此printf("%p", 10);
通常会打印0xA
或0x0000000A
关于这些实现。
无论如何,不要使用不匹配的格式说明符,因为即使它似乎有用,也会产生undefined behaviour。