Вывод следующей программы, использующей динамическое определение объема - PullRequest
0 голосов
/ 05 июня 2018

Каковы выходные данные следующей программы, если используется динамическое определение объема?

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.б = 4.c = a + b назначает 6 + 4 = 10 для c.10 будет напечатано и a станет 6 + 11 = 17

В func1: a + b + c будет напечатано, что будет 17 + 8 + 7 = 32.

1 Ответ

0 голосов
/ 05 июня 2018

У вас есть три набора определений переменных:

Одна глобальная 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.

Это именно тот результат, который вы наблюдаете.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...