Не используя данные виды параметров в функцию передаются копии переменных и все операции производятся с копиями переменных, а сами переменные остаются без изменений.
Пример:
void swap(int val1, int val2)
{
int tmp;
tmp=val1;
val1=val2;
val2=tmp;
}
Замечание:
Здесь поменяются местами только копии переменных а на самих переменных это никак не отразится.
Для того чтобы поменять местами сами переменные необходимо:
1) объявить параметры указателями
2) объявить параметры ссылками
Примеры:
1) для первого нужно изменить определение функции
void swap(int*val1, int*val2)
{
int tmp;
tmp=*val1;
*val1=*val2;
*val2=tmp;
}
Вызов данной функции в программе будет выглядеть так:
#include
using namespace std;
void main()
{
int x,y;
swap(&x,&y);
…
cin.get();
cin.get();
}
“х” и ”y” в данном случае будут использовать значения переменных а не их копий.
2) для второго способа это выглядит так:
void swam(int&val1, int&val2)
{
int tmp;
tmp=val1;
val1=val2;
val2=tmp;
}
Вызов в функции будет выглядеть так:
#include
using namespace std;
void main()
{
int x,y;
swap(x,y);
…
cin.get();
cin.get();
}
“x” и ”y” так же как и в первом случае будут считывать значения переменных.
В каких случаях применение параметров-ссылок необходимо:
1) из функции нужно вернуть больше одного значения
2) в функцию передаётся больше одного объекта типа class
Рассмотрим пример:
Найти максимальное в массиве и дополнительно вернуть их индексы.
#include
using namespace std;
int main(int arr[n], int&index)
{
int min=arr[0];
for(int i=1; i< n; i++)
if(arr[i]< min)
{
min=arr[i];
index=I;
}
return min;
}
void main()
{
// объявление и инициализация массива
int ix, a_min;
a_min=min(a,x);
cin.get();
cin.get();
}
Замечание:
Переменная “a_min” содержит значение минимального в массиве, “ix” это индекс “a_min”, используя параметр ссылку функция обращается к той области файла где размещён сам объект без создания дополнительных копий.
Когда лучше использовать параметры-ссылки и параметры-указатели?
Ссылка может быть инициализирована значением объекта один раз, потом её изменить нельзя.
Указатель способен указывать на разные объекты в разное время или не указывать ни на что, поэтому перед использованием указателя функция должна его проверить.
Вместо параметра-ссылки не может передаваться”0” в отличии от указателя. Поэтому если необходимо передать нулевое значение и изменять адреса то лучше использовать параметры-указатели.
Набор из серебряных подстаканников ГЕРБ с ложкой монарх можно купить на сайте silverexpo.ru.