void test(int **p){}//二级指针接受
int main()
{
int a = 0;
int* p = &a;
int** pp = &p;
int* arr[10] = { 0 };
test(pp);//二级指针传参
test(&p);//一级指针的地址
test(arr);//指针数组,存放指针地址的数组
return 0;
}
//void test(int arr[][5])
//{}//arr[][] arr[3][] 错误写法 err
//void test(int (*arr)[5])
//{}//int *arr int **arr int *arr[5] 错误写法,类型不兼容
//int main()
//{
//
// int arr[3][5] = { 0 };
// test(arr);//二维数组传参,传的是第一行数组的地址
// return 0;
//}
//int main()
//{
// int arr[5];//是一个五个元素的整型数组
// int* parr[10];//是一个10个元素的int*指针数组
// int(*parr2)[10];//是一个指向10个int整型元素的数组指针
// int(*parr3[10])[5];//是一个十个数组指针,且每个指针指向五个int整型元素的数组
// return 0;
//}
//int main()
//{
// int arr[10] = { 1,2,3,4,5,6,7,8,9,0 };
// int i = 0;
// int* p = arr;
// for (i = 0; i < 10; i++)
// {
// printf("%d ", arr[i]);
// printf("%d ", *(p + i));
// printf("%d ", *(arr+i));
// printf("%d ", p[i]);
//
// //arr[1] == *(arr+i) == *(p+i) == p[i]
// }
// return 0;
//}
//void print1(int arr[][5], int x, int y)
//{
// int i, j = 0;
// for (i = 0; i < x; i++)
// {
// for (j = 0; j < y; j++)
// {
// printf("%d ", arr[i][j]);
// }
// printf("\n");
// }
//}
//void print2(int(*p)[5], int x, int y)
//{
// int i = 0;
// for (i = 0; i < x; i++)//行
// {
// int j = 0;//列
// for (j = 0; j < y; j++)
// {
// //printf("%d ", *(*(p + i) + j));
// //*(p+i) 表示第几行,
// //(*(p+i)+j)表示第i行第j列的元素
// //*解引用
// //printf("%d ", *(p + i)[j]);
// printf("%d ", p[i][j]);
//
// }
// printf("\n");
// }