让一维指针指向二维数组空间的方法!

来源:互联网 发布:淘宝阿里健康是真的吗 编辑:程序博客网 时间:2024/06/05 11:16

背景:int *p;int a[10][10];如何让一维指针p指向a[10][10]开辟的内存空间?

正确的方法:

        1.开始我用的笨方法是另外开辟一个内存空间int*p=new int [100];

          for(int i=0;i<10;i++)

             {

                 for(int j=0;j<10;j++)

                  {

                         *p=a[i][j];

                           p++;

                   }

             }

         p=p-100;

        这样就另外开辟了100的内存空间,并让p指向了,这个内存区间的起始地址

         2.直接p=&a[0][0];

         3.p=a[0];这样也行,确实让人费解

         4.p=(int*)a;

错误的方法:

           p=a;//二维数组的数组名,表示一个指向列值个元素的一维数组的指针变量

拓展方法:

         从上面可以看出,这些指针本质上都是指向一种类型(整型的指针),他们之间的转换无非是强制转换,这样都不会有问题,结论就是同类型指针同维数指针之间强制转换都不会有问题,

下面的方法:

     int(*pa)[10]=null;

     int **pab=(int**)pa;//这里编译没问题,运行有问题

     int *p=(int*)pa;//这样编译没问题,运行也没问题,相当于二维转一维

     p=(int *)pab;//编译没问题,运行没问题,二维转一维

   从上面可以看出,二维指针之间强制转换会出现不可知的问题,而二维强制转一维都不会有问题!