En ocasiones, necesitamos declarar arreglos estaticos, cuyo valor solo conoceremos en tiempo de ejecucion. Muchas personas, lo que hace es declarar un MAXIMO posible en el arreglo, es decir, si se que usualmente necesito 20 elementos de arreglo, declaro un maximo "insuperable" de 50. Esto es funcional y rapido de implementar, el problema radica en que se desperdicia memoria todo el tiempo y que en el caso de que se necesiten mas elementos, necesitara alguien meterle mano al codigo para modificarlo.
Esto se soluciona con arreglos estaticos declarados dinamicamente, es decir, un arreglo declarado en tiempo de ejecucion. La funcion mas usual, es con cadenas de caracteres, pero pues yo aqui lo defini con arreglo de ENTEROS, para recalcar, que puede ser utilizado con cualquier estructura.
#include <stdio.h> #include <conio.h> #include <malloc.h>
void main()
{ int n;
printf("Escriba el numero de elementos a ingresar:\n");
scanf("%d", &n);
// Creamos el arreglo dinamico // Dejando espacio para NULL al final int *ret = (int*) malloc(n + 1);
// Ingresamos los datos al arreglo for (int pos = 0; pos < n; pos++) ret[pos] = pos + 1; ret[n] = NULL;
// Imprimimos datos for (int *ptr = ret; *ptr; *ptr++) printf("%d", *ptr);
getche(); }
|
La explicacion es la siguiente: Una vez que pedimos el numero maximo de elementos (n), procedemos a declarar un apuntador a un entero (debemos de recordar que al declarar un arreglo por int arre[5], realmente creamos un *arre a un bloque de 5 elementos), al cual le asignamos la memoria que MALLOC reserve.
Si se observa, los datos se ingresan como en un arreglo normal, y de hecho puede no ir el apuntador a NULL en el ultimo registro, pero si se observa el ciclo de impresion, se daran cuenta de que lo hacemos de forma de apuntador y para evitar un desbordamiento de memoria, se le pone un null en la ultima posicion del arreglo.
Gente en contra del sistema: 0.
Agregado en el expediente de: Son Programatikon
Este wey dijo: Victor Ivan Mendez Castillo |