Pointer Fonksiyonlar
-
Hocalar bu zıkkımdan hiç bi halt anlamadım, yardımcı olun.
Şimdi olay şu,
Kullanıcıdan 2 input alıcaz. Bunlar integer ya da string olabilir. İnteger ise toplayacağız, string ise sonuna ekleyeceğiz.
Anlamadığım kısım ise bu fonksiyon içinde nasıl fonksiyon çağırdığımız. İşleyişini kısaca anlatabilir misiniz?
void* sumOp(void* dataPtr1, void* dataPtr2, void * (*ptrToAddFun)(void*, void*));
-
qsort, bsearch gibi fonksiyonların türden bağımsız yazılabilmesi için, karşılaştırmayı yapan fonkiyon bu fonksiyona parametre olarak geçilir, C++ daki template benzeri.
Şu koda bak bakayım anlayacak mısın (pm atmazsan sevinirim)
#include <stdio.h> #include <string.h> void* AddFunInt(void* ptr1, void* ptr2) { int n1 = (int)ptr1; int n2 = (int)ptr2; return (void*)(n1 + n2); } void* AddFunStr(void* ptr1, void* ptr2) { char *s1 = (char*)ptr1; char *s2 = (char*)ptr2; return strcat(s1, s2); } void* sumOp(void* dataPtr1, void* dataPtr2, void *(*ptrToAddFun)(void*, void*)) { return ptrToAddFun(dataPtr1, dataPtr2); } int main() { char str1[128] = "selam "; char str2[] = "moruk"; char *string = NULL; int toplam = 0; toplam = (int)sumOp((void*)55, (void*)66, AddFunInt); string = (char*)sumOp(str1, str2, AddFunStr); printf("Toplam: %d\nString: %s\n", toplam, string); getchar(); return 0; }
-
Tugberk bunu yazdı
qsort, bsearch gibi fonksiyonların türden bağımsız yazılabilmesi için, karşılaştırmayı yapan fonkiyon bu fonksiyona parametre olarak geçilir, C++ daki template benzeri.
Şu koda bak bakayım anlayacak mısın (pm atmazsan sevinirim)
#include <stdio.h> #include <string.h> void* AddFunInt(void* ptr1, void* ptr2) { int n1 = (int)ptr1; int n2 = (int)ptr2; return (void*)(n1 + n2); } void* AddFunStr(void* ptr1, void* ptr2) { char *s1 = (char*)ptr1; char *s2 = (char*)ptr2; return strcat(s1, s2); } void* sumOp(void* dataPtr1, void* dataPtr2, void *(*ptrToAddFun)(void*, void*)) { return ptrToAddFun(dataPtr1, dataPtr2); } int main() { char str1[128] = "selam "; char str2[] = "moruk"; char *string = NULL; int toplam = 0; toplam = (int)sumOp((void*)55, (void*)66, AddFunInt); string = (char*)sumOp(str1, str2, AddFunStr); printf("Toplam: %d\nString: %s\n", toplam, string); getchar(); return 0; }
Hocam öncelikle çok teşekkürler.
Mantığı kavradım genel olarak ancak kafama takılan kısım;
toplam = (int)sumOp((void*)55, (void*)66, AddFunInt);
Burda 55 ile 66´yı pointer´la göndermişiz,
string = (char*)sumOp(str1, str2, AddFunStr);
Burda ise direk fonksiyonu pointer ile çağırmışız.
Aradaki fark nedir? Neden yaptık?
bilenyok tarafından 27/Şub/13 20:55 tarihinde düzenlenmiştir