При цьому способі виклику функції передається не копія значення аргумента, а його адреса. Це означає, що всередині функції, яка викликається, ми маємо доступ до оригінала значення аргумента (через його адресу). Тому будь-яка модифікація відповідного формального параметра всередині функції означає й одночасну зміну аргумента. Для того, щоб вказати, що у функцію має передаватися адреса, опис відповідного формального параметра повинен використовувати операцію адресації &, як це показано в наступному прикладі.
/* приклад виклику функції з передачею адреси */
#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.
Слід зауважити, що коли використовується передача аргумента за адресою (посиланням), то у ролі самого аргумента можна використовувати лише змінні (константи і вирази використовувати заборонено).