In questa lezione parleremo della funzione calloc in C, che è molto utile per l’allocazione dinamica di array.

Nell’esempio precedente abbiamo utilizzato malloc per allocare un array, che è comunque una funzione molto utilizzata anche per tale scopo.

Malloc non inizializza la memoria a zero, dobbiamo farlo esplicitamente, oppure utilizziamo la funzione calloc. Infatti la funzione calloc inizializza ogni byte del blocco di memoria a zero.

La sintassi della funzione calloc in C è la seguente:

void *calloc(size_t num, size_t dim)

Quindi la funzione prevede due argomenti, il primo rappresenta il numero di elementi da allocare mentre il secondo la quantità di memoria per ogni elemento.

Banner Pubblicitario

Se ad esempio vogliamo allocare un vettore di n elementi di tipo intero, possiamo utilizzare calloc:

int *a;
a=(int *) calloc(n,sizeof(int));

Il puntatore punterà al primo elemento di un vettore di n elementi interi.

Possiamo anche utilizzare malloc in questo modo:

int *a;
a=(int *) malloc(n*sizeof(int));

Sia calloc che malloc restituiscono NULL se non riescono ad allocare la quantità di memoria richiesta, ad esempio perché esaurita.


Esempio di utilizzo di calloc in C

Riproponiamo l’esempio del calcolo della media che abbiamo visto nella lezione precedente, al fine di comparare i due metodi.

Ecco dunque il listato completo che fa uso della funzione calloc, per allocare dinamicamente la memoria.

#include <stdio.h>
#include <stdlib.h>

int main () {
	int *a, i, n; 
	float media;
	
	a=(int *) calloc(n,sizeof(int));
	
	printf("Quanti valori?" );
	scanf("%d", &n);

	for(i=0;i<n; i++)    {    
		printf("Elemento %d: ", i+1);   
		scanf("%d",  &a[i]) ;   
 	} 

 	media=0; 
 	for(i=0;i<n;i++)    
 		media=media+a[i];
 	
 	media/=n;
 		printf ("La  media e':  %.2f" ,  media ); 
 		
 	return 0; 
} 

Anche qui si potrebbe effettuare un test sul contenuto del puntatore, in modo tale che, se l’allocazione non avviene correttamente (per esempio se non abbiamo sufficiente spazio di memoria), compaia un messaggio di avviso.

Banner pubblicitario

Chiaramente questo è solo un semplice esempio di utilizzo della funzione calloc in C per allocare la memoria dinamicamente.

Alcuni link utili

Media per riga e per colonna

Somma elementi diagonale principale di una matrice

Come sommare gli elementi della cornice esterna

Come sommare due matrici

Sommare dei numeri di una matrice

Matrice trasposta

Prodotto tra matrici

Ricerca elementi in una matrice

Inserire dati in una matrice

Tavola pitagorica in C

Array multidimensionali

Programma sui triangoli in C

Media dei numeri in un array

Array con numeri random

Quick sort in C

Selection sort in C

Merge sort in C

Insertion Sort in C