我已经在网站上待了几个小时,并且阅读了许多新技术和已编程的已定义函数,但是对于如何将其应用于自己的程序,我仍然有些困惑。我试图开始缓慢,并建立一个跳棋游戏。因此,我首先创建了一个创建董事会的职能。当然,我研究并阅读到C并不容易让您从函数返回char数组。因此,我使用malloc或calloc来了解内存分配。
所以我的第一个错误...
void printBoard(char arr[9][19]);
int makeMove(char arr[11][23], int king, struct player P, char player);
char *createBoard();
char Rows[8]="ABCDEFGH";
int main()
{
int x, y;
int isKing = 1;
char checkerBoard[9][19];
checkerBoard[9][19] = createBoard();
printBoard(checkerBoard);
/* ... */
}
然后...
void printBoard(char array[9][19])
{
for (int i = 0; i < 9; i++) {
for (int j = 0; j < 19; j++)
printf("%c", array[i][j]);
}
printf("\n");
};
char * createBoard()
{
// where I put code
return checkerBoard[9][19];
}
我故意在createBoard()中遗漏了很多代码。所以当使用void * malloc(size_t size)时,我知道我需要指定大小为4 * sizeof(char)的字节,但是数组的大小也不会放入吗?另外,将checkerBoard数组更改为静态会更好吗?
答案 0 :(得分:0)
您正在阅读有关C语言中的数组的信息,这很棒。您在问题中提到,您读到“ C语言不允许您轻松地从函数返回数组”。在C语言中,当您在函数内部声明静态大小的数组时,内存中的该数组存在于堆栈中。每个函数都有其自己的堆栈,因此当您从函数返回时,该内存可以再次重用。
使用malloc和calloc分配空间时,这将在堆上分配空间。这是一篇包含更多信息的文章:Stack Vs Heap。
现在到您的棋盘问题上,您想要的是一个数组数组。您可以将棋盘上的每个正方形视为一个独立的角色。假设我们的棋盘有一行。
char * row_zero = malloc(sizeof(char) * 15); //row_zero has a length of 15
棋盘格显然有多于一行,那9行呢?
char * row_zero = malloc(sizeof(char) * 15);
char * row_one = malloc(sizeof(char) * 15);
.
.
char * row_eight = malloc(sizeof(char) * 15);
尽管您可以执行此操作,但它会变得非常混乱。因此,您无需创建单个行,而只需创建指向指针数组的指针。
char ** my_checkerboard = malloc(sizeof(char*) * 9); //has 9 rows.
我会让你弄清楚如何完成您的电路板。