一、數組是什麼?¶
在C++中,數組(Array)是一組相同類型元素的集合,這些元素在內存中連續存儲。數組一旦定義,其大小就固定不變(靜態數組),且每個元素通過索引(從0開始)訪問。比如,一個存儲5個整數的數組,索引範圍是0到4,每個元素的類型都是int。
二、數組的初始化方法¶
初始化數組就是給數組中的元素賦值。初學者常遇到的問題是“怎麼正確給數組賦值?”,不同場景下初始化方式略有不同。
1. 基本類型數組(如int、double等)¶
(1)完全初始化(所有元素都賦值)¶
直接用大括號{}列出所有元素,元素數量與數組大小一致:
// 定義一個大小爲5的int數組,並全部賦值
int arr[5] = {10, 20, 30, 40, 50};
// 注意:元素數量必須等於數組大小,否則會報錯
// int arr[3] = {1,2,3,4}; // 錯誤!元素數量超過數組大小
(2)部分初始化(僅部分元素賦值)¶
如果只給部分元素賦值,未顯式賦值的元素會被自動初始化爲0(基本類型默認值):
// 定義大小爲5的數組,僅前3個元素賦值,後2個自動爲0
int arr[5] = {1, 2, 3};
// 此時arr的元素爲:arr[0]=1, arr[1]=2, arr[2]=3, arr[3]=0, arr[4]=0
(3)省略數組大小,讓編譯器自動推導¶
如果明確知道元素數量,可省略數組大小,編譯器會根據初始化元素數量自動確定數組大小:
int arr[] = {1, 2, 3, 4, 5}; // 編譯器自動推導arr大小爲5
cout << "數組大小:" << sizeof(arr)/sizeof(arr[0]) << endl; // 輸出5
2. 字符數組(char)¶
字符數組用於存儲字符,需注意字符串的特殊處理(以'\0'結尾)。
(1)用字符串字面量初始化(自動添加'\0')¶
直接用雙引號""包裹字符串,會自動在末尾添加空字符'\0'(字符串結束標誌):
char str1[] = "hello"; // 等價於 {'h','e','l','l','o','\0'}
// 注意:字符串長度爲5(不含'\0'),數組大小爲6(含'\0')
(2)逐個字符初始化(需手動處理'\0')¶
如果手動指定數組大小,需確保字符串以'\0'結尾,否則可能無法正確表示字符串:
char str2[6] = {'h', 'e', 'l', 'l', 'o', '\0'}; // 手動添加'\0'
char str3[5] = {'a', 'b', 'c'}; // 未加'\0',數組元素爲{'a','b','c',0,0}(0是默認值)
三、數組的遍歷技巧¶
遍歷數組就是按順序訪問每個元素,常用循環實現。
1. 普通for循環(最常用,需已知數組大小)¶
通過索引i從0遍歷到size-1(數組大小爲n時,索引範圍0~n-1):
int arr[] = {10, 20, 30, 40};
int n = sizeof(arr) / sizeof(arr[0]); // 計算數組大小(關鍵!)
// 遍歷並打印每個元素
for (int i = 0; i < n; i++) {
cout << "arr[" << i << "] = " << arr[i] << endl;
}
2. 範圍for循環(C++11新增,無需索引)¶
用for (auto element : arr)直接遍歷所有元素,適合不需要修改索引的場景:
int arr[] = {1, 2, 3, 4, 5};
for (auto num : arr) { // auto自動推導元素類型(int)
cout << num << " ";
}
cout << endl; // 輸出:1 2 3 4 5
注意:範圍for循環無法獲取索引(如需索引,仍用普通for),且修改element不會改變原數組(若需修改,需用引用:for (auto &num : arr))。
3. 遍歷字符數組的特殊說明¶
字符數組可視爲字符串,但需注意'\0'結尾符:
char str[] = "hello";
// 遍歷字符串(用'\0'判斷結束)
for (int i = 0; str[i] != '\0'; i++) {
cout << str[i]; // 輸出:hello
}
四、注意事項¶
- 數組越界:索引必須在
0到n-1之間(n爲數組大小),否則會訪問到未知內存,導致程序崩潰或數據錯誤。
int arr[3] = {1,2,3};
arr[3]; // 越界!索引3超過數組大小(最大索引2),錯誤!
-
數組大小固定:定義後無法動態擴容,例如
int arr[5]不能直接變成arr[6],需重新定義數組。 -
字符數組≠字符串:只有以
'\0'結尾的字符數組才能用字符串函數(如strlen)處理,否則可能導致截斷。
總結¶
數組是C++中存儲同類型數據的基礎結構,核心要點:
- 初始化:根據需求選擇完全/部分初始化,字符數組注意'\0'結尾。
- 遍歷:用普通for循環(需索引)或範圍for循環(無需索引),避免越界。
- 關鍵操作:通過sizeof(arr)/sizeof(arr[0])獲取數組大小,靜態數組無法動態改變大小。
多練習不同初始化和遍歷場景,就能熟練掌握數組的使用!