In C++, we can pass parameters to a function either by pointers or by reference. In both the cases, we get the same result. So the following questions are inevitable; when is one preferred over the other? What are the reasons we use one over the other?
Passing by Pointer:
Before Swap a = 45 b = 35 After Swap with pass by pointer a = 35 b = 45
Passing by Reference:
Before Swap a = 45 b = 35 After Swap with pass by reference a = 35 b = 45
Difference in Reference variable and pointer variable
References are generally implemented using pointers. A reference is same object, just with a different name and reference must refer to an object. Since references can’t be NULL, they are safer to use.
- A pointer can be re-assigned while reference cannot, and must be assigned at initialization only.
- Pointer can be assigned NULL directly, whereas reference cannot.
- Pointers can iterate over an array, we can use ++ to go to the next item that a pointer is pointing to.
- A pointer is a variable that holds a memory address. A reference has the same memory address as the item it references.
- A pointer to a class/struct uses ‘->'(arrow operator) to access it’s members whereas a reference uses a ‘.'(dot operator)
- A pointer needs to be dereferenced with * to access the memory location it points to, whereas a reference can be used directly.
Output (May be different in different runs as we print addresses in program):
0x7ffd09172c20 0x7ffd09172c18 0x7ffd09172c18 0x7ffd09172c18 0x4 7
Usage in parameter passing:
References are usually preferred over pointers whenever we don’t need “reseating”.
Overall, Use references when you can, and pointers when you have to. But if we want to write C code that compiles with both C and a C++ compiler, you’ll have to restrict yourself to using pointers.