AprenderC
← Todas las lecciones

Una tabla que crece

Una fila de punteros, y cada uno apuntando a su propia fila.

1Por qué

Un tablero, una matriz, una imagen: todo eso son tablas con filas y columnas. Y todo eso aparece en los talleres del semestre.

En C, una tabla de tamaño decidido al vuelo se arma en dos pisos. Primero pides una fila de punteros, uno por cada fila de la tabla. Después, a cada uno de esos punteros le pides su propia fila de datos.

Por eso el tipo lleva dos estrellas: int **t. La primera dice «puntero a», la segunda «puntero a un entero». Junto: un puntero a punteros a enteros.

Una vez armada se usa con dos corchetes, t[1][2], y se lee como cualquiera esperaría: fila 1, columna 2. La complicación está en construirla, no en usarla.

Aquí aparece calloc, que es como malloc pero además deja todo en cero. Para una tabla es lo que quieres: empezar con basura en un tablero es pedir problemas.

Y al devolver hay que hacerlo al revés: primero cada fila, y la fila de punteros al final. Si devuelves la de punteros primero, te quedas sin saber dónde estaban las otras — y ya no hay forma de recuperarlas.

2Míralo andar

Este programa funciona. Léelo, y después ejecútalo sin cambiar nada.

#include <stdio.h>
#include <stdlib.h>
int main(void)
{
int filas = 2;
int cols = 3;
int **t = calloc(filas, sizeof(int *));
for (int i = 0; i < filas; i++)
t[i] = calloc(cols, sizeof(int));
t[1][2] = 9;
printf("%d\n", t[1][2]);
for (int i = 0; i < filas; i++)
free(t[i]);
free(t);
return 0;
}

3Ahora tú

Arma una tabla de 3 filas por 2 columnas, pon un 4 en la última casilla y escríbelo

#include <stdio.h>
#include <stdlib.h>
int main(void)
{
int filas = 3;
int cols = 2;
int **t = calloc(filas, sizeof(int *));
for (int i = 0; i < filas; i++)
t[2][1] = 4;
printf("%d\n", t[2][1]);
for (int i = 0; i < filas; i++)
free(t[i]);
free(t);
return 0;
}

↖︎ Tu línea va aquí: es el segundo piso, la fila propia de cada puntero.

Ejecutar

Lo que dice tu programa

↖︎ Escribe tu parte y dale a Ejecutar

Qué pasó

Aquí te aviso si tu programa hace algo raro.

    4Qué guarda tu programa

    Memoria

    ↖︎ Ejecuta el programa para ver qué pasa por dentro