我正在用 C 撰寫一個掃雷程式。
我將其作為全域變數:
typedef struct box_t
{
int box_type;
int num_mines_bordering;
int is_flagged;
} box_t;
// my global
box_t * gameboard = NULL;
稍后在應用程式中,它根據行數和列數在堆中分配:
gameboard = (box_t *)malloc((rows * cols) * sizeof(box_t));
一切都很好,但是,他們現在索引它的方式似乎不正確且容易出錯。我不能簡單地這樣做 gameboard[x][y],因為我遇到了編譯器錯誤,而我現在所擁有的似乎不正確:
#define GET_LOC(ROW, COL) gameboard[(ROW * sizeof(box_t)) (COL * sizeof(box_t)) * sizeof(box_t)]
// if you call this it would look like: box_t * loc = &GET_LOC(somerow, somecol);
有沒有更好的索引方法?
uj5u.com熱心網友回復:
編譯器知道型別,因此知道每個陣列條目的大小,所以唯一特別的是列數cols:
box_t *gameboard = malloc((rows * cols) * sizeof(*gameboard));
gameboard[row * cols col] = ...;
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/537440.html
標籤:C矩阵索引堆
上一篇:如何改變扇區在矩陣中的位置?
