c語言之左右法則

2021-07-15 01:41:25 字數 1490 閱讀 4406

c語言所有複雜的指標宣告,都是由各種宣告巢狀構成的。如何解讀複雜指標宣告呢?右左法則是乙個既著名又常用的方法。

什麼是左右法則呢?下面我會通過定義與一些例子盡量給大家講解一下,希望對大家有所幫助。

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

在通過複雜例子解析左右結構之前,我先說一下指標陣列巢狀中的一些基本型別

11.int a;  整形變數

2.int *a; 整形指標變數 

3.int **a; 整形指標的指標變數(乙個指向指標的指標,它指向的指標指向乙個整形數)

4.int a[10];  整形陣列

5.int  *a[10]; 整形指標陣列(乙個陣列中有10個指標,該指標指向乙個整形數)

6.int (*a)[10]; 整形陣列指標(乙個指向有10個整形陣列的指標)

7.int (*a)(int); 函式指標變數(乙個指向函式的指標,該函式有乙個整形引數並返回乙個整形數)

8.int (*a[10])(int); 函式指標陣列(乙個有10個指標的陣列,該指標指向乙個函式,該函式有乙個整形引數並返回乙個整形數)

介紹完一些基本型別,下面來介紹一些複雜的例子

1.int *( * ( *fpl ) ( int ) ) [10];

--*fpl   知道fpl是乙個指標

--*(*fpl)(int)  知道指標fpl指向乙個形參為int,返回值為指標的函式

--int *(*(*fpl)(int))[10]  知道該函式的指標指向乙個陣列,該陣列有10個元素,並且每個元素指向乙個整數

總結:fpl被宣告為乙個函式的指標,該函式返回值是乙個指向指標陣列的指標

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

--*arr [5]  知道arr是指標陣列,陣列arr裡有5個指標,每個元素裡存放著某某的位址

--*( * arr [5] )( )  知道函式指標陣列,乙個有5 個指標的陣列,該指標指向乙個形參為空,返回值為某某的函式

--int * ( *( * arr [5] )( ) ) ( )接上面,知道該函式返回乙個指向函式指標的指標

總結:函式指標陣列,arr[5]中的元素被宣告為乙個函式的指標,該函式的返回值是乙個指向函式指標的指標

下面幾個例子我在這邊就不在具體分析了

3.float ( * ( * e [10] ( int  * ) )

[5] );

總結:函式指標陣列,e[10]中的元素被宣告為乙個函式的指標,函式的返回值是乙個指向浮點型陣列的指標

4.void * ( * ) ( char , int ( * )( ) );

總結:函式指標變數,指標指向乙個形參為char和int(*)的函式,函式的返回值是乙個函式指標,該函式形參為空返回值為空

例子就解釋到這裡,只要多解釋多練習問題就不大,希望對大家有所幫助。

c指標解讀之左右法則

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

C指標宣告解讀之左右法則

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

C指標宣告解讀之左右法則

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