#include <stdio.h>
int main(void)
{
int i=10;
printf("%p",i);
return 0;
}
输出: -林困惑关于%P符
0xa
%P - 我读%P是用来打印在printf的指针,但在这里我是一个整数,也没有指针声明如何“0xa”得到输出。
#include <stdio.h>
int main(void)
{
int i=10;
printf("%p",i);
return 0;
}
输出: -林困惑关于%P符
0xa
%P - 我读%P是用来打印在printf的指针,但在这里我是一个整数,也没有指针声明如何“0xa”得到输出。
您的代码的行为是undefined,因为%p
不适用于int
类型的适当格式说明符。
允许编译器做任何东西,其中包括优化您的代码到int main(){}
。
从技术上讲,这是未定义的行为,因为%p
是int
的错误格式说明符。
但是,如果你的平台是32位,然后%p
通常归结为印刷在大多数实现十六进制所提供的值,因此printf("%p", 10);
通常会打印在这些实现0xA
或0x0000000A
。
无论如何,不要使用不匹配的格式说明符,因为即使它看起来工作,它也会导致undefined behaviour。
输入错误,输出错误。一般来说,'printf'只打印你输入的内容。在这里你把一个整数,并打印这个整数。由于'%p'不是适用于整数的格式说明符,因此您也有未定义的行为 – Gerhardh
顺便说一句,恕我直言,问题没有错。写得很好,也是一个可编辑的例子。 – Bathsheba