繁体   English   中英

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

[英]Initializing array of pointers in c++

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

int * array[10]; 

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

array = new int[10];

 // is this the correct way?? 
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
}
int **array = new int*[length];

或者,没有动态内存分配:

int *array[10];

第一个 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];

ITNOA

您可以使用

int* a = {new int(....), new int(....) ,... 

或类似下面的东西

for (int b = 0; b < 10; ++b)
 a[b] = new int(....);

我认为这个链接有很好的解释指针数组。

你可以有这样的东西 -

int **array = new int*[n](); //n is the number of pointers you need.
//() after declaration initializes all pointers with nullptr

通常,在大多数情况下,使用精确地址初始化数组没有多大意义。 您可以在使用阵列期间分配地址或分配适当的内存。

通常有意义初始化带有空指针的指针数组。 例如

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM