Первая часть: Pointer и C-Array
Я думаю, вы изучили Java до написания такого фрагмента кода.
В Java у нас есть обработчики (или указатели)в некоторой степени) каждому объекту, но в C ++ мы передаем объекты напрямую путем копирования (без ссылочной нотации или переопределения operator=
).Следовательно, стиль Java Type arr[]
неправильно используется в вашем коде, и он имеет совершенно разные значения в соответствии с контекстами C / C ++:
- Гибкий член массива , который доступен только в C99
- Просто указатель (не массив) в параметрах функции
- Инициализация массива без указания длины непосредственно
- Может быть больше ...
Например:
#include <iostream>
using std::cout, std::endl;
int calc_sum(int arr[], int len) { // pointer
int ans = 0;
for (int i = 0; i < len; i++) {
ans += arr[i];
}
return ans;
}
int main() {
int arr[] = {1, 2, 3, 4, 5};
int n = sizeof(arr) / sizeof(int);
cout << n << endl;
cout << calc_sum(arr, n) << endl;
return 0;
}
Вторая часть: Ссылка
Когда вы пишете код, такой как int a = 3; int &b = a;
, вы намеревались сделать b
псевдоним для a
, что означает "теперь a
и b
одинаковы".Поэтому int& products_id[]
означает указатель на ссылку int
.И я думаю, что это не то, что вы хотите.