如何通过将其等同于具有 void 参数的函数来填充二维数组?
How to fill in a 2D array by equating it to a function with void parameters?
我正在使用二维数组制作一个小游戏。我尝试制作一个函数,让你从一个干净的板开始,并希望它以这样一种方式出现,即如果有意义的话,cleanboard 函数是一个右值。
#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 8\n"); //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
中打印换行符。
以下建议代码:
- 创建看板
- 初始化板
现在,建议的代码:
#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;
}
我正在使用二维数组制作一个小游戏。我尝试制作一个函数,让你从一个干净的板开始,并希望它以这样一种方式出现,即如果有意义的话,cleanboard 函数是一个右值。
#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 8\n"); //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
中打印换行符。
以下建议代码:
- 创建看板
- 初始化板
现在,建议的代码:
#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;
}