Corso C su Raspberry PI partendo da zero: i Puntatori

Dopo aver studiato le modalità per il controllo del video, in questo articolo affrontiamo un argomento che dà tanto timore ai principianti. Parliamo dei puntatori, utilizzati con molta frequenza nei programmi più efficienti e veloci. Come vedremo, le paure a questa tipologia di dati saranno infondate e, approcciandole nel modo corretto, consentiranno di realizzare dei software estremamente efficaci. Il segreto per una loro buona comprensione è quello di procedere con estrema cautela e molta calma, e proseguire con gli approfondimenti solo quando si è compreso alla perfezione il tassello precedente.

Introduzione

Benché il linguaggio C permetta, in teoria, di scrivere qualsiasi programma senza puntatori, il loro utilizzo permette di sfruttare a pieno la potenza del linguaggio e del calcolatore. C'è una falsa credenza sulla difficoltà dell'argomento. Se studiati attentamente e in maniera approfondita, la loro implementazione risulterà indolore. Purtroppo, se da un lato è facile capire la filosofia di funzionamento dei puntatori, dall'altro è altrettanto facile commettere errori nel loro utilizzo. Spesso l'errore è così impercettibile e nascosto che anche i più bravi programmatori fanno fatica a scovarlo.

Il puntatore in breve

Per capire il concetto di puntatore dobbiamo sapere cosa è l'indirizzo di memoria. Esso è semplicemente un numero (per il momento generico) che contraddistingue una particolare cella di memoria. Qualche lezione addietro abbiamo studiato come le variabili occupino un certo spazio in RAM, e nella maggior parte dei computer, esse sono stanziati nel seguente modo:

  • Char: 1 byte;
  • Short: 2 bytes:
  • Int: 4 bytes;
  • Long: 4 bytes;
  • Float: 4 bytes;
  • Double: 8 bytes;
  • Long Double: 12 bytes;
  • Long long: 8 bytes;
  • Stringa: secondo la lunghezza.

Un puntatore è, dunque, una variabile che contiene un indirizzo di memoria. Al momento, il suo utilizzo pratico non balza subito agli occhi ma vedremo, nel proseguo della lezione, come del suo apporto di aiuto non se ne potrà più fare a meno. Dobbiamo immaginare la memoria del computer come un gigantesco array, con un indirizzo specifico per ogni cella (e in effetti è così). A questo link potete trovare un'altra valida documentazione. Per conoscere l'indirizzo di memoria nel quale è memorizzata una variabile si usa l'operatore "&". L'esempio successivo ci dà l'occasione per il primo approccio ai puntatori.

Primo esempio

In questo primo esempio, un programma dichiara quattro variabili di diversa tipologia (e quindi di differente lunghezza) assegnando dei valori, come segue:

  • char figli = 5;
  • char eta = 27;
  • int velocita = 123;
  • float peso = 93.3;

Si vuole sapere quanti bytes occupano le variabili, in memoria, e in quali locazioni di RAM esso sono memorizzate (anche se quest'ultima richiesta non ha delle implicazioni pratiche e utili). Il seguente listato risolve il problema.

#include <stdio.h>
int main() {

   char figli = 5;
   char eta = 27;
   int velocita = 123;
   float peso = 93.3;
   double coefficente = 3.456E23;

   printf("Indirizzo di memoria di 'figli':       %p, Bytes: %d\n",&figli,sizeof(figli));
   printf("Indirizzo di memoria di 'eta':         %p, Bytes: %d\n",&eta,sizeof(eta));
   printf("Indirizzo di memoria di 'velocita':    %p, Bytes: %d\n",&velocita,sizeof(velocita));
   printf("Indirizzo di memoria di 'peso'         %p, Bytes: %d\n",&peso,sizeof(peso));
   printf("Indirizzo di memoria di 'coefficente': %p, Bytes: %d\n",&coefficente,sizeof(coefficente));
   return(0);
}

Pertanto, all'atto della dichiarazione, il compilatore "prenota" e assegna una o più stanze alla variabile (come succede per l'albergo). Le stanze, ossia gli indirizzi di memoria, sono progressivamente numerate. Nell'esempio appena proposto, la variabile peso occupa 4 bytes, essendo di tipo float ed è allocata a partire dall'indirizzo 0022FEE4 e "invade" (ossia occupa, abbraccia) quattro celle di memoria. Al programmatore non serve [...]

Iscriviti e ricevi GRATIS
Speciale Pi

Fai subito il DOWNLOAD (valore 15€) GRATIS

ATTENZIONE: quello che hai appena letto è solo un estratto, l'Articolo Tecnico completo è composto da ben 2488 parole ed è riservato agli abbonati PLATINUM. Con l'Abbonamento avrai anche accesso a tutti gli altri Articoli Tecnici MAKER e PLATINUM e potrai fare il download (PDF) di tutti gli EOS-Book, Firmware e degli speciali MONOTEMATICI. ABBONATI ORA, è semplice e sicuro.

Abbonati alle riviste di elettronica

2 Commenti

  1. willygroup willygroup 2 giugno 2016
    • Maurizio Di Paolo Emilio Maurizio 2 giugno 2016

Scrivi un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *

Iscriviti e ricevi GRATIS
Speciale Pi

Fai subito il DOWNLOAD (valore 15€) GRATIS