10. Pasaje por referencia.

En el capítulo anterior vimos que las copias locales de los argumentos que recibe una función NO pueden tener alcance fuera de la función.

En otras palabras si quiero que las modificaciones hechas variables de la función se vean reflejadas fuera de la función  sin tener que necesariamente retornar algo y asignar ,no lo puedo hacer pasando argumento por valor.

Para cubrir este punto existe la opción de pasaje por Referencia que vermos a continuación.

#include <iostream>
using namespace std;
void por_referencia(int*& p, int a);//prototipo VER QUE ESTA EL & LUEGO DE *

int main(){    int b=10;int* p2 = NULL;//p2 local inicializado en NULL
    cout<<"Antes de llamar a la funcion:"<<endl;
    cout<<"valor de b="<<b<<endl;
    cout<<"la direccion de b: "<<&b<<endl;
    cout<<"la dierccion del puntero p2: "<<p2<<endl;
    cout<<"Ahora llamo a la funcion:"<<endl;
    cout<<"Paso por referencia el puntero y por valor la variable"<<endl<<endl;
    por_referencia(p2,b); //p2 esta pasado por referencia por que el prototipo tiene &, paso LA DIRECCIÓN!!
cout<<"---Nuevamente en main----"<<endl; cout<<"direccion de puntero p2: "<<p2<<endl;
//notar que la dirección de b: &b, NO PERTENCE A MAIN, era local de por_referencia!! cout<<"la direccion de b es: "<<&b;return 0;
// esta línea anterior estaría MAL! } void por_referencia(int*& p, int a) { // puntero paso por referencia, VER QUE ESTÁ &, toma la dirección! // variable paso por valor! p = &a;//inicializo puntero local cout<<"---Dentro de la funcion----"<<endl; cout<<"valor de a="<<a<<" pasado por valor.."<<endl; cout<<"la direccion del puntero es: "<<&a<<" pasado por referencia"<<endl; cout<<"contenido del puntero: "<<*p<<endl<<endl; }
La salida de este código es: