乡下人产国偷v产偷v自拍,国产午夜片在线观看,婷婷成人亚洲综合国产麻豆,久久综合给合久久狠狠狠9

  • <output id="e9wm2"></output>
    <s id="e9wm2"><nobr id="e9wm2"><ins id="e9wm2"></ins></nobr></s>

    • 分享

      數組拾遺

       My鏡像站 2011-12-26

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

      • 下標越界
        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;
        }

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

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

        本站是提供個人知識管理的網絡存儲空間,所有內容均由用戶發(fā)布,不代表本站觀點。請注意甄別內容中的聯系方式、誘導購買等信息,謹防詐騙。如發(fā)現有害或侵權內容,請點擊一鍵舉報。
        轉藏 分享 獻花(0

        0條評論

        發(fā)表

        請遵守用戶 評論公約

        類似文章 更多