إعـــــــلان

تقليص
لا يوجد إعلان حتى الآن.

making function pointer looks good :)

تقليص
X
 
  • تصفية - فلترة
  • الوقت
  • عرض
إلغاء تحديد الكل
مشاركات جديدة

  • St0rM-MaN
    رد
    تسلم ياعزوز طيب انت مش استفد ليه مش لاقي امثله ولا مش فاهم حاجه

    اترك تعليق:


  • عبد العزيز
    رد
    رائع اسلوب الشرح ولو اني لسى ماستفدت منه زي مهو مطلوب

    اترك تعليق:


  • St0rM-MaN
    رد
    لا بلاش شكلي نا منووووور

    اترك تعليق:


  • StrikerX
    رد
    You looks good

    اترك تعليق:


  • St0rM-MaN
    رد
    تسلموا يارجاله بس لو حد شايف اني مقصر في الموضوع قولولي

    اترك تعليق:


  • CPU
    رد
    يسلم ايديك يا مان ..... درس مميز ..

    اترك تعليق:


  • كريم عبد المجيد
    رد
    درس جميـل جدا يا ستورم

    اترك تعليق:


  • St0rM-MaN
    كتب موضوع making function pointer looks good :)

    making function pointer looks good :)

    العجيب اني مس انتبهت للموضوع ده خير من كام يوم لما كنت براجع مع نفسي
    لحد ماقعدت افكر فيها كده بهداوه مع نفسي
    علي فكره عشان تفهم الدرس ده لازم تفهم ان ال Pointer مش مجرد متغير بيحفظ العنوان بتاع متغير d تاني وخلاص
    لا هي بتحفظ العناوين بس مش شرط تكون عنووين متغيرات
    يعني من النهايه pointer to a functions تعني ان هذا المؤشر يشير الي the address of this function العنوان بتاعها
    بدره انت تفكر هي لزمتها ايه
    الصراحه انا من راي انها مهمه لبتوع ال GUIS
    لانها بتخدل مع ال functions arguments عشان تحدد احداث معينه ده مجرد مثال
    طريقه تعيين مؤشر لداله
    كود PHP:
    void (*pointer_to_a_function)(int f); 
    ده مثال لمؤشر لداله بتاخد argument واحده بس الي هي int f
    تسال نفسك دلوقتي طيب مانت قولت انها بتخزن عنوان الداله هي فين الداله الي حتخزن عنوانها
    بسيطه شوف ده كده
    كود PHP:
    #include<stdio.h>
    void function(char *x)
    {
         
    printf("%s\n",x);
    }
    int main(int argc,char **argv)
    {
        
    void (*ss)(char *x);
        function(
    argv[1]);
        
    ss=function;
        
    ss(argv[1]);
        

    لاحظ تلات حاجات
    واحد ال function من نوع void
    وكمان بتاخد pointer from type char as argument
    لاحظ كمان ان ال pointer to functions is local to main
    يعني داخلي في الmain بس
    يعني كده مثلا مش ينفع
    كود PHP:
    #include<stdio.h>
    void function(char *x)
    {
         
    printf("%s\n",x);
    }
    void ff(char *ff)
    {
         
    ss(ff);
    }
    int main(int argc,char **argv)
    {
        
    void (*ss)(char *x);
        function(
    argv[1]);
        
    ss=function;
        
    ss(argv[1]);
        

    حيقولك ان ss is not defined
    لكن كده ممكن
    كود PHP:
    #include<stdio.h>
    voi(*ss)(char *x);
    void function(char *x)
    {
         
    printf("%s\n",x);
    }
    void ff(char *ff)
    {
         
    ss=function;
         
    ss(ff);
    }

    int main(int argc,char **argv)
    {
        function(
    argv[1]);
        
    ff(argv[1]);
        
    ss(argv[1]);
        

    لاحظ انك استديعت ss في ff واديتلها العنوان بتاع function جوه ff واستخدمتها
    سيبك بقي من كل ده وتاعلي للمثال الجميل ده من موقع cprogramming.com
    كود PHP:
    #include <stdlib.h>

    int int_sorter( const void *first_arg, const void *second_arg )
    {
        
    int first = *(int*)first_arg;
        
    int second = *(int*)second_arg;
        if ( 
    first second )
        {
            return -
    1;
        }
        else if ( 
    first == second )
        {
            return 
    0;
        }
        else
        {
            return 
    1;
        }
    }

    int main()
    {
        
    int array[10];
        
    int i;
        
    /* fill array */
        
    for ( 010; ++)
        {
            array[ 
    ] = 10 i;
        }
        
    qsort( array, 10 sizeof( int ), int_sorter );
        for ( 
    010; ++)
        {
            
    printf "%d\n" ,array[ ] );
        }


    هنا بقي حتوضح كل حاجه
    لان هنا انت استخدمت ال
    كود PHP:
    sorter 
    عشان يحدد نوع ال
    كود PHP:
    sorting 
    الي انت عايزه
    لاحظ انه من المفروض انها ترجع -1 لما يكون الثاني اكبر من الاول او 0 لما يكونوا الاتنين زي بعض او 1 لما يكون الاول اكبر من التاني
    كود PHP:
    int first = *(int*)first_arg;
        
    int second = *(int*)second_arg;
        if ( 
    first second )
        {
            return -
    1;
        }
        else if ( 
    first == second )
        {
            return 
    0;
        }
        else
        {
            return 
    1;
        } 
    لاحظ
    خد اول قيمه في اول argument وحطها في first
    وعمل نفس الكلام مع تاني قيمه
    وعمل الاتي
    ترجع -1 لما يكون الثاني اكبر من الاول او 0 لما يكونوا الاتنين زي بعض او 1 لما يكون الاول اكبر من التاني
    جميل الكلام
    كود PHP:
    qsort( array, 10 sizeof( int ), int_sorter ); 
    هنا خد اول عنصر في المصفوفه وخد اخر عنصر فيها او لحد مانت عايز ترتب العناصر
    وخد الحجم بتاع ال int عشان انت بترتب مصفوفه رقميه من نوع int وخد طريقة الترتيب الي هي pointer to function
    فيه كمان نقطه جميله جدا هنا
    void qsort(void *base, size_t nmemb, size_t size,
    int(*compar)(const void *, const void *));

    المفروض انك تكون عارف ان void *ptr;
    مؤشر لكل الانواع الي انت ممكن تحتجها يعني كل الي عليك تعمل type casting

    int(*compar)(const void *, const void *)

    ديت الي هي مؤشر للداله الي انت حتمررها لل qsort
    مراجع:
    http://www.phim.unibe.ch/comp_doc/c_...ONS/qsort.html
    http://www.cprogramming.com/tutorial...-pointers.html
    في حاجات في ال call backs بس انا مش فاضي
    c u all
يعمل...
X