Let’s re-write your program to make it a little clearer:
#include<stdio.h>
int main(void)
{
int arr[4] = {4,3,2,1};
int *p = arr;
printf("\n%d", *(p+2));
return 0;
}
Now, *(p+2) is by definition the same as p[2]. Since p points to the first element of arr, then p[2] is the same as arr[2] which is equal to 2.
Similarly, *(p) is the same as *p and since p points to the first element of arr then *(p) is 4.
You probably need to re-read the section in your text book that covers pointer arithmetic.
solved C:Pointer Arithmetic -How does it work?