Stek i scope (opseg) nemaju veze jedan sa drugim.
Stek je struktura podataka a opseg je logički koncept koji kaže kakva je vidljivost simboličkih naziva unutar programa.
Evo primera:
Code (c):
#include <stdio.h>
int main
()
{
int i
=1;
int *p
=&i
;
for(int i
=0; i
<3; i
++) printf("loop i=%d, outer i=%d\n", i
, *p
);
printf("outer i=%d\n", i
);
return 0;
}
Code:
Rezultat:
loop i=0, outer i=1
loop i=1, outer i=1
loop i=2, outer i=1
outer i=1
U programu je deklarisana varijabla "i" čija je vidljivost cela funkcija main. Međutim, za for petlju je ponovo deklarisana varijabla "i", pa zbog načina na koji C obrađuje scope, "maskira" varijablu "i" iz main funkcije.
Možeš da zamisliš da je "i" iz main funkcije neko "i1", a "i" iz for petlje neko "i2". Kompajler, kada analizira kod, nema problema sa ovim načinom deklarisanja varijabli.
A to, da li je "i" u petlji na steku, u registru ili negde u memoriji, nema veze sa tim koja je njena vidljivost.