錯誤代碼
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。