任何人都可以告诉我为什么会发生这种情况

时间:2017-09-02 15:35:25

标签: c

#include <stdio.h>
 //Compiler version gcc 6.3.0

 int main(void)
 {

     int a=10;
    printf("%d"+1,a);

    return 0;
 }

输出。 --- d

#include <stdio.h>
 //Compiler version gcc 6.3.0

 int main(void)
 {

    #include <stdio.h>
 //Compiler version gcc 6.3.0

 int main(void)
 {

     int a=10;
    printf("%d"+36,a);

    return 0;
 }

输出。 --- p

解释为什么会发生这种情况......每当我改变+1的值时,它会打印出不同的输出......

1 个答案:

答案 0 :(得分:5)

代码的行为未定义。

"%d"+1实际上是在const char*指针中添加1(文字"%d"会在某些情况下衰减为const char*指针),实际上会将您带到{ {1}}在该字符串文字中!因此d格式化程序不适合您的参数。

printf确实会做一些非常糟糕的事情,因为你从"%d"+36

开始就不拥有36个记忆位置

你的意思不是"%d"&amp; c。?

最后,平均值是printf("%d", a + 1);?你的意思不是Int