Справочник от Автор24
Нужна помощь?
Найдем эксперта за 5 минут
Подобрать эксперта
+2

Функция возврата массива Си

Определение 1

Функция возврата массива Си — это процедура, которая выполняет возврат указателя массива.

Введение

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

Код. Автор24 — интернет-биржа студенческих работ

Рисунок 1. Код. Автор24 — интернет-биржа студенческих работ

Передачу массива возможно осуществить следующим образом:

Код. Автор24 — интернет-биржа студенческих работ

Рисунок 2. Код. Автор24 — интернет-биржа студенческих работ

В качестве аргумента функции возможно использование массива. В функцию необходимо передать наименование массива, а фактически его указатель. Приведём пример:

void fun(double );

void fun(double array ) {…}

Образец функции, именуемый fun, снабжён указателем того, что аргументом массива является массив вида double (без идентификатора массива). Функция вызывается так:

fun(array);

В теле функции не копируется массив, все операции выполняются с имеющимися компонентами и по окончании работы функции, величины компонентов массива поменяются (естественно, в случае, если это заложено в функциональный алгоритм). Отсылать в функцию объём массива нет необходимости. Следует заметить, что в языке С++ понятия массива и указателя являются практически синонимами. Но так как переадресация массива по значению означает формирование копии целого массива, что считается достаточно сложной процедурой (массив может быть очень большим), то по этой причине передаётся только указатель на первый элемент массива, а не сам массив. Из этого следует, что два вида задания функции:

«Функция возврата массива Си» 👇
Помощь автора по теме работы
Найти автора
Решение задач от ИИ за 2 минуты
Решить задачу
Более 10 нейросетей для написания рефератов и решения задач
Найти нейросеть

void f(int A) и void f(int * A)

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

Переменные, хранящие параметры для передачи функции, тоже будут локальными для данной функции. Такие переменные формируются при обращении к функции, и они содержат копии значений, которые передаются функции как параметры. Их возможно менять, но все эти действия над переменными будут аннулированы при выходе из функции.

Возврат массива из функции

Приведём пример функции, которая может изменять величины передаваемых ей переменных:

Код. Автор24 — интернет-биржа студенческих работ

Рисунок 3. Код. Автор24 — интернет-биржа студенческих работ

Когда вызывается функция swap, формируются новые аргументы, а и b, они получают веса три и пять. Данные переменные не имеют ни каких связей с переменными р и q, и перемена их числовых значений не влияет на величины р и q. Данный метод передачи параметрических данных определяется как передача параметров по значению. Для обеспечения возможности изменения функцией величин переменных, которые были объявлены в других функциях, следует сделать указание, что параметр, который передаётся, есть не постоянная величина, а переменная. Значения таких параметров следует передавать по ссылке. Чтобы это условие работало, функция swap должна быть задана так:

void swap(int & a, int & b)

Знаки перед именами переменных (амперсанды) обозначают, данные переменные не локальные, а являются ссылками на переменные, которые были указаны как параметры при задании функции. Значит, когда вызывается swap(p,q), то переменные а и b считаются синонимами р и q, и если меняются их величины, то изменятся и р и q. Но вызвать функцию в форме swap(3,5) уже не будет возможности, так как три и пять это постоянные числа, которые не могут быть синонимами переменных. Следует также заметить, что в языке С (не С++) не существовало таких понятий, как передать параметры по ссылке. Для реализации функции, подобной swap в примере выше, нужно было сообщать адреса переменных р и q, а собственно функцию следовало объявить следующим образом:

void swap(int a, int b)

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

Возврат массива в Си

Рассмотрим пример возвращения одномерного целочисленного массива. Данный способ основан на заполнении компонентов массива значениями, которые являются индексами массива. Входными данными является размер массива n.

Код. Автор24 — интернет-биржа студенческих работ

Рисунок 4. Код. Автор24 — интернет-биржа студенческих работ

Далее рассмотрим возврат двумерного массива вида dоublе из функции согласно этому способу GetDoubleArray().

Имеем в качестве исходных параметров объём массива m*n. Данный метод выполняет возврат массива.

Код. Автор24 — интернет-биржа студенческих работ

Рисунок 5. Код. Автор24 — интернет-биржа студенческих работ

Пример выполнения методики GetArrayChar(), генерирующей, то есть выполняющей возврат двумерного массива объектов типа Char.

Код. Автор24 — интернет-биржа студенческих работ

Рисунок 6. Код. Автор24 — интернет-биржа студенческих работ

Образец применения функции вызова GetArrayChar() из другого программного кода.

Код. Автор24 — интернет-биржа студенческих работ

Рисунок 7. Код. Автор24 — интернет-биржа студенческих работ

Дата написания статьи: 19.11.2019
Не знаешь, как приступить к заданию?
За 5 минут найдем эксперта и проконсультируем по заданию. Переходи в бота и получи скидку 500 ₽ на первый заказ.
Запустить бота
Нужна помощь с заданием?

Эксперт возьмёт заказ за 5 мин, 400 000 проверенных авторов помогут сдать работу в срок. Гарантия 20 дней, поможем начать и проконсультируем в Telegram-боте Автор24.

Перейти в Telegram Bot