Ver Mensaje Individual
  #11 (permalink)  
Antiguo 04/02/2014, 06:27
CalgaryCorpus
 
Fecha de Ingreso: junio-2008
Ubicación: Seattle, USA
Mensajes: 733
Antigüedad: 16 años, 6 meses
Puntos: 61
Respuesta: punteros y referencias

Ademas de lo indicado previamente, en C y C++ el default es el paso por valor, de modo que cualquier función no modifica lo que recibe como parámetro

Código C++:
Ver original
  1. void f( Tipo v ) {
  2.    v = 4;  // se modifica una copia
  3. }
  4.  
  5. // mas tarde
  6.  
  7.     miVariable = 0;
  8.     f( miVariable );   // se invoca la función "cambiadora", cambia miVariable?
  9.     // miVariable sigue valiendo 0
lo que también ocurre con los punteros
Código C++:
Ver original
  1. void f( Tipo* v ) {
  2.    v = <cualquier expresion>;  // se modifica una copia
  3. }

pero si está permitido modificar lo apuntado por los punteros, usándolos a ellos para llegar a los datos

Código C++:
Ver original
  1. void f( Tipo* v ) {
  2.    v->dato = <cualquier expresion>;  // se modifica el dato!
  3. }

La soluciones que se pueden aplicar aquí, para modificar los punteros, pueden ser:
- retornar el puntero e invocar la función de acuerdo a esta definición
Código C++:
Ver original
  1. T* f( T* v )
  2. {
  3.     v = <nueva expresion>;  // no se modifica v
  4.     return v;
  5. }
  6.  
  7. // y luego
  8.      miPuntero = f( miPuntero );

- o bien pasar un puntero a puntero y desreferenciarlo al asignar

Código C++:
Ver original
  1. void f( T** pv )
  2. {
  3.     *pv = <nueva expresion>;  // se modifica lo apuntado por v
  4. }
  5.  
  6.  
  7. // y luego
  8.  
  9.     T* puntero;
  10.  
  11.     f( & puntero );

En C++ también existe el paso por referencia, pero esto esconde un poco, en el momento de la invocación, el hecho que la función modificará el puntero.
__________________
Visita mi perfil en LinkedIn

Última edición por CalgaryCorpus; 04/02/2014 a las 11:39