日韩黑丝制服一区视频播放|日韩欧美人妻丝袜视频在线观看|九九影院一级蜜桃|亚洲中文在线导航|青草草视频在线观看|婷婷五月色伊人网站|日本一区二区在线|国产AV一二三四区毛片|正在播放久草视频|亚洲色图精品一区

分享

數(shù)組拾遺

 My鏡像站 2011-12-26

  寫這篇文章的主要目的就是為了記錄下來平常我們用數(shù)組的時(shí)候不是很注意的問題!?。?/p>

  • 下標(biāo)越界
    1
    2
    3
    4
    5
    6
    7
    8
    #include <iostream>
    using namespace std;
    int main()
    {
        int b[10];
        b[10]=3;
        cout<<"b[10]="<<b[10]<<endl;
    }

      上面這個(gè)程序會輸出b[10]=3;但是只要我們細(xì)心就可以發(fā)現(xiàn),b[10]其實(shí)只包括了從b[0]~b[9]。那么這里的b[10]不就是越界了 嘛?。?!這個(gè)錯(cuò)誤會讓緊接著b這個(gè)數(shù)組之后的內(nèi)存被強(qiáng)行賦值為3!這當(dāng)然是應(yīng)該避免的了。但是由于標(biāo)準(zhǔn)的C++代碼不限制下標(biāo)越界,雖然這樣做可以使代碼 的運(yùn)行速度加快,效率提高,但是這會很容易地修改其他變量的值,而且不容易發(fā)現(xiàn)。解決辦法只有一個(gè):我們應(yīng)該經(jīng)常留意數(shù)組的下標(biāo)值是否在合理的范圍之內(nèi)。
p.s. 由于本人用的是vs2008,貌似它會在運(yùn)行的時(shí)候報(bào)錯(cuò),如下圖:

  •  輸出數(shù)組名
          假如我們聲明的數(shù)組為a,那么編譯器就會自動生成一個(gè)指向該數(shù)組的指針,而且該指針保存的是數(shù)組第一個(gè)元素的內(nèi)存地址。相當(dāng)于程序中添加這樣一行代碼:int *a=&a[0];程序如和輸出如下圖:
  • 如何將數(shù)組傳遞給一個(gè)函數(shù)
          在寫程序的時(shí)候,我們不可避免的會用到數(shù)組和函數(shù),而且更常見的是在函數(shù)中隊(duì)數(shù)組進(jìn)行一個(gè)操作。比如說求平均值啊之類的。而在C++中,規(guī)定了是不能將整 個(gè)數(shù)組傳遞給一個(gè)函數(shù)的,因?yàn)閿?shù)組一般都非常大,如果我們在函數(shù)中還要賦值一個(gè)數(shù)組的副本,那內(nèi)存開銷就會很大,這也就太對不起內(nèi)存了。那怎么辦呢?其 實(shí),我們只需要傳遞給函數(shù)數(shù)組第一個(gè)元素的地址,即數(shù)組名,然后就可以在這個(gè)函數(shù)中由這個(gè)數(shù)組名找到該數(shù)組,然后就可以對該數(shù)組進(jìn)行操作了。傳遞數(shù)組名一 共有三種方式:
    //方法1:簡要數(shù)組聲明
    void func(int a[])
    {
        //函數(shù)體
    }
     
    //方法2:標(biāo)準(zhǔn)數(shù)組聲明
    void func(int a[10])
    {
        //函數(shù)體
    }
     
    //方法3:指針聲明
    void func(int *a)
    {
        //函數(shù)體
    }
          由于上面這3種方法都告訴了編譯器將要受到一個(gè)指向整型變量的指針(原因:參見第二個(gè)黑點(diǎn) ^_^),因此這三種方法都木有問題!下面,我們用一個(gè)程序來說明如何將數(shù)組傳遞到一個(gè)函數(shù)中:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    /************************************************************************/
    /* 求100~199之和的平均值                                                                                      */
    /***********************************************************************/
    #include<iostream>
    float Average(const float *,int); //函數(shù)原型
    int main()
    {  
        float a[100],average,num=100;
        //num是第1個(gè)數(shù)的值,average是平均值
        int i,total=100;            //total是參加運(yùn)算的元素總數(shù)
        for (i=0;i<100;++i)//給數(shù)組a賦值
        {
            a[i]=num;               //將num的值賦給數(shù)組的第i個(gè)元素
            num++;                  //由于100-199是依次加1,因此num++
        }                          
        //調(diào)用函數(shù)x,傳遞的第1個(gè)參數(shù)a便是數(shù)組名a
        average= Average(a,total);      //調(diào)用函數(shù),執(zhí)行傳參,然后在函數(shù)結(jié)束后返回一個(gè)平均值
        std::cout<<"100-199的平均值為"<<average<<std::endl;
        return 0;
    }                  
     
    float Average(const float *a,int total)
    //向函數(shù)Average()中傳遞數(shù)組名,也就是數(shù)組a第1個(gè)元素的內(nèi)存地址
    //函數(shù)定義里聲明了一個(gè)指針接收方式,接收到一個(gè)數(shù)組名,也就是第1個(gè)元素的內(nèi)存地址,
    //并使用自定義的指針a訪問數(shù)組a的內(nèi)存,進(jìn)行賦值操作
    {
        int i;
        float sum=0.0,b;       
        for (i=0;i<total;++i)   
        {
            sum=sum+a[i];      
        }
        b=sum/total;           
        return b;              
    }
          該程序的輸出為:
  • 刪除堆中的數(shù)組
          如果我們利用new在堆中聲明了一個(gè)數(shù)組,比如說下面這句話聲明了一個(gè)有1000個(gè)area對象組成的數(shù)組,而通過調(diào)用關(guān)鍵字new操作符來把整個(gè)數(shù)組創(chuàng)建在堆中:
    area *one=new area[1000];
          而刪除數(shù)組one的時(shí)候我們需要調(diào)用下面這句話:
    delete []one;
    這句話表示刪除數(shù)組中的每個(gè)對象。所以說,在堆中刪除一個(gè)數(shù)組十分簡單,我們只需要輸入delete[],然后再后面加上數(shù)組名就可以了。但是,應(yīng)該注意的一點(diǎn)是:千萬不要寫成delete one;或者是delete one[]。因?yàn)?strong>[]表示我們刪除的是一個(gè)數(shù)組,如果你忘記輸入[],那么刪除的只是one[0]。這樣就會帶來內(nèi)存泄露哈??!特別注意!??!

    本站是提供個(gè)人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多