Sitemap
DevOps.dev

Devops.dev is a community of DevOps enthusiasts sharing insight, stories, and the latest development in the field.

Mastering Pointers in C++

A Comprehensive Guide

4 min readMar 15, 2025

--

Press enter or click to view image in full size
Photo by Nathalie SPEHNER on Unsplash

Introduction

Pointers are one of the most powerful and essential concepts in C++. They allow direct memory access, improving efficiency and flexibility. While pointers can be complex, mastering them is crucial for dynamic memory management, data structures (like linked lists), and system-level programming.

Get Syed Hamed Raza’s stories in your inbox

Join Medium for free to get updates from this writer.

This article covers everything about pointers in C++, from basic syntax to advanced concepts like dynamic memory allocation, pointer arithmetic, and smart pointers.

1. Introduction to Pointers

What is a Pointer?

A pointer is a variable that stores the memory address of another variable. Instead of storing a value directly, it holds a reference to a memory location.

Why Use Pointers?

✔ Efficient Memory Management — Enables dynamic memory allocation.
✔ Faster Execution — Direct memory manipulation speeds up computations.
✔ Useful in Data Structures — Essential for linked lists, trees, and graphs.
✔ Function Arguments — Allows modifying variables inside functions efficiently.

Memory Representation of a Pointer

Each variable in memory has:

  • A value (actual data stored).
  • An address (where the data is stored in RAM).

Syntax of Pointers in C++

type *pointerName;  // Declaring a pointer
pointerName = &variable; // Assigning address of variable

2. Declaring and Initializing Pointers

Basic Syntax

int num = 10;
int *ptr = # // Pointer stores address of num

Example: Declaring and Using Pointers

#include <iostream>
using namespace std;

int main() {
int num = 42;
int *ptr = &num;

cout << "Value of num: " << num << endl;
cout << "Address of num: " << &num << endl;
cout << "Value using pointer: " << *ptr << endl;
cout << "Address stored in pointer: " << ptr << endl;

return 0;
}

Output

Value of num: 42
Address of num: 0x61ff08
Value using pointer: 42
Address stored in pointer: 0x61ff08

3. Pointer Arithmetic

Pointers support arithmetic operations such as:

  • Increment (ptr++) – Moves to the next memory location.
  • Decrement (ptr--) – Moves to the previous memory location.
  • Addition (ptr + n) – Moves forward by n elements.
  • Subtraction (ptr - n) – Moves backward by n elements.

Example: Pointer Arithmetic

#include <iostream>
using namespace std;

int main() {
int arr[] = {10, 20, 30};
int *ptr = arr;

cout << "First element: " << *ptr << endl;
ptr++;
cout << "Second element: " << *ptr << endl;
ptr++;
cout << "Third element: " << *ptr << endl;

return 0;
}

Output

First element: 10
Second element: 20
Third element: 30

4. Pointers and Arrays

Pointers and arrays are closely related. The array name acts like a constant pointer to its first element.

Example: Accessing Array Elements Using Pointers

#include <iostream>
using namespace std;

int main() {
int arr[] = {1, 2, 3, 4, 5};
int *ptr = arr;

for (int i = 0; i < 5; i++) {
cout << "Value at arr[" << i << "]: " << *(ptr + i) << endl;
}

return 0;
}

5. Pointers and Functions

Pointers allow efficient passing of arguments to functions, avoiding unnecessary memory duplication.

Example: Passing Pointers to Functions

#include <iostream>
using namespace std;

void increment(int *ptr) {
(*ptr)++;
}

int main() {
int num = 10;
cout << "Before: " << num << endl;
increment(&num);
cout << "After: " << num << endl;

return 0;
}

6. Dynamic Memory Allocation

Why Dynamic Memory Allocation?

Dynamic memory allocation allows creating variables at runtime using:

  • new – Allocates memory.
  • delete – Deallocates memory.

Example: Using new and delete

#include <iostream>
using namespace std;

int main() {
int *ptr = new int(10);
cout << "Dynamically allocated value: " << *ptr << endl;
delete ptr; // Free memory

return 0;
}

Example: Allocating Arrays Dynamically

#include <iostream>
using namespace std;

int main() {
int *arr = new int[5];

for (int i = 0; i < 5; i++) {
arr[i] = i * 10;
}

for (int i = 0; i < 5; i++) {
cout << "Value at arr[" << i << "]: " << arr[i] << endl;
}

delete[] arr; // Free memory

return 0;
}

7. Pointers to Pointers

A pointer to pointer stores the address of another pointer.

Example: Pointer to Pointer

#include <iostream>
using namespace std;

int main() {
int num = 10;
int *ptr = &num;
int **ptr2 = &ptr;

cout << "Value of num: " << num << endl;
cout << "Value using pointer: " << *ptr << endl;
cout << "Value using pointer to pointer: " << **ptr2 << endl;

return 0;
}

8. Pointers and Structures

Pointers can be used with structures to manipulate complex data types.

Example: Using Pointers with Structures

#include <iostream>
using namespace std;

struct Student {
string name;
int age;
};

int main() {
Student s1 = {"Alice", 20};
Student *ptr = &s1;

cout << "Student Name: " << ptr->name << endl;
cout << "Student Age: " << ptr->age << endl;

return 0;
}

9. Smart Pointers in C++ (C++11)

Smart pointers automate memory management, reducing memory leaks.

Types of Smart Pointers

  1. unique_ptr – Sole ownership of an object.
  2. shared_ptr – Shared ownership, reference count.
  3. weak_ptr – Non-owning reference.

Example: Using unique_ptr

#include <iostream>
#include <memory>
using namespace std;

int main() {
unique_ptr<int> ptr = make_unique<int>(10);
cout << "Value: " << *ptr << endl;

return 0;
}

10. Best Practices with Pointers

✔ Always initialize pointers (ptr = nullptr;).
✔ Avoid memory leaks (Always delete allocated memory).
✔ Use smart pointers (unique_ptr, shared_ptr).
✔ Avoid dangling pointers (ptr = nullptr; after delete).

Conclusion

Pointers empower developers with efficient memory management and flexibility in C++. From basic pointer operations to advanced smart pointers, mastering pointers enhances program efficiency.

--

Syed Hamed Raza
Syed Hamed Raza

Written by Syed Hamed Raza

Master's degree in Computer Applied Technology from Huazhong University, Wuhan, China. Expert in ML, DL, Computer Vision, NLP. Passionate mentor and innovator.

DevOps.dev
DevOps.dev

Published in DevOps.dev

Devops.dev is a community of DevOps enthusiasts sharing insight, stories, and the latest development in the field.