PUNTEROS
Antes de analizar el tema de punteros, se verá la forma en que C++
identifica, define y asigna espacio para las variables que intervienen
en el problema. En las operaciones que ejecuta el compilador utiliza
las direcciones de memoria que ya asignó a las variables.
Supongamos el siguiente problema:
Efectuar el cálculo: c= a + b
Definir las variables: int a, b, c; a quedo en 1000
b quedo en 2000
c quedo en 3000
Leer los valores de a, b (3 5) cin >> a >> b; dir 1000 tiene 3
dir 2000 tiene 5
Calcular c=a + b
3000 = 100 + 200 dir 3000 tiene 8
Una de las características más poderosas del lenguaje “C” es el “puntero”.
Los “punteros”, también llamados “apuntadores”, permiten simular llamadas por referencia, crear
y manipular estructuras de datos que pueden crecer o encogerse, como son las listas enlazadas,
colas de espera, pilas y árboles.
Como ya sabemos, una variable contiene directamente un valor específico, sin embargo, un
puntero es una variable que contiene la dirección de memoria de otra variable.
Un puntero, como cualquier otra variable debe ser declarado antes de que pueda utilizarse. La
forma de declararlo es anteponiendo un asterisco (*) al nombre del puntero.
Los punteros pueden ser declarados para que apunten a variables de diferente tipo (int, long,
double, float, char, etc), inclusive Estructuras y Clases, en otras palabras, apuntan a objetos de
cualquier tipo de datos. Enseguida se dan algunos ejemplos de declaración de punteros.
int *ptra, *ptrb;
float *volptr, *areaptr;
char *nomptr, *domptr;
double *ptrarr; *ptrx;
Operador de indirección &
Es un operador unario que regresa la dirección de su operando.
cout << &a; regresa la dirección de a (no el valor numérico de a)
+++++++++++++++++++++++++++++++++++++++++++++
Ejemplo 1: int a = 123, *ptra;
Suponga que “a” quedo en la dirección de memoria 500
y *ptra quedo en la direccion de memoria 600
ptra = &a; Ahora ptra tiene la dirección de a (500)
cout << a; escribre 123
cout << &a; escribe 500
+++++++++++++++++++++++++++++++++++++++++++++
Ejemplo 2: int x = 1567, *ptrx;
Suponga que “x” quedo en la dirección de memoria 2000
y *ptrx quedo en la direccion de memoria 3000
ptrx = &x; Ahora ptrx tiene la dirección de x (2000)
cout << x; escribe 1567
cout << &x; escribe 3000
+++++++++++++++++++++++++++++++++++++++++++++
Punteros. Forma grafica
Arreglo A[50] Suponemos que A quedo en la dirección: 1000
Indices del arreglo
0 1 2 3 4 5 6 7 8 9 49
8 7 4 9 7 2 7 8 4
Leer el primer valor A Leer el segundo valor de A
cin >> A[0]; cin >> A[1];
Escribir el primer valor A Escribir el segundo valor de A
cout << A[0]; cout << A[1];
++++++++++++++++++++++++++++++++++++++++++++++++
Con puntero: ptra = A;
Puntero ptra tiene la dirección de A o sea 1000
1000
Leer el primer valor Leer el segundo valor
cin >> *ptra; cin >> *(ptra+1)
Escribir el primer valor Escribir el segundo valor
cout << *ptra; cout << *(ptra+1)
++++++++++++++++++++++++++++++++++++++++++++++++
Si tenemos i = 5
cout << *(ptra + i); se escribe el elemento que está en la dirección 1005
Punteros_Grafico.doc