C++ 陣列宣告和初始化

double64發表於2024-09-21

顯式初始化陣列元素

如果指明瞭維度,那麼初始值的總數量不應該超出指定的大小。如果維度比提供的初始值數量大,則用提供的初始值初始化靠前的元素,剩下的元素被初始化成預設值(參見 3.3.1節,第 88 頁):

const unsigned s=3;
int ial[sz]={0,1,2};         //含有3個元素的陣列,元素值分別是0,1,2
int a2[]={0,1,2};            //維度是3的陣列
int a3[5]={0,1,2};           //等價於a3[]={0,1,2,0,0}
string a4[3]={"hi", "bye"};    //等價於 a4[〕={"hi","bye",""}
int a5[2]={0,1,2};             //錯誤:初始值過多 

不允許複製和賦值

不能將陣列的內容複製給其他陣列作為其初始值,也不能用陣列為其他陣列賦值:

int a[]=(0,1,2};    //含有3個整數的陣列
int a2[]= a;         //錯誤:不允許使用一個陣列初始化另一個陣列
a2 = a;              //錯誤:不能把一個陣列直接賦值給另一個陣列

理解複雜的陣列宣告

int *ptrs[10];            //ptrs是含有10個整型指標的陣列
int &refs[10] = /* ?*/;   //錯誤:不存在引用的陣列
int (*Parray)[10] = &arr;  // Parray指向一個含有10個整數的陣列
int (&arrRef)[10] = arr;   // arrRef引用一個含有10個整數的陣列
int *(&arry)[10]=ptrs;    //arry是陣列的引用,該陣列含有10 個指標

要想理解陣列宣告的含義,最好的辦法是從陣列的名字開始按照由內向外的順序閱讀。




《C++ Primer》 P103

相關文章