讓一維指針指向二維數組空間的方法!


背景: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;//編譯沒問題,運行沒問題,二維轉一維

   從上面可以看出,二維指針之間強制轉換會出現不可知的問題,而二維強制轉一維都不會有問題!


注意!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。



 
  © 2014-2022 ITdaan.com 联系我们: