void foo(int n, int bar[n]) {...}
C'est parce qu'on ne passe jamais un tableau à une fonction, on passe un pointeur vers son premier élément. La convertion est implicite lors de l'appel à la fonction. Le cas d'un paramètre formel d'une fonction est d'ailleurs l'un des rares (si ce n'est le seul) où un tableau est rigoureusement identique à un tableau pointeur.
Le fait que tab soit automatiquement détruit à la sortie du scope n'enlève rien à son côté dynamique
C'est sans doute parce que tu parles d'une taille dynamique et non d'une allocation dynamique. Sinon que répondrais la question, sachant qu'en plus tu as dit que :
est-ce que la taille de la donnée que je veux allouer est connue ou non à la compilation ?
Dans le code suivant, l'allocation est-elle dynamique malgré bien que la taille est connue à la compilation ?
"j'ai besoin de faire une allocation dynamique DONC un malloc"
Il y a peut-être aussi une dimension historique, ce que tu sous-entends dans cette phrase : avant, taille variable voulait forcément dire malloc avec une allocation dynamique. Maintenant (le C99 est pas si jeune, mais il a dû mal à sortir....), une taille variable ne veut plus forcément dire "allocation dynamique" puisque les VLA sont alloués automatiquement.
Partager