Function Pointer'lar Ne Zaman Kullanılır? Pratik Örnekler
# Function Pointer'lar Ne Zaman Kullanılır? Pratik Örnekler
Function pointer, bir fonksiyonun bellek adresini tutan göstericidir. İlk bakışta karmaşık görünse de, callback mekanizmaları, dinamik fonksiyon çağrıları ve kütüphane tasarımında hayat kurtarır.
Function pointer'ı iki ana durumda kullanırsın:
1. Callback mekanizmaları: Bir fonksiyona başka bir fonksiyonu parametre olarak geçmek. Örneğin, bir sıralama algoritmasında karşılaştırma kuralını dışarıdan belirlemek.
2. Dinamik davranış: Program çalışırken hangi fonksiyonun çalışacağına karar vermek. İşletim sistemi çağrıları, olay yöneticileri ve eklenti sistemleri buna dayanır.
Bir dizi sıralamak istiyorsun. Ama bazen artan, bazen azalan sırada isteyebilirsin. Function pointer ile bunu esnek hale getirebilirsin.
Adım 1: Karşılaştırma fonksiyonlarını yaz:
1int ascending(int a, int b) {2return a > b; // true ise yer değiş3}45int descending(int a, int b) {6return a < b;7}Adım 2: Sıralama fonksiyonunu function pointer ile yaz:
1void sort_array(int arr[], int size, int (*compare)(int, int)) {2for (int i = 0; i < size - 1; i++) {3for (int j = 0; j < size - i - 1; j++) {4if (compare(arr[j], arr[j+1])) {5int temp = arr[j];6arr[j] = arr[j+1];7arr[j+1] = temp;8}9}10}11}Adım 3: Farklı stratejilerle çağır:
1#include <stdio.h>23int ascending(int a, int b) { return a > b; }4int descending(int a, int b) { return a < b; }56void sort_array(int arr[], int size, int (*compare)(int, int)) {7for (int i = 0; i < size - 1; i++) {8for (int j = 0; j < size - i - 1; j++) {9if (compare(arr[j], arr[j+1])) {10int temp = arr[j];11arr[j] = arr[j+1];12arr[j+1] = temp;13}14}15}16}1718void print_array(int arr[], int size) {19for (int i = 0; i < size; i++)20printf("%d ", arr[i]);21printf("\n");22}2324int main() {25int numbers[] = {5, 2, 8, 1, 9};26int size = 5;2728sort_array(numbers, size, ascending);29printf("Artan: ");30print_array(numbers, size);3132sort_array(numbers, size, descending);33printf("Azalan: ");34print_array(numbers, size);3536return 0;37}Beklenen çıktı:
1Artan: 1 2 5 8 92Azalan: 9 8 5 2 1Function pointer'lar özellikle kütüphanelerde sık kullanılır. Örneğin `qsort()` standart kütüphanesindeki fonksiyon, karşılaştırma kuralını callback olarak alır. Olay tabanlı programlamada (GUI, ağ iletişimi) de her olayın bir handler fonksiyonu vardır ve bu handler'lar pointer'larla yönetilir.
Özet: Function pointer'lar kodu esnek, yeniden kullanılabilir ve genişletilebilir kılar.
0 yorum