# 1.19 References

C++'da referans, bir değişkenin başka bir değişkenle olan ilişkisidir. Referanslar, bir değişkenin bellekteki adresine işaret eden alternatif isimler olarak düşünülebilir. Bu, belirli bir değişkenin bellekteki yerini değiştirmeden, o değişken üzerinde işlem yapmanıza olanak tanır.

**Referans Oluşturma**

Bir referans oluşturmak için, değişkenin tipinin ardından `&` işaretini kullanarak referansı tanımlarsınız.

**Örnek: Basit Referans Oluşturma**

```cpp
#include <iostream>
using namespace std;

int main() {
    int original = 30; // Değişken tanımı
    int &ref = original; // Referans oluşturma

    cout << "Orijinal Değişken: " << original << endl; // 30
    cout << "Referans Değişken: " << ref << endl;      // 30

    ref = 50; // Referans üzerinden değeri değiştirme

    cout << "Orijinal Değişken (değiştirildikten sonra): " << original << endl; // 50
    cout << "Referans Değişken (değiştirildikten sonra): " << ref << endl;      // 50

    return 0;
}
```

Yukarıdaki örnekte, `ref` değişkeni `original` değişkenine bir referans olarak tanımlanmıştır. `ref` üzerinden yapılan değişiklikler, `original` üzerinde de değişiklik yapar.

**Bellek Adresi**

Her değişken, bellekte bir adrese sahiptir. `&` operatörü kullanarak bir değişkenin bellek adresini alabilirsiniz.

**Örnek: Bellek Adresini Alma**

```cpp
#include <iostream>
using namespace std;

int main() {
    int number = 42; // Değişken tanımı

    cout << "Değişkenin Değeri: " << number << endl;                     // 42
    cout << "Değişkenin Bellek Adresi: " << &number << endl;            // Bellek adresini yazdırma

    return 0;
}
```

**Referansların Avantajları**

* **Bellek Verimliliği**: Referanslar, değişkenin değerini kopyalamak yerine doğrudan bellekteki adresine işaret eder. Bu, bellek kullanımını optimize eder.
* **Fonksiyonlarda Kullanım**: Fonksiyon parametreleri olarak referanslar kullanarak, fonksiyonların doğrudan değişken üzerinde işlem yapmasını sağlayabilirsiniz.

**Örnek: Fonksiyona Referans Gönderme**

```cpp
#include <iostream>
using namespace std;

void increment(int &num) {
    num++; // Referans üzerinden değeri artırma
}

int main() {
    int value = 10;

    cout << "Başlangıç Değeri: " << value << endl; // 10
    increment(value); // value referans olarak gönderiliyor
    cout << "Artırıldıktan Sonra: " << value << endl; // 11

    return 0;
}
```
