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

S.l.e!ep.¢%

像打了激速一樣,以四倍的速度運轉,開心的工作
簡單、開放、平等的公司文化;尊重個性、自由與個人價值;
posts - 1098, comments - 335, trackbacks - 0, articles - 1
  C++博客 :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理

指向函數的指針的一點理解 (轉)

Posted on 2009-02-01 21:59 S.l.e!ep.¢% 閱讀(314) 評論(0)  編輯 收藏 引用 所屬分類: C++

指向函數的指針的一點理解

準確地講,本文所涉及的內容是C++中較難理解的,本文的目的不是在于將它們解釋清楚,因為這需要你循序漸進地做很多練習才可以。看下面一個例子:

				int 
				(*func(
				bool 
				real))(
				int
				, 
				int
				)
		

你覺得它的返回值是什么?

這里就涉及到了如何理解指向函數的指針的問題了。一些來自C++教材的建議是從里向外解讀這個表達式,這里所謂的里面就是func(bool real),那么剩下的部分就是所謂的返回值了?有點生硬吧。下面就讓我們循序漸進地看看如何理解更好?

為什么會對這個表達式的返回值產生疑問?

要解決問題通常需要找出問題所在,這里是基于這樣一種思維定勢,那就是我們通常習慣于這樣一種聲明變量的方式:

int a;

這里我們聲明a是一個int類型的變量。而對于返回值,我們通常也是采用類似的方式,如一個返回值為int類型的函數通常可以以下面的方式進行聲明:

int func([params]);

因此我們慣性地認為返回值就是最左側的一個類型名,雖然這通常是對的,但是針對上面的那個例子則顯得十分尷尬。

讓我們看看一個指向函數的指針的聲明式:

				int 
				(*
				pCompare)(
				int
				, 
				int
				);
		

這個指針的名字就是pCompare,令人奇怪的是pCompare并不是在整個聲明式的最右邊,類型也肯定不是int,而是一個復雜的表達式。讓我們用typedef來聲明就會發現typedef的使用也不太一樣。

				typedef int 
				(*
				PF
				)(
				int
				, 
				int
				);
		

我們發現跟慣用的typedef *** ???;的方式也截然不同,在上面這個typedef過后,整個表達式可以被簡化成:

				PF pCompare;
		

現在我們似乎就一見如故了,現在的表達式看起來中規中矩,普通的聲明都是類型名加變量名完成聲明,而函數指針的聲明則是在一個表達式中一個固定的位置進行聲明。

?

				int 
				(*
				)(
				int
				, 
				int
				);
		

在上文中劃線的部分即為聲明的部分,也就是這點不同讓我們逐漸迷失了方向。

現在讓我們寫一個返回指向函數的指針的函數,也就是返回值是PF的函數,這就像我們從返回int類型的變量到返回int類型值的函數一樣,因此使用以下方式即可:

PF func([params]);

現在讓我們擴展PF,將它還原,也就是把右側的func([params])部分移到那個橫線的位置上。現在我們就可以很輕松地理解本文開頭的那個函數,原來是返回值為int (*)(int, int)的函數

				int 
				(*func(
				
						bool 
				
				
						real))(
				int
				, 
				int
				)
		

以上劃線的部分也就是一個函數扣除返回值的部分。也就等價于

				PF 
				func(
				bool 
				real)
		

至此你應該能夠分析更加復雜的表達式了。

下面的示例旨在幫助理解本文:

/*
?*?main.cc
?*
?*??Created?on:?2009-2-1
?*??????Author:?Volnet
?
*/

#include?
< stdlib.h >
#include?
< iostream >
using ?std::cout;
using ?std::endl;

int ?myCompare1(
????????
int ?a,? int ?b,
????????
int ?( * Compare)( int ,? int ));
int ?realCompare( int ?a,? int ?b);
int ?fakeCompare( int ?a,? int ?b);

typedef?
int ?( * PF)( int ,? int );
int ?myCompare2(
????????
int ?a,? int ?b,
????????PF?Compare);

PF?getAPointerFunc1(
bool ?real);
int ?( * getAPointerFunc2( bool ?real))( int ,? int );

int ?main( void ){
????
int ?typeDeclared;
????typeDeclared?
= ? 1 ;

????
// PF?pCompare;
???? int ?( * pCompare)( int ,? int );

????
if (pCompare? == ?NULL)
????????cout
<< " pCompare?==?NULL " << endl;
????
else
????{
????????cout
<< " pCompare?!=?NULL " << " ?pComapre?=? " << pCompare << endl;
????}

????cout
<< " Compare?the?pointer?function. " << endl;
????cout
<< " The?compare?result?is?:? " <<
????????myCompare1(
6 ,? 5 ,?realCompare) << endl;

????cout
<< " It's?the?same?to?invoke?realCompare?&?*realCompare?:? " <<
????????myCompare1(
6 ,? 5 ,? * realCompare) << endl;

????cout
<< " Using?the?typedef?to?predigest?definition?:? " <<
????????myCompare2(
8 ,? 7 ,?realCompare) << endl;

????cout
<< " Return?a?pointer?from?a?function?:? " <<
????????myCompare2(
10 ,? 20 ,?getAPointerFunc1( true )) << endl;

????cout
<< " Return?a?pointer?from?a?function?:? " <<
????????myCompare2(
20 ,? 30 ,?getAPointerFunc2( false )) << endl;

????
return ?EXIT_SUCCESS;
}

int ?myCompare1(
????????
int ?a,? int ?b,
????????
int ?( * Compare)( int ,? int )){
????
return ?Compare(a,?b);
}
int ?realCompare( int ?a,? int ?b){
????cout
<< " The?realCompare?has?be?invoked. " << endl;
????
if (a? == ?b)
????????
return ? 0 ;
????
if (a? < ?b)
????????
return ? - 1 ;
????
else
????????
return ? 1 ;
}

int ?fakeCompare( int ?a,? int ?b){
????cout
<< " The?fackCompare?has?be?invoked. " << endl;
????
return ? 200 ;
}

int ?myCompare2(
????????
int ?a,? int ?b,
????????PF?Compare){
????
return ?Compare(a,?b);
}

PF?getAPointerFunc1(
bool ?real){
????
if (real)
????????
return ?realCompare;
????
else ? return ?fakeCompare;
}

int ?( * getAPointerFunc2( bool ?real))( int ,? int ){
????
if (real)
????????
return ?realCompare;
????
else ? return ?fakeCompare;
}

?


青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <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>
            亚洲第一网站| 国产日韩欧美视频| 亚洲第一中文字幕| 欧美顶级少妇做爰| 欧美xart系列高清| 亚洲电影下载| 亚洲国产综合91精品麻豆| 亚洲黄色视屏| 亚洲无限乱码一二三四麻| 亚洲性色视频| 久久精品亚洲| 欧美成人免费网| 欧美日韩第一区| 国产精品视区| 亚洲国产高清一区| 99香蕉国产精品偷在线观看| 亚洲欧美福利一区二区| 久久综合免费视频影院| 亚洲日本aⅴ片在线观看香蕉| 亚洲视频精选| 久久久久久午夜| 欧美激情一区二区三区在线 | 麻豆精品网站| 欧美日韩在线观看一区二区三区| 国产精品一区二区男女羞羞无遮挡| 国产自产精品| 亚洲手机成人高清视频| 欧美在线啊v一区| 国产免费一区二区三区香蕉精| 国内视频一区| 一本色道久久| 久久久亚洲高清| 亚洲每日在线| 久久久久99精品国产片| 欧美区亚洲区| 一区二区三区自拍| 亚洲欧美精品中文字幕在线| 麻豆av一区二区三区| 制服诱惑一区二区| 欧美www在线| 国产亚洲精品久久久久婷婷瑜伽| 夜夜嗨av一区二区三区中文字幕| 久久亚洲影院| 亚洲一级免费视频| 欧美另类亚洲| 亚洲激情在线视频| 久久躁狠狠躁夜夜爽| 亚洲免费中文字幕| 欧美视频网站| 99精品视频免费观看视频| 老司机午夜精品| 亚洲欧美中日韩| 国产精品极品美女粉嫩高清在线| 亚洲精品欧美精品| 亚洲国产mv| 免费人成网站在线观看欧美高清| 国模私拍一区二区三区| 欧美一级专区| 午夜国产不卡在线观看视频| 欧美视频网站| 亚洲永久免费观看| 夜夜嗨av一区二区三区网页| 欧美人妖在线观看| 99精品久久久| 一区二区三区日韩欧美| 欧美日韩午夜剧场| 亚洲网站在线播放| 一区二区三区不卡视频在线观看 | 国产亚洲亚洲| 久久精品99国产精品酒店日本| 亚洲一区二区在| 国产精品欧美经典| 久久福利电影| 欧美在线视频日韩| 在线观看福利一区| 亚洲国产裸拍裸体视频在线观看乱了中文| 久久综合成人精品亚洲另类欧美| 在线色欧美三级视频| 乱码第一页成人| 欧美成人免费在线观看| 一区二区欧美日韩视频| 亚洲一区二区影院| 亚洲高清免费视频| 亚洲精品精选| 国产欧美日韩麻豆91| 久久午夜精品| 欧美另类在线播放| 黄色av成人| 亚洲国产精品小视频| 欧美日韩国产影院| 欧美在线首页| 欧美激情片在线观看| 亚洲少妇在线| 欧美在线免费观看亚洲| 亚洲国产精品一区二区久| 日韩一区二区电影网| 国产综合欧美| 亚洲美女精品成人在线视频| 国产精自产拍久久久久久蜜| 欧美福利视频网站| 国产精品实拍| 亚洲国产精品视频| 国产视频一区在线| 亚洲精品视频免费观看| 韩日欧美一区二区三区| 亚洲人成小说网站色在线 | 亚洲人成在线观看| 午夜欧美不卡精品aaaaa| 亚洲国产精品久久久| 亚洲视频欧美视频| 最近中文字幕mv在线一区二区三区四区| 99在线精品视频| 亚洲国产精品毛片| 欧美在线日韩| 亚洲一区二区毛片| 美女成人午夜| 久久国产欧美日韩精品| 欧美日韩国产免费观看| 欧美a级片网| 国产日韩精品在线播放| 亚洲毛片av在线| 亚洲精品社区| 噜噜爱69成人精品| 久久亚洲精品一区| 国产精品一区二区在线观看不卡| 最新国产精品拍自在线播放| 在线观看中文字幕亚洲| 欧美诱惑福利视频| 欧美一区2区三区4区公司二百 | 136国产福利精品导航网址| 中国av一区| 亚洲欧美日本伦理| 国产精品大片wwwwww| 亚洲第一在线视频| 亚洲国产女人aaa毛片在线| 久久久久久亚洲综合影院红桃 | 亚洲免费高清视频| 日韩视频在线观看一区二区| 男男成人高潮片免费网站| 久久午夜精品一区二区| 好吊日精品视频| 久久伊人免费视频| 蜜臀久久久99精品久久久久久| 国模私拍一区二区三区| 久久av一区| 裸体丰满少妇做受久久99精品| 国产亚洲网站| 久久久久久久综合| 亚洲大胆女人| 亚洲精品视频免费| 欧美日韩精品一区二区三区四区| 欧美在线观看你懂的| 欧美国产第一页| 欧美国产第二页| 亚洲国产精品电影在线观看| 久久婷婷人人澡人人喊人人爽| 久久亚洲免费| 亚洲欧洲日夜超级视频| 欧美日本国产视频| 亚洲小视频在线| 久久久久国产成人精品亚洲午夜| 黄色成人av网站| 免费影视亚洲| 亚洲最新中文字幕| 久久久91精品国产一区二区三区| 经典三级久久| 欧美日韩精品免费| 久久成人免费网| 亚洲国产99| 欧美一区二区三区免费大片| 黄色欧美日韩| 欧美性做爰猛烈叫床潮| 性欧美暴力猛交69hd| 欧美国产精品一区| 亚洲伊人网站| 黄色一区三区| 欧美日韩午夜剧场| 久久视频在线视频| 亚洲午夜精品一区二区三区他趣| 久久亚洲精品视频| 亚洲欧美日韩电影| 亚洲激情综合| 国产偷国产偷亚洲高清97cao| 欧美成黄导航| 午夜精品视频| 99国产欧美久久久精品| 蜜桃av综合| 久久成人精品| 亚洲性感美女99在线| 亚洲电影毛片| 国产欧美一区二区精品性| 欧美成人黑人xx视频免费观看| 亚洲欧美日韩视频一区| 最新中文字幕一区二区三区| 久久九九电影| 亚洲综合日韩| 亚洲精品看片| 在线日韩视频| 激情欧美一区二区| 国产日韩在线看片|