簡體   English   中英

將指針分配給 const

[英]Assign pointer to const

這是我在做什么:

const uint16_t LAYERS_RIGHT[TOTAL_LAYERS][NBROW][NBCOL] = {
  {{c00, c10, c20, c30, c40, c50, c60},
   {c01, c11, c21, c31, c41, c51, c61},
   {c02, c12, c22, c32, c42, c52, c62},
   {c03, c13, c23, c33, c43, c53, c63},
   {c04, c14, c24, c34, c44, c54, c64},
   {c05, c15, c25, c35, c45, c55, c65}}
   /* blah blah */
};
const uint16_t LAYERS_LEFT[TOTAL_LAYERS][NBROW][NBCOL] = {
   /* blah blah */
   /* blah blah */
};

uint16_t *(LAYERS[TOTAL_LAYERS][NBROW][NBCOL]);

我的目標是嘗試創建一個指向右結構或左結構的指針:

LAYERS = &LAYERS_RIGHT;

編譯器說:

error: incompatible types in assignment of 
'const uint16_t (*)[7][6][7] {aka const unsigned int (*)[7][6][7]}' to 
'uint16_t* [7][6][7]         {aka unsigned int* [7][6][7]}'

如何讓我的代碼工作?

您將LAYERS定義為 3D 指針數組。 你想要一個指向 3D 數組的常量指針:

const uint16_t (*LAYERS)[TOTAL_LAYERS][NBROW][NBCOL];

但是,要使用它,您需要使用如下語法:

(*LAYERS)[a][b][c];

如果要將LAYERS索引為 3D 數組,則可以這樣定義它:

const uint16_t (*LAYERS)[NBROW][NBCOL];

並像這樣分配它:

LAYERS = LAYERS_RIGHT;

這利用了這樣一個事實,即在某些上下文中,數組會衰減為指向第一個元素的指針。 上面的任務就是其中之一。

LAYERS_RIGHTconst uint16_t [NBROW][NBCOL]的數組,所以其中一個數組元素的地址類型是const uint16_t (*)[NBROW][NBCOL] ,即LAYERS

然后LAYERS[0]引用第一個const uint16_t [NBROW][NBCOL]LAYERS[1] ,第二個,依此類推。

所以在上面的賦值之后,這個表達式

LAYERS_RIGHT[a][b][c];

產生與此表達式相同的值:

LAYERS[a][b][c];

暫無
暫無

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

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