Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Mtptema13 PDF
Mtptema13 PDF
Punteros
ndice
1. Introduccin
2. Operaciones
3. Aritmtica de punteros
4. Punteros y vectores/matrices
5. Punteros y estructuras
7. Punteros y funciones:
Paso por referencia
Devolucin de punteros
Vectores/matrices como parmetros
Punteros a funcin
Tema 13 Punteros Pg 1
Introduccin
Ejemplos:
int *punt; /* puntero a entero */
float *v, *w, *z; /* punts. a real */
struct coche *a, *b;
/* punts. a estructura */
void *pos; /* puntero genrico */
Tema 13 Punteros Pg 3
Operaciones
Tema 13 Punteros Pg 4
el valor que se imprime es 1.44, ya que p apunta a
la direccin de q.
Aritmtica de punteros
Punteros y vectores/matrices
Tema 13 Punteros Pg 6
Y, cosa curiosa, la mayora de los
compiladores de C admiten las expresiones
indice[vector]
m00 m01 m02 m03 m10 m11 m12 m13 m20 m21 m22 m23
Tema 13 Punteros Pg 7
Donde las filas podran estar en zonas no contiguas
de memoria. Sin embargo, no es as. Todos los
elementos estn seguidos en la memoria. Pero,
como caso particular, las expresiones m[0], m[1] y
m[2] sobre la matriz de nuestro ejemplo producen
las direcciones donde comienzan las filas primera,
segunda y tercera respectivamente. Es decir:
int m[3][4], *fila, f, c;
for(f=0; f<3; f++) {
fila= m[f];
for(c= 0; c<4; c++)
printf("%d\n", fila[c]);
}
Tema 13 Punteros Pg 9
Asignacin dinmica de memoria
Tema 13 Punteros Pg 10
Un ejemplo del uso de malloc para reservar espacio
para un valor float sera ste:
float *p;
p= (float *)malloc( sizeof(float) );
if( p==NULL ) {
perror("Fallo en malloc()");
exit(1);
}
else
*p= 3.141592;
Tema 13 Punteros Pg 11
Una macro que puede ser de utilidad para agilizar
las llamadas a malloc es la siguiente:
#define NEW(x,n) (x*)malloc(n*sizeof(x))
int *p;
struct s *vec;
p= NEW(int, 1);
vec= NEW(struct s, 120);
Tema 13 Punteros Pg 12
void *realloc(void *ant, int tam)
Tema 13 Punteros Pg 13
se produce lo que se llama una fuga de memoria
(memory leak) que puede acabar por agotar la
memoria asignada y detener el programa. Existen
bibliotecas de funciones que substituyen malloc,
calloc, realloc y free por versiones especiales que,
aunque ms lentas, llevan una contabilidad de las
zonas de memoria reservadas y liberadas y
permiten detectar las fugas de memoria.
Punteros y funciones
Tema 13 Punteros Pg 14
Un ejemplo de paso de un entero por referencia a
una funcin que lo incremente:
int x= 14;
inc(&x);
...
void inc(int *par) {
(*par)++;
}
Tema 13 Punteros Pg 15
Devolucin de punteros:
Punteros a funcin:
Tema 13 Punteros Pg 18
Podremos asignar su direccin al puntero pt usando
el nombre de la funcin sin parntesis:
pt= f;
Y llamar a
tabula(1, 10, 0.2, vec[loquesea]);
Tema 13 Punteros Pg 22