0Pricing
C Academy · Ders

İşlev İşaretçileri Tanımlama

İşlevlere işaretçiler

İşlev İşaretçileri Tanımlama, CoddyKit'te ücretsiz bir C Academy dersidir. Bu, 4 dersinin 1. dersidir. Aşağıdan dersin tamamını ücretsiz okuyabilir, sonra tarayıcıda yerleşik kod editörü ve 7/24 yapay zeka koçu ile uygulamalı olarak pratik yapabilirsin. Bu, C Academy öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. C Academy kursu toplamda 4 dersten oluşur.

İşlevlerin Adresleri Vardır

Tıpkı veriler gibi her işlev de bellekte bir adreste bulunur. İşlev işaretçisi bu adresi saklar; böylece işlevi dolaylı olarak çağırabilirsiniz.

#include <stdio.h>

void greet(void) { printf("hello\n"); }

int main(void) {
    void (*fp)(void) = greet;
    fp();
    return 0;
}

Bildirim Okuma

int (*fp)(int) bildirimi şu anlama gelir: fp, bir int alan ve bir int döndüren işlevin işaretçisidir.

*fp çevresindeki parantezler gereklidir.

#include <stdio.h>

int square(int x) { return x * x; }

int main(void) {
    int (*fp)(int) = square;
    printf("%d\n", fp(5));
    return 0;
}

İşlev Atama

Bir işlev adı kendi adresine dönüşür; bu nedenle fp = square ile fp = &square eşdeğerdir.

#include <stdio.h>

int dbl(int x) { return x * 2; }

int main(void) {
    int (*fp)(int);
    fp = &dbl;
    printf("%d\n", fp(7));
    return 0;
}

İşaretçi Üzerinden Çağırma

Bir işlev işaretçisi üzerinden fp(args) veya açık biçimde (*fp)(args) kullanarak çağrı yapabilirsiniz. İkisi de aynı işi yapar.

#include <stdio.h>

int add1(int x) { return x + 1; }

int main(void) {
    int (*fp)(int) = add1;
    printf("%d\n", fp(10));
    printf("%d\n", (*fp)(10));
    return 0;
}

İmza Eşleşmelidir

Bir işlev işaretçisinin türü, dönüş türünü ve parametre türlerini içerir. Yalnızca imzası tam olarak eşleşen bir işlev atayabilirsiniz.

#include <stdio.h>

double half(double x) { return x / 2.0; }

int main(void) {
    double (*fp)(double) = half;
    printf("%f\n", fp(9.0));
    return 0;
}

Çalışma Zamanında Yeniden Atama

İşlev işaretçisi bir değişkendir; bu nedenle program çalışırken onu farklı işlevleri gösterecek şekilde değiştirebilirsiniz.

#include <stdio.h>

int inc(int x) { return x + 1; }
int dec(int x) { return x - 1; }

int main(void) {
    int (*op)(int) = inc;
    printf("%d\n", op(5));
    op = dec;
    printf("%d\n", op(5));
    return 0;
}

Koşula Göre Seçme

Çalışma zamanındaki bir değere göre çağrılacak işlevi seçin, ardından tek bir işaretçi üzerinden çağırın.

#include <stdio.h>

int plus(int a) { return a + 10; }
int minus(int a) { return a - 10; }

int main(void) {
    int up = 1;
    int (*op)(int) = up ? plus : minus;
    printf("%d\n", op(100));
    return 0;
}

Okunabilirlik İçin typedef

İşlev işaretçisi söz dizimi uzundur. typedef türe bir ad vererek bildirimleri daha anlaşılır hâle getirir.

#include <stdio.h>

typedef int (*IntOp)(int);

int triple(int x) { return x * 3; }

int main(void) {
    IntOp op = triple;
    printf("%d\n", op(4));
    return 0;
}

İki Bağımsız Değişken Alan İşlevler

İşlev işaretçileri her türlü imzayı tanımlayabilir. Burada ikili bir tamsayı işlemi için bir örnek verilmiştir.

#include <stdio.h>

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

int main(void) {
    int (*op)(int, int) = sum;
    printf("%d\n", op(3, 4));
    return 0;
}

NULL İşlev İşaretçisi

Veri işaretçileri gibi bir işlev işaretçisi de NULL olabilir. Ayarlanmamış olabilecek bir işaretçiyi çağırmadan önce her zaman kontrol edin.

#include <stdio.h>

int twice(int x) { return x * 2; }

int main(void) {
    int (*op)(int) = NULL;
    if (op == NULL) op = twice;
    if (op) printf("%d\n", op(8));
    return 0;
}

Adresi Yazdırma

Saklanan adresi inceleyebilirsiniz. Farklı işlevlerin adresleri farklıdır.

#include <stdio.h>

int f(int x) { return x; }

int main(void) {
    int (*fp)(int) = f;
    printf("function pointer is %s\n", fp ? "set" : "null");
    return 0;
}

Hızlı Kontrol

İşlev işaretçisi bildirimleri hakkındaki anlayışınızı sınayın.

Özet

İşlev işaretçilerini bildirmeyi ve kullanmayı öğrendiniz:

  • Söz dizimi: Gerekli parantezlerle birlikte ret (*name)(params).
  • İşlev adıyla atayın; işlev adı bir adrese dönüşür.
  • fp(args) veya (*fp)(args) ile çağırın.
  • İmza eşleşmelidir; typedef okunabilirliği artırır.

Sıkça Sorulan Sorular

“İşlev İşaretçileri Tanımlama” dersi ücretsiz mi?

Evet — “İşlev İşaretçileri Tanımlama” dersin tüm metni burada web'de ücretsiz olarak okunabilir. Etkileşimli olarak pratik yapmak (yerleşik kod editörü ve 7/24 yapay zeka koçu) ve C Academy kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. C Academy kursu toplamda 4 dersten oluşur.

“İşlev İşaretçileri Tanımlama” dersinde ne öğreneceğim?

İşlevlere işaretçiler C Academy ile uygulamalı kodu tarayıcıda doğrudan çalıştırarak pratik yaparsın ve 7/24 yapay zeka koçu dersi çalışırken sorularını yanıtlar.

C Academy öğrenmeye başlamak için deneyim gerekli mi?

Önceden deneyim gerekmez. CoddyKit'te C Academy, başlangıçtan ileri seviyeye kadar yapılandırıldığı için buradan başlayabilir veya başından başlayıp kendi hızında ilerleme yapabilirsin. Bu, 4 dersinin 1. dersidir.

“İşlev İşaretçileri Tanımlama” dersi ne kadar sürer?

Çoğu CoddyKit dersi yaklaşık 5–10 dakika sürer. Her biri kısa ve etkileşimli olduğu için sabit ilerleme yaparsın ve web ile uygulama arasında tam olarak bıraktığın yerden devam edebilirsin.

Bu C Academy dersinde kod yazıp çalıştırabilir miyim?

Evet. Her C Academy dersi yerleşik bir kod editörü içerir, bu sayede tarayıcıda gerçek kod yazıp çalıştırabilir ve anlık yapay zeka geri bildirimi alırsın — yerel kurulum gerekli değildir.

Bu kursun tüm dersleri

  1. İşlev İşaretçileri Tanımlama
  2. İşlevleri Geçirme
  3. Karşılaştırıcılarla qsort
  4. İşlev İşaretçisi Tabloları
← C Academy Sayfasına Dön