Есть массив, состоящий из 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;
}
В Вашем случае нужно написать так: 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;
}
Фигня, конечно, но коду из вопроса соответствует именно она:
sumArr += (&arr)[i];
sumArr += *(&arr + i);
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Я использую для программирования в opengl библиотеку glmЯ смотрел в glm и так и не понял как это делается
Пользователь должен вводить данные с клавиатуры, а программа должна их заносить в массив в зависимости от типа введённых данных (int, double, char)Как...