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

            單鏈DNA

            換了個地址:http://www.cnblogs.com/vizhen/

             

            引用

            引用是一個目標(biāo)變量的別名。對引用的一切操作和對變量的直接操作是一樣的。引用的聲明如下:

            【數(shù)據(jù)類型】【&】【定義的引用名稱】=【目標(biāo)變量名】;

            引用不是一種數(shù)據(jù)類型,并不占存儲單元,沒有數(shù)組的引用。

            引用的作用:

            1. 可用做函數(shù)參數(shù)。引用作為參數(shù)傳遞給函數(shù)時,在內(nèi)存中并沒有產(chǎn)生變量實(shí)體的副本,它只是源目標(biāo)變量的一個別名。
            2. 常引用。

              const 【數(shù)據(jù)類型標(biāo)識符】&【引用名】=【目標(biāo)變量名】;

              char x=1;
              const char &rx=x;
              rx=2; //錯誤:rx是只讀的
              x=2; //正確
              這樣的好處是可以不用擔(dān)心變量的值被別名以為的改掉。
            3. 引用作為函數(shù)返回值。

              【數(shù)據(jù)類型】&【函數(shù)名】(形參列表){函數(shù)體}
              實(shí)例:
            #include<iostream>
            using namespace std;
            int temp; //全局變量temp; 
            int f1(int x)
            {
                temp=(int)(x*x);
                return temp;   
            }
            
            int &f2(int x)
            {
                temp=(int)(x*x);
                return temp;
            }
            
            int main()
            {
                int a=f1(5);//系統(tǒng)生產(chǎn)成返回值的副本 
                int b=f2(5);//系統(tǒng)不生成返回值的副本,可以從被調(diào)函數(shù)中返回一個全局變量的引用 
                int &c=f2(5);//系統(tǒng)不生成返回值的副本,可以從被調(diào)函數(shù)中返回一個全局變量的引用 
                
                cout<<a<<endl;
            
                cout<<b<<endl;
                cout<<c<<endl;
                getchar();
            } 
            

            注意:不能返回局部變量的值。局部變量在被函數(shù)調(diào)用返回后就被銷毀。那么它返回的引用所指向的內(nèi)存已經(jīng)沒有任何意義,運(yùn)行時會出現(xiàn)不可預(yù)知的錯誤。

            #include<iostream>
            using namespace std;
            
            int &f1(int x)
            {
                int tmp;
                tmp=x;
                cout<<"In f1:"<<endl;
                cout<<"&tmp is:"<<&tmp<<endl;
                cout<<"tmp is:"<<tmp<<endl<<endl;
                return tmp;
            }
            
            int main()
            {
                int &a=f1(5);
                a=9;
                cout<<"In main:"<<endl;
                cout<<"&a is:"<<&a<<endl;
                cout<<"a is:"<<a<<endl;
                getchar();
                return 0;
            }
            

            結(jié)果:

            image

            在f1結(jié)束后tmp的內(nèi)存就已經(jīng)釋放,a是tmp的別名雖然還是指向了那段內(nèi)存,但是已經(jīng)沒有任何意義了。

            注意:

            1. 不能返回函數(shù)內(nèi)部new分配的內(nèi)存引用。因?yàn)楸缓瘮?shù)返回的引用只是作為臨時變量出現(xiàn)的,沒有被賦予一個實(shí)際的變量空間,所以這個引用所指向的空間就無法釋放,造成內(nèi)存泄露。
            2. 可以返回類成員的引用,但最好是const。

            posted on 2011-02-04 22:52 Geek.tan 閱讀(148) 評論(0)  編輯 收藏 引用 所屬分類: C++

            導(dǎo)航

            統(tǒng)計(jì)

            公告

            coding是我的寂寞,我是誰的寂寞

            隨筆分類(40)

            隨筆檔案(48)

            搜索

            積分與排名

            最新評論

            評論排行榜

            午夜肉伦伦影院久久精品免费看国产一区二区三区 | 久久人人爽人人爽人人爽| 久久99国产精品久久| 久久久久久久亚洲Av无码| 奇米影视7777久久精品| 国产精品久久久久jk制服| 大香网伊人久久综合网2020| 久久精品中文字幕有码| 合区精品久久久中文字幕一区| 日韩人妻无码一区二区三区久久99| 国产成人综合久久精品红| 国产91久久精品一区二区| 污污内射久久一区二区欧美日韩| 精品久久久久久国产潘金莲 | 韩国三级大全久久网站| 久久香蕉国产线看观看精品yw| 久久亚洲国产欧洲精品一| 潮喷大喷水系列无码久久精品 | 国产福利电影一区二区三区久久老子无码午夜伦不 | 亚洲国产精久久久久久久| 久久精品亚洲乱码伦伦中文| 天堂久久天堂AV色综合| 亚洲人成网站999久久久综合| 欧美亚洲国产精品久久蜜芽| 亚洲午夜无码久久久久| 久久精品国产亚洲AV蜜臀色欲 | 7国产欧美日韩综合天堂中文久久久久 | 久久国产精品成人免费| 潮喷大喷水系列无码久久精品| 亚洲欧美日韩中文久久| 色婷婷综合久久久久中文| 一本久道久久综合狠狠爱| 久久精品国产亚洲av水果派 | 国产综合久久久久久鬼色| 无码人妻久久久一区二区三区| 色综合久久久久综合体桃花网| 亚洲级αV无码毛片久久精品| 久久久久人妻精品一区二区三区 | 亚洲国产成人久久精品99| 久久av免费天堂小草播放| 亚洲а∨天堂久久精品9966|