Menu
Coddy logo textTech

İşaretçilerin Karşılaştırılması

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

İşaretçi aritmetiğini kullanarak dizilerde nasıl hareket edeceğinizi öğrendiniz. Şimdi, işaretçilerin de normal değişkenlerle kullandığınız aynı ilişkisel operatörler kullanılarak karşılaştırılabileceğini keşfedeceksiniz: ==, !=, < ve >.

İki işaretçiyi (pointer) karşılaştırdığınızda, onların bellek adreslerini karşılaştırmış olursunuz. Bu, her iki işaretçi de aynı dizi içindeki öğeleri gösterdiğinde özellikle yararlıdır, çünkü bu, onların bellekteki göreceli konumlarını belirlemenize olanak tanır.

int numbers[5] = {10, 20, 30, 40, 50};
int *start = numbers;        // İlk elemanı işaret eder
int *end = numbers + 4;      // Son elemanı işaret eder

if (start < end) {
    printf("start comes before end in memory");
}

İşaretçi karşılaştırması, döngü koşullarında özellikle güçlü hale gelir. Bir sayaç değişkeni kullanmak yerine, döngünün ne zaman duracağını kontrol etmek için mevcut işaretçi konumunuzu bir hedef işaretçi ile karşılaştırabilirsiniz. Bu, dizi gezintisi için zarif ve verimli bir kod oluşturur.

Temel içgörü şudur ki; ptr1 < ptr2 ifadesi, ptr1'in dizide ptr2'nin işaret ettiği öğeden daha önce gelen bir öğeye işaret ettiğini söyler. Bu ilişki, işaretçi karşılaştırmasını, dizileri ardışık olarak işleyen döngüleri kontrol etmek için doğal bir yöntem haline getirir.

challenge icon

Görev

Kolay

Bir diziyi dolaşmak ve belirli bir aralıktaki öğeleri bulmak için işaretçi karşılaştırması kullanan bir C programı yazın. Programınız şunları yapmalıdır:

  1. 8 öğeli scores adlı bir tamsayı dizisi tanımlayın ve diziyi {45, 78, 92, 63, 87, 34, 91, 56} değerleriyle başlatın
  2. İki tamsayı işaretçisi tanımlayın: start_ptr ve end_ptr
  3. start_ptr işaretçisini dizinin ilk öğesini gösterecek şekilde ayarlayın
  4. end_ptr işaretçisini işaretçi aritmetiğini kullanarak dizinin son öğesini gösterecek şekilde ayarlayın
  5. current_ptr adlı bir işaretçi tanımlayın ve bunu ilk öğeyi gösterecek şekilde başlatın
  6. Diziyi dolaşmak için işaretçi karşılaştırması (current_ptr <= end_ptr) kullanan bir while döngüsü kullanın
  7. Döngünün içinde:
    • Geçerli değerin 60 ile 90 arasında (bu değerler dahil) olup olmadığını kontrol edin
    • Değer aralıktaysa, "Değer [value] aralıkta" yazdırın
    • Değer aralıkta değilse, "Değer [value] aralık dışında" yazdırın
    • Sonraki öğeye geçmek için current_ptr değerini artırın
  8. Döngüden sonra, current_ptr koşulunu kontrol ederek current_ptr > end_ptr işaretçisinin artık dizinin sonunu geçtiğini doğrulamak için işaretçi karşılaştırması kullanın
  9. Koşul doğruysa, "Dolaşma tamamlandı" yazdırın

Çıktınız aşağıdaki biçimdeki sonuçları görüntülemelidir:

Value 45 is out of range
Value 78 is in range
Value 92 is out of range
Value 63 is in range
Value 87 is in range
Value 34 is out of range
Value 91 is out of range
Value 56 is out of range
Traversal complete

Bu alıştırma, döngü koşullarında işaretçi karşılaştırma işleçlerini, sınır işaretçilerini ayarlamak için işaretçi aritmetiğini ve işaretçi karşılaştırmasının dizi dolaşımını geleneksel sayaç tabanlı döngülerden daha zarif bir şekilde nasıl denetleyebileceğini anlamanızı sınar.

Kendin dene

#include <stdio.h>

int main() {
    // TODO: Kodunuzu aşağıya yazı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