إعـــــــلان
تقليص
لا يوجد إعلان حتى الآن.
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);
تسال نفسك دلوقتي طيب مانت قولت انها بتخزن عنوان الداله هي فين الداله الي حتخزن عنوانها
بسيطه شوف ده كده
كود 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]);
}
لكن كده ممكن
كود 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]);
}
سيبك بقي من كل ده وتاعلي للمثال الجميل ده من موقع 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 ( i = 0; i < 10; ++i )
{
array[ i ] = 10 - i;
}
qsort( array, 10 , sizeof( int ), int_sorter );
for ( i = 0; i < 10; ++i )
{
printf ( "%d\n" ,array[ i ] );
}
}
لان هنا انت استخدمت الكود 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الكلمات الدلالية (Tags): لا يوجد
اترك تعليق: