小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

第八章第三節(jié)--初始化數(shù)組

 浮 生 2009-03-17

 

 

第三節(jié)  初始化數(shù)組

1.?dāng)?shù)組的初始化

  數(shù)組可以初始化,即在定義時,使它包含程序馬上能使用的值。
  例如,下面的代碼定義了一個全局?jǐn)?shù)組,并用一組Fibonacci數(shù)初始化:
    int iArray[10]={1,1,2,3,5,8,13,21,34,55); //初始化
    void main()
    {
      //...
    }

  初始化數(shù)組的值的個數(shù)不能多于數(shù)組元素個數(shù),初始化數(shù)組的值也不能通過跳過逗號的方式來省略,這在C中是允許的,但在C++中不允許。
  例如,下面的代碼對數(shù)組進(jìn)行初始化是錯誤的:
    int arrayl[5]={1,2,3,4,5,6}; //error: 初始化值個數(shù)多于數(shù)組元素個數(shù)
    int array2[5]={1,,2,3,4}; //error:初始化值不能省略
    int array3[5]={1,2,3,}; //error:初始化值不能省略
    int array4[5]={}; //error:語法格式錯誤
    void main()
    {
      //...
    }

  初始化值的個數(shù)可少于數(shù)組元素個數(shù)。當(dāng)初始化值的個數(shù)少于數(shù)組元素個數(shù)時,前面的按序初始化相應(yīng)值, 后面的初始化為0(全局或靜態(tài)數(shù)組)或為不確定值(局部數(shù)組)。
  例如,下面的程序?qū)?shù)組進(jìn)行初始化:
    //*********************
    //**   ch7_2.cpp  **
    //*********************

    #include <iostream.h>

    int array1[5]={1,2,3};
    static int array2[5]={1};

    void main()
    {
     int arr1[5]={2};
     static int arr2[5]={1,2};

     int n;
     cout <<"global:\n";
     for(n=0; n<5; n++)
       cout <<" " <<array1[n];

     cout <<"\nglobal static:\n";
     for(n=0; n<5; n++)
       cout <<" " <<array2[n];

     cout <<"\nlocal:\n";
     for(n=0; n<5; n++)
       cout <<" " <<arr1[n];

     cout <<"\nlocal static:\n";
     for(n=0; n<5; n++)
        cout <<" " <<arr2[n];
     cout <<endl;

    }

  運(yùn)行結(jié)果為:
    global:
     l  2  3  0  0
    global static:

     1  0  0  0  0
    local:
     2 23567 23567 23567 23567
    local static:
     1  2  0  0  0

  例中,全局?jǐn)?shù)組和全局靜態(tài)數(shù)組的初始化是在主函數(shù)運(yùn)行之前完成的,而局部數(shù)組和局部靜態(tài)數(shù)組的初始化是在進(jìn)入主函數(shù)后完成的。
  全局?jǐn)?shù)組arrayl[5]對于初始化表的值按序初始化為1,2,3,還有兩個元素的值則按默認(rèn)初始化為0。
  全局靜態(tài)數(shù)組array2[5]與全局?jǐn)?shù)組的初始化情況一樣,初始化表值(1)表示第1個元素的值,而不是指全部數(shù)組元素都為1。
  局部數(shù)組arrl[5]根據(jù)初始化表值的內(nèi)容按序初始化, 由于初始化表值只有1個,所以還有4個元素的值為不確定。在這里均為數(shù)值23567。
  局部靜態(tài)數(shù)組arr2[5]先根據(jù)初始化表按序初始化,其余3個數(shù)組元素的值默認(rèn)初始化為0。

2.初始化字符數(shù)組

  初始化字符數(shù)組有兩種方法,一種是:
    char array[10]={"hello"};
  另一種是:
    char array[10]={'h','e','l','l','\0'};
  第一種方法用途較廣,初始化時,系統(tǒng)自動在數(shù)組沒有填值的位置用,'\0'補(bǔ)上。另外, 這種方法中的花括號可以省略,即能表示成:
    char array[10]="hello";
  第二種方法一次一個元素地初始化數(shù)組,如同初始化整型數(shù)組。這種方法通常用于輸入不容易在鍵盤上生成的那些不可見字符。
  例如,下面的代碼中初始化值為若干制表符:
    char chArray[5]={'\t','\t','\t','\t','\0');
  這里不要忘記為最后的,'\0'分配空間。如果要初始化一個字符串"hello",那為它定義的數(shù)組至少有6個數(shù)組元素。
  例如,下面的代碼給數(shù)組初始化,但會引起不可預(yù)料的錯誤:
    char array[5]="hello";
  該代碼不會引起編譯錯誤,但由于改寫了數(shù)組空間以外的內(nèi)存單元,所以是危險的。

3.省略數(shù)組大小

  有初始化的數(shù)組定義可以省略方括號中的數(shù)組大小。
  例如,下面的代碼中數(shù)組定義為5個元素:
    int a[]={2,4,6,8,10};
  編譯時必須知道數(shù)組的大小。通常,聲明數(shù)組時方括號內(nèi)的數(shù)字決定了數(shù)組的大小。有初始化的數(shù)組定義又省略方括號中的數(shù)組大小時,編譯器統(tǒng)計花括號之間的元素個數(shù),以求出數(shù)組的大小。
  例如,下面的代碼產(chǎn)生相同的結(jié)果:
    static int a1[5]={1,2,3,4,5};
    static int a2[]={1,2,3,4,5};

  讓編譯器得出初始化數(shù)組的大小有幾個好處。它常常用于初始化一個元素個數(shù)在初始化中確定的數(shù)組,提供程序員修改元素個數(shù)的機(jī)會。
  在沒有規(guī)定數(shù)組大小的情況下,怎么知道數(shù)組的大小呢? sizeof操作解決了該問題。 例如,下面的代碼用sizeof確定數(shù)組的大?。?/p>

    //*********************
    //** ch7_3.cpp **
    //*********************

    #include <iostream.h>

    void main()
    {
     static int a[]={1,2,4,8,16};
     for(int i=0; i<(sizeof(a)/sizeof(int)); i++)
      cout <<a[i] <<" ";
     cout <<endl;
    }

  運(yùn)行結(jié)果為:
    1 2 4 8 16
  sizeof操作使for循環(huán)自動調(diào)整次數(shù)。如果要從初始化a數(shù)組的集合中增刪元素,只需重新編譯即可,其他內(nèi)容無須更動。
  每個數(shù)組所占的存儲量都可以用sizeof操作來確定! sizeof返回指定項的字節(jié)數(shù)。sizeof常用于數(shù)組,使代碼可在16位機(jī)器和32位機(jī)器之間移植:
  對于字符串的初始化,要注意數(shù)組實(shí)際分配的空間大小是字符串中字符個數(shù)加上末尾的,'\0',結(jié)束符。
  例如,下面的代碼定義一個字符數(shù)組:

    //*********************
    //**   ch7_4.cpp  **
    //*********************

    #include <iostream.h>

    void main()
    {
     char ch[]="how are you";

     cout <<"size of array: " <<sizeof(ch) <<endl;
     cout <<"size of string: " <<strlen("how are you")            <<endl;
    }


  運(yùn)行結(jié)果為:
    size of array:12
    size of string:ll

  例中,數(shù)組大小為12,而字符串長度為11。
  省略數(shù)組大小只能在有初始化的數(shù)組定義中。
  例如,下面的代碼將產(chǎn)生一個編譯錯誤:
    int a[];//error:沒有確定數(shù)組大小
  在定義數(shù)組的場合,無論如何,編譯器必須知道數(shù)組的大小。


    本站是提供個人知識管理的網(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)擊一鍵舉報。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多