 |
:: استاذ و مشرف قسم الالكترونيات ::
تاريخ التسجيل: May 2007
المشاركات: 6,832
|
|
نشاط [ F.Abdelaziz ]
قوة السمعة:
|
|
03-12-2012, 05:05 PM
المشاركة 16
|
|
تمرير المتغيرات عن طريق "المرجع" Reference إلى الدالة :
فى الوضع الافتراضى , يتم تمرير الوسائط arguments إلى الدوال عن طريق القيمة . على الرغم من أن هذه الطريقة لها العديد من المزايا الواضحة , إلا أن هناك حالات يكون من الأكثر ملائمة وكفاءة تمرير عنوان الوسائط بدلا من ذلك , وهذا هو "تمرير الوسيط عن طريق المرجع" . عندما يتم تمرير عنوان لوسيط , يمكن تعديل القيمة الأصلية عن طريق الدالة , وبالتالى فإن الدالة ليس من الضرورى أن تعود بأية متغيرات .
المثال التالى يوضح كيف يمكن تمرير عنوان الوسائط إلى الدالة وكيف يمكن تعديل قيم هذه الوسائط داخل الدالة .
مثال 9 :
المطلوب :
كتابة دالة تسمى Swap لقبول وسيطين لأعداد صحيحة ومن ثم مبادلة بين swap قيم هذه الوسائط , مع استخدام هذه الدالة فى برنامج رئيسى لعمل مبادلة بين قيم متغيرين .
الحل :
فيما يلى البرنامج المطلوب .
يتم تعريف الدالة Swap من النوع الفارغ void حيث أنها لا تعود بأى قيمة . هذه الدالة لها وسيطين , a و b , وفى رأس الدالة يتم استخدام مؤشرين للأعداد صحيحة integer pointers لتمرير عناوين هذه المتغيرات . بداخل جسم الدالة , يتم قبول قيمة الوسيط عن طريق وضع الحرف “*” أمام الوسيط . فى داخل البرنامج الرئيسى , يتم تمرير عناوين المتغيرات إلى الدالة باستخدام الحرف “&” أمام أسم المتغير . فى نهاية البرنامج , يتم تحديد المتغيرات p و q بالقيم 20 و 10 على الترتيب .
كود:
/*************************************************************
This program shows how the address of variables can be passed to functions.
The function in this program swaps the values of two integer variables.
***************************************************************/
/* Function to swap two integers */
void _Swap(int *a, int *b)
{
int temp;
temp = *a; // Store a in temp
*a = *b; // Copy b to a
*b = temp; // Copy temp to b
}
/* Start of the main program */
void main()
{
int p, q;
p = 10; // Set p = 10
q = 20; // Set q = 20
_Swap(&p, &q); // Swap p and q (p=20, q=10)
}
|