Ragazzi che differenze ci stanno tra la funzione malloc() e la funzione calloc() a me sembrano veramente molto simili:

questo esempio che fà? alloca un array formato da 5 elementi di tipo struct data, giusto?

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

struct data{
        char nome[20];
        char cognome[20];
        int anni;
};

typedef struct data data;

int main(){

        data *p;

        p = (data *)calloc(5, sizeof(data));

        free(p);

        return 0;
}
ma non sarebbe stata esattamente la stessa cosa se avessi fatto:
p= malloc(5*sizeof(data)); ? o mi sfugge qualcosa?

Grazie
Andrea