¿Cómo asigna C la memoria de los elementos de datos en una array multidimensional?

Los elementos de datos en una array multidimensional se almacenan en forma de filas y columnas. Además, la memoria asignada para la array multidimensional es contigua. Por lo tanto, los elementos en arreglos multidimensionales se pueden almacenar en almacenamiento lineal utilizando dos métodos, es decir, el orden principal de filas o el orden principal de columnas .

  • Orden de filas principales : en el orden de filas principales , almacenamos los elementos de acuerdo con las filas, es decir, primero, almacenamos los elementos en la primera fila, seguidos de la segunda fila, y así sucesivamente. Por lo tanto, los elementos de la primera fila se almacenan linealmente en la memoria, seguidos por la segunda fila y así sucesivamente. En la memoria, no encontraremos ninguna separación entre las filas. 
  • Orden principal de columna: el orden principal de columna es opuesto al de fila principal en el almacenamiento de los elementos de datos, es decir, aquí, primero almacenamos los elementos en la primera columna, seguidos de la segunda columna, y así sucesivamente. Entonces, en este caso, los elementos de la primera columna se almacenan linealmente en la memoria, seguidos por la segunda columna, y así sucesivamente.

Los compiladores de C utilizan el método de orden principal de Fila para almacenar los elementos en la memoria. Básicamente, los compiladores de C almacenan arrays multidimensionales como arrays de una sola dimensión cuyos elementos son arrays unidimensionales o una array multidimensional cuya dimensión es 1 menos que la anterior. Y el almacenamiento de estos objetos de array es por filas. 

Tamaño y asignación de memoria de la array multidimensional:

El tamaño de cada dimensión en la array multidimensional debe declararse inicialmente. Y luego, el tamaño total de la array multidimensional se calcula multiplicando el tamaño de cada dimensión. Y la memoria asignada a la array multidimensional es igual al múltiplo del tamaño de la array multidimensional y el tamaño de un solo elemento

tipo_datos nombre_arreglo [ x1 ] [ x2 ] [ x3 ] ….. [ xn ] ;
tamaño de la array multidimensional : – x1*x2*x3*…..*xn
donde x1, x2, x3, …, xn son los tamaños de cada dimensión.
memoria asignada = tamaño de la array multidimensional * tamaño del único tipo de datos

Por ejemplo:-
int arr [ 3 ][ 4 ] [ 2 ];
el tamaño de esta array multidimensional (3 D) es 3*4*2 = 24
memoria asignada = 24 * 4 bytes = 96 bytes

Por ejemplo: 

Como se indica a continuación: int arr[3][3] = { {24, 15, 34}, {26, 134, 194}, {67, 23, 345} } se almacena en la memoria como:

Asignación de datos

Aquí, la dirección base es la dirección de la array multidimensional o la dirección del primer objeto almacenado en la array multidimensional . La dirección de memoria aumenta en 4 bytes (el tamaño del tipo de datos int).

A continuación se muestra la implementación del concepto anterior: 

C

// C Program to show allocation of data items
// in multidimensional array
  
#include <stdio.h>
#include <stdlib.h>
  
int main()
{
  
    // Declaring the dimension of
    // 2-Dimension array
    int row = 3;
    int col = 3;
  
    // Creating an array arr with size row*col
    int* arr = (int*)malloc(row * col * sizeof(int));
    int k = 1;
  
    // Inserting values in the array
    for (int i = 0; i < row; i++) {
        for (int j = 0; j < col; j++) {
  
            // The memory address of arr[i][j]
            // is equal to (arr + i*col + j)
            *(arr + i * col + j) = k;
            k++;
        }
    }
  
    // Printing the multidimensional array
    for (int i = 0; i < row; i++) {
        for (int j = 0; j < col; j++) {
            printf("%d ", *(arr + i * col + j));
        }
        printf("\n");
    }
    return 0;
}
Producción

1 2 3 
4 5 6 
7 8 9 

La implementación del código anterior muestra cómo los elementos se almacenan linealmente en orden de fila principal.

Publicación traducida automáticamente

Artículo escrito por sachin801 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *