先看乙個極其複雜的函式宣告:
std::string (*(
*returnfunction
(std::string (*(
*pf)
(std::initializer_list list))[
5]))
(std::initializer_list list))[
5];
特別長,一頁幾乎不能顯示完全。
然後看其函式名,引數型別,及返回型別。幾乎也是完全看不出分別是什麼。
如果換一種表達方式:
auto
returnfunction
(std::string (*(
*pf)
(std::initializer_list list))[
5])-
> std::string (*(
*)(std::initializer_list list))[
5];
這樣能一眼看出返回值型別了,還有函式名。引數列表也能看清楚了。
不過這種表示還是不太直觀。
再換一種表達方式呢?
using pm = std::string (*(
*)(std::initializer_list list))[
5];pm returnmethod
(pm from)
;
這種是不是就非常清晰了。就算完全不懂 c++ ,也知道這個函式宣告表達的是什麼了。
還有一種傳統的簡化方式。
typedef std::string (*(
*ptm)
(std::initializer_list list))[
5];ptm returntypemethod
(ptm from)
;
以上4種,其實是完全相同的函式描述。返回型別,引數列表都是完全相同的。
3,4是非常簡單易懂的。不過現在只是直到這個函式的引數型別與返回值型別相同,還不知道這個引數型別或者說返回值型別,到底是什麼型別。
那就先看這個東西是什麼:std::string (*(*ptm)(std::initializer_listlist))[5]
。
ptm
是乙個指標
(*ptm)
後面有引數列表,所以*ptm
是乙個函式
這個函式的返回值是乙個指標
返回值的指標,指向乙個長度為5,元素為 string 型別的陣列。
綜合:ptm
是乙個函式指標。指向的是乙個函式,其引數是乙個initializer_list
型別的物件,其返回值是乙個指標,該指標指向的是乙個長度為5,元素為 string 型別的陣列。
那麼,上面定義的函式就是這麼乙個函式,引數與返回值都是ptm
型別的。
c 陣列指標 指標陣列 函式指標
優先順序比 高,低於 根據這個原則去判斷 陣列指標 陣列指標即陣列的指標,是乙個指標,指向乙個陣列 也稱為行指標 int p 2 可以理解為int 2 p,但是不能這樣子定義 p是乙個指標,指向乙個陣列,陣列元素是int長度為2 二維陣列可以賦值給陣列指標 int a 3 4 int p 4 p a...
C語言 函式,函式指標 指標陣列,陣列指標。
include char fun1 char p,char a char fun2 char p,char a char fun3 char p,char a int main char pfun char p,char a 第6行使函式指標指向我們自定義的fun1函式。第7行是通過函式指標去呼叫我...
C語言 函式指標 函式指標陣列 函式指標陣列的指標
1.定義理解 函式的位址可以通過取位址函式名拿到,也可以通過函式名直接拿到。2.函式指標 1 定義乙個函式test void test char str intmain 2 函式指標的使用 呼叫函式test,傳參 zhangsan p zhangshan 這裡的 沒有起作用,它是讓我們知道這是乙個指...