Maison >développement back-end >C++ >Pourquoi les tableaux de longueur variable fonctionnent-ils dans ce code C malgré la règle de limite de tableau constant ?

Pourquoi les tableaux de longueur variable fonctionnent-ils dans ce code C malgré la règle de limite de tableau constant ?

DDD
DDDoriginal
2024-12-16 11:40:10111parcourir

Why Do Variable-Length Arrays Work in This C   Code Despite the Constant Array Bound Rule?

Tableaux de longueur variable en C malgré l'exigence de limite de tableau constante

En C, il est indiqué que la limite du tableau doit être une expression constante. Cependant, dans certains scénarios de code, il semble que cette règle soit violée sans provoquer d'erreurs. Prenons l'exemple suivant :

#include <iostream>
using namespace std;

int main(){
    int n=10;
    int a[n];

    for (int i=0; i<n; i++) {
        a[i]=i+1;
        cout<<a[i]<<endl;
}
    return 0;
}

Conformément aux manuels, ce code devrait générer une erreur puisque n n'est pas une expression constante. Étonnamment, il s'exécute parfaitement dans Xcode4 sous Mac. Qu'est-ce qui explique cette apparente contradiction ?

La réponse réside dans une fonctionnalité C99 appelée matrices de longueur variable (VLA). Bien qu'ils soient principalement utilisés en C, certains compilateurs prennent également en charge les VLA en C. Dans ce contexte, int a[n] est un VLA qui alloue de l'espace sur la pile semblable à int a[10].

Par conséquent, le code ci-dessus utilise un VLA de longueur variable n. Cette fonctionnalité permet la création de tableaux avec des tailles déterminées dynamiquement, même si la limite du tableau n'est techniquement pas une expression constante.

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn