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 83 — #121<br />

✐<br />

3.4. Introducción a los tipos de datos<br />

Por supuesto, inicialm<strong>en</strong>te x es 47. Cuando se llama f(), se crea un espacio temporal<br />

para alojar la variable a durante la ejecución de la función, y el valor de x se<br />

copia a a, el cual es verificado mostrándolo por pantalla. Se puede cambiar el valor<br />

de a y demostrar que ha cambiado. Pero cuando f() termina, el espacio temporal<br />

que se había creado para a desaparece, y se puede observar que la única conexión<br />

que existía <strong>en</strong>tre a y x ocurrió cuando el valor de x se copió <strong>en</strong> a.<br />

Cuando está d<strong>en</strong>tro de f(), x es el objeto externo (mi terminología), y cambiar<br />

el valor de la variable local no afecta al objeto externo, lo cual es bastante lógico,<br />

puesto que son dos ubicaciones separadas <strong>en</strong> la memoria. Pero ¿y si quiere modificar<br />

el objeto externo Aquí es donde los punteros <strong>en</strong>tran <strong>en</strong> acción. En cierto s<strong>en</strong>tido, un<br />

puntero es un alias de otra variable. De modo que si a una función se le pasa un<br />

puntero <strong>en</strong> lugar de un valor ordinario, se está pasando de hecho un alias del objeto<br />

externo, dando la posibilidad a la función de que pueda modificar el objeto externo,<br />

tal como sigue:<br />

//: C03:PassAddress.cpp<br />

#include <br />

using namespace std;<br />

void f(int* p) {<br />

cout

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

Saved successfully!

Ooh no, something went wrong!