Ваш код эквивалентен следующему:
#include <stdio.h>
#include <stdlib.h>
int main() {
int a1 = 1, b1 = 2, c1 = 3;
printf("%d %d %d\n", a1, b1, c1); // 1 2 3
{
int b2 = 4;
float c2 = 5.0;
printf("%d %d %.1f\n", a1, b2, c2); // 1 4 5.0
a1 = b2;
{
int c3;
c3 = b2;
printf("%d %d %d\n", a1, b2, c3); // 4 4 4
}
printf("%d %d %.1f\n", a1, b2, c2); // 4 4 5.0
}
printf("%d %d %d\n", a1, b1, c1); // 4 2 3
}
Если переменная объявлена внутри области, что означает, что она имеет тип, такой как int a = 5
, тогда переменная во внешней области с тем же именем затеняется и больше не будет использоваться или затрагиваться во внутренней области. Однако если переменная назначена внутри области, что означает, что ей не хватает типа, подобного a = 5
, и переменная не была объявлена внутри области, то переменная вне области будет изменена. Вы также можете найти полезную статью здесь .