陣列 是固定大小、同質元素的連續記憶體集合。索引從 0 開始,arr[n] 存取第 n+1 個元素。
型別 陣列名[大小]; // 宣告
double balance[10]; // 10 個 double
型別 陣列名[大小] = {值...}; // 初始化
double balance[5] = {1000.0, 2.0, 3.4, 17.0, 50.0};
型別 陣列名[] = {值...}; // 省略大小,由初始化列表推導
double balance[] = {1000.0, 2.0, 3.4, 17.0, 50.0};

指定元素賦值:balance[4] = 50.0;(第 5 個元素)。
#include <iostream>
#include <iomanip>
using namespace std;
int main() {
int n[10];
for (int i = 0; i < 10; ++i)
n[i] = i + 100; // 初始化
cout << "Element" << setw(13) << "Value" << endl;
for (int j = 0; j < 10; ++j)
cout << setw(7) << j << setw(13) << n[j] << endl;
return 0;
}
輸出:
Element Value
0 100
1 101
...
9 109
最簡形式為二維陣列:型別 名稱[行][列];
int matrix[3][4] = {
{0, 1, 2, 3},
{4, 5, 6, 7},
{8, 9, 10, 11}
};
// 存取:matrix[1][2] == 6
記憶體按列優先(Row-major)連續儲存。
int*)。arr[i] 完全等價於 *(arr + i)。sizeof(arr) 在陣列宣告作用域內回傳整個陣列大小(位元組),傳遞給函數後退化為指標,sizeof 僅回傳指標大小。C++ 不支援直接傳遞陣列實值,實際傳遞的是指向首元素的指標。三種等價參數宣告:
void func(int *arr); // 指標
void func(int arr[]); // 陣列語法(退化為指標)
void func(int arr[10]); // 大小被忽略,同指標
函數內無法得知陣列長度,需額外傳遞 size 參數,或使用 std::vector/std::array (C++11)。
無法直接回傳 C 風格陣列。替代方案:
std::array 或 std::vector(推薦)。void func(int *out, size_t n);| 容器 | 特點 | 適用場景 |
|---|---|---|
std::array<T, N> | 固定大小、棧上配置、支援 .size()、可值傳遞 | 編譯期已知大小、高效能 |
std::vector<T> | 動態大小、堆上配置、自動記憶體管理 | 大多數需動態陣列場景 |
std::string | 字元專用、SSO 最佳化 | 文字處理 |
C 風格陣列是底層基石,理解其與指標的關係至關重要。實務開發中,優先使用 std::vector 或 std::array,享受型別安全、邊界檢查(at())、RAII 記憶體管理與標準演算法支援。