+ 3
Pointer dilemma
int a = 1; int b = 2; int *p = &a; *p = b; std::cout << a; // ----> prints 2 Why does a's value change this way and not change when you write "p = &b"? (*p = b, apparently changes the value of pointers pointing to a, as well...)
7 Answers
+ 5
When you do
p = &b;
You are storing the address of variable b in pointer p. This does not change the value of variable a.
*p = b;
You are storing the value of variable b into the variable which is pointed by pointer p. At this point, pointer p stores the address of variable a. Hence, the value of variable b is assigned to variable a.
Try looking into the difference between the * operator and the & operator.
https://code.sololearn.com/c7mW3DQoz3m0/?ref=app
+ 6
Zuke I made the same observations. The instructions were executed in the sandbox environment consecutively, so it's likely that the memory allocation on the stack was also contiguous. I'm not aware of any standard which guarantees this, though.
+ 5
i dont know exactly.. but i think at the time of initialization of pointer(int *p=&a;) pointer has address of a and point to a.. but when we try to store value of b not point to b its change value of a rather than again point to b.. that's why output is 2..
+ 2
Ohhh, thank you! Just one question, for me the pointer's address was 2 less than the string's, is that a coincidence or....?
+ 2
Maybe the 2 is because every string has a null character at the beginning? So in memory it might look like: (pointer -> null -> char1 -> char2 -> ...)
+ 1
Probably but this behavior is compiler dependent since the compiler decides in which order the variables are put on the stack and will reorder them if necessary for security purposes the null character is at the end by the way so itâs more like null char2 char1 char0
0
o'zbek tilida darslar mavjudmi tashkil qiliw mumkinmi? Bu dasturda bizda qiziqishlar katta