Bu eğitimde, örnekler yardımıyla işleve bir argüman olarak işaretçileri geçirmeye referansla C ++ çağrısı hakkında bilgi edineceğiz.
C ++ İşlevleri öğreticisinde, bağımsız değişkenleri bir işleve geçirmeyi öğrendik. Kullanılan bu yönteme, gerçek değer iletildiği için değere göre geçiş denir.
Bununla birlikte, bağımsız değişkenlerin gerçek değerlerinin aktarılmadığı bir işleve bağımsız değişken iletmenin başka bir yolu vardır. Bunun yerine, değerlere referans aktarılır.
Örneğin,
// 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; )
Dikkat &
in void func2(int &numRef)
. Bu, değişkenin adresini parametremiz olarak kullandığımızı gösterir.
Dolayısıyla, num değişkenini argüman olarak ileterek func2()
işlevi çağırdığımızda, main()
aslında 5 değeri yerine num değişkeninin adresini geçiyoruz .

Örnek 1: İşaretçiler olmadan referansla geçiş
#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; )
Çıktı
Takas etmeden önce a = 1 b = 2 Yer değiştirdikten sonra a = 2 b = 1
Bu programda a ve b değişkenlerini swap()
fonksiyona aktardık. İşlev tanımına dikkat edin,
void swap(int &n1, int &n2)
Burada, &
fonksiyonun adresleri parametreleri olarak kabul edeceğini belirtmek için kullanıyoruz .
Dolayısıyla, derleyici gerçek değerler yerine değişkenlerin referansının fonksiyon parametrelerine aktarıldığını belirleyebilir.
Olarak swap()
işlev işlev parametreleri n1 ve n2 değişkenler, a ve b sırasıyla aynı değere işaret ediyor. Dolayısıyla, takas gerçek değer üzerinden gerçekleşir.
Aynı görev işaretçiler kullanılarak da yapılabilir. İşaretçiler hakkında bilgi edinmek için C ++ İşaretçileri ziyaret edin.
Örnek 2: İşaretçileri kullanarak referansla geçiş
#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; )
Çıktı
Takas etmeden önce a = 1 b = 2 Yer değiştirdikten sonra a = 2 b = 1
Burada çıktının önceki örnekle aynı olduğunu görebiliriz. Çizgiye dikkat edin,
// &a is address of a // &b is address of b swap(&a, &b);
Burada değişkenin adresi değişken yerine işlev çağrısı sırasında aktarılır.
Değer yerine adres geçtiği *
için, bu adreste saklanan değere erişmek için bir referans operatörü kullanılmalıdır.
temp = *n1; *n1 = *n2; *n2 = temp;
*n1
ve *n2
sırasıyla n1 ve n2 adreslerinde saklanan değeri verir.
N1 ve n2, a ve b'nin adreslerini içerdiğinden, herhangi bir şey yapılır *n1
ve * n2, a ve b'nin gerçek değerlerini değiştirir.
Bu nedenle, a ve b'nin main()
değerlerini fonksiyonda yazdırdığımızda değerler değişir.