Riferimenti.

riferimento  sono essenzialmente gli stessi puntatori, ma con una sintassi diversa. A differenza di un puntatore, un riferimento:
  • Deve essere inizializzato al momento della creazione.
  • Non può essere modificato mentre il programma è in esecuzione.
tipo_dati &nome_riferimento = dati;
Un riferimento può funzionare negli stessi casi di un puntatore:

  • "Prendi il controllo" dei dati, cosiddetto riferimento  come un "alias", attraverso di esso puoi leggere e scrivere.
  • Essere un argomento nelle funzioni.
  • Fornire un migliore accesso ai dati.
A differenza di un puntatore, un riferimento non può essere modificato, punta sempre ai dati che gli sono stati mostrati durante l'inizializzazione.

Riferimenti ai tipi di dati.
Considera il primo esempio di puntatore in questo capitolo, ma usando i riferimenti. L'esempio è completamente simile in termini di ciò che sta accadendo, ma al posto dei puntatori vengono utilizzati riferimenti:
byte b; // variabile di tipo byte.
b = 10; // b ora ha 10.
byte &link = b; // link - variabile "riferimento a un oggetto di tipo byte".
link = 24; // b ora ha 24 anni (scrivi tramite riferimento).
byte s; // variabile s.
s = link; // s ora è anche uguale a 24 (leggi dal riferimento).
Ricordiamo l'esempio con la funzione che quadra una variabile e lo riscriviamo tramite riferimenti: passeremo un riferimento alla variabile come argomento di funzione.
void setup() 
     int value = 7; // creato una variabile. 
     square(value); // passato a una funzione. 
     // qui il value è già = 49.
}
void square(int &val) 
     // val - riferimento all'argomento.
     val = val * val;
}
Il funzionamento del programma è completamente identico all'esempio con un puntatore, ma in questa applicazione i riferimenti sono molto più convenienti dei puntatori: devi scrivere meno caratteri, il codice sembra più leggibile.

Riferimento a String.
Una stringa è anche una quantità di dati a cui è possibile fare riferimento. Ho spostato questo argomento in un capitolo a parte perché è molto importante: le stringhe sono uno strumento pesante che, se usato in modo errato, può portare a un improvviso overflow di RAM e il microcontrollore si bloccherà. Il punto principale in cui abbiamo bisogno di indirizzi è passare una stringa come argomento. Se si passa una stringa per valore, verrà creata una nuova istanza della stringa nella RAM, ovvero durante il funzionamento della funzione avremo in memoria due stringhe identiche. Se la memoria è abbastanza occupata e la stringa è grande, possono verificarsi problemi. L'esempio più semplice, la funzione prende una stringa come argomento e la invia semplicemente alla porta:
void setup() 
     Serial.begin(9600);
     String myString = "hello world!"; 
     printString(myString); 
void printString(String string) 
     Serial.println(string); 
void loop() 
{

All'interno della funzione printString(), ci sono due stringhe identiche in memoria e, quando viene chiamata, viene impiegato del tempo per allocare memoria per una copia della stringa e copiarla lì.
È molto facile ottimizzare uno scenario del genere: passare la stringa non per valore, creandone una copia, ma passando l'indirizzo tramite un collegamento all'indirizzo:
void setup() 
     Serial.begin(9600); 
     String myString = "hello world!"; 
     printString(myString);
}
void printString(String &string) 
     Serial.println(string);
}
void loop() 
{

Questo modo di lavorare con una stringa è più veloce e sicuro per schizzi pesanti e stringe di grandi dimensioni.

Riferimento struttura.
L'uso dei riferimenti semplifica l'accesso alle strutture nidificate:
struct Values 
     int value1; 
     float value2; 
}; 
struct BigStruct 
     Values values; // tipo elemento Values 
     int otherValue; 
}; 
BigStruct myStruct; 
// riferimento a un elemento float 
float &link = myStruct.values.value2; 
// assegnare tramite riferimento 
link = 3.14; 
// quì myStruct.values.value2 == 3.14 
La sintassi è ancora un po' più compatta che con un puntatore: appellare come al solito, tramite un punto, e non tramite una freccia ->.

Crea il tuo sito web gratis! Questo sito è stato creato con Webnode. Crea il tuo sito gratuito oggi stesso! Inizia