Bir fonksiyona argümanların aktarılması için pointer kullanımı; fonksiyona gönderilen bir argümanın adresini resmi parametreye kopyalar. Fonksiyonun içinde, adres aramada kullanılan gerçek argümana erişmek için kullanılır. Bu, parametreye yapılan değişikliklerin geçirilen argümanı etkilediği anlamına gelir.
Değeri pointer(işaretçi) ile iletmek için argüman işaretçileri, diğer herhangi bir değer gibi işlevlere aktarılır. Bu tanımdan yola çıkarak, fonksiyona gönderilen argümanların pointer değerleri ile iki tam sayının yerlerini değiştiren swap() fonksiyonunu oluşturalım.
1 2 3 4 5 6 7 8 9 10 11 | // fonksiyonun tanımlanması void swap(int *x, int *y) { int temp; temp = *x; /* x adresinideki değeri temp değişkenine kaydetme */ *x = *y; /* y içindeki değeri x'e kaydetme */ *y = temp; /* temp ile gösterilen adresteki değeri y'nin gösterdiği adrese kaytme */ return; } |
Aşağıdaki örnekte olduğu gibi işaretçiyi değerlere geçirerek swap() işlevini çağıralım.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 | #include <iostream> using namespace std; // fonksiyon bildirimi void swap(int *x, int *y); int main () { // yerel değişkenler int a = 100; int b = 200; cout << "Degismeden once a :" << a << endl; cout << "Degismeden once b :" << b << endl; /* swap fonksiyonunu işaretçi değerleri ile çağırma * &a ile değişkenin adresini işaretçiye gönderir. * &b ile değişkenin adresini işaretçiye gönderir. */ swap(&a, &b); cout << "Degismeden sonra a :" << a << endl; cout << "Degismeden sonra b :" << b << endl; return 0; } |
Yukarıdaki kod bir dosyada bir araya getirildiğinde, derlenip yürütülürse, aşağıdaki sonucu verir.
1 2 3 4 5 6 | Degismeden once a :100 Degismeden once b :200 Degismeden sonra a :200 Degismeden sonra b :100 |
Burada bellek üzerinde adresleri ile işlem yapıldığı için yerel olan değişken adresi aracılığı ile fonksiyon içinde doğrudan değiştirilmiştir. pointer kullanılırken değişkenlerin her hangi bir yerden değiştirilebileceğini unutmamak önemlidir.6
[…] Pointer ile Çağırma: Bu yöntem, bir argümanın adresini resmi parametreye kopyalar. Fonksiyonun içinde, adres aramada kullanılan gerçek argümana erişmek için kullanılır. Bu, parametreye yapılan değişikliklerin argümanı etkilediği anlamına gelir. […]