二维指针不能指向二维数组

发现问题:

  遇到了一个指针问题:我尝试用一个二维指针指向一个二维数组,发现编译不能通过。 eg:  int vis[10][10], int **vis = vis;

问题分析:

  后来发现 int** 是指向指针数组的指针,二维数组其实只是一个指针,而二级指针是指向指针的指针,所以二者并不等价。如上例所示:int a[2][2];

   a是指向整个数组的首地址,并不是int **;所以不要指望向函数fun里面传实参 p=a;如果将二维数组 a强制转换成 **类型会有问题。

  例如:int a[2][2]={0,1,2,3};

  int **p=(int**)a;//强制将二维数组指针转为指向指针的指针

  则此时p[0]=0;p[1]=1;p[2]=2;p[3]=3; //这里也是碰巧了, 指针和int都是4字节,恰巧每次移动到了对应值得位置;如果换成别的类型,或者64位设备就不会这么巧了;

解决问题:

  可以初始化一个指向数组的指针数组 int (*vis)[10]。 这样来指向二维数组的首地址。

posted on 2016-04-01 09:57  暴力的轮胎  阅读(582)  评论(0编辑  收藏  举报

导航