"Global" ist ein Variable dann und nur dann, wenn sie ausserhalb jeder
Funktion deklariert wird.
"Definieren" belegt tatsächlich Speicherplatz
"Deklarieren" sagt nur, das woanders (in einer anderen Datei) eine
Definition stehen sollte. (Wenn nicht gibts Linker fehler).
Ein "Anweisungsblock" ist der Code zwischen zwei geschweiften Klammern
(jeweils öffnend und schliessend). So kommt er in einer
Funktionsdefinition vor. Ausserdem kann er verschachtelt werden. Also
ein Block in einem Block in einem Block.
Dies bezeichnet gleichzeitig sogenannte Gültigkeitsbereiche.
Der erste ist der globale Gültigkeitsbereich ausserhalb jeder Funktion.
Deine beiden Beispiele beinhalten solche nicht. (Es sei denn, in den
include files stehen Definitionen).
Danach kommt der GB (Gültigkeitsbereich) der Funktion main.
Innerhalb dessen wird eine Variable i definiert. Jede Verwendung einer
Variablen bezieht sich auf den momentan aktuellen GB oder (falls in
diesem die Variable nicht enthalten ist) auf den nächst-übgergeordneten
GB.
Da in dem zweiten Beispiel ein weiterer Anweisungsblock aufgemacht wird
und eine weitere Variable i definiert, beziehen sich die Anweisungen D,
E und F auf die in dem innersten Anweisungsblock definierte Variable i.
Die Anweisung G hingegen bezieht sich wieder auf das i des äusseren
Anweisungsblockes was man auch daran erkennt, das der innere schon
geschlossen ist (wenn man von oben nach unter liest).
Jeweils eine einzelne Zeile C und G miteinander zu vergleichen hilft
hier nicht, weil es darauf ankommt, was noch vorher passiert.
In dem ersten Fall wird zwar ein weiterer Anweisungsblock aufgemacht,
aber keine neue Variable i innerhalb dieses Blocks definiert, so das
eine Anweisung, welche i verändert sich auf das im nächstäusseren Block
definierte i bezieht.
Im zweiten Fall aber wird in dem inneren Block auch ein i definiert, so
das die Änderung nun an diesem vollzogen wird.
Du musst Dir das mit dem Geltungsbereich nicht wie eine lineare Kette
sondern wie Schachteln in Schachteln in Schachteln vorstellen. Eine
Anweisung in einer Schachtel greift auf Objekte zu die in ihr selbst
vorhanden sind bzw. falls keine dort sind, in einer der äusseren
Schachteln in der auch sie enthalten ist.
Klar?
Lies noch mal den Text in dem Buch vom Galileo Verlag. Dort ist
eigentlich alles so auch gesagt und beschrieben.