C programlama’da Fonksiyon Pointer

BuHer nesnenin bir adresi olduğu gibi fonksiyonlarında adresleri vardır. Bu adreslerde ilgili fonksiyonların makina kodları bulunmaktadır. Fonksiyon pointerları (functional pointer) bu fonksiyonların bulunduğu adres bloğunun başlangıç adreslerini tutarlar ve bu adreslerin de türleri vardır. Nasıl int bir nesnenin adresi int* türünden ve bu nesnenin adresini tutacak pointer da int* türden olmak zorunda ise aynı ilişki fonksiyon pointer ve fonksiyon adresleri arasında da vardır. Fakat her fonksiyonun adresi ilgili fonksiyonun bildirimine bağlıdır ve tek bir fonksiyon adresi türünden bahsetmek imkansızdır.

Şimdi fonksiyon adreslerinin türlerinin C programlama dilinde nasıl elde edildiğini inceleyelim.

Yukarıda bildirimi verilen x fonksiyonunun adresinin türü için ilk olarak geri dönüş değerini yazarız. Daha sonra boşluk bırakıp bir parantez açarız ve içerisine asterisk(*) atomunu koyarız. Daha sonra yeni bir parantez daha açıp fonksiyon parametrelerinin türlerini buraya yazarız. Yani x fonksiyonun adresinin türü “int (*)(int)” dir. Aynı şekilde x fonksiyonun adresini tutacak fonksiyon pointerın türüde aynı türden olmalıdır. Şimdi x fonksiyonunun adresini tutacak p fonksiyon pointarını oluşturup x’in adresi ile ilk değer verelim.

Yukarıda dikkat ederseniz x fonksiyonunu ampersand atomu ile kullanmadık. Bunun sebebi fonksiyon isimleri tek başına kullanıldığında dizi isimlerine benzer şekilde ilgili fonksiyonun adresine dönüştürülür. Buradaki adresden kasıt yazıya başlarken de belirttiğimiz gibi ilgili fonksiyonun makina kodlarının tutulduğu bellek bloğunun başlangıç adresidir.

Daha sonra x fonksiyonunu aşağıdaki şekilde çağırabiliriz;

Bu şekilde x fonksiyonunu çağırabilmemizin nedeni fonksiyon çağrı operatörünün() operatör olarak fonksiyon adresi almasıdır.

Şimdi aşağıda bildirimleri verilen fonksiyonların adreslerini fonksiyon pointerlara ilk değer olarak verelim.

Fonksiyon pointerları çok geniş bir konu olduğu için tek bir yazı ile anlatılması imkansızdır. Bu yazıda fonksiyon pointerlarının ne olduğunu anladık. İlerleyen yazılarda fonksiyon pointerları ile ilgili daha detay bilgiler vereceğiz.

Bu yazı hakkında ne düşünüyorsun ?
  • Müthiş 
  • Gereksiz 
  • Faydalı 
  • Normal