去面試的時候,總是問到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的變數或者函式了,我要用的就...