我用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]
的访问方法是正确的,但是,nextBoard
和board
是指针类型的变量,在使用之前需要为它们分配内存。
也许您可以研究malloc()
和函数族来完成内存分配。
编辑:如果你不想要动态内存分配,可以考虑将结构定义更改为
#define SIZ 64 //some arbitrary value
struct generation
{
char board[SIZ][SIZ];
char nextBoard[SIZ][SIZ];
};
您可以按上述方式直接从索引0
访问到63
。
不要误解这一点,但是,您的Java正在显示出来。I C/C++(您可能非常清楚),您没有垃圾收集器;所以你必须注意内存管理。
看起来你需要两个矩阵的内存。你可以通过几种方式分配:
-
静态分配(您不必担心内存泄漏):
炭板[N][M];
char nextBoard[N][M];
-
动态分配(您需要记住释放分配的内存):
-
分配一个大小为N*M:的连续内存块
charboard=malloc((char)的大小N*M)
char*newBoard=malloc(sizeof(char)*N*M)
-
使用指针对指针分配内存:
char**板;
char**newBoard;
在这里,您必须分别为行和列分配内存(由于信息广泛可用,我不会详细介绍)。
-
现在,无论你是将它们打包到一个结构中,还是保留全局,或者将它们的可见性限制在某个文件中(使用静态),都是你必须在这里做出的决定。
无论采用哪种方式,都可以使用行/列索引访问数组中的元素。即使在一维阵列(板[r+c])的情况下。
希望这能有所帮助。