歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux編程 >> Linux編程 >> 讀懂復雜C聲明的黃金法則

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

日期:2017/3/1 9:30:11   编辑:Linux編程

黃金法則:從聲明的變量開始,先向右看,再向左看,再向右看,再向左看 。如果向右看的時候遇到),則一直向左看,直到遇到(跳出這層括號。然後再重復向右看,向左看。

舉例說明:

例子1

int a;

a 的右邊什麼都沒有,向左看int,說明a是一個int型變量。

例子2

char *a;

向右看,什麼都沒有; 向左看是*, 說明a是一個指針; 再向右看,什麼都沒有; 再向左看是char,說明a是一個指向char的指針。

例子3

int *a[];

向右看,[]說明a是一個數組;向左看,*說明數組的每個元素是個指針;再向右看,什麼都沒有; 再向左看,int,每個指針指向一個整數。綜合來看,a是一個數組,數組每個元素指向整數。

例子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函數的指針。

據說C++的面向對象和多態就是靠函數指針和函數指針數組實現的。

Copyright © Linux教程網 All Rights Reserved