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

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

making function pointer looks good :)

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

  • 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
    BOOOF , I AM GONE
    Still , you gotta wait for my PRESENT :D
    C programming arabic Tutorial|Programming-fr34ks

  • #2
    درس جميـل جدا يا ستورم

    تعليق


    • #3
      يسلم ايديك يا مان ..... درس مميز ..
      GCS

      تعليق


      • #4
        تسلموا يارجاله بس لو حد شايف اني مقصر في الموضوع قولولي
        BOOOF , I AM GONE
        Still , you gotta wait for my PRESENT :D
        C programming arabic Tutorial|Programming-fr34ks

        تعليق


        • #5
          You looks good
          Programming-Fr34ks[dot]NET
          Ma Weblog
          ابدأ بتعلم Python | Ruby
          كتاب البايثون متوافر الآن
          لا اتواجد بهذا المنتدى ... للإتصال

          تعليق


          • #6
            لا بلاش شكلي نا منووووور
            BOOOF , I AM GONE
            Still , you gotta wait for my PRESENT :D
            C programming arabic Tutorial|Programming-fr34ks

            تعليق


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

              تعليق


              • #8
                تسلم ياعزوز طيب انت مش استفد ليه مش لاقي امثله ولا مش فاهم حاجه
                BOOOF , I AM GONE
                Still , you gotta wait for my PRESENT :D
                C programming arabic Tutorial|Programming-fr34ks

                تعليق

                يعمل...
                X