- •Е. А. Альтман основы языка с омск 2012
- •Введение
- •Лабораторная работа 1 Изучение среды программирования
- •Теоретические сведения
- •1.1.Среда программирования
- •Задание к работе
- •Содержание отчета
- •Контрольные вопросы
- •Лабораторная работа 2 Переменные и операции над ними
- •Теоретические сведения
- •2.1.Основные определения
- •2.2.Операции над целыми числами
- •2.3.Вещественные числа и операции над ними
- •Задание к работе
- •Содержание отчета
- •Контрольные вопросы
- •Лабораторная работа 3 Конструкция выбора, логические и другие операции
- •Теоретические сведения
- •3.1.Конструкция выбора и составная инструкция
- •3.2.Операторы отношения и логические операторы
- •3.3.Остальные операторы
- •Задание к работе
- •Содержание отчета
- •Контрольные вопросы
- •Лабораторная работа 4 Конструкции циклов
- •Теоретические сведения
- •4.1.Цикл while
- •4.2.Цикл for
- •4.3.Конструкция в конструкции
- •Задание к работе
- •5.2.Свойства массивов
- •5.3.Строки
- •5.4.Структуры
- •Задание к работе
- •6.2.Операции с указателями
- •6.3.Указатели и массивы
- •6.4.Указатели и структуры
- •Задание к работе
- •7.2.Использование указателей для передачи результата и аргумента
- •Задание к работе
- •Содержание отчета
- •Контрольные вопросы
- •Библиографический список
- •644046, Г. Омск, пр. Маркса, 35
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. Это ключевое слово применяется в языке С в тех случаях, когда какой-то параметр конструкции языка (в данном случае – тип возвращаемого результата) не используется.
Задание к работе
Определить собственную функцию по вариантам из 2-го задания 4 лабораторной работы. Используя определенную функцию найти наибольше и наименьшие значения функции для целых аргументов от 1 до 50.
Определить функцию, которая для каждого элемента переданного ей массива вычисляет функцию, определенную в 1 задании лабораторной работы, и сохраняет результат во второй массив, переданный этой функции. Заполнить массив числами от 1 до 50 и с помощью определенной функции заполнит второй массив соответствующими значениями.
Содержание отчета
Отчет должен содержат текст обоих программы с подробными комментариями, результаты работы этих программ.
Контрольные вопросы
Что такое функции?
Как объявить собственную функцию?
С помощью какого оператора функция возвращает результат?
Как передается функции массив?
Каким образом результат работы функции может быть записан в виде массива?
Каким образом можно указать тот факт, что функция не возвращает результат?
Библиографический список
Б. Керниган Язык программирования C / Б. Керниган, Д. РитчиМ.:Вильямс, 2009, 304с.
Учебное издание
Альтман Евгений Анатольевич,
Ананьева Надежда Геннадьевна,
Александров Александр Владимирович,
Актаев Нуркен Ерболатович
Введение в программирование
––––––––––––––––
Редактор Н. А. Майорова
Корректор Д. А. Волнина
* * *
Лицензия ИД № 01094 от 28.02.2000.
Подписано в печать . .2012. Формат 60 84 1/16.
Бумага писчая. Плоская печать.
Усл. печ. л. . Уч.-изд. л. . Тираж экз. Заказ .
* *
Редакционно-издательский отдел ОмГУПСа
Типография ОмГУПСа
*