我的课本说数组是用const变量设置的。当我使用非const变量时,我可能会遇到哪些问题?

时间:2011-04-09 17:52:23

标签: c++ arrays

我正在阅读的C ++书籍告诉我们,数组将使用常量变量设置,但我想让用户输入指示数组的大小,并且它有效。是否有我应该担心的问题。

4 个答案:

答案 0 :(得分:5)

你是如何声明阵列的?

如果以这种方式声明,可以创建一个大小基于变量的数组:

int size;
cin >> size;
// (assert size is > 0 and < some really big number here)
int* myarray = new int[size];
// Do stuff with it here...
delete [] myarray;  // Don't forget this.

这将工作得很好。你不应该能够以这种方式创建一个数组:

int size;
cin >> size;
int myarray[size]; // should break with an ugly compiler error.

如果您使用了第二种方法并且它有效,那么您就有了一个奇怪的编译器,当您在其他平台上使用其他编译器时,您不应指望它正常工作。

答案 1 :(得分:3)

使用C数组不是最佳做法。请改用std::vector

int n;
std::cin>>n;
std::vector<int> vec(n);//declares int array size of n;

要使用std::vector,您应该包含<vector>

此外,矢量更灵活。例如,您可以在运行时更改向量的大小。

std::vector<int> vec;//declares empty vector

int some_numb;

while(std::cin>>some_numb)//read untill end of file
   vec.push_back(some_numb);//add element at the end of array;

Edit:如果您仍想使用C样式数组而不是向量,这里是语法。

int n;
std::cin>>n;
int * arr = new int[n];

但请记住,在以这种方式创建数组之后,您还应该手动删除它。这是语法。

delete []arr;

答案 2 :(得分:2)

有两种不同的数组分配技术,第一种是 static ,在编译程序时你知道数组的大小。由于在编译时必须知道大小,因此最好使大小为整数const以防止意外更改,这可能会导致程序崩溃:

const int myarray_size = 10;
int myarray[myarray_size];

第二个是动态,只有在运行时才能在编译时知道数组的大小。你必须在这里调用new运算符来告诉操作系统为数组分配内存:

int myarray_size;
cin >> myarray_size;
int* myarray = new int[myarray_size];

您在使用完阵列后也必须稍后调用delete[] myarray

以下是为什么将const用于静态数组大小是一个好习惯的示例:

const int myarray_size = 10;
cin >> myarray_size;  // This won't compile because you're trying to change a const
int myarray[myarray_size];

以下可能会编译(取决于您的设置),但在运行时很容易导致程序崩溃:

int myarray_size;
cin >> myarray_size;
int myarray[myarray_size]

答案 3 :(得分:1)

如果你不添加任何检查,用户可能会创建一个庞大的数组,这可能会占用大量内存。