matematykaszkolna.pl
(✿ ◕‿◕) Alky: Witam, może mi ktoś powiedzieć jak tu przebiega zwracanie wartości ? #include <iostream> using namespace std; int dwiezmienne(int x, int y) { x=5; y=7; return x,y; } int main() { int x=0, y=0; cout<<x<<y<<endl; dwiezmienne(x,y); cout<<x<<y<<endl; return 0; } To oczywiście tylko obrazujący przykład wyrwany z kontekstu. pierwsze wypisanie to " 00" i drugie także " 00". Dlaczego wartość która jest zmieniana i zwracana przez "dwiezmienne" nie wpływa na wypisanie ? Nie chodzi mi o samo rozwiąznie problemu bo można to w sekundkę zrobić chociażby wskaźnikami, czy od biedy nawet zmienną globalną, ale mi chodzi o to return. Dlaczego nie zwraca pożądanej wrtośći ( zwraca ale dlaczego ta wartość nie jest wykorzystana w main().
2 kwi 19:33
Adamm: nie wyszedł ci error? jak działa ten return w funkcji dwiezmienne?
2 kwi 19:37
Adamm: te zmienne x, y są lokalne i tylko dla funkcji dwiezmienne
2 kwi 19:38
Alky: Nie wyszedł mi error i myślałem, czy to nie jest kwestia tego, że to mogą być zmienne lokalne, ale coś mnie przyćmiło.. Już mi się w głowie rozjaśniło i widzę co i jak . Dzięki
2 kwi 19:47
Fusion: Żeby zwrócić dwie wartości, to musisz zwrócić tablicę.
2 kwi 19:47
Alky: lokalne dla danej funkcji oczywiście, bo te w main też są lokalne *
2 kwi 19:47
Fusion: Lub po prostu operuj na wskaźniku, to nadpisze wartość zmiennych lokalnych i spokojnie je wyświetlisz.
2 kwi 19:47
Alky: "Nie chodzi mi o samo rozwiąznie problemu bo można to w sekundkę zrobić chociażby wskaźnikami," Już wiem o co chodzi. No i oczywiście co do zwracania kilku wartości z funkcji masz rację z tablicą emotka
2 kwi 19:49
Fusion: Przepraszam, ale nie przeczytałem tego co napisałeś.
2 kwi 19:50
Mariusz: Jedną zmienną musisz przekazać przez referencję bądź wskaźnik z tym wskaźnikiem to jest to możliwe także w C
2 kwi 19:50
Alky: Jasne jasne. To takie tylko abstrakcyjne pytanko było bo coś mnie przymuliło a akurat przypadkiem się na coś takiego natknąłem. Dzięki za odpowiedzi. "Do zamknięcia" emotka
2 kwi 19:52
Adamm: można również ustawić x, y jako zmienne globalne
2 kwi 19:55
jc: Można zwrócić coś bardziej złożonego. Wystarczy zdefiniować nowy typ lub wykorzystać jakąś gotową klasę. −−−− struct para {int x; int y;}; para f(){ para p; p.x = 5; p.y = 7; return p; } int main(){ para q = f(); cout << q.x << " " << q.y << endl; return 0; }
2 kwi 19:57
Fusion: wiadomo , że można zwracać struktury, ale autor postu pewnie jeszcze do tego tematu nie dotarł
2 kwi 19:58
Mariusz: Jak działa operator przecinka ?
2 kwi 20:02
Alky: @Adamm "...chociażby wskaźnikami, czy od biedy nawet zmienną globalną..." emotka @Fusion&jc dane mi już było zapoznać się ze strukturami i klasami, a ten sposób zwracania przy pomocy struktur też już sobie powiedzmy ogarniałem, bo spotkałem się z tym na "elektrodzie " Jak mówiłem nie chodzi o samo rozwiązanie problemu tylko przymuliło mnie coś i nie ogarnąłem, że tak tworzę nowe zmienne w funkcji :X
2 kwi 20:02
Pytający: http://stackoverflow.com/questions/54142/how-does-the-comma-operator-work W skrócie: 1. return x,y; // zwróci y 2. int a=x,y; // a=x 3. int a=(x,y); // a=y
2 kwi 20:07
Mariusz: Nawet jeśli funkcja zwracałaby ci jakąś sensowną wartość to i tak nigdzie jej nie przypisujesz ani nie wyprowadzasz na wyjście Takie wywołanie funkcji może dać jakiś rezultat jeśli użyjesz wskaźników (rozwiązanie z C) albo referencji (tylko C++)
2 kwi 20:10
Mariusz: Spróbuj napisać sobie funkcje do obsługi takiej strukturki struct Node{ datatype data; // blok z danymi struct Node* next; struct Node* prev; // ten wskaźnik dla listy jest opcjonalny } Tę strukturkę można zinterpretować jako listę dwukierunkową ale także jako drzewo binarne Uważaj na warunki brzegowe i możliwe błędy tzn zabezpiecz funkcje przed danymi podawanymi przez użytkownika mogącymi powodować błędy Wielu m.in. tacy jak Wałaszek a nawet Cormen nie zwraca na to uwagi Jeżeli dopiszesz funkcje do tej strukturki będziesz miał okazję przećwiczyć wskaźniki
2 kwi 20:36
Dziadek Mróz: Operator przecinka. for (int i = 1, j = 10; i < n; i++, j−−) int i = 1, j = 10 deklaracja wartości i++, j−− operator przecinka ad Pytający W skrócie: 1. return x, y; // zwróci y | operator przecinka, zwraca 2−gą wartość 2. int a = x, y; // a=x | blok deklaracji 3. int a = (x, y); // a=y | jak w 1−szym
2 kwi 21:01
Dziadek Mróz: Z manuala: The expression: (expression1, expression2) First expression1 is evaluated, then expression2 is evaluated, and the value of expression2 is returned for the whole expression.
2 kwi 21:04
Pytający: Jeszcze warto dodać: "(note that a user−defined operator, cannot guarantee sequencing)". http://en.cppreference.com/w/cpp/language/operator_other#Built-in_comma_operator
2 kwi 21:16