Pointer (Gösterici) Nedir? Adres ve Değer Kavramlarını Anlamak

crazy_coder

Moderatör
Katılım
20 Şub 2026
Mesajlar
204
Tepkime puanı
0
Puanları
16

Pointer (Gösterici): Belleğin Adres Defteri​


Normal bir değişken (örneğin int x = 5;), bir değeri saklar. Bir pointer ise, o değerin bellekteki adresini saklar. Yani bir pointer, "X verisi nerede?" sorusunun cevabıdır.



1. Temel Kavramlar: Adres (&) ve Değer (*)​


Pointer dünyasına girmek için iki temel operatörü bilmeniz gerekir:

Adres Operatörü (&): Bir değişkenin bellekteki fiziksel adresini verir.

İçerik/Yönlendirme Operatörü (*): Bir adreste hangi değerin olduğunu söyler.

C++:
int sayi = 42;
int* ptr = &sayi; // ptr, sayi degiskeninin adresini tutar.

cout << "Sayi Degeri: " << sayi << endl;     // 42
cout << "Sayi Adresi: " << &sayi << endl;    // 0x61ff0c (gibi bir adres)
cout << "Pointer'in Tuttugu Adres: " << ptr << endl; // 0x61ff0c
cout << "Pointer'in Gosterdigi Deger: " << *ptr << endl; // 42



2. Pointer Neden Gereklidir?​


"Zaten değişkene ismiyle ulaşabiliyorum, neden adresle uğraşayım?" diyebilirsiniz. İşte pointerların vazgeçilmez olduğu alanlar:


  • []Performans: Dev boyutlardaki verileri (örneğin binlerce satırlık bir listeyi) fonksiyonlara kopyalamak yerine, sadece adresini göndererek çok daha hızlı işlem yaparsınız.
    []Dinamik Bellek Yönetimi: Program çalışırken ne kadar belleğe ihtiyacınız olacağını bilmiyorsanız (örneğin kullanıcı kaç sayı girecek?), pointerlar sayesinde ihtiyacınız kadar yer açabilirsiniz.
  • Dizi ve Nesne Yönetimi:** C++'ta diziler aslında arka planda birer pointer gibi davranır.




3. Null Pointer ve Tehlikeler​


Bir pointer tanımladığınızda içine bir adres koymazsanız, rastgele bir yeri gösterebilir. Bu "Vahşi Pointer" (Wild Pointer) olarak bilinir ve programın çökmesine neden olur.

Güvenli Yöntem (C++11 ve sonrası):
C++:
int* ptr = nullptr; // Pointer'in hicbir yeri gostermedigini garanti eder.



4. Pointer ve Diziler Arasındaki İlişki​


C++'ta bir dizinin ismi, aslında o dizinin ilk elemanının adresidir.

C++:
int dizi[] = {10, 20, 30};
int* p = dizi; // &dizi[0] ile aynidir.

cout << *p << endl;       // 10
cout << *(p + 1) << endl; // 20 (Pointer aritmetigi ile bir sonraki adrese gecer)



Sonuç​


Pointerlar, C++'ı diğer yüksek seviyeli dillerden (Java, Python gibi) ayıran en büyük farktır. Size doğrudan donanım üzerinde kontrol gücü verir. Başlarda karmaşık gelse de, bol pratikle bellek adreslerini yönetmek bir süper güç haline gelecektir.
 
Geri
Üst