لحل هذه المشكلة وطباعة قيمة الدالة المؤشرة بشكل صحيح، يجب استدعاء الدالة المؤشرة باستخدام عملية التفصيل ()
، كما يجب تمرير القيمة المناسبة للدالة.
الكود الصحيح يكون كالتالي:
-
تحديث لغة التطبيق في أندرويد13/04/2024
-
حقن الاعتماد في Angular: دليل الاستخدام22/03/2024
-
استكشاف قوة ومرونة StackLayout في Xamarin26/01/2024
c#include
struct t { //structure definition
int a;
int (*fun) (int a);
};
int get_a (int a) { //function definition
a = a*2;
return a;
}
int main () {
struct t test; //variable creation
get_a(5); //function activating
test.fun = &get_a; //assignation to the pointer function
printf ("%d\n",test.fun(5)); //طباعة قيمة الدالة المؤشرة
return 0;
}
بعد تعديل الكود، يجب أن يقوم البرنامج بطباعة القيمة الصحيحة التي تم عملية الضرب بها، أي قيمة 10.
المزيد من المعلومات
بالطبع! في الكود السابق، يتم تعريف هيكل struct t
الذي يحتوي على متغيرين، a
من النوع int
و fun
من النوع “مؤشر على دالة” التي تأخذ int
وترجع int
. ثم يتم تعريف دالة get_a
التي تأخذ int
وترجع int
، وتقوم بضرب العدد الممرر لها بالقيمة 2.
في الدالة main
، يتم إنشاء متغير test
من نوع struct t
، ويتم تعيين دالة get_a
إلى test.fun
باستخدام عملية العنونة &
. وعند طباعة قيمة *(test.fun)
، يتم طباعة قيمة المؤشر نفسه بدلاً من نتيجة الدالة، لأنه لم يتم استدعاء الدالة بشكل صحيح.
لحل هذه المشكلة، يجب استدعاء الدالة test.fun
باستخدام عملية الاستدعاء ()
وتمرير القيمة المناسبة لها، كما تم في الكود المعدل، حيث تم استدعاء الدالة test.fun(5)
وتمرير القيمة 5 لها، مما أدى إلى طباعة القيمة الصحيحة 10.