folder Tahribat.com Forumları
linefolder C - C++
linefolder Pointer Fonksiyonlar



Pointer Fonksiyonlar

  1. KısayolKısayol reportŞikayet pmÖzel Mesaj
    bilenyok
    bilenyok's avatar
    Kayıt Tarihi: 17/Eylül/2009
    Erkek

    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*));

     

  2. KısayolKısayol reportŞikayet pmÖzel Mesaj
    Tugberk
    Tugberk's avatar
    Kayıt Tarihi: 04/Ekim/2009
    Erkek

    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;
    }
    

     

  3. KısayolKısayol reportŞikayet pmÖzel Mesaj
    bilenyok
    bilenyok's avatar
    Kayıt Tarihi: 17/Eylül/2009
    Erkek
    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
Toplam Hit: 713 Toplam Mesaj: 3