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 標準的宣告規則,是用來解決如何建立宣告的,而右左法則是用來解決如何辯識乙個宣告的,兩者可以說是相反...