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";