2012-07-04 16 views
6

ho bisogno di dichiarare un array 2D per rappresentare la dimensione della scacchiera. Tuttavia, ho difficoltà a capire come potrei effettivamente calcolare la larghezza e la lunghezza della scheda. Mi piacerebbe sapere come posso calcolare la dimensione delle righe e delle colonne del mio array 2drighe matrice 2D/colonne lunghezza 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 // 
} 

Siamo spiacenti, per non essere specifico nel accattonaggio. Quindi, qui ho bisogno di calcolare le variabili di larghezza di banda e di boardheight? Come faccio a farlo dall'array dichiarato sopra. Grazie!

+0

Ciao, Jack, benvenuto nello stackoverflow. In questo momento non è chiaro cosa viene chiesto qui, puoi essere più preciso? Un piccolo esempio di codice di ciò che stai cercando di ottenere sarebbe perfetto. – unkulunkulu

risposta

8

boardSize[0] ti dà la prima riga della matrice, boardSize[0][0] il primo dei suoi elementi. Così le quantità che stai cercando sono sizeof boardSize/ sizeof boardSize[0] e sizeof boardSize[0]/ sizeof boardSize[0][0].

BTW: utilizzare size_t come tipo per le dimensioni, non int.

+0

Grazie Jens, penso che è esattamente quello che stavo cercando :) –

+0

@larkey, perché sarebbe? Il tipo di base è 'int' qui. Quindi questo sarebbe tipicamente '4'. –

+0

>. larkey

0

Se dici

int boardSize[5][5]; 

che ti dà una matrice 2D di interi, 5 da 5 in termini di dimensioni. Quindi avrà 5 righe di 5 colonne ciascuna, per un totale di 25 numeri interi.

+0

Lo so, voglio dire come vorrei passare questi parametri come larghezza e l'altezza a una funzione? Devo avere una variabile separata, diciamo int width, int height. –

+0

@JackMorton - Ciò che dici in questo commento non è affatto chiaro dalla domanda. Suggerirei una modifica. – 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)); 

Se si desidera lasciare il bordo come allocato in modo statico la dichiareremo come globale come,

static int board[5][5]; 

Poi attraversarlo nel metodo "createBoard" (odio notazioni Ungherese) per una corretta inizializzazione:

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

oppure è possibile allocarlo dinamicamente nel metodo createBoard(). In tal caso non dichiarare come variabile locale per main.

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

in main() si può fare qualcosa di simile:

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

grazie, questo è stato utile pure –

0

questo è facilmente risolto con la rimozione di tutti i numeri magici misteriosi dal codice.

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

} 
Problemi correlati