C 函数能否返回在其中初始化的值?
我真想知道为什么在下面的代码中输出是:12而不是9:C 函数能否返回在其中初始化的值?,c,function,scope,C,Function,Scope,我真想知道为什么在下面的代码中输出是: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
#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);
}
就像k函数不返回任何值一样,对吗?您似乎有这样的印象,
f
不是返回单个值,而是返回整个表达式a+b+c
,该表达式在调用函数中求值。事实并非如此
在函数f
中,全局a
设置为4,局部b
和c
设置为4。将这些值中的每一个值相加,得到值12,该值就是函数返回的值
表达式在出现时进行计算。您创建的函数
f
返回a
、b
和c
的“值”之和,而不是变量本身。通过在函数f
中声明以b
和c
命名的变量,全局变量b
和c
被局部变量所掩盖,因此任何更改(如像您那样指定4)都不会影响同名的全局变量。表达式(a+b+c)是用该范围内的变量计算的,全部等于4。表达式的整数结果是函数返回的结果。它不是宏…返回按值操作。返回值是return语句中表达式的副本。(参数传递的工作原理是一样的)你已经非常接近我想知道的。我编辑了这个问题。你能看一下吗?@whysoserious答案是正确的。计算表达式的值(在这种情况下,表达式是单个变量),表达式的结果就是返回的结果。如果你不能返回基于局部变量的值,函数就没有多大用处。那么,看起来我误解了我的课本,当我的助理教授在讲座中展示这个函数返回12时,我很沮丧谢谢你的帮助。
int k(void) {
int d = 5;
return d;
}