[英]How to cast/convert an unsigned char array to a const unsigned char array in C?
[英]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.