Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
C/C++ - passaggio per riferimento
Forum - C/C++ - passaggio per riferimento

Avatar
ciao888 (Normal User)
Pro


Messaggi: 69
Iscritto: 14/10/2010

Segnala al moderatore
Postato alle 20:28
Mercoledì, 02/02/2011
ho questo programma,il programma è corretto e parte,ma ho un dubbio,sulla funzione '' leggi''devo usare il passaggio per riferimento,ma sulla funzione ''sommab'' lo devo usare?se sì o no perchè?ecco il programma:
Codice sorgente - presumibilmente C++

  1. #include <iostream>
  2.   using namespace std;
  3.   float x;
  4.   float y;
  5.   void leggi_numeri(float &a, float &b)
  6.   {cout<< "scrivi due numeri"<<endl;
  7.   cout << "primo numero: "<<endl;
  8.   cin>>a;
  9.   cout<<"secondo numero: "<<endl;
  10.   cin>>b;}
  11.   float sommab(float &a, float &b)
  12.   {float somma;
  13.   somma = a+b;
  14.   return somma;
  15.   }
  16.   int main()
  17.   {leggi_numeri(x, y);
  18.    sommab(x, y);
  19.   system("pause");
  20.   return 0;
  21.  
  22.   }


PM
Avatar
lorenzo (Normal User)
Guru


Messaggi: 1178
Iscritto: 15/04/2008

Up
0
Down
V
Segnala al moderatore
Postato alle 22:12
Mercoledì, 02/02/2011
il passaggio per riferimento lo puoi usare per restituire più variabili(e non solo una) da una funzione.

Solitamente, però, il passaggio per riferimento viene usato come "puntatore nascosto", molto utile quando c'é il polimorfismo tra classi.

non capisco perchè ti abbiano segnato -1... per compensare metto +1 - TheKaneB - 04/02/11 05:03
PM
Avatar
HeDo (Founder Member)
Guru^2


Messaggi: 2765
Iscritto: 21/09/2007

Up
0
Down
V
Segnala al moderatore
Postato alle 22:18
Mercoledì, 02/02/2011

il passaggio di riferimento è utilizzato per permettere al codice interno della funzione di modificare i parametri che gli vengono passati.

detto questo, la funzione "somma" non ha bisogno, ma "leggi" si.

ma chi è che vota a cazzo? +1 anche per te - TheKaneB - 04/02/11 05:03
PM
Avatar
()
Newbie


Messaggi:
Iscritto:

Up
0
Down
V
Segnala al moderatore
Postato alle 15:54
Giovedì, 03/02/2011
il passaggio di parametri alle funzioni è errato, se vuoi che una funzione abbia come parametri dei riferimenti, essa dev'essere del tipo:
Codice sorgente - presumibilmente Plain Text

  1. <tipo_funzione> <nome_funzione>(<tipo_parametro>* <nome_parametro>,ecc...)


per cui alla funzione leggi_numeri, che diventerà
Codice sorgente - presumibilmente C/C++

  1. void leggi_numeri(float *a, float *b)


dovrai passare come parametri(&x,&y) (in questo caso il passaggio di parametri è necessario perché vuoi modificare direttamente x e y)...

nella funzione sommab è superfluo il passaggio di riferimenti come parametri, dato che x e y non devono essere modificati, per cui la funzione diventerà:
Codice sorgente - presumibilmente C/C++

  1. float sommab(float a,float b)


inoltre se vuoi visualizzare su schermo il risultato di sommab dovresti fare:
Codice sorgente - presumibilmente Plain Text

  1. cout<<sommab(x,y)<<endl;


ricapitolando il codice corretto sarebbe:
Codice sorgente - presumibilmente C++

  1. #include <iostream>
  2.   using namespace std;
  3.   float x;
  4.   float y;
  5.   void leggi_numeri(float *a, float *b)
  6.   {cout<< "scrivi due numeri"<<endl;
  7.   cout << "primo numero: "<<endl;
  8.   cin>>*a;//perché tramite l'asterisco assegna il valore alla zona di memoria alla quale fa riferimento, cioè x
  9.   cout<<"secondo numero: "<<endl;
  10.   cin>>*b;//vale lo stesso di prima
  11.   }
  12.   float sommab(float a, float b)
  13.   {float somma;
  14.   somma = a+b;
  15.   return somma;
  16.   }
  17.   int main()
  18.   {leggi_numeri(&x,&y);
  19.    cout<<sommab(x, y)<<endl;
  20.   system("pause");
  21.   return 0;  
  22.   }



Ultima modifica effettuata da il 03/02/2011 alle 16:13
mm..la riga leggi_numeri(&x,&y); è sbagliata..e cmq il passaggio per riferimento è un'alternativa alle funzioni che richiedono puntatori come argomenti - carlduke - 03/02/11 16:01
è sbagliata perchè la funzione è dichiarata come leggi_numer(float& a,float& b) e non leggi_numeri(float* a,float* b); - carlduke - 03/02/11 16:03
non diciamo cavolate....il passaggio per riferimento non è sbagliato. Si può usare tranquillamente ed è molto usato. Ti conviene studiarti la differenza tra puntatori e reference.... - lorenzo - 03/02/11 16:45
scusate ma la rige leggi_numeri(float & a float& b) non è sbagliata,posso scegliere se usare il passaggio per riferimento o i puntatori - ciao888 - 04/02/11 15:30
non è sbagliata la funzione leggi - ciao888 - 04/02/11 15:35
PM
Avatar
carlduke (Member)
Pro


Messaggi: 153
Iscritto: 29/01/2011

Up
-2
Down
V
Segnala al moderatore
Postato alle 20:53
Mercoledì, 02/02/2011
beh se fai solo
Codice sorgente - presumibilmente Plain Text

  1. sommab(x,y);



lo devi usare, se invece fai :

Codice sorgente - presumibilmente C/C++

  1. float somma = sommab(x,y);



non è indispensabile

però come mai?è che ho letto già sul libro di come funziona il passaggio per riferimento ma mi è difficile capire quando deve essere usato,in questo caso perchè non è necessario? - ciao888 - 02/02/11 21:37
perchè restituisci il valore con return - carlduke - 03/02/11 15:36
PM