




السمعة:
- إنضم2 سبتمبر 2023
- المشاركات 142
- مستوى التفاعل 244
- النقاط 43
قبل أن نبدا في شرح ال function pointer واللذي يعد من أخر مواضيع أساسيات اللغة البرمجية ++c سوف نتعمق في المواضيع القادمة بإذن الله
أتمنى أن أكون قد قمت بشرح المواضيع السابقة بشكل سهل وسلس فلنبدأ
عنوان الدالة : نعلم جميعًا أن رمز كل وظيفة موجود في الذاكرة، لذا فإن كل وظيفة لها عنوان مثل جميع المتغيرات الأخرى في البرنامج. يمكن استخدام اسم الوظيفة للعثور على عنوان الوظيفة. يمكننا الحصول على عنوان الدالة بمجرد كتابة اسم الدالة بدون قوسين في الدالة
مؤشر الدالة في ++c
أولا يتم استخدام مؤشر الوظيفة للإشارة إلى الوظائف، وبالمثل، يتم استخدام المؤشرات للإشارة إلى المتغيرات
ثانيا يتم استخدامه لحفظ عنوان الوظيفة
ثالثا يتم استخدام مؤشر الدالة لاستدعاء الدالة أو يمكن إرساله كوسيط إلى دالة أخرى
فهنا يوجد عنوانين عنوان للمؤشر و عنوان للدالة فقامنا ( بتخزين عنوان الدالة المسمية gfg في المؤشر المسمى ptr) .
Dereferencing عندما نستخدم عامل التشغيل (*) للحصول على القيمة المخزنة في المؤشر
referencing عندما يتم تخصيص عنوان الوظيفة المراد ربطها بالمؤشر تتم الإشارة إلى هذه العملية على أنها مرجعية
حيث بمؤشر الدالة نقوم بإستدعاء الدالة في هذه الحالة نرى كيف نشير بمؤشر إلى دالة ونسميها باستخدام هذا المؤشر
مثال :
في البرنامج أعلاه، أعلنا عن دالة وظيفتها ضرب عنصرين a وb، ثم نعيد النتيجة. ولكن، بدلاً من استدعاء الوظيفة مباشرة، فإننا نستخدم مؤشر الدالة الذي يقوم بنفس العمل بالنسبة لنا
الخلاصة أننا قمنا بتخزين دالة في مؤشر ونتيجة هذه العملية قمنا بتخزينها في المتغير
تمرير مؤشر الدالة ك معامل
عند الإعلان عن مؤشر دالة، يتم تخزين عنوان الذاكرة الخاص بالوظيفة، ولكن عندما نريد تمرير قيمة الإرجاع إلى الوظيفة التالية. لدينا طريقتان لأداء هذه المهمة.
. إما أن نقوم بتمرير القيمة التي حصلنا عليها
. أو نقوم بتمرير مؤشر الدالة الموجود بالفعل
مثال:
في البرنامج أعلاه، نعلن عن دالة ضرب نضرب فيها متغيرين a وb. نقوم بتمرير مؤشر الدالة كمعامل في دالة الطباعة، هنا نستخدم مؤشر الدالة لحساب القيمة من دالة الضرب ثم تلك القيمة في دالة الطباعة
إذا تم استعمال مؤشر الدالة كمعامل في دالة أخرى
output
يعطيكم العافية



عنوان الدالة : نعلم جميعًا أن رمز كل وظيفة موجود في الذاكرة، لذا فإن كل وظيفة لها عنوان مثل جميع المتغيرات الأخرى في البرنامج. يمكن استخدام اسم الوظيفة للعثور على عنوان الوظيفة. يمكننا الحصول على عنوان الدالة بمجرد كتابة اسم الدالة بدون قوسين في الدالة
مؤشر الدالة في ++c
أولا يتم استخدام مؤشر الوظيفة للإشارة إلى الوظائف، وبالمثل، يتم استخدام المؤشرات للإشارة إلى المتغيرات
ثانيا يتم استخدامه لحفظ عنوان الوظيفة
ثالثا يتم استخدام مؤشر الدالة لاستدعاء الدالة أو يمكن إرساله كوسيط إلى دالة أخرى
++Referencing and Dereferencing of the Function Pointer in c
Dereferencing عندما نستخدم عامل التشغيل (*) للحصول على القيمة المخزنة في المؤشر referencing عندما يتم تخصيص عنوان الوظيفة المراد ربطها بالمؤشر تتم الإشارة إلى هذه العملية على أنها مرجعية
كود:
// Declaring
return_type (*FuncPtr) (parameter type, ....);
// Referencing
FuncPtr= function_name;
// Dereferencing
data_type x=*FuncPtr;
حيث بمؤشر الدالة نقوم بإستدعاء الدالة في هذه الحالة نرى كيف نشير بمؤشر إلى دالة ونسميها باستخدام هذا المؤشر
مثال :
كود:
// C++ program to implementation
// Function Pointer
#include <iostream>
using namespace std;
int multiply(int a, int b) { return a * b; }
int main()
{
int (*func)(int, int);
// فهنا يوجد بوينتر يعمل على ضرب قيمتين أو متغيرين
func = multiply;
int prod = func(15, 2);
cout << "The value of the product is: " << prod << endl;
return 0;
}
الخلاصة أننا قمنا بتخزين دالة في مؤشر ونتيجة هذه العملية قمنا بتخزينها في المتغير
output
كود:
The value of the product is: 30
تمرير مؤشر الدالة ك معامل
عند الإعلان عن مؤشر دالة، يتم تخزين عنوان الذاكرة الخاص بالوظيفة، ولكن عندما نريد تمرير قيمة الإرجاع إلى الوظيفة التالية. لدينا طريقتان لأداء هذه المهمة.
. إما أن نقوم بتمرير القيمة التي حصلنا عليها
. أو نقوم بتمرير مؤشر الدالة الموجود بالفعل
مثال:
كود:
// C++ Program for demonstrating
// function pointer as pointer
#include <iostream>
using namespace std;
const int a = 15;
const int b = 2;
// Function for Multiplication
int multiply() { return a * b; }
// دالة تحتوي على مؤشر الدالة
// ك معامل
void print(int (*funcptr)())
{
cout << "The value of the product is: " << funcptr()
<< endl;
}
// Driver Function
int main()
{
print(multiply);
return 0;
}
إذا تم استعمال مؤشر الدالة كمعامل في دالة أخرى

output
كود:
The value of the product is: 30


فهرس الدروس
-
-
-
-
-
-
-
-
-
-
-
دروس البرمجة الكائنية
التعديل الأخير بواسطة المشرف: