Можно ли указать переменную в качестве спецификатора размера для статически размещенного целочисленного массива?

Я удивлен, что этот код компилируется и работает без ошибок!

int arraysize = 1000;
int array[arraysize];
for(int i=0; i<arraysize; i++)
{
array[i] = i+1;
}

for(int i=0; i<arraysize; i++)
{
cout << array[i];
}

Редактировать: Используемый компилятор: i386-linux-gnueabi-g ++ (Linaro GCC 4.5-2012.01) 4.5.4 20120105 (предварительная версия)

0

Решение

В C ++ размер массива должен быть постоянным. Если бы вы объявили переменную размера constтогда это можно было бы использовать.

C допускает массивы переменной длины (иногда называемые VLA), и некоторые компиляторы C ++ предоставляют их как расширение; вот почему ваш код работает.

Обычно, std::vector это более безопасная и более портативная альтернатива, если вам нужен массив динамического размера.

1

Другие решения

Это, вероятно, особенность вашего компилятора (GCC?), Которая допускает массивы C99 переменной длины. В C99 допустимо определять массивы, такие как

int n;
scanf("%d", &n);
int array[n];

C ++, по стандарту, не поддерживает массивы переменной длины, вероятно, потому что у него есть лучшие альтернативы, а именно std::vector<>, Попробуйте скомпилировать с g++ -pedantic-errors file.cpp и вы получите

error: ISO C++ forbids variable-size array ‘array’

Следует отметить, что массивы переменной длины не поддерживают классы C ++, что является еще одной причиной не беспокоиться о них в C ++, а вместо этого использовать std::vector<>,

1