Je me permets également de faire une remarque sur memset(tab, 0, sizeof(tab)), plus précisément sur sizeof(tab). Cela sera évoqué plus tard dans le cours, mais il me semble pertinent de dire quelques mots à ce sujet compte tenu de votre exemple.
Suivant l'endroit du code où vous appelez sizeof(tab), vous risquez d'avoir une mauvaise surprise sur le résultat que vous obtiendrez. Pour illustrer mon propos, je vous présente deux exemples:
#define N ...
void foo
() {
int tab
[N
];
sizeof(tab
); /* == N * sizeof(int) */ }
Dans ce premier exemple, sizeof(tab) retourne bien le nombre d'octets nécessaires pour représenter en mémoire un tableau de N entiers.
#define N ...
void foo() {
int tab[N];
bar(tab);
}
void bar
(int tab
[]) {
sizeof(tab
); /* == sizeof(int*) */ }
Dans ce deuxième exemple, sizeof(tab) retourne le nombre d'octets nécessaires pour représenter en mémoire un pointeur sur un entier.
Le cours expliquera en temps voulu le pourquoi du comment. En attendant, gardez juste à l'esprit que si vous invoquez sizeof sur un tableau déclaré dans une portée différente, vous n'obtiendrez pas le nombre d'octets pour représenter le tableau.