gpt4 book ai didi

c - Malloc 自定义类型和其他一些 C 问题

转载 作者:行者123 更新时间:2023-11-30 18:44:32 33 4
gpt4 key购买 nike

我目前正在制作一款游戏,其中我需要一个棋盘,其中有一堆“细胞”。

存储在这些单元中的数据是从文件中读取的,该文件在整个程序中只能读取一次,因此我需要将这些单元存储在内存中。

我的问题是,我该怎么做?让我解释一下我所拥有的。

cell.h

typedef struct{
unsigned int row;
unsigned int column;
char value;
bool initialCell;
bool followsRules;
}Cell;

我正在读取的文件是一 block 大小为 nxn 的板,如下所示:

9 7 8 5
0 9 6 4
9 7 5 6
0 2 1 6

因此,作为示例,第一个 Cell 结构体 的值如下

row = 1
column = 1
value = '9'
initialCell = true
followsRules = true

我知道 malloc 返回一个指向已分配内存的指针,但是,作为 C 初学者,我不太明白如何将 Cell“放入”该内存。

按照我制作游戏的方式,例如,我有一个行数组,该数组的每个位置都包含另一个数组,其中每个位置都指向一个单元格(基本上是一个Cell*),我的目标是做这样的事情。

row[0][0]->value

这给了我第一行的第一个单元格内的值。

那么,如何使 Cell* 指向为该 Cell 分配的内存,以及将 Cell 放入该内存的最佳方法是什么。

很抱歉这篇文章很长,我一直使用 Java 或 Python 等语言,因此内存分配和管理对我来说是一个新事物。

最佳答案

我不会猜测您的电路板数据的文​​件布局。我只会说明如何在程序中为该板分配存储空间并进行逻辑访问board[m][n]:

如果您事先知道 n 的值(行数和列数),那么您可以为主板静态分配存储空间。否则,您将使用malloc动态分配它。无论哪种方式,最有效的方法是将 Cell * 变量设置为您认为的 board[m][n] 的地址并使用访问 Cell 结构的成员,这样就不必重复计算该地址。

案例1(板卡静态分配):

#define N 10
static Cell board[N * N];

案例2(动态分配):

Cell *board = (Cell *)malloc(sizeof(Cell) * n * n); // where n is some value

访问单元格:

static Cell *getBoardCell(int row, int col)
{
return board + row * N + col; // static case
// or
return board + row * n + col; // dynamic case
}

Cell *cellPtr getBoardCell(3, 6);
cellPtr->row = 3;
cellPtr->column = 6;
etc.

关于c - Malloc 自定义类型和其他一些 C 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57750368/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com