簡體   English   中英

C數組const unsigned char [] []

[英]C Array of 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[0] = ARR分配ARR2 ARR2[0] = ARR ,但你需要明確地做ARR2[0] = &ARR (至少要避免警告)。 原因是ARR退化為指向其第一個元素的指針,即一個const unsigned char *其值為&ARR[0][0] ,而ARR2[0]期望被賦予一個const unsigned char (*)[SIZE][SIZE] ,用&ARR獲得。 雖然指針值在兩種情況下都相同,但類型不是。

看起來你想要實現的是不可能的,因為賦值運算符的左操作數只能是算術,結構/聯合或指針類型,而不是數組。 有關詳細信息,請參見此處: 6.5.16.1簡單分配

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

試試這個

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

您在評論中提到您希望ARR2是一個可以保存數組ARR的數組,因為它是第一個元素但是, 這是不可能的 ARR是一個數組,當它是一元&sizeof運算符的操作數時,它將轉換為指向它的第一個元素。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM