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

kenlistian

厚積薄發. 勤為槳,思為帆

   :: 首頁 :: 新隨筆 ::  :: 聚合  :: 管理 ::
  73 隨筆 :: 4 文章 :: 22 評論 :: 0 Trackbacks

一個函數指針的理解:
 有一段程序存儲在起始地址為 0的一段內存上,如果我們想要調用這段程序,請問該如何去做?
 答案是 (*(void (*)( ) )0)( )。

 首先,最基本的函數聲明: void function (paramList);
 最基本的函數調用: function(paramList);

  鑒于問題中的函數沒有參數,函數調用可簡化為 function();
   根據問題描述,可以知道 0是這個函數的入口地址,也就是說,0是一個函數的指針。
   使用函數指針的函數聲明形式是:void (*pFunction)(),相應的調用形式是: (*pFunction)(),
   則問題中的函數調用可以寫作:(*0)( )。

  大家知道,函數指針變量不能是一個常數,因此上式中的 0必須要被轉化為函數指針。

  我們先來研究一下,對于使用函數指針的函數:
        比如 void (*pFunction)( ),函數指針變量的原型是什么?
    這個問題很簡單,pFunction函數指針原型是( void (*)( ) ),即去掉變量名,
    清晰起見,整個加上()號。

  所以將 0強制轉換為一個返回值為void,參數為空的函數指針如下:( void (*)( ) )。

   OK,結合2)和3)的分析,結果出來了,那就是:(*(void (*)( ) )0)( ) 。

  答案分析:從頭到尾理解答案

   (void (*)( )) ,是一個返回值為void,參數為空的函數指針原型。
   (void (*)( ))0,把0轉變成一個返回值為void,參數為空的函數指針,指針指向的地址為0.
   *(void (*)( ))0,前面加上*表示整個是一個返回值為void的函數的名字
   (*(void (*)( ))0)( ),這當然就是一個函數了。

  我們可以使用 typedef清晰聲明如下:

   typedef void (*pFun)();

這樣定義之后,pFun就是一個返回類型為void無參數的函數指針變量了。

  這樣函數變為 (*(pFun)0)();


----
在調用動態庫時,習慣用typedef重新定義動態庫函數中的函數地址(函數指針),
如在動態庫(test.dll)中有如下函數:
int DoCase(int, long);

則,在調用動態庫是有兩種方法:
1. 先聲明一個與動態庫中類型一致的指針函數變量:
int (*DOCASE)(int ,long);  //用于指向動態庫中的DoCase函數地址
HINSTANCE gLibMyDLL = NULL;
gLibMyDLL 
= LoadLibrary("test.dll");
if(gLibMyDLL != NULL)
{
  DOCASE 
= (int(*)(int,long))GetProcAddress(gLibMyDLL, "DoCase");
}
int s = DOCASE(1,1000);

2.用typedef定義一個指針函數:
typedef (
*DOCASE)(int ,long);

HINSTANCE gLibMyDLL 
= NULL;
DOCASE _docase;
gLibMyDLL 
= LoadLibrary("test.dll");
if(gLibMyDLL != NULL)
{
  _docase 
= (DOCASE)GetProcAddress(gLibMyDll, "DoCase");
}

int s=_docase(1,1000);


----------------
在C++類中使用函數指針。
//typedef 返回類型(類名::*新類型)(參數表)
class CA
{
public:
  
char lcFun(int a){ return; }
};

CA ca;
typedef 
char (CA::*PTRFUN)(int);
PTRFUN pFun;
void main()
{
  pFun 
= CA::lcFun;
  ca.(
*pFun)(2);
}


指針的定義與使用都加上了“類限制”或“對象”,用來指明指針指向的函數是哪個類的,
這里的類對象也可以是使用new得到的。
如:
CA *pca = new CA;
pca->(*pFun)(2);
delete pca;
而且這個類對象指針可以是類內部成員變量,你甚至可以使用this指針。
如:類CA有成員變量PTRFUN m_pfun;
void CA::lcFun2()
{
   (this->*m_pFun)(2);
}
一句話,使用類成員函數指針必須有“->*”或“.*”的調用。


--------------------

void test(void* );
void tt()
{
   printf(
"kao,沒玩過這種\n");
}

int main(int argc, char* argv[])
{
    typedef 
void(*Fun)();
    Fun mytest;
    mytest 
= tt;
    test((
void*)mytest);
    
return 0;
}

void test(void * p)
{
    (
*(void(*)())p)();
}


posted on 2008-10-29 22:23 kenlistian 閱讀(817) 評論(1)  編輯 收藏 引用 所屬分類: cpp

評論

# re: 匯總函數指針理解[未登錄] 2008-10-31 17:15 908971
受教了  回復  更多評論
  

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <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>
            欧美手机在线| 亚洲欧美另类综合偷拍| 久久精品一区四区| 久久久精品国产一区二区三区| 亚洲欧美在线aaa| 欧美激情在线| 国产美女高潮久久白浆| 在线日韩成人| 黄色日韩网站| 亚洲一区www| 日韩视频精品| 久久一区欧美| 亚洲女优在线| 欧美午夜视频在线| 亚洲日韩中文字幕在线播放| 国产亚洲日本欧美韩国| 在线亚洲电影| 欧美黄色网络| 久久久精品午夜少妇| 欧美午夜不卡| 一本一道久久综合狠狠老精东影业 | 99国产精品久久| 久久婷婷国产综合国色天香| 亚洲欧美在线观看| 日韩午夜精品| 欧美伦理视频网站| 亚洲精选大片| 亚洲国产精品毛片| 久久看片网站| 在线日韩精品视频| 性欧美大战久久久久久久免费观看| 免费观看在线综合色| 欧美肥婆在线| 美女免费视频一区| 亚洲国产老妈| 亚洲第一页在线| 国产精品99久久不卡二区| 久久乐国产精品| 免费成人高清视频| 欧美在线观看天堂一区二区三区| 欧美激情中文不卡| 亚洲精品一区二| 最新中文字幕亚洲| 欧美日韩国产精品一卡| 亚洲国产99| 亚洲国产另类久久精品| 久热精品视频在线| 亚洲国产欧美在线人成| 免费短视频成人日韩| 久久aⅴ国产欧美74aaa| 国产亚洲精久久久久久| 久久精品日产第一区二区| 亚洲视频每日更新| 国产亚洲视频在线| 久久精品国产综合精品| 亚洲一级片在线看| 牛人盗摄一区二区三区视频| 国产综合在线视频| 欧美成人一二三| 欧美日韩一级大片网址| 亚洲一级一区| 久久国产天堂福利天堂| 一区视频在线| 亚洲精品你懂的| 久久免费午夜影院| 亚洲国产一区视频| 99亚洲精品| 国产一区二区三区电影在线观看| 狠狠入ady亚洲精品| 久热精品在线视频| 欧美日韩精品一区二区在线播放 | 性色av一区二区怡红| 国产日产欧产精品推荐色| 久久国产日韩欧美| 欧美一级二区| 亚洲裸体视频| 鲁大师成人一区二区三区| 亚洲伊人一本大道中文字幕| 美女精品国产| 欧美中文字幕在线观看| 久久久91精品| 亚洲欧美在线免费| 欧美大片一区二区| 欧美一区久久| 欧美日本三区| 麻豆av一区二区三区| 欧美人与性动交cc0o| 香蕉久久国产| 欧美日韩国产页| 欧美成人dvd在线视频| 欧美午夜不卡视频| 亚洲电影一级黄| 精品成人国产| 性色av一区二区三区| 欧美一区不卡| 国产精品久久久久77777| 亚洲欧美日韩综合国产aⅴ| 亚洲高清视频一区二区| 国产精品成人免费| 亚洲高清资源| 有坂深雪在线一区| 欧美一区二区三区视频免费| 亚洲大片一区二区三区| 在线一区免费观看| 99视频国产精品免费观看| 欧美伊人久久久久久久久影院| 亚洲美女少妇无套啪啪呻吟| 亚洲免费视频中文字幕| 亚洲国产成人在线播放| 日韩视频国产视频| 亚洲蜜桃精久久久久久久| 性欧美激情精品| 新狼窝色av性久久久久久| 欧美日韩国产成人在线免费| 久久激情一区| 国产欧美亚洲精品| 亚洲视频香蕉人妖| 亚洲一区二区三区四区视频| 久久久国产精品一区二区三区| 欧美一区二区免费观在线| 欧美日本不卡| 日韩视频在线播放| 亚洲午夜一区二区| 久久久久综合| 欧美国产精品人人做人人爱| 一本色道久久加勒比88综合| 亚洲激情欧美激情| 亚洲欧美日韩久久精品| 午夜精品在线看| 国产伦精品一区二区三区| 一区二区三区四区精品| 亚洲一区二区三区在线看| 欧美日韩第一区| 在线亚洲欧美| 久久久噜噜噜久久久| 欧美亚洲综合网| 亚洲欧美成人综合| 一区二区三区视频在线看| 亚洲欧美综合v| 国内精品久久久久影院 日本资源| 亚洲欧美中文日韩在线| 久久久久国内| 最新高清无码专区| 国产欧美综合在线| 免费观看成人| 中国成人在线视频| 国产午夜精品福利| 亚洲国内自拍| 99香蕉国产精品偷在线观看| 欧美在线免费看| 欧美一区亚洲二区| 在线看成人片| 欧美精品一区三区| 亚洲三级免费电影| 久久精品毛片| 亚洲久久一区二区| 国产精品视频一区二区高潮| 中国日韩欧美久久久久久久久| 欧美一级大片在线观看| 一区二区三区在线视频免费观看| 免费中文字幕日韩欧美| 一本久久a久久精品亚洲| 亚洲欧美日韩中文播放| 久久综合伊人77777尤物| 欧美日本二区| 国产精品免费一区豆花| 国内成+人亚洲| 在线看片第一页欧美| **欧美日韩vr在线| 免费观看一区| 亚洲日本电影在线| 欧美性猛片xxxx免费看久爱| 亚洲美女在线国产| 蜜桃av噜噜一区二区三区| 亚洲看片免费| 国产一区二区三区丝袜| 欧美日韩国产精品| 欧美sm视频| 欧美一区二区三区精品| 亚洲精品一区二区三区四区高清| 裸体丰满少妇做受久久99精品| 亚洲天堂久久| 亚洲免费伊人电影在线观看av| 激情综合色丁香一区二区| 国产偷久久久精品专区| 欧美视频在线观看免费| 免费精品99久久国产综合精品| 亚洲午夜伦理| 亚洲视频一二区| 日韩午夜av| 亚洲日本理论电影| 亚洲麻豆一区| 日韩视频永久免费| 亚洲精品视频啊美女在线直播| 免费成人在线观看视频| 欧美国产一区二区三区激情无套| 久久久免费av| 久热精品视频在线观看| 久久久免费精品视频| 久久中文字幕导航|