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("
%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.
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…