" que ça doit être possible qu'avec les tableau statiques mais pas avec les tableau alloués dynamiquement, c'est ça ? Si oui pourquoi ? Si non pourquoi ?
"
Ce n'est effectivement possible qu'avec les tableaux statiques tout simplement parce qu'un opérateur sizeof() est directement remplacé par une constante au moment de la compilation, il faut donc que la taille du tableau soit connue au moment de la compilation, or ce n'est le cas qu'avec les tableaux statiques.
Si t'as un tableau statique "int tab[5]" quelque part dans ton code et un "sizeof(tab)" ailleurs dans ton code alors au moment de la compilation, pour le sizeof le compilateur va aller chercher "tab" dans sa table de symboles et va voir que cette variable est un tableau de 5 int, il pourra donc remplacer directement l'opérateur sizeof par la constante correspondante (ici 5 fois la taille d'un int).
En revanche dans le cas d'une fonction "void f(int t[])" là le symbole "t" n'est effectivement qu'un simple pointeur de int et fait la taille d'un mot, un "sizeof(t)" serait donc remplacé par une constante équivalent à la taille d'un mot au moment de la compilation.