Referanslar Flashcards
Referans nedir
c++ ta pointerların bir üst seviyesidir. Referans herhangi bir değişkenin diğer bir ismini söyler.
int x = 34;
int &ref = x; // bu referans x i gösterir. x i kullandığımız her yerde ref i de kullanabiliriz.
ref de yapılan değişiklikler ( aritmetic) x te de değişir.
ref kullanarak pointer yerine geçebilir. ÇÜNKÜ REFERANSLAR ADRES VE İÇİNDEKİ DEĞİŞKENİ TUTAR.
NEDEN KULLANILIR?
çünkü daha yüksek seviyeli dillerde pointer kavramı kaldırıldı. Mesela c#. referanslar pointerların maskelenmesidir.
Örnek
int main()
int x = 5;
int&r = x;
r++; // x = 6 olur.
ÖNEMLİ AÇIKLAMA
void func(int a){ a = 999;}
int x = 234;
cout«_space;x «_space;endl;
func(a);
cout«_space;x «_space;endl;
burda x değeri aynı kalır. ÇÜNKÜ x i 234 olarak atadığımız için fonksiyon içine xin gösterdiği değeri değil tam olara x in kendisini yani 234 değerini atarız. o yüzden fonksiyon içinde 234 = 9999 gibi bir durum oluşur. Bu yüzden değişmez.
ONUN YERİNE REFERANS KULLANILIR KOLAYLIK OLSUN DİYE.
void func(int &a){ a = 999;}
int x = 234;
cout«_space;x «_space;endl;
func(a);
cout«_space;x «_space;endl;
BURDA x değeri değişir çükü referansta yapılan değişiklik x i de değiştirir.
Farklı referanslar aynı değer
int x = 6;
int &r1 = x;
int &r2 = x;
int &r3 = x;
Structlar da referanslanabilir
struct Data{
int a,b,c;
};
Data mydata;
Data &r = mydata;
r.b = 4;
Fonksiyonda referans
int g = 90;
int &func(){
return g;
}
int main()
func() = -1 // normalde fonksiyona değer ataması yapamayız. Ancak refeans değeri geri döndüğü için burda func() , g yerine geçer ve onun referansıdır.
O ZAMAN ;;;
referans fonksiyonlar aynı zamanda bir değişken ve çıktısını refere eder.
int *func(){
return &g;
}
int main()
*func() = -1
burda da aynı şekilde bir atama yapılabilir.
REFERANS VS POİNTER FARKI
pointer array :
int**a ={&a,&B,&c} yapabiliriz ancak;
int&a ={r1,r2,r3} yapamayız
referance array yoktur.
NOT: int a[10]={0};
int (&r)[10] = a; yapabiliriz. Yani referanslarla dizi tutamayız ama dizinin ismini referanslayabiliriz.