#include<stdio.h>
int add(int,int);
main()
{
int a=2,b=3;
printf("%d %d %d",a,b,add(a,b));
getch();
}
int add(int a,int b)
{
int c;
c=a+b;
}
好的,这给了我输出2 3 5
..但是对于以下程序
#include<stdio.h>
int add(int,int);
main()
{
int a=2,b=3;
printf("%d %d %d",a,b,add(a,b));
getch();
}
int add(int a,int b)
{
int c;
c=a+b;
c=0;
}
仍然提供2 3 5
作为输出..因为我们没有return
语句最终语句c=0
没有初始化..它应该给2 3 0
但它正在给{仅限{1}}。
答案 0 :(得分:5)
这是未定义的行为,任何事情都可能发生,你不能依赖它。
可能发生的事情是,在函数add()
中,c
的值被计算,并留在堆栈中,在printf()
调用中,堆栈的特定地址是什么打印出来。同样,您不能依赖未定义的行为。
答案 1 :(得分:-1)
这是一个非常好的问题。
在函数add()中 表达
c=a+b;
评估在此表达式中,必须首先评估右侧。 因此它返回a + b的值,该值存储在返回寄存器中,该值最终存储在c中。
在下一个表达式
中c=0;
它只是将0的值初始化为c。 它不需要返回任何值。 所以返回寄存器的值仍然是5。