Requisito previo: Matrices en C
Una matriz multidimensional puede denominarse como una matriz de matrices que almacena datos homogéneos en forma tabular. Los datos en matrices multidimensionales generalmente se almacenan en el orden de filas principales en la memoria.
El forma general de declarar matrices N-dimensionales se muestra a continuación.
Sintaxis:
data_type array_name[size1][size2]....[sizeN];>
- tipo de datos : Tipo de datos que se almacenarán en la matriz.
- nombre_matriz : Nombre de la matriz.
- tamaño1, tamaño2,…, tamañoN : Tamaño de cada dimensión.
Ejemplos :
ventajas y desventajas de la tecnología
Two dimensional array: int two_d[10][20]; Three dimensional array: int three_d[10][20][30];>
Tamaño de matrices multidimensionales:
El número total de elementos que se pueden almacenar en una matriz multidimensional se puede calcular multiplicando el tamaño de todas las dimensiones.
Por ejemplo:
- la matriz entero x[10][20] Puede almacenar un total (10*20) = 200 elementos.
- matriz similar intx[5][10][20] Puede almacenar un total (5*10*20) = 1000 elementos.
Para obtener el tamaño de la matriz en bytes, multiplicamos el tamaño de un solo elemento por el número total de elementos de la matriz.
Por ejemplo:
- Tamaño de la matriz entero x[10][20] = 10 * 20 * 4 = 800 bytes. (donde int = 4 bytes)
- De manera similar, el tamaño de intx[5][10][20] = 5 * 10 * 20 * 4 = 4000 bytes. (donde int = 4 bytes)
Las formas más utilizadas de matriz multidimensional son:
- Matriz bidimensional
- Matriz tridimensional
Matriz bidimensional en C
A matriz bidimensional o matriz 2D en C es la forma más simple de la matriz multidimensional. Podemos visualizar una matriz bidimensional como una matriz de matrices unidimensionales dispuestas una sobre otra formando una tabla con filas 'x' y columnas 'y' donde el número de fila varía de 0 a (x-1) y el número de columna varía de 0 a (y-1).

Representación gráfica de una matriz bidimensional de tamaño 3 x 3
Declaración de matriz bidimensional en C
La forma básica de declarar una matriz 2D con X filas y y Las columnas en C se muestran a continuación.
Sintaxis:
data_type array_name[x][y];>
dónde,
- tipo de datos: Tipo de datos a almacenar en cada elemento.
- nombre_matriz: nombre de la matriz
- X: Número de filas.
- y: Número de columnas.
Podemos declarar una matriz de enteros bidimensional, digamos 'x', con 10 filas y 20 columnas como:
Ejemplo:
int x[10][20];>
Nota: En este tipo de declaración, a la matriz se le asigna memoria en la pila y el tamaño de la matriz debe conocerse en el momento de la compilación, es decir, el tamaño de la matriz es fijo. También podemos crear una matriz dinámicamente en C usando los métodos mencionados. aquí.
Inicialización de matrices bidimensionales en C
Las diversas formas en que se puede inicializar una matriz 2D son las siguientes:
- Usando la lista de inicializadores
- Usando bucles
1. Inicialización de una matriz 2D usando la Lista de inicializadores
Podemos inicializar una matriz 2D en C usando una lista de inicializadores como se muestra en el siguiente ejemplo.
Primer método:
int x[3][4] = {0, 1 ,2 ,3 ,4 , 5 , 6 , 7 , 8 , 9 , 10 , 11}> La matriz anterior tiene 3 filas y 4 columnas. Los elementos entre llaves de izquierda a derecha se almacenan en la tabla también de izquierda a derecha. Los elementos se completarán en la matriz en orden: los primeros 4 elementos de la izquierda se completarán en la primera fila, los siguientes 4 elementos en la segunda fila, y así sucesivamente.
Segundo método (mejor) :
int x[3][4] = {{0,1,2,3}, {4,5,6,7}, {8,9,10,11}};> Este tipo de inicialización utiliza llaves anidadas. Cada conjunto de tirantes interiores representa una fila. En el ejemplo anterior, hay un total de tres filas, por lo que hay tres conjuntos de tirantes internos. La ventaja de este método es que es más fácil de entender.
Nota: La cantidad de elementos en la lista de inicializadores siempre debe ser menor o igual que la cantidad total de elementos en la matriz.
También podemos declarar la matriz sin definir el tamaño de la fila si usamos la inicialización de lista. El compilador deducirá automáticamente el tamaño de la matriz en este caso:
data_type array_name[][y] = {...} ;> Sigue siendo obligatorio definir el número de columnas.
2. Inicialización de una matriz 2D usando Loops
Podemos usar cualquier bucle C para inicializar cada miembro de una matriz 2D uno por uno como se muestra en el siguiente ejemplo.
Ejemplo:
int x[3][4]; for(int i = 0; i <3; i++){ for(int j = 0; j < 4; j++){ x[i][j] = i + j; } }> Este método es útil cuando los valores de cada elemento tienen alguna relación secuencial.
Accediendo a elementos de matrices bidimensionales en C
Se accede a los elementos de matrices 2D mediante índices de filas y de columnas. Se puede hacer referencia a cada elemento de una matriz 2D mediante:
Sintaxis:
array_name[i][j]>
dónde,
- i: El índice de fila.
- j: El índice de la columna.
Ejemplo:
int x[2][1];>
El ejemplo anterior representa el elemento presente en la tercera fila y la segunda columna.
Nota : En arrays, si el tamaño de un array es N. Su índice será de 0 a N-1. Por lo tanto, para el índice de fila 2, el número de fila es 2+1 = 3. Para generar todos los elementos de una matriz bidimensional podemos usar bucles for anidados. Necesitaremos dos' para 'bucles. Uno para recorrer las filas y otro para recorrer las columnas.
Para imprimir la matriz completa, accedemos a cada elemento uno por uno mediante bucles. El orden de recorrido puede ser de fila principal o de columna principal, según el requisito. El siguiente ejemplo demuestra el recorrido de la fila principal de una matriz 2D.
Ejemplo:
C
// C Program to print the elements of a> // Two-Dimensional array> #include> int> main(>void>)> {> >// an array with 3 rows and 2 columns.> >int> x[3][2] = { { 0, 1 }, { 2, 3 }, { 4, 5 } };> >// output each array element's value> >for> (>int> i = 0; i <3; i++) {> >for> (>int> j = 0; j <2; j++) {> >printf>(>'Element at x[%i][%i]: '>, i, j);> >printf>(>'%d
'>, x[i][j]);> >}> >}> >return> (0);> }> // This code is contributed by sarajadhav12052009> |
>
>Producción
Element at x[0][0]: 0 Element at x[0][1]: 1 Element at x[1][0]: 2 Element at x[1][1]: 3 Element at x[2][0]: 4 Element at x[2][1]: 5>
Complejidad del tiempo: O(N*M) , donde N(aquí 3) y M(aquí 2) son números de filas y columnas respectivamente.
Complejidad espacial:O(1)
¿Cómo se almacenan los arreglos 2D en la memoria?
Los elementos de la matriz 2-D deben almacenarse de forma contigua en la memoria. Como las computadoras tienen direcciones de memoria lineales, las matrices 2-D deben linealizarse para permitir su almacenamiento. Hay dos formas de lograr la linealización de elementos de una matriz:
- Fila mayor- La técnica de linealización almacena primero la primera fila de la matriz, luego la segunda fila de la matriz, luego la tercera fila, y así sucesivamente. (es decir, los elementos se almacenan por filas. Las filas se enumeran según las columnas)
- Columna principal – Esta técnica de linealización almacena primero la primera columna, luego la segunda columna, luego la tercera columna, y así sucesivamente, es decir, (los elementos se almacenan en columnas. Las columnas se enumeran según las filas).
La computadora no realiza un seguimiento de las direcciones de todos los elementos de la matriz, pero sí realiza un seguimiento de la dirección base (dirección inicial del primer elemento) y calcula las direcciones de los elementos cuando es necesario.
índice de java
Para saber más, consulte el artículo – Cálculo de la dirección del elemento de 1-D, 2-D y 3-D.
Matriz tridimensional en C
A Matriz tridimensional o 3D Una matriz en C es una colección de matrices bidimensionales. Se puede visualizar como múltiples matrices 2D apiladas una encima de otra.

Representación gráfica de una matriz tridimensional de tamaño 3 x 3 x 3
Declaración de matriz tridimensional en C
Podemos declarar una matriz 3D con X matrices 2D cada una con y filas y Con columnas utilizando la sintaxis que se muestra a continuación.
Sintaxis:
data_type array_name[x][y][z];>
- tipo de datos: Tipo de datos a almacenar en cada elemento.
- nombre_matriz: nombre de la matriz
- X: Número de matrices 2D.
- y: Número de filas en cada matriz 2D.
- Con: Número de columnas en cada matriz 2D.
Ejemplo:
int array[3][3][3];>
Inicialización de una matriz tridimensional en C
La inicialización en una matriz 3D es la misma que la de las matrices 2D. La diferencia es que a medida que aumenta el número de dimensiones, también aumentará el número de llaves anidadas.
Una matriz 3D en C se puede inicializar usando:
- Lista de inicializadores
- Bucles
Inicialización de 3D Array usando la lista de inicializadores
Método 1 :
int x[2][3][4] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23};> Método 2 (mejor) :
int x[2][3][4] = { { {0,1,2,3}, {4,5,6,7}, {8,9,10,11} }, { {12,13,14,15}, {16,17,18,19}, {20,21,22,23} } };> Nuevamente, al igual que las matrices 2D, también podemos declarar las matrices 3D sin especificar el tamaño de las primeras dimensiones si usamos la lista de inicializadores para la inicialización. El compilador deducirá automáticamente el tamaño de la primera dimensión. Pero aún nos falta especificar el resto de dimensiones.
data_type array_name[][y][z] = {....};> Inicialización de 3D Array usando Loops
También es similar al de una matriz 2D con un bucle anidado más para acceder a una dimensión más.
int x[2][3][4]; for (int i=0; i<2; i++) { for (int j=0; j<3; j++) { for (int k=0; k<4; k++) { x[i][j][k] = (some_value); } } }> Accediendo a elementos en Three-Dimensional Array en C
El acceso a elementos en 3D Arrays también es similar al de 2D Arrays. La diferencia es que tenemos que usar tres bucles en lugar de dos bucles para una dimensión adicional en 3D Arrays.
Sintaxis:
array_name[x][y][z]>
dónde,
- X: Índice de matriz 2D.
- y: Índice de esa fila de matriz 2D.
- Con: Índice de esa columna de matriz 2D.
C
obtener conexión
// C program to print elements of Three-Dimensional Array> #include> int> main(>void>)> {> >// initializing the 3-dimensional array> >int> x[2][3][2] = { { { 0, 1 }, { 2, 3 }, { 4, 5 } },> >{ { 6, 7 }, { 8, 9 }, { 10, 11 } } };> >// output each element's value> >for> (>int> i = 0; i <2; ++i) {> >for> (>int> j = 0; j <3; ++j) {> >for> (>int> k = 0; k <2; ++k) {> >printf>(>'Element at x[%i][%i][%i] = %d
'>, i,> >j, k, x[i][j][k]);> >}> >}> >}> >return> (0);> }> |
>
>Producción
Element at x[0][0][0] = 0 Element at x[0][0][1] = 1 Element at x[0][1][0] = 2 Element at x[0][1][1] = 3 Element at x[0][2][0] = 4 Element at x[0][2][1] = 5 Element at x[1][0][0] = 6 Element at x[1][0][1] = 7 Element at x[1][1][0] = 8 Element at x[1][1][1] = 9 Element at x[1][2][0] = 10 Element at x[1][2][1] = 11>
De manera similar, podemos crear matrices con cualquier número de dimensiones. Sin embargo, la complejidad también aumenta a medida que aumenta el número de dimensiones. La matriz multidimensional más utilizada es la matriz bidimensional.
Las matrices también están estrechamente relacionadas con los punteros en lenguaje C. Para saber más sobre la relación de matrices con punteros en C, consulte este artículo.