为什么结果是9啊?*p是指针变量吧?&a[3]不就是4的地址吗?

img


#include
void fun(int *p)

{

printf("%d\n",p[5]);

}

main()
{

int a[10]={1,2,3,4,5,6,7,8,9,10}; 

fun(&a[3]);

}

你理解的很到位呀
函数传入的是4的地址
那么再往后偏移5个地址,不就是9的地址了吗,那打印的不是9吗

fun函数传递的参数相当于是以数组a中第四个元素为起始地址的指针,也就是{4, 5, 6, 7, 8, 9, 10},printf函数打印的是指针p的第6个元素的值,结果正是9.

你不是只传一个4过去
&a[3]=4;
然后p[5];
往后挪五位为9