Menu
Coddy logo textTech

Fonksiyon İşaretçilerini Çağırma

Coddy'nin C Journey'sinin Nesne Yönelimli Programlama bölümünün bir parçası. Ders 34 / 61.

Artık bir işlev işaretçisinin nasıl bildirileceğini ve ona bir işlev atanacağını bildiğinize göre, sonraki adım işlevi bu işaretçi aracılığıyla gerçekten çağırmaktır.

Söz dizimi basittir. İşlev işaretçisini, normal bir işlevi çağırır gibi kullanırsınız:

int add(int a, int b) {
    return a + b;
}

int main() {
    int (*operation)(int, int) = add;
    
    int result = operation(5, 3);  // add(5, 3) çağırır
    printf("%d\n", result);        // Çıktı: 8
    return 0;
}

Argümanları içeren parantezlerin ardından yalnızca işaretçi adını yazın. C, işaretçinin başvurduğu işlevin başvurusunu otomatik olarak kaldırır ve bu işlevi çalıştırır.

(*operation)(5, 3) ile açık dereference sözdizimini de kullanabilirsin, ancak bu isteğe bağlıdır ve daha az yaygındır. Her iki biçim de aynı sonuçları üretir.

Asıl güç, işaretçiyi farklı işlevlere yeniden atadığınızda ortaya çıkar:

int subtract(int a, int b) {
    return a - b;
}

operation = subtract;
result = operation(5, 3);  // Şimdi subtract(5, 3) çağırır
printf("%d\n", result);    // Çıktı: 2

Aynı operation değişkeni artık tamamen farklı bir mantık yürütüyor. Çalışma zamanında davranışı değiştirebilme yeteneği, C dilindeki çok biçimliliğin temelidir.

challenge icon

Görev

Kolay

İşaretçiler aracılığıyla işlev çağırma ve hangi işlevin çalıştırılacağını değiştirme alıştırması yapalım. Çalışma zamanında toplama ve çıkarma arasında geçiş yapabilen basit bir hesap makinesi oluşturacaksın.

Şunları yapan bir program yaz:

  1. İki işlev tanımlar:
    • add: iki int parametresi alır ve toplamlarını döndürür
    • subtract: iki int parametresi alır ve birinciden ikincisini çıkarır
  2. main içinde, iki int parametresi alan ve bir int döndüren işlevleri gösterebilen calc adlı bir işlev işaretçisi tanımlar
  3. Dört girdi okur: iki tam sayı ve iki işlem kodu
  4. Her işlem kodu için:
    • Uygun işlevi calc değişkenine atar (toplama için 1, çıkarma için 2)
    • İki sayıyla işaretçi aracılığıyla işlevi çağırır
    • Sonucu yazdırır

Dört girdi alacaksın: birinci sayı, ikinci sayı, birinci işlem kodu (1 veya 2) ve ikinci işlem kodu (1 veya 2).

Çıktın ayrı satırlarda iki sonuç göstermelidir: aynı iki sayı kullanılarak gerçekleştirilen işlemlerin her biri için bir sonuç:

15
5

Bu örnekte, 10, 5, 1, 2 girdileriyle: birinci işlem (kod 1) 10 + 5 = 15 toplamasını yapar, ardından işaretçi yeniden atanır ve ikinci işlem (kod 2) 10 - 5 = 5 çıkarma işlemini yapar.

Bu, aynı işaretçi değişkeninin çağrılar arasında yeniden atanarak tamamen farklı mantıkları nasıl çalıştırabileceğini gösterir.

Kendin dene

#include <stdio.h>

// TODO: add fonksiyonunu burada tanımla


// TODO: subtract fonksiyonunu burada tanımla


int main() {
    // Girdileri oku
    int num1, num2, op1, op2;
    scanf("%d", &num1);
    scanf("%d", &num2);
    scanf("%d", &op1);
    scanf("%d", &op2);
    
    // TODO: 'calc' adında, şunlara işaret edebilen bir fonksiyon işaretçisi bildir
    // iki int parametre alan ve bir int döndüren fonksiyonlara
    
    
    // TODO: İlk işlem kodu (op1) için:
    // - Uygun fonksiyonu calc'a ata (add için 1, subtract için 2)
    // - Fonksiyonu işaretçi üzerinden çağır ve sonucu yazdır
    
    
    // TODO: İkinci işlem kodu (op2) için:
    // - calc'ı uygun fonksiyona yeniden ata
    // - Fonksiyonu işaretçi üzerinden çağır ve sonucu yazdır
    
    
    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.

Nesne Yönelimli Programlama bölümündeki tüm dersler

Kendi başına pratik yap: Online C derleyicisi