Массивы распадаются на указатели (в данном случае int*
), когда передаются в качестве аргумента функциям. Ваша mean
функция принимает только один int
.
Когда массив превращается в указатель, информация о размере теряется. Однако вы можете предотвратить это, определив функцию, которая принимает массивы точного типа и размера, которые вам нужны. Это можно сделать с помощью шаблонов:
#include <iostream>
template<typename T, size_t N>
double mean(const T (&data)[N]) {
double sum = 0;
for (size_t i = 0; i < N; ++i)
{
sum += data[i];
}
return sum / N;
}
int main()
{
int input[] = { 1, 2, 3, 4, 5, 6, 7 };
std::cout << mean(input) << '\n';
}
Если вы не хотите использовать шаблоны (или принимаете только массивы определенного размера), вам необходимо передать информацию о размере в функцию вручную:
#include <iostream>
#include <iterator> // std::size
double mean(const int* data, size_t N)
{
double sum = 0;
for (size_t i = 0; i < N; ++i)
{
sum += data[i];
}
return sum / N;
}
int main()
{
int input[] = { 1, 2, 3, 4, 5, 6, 7 };
std::cout << mean(input, std::size(input)) << '\n';
}