- Učlanjen(a)
- 10.01.2002
- Poruke
- 1,952
- Poena
- 650
Kod:
double i=50;
double *pd;
int *pi;
pd=&i;
for(int i=0;i<10;i++)
{
// Neki kod
}
pi=&i;
Ja ne mogu da verujem šta je dozvoljeno u C++ .NET-u (ovo ne može u Visual C++ 6.0).
Znači ovaj kod gore napisan.
Deklariše se 'i' kao double. Uzme se adresa u 'pd'. Onda se u petlji ponovo deklariše 'i', ali kao int. Posle izlaska iz petlje 'i' je i dalje int. Uzme se adresa u 'pi'. Sada se adresa u 'pi' razlikuje od one u 'pd' (pi!=pd). Znači napravljena je nova promenljiva sa istim imenom (int i), a onoj staroj (double i) ne može više da se pristupi. Može preko *pd (normalno vrati 50), ali ne može preko indentifikatora 'i'.
edit: Zaboravio sam da napišem... ako se 'i' deklariše kao int na početku, onda ne pravi dve promenjive, samo mu dodeli novu vrednost, a adresa ostaje ista (recimo da je umesto double *pd - int *pi1; posle petlje će biti pi1==pi).
Da li neko ima neko logično objašnjenje zašto su dozvolili da se ponovo deklariše promenljiva sa istim imenom?
Poslednja izmena: