Novo

Forum kao aplikacija na telefonu

Dodajte forum na početni ekran i koristite ga kao aplikaciju, sa menijem na dnu ekrana.

  • 5 odgovora
  • 3.840 pregleda

Najnovija ↓

automatske promenljive 04.07.2008. u 13:01 · pre 223 meseca #1
Bas sam zbunjen, ovo mi je mnogo cudno ponasanje. Evo koda:

Code:


#include <cstdio>
void f()
{
    int b;
    printf("%d n",b);
    b=2;
}
int main()
{
    f();
    f();
    return 0;
}



Mozda treba malo objasnjenje programa:
Program zapravo ne radi nista korisno, vec mi je sluzio da objasnim static promenljive. (umesto int b stavio sam prvo static int b). Naravno sa static int b rezultat je bio ocekivan, kada bi b dobilo vrednost 2 pri sledecem pozivu funkcije f otstamapana bi bila vrednost 2(za b). Onda ja izbrisem rec static(i dobijem gore napisan kod). I onda dobijem isti rezultat, sto mi nije jasno. Zar u ovom slucaju kada se izvrsi funkcija f() zatvore se zagrade{} i automatska promenljiva b treba da se izbrise. Pri sledecem pozivu funkcije b bi opet trebalo da da neku proizvoljnu vrednost. Ali to se ne desava. Zasto?

nadam se da ste me shvatili :)
Re: automatske promenljive 04.07.2008. u 14:07 · pre 223 meseca #2
Promenljiva se izbrise u smislu da joj se vise ne moze (ili ne bi trebalo) pristupati, a ne da se na to mesto u memoriji upisuju nule ili nekako drugacije obrise. Tako, kad unistis b pa ga onda opet kreiras moze da se desi da sadrzi vrednost sa istog memorijskog mesta. Kako zaredom pozivas f() tj. dva puta vrednosti bacas na stek, ovakav scenario je prilicno verovatan.
Potpis
Sveti Avgustin: "Dobar hrišćanin treba da se kloni matematičara i svih onih koji daju lažna proročanstva. Postoji opasnost da su matematičari već sklopili pakt sa Đavolom, da pomrače čovekov um i da ga okuju okovima pakla."
Re: automatske promenljive 04.07.2008. u 15:46 · pre 223 meseca #4
C++ prilikom kreiranja automatske promenljive rezervise memoriju ali inicijalizaciju moras sam da uradis, preko konstruktora ili dodele vrednosti. Inace, vrednost koju sadrze nije definisana tj. sadrze neku slucajnu vrednost koja se nasla u tom parcetu memorije.
Lokalne staticke dobijaju inicijalnu vrednost (nulu) iako ti to ne uradis. Detalje mozes naci na http://www.steveheller.com/cppad/Output/function7.html
Potpis
Sveti Avgustin: "Dobar hrišćanin treba da se kloni matematičara i svih onih koji daju lažna proročanstva. Postoji opasnost da su matematičari već sklopili pakt sa Đavolom, da pomrače čovekov um i da ga okuju okovima pakla."
Re: automatske promenljive 12.07.2008. u 13:49 · pre 223 meseca #6
Visual C++ 2008 izgleda briše promenljivu iz memorije, tj. popunjava ga nekim rnd podacima. Ni u jednom slučaju ne dobijam 2, tako da se ne treba uzdati u to.
Prijavite se da biste odgovorili u ovoj temi.PrijavaRegistracija

Premeštanje teme