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

kenlistian

厚積薄發(fā). 勤為槳,思為帆

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

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

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

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

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

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

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

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

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

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

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

   typedef void (*pFun)();

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

  這樣函數(shù)變?yōu)?(*(pFun)0)();


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

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

2.用typedef定義一個指針函數(shù):
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++類中使用函數(shù)指針。
//typedef 返回類型(類名::*新類型)(參數(shù)表)
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);
}


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


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

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: 匯總函數(shù)指針理解[未登錄] 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>
            欧美影院一区| 久久久人成影片一区二区三区观看 | 小黄鸭精品密入口导航| 亚洲天堂成人| 亚洲一区在线直播| 欧美一区二区视频在线| 亚洲一二区在线| 亚洲影院在线观看| 亚洲一区二区三区视频播放| 亚洲欧美一区二区三区在线| 亚洲欧美制服另类日韩| 久久久久久穴| 91久久精品久久国产性色也91 | 欧美国产视频日韩| 亚洲精品在线观| 午夜日韩视频| 欧美大香线蕉线伊人久久国产精品| 欧美日韩国产精品一区二区亚洲| 欧美天天在线| 一色屋精品视频免费看| av不卡在线观看| 久久夜色精品| 在线亚洲美日韩| 久久亚洲色图| 国产精品视频男人的天堂| 在线观看一区二区精品视频| 中文欧美字幕免费| 免费看av成人| 亚洲亚洲精品在线观看| 免费欧美高清视频| 国产日产欧产精品推荐色| 亚洲精品一区二区三区四区高清| 欧美一级视频免费在线观看| 亚洲福利精品| 久久国产视频网| 国产精品免费在线| 在线综合+亚洲+欧美中文字幕| 久久久综合免费视频| 中文在线不卡视频| 欧美日韩国产在线播放| 亚洲高清在线观看| 久久久久天天天天| 亚洲天堂免费观看| 欧美日韩色婷婷| 亚洲欧洲一区二区天堂久久 | 亚洲国产一区二区视频| 欧美在线在线| 亚洲国产一区在线| 欧美精品1区| 欧美 日韩 国产在线| 久久在线91| 裸体一区二区三区| 亚洲一区在线直播| 国产精品成人播放| 亚洲伊人一本大道中文字幕| 在线一区观看| 亚洲系列中文字幕| 母乳一区在线观看| 性欧美8khd高清极品| 国产精品久久久久久久久久免费看| 亚洲精品护士| 亚洲成在线观看| 亚洲神马久久| 亚洲网站在线| 免费成人黄色av| 国产一区二区三区成人欧美日韩在线观看 | 亚洲国产欧美一区二区三区久久 | 国语自产精品视频在线看一大j8| 亚洲视频碰碰| 亚洲影院色无极综合| 国产精品久久久久久久久久三级| 午夜精彩视频在线观看不卡| 亚洲永久字幕| 狠狠入ady亚洲精品经典电影| 久久嫩草精品久久久久| 久久青青草原一区二区| 亚洲激情自拍| aa亚洲婷婷| 国产亚洲福利一区| 麻豆精品在线观看| 欧美jizzhd精品欧美喷水 | 国产午夜精品久久久| 久久综合九色综合久99| 免费视频一区| 亚洲视频久久| 欧美在线视频网站| 亚洲精品国产精品乱码不99按摩| 亚洲免费av观看| 国产午夜亚洲精品羞羞网站 | 最近看过的日韩成人| 欧美日韩高清区| 欧美中文在线观看| 免费一级欧美片在线观看| 亚洲视频在线看| 久久精品中文字幕一区| 国产精品99久久久久久www| 亚洲欧美日韩天堂一区二区| 亚洲高清久久久| 亚洲一区二区三区乱码aⅴ| 在线精品视频在线观看高清| 亚洲免费久久| 在线精品亚洲| 亚洲欧美成人综合| 亚洲人成在线播放| 欧美在线播放高清精品| 在线亚洲精品福利网址导航| 久久美女艺术照精彩视频福利播放| 亚洲国产精品久久久久久女王| 欧美色一级片| 欧美成人中文字幕在线| 国产精品丝袜久久久久久app| 欧美韩日亚洲| 国内精品免费在线观看| 亚洲私拍自拍| 正在播放亚洲| 欧美二区在线| 久久综合狠狠综合久久综合88| 欧美日韩精品一区二区天天拍小说| 久久综合九色欧美综合狠狠| 国产精品亚洲激情| 日韩一区二区精品葵司在线| 亚洲成人影音| 久久精选视频| 久久久久久久久蜜桃| 国产精品扒开腿爽爽爽视频| 亚洲国产精品第一区二区| 黄色亚洲网站| 亚洲免费在线视频| 亚洲欧美国内爽妇网| 欧美三级乱码| 99视频精品全部免费在线| 亚洲靠逼com| 免费国产自线拍一欧美视频| 另类图片综合电影| 黄色精品在线看| 久久久久国产一区二区三区| 欧美中文日韩| 国产乱码精品一区二区三区五月婷 | 欧美区国产区| 91久久夜色精品国产九色| 亚洲人成在线播放| 欧美国产视频一区二区| 亚洲日本一区二区| 一二三区精品福利视频| 欧美日韩的一区二区| 一本久久综合| 午夜久久99| 国内成人精品一区| 久久人人97超碰精品888| 久久综合伊人| 亚洲欧洲在线观看| 欧美精品一区二区久久婷婷| 91久久国产综合久久蜜月精品| 99精品久久| 国产精品捆绑调教| 亚洲女女做受ⅹxx高潮| 久久久精品tv| 经典三级久久| 欧美激情综合在线| 一区二区欧美国产| 欧美一区免费| 在线免费观看欧美| 欧美精品videossex性护士| 99re6这里只有精品| 久久精品国产综合精品| 亚洲国产天堂网精品网站| 久久大逼视频| 久久久久久**毛片大全| 美女精品在线观看| 亚洲免费av网站| 国产精品视频内| 久久这里只有| 中日韩午夜理伦电影免费| 久久久久久网址| 99在线热播精品免费| 国产日韩av一区二区| 欧美.com| 午夜精品在线观看| 亚洲国产一区二区三区高清| 欧美一区二区视频免费观看| 亚洲乱码视频| 韩国免费一区| 国产精品久在线观看| 另类亚洲自拍| 亚洲一区二区三区影院| 欧美成人精品激情在线观看| 亚洲午夜精品一区二区| 精品成人在线视频| 国产精品老女人精品视频| 欧美成人精品福利| 欧美综合国产精品久久丁香| 一区二区不卡在线视频 午夜欧美不卡在 | 国产精品区免费视频| 欧美99久久| 久久精品国产亚洲一区二区三区| 一级日韩一区在线观看| 亚洲日本va午夜在线电影| 奶水喷射视频一区| 久久国内精品视频| 亚洲一区二区三区四区五区黄 |