Referanslar fonksiyon parametresi olarak kullanılabilirler. Madem ki bir referans aynı türden bir nesneyle ilk değer verilerek tanımlanmak zorundadır, o halde parametresi referans olan fonksiyonlar aynı türden bir nesnenin kendisiyle çağırılmak zorundadır.
/* fonksiyon parametresi olan referans örneği */
#include <stdio.h>
#if 1 /* parametresi referans */
void fonk(int &a)
{
a = 20;
}
void main(void)
{
int x = 10;
fonk(x);
printf(“%d\n”, x);
}
#endif
#if 0 /* gösterici karşılığı */
void fonk(int *a)
{
*a = 20;
}
void main(void)
{
int x = 10;
fonk(&x);
printf(“%d\n”, x);
}
#endif
/*————————————————————*/
Bir C programında fonk(a) gibi bir çağırma işlemiyle a değiştirilemez. Oysa C++’ta böyle bir çağırma fonksiyonun parametre değişkeni bir referans ise a paametresini değiştirebilir. Klasik bir C bakış açısıyla parametre olan a’nın değiştirilmeyeceği sanılabilir. Okunabilirliği kuvvetlendirmek için eğer parametreyi değiştirecek bir fonksiyon tasarlanacaksa bunun için referans değil gösterici kullanılmalıdır. Fonksiyonun parametre değişkeni referans ise derleyici tarafından otomatik olarak yapılan bir adres aktarımı söz konusudur.
|
Referans uygulaması
|
Gösterici eşdeğeri
|
|
int a = 10;
int &r1 = a;
int &r2 = r1;
r2 = 20;
printf(“%d\n”, r1);
|
int a = 10;
int *r1 = &a;
int r2 = &r1;
*r2 = 20;
printf(“%d\n”, *r1);
|
/*—–referans.cpp—–*/
#include <stdio.h>
#if 1 /* referans örneği */
void main(void)
{
int a = 10;
int &a1 = a;
int &a2 = a1;
a2 = 20;
printf(“%d\n”, a1);
}
#endif
#if 0 /*gösterici eşdeğeri */
void main(void)
{
int a = 10;
int *a1 = &a;
int *a2 = a1;
*a2 = 20;
printf(“%d\n”, *a1);
}
#endif
/*————————-*/
/*—–referan1.cpp—–*/
#include <stdio.h>
void main(void)
{
int a = 10;
int &b = a;
printf(“%p %p\n”, &a, &b);
}
/*————————–*/
Bir referans & operatörüyle adres alma işlemine sokulabilir. Bu durumda elde edilen değer referans içerisinde bulunan adreste bulunan nesnenin adresidir. Bu da referans içerisindeki adresle aynı olmak zorundadır. Bir referansın da bir adresi vardır. Ama o adres değeri geçerli bir ifdade ile elde edilemez. r bir referans olmak üzere & &r; ifadesi geçerli değildir. Çünkü bu ifadenin eşdeğer gösterici karşılığı & &*p;’dir ve &*p bir nesne değildir.
Yorumlar
Yorum Yok
Yorumunuzu Ekleyin
Yorum eklemek için giris yapmalısınız.