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.

Reklam · TEST
AdSense Test ReklamıYazı arası (gönderi içi) · Yazı arası

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}
4
5int 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 <stdio.h>
2
3int ascending(int a, int b) { return a > b; }
4int descending(int a, int b) { return a < b; }
5
6void 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}
17
18void print_array(int arr[], int size) {
19for (int i = 0; i < size; i++)
20printf("%d ", arr[i]);
21printf("\n");
22}
23
24int main() {
25int numbers[] = {5, 2, 8, 1, 9};
26int size = 5;
27
28sort_array(numbers, size, ascending);
29printf("Artan: ");
30print_array(numbers, size);
31
32sort_array(numbers, size, descending);
33printf("Azalan: ");
34print_array(numbers, size);
35
36return 0;
37}

Beklenen çıktı:

1Artan: 1 2 5 8 9
2Azalan: 9 8 5 2 1

Function 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.

Reklam · TEST
AdSense Test ReklamıGönderi altı · Görüntülü
konu hakkında tepkinizi verebilirsiniz