Sie sind auf Seite 1von 2

PUNTEROS Y ASIGNACION

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;

Tanto el puntero1 como puntero2 apunta a x.

Existen dos operadores para manejo de punteros:


& - (Dirección) Devuelve la dirección de memoria de la variable.
* - (Indirección) devuelve el contenido de la dirección apuntada a demás que se utiliza cuando se
declaran los punteros.

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.

void *calloc(size_t ele, size_t size)


ele -Número de elementos.
size -Tamaño para cada uno de los elementos
void * -Devuelve un tipo void *, o para (tipo *) de esta manera.

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.

void *realloc(void *p, size_t size)


Esta función cambia el tamaño del espacio reservado de memoria al que apunta p y lo hace de
tamaño zise, el contenido de memoria no cambiara en las posiciones ya ocupadas, sino que
incrementa el nuevo tamaño mayor las cuales no se inicializan con ningun valor, en el caso que la
memoria no sea suficiente la funcion retorna NULL y el objecto p no cambia.

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);

void free(void *p)


Esta función libera el espacio reservado de la memoria del puntero p, Si el parámetro es NULL no
hace nada, el puntero p tiene que haber sido reservado por las funciones anteriores.

Das könnte Ihnen auch gefallen