Questo sito utilizza cookies, anche di terze parti, per mostrare pubblicità e servizi in linea con il tuo account. Leggi l'informativa sui cookies.
Username: Password: oppure
C/C++ - [C] Problema banale su scambio di variabili con una funzione
Forum - C/C++ - [C] Problema banale su scambio di variabili con una funzione

Avatar
torre92 (Normal User)
Rookie


Messaggi: 22
Iscritto: 01/08/2007

Segnala al moderatore
Postato alle 18:30
Lunedì, 27/02/2012
Ciao a tutti,
purtroppo ho iniziato da poco a studiare il C e per quanto questo problema si assolutamente banale, non trovo i chiarimenti necessari su internet visto che magari è per molti scontato... Non però da chi ha iniziato a programmare con PHP, VB.NET ecc...

Dunque, un codice facilissimo:
Codice sorgente - presumibilmente C++

  1. #include <stdio.h>
  2.  
  3. int Scambio(int x, int y) {
  4.         int t;
  5.         t = x;
  6.         x = y;
  7.         y = t;
  8. }
  9.  
  10. int main() {
  11.         int a, b;
  12.         printf("Inserisci il valore di A: ");
  13.         scanf("%d", &a);
  14.  
  15.         printf("Inserisci il valore di B: ");
  16.         scanf("%d", &b);
  17.  
  18.         Scambio(a, b);
  19.         printf("\n\nValore A: %d\nValore B: %d", a, b);
  20.  
  21. }



Ovviamente non funziona perchè non passo alla funzione il riferimento bensì solo il valore...

Come devo fare per renderlo funzionante? E' solo una cosa sintattica direi...?

Grazie mille in anticipo

PM Quote
Avatar
Bonny (Member)
Expert


Messaggi: 435
Iscritto: 24/04/2009

Segnala al moderatore
Postato alle 18:39
Lunedì, 27/02/2012
Hai capito qual' il problema:
"Ovviamente non funziona perchè non passo alla funzione il riferimento bensì solo il valore... ":)
Codice sorgente - presumibilmente C++

  1. #include <stdio.h>
  2.  
  3. int Scambio(int *x, int *y) {
  4.         int t;
  5.         t = *x;
  6.         *x = *y;
  7.         *y = t;
  8. }
  9.  
  10. int main() {
  11.         int a, b;
  12.         printf("Inserisci il valore di A: ");
  13.         scanf("%d", &a);
  14.  
  15.         printf("Inserisci il valore di B: ");
  16.         scanf("%d", &b);
  17.  
  18.         Scambio(&a, &b); // N.B.
  19.  
  20.         printf("\n\nValore A: %d\nValore B: %d", a, b);
  21.  
  22. }



con lìoperatore & ottengo i riferimenti al contenuto di a e b invece l'operatore * ti permette di accedere al contenuto di a e b.

Ultima modifica effettuata da Bonny il 27/02/2012 alle 18:40


Bonny
PM Quote
Avatar
ale.gatti96 (Member)
Pro


Messaggi: 71
Iscritto: 29/11/2011

Segnala al moderatore
Postato alle 18:40
Lunedì, 27/02/2012


PM Quote
Avatar
torre92 (Normal User)
Rookie


Messaggi: 22
Iscritto: 01/08/2007

Segnala al moderatore
Postato alle 18:51
Lunedì, 27/02/2012
Grazie mille a tutti e due!
Avevo capito quello degli asterischi prima della variabile ma non sapevo della & nella chiamata alla funzione, ecco perchè non ho passato l'esame di Fondamenti di Informatica I :rotfl:

PM Quote
Avatar
Bonny (Member)
Expert


Messaggi: 435
Iscritto: 24/04/2009

Segnala al moderatore
Postato alle 19:11
Lunedì, 27/02/2012
Testo quotato

Postato originariamente da torre92:

Grazie mille a tutti e due!
Avevo capito quello degli asterischi prima della variabile ma non sapevo della & nella chiamata alla funzione, ecco perchè non ho passato l'esame di Fondamenti di Informatica I :rotfl:



:nono:  :pat: :)


Bonny
PM Quote
Avatar
pierotofy (Admin)
Guru^2


Messaggi: 6108
Iscritto: 04/12/2003

Segnala al moderatore
Postato alle 19:40
Lunedì, 27/02/2012
Ma perche' usare i puntatori?

Codice sorgente - presumibilmente C++

  1. void swap(int &x, int &y){
  2.   int t = x;
  3.   x = y;
  4.   y = t;
  5. }
  6.  
  7. //....
  8.  
  9. int a = 3;
  10. int b = 4;
  11. swap(a,b);
  12.  
  13. // a = 4, b = 3



Seguimi su Twitter: http://www.twitter.com/pierotofy

Fai quello che ti piace, e fallo bene.
PM Quote
Avatar
Bonny (Member)
Expert


Messaggi: 435
Iscritto: 24/04/2009

Segnala al moderatore
Postato alle 20:25
Lunedì, 27/02/2012
Testo quotato

Postato originariamente da pierotofy:

Ma perche' usare i puntatori?

Codice sorgente - presumibilmente C++

  1. void swap(int &x, int &y){
  2.   int t = x;
  3.   x = y;
  4.   y = t;
  5. }
  6.  
  7. //....
  8.  
  9. int a = 3;
  10. int b = 4;
  11. swap(a,b);
  12.  
  13. // a = 4, b = 3



Piero con tutto il rispetto ma questo gcc non lo compila:
Codice sorgente - presumibilmente C++

  1. #include <stdio.h>
  2.  
  3. void swap(int &x, int &y){
  4.   int t = x;
  5.   x = y;
  6.   y = t;
  7. }
  8.  
  9. int main(){
  10.  
  11. int a=4,b=5;
  12.  
  13. swap(a, b);
  14.  
  15. printf("a=%d\nb=%d",a,b);
  16.  
  17. return 0;
  18. }



Bonny
PM Quote
Avatar
pierotofy (Admin)
Guru^2


Messaggi: 6108
Iscritto: 04/12/2003

Segnala al moderatore
Postato alle 20:40
Lunedì, 27/02/2012
Ah, pensavo che quella sintassi fosse supportata anche in C... a quanto pare funziona solo con C++.

http://publib.boulder.ibm.com/infocenter/lnxpcomp/v8v101/i ...

Se compili con g++ invece che gcc infatti funziona...


Seguimi su Twitter: http://www.twitter.com/pierotofy

Fai quello che ti piace, e fallo bene.
PM Quote