Pasar referencia a un puntero en C++

Prerrequisito : Punteros vs Referencias en C++ .

Para una comprensión clara, comparemos el uso de «puntero a puntero» VS «Referencia a puntero» en algunos casos.

Nota: Está permitido usar «puntero a puntero» tanto en C como en C++, pero podemos usar «Referencia a puntero» solo en C++.

Pasar puntero a una función

Si se pasa un puntero a una función como parámetro y se intenta modificar, los cambios realizados en el puntero no se reflejan fuera de esa función. Esto se debe a que solo se pasa una copia del puntero a la función. Se puede decir que “pasar por puntero” es pasar un puntero por valor . En la mayoría de los casos, esto no presenta ningún problema. Pero el problema viene cuando modificas el puntero dentro de la función. En lugar de modificar la variable, solo está modificando una copia del puntero y el puntero original permanece sin modificar.

El siguiente programa ilustra esto:

CPP

#include <iostream>
  
using namespace std;
  
int global_Var = 42;
  
// function to change pointer value
void changePointerValue(int* pp)
{
    pp = &global_Var;
}
  
int main()
{
    int var = 23;
    int* ptr_to_var = &var;
  
    cout << "Passing Pointer to function:" << endl;
  
    cout << "Before :" << *ptr_to_var << endl; // display 23
  
    changePointerValue(ptr_to_var);
  
    cout << "After :" << *ptr_to_var << endl; // display 23
  
    return 0;
}
Producción:

Passing Pointer to function:
Before :23
After :23

Pasar «puntero a un puntero» como parámetro para funcionar

El problema anterior se puede resolver pasando la dirección del puntero a la función en lugar de una copia de la función real. Para esto, el parámetro de la función debe aceptar un «puntero a puntero» como se muestra en el siguiente programa:

CPP

#include <iostream>
  
using namespace std;
  
int global_var = 42;
  
// function to change pointer to pointer value
void changePointerValue(int** ptr_ptr)
{
    *ptr_ptr = &global_var;
}
  
int main()
{
    int var = 23;
    int* pointer_to_var = &var;
  
    cout << "Passing a pointer to a pointer to function " << endl;
  
    cout << "Before :" << *pointer_to_var << endl; // display 23
  
    changePointerValue(&pointer_to_var);
  
    cout << "After :" << *pointer_to_var << endl; // display 42
  
    return 0;
}
Producción:

Passing a pointer to a pointer to function 
Before :23
After :42

¿Cómo llamar a una función con el parámetro «Referencia al puntero»?

Una referencia permite que la función llamada modifique una variable local de la función que llama. Por ejemplo, considere el siguiente programa de ejemplo donde fun() puede modificar la variable local x de main().

CPP

#include<iostream>
  
using namespace std;
  
void fun(int &x) { 
    x = 20; 
} 
    
int main() { 
    int x = 10; 
    fun(x); 
    cout<<"New value of x is "<<x; 
    return 0; 
}
Producción:

New value of x is 20

El siguiente programa muestra cómo pasar una «Referencia a un puntero» a una función:

CPP

#include <iostream>
  
using namespace std;
  
int gobal_var = 42;
  
// function to change Reference to pointer value
void changeReferenceValue(int*& pp)
{
    pp = &gobal_var;
}
  
int main()
{
    int var = 23;
    int* ptr_to_var = &var;
  
    cout << "Passing a Reference to a pointer to function" << endl;
  
    cout << "Before :" << *ptr_to_var << endl; // display 23
  
    changeReferenceValue(ptr_to_var);
  
    cout << "After :" << *ptr_to_var << endl; // display 42
  
    return 0;
}
Producción:

Passing a Reference to a pointer to function
Before :23
After :42

Devolver un puntero desde una función

CPP

#include <iostream>
  
using namespace std;
  
int global_var = 42;
  
// function to return a pointer
int* returnPointerValue()
{
    return &global_var;
}
  
int main()
{
    int var = 23;
    int* ptr_to_var = &var;
  
    cout << "Return a pointer from a function " << endl;
  
    cout << "Before :" << *ptr_to_var << endl; // display 23
  
    ptr_to_var = returnPointerValue();
  
    cout << "After :" << *ptr_to_var << endl; // display 42
  
    return 0;
}
Producción:

Return a pointer from a function 
Before :23
After :42

Devolviendo la referencia de la función

CPP

#include <iostream>
  
using namespace std;
  
int global_var = 42;
  
// function to return reference value
int& ReturnReference()
{
    return global_var;
}
  
int main()
{
    int var = 23;
    int* ptr_to_var = &var;
  
    cout << "Returning a Reference " << endl;
  
    cout << "Before :" << *ptr_to_var << endl; // display 23
  
    ptr_to_var = &ReturnReference();
  
    cout << "After :" << *ptr_to_var << endl; // display 42
  
    return 0;
}
Producción:

Returning a Reference 
Before :23
After :42

Publicación traducida automáticamente

Artículo escrito por HamdyFouad y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *