c语言 - 康威生活中的构造变量



我用Java为Conway的Game of life编写了代码,现在我正试图将其转换为C。代码非常直接,但我在创建适当的struct时遇到了困难。

在Java中,如果我有instance variables:

 private boolean[][] board;
 private boolean[][] nextBoard;

它是否等效于以下代码?

 struct generation
 {
    char **board;
    char **nextBoard;
 }generation;

如何从另一个方法访问这些变量?我想会是这样的,但我不确定:

 struct generation data;
 .....
 data.nextBoard[r][c] 

是的,data.nextBoard[r][c]访问方法是正确的,但是,nextBoardboard是指针类型的变量,在使用之前需要为它们分配内存。

也许您可以研究malloc()和函数族来完成内存分配。


编辑:如果你不想要动态内存分配,可以考虑将结构定义更改为

#define SIZ 64     //some arbitrary value
struct generation
 {
    char board[SIZ][SIZ];
    char nextBoard[SIZ][SIZ];
 };

您可以按上述方式直接从索引0访问到63

不要误解这一点,但是,您的Java正在显示出来。I C/C++(您可能非常清楚),您没有垃圾收集器;所以你必须注意内存管理。

看起来你需要两个矩阵的内存。你可以通过几种方式分配:

  1. 静态分配(您不必担心内存泄漏):

    炭板[N][M];

    char nextBoard[N][M];

  2. 动态分配(您需要记住释放分配的内存):

    • 分配一个大小为N*M:的连续内存块

      charboard=malloc((char)的大小N*M)

      char*newBoard=malloc(sizeof(char)*N*M)

    • 使用指针对指针分配内存:

      char**板;

      char**newBoard;

      在这里,您必须分别为行和列分配内存(由于信息广泛可用,我不会详细介绍)。

现在,无论你是将它们打包到一个结构中,还是保留全局,或者将它们的可见性限制在某个文件中(使用静态),都是你必须在这里做出的决定。

无论采用哪种方式,都可以使用行/列索引访问数组中的元素。即使在一维阵列(板[r+c])的情况下。

希望这能有所帮助。

最新更新