Короче говоря; goto
приведет к переходу во время выполнения, определение / объявление переменной приведет к выделению памяти, времени компиляции.
Компилятор увидит и определит, сколько памяти выделить для int
, он также сделает так, чтобы это выделенное хранилище было установлено на 3
при "нажатии" i = 3;
.
Это место в памяти будет там, даже если в начале вашей функции есть goto
перед объявлением / определением, как в вашем примере.
Очень глупое сравнение
Если я положу бревно на землю и мой друг побежит (с закрытыми глазами) и перепрыгнет через него, бревно все равно будет там, даже если он его не видел и не чувствовал.
Реалистично сказать, что он мог бы повернуться (позже) и поджечь его, если бы захотел. Его прыжок не заставляет бревно исчезнуть.