![](/user_photo/2706_HbeT2.jpg)
- •2.1.1 Функции, возвращающие значение
- •2.1.1.1 Определение функции
- •2.1.1.1 Вызов функции
- •2.1.2 Функции, возвращающие значение
- •2.1.2.1 Определение функции
- •2.1.3 Объявление функций
- •2.2 Аргументы функции
- •2.2.1 Передача параметров по значению и по ссылке
- •2.2.2 Передача массива в функции
- •3. Содержание и порядок выполнения лабораторной работы
- •4. Методические указания и требования к выполнению лабораторной работы
- •Вариант 7.
- •Вариант 14.
- •Вариант 15.
- •Вариант 16.
2.2 Аргументы функции
Формальный параметр (аргумент) - переменная в вызываемой программе, а фактический параметр (аргумент) - конкретное значение, присвоенное этой переменной вызывающей программой. Фактический аргумент может быть константой, переменной или более сложным выражением. Независимо от типа фактического аргумента он вначале вычисляется, а затем его величина передается функции. Фактический аргумент - это конкретное значение, которое присваивается переменной, называемой формальным аргументом.
2.2.1 Передача параметров по значению и по ссылке
В языках программирования существует два способа передачи аргументов в подпрограммы:
1) по значению – формальным параметрам подпрограммы присваиваются копии значений фактических аргументов, и все изменения формальных параметров не отражаются на фактических аргументах;
2) по ссылке – формальным параметрам подпрограммы присваиваются адреса фактических аргументов, и внутри подпрограммы открывается доступ к фактическому аргументу. Это значит все изменения формальных параметров отражаются на аргументах.
В языке С/С++ по умолчанию применяется передача параметров по значению.
Если нужно передать параметры по ссылке, то формальные параметры объявляются как указатели.
Рассмотрим пример передачи параметров по ссылке.
void swap(int*x, int *y);
int main(void)
{
int i, j;
i=10;
j=20;
swap(&i, &j);
if (x > 10) function(p); // передаются адреса переменных i, j
return 0;
}
void function(char a) // определение функции function()
{
…
}
void swap(int *x, int *y)
{
int temp;
temp = *x; // сохраняем значение, записанное по адресу x
*x = *y; // записываем значение, записанное по адресу y, в ячейку в адресом x
*y = temp; // записываем сохраненное значение
}
2.2.2 Передача массива в функции
В языке С/С++ весь массив нельзя передать в качестве аргумента функции. Можно передать указатель на массив, то есть имя массива без индексов.
Например,
int main(void)
{
int mass[12];
read_mass(mass);
}
Если аргументом функции является одномерный массив, то ее формальный параметр можно объявить тремя способами:
1) как указатель;
2) как массив фиксированного размера;
3) как массив неопределенного размера.
Пример 1:
void read_mass(int *p) // указатель
{
…
}
Пример 2:
void read_mass(int p[13]) // массив фиксированного размера
{
…
}
Пример 3:
void read_mass(int p[]) // массив неопределенного размера
{
…
}
Эти три объявления эквивалентны.
Cтроки, объявленные как массив символов, передаются в функции аналогично одномерным массивам. Формальный параметр объявлять нужно как указатель. Конец строки внутри функции определяется по нулевому байту.
При передаче двумерного массива в функции формальный параметр объявляется как указатель.
3. Содержание и порядок выполнения лабораторной работы
Лабораторная работа состоит из 3-х заданий:
– передача переменных стандартного типа в функцию;
– передача массива в функцию;
– передача двумерного массива в функцию.
3.1. Ознакомиться с теоретическим материалом лабораторной работы
3.2. Разработать программы согласно вариантам.
3.3. Оформить отчет по лабораторной работе, который должен содержать для каждого задания:
1 ) словесную постановку задачи;
2) формальную (математическую) постановку задачи;
3) алгоритм решения задачи в виде блок-схем;
4) листинг и описание программы;
5) тестирование программы.