我对%p说明符很困惑

时间:2017-06-20 09:46:21

标签: c pointers

  #include <stdio.h>

    int main(void) 
    {

       int i=10;
       printf("%p",i);
       return 0;
    }

输出: -

0xa

%p - 我读过%p用于在printf中打印指针,但是这里我是一个整数,也没有声明指针所以&#34; 0xa&#34;获得输出。

2 个答案:

答案 0 :(得分:4)

您的代码的行为是未定义,因为%p不是int类型的合适格式说明符。

允许编译器执行任何,其中包括将代码优化为int main(){}

答案 1 :(得分:2)

从技术上讲,它是未定义的行为,因为%pint的错误格式说明符。

但是如果您的平台是32位,那么%p通常归结为在大多数实现中以十六进制打印提供的值,因此printf("%p", 10);通常会打印0xA0x0000000A关于这些实现。

无论如何,不​​要使用不匹配的格式说明符,因为即使它似乎有用,也会产生undefined behaviour