Beruflich Dokumente
Kultur Dokumente
DINAMICA
http://mygnet.net/articulos/c/asignacion_dinamica_de_memoria_en_c.44
Punteros
Los punteros son variables especiales que almacenan una dirección de memoria, esta dirección
guarda la posición de otra variable.
Los punteros pueden tomar cualquier clase de tipo de datos, donde el tipo base define el tipo de
variables que va apuntar.
Por ejemplo:
int x=10; //
int *puntero1,*puntero2; //Declaración de dos punteros de tipo enteros
puntero1=&x;
puntero2=puntero1;
Son con los punteros que se pueden acceder a las posiciones de memoria asignadas dentro del
programa.
Asignación de dinámica
Pero si queremos conseguir nuevas posiciones de memoria se tiene que reservar dinámicamente
dentro del programa, existen funciones de manipulación de memoria entre las cuales son: calloc,
malloc, realloc y free.
Reserva espacio en memoria para alojar una colección de elementos, si no hay memoria disponible
devuelve NULL.
Por ejemplo:
char * cadena;
cadena = (char *) calloc (40, sizeof(char));
//Reserva en memoria 40 bytes para la variable cadena.
void * malloc(size_t size)
Es muy similar a calloc solo que inicializa el espacio y es necesario conocer el tamaño exacto de las
posiciones de memoria solicitadas.
Por ejemplo:
char * cadena;
cadena = (char *) malloc (40*sizeof(char));
//Es el equivalente al ejemplo anterior, reserva 40bytes de espacio en memoria.
El puntero que se pasa por argumentos puede ser un NULL o también un puntero devuelto por
alguna de estas funciones: calloc, malloc o realloc.
Por ejemplo:
#include
#include
void main(void )
{ char car;
char *cadena=NULL;
int i=0,num=0;
printf("nnIntroduce la cadena:n");
while ((car=getchar()) != 'n') /*Finaliza con un enter*/
{ if(i>=num)
{ printf("nSumar 10 posiciones a la memoria:");
num+=10;
cadena=(char *)realloc((char *)cadena,(num)*sizeof(char));
if (cadena == NULL) exit(-1);
}
cadena[i++] = car;
}
cadena<em>=0;
printf ("ncadena={ %s }", cadena);
free(cadena);