0
what is the output of the snippet code and how??
int arr[]={1,2,3,4,5}; int *p=arr; ++*p; p+=2; printf("%d",*p);
4 odpowiedzi
+ 3
int *p = arr;
Now p points to the beginning or the 1st element in the array which is 1.
++*p;
*p means the value at address pointed by p and ++*p means incrementing the value at p by 1. So the value 1 at p is incremented by 1. You can check this by printing arr[0].
p+=2;
This means that the address pointed by p should be incremented by 2 places. Now the pointer sits on the 3rd element in the array which is 3.
printf("%d",*p);
It now prints the value at address pointed by p which is 3.
+ 1
There is a difference between just p and *p. The *p will give you the value at p. So any operation like ++*p will change the value at p. Whereas just p will give you the address of the value pointed by p. Any operation on p like p+=2 will increment the address and not the value itself.
0
shouldnt we give the value of p after level ++*p equal to 2, and after that by p+=2 it would be 4? i became q little bit confused in the second paragraph of your statement Avinesh
0
i guess you mean that p+=2 term is just affect on *p not on *p++