Difference Between Pointer and Reference in C++

1. Introduction

In C++ programming, pointers and references are two ways to have indirect access to a variable. While they both allow operations on the actual variable they point or refer to, they have some fundamental differences in their use and behavior.

2. Key Points

1. A pointer is a variable that holds the memory address of another variable.

2. A reference is an alias for an already existing variable.

3. Pointers can be reassigned to different addresses, whereas references cannot be reassigned once bound.

4. References are generally safer and easier to use compared to pointers.

3. Differences

Pointer Reference
Can point to different variables during its lifetime. Bound to a single variable once initialized.
Can be initialized to NULL. Cannot be NULL; must be initialized when declared.
Requires explicit dereferencing to access the target variable. Automatically dereferenced.

4. Example

#include <iostream>
using namespace std;

int main() {
    int x = 10;

    // Pointer example
    int *ptr = &x;
    cout << "Pointer value: " << *ptr << endl;
    *ptr = 20; // Changing value through pointer
    cout << "New x value via pointer: " << x << endl;

    // Reference example
    int &ref = x;
    cout << "Reference value: " << ref << endl;
    ref = 30; // Changing value through reference
    cout << "New x value via reference: " << x << endl;

    return 0;


Pointer value: 10
New x value via pointer: 20
Reference value: 20
New x value via reference: 30


1. In the pointer example, ptr points to x. Changing the value through *ptr changes x.

2. In the reference example, ref is a reference to x. Changing the value through ref also changes x.

5. When to use?

- Use pointers when you need to allocate memory dynamically or when you need to point to different variables over time.

- Use references when you want a safer, more straightforward way to refer to another variable, without the need for manual dereferencing.

Related C++/CPP Posts:

Difference Between Struct and Class in C++

Difference Between Pointer and Reference in C++

Difference Between null and nullptr in C++

Difference Between Array and Vector in C++

Difference Between const and constexpr in C++

Difference Between List and Vector in C++

Difference Between C and C++

Difference Between Function Overloading and Operator Overloading in C++

Difference Between Array and List in C++

Difference Between a While Loop and a Do-While Loop in C++

Difference Between new and malloc C++

Virtual Function vs Pure Virtual Function in C++

Compile Time Polymorphism vs Runtime Polymorphism in C++

Difference Between Shallow Copy and Deep Copy in C++

Difference Between Stack and Heap in C++

Copy Constructor vs Parameterized Constructor in C++