呵呵,實在是厭倦了繞口的解釋。
指針數(shù)組,故名思義,就是指針的數(shù)組,數(shù)組的元素是指針;
數(shù)組指針,同樣,就是直想數(shù)組的指針。
簡單舉例說明:
int *p[2]; 首先聲明了一個數(shù)組,數(shù)組的元素是int型的指針。
int (*p)[2]; 聲明了一個指針, 指向了一個有兩個int元素的數(shù)組。
其實這兩種寫法主要是因為運算符的優(yōu)先級, 因為[]的優(yōu)先級比*高。所以第一種寫法,p先和[]結(jié)合,所以是一個數(shù)組,后與*結(jié)合,是指針。后一種寫法同理。
指針數(shù)組如下處理就會很清楚:
typedef int* intPtr;
intPtr p[2];
一目了然,所以為了避免迷惑,做適當(dāng)?shù)膖ypedef也是很有必要的。
同理,數(shù)組指針也可以作類似處理:
typedef int intArray2[2];
intArray2 * p;
和原來的聲明都是等價的。
個人建議編程過程中采用typedef來進(jìn)行類型定義,這樣程序看起來會清晰很多。舉個例子說明:
數(shù)組指針,元素為指向數(shù)組的指針:)
首先,指向數(shù)組的指針為:
typedef intArray2* intArray2Ptr;
然后是一個數(shù)組的元素:
typede intArray2Ptr intArray2PtrArr3[3];
最后數(shù)組的指針:
intArray2PtrArr3 *p;
呵呵,寫到這里自己也有點暈了,反正我工作以來從來沒有寫過這么拗口的程序,僅作參考,實際應(yīng)用價值不大。
但是開題所提到兩種情況應(yīng)該是比較常見的。另外就是函數(shù)指針。另外詳述。