手把手教你C++數組:初始化與遍歷技巧

一、數組是什麼?

在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
}

四、注意事項

  1. 數組越界:索引必須在0n-1之間(n爲數組大小),否則會訪問到未知內存,導致程序崩潰或數據錯誤。
   int arr[3] = {1,2,3};
   arr[3]; // 越界!索引3超過數組大小(最大索引2),錯誤!
  1. 數組大小固定:定義後無法動態擴容,例如int arr[5]不能直接變成arr[6],需重新定義數組。

  2. 字符數組≠字符串:只有以'\0'結尾的字符數組才能用字符串函數(如strlen)處理,否則可能導致截斷。

總結

數組是C++中存儲同類型數據的基礎結構,核心要點:
- 初始化:根據需求選擇完全/部分初始化,字符數組注意'\0'結尾。
- 遍歷:用普通for循環(需索引)或範圍for循環(無需索引),避免越界。
- 關鍵操作:通過sizeof(arr)/sizeof(arr[0])獲取數組大小,靜態數組無法動態改變大小。

多練習不同初始化和遍歷場景,就能熟練掌握數組的使用!

小夜