Im trying to trace the following program (by hand) given in the tutorials section of this website. However, Im ending up with different answers than the ones given.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
#include <iostream>
usingnamespace std;
int main ()
{
int firstvalue = 5, secondvalue = 15;
int * p1, * p2;
p1 = &firstvalue; // p1 = address of firstvalue
p2 = &secondvalue; // p2 = address of secondvalue
*p1 = 10; // value pointed to by p1 = 10
*p2 = *p1; // value pointed to by p2 = value pointed by p1
p1 = p2; // p1 = p2 (value of pointer is copied)
*p1 = 20; // value pointed by p1 = 20
cout << "firstvalue is " << firstvalue << '\n';
cout << "secondvalue is " << secondvalue << '\n';
return 0;
}
I actually get 10 for BOTH firstvalue and secondvalue. Obviously there is something wrong with my logic of my tracing, but I dont know what.
Can someone explain to me step-by-step how the answer 10 and 20 is reached? Keep in mind that I am VERY new to pointers.
What do you think line 13 is doing? What about line 14?
Thats actually where I think im getting confused.
Here's what I think is happening (and of course, please correct me if im wrong).
Line 13 is an assignment statement that assigns the address of secondvalue (whatever that address is) to the address of firstvalue.
So lets say the memory address of firstvalue is 700 (just made that up, for examples sake), and the address of secondvalue is 800. After line 13, p1 (address of first value) now beoomes 800.
So far we now have firstvalue =10, secondvlaue=10, p1 = 800 and p2=800.
In line 14, the value pointed to by p1 is said to be 20. Here is where Im stuck. How does secondvalue become 20 now?
So basically, line 13 is saying that p1 is now pointing to whatever p2 is pointing at. p2 is pointing at the memory address of secondvalue.
In line 14, the value pointed to by p1 is 20. Well, p1 is pointing to the same thing as p2, address of secondvalue. And so the value of secondvalue now becomes 20.
I think so, you just use odd wording. Instead of saying "the value pointed to by p1 is 20" you should say "20 is assigned to the value pointed to by p1". When you see =, think "value on right is assigned to thing on left".
Quick note, "is assigned to" and "is set to" are opposites in terms of the order. x = y assigns y to x but sets x to y. Just in case there was any confusion.