我真的想知道为什么输出是:在以下代码中是12而不是9:
#include <stdio.h>
int a = 4, b = 2;
int c = 3;
int f(void);
int main(void) {
printf("%3d\n", f());
printf("%3d%3d%3d\n", a, b, c);
return 0;
}
int f(void) {
int b, c;
a = b = c = 4;
return (a + b + c);
}
我的意思是,由于b和c局部变量在函数返回时像在f函数中一样被初始化,因此它们不再存在,因此不应返回。有人可以解释吗?
int k(void) {
int d = 5;
return d;
}
就像k函数什么都不返回,对吧?
答案 0 :(得分:1)
您使函数f
返回a
,b
和c
的“值”之和,而不是变量本身。通过在函数b
中声明由c
和f
命名的变量,全局变量b
和c
被局部变量所遮盖,因此所有更改(如分配4就像您所做的那样)不会影响具有相同名称的全局变量。
答案 1 :(得分:0)
您似乎有一种印象,f
不是返回单个值,而是整个表达式a + b + c
,并且该表达式是在调用函数中求值的。那不是那样。
在函数f
中,全局变量a
设置为4,局部变量b
和c
也被设置为4。将每个值的值相加,得出值12,该值就是该函数返回的值。
在表达发生的时刻对其进行评估。