深入解析函式指標與返回函式的指標

2022-10-04 05:00:09 字數 1389 閱讀 3331

先看看以下兩個**:

1:出自stl-sgi原始碼

複製** **如下:

static void (*__set_malloc_handler(void (*__f)()))()

2:linux下的

複製** **如下:

void (*signal (int sig_num, void (*handler)(int))) (int) 

作為乙個c/c++高手也許一看就明白,下面來分析一下,分析的方法採用的是從裡向外的分析法

對於例子1分析如下:

1)最裡面是void (*_f)()說明_f是乙個指標,與右邊的()結合,說明其是乙個函式,在與最左邊的void結合,表明其是乙個函式指標。

2)用typedef對void (*_f)()進行一下定義,方便後面的分析

typedef void (*f)()

3)於是上面的**可以變成如下的形式

stwww.cppcns.comatic void (*__set_malloc_handler(f f))()

4)再從裡向外分析__set_malloc_handler(f f)先與()結合表明其是乙個函式,引數型別為f f,再於左邊的*結合,表明函式返回的是乙個指標型別,即swww.cppcns.comtatic void (*)(),因此是乙個函式指標

5)綜上可以得到**函式名為__set_malloc_handler,接受乙個返回值為空,引數為空的函式指標作為引數,最後返回乙個函式指標,該指標同樣返回值與引數均為空,很繞口:)

對於例子2分析如下

1)從裡向外裡面是void (* handler)(int)看過列子1,很容易知道這是乙個函式指標,返回值為空,引數為空

2)對void (*handler)(int)進行巨集定義,以方便理解

typedef void (*handle)(int)

3)於是函式就變成了void (*signal(intsig_num,handler handler))(int)

4)從裡向外分析signal(int sig_num,handlerhandler)是乙個函式,帶兩個引數,返回值是*,即是乙個指標,返回值為void(*)(int)同樣是乙個handler型別的函式指標

5)綜上所述,**2的函式名是signal,接受兩個引數,返回乙個handler型別的函式指標。

其他**的分析類似,如下幾例:

複製** **如下:

1:v程式設計客棧oid *(*(*f)(int))[10];

分析如下(*(*f)(int)->void *(*)[10]

2:void *(*f)(int)[10]

分析如下(*f)(int)->void

還有一些基本上都是類似的變形

本文標題: 深入解析函式指標與返回函式的指標

本文位址:

指標與函式 返回函式指標

返回函式指標,其實就是返回乙個函式。返回值為乙個函式名就可以了。includeint add int num1,int num2 int subtract int num1,int num2 typedef int fptroperation int,int fptroperation select...

返回函式指標的函式

顧名思義,指標函式即返回指標的函式。其一般定義形式如下 型別名 函式名 函式引數表列 其中,字尾運算子括號 表示這是乙個函式,其字首運算子星號 表示此函式為指標型函式,其函式值為指標,即它帶回來的值的型別為指標,當呼叫這個函式後,將得到乙個 指向返回值為 的指標 位址 型別名 表示函式返回的指標指向...

定義返回函式指標的函式

博學,切問,近思 詹子知 1.基礎知識 1 定義函式指標 return type func pointer parameter list 2 定義返回函式指標的函式 return type function func parameter list parameter list 定義了乙個函式func...