我想使用我读入整数变量的值初始化一个大小的数组。 我似乎无法理解为什么它在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 ++中有解决方法吗? 我想知道错误发生的原因以及如何解决它...非常感谢!
答案 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)
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);