Beruflich Dokumente
Kultur Dokumente
Estructuras de datos
Punteros
Puntero: Variable que almacena una direccin de memoria. Se pueden tener apuntadores a cualquier tipo de variable.
Operadores
El operador unario o mondico & : Devuelve la direccin de memoria de una variable.
El operador de indireccin o de referencia * : Devuelve el ``contenido de un objeto apuntado por un puntero o un apuntador''.
Punteros
Declaracin de punteros:
Para una variable entera: int *p; //p es una variable puntero, que apunta a un entero Para una variable char: char *q; //q es una variable puntero que apunta a un char
Punteros
Asignar valor de direccin de memoria a punteros:
Con la direccin de otra variable:
int *r, x; r=&x; //r es una variable puntero, que apunta a un entero
dado por x
Punteros
Asignar valor de direccin de memoria a punteros:
Con funcion malloc(): char *p; P=char *malloc()
Punteros
Ejemplo uso puntero:
main() { int x = 1, y = 2; int *ap; ap = &x;
y = *ap; x = ap;
*ap = 3; }
warning: assignment makes integer from pointer without a cast.
Punteros
Ejemplo uso puntero:
int x = 2, y = 4; int *p; p = &x; y = *p;
direcciones
1000
1004
1008
1000
direcciones 1000
1004 2 y 2
1008 p 1000
direcciones 1000
1004
1000 y 2
1008
p 1000
x = p;
direcciones 1000
1004
1008
1000
*p = 5;
Punteros
Aritmtica de puntero:
Suma Resta
main() { float *flp, *flq; *flp = *flp + 10; (*flp)++; flq = flp; }
La razn por la cual se asocia un puntero a un tipo de dato, es por que se debe conocer en cuantos bytes esta guardado el dato. De tal forma, que cuando se incrementa un puntero, se incrementa el puntero por un ``bloque'' de memoria, en donde el bloque esta en funcin del tamao del dato.
Si a un puntero es a flotante y se le suman 2, el puntero entonces se mueve dos posiciones float que equivalen a 8 bytes.
Dado que void * es regresado, C asume que el apuntador puede ser convertido a cualquier tipo. El tipo de argumento size_t esta definido en la cabecera stddef.h y es un tipo entero sin signo. Por lo tanto:
La funcin sizeof() puede ser usada para encontrar el tamao de cualquier tipo de dato, variable o estructura.
Usamos la funcin sizeof() para indicar el nmero de bytes , por ejemplo:
Por lo tanto: int i; struct coordenadas {float x,y,z}; struct coordenadas *pt;
sizeof(int), sizeof(i), sizeof(struct coordenadas) y sizeof(PT) son tambin sentencias correctas.
La funcin free()
La funcin free() toma un apuntador como un argumento y libera la memoria a la cual el apuntador hace referencia
free(pt);
calloc y realloc
Prototipos:
void *calloc(size_t nmemb, size_t size); void *realloc(void *ptr, size_t size);
Cuando se usa la funcin malloc() la memoria no es inicializada (a cero) o borrada. Si se quiere inicializar la memoria entonces se puede usar la funcin calloc
Por lo tanto para asignar a 100 elementos enteros que estn inicializados a cero se puede hacer:
La funcin realloc intenta cambiar el tamao de un bloque de memoria previamente asignado Si el bloque se hace ms grande, entonces el contenido anterior permanece sin cambios y la memoria es agregada al final del bloque.
Si el tamao se hace ms pequeo entonces el contenido sobrante permanece sin cambios. Si el tamao del bloque original no puede ser redimensionado, entonces realloc intentar asignar un nuevo bloque de memoria y copiar el contenido anterior. Por lo tanto, la funcin devolver un nuevo apuntador (o de valor diferente al anterior), este nuevo valor ser el que deber usarse.
Si para el ejemplo anterior, se quiere reasignar la memoria a 50 enteros en vez de 100 apuntados por ip, se har;