我忘了如何在c ++中初始化指针数组,如下所示:
int * array[10];
这是一个合适的解决方案吗?这里:
array = new int[10];
// is this the correct way??
答案 0 :(得分:7)
int * array[10];
静态定义10个int数组的10个指针
动态:
int **array = new int *[10];
使用C ++后更好的解决方案:使用std::vector
std::vector<int *> v;
v.resize(10);
v[2] = new int[50]; // allocate one array
由于我们使用向量作为指针数组,让我们完全摆脱指针
std::vector<std::vector<int> > v;
v.resize(10);
v[2].resize(50); // allocate one array
然后像矩阵一样访问数组:
v[3][40] = 14;
更进一步,使用C ++ 11初始化所有行的一种方法是,最后制作10x50的int矩阵(但是如果我们想要的话,大小也可以在循环内改变)。需要gcc 4.9和g++ -std=c++11
来构建
std::vector<std::vector<int> > v;
v.resize(10);
for (auto &it : v)
{
it.resize(50); // allocate arrays of 50 ints
}
答案 1 :(得分:3)
int **array = new int*[length];
或者,没有动态内存分配:
int *array[10];
答案 2 :(得分:0)
首先 int* array[10]
将创建一个包含10个Int指针的数组,这些数组将被初始化为垃圾值,因此最好的做法是
int* array[10];
for(int i = 0;i<10;i++)
{
array[i] = NULL;
}
这样可以安全地将所有指针整合到一个合适的值,这样如果你尝试访问一个你没有存储过的东西,每次都会抛出一个seg错误。
第二个 array = new int[10]
正在创建一个指向10个整数数组的指针,这是完全不同的事情。如果要使用new
设置指针数组
int** array = new int*[10];
答案 3 :(得分:0)
ITNOA
你可以使用
int* a = {new int(....), new int(....) ,...
或类似下面的内容
for (int b = 0; b < 10; ++b)
a[b] = new int(....);
我认为this link可以很好地解释指针数组。
答案 4 :(得分:0)
你可以有类似的东西 -
int **array = new int*[n](); //n is the number of pointers you need.
//() after declaration initializes all pointers with nullptr
答案 5 :(得分: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
};
这种初始化经常用于函数指针数组。