输出使用动态范围的以下程序

时间:2018-06-05 19:18:36

标签: c dynamic

如果使用动态范围,以下程序的输出是什么?

void func1()
{
    int a,b;
    a=6;
    b=8;
    func2();
    a=a+b+c;
    printf(a);
}

void func2(){
    int b,c;
    b=4;
    c=a+b;
    a+=11;
    printf(c);
}

void main(){
    a=3;
    b=5;
    c=7;
    func1();
}

我尝试应用动态范围概念。据此,产量为10,32。但结果是7,19。有人可以解释我的方法有什么问题吗?

我的方法: -

初始值:a = 3,b = 5,c = 7

在func2中: 宣布新的b,c。 B = 4。 c = a + b将6 + 4 = 10分配给c。 将打印10并且a变为6 + 11 = 17

在func1中: 打印a + b + c,其为17 + 8 + 7 = 32.

1 个答案:

答案 0 :(得分:1)

您有三组变量定义:

一个全球int a,b,c;
只要没有局部变量定义覆盖它,就会使用它们。

第一个本地int a,b;,内部和func1;
第二个本地int b,c;,内部和func2;
他们会覆盖全局。

这就是C的工作原理,它产生了这个序列:

在func1中,按时间顺序首先执行,两个局部变量是初始化的,但它们对func2没有影响。

在func2中,本地b设置为4 然后,本地c设置为全局a +本地b,3 + 4 == 7。 然后全局a增加到17 输出本地c为7。

返回func1,本地a设置为本地a +本地b +全局c,6 + 8 + 7 == 21。 输出本地a为21。

这正是您观察到的输出。