1. 程式人生 > >C++陣列初始化的誤解

C++陣列初始化的誤解

一直以為 int a[256]={0};是把a的所有元素初始化為0,int a[256]={1};是把a所有的元素初始化為1. 除錯的時檢視記憶體發現不是那麼一回事,翻了一下《The C++ Programming Language》總算有定論。PDF的竟然不然複製,就把它這章翻譯了,

如下5.2.1  

 陣列初始化

陣列可以用一個列值來初始化,例如

          int v1[] ={1,2,3,4};

         char v2[]={'a','b','c',0};

 當陣列定義時沒有指定大小,當初始化採用列表初始化了,那麼陣列的大小由初始化時列表元素個數決定。

所以v1和v2分別為 int[4] 和char[4]型別。如果明確指定了陣列大小,當在初始化時指定的元素個數超過這個大小就會產生錯誤。例如:          char   v3[2] ={'a','b',0};   //錯誤:太多的初始化值了

          char   v3[3] ={'a','b',0};   //正確

如果初始化時指定的的元素個數比陣列大小少,剩下的元素都回被初始化為   0。例如

          int   v5[8]={1,2,3,4}; 等價於

           int   v5[8]={1,2,3,4,0,0,0,0};

注意沒有如下形式的陣列賦值:

          void f()         

 {

              v4={'c','d',0};   //錯誤:不是陣列賦值         

}

如果你想這樣的複製的話,請使用 vector(16章第三節) 或者 valarray(22章第四節)。

         字元陣列可以方便地採用字串直接初始化(參考第五章 2.2小節)

          譯註: 就是 這樣啦   char   alpha []="abcdefghijklmn";