2016 11 22 左右法則

2021-07-24 19:51:22 字數 1907 閱讀 6591

左右法則

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

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

簡單: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)(int *))[5]

e是乙個函式指標陣列,陣列裡的元素指向乙個函式,該函式形參是int*,返回值為陣列指標,指向的陣列為float型陣列



C語言左右法則

c語言所有複雜的指標宣告,都是由各種宣告巢狀構成的。如何解讀複雜指標宣告呢?右左法則是乙個既著名又常用的方法。不過,右左法則其實並不是c標準裡面的內容,它是從c標準的宣告規定中歸納出來的方法。c標準的宣告規則,是用來解決如何建立宣告的,而右左法則是用來解決如何辯識乙個宣告的,兩者可以說是相反的。右左...

C語言左右法則

c語言所有複雜的指標宣告,都是由各種宣告巢狀構成的。如何解讀複雜指標宣告呢?右左法則是乙個既著名又常用的方法。不過,右左法則其實並不是c標準裡面的內容,它是從c標準的宣告規定中歸納出來的方法。c標準的宣告規則,是用來解決如何建立宣告的,而右左法則是用來解決如何辯識乙個宣告的,兩者可以說是相反的。筆者...

c語言之左右法則

c語言所有複雜的指標宣告,都是由各種宣告巢狀構成的。如何解讀複雜指標宣告呢?右左法則是乙個既著名又常用的方法。什麼是左右法則呢?下面我會通過定義與一些例子盡量給大家講解一下,希望對大家有所幫助。右左法則 首先從最裡面的圓括號內未定義的識別符號開始閱讀看起,然後往右看,再往左看。每當遇到圓括號時,就應...