| |
Answer/Explaination
:
111
222
333
344
(Exp):
Let us consider the array and the two pointers with some address


After execution of the instruction ptr++ value in ptr becomes 1002, if
scaling factor for integer is 2 bytes. Now ptr – p is value in ptr
– starting
location of array p, (1002 – 1000) / (scaling factor) = 1, *ptr –
a = value at
address pointed by ptr – starting value of array a, 1002 has a value
102 so
the value is (102 – 100)/(scaling factor) = 1, **ptr is the value
stored in
the location pointed by the pointer of ptr = value pointed by value
pointed
by 1002 = value pointed by 102 = 1. Hence the output of the firs
printf is
1, 1, 1.
After execution of *ptr++ increments value of the value in ptr by
scaling
factor, so it becomes1004. Hence, the outputs for the second printf
are ptr
– p = 2, *ptr – a = 2, **ptr = 2.
After execution of *++ptr increments value of the value in ptr by
scaling
factor, so it becomes1004. Hence, the outputs for the third printf are
ptr – p
= 3, *ptr – a = 3, **ptr = 3.
After execution of ++*ptr value in ptr remains the same, the value
pointed
by the value is incremented by the scaling factor. So the value in
array p at
location 1006 changes from 106 10 108,. Hence, the outputs for the
fourth
printf are ptr – p = 1006 – 1000 = 3, *ptr – a = 108 – 100 =
4, **ptr = 4.
|
|