为什么将参数的结果复制到局部变量?

时间:2014-01-02 06:54:40

标签: c output

   #include <stdio.h>
   #include <conio.h>

   int a();

   void b();

   int main()
   {
       b(a());
       return 0;
   }
   int a()
   {
       return 5;
   } 
   void b()
   {
        int   x;
        printf("%d",x);
   }

'x'不是函数b的参数,那么为什么函数a的结果与x复制? 为什么这个程序的输出是5?

2 个答案:

答案 0 :(得分:0)

将参数传递给不接受参数的函数是Undefined Bihaviour。如果您尝试将b()定义更改为以下内容,则会生成错误,因为它不接受任何参数:Live Demo

void b(void)
{
    int   x;
    printf("%d",x);
}

很明显,它不会打印5Live Demo

当您的函数b()调用printf时,它将打印存储在变量x分配的地址中的值。而且,由于你没有对x进行inisial化,并且你在调用b()期间没有改变它的价值,它会打印任何东西。它只是偶尔打印5在你的情况下。

答案 1 :(得分:0)

您正在打印的变量未初始化。因此它可能会打印5,但也可能打印其他内容。

由于

,此问题也与C/C++: Calling function with no arguments with function which returns nothing有些相关
b(a());