Diziler ve Pointer İlişkisi: Pointer Aritmetiği Nasıl Yapılır?

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:

ÖzellikDizi (Array)Pointer
DeğişebilirlikSabittir, 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ölgesiGenellikle 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.
 
Geri
Üst