首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> C++ >> C++ 入門

C++ 陣列完整指南:宣告、初始化、多維陣列、指標關係與函數傳遞

     編輯:C++ 入門

C++ 陣列完整指南:宣告、初始化、多維陣列與進階應用

陣列 是固定大小、同質元素的連續記憶體集合。索引從 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);

現代 C++ 替代方案

容器特點適用場景
std::array<T, N>固定大小、棧上配置、支援 .size()、可值傳遞編譯期已知大小、高效能
std::vector<T>動態大小、堆上配置、自動記憶體管理大多數需動態陣列場景
std::string字元專用、SSO 最佳化文字處理

總結

C 風格陣列是底層基石,理解其與指標的關係至關重要。實務開發中,優先使用 std::vector 或 std::array,享受型別安全、邊界檢查(at())、RAII 記憶體管理與標準演算法支援。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved