6

チェス盤のサイズを表す 2 次元配列を宣言する必要があります。しかし、ボードの幅と長さを実際にどのように計算するのか理解できません。2次元配列の行と列のサイズを計算する方法を知りたい

と言うint boardSize[5][5]

int main()
{
   int boardSize[5][5];
   int boardWidth=?
   int boardHeight =?
   createBoard(boardWidth, boardHeight);
}

 int createBoard(int width, int height)
 {
   // code that actually creates board //
 }

物乞いが具体的でなくてすみません。では、ここで基板幅と基板高さの変数を計算する必要がありますか? 上記の宣言された配列からそれを行うにはどうすればよいですか。ありがとうございました!

4

4 に答える 4

8

boardSize[0]行列の最初の行、つまりboardSize[0][0]その要素の最初の行が得られます。したがって、探している量はsizeof boardSize/ sizeof boardSize[0]sizeof boardSize[0]/ sizeof boardSize[0][0]です。

ところで:size_tではなく、サイズのタイプとして使用しintます。

于 2012-07-04T13:49:23.747 に答える
0

あなたが言うなら

int boardSize[5][5];

これにより、サイズが5x5の整数の2D配列が得られます。したがって、それぞれ5列の5行、合計25の整数になります。

于 2012-07-04T13:33:43.203 に答える
0
printf("Size of the board in bytes %d\n", sizeof(boardSize));
printf("Size of column size in bytes %d\n", 5*sizeof(int));
printf("Size of row in bytes %d\n", 5*sizeof(int));

ボードを静的に割り当てられたままにしたい場合は、それをグローバルとして宣言します。

static int board[5][5];

次に、正しい初期化のために「createBoard」メソッド(ハンガリー語表記が嫌いです)でそれをトラバースします:

for(i = 0; i < hight; i++)
  for(j = 0;j< width; j++)
     board[i][j] = <initialization stuff>

または、 createBoard() メソッドで動的に割り当てることができます。その場合、main のローカル変数として宣言しないでください。

int * createBoard(int hight, int width){
   int * board;
   if(board = malloc(sizeof(int) * hight * width))
       return board;
   return NULL;
}

main() では、次のようなことができます。

 int * board = createBoard(5,5);
 if(!board)
     printf("Allocation failure \n");
     exit(EXIT_FAILURE);
于 2012-07-04T13:39:36.793 に答える
0

これは、コードから謎のマジック ナンバーをすべて削除することで簡単に修正できます。

#define BOARD_WIDTH  8
#define BOARD_HEIGHT 8


square_t board [BOARD_WIDTH][BOARD_HEIGHT];

createBoard (board, BOARD_WIDTH, BOARD_HEIGHT);


void createBoard (square_t* board, int boardWidth, int boardHeight)
{

}
于 2012-07-04T14:29:14.473 に答える