crazy_coder
Moderatör
- Katılım
- 20 Şub 2026
- Mesajlar
- 204
- Tepkime puanı
- 0
- Puanları
- 16
Diziler ve Pointer İlişkisi: Bellekte Yolculuk
Bir dizi tanımladığınızda, elemanlar bellekte yan yana (sıralı) dizilir. Bu sıralı yapı, pointer aritmetiği kullanarak dizinin içinde sadece adresleri kaydırarak gezinmemize olanak tanır.
1. Dizi İsmi Aslında Bir Adrestir
Bir dizi tanımladığınızda, dizinin adı aslında &dizi[0] adresine eşittir.
C++:
int sayilar[] = {10, 20, 30, 40};
int* ptr = sayilar; // '&sayilar[0]' ile tamamen aynıdır.
cout << "Dizinin ilk adresi: " << sayilar << endl;
cout << "Pointer'in tuttugu adres: " << ptr << endl;
2. Pointer Aritmetiği: Adresleri Toplamak ve Çıkarmak
Pointer aritmetiği normal matematikten farklıdır. Bir pointer'a 1 eklediğinizde, adres değeri sadece 1 artmaz; pointer'ın işaret ettiği veri tipinin boyutu kadar artar.
ptr + 1: Bir sonraki elemanın adresine gider (int için 4 byte ileri).
ptr - 1: Bir önceki elemanın adresine gider.
C++:
int* ptr = sayilar; // 10 degerini gosteriyor
cout << *ptr << endl; // Çıktı: 10
cout << *(ptr + 1) << endl; // Çıktı: 20 (Bellekte 4 byte ileri gitti)
cout << *(ptr + 3) << endl; // Çıktı: 40 (Bellekte 12 byte ileri gitti)
3. Köşeli Parantezlerin Sırrı
C++ derleyicisi, siz dizi yazdığınızda bunu arka planda şu şekilde işler:
*(dizi + i)
Bu yüzden C++'ta şu iki yazım da tamamen aynı sonucu verir:
C++:
cout << sayilar[2]; // Normal kullanım
cout << *(sayilar + 2); // Pointer aritmetigi ile kullanım
4. Diziler ve Pointerlar Arasındaki Kritik Farklar
Her ne kadar benzer olsalar da, aralarında hayati bir fark vardır:
| Özellik | Dizi (Array) | Pointer |
|---|---|---|
| Değişebilirlik | Sabittir, başka bir adresi gösteremez. | Değişkendir, farklı adreslere atanabilir. |
| Boyut (sizeof) | Tüm dizinin toplam boyutunu verir. | Sadece adresin boyutunu (4 veya 8 byte) verir. |
| Bellek Bölgesi | Genellikle Stack (Yerel ise). | Stack veya Heap olabilir. |
Sonuç
Pointer aritmetiği, diziler üzerinde çok hızlı ve düşük seviyeli işlemler yapmanızı sağlar. Özellikle büyük veri bloklarını işleyen algoritmalar veya oyun motoru çekirdeklerinde indeksleme yerine doğrudan adres kaydırma işlemleri performans avantajı sunabilir. Ancak dikkatli olun; dizinin sınırları dışına bir adrese kaymak (ptr + 100 gibi), programınızın çökmesine yol açar.