Код выглядит следующим образом:
#include <stdio.h>
int main()
{
int i;
printf("%p\n",&i);
for (i = 0; i < 5; i++)
{
int i = 10;
printf("%d %p\n", i,&i);
i++;
}
return 0;
}
Сначала мы определили переменную i
(сразу после main). Затем в начале цикла for
мы снова определили ту же самую переменную i
. Таким образом, внутри цикла for
значение i
равно 10. Цикл for
должен повторяться только один раз, поскольку i>5
после первой итерации. Но, к моему удивлению, вывод выглядит следующим образом:
0x7ffe8b799da0
10 0x7ffe8b799da4
10 0x7ffe8b799da4
10 0x7ffe8b799da4
10 0x7ffe8b799da4
10 0x7ffe8b799da4
Мои вопросы:
1) Почему компилятор учитывает начальную определенную переменную i
при выполнении инструкции i<5;i++
, а неПереопределенная переменная i
? (после первой итерации).
2) Почему компилятор назначил разные адреса памяти одному и тому же идентификатору переменной i
?