Apuntadores
Enviado por joremi.gt • 12 de Marzo de 2013 • 1.520 Palabras (7 Páginas) • 478 Visitas
APUNTADORES
Los apuntadores son variables que almacenan direcciones de memoria. En general una variable contiene un valor específico dependiendo de cómo fue declarada. Un apuntador contiene la dirección de una variable que contiene un valor específico.
Una variable se refiere directamente a un valor y un apuntador se refiere indirectamente a un valor.
Los apuntadores son usados en C++ debido a que a veces son la única manera de expresar un cálculo.
Se puede llegar a obtener un código más compacto y eficiente. Cuando se emplean sin cuidado pueden crear programas imposibles de entender, cuentan con una declaración propia.
Los apuntadores disponen de dos operadores: El operador unario o monádico “&” devuelve la dirección de memoria de una variable; El operador de indirección o desreferencia “*” devuelve el ``contenido de un objeto apuntado por un apuntador''.
DECLARACIÓN DE APUNTADORES:
Cuando se declara una variable, el compilador reserva un espacio de memoria para ella y asocia el nombre de ésta a la dirección de memoria desde donde comienzan los datos de esa variable. Las direcciones de memoria se suelen describir como números en hexadecimal. Un apuntador es una variable cuyo valor es la dirección de memoria de otra variable. Se dice que un apuntador “apunta” a la variable cuyo valor se almacena a partir de la dirección de memoria que contiene el apuntador. Por ejemplo, si un apuntador p almacena la dirección de una variable x, se dice que “p apunta a x”.
Los apuntadores como cualquier otra variable deben de ser declarados antes de que puedan ser utilizados. El tipo de un apuntador lo proporciona implícitamente el tipo de la variable a la que apunta. Los apuntadores pueden ser declarados para apuntar a objetos de cualquier clase.
La sintaxis general de declaración es:
<tipo> * <variable>
Ejemplos de declaraciones:
La variable contPtr es del tipo apuntador a entero, (int *) y se lee ``contPtr es un apuntador a int'' o ``contPtr apunta a una variable entera''.
APUNTADORES y CONSTANTES
Un apuntador o un objeto apuntado pueden declararse con el modificador const, y en tal caso no se les podrá asignar un nuevo valor.
Por ejemplo, en el listado 6.3 la constante B8000000 se asigna al apuntador aplej. El apuntador aplej fué declarado como una variable, por lo que sería válido asignarle cualquier nuevo valor.
Si deseamos que el valor B8000000 permanezca sin cambios en aplej, deberemos escribir la siguiente declaración:
int far *const aplej = (int far *) 0xB8000000L;
Con lo cual no podrá asignarse un nuevo valor al apuntador aplej.
El valor de una constante no puede cambiar, pero sí puede utilizarse para realizar operaciones, como se observa en la siguiente fracción de línea del listado 6.3 :
aplej + ren*80 + col
En este caso, se utiliza el valor de aplej para calcular la dirección de memoria donde se va a almacenar cada carácter.
APUNTADORES Y ARREGLOS
Existe una estrecha relación entre apuntadores y arreglos, tanto que pueden ser usados en forma casi indistinta. Una variable de tipo arreglo puede considerarse como un apuntador al tipo del arreglo. Los apuntadores pueden ser utilizados en cualquier operación que involucre subíndices de arreglos.
Ejemplo de relación entre apuntadores y arreglos:
#include <stdlib.h>
#include <stdio.h>
int main()
{
int tabla[10],i,x,*pt,*ptr;
pt = &tabla[0];
x = *pt;
for (i=0; i <10; i++)
*(pt+i) = rand() % 100;
ptr = tabla;
for (i=0; i <10; i++)
printf(''%d \n'',*(ptr+i),tabla[i]);
}
Cuando se suma 1 a un apuntador el incremento se adecua al tamaño en memoria del objeto apuntado.
Un apuntador es una variable, por lo que operaciones como pa = a y pa++ son permitidas.
Un nombre de un arreglo es una constante, no una variable, de ahí que a = pa o a++ o p = a.
ARREGLOS DE APUNTADORES
Los arreglos pueden contener apuntadores. El uso más común es el de formar arreglos de cadenas de caracteres. Cada entrada en el arreglo es un apuntador al primer caracter de la cadena sea la declaración:
char * mensaje[4] = {''Hola'',''Adios'',''Bye'',''Salut''}
Cada cadena está almacenada en memoria como una cadena de caracteres terminada
...