C++ Tutorial
Estimated reading: 4 minutes 425 views

C++ Pointers & References – Complete Guide with Function, Class & Lambda Examples

Pointers and references are foundational to advanced C++ programming. They provide direct access to memory, enable efficient data manipulation, and are central to dynamic memory, object-oriented design, and system-level programming.


Introduction – Why Master Pointers & References in C++?

C++ offers low-level memory control via pointers and flexible reference handling through references. Understanding these helps in optimizing performance, implementing data structures, and mastering concepts like polymorphism and callbacks.

In this guide, you’ll learn:

  • The basics of pointers and pointer arithmetic
  • How to use pointers with functions and classes
  • The role of the this pointer
  • Differences between pointers and references with examples

Topics Covered

SubtopicDescription
C++ Pointers – Basics, Arithmetic, ModifyHow to declare, dereference, and use pointer math to access memory
C++ Pointer to FunctionsIndirectly calling functions using function pointers
C++ Pointer to ClassesCreating and using object pointers with -> operator
C++ this PointerReferring to the calling object inside class methods
C++ References – Pointer vs ReferenceKey differences and syntax comparison between pointers and references

C++ Pointers – Basics, Arithmetic, Modify

A pointer holds the address of another variable. You can perform arithmetic operations and dereference it to access or modify the original value.

#include <iostream>
using namespace std;

int main() {
    int a = 10;
    int* ptr = &a;
    *ptr = 20;

    cout << "Value of a: " << a << endl; // Output: 20
    cout << "Pointer Address: " << ptr << endl;
    cout << "Dereferenced Value: " << *ptr << endl;
    return 0;
}

Explanation:

  • int* ptr declares a pointer to an integer.
  • &a gets the address of a.
  • *ptr = 20 changes the value of a through the pointer.

C++ Pointer to Functions

Function pointers allow functions to be passed or invoked indirectly.

#include <iostream>
using namespace std;

int add(int x, int y) {
    return x + y;
}

int main() {
    int (*funcPtr)(int, int) = add;
    cout << "Sum: " << funcPtr(3, 4); // Output: 7
    return 0;
}

Use Case:

  • Useful in callbacks, passing behavior to functions, and event handling.

C++ Pointer to Classes

Pointers to class objects are essential for dynamic memory and polymorphism.

#include <iostream>
using namespace std;

class MyClass {
public:
    void display() {
        cout << "Hello from class!" << endl;
    }
};

int main() {
    MyClass* obj = new MyClass();
    obj->display();  // Output: Hello from class!
    delete obj;
    return 0;
}

Key Points:

  • Use -> to access class members via pointer.
  • Always delete dynamically allocated memory to avoid leaks.

C++ this Pointer

this is an implicit pointer inside all non-static member functions, pointing to the current object.

#include <iostream>
using namespace std;

class MyClass {
    int value;
public:
    void setValue(int value) {
        this->value = value;
    }
    void show() {
        cout << "Value: " << value << endl;
    }
};

int main() {
    MyClass obj;
    obj.setValue(100);
    obj.show();  // Output: Value: 100
    return 0;
}

When to Use:

  • To resolve variable shadowing
  • To return the object itself in method chaining

C++ References – Pointer vs Reference

References are aliases for variables and behave differently from pointers.

#include <iostream>
using namespace std;

int main() {
    int a = 5;
    int& ref = a;

    ref = 10;
    cout << "a: " << a << endl; // Output: 10

    return 0;
}

Pointer vs Reference Comparison:

FeaturePointerReference
Can be null Yes No
Reassignment Yes No
Dereferencing required Yes (*ptr) No (direct use)
InitializationOptional after declarationMandatory at creation
Syntaxint* ptr = &a;int& ref = a;

Summary – Recap & Next Steps

Pointers and references empower C++ developers with fine control over memory and behavior. From modifying values through memory addresses to crafting efficient object-oriented systems — mastering these concepts is essential.

Key Takeaways:

  • Pointers store memory addresses and support arithmetic operations.
  • Function pointers enable indirect function calls.
  • Class pointers facilitate polymorphism and dynamic memory.
  • this pointer gives access to the current object inside class methods.
  • References are safer, simpler aliases but less flexible than pointers.

Real-World Relevance:

  • Used in data structures (linked lists, trees), memory management, callback systems, and low-level systems programming.

Frequently Asked Questions (FAQs)

Can pointers in C++ be null?

Yes, pointers can be null and should be checked before dereferencing to avoid segmentation faults.

Can references be reassigned to another variable?

No. Once initialized, a reference cannot point to another variable.

What is the main benefit of using references?

Simplicity and safety — references can’t be null and don’t need dereferencing syntax.

When should I use pointers instead of references?

Use pointers when you need nullability, dynamic memory management, or reassignment of target addresses.

What is the difference between *ptr and &ref?

*ptr dereferences a pointer; &ref in declaration defines a reference. In expressions, & gets an address.


Share Now :
Share

🧭 C++ Pointers & References

Or Copy Link

CONTENTS
Scroll to Top