我的主要代码中有这个, 由于初始化中的数据太多,它会给出错误。 我无法改变int **的短语。如何初始化它?
int** points = { { 3, 6, 1, 4 }, { 17, 15, 1, 4 }, { 13, 15, 1, 4 }, { 6, 12, 1, 4 },
{ 9, 1 ,1,4}, { 2, 7,1,4 }, { 10, 19,1,4 } };
提前谢谢
答案 0 :(得分:1)
看起来你想要的是以下内容:)
int **points = new int *[7]
{
new int[4] { 3, 6, 1, 4 }, new int[4] { 17, 15, 1, 4 }, new int[4] { 13, 15, 1, 4 },
new int[4] { 6, 12, 1, 4 }, new int[4] { 9, 1, 1, 4 }, new int[4] { 2, 7, 1, 4 },
new int[4] { 10, 19, 1, 4 }
};
考虑到在不再需要数组时需要显式释放所有已分配的内存。
例如
for ( size_t i = 0; i < 7; i++ ) delete [] points[i];
delete [] points;
您还可以使用声明为
的指针int ( *points )[4];
在这种情况下,你确实可以动态分配一个二维数组。
答案 1 :(得分:0)
如果必须保留points
指向指针的指针,可以像这样初始化它:
// Construct the individual sub-arrays for the nested dimension
int pt0[] = { 3, 6, 1, 4 };
int pt1[] = { 17, 15, 1, 4 };
int pt2[] = { 13, 15, 1, 4 };
int pt3[] = { 6, 12, 1, 4 };
int pt4[] = { 9, 1, 1, 4 };
int pt5[] = { 2, 7, 1, 4 };
int pt6[] = { 10, 19, 1, 4 };
// Construct an array of pointers
int* pts[] = { pt0, pt1, pt2, pt3, pt4, pt5, pt6 };
// Convert an array of pointers to a double-pointer
int** points = pts;
这假定静态初始化上下文(例如全局变量)。如果上下文不是静态的,则必须将points
限制在它指向的内部数组的范围内。例如,您无法从函数返回points
。
如果要从函数返回指针,可以使用static
,如下所示:
static int pt0[] = { 3, 6, 1, 4 };
static int pt1[] = { 17, 15, 1, 4 };
...
static int* pts[] = { pt0, pt1, ... };
int** points = pts; // no "static" here
...
return points;
但请注意,每次调用该函数时,该函数都将返回相同的指针。