Pointers
Dereference
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
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;
}
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
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
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
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
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