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

在下列函數聲明中,為什么要同時使用*和&符號?以及什么場合使用這種聲明方式?
 void func1( MYCLASS *&pBuildingElement );

論壇中經常有人問到這樣的問題。本文試圖通過一些實際的指針使用經驗來解釋這個問題。
仔細看一下這種聲明方式,確實有點讓人迷惑。在某種意義上,"*"和"&"是意思相對的兩個東西,把它們放在一起有什么意義呢?。為了理解指針的這種做法,我們先復習一下C/C++編程中無所不在的指針概念。我們都知道MYCLASS*的意思:指向某個對象的指針,此對象的類型為MYCLASS。
 void func1(MYCLASS *pMyClass);
// 例如:
 MYCLASS* p = new MYCLASS;
 func1(p);

上面這段代碼的這種處理方法想必誰都用過,創建一個MYCLASS對象,然后將它傳入func1函數。現在假設此函數要修改pMyClass:
 void func1(MYCLASS *pMyClass)
 {
 DoSomething(pMyClass);
 pMyClass = // 其它對象的指針
 }
 
第二條語句在函數過程中只修改了pMyClass的值。并沒有修改調用者的變量p的值。如果p指向某個位于地址0x008a00的對象,當func1返回時,它仍然指向這個特定的對象。(除非func1有bug將堆弄亂了,完全有這種可能。)
現在假設你想要在func1中修改p的值。這是你的權利。調用者傳入一個指針,然后函數給這個指針賦值。以往一般都是傳雙指針,即指針的指針,例如,CMyClass**。
 MYCLASS* p = NULL;
 func1(&p);
 
 void func1(MYCLASS** pMyClass);
 {
 *pMyClass = new MYCLASS;
 ……
 }

調用func1之后,p指向新的對象。在COM編程中,你到處都會碰到這樣的用法--例如在查詢對象接口的QueryInterface函數中:
interface ISomeInterface {
 HRESULT QueryInterface(IID &iid, void** ppvObj);
 ……
 };
 LPSOMEINTERFACE p=NULL;
 pOb->QueryInterface(IID_SOMEINTERFACE, &p);

此處,p是SOMEINTERFACE類型的指針,所以&p便是指針的指針,在QueryInterface返回的時候,如果調用成功,則變量p包含一個指向新的接口的指針。
如果你理解指針的指針,那么你肯定就理解指針引用,因為它們完全是一回事。如果你象下面這樣聲明函數:

void func1(MYCLASS *&pMyClass);
 {
 pMyClass = new MYCLASS;
 ……
 }

其實,它和前面所講得指針的指針例子是一碼事,只是語法有所不同。傳遞的時候不用傳p的地址&p,而是直接傳p本身:

MYCLASS* p = NULL;
 func1(p);


在調用之后,p指向一個新的對象。一般來講,引用的原理或多或少就象一個指針,從語法上看它就是一個普通變量。所以只要你碰到*&,就應該想到**。也就是說這個函數修改或可能修改調用者的指針,而調用者象普通變量一樣傳遞這個指針,不使用地址操作符&。
至于說什么場合要使用這種方法,我會說,極少。MFC在其集合類中用到了它--例如,CObList,它是一個CObjects指針列表。
 class CObList : public CObject {
 ……

 // 獲取/修改指定位置的元素
 CObject*& GetAt(POSITION position);
 CObject* GetAt(POSITION position) const;
 };

這里有兩個GetAt函數,功能都是獲取給定位置的元素。區別何在呢?
區別在于一個讓你修改列表中的對象,另一個則不行。所以如果你寫成下面這樣:
 CObject* pObj = mylist.GetAt(pos);

則pObj是列表中某個對象的指針,如果接著改變pObj的值:
 pObj = pSomeOtherObj;

這并改變不了在位置pos處的對象地址,而僅僅是改變了變量pObj。但是,如果你寫成下面這樣:
CObject*& rpObj = mylist.GetAt(pos);

現在,rpObj是引用一個列表中的對象的指針,所以當改變rpObj時,也會改變列表中位置pos處的對象地址--換句話說,替代了這個對象。這就是為什么CObList會有兩個GetAt函數的緣故。一個可以修改指針的值,另一個則不能。注意我在此說的是指針,不是對象本身。這兩個函數都可以修改對象,但只有*&版本可以替代對象。
在C/C++中引用是很重要的,同時也是高效的處理手段。所以要想成為C/C++高手,對引用的概念沒有透徹的理解和熟練的應用是不行的。
Posted on 2005-12-31 10:12 艾凡赫 閱讀(209) 評論(0)  編輯 收藏 引用 所屬分類: C++
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <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| 免费一级欧美片在线观看| 日韩一级不卡| 久久婷婷国产麻豆91天堂| 国产精品久久久久久久久借妻| 一区二区视频免费在线观看| 欧美一区二区三区免费观看视频| 亚洲黄色免费| 亚洲深夜福利视频| 欧美人成在线视频| 亚洲精品少妇30p| 亚洲国产精品va| 欧美大片在线观看一区| 亚洲欧洲一区二区在线播放| 欧美国产综合| 欧美黑人一区二区三区| 亚洲免费观看高清完整版在线观看| 欧美激情一区三区| 欧美国产精品专区| 亚洲天堂视频在线观看| 亚洲影院一区| 国产一区二区三区的电影 | 在线一区亚洲| 亚洲精品在线看| 欧美日韩理论| 香蕉久久夜色精品| 久久精品视频在线| 亚洲人成欧美中文字幕| 日韩西西人体444www| 欧美小视频在线观看| 欧美在线视频观看免费网站| 亚洲尤物精选| 国内欧美视频一区二区| 亚洲国产成人av| 欧美日韩福利视频| 午夜宅男欧美| 久久亚洲春色中文字幕| 99视频有精品| 日韩网站在线| 欧美无砖砖区免费| 久久久国产精品亚洲一区| 欧美 日韩 国产 一区| 亚洲网站在线| 久久久91精品国产一区二区精品| 亚洲三级电影全部在线观看高清| 夜夜嗨一区二区三区| 黄色成人av网| 日韩视频在线永久播放| 国产综合欧美| 亚洲精选在线观看| 韩国三级在线一区| 99亚洲伊人久久精品影院红桃| 日韩午夜三级在线| 老色批av在线精品| 在线亚洲美日韩| 欧美中文字幕视频在线观看| 99热精品在线| 久久久久久噜噜噜久久久精品| 亚洲精品国产精品国自产在线 | 久久精品欧美| 欧美日韩成人在线播放| 久久免费视频网站| 国产精品v一区二区三区| 免费日韩一区二区| 国产精品一区二区在线观看| 亚洲国产美女精品久久久久∴| 国产麻豆精品theporn| 亚洲黄色成人久久久| 黄色亚洲精品| 午夜在线不卡| 亚洲欧美偷拍卡通变态| 欧美精品1区2区| 欧美jizzhd精品欧美巨大免费| 国产乱子伦一区二区三区国色天香 | 欧美成人tv| 久久久国产精品一区二区三区| 国产精品v片在线观看不卡| 亚洲国产福利在线| 合欧美一区二区三区| 亚洲一区一卡| 亚洲欧美成人一区二区在线电影| 欧美成人综合| 欧美激情一区二区三区在线视频| 国产亚洲成人一区| 亚洲欧美日韩一区在线| 亚洲图片欧洲图片av| 欧美成人一区在线| 欧美大色视频| 亚洲国产一区二区a毛片| 久久精品人人爽| 久久中文欧美| 国产精品亚洲аv天堂网| 一区二区免费看| 亚洲欧美一区二区原创| 欧美午夜激情视频| 一区二区免费看| 亚洲欧美视频在线观看| 国产日本亚洲高清| 欧美一区二区三区四区在线观看地址 | 久久久久久婷| 久久久午夜视频| 欧美午夜片在线观看| 久久只有精品| 亚洲黄一区二区三区| 欧美成人精品影院| 最新国产乱人伦偷精品免费网站 | 久久se精品一区二区| 国产美女扒开尿口久久久| 欧美精品在欧美一区二区少妇| 久久亚洲春色中文字幕| 欧美一区二区三区成人 | 国产情人节一区| 欧美激情一区二区三区在线视频观看| 亚洲在线成人精品| 亚洲一区综合| 欧美日韩视频一区二区| 欧美中文字幕在线| 久久综合亚州| 亚洲区欧美区| 国产精品成人一区二区网站软件 | 欧美激情亚洲自拍| 99在线热播精品免费| 国产精品久久久久av| 欧美在线观看网址综合| 亚洲第一久久影院| 亚洲一区在线播放| 在线观看视频欧美| 国产精品白丝av嫩草影院 | 亚洲人成网站777色婷婷| 欧美日韩国产丝袜另类| 亚洲综合第一| 亚洲成色精品| 欧美一区综合| 狠狠久久综合婷婷不卡| 欧美波霸影院| 欧美一区二区三区久久精品茉莉花| 欧美成人a视频| 午夜久久久久久| 亚洲欧洲精品一区二区三区| 亚洲电影下载| 久久久久一区二区三区| 9色porny自拍视频一区二区| 国产一区二区精品久久99| 欧美激情视频一区二区三区免费| 亚洲性人人天天夜夜摸| 亚洲国产成人高清精品| 欧美在线free| 亚洲午夜小视频| 亚洲精品国精品久久99热一| 国产日韩亚洲| 国产精品国产成人国产三级| 欧美成人资源| 久久久久国产精品午夜一区| 亚洲网站视频| 日韩一区二区精品葵司在线| 欧美成人激情在线| 久久久久国产精品人| 亚洲你懂的在线视频| 日韩视频一区二区三区在线播放| 国产综合视频在线观看| 国产精品揄拍一区二区| 一区二区欧美亚洲| 1769国内精品视频在线播放| 国产精品影视天天线| 欧美日韩成人一区二区三区| 裸体女人亚洲精品一区| 久久精品国产亚洲5555| 香蕉乱码成人久久天堂爱免费 | 久久精品国产一区二区三区免费看 | 亚洲专区在线视频| 夜色激情一区二区| 亚洲精品一区二区三区婷婷月 | 国产精品影院在线观看| 国产精品电影网站| 国产精品久久久久久久久久直播| 欧美精品福利视频| 欧美精品一区三区| 欧美日韩国产一区二区三区地区| 欧美国产综合视频| 欧美精品www| 国产精品久久久久久久久久免费| 香蕉精品999视频一区二区| 午夜精品久久久久久| 午夜精品国产更新| 欧美主播一区二区三区| 久久久999成人| 老鸭窝毛片一区二区三区| 麻豆成人在线播放| 欧美国产一区二区| 欧美日韩精品在线播放| 欧美特黄视频| 国产精自产拍久久久久久| 国产一区二区三区在线观看免费视频| 国产日韩三区| 91久久国产综合久久| 亚洲久久一区二区| 亚洲一区二区三区中文字幕在线| 午夜精品美女自拍福到在线| 久久精品伊人|