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

Dlaczego to dziala?

VPS Starter Arubacloud
0 głosów
201 wizyt
pytanie zadane 3 lutego 2017 w C i C++ przez Alex.Ironside Stary wyjadacz (14,880 p.)
edycja 3 lutego 2017 przez Alex.Ironside

Witam. Moglby mi ktos wyjasnic dlaczego ten kod dziala?

#include<iostream>
using namespace std;
int y;
void zad5() 
{ 
 float z; 
 static float x;
 z+=(y+1); 
 cout <<"zad5 z="<<z<<" x="<<x<<" y="<<y<<endl; 
}
main()
{
  zad5();
 }

Generalnie jak da sie int x; to x ma z automatu 0 przypisane? I co daje to static?

Prosilbym o wyjasnienie

Edit. Sorry wkleilem fcje w zlej kolejnosci. Przyzwyczajenie z c#

3 odpowiedzi

+3 głosów
odpowiedź 3 lutego 2017 przez adrian17 Ekspert (344,100 p.)
wybrane 3 lutego 2017 przez Alex.Ironside
 
Najlepsza
  • y jest globalne => domyślnie zainicjalizowana zerem
  • x jest statyczne => domyślnie zainicjalizowane zerem
  • z jest lokalne, niezainicjalizowane => proba czytania z niego to UB, kod może zrobić cokolwiek.
komentarz 3 lutego 2017 przez Alex.Ironside Stary wyjadacz (14,880 p.)
Czyli jakbym zainicjowal y w fcji i nie dal zadnej wartosci to by bylo 0 czy undefinied?
komentarz 3 lutego 2017 przez Avernis Nałogowiec (27,400 p.)

Jak byś dał y w funkcji, to by było undefined. Jak byś dodał static to by było 0, oraz za każdym razem, kiedy wywołujesz funkcję, ta zmienna miała by taką samą wartość. Dla przykłądu

void x()
{
    int x = 0;
    ++i;
    std::cout << x;
}

Za każdym razem kiedy wywołujesz funkcję, będzie wypisywało 1

 

void x()
{
    static int x = 0; //zmienna statyczna, któej wartość zostaje
    ++i;
    std::cout << x;
}

funkcja za każdym razem wypisze wartość zwiększoną o 1, ponieważ zmienna x, nie jest inicjalizowana zerem, tylko poprzednią wartością, jaką miało x.

–1 głos
odpowiedź 3 lutego 2017 przez Selarz Użytkownik (510 p.)
przywrócone 5 lutego 2017 przez Selarz
Static int? Czyli jak zadeklarujesz jakąś zmienną  w programie właśnie jako static int, to nie będziesz mógł tej wartości już zmienić ;)
1
komentarz 3 lutego 2017 przez Szahid Pasjonat (20,930 p.)
pomyliło Ci się z const
komentarz 3 lutego 2017 przez QizmoPL Stary wyjadacz (11,440 p.)
Modyfikator static sprawia, że obiekt w danej funkcji jest umieszczany w tej samej pamięci, co zmienna globalna i nie jest usuwany wraz z zakończeniem funkcji.
–2 głosów
odpowiedź 3 lutego 2017 przez Szahid Pasjonat (20,930 p.)
Jeśli nie zainicjalizujesz zmiennej to może ona mieć każdą wartość więc to że x= 0 nie jest prawdą. Statnic daje to że tworzysz zmienną statyczną czyli taką która nie "zniknie" z pamięci  po skończeniu się funkcji ( tak jak się to dzieje w przypadku zmiennych ałtomatycznych)
1
komentarz 3 lutego 2017 przez Szahid Pasjonat (20,930 p.)
PS  dany kod nie działa bo nie ma wnim prototypu funkcji zad5()
komentarz 3 lutego 2017 przez czujek22 Dyskutant (7,670 p.)
Jest prototyp jednocześnie z definicją nad mainem więc żadnego problemu tutaj nie ma. Poza tym przeczytaj dokładnie nazwę tematu i treść :P

Podobne pytania

0 głosów
1 odpowiedź 225 wizyt
pytanie zadane 5 stycznia 2022 w Algorytmy przez shoshana Nowicjusz (120 p.)
0 głosów
1 odpowiedź 438 wizyt
+1 głos
6 odpowiedzi 509 wizyt
pytanie zadane 17 maja 2015 w C i C++ przez krecik1334 Maniak (58,390 p.)

92,454 zapytań

141,262 odpowiedzi

319,089 komentarzy

61,854 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

Akademia Sekuraka 2024 zapewnia dostęp do minimum 15 szkoleń online z bezpieczeństwa IT oraz dostęp także do materiałów z edycji Sekurak Academy z roku 2023!

Przy zakupie możecie skorzystać z kodu: pasja-akademia - użyjcie go w koszyku, a uzyskacie rabat -30% na bilety w wersji "Standard"! Więcej informacji na temat akademii 2024 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!

...