二維數組和二維指針


Fun (int **p){}這里面的int **p //這里的p不是二維數組的指針,而是指向指針的指針,即二級指針。

正確的二維數組的指針應該是:Int a[2][2];Int (*p)[2];//定義時無論數組維數,只可忽略第一維 

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

int **p=(int**)a;//強制將二維數組指針轉為指向指針的指針

則此時p[0]=0;p[1]=1;p[2]=2;p[3]=3;

而p[0][0]=*(*(p+0)+0)=**p;

p[0][1]=*(*(p+0)+1);

對於p[0][0]:由於*p=0; ====> **p=*(0);引用地址為零的內存,必然是錯誤的。

對於p[0][1]=*(*p+1)====>*(4),引用了非法內存同樣,

對於p[1][0]=*(1),p[1][1]=*(5),均引用了非法內存所以說,二位數組並不能簡單的轉換成指向指針的指針。  

二維數組其實只是一個指針,而二級指針是指向指針的指針,所以二者並不等價。如上例所示:int a[2][2];

 a是指向整個數組的首地址,並不是int **;所以不要指望向函數fun里面傳實參 p=a;


注意!

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



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