//對指針迷惑了很久,今天終於有點兒突破了,所以寫下對指針的理解供 那些還在迷惑的人
//參考
//**************************************************
/*
這裏我們就先從指針和數組的關係開始介紹,這裏如果理解了那函數和指針的關係也就不攻自破了!
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;
}