【发布时间】:2017-01-23 17:51:11
【问题描述】:
看看这个数组:
const int *c000[64][1][3] =
{
//Row 1
{ {0, 0, 0} }, { {0, 0, 0} }, { {0, 0, 0} }, { {0, 0, 0} }, { {0, 0, 0} }, { {0, 0, 0} }, { {0, 0, 0} }, { {0, 0, 0} },
//Row 2
{ {0, 0, 0} }, { {0, 0, 0} }, { {0, 0, 0} }, { {0, 0, 0} }, { {0, 0, 0} }, { {0, 0, 0} }, { {0, 0, 0} }, { {0, 0, 0} },
//Row 3
{ {0, 0, 0} }, { {0, 0, 0} }, { {0, 0, 0} }, { {0, 0, 0} }, { {0, 0, 0} }, { {0, 0, 0} }, { {0, 0, 0} }, { {0, 0, 0} },
//Row 4
{ {0, 0, 0} }, { {0, 0, 0} }, { {0, 0, 0} }, { {0, 0, 0} }, { {0, 0, 0} }, { {0, 0, 0} }, { {0, 0, 0} }, { {0, 0, 0} },
//Row 5
{ {0, 0, 0} }, { {0, 0, 0} }, { {0, 0, 0} }, { {0, 0, 0} }, { {0, 0, 0} }, { {0, 0, 0} }, { {0, 0, 0} }, { {0, 0, 0} },
//Row 6*
{ {0, 0, 0} }, { {0, 0, 0} }, { {0, 0, 0} }, { {0, 0, 0} }, { {0, 0, 0} }, { {0, 0, 0} }, { {0, 0, 0} }, { {0, 0, 0} },
//Row 7
{ {0, 0, 0} }, { {0, 0, 0} }, { {0, 0, 0} }, { {0, 0, 0} }, { {0, 0, 0} }, { {0, 0, 0} }, { {0, 0, 0} }, { {0, 0, 0} },
//Row 8
{ {0, 0, 0} }, { {0, 0, 0} }, { {0, 0, 0} }, { {0, 0, 0} }, { {0, 0, 0} }, { {0, 0, 0} }, { {0, 0, 0} }, { {0, 0, 0} },
};
忽略数组奇怪的大小和结构,这不重要。我需要能够在这个数组中使用一个数组。例如,我有一个名为 h002 的数组:
const int h002[18] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 0xe0, 0xe0}; //01
我需要能够从 c000 内部使用 h002。如:
{ {h002, 0, 0} },
这编译得很好,但是
myVar = c000[0][0][0];
检索 h002 的 地址。我需要 h002 中的第一项,而不是地址。我很困惑为什么它甚至会给我 h002 的地址?我想 *h002 会检索地址,但那根本无法编译。
我在 SO 上看到了几个与我非常相似的问题,例如这个:
Creating an array of int arrays in C?
我已经尝试了上面那个特定的例子。当我将它放在我的 main.c 文件中时它可以工作,但是当我在包含 c000 和 h002 的同一个 .c 文件中尝试它时,它无法编译。也许这与它有关?我不确定为什么会这样,考虑到在 c000 中使用 h002 可以很好地返回 h002 的地址。奇怪的是,上面链接中的代码无法在我的主文件之外编译。
我觉得我犯了一些明显的小错误。我已经断断续续地搞砸了大约5天。反复试验和研究让我一无所获。研究已经够难的了,因为使用这样的数组似乎没什么用,而且我的发现都没有对我有很大帮助。
随时提问。如果需要,我很乐意提供更多信息。
编辑:非常感谢 Stephan Lechner 帮助我解决了我的问题。为了得到我需要的结果,我必须这样做
myVar = *(c000[0][0][0]);
这非常有效。我还可以在末尾添加我喜欢的任何数字来检索 h002 中的不同索引。例如:
myVar = *(c000[0][0][0] + 7);
希望这对将来的人有所帮助。
【问题讨论】:
-
h002代表你的数组的地址,而*hoo2或h002[0]代表存储在h002指向的地址的值。 -
看来我当时搞混了。如果是这种情况,是否有理由添加指针使我的程序无法编译?
-
可能是因为 c000 不是
int数组,而是int *数组;尝试将其声明为const int c000[64][1][3] -
我试过了,还是不行。
-
@m.raynal "
h002代表您的阵列的地址" - 不!它表示int的一维数组。数组不是指针!
标签: c arrays multidimensional-array int