int main(){
int arr1[] = { 1, 2, 3, 4, 5 };
int arr2[] = { 2, 3, 4, 5, 6 };
int arr3[] = { 3, 4, 5, 6, 7 };
int * parr[] = { arr1, arr2, arr3 };
int i = 0;
for ( i = 0; i < 3; i++)
{
char j = 0;
for ( j = 0; j < 5; j++)
{
printf(" %d", *(parr[i] + j));
//由于数组存到内存中存的是首元素地址,
//所以说存在parr[]指针数组中的arr1~其实都是首元素地址
//指针运算+1, 就能跳到第二个元素中了 parr[1]+1
}
printf("\n");
}
return 0;
}
int main()
{
char a[] = { 1, 2, 3, 4, 5, 6 };
char b[] = { 2, 3, 4, 5, 6, 7 };
char* arr[5] = {a, b}; //arr优先和[5]结合形成数组,类型是char*,
//所以说这是个指针数组
//存放指针的数组叫指针数组
//存放数组的指针叫数组指针
char* (*p)[5] = &arr;
//(*p)指的是让*先和P结合变成个指针,
//然后解出来与[5]结合形成数组指针.类型是char*
int i = 0;
for ( i = 0; i < 2; i++)
{
int j = 0;
for ( j = 0; j < 6; j++)
{
printf("%d", *(*p)[i] + j);
}
printf("\n");
}
return 0;
}
原文:https://blog.51cto.com/14893161/2537842