Passing Reference to a Pointer in C++

09 Dec, 2021
Prerequisite: Pointers vs References in C++.
For clear understanding, let’s compare the usage of a “pointer to pointer” VS “Reference to pointer” in some cases.
Note: It is allowed to use “pointer to pointer” in both C and C++, but we can use “Reference to pointer” only in C++.
Passing pointer to a function
If a pointer is passed to a function as a parameter and tried to be modified then the changes made to the pointer does not reflects back outside that function. This is because only a copy of the pointer is passed to the function. It can be said that “pass by pointer” is passing a pointer by value. In most cases, this does not present a problem. But the problem comes when you modify the pointer inside the function. Instead of modifying the variable, you are only modifying a copy of the pointer and the original pointer remains unmodified.
Below program illustrate this:
CPP
#include <iostream>  using namespace std;  int global_Var = 42;  // function to change pointer valuevoid 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;}
Passing Pointer to function:
Before :23
After :23

Passing “pointer to a pointer” as a parameter to function
The above problem can be resolved by passing the address of the pointer to the function instead of a copy of the actual function. For this, the function parameter should accept a “pointer to pointer” as shown in the below program:
CPP
#include <iostream>  using namespace std;  int global_var = 42;  // function to change pointer to pointer valuevoid 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;}
Passing a pointer to a pointer to function 
Before :23
After :42

How to call a function with “Reference to pointer” parameter?
A reference allows called function to modify a local variable of the caller function. For example, consider the following example program where fun() is able to modify local variable x of 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; }
New value of x is 20

Below program shows how to pass a “Reference to a pointer” to a function:
CPP
#include <iostream>  using namespace std;  int gobal_var = 42;  // function to change Reference to pointer valuevoid 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;}
Passing a Reference to a pointer to function
Before :23
After :42

Returning a pointer from a function
CPP
#include <iostream>  using namespace std;  int global_var = 42;  // function to return a pointerint* 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;}
Return a pointer from a function 
Before :23
After :42

Returning reference from function
CPP
#include <iostream>  using namespace std;  int global_var = 42;  // function to return reference valueint& 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;}
Returning a Reference 
Before :23
After :42

Akanksha_Rai
sooda367
C++-References
C-Pointers
cpp-double-pointer
CPP-Functions
cpp-pointer
cpp-references
Picked
C Language
C++
CPP
Writing code in comment?
Please use ide.geeksforgeeks.org,
generate link and share the link here.