In questa lezione studieremo gli array di puntatori. Infatti, dato che i puntatori sono delle variabili, si possono avere anche gli array di puntatori.
Facciamo innanzitutto un esempio, dichiarando un array di puntatori a di 20 elementi:
int *a[20];
Quindi, se ad esempio vogliamo assegnare l’indirizzo di una variabile intera di nome x al sesto elemento dell’array dovrei scrivere:
a[5]=&x;
Realizziamo un semplice programma in C che stampa il valore contenuto nell’elemento a[5].
Ecco dunque il listato completo:
#include <stdio.h>
main() {
int *a[20]; //dichiariamo un array di 20 elementi
int x;
x=8; //assegniamo il valore 8
a[5]=&x;//assegniamo l'indirizzo della variabile x
printf("%d\n", *a[5]); //visualizziamo il valore di x
system("PAUSE");
}
Realizziamo adesso un semplice programma in C che permette di prendere un array con 4 elementi in input. Questo array viene poi modificato utilizzando i puntatori.
Esercizio con gli array di puntatori
Prendiamo in input un array a con quattro elementi {1,2,3,4}, modifichiamo poi i valori aggiungendo 5 ad ogni elemento e ne visualizziamo il risultato in output.
Utilizziamo un ciclo for con un indice i che va da 0 a 3. Dopo incrementiamo ciascun numero di 5 con questa istruzione: *(a+i)=a[i]+5; che posso scrivere anche così: *(a+i)=*(a+i)+5; o in forma contratta: *(a+i)+=5. Poi stampo in output i nuovi numeri dell’array ottenuti: {6,7,8,9}.
Ecco dunque il listato completo:
#include <stdio.h>
main() {
int a[4]={1,2,3,4};
int i;
for(i=0;i<4;i++){
*(a+i)+=5;
printf("%d\n", a[i]);
/* potrei anche scrivere printf("%d\n", *(a+i)); */
}
system("PAUSE");
}
Uno dei maggiori utilizzi di array di puntatori è negli array di stringhe.
Facciamo quindi un esempio:
char *c[3]
definisce un vettore di 3 puntatori a carattere.
Quindi ad esempio char *coding[]={“scratch”, “Algobuild”, JavaScript”};
Le stringhe possono anche avere lunghezza differente e in memoria vengono allocate consecutivamente. In coding[i] viene memorizzato infatti un puntatore a tale locazione.
Chiaramente questi sono solo dei semplici esempi, ci eserciteremo ancora nei prossimi tutorial.
Alcuni link utili
Allocazione dinamica della memoria con malloc
Esercitazione sulle struct in C
Realizzare un menù di scelta in C
Come sommare gli elementi della cornice esterna
Ricerca elementi in una matrice