在c ++中初始化指针数组

时间:2016-08-12 13:59:00

标签: c++ arrays

我忘了如何在c ++中初始化指针数组,如下所示:

int * array[10]; 

这是一个合适的解决方案吗?这里:

array = new int[10];

 // is this the correct way?? 

6 个答案:

答案 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 
}; 

这种初始化经常用于函数指针数组。