Laburo España: 250.000 ofertas de empleo

Coyote: Modus Vivendi - De regreso a los origenes.

¿El Coyote estara de regreso?

   
  Declaracion de arreglos dinamicos  

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

 
  El 29 de abril de 2005 a las 15:57:45, los ilustre con esto.  


  Los lectores opinan:  


Recordar datos

Referencia

URL para referencias o trackbacks

 
   
   
LaInformacion.com lainformacion.com - Medio Oficial de los Premios Bitacoras 2009