我需要声明一个2d数组来表示棋盘的大小。但是,我很难理解如何实际计算电路板的宽度和长度。 我想知道如何计算我的2d数组的行和列的大小
说,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变量?我如何从上面声明的数组中做到这一点。谢谢!
答案 0 :(得分:8)
boardSize[0]
为您提供矩阵的第一行,boardSize[0][0]
第一行元素。因此,您要查找的数量为sizeof boardSize/ sizeof boardSize[0]
和sizeof boardSize[0]/ sizeof boardSize[0][0]
。
BTW:使用size_t
作为尺寸类型,而不是int
。
答案 1 :(得分:0)
如果你说
int boardSize[5][5];
它为您提供一个整数的2D数组,大小为5 x 5。因此它将有5行,每行5列,总共25个整数。
答案 2 :(得分: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);
答案 3 :(得分: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)
{
}