Je sais que cette question a été posée, mais ma question est plus spécifique, est ici le code:la taille du tableau alloué dynamiquement en C
#include <stdio.h>
#include <time.h> /* must be included for the time function */
main()
{
time_t t = time(NULL);
srand((unsigned) t);
int i = rand();
int a[i];
printf("%d\n", i); /* ouptut: 18659 */
printf("%d\n", sizeof a); /* output: 74636 */
}
Je compilé ce code en utilisant gcc et -ansi option pour le restreindre à reconnaître le C ANSI seulement. Je sais qu'il n'y a aucun moyen que le compilateur puisse savoir à la compilation la taille du tableau car il est déterminé aléatoirement au moment de l'exécution. Maintenant, ma question est est la valeur retournée par sizeof est juste une valeur aléatoire, ou il a une signification?
Ce code C89 n'est pas valide, en raison du tableau de longueur variable. C'est valable dans C99 +, où sizeof fait explicitement de la magie d'exécution sur les VLA (indice: qu'est-ce que 74636/18659?) –
@OliverCharlesworth mais pourquoi compile-t-il? –
Faisons un exercice - nous essayons de multiplier 18659 par 4. Qu'obtenons-nous? –