C语言 如何通过将其等同于具有void参数的函数来填充二维数组?



我正在制作一个使用2D数组的小游戏。我试着做一个函数,让你从一个干净的板开始,并希望它以这样的方式,如果有意义的话,干净的板函数是一个右值。

#include <stdio.h>
#include <stdlib.h>
#define MAX 8
#define EMPTY 0
#define BLACK 1
#define WHITE -1

//Fills the 2D array with 0s and places the 4 starting pieces in the middle
int **cleanboard(void){
int newboard[MAX][MAX];
(*newboard)[MAX] = malloc(sizeof*newboard*MAX);
for(int row=0; row<MAX; row++){
for(int col=0; col<MAX; col++){
newboard[row][col] = EMPTY;
}
}
newboard[3][3] = WHITE, newboard[4][4] = WHITE;
newboard[4][3] = BLACK, newboard[3][4] = BLACK;
return newboard;
}

//Displays the board
void printboard(int arr[][MAX]){
printf("   1 2 3 4 5 6 7 8n");               //Top numbers
for(int i=0; i<MAX; i++){
for(int j=0; j<MAX; j++){
if(j==0){printf("%d ", i+1);}        //Side numbers
switch(arr[i][j]){                   //Print piece
case 0: printf(" .");
break;
case 1: printf(" b");
break;
case -1: printf(" w");
break;
}
}
printf("n");
}
}

int main(){
int **board;
board = cleanboard();
printboard(board);
return 0;
}
对于给定的代码,它输出:
1 2 3 4 5 6 7 8
1

然而,这个例子是如何董事会应该看起来:

//Example 2D array:
int grid[MAX][MAX] = {{-1, 1, -1, 1, 0, -1, 1, 0},
{1, -1, -1, 1, 0, -1, -1, 1},
{1, 1, -1, 1, -1, 1, 1, 1},
{-1, 0, -1, -1, -1, 1, 1, -1},
{1, -1, 0, 1, 0, 1, 0, 0},
{0, 1, -1, 1, -1, -1, 1, -1},
{1, 1, 1, -1, 0, -1, -1, -1},
{0, -1, -1, -1, -1, 1, -1, 0}};
printboard(grid);

输出:

1 2 3 4 5 6 7 8
1  w b w b . w b .
2  b w w b . w w b
3  b b w b w b b b
4  w . w w w b b w
5  b w . b . b . .
6  . b w b w w b w
7  b b b w . w w w
8  . w w w w b w .

cleanboard函数没有存储值或导致printboard函数停止的东西。如有任何帮助,不胜感激。

printboard的参数类型是您想要的。然而,数组到指针的转换只发生在多维数组的第一个维度上。您正在尝试在int (*)[MAX]int **之间进行转换,它们不是同一件事。

cleanboard中,您需要将newboard定义为:
int (*newboard)[MAX] = malloc(sizeof*newboard*MAX);

那么函数本身应该定义为:

int (*cleanboard(void))[MAX] {

main中的board应定义为:

int (*board)[MAX];

同样,在内部循环运行后,您将需要在printboard中打印一个换行符。

建议代码如下:

  1. 创建单板
  2. 初始化单板

现在,建议代码:

#include <stdio.h>
#include <stdlib.h>
#define MAX 8
#define EMPTY 0
#define BLACK 1
#define WHITE -1

//Fills the 2D array with 0s and places the 4 starting pieces in the middle
int **cleanboard(void)
{
int **newboard = malloc( MAX * sizeof( int ) );;
for(int row=0; row<MAX; row++)
{ 
newboard[row] = malloc( MAX * sizeof( int ) );
}

for(int row=0; row<MAX; row++)
{
for(int col=0; col<MAX; col++)
{
newboard[row][col] = EMPTY;
}
}
newboard[3][3] = WHITE;
newboard[4][4] = WHITE;
newboard[4][3] = BLACK;
newboard[3][4] = BLACK;
return newboard;
}

最新更新