Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/157.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ C/C++;多维数组的数组_C++_C_Arrays_Pointers_Multidimensional Array - Fatal编程技术网

C++ C/C++;多维数组的数组

C++ C/C++;多维数组的数组,c++,c,arrays,pointers,multidimensional-array,C++,C,Arrays,Pointers,Multidimensional Array,我试图创建一个包含两个2D数组的数组,如下所示 char (**threeDArr)[3] = {twoDArr, twoDArr}; //doesn't compile 给定 char twoDArr[2][3] = {{'a','b','c'}, {'d','e','f'}}; 你可以 char (*twoDArrP)[3] = twoDArr; 产生以下有效结果: cout << "twoDArr: " << twoDArr[1][2] <<

我试图创建一个包含两个2D数组的数组,如下所示

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

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 val = threeDArr[0][1][2];
显然,指数会有所不同

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

我已经用这个案例搜索了一个例子,但我似乎找不到任何东西。任何帮助都将不胜感激。

一系列

char (*twoDArrP)[3]
尺寸为2的可定义为:

char (*threeDArrP[2])[3]
这并不清楚(我甚至不确定它是否完全正确)。看

typedef
是你的朋友:

typedef char (*twoDArrP_type)[3];

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

这:

正如您所写的,是指向数组指针的指针。不是指向2D数组的指针。

您需要

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

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

当您说“不编译”时,实际错误是什么?您的数组有3个成员,但您仅使用2个成员初始化它
char(**threeDArr)[3]={twodar,twodar,0}工作吗?定义“工作”!它可能会创建一个由三个指针组成的数组,但它们并不指向任何有用的东西。我从上面的代码中得到错误:错误C2440:“初始化”:无法从“char()[3]”转换为“char()[3]”。使用char(*threeDArr)[3]={twoDArrP,twoDArrP};-我得到错误C2078:初始化者太多。我希望能够按照给定的方式初始化它:{twoDArrP,twoDArrP};可能声明不正确,但我希望有这样的查找表。使用char(*threeDArr)[3]={twoDArrP,twoDArrP,0};也不编译。在这种情况下,我得到的错误是:无法从“char(*)[3]”转换为“char()[3]”。很抱歉,这里的注释格式不好。首先,我并不是说它的声明方式是正确的。我正在努力找到正确申报的方法。我对正确的申报感到茫然。目标是拥有一个3D表格,可以作为我放置的最后一条语句访问。我同意你的意见,如果有人能弄明白,请也告诉我。@user1587730,我想出了一些办法,但我并不完全相信我自己。无论如何,就像我说的,最好的方法是使用
typedef
。typdef最终清除了混乱。谢谢你的回复。这确实有效。还有一个问题,如果我想要一个临时指针,char***不能被分配/等同/指向上面的数组。有什么建议吗?我不确定我是否理解你的补充问题。以上是一个数组而不是指针,您永远无法将其作为一个整体分配给它。而
char***
是一个完全不同的野兽,这是完全不兼容的。从指针指向内存中某个位置的前提出发,可以用来指向上面数组的第一个位置-&threeDArr[0][0][0]的指针是什么,让我们称之为:指针\u的某种\u排序pT,因此pT[0][1][2]==threeDArr[0][1][2]。但我认为使用Shahbaz建议的typedef可以消除我的误解。我正在回归到初级类型。使用typedef char(twoDArrP_-type)[3],twoDArrP_-type pT将完成我试图完成的任务。再次感谢您的帮助。没有什么比尝试更容易的了:)
char(**threeDArrP)[3]=threeDArr现在是指向大小为3的字符数组的指针。
char (*threeDArr[2])[3] = {twoDArr, twoDArr};