#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?
答案 0 :(得分:0)
将参数传递给不接受参数的函数是Undefined Bihaviour。如果您尝试将b()
定义更改为以下内容,则会生成错误,因为它不接受任何参数:Live Demo
void b(void)
{
int x;
printf("%d",x);
}
很明显,它不会打印5
:Live 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());