C数组const unsigned char [] []

我有点扭转了这样做的确切语法.我有一个这样定义的数组:

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

我想把它放在一个数组中,所以我可以做一些事情的效果

ARR2[0] = ARR

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

最佳答案 从你的评论到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获得.虽然指针值在两种情况下都相同,但类型不是.

点赞