Académique Documents
Professionnel Documents
Culture Documents
Apuntadores e Indireccin
Operaciones Bsicas
o Declaracin e Inicializacin
o Dereferenciar (Dereference)
Apuntadores e Indireccin
Un apuntador es una variable que almacena la direccin de la memoria de otra variable. Hemos
visto ya en C++ que los tipos de datos dictan el rango y tipo de valores que una variable puede
almacenar. Las variables de los tipos de datos que hemos examinado hasta ahora almacenan
valores como por ejemplo enteros, nmeros de punto flotante y cadenas de caracteres (strings).
La variable apuntador es nica ya que salva la direccin de la memoria de otra variable. La
direccin de memoria es la localizacin especfica en la memoria principal donde existe una
variable durante la ejecucin de un programa.
Los programadores usan apuntadores para acceder y manipular indirectamente otras variables.
Este acceso y manipulacin se considera "indirecta" puesto que se logra usando un apuntador en
vez de la variable real que est siendo modificada. La "indireccin" permite la creacin de las
estructuras de datos complejas y algoritmos poderosos. Por ejemplo, sin apuntadores e
indireccin no sera posible crear una estructura de datos de la lista encadenada.
Operaciones Bsicas
Declaracin e Inicializacin
La declaracin de una variable apuntador requiere el uso de cierta sintaxis desconocida. Una
declaracin del apuntador debe prefijar su nombre de variable con un asterisco (*). Esto significa
para el compilador que la variable declarada es un apuntador. El listado 1 demuestra el
declaracin de algunas variables indicadoras.
1: int *int_ptr;
2:
3: float *float_ptr;
char *char_ptr;
La inicializacin del apuntador tambin requiere algo de sintaxis nueva. No podemos simplemente
inicializar un apuntador a una variable no-apuntador porque los apuntadores almacenan las
direcciones de memoria y valores no regulares. En su lugar, debemos obtener la direccin de
memoria de la variable. El operador address-of (&) regresa la direccin de la memoria de donde
est almacenada la variable. El listado 2 declara una variable entera y fija 100 como su valor inicial.
Luego declara un apuntador del tipo int, inicializado con la direccin de la variable i. En el contexto
de este ejemplo, podemos decir que ptr "apunta" a i.
1: int i = 100;
2:
int *ptr = &i;
Dereferenciar (Dereference)
1: int i = 100;
2:
3: int *ptr = &i;
4:
5:
6: cout << *ptr << endl; // outputs 100
thing.method1();
thing.method2();
ptr->method1();
ptr->method2();
return EXIT_SUCCESS;
Solamente podemos dereferenciar de forma segura los apuntadores que sealan hacia direcciones
vlidas de memoria. Dereferenciar apuntadores que no se han inicializado a direcciones de
memoria vlidas causan un error de ejecucin. Una tcnica utilizada para evitar este problema es
la inicializacin de variables apuntador al puntero nulo. El puntero nulo representa un lugar en la
memoria que no puede ser dereferenciado. La inicializacin de punteros al puntero nulo, evita que
una dereferenciacin accidental pueda causar un error de ejecucin. El apuntador nulo es
referenciado usando la macro NULL previamente definida.
int i = 100;
Los programadores tambin usan apuntadores nulos como valores para indicar el fin de alguna
estructura o secuencia. Ms adelante examinaremos el uso del apuntador null.
La aritmtica del apuntador es el uso de sumas y restas para cambiar la posicin de memoria que
un apuntador almacena. Estas operaciones son concernientes a la posicin de la memoria
actualmente almacenada en un apuntador. Restar el valor 3 de un apuntador, por ejemplo, mueve
la posicin tres lugares antes del apuntador. El incremento de un apuntador causa que ste
"apunte" a la siguiente posicin de memoria.
La aritmtica del apuntador automticamente toma en cuenta el tamao del tipo de dato
implicado. La adicin del valor 3 a un apuntador de tipo entero, en realidad agrega un 3
multiplicado por el tamao del entero a la posicin actualmente almacenada en el apuntador. Un
tamao comn de int es de cuatro bytes. En este caso, agregar el valor 3 a un apuntador entero,
agrega 12 (3*4) a la posicin de memoria del apuntador. Conocer el nmero real de bytes que la
aritmtica del apuntador suma o resta no es en realidad til para nosotros. Lo que es importante
es entender que C++ realiza esta multiplicacin de manera automtica. Debemos ver la aritmtica
del apuntador como una forma de acceder diferentes posiciones en una estructura de datos (por
lo general un arreglo). El Listado 6, muestra una demostracin de la aritmtica del apuntador.
ptr--;
La aritmtica del apuntador tiene muchos usos importantes en la programacin en C++. Un uso es
el recorrido de arreglos (traversal of arrays).