Pointer Aritmetiği: Bellek Adreslerinde Matematiksel İşlemler

Pointer aritmetiği, bellek adreslerine toplama, çıkarma gibi matematiksel işlemler uygulamaktır. Bu teknik, dizileri dolaşmak, dinamik bellek yönetimi ve veri yapılarında sıklıkla kullanılır.

Bir pointeri bir tamsayı ile toplarsanız, adres o veri türünün boyutu kadar ileri gider. Örneğin int pointer'ı 1 artırsanız, bellek adresine 4 (int boyutu) eklenir, 1 değil. Derleyici bunu otomatik olarak hesaplar.

Adım 1: Dizi oluştur ve pointer tanımla

Bir dizi ve başlangıç adresini gösteren pointer ile başla:

1int dizi[5] = {10, 20, 30, 40, 50};
2int *ptr = dizi; // Dizinin ilk elemanını göster

Adım 2: Pointer'ı artır (increment)

Pointer'ı 1 artırmak, bir sonraki elemanı gösterir:

1ptr++; // Artık dizi[1]'i gösterir
2printf("%d\n", *ptr); // Çıktı: 20

Adım 3: Pointer aritmetiği ile dolaş

Reklam · TEST
AdSense Test ReklamıYazı arası (gönderi içi) · Yazı arası

Tüm diziye erişmek için döngü içinde işlem yap:

1 <stdio.h>
2
3int main() {
4int dizi[5] = {10, 20, 30, 40, 50};
5int *ptr = dizi;
6
7// Tüm elemanları yazdır
8for (int i = 0; i < 5; i++) {
9printf("%d ", *(ptr + i));
10}
11printf("\n");
12
13// Pointer'ı adım adım artırarak yazdır
14ptr = dizi;
15for (int i = 0; i < 5; i++) {
16printf("%d ", *ptr);
17ptr++;
18}
19printf("\n");
20
21return 0;
22}

Beklenen Çıktı:

110 20 30 40 50
210 20 30 40 50

İki pointer'ı çıkarırsanız, aralarında kaç eleman olduğunu bulursunuz:

[kod]
int p1 = &dizi[1];
int
p2 = &dizi[4];
int fark = p2 - p1; // Fark: 3 (üç eleman)
printf("%d\n", fark); // Çıktı: 3
[/cod]

- Pointer çıkarma ve karşılaştırma yapabilirsin, ama bölme veya çarpma yapamaz.
- Dizi sınırlarını aş; undefined behavior'a yol açar.
- `*(ptr + i)` ile `ptr[i]` aynı anlama gelir, derleyici her ikisini de pointer aritmetiğine çevirir.

Pointer aritmetiği, verimli bellek yönetiminin anahtarıdır. Dizileri, string'leri ve dinamik yapıları kontrol etmek için bu beceriyi içselleştir.

Reklam · TEST
AdSense Test ReklamıGönderi altı · Görüntülü
konu hakkında tepkinizi verebilirsiniz