foo
- это указатель, но вы не установили его так, чтобы он указывал на любую выделенную память, поэтому вместо этого он просто имеет случайное значение при запуске и, следовательно, указывает на какой-то случайный участок памяти.Следовательно, может произойти все, что угодно (например, неопределенное поведение ).
Наличие int i
просто меняет позицию foo
в стеке и, следовательно, конкретное случайное значение, которое оно имеет,Вы не должны читать что-либо значимое в этом отличающемся поведении, поскольку оно все еще не определено.