我一直在努力理解如何使用指標。在下面的示例中,我有一個用于生命游戲的更新函式 (updateGrid) 的小草圖。這個想法是在真偽之間更新網格中所有單元格的狀態(您可能知道)。但是,我應該使用指標來在網格的“先前”和“新”狀態之間交替。但我似乎不知道如何在不復制當前單元格網格的情況下實作交替指標的概念。任何想法?
順便說一句,我下面的代碼到目前為止作業得很好。
// ---------- Global Variables ----------
bool cells[MAX_SIZE][MAX_SIZE];
bool cells_next[MAX_SIZE][MAX_SIZE];
bool (*ptr)[MAX_SIZE][MAX_SIZE];
bool (*ptr_next)[MAX_SIZE][MAX_SIZE];
ptr = &cells;
ptr_next = &cells_next;
// ---------- update state ----------
void updateState() {
for (int row = 0; row < MAX_SIZE; row) {
for (int col = 0; col < MAX_SIZE; col) {
if (((*ptr)[row][col]) == 1) {
if ((numAliveNeighbors(row, col) < 2)
|| (numAliveNeighbors(row, col) > 3)) {
(*ptr_next)[row][col] = 0;
} else {
(*ptr_next)[row][col] = 1;
}
} else if (((*ptr)[row][col]) == 0) {
if (numAliveNeighbors(row, col) == 3) {
(*ptr_next)[row][col] = 1;
} else {
(*ptr_next)[row][col] = 0;
}
}
}
}
for (int row = 0; row < MAX_SIZE; row) {
for (int col = 0; col < MAX_SIZE; col) {
(*ptr)[row][col] = (*ptr_next)[row][col];
(*ptr_next)[row][col] = 0;
}
}
PS:我的問題解釋可能看起來有點顛簸,所以請不要猶豫以獲取更多資訊。
提前謝謝了 :)
uj5u.com熱心網友回復:
請注意以下備注:
您應該使用指向行的指標而不是指向二維陣列的指標。
您可以通過臨時變數交換指標來交替指標。
該代碼實作了John Conway著名的 Game of Life 世代。ptr指向當前板并ptr_next指向下一代。update()計算應用細胞死亡和出生規則的新板。當新板完全更新后,指標被交換,所以ptr現在指向新板。這比將整個電路板從 復制到cells_next更快cells。
這是修改后的版本:
// ---------- Global Variables ----------
bool cells[MAX_SIZE][MAX_SIZE];
bool cells_next[MAX_SIZE][MAX_SIZE];
bool (*ptr)[MAX_SIZE] = cells;
bool (*ptr_next)[MAX_SIZE] = cells_next;
// ---------- update state ----------
void updateState() {
for (int row = 0; row < MAX_SIZE; row) {
for (int col = 0; col < MAX_SIZE; col) {
if (ptr[row][col]) {
if ((numAliveNeighbors(row, col) < 2)
|| (numAliveNeighbors(row, col) > 3)) {
ptr_next[row][col] = 0;
} else {
ptr_next[row][col] = 1;
}
} else {
if (numAliveNeighbors(row, col) == 3) {
ptr_next[row][col] = 1;
} else {
ptr_next[row][col] = 0;
}
}
}
}
// swap the pointers
bool (*tmp)[MAX_SIZE] = ptr;
ptr = ptr_next;
ptr_next = tmp;
}
請注意,這numAliveNeighbors可能應該ptr作為一個引數,而不是通過一個全域變數隱式地使用。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/483989.html
上一篇:將int串列轉換為字串-C
