📓
Temel C Programlama
  • Temel C Programlama Dersleri -1- Giriş
  • Temel C Programlama -2- Bilgisayar Mimarisi Temelleri
  • Temel C Programlama -3- Bilgisayar Yazılımı Temelleri
  • Temel C Programlama -4- Programlama Dilleri
  • Temel C Programlama -5- Makine Dili, Assembly Dili ve Yüksek Seviye Diller
  • Temel C Programlama -6- C Diline Giriş
  • Temel C Programlama -7- C Geliştirme Aşamaları ve Derleyici Kurulumu
  • Temel C Programlama -8- İlk Program
  • Temel C Programlama -9- Basit Program Örnekleri – 1
  • Temel C Programlama -10- Basit Program Örnekleri – 2
  • Temel C Programlama -11- Aritmetik Operatörler
  • Temel C Programlama -12- C Veri ve Değişken Tipleri
  • Temel C Programlama -13- C Veri ve Değişken Tipleri – 2
  • Temel C Programlama -14- Döngülere Giriş
  • Temel C Programlama -15- İlişki Operatörleri
  • Temel C Programlama -16- For Döngüsü
  • Temel C Programlama -17- While Döngüsü
  • Temel C Programlama -18- do while Döngüsü
  • Temel C Programlama -19- Kararlar ve If Karar Yapısı
  • Temel C Programlama -20- Else ve Else If Yapıları
  • Temel C Programlama -21- Switch Karar Yapısı, break ve continue
  • Temel C Programlama -22- Mantık Operatörleri, Birleşik Operatörler ve Operatör Önceliği
  • Temel C Programlama -23- Fonksiyonlara Giriş
  • Temel C Programlama -24- Basit Fonksiyonlar
  • Temel C Programlama -25- Değer Alan Fonksiyonlar, Sabitler, Önek ve Sonekler
  • Temel C Programlama -26- Fonksiyondan Değer Döndürmek
  • Temel C Programlama -27- Diğer Fonksiyon Konuları ve Recursive Fonksiyonlar
  • Temel C Programlama -28- Diziler
  • Temel C Programlama -29- Diziler -2-
  • Temel C Programlama -30- İşaretçilere Giriş
  • Temel C Programlama -31- İşaretçiler
  • Temel C Programlama -32- Çift İşaretçiler
  • Temel C Programlama -33- İşaretçileri Referans Olarak Aktarmak
  • Temel C Programlama -34- İşaretçi Aritmetiği
  • Temel C Programlama -35- İşaretçiler ve Diziler
  • Temel C Programlama -36- İşaretçi ve Değer Sabitleri
  • Temel C Programlama -37- Fonksiyon İşaretçileri
  • Temel C Programlama -38- Karakterler ve Karakter Dizilerine Giriş
  • Temel C Programlama -39- Karakter Dizileri (String)
  • Temel C Programlama -40- ctype.h Başlık Dosyası ile Karakter İşlemleri
  • Temel C Programlama -41- string.h Başlık Dosyası ile Karakter Dizisi İşlemleri
  • Temel C Programlama -42- stdlib.h ve stdio.h Başlık Dosyaları ile Karakter Dizisi İşlemleri
  • Temel C Programlama -43- Formatlı Giriş ve Çıkış
  • Temel C Programlama -44- Yapılar
  • Temel C Programlama -45- Yapı Uygulamaları ,typedef ve union (birlikler)
  • Temel C Programlama -46- Bit Manipülasyonu ve Bitwise Operatörleri
  • Temel C Programlama -47- Bit Bazlı Uygulamalar (Set, Reset, Toggle)
  • Temel C Programlama -48- Bit Alanları ve Enümeratörler
  • Temel C Programlama -49- Dosya İşlemleri ve fopen() fonksiyonu
  • Temel C Programlama -50- fprintf() ve fclose() ile En Basit Dosya Uygulaması
  • Temel C Programlama -51- Dosya İşaretçisi ve feof() Fonksiyonu
  • Temel C Programlama -52- Dosya Uygulamaları
  • Temel C Programlama -53- Ön İşlemci Komutları (Preprocessor)
  • Temel C Programlama -54- Sonsöz
Powered by GitBook
On this page

Was this helpful?

Temel C Programlama -37- Fonksiyon İşaretçileri

Daha öncesinde sizlere diziler ve fonksiyon adlarının aslında birer adres verisi bulunduran bir işaretçi olduğunu söylemiştik. Yani adres operatörü ile (&) dizinin adını yazdığımız zaman bize dizinin adresini vermekteydi. Aynı işlemi fonksiyon adına uyguladığımızda ise fonksiyonun hafızadaki adresini almaktaydık. Bu konu hakkında yaptığımız uygulamada hep beraber bunu görmüştük.

İşaretçiler hakkında son konumuz ise bu sebepten dolayı fonksiyon işaretçileri olmaktadır. Fonksiyon işaretçisi fonksiyonun hafızadaki adresini bize vermektedir. Aynı dizilerde olduğu gibi fonksiyonun başlangıç adresini &fonksiyonadi şeklinde bir operatör kullanımı ile alabilme imkanımız vardır.

Neden normal fonksiyon çağırma işlemi yerine fonksiyon işaretçilerini kullanmamız gerektiğini sorabilirsiniz. Normalde biz fonksiyonu çağırırken fonksiyonadi(); şeklinde biz söz dizimi kullanarak kolaylıkla işi halletmekteyiz. Bunun sebebi bazı durumlarda fonksiyon işaretçilerinin bize büyük bir esneklik sağlamasıdır. Örneğin bir diziyi sıralama algoritmasında sıralamanın artan veya azalan olacağını fonksiyon işaretçileri ile yapabiliriz.

Fonksiyon işaretçilerinin söz dizimi şu şekildedir.

void (*pf) (int);

Buradan bakıldığında biraz kafa karıştırıcı gibi görülebilir. Alışıldık C sözdiziminden uzakta görünen bir yapı ile karşı karşıyayız. Burada öncelikle *pf tanımlamasından başlayarak içten dışa doğru inceleyelim. *pf bir fonksiyonu işaret eden işaretçidir, void fonksiyonun döndürdüğü değer tipi ve int ise fonksiyonun argüman tipidir.

Şimdi fonksiyon işaretçisine işaretçileri ekleyelim ve tekrar okuyalım.

char* (*pf) (int*);

Burada pf yine fonksiyon işaretçisidir, char fonksiyonun döndürdüğü değer tipi, int* ise argüman tipidir. Şimdi fonksiyon işaretçilerinin kullanıldığı örnek bir kod yazıp kullanımına bakalım.

#include <stdio.h>
void fonksiyonumuz(int deger)
{
    printf("Fonksiyon Cagirildi Arguman: %d\n", deger);
}

main()
{
    void (*pf)(int);
    pf = &fonksiyonumuz;
    printf("Simdi Fonksiyonu Cagiriyoruz. \n");
    (pf)(5);
    printf("Fonksiyondan donuldu");
}

Burada görüldüğü gibi bir fonksiyon işaretçisi tanımladıktan sonra ilginç bir şekilde (pf) (5); şeklinde fonksiyon çağırıyoruz! C dilinde size en tuhaf görünen biçimlerden biri olacağı garantisini verebilirim. Bu sayede işaretçiler vasıtasıyla çağırdığımız fonksiyon argüman olarak 5 değerini almakta ve ekrana yazdırmakta. Programın ekran çıktısı şu şekilde olacaktır.

Aşağıda verdiğim kaynaklarda fonksiyon işaretçileri ile alakalı örnekler yer almaktadır. Konunun devamını merak ederseniz aşağıdaki örneklere göz atabilirsiniz.

Kaynaklar,

Deitel, C How To Program 7th. ed, 2012, sf 338 vd.

PreviousTemel C Programlama -36- İşaretçi ve Değer SabitleriNextTemel C Programlama -38- Karakterler ve Karakter Dizilerine Giriş

Last updated 5 years ago

Was this helpful?

https://www.learn-c.org/en/Function_Pointers
https://www.geeksforgeeks.org/function-pointer-in-c/