ich ein Brett so drucken möchten: C - wie der Wert des Zeigers drucken [0] [0] in einem 2D-Array
Und im gegebenen Code, ich diese Werte haben (unveränderbar Code):
#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]);
ich habe versucht, wie der initialiseBoard() in vielerlei Hinsicht zu schreiben:
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;
}
}
Weil ich die erste Zelle in der Platine an [0] [0] ist ein Zeiger wissen, so Ich habe viele Möglichkeiten ausprobiert Wert, aber es gibt immer eine Adresse zurück. Bitte werfen Sie einen Blick auf den folgenden Code und schlagen Sie mir einen Ansatz vor. Vielen Dank!
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]);
}
Wenn ich laufen Anzeigetafel():
Bei [0] [0], es gibt immer eine Adresse.
Bitte erstellen Sie einen [minimalen Testfall] (http://stackoverflow.com/help/mcve). –
Ein Zeiger _ist_ eine Adresse. Möchten Sie die Daten drucken, auf die dieser Zeiger zeigt? So wie es aussieht, haben Sie den Wert, den tmp zeigt, auf 0 gesetzt (LEER), Sie haben dann den Wert von [0] [0] auf die Adresse eingestellt, die tmp (ein Zeiger, _NOT_ der Wert LEER) liegt bei. – enhzflep
Die erste Zelle unterscheidet sich nicht von anderen, so dass Sie nicht auf eine bestimmte Art und Weise damit umgehen müssen. Außerdem verkomplizieren Sie die Dinge, indem Sie die 0 in der Schleife zum Drucken der Rahmen verwenden. Drucken Sie sie einfach außerhalb der Schleife. Sie haben auch nicht gezeigt, wie Sie diese Funktionen aufrufen. –