Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
lab_C-09(args)-2015.doc
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
85.5 Кб
Скачать

Рубанчик В.Б.

Лабораторная работа "Передача массивов в функции"

6/6

Лабораторная работа

Тема: Передача массивов в функции

Цель работы: Изучить особенности использования массивов как аргументов функций

Передача параметров в функцию

При работе с функциями различают формальные и фактические параметры.

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

void func(int x, double y){...}

Понятие "фактические параметры" относится к вызовам функций.

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

int z=2;

func(z+3,1);

будет преобразован компилятором в

func(5,(double)1);

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

Если фактический параметр задан переменной, то возникает вопрос: а что передается в функцию, сама переменная или её значение? В программировании эти два способа передачи аргументов называются, соответственно, "передача параметров по ссылке" и "передача параметров значением".

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

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

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

В Си передача параметров выполняется значением. Однако есть возможность имитировать передачу параметров по ссылке.

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

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

ЗАДАНИЕ 1 (исследование механизма передачи параметров)

1. В функции main описываются две переменные x и y типа int, инициализируемые значениями 5 и 10.

2. В программе создается функция

void pass_param(int x, int* py),

в которой выполняется инкремент значения x и декремент значения, хранящегося по адресу py.

3. В функции main вызывается функция pass_param, которой передаются переменная x и адрес переменной y.

4. После выполнения вызова на экран выводятся значения x и y.

Объяснить результаты.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]