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

Czy poniższy fragment kodu jest poprawny? Jeśli tak podaj co zwróci, jeśli nie to napisz dlaczego.

0 głosów
553 wizyt
pytanie zadane 29 listopada 2015 w C i C++ przez Qter Nowicjusz (120 p.)
edycja 29 listopada 2015 przez Qter

Czy poniższy fragment kodu jest poprawny? Jeśli tak podaj co zwróci, jeśli nie to napisz dlaczego.
 

#include <iostream>
int *foo(int c) { int b = 3 ; b *= c ; return &b; }
int main(int, char **) { int *c ; c = foo(5) ; std::cout << *c << std::endl; return 0; }



 

po skompilowaniu wynik = 15, nie rozumiem dlaczego ;/

3 odpowiedzi

+1 głos
odpowiedź 29 listopada 2015 przez Radfler VIP (101,030 p.)

Ogólnie kod daje się skompilować, jednak warto zwrócić uwagę na ostrzeżenia kompilatora. Funkcja foo zwraca wskaźnik na zmienną lokalną, co sprawia że zwrócony wskaźnik nie wskazuje na żaden konkretny obiekt. Odwołanie się do tego obiektu skutkuje niezidentyfikowanym zachowaniem (UB).

Mimo wszystko, jeżeli wyświtliło Ci się 15, to działa to tak:

1. Wysyłasz do funkcji foo wartość 5,

2. W funkcji ta wartość jest mnożona przez wartość ze zmiennej b i do niej przypisana (3 * 5 = 15),

3. Przypisujesz w main do obiektu c wartość zwróconego wskaźnika,

4. Wyświetlasz zawartość obiektu wskazywanego przez c.

0 głosów
odpowiedź 29 listopada 2015 przez Damian11131 Stary wyjadacz (13,470 p.)
Mógłbyś to dać w znacznik code i jakoś przyzwoicie to sformatować, bo nie mogę się doczytać.
komentarz 29 listopada 2015 przez Qter Nowicjusz (120 p.)
przykładowe pytanie rekrutacyjne, specjalnie nie zmieniałem formy
0 głosów
odpowiedź 29 listopada 2015 przez Michał628496 Pasjonat (17,340 p.)
Do zmiennej c przekazujesz adres zmiennej b z funkcji foo;

potem tylko wyświetlasz wartość zmiennej na którą wskazuje zmienna c ,czyli w tym wypadku zmiennej b z funkcji foo.
komentarz 29 listopada 2015 przez Qter Nowicjusz (120 p.)
nie rozumiem dlaczego wychodzi 15
komentarz 29 listopada 2015 przez Michał628496 Pasjonat (17,340 p.)
do zmiennej b przypisujesz 3*c
, jeśli c = 5 to b = 15 , i na tą wartość wskazuje zmienna c
komentarz 29 listopada 2015 przez Qter Nowicjusz (120 p.)
dzięki kolego

Podobne pytania

0 głosów
2 odpowiedzi 364 wizyt
0 głosów
1 odpowiedź 1,470 wizyt
pytanie zadane 13 października 2018 w C i C++ przez tomason Nowicjusz (140 p.)
0 głosów
0 odpowiedzi 165 wizyt

93,741 zapytań

142,677 odpowiedzi

323,296 komentarzy

63,326 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

Twierdza Linux. Bezpieczeństwo dla dociekliwych

Aby uzyskać rabat -10%, użyjcie kodu pasja-linux, wpisując go w specjalne pole w koszyku.

...