En basit şekilde tanımlamak gerekirse başka bir değişkenin işaret eden değişken. Yani başka bir diyişle bir değişkeni başka bir adla kullanmak gibi bir şey.
int main() {
int a = 5; // a değişkeni
int& ref = a; // a değişkenine referans
ref++;
cout << a << endl; // 6
cout << ref << endl; // 6
}
Buna benzer bir tane daha yapımız var ona pointer diyoruz. Şuanlık konumuz o değli.
Neden biz böyle bir şey yaptık? a değişkenini direk aynı şekilde kullanamaz mıydık? Bu örnek için evet kullanabilirdik. Tamamiyle gereksiz bir işlem yaptık. Peki aşağıdaki fonksiyona bir bakalım:
void increment(int i) {
i++;
}
int main() {
int a = 5;
increment(a);
cout << a; // 5
}
Burada main fonksiyonunun içindeki a değişkeni neden değişmiyor? Çünkü fonksiyona yolladığımız a değişkeni kopyalanıyor. Kopyalanmış hali 1 artırılıyor. Bunun basit bir çözüm yolu var:
int increment(int i) {
i++;
return i;
}
int main() {
int a = 5;
a = increment(a);
cout << a; // 6
}
Peki ben 2 tane ya da 3 tane değişken gönderirsem hepsi için return nasıl alacağım. Alamam sonuç olarak bizim alternatif bir yola ihtiyacımız var:
void increment(int& a, int& b, int& c) {
a++;
b++;
c++;
}
int main() {
int sayi1 = 2;
int sayi2 = 9;
int sayi3 = 11;
increment(sayi1, sayi2, sayi3);
cout << sayi1 << endl; // 3
cout << sayi2 << endl; // 10
cout << sayi3 << endl; // 12
}
burada referansları kullandık. sayi1 ,sayi2 ve sayi3 ün bir kopyasını oluşturmak yerine direk olarak kendilerini fonksiyona gönderdi. Bu orjinal değerler üzerine işlem yapıldı. Sonuç olarak fonksiyon bittikten sonra sayi1, sayi2 ve sayi3 ‘ü yazdırdığımızda modifiye edilmiş hallerini okuduk.
Leave a Reply