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

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>
            久久一区二区三区av| 亚洲国产日韩欧美在线动漫| 一区二区三区精品视频| 欧美人在线观看| 日韩午夜av电影| 99热在这里有精品免费| 国产精品九九| 久久久久国产精品一区二区| 久久频这里精品99香蕉| 亚洲美女区一区| 亚洲小说欧美另类婷婷| 国产亚洲欧美一区| 欧美国产日本高清在线| 欧美日韩国产色站一区二区三区| 亚洲午夜在线| 久久精品99国产精品酒店日本| 亚洲国产精品久久人人爱蜜臀| 亚洲激情网站免费观看| 国产精品美女久久久久久久| 美腿丝袜亚洲色图| 欧美三级中文字幕在线观看| 久久亚洲二区| 欧美另类在线观看| 久久精品欧洲| 欧美精品情趣视频| 久久精品视频免费| 欧美日本在线看| 久久中文欧美| 国产精品国产三级国产普通话蜜臀| 久久久久久久尹人综合网亚洲| 欧美成年人视频网站| 久久久av水蜜桃| 欧美日韩国产小视频| 欧美一区二区三区喷汁尤物| 欧美成人影音| 久久天堂国产精品| 国产精品美女一区二区| 亚洲国内精品在线| 在线不卡a资源高清| 亚洲综合不卡| 亚洲少妇中出一区| 欧美大片国产精品| 久久久一区二区| 国产精品亚洲综合色区韩国| 亚洲国产免费看| 亚洲大片av| 久久国产欧美日韩精品| 亚洲影院免费观看| 欧美三级视频在线| 亚洲黄色影院| 亚洲高清视频在线| 久久九九热re6这里有精品| 亚洲男人天堂2024| 国产精品国产自产拍高清av| 亚洲国产一区在线观看| 91久久精品网| 女人天堂亚洲aⅴ在线观看| 久久人人97超碰精品888| 国产乱码精品一区二区三区忘忧草| 亚洲伦理在线| 99爱精品视频| 欧美老女人xx| 亚洲美女在线看| 亚洲视频自拍偷拍| 欧美日韩精品伦理作品在线免费观看| 欧美激情一区二区三级高清视频| 在线观看精品一区| 六月婷婷一区| 亚洲黄网站在线观看| 99视频精品免费观看| 欧美日韩精品一区二区在线播放 | 国产麻豆日韩欧美久久| 亚洲深夜福利在线| 亚洲欧美国产精品专区久久| 国产精品日韩欧美| 午夜在线观看欧美| 久久综合国产精品台湾中文娱乐网| 国产色产综合色产在线视频| 久久成人羞羞网站| 牛夜精品久久久久久久99黑人| 在线观看成人av| 欧美国产视频在线| 一区二区精品在线| 久久av一区二区三区亚洲| 国产综合香蕉五月婷在线| 久久综合狠狠综合久久综合88| 亚洲高清视频在线观看| 亚洲图片在区色| 国产三级精品三级| 老司机一区二区三区| 日韩视频在线观看| 欧美一级片久久久久久久 | 欧美福利小视频| 一本大道久久a久久精品综合 | 精品不卡一区二区三区| 免费在线国产精品| 一本大道久久精品懂色aⅴ| 欧美专区在线观看| 亚洲国产精品久久人人爱蜜臀 | 亚洲国产一区二区三区高清 | 亚洲午夜精品在线| 久久一综合视频| 在线亚洲高清视频| 国产一区视频网站| 欧美日韩成人精品| 欧美中文在线观看国产| 亚洲精品之草原avav久久| 久久精品国产77777蜜臀 | 国产精品日韩电影| 免费在线国产精品| 性一交一乱一区二区洋洋av| 亚洲福利在线视频| 欧美综合国产| 一区二区三区高清不卡| 在线观看欧美日韩| 国产欧美一区二区三区在线老狼| 免费在线观看成人av| 欧美一区二区三区免费观看视频| 最近看过的日韩成人| 久久久久久噜噜噜久久久精品| 99re6热在线精品视频播放速度 | 欧美电影电视剧在线观看| 亚洲在线第一页| 亚洲伦理久久| 亚洲人www| 美女黄网久久| 久久久人成影片一区二区三区| 在线视频欧美一区| 亚洲精品免费一区二区三区| 狠狠色丁香婷婷综合久久片| 国产精品美女久久久久av超清 | 国语自产精品视频在线看8查询8| 欧美三级电影一区| 欧美日韩亚洲视频一区| 欧美不卡三区| 欧美a级一区| 蜜桃久久精品乱码一区二区| 久久狠狠久久综合桃花| 久久se精品一区二区| 欧美一级一区| 欧美一区二区三区在线视频| 亚洲综合国产激情另类一区| 一区二区三区高清| 亚洲视频在线观看免费| 妖精成人www高清在线观看| 99国产精品99久久久久久粉嫩 | 亚洲男人第一av网站| 亚洲一区二区三区高清 | 日韩一区二区精品在线观看| 日韩视频―中文字幕| 最新亚洲电影| 一本色道久久加勒比88综合| 99在线热播精品免费99热| 99综合精品| 亚洲综合日韩在线| 久久精品国产久精国产一老狼| 欧美诱惑福利视频| 卡通动漫国产精品| 欧美电影在线播放| 亚洲精品乱码久久久久久蜜桃麻豆| 亚洲三级影片| 在线视频欧美一区| 性刺激综合网| 久久综合精品国产一区二区三区| 欧美激情精品久久久久久| 欧美日韩伦理在线| 国产精品一区二区a| 国产一区二区三区在线观看精品| 国内成+人亚洲| 91久久亚洲| 亚洲午夜在线观看| 久久天天综合| 亚洲国产精品va在看黑人| 在线性视频日韩欧美| 午夜免费久久久久| 女主播福利一区| 欧美性猛片xxxx免费看久爱| 国产揄拍国内精品对白| 亚洲国产天堂久久国产91| 亚洲一区二区三区中文字幕| 久久久久国产精品一区三寸 | 欧美一区二区三区视频在线观看| 久久婷婷国产综合国色天香| 亚洲国产日韩欧美在线99| 午夜精品久久久久久久99樱桃 | 久久午夜影视| 国产精品大全| 亚洲黄色免费| 羞羞答答国产精品www一本| 亚洲东热激情| 欧美有码视频| 国产精品第一区| 亚洲精品日韩在线| 久久国产精品一区二区三区| 亚洲精品一二| 蜜臀av一级做a爰片久久| 国产日韩一区二区三区在线播放| av成人手机在线| 欧美成人xxx| 久久成年人视频|