[Lectura] Apuntadores y Cadenas -parte 01-
Apuntadores y Cadenas
Operadores para apuntadores.
El operador dirección (&) es un operador unario que devuelve la dirección de memoria de su operando. Por ejemplo, suponga las siguientes declaraciones:
int y = 5;
int *ptrY;
la instrucción:
prtY = &y;
asigna la dirección de la variable "y" a la variable de apuntador ptrY. Entonces, se dice que ptrY "apunta" a "y".
Ahora, ptrY hace referencia de manera indirecta al valor de la variable y. Observe que el & de la instrucción de asignación anterior no es el mismo que el & de una declaración de variable de apuntador, el cual siempre es precedido por el nombre del tipo de dato.
ptrY [ . ] y [ 5 ]
El operador *, por lo general denominado operador de indirección u operador de desreferencia, devuelve un sinónimo (es decir, un alias o nombre clave) para el objeto al cual apunta el operando de su apuntador.
cout << *ptrY << end1;
imprime el valor de la variable y, es decir, 5, tal como lo haría la instrucción:
cout << y << end1;
a utilizar el * de esta manera se le llama desreferencia de un apuntador. Observe que un apuntador desreferenciado podria utilizarse tambien del lado izquierdo de una instrucción de asignación, como:
*ptrY = 9;
el cual significa 9 a y. El apuntador desreferenciado se podría utilizar también para recibir un valor de entrada como en:
cin >> *ptrY;
El apuntador desreferenciado es un lvalue.
- - - - - - - - - - - - - - - - - - - - -
// uso de los operadores & y *#include <iostream>
using std::cout;
using std::end1;
int main ( )
{
int a; //a es un entero
int *ptrA; //ptrA es un apuntador a un entero
a = 7;
ptrA = &a; //a ptrA se le asigna la dirección de a
cout << "La dirección de a es " << &a;
<< "\n El valor de ptrA es " << ptrA;
cout << "\n\n El valor de a es " << a
<< "\n El valor de *ptrA es " << *ptrA;
cout << "\n \n Muestra de que * y & son inversos "
<< "uno de otro. \n&*ptrA = " << &*ptrA
<< "\n*&ptrA = " << *&ptrA << end1;
return 0; //indica terminación exitosa
} //fin de main
La dirección de a es 006AFDF4
El vaor de ptrA es 006AFDF4
El valor de a es 7
El valor de *ptrA es 7
Muestra de que * y & son inverso uno de otro.
&*ptrA = 006AFDF4
*&ptrA = 006AFDF4
- - - - - - - - - - - - - - - - - - - - -
Observe que en la salida, la dirección de a y el valor de ptrA son idénticos, con lo que se confirma que la dirección de a se asigna a la variable de apuntador ptrA. Los operadores & y * son inversos entre sí; cuando ambos se aplican de manera consecutiva a ptrA, en cualquier orden, se obtiene el mismo resultado. Apuntes:
El formato en el que aparece un apuntador depende de la máquina. Algunos sistemas muestran los valores de los apuntadores como enteros hexadecimales, mientras que otros utilizan enteros decimales.
Malo:
Desreferenciar un apuntador que no se ha inicializado de manera apropiada o que no ha sido asignado de manera que apunte a una localidad especifica de memoria podria ocasionar un error fatal en tiempo de ejecución, o podria modificar de manera accidental datos importantes y permitir que el programa se ejecute por completo, posiblemente con resultados incorrectos.
Intentar desreferenciar una variable que no es un apuntador, es un error de sintaxis.
Desreferenciar un apuntador a 0, por lo general es un error fatal en tiempo de ejecución.
-Lecturas tomadas del libro Como Programar de Pearson Prentice Hall, Deitel Deitel-