对于这样做的确切语法,我有点转过身来。我有一个这样定义的数组:
const unsigned char ARR[SIZE][SIZE] = {...}
我想把它放在一个数组中,这样我就可以做些什么来实现
的效果ARR2[0] = ARR
我尝试了const unsigned char ARR2[][SIZE][SIZE] = {ARR}
和const unsigned char* ARR2[SIZE][SIZE] = {ARR}
,但这些都没有奏效。有人能指出具有常数二维无符号字符数组的常数数组的正确语法吗?
答案 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]
)。
可能值得注意的另一个必然结果是,您无法将ARR2
与ARR2[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
运算符的操作数时,它将转换为指向它的第一个元素。