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

S.l.e!ep.¢%

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

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

Posted on 2009-02-01 21:59 S.l.e!ep.¢% 閱讀(315) 評論(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>
            久久久久久综合| 在线日韩视频| 欧美成人第一页| 国产精品永久免费| 日韩视频第一页| 亚洲精品国产欧美| 久久久久国产精品一区三寸| 亚洲欧美国产一区二区三区| 欧美精品videossex性护士| 久久婷婷激情| 国产在线观看精品一区二区三区 | 欧美一区二区三区免费大片| 欧美国产日韩一区| 欧美国产三级| 在线欧美日韩| 久久久久国产精品麻豆ai换脸| 久久国产高清| 国产精品视频导航| 亚洲一区二区三区久久| 亚洲欧美精品| 国产精品欧美在线| 亚洲影视在线| 久久精品国产亚洲高清剧情介绍| 国产精品入口福利| 午夜精品美女久久久久av福利| 亚洲综合日本| 国产女优一区| 久久国产成人| 欧美大尺度在线| 亚洲欧洲一级| 欧美精品日日鲁夜夜添| 日韩视频免费观看高清在线视频| 一级日韩一区在线观看| 欧美日韩国产成人高清视频| 亚洲精品永久免费| 亚洲欧美国产精品专区久久| 国产精品视频男人的天堂| 在线一区二区三区做爰视频网站| 亚洲在线电影| 韩国女主播一区| 免费成人av| 日韩午夜在线观看视频| 午夜亚洲激情| 韩曰欧美视频免费观看| 蜜臀91精品一区二区三区| 亚洲日韩成人| 亚洲欧洲av一区二区| 国语自产精品视频在线看8查询8| 久久亚洲春色中文字幕| 亚洲人精品午夜| 久久av二区| 亚洲激情网站| 国产精品男gay被猛男狂揉视频| 久久精品99国产精品| 亚洲第一页自拍| 午夜欧美大片免费观看| 激情91久久| 欧美亚州一区二区三区 | 一区二区高清视频在线观看| 久久精精品视频| 亚洲日韩欧美一区二区在线| 国产精品久久久久久av福利软件| 久久成人综合网| 99国产精品一区| 美女脱光内衣内裤视频久久影院 | 欧美激情综合在线| 亚洲欧美美女| 亚洲国产一区视频| 久久国产福利| 99国产精品久久久久久久成人热| 国产日韩欧美一区| 欧美日韩国内| 久久综合成人精品亚洲另类欧美| 中国成人黄色视屏| 欧美成人在线网站| 久久电影一区| 亚洲一区免费视频| 亚洲精品久久久蜜桃 | 一区二区三区四区五区精品| 国产主播一区二区三区| 国产精品成人一区二区| 免费观看久久久4p| 久久精品久久综合| 亚洲字幕一区二区| 99国产精品久久久久久久久久 | 国产一区二区三区不卡在线观看 | 亚洲理论在线| 精品av久久久久电影| 国产精品男女猛烈高潮激情| 欧美精品一区二区三区在线播放| 久久精品网址| 亚洲欧美激情精品一区二区| 一本色道久久综合| 亚洲国产小视频在线观看| 免费的成人av| 免费日韩一区二区| 美女999久久久精品视频| 久久久九九九九| 欧美在线免费视屏| 午夜久久福利| 先锋影音一区二区三区| 小黄鸭精品密入口导航| 亚洲欧美精品在线| 亚洲综合日韩中文字幕v在线| 亚洲免费观看在线观看| 999亚洲国产精| 艳妇臀荡乳欲伦亚洲一区| 日韩一区二区精品葵司在线| 99精品久久| 在线亚洲成人| 亚洲香蕉网站| 亚洲欧美中文字幕| 久久se精品一区精品二区| 久久福利资源站| 久久天天躁狠狠躁夜夜爽蜜月| 久久婷婷综合激情| 欧美成人一品| 亚洲开发第一视频在线播放| 日韩亚洲欧美在线观看| 亚洲香蕉网站| 欧美一区二区在线播放| 久久久爽爽爽美女图片| 欧美.日韩.国产.一区.二区| 欧美好吊妞视频| 欧美日韩在线观看一区二区三区 | 国产女人aaa级久久久级| 国产日产欧美一区| 亚洲国产黄色| 亚洲私拍自拍| 欧美在线免费一级片| 久久综合久久88| 亚洲欧洲精品天堂一级| 亚洲一区二区三区中文字幕| 欧美在线一二三区| 美日韩精品视频| 国产精品xvideos88| 狠狠色伊人亚洲综合网站色| 亚洲人线精品午夜| 欧美亚洲三区| 亚洲成色777777女色窝| 中文网丁香综合网| 久久久欧美精品| 欧美视频一区二区三区在线观看| 国产一区二区无遮挡| 亚洲免费电影在线| 欧美在线欧美在线| 亚洲国产乱码最新视频| 亚洲一区三区在线观看| 欧美xxx在线观看| 国产精品视频久久一区| 91久久久亚洲精品| 久久高清免费观看| 亚洲日本成人网| 欧美专区在线观看一区| 欧美日韩视频第一区| 一区二区在线不卡| 亚洲欧美日韩国产精品| 亚洲第一精品夜夜躁人人躁 | 一区二区三区视频免费在线观看| 久久精品99| 国产精品久久久久毛片大屁完整版| 伊人久久男人天堂| 午夜日韩av| 99综合精品| 美国十次成人| 国内精品视频一区| 午夜精品久久久久久99热软件 | 日韩亚洲一区二区| 久久嫩草精品久久久久| 国产精品资源| 亚洲视频axxx| 91久久极品少妇xxxxⅹ软件| 久久精品一级爱片| 国产亚洲精品资源在线26u| 亚洲欧美精品中文字幕在线| 91久久久一线二线三线品牌| 久久免费视频网| 国内视频一区| 久久男人资源视频| 亚洲欧美日韩另类| 国产精品一二三视频| 亚洲一级网站| 99国产精品99久久久久久粉嫩| 欧美黄色一级视频| 亚洲人成绝费网站色www| 欧美大尺度在线观看| 久久亚洲风情| 亚洲国产视频一区二区| 欧美搞黄网站| 欧美bbbxxxxx| 最新成人av网站| 91久久在线视频| 欧美日产国产成人免费图片| 亚洲另类自拍| 亚洲欧洲一区二区在线观看| 欧美乱大交xxxxx| 一区二区三区精品| 一区二区三区导航| 国产精品一区二区三区免费观看| 亚洲欧美综合精品久久成人|