二級指針:
int a[SIZE][SIZE];int **p = a;
這樣是不行的
但是可以這樣:
int**p = (int**)malloc(sizeof(int*)*SIZE);
for (int i = 0; i < SIZE; i++) {
p[i] = (int*)malloc(sizeof(int)*SIZE);
}
然後就可以這麼用了 p[i][j]。想要指向二維數組,必須定義一個指向一維數組的指針int (*p)[SIZE] = a; 這樣才能賦值。通過二級指針去訪問二維數組需要先給二級指針分配等同於二維數組行數的一維數組指針,然後把二維數組的每行首地址賦值給對應位置的一維指針上。之後就可以通過二維指針直接訪問了。
參考代碼如下,可以看具體註釋輔助理解。
二維數組:
正確的二維數組的指針應該是:int a[2][2]等於int (*p)[2];//定義時無論數組維數,只可忽略第一維
int **p=(int**)a;//強制將二維數組指針轉爲指向指針的指針,則此時p[0]=0;p[1]=1;p[2]=2;p[3]=3; //這裏也是碰巧了, 指針和int都是4字節,恰巧每次移動到了對應值得位置;如果換成別的類型,或者64位設備就不會這麼巧了;
而p[0][0]=*(*(p+0)+0)=**p,p[0][1]=*(*(p+0)+1);