Funkcja,która zwraca kilka wartości

0

Mam wrażenie, że się poprawnie domyślam na czym polega to zwracanie przez funkcję kilku wartości, ale cały czas nie jestem pewny czy rozumiem. Tutaj akurat chodzi o to, żę funkcja Factor zwraca trzy wartości:dwie w postaci parametrów będących wskaźnikami oraz tę trzecią Value. No dobra, ale właśnie tutaj czegoś nie łapię. Funkcja zwraca trzy wartości a w jej ciele jest tylko jeden "return"...???...
Tzn. rozumiem, że cała ta funkcja poprzez wartość Value przyjmuje (zwraca) 1 lub 0 i właśnie ta wartość może "gdzieś tam" zostać przypisana do "czegoś". Nie wiem natomiast jak sobie wyobrazić, że ta funkcja zwraca dwie wartości jako parametry. Tzn. widzę, że w klamrach po "else" istnieją owe dwa, ale nie rozumiem...

No jeżeli ta funkcja zwraca Value 1 lub 0, to jest to przecież pojedyncza wartość a jej parametry są sprawą zupełnie osobną. Dlaczego więc mam równać znaczenie wartości Value ze znaczeniem wartości tych parametrów oraz dlaczego autor książki uważa, że te parametry są także zwracanymi wartościami. Przecież nie zależnie od tych parametrów funkcja Factor i tak zwraca tylko 1 lub 0.

Jak widzicie...właśnie dlatego się w tym motam.
[code]
short Factor(int n, int *pSquared, int pCubed)
30: {
31: short Value = 0;
32: if (n > 20)
33: Value = 1;
34: else
35: {
36: pSquared = nn;
37: pCubed = nn
n;
38: Value = 0;
39: }
40: return Value;
41: }

[/code]

0

Funkcja może zwrócić tylko jedną wartość (w c++) i mówienie o tym że zwraca kilka jest błędem. Można oczywiście zwrócić jakiś typ złożony, ale z puntu widzenia funkcji dalej to pobędzie jedna wartość. W twoim wypadku funkcja poza tym, że zwraca jakąś tam wartość wpływa również na zmianę argumentów jej przekazywanych i co więcej zmiana ta jest widoczna również poza funkcją (po jej wywołaniu). Dzieje się tak ponieważ przekazujesz do funkcji wskaźniki na miejsca w pamięci, w których przeprowadzasz zmiany. Ogólnie w c++ istnieją trzy metody przekazywania argumentów do funkcji:

  1. przez wartość - tworzona jest wtedy kopia lokalna parametru i poza funkcją nie operacje na nim nie są widoczne
  2. przez referencje - operujesz na oryginale przez co operacje przeprowadzane na argumencie są widoczne poza funkcją
  3. przez wskaźnik - mechanizm jest troszkę inny niż przez referencję ale w twoim wypadku skutek jest taki sam.
    Więcej o tym przeczytasz w każdej książce opisującej podstawy programowania w C++.

1 użytkowników online, w tym zalogowanych: 0, gości: 1