二維數組與二級指針

void f(float **p){

/* 想要在函數體中按二維數組的方式訪問*/

    p[1][1] = 0;//編譯OK,運行出錯(非法訪問)

}

float **p; //其實這裏的p並不是一個二維數組的指針,只不過是一個指向指針的指針像你這樣訪問肯定是會出問題的。

例如:

float a[2][2]={0,1,2,3};

float **p=(float**)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),均引用了非法內存

所以說,二位數組並不能簡單的轉換成指向指針的指針。




發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章