Puntatori nelle funzioni

Ciao!

In questo post parlerò nuovamente dei puntatori,
argomento già introdotto in questo post.



Questa volta vedremo l'uso dei puntatori nelle funzioni.
Questo modo di usare i puntatori risulta molto utile nei casi in cui si necessiti di modificare il valore originale di una variabile, passandola come parametro di una funzione.

Ma vediamo subito un esempio pratico, caricate il seguente codice nel vostro Arduino ed aprite il serial monitor.


  1. int alfa = 10;
  2. int beta = 11;
  3. int delta = 12;
  4. int gamma = 13;
  5.  
  6. void setup()
  7. {
  8.   Serial.begin (9600);
  9.   delay (1000);
  10.  
  11.   stampa();
  12.   funzione1(&alfa, &beta);
  13.   funzione2(delta, gamma);
  14.   stampa();
  15. }
  16.  
  17. void loop()
  18. {
  19. }
  20.  
  21. void funzione1(int *var1, int *var2)
  22. {
  23.   int temp;
  24.   temp = *var1;
  25.   *var1 = *var2;
  26.   *var2 = temp;
  27. }
  28.  
  29. void funzione2(int var1, int var2)
  30. {
  31.   int temp;
  32.   temp = var1;
  33.   var1 = var2;
  34.   var2 = temp;
  35. }
  36.  
  37. void stampa()
  38. {
  39.   Serial.print ("alfa = ");
  40.   Serial.print (alfa);
  41.   Serial.print ("   beta = ");
  42.   Serial.println (beta);
  43.   Serial.print ("delta = ");
  44.   Serial.print (delta);
  45.   Serial.print ("   gamma = ");
  46.   Serial.println (gamma);
  47. }

Come potete vedere, la funzione "funzione1" effettua lo scambio (swap) dei valori delle variabili, la funzione "funzione2" no.

Questo perchè alla funzione1 sono stati passati gli indirizzi delle variabili, mentre alla funzione2 sono stati passati solo i valori.
La funzione1 quindi, conoscendo l'indirizzo delle variabili, può andare a modificare i valori che trova nell'area di memoria agli indirizzi passati. La funzione2 non conosce questi indirizzi, quindi non può intaccare i dati.

Spero che tutto sia chiaro,
se hai dei dubbi lascia pure un commento qui sotto,
Ciao!

Nessun commento:

Posta un commento

Lascia un commento qui sotto, ti risponderò il prima possibile!

Altri Post