• <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>

            函數(shù)參數(shù)傳遞,一二事

            摘要:簡要比較了直接、指針、引用三中函數(shù)參數(shù)傳遞方式,并對其優(yōu)缺點進行了大致的說明

            1. 眾所周知,函數(shù)參數(shù)的直接傳遞就是實現(xiàn)一個拷貝值,這個拷貝值的變化,并不會改變原值的變化,因為兩個被來就是不同的個體,就好比兩個克隆的個體,雖然兩者之間有很多相同的地方,但是它們的思維是獨立的。

            2. 通過指針的方式給函數(shù)參數(shù)傳值呢,從根本上來講,它仍然是直接傳值,但是這個拷貝的值比較特殊,是一個地址罷了,如:

               1: void fun(int *pnValue)
               2: {
               3:     ...;
               4: }
               5: int main()
               6: {
               7:     int nValue = 6;
               8:     fun(&nValue);
               9: }

            它其實是將nValue的地址拷貝給了pnValue,如果在fun函數(shù)中,一開始就將pnValue的值給改變,如pnValue=&nValue2,那么pnValue指向的內(nèi)容的改變,將不會影響到nValue。

            同時有一點需要注意的是,空指針對象是沒有意義的,會引起程序的奔潰,因此在開始因該進行檢測,if(!pnValue) return;

            通過指針傳參數(shù)的優(yōu)點:

            1) 允許你改變傳遞的參數(shù)的值

            2) 由于它拷貝的僅僅是一個字節(jié)大小的地址,因此傳遞的過程是快速的,特別對于較大的結(jié)構(gòu)或是類

            3) 我們通過這種傳參方式,獲取從函數(shù)中返回的多個量

            缺點:

            1) 傳遞的只能是普通的變量,不能是字面常量或表達式

            2) 所有的傳遞值都得檢查是不是空指針

            3. 通過引用的方式傳遞參數(shù)

            雖然在底層的操作中,通過引用也是通過“指針的方式”進行實現(xiàn)的http://blog.csdn.net/wanwenweifly4/article/details/6739687),但是從語言上考慮,引用是對象的別名,也是一個對象,并不是指針,因為它的概念是在語言上定義的,而不是底層的實現(xiàn)方式,換一種思維,拋開所有的比匯編語言高級的語言,回到匯編語言建立初期,單單從匯編語言上考慮,那時有沒有指針的概念呢?因此應(yīng)該理性的對待引用在C++語言中的概念,也應(yīng)該冷靜的認識它在底層中的實現(xiàn)方式,區(qū)分的對待,其實也不用爭執(zhí)于這個問題,認清了,會用了,就成了。(這些僅個人見解,批判的看待吧)。

            它在傳參中的優(yōu)點:

            1) 允許你改變傳遞的參數(shù)的值

            2) 傳遞的過程是快速的,特別對于較大的結(jié)構(gòu)或是類

            3) 可以通過添加一個const,避免不經(jīng)意的改變

            4) 我們通過這種傳參方式,獲取從函數(shù)中返回的多個量

            缺點:

            1) 非const類型的參數(shù),傳遞的只能是普通的變量,不能是字面常量或表達式

            2) 不容易區(qū)分哪些變量是input,需要output,或都是

            3) 通過函數(shù)的調(diào)用,很難看出那個參數(shù)是將被改變的,因為它和直接傳值的方式相同,只能通過函數(shù)原型進行辨認,當程序員不小心忽視的時候,可能會導致錯誤的發(fā)生

             

            ps:

               1: #include <iostream>
               2:  
               3: int nFive = 5;
               4: int nSix = 6;
               8: void SetToSix(int *pTempPtr);
               9:  
              10: int main()
              11: {
              12:     using namespace std;
              13:  
              16:     int *pPtr = &nFive;
              19:     cout << *pPtr;
              20:  
              23:     SetToSix(pPtr);
              27:     cout << *pPtr;
              28:  
              29:     return 0;
              30: }
              31:  
              33: void SetToSix(int *pTempPtr)
              34: {
              35:     using namespace std;
              36:  
              38:     pTempPtr = &nSix;
              41:     cout << *pTempPtr;
              42: }

            上面這個程序中輸出的結(jié)果是 565

            如果想使得輸出的結(jié)果為566呢,有一個方法可以實現(xiàn),就是采用指針的引用,如下:

               1: // pTempPtr is now a reference to a pointer to pPtr!
               2: // This means if we change pTempPtr, we change pPtr!
               3: void SetToSix(int *&pTempPtr)
               4: {
               5:     using namespace std;
               6:  
               7:     pTempPtr = &nSix;
               8:  
               9:     // This will print 6
              10:     cout << *pTempPtr;
              11: }

            posted on 2012-05-23 22:16 鐘謝偉 閱讀(1387) 評論(0)  編輯 收藏 引用

            <2012年5月>
            293012345
            6789101112
            13141516171819
            20212223242526
            272829303112
            3456789

            導航

            統(tǒng)計

            常用鏈接

            留言簿(1)

            隨筆檔案

            IT網(wǎng)站

            My Friends

            搜索

            最新評論

            閱讀排行榜

            評論排行榜

            99久久婷婷国产一区二区| 国内精品伊人久久久久AV影院| 亚洲香蕉网久久综合影视| 久久人妻少妇嫩草AV蜜桃| 国产精品久久久久9999高清| 亚洲中文字幕久久精品无码喷水| 久久天天躁狠狠躁夜夜躁2014| 亚州日韩精品专区久久久| 91精品国产综合久久四虎久久无码一级| 精品久久久久香蕉网| 久久福利青草精品资源站免费| 99久久99久久久精品齐齐| a级成人毛片久久| 中文字幕亚洲综合久久| 久久久久这里只有精品 | 香蕉久久久久久狠狠色| 久久免费高清视频| 精品久久久久久无码中文字幕| 久久免费国产精品| 亚洲国产成人久久一区WWW| 一本久久a久久精品综合香蕉| 久久久久这里只有精品 | 99久久国产宗和精品1上映| 亚洲午夜无码久久久久| www.久久99| 奇米影视7777久久精品人人爽| 日韩人妻无码一区二区三区久久| 精品无码久久久久国产| 久久精品综合一区二区三区| 久久狠狠爱亚洲综合影院| 久久夜色精品国产亚洲| 久久免费国产精品| 7777久久亚洲中文字幕| 99久久国产综合精品网成人影院 | 久久国产精品二国产精品| 欧美大香线蕉线伊人久久| 老司机国内精品久久久久| 久久久久久精品久久久久| 久久精品国产亚洲网站| 婷婷国产天堂久久综合五月| 青青热久久综合网伊人|