2012-07-04 123 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) 
{ 

}