【发布时间】:2014-02-20 07:19:42
【问题描述】:
我正在通过实现 Conway 的生命游戏来尝试 C 语言。
我正在尝试动态构建两个网格(int 矩阵),一个用于当前网格,一个用于下一代网格,因此在确定了下一代网格后,我只需交换指针即可。
起初我绝望地尝试定义指向网格的指针,如int * grid,你不能用第二组括号下标,如[][],因为 - 显然 - 第一组括号返回一个 int。
我也尝试过int * grid[HEIGHT][WIDTH] 之类的方法,但这会给将这样的一个指针分配给另一个指针时出现问题。 (事实上,我不知道这在记忆中的真正作用!)
在我天真的希望中,我认为在偶然发现双指针之后可以进行以下操作。程序编译,但在指示的行上运行时失败。 (在 Windows 中,除了问题事件名称是 APPCRASH 之外,我没有得到更多详细信息。
免责声明:这不是实际程序,只是问题的概念证明。
#include <stdio.h>
#include <stdlib.h>
int HEIGHT = 20;
int WIDTH = 20;
int ** curr_gen; // Current generation
int ** next_gen; // Next generation
/* Entry Point main */
int main(int argc, char** argv) {
// Allocate memory for the grids
curr_gen = malloc(sizeof (int) * WIDTH * HEIGHT);
next_gen = malloc(sizeof (int) * WIDTH * HEIGHT);
curr_gen[0][0] = 0; //<< PROGRAM FAILS HERE
// Release heap resources
free(curr_gen);
free(next_gen);
return 0;
}
【问题讨论】:
-
你不能有一个链接的答案。为了处理您的案件,您需要了解内存中发生了什么
-
术语“双指针”是模棱两可的。它可以表示指向指针的指针(
some_type**类型)或指向double类型的指针(double*)。
标签: c pointer-to-pointer