關於函式位址複雜宣告和定義

2021-05-26 07:01:59 字數 806 閱讀 1724

/* 1 */  void * (*(*fp1)(int))[10];

首先(*fp1)(int)為乙個指向函式的指標,該函式的返回值為b,  轉換為void*(*b)[10], b為指向c指標,

void*c[10], c為指標陣列,型別為void.因此全部結合後可以看作是 fp1是乙個指向函式的指標,該

函式接受int型的變數,返回乙個指向void型別的指標陣列的指標。

/* 2 */  float(*(*fp2)(int, int, float))(int);

同樣在本例中(*fp2)(int, int, float)定義的是乙個函式指標,函式的返回值為b, 上式為float(*b)(int)

顯然b是乙個函式指標,綜述為:fp2是乙個引數型別為int int float的函式指標,該函式的返回值是乙個

指向引數為int 型返回值為float型別的函式指標。

/* 3 */ double(*(*(*fp3)())[10])();

(*fp3)()為函式指標,函式的返回值為b, double(*(*b)[10])(), double(*c[10])()為乙個指標陣列,

每乙個指標指向函式。綜述為fp3為引數列表為空的函式指標,該函式返回值型別為乙個指標,該指標

指向引數為空,返回值為double的函式指標陣列。

/* 4 */ int (*(*f4())[10])();

這個例子不同於上面的情況,f4()為函式,返回值為b, int(*(*b)[10])(), int(*c[10])(), 綜述為f4是

乙個返回指標的函式,該指標指向引數為空返回值為int型的函式指標的陣列。

C語言中變數的複雜宣告和定義

我們知道 任何c語言變數的宣告都由兩部分組成 型別以及一組類似表示式的宣告符。一旦我們知道如何宣告乙個給定型別的變數,那麼該型別的型別轉換符就很容易得到 只需要把宣告中的變數名和末尾的分號去掉,再將剩餘的部分用乙個括號整個 封裝 起來即可。例如 float h 表示h是乙個指向返回值為浮點型別的函式...

C define和typedef及複雜宣告

1.定義一種型別的別名,而不只是簡單的巨集替換。可以用作同時宣告指標型的多個物件。比如 char pa,pb typedef char pchar 一般用大寫 pchar pa,pb 2.用在舊的c的 中,宣告struct新物件時,必須要帶上struct,即形式為 struct 結構名 物件名,如 ...

Linux C函式,陣列,指標,複雜宣告

函式的遞迴呼叫 遞迴函式是指 自己呼叫自己 的函式,函式不可能不停的呼叫自己,所以遞迴函式一定具備結束條件 例一 遞迴函式binary search 實現二元搜尋演算法,在排序好的陣列中找到特定元素。首先,該函式根據搜尋條件比較陣列中間的元素,相同就返回該元素指標,不同該函式呼叫自己,在可能的另一半...