Внутренний a не определен, и поэтому компилятор может использовать любое значение, которое ему нравится. Значение, которое ему нравится, по-видимому, является текущим значением байтов, которые занимает «a». Во второй раз в цикле вы получаете совершенно новый inner-a, который, по совпадению, оказывается в том же месте, что и предыдущий inner-A, и принимает его значение.
Но это просто случайность - если бы это было проще сделать другим способом, компилятор мог бы (и мог бы по закону).
Обратите внимание, что значение a никогда не читается после второго a ++. Вполне возможно, что если вы включите оптимизацию, компилятор решит, что ему не нужно делать это приращение, и внутреннее значение a всегда будет равно нулю.