13.01.2015 Views

Pensar en C++ (Volumen 1) - Grupo ARCO

Pensar en C++ (Volumen 1) - Grupo ARCO

Pensar en C++ (Volumen 1) - Grupo ARCO

SHOW MORE
SHOW LESS

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 />

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!