Pensar en C++ (Volumen 1) - Grupo ARCO
Pensar en C++ (Volumen 1) - Grupo ARCO
Pensar en C++ (Volumen 1) - Grupo ARCO
Create successful ePaper yourself
Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.
✐<br />
✐<br />
✐<br />
“Volum<strong>en</strong>1” — 2012/1/12 — 13:52 — page 81 — #119<br />
✐<br />
3.4. Introducción a los tipos de datos<br />
¿Qué se puede hacer con las direcciones de memoria, además de este interesante<br />
experim<strong>en</strong>to de mostrar cuanta memoria ocupan Lo más importante que se puede<br />
hacer es guardar esas direcciones d<strong>en</strong>tro de otras variables para su uso posterior. C<br />
y <strong>C++</strong> ti<strong>en</strong><strong>en</strong> un tipo de variable especial para guardar una dirección. Esas variables<br />
se llaman punteros.<br />
El operador que define un puntero es el mismo que se utiliza para la multiplicación:<br />
*. El compilador sabe que no es una multiplicación por el contexto <strong>en</strong> el que se<br />
usa, tal como podrá comprobar.<br />
Cuando se define un puntero, se debe especificar el tipo de variable al que apunta.<br />
Se comi<strong>en</strong>za dando el nombre de dicho tipo, después <strong>en</strong> lugar de escribir un<br />
id<strong>en</strong>tificador para la variable, usted dice «Espera, esto es un puntero» insertando un<br />
asterisco <strong>en</strong>tre el tipo y el id<strong>en</strong>tificador. De modo que un puntero a int ti<strong>en</strong>e este<br />
aspecto:<br />
int* ip; // ip apunta a una variable int<br />
La asociación del * con el tipo parece práctica y legible, pero puede ser un poco<br />
confusa. La t<strong>en</strong>d<strong>en</strong>cia podría ser decir «puntero-<strong>en</strong>tero» como un si fuese un tipo<br />
simple. Sin embargo, con un int u otro tipo de datos básico, se puede decir:<br />
int a, b, c;<br />
así que con un puntero, diría:<br />
int* ipa, ipb, ipc;<br />
La sintaxis de C (y por her<strong>en</strong>cia, la de <strong>C++</strong>) no permite expresiones tan cómodas.<br />
En las definiciones anteriores, sólo ipa es un puntero, pero ipb e ipc son ints normales<br />
(se puede decir que «* está mas unido al id<strong>en</strong>tificador»). Como consecu<strong>en</strong>cia,<br />
los mejores resultados se pued<strong>en</strong> obt<strong>en</strong>er utilizando sólo una definición por línea; y<br />
aún se conserva una sintaxis cómoda y sin la confusión:<br />
int* ipa;<br />
int* ipb;<br />
int* ipc;<br />
Ya que una pauta de programación de <strong>C++</strong> es que siempre se debe inicializar una<br />
variable al definirla, realm<strong>en</strong>te este modo funciona mejor. Por ejemplo, Las variables<br />
anteriores no se inicializan con ningún valor <strong>en</strong> particular; conti<strong>en</strong><strong>en</strong> basura. Es más<br />
fácil decir algo como:<br />
int a = 47;<br />
int* ipa = &a;<br />
Ahora tanto a como ipa están inicializadas, y ipa conti<strong>en</strong>e la dirección de a.<br />
Una vez que se inicializa un puntero, lo más básico que se puede hacer con Él es<br />
utilizarlo para modificar el valor de lo que apunta. Para acceder a la variable a través<br />
del puntero, se derefer<strong>en</strong>cia el puntero utilizando el mismo operador que se usó para<br />
definirlo, como sigue:<br />
81<br />
✐<br />
✐<br />
✐<br />
✐