我忘记了如何在 C++ 中初始化指针数组,如下所示:
int * array[10];
这是一个合适的解决方案吗?这里:
array = new int[10];
// Is this the correct way?
原文由 perkes456 发布,翻译遵循 CC BY-SA 4.0 许可协议
我忘记了如何在 C++ 中初始化指针数组,如下所示:
int * array[10];
这是一个合适的解决方案吗?这里:
array = new int[10];
// Is this the correct way?
原文由 perkes456 发布,翻译遵循 CC BY-SA 4.0 许可协议
一般来说,在大多数情况下,用确切的地址初始化数组没有多大意义。您可以在数组使用期间分配地址或分配适当的内存。
通常用空指针初始化一个指针数组是有意义的。例如
int * array[10] = {};
如果您想声明数组并立即为数组的每个元素分配内存,您可以编写例如
int * array[10] =
{
new int, new int, new int, new int, new int, new int, new int, new int, new int, new int
};
或者
int * array[10] =
{
new int( 0 ), new int( 1 ), new int( 2 ), new int( 3 ), new int( 4 ), new int( 5 ), new int( 6 ), new int( 7 ), new int( 8 ), new int( 9 )
};
但无论如何,最好使用一些循环或标准算法进行分配,因为通常数组可以有超过 10 个元素。
此外,您不应忘记删除所有已分配的内存。例如
std::for_each( std::begin( array ), std::end(array ), std::default_delete<int>() );
或者,如果您已经定义了 int 类型的对象,您可以编写例如
int x0, x1, x2, x3, x4, x5, x6, x7, x8, x9;
//...
int * array[10] =
{
&x0, &x1, &x2, &x3, &x4, &x5, &x6, &x7, &x8, &x9
};
这种初始化经常用于函数指针数组。
原文由 Vlad from Moscow 发布,翻译遵循 CC BY-SA 3.0 许可协议
3 回答2k 阅读✓ 已解决
2 回答3.9k 阅读✓ 已解决
2 回答3.2k 阅读✓ 已解决
1 回答3.2k 阅读✓ 已解决
1 回答2.7k 阅读✓ 已解决
3 回答3.4k 阅读
1 回答1.6k 阅读✓ 已解决
在 10 个 int 数组上静态定义 10 个指针
动态:
更好的解决方案,因为您使用 C++:使用
std::vector
由于我们使用向量作为指针数组,让我们完全摆脱指针
然后像矩阵一样访问数组:
更进一步,一种初始化所有行的方法,使用 C++11,最后制作一个 10x50 int 矩阵(但如果我们愿意,大小也可以在循环内改变)。需要 gcc 4.9 和
g++ -std=c++11
来构建