程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> 關於C++ >> 深刻解析函數指針與前往函數的指針

深刻解析函數指針與前往函數的指針

編輯:關於C++

深刻解析函數指針與前往函數的指針。本站提示廣大學習愛好者:(深刻解析函數指針與前往函數的指針)文章只能為提供參考,不一定能成為您想要的結果。以下是深刻解析函數指針與前往函數的指針正文


先看看以下兩個代碼:
1:出自STL-SGI源碼<stl_alloc.h>

static void (*__set_malloc_handler(void (*__f)()))()
{
 void (*__old)()=__malloc_alloc_oom_handler;
 __malloc_alloc_oom_handler=__f;
 return (__old);
}

2:Linux下的<sginal.h>

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)因而下面的代碼可以釀成以下的情勢
Static void (*__set_malloc_handler(F f))()

4)再從裡向外剖析__set_malloc_handler(F f)先與()聯合注解其是一個函數,參數類型為F f,再於右邊的*聯合,注解函數前往的是一個指針類型,即static 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:void *(*(*f)(int))[10];
剖析以下(*(*f)(int)->void *(*)[10]
2:void *(*f)(int)[10]
剖析以下(*f)(int)->void *[10]

還有一些根本上都是相似的變形

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved