2012-07-04 15 views
6

Satranç tahtasının boyutunu göstermek için 2d dizisini bildirmem gerekiyor. Bununla birlikte, problemin gerçekte tahta genişliğini ve uzunluğunu nasıl hesaplayacağımı anlamakta zorlanıyorum. 2d dizilimdeki satır ve boyutların boyutunu nasıl hesaplayabildiğimi bilmek isterim2d dizi satır/sütun uzunluğu C

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

Üzgünüz, yalvarıma özel olmamak için. Yani, burada boardwidth ve boardheight değişkenlerini hesaplamalıyım? Yukarıdaki bildirilen dizinden bunu nasıl yaparım? Teşekkür ederim!

+0

Merhaba, Jack, yığın akışına hoş geldiniz. Şu anda burada sorulan şeyin ne olduğu belli değil, daha hassas olabilir misiniz? Neyi başarmaya çalıştığınıza dair küçük bir kod örneği mükemmel olurdu. – unkulunkulu

cevap

8

boardSize[0] size onun elemanlarının ilk matrisin, boardSize[0][0] ilk satırı verir. Bu nedenle, aradığınız miktarlar sizeof boardSize/ sizeof boardSize[0] ve sizeof boardSize[0]/ sizeof boardSize[0][0]'dur.

BTW: int ürününü değil, boyutlar için size_t boyutlarını kullanabilirsiniz.

+0

Teşekkür ederim Jens, Ben tam olarak ne aradığımı düşünüyorum :) –

+0

@larkey, neden olur? Taban tipi burada int. Yani bu genellikle '4' olur. –

+0

>. larkey

0

Eğer boyutunda size tamsayılar bir 2D dizi verir

int boardSize[5][5]; 

, 5 ile 5 derseniz. Dolayısıyla, toplam 25 tam sayı için 5 satır 5 sütun olacak. Eğer kurulu terk istediğiniz gibi statik gibi küresel olarak ilan bunu ayrılan Eğer

+0

Bunu biliyorum, bu parametreleri genişlik ve yükseklik olarak bir işleve nasıl iletebilirim? Ayrı değişkenlere ihtiyacım var, int genişliği, int yüksekliği. –

+0

@JackMorton - Bu yorumda söyledikleriniz hiç de açık değildi. Bir düzenleme önerebilirim. – 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]; 

Sonra "createBoard" yönteminde bunu çapraz doğru başlatma için (ı Macar gösterimler hate):

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

veya dinamik olarak createBoard() yöntemi içinde ayırabilirsiniz. Bu durumda ana için yerel değişken olarak beyan etmeyin. Ana içinde

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

() böyle bir şey yapabilirsiniz:

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

Teşekkürler, bu da yararlı oldu –

0

Bu, tüm gizemli sihir numaralarının kodunuzdan kaldırılmasıyla kolayca düzeltilir.

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

}