从main函数开始,先是定义一个数组a,接着调用fun函数,fun函数的形参是一个指针变量。调用fun函数时将a[3]的地址传给p,而在printf中可以将p[5]解释为 *(p+5) ,这时p中存放的是a[3]的地址,(p+5)就是当前地址的偏移量,所以是a[8],所以就是9
void fun(int *p)
{
printf("%d\n",p[5]); //打印从 p 地址起的第5个元素的值。由于fun(&a[3]) 是从 a 中的第3个元素起,所以这里的 p[5] 就相当于 a[8]; 所以结果就是 9 了。
}
main()
{
int a[10]={1,2,3,4,5,6,7,8,9,10};
fun(&a[3]); //将 a 数组中第3个元素的地址(也就是4的地址)传给fun
}
首先你定义了一个函数fun,有一个指向int型的指针p
在那个函数中你打印p[5]
你传入了一个a[3]
这样在fun函数里,将&a[3]当成了数组的首地址,p[5]就代表了p+5
而a[3]在fun里是被当做p,那么p+5就到了a[8]
那么就是9
你可以把下标表示转换为指针表示 就清晰了
void fun(int *p)
{printf("%d\n",*(p+5));}
指针p后移5个单位 然后取值用于输出
指针p的位置是在fun(&a[3]);
也就是 数组a的第4个元素
从第4个元素开后移5个单位
a[3] a[4] a[5] a[6] a[7] a[8]
起点 +1 +2 +3 +4 +5
输出a[8]
a[8]就是9
a[3]就相当于a[]中的第4个元素P[5]就相当于a[3]向后推5个元素,也就是a[8],你可以搜索一下数组与指针详细了解一下