Un arreglo bidimensional es un arreglo de arreglos unidimensionales
(es un vector de vectores) Todos los datos del arreglo bidimensional deben ser del mismo tipo También se puede visualizar a un arreglo bidimensional como una "matriz" con filas y columnas; el primer índice indica la fila y el segundo indica la columna. En donde, al variar el primer índice, se accede al arreglo a lo largo de una columna, y al variar el segundo índice, se accede por una fila int cuadro[3][4]; Declaracion de una matriz • Una matriz se declara usando el siguiente formato <TIPO> <NOMBREmatriz> [N][M] Por ejemplo: si se quiere declarar una matriz de diimension 15x4 y que va almacenar tipo de datos carácter char matriz[15][4] int cuadro[3][4];
• Para identificar los elementos de la matriz, se utilizan dos
subíndices: • El 1ero, indica a la fila donde se ubica. • El 2do, indica en que columna esta. Por ejemplo: cuadro[2][3] se refiere al elemento ubicado en la segunda fila y tercera columna Nota: Los índices empiezan siempre en cero al igual que un arreglo unidimensional Inicialización de un arreglo bidimensional • Es posible declarar e inicializar un arreglo a la vez. Por ejemplo: int matriz[2][2] = {{5, 6},{7, 8}} se almacenará en el arreglo matriz de la siguiente forma: 56 78 Si dentro de un par de llaves "faltan" constantes, los elementos son inicializados por defecto al valor 0. Por ejemplo int matriz[2][3] = {{5, 6},{7, 8}} se almacenará en el arreglo matriz de la siguiente forma: 560 780 Si los datos son puestos solo entre llaves sin las llaves internas. Por ejemplo. int matriz[2][3] = {5, 6, 7, 8}; se almacenará en el arreglo matriz de la siguiente forma: 567 800 Si se inicializa una matriz tipo char lo podemos hacer asi: char dias [7][10]= {"LUNES","MARTES","MIERCOLES","JUEVES","VIERNES","SABADO","DOMINGO"}; Inicialización de Arreglos Indeterminados Bidimensionales En los arreglos indeterminados bidimensionales las filas son indeterminadas, omitiendo el índice de las filas, ya que el compilador asignará automáticamente el espacio necesario para las constantes a ser inicializadas. • Por ejemplo, para crear un arreglo de 2 columnas: La primera columna es un número entero y la segunda columna su cuadrado, se declararía así: int cuad [ ][2] = { 1, 1, 2, 4, 3, 9, 4, 16 }; • La ventaja de esta declaración es que la tabla puede alargarse o acortarse sin cambiar la dimensión del arreglo. Lectura Para realizar la lectura de una matriz se hace de forma similar a un arreglo unidimensional salvo que en este caso se usaría un for anidado ya que el primer for recorrería las filas y el segundo for recorrería las columnas. • Matriz m x n for(i=0;i<*fa;i++) { for(j=0;j<*ca;j++) { printf("Posicion[%d][%d]:",i,j); scanf("%d",&a[i][j]); } } • Si la matriz es tipo char, si es un string usaríamos la siguiente forma for(i=0;i<7;i++) { puts("ingrese el dia"); gets(dias[i]); } escritura 1era: 3er for(i=0;i<7;i++) for(i=0;i<*fa;i++) { { puts(dias[i]); for(j=0;j<*ca;j++) } { printf("\t%d ",a[i][j]); } printf("\n"); 2da } for(i=0;i<7;i++) { p=dias[i]; while(*p!='\0') { putchar(*p++);//para impimir un caracter } putchar('\n');//cada arreglo un espacio } memoria • El almacenamiento de memoria, esta dispuesto en secuencia contigua de modo que cada acceso debe convertir la posición dentro del array en una posición dentro de una línea. Por ejemplo en una matriz 3x2 Puntero a arreglos • El nombre de un arreglo sin índices es un puntero a puntero dirigido al primer elemento del arreglo. Por ejemplo, con las siguientes declaraciones: int caucho[4][2]; /* Arreglo int de 4 filas y 2 columnas. */ int *punt; /* Puntero a entero. */ La asignación al puntero seria: punt = &caucho[0][0]; Los elementos del arreglo bidimensional se almacenan en la memoria por filas, como arreglos de una dimensión, el orden de ellos se determina variando primero el índice de las columnas y luego el de las filas. En el anterior ejemplo se tendría: caucho[0][0] caucho[0][1] caucho[1][0] caucho[1][1] … Entonces, primero se coloca la primera fila, luego la segunda, la tercera, y así sucesivamente. Por tanto, las direcciones de cada elemento serán: punt == &caucho[0][0] /* Fila 0, columna 0 */ punt+1 == &caucho[0][1] /* Fila 0, columna 1 */ punt+2 == &caucho[1][0] /* Fila 1, columna 0 */ punt+3 == &caucho[1][1] /* Fila 1, columna 1 */