Il est important d'avoir des définitions claires de ce que signifient les termes. Malheureusement, il semble y avoir plusieurs définitions de ce que signifient les tableaux statiques et dynamiques.
Les variables statiques sont des variables définies à l' aide de l'allocation de mémoire statique . Il s'agit d'un concept général indépendant de C / C ++. En C / C ++, nous pouvons créer des variables statiques avec une portée globale, fichier ou locale comme ceci:
int x[10];
static int y[10];
foo() {
static int z[10];
Les variables automatiques sont généralement implémentées à l'aide d' une allocation de mémoire basée sur la pile . Un tableau automatique peut être créé en C / C ++ comme ceci:
foo() {
int w[10];
Ce que ces tableaux, x, y, z
et w
ont en commun, c'est que la taille de chacun d'eux est fixe et définie au moment de la compilation.
L'une des raisons pour lesquelles il est important de comprendre la distinction entre un tableau automatique et un tableau statique est que le stockage statique est généralement implémenté dans la section de données (ou section BSS ) d'un fichier objet et le compilateur peut utiliser des adresses absolues pour accéder aux tableaux. ce qui est impossible avec le stockage basé sur la pile.
Ce que l'on entend généralement par tableau dynamique n'est pas un tableau redimensionnable, mais implémenté à l'aide d' une allocation de mémoire dynamique avec une taille fixe déterminée au moment de l'exécution. En C ++, cela se fait à l'aide de l' new
opérateur .
foo() {
int *d = new int[n];
Mais il est possible de créer un tableau automatique avec une taille de correctifs définie au moment de l'exécution en utilisant alloca
:
foo() {
int *s = (int*)alloca(n*sizeof(int))
Pour un vrai tableau dynamique, il faut utiliser quelque chose comme std::vector
en C ++ (ou un tableau de longueur variable en C ).
Que signifiait la mission dans la question du PO? Je pense qu'il est clair que ce qui était recherché n'était pas un tableau statique ou automatique, mais un tableau qui utilisait l'allocation de mémoire dynamique à l'aide de l' new
opérateur ou un tableau de taille non fixe utilisant par exemple std::vector
.