C語言中的怪異宣告

2021-06-16 11:33:08 字數 1146 閱讀 9189

去面試的時候,總是問到c語言中的怪異宣告,比如指向函式的指標,指向陣列的指標,指向返回類是函式指標的函式的函式指標陣列,。。。。。。。反正一大堆有的你搞頭了。

比如:1,    int (*p)[10];

2,   int(*p)(int);

3,   char* const *( * next ) ( );

4,   void ( *signal( int sig, void(*func)(int) ) )(int);

5,   int ( *a ) (int);

6,   int ( *p() ) [10];

這種宣告的解讀規律如下:

a,找到變數名,這個應該很容易的。

b,先看變數名的

右邊,b1,如果是個(),表示這個變數是個函式宣告。

b2,如果是個     ,表示這個變數是個陣列宣告。

b3,如果什麼都沒有,啥也不表示了

c, 再看變數名的

左邊,如果有*,表示  指向....的指標,

c1,如果右邊什麼也沒有,變數名本身是乙個指標。

c2,如果右邊是 ,表示陣列的內容是指標。

c3,如果右邊是(),表示函式的返回值是個指標。

我們現在來分析下:

1,    int (*p)[10];

分析:變數名是p,p的右邊沒有任何東西,p的左邊是乙個*,表示p本身是乙個指標。括弧外面修飾的是p指向的內容,修飾模式是 int ***[10],是乙個包含10個元素的陣列。連起來就是,p是乙個指標,指向乙個陣列,這個陣列包含10個元素

2,   int(*p)(int);

分析:同樣,變數名是p,p右邊什麼都沒有,左邊是乙個*,表示p本身就是乙個指標。括弧外面修飾的是p指向的內容,修飾模式為   int   ***(int ),這表示乙個函式名是***的函式。連起來就是,p是乙個指標,指向乙個函式,這個函式的引數是int型,返回值也是int型。

3,   char* const *( * next ) ( );

分析:4,   void ( *signal( int sig, void(*func)(int) ) )(int);

分析:5,   int ( *a ) (int);

分析:6,   int ( *p() ) [10];

分析:

C語言中的怪異宣告

去面試的時候,總是問到c語言中的怪異宣告,比如指向函式的指標,指向陣列的指標,指向返回類是函式指標的函式的函式指標陣列,反正一大堆有的你搞頭了。比如 1,int p 10 2,int p int 3,char const next 4,void signal int sig,void func in...

C語言中的基本宣告

declspec noinline int myfunction int i declspec is a modifier int is a specifier and myfunction int i is declarator 上面宣告語句的順序是 修飾符 說明符和宣告符。變數宣告的基本形式是 ...

C語言中的定義和宣告

定義 指的是在 中定義乙個變數 函式,定義的最顯著的乙個特徵是,執行定義後,編譯器會在記憶體中分配一塊記憶體給所定義的變數或函式,如執行int a b,c 0 都會在記憶體中分配一定的空間以存放這幾個變數。宣告 宣告的目的是在於告訴編譯器,系統中已經有這麼乙個名字是aaa的變數或者函式了,我要用的就...