Tableau C lié en tant qu'expression constante : exception dans le code
En C, un tableau lié doit généralement être une expression constante, garantissant que la taille du tableau est connue lors de la compilation. Toutefois, dans certains cas, cette règle semble être violée. Explorons un exemple spécifique :
#include <iostream> using namespace std; int main() { int n = 10; int a[n]; // Array a with size n for (int i = 0; i < n; i++) { a[i] = i + 1; cout << a[i] << endl; } return 0; }
Ce code, lorsqu'il est compilé à l'aide de Xcode4 sur Mac, s'exécute sans aucune erreur. Malgré le fait que la taille du tableau a n'est pas une expression constante, le code fonctionne.
Explication : tableaux de longueur variable (VLA)
La raison pour laquelle le code fonctionne est dû à une fonctionnalité appelée Tableaux de longueur variable (VLA), qui a été introduite dans C99. Les VLA permettent de déterminer la taille d'un tableau au moment de l'exécution, contrairement aux tableaux classiques dont la taille doit être connue au moment de la compilation.
Dans le code fourni, n n'est pas une expression constante mais une variable. Cependant, étant donné que le compilateur de Xcode4 prend en charge VLA, il est capable d'allouer de la mémoire au tableau a pendant l'exécution en fonction de la valeur de n.
Allocation de pile par rapport à l'allocation de tas
Il est important de noter que les VLA sont alloués sur la pile, comme les tableaux statiques. Cela signifie que la mémoire du tableau est allouée et libérée automatiquement lorsque le programme entre et sort de la fonction dans laquelle le VLA est déclaré. Ce comportement est différent des tableaux classiques alloués sur le tas et doivent être gérés manuellement à l'aide de pointeurs.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!