我在Conway的Java生活游戏中编写了代码,现在我试图将其转换为C.代码很简单,但是我在尝试时遇到了麻烦创建适当的using Microsoft.Practices.ServiceLocation;
。
在Java中,如果我有struct
:
instance variables
它是否等同于以下代码?
private boolean[][] board;
private boolean[][] nextBoard;
如何从其他方法访问这些变量?我认为会是这样的,但我不确定:
struct generation
{
char **board;
char **nextBoard;
}generation;
答案 0 :(得分:3)
是的,data.nextBoard[r][c]
的访问方法是正确的,但是,nextBoard
和board
是指针类型变量,您需要先为它们分配内存使用
也许您可以查看malloc()
和函数族来完成内存分配。
编辑:如果您不想要动态内存分配,请考虑将结构定义添加到
#define SIZ 64 //some arbitrary value
struct generation
{
char board[SIZ][SIZ];
char nextBoard[SIZ][SIZ];
};
您可以直接以上述方式从索引0
访问63
。
答案 1 :(得分:1)
不要采取错误的方式,但是,你的Java正在展示。 我是C / C ++(你可能很清楚),你没有垃圾收集器;所以你必须照顾内存管理。
看起来你需要两个矩阵的内存。您可以通过以下几种方式进行分配:
静态分配(您不必担心内存泄漏):
char board [N] [M];
char nextBoard [N] [M];
动态分配(你需要记住释放分配的内存):
分配一个大小为N * M的连续内存块:
char board = malloc(sizeof(char) N * M)
char * newBoard = malloc(sizeof(char)* N * M)
使用指向指针的指针分配内存:
char ** board;
char ** newBoard;
在这里你必须分别为行和列分配内存(由于信息广泛可用,我不会详细介绍它。)
现在,无论是将它们打包成结构,还是保留全局,还是将它们的可见性限制为某个文件(使用静态),这真的是你必须在这里做出的决定。
无论哪种方式,都可以使用行/列索引访问数组中的元素。即使在一维数组的情况下(板[r + c])。
希望这有帮助。