在给定的代码中,我有这些值(不可更改的代码):
#ifndef BOARD_H
#define BOARD_H
#define BOARD_WIDTH 10
#define BOARD_HEIGHT 10
typedef enum cell
{
EMPTY, //0
BLOCKED, //1
PLAYER //2
} Cell;
#define EMPTY_OUTPUT " "
Cell BOARD_1[BOARD_HEIGHT][BOARD_WIDTH];
Cell BOARD_2[BOARD_HEIGHT][BOARD_WIDTH];
void initialiseBoard(Cell board[BOARD_HEIGHT][BOARD_WIDTH]);
void displayBoard(Cell board[BOARD_HEIGHT][BOARD_WIDTH]);
我尝试过多种方式编写initialiseBoard(),如:
void initialiseBoard(Cell board[BOARD_HEIGHT][BOARD_WIDTH])
{
int i, j;
int *temp = NULL;
for ( i = 0; i < 10; i++)
for (j = 0; j < 10; j++)
board[i][j] = EMPTY;
}
void initialiseBoard(Cell board[BOARD_HEIGHT][BOARD_WIDTH])
{
int i, j;
int *temp = NULL;
for ( i = 0; i < 10; i++)
for (j = 0; j < 10; j++)
{
if (i == 0 && j == 0)
{
*temp = EMPTY;
board[0][0] = temp;
}
else
board[i][j] = EMPTY;
}
}
因为我知道[0] [0]中电路板中的第一个单元是一个指针,所以我尝试了很多方法来获取它的引用值,但它总是返回一个地址。请看下面的代码并建议我一个方法。非常感谢你!
void displayBoard(Cell board[BOARD_HEIGHT][BOARD_WIDTH])
{
int i, j;
for (i = 0; i <= 10; i++)
{
if (i == 0)
{
printf("\t|%s|", EMPTY_OUTPUT);
for (j = 0; j < 10; j++)
printf("%d|", j);
printf("\n");
}
else
{
for (j = 0; j <= 10; j++)
{
if (j == 0)
printf("\t|%d|", i - 1);
else
{
char* c;
/*unsigned *p = &board[0][0];
if (i == 1 && j == 1)
c = (*p == EMPTY) ? EMPTY_OUTPUT : "?";*/
if (i == 1 && j == 1)
c = (board[0][0] == EMPTY) ? EMPTY_OUTPUT : "?";
else
c = (board[i - 1][j - 1] == EMPTY) ? EMPTY_OUTPUT : "?";
printf("%s|", c);
}
}
printf("\n");
}
}
printf("\n%d\n", board[0][0]);
}
在[0] [0]时,它始终返回一个地址。
答案 0 :(得分:0)
board[0][0]
只是二维数组的基地址
如果你想在地址打印价值,它打印你的二维数组的基地址然后你应该使用'*'
它显示你的情况下你应该使用*((board+0)+0)
的地址值
如果有任何问题,你可以尝试这个并让我知道:)
答案 1 :(得分:0)
第一个initialiseBoard()函数是您要使用的函数。这样可以将所有2d数组元素正确设置为EMPTY。
显示电路板时,请记住阵列本身的地址和[0] [0]的地址是相同的地址。要查看存储在[0] [0]中的值,请取消引用该数组。存储在数组元素中的值是与您定义的枚举对应的数字。
unsigned *arrayAddress = &board[0][0];
printf( "2d array address is %p\n", arrayAddress );
int arrayElemContent = board[0][0];
printf( "2d array [0][0] content is %d\n", arrayElemContent );
board[0][0] = BLOCKED;
printf( "blocked is %d\n", board[0][0] );
在这种情况下,从数组中检索的元素是您之前定义的枚举中的int,因此使用%d打印它。