(✿ ◕‿◕)
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ą
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"
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ą..."
@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
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
2 kwi 21:16