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; )

Забележете &в 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 ++.

Пример 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()функцията, стойностите се променят.

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