青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

callback function

Posted on 2008-05-15 14:54 RichardHe 閱讀(223) 評(píng)論(0)  編輯 收藏 引用 所屬分類: [轉(zhuǎn)]
聲明函數(shù)指針

回調(diào)函數(shù)是一個(gè)程序員不能顯式調(diào)用的函數(shù);通過(guò)將回調(diào)函數(shù)的地址傳給調(diào)用者從而實(shí)現(xiàn)調(diào)用。要實(shí)現(xiàn)回調(diào),必須首先定義函數(shù)指針。盡管定義的語(yǔ)法有點(diǎn)不可思議,但如果你熟悉函數(shù)聲明的一般方法,便會(huì)發(fā)現(xiàn)函數(shù)指針的聲明與函數(shù)聲明非常類似。請(qǐng)看下面的例子:

void f();// 函數(shù)原型

上面的語(yǔ)句聲明了一個(gè)函數(shù),沒(méi)有輸入?yún)?shù)并返回void。那么函數(shù)指針的聲明方法如下:

void (*) ();

讓我們來(lái)分析一下,左邊圓括弧中的星號(hào)是函數(shù)指針聲明的關(guān)鍵。另外兩個(gè)元素是函數(shù)的返回類型(void)和由邊圓括弧中的入口參數(shù)(本例中參數(shù)是空)。注意本例中還沒(méi)有創(chuàng)建指針變量-只是聲明了變量類型。目前可以用這個(gè)變量類型來(lái)創(chuàng)建類型定義名及用sizeof表達(dá)式獲得函數(shù)指針的大?。?br>
// 獲得函數(shù)指針的大小
unsigned psize = sizeof (void (*) ());

// 為函數(shù)指針聲明類型定義
typedef void (*pfv) ();

pfv是一個(gè)函數(shù)指針,它指向的函數(shù)沒(méi)有輸入?yún)?shù),返回類行為void。使用這個(gè)類型定義名可以隱藏復(fù)雜的函數(shù)指針語(yǔ)法。

指針變量應(yīng)該有一個(gè)變量名:

void (*p) (); //p是指向某函數(shù)的指針

p是指向某函數(shù)的指針,該函數(shù)無(wú)輸入?yún)?shù),返回值的類型為void。左邊圓括弧里星號(hào)后的就是指針變量名。有了指針變量便可以賦值,值的內(nèi)容是署名匹配的函數(shù)名和返回類型。例如:

void func()
{
/* do something */
}
p = func;

p的賦值可以不同,但一定要是函數(shù)的地址,并且署名和返回類型相同。

傳遞回調(diào)函數(shù)的地址給調(diào)用者

現(xiàn)在可以將p傳遞給另一個(gè)函數(shù)(調(diào)用者)- caller(),它將調(diào)用p指向的函數(shù),而此函數(shù)名是未知的:

void caller(void(*ptr)())
{
ptr(); /* 調(diào)用ptr指向的函數(shù) */
}
void func();
int main()
{
p = func;
caller(p); /* 傳遞函數(shù)地址到調(diào)用者 */
}

如果賦了不同的值給p(不同函數(shù)地址),那么調(diào)用者將調(diào)用不同地址的函數(shù)。賦值可以發(fā)生在運(yùn)行時(shí),這樣使你能實(shí)現(xiàn)動(dòng)態(tài)綁定。

調(diào)用規(guī)范

到目前為止,我們只討論了函數(shù)指針及回調(diào)而沒(méi)有去注意ANSI C/C++的編譯器規(guī)范。許多編譯器有幾種調(diào)用規(guī)范。如在Visual C++中,可以在函數(shù)類型前加_cdecl,_stdcall或者_(dá)pascal來(lái)表示其調(diào)用規(guī)范(默認(rèn)為_(kāi)cdecl)。C++ Builder也支持_fastcall調(diào)用規(guī)范。調(diào)用規(guī)范影響編譯器產(chǎn)生的給定函數(shù)名,參數(shù)傳遞的順序(從右到左或從左到右),堆棧清理責(zé)任(調(diào)用者或者被調(diào)用者)以及參數(shù)傳遞機(jī)制(堆棧,CPU寄存器等)。

將調(diào)用規(guī)范看成是函數(shù)類型的一部分是很重要的;不能用不兼容的調(diào)用規(guī)范將地址賦值給函數(shù)指針。例如:

// 被調(diào)用函數(shù)是以int為參數(shù),以int為返回值
__stdcall int callee(int);

// 調(diào)用函數(shù)以函數(shù)指針為參數(shù)
void caller( __cdecl int(*ptr)(int));

// 在p中企圖存儲(chǔ)被調(diào)用函數(shù)地址的非法操作
__cdecl int(*p)(int) = callee; // 出錯(cuò)


指針p和callee()的類型不兼容,因?yàn)樗鼈冇胁煌恼{(diào)用規(guī)范。因此不能將被調(diào)用者的地址賦值給指針p,盡管兩者有相同的返回值和參數(shù)列。

posts - 94, comments - 138, trackbacks - 0, articles - 94

Copyright © RichardHe

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            夜夜嗨av色一区二区不卡| 加勒比av一区二区| 亚洲国产精品va在线观看黑人| 亚洲欧美日韩天堂| 欧美一区二区三区四区在线观看 | 久久综合亚州| 玖玖在线精品| 欧美激情第10页| 欧美日韩国产精品自在自线| 国产精品狼人久久影院观看方式| 欧美日韩精品一区| 国产精品一区视频| 狠狠色综合色综合网络| 亚洲国产综合91精品麻豆| 亚洲免费电影在线| 性18欧美另类| 欧美国产综合一区二区| 这里只有精品电影| 香蕉尹人综合在线观看| 久久一区视频| 国产精品入口日韩视频大尺度| 国产亚洲美州欧州综合国| 亚洲第一毛片| 欧美一区观看| 日韩视频一区二区三区在线播放| 亚洲欧美一区二区三区极速播放| 久久久伊人欧美| 国产精品爱久久久久久久| 韩日欧美一区二区| 亚洲综合电影一区二区三区| 欧美韩日一区| 久久国产精品黑丝| 99国产精品私拍| 美女在线一区二区| 亚洲免费av网站| 久久影院午夜论| 国产欧美大片| 99热精品在线| 亚洲国产国产亚洲一二三| 亚洲欧美日韩国产| 欧美日本在线视频| 亚洲福利视频二区| 久久久久久91香蕉国产| 一本大道久久a久久综合婷婷| 久久天堂成人| 在线观看成人网| 久久狠狠亚洲综合| 亚洲一区日本| 国产精品第十页| 一区二区精品国产| 欧美国产一区二区三区激情无套| 欧美在线播放一区| 国产精品天天看| 亚洲欧美日韩高清| 亚洲欧美成人网| 国产精品一区2区| 亚洲欧美日韩中文播放| avtt综合网| 国产精品国产精品国产专区不蜜| 一区二区三区精品| 99www免费人成精品| 欧美精品一区二区三区高清aⅴ| 亚洲大胆av| 亚洲国产成人久久综合一区| 欧美成人激情视频| 99天天综合性| 中文国产成人精品| 国产精品午夜av在线| 午夜精品国产更新| 欧美一区二区三区视频在线 | 久久久久久久综合日本| 激情欧美日韩| 欧美激情按摩在线| 欧美日韩成人综合天天影院| 一本色道久久88亚洲综合88| 99re热这里只有精品视频| 国产精品久久久999| 久久久夜夜夜| 欧美成人高清视频| 亚洲综合首页| 性欧美xxxx大乳国产app| 在线成人性视频| 亚洲精品美女在线| 国产三级精品三级| 亚洲大胆在线| 国产精品都在这里| 麻豆久久精品| 欧美色图天堂网| 久久在线免费观看| 欧美区一区二区三区| 欧美一区二视频在线免费观看| 久久久久成人网| 欧美黑人国产人伦爽爽爽| 欧美大香线蕉线伊人久久国产精品| 亚洲伦理一区| 小辣椒精品导航| 亚洲国产清纯| 亚洲欧美一级二级三级| 亚洲日本欧美| 欧美亚洲在线视频| 9l视频自拍蝌蚪9l视频成人| 午夜精品一区二区三区在线视| 亚洲欧洲三级电影| 亚洲欧美综合精品久久成人| 亚洲国产一区在线| 性欧美精品高清| 亚洲午夜国产成人av电影男同| 亚洲欧美日韩视频二区| 亚洲精选久久| 久久综合福利| 欧美一区二区视频观看视频| 欧美国产一区二区三区激情无套| 久久成人精品无人区| 欧美私人啪啪vps| 亚洲黄色在线观看| 黄色成人免费网站| 午夜久久99| 亚洲在线播放| 欧美精品免费观看二区| 欧美国产精品劲爆| 精品电影在线观看| 欧美亚洲一区| 久久se精品一区精品二区| 欧美三区美女| 亚洲美女av在线播放| 亚洲福利视频网| 久久男女视频| 久久亚洲一区| 精品成人在线视频| 久久久91精品国产| 久久久久久高潮国产精品视| 国产日产精品一区二区三区四区的观看方式 | 中文av一区二区| 中文亚洲免费| 欧美日韩中文字幕在线视频| 亚洲国内精品在线| 亚洲激情在线播放| 欧美精品一区二区高清在线观看| 欧美国产一区二区| 亚洲人体大胆视频| 欧美国产第一页| 亚洲毛片网站| 亚洲欧美中文日韩v在线观看| 欧美午夜精品久久久久久久| 99国产精品私拍| 久久黄色网页| 亚洲第一页在线| 欧美片网站免费| 亚洲色图综合久久| 久久九九精品99国产精品| 精品91在线| 欧美高清在线一区| 亚洲午夜女主播在线直播| 久久久久一区二区三区| 在线观看一区视频| 农村妇女精品| 一区二区欧美在线观看| 亚洲一二三四久久| 国产视频欧美| 欧美大片免费看| 亚洲欧美激情一区二区| 欧美成人dvd在线视频| 日韩一区二区高清| 国产伦精品一区二区三区照片91| 久久精品av麻豆的观看方式 | 欧美成人精品激情在线观看| 一区二区欧美视频| 黄色资源网久久资源365| 欧美精品久久久久a| 欧美一区二区三区播放老司机| 欧美好吊妞视频| 久久精品久久99精品久久| 亚洲精品日产精品乱码不卡| 国产嫩草一区二区三区在线观看 | 欧美一区二区视频在线| 亚洲国产三级网| 国产精品丝袜白浆摸在线| 女人香蕉久久**毛片精品| 亚洲综合另类| 亚洲精品久久久久久久久久久久| 欧美一区高清| 亚洲视频一区二区免费在线观看| 国内成人精品视频| 国产精品激情av在线播放| 欧美.日韩.国产.一区.二区| 亚洲欧美另类综合偷拍| 亚洲国产一区二区三区高清| 久久亚洲视频| 欧美在线视频导航| 亚洲欧美激情一区二区| 日韩视频久久| 亚洲国产精品尤物yw在线观看| 国产欧美综合在线| 欧美日韩综合一区| 免费日本视频一区| 久久久99国产精品免费| 性感少妇一区| 午夜精品网站| 欧美亚洲日本一区| 亚洲欧美国产精品专区久久|