2011-02-15 10 views

Respuesta

3

Bueno, esto se hace dependiendo de su tipo de datos de la matriz que haya considerado.

Supongamos que para una matriz de enteros, cada valor tiene 4 bytes, por lo tanto, una fila X de longitud tomará 4 bytes.

Por lo tanto, una matriz 2-D de X * Y será de 4 * X * Y bytes.

Cualquier dirección dicen Arry [X] [Y] sería calculado como: (Dirección Base de Arry) + (X * Nº de columnas) + (Y // Offset en la fila actual)

0

Una matriz anidada es una matriz de matrices.

Por ejemplo, un int[][6] es una matriz de int[6].
Suponiendo un int de 4 bytes, cada elemento en el conjunto externo es 6 * 4 = 24 bytes de ancho. Por lo tanto, arr[4] obtiene la tercera matriz en la matriz externa, o *(arr + 4 * 24).

arr[4] es un int[] normal. arr[4][2] obtiene la segunda int en esta matriz interna, o *(arr + 4 * 24 + 2 * 4)

1

Las matrices bidimensionales en C son rectangulares. Por ejemplo:

int matrix[2][3]; 

asigna un solo bloque de memoria 2*3*sizeof(int) bytes de tamaño. Dirigirse al matrix[0][1] es solo una cuestión de agregar 0 * (3 * sizeof(int)) al sizeof(int). A continuación, agregue esa suma a la dirección en la que comienza matrix.

+0

Gracias Michaels – Lagnesh

0

Por ej.

char anArray[][13]={"Hello World!","February","John"}; 

Puede visualizarlo como:

anArray:

H|e|l|l|o| |W|o|r|l|d|!|\0|F|e|b|r|u|a|r|y|\0|\0|\0|\0|\0|J|o|h|n|\0|\0|\0|0|\0 
^      ^       ^
0       13        26 
+0

En realidad, se garanticen todos los personajes para los cuales usted no da un inicializador que ser inicializado a \ 0 . Entonces debes reemplazar todo tu '+' por '\ 0'. –