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++ - [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: 437
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
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: 437
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: :)

PM Quote
Avatar
pierotofy (Admin)
Guru^2


Messaggi: 6230
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



Il mio blog: https://piero.dev
PM Quote
Avatar
Bonny (Member)
Expert


Messaggi: 437
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. }


PM Quote
Avatar
pierotofy (Admin)
Guru^2


Messaggi: 6230
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...


Il mio blog: https://piero.dev
PM Quote