C++二維指針和指針數組的相關介紹

//對指針迷惑了很久,今天終於有點兒突破了,所以寫下對指針的理解供 那些還在迷惑的人

//參考

//**************************************************

/*

這裏我們就先從指針和數組的關係開始介紹,這裏如果理解了那函數和指針的關係也就不攻自破了!
A:int *ppa[3]和int **pp;

1: 這兩個是等價的,都是控制一維指針的指針,也可以這兩個是同級的指針!
2:二者都可以直接訪問int a[][]二維數組的地址!但是前者可以用*ppa = *a,來直接訪問。
而後者要先new一片內存空間後纔可以*pp = *a來訪問二維數組a的地址!
3:前面是個指針數組,後者則是指向指針的指針,前者有大小
後者沒有大小,後者是指向int一系列的指針的 指針!

B:int *ppa[3]和int (*pa)[3]
1:這兩個是同等級的指針,但是需要理解的是前者是一個存3個一維指針的數組,後者則是一個指向二維

數組的指針(切忌這裏強調只是一個)!
所以前者是一個指針數 組,數組裏面放的是指針!
後者也是一個指針,但不是指針數組,而是一個指向二維數組的指針!注意,這裏強調是一個!而不是多

個!如果是多個就變成了指針數組了(三維指針數組,因爲指向二維數組的 指針需要一個更高維的三維數

組 來保存二維數組的指針。)

*/

//我們舉例說明一下,根據上面的文字結合看:
void fun()
{
 int *ppa[3];
 int **pp = new int*;
 int *p;
 int a[2][3]= {{222,333,444},{555,666,777}};
 int (*pa)[3];

 *ppa = *a;
 *pp = *a;
 p = *a;
 *ppa = p;
 pp = ppa;

 cout<<**pa<<endl;
 cout<<*(p+1)<<endl;
 cout<<**pp<<endl;
 cout<<*(*ppa+1)<<endl;
}

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