Передача массива в функцию используя ссылку

98
06 марта 2022, 21:50

Есть массив, состоящий из 3-х элементов. Нужно передать массив в функцию(которая посчитает сумму элементов) тремя разными способами. Как передавать указателем и просто аргументом(да, я понимаю что это тоже указатель) я понимаю, но как использовать ссылку?

    #include <iostream>
int sum1(int arr[])
{
    int sumArr = 0;
    for (int i = 0; i < 3; i++)
    {
        sumArr += arr[i];
    }
    return sumArr;
}
int sum2(int* arr)
{
    int sumArr = 0;
    for (int i = 0; i < 3; i++)
    {
        sumArr += *(arr + 1);
    }
    return sumArr;
}
int sum3(int &arr)
{
    int sumArr = 0;
    for (int i = 0; i < 3; i++)
    {
        ???
    }
    return sumArr;
}
Answer 1

В Вашем случае нужно написать так: int sum3(int (&arr)[3]). В таком подходе есть недостаток: ваша функция может принимать только массивы длиной в три элемента. Обращение к элементам такое же, как и в функции sum1

int sum3(int (&arr)[3])
{
    int sumArr = 0;
    for (int i = 0; i < 3; i++)
    {
        sumArr += arr[i];
    }
    return sumArr;
}

PS. Ваши функции не изменяют массив, поэтому имеет смысл обьявлять параметр arr как const.

Так же можно написать шаблонную функцию:

template<typename Type, size_t N>
Type sum(Type (&arr)[N])
{
    Type sumArr {};
    for (int i = 0; i < N; i++)
    {
        sumArr += arr[i];
    }
    return sumArr;
}
Answer 2

Фигня, конечно, но коду из вопроса соответствует именно она:

sumArr += (&arr)[i];
sumArr += *(&arr + i);
READ ALSO
как передать класс как массив?

как передать класс как массив?

Я использую для программирования в opengl библиотеку glmЯ смотрел в glm и так и не понял как это делается

69
заполнение массива в зависимости от введённого типа данных

заполнение массива в зависимости от введённого типа данных

Пользователь должен вводить данные с клавиатуры, а программа должна их заносить в массив в зависимости от типа введённых данных (int, double, char)Как...

164
Поиск пробела в строке

Поиск пробела в строке

При нахождение пробела в строке нужно завершить программу

147