c ++初始化具有声明大小的数组作为整数的值

时间:2011-06-13 12:56:30

标签: c++ arrays

我想使用我读入整数变量的值初始化一个大小的数组。 我似乎无法理解为什么它在Dev-C ++中有效但在Turbo C ++中无效。这是帮助说清楚的代码

int arr_size; //cin max value for lets say number of students or something...
cin >> arr_size;
int array[arr_size]; // declares array with size (assume 10 or 100) with range 0 to 9 or 0-99

编译器在Turbo C ++中显示错误(我知道真的很老,但不幸的是我的学校使用它)。 Dev-C ++和代码块没有。

为什么会这样?我知道它的不良做法“正如他们在某些书籍中定义的那样”,以使数组大小与int值相同,但是在Turbo C ++中有解决方法吗? 我想知道错误发生的原因以及如何解决它...非常感谢!

4 个答案:

答案 0 :(得分:8)

C ++标准仅允许使用常量表达式调整数组大小。 (但是,某些编译器可能会将其作为非标准语言扩展提供。)

您可以改为使用std::vector

std::vector<int> array(arr_size);

或者您可以手动动态分配内存:

int *const array = new int[arr_size];

...

delete [] array;  // Remember to delete when you're done

答案 1 :(得分:5)

标准c ++中不允许使用

Variable length arrays。你可以在C99中完成。考虑将C ++ std::vector用作:

std::vector<int> array(arr_size);

如果必须,你可以index it完全喜欢数组。

答案 2 :(得分:2)

解决方法是动态分配此数组,确保在完成后删除内存。

int arr_size; //cin max value for lets say number of students or something...
cin >> arr_size; 
int *arr = new int[arr_size];
//use the array as needed
delete [] arr;

答案 3 :(得分:1)

您需要变量长度数组(VLA),这在C ++中是不允许的。它允许在C99。

使用std::vector<int>代替:

int arr_size; 
cin >> arr_size;
std::vector<int> array(arr_size);