讀懂複雜C聲明的黃金法則

在網上碰見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函數的指針。

相關文章
相關標籤/搜索