Matriz de Punteros

CBeginner
Practicar Ahora

Introducción

En la programación en C, una matriz de punteros es una matriz en la que cada elemento es un puntero a otro tipo de datos, como int, char, float, etc. En este laboratorio, aprenderemos cómo acceder a una matriz de punteros a enteros y una matriz de punteros a caracteres.

Matriz de Punteros a Enteros

En este paso, accederemos a una matriz de punteros a enteros. Abra el archivo main.c en el directorio ~/project/ y pegue el siguiente código:

#include <stdio.h>

// Declaración global.
const int MAX = 5;

int main() {
  printf("\n\n\t\t==== Matriz de punteros a enteros ====\n\n\n");

  int var[] = {10, 20, 30, 40, 50}; // inicializando una matriz (aquí var) de punteros a int
  int i = 0;

  /*
      ptr es una matriz de punteros a int, es decir,
      almacena la dirección de cada elemento de la matriz
  */
  int *ptr[MAX];

  for(i = 0; i < MAX; i++) {
    /*
        Asigne la dirección de cada elemento de la matriz
        al array ptr
    */
    ptr[i] = &var[i];
  }

  for(i = 0; i < MAX; i++) {
    /*
        ptr[i] almacena la dirección del elemento var[i].
        Por lo tanto, *ptr[i] devuelve el valor del elemento
        almacenado en la ubicación ptr[i]
    */
    printf("Valor de var[%d] = %i\n\n", i, *ptr[i]);
  }

  printf("\n\n\t\t==== Fin del programa ====\n\n\n");
  return 0;
}

Este programa inicializa una matriz de punteros a enteros y asigna la dirección de cada elemento de la matriz al array de punteros. Luego, imprime el valor de cada elemento utilizando el array de punteros.

Matriz de Punteros a Caracteres

En este paso, accederemos a una matriz de punteros a caracteres. Pegue el siguiente código después del código del paso anterior:

#include <stdio.h>

// Declaración global.
const int MAX = 4;

int main() {
  printf("\n\n\t\t==== Matriz de punteros a caracteres ====\n\n\n");

  char *names[] = {"Google", "Amazon", "Facebook", "Apple"}; // inicializando una matriz (aquí names) de punteros a char
  int i = 0;

  for(i = 0; i < MAX; i++) {
    printf("Valor de names[%d] = %s\n\n", i, names[i]);
  }

  printf("\n\n\t\t==== Fin del programa ====\n\n\n");
  return 0;
}

Este programa inicializa una matriz de punteros a caracteres y asigna la dirección del primer carácter de cada cadena al array de punteros. Luego, imprime el nombre completo de cada elemento utilizando el array de punteros.

Compilar y ejecutar el programa

En este paso, compilaremos y ejecutaremos el programa. Abra la terminal y vaya al directorio ~/project/. Escriba el siguiente comando para compilar el programa:

gcc main.c -o main

Después de una compilación exitosa, escriba el siguiente comando para ejecutar el programa:

./main

Este comando ejecutará el programa y mostrará la salida en la terminal:

  ==== Matriz de punteros a enteros ====


Valor de var[0] = 10

Valor de var[1] = 20

Valor de var[2] = 30

Valor de var[3] = 40

Valor de var[4] = 50


  ==== Matriz de punteros a caracteres ====


Valor de names[0] = Google

Valor de names[1] = Amazon

Valor de names[2] = Facebook

Valor de names[3] = Apple


  ==== Fin del programa ====

Código Completo

#include <stdio.h>

// Declaración global.

const int MAX = 5;

int main() {
  printf("\n\n\t\t==== Matriz de punteros a enteros ====\n\n\n");

  int var[] = {10, 20, 30, 40, 50}; // inicializando una matriz (aquí var) de punteros a int
  int i = 0;

  /*
      ptr es una matriz de punteros a int, es decir,
      almacena la dirección de cada elemento de la matriz
  */
  int *ptr[MAX];

  for(i = 0; i < MAX; i++) {
    /*
        Asigne la dirección de cada elemento de la matriz
        al array ptr
    */
    ptr[i] = &var[i];
  }

  for(i = 0; i < MAX; i++) {
    /*
        ptr[i] almacena la dirección del elemento var[i].
        Por lo tanto, *ptr[i] devuelve el valor del elemento
        almacenado en la ubicación ptr[i]
    */
    printf("Valor de var[%d] = %i\n\n", i, *ptr[i]);
  }

  printf("\n\n\t\t==== Matriz de punteros a caracteres ====\n\n\n");

  char *names[] = {"Google", "Amazon", "Facebook", "Apple"}; // inicializando una matriz (aquí names) de punteros a char
  i = 0;

  for(i = 0; i < MAX; i++) {
    printf("Valor de names[%d] = %s\n\n", i, names[i]);
  }

  printf("\n\n\t\t==== Fin del programa ====\n\n\n");
  return 0;
}

Resumen

En este laboratorio, hemos aprendido cómo acceder a una matriz de punteros a enteros y una matriz de punteros a caracteres. Una matriz de punteros es una matriz en la que cada elemento es un puntero a otro tipo de datos. Hemos aprendido cómo inicializar una matriz de punteros, cómo asignar las direcciones de los elementos de una matriz a una matriz de punteros y cómo acceder a los elementos de la matriz utilizando la matriz de punteros.