#include
int main(void)
{
int temp[5] = {1, 2, 3, 4, 5};
int(*p2)[5] = &temp;//此处取地址
int i;
for (i = 0; i < 5; i++)
{
printf("%d\n", *(*p2 + i));
}
return 0;
}
上面的*(p2 + i))中,p2的意思不是temp数组的地址么?那p2不就是temp数组的大小么?这样推理的话*p2+i还怎么指定数组中的元素呀??
定义时(*p2)表示调用p2时要解引用,因此p2是一个指针,int (*p2)[5];则是代表p2指向的是一个含有5个整数的数组。
也就是 * p2和temp等价所以 * p2+i可以使用
int temp[5] = {1,2,3,4,5};
int(*p2)[5] = &temp;
你可以把(*p2)看作一个整体,在声明的时候(*p2)就相当于一个数组指针,p2就相当于一个二级指针。
p2实际上就是指向了一系列包含5个元素的数组,也就类似与二维数组的首地址
所以,在下面使用的时候,*p2也就相当于二维数组的第0行的指针,*p2+i也就是取第0行的第i个元素的指针
*(*p2+i)也就是取第0行第i个元素的值
先看p2的定义:int(*p2)[5]
p2是指针,是指向长度为5的int数组的指针。
所以*p2是长度为5的int数组
然后你可以确定*p2和temp的含义是一样的
既然temp+i指向数组的某个元素,*p2+i当然也一样。