Вызов C ++ по ссылке: использование указателей (с примерами)

В этом руководстве мы узнаем о вызове C ++ по ссылке для передачи указателей в качестве аргумента функции с помощью примеров.

В руководстве по функциям C ++ мы узнали о передаче аргументов функции. Этот используемый метод называется передачей по значению, поскольку передается фактическое значение.

Однако есть другой способ передачи аргументов функции, когда фактические значения аргументов не передаются. Вместо этого передается ссылка на значения.

Например,

 // function that takes value as parameter void func1(int numVal) ( // code ) // function that takes reference as parameter // notice the & before the parameter void func2(int &numRef) ( // code ) int main() ( int num = 5; // pass by value func1(num); // pass by reference func2(num); return 0; )

Обратите внимание на &in void func2(int &numRef). Это означает, что мы используем адрес переменной в качестве параметра.

Итак, когда мы вызываем func2()функцию main(), передавая переменную num в качестве аргумента, мы фактически передаем адрес переменной num вместо значения 5 .

C ++ Передача по значению и передача по ссылке

Пример 1. Передача по ссылке без указателей

 #include using namespace std; // function definition to swap values void swap(int &n1, int &n2) ( int temp; temp = n1; n1 = n2; n2 = temp; ) int main() ( // initialize variables int a = 1, b = 2; cout << "Before swapping" << endl; cout << "a = " << a << endl; cout << "b = " << b << endl; // call function to swap numbers swap(a, b); cout << "After swapping" << endl; cout << "a = " << a << endl; cout << "b = " << b << endl; return 0; )

Вывод

 Перед заменой a = 1 b = 2 После замены a = 2 b = 1

В этой программе мы передали функции переменные a и b swap(). Обратите внимание на определение функции,

 void swap(int &n1, int &n2)

Здесь мы используем, &чтобы обозначить, что функция будет принимать адреса в качестве своих параметров.

Следовательно, компилятор может определить, что вместо фактических значений в параметры функции передается ссылка на переменные.

В swap()функции параметры функции n1 и n2 указывают на то же значение, что и переменные a и b соответственно. Следовательно, обмен происходит по фактической стоимости.

Эту же задачу можно выполнить с помощью указателей. Чтобы узнать об указателях, посетите C ++ Pointers.

Пример 2: Передача по ссылке с использованием указателей

 #include using namespace std; // function prototype with pointer as parameters void swap(int*, int*); int main() ( // initialize variables int a = 1, b = 2; cout << "Before swapping" << endl; cout << "a = " << a << endl; cout << "b = " << b << endl; // call function by passing variable addresses swap(&a, &b); cout << "After swapping" << endl; cout << "a = " << a << endl; cout << "b = " << b << endl; return 0; ) // function definition to swap numbers void swap(int* n1, int* n2) ( int temp; temp = *n1; *n1 = *n2; *n2 = temp; )

Вывод

 Перед заменой a = 1 b = 2 После замены a = 2 b = 1

Здесь мы видим, что результат такой же, как и в предыдущем примере. Обратите внимание на линию,

 // &a is address of a // &b is address of b swap(&a, &b);

Здесь адрес переменной передается во время вызова функции, а не переменной.

Поскольку вместо значения передается адрес, *для доступа к значению, хранящемуся в этом адресе, необходимо использовать оператор разыменования .

 temp = *n1; *n1 = *n2; *n2 = temp; 

*n1и *n2дает значение, хранящееся по адресу n1 и n2 соответственно.

Так как n1 и n2 содержат адреса a и b, все будет сделано, *n1и * n2 изменит фактические значения a и b.

Следовательно, когда мы печатаем значения a и b в main()функции, значения меняются.

Интересные статьи...