Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 当我告诉printf打印一个变量时会发生什么?_C_Printf - Fatal编程技术网

C 当我告诉printf打印一个变量时会发生什么?

C 当我告诉printf打印一个变量时会发生什么?,c,printf,C,Printf,当我运行以下代码(在Eclipse上)时,会弹出一条消息,表明.exe已停止工作: #include <stdio.h> main () { int x; x = 1; printf(x); } 然而,我的问题是,当我以前一种方式编码时,“在那里”发生了什么。第一个参数是字符串 在C语言中,值“1”被推到堆栈上以调用printf。printf需要一个字符串,因此它开始将1视为地址 这会导致“停止工作”-当

当我运行以下代码(在Eclipse上)时,会弹出一条消息,表明.exe已停止工作:

    #include <stdio.h>

    main ()
    {
       int x;
       x = 1;

       printf(x);
    }
然而,我的问题是,当我以前一种方式编码时,“在那里”发生了什么。

第一个参数是字符串

在C语言中,值“1”被推到堆栈上以调用printf。printf需要一个字符串,因此它开始将1视为地址


这会导致“停止工作”-当它试图查看地址1处的字符时。

您的代码告诉
printf
在内存地址
1
处打印字符串


您可能无法访问该函数,因此它会崩溃。

从技术上讲,它不应该编译,但有关它为什么编译的一些信息,请参阅此处:在使用该函数之前阅读
printf()
)的文档()可能是个好主意。我投票将此问题作为离题来结束,因为我再次寻求对已确认UB的解释。谢谢。在到达地址区之前,我还有一段路要走,所以我会记住的。谢谢。在到达地址部分之前,我有一个特定的方法要走,所以我会记住这一点。
printf("%d", x);