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 [...]

ATTENZIONE: quello che hai appena letto è solo un estratto, l'Articolo Tecnico completo è composto da ben 2488 parole ed è riservato agli ABBONATI. Con l'Abbonamento avrai anche accesso a tutti gli altri Articoli Tecnici che potrai leggere in formato PDF per un anno. ABBONATI ORA, è semplice e sicuro.

Scarica subito una copia gratis

2 Commenti

  1. Avatar photo willygroup 2 Giugno 2016
    • Avatar photo Maurizio 2 Giugno 2016

Scrivi un commento

Seguici anche sul tuo Social Network preferito!

Send this to a friend