Menu
CoddyTech

İş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 ilerleyeceğinizi öğrendiniz. Şimdi işaretçilerin, normal değişkenlerle kullandığınız aynı karşılaştırma işleçleriyle karşılaştırılabileceğini de keşfedeceksiniz: ==, !=, < ve >.

İki işaretçiyi karşılaştırdığında, bellek adreslerini karşılaştırmış olursun. Bu, özellikle her iki işaretçi de aynı dizideki öğeleri gösterdiğinde kullanışlıdır; çünkü bellek içindeki göreli konumlarını belirlemeni sağlar.

int numbers[5] = {10, 20, 30, 40, 50};
int *start = numbers;        // İlk öğeyi gösterir
int *end = numbers + 4;      // Son öğeyi gösterir

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

İşaretçi karşılaştırması, döngü koşullarında özellikle güçlü hâle gelir. Bir sayaç değişkeni kullanmak yerine, döngünün ne zaman durması gerektiğini kontrol etmek için mevcut işaretçi konumunuzu hedef işaretçiyle karşılaştırabilirsiniz. Bu, dizilerde gezinmek için zarif ve verimli bir kod oluşturur.

Temel çıkarım şudur: ptr1 < ptr2, ptr1 öğesinin dizide ptr2 öğesinin gösterdiği öğeden daha önce yer alan bir öğeyi gösterdiğini söyler. Bu ilişki, işaretçi karşılaştırmasını dizileri sıralı olarak işleyen döngüleri kontrol etmek için doğal bir seçenek hâline 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 bildirin ve {45, 78, 92, 63, 87, 34, 91, 56} değerleriyle başlatın
  2. İki tamsayı işaretçisi bildirin: 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ği kullanarak dizinin son öğesini gösterecek şekilde ayarlayın
  5. current_ptr adlı bir işaretçi bildirin 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 (dahil) olup olmadığını kontrol edin
    • Değer aralıktaysa, tam olarak Value [value] is in range yazdırın
    • Değer aralıkta değilse, tam olarak Value [value] is out of range yazdırın
    • Bir sonraki öğeye geçmek için current_ptr işaretçisini artırın
  8. Döngüden sonra, current_ptr > end_ptr koşulunu kontrol ederek current_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, tam olarak Traversal complete yazdırın

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

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 görev, 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ği kullanmayı 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 kontrol edebileceğini anladığını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