6

我需要声明一个二维数组来表示棋盘的大小。但是,我无法理解如何实际计算板的宽度和长度。我想知道如何计算二维数组的行和列的大小

说,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 //
 }

抱歉,在乞求时没有具体说明。那么,这里我需要计算boardwidth 和boardheight 变量吗?我如何从上面声明的数组中做到这一点。谢谢!

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];

这为您提供了一个 2D 整数数组,大小为 5 x 5。所以它将有 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 回答