Передача массива в функцию — это передача указателя на данный массив.
Определение функции
Если массив применяется как функциональный аргумент, то можно передавать лишь адрес массива, а не его полную скопированную версию. Когда вызывается функция, содержащая имя массива, в функцию пересылается метка, указывающая на начальный компонент массива. Чтобы передать числовой массив в функцию, необходимо выполнить передачу указателя на данный числовой массив. Указатель должен содержать в своём составе:
- Наименование числового массива.
- Адресация начального компонента массива.
Рассмотрим конкретный случай. Необходимо выполнить описание функционала SumArrаyInts(), который должен получить целочисленный массив и найти суммарный вес всех компонентов выбранного массива. Функция должна получить два параметра:
- Целочисленный массив.
- Количество компонентов в массиве.
Рассмотрим разные возможные варианты выполнения этой задачи. Вариант номер один. Массив передаётся в форме int А[].
Рисунок 1. Вариант первый. Автор24 — интернет-биржа студенческих работ
Вариант номер два. Массив передаётся в форме int *А.
Рисунок 2. Вариант второй. Автор24 — интернет-биржа студенческих работ
Необходимо отметить, что при выполнении этой пересылки массива в функцию, величины компонентов массива возможно менять в самой функции.
Передача символьной строки в функцию
Символьная строчка по сути является массивом компонентов с типом char. Это означает, что пересылать символьную строку в функцию посредством параметра, можно таким же образом, как и с целочисленными значениями. Символьную строчку возможно переслать в функцию так же двумя методами:
- В формате char*.
- В формате char[].
Рассмотрим пример. Функция, возвращающая количество плюсовых символов в строчке. Нет необходимости сообщать функции размер строки, так как существует признак окончания строчки и это символ ‘\0’.
Вариант номер один. Определяется функция GеtNРlus(). Строчка передаётся как chаr *.
Рисунок 3. Вариант первый. Автор24 — интернет-биржа студенческих работ
Вариант номер два. Определяется функция GetNPlus2(). Для организации обращения к символике строчки применяется индексация.
Рисунок 4. Вариант второй. Автор24 — интернет-биржа студенческих работ
Передача строкового массива в функцию
Рассмотрим примерный вариант взаимодействия строкового массива с функцией. То есть функция получит строковый массив и отсортирует его способом вставки. В качестве первого параметра идёт пересылка строкового массива, а второй параметр содержит количество строк.
Рисунок 5. Передача строкового массива в функцию. Автор24 — интернет-биржа студенческих работ
В приведённой выше функции применяется функционал strсm р(), который выполняет сравнение двух строчек s1 и s2 в порядке лексической графики: n = strсm р(s1. s2);
и возврат значения:
- $> 0$, если строчка s1 идёт за строчкой s2 в порядке лексической графики.
- $= 0$, если присутствует равенство строчек.
Вызывается функция из иного программного кода:
Рисунок 6. Программный код. Автор24 — интернет-биржа студенческих работ
Трансляция двумерного массива в функцию
Рассмотрим образец взаимодействия двумерного массива, как параметра, и функции. Здесь выполняется задание функции, которая вычисляет суммарный вес всех компонентов двумерного массива. Функция получит двумерный вещественный числовой массив в качестве параметрических данных.
Рисунок 7. Числовой массив. Автор24 — интернет-биржа студенческих работ
Вызывается функция из кода программы. Осуществляется пересылка в функцию двумерного массива, именуемого М и имеющего размер два на три.
Рисунок 8. Пересылка. Автор24 — интернет-биржа студенческих работ
Передача трёхмерного числового массива в функцию
Рассмотрим пример передачи трёхмерного числового массива в функцию. В этом примере даётся описание функции Sum3(), получающей в качестве исходных параметров трёхмерный целочисленный массив, величиной два на три на четыре. Функция выполняет возврат суммы всех компонентов массива.
Рисунок 9. Передача трёхмерного числового массива в функцию. Автор24 — интернет-биржа студенческих работ
Передача структуры в функцию
Рассмотрим примерный образец, как может передаваться структура в функцию. Существует два способа передачи структуры в виде параметра в функцию:
- По смыслу (значению).
- По адресному значению.
При выполнении передачи структуры по значению выполняется копирование с сохранением в стеке всех граф переменной на базе структуры. При выполнении передачи структуры по адресу пересылается лишь адресное расположение структуры в памяти (структурный указатель). Второй метод будет более предпочтительным, когда под информационные данные структуры требуются значительные объёмы памяти. Тогда величина указателя будет существенно меньше величины переменной, определяемой структурой. Структурный указатель, передаваемый в функцию, бывает таких видов:
- Без возможности управления (*).
- С возможностью управления (^). В данном случае структура может быть объявлена при помощи контрольного слова.
Рассмотрим пример. Необходимо выполнить передачу объекта, представляющего структуру, по значению, а также по адресу. Дано условие, что за границами класса есть структура, описывающая точку в плоской системе координат:
Рисунок 10. Условие. Автор24 — интернет-биржа студенческих работ
И существуют две функции, определяющие равенство точек друг с другом:
- Функция Equals(), получающая в параметрическом виде две структуры вида MyPoint (передаваемые значением).
- Функция EqualsP(), получающая два указателя вида MyPoint (передаваемые адресом).
Рисунок 11. Функции. Автор24 — интернет-биржа студенческих работ
В этом случае обращение к функциям Equals() и EqualsP() возможно выполнить из иного кода программы в таком виде:
Рисунок 12. Обращение к функциям. Автор24 — интернет-биржа студенческих работ
Рассмотрим пример передачи в функцию структурного указателя по типу ссылки с возможностью управления. В этом примере показана пересылка в функцию указателя на структуру с возможностью управления. В функции EqualsPRef() предоставлены два структурных указателя с возможностью управления вида MyPoint. Функция должна определить равны ли поля указанных структур. Указатель MyPoint описывается в таком виде:
Рисунок 13. Указатель. Автор24 — интернет-биржа студенческих работ
Функция EqualsPRef() задаётся с помощью этой программы:
Рисунок 14. Функция EqualsPRef().Автор24 — интернет-биржа студенческих работ
Функция EqualsPRef() вызывается из иного кода программы (к примеру, программы обработки нажатия кнопки):
Рисунок 15. Функция EqualsPRef().Автор24 — интернет-биржа студенческих работ
Передача функции в виде параметра класса объекта
Имеем класс MyPointClass, который описывает координаты точки в плоскости. Он определяется двумя модулями:
- MyPointClass.h содержит характеристики функций и полей класса.
- MyPointClass.cpp содержит описания построения способов и полей класса.
Текстовый вариант модуля MyPointClass.h приведён ниже:
Рисунок 16. Текстовый вариант модуля MyPointClass. Автор24 — интернет-биржа студенческих работ
Текстовый вариант модуля MyPointClass.cpp:
Рисунок 17. Текстовый вариант модуля MyPointClass.cpp. Автор24 — интернет-биржа студенческих работ