C++ Tutorial C++ Advanced C++ References

C++ - Return Pointer from Function



A pointer is a variable which stores address of another variable. C++ allows to pass pointers to the function as well as return a pointer from a function. This can be achieved by declaring the return type of the function as a pointer. See the syntax below:

Syntax

ponter_return_type function_name(parameters) {
  statements;
}

//for example
int * MyFunction() {
  statements;
}

Please note that, it is not a good idea to return the address of a local variable outside the function as it goes out of scope after function returns. However, this feature is useful if the local variable is defined as static variable. A static variable do not goes out of scope even after function returns and preserves its values after each function call.

Example:

In the example below, a static variable is created inside the function and the function returns the address of that variable.

#include <iostream>
using namespace std;

int * MyFunction() {
  static int count = 0;
  count++;
  return &count; 
}

int main () {
  int * p;
  for(int i = 1; i <= 3; i++) {
    p = MyFunction();
    cout<<"Function returns: "<<p<<"\n"; 
    cout<<"Value of count: "<<*p<<"\n";    
  }
  return 0;
}

The output of the above code will be:

Function returns: 0x555944f53158
Value of count: 1
Function returns: 0x555944f53158
Value of count: 2
Function returns: 0x555944f53158
Value of count: 3

Example:

Consider one more example, where an array of 5 random variables is created inside a function and returns the address of first array element.

#include <iostream>
#include <cstdlib>
#include <ctime>
using namespace std;

int * MyFunction() {
  static int rand_num[5];

  //initialize random seed
  srand (time(NULL));

  //generating 5 random number between 1 and 100
  for(int i = 0; i < 5; i++) {
    rand_num[i] = rand() % 100 + 1;
  }

  return rand_num;
}

int main () {
  int * p;
  
  p = MyFunction();
  for(int i = 0; i < 5; i++) {
    cout<<"(p + "<<i<<") = "<<p+i<<"\n"; 
    cout<<"*(p + "<<i<<") = "<<*(p+i)<<"\n";    
  }
  return 0;
}

The output of the above code will be:

(p + 0) = 0x55beb3d2c170
*(p + 0) = 16
(p + 1) = 0x55beb3d2c174
*(p + 1) = 98
(p + 2) = 0x55beb3d2c178
*(p + 2) = 34
(p + 3) = 0x55beb3d2c17c
*(p + 3) = 87
(p + 4) = 0x55beb3d2c180
*(p + 4) = 56

❮ C++ - Pointers