Виклик функції з передачею адреси

При цьому способі виклику функції передається не копія значення аргумента, а його адреса. Це означає, що всередині функції, яка викликається, ми маємо доступ до оригінала значення аргумента (через його адресу). Тому будь-яка модифікація відповідного формального параметра всередині функції означає й одночасну зміну аргумента. Для того, щоб вказати, що у функцію має передаватися адреса, опис відповідного формального параметра повинен використовувати операцію адресації &, як це показано в наступному прикладі.

/* приклад виклику функції з передачею адреси */

#include<iostream>

#include<conio.h>

int square(int &); // прототип функції

using namespace std;

void main()

{

int p=5;

cout<<"p="<<p<<" p*p="<<square(p)<<" p="<<p<<endl;

_getch();

}

int square (int &x) // опис функції

{

x*=x;

return x;

}

Тут, при виклику функції square() було передано адресу аргумента (тобто змінної p). Ця адреса тепер використовується для доступу до комірки пам’яті, в якій зберігається значення змінної p. Тому тепер присвоєння x*=x змінює не лише значення формального параметру x, а й значення змінної p, яка використовується у ролі аргументу при виклику функції. Як наслідок, на екран виведеться такий рядок: p=5 p*p=25 p=25.

Слід зауважити, що коли використовується передача аргумента за адресою (посиланням), то у ролі самого аргумента можна використовувати лише змінні (константи і вирази використовувати заборонено).


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: