直接上代码:
#include
void Fun(int *a[],int m,int n)//
{
printf("%d\t",*a);//[0][0]
/*
int e ={8,7,6,5,4,3,2,1};
int *f,***g;
g=e;
f=e;//有警告,但不会报错
printf("%d\n",*f);
*/
}
/*解释:
Fun()中的int *a 表示定义指针数组a ,a[0],a 存储的都是指针,
a表示的是数组的首地址,所以相当于二级指针。(解释了实参为什么要是二级指针)
a既然是指针,赋值时,实参的指针值复制给a,于是*a就表示a[0][0];
指针的等级只能说明指针的多级指向也是指针,传参时会检查指针等级是否匹配
但指针存储的都是地址值,地址值改变以后,如指向存储int型数据的存储空间,那么
前面加*就表示的便是这个int型数
不同等级的指针之间可以赋值。(解释了*a=4,但**a是错的)*/
void Fun1(int (*a)[],int m,int n)//int **a会有警告
{
printf("%d\t",**a); //int (*a) 可以完全用数组来操作
//int (*a)[] 只能用指针来操作数据
}
/*如果为int (*a)[];数组指针,指向数组的指针,二级指针;
表示数组a[]的地址,老谭称之为"行指针"*/
int main()
{
int a ={4,5,6,1,2,3};
Fun((int **)a,3,2);//
Fun1(a,3,2);//(int **)
return 0;
}