+ 3

Can you explain the 8th number line in the code?

https://code.sololearn.com/cu0dY73tUaBX/?ref=app

25th Jul 2018, 3:13 PM
Sayan Kundu
2 Answers
+ 2
Hi Sayan, So, the line we are interested is "*(int*)&x=10;". Let's go by parts. First, let me rewrite this line with some extra parenthesis: > *((int*)(&x))=10; You can verify that this is equivalent to the line 8; Now, the (&x) part means we are getting the address (or reference) of variable x. The (int*) part is called casting, which means that we are forcing this reference to variable x to be of type "pointer to integer". So, together (int*)(&x) means that we are getting the reference of the "integer" variable x. In other words, it becomes a pointer to x. As we are assigning a constant integer value (here "= 10") to the variable on the address ((int*)(&x)), we need the operator "*" to have access to the storage space at that address. So, with *((int*)(&x)) we are dereferencing the pointer to x and putting 10 at the location. The last part concerns the initial declaration of x as "const int x", meaning that x was a constant variable, what prevents its content from being modified. It is this the reason why "*ptrx = 10" fails. By applying the casting "(int*)" you are temporary transforming the variable "const int x" to something like "int x". You can try to apply the casting (int*) in line 7, and it will also works. Like this: "*(int*)ptrx = 10;" Hope I managed to explain it.
25th Jul 2018, 4:01 PM
Mark
+ 1
Mark Thank you so much. I've understood now.
26th Jul 2018, 8:43 AM
Sayan Kundu