我已经在网站上呆了几个小时了,我阅读了很多新技术和编程定义的函数,但我仍然对如何将它应用到我自己的程序感到困惑 . 我试着慢慢开始构建一个跳棋游戏 . 所以首先我创建了一个创建董事会的功能 . 当然,我研究并发现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数组更改为静态会更好吗?
1 回答
很高兴您正在阅读C中的数组 . 您在问题中提到您读到“C不允许您轻松地从函数返回数组” . 在C中,当您在函数内部声明一个静态大小的数组时,该内存中的该数组就存在于堆栈中 . 每个函数都有自己的堆栈,因此当您从函数返回时,该内存可以再次重用 .
使用malloc和calloc分配空间时,会在堆上分配空间 . 这是一篇包含更多信息的文章:Stack Vs Heap .
现在你的棋盘问题,你想要的是一个数组数组 . 您可以将棋盘上的每个方块视为单个角色 . 假设我们的棋盘有一排 .
棋盘显然有不止一排,9大约是多少?
虽然你可以这样做,但它会非常混乱 . 因此,您可以只使用 pointer to an array of pointers 而不是创建单独的行 .
我会告诉你如何完成制作你的电路板 .