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

Typy zmienych - terminologia

Object Storage Arubacloud
0 głosów
299 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 (194,920 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 (194,920 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 (194,920 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ź 421 wizyt
pytanie zadane 29 kwietnia 2018 w C# przez DODO Bywalec (2,950 p.)
0 głosów
1 odpowiedź 1,141 wizyt
pytanie zadane 7 września 2017 w C i C++ przez qlucha Obywatel (1,790 p.)
0 głosów
1 odpowiedź 1,498 wizyt
pytanie zadane 8 listopada 2016 w Java przez itcloud Gaduła (3,380 p.)

92,576 zapytań

141,426 odpowiedzi

319,652 komentarzy

61,961 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.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...