wszystko = oblicz_objetosc(informacje);
informacja ma dotychczas cztery składowe (producent, wysokość, długość i szerokość). Przekazujemy ją jako wartość, czyli w trakcie działania funkcji działamy na kopiach wartości. Spośród trzech kopii (wysokości, długości i szerokości) obliczamy objętość i tylko ją zwracamy w reprezentancie struktury po uprzednim przypisaniu (patrz funkcja wyliczająca). Reszta kopii istnieje do momentu zakończenia funkcji. Od teraz wszystko ma przypisaną wartość objętości, bez pozostałych (bo te były widoczne tylko w czasie działania funkcji wyliczającej, gdyż nie zostały nigdzie przekazane). informacja nadal ma te same wartości, czyli bez wyliczonej objętości.
pokaz_wymiary(informacje);
Próbujesz dostać się do składowych informacji, jednak te nie uległy zmianie, nadal objętość jest nieznana.
Jak sprawić by pozostałe dane również były przekazane? Po prostu w funkcji obliczającej przekaż również dane, które możesz zwrócić i wywołaj funkcję wyświetlającą z argumentem wszystko.
pudlo oblicz_objetosc(pudlo wartosc_obj) {
pudlo obj;
obj.producent = wartosc_obj.producent;
obj.wysokosc = wartosc_obj.wysokosc;
obj.szerokosc = wartosc_obj.szerokosc;
obj.dlugosc = wartosc_obj.dlugosc;
obj.objetosc = (wartosc_obj.wysokosc * wartosc_obj.szerokosc * wartosc_obj.dlugosc);
return obj;
}
Tym samym dowiedziałeś się w jaki sposób odbywa się przekazywanie przez wartość, czyli operowanie na kopiach, których modyfikacje aby były widoczne poza funkcją musimy zwrócić... Jeśli ich nie zwrócimy będą widoczne tylko do momentu działania funkcji.
Natomiast przekazywanie przez adres/referencję umożliwi nam działanie już nie na kopiach wartości, ale na oryginalnych składowych. Tego właśnie oczekują od Ciebie w podpunkcie b ; )
Powodzenia! : )