Vit (05.07.2009 00:24, просмотров: 183) ответил Evgeny_CD на Теперь осталось понять, как ПО СТАНДАРТУ компилер должен выбрать порядок вариантов i :)
Ещё раз - в блоке операторов будет применена локальная для блока переменная. Вне этого блока она не видна. Потому в цикле будет использована либо глобальная переменная, либо можно объявить свою локальную (C99) int i = 100; //1
unsigned char a[5][5]={0}; //2
int foo(int i){ //3
int z = i; //4
for(int i=0; i<5; i++){ //5
{
int i = 2; //6
a[i][i] = i; //7
}
z += i; //8
}
return z; //9
}
void main(void){ //10
int x; //11
x = foo(i); //12
}
В этом примере i, объявленная в стр.(1) используется только в main стр.(12).
Формальный параметр i функции foo стр.(3) используется только в присвоении (инициализации) переменной z стр.(4).
Локальная переменная, объявленная в цикле стр.(5), используется только как счётчик цикла и в стр.(8).
Локальная переменная, объявленная в блоке операторов внутри тела цикла стр.(6), никогда не меняется и формально 5 раз объявляется, используется в стр.(7), а после этого её уж нет;)
Результатом будет a[2][2] равно 2, остальные элементы массива a останутся равными нулю, ну а х будет равно значению 110 стр.(12)