0

我正在尝试创建一个由两个二维数组组成的数组,如下所示

给定

char twoDArr[2][3] =  {{'a','b','c'},  {'d','e','f'}};

你可以做

char (*twoDArrP)[3] = twoDArr;

这会产生有效的结果:

cout << "twoDArr: " << twoDArr[1][2] << endl;
cout << "twoDArrP: " << twoDArrP[1][2] << endl;

我的目标是创建另一个(静态)数组和/或指针,如下所示

char (**threeDArr)[3] = {twoDArr, twoDArr}; //doesn't compile 

这样我就可以访问它的值:

char val = threeDArr[0][1][2];

显然指数会有所不同

问题是声明 3D 数组的正确方法是什么,即 2D 数组的数组?

我已经使用这种情况搜索了一个示例,但我似乎找不到任何东西。任何帮助,将不胜感激。

4

2 回答 2

1

一个数组

char (*twoDArrP)[3]

大小为 2 的可以定义为:

char (*threeDArrP[2])[3]

这不是很清楚(我什至不确定它是否完全正确)。请参阅cdecl

typedef是你的朋友:

typedef char (*twoDArrP_type)[3];

twoDArrP_type threeDArrP[2] = {twoDArr, twoDArr};

这个:

char (**threeDArr)[3]

正如您所写,是指向数组指针的指针。不是指向二维数组的指针。

于 2012-08-09T14:14:21.953 回答
1

你需要

char (*threeDArr[2])[3] = {twoDArr, twoDArr};

对于您的解决方案,“最里面”的规范是*而不是数组。

于 2012-08-09T14:16:34.100 回答