Przekazywanie wyniku funkcji poprzez wskaźnik/referencję

0

Cześć, mam napisać dwie funkcje zwracające wynik przez wskaźnik (w1) oraz przez referencje (w2).
O ile przez referencje jest chyba ok (chyba), to ze wskaźnikiem nie mogę sobie poradzić.

#include <iostream>
#include <math.h>
using namespace std;

void w1(float *wsk)                 // poprzez wskaźnik
{
float a, b, wynik;
cout<<"a? ";
cin>>a;
cout<<"b? ";
cin>>b;

wynik=a+b;
*wsk=wynik;
}

void w2(float &wynik)              // poprzez referencję
{
float a, b;
cout<<"a? ";
cin>>a;
cout<<"b? ";
cin>>b;
wynik=a+b;
}

int main()
{
float wynik;
int sposob;
cout<<"wskaznik czy referencja?"<<endl;
cout<<"[1] wskaznik"<<endl; 
cout<<"[2] referencja"<<endl; 
cin>>sposob;

switch(sposob) {
case 1:
w1(wynik);
cout<<"wynik="<<wynik<<endl;
break;

case 2:
w2(wynik);
cout<<"wynik="<<wynik<<endl;
break;
}
system("pause");
return 0;
}
 
0
#include <iostream>
#include <math.h>
using namespace std;
 
void w1(float* wsk)
{
  float a, b, wynik;
  cout<<"a? ";
  cin>>a;
  cout<<"b? ";
  cin>>b;
  *wsk=a+b;
}
 
void w2(float& wynik)
{
  float a, b;
  cout<<"a? ";
  cin>>a;
  cout<<"b? ";
  cin>>b;
  wynik=a+b;
}
 
int main()
{
float wynik;
int sposob;
cout<<"wskaznik czy referencja?"<<endl;
cout<<"[1] wskaznik"<<endl; 
cout<<"[2] referencja"<<endl; 
cin>>sposob;
 
switch(sposob) {
  case 1:
    w1(&wynik);
    cout<<"wynik="<<wynik<<endl;
    break;
  case 2:
    w2(wynik);
    cout<<"wynik="<<wynik<<endl;
    break;
}
cin.ignore();
cin.get();
return 0;
}
0

OK, wszystko działa.
Prosiłbym tylko o wytłumaczenie skąd *wsk "wie", że będzie odpowiadał polu? nigdzie *wsk nie jest przypisywane więc to mnie trochę dziwi.

1

Jeśli nie wiesz skąd wsk wie że odpowiada polu to myśle że czas wrócic do podstawówki. Bo to tak jakbyś pytał jak to możliwe że funkcja f(x)=3x wywołana w taki sposób:
f(5) wie że powinna dać wynik 15
Wie to stąd że PRZEKAZANO DO NIEJ ARGUMENT.
Analogicznie tutaj, wywołując funkcję podałem jako jej argument &wynik czyli adres zmiennej wynik. Tenże adres został zinterpretowany jako adres pewnej zmiennej (i dobrze, bo tym właśnie jest) której następnie przypisaliśmy wartość. Gdzie widzisz jakiś problem? o_O

0

Ale ty odpowiedziałeś na temat referencji, a ja pytam o wskaźnik, czyli o funkcję w1

1

Shalom napisał właśnie o funkcji w1. Powinieneś przeczytać jakiś kurs C++, bo masz niestety braki w podstawach.

0

Nie, on odpowiedział na temat wskaźników. Jak nawet sam napisałeś, w1 to wersja wskaźnikowa.

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