c 陣列,函式指標

2021-10-01 18:52:20 字數 1541 閱讀 3958

先看乙個極其複雜的函式宣告:

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 這裡的 沒有起作用,它是讓我們知道這是乙個指...