2012-07-04 43 views
6

Tôi cần khai báo mảng 2d để thể hiện kích thước của bàn cờ. Tuy nhiên, tôi đang gặp khó khăn trong việc hiểu làm thế nào tôi thực sự sẽ tính toán chiều rộng và chiều dài của hội đồng quản trị. Tôi muốn biết làm cách nào để tính toán kích thước của các hàng và cột trong mảng 2d của tôi2d chiều dài hàng/cột mảng C

Nói, 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 // 
} 

Xin lỗi, vì không cụ thể trong việc ăn xin. Vì vậy, ở đây tôi cần phải tính toán các biến boardwidth và boardheight? Làm thế nào để tôi làm điều đó từ mảng được khai báo ở trên. Cảm ơn bạn!

+0

Xin chào, Jack, chào mừng bạn đến với stackoverflow. Ngay bây giờ không rõ những gì đang được hỏi ở đây, bạn có thể chính xác hơn không? Một ví dụ mã nhỏ về những gì bạn đang cố gắng đạt được sẽ là hoàn hảo. – unkulunkulu

Trả lời

8

boardSize[0] mang đến cho bạn hàng đầu tiên của ma trận, boardSize[0][0] là người đầu tiên của các yếu tố của nó. Vì vậy, số lượng bạn đang tìm kiếm là sizeof boardSize/ sizeof boardSize[0]sizeof boardSize[0]/ sizeof boardSize[0][0].

BTW: sử dụng size_t làm loại cho kích thước chứ không phải int.

+0

Cảm ơn bạn Jens, tôi nghĩ đó chính xác là những gì tôi đang tìm kiếm :) –

+0

@larkey, tại sao lại như thế? Kiểu cơ sở là 'int' ở đây. Vì vậy, điều này thường sẽ là '4'. –

+0

>. larkey

0

Nếu bạn nói

int boardSize[5][5]; 

cung cấp cho bạn một mảng 2D của số nguyên, 5 5 trong kích thước. Vì vậy, nó sẽ có 5 hàng của 5 cột mỗi, cho tổng số 25 số nguyên.

+0

Tôi biết rằng, tôi có nghĩa là làm thế nào tôi sẽ vượt qua các tham số này như chiều rộng và chiều cao cho một chức năng? Tôi cần phải có một biến riêng biệt, nói int chiều rộng, chiều cao int. –

+0

@JackMorton - Những gì bạn nói trong bình luận này không rõ ràng từ câu hỏi. Tôi sẽ đề nghị chỉnh sửa. – 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)); 

Nếu bạn muốn rời khỏi hội đồng quản trị như tĩnh phân bổ các khai báo nó như là toàn cầu như thế nào,

static int board[5][5]; 

Sau đó đi qua nó trong phương thức "createBoard" của bạn (Tôi ghét ký hiệu Hungary) để khởi tạo đúng:

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

hoặc bạn có thể phân bổ động nó trong phương thức createBoard() của mình. Trong trường hợp đó không khai báo là biến cục bộ cho chính.

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

trong hàm main(), bạn có thể làm một cái gì đó như thế này:

int * board = createBoard(5,5); 
if(!board) 
    printf("Allocation failure \n"); 
    exit(EXIT_FAILURE); 
+0

cảm ơn bạn, điều này cũng hữu ích là –

0

Điều này dễ dàng được khắc phục bằng cách xóa tất cả các số ma thuật bí ẩn khỏi mã của bạn.

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

} 
Các vấn đề liên quan