Страницы

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

среда, 11 декабря 2019 г.

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

#cpp


Как можно в теле функции узнать длину передаваемого массива (для тела цикла)?

#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);
}

    


Ответы

Ответ 1



Ваш вопрос настолько популярен, что попал даже в FAQ по языку C: [1], [2]. Дело в том, что в параметрах функций массивы «превращаются» в указатели. Поэтому ваше объявление функции ничем не отличается от int myfunc(int* arr) Вы можете проверить, что в вашей функции sizeof(arr) даёт размер указателя (на современных архитектурах обычно 4 или 8). Практический выход: передавайте длину массива отдельным параметром.

Ответ 2



В Си никак. В Си++ можно использовать шаблонную функцию, в которой размер станет параметром шаблона. В любом случае, так не стоит делать, т. к. это не позволит использовать функцию с динамическими массивами. http://ideone.com/HNxwr8 #include using 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<

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

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