看看这个数组:
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会检索地址,但那根本就没有编译。
我已经看到了几个与我非常相似的问题,比如这个:
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);
希望将来可以帮助某人。
答案 0 :(得分:1)
我认为基本的误解是var match = "abcd|efhi|jklm|nopq|rstu|vwxyz".split('|');
if (match.indexOf($('element').text().toLowerCase()) !== -1) {
// match found
}
的含义,它表示指向int的三维指针数组,但不是指向整数3D数组的指针。为了证明这一点,请考虑以下简化示例和编译器警告:
const int *c000[64][1][3]
只是为了显示不同的含义:如果想要声明一个指向5个整数数组的指针,可以表示如下:
int aSingleIntValue = 10; // integer value
int *aSinglePtrToIntValue = &aSingleIntValue; // pointer to an integer value
// 1D-array of integer values
int oneDArrayOfInt[5] = { 3,4,5,6,7 };
// 1D-array of pointers to int; Note: OK, since 0 is interpreted as NULL
int *oneDArrayOfIntPtrOK[5] = { aSinglePtrToIntValue,0,0,0,0 };
// 1D-array of pointers to int; Note: 3,4,.. are int values, not pointers to int; Hence compiler complains:
// Warning: Incompatible integer to pointer conversion initializing "int *" with an expression of type "int"
int *oneDArrayOfIntPtrWarning[5] = { 3,4,5,6,7 };
// 3D-array of pointers to int; Note: OK, since 0 is interpreted as NULL
int *threeDArrayOfIntPtrOK[5][5][5] = { { { aSinglePtrToIntValue,0,0 }, { 0,0,0} } };
// 3D-array of pointers to int; Warining: Incompatible integer to pointer conversion initializing "int *" with an expression of type "int"
int *threeDArrayOfIntPtrWarning[5][5][5] = { { { 3,4,5 }, { 2,3,1} } };
鉴于此,我们来解释一下
的含义typedef int arrayOf5Int_t[5];
arrayOf5Int_t *arrayOf5IntPtr = &oneDArrayOfInt;
请注意,c000的元素是指向整数的指针,请注意,在数组初始化器的上下文中使用的变量const int h002[18] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 0xe0, 0xe0};
const int *c000[64][1][3] = { { { h002, 0, 0 } } };
衰减为指向整数的指针(指向h002的第一个元素)。这与声明h002
几乎相同,以下打印出来表明这实际上是相同的:
const int* ptrToH002 = h002
因此,应该清楚const int *elemAt0x0x0 = c000[0][0][0];
const int *ptrToH002 = h002;
int isTheSame = elemAt0x0x0 == ptrToH002;
printf("pointer elemAt0x0x0 == ptrToH002 is %s", (isTheSame ? "true" : "false"));
// Prints: pointer elemAt0x0x0 == ptrToH002 is true
检索地址,而不是整数值或整数数组。地址指向数组myVar = c000[0][0][0]
的第一个元素。
答案 1 :(得分:-2)
多维数组示例:
int main(){
int a1[] = {1,2,3,4};
int a2[] = {5,6,7,8};
int a3[] = {9,10,11,12};
int * superArr[3] = {a1,a2,a3};
printf("%d\n", superArr[2][1]);
}
您应该能够使用此示例将代码更改为您需要的内容。