[英]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.