• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Typy zmienych - terminologia

0 głosów
522 wizyt
pytanie zadane 23 maja 2018 w C i C++ przez Agnes Użytkownik (990 p.)
Jakie są różnice między zmienną globalną, extern a static? I konkretnie czym różni się static od const?
komentarz 23 maja 2018 przez j23 Mędrzec (195,240 p.)

Fun fact: zmienne globalne mogą być także static :)

1 odpowiedź

+1 głos
odpowiedź 23 maja 2018 przez niezalogowany
Witam

Zmienna globalna - jest to zmienna której deklaracja znajduję się powyżej funkcji main() (Musi być przed nią, bo przecież funkcja będzie z niej coś czytać). Gdy nie zinicjalizujesz zmiennej globalnej, automatycznie ma ona wartość 0 - w przeciwieństwie do zmiennej lokalnej (wewnątrz jakiejś funkcji, nie koniecznie main(), która zawierać będzie śmieci - jakieś losowe liczby). Przydomek static sprawia, iż zmienna jest umieszczana w tej samej pamięci co zmienna globalna (naturalnie przez to zachowuje się jak zmienna globalna, jeśli jest już w zasięgu globalnym to tylko przypisuje mi wartość 0). Przydomek extern zaś, "mówi" kompilatorowi żeby nie szukał tej zmiennej globalnej w tym pliku - bo jest ona gdzieś indziej (inna klasa,plik nagłówkowy itp.). Const przed jakąś zmienną znaczy po prostu tyle, iż przez cały moment działania programu ta zmienna ma taką wartość i nie można jej zmienić. (Np. Liczba PI - zawsze 3.14). Taką zmienną trzeba zinicjalizować, ponieważ później nie idzie do niej przypisać wartości.
komentarz 23 maja 2018 przez Agnes Użytkownik (990 p.)

Przydomek static sprawia, iż zmienna jest umieszczana w tej samej pamięci co zmienna globalna (naturalnie przez to zachowuje się jak zmienna globalna, jeśli jest już w zasięgu globalnym to tylko przypisuje mi wartość 0).

Więc po co nam przydomek static, skoro można chyba użyć zmiennej globalnej zamiast tego?

 

komentarz 24 maja 2018 przez j23 Mędrzec (195,240 p.)

Zmienna globalna jest dostępna dla każdego, a lokalna statyczna tylko w bloku, w którym została zdefiniowana. Zmienna globalna tworzona jest na początku programu, przed wywołaniem main, a statyczna lokalna - raz, w chwili pierwszego użycia.

komentarz 24 maja 2018 przez Agnes Użytkownik (990 p.)
W takim razie tej zmiennej lokalnej statycznej nie jest potrzebny przydomek static? I bez niego byłaby widziana tylko z poziomu bloku, w którym została zdefiniowana.
komentarz 24 maja 2018 przez j23 Mędrzec (195,240 p.)

Jeśli nie będzie miała "przydomku" static, to nie będzie zmienną statyczną. Zmienna lokalna jest tworzona (na stosie) za każdym razem, kiedy wejdziesz w funkcję/blok, i niszczona chwilę przed wyjściem z niej/z niego. Zmienna lokalna statyczna, tak jak pisałem, jest stworzona tylko raz, przy pierwszym wejściu w blok, w którym jest zdefiniowana, a zniszczona jest pod koniec działania programu. Czas życia takiej zmiennej, jak już zostanie stworzona, jest taki sam jak zmiennej globalnej.

std::string& foo()
{
        static std::string s { "tekst" }; // <--- ctor zostanie wywołany tylko raz przy pierwszym użyciu foo
        return s;
}

 

Podobne pytania

0 głosów
1 odpowiedź 525 wizyt
pytanie zadane 29 kwietnia 2018 w C# przez DODO Bywalec (2,950 p.)
0 głosów
1 odpowiedź 1,557 wizyt
pytanie zadane 7 września 2017 w C i C++ przez qlucha Obywatel (1,790 p.)
0 głosów
1 odpowiedź 1,775 wizyt
pytanie zadane 8 listopada 2016 w Java przez itcloud Gaduła (3,380 p.)

93,427 zapytań

142,421 odpowiedzi

322,649 komentarzy

62,787 pasjonatów

Motyw:

Akcja Pajacyk

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

VMware Cloud PRO - przenieś swoją infrastrukturę IT do chmury
...