要理解複雜型別其實不難,一個型別裏面也會出現一些運算子,有優先順序,在搞清楚優先順序之後,複雜型別判斷的難題就迎刃而解了。
int p;
//這是一個普通的整形變數
int *p;
//首先從P處開始,先與*結合,說明P是一個指針,再與int型別結合,說明指針所指向的內容型別爲int型
int p[3];
//P與[]先結合,說明P是一個數組,再與int相結合,表示陣列中的元素是int型
int *p[3];
//P與[]先結合,說明P是一個數組,再與*結合,說明陣列中的元素是指針,再與int結合,說明元素中這些指針指向的數據型別爲int型
int (*p)[3];
//()改變了優先順序,P先與*結合,說明P是一個指針,再與[]結合,說明該指針指向一個數組,再與int結合,說明改該陣列中的元素爲int型
int **p;
//P與先結合,說明P是一個指針,再與結合,說明這個指針指向一個指針,再與int結合,說明這個指針指向的數據型別爲int型
int p(int);
//P先與()結合,說明P是一個函數,再與()中的int結合,說明這個函數有一個形參的型別爲int型,再與int結合,說明該函數的返回值爲int型
int (*p)(int);
//P先與*結合,說明P是一個指針,再與()結合,說明該指針指向的是一個函數,再與()中的int結合,說明P指針指向的這個函數的參數爲int型,再與int結合,說明這個函數的返回值爲int型別
int *(*p(int))[3];
//P與()先結合,說明P是一個函數,再與()中的int結合,說明函數的形式參數爲int型,再與結合,說明函數返回的是一個指針,再與[]結合,說明這個指針指向的是一個數組,再與結合,說明這個陣列中的元素是指針,再與int結合,說明這個陣列中的指針指向的是int型。