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

Banner Pubblicitario

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:

Banner pubblicitario

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

Indice argomenti linguaggio C

La funzione fopen

La funzione fclose

Funzione fprintf

Funzione fscanf

Allocazione dinamica della memoria con malloc

Strutture in C

Typedef struct in C

Esercitazione sulle struct in C

Realizzare un menù di scelta in C

Strutture complesse in C

Come sommare gli elementi della cornice esterna

Come sommare due matrici

Matrice trasposta

Prodotto tra matrici

Ricerca elementi in una matrice

Tavola pitagorica in C

Array multidimensionali

Quick sort in C

Selection sort in C

Merge sort in C

Insertion Sort in C