C数组const unsigned char [] []

时间:2017-02-19 16:36:04

标签: c arrays multidimensional-array const

对于这样做的确切语法,我有点转过身来。我有一个这样定义的数组:

const unsigned char ARR[SIZE][SIZE] = {...}

我想把它放在一个数组中,这样我就可以做些什么来实现

的效果
ARR2[0] = ARR

我尝试了const unsigned char ARR2[][SIZE][SIZE] = {ARR}const unsigned char* ARR2[SIZE][SIZE] = {ARR},但这些都没有奏效。有人能指出具有常数二维无符号字符数组的常数数组的正确语法吗?

3 个答案:

答案 0 :(得分:2)

从你的评论到haccks的回答,听起来你想要这个:

const unsigned char ARR[SIZE][SIZE] = {...};
const unsigned char (*ARR2[])[SIZE][SIZE] = {&ARR};

如果您希望ARR2本身为const,那就是这样的:

const unsigned char (* const ARR2[])[SIZE][SIZE] = {&ARR};

或许还应该注意,您不能使用这种憎恶来ARR[x][y]作为ARR2[0][x][y],但需要(*ARR2[0])[x][y](或等同于ARR2[0][0][x][y])。

可能值得注意的另一个必然结果是,您无法将ARR2ARR2[0] = ARR分配,但您需要明确地执行ARR2[0] = &ARR(至少要避免警告)。原因是ARR退化为指针到其第一个元素,即const unsigned char *,其值为&ARR[0][0],而ARR2[0]期望分配const unsigned char (*)[SIZE][SIZE],使用&ARR获取。虽然指针值在两种情况下都相同,但类型不是。

答案 1 :(得分:1)

似乎你想要实现的是不可能的,因为赋值运算符的左操作数只能是算术,结构/联合或指针类型,而不是数组。有关详细信息,请参阅此处:6.5.16.1 Simple assignment

所以唯一的方法就是memcpy()'。

答案 2 :(得分:-1)

试试这个

const unsigned char (* ARR2)[SIZE] = ARR; 

您在评论中提到,您希望ARR2是一个可以容纳数组ARR的数组,因为它是第一个元素,但这是不可能的ARR是一个数组,当它是一元&sizeof运算符的操作数时,它将转换为指向它的第一个元素。