从Conway的生活中获取结构变量

时间:2015-06-26 13:36:59

标签: c arrays pointers struct

我在Conway的Java生活游戏中编写了代码,现在我试图将其转换为C.代码很简单,但是我在尝试时遇到了麻烦创建适当的using Microsoft.Practices.ServiceLocation;

在Java中,如果我有struct

instance variables

它是否等同于以下代码?

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

如何从其他方法访问这些变量?我认为会是这样的,但我不确定:

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

 }generation;

2 个答案:

答案 0 :(得分:3)

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

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

编辑:如果您不想要动态内存分配,请考虑将结构定义添加到

#define SIZ 64     //some arbitrary value

struct generation
 {
    char board[SIZ][SIZ];
    char nextBoard[SIZ][SIZ];

 };

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

答案 1 :(得分:1)

不要采取错误的方式,但是,你的Java正在展示。 我是C / C ++(你可能很清楚),你没有垃圾收集器;所以你必须照顾内存管理。

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

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

    char board [N] [M];

    char nextBoard [N] [M];

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

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

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

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

    • 使用指向指针的指针分配内存:

      char ** board;

      char ** newBoard;

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

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

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

    希望这有帮助。