首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計疑難解答

C++ 函數參數類型不匹配導致編譯錯誤:數組退化為指針

     編輯:程式設計疑難解答

錯誤代碼

long long sum(long long data, int n) {  // 錯誤:第一參數應為指針/數組
    long long ans = 0;
    for (int i = 0; i < n; i++)
        ans += data[i] * data[i];  // data 非指針,無法下標
    return ans;
}
int main() {
    long long data[1005];
    // ...
    cout << sum(data, n) << endl;  // data 退化為 long long*
}

編譯器報錯信息

error: subscripted value is not an array, pointer, or vector

修正方法

// 方式 1:指針
long long sum(const long long *data, int n) { ... }

// 方式 2:數組語法(實際仍是指針)
long long sum(const long long data[], int n) { ... }

// 方式 3:C++ 現代寫法(推薦)
#include 
long long sum(const std::vector& data) {
    long long ans = 0;
    for (auto v : data) ans += v * v;
    return ans;
}

核心知識點

  • 數組作為函數參數時退化為指針**,失去長度信息。
  • 形參寫 T data[] 或 T *data 效果相同,但語義上前者暗示「這是一個數組」。
  • 加 const 防止誤修改原數組。
  • 優先使用 std::vector/std::array 替代原始數組,擁有長度、邊界檢查、RAII。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved