• 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.

Object Storage Arubacloud
0 głosów
305 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,490 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 124 wizyt
0 głosów
1 odpowiedź 1,016 wizyt
pytanie zadane 13 października 2018 w C i C++ przez tomason Nowicjusz (140 p.)
0 głosów
0 odpowiedzi 92 wizyt

92,626 zapytań

141,486 odpowiedzi

319,844 komentarzy

62,009 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!

...