The dereference operator * reads or writes the object a pointer points to.

dereference Dereferencing a valid pointer lets code use the original object through the pointer.

Dereference

example
dereference.cpp
Replay: real traced execution (multi-file project)
#include <iostream>

int main() {
    int value = 8;
    int increment = 4;
    int* valuePtr = &value;

    *valuePtr = *valuePtr + increment;

    std::cout << "increment=" << increment << std::endl;
    std::cout << "value=" << value << std::endl;
    return 0;
}
#include <iostream>

int main() {
    int value = 3;
    int increment = 4;
    int* valuePtr = &value;

    *valuePtr = *valuePtr + increment;

    std::cout << "increment=" << increment << std::endl;
    std::cout << "value=" << value << std::endl;
    return 0;
}
#include <iostream>

int main() {
    int value = 10;
    int increment = 4;
    int* valuePtr = &value;

    *valuePtr = *valuePtr + increment;

    std::cout << "increment=" << increment << std::endl;
    std::cout << "value=" << value << std::endl;
    return 0;
}
#include <iostream>

int main() {
    int value = 8;
    int increment = 1;
    int* valuePtr = &value;

    *valuePtr = *valuePtr + increment;

    std::cout << "increment=" << increment << std::endl;
    std::cout << "value=" << value << std::endl;
    return 0;
}
#include <iostream>

int main() {
    int value = 8;
    int increment = 7;
    int* valuePtr = &value;

    *valuePtr = *valuePtr + increment;

    std::cout << "increment=" << increment << std::endl;
    std::cout << "value=" << value << std::endl;
    return 0;
}
  1. value ← 8, increment ← 4, valuePtr ← ⟨addr A⟩

    3int main() {4    int value→ 8 = 8; //@value=3, 105    int increment→ 4 = 4; //@increment=1, 76    int* valuePtr→ ⟨addr A⟩ = &value8;78    *valuePtr⟨addr A⟩ = *valuePtr + increment4;910    std::cout << "increment=" << increment4 << std::endl;11    std::cout << "value=" << value12 << std::endl;12    return 0;13}
    outputincrement=4
    value=12
  1. value ← 3, increment ← 4, valuePtr ← ⟨addr A⟩

    3int main() {4    int value→ 3 = 3;5    int increment→ 4 = 4;6    int* valuePtr→ ⟨addr A⟩ = &value3;78    *valuePtr⟨addr A⟩ = *valuePtr + increment4;910    std::cout << "increment=" << increment4 << std::endl;11    std::cout << "value=" << value7 << std::endl;12    return 0;13}
    outputincrement=4
    value=7
  1. value ← 10, increment ← 4, valuePtr ← ⟨addr A⟩

    3int main() {4    int value→ 10 = 10;5    int increment→ 4 = 4;6    int* valuePtr→ ⟨addr A⟩ = &value10;78    *valuePtr⟨addr A⟩ = *valuePtr + increment4;910    std::cout << "increment=" << increment4 << std::endl;11    std::cout << "value=" << value14 << std::endl;12    return 0;13}
    outputincrement=4
    value=14
  1. value ← 8, increment ← 1, valuePtr ← ⟨addr A⟩

    3int main() {4    int value→ 8 = 8;5    int increment→ 1 = 1;6    int* valuePtr→ ⟨addr A⟩ = &value8;78    *valuePtr⟨addr A⟩ = *valuePtr + increment1;910    std::cout << "increment=" << increment1 << std::endl;11    std::cout << "value=" << value9 << std::endl;12    return 0;13}
    outputincrement=1
    value=9
  1. value ← 8, increment ← 7, valuePtr ← ⟨addr A⟩

    3int main() {4    int value→ 8 = 8;5    int increment→ 7 = 7;6    int* valuePtr→ ⟨addr A⟩ = &value8;78    *valuePtr⟨addr A⟩ = *valuePtr + increment7;910    std::cout << "increment=" << increment7 << std::endl;11    std::cout << "value=" << value15 << std::endl;12    return 0;13}
    outputincrement=7
    value=15