Почему я получаю 20 в выходе, поскольку автоматические переменные имеют размер блока?Почему я получаю 20 на выходе?
#include <stdio.h>
int main(void) {
int a=0;
{
int a=10;
printf("%d",a);
a++;
{
a=20;
}
{
printf(" %d",a);
int a=30; {a++;}
printf(" %d",a++);
}
printf(" %d",a++);
}
printf(" %d",a);
return 0;
}
Выход:
10 20 31 20 0
Переменные * объявлены * в блоке имеют область блока; * присваивание * переменной является постоянным, хотя - это не значит, что назначения откат назад, когда вы выходите из этого блока. Если вы замените 'a = 20;' во внутреннем блоке на 'int a = 20;' вы получите ожидаемый результат. –
Прочтите это. Вы поймете, почему [http://www.gnu.org/software/gnu-c-manual/gnu-c-manual.html#Scope](http://www.gnu.org/software/gnu-c-manual /gnu-c-manual.html#Scope) –
Ваш вопрос непонятен. Вы спрашиваете, почему 'printf («% d », a);' (обратите внимание на ведущее пространство) печатает '20', хотя' int a = 30; 'появляется в той же области блока (хотя * после *) в качестве вышеупомянутого' printf')? – WhozCraig