Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
О.О.П / 3_кол / Лекції / лекции_C++ (14)у.doc
Скачиваний:
9
Добавлен:
30.05.2020
Размер:
124.93 Кб
Скачать

4. Передача параметрів у функцію

У мові C/C++ є три способи передачі параметрів у функцію.

Перший спосіб – це передача параметрів за значенням. Якщо в деяку функцію треба передавати параметр через значення, то формат заголовка функції має бути наступним:

<тип> <ім'я> ( <тип> <ім'я>)

Наприклад, хай функція має заголовок void f_1(int x). В цьому випадку передача параметра в тіло даної функції відбуватиметься за значенням, а саме: інформація з пам'яті викликаючою програми пересилається (переписується, копіюється) в пам'ять функції. Цей спосіб передачі параметрів схемнио демонструється на мал.1, де A – адреса області пам'яті, програми, що знаходиться під контролем, з якої функція викликається; B – адреса області пам'яті під контролем функції, що викликається. При такому способі передачі треба мати на увазі, що функція, що викликається, не може змінити інформацію в області пам'яті A.

А В

Х

Х

Число х із А засилається в В

Мал.1

Програма fun_6. Передача параметра у функцію за значенням.

void f_1(int x);

void main()

{ int y = 2;

cout << “Значення змінної до виклику функції y = ” << y

<< “\n”; f_1(y);

cout << “Вийшли з функції. \n\n”;

cout << “Значення змінної після виклику функції y = “ << y

<< “\n”;

}

void f_1(int x)

{ cout << “Виконується функція. \n\n”;

cout << “У функцію передана змінна x = “ << x << “\n”;

x = 10;

cout << “Після перетворення змінної у функції x = “ << x << “\n”; }

Функція f_1() змінною x привласнює значення 10. При цьому в головній програмі значення в змінній в не міняється. Результат роботи даної програми буде наступний:

Значення змінної до виклику функції y = 2;

Виконується функція

У функцію передана змінна x = 2;

Після перетворення змінної у функції x = 10;

Вийшли з функції

Значення змінної після виклику функції y = 2;

З трасування програми видно, що хоча значення локального параметра x в тілі функції змінилося, значення параметра у в головній програмі залишилося без зміни.

Другий спосіб передачі параметрів полягає в тому, що у функцію передається не аргумент, а значення адреси цього аргументу. Загальний формат заголовка функції в цьому випадку має бути наступним:

<тип> <ім'я> ( <тип> *<ім'я>)

Наприклад, хай функція має заголовок void f_1(int *x). Локальним параметром у функції в цьому випадку є покажчик, в який із зухвалої програми пересилається адреса змінної. Даний спосіб передачі параметра в тіло функції називається передачею параметра по покажчику. Він дозволяє з функції змінювати інформацію в пам'яті зухвалої програми. Схема передачі параметра по покажчику представлена на мал. 2.

А В

Х

А

Адреса А засилається у вказівник В

Мал.2

Програма fun_7. Передача параметра по покажчику.

void f_1(int *x);

void main()

{

int y = 2;

cout << “Адреса змінної y = ” << &y << “\n”;

cout << “Значення змінної y до виклику функції y = ” << y << “\n”;

f_1( &y); // У функцію пересилаємо адресу змінної y.

cout << “Вийшли з функції. \n\n”;

cout << “Значення змінної y після виклику функції y = ” << y << “\n”;

}

void f_1(int *x) // x – змінна для адреси.

{

cout << “Виконується функція. \n\n”;

cout << “В покажчик x передана адреса змінної в. x = ” << x << “\n”;

// Виводиться число з адреси, яка міститься в x.

cout << “В цій адресі число = “ << *x << “\n”;

*x=10; // Число 10 засилає в адресу, яка

// міститься в x.

cout << “Після перетворення змінної у функції x = “ << x << “\n”;

}

Функція f_1() змінною, адреса якої записана в покажчику x, привласнює значення 10. Оскільки при виклику функції f_1() з головної програми в покажчик x пересилається адреса змінної y, то тим самим значення 10 привласнюється y з головної програми. Результат роботи даної програми буде наступний.

Адреса змінної y = Ny

Значення змінної y до виклику функції y = 2

Виконується функція

У покажчик x передана адреса змінної в. x = Ny

У цій адресі число = 2;

Після перетворення змінної у функції x = 10;

Вийшли з функції

Значення змінної y після виклику функції y = 10

Відмітимо, що після виклику функції значення змінної у в головній програмі змінилося. Крім того, адреса Ny змінної y збігається із значенням адреси в покажчику x, який є локальним параметром для функції void f_1().

Третій спосіб передачі параметрів – передача параметра по засланню. Загальний формат заголовка функції в цьому випадку має бути наступним:

<тип> <ім'я> ( <тип> &< ім'я >)

Наприклад, якщо функція має заголовок void f_1(int &x), то в цьому випадку функція працює із змінними із зухвалої програми.

Програма fun_8. Передача параметра по посиланню.

void f_1(int &x);

void main()

{ int y = 2;

cout << “Значення змінної до виклику функції y = ” << y << “\n”;

f_1(y);

cout << “Вийшли з функції.\n\n”;

cout << “Значення змінної y після виклику функції y = ” << y << “\n”;

}

void f_1(int &x)

{

cout << “Виконується функція.\n\n”;

cout << “У функцію передано значення ”<< “x= “ << x << “\n”;

x = 10;

cout << “Після перетворення змінної у функції x = “ << x << “\n”;

}

Результат роботи даної програми буде наступний.

Значення змінної до виклику функції y = 2;

Виконується функція

У функцію передано значення x = 2;

Після перетворення змінної у функції x = 10;

Вийшли з функції

Значення змінної після виклику функції y = 10;

Соседние файлы в папке Лекції