2012-07-04 90 views
6

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

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

对不起,对于没有具体的乞讨。那么,我需要计算电路板宽度和板高变量?我如何从上面声明的数组中做到这一点。谢谢!

+0

嗨,杰克,欢迎来到stackoverflow。现在不清楚这里提出的是什么,你能更精确吗?一个你想要实现的小代码示例将是完美的。 – unkulunkulu

回答

8

boardSize[0]给你的矩阵,boardSize[0][0]第一它的元素的第一行。所以你要找的数量是sizeof boardSize/ sizeof boardSize[0]sizeof boardSize[0]/ sizeof boardSize[0][0]

顺便说一句:使用size_t作为尺寸的类型,而不是int

+0

谢谢Jens,我认为这就是我正在寻找的:) –

+0

@larkey,为什么会这样?基类型在这里是'int'。所以这通常是'4'。 –

+0

><是的,我在与chars工作太久时遇到过它。 – larkey

0

如果你说

int boardSize[5][5]; 

,让你整数的二维数组,5×5英寸大小。所以它会有5行,每列5列,共25个整数。

+0

我知道,我的意思是如何将这些参数作为宽度和高度传递给函数?我需要有一个单独的变量,比如int width,int height。 –

+0

@JackMorton - 你在这个评论中说的话根本不清楚。我会建议编辑。 – ArjunShankar

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); 
+0

谢谢,这也有帮助 –

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) 
{ 

}