¿Cómo acceder a una matriz bidimensional usando punteros en la programación C?

¿Cómo acceder a una matriz bidimensional usando punteros en la programación C?

¿Cómo acceder a una matriz bidimensional usando punteros en la programación C? Escriba un programa en C para ingresar e imprimir elementos de una matriz bidimensional usando punteros y funciones.

Ejemplo

Entrada

Input elements in 3x3 matrix: 
1 2 3
4 5 6
7 8 9

Salida

Elements of 3x3 matrix: 
1 2 3
4 5 6
7 8 9

Conocimiento requerido

Matriz multidimensional, Punteros, Punteros y matrices, Funciones

¿Cómo acceder a una matriz bidimensional usando punteros?

Para acceder a una matriz bidimensional usando un puntero, recordemos los conceptos básicos de una matriz unidimensional. Dado que es solo una matriz de una matriz unidimensional.

Supongamos que tengo un puntero array_ptr apuntando a la dirección base de una matriz unidimensional. Para acceder al elemento n de la matriz usando el puntero, usamos *(array_ptr + n) (donde array_ptr apunta al elemento 0 de la matriz, n es el elemento n para acceder y el elemento n comienza desde 0).

Ahora sabemos que una matriz bidimensional es una matriz de una matriz unidimensional. Por lo tanto, veamos cómo acceder a una matriz bidimensional a través del puntero.

Supongamos una matriz bidimensional

int matrix[3][3];

Para la matriz anterior,

matrix               =>    Points to base address of two-dimensional array.
                           Since array decays to pointer.

*(matrix)            =>    Points to first row of two-dimensional array.
*(matrix + 0)        =>    Points to first row of two-dimensional array.
*(matrix + 1)        =>    Points to second row of two-dimensional array.

**matrix             =>    Points to matrix[0][0]
*(*(matrix + 0))     =>    Points to matrix[0][0]
*(*(matrix + 0) + 0) =>    Points to matrix[0][0]
*(*matrix + 1)       =>    Points to matrix[0][1]
*(*(matrix + 0) + 1) =>    Points to matrix[0][1]
*(*(matrix + 2) + 2) =>    Points to matrix[2][2]

He intentado resumir el acceso a la matriz bidimensional usando el puntero en la imagen de abajo.

Programa para acceder a una matriz bidimensional usando un puntero

/**
 * C program to access two dimensional array using pointer.
 */

#include <stdio.h>

#define ROWS 3
#define COLS 3

/* Function declaration to input and print two dimensional array */
void inputMatrix(int matrix[][COLS], int rows, int cols);
void printMatrix(int matrix[][COLS], int rows, int cols);



int main()
{
    int matrix[ROWS][COLS];
    int i, j;

    /* Input elements in matrix */
    printf("Enter elements in %dx%d matrix.\n", ROWS, COLS);
    inputMatrix(matrix, ROWS, COLS);


    /* Print elements in matrix */
    printf("Elements of %dx%d matrix.\n", ROWS, COLS);
    printMatrix(matrix, ROWS, COLS);


    return 0;
}




/**
 * Function to take input in two dimensional array (matrix) 
 * from user.
 *
 * @matrix  2D array to store input.
 * @rows    Total rows in 2D matrix.
 * @cols    Total columns in 2D matrix.
 */
void inputMatrix(int matrix[][COLS], int rows, int cols)
{
    int i, j;


    for(i = 0; i < rows; i++)
    {
        for(j = 0; j < cols; j++)
        {
            // (*(matrix + i) + j is equivalent to &matrix[i][j]
            scanf("%d", (*(matrix + i) + j));
        }
    }
}



/**
 * Function to display elements of two dimensional array (matrix)
 * on console.
 *
 * @matrix  2D array to display as output.
 * @rows    Total rows in 2D matrix.
 * @cols    Total columns in 2D matrix.
 */
void printMatrix(int (*matrix)[COLS], int rows, int cols)
{
    int i, j;


    for (i = 0; i < rows; i++)
    {
        for (j = 0; j < cols; j++)
        {
            // *(*(matrix + i) + j) is equivalent to matrix[i][j]
            printf("%d ", *(*(matrix + i) + j));
        }

        printf("\n");
    }
}

Salida

Enter elements in 3x3 matrix.
1 2 3
4 5 6
7 8 9
Elements of 3x3 matrix.
1 2 3
4 5 6
7 8 9

Publicaciones recomendadas

  • Índice de ejercicios de programación de matrices y arreglos.
  • Programa en C para ordenar arreglos usando punteros.
  • Programa en C para buscar un elemento en una matriz usando punteros.
  • Programa en C para invertir una matriz usando punteros.
  • Programa en C para intercambiar dos arreglos usando un puntero.
  • Programa en C para copiar una matriz a otra usando punteros.