Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Тема 6,7,8 базовый Си.docx
Скачиваний:
4
Добавлен:
16.11.2018
Размер:
117.96 Кб
Скачать

Тема 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мя элемента массива

| Буквенных указателей

________________________________|___________________________

Способ передачи по имени применяется только для входных аргументов.