Skip to content

C++ Pointers

Overview

Pointers are variables that store memory addresses. C++ provides enhanced pointer features compared to C, including smart pointers and better type safety.

Basic Pointer Operations

cpp
#include <iostream>

int main() {
    int value = 42;
    int* ptr = &value;  // pointer to value
    
    std::cout << "Value: " << value << std::endl;
    std::cout << "Address of value: " << &value << std::endl;
    std::cout << "Pointer value: " << ptr << std::endl;
    std::cout << "Value pointed to: " << *ptr << std::endl;
    
    *ptr = 100;  // modify value through pointer
    std::cout << "New value: " << value << std::endl;
    
    return 0;
}

Pointers and Arrays

cpp
#include <iostream>

int main() {
    int arr[] = {10, 20, 30, 40, 50};
    int* ptr = arr;  // array name decays to pointer
    
    // Access array elements using pointer arithmetic
    for (int i = 0; i < 5; i++) {
        std::cout << "arr[" << i << "] = " << *(ptr + i) << std::endl;
        std::cout << "arr[" << i << "] = " << ptr[i] << std::endl;  // equivalent
    }
    
    return 0;
}

Dynamic Memory Allocation

cpp
#include <iostream>

int main() {
    // Allocate memory for an integer
    int* dynamic_int = new int(42);
    std::cout << "Dynamic int: " << *dynamic_int << std::endl;
    delete dynamic_int;
    
    // Allocate memory for an array
    int* dynamic_array = new int[5];
    for (int i = 0; i < 5; i++) {
        dynamic_array[i] = i * 10;
    }
    
    for (int i = 0; i < 5; i++) {
        std::cout << dynamic_array[i] << " ";
    }
    std::cout << std::endl;
    
    delete[] dynamic_array;  // delete array
    
    return 0;
}

Smart Pointers (C++11 and later)

cpp
#include <iostream>
#include <memory>

int main() {
    // unique_ptr - exclusive ownership
    std::unique_ptr<int> unique_ptr_int = std::make_unique<int>(42);
    std::cout << "Unique pointer value: " << *unique_ptr_int << std::endl;
    
    // shared_ptr - shared ownership
    std::shared_ptr<int> shared_ptr_int = std::make_shared<int>(100);
    std::shared_ptr<int> another_shared = shared_ptr_int;
    
    std::cout << "Shared pointer value: " << *shared_ptr_int << std::endl;
    std::cout << "Reference count: " << shared_ptr_int.use_count() << std::endl;
    
    return 0;
}

Content is for learning and research only.