C++ C/C++;多维数组的数组
我试图创建一个包含两个2D数组的数组,如下所示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] <<
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};