Страницы

Поиск по вопросам

среда, 17 октября 2018 г.

Длина массива в функции с++

Как можно в теле функции узнать длину передаваемого массива (для тела цикла)?
#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).
Практический выход: передавайте длину массива отдельным параметром.

Комментариев нет:

Отправить комментарий