Cita: porque yo para asegurarme creo un arreglo de 1.000.000 si quiero, pero no necesariamente voy a tener cargado hasta un millón.
Para eso está la reserva dinámica de memoria en C. Lee acerca de las funciones malloc(), calloc(), realloc() y free().
Malloc te permite reservar un bloque de memoria de X bytes.
Calloc es lo mismo que malloc solo que te inicializa a 0 los valores (en vez de dejar valores aleatorios).
Free libera la memoria asignada mediante malloc.
Realloc es para asignar más memoria o reducirla después de haber usado malloc.
Por ejemplo, con este código puedes crear un array de 3 enteros:
Código C:
Ver originalint* ptr; // declaramos puntero hacia entero
ptr
= (int*)malloc(sizeof(int) * 3); // asignamos memoria para almacenar 3 enteros
ptr[0] = 123;
ptr[1] = 456;
ptr[2] = 789;
// ya no nos queda más memoria
Si más tarde ves que necesitas almacenar más de 3 enteros, puedes usar realloc:
Código C:
Ver originalptr
= (int*)realloc(ptr
, sizeof(int) * 5); // ahora podemos almacenar hasta 5 enteros sin perder la información que teníamos anteriormente
printf("%d %d %d", ptr
[0], ptr
[1], ptr
[2]); // 123 456 789
// añadimos más elementos
ptr[3] = 1337;
ptr[4] = 8888;
// ya no podemos añadir más
Así sucesivamente...
Docs:
https://es.cppreference.com/w/c/memory/malloc https://es.cppreference.com/w/c/memory/realloc