Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/amazon-s3/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 函数能否返回在其中初始化的值?_C_Function_Scope - Fatal编程技术网

C 函数能否返回在其中初始化的值?

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

我真想知道为什么在下面的代码中输出是: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);
}

就像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;
}