Простая функция с указателями и ссылками

Так что у меня есть домашнее задание для моих классов C ++. И (как и все) я не могу разобраться с указателями и ссылками в функциях.

Я должен создать функцию прототипа:

const double* avr(const double* arr, size_t size, double& average)

Куда:

arr — указатель на массив, объявленный в основной функции

size — это размер массива

average — это ссылка, которая позже должна быть введена со средним средним из массива (arr[])

Смысл функции заключается в том, чтобы ввести переменное среднее значение со средним средним значением элементов массива, а затем вернуть указатель на элемент массива, который ближе всего к этому среднему значению

например программа ниже:

double arr[] = {1,2,3,4,5,7};
size_t size = sizeof(arr) / sizeof(arr[0]);
double average = 0;
const double* p = aver(arr, size, average);
cout << *p << " " << average << endl;

должен напечатать:
4 3.66667

Я не хочу использовать ярлыки, поэтому я не жду ответа.
Однако у меня есть несколько вопросов.

  • Почему функция avr является указателем? На что это указывает?
  • Есть ли способ передать математику размера в функцию avr? Я имею в виду — я хочу сохранить main() чистить и хранить в формате size_t математические работы avr(), (очевидно, я не могу изменить прототип)
  • Как я могу передать среднее значение для среднего ссылки?

Заранее спасибо.

1

Решение

Почему функция avr указатель? На что это указывает?

Эта функция возвращает указатель на константу с плавающей точкой, возвращает указатель на ближайшее к среднему числу, но почему это указатель? Я не вижу причин, может быть, это просто образовательная цель, я думаю, что нет необходимости использовать указатель, и указателей следует избегать, насколько это возможно, здесь возвращение по значению было бы лучше.

Есть ли способ передать математику размера в функцию avr?

Нет, вы не можете, Ваша функция получает указатель на ваш массив, Компилятор не знает, на что указывает указатель, и это означает, что теперь он не знает, что он содержит, или сколько у него элементов. Так что вам нужно рассчитать размер снаружи и передать его для работы, как вы сделали.

Как я могу передать среднее значение для среднего ссылки?

Непонятно, что вы спрашиваете здесь, но вот объяснение, которое может помочь вам понять, передайте по ссылке: представьте, что у вас есть такая функция void func (int &param), Вот когда вы вызываете этот метод, он внутренне объявит int reference названный param так же, как вы можете сделать снаружи, и тогда это будет ссылка на заданный вами параметр, как вы знаете, ссылка является псевдоним для данного параметра, так что вы просто передаете свою переменную (например, у вас есть int x; просто позвони func (x);) а потом в функции приятель param будет псевдоним x и быть использованным.

Помните, что когда вы передаете свой параметр по ссылке, любое изменение этого параметра повлияет на ваш исходный переданный (они одинаковые, псевдоним, помните?), Так что если вы хотите сохранить себя, чтобы случайно не изменить параметр, который Вы не хотите менять, измените свою функцию, чтобы получить как constant reference как это void func (int const &param);

1

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector