建立三个一维数组,取地址后放入一个数组,此为数组指针数组,尝试对所有元素进行打印。
分析过程:int (*parr[10])[5]代表其类型时int (*)[5],是数组指针,将其放在parr[10]数组中,如果直接对parr解引用,会得到首元素&arr1的地址,同时&arr1代表的是arr1的地址,所以**parr后才会得到arr1,即arr1首元素的地址。
如果对parr加1,会以int (*)[5]调到下一个元素,由上知,对其**得到arr2首元素地址,对arr2加4再解引用,可得到arr2中下标为4的元素,用如下代码打印出50。
#include <stdio.h>
int main()
{
int arr1[5] = { 1,2,3,4,5 };
int arr2[5] = { 10,20,30,40,50 };
int arr3[5] = { 100,200,300,400,500 };
int(*parr[10])[5] = {&arr1,&arr2,&arr3};
int i = 0;
printf("%d ", *(**(parr + 1) + 4));
return 0;
}
尝试对每个元素进行打印:
int main()
{
int arr1[5] = { 1,2,3,4,5 };
int arr2[5] = { 10,20,30,40,50 };
int arr3[5] = { 100,200,300,400,500 };
int(*parr[10])[5] = {&arr1,&arr2,&arr3};
int i = 0;
int sz = sizeof(parr) / sizeof(parr[0]);
for (i = 0; i < sz; i++)
{
int j = 0;
for (j = 0; j < 5; j++)
{
printf("%d ", *(**(parr + i) + j));
}
printf("\n");
}
return 0;
}
成功打印。