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österAdım 2: Pointer'ı artır (increment)
Pointer'ı 1 artırmak, bir sonraki elemanı gösterir:
1ptr++; // Artık dizi[1]'i gösterir2printf("%d\n", *ptr); // Çıktı: 20Adım 3: Pointer aritmetiği ile dolaş
Tüm diziye erişmek için döngü içinde işlem yap:
1#include <stdio.h>23int main() {4int dizi[5] = {10, 20, 30, 40, 50};5int *ptr = dizi;67// Tüm elemanları yazdır8for (int i = 0; i < 5; i++) {9printf("%d ", *(ptr + i));10}11printf("\n");1213// Pointer'ı adım adım artırarak yazdır14ptr = dizi;15for (int i = 0; i < 5; i++) {16printf("%d ", *ptr);17ptr++;18}19printf("\n");2021return 0;22}Beklenen Çıktı:
110 20 30 40 50210 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.
0 yorum