¿Cómo declarar una array bidimensional de punteros en C?

Una array bidimensional de punteros es una array que tiene variables de tipo puntero. Esto significa que las variables almacenadas en la array 2D son tales que cada variable apunta a una dirección particular de algún otro elemento.

Cómo crear una array 2D de punteros:

Se puede crear una array 2D de punteros siguiendo la forma que se muestra a continuación.

int *array[5][5]; //crear una array de punteros enteros 2D de 5 filas y 5 columnas.

El elemento de la array 2D se inicializa asignando la dirección de algún otro elemento.
En el ejemplo, hemos asignado la dirección de la variable entera ‘n’ en el índice (0, 0) de la array 2D de punteros.

int n; //declarada una variable
arr[0][0] = &n; //asignado una variable en la posición (0, 0)

A continuación se muestra la implementación de la array 2D de punteros.

C

#include <stdio.h>
 
// Drivers code
int main()
{
    int arr1[5][5] = { { 0, 1, 2, 3, 4 },
                       { 2, 3, 4, 5, 6 },
                       { 4, 5, 6, 7, 8 },
                       { 5, 4, 3, 2, 6 },
                       { 2, 5, 4, 3, 1 } };
    int* arr2[5][5];
 
    // Initialising each element of the
    // pointer array with the address of
    // element present in the other array
    for (int i = 0; i < 5; i++) {
        for (int j = 0; j < 5; j++) {
            arr2[i][j] = &arr1[i][j];
        }
    }
 
    // Printing the array using
    // the array of pointers
    printf("The values are\n");
    for (int i = 0; i < 5; i++) {
        for (int j = 0; j < 5; j++) {
            printf("%d ", *arr2[i][j]);
        }
        printf("\n");
    }
 
    return 0;
}
Producción

The values are
0 1 2 3 4 
2 3 4 5 6 
4 5 6 7 8 
5 4 3 2 6 
2 5 4 3 1 

También se puede crear una array bidimensional de punteros mediante la asignación dinámica de memoria.

Podemos usar la función malloc() para asignar memoria dinámicamente.

ptr = (cast-type*) malloc(byte-size)

A continuación se muestra la implementación de una array 2D de punteros utilizando la asignación de memoria dinámica.

C

#include <stdio.h>
#include <stdlib.h>
// Drivers code
int main()
{
    int arr1[5][5] = { { 0, 1, 2, 3, 4 },
                       { 2, 3, 4, 5, 6 },
                       { 4, 5, 6, 7, 8 },
                       { 5, 4, 3, 2, 6 },
                       { 2, 5, 4, 3, 1 } };
 
    // Creating 2D array of pointers using Dynamic Memory
    // allocation through malloc() function
    int*** arr2 = malloc(5 * sizeof(int**));
    for (int i = 0; i < 5; i++)
        arr2[i] = malloc(5 * sizeof(int*));
 
    // Initialising each element of the
    // pointer array with the address of
    // element present in the other array
    for (int i = 0; i < 5; i++) {
        for (int j = 0; j < 5; j++) {
            arr2[i][j] = &arr1[i][j];
        }
    }
 
    // Printing the array using
    // the array of pointers
    printf("The values are\n");
    for (int i = 0; i < 5; i++) {
        for (int j = 0; j < 5; j++) {
            printf("%d ", *arr2[i][j]);
        }
        printf("\n");
    }
 
    return 0;
}

Producción:

The values are
0 1 2 3 4 
2 3 4 5 6 
4 5 6 7 8 
5 4 3 2 6 
2 5 4 3 1 

Publicación traducida automáticamente

Artículo escrito por soumyadeeppaul022 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 *