To nie ma żadnego związku z dynamiczną alokacją pamięci. Zmienna zostanie zadeklarowana na stosie (stack), a nie na stercie (heap).
Dodatkowo kompilator najpewniej potraktuje tą zmienną tak samo, jak inne zmienne lokalne tj. zaalokuje dla niej pamięć na początku działania funkcji.
Jak to już napisał Radfler, w C używa się funkcji malloc() i free().
1) Tak, ale rozwiązuje to problem przedstawiony w pytaniu w prostszy sposób. Parę różnic (na korzyść mojej propozycji ofc): Z użyciem free+malloc:
int* wsk = malloc(sizeof(int)); //praca na "*wsk" ... free(wsk); wsk = NULL; //"wsk" pozostaje w zasięgu, kod używający teraz *wsk się kompiluje, choć jest niepoprawny
Z użyciem klamer:
{ int zmienna; //praca na "zmienna" ... } //ani śladu po "zmienna", kod dalej jej używający jest niepoprawny i się nie kompiluje
Z tego, że zmienna ma być "iteracyjna", wnioskuję, że jest to jakiś licznik. Czy liczniki tworzysz na stercie?
Czasami i to się zdarza, ale raczej nie są to proste pętle.
Jednak autor pytania wyraźnie zaznaczył w tagach, że chodzi mu o alokowanie pamięci. Co do programowania dynamicznego, to mam pewne wątpliwości, że o to mu chodziło, ale nie ważne...
Jednak ważne jest, że dla zmiennej lokalnej pamięć jest deklarowana tylko w krytycznych przypadkach (gdy kończy się strona pamięci na stosie, do system doalokowuje nową), ale jest to raczej przeźroczyste dla programu i nie można tu mówić o dynamicznej alokacji.
W poprzednim komentarzu trochę niefortunnie użyłem słowa "zaalokuje", bo prawda jest taka, że ta pamięć w 99.9% przypadków już będzie dostępna, a kompilator tylko przydziela ją danej zmiennej.
Jednak muszę przyznać, że jest pewien sens w twojej argumentacji.
93,424 zapytań
142,422 odpowiedzi
322,646 komentarzy
62,785 pasjonatów
Motyw:
Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡
Oto polecana książka warta uwagi.Pełną listę książek znajdziesz tutaj