在網上碰見felix,他讓我讀 http://www.felix021.com/blog/read.php?2072,讀完以後以爲收穫很大,須要練習一下。php
黃金法則:從聲明的變量名開始,先向右看,再向左看,再向右看,再向左看 。。。數組
若是向右看的時候遇到 )
,則一直向左看,直到遇到 (
跳出這層括號。而後再重複向右看,向左看。函數
舉例說明:指針
例子1code
int a;
a 的右邊什麼都沒有,向左看int,說明a是一個int型變量。blog
例子2get
char *a;
向右看,什麼都沒有; 向左看是*, 說明a是一個指針; 再向右看,什麼都沒有; 再向左看是char,說明a是一個指向char的指針。變量
例子3總結
int *a[];
向右看,[]
說明a是一個數組;向左看,*
說明數組的每一個元素是個指針;再向右看,什麼都沒有; 再向左看,int,每一個指針指向一個整數。綜合來看,a是一個數組,數組每一個元素是指向整數的指針。co
例子4
int * const a;
向a右邊看,什麼都沒有。一直向左看,先是const,說明a是不可修改的,而後是*,說明a是一個指針;而後是int,說明指針指向整數。綜合來看,a是一個不可修改的指針,它指向整數。
例子5
void (*checkout)();
向右看,碰見 )
返回,再向左看是*
,說明checkout是個指針。再向右看,是()
,說明這個指針指向函數; 向左看是void,說明函數返回void。總的來看, checkout是一個指向返回void的函數的指針。
例子6
void (*checkout[])();
向右看,[]
說明checkout是一個數組;向左看, *
說明數組每一個元素是個指針。向右看,碰見)
返回;再向左看,碰見(
返回。再向右看,是()
,說明數組內每一個指針指向函數; 向左看是void,說明每一個函數返回void。
總的來看, checkout是一個數組,數組內都是指向返回void的函數的指針。
例子7
void (*(*checkout)[])();
向右看,碰見)
返回; 向左看,*
說明checkout是個指針,遇到(
跳出一層()。向右看,[]
說明checkout指向的是一個數組;向左看, *
說明數組每一個元素是個指針。向右看碰見)
,向左看碰見(
,跳出一層()。向右看,()
說明數組每一個元素指向一個函數;再向左看,void說明每一個數組元素指向的函數返回void。 總結:checkout是一個指針,指向一個數組,每一個數組元素都是一個指向返回void函數的指針。