函数可以返回在其中初始化的值吗?

时间:2020-02-14 04:17:26

标签: 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 (a + b + c);
}

我的意思是,由于b和c局部变量在函数返回时像在f函数中一样被初始化,因此它们不再存在,因此不应返回。有人可以解释吗?

int k(void) {
    int d = 5;
return d;
}

就像k函数什么都不返回,对吧?

2 个答案:

答案 0 :(得分:1)

您使函数f返回abc的“值”之和,而不是变量本身。通过在函数b中声明由cf命名的变量,全局变量bc被局部变量所遮盖,因此所有更改(如分配4就像您所做的那样)不会影响具有相同名称的全局变量。

答案 1 :(得分:0)

您似乎有一种印象,f不是返回单个值,而是整个表达式a + b + c,并且该表达式是在调用函数中求值的。那不是那样。

在函数f中,全局变量a设置为4,局部变量bc也被设置为4。将每个值的值相加,得出值12,该值就是该函数返回的值。

在表达发生的时刻对其进行评估。