#cpp
Как можно в теле функции узнать длину передаваемого массива (для тела цикла)? #includeint 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); }
Ответы
Ответ 1
Ваш вопрос настолько популярен, что попал даже в FAQ по языку C: [1], [2]. Дело в том, что в параметрах функций массивы «превращаются» в указатели. Поэтому ваше объявление функции ничем не отличается от int myfunc(int* arr) Вы можете проверить, что в вашей функции sizeof(arr) даёт размер указателя (на современных архитектурах обычно 4 или 8). Практический выход: передавайте длину массива отдельным параметром.Ответ 2
В Си никак. В Си++ можно использовать шаблонную функцию, в которой размер станет параметром шаблона. В любом случае, так не стоит делать, т. к. это не позволит использовать функцию с динамическими массивами. http://ideone.com/HNxwr8 #includeusing namespace std; template void f(typed (&a)[n]) { for (size_t q=0; q Ответ 3
В теле функции вы можете узнать длинну массива из передаваемого по соседству аргумента: int foo(int *buffer, const size_t bufferSize) {...} Интересней же вопрос о том как возвращать массив из функции. Для этих целей в C++11 появился std::array, который является ничем иным, как оберткой над обычными статическими буферами, которая, среди прочего, содержит метод size().Ответ 4
Как вариант - использовать vector и получать размер массива с помощью arr.size()Ответ 5
Столкнулся с данной проблемой сегодня, но всё-таки нашёл выход. Длинну массива можно определить с помощью такой функции: int getLength(char text[]){ int arrayLength=0; for(int i=0;text[i];i++){ arrayLength++; } return arrayLength; } int main(void){ cout<
Комментариев нет:
Отправить комментарий