2016.11.22 左右法則

左右法則

右左法則:首先從最裏面的圓括號內未定義的標識符開始閱讀看起,然後往右看,再往左看。每當遇到圓括號時,就應該掉轉閱讀方向。一旦解析完圓括號裏面所有的東西,就跳出圓括號。重複這個過程直到整個聲明解析完畢。

  總之對聲明進行分析,最根本的方法還是按優先級和結合性來類比替換,從那些最基本的聲明進行類比,簡化,從而進行理解。下面分析幾個例子,來具體闡述如何使用這種方法。

簡單:

int a; 這裏從變量看,向右看是分號,轉向左,是int 所以

        a是整形變量

int *a; 從變量開始,先向右看,是分號,然後向左看,這裏有一個

           *,說明變量a是一個指針,然後繼續向左,是int所以a是一

           個整形指針變量

int **a; 這裏還是從變量開始看,先向右看,是分號,然後向左看

            是*,說明是指針變量,然後繼續向左看,還是*,所以a是

            指針的指針變量

int a[10];  這裏從變量看,先向右看,是[],說明a是數組

int *a[10];  這裏從變量看,先向右,是[],說明a是數組,然後向左

                 ,可以看到是*,說明a是一個整形指針數組

int (*a)[10];  從變量開始,先向右,是),說明a是一個變量

                         然後向左看,是*說明a是指針變量,然後繼續向

                         右看,是【】,所以a是數組指針變量

int (*a)(int);   從變量開始看,先向右,是),說明a是變量,然後

                      向左看,是*,所以a是指針變量,然後向右,是

                      (),說明是個函數,所以a是一個函數指針變量,

                       指針指向一個函數,函數的形參是int, 返回值,是

                        int

int (*a[10])(int); 從變量開始看,先向右 看,是【】,說明a是

                                一個數組,繼續向右,是),然後向左看,是

                              *,說明a是一個指針數組,繼續向右看,是

                               (),說明這是函數指針數組,行參數int,返

                              回值是int

困難:

int *(*(*arr[5])())();

arr是一個函數指針數組,該數組的元素指向爲函數,該函數的形參是空,返回值是函數指針,該指針指向是一個形參是空,返回值是int

float (*(*b())[])();

b是一個函數,該函數形參爲空,返回值爲數組指針,該指針指向一個函數指針數組,數組元素指向一個形參是空,返回值爲float

void  *(*c)(char a, int  (*b)());

c是一個函數指針變量,指向一個形參字符變量a,和一個形參是函數指針變量,無返回值

float (*(*e【10】)(int *))[5]

e是一個函數指針數組,數組裏的元素指向一個函數,該函數形參是int*,返回值爲數組指針,指向的數組爲float型數組


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章