PDA

View Full Version : Dimensione costante array


Shiroga
23-09-2013, 14:59
So per certo che in C++ la dimensione di un array deve essere dichiarata const.
Non trovo scritto da nessuna parte, né sui libri, né su internet, perché è considerato errore, almeno teoricamente parlando, non dichiarare const la dimensione di un array. Esempio:

const int n=5;

int v[n];

[Kendall]
23-09-2013, 15:32
So per certo che in C++ la dimensione di un array deve essere dichiarata const.
Non trovo scritto da nessuna parte, né sui libri, né su internet, perché è considerato errore, almeno teoricamente parlando, non dichiarare const la dimensione di un array. Esempio:

const int n=5;

int v[n];

La dimensione di un array è fissa per concetto stesso dell'array, cioè una sequenza adiacente di byte in memoria, ciò non significa che per la costruzione di un array la dimensione debba essere una costante.

Per fare un esempio molto semplice, un array può essere costruito tramite una dimensione costante (dichiarata a compile time):

int array[5];

O tramite una dimensione dichiarata a runtime:

int dim;
cin >> dim;
int *array = new int[dim];

lorenzo001
23-09-2013, 22:11
Con la costante usi l'allocazione statica dell'array in quanto il compilatore sa in partenza quanto spazio riservare all'array (e per questo la costante, dato che dopo questo spazio non può variare).

Se usi l'allocazione dinamica dell'array con la new, allora potrai indicare a runtime la dimensione di spazio da allocare (nello spazio heap).

Tuttavia esiste anche la forma

cin >> dimensione;
int array[dimensione];

che è un tipo di allocazione dinamica (lo spazio quindi viene indicato a runtime e non con una costante) ma *solo* se il compilatore usato supporta lo standard C99 e si chiama VLA (Variable Lenght Array). Ovviamente se compili un programma che usa i VLA con un compilatore che non supporta lo standard C99 avrai un errore e potrai utilizzare soltanto i primi due tipi di allocazione.