- •Тема 6. Структуры
- •6.1 Понятие структуры в языке Си
- •6.2 Объявление типа структуры
- •6.3 Декларация переменных структурного типа
- •6.4 Доступ к элементам структурной переменной
- •6.5 Массивы структур
- •6.6 Оператор sizeof
- •6.7 Декларация typedef
- •7.2 Определение функции
- •7.3 Функции, вызывающие, I функции, вызываемые
- •7.4 Связи по данным между функциями
- •7.4.1 Вызов функции
- •7.4.2 Инструкция return (возврат)
- •7.5 Аппарат формальных и фактических аргументов
- •Входные аргументы;
- •Выходные аргументы;
- •Аргументы, которые обновляются.
- •7.6 Прототип функции
- •Тема 8. Передача аргументов функций
- •8.1 Способы передачи аргументов
- •8.1.1 Передача аргументов по значению
- •8.1.2 Передача аргументов по имени
- •8.1.3 Передача аргументов по ссылке
- •8.2 Особенности передачи аргументов в языке Си
- •8.3 Особые случаи передачи аргументов
- •8.3.1 Передача аргументом одномерного массива
- •Пример 6: сумма елеметiв массива (вариант 1).
- •Пример 7: сумма елеметiв массива (вариант 2).
- •8.3.2 Передача аргументом многомерного массива
- •8.3.3 Передача аргументом структуры
- •8.4 Аргументы командной строки
Тема 8. Передача аргументов функций
Цель: познакомиться со способами передачи аргументов функциям (по значению, по имени, по ссылке), с особенностями передачи аргументов в языке Си, с особыми случаями передачи аргументов (массивов, структур), с оператором -> , с аргументами функции main .
8.1 Способы передачи аргументов
8.1.1 Передача аргументов по значению
8.1.2 Передача аргументов по имени
8.1.3 Передача аргументов по ссылке
8.2 Особенности передачи аргументов в языке Си
8.3 Особые случаи передачи аргументов
8.3.1 Передача аргументом одномерного массива
8.3.2 Передача аргументом многомерного массива
8.3.3 Передача аргументом структуры
8.4 Аргументы командной строки
8.1 Способы передачи аргументов
В абсолютном большинстве языков программирования существует три способа передачи аргументов
-
по значению;
-
по имени;
-
по ссылке.
8.1.1 Передача аргументов по значению
Пример 1:
# Include <string.h>
INT max_int (int a, int b)
{Return (a> b)? a: b;}
main ()
{
int max_int (int, int);
int m1, len;
m1 = max_int (5, 9);
len = strlen ("по значению")
}
_____________________________________________________
аргументы
_____________________________________________________
формальный | фактический
_________________________|___________________________
имя скалярной переменной | изображение константы,
| Выражение
_________________________|___________________________
iмя массива символов | изображение строки
iмя буквенных указателя |
_________________________|___________________________
iмя массива | изображение массива
_________________________|___________________________
Способ передачи по значению применяется только для входных аргументов.
8.1.2 Передача аргументов по имени
Пример 2:
# Include <stdio.h>
# Include <string.h>
INT max_int (int a, int b)
{Return (a> b)? A: b;}
main ()
{
int max_int (int, int);
int a, b, m1;
int x [] = {-1, 10, -200, -9};
int m2;
char s [] = "по наименованию";
char * ms [] = {"Белеет", "парус"};
int l1, l2, l3;
int * px;
char * pms;
int i;
scanf ("% d", & a);
b = 25;
m1 = max_int (a, b);
px = x;
for (i = 0; i <3: i + +)
{M2 = max_int (* px + +, x [i +1]);
printf ("m2 =% d", m2);
};
l1 = strlen (S);
pms = ms;
for (i = 0; i <2; i + +)
{L2 = strlen (ms [i]);
l3 = strlen (* pms + +);
printf ("l2 =% d, l3 =% d, l2, l3);
}
}
____________________________________________________________
аргументы
____________________________________________________________
формальный | фактический
________________________________|___________________________
имя скалярной переменной | имя скалярной переменной
| Имя элемента массива
| Указатель на элемент массива
________________________________|___________________________
имя структуры | имя структуры
________________________________|___________________________
имя массива | имя массива
имя указателя | имя указателя
________________________________|___________________________
iмя массива символов | iмя массива символов
iмя буквенных указателя | iмя буквенных указателя
| Iмя элемента массива
| Массивов символов
| Iмя элемента массива
| Буквенных указателей
________________________________|___________________________
Способ передачи по имени применяется только для входных аргументов.