Home Tutorials C++ Tutorial Pointers
Pointers

Pointers


C++ Pointers

Definition: A pointer is a special variable that holds the memory address of another variable as its value. While standard variables store direct values (like an integer or a text string), a pointer stores the exact location in your computer's RAM where that data is kept.

Why: In any professional C++ syllabus, pointers are introduced as a crucial beginner-to-intermediate transition milestone. Pointers are central to direct memory handling, dynamic allocation, and optimization. They give you low-level access to structural hardware, which makes C++ one of the fastest and most efficient programming languages in existence.


Declaration and Initialization Syntax

To create a pointer, add an asterisk symbol (*) between the data type and the pointer's name. You then assign it the memory address of an existing variable using the address-of operator (&).

dataType* pointerName = &existingVariable;

Example: Address Retrieval and Dereferencing

The program below demonstrates how to declare a pointer, store a memory address, and use the asterisk to read the data residing at that hidden address location:

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

int main() {
    string food = "Burger";
    string* ptr = &food; // ptr stores the memory address of food

    cout << food << endl;  // Outputs the direct value ("Burger")
    cout << &food << endl; // Outputs the hexadecimal memory address
    
    cout << ptr << endl;   // Outputs the address stored inside ptr (matches &food)
    cout << *ptr << endl;  // Outputs the value pointed to by ptr ("Burger")

    return 0;
}

The Two Core Pointer Operators

Working with pointers requires mastering two fundamental operational symbols that act as directional switches:

Symbol Name Syntax Action / Interpretation
Address-of Operator &variable Extracts the physical hexadecimal address of where a regular variable lives in memory (e.g., 0x7ffee3b44b88).
Dereference Operator *pointer Goes to the address stored in the pointer and opens it up to retrieve or modify the actual value saved inside.

Key Notes

  • Asterisk Flexibility: The position of the asterisk doesn't change its behavior. All three lines do the exact same thing: string* ptr;, string *ptr;, and string * ptr;. However, placing it next to the type (string* ptr;) is preferred in modern C++ because it clearly reads as "pointer to a string data type."
  • Pointers vs. References: While both let you interact with another variable's memory address, they behave differently. A reference is simply an immutable alias that cannot be null. A pointer can be reassigned to a completely different variable address at any time, and it can be explicitly set to nullptr if it isn't pointing to anything yet.
  • Modifying values via Pointers: Dereferencing doesn't just read data; it can also rewrite it. If you execute *ptr = "Pizza";, the original food variable is immediately changed to "Pizza".
  • Type Alignment: A pointer's data type must strictly match the data type of the variable whose address it is holding. For example, you cannot store the memory address of an int variable inside a double* pointer.

🏋️ Test Yourself With Exercises

Take our quiz on Pointers to test your knowledge.

Browse Quizzes »