Cosa sono i puntatori? capirli con Arduino

Ciao a tutti!

questo post è un po diverso dal solito,
non riguarda direttamente Arduino (o forse si..) ma riguarda più propriamente la base del linguaggio Arduino, ovvero il C.

L'argomento infatti sono i puntatori, lo scopo è affrontarli in modo semplice, giusto per comprenderne le basi. Questo strumento può sembrare un po astratto, ma può rivelarsi molto utile conoscerlo quando si affrontano programmi complessi. Cominciamo subito a vedere di cosa si tratta allora!





Nel linguaggio C, se inizializzo una variabile di tipo int chiamata "pippo", verrà riservato uno "spazietto" dentro la memoria del nostro Arduino per permetterci di memorizzare un numero dentro la variabile.

Infatti bisogna sapere che i microcontrollori hanno una memoria in cui vengono "posizionate" le variabili.
Un "int" di Arduino ad esempio, occupa 16bit di questa memoria (infatti il suo valore può essere massimo 65536, ovvero 2 alla 16).

Lo spazio occupato dipende appunto dal tipo di variabile, ad essa corrisponderà poi un indirizzo, che ci dice dove si trovano i dati della variabile.

Posso conoscere l'indirizzo della prima area di memoria occupata dalla variabile "pippo" scrivendo "&pippo".

Una volta che conosco l'indirizzo posso anche utilizzarlo per cambiare il valore contenuto nella variabile.
Questo è quello che faremo nell'esempio qui sotto.

Ecco il primo codice, caricatelo nel vostro Arduino e aprite il serial monitor cliccando sulla lente in alto a destra dell'IDE.


Come potrete vedere ci sarà un numero che incrementa ogni secondo. Quel numero è la variabile "pippo", ma non lo sto incrementando ogni secondo nello stesso modo, infatti una volta incremento direttamente la variabile "pippo", la volta dopo incremento il "numero" che trovo all'indirizzo puntato dal "puntatore1". Il entrambi i casi l'effetto è lo stesso, perchè l'indirizzo puntato da "puntatore1" è quello della variabile "pippo"


Ecco ora un altro esempio, qui c'è una cosa che è meglio non fare, cioè assegnare ad un puntatore un'area di memoria forzandogliela manualmente (come ho fatto con il "puntatore2") infatti modificando il programma si corre il rischio di andare a scrivere in una zona di memoria non desiderata. Lo scopo è dimostrare come sia possibile scrivere su una variabile conoscendone l'indirizzo e il tipo della variabile.

Nell'esempio potete vedere anche un'array, cioè una serie di più variabili inizializzate insieme. Grazie all'indice [ ] è possibile decidere quale variabile  leggere o scrivere. Infatti se guardiamo lo sketch qui sotto, andando a leggere la variabile numero 3 dell'array1 il valore restituito sarà 6 (il primo valore dell'array è lo zero).

I dati contenuti nell'array vengono disposti in aree di memoria contigue, quindi incrementando l'indirizzo del puntatore collegato all'int zero dell'array, potrò leggere o scrivere tutte le variabili dell'array stesso.



Questo è tutto, so che l'argomento non è semplice, ma da qualche parte bisogna pure incominciare!
Per approfondimenti vi rimando a questo bell'articolo. Per domande su questo post lasciate come al solito un commento qui sotto, ciao!

Seguimi sulle mie pagine per rimanere sempre aggiornato sui nuovi post!

1 commento:

  1. ciao bello ,ti domando quale sarebbe la comodità di usare i puntatori in un codice?

    RispondiElimina

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

Altri Post