关于C语言中二维数组传参(一)

2014-04-06 17:42:22 · 作者: · 浏览: 537

       直接上代码:

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

  }