Applications of Pointers in C/C++ - GeeksforGeeks

10 Jul, 2021
Prerequisite : Pointers in C/C++, Memory Layout of C Programs.  
To pass arguments by reference. Passing by reference serves two purposes
(i) To modify variable of function in other. Example to swap two variables; 
C
C++
// C program to demonstrate that we can change// local values of one function in another using pointers. #include <stdio.h> void swap(int* x, int* y){    int temp = *x;    *x = *y;    *y = temp;} int main(){    int x = 10, y = 20;    swap(&x, &y);    printf("%d %d\n", x, y);    return 0;}
// C++ program to demonstrate that we can change// local values of one function in another using// pointers.#include <iostream>using namespace std; void swap(int* x, int* y){    int temp = *x;    *x = *y;    *y = temp;} int main(){    int x = 10, y = 20;    swap(&x, &y);    cout << x << " " << y << endl;    return 0;}
Output :
20 10
(ii) For efficiency purpose. Example passing large structure without reference would create a copy of the structure (hence wastage of space). Note : The above two can also be achieved through References in C++.  
For accessing array elements. Compiler internally uses pointers to access array elements.  
C
C++
// C program to demonstrate that compiler// internally uses pointer arithmetic to access// array elements. #include <stdio.h> int main(){    int arr[] = { 100, 200, 300, 400 };     // Compiler converts below to *(arr + 2).    printf("%d ", arr[2]);     // So below also works.    printf("%d\n", *(arr + 2));     return 0;}
// C++ program to demonstrate that compiler// internally uses pointer arithmetic to access// array elements.#include <iostream>using namespace std; int main(){    int arr[] = { 100, 200, 300, 400 };     // Compiler converts below to *(arr + 2).    cout << arr[2] << " ";     // So below also works.    cout << *(arr + 2) << " ";     return 0;}
Output :
300 300
 
To return multiple values. Example returning square and square root of numbers. 
C
C++
// C program to demonstrate that using a pointer// we can return multiple values. #include <math.h>#include <stdio.h> void fun(int n, int* square, double* sq_root){    *square = n * n;    *sq_root = sqrt(n);} int main(){     int n = 100;    int sq;    double sq_root;    fun(n, &sq, &sq_root);     printf("%d %f\n", sq, sq_root);    return 0;}
// C++ program to demonstrate that using a pointer// we can return multiple values.#include <bits/stdc++.h>using namespace std; void fun(int n, int* square, double* sq_root){    *square = n * n;    *sq_root = sqrt(n);} int main(){     int n = 100;    int* sq = new int;    double* sq_root = new double;    fun(n, sq, sq_root);    cout << *sq << " " << *sq_root;    return 0;}
Output :
10000 10
 
Dynamic memory allocation : We can use pointers to dynamically allocate memory. The advantage of dynamically allocated memory is, it is not deleted until we explicitly delete it. 
C
C++
// C program to dynamically allocate an// array of given size. #include <stdio.h>#include <stdlib.h>int* createArr(int n){    int* arr = (int*)(malloc(n * sizeof(int)));    return arr;} int main(){    int* pt = createArr(10);    return 0;}
// C++ program to dynamically allocate an// array of given size.#include <iostream>using namespace std; int* createArr(int n){    return new int[n];} int main(){    int* pt = createArr(10);    return 0;}
 
To implement data structures. Example linked list, tree, etc. We cannot use C++ references to implement these data structures because references are fixed to a location (For example, we can not traverse a linked list using references)
To do system level programming where memory addresses are useful. For example shared memory used by multiple threads. For more examples, see IPC through shared memory, Socket Programming in C/C++, etc
 
RishabhPrabhu
SimarpreetSinghAneja
sarthak8858
vijendraniyer
C-Pointers
cpp-pointer
C Language
C++
CPP
Writing code in comment?
Please use ide.geeksforgeeks.org,
generate link and share the link here.
Substring in C++
Multidimensional Arrays in C / C++
Left Shift and Right Shift Operators in C/C++
Converting Strings to Numbers in C/C++
Core Dump (Segmentation fault) in C/C++
Vector in C++ STL
Initialize a vector in C++ (6 different ways)
Map in C++ Standard Template Library (STL)
Operator Overloading in C++
Templates in C++ with Examples