C++ Modify Pointers

Welcome to The Coding College! In this tutorial, we’ll explore how to modify pointers in C++. Pointers are variables that store memory addresses, and modifying them allows dynamic navigation and control over data in memory.

Modifying Pointers: What Does It Mean?

1. Changing the Pointer’s Address

This involves altering the memory address a pointer holds, effectively making it point to a different variable or memory location.

2. Changing the Value at the Pointer’s Address

You can use the dereference operator (*) to modify the value stored at the memory address the pointer points to.

Changing the Address Stored in a Pointer

A pointer can be reassigned to point to another variable or address.

Example

#include <iostream>
using namespace std;

int main() {
    int a = 10, b = 20;   // Two variables
    int *ptr = &a;        // Pointer initially points to a

    cout << "Pointer initially points to a: " << *ptr << endl;

    ptr = &b;             // Modify the pointer to point to b
    cout << "Pointer now points to b: " << *ptr << endl;

    return 0;
}

Output:

Pointer initially points to a: 10  
Pointer now points to b: 20  

Modifying the Value Pointed to by a Pointer

To change the value stored at the memory address, dereference the pointer using *.

Example

#include <iostream>
using namespace std;

int main() {
    int x = 30;
    int *ptr = &x;

    cout << "Initial value of x: " << x << endl;

    *ptr = 50;  // Modify the value of x using the pointer
    cout << "Updated value of x: " << x << endl;

    return 0;
}

Output:

Initial value of x: 30  
Updated value of x: 50  

Modifying Pointers in Arrays

Pointers can traverse and modify elements of an array.

Example

#include <iostream>
using namespace std;

int main() {
    int arr[] = {1, 2, 3};
    int *ptr = arr;  // Pointer to the first element of the array

    cout << "Original array: ";
    for (int i = 0; i < 3; i++) {
        cout << *(ptr + i) << " ";
    }
    cout << endl;

    // Modify array elements using the pointer
    *(ptr + 0) = 10;  
    *(ptr + 1) = 20;  
    *(ptr + 2) = 30;  

    cout << "Modified array: ";
    for (int i = 0; i < 3; i++) {
        cout << *(ptr + i) << " ";
    }
    cout << endl;

    return 0;
}

Output:

Original array: 1 2 3  
Modified array: 10 20 30  

Passing Pointers to Functions for Modification

You can pass pointers to functions to modify variables outside the function’s scope.

Example

#include <iostream>
using namespace std;

void modify(int *ptr) {
    *ptr = 100;  // Modify the value at the memory address
}

int main() {
    int x = 50;
    cout << "Before modification: " << x << endl;

    modify(&x);  // Pass the address of x
    cout << "After modification: " << x << endl;

    return 0;
}

Output:

Before modification: 50  
After modification: 100  

Modifying Pointers to Navigate Dynamic Memory

Pointers can be modified to manage dynamically allocated memory blocks.

Example

#include <iostream>
using namespace std;

int main() {
    int *ptr = new int[3];  // Dynamically allocate memory for an array

    // Assign values using pointer arithmetic
    for (int i = 0; i < 3; i++) {
        *(ptr + i) = (i + 1) * 10;  
    }

    cout << "Array values: ";
    for (int i = 0; i < 3; i++) {
        cout << *(ptr + i) << " ";
    }
    cout << endl;

    // Modify pointer to move to the second element
    ptr++;
    cout << "Pointer now points to the second element: " << *ptr << endl;

    delete[] (ptr - 1);  // Free the allocated memory (adjust pointer back to original location)

    return 0;
}

Output:

Array values: 10 20 30  
Pointer now points to the second element: 20  

Best Practices for Modifying Pointers

  1. Avoid Dangling Pointers: Ensure the pointer is valid before modifying its address or dereferencing it.
  2. Use nullptr: Assign nullptr to pointers that are not pointing to any memory.
  3. Keep Track of Memory Allocations: For dynamic memory, always manage allocations and deallocations properly using new and delete.
  4. Pointer Type: Ensure the pointer type matches the variable it points to.

Explore More on The Coding College

Pointers are a critical aspect of efficient programming in C++. For more tutorials on pointers, memory management, and advanced concepts, visit The Coding College.

Leave a Comment