Как можно в теле функции узнать длину передаваемого массива (для тела цикла)?
#include
int myfunc(int arr[])
{
int sum=0, quantity=0;
for (int i = 0; i < (длина массива (указателя)); i++)
{
if (arr[i] > 0)
{
quantity++;
sum += arr[i];
}
}
return sum;
}
int main()
{
int a[70], b[80], c[65];
std::cout << myfunc(a);
}
Ответ
Ваш вопрос настолько популярен, что попал даже в FAQ по языку C: [1], [2]
Дело в том, что в параметрах функций массивы «превращаются» в указатели. Поэтому ваше объявление функции ничем не отличается от
int myfunc(int* arr)
Вы можете проверить, что в вашей функции sizeof(arr) даёт размер указателя (на современных архитектурах обычно 4 или 8).
Практический выход: передавайте длину массива отдельным параметром.
Комментариев нет:
Отправить комментарий