6.3 陣列的初始化
宣告陣列時可以同時指定初值,避免後來訪問到未初始化的垃圾值。不同的初始化方式有不同的優缺點。
方式 1:使用大括號指定初值
int a[5] = {1, 2, 3, 4, 5}; // 完整初始化
int b[5] = {10, 20}; // 前兩個設 10、20,其餘自動設 0
int c[5] = {}; // 所有元素設 0
方式 2:省略陣列大小
int a[] = {1, 2, 3}; // 編譯器自動推斷大小為 3
方式 3:全域陣列自動初始化為 0
int a[1000]; // 全域宣告,所有元素自動為 0
int main() {
int b[1000]; // 局域宣告,所有元素為未知(垃圾值)
}
方式 4:使用迴圈初始化
int a[20];
for (int i = 0; i < 20; i++) {
a[i] = i + 1; // 先宣告,後初始化
}
¶範例程式碼
#include<iostream>
using namespace std;
int main() {
// 方式 1:宣告時初始化部分元素
int a[5] = {10, 20, 30};
// a[0]=10, a[1]=20, a[2]=30, a[3]=0, a[4]=0
for (int i = 0; i < 5; i++) {
cout << "a[" << i << "]=" << a[i] << '\n';
}
cout << "---\n";
// 方式 2:宣告時全部初始化為 0
int b[5] = {};
// b[0]~b[4] 都是 0
for (int i = 0; i < 5; i++) {
cout << "b[" << i << "]=" << b[i] << '\n';
}
return 0;
}
執行結果:
a[0]=10
a[1]=20
a[2]=30
a[3]=0
a[4]=0
---
b[0]=0
b[1]=0
b[2]=0
b[3]=0
b[4]=0
動手試試看:在上面的程式碼中,把 int b[5] = {}; 改成 int b[5];(不初始化),執行看看。你會看到 b 陣列輸出垃圾值。想想看為什麼 a 陣列反而有明確的初值?