2012-07-04 10 views
6

Necesito declarar un 2d array para representar el tamaño del tablero de ajedrez. Sin embargo, estoy teniendo problemas para entender cómo calcularía realmente el ancho y la longitud del tablero. Me gustaría saber cómo puedo calcular el tamaño de las filas y columnas de mi matriz 2d2d array rows/columns length C

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

Lo sentimos, no siendo específico en el principio. Entonces, ¿aquí tengo que calcular las variables de ancho de banda y altura de tabla? ¿Cómo hago eso desde la matriz declarada arriba? ¡Gracias!

+0

Hola, Jack, bienvenido a stackoverflow. En este momento no está claro qué se está preguntando aquí, ¿puedes ser más preciso? Un pequeño ejemplo de código de lo que estás tratando de lograr sería perfecto. – unkulunkulu

Respuesta

8

boardSize[0] le da la primera fila de la matriz, boardSize[0][0] el primero de sus elementos. Entonces, las cantidades que está buscando son sizeof boardSize/ sizeof boardSize[0] y sizeof boardSize[0]/ sizeof boardSize[0][0].

BTW: use size_t como tipo para tamaños, no int.

+0

Gracias Jens, creo que eso es exactamente lo que estaba buscando :) –

+0

@larkey, ¿por qué sería eso? El tipo de base es 'int' aquí. Entonces esto normalmente sería '4'. –

+0

>. larkey

0

Si dice

int boardSize[5][5]; 

que le da una matriz 2D de números enteros, 5 x 5 pulgadas de tamaño. Por lo tanto, tendrá 5 filas de 5 columnas cada una, para un total de 25 enteros.

+0

Lo sé, me refiero a cómo voy a pasar estos parámetros como ancho y alto a una función? Necesito tener variables separadas, por ejemplo int ancho, int alto. –

+0

@JackMorton - Lo que dices en este comentario no fue del todo claro a partir de la pregunta. Sugeriría una edición. – 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)); 

Si desea salir de la junta como reserva estáticamente la declare como global como,

static int board[5][5]; 

Entonces atravesarlo en su método "createBoard" (odio notación húngara) para la inicialización correcta:

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

o puede asignarlo dinámicamente en su método createBoard(). En ese caso, no declare como variable local para main.

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

en main() se puede hacer algo como esto:

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

gracias, esto fue útil también –

0

Esto se soluciona fácilmente con la eliminación de todos los misteriosos números mágicos de su código.

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

}