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; }