1. gzyueqian
      18529173453

      數(shù)組的智能初始化

      更新時(shí)間: 2007-05-25 14:52:53來(lái)源: 粵嵌教育瀏覽量:902


        數(shù)組的智能初始化

        不少人使用的數(shù)組初始化方法是這樣的:
      int a[100];
      for (int i = 0; i < sizeof(a); i++) a[i] = 0;

        一個(gè)for循環(huán)的初始化方法效率顯然不夠高,代碼也不夠漂亮。其實(shí) C++ Standard Library早已為我們提供了一個(gè)又與初始化的強(qiáng)力工具 memset。
      void memset(void *s, int c, size_t n);

        memset就是把從地址s開(kāi)始的內(nèi)存以字符c寫(xiě)入,直到有n個(gè)這樣的字符被寫(xiě)入為止。
        因此,我們利用這個(gè)強(qiáng)力工具來(lái)替換for循環(huán)。代碼看起來(lái)漂亮多了。另外,由于memset使用底層的內(nèi)存操作,效率要比f(wàn)or來(lái)得高。
      int a[100];
      memset(a, 0, sizeof(a) );

        但是,一般而言我們并不是要把我們定義的數(shù)組用'a'或者什么別的字符初始化。0(NULL)才是初始化中常用的值?;谶@個(gè)事實(shí),編譯器為我們提供了智能初始化的方法。這種方法既快捷又簡(jiǎn)明。
      int a[100] = {0};

        有人也許以為這種形式的初始化只會(huì)令a[0]為0而其他的并不會(huì)被初始化為0。但事實(shí)并不是這樣的。在標(biāo)準(zhǔn)C++中,一旦你在數(shù)組定義時(shí)就對(duì)其使用'{ }'初始化,不論'{'與'}'之間的數(shù)值是多少(當(dāng)然給比數(shù)組的上界小了)編譯器會(huì)自動(dòng)給你沒(méi)有初始化的項(xiàng)用0初始化。因此上面的語(yǔ)句實(shí)際上把數(shù)組a的所有項(xiàng)都初始化為0了。
      如果你還不太理解或是不相信,可以看看下面的小程序,在你的機(jī)器上跑一跑。實(shí)踐是檢驗(yàn)真理的標(biāo)準(zhǔn)嘛。
      ///: show the initialization of an array

      #include <iostream>

      using namespace std;

      enum {array_size = 6};

      void watch(const int *x) { // go through the whole array

      for (int i = 0; i < array_size; i++)
      cout << " x[" << i << "] = " << x[i] ;

      cout << endl;

      }

      void main() {

      int a[array_size] = {0};

      int b[array_size] = {1};

      int c[array_size] = {1,2,3};

      int d[array_size]; //the compiler may give a warning for
      //not initializing the array

      watch(a);
      watch(b);
      watch(c);
      watch(d);

      }

      ///:~


      以下是輸出的結(jié)果:
      x[0] = 0 x[1] = 0 x[2] = 0 x[3] = 0 x[4] = 0 x[5] = 0
      x[0] = 1 x[1] = 0 x[2] = 0 x[3] = 0 x[4] = 0 x[5] = 0
      x[0] = 1 x[1] = 2 x[2] = 3 x[3] = 0 x[4] = 0 x[5] = 0
      x[0] = 2008948808 x[1] = 37879496 x[2] = 2009050137 x[3] = 37879776 x[4] =
      2009087664 x[5] = 2008948784

      免費(fèi)預(yù)約試聽(tīng)課

      亚洲另类欧美综合久久图片区_亚洲中文字幕日产无码2020_欧美日本一区二区三区桃色视频_亚洲AⅤ天堂一区二区三区

      
      

      1. 日本大片在线看黄a∨免费 亚洲美女天堂电影 | 中文字幕精品乱码亚洲一区 | 欧美自拍清纯日韩一区二区三区 | 最新国产免费AV片在线观看 | 中文字幕高清视频在线不卡 | 正在播放国产乱子伦最新视频 |