Menu
Coddy logo textTech

İşaretçi Aritmetiği

Coddy'nin C Journey'sinin Mantık & Akış bölümünün bir parçası. Ders 9 / 63.

Dizi öğelerine *(array + i) gibi işaretçi notasyonu kullanarak nasıl erişeceğinizi öğrendiniz. Şimdi daha da güçlü bir teknik keşfedeceksiniz: işaretçi aritmetiği; bu teknik, işaretçileri basit artırma ve eksiltme işlemleri kullanarak bellek üzerinde hareket ettirmenize olanak tanır.

Bir işaretçiyi ++ ile artırdığınızda veya -- ile azalttığınızda, işaretçi sadece bir bayt hareket etmez. Bunun yerine, işaret ettiği veri tipinin boyutu kadar hareket eder. Bir tamsayı işaretçisi için, ptr++ ifadesi sizeof(int) bayt kadar ileri gider ve bellekte tam olarak bir sonraki tamsayının üzerine gelir.

int numbers[5] = {10, 20, 30, 40, 50};
int *ptr = numbers;    // İlk elemanı işaret eder (10)
ptr++;                 // Şimdi ikinci elemanı işaret ediyor (20)
ptr++;                 // Şimdi üçüncü elemanı işaret ediyor (30)

Bu otomatik boyut hesaplaması, işaretçi aritmetiğini bu kadar güçlü ve kullanışlı kılan şeydir. Bayt hesaplamaları konusunda endişelenmenize gerek yoktur; C, işaretçinin veri türüne bağlı olarak bellek adreslemesini sizin için halleder.

İşaretçi aritmetiği, diziler üzerinde döngülerle gezinmek için özellikle yararlıdır. Dizi indekslerini kullanmak yerine, her bir eleman üzerinden sırayla geçmek için bir işaretçiyi artırabilirsiniz; bu da genellikle daha verimli kodla sonuçlanır.

challenge icon

Görev

Kolay

Dizi üzerinde gezinmek ve işlem yapmak için işaretçi artırma işlemlerini kullanarak işaretçi aritmetiğini gösteren bir C programı yazın. Programınız şunları yapmalıdır:

  1. 5 öğeli, data adlı bir tamsayı dizisi tanımlayın ve onu {12, 24, 36, 48, 60} değerleriyle başlatın
  2. ptr adlı bir tamsayı işaretçisi tanımlayın ve dizinin ilk öğesini gösterecek şekilde başlatın
  3. Yalnızca işaretçi aritmetiğini kullanarak dizinin tamamında gezinmek için 5 kez çalışan bir for döngüsü kullanın
  4. Döngünün içinde:
    • Dereference operatörünü kullanarak ptr'nin gösterdiği mevcut değeri yazdırın
    • ptr biçim belirtecini kullanarak %p'de depolanan bellek adresini yazdırın
    • Sonraki öğeye geçmek için ptr++ kullanarak işaretçiyi artırın
  5. Döngüden sonra, ptr'yi dizinin ilk öğesini yeniden gösterecek şekilde ayarlayın
  6. Üçüncü öğeye (indeks 2) doğrudan erişmek ve onu yazdırmak için işaretçi aritmetiğini ve *(ptr + 2) ifadesini kullanın
  7. Son öğeye (indeks 4) doğrudan erişmek ve onu yazdırmak için işaretçi aritmetiğini ve *(ptr + 4) ifadesini kullanın

Çıktınız aşağıdaki biçimde sonuçları göstermelidir:

Value: 12, Address: [address]
Value: 24, Address: [address]
Value: 36, Address: [address]
Value: 48, Address: [address]
Value: 60, Address: [address]
Third element: 36
Last element: 60

Bu alıştırma, işaretçi artırma işlemlerinin veri türünün boyutuna göre otomatik olarak ilerlemeyi nasıl sağladığını ve bir temel işaretçi konumundan belirli uzaklıklardaki dizi öğelerine erişmek için işaretçi aritmetiğini nasıl kullanabileceğinizi anlamanızı ölçer.

Kendin dene

#include <stdio.h>

int main() {
    // TODO: Kodunuzu buraya yazın
    // 'data' dizisini bildirin ve {12, 24, 36, 48, 60} değerleriyle başlatın
    // 'ptr' işaretçisini bildirin ve ilk elemanı gösterecek şekilde başlatın
    // Diziyi dolaşmak için işaretçi aritmetiği ile bir for döngüsü kullanın
    // Her bir değeri ve adresi yazdırın, ardından işaretçiyi artırın
    // İşaretçiyi sıfırlayın ve belirli elemanlara erişmek için işaretçi aritmetiği kullanın
    
    return 0;
}
quiz iconKendini test et

Bu ders kısa bir quiz içerir. Soruları yanıtlamak ve ilerlemeni kaydetmek için derse başla.

Mantık & Akış bölümündeki tüm dersler

Kendi başına pratik yap: Online C derleyicisi