Académique Documents
Professionnel Documents
Culture Documents
Es decir, una variable cuyo valor es la direccin de memoria de otra variable. No hay que confundir una direccin de memoria con el contenido de esa direccin de memoria. int x = 25; Direccin 1502 1504 1506 1508
...
...
25
...
...
...
...
Una variable puntero se declara como todas las variables. Debe ser del mismo tipo que la variable apuntada. Su identificador va precedido de un asterisco (*):
int *punt;
Es una variable puntero que apunta a variable que contiene un dato de tipo entero llamada punt. Un puntero tiene su char *car: propia Es un puntero a variable de tipo carcter. direccin de memoria: long float *num; &punt float *mat[5]; // . . . &car 2
Es decir: hay tantos tipos de punteros como tipos de datos, aunque tambin pueden declararse punteros a estructuras ms complejas (funciones, struct, ficheros...) e incluso punteros vacos (void ) y punteros nulos (NULL). Declaracin de variables puntero: Sea un fragmento de programa en C: char dato; //variable que almacenar un carcter. char *punt; //declaracin de puntero a carcter.
punt = &dato; //en la variable punt guardamos la direccin // de memoria de la variable dato; punt apunta // a dato. Ambas son del mismo tipo, char.
3
int *punt = NULL, var = 14; punt = &var; cout<< punt << &var) //la misma salida: direccin de memoria cout<<*punt, <<var); //salida: 14, 14 Hay que tener cuidado con las direcciones apuntadas:
Al trabajar con punteros se emplean dos operadores especficos: Operador de direccin: & Representa la direccin de memoria de la variable que le sigue: &fnum representa la direccin de fnum.
El operador * aplicado al nombre de un puntero indica el valor de la variable apuntada: float altura = 26.92, *apunta; apunta = &altura; //inicializacin del puntero
5
float altura = 26.92, *apunta; apunta = &altura; //inicializacin del puntero cout<< altura; cout<< *apunta; No se debe confundir el operador * en la declaracin del puntero: int *p; Con el operador . //salida 26.92
*p = 27;
en las instrucciones:
Veamos con otro ejemplo en C++ la diferencia entre todos estos conceptos
void main(void) {
int a, b, c, *p1, *p2; void *p;
p1 = &a;
*p1 = 1; p2 = &b; *p2 = 2; p1 = p2; *p1 = 0;
p2 = &c; *p2 = 3;
*p = p2;
*p1 = 1;
Analizando las direcciones de memoria del array: Direccin del elemento 0 Direccin del octavo elemento
2
mat
16
-4
29
234
12
3
mat+7
mat+1 mat+2
Incremento en una
mat++
9
-Una variable puntero puede ser restada o comparada con otra si ambas apuntan a elementos de un mismo array.
10
Aritmtica de punteros (III): -Observar las siguientes instrucciones: int *p; double *q;
p = (int *)q;