الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

مسبب لي قلق ياليت الي يعرف يساعدني"""

مغلق
بدأه angel" في 10 أكتوبر 2004 · 3 رد · 494 مشاهدة · في الأسئلة المجابة
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

الســــــــــلام عليكم

من يساعدني ؟يسوي خير

pointer to funcationفي السي مسببة لي إزعاج ماني فاهمة شئ فيها أبغى أحد يشرحها لي أويعطني موقع يحوي شرح لها....وله جزيل الشكر والعرفان"""""""

#2

/index.php?showtopic=35404

وان لم ينفع حدد مشكلتك وسنجيبك بإذن اللـه

#3

مشكورأخ عيس لكن ماكنت أريد لم أجده

6. Pointers to Functions

A pointer to a function contains the address of the function in memory. It is similar to how array name is address of first element.

Function name is starting address of code that defines function
Pointers to functions can be:
–  Passed to functions
– Stored in arrays
– Assigned to other function pointers

Example#1:  bubblesort

– Function bubble takes a function pointer. bubble calls this helper function. This determines ascending or descending sorting.

– The argument in bubblesort for the function pointer:
bool ( *compare )( int, int ): tells bubblesort to expect a pointer to a function that takes two ints and returns a bool.

– If the parentheses were left out:
bool *compare( int, int ): declares a function that receives two integers and returns a pointer to a bool

/*   Multipurpose sorting program using function pointers */

#include <stdio.h>
#define SIZE 10

void bubble( int [], const int, int (*)( int, int ) );
int ascending( int a, int b )
{
   return b < a;   /* swap if b is less than a */
}

int descending( int a, int b )
{
   return b > a;   /* swap if b is greater than a */
}

int main()
{
   int order, 
       counter,
       a[ SIZE ] = { 2, 6, 4, 8, 10, 12, 89, 68, 45, 37 };

   printf( "Enter 1 to sort in ascending order,\n" 
           "Enter 2 to sort in descending order: " );
   scanf( "%d",  &order );
   printf( "\nData items in original order\n" );
   for ( counter = 0; counter < SIZE; counter++ )
      printf( "%5d", a[ counter ] );
   if ( order == 1 ) {
      bubble( a, SIZE, ascending );
      printf( "\nData items in ascending order\n" );
   }
   else {
      bubble( a, SIZE, descending );
      printf( "\nData items in descending order\n" );
   }
   for ( counter = 0; counter < SIZE; counter++ )
      printf( "%5d", a[ counter ] );   
   printf( "\n" );
   return 0;
}
void bubble( int work[], const int size, 
             int (*compare)( int, int ) )
{
   int pass, count;
   void swap( int *, int * );
   for ( pass = 1; pass < size; pass++ )
      for ( count = 0; count < size - 1; count++ )
         if ( (*compare)( work[ count ], work[ count + 1 ] ) )
            swap( &work[ count ], &work[ count + 1 ] );
}
void swap( int *element1Ptr, int *element2Ptr )
{
   int temp;

   temp = *element1Ptr;
   *element1Ptr = *element2Ptr;
   *element2Ptr = temp;
}

هذا الجزء موفاهمة شئ فيه:::::

تم تعديل هذه المشاركة بواسطة راكان الحنيطي في 11 أكتوبر 2004 في 19:53

#4

السلام عليكم,

في الحقيقة لم أفهم ما تريده بالضبط.

وحسب ما فهمت أنك تريد استعمال المؤشرات للدالات عوض أن تقوم باستدعاء الدالة مباشرة. فهذا ممكن باستعمال المؤشر للدالة وكما ذكرت حين نستدعي دالة ما فإننا نذهب إلى ذاكرة تلك الدالة أو نقول بكلمة أخرى إلى مؤشر لتلك الدالة. وهذه التقنية قد نستعملها عموما عندما نريد أن نستدعي دالة موجودة في مكان ما خارج البرنامج كأن تكون موجودة ما في ملف DLL ولكن الستعمالها في نفس البرنامج قد لا يكون ملزما لأننا يمكن أن نستدعي الدالة كالمعتاد.

على العموم سأعطي هنا مثال لبرنامج فيه دالة اسمها Sum كل ما تعمله أننا نرسل إليها عددين وترجع لنا مجموعهما . وقد نستدعي الدالة بسهولة مثل ما يعرف الجميع :

int ss=Sum(a,B)

أو نستدعي مؤشر الدالة وهو كما نعلم اسم الدالة بدون أقواس. وهنا المؤشر سيكون Sum وها هو المثال :

#include <iostream.h>

int Sum(int x,int y)
{
	return x+y;
}

void main ( ) 
{
	typedef int(*MYFUNC)(int,int);
	int a,b;
	cin >> a>>b;
	MYFUNC mf=(MYFUNC)Sum;// mf is pointer tu the function
	int ss=mf(a,b); // we call the func using its pointer
	cout <<"the sum is : "<< ss<<"\n";
}

أتمنى أن يكون هذا هو مقصودك وإلى اللقاء.

هذا الموضوع مغلق.

مواضيع مشابهة

عدد الزوار حالياً

المتواجدون خلال آخر دقيقتين · يتحدّث كل ٣٠ ثانية

—الإجمالي—أعضاء مسجّلون—زوار بدون تسجيل

جارٍ التحقق من المتواجدين…