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

S.l.e!ep.¢%

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

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

準(zhǔn)確地講,本文所涉及的內(nèi)容是C++中較難理解的,本文的目的不是在于將它們解釋清楚,因為這需要你循序漸進(jìn)地做很多練習(xí)才可以??聪旅嬉粋€例子:

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

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

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

為什么會對這個表達(dá)式的返回值產(chǎn)生疑問?

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

int a;

這里我們聲明a是一個int類型的變量。而對于返回值,我們通常也是采用類似的方式,如一個返回值為int類型的函數(shù)通??梢砸韵旅娴姆绞竭M(jìn)行聲明:

int func([params]);

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

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

				int 
				(*
				pCompare)(
				int
				, 
				int
				);
		

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

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

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

				PF pCompare;
		

現(xiàn)在我們似乎就一見如故了,現(xiàn)在的表達(dá)式看起來中規(guī)中矩,普通的聲明都是類型名加變量名完成聲明,而函數(shù)指針的聲明則是在一個表達(dá)式中一個固定的位置進(jìn)行聲明。

?

				int 
				(*
				)(
				int
				, 
				int
				);
		

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

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

PF func([params]);

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

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

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

				PF 
				func(
				bool 
				real)
		

至此你應(yīng)該能夠分析更加復(fù)雜的表達(dá)式了。

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

/*
?*?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>
            欧美电影打屁股sp| 合欧美一区二区三区| 亚洲一区精品视频| 亚洲精选大片| 日韩亚洲欧美在线观看| 亚洲人屁股眼子交8| 亚洲国产岛国毛片在线| 亚洲国产一成人久久精品| 亚洲乱码精品一二三四区日韩在线| 欧美激情亚洲国产| 亚洲精品国产精品国自产观看浪潮| 亚洲精品一区中文| 亚洲四色影视在线观看| 久久久久久亚洲精品中文字幕| 久久蜜桃精品| 欧美激情免费在线| 国产精品久久久久久久久免费桃花 | 日韩亚洲欧美在线观看| 一区二区三区四区精品| 欧美一区观看| 欧美激情黄色片| 国产女主播视频一区二区| 亚洲福利一区| 午夜精品视频| 亚洲成色精品| 欧美一级在线播放| 欧美日韩成人在线视频| 国产一区二区三区无遮挡| 日韩午夜在线电影| 久久久久久久综合色一本| 亚洲日韩欧美一区二区在线| 午夜视频精品| 国产精品va在线| 亚洲精品系列| 久久久久久久久久久久久女国产乱| 女主播福利一区| 亚洲国产二区| 欧美一区观看| 亚洲精品欧美专区| 久久精品观看| 国产精品日日摸夜夜添夜夜av| 1769国产精品| 午夜精品福利一区二区蜜股av| 欧美韩国日本综合| 久久精品91久久久久久再现| 国产精品久久久久久久久搜平片| 亚洲精品国产精品国自产观看浪潮 | 久久精品在线免费观看| 国产精品无码永久免费888| 亚洲精品在线视频观看| 麻豆精品视频在线观看| 欧美在线观看视频| 国产精品午夜春色av| 亚洲一区二区三区777| 亚洲人线精品午夜| 欧美日本亚洲视频| 亚洲视频福利| 在线一区二区三区做爰视频网站| 欧美日韩高清不卡| 中文av一区特黄| 一本色道**综合亚洲精品蜜桃冫 | 欧美激情91| 乱中年女人伦av一区二区| 好吊视频一区二区三区四区| 久久久久青草大香线综合精品| 午夜精品短视频| 国产日本欧洲亚洲| 久久精品中文字幕一区| 欧美中文字幕在线视频| 韩国女主播一区二区三区| 久久综合五月天婷婷伊人| 久久这里有精品视频| 亚洲国产小视频在线观看| 欧美激情无毛| 欧美视频在线免费看| 欧美亚洲日本一区| 欧美在线视频免费播放| 狠狠干综合网| 亚洲黄一区二区| 欧美婷婷在线| 久久精品亚洲精品| 免费在线国产精品| 亚洲一区在线免费观看| 午夜免费电影一区在线观看| 国产综合网站| 亚洲国产精品久久精品怡红院| 欧美日韩国产999| 久久精品国产免费看久久精品| 久久女同互慰一区二区三区| 一区二区三区色| 欧美在线三级| 在线亚洲精品| 久久av一区二区三区| 在线成人免费视频| 亚洲在线视频免费观看| 亚洲欧美色一区| 亚洲精品看片| 亚洲女女做受ⅹxx高潮| 亚洲黄色av一区| 亚洲性线免费观看视频成熟| 精品51国产黑色丝袜高跟鞋| 亚洲精品久久7777| 狠狠色丁香婷综合久久| 亚洲精品一区久久久久久| 国产视频不卡| 亚洲六月丁香色婷婷综合久久| 国产视频精品va久久久久久| 91久久精品一区| 黑人一区二区三区四区五区| 亚洲乱码一区二区| 在线观看日韩av先锋影音电影院| 99在线视频精品| 亚洲激情小视频| 久久都是精品| 午夜久久tv| 欧美日韩你懂的| 亚洲大片免费看| 国产主播一区二区| 亚洲影视在线播放| 一区二区毛片| 欧美精品免费看| 欧美激情亚洲一区| 精品99一区二区三区| 亚洲欧美中文另类| 亚洲欧美国产精品专区久久| 欧美精品久久99久久在免费线| 欧美大色视频| 亚洲国产精品久久久久秋霞不卡 | 91久久精品国产91久久性色tv| 国色天香一区二区| 午夜精品影院| 欧美一区二区三区的| 欧美系列亚洲系列| 一本久久青青| 亚洲欧美日本国产专区一区| 欧美日韩国产精品一区| 亚洲国产一成人久久精品| 亚洲黄色尤物视频| 你懂的成人av| 亚洲国产精品成人一区二区| 在线观看成人一级片| 久久综合给合久久狠狠色| 免费不卡视频| 91久久精品国产91久久| 欧美福利视频在线| 亚洲精品美女| 亚洲欧美日韩精品| 国产欧美视频一区二区| 午夜亚洲性色视频| 久久亚洲视频| 亚洲国产日韩欧美在线图片| 欧美+亚洲+精品+三区| 亚洲人成亚洲人成在线观看图片| 99爱精品视频| 国产精品黄视频| 香蕉免费一区二区三区在线观看 | 亚洲一区二区欧美| 久久国产精品色婷婷| 国产女主播在线一区二区| 91久久黄色| 亚洲伊人网站| 国产综合婷婷| 欧美高清一区二区| 在线综合亚洲| 麻豆国产va免费精品高清在线| 亚洲黄色在线| 国产精品乱看| 美玉足脚交一区二区三区图片| 亚洲精品一区二区三区99| 欧美呦呦网站| 亚洲免费观看| 国产欧美日韩亚州综合| 欧美成ee人免费视频| 亚洲无线观看| 欧美激情一区二区三区四区| 亚洲免费中文| 亚洲欧洲日本mm| 国产日韩久久| 欧美日韩国产天堂| 久久国产成人| 亚洲特级片在线| 欧美激情一区二区三区蜜桃视频| 午夜久久久久久| 亚洲精品一二| 影音先锋久久精品| 国产精品日韩欧美一区二区三区 | 欧美三级特黄| 免费观看成人| 午夜精品免费在线| 亚洲美女黄色片| 久久久久国色av免费看影院 | 麻豆成人在线播放| 亚洲图片在区色| 亚洲激情在线播放| 久久一日本道色综合久久| 午夜精品久久久99热福利| 日韩视频在线一区二区| 在线播放中文一区| 国产亚洲欧美日韩在线一区| 国产精品视频久久一区|