指针数组和指向c ++中数组的指针

时间:2017-06-03 14:43:31

标签: c++ arrays pointers

我有一个类,其中受保护的部分我需要声明一个大小未知的数组(大小作为参数提供给构造函数),所以我环顾四周,发现最好的解决方案是声明一个指针数组,每个元素指向一个整数:

int* some_array_;

只需在构造函数中我将使用“new”运算符:

some_array_ = new int[size];

并且它有效,我的问题是:我可以在类中声明一个数组而不定义大小吗?如果是,我该怎么做,如果不是那么为什么它适用于指针而不是普通数组呢?

编辑:我知道vecotrs会解决问题但我不能在我的HW上使用它们

3 个答案:

答案 0 :(得分:1)

你必须从编译器的角度考虑这是如何工作的。指针使用特定的空间量(通常为4个字节),并使用new运算符请求更多空间。但是空阵列使用了多少空间?它不能是0个字节,编译器无法知道为没有任何元素的数组分配什么空间,因此不允许这样做。

答案 1 :(得分:0)

你总是可以使用矢量。为此,请在代码顶部添加以下代码行:#include <vector>,然后按如下方式定义向量:

vector<int> vectorName;

请记住,向量不是数组,不应该这样对待。例如,在循环中,您需要检索这样的向量元素:vectorName.at(index)而不是这样:vectorName[index]

答案 2 :(得分:0)

假设你有一个大小为2的整数数组。所以你有数组[0,1] 数组是memery的连续字节,所以如果你声明一个然后你想要在该数组的末尾添加一个或多个元素,那么确切的下一个位置(在这种情况下:在索引2(或第3个整数))具有高已经分配的机会,所以在这种情况下你不能这样做。一种解决方案是创建一个新数组(在这种情况下为3个元素),将初始数组复制到新数组并在最后一个位置添加新整数。显然这成本很高,所以我们不这样做。

C ++中对此问题的解决方案是Vector,而Java中则是ArrayLists。