AprenderC
← Todas las lecciones

Pedir sitio a la medida

Cuando no sabes cuántas cajitas necesitas hasta que el programa corre.

1Por qué

Todos los arreglos que has escrito tienen su tamaño puesto a mano: int notas[4]. Ese 4 se decide cuando escribes el programa, y no se puede cambiar después.

Eso funciona mientras sepas el número de antemano. Pero casi nunca lo sabes. ¿Cuántas notas tiene el curso? ¿Cuántas palabras trae el archivo? Eso se sabe cuando el programa ya está corriendo, no antes.

Para eso existe malloc: pedirle al sistema un sitio del tamaño que digas, en el momento. Le pasas cuántos bytes quieres y te devuelve la dirección del primero — un puntero, como los de la misión anterior.

sizeof(int) dice cuántos bytes ocupa un entero, así que malloc(cuantos * sizeof(int)) pide sitio justo para esa cantidad. Nunca escribas el número de bytes a mano: en otra máquina un int puede ocupar otra cosa, y sizeof siempre acierta.

Desde ahí, el puntero se usa con corchetes igual que un arreglo normal. Eso ya lo sabes: v[2] y *(v + 2) son lo mismo.

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 cuantos = 3;
int *v = malloc(cuantos * sizeof(int));
for (int i = 0; i < cuantos; i++)
v[i] = i * 10;
printf("%d\n", v[2]);
free(v);
return 0;
}

3Ahora tú

Pide sitio para 5 enteros, guarda en cada uno su posición multiplicada por sí misma, y escribe el último: 16

#include <stdio.h>
#include <stdlib.h>
int main(void)
{
int cuantos = 5;
int *v =
for (int i = 0; i < cuantos; i++)
v[i] = i * i;
printf("%d\n", v[4]);
free(v);
return 0;
}

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