Две вещи, чтобы помнить о массивах в C:
исключением случаев, когда это операнд sizeof
или унарный оператор &
, или является строковым литералом, используемым для инициализации другого массива в объявлении, выражение типа «N-элементный массив из T
» будет заменено на выражение («распад на») выражением типа «указатель на« T
» "значение которого - адрес первого элемента массива.
В контексте объявления параметра функции T a[]
и T a[N]
идентичны T *a
; IOW, a
объявлен как указатель на T
, а не как массив. Обратите внимание, что это верно только для объявлений параметров параметров.
При вызове average(scores)
из вашей основной функции, выражение scores
будет заменено другим выражением типа double *
, так, что average
получает это указатель значение, а не массив. Таким образом, трюк sizeof
для получения количества элементов не будет работать в функции average
.Вам придется пройти ряд элементов в scores
как отдельный параметр, например, так:
double average(double *scores, size_t count)
{
...
}
и называют его
average(scores, sizeof scores/sizeof *scores); // or pass a constant 3, or
// something similar.
Если ваш вопрос о С, то почему вы используете тег '' C++? –
И 'sizeof (score)' не будет 0. Это будет размер указателя. Об этом просили много лет. –
@LightnessRacesinOrbit, потому что они очень похожи – Itzik984