Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Методичка_Программирование_1.doc
Скачиваний:
8
Добавлен:
19.11.2019
Размер:
501.25 Кб
Скачать

7.2.Использование указателей для передачи результата и аргумента

Во многих случаях функции нужно передать сложный тип данных – массив или структуру. Функция также может возвращать сложный тип данных.

Если передавать или возвращать из функции большой массив данных, то необходимо полностью его переписать в локальную переменную (или из локальной переменной).

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

Рассмотрим функцию, складывающую элементы двух массивов и записывающую результат в третий массив.

void sum_array(int a[], int b[], int c[])

{

int i;

for(i=0; i<10; i++) c[i]=a[i]+b[i];

}

У функции sum_array три аргумента: указатель на первый суммируемый массив, указатель на второй суммируемый массив и указатель на массив, в который нужно поместить результат. Хотя в аргументах указаны три массива, поскольку имя массива эквивалентно указателю на первый элемент массива, поэтому в функцию передаются указатели. Первую строку объявления функции можно было бы записать следующим образом:

void sum_array(int *a, int *b, int *c)

Эти два варианта первой строки с точки зрения компилятора абсолютно одинаковые.

Внутри функции работать с такими указателями можно как с помощью операций с указателями, так и с помощью операция с массивами (как в приведенном примере).

Поскольку результаты работы функции уже находятся в нужном массиве, указанном при вызове, такой функции не нужно возвращать результат. Поэтому оператор return в рассмотренной функции отсутствует. Для того, чтобы указать, что функция не возвращает никакого результата, в качестве типа возвращаемого результата указано ключевое слово void. Это ключевое слово применяется в языке С в тех случаях, когда какой-то параметр конструкции языка (в данном случае – тип возвращаемого результата) не используется.

Задание к работе

  1. Определить собственную функцию по вариантам из 2-го задания 4 лабораторной работы. Используя определенную функцию найти наибольше и наименьшие значения функции для целых аргументов от 1 до 50.

  2. Определить функцию, которая для каждого элемента переданного ей массива вычисляет функцию, определенную в 1 задании лабораторной работы, и сохраняет результат во второй массив, переданный этой функции. Заполнить массив числами от 1 до 50 и с помощью определенной функции заполнит второй массив соответствующими значениями.

Содержание отчета

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

Контрольные вопросы

  1. Что такое функции?

  2. Как объявить собственную функцию?

  3. С помощью какого оператора функция возвращает результат?

  4. Как передается функции массив?

  5. Каким образом результат работы функции может быть записан в виде массива?

  6. Каким образом можно указать тот факт, что функция не возвращает результат?

Библиографический список

  1. Б. Керниган Язык программирования C / Б. Керниган, Д. РитчиМ.:Вильямс, 2009, 304с.

Учебное издание

Альтман Евгений Анатольевич,

Ананьева Надежда Геннадьевна,

Александров Александр Владимирович,

Актаев Нуркен Ерболатович

Введение в программирование

––––––––––––––––

Редактор Н. А. Майорова

Корректор Д. А. Волнина

* * *

Лицензия ИД № 01094 от 28.02.2000.

Подписано в печать   . .2012. Формат 60  84 1/16.

Бумага писчая. Плоская печать.

Усл. печ. л. . Уч.-изд. л. . Тираж   экз. Заказ  .

* *

Редакционно-издательский отдел ОмГУПСа

Типография ОмГУПСа

*