C ++ الاتصال حسب العنوان والاتصال حسب المرجع

C Call Address



C ++ هي لغة برمجة مرنة للأغراض العامة. تم إنشاؤه في الأصل من قبل بيارن ستروستروب، عالم كمبيوتر دانمركي ، في عام 1985. يدعم C ++ طرق تمرير ثلاثية المعلمات ، أي الاتصال حسب القيمة ، والاتصال حسب العنوان ، والاتصال حسب المرجع. في هذه المقالة ، سنناقش حول الاتصال حسب العنوان والاتصال عن طريق آلية المرجع.

ما هي الوظيفة؟

قبل أن ننتقل إلى الموضوع الفعلي ، نحتاج إلى فهم ماهية الوظيفة في C ++. قد يكون العديد منكم بالفعل على دراية بالوظائف.







الوظيفة هي في الأساس جزء من التعليمات البرمجية التي يمكن استخدامها لأداء مهمة معينة. تُستخدم الوظيفة بشكل أساسي لتقليل الشفرة المتكررة في برنامج C ++. يأخذ المدخلات كمعلمات ويعيد الإخراج كقيمة إرجاع. إذا حددنا الوظيفة مرة واحدة ، فيمكننا الاتصال بها / استخدامها عدة مرات في الجزء الأخير من برنامجنا. بهذه الطريقة ، نوفر الكثير من التعليمات البرمجية المتكررة في البرنامج.



يجب أن يكون لكل برنامج C ++ الوظيفة الرئيسية (). الدالة main () هي نقطة الدخول لبرنامج C ++. بصرف النظر عن الوظيفة الرئيسية () ، يمكن للمبرمج تحديد العديد من الوظائف كما يريد.



فيما يلي بناء جملة تعريف الوظيفة:





Return_type Function_Name(قائمة معلمات الإدخال)

يمكن للوظيفة في C ++ قبول عدد 0 أو أكثر من معلمات الإدخال ، بينما يمكنها إرجاع قيمة إرجاع واحدة فقط.

ما هو العنوان؟

هناك نوعان من المتغيرات في C ++ (على غرار لغة C) - متغير البيانات ومتغير العنوان. يستخدم متغير العنوان لتخزين عنوان متغير بيانات آخر. على سبيل المثال ، دعنا نفكر في مقتطف الشفرة التالي:



intأنا= 100؛
int *ptr= &أنا؛

هنا ، يخبرنا البيان الأول أن المتغير i هو متغير بيانات ، وأنه يخزن القيمة 100. في العبارة الثانية ، نعلن عن متغير مؤشر ، أي ptr ، ونقوم بتهيئته بعنوان المتغير i.

ما هو المرجع؟

المرجع هو ميزة قوية أخرى للغة C ++. دعنا نفكر في مقتطف الشفرة التالي:

intإلى= 200؛
int &ص=إلى؛

في هذا المثال ، أعلنا عن عدد صحيح ، أي a ثم أعلنا عن متغير مرجعي r ، والذي تمت تهيئته بقيمة a. لذا ، فإن المتغير المرجعي ليس سوى اسم مستعار لمتغير آخر.

طرق تمرير المعلمة:

هناك ثلاثة أنواع من طرق تمرير المعلمات في لغة C ++:

  1. استدعاء بالقيمة / تمرير بالقيمة
  2. الاتصال بالعنوان / المرور بالعنوان
  3. دعوة بالإشارة / تمرير بالرجوع

في هذه المقالة ، نناقش حول - الاتصال حسب العنوان والاتصال بالإشارة.

ما هو الاتصال بالعنوان / المرور بالعنوان؟

في حالة طريقة Call by address / Pass by address ، يتم تمرير وسيطات الوظيفة كعنوان. تقوم وظيفة المتصل بتمرير عنوان المعلمات. يتم استخدام متغيرات المؤشر في تعريف الوظيفة. بمساعدة طريقة الاتصال حسب العنوان ، يمكن للوظيفة الوصول إلى المعلمات الفعلية وتعديلها. سنرى مثالًا على قسم طريقة الاتصال حسب العنوان لاحقًا من هذه المقالة.

ما هو Call By Reference / Pass by Reference؟

في طريقة الاتصال بالمرجع / المرور حسب المرجع ، يتم تمرير معلمات الوظيفة كمرجع. داخل تعريف الوظيفة ، يتم الوصول إلى المعلمات الفعلية باستخدام المتغير المرجعي.

أمثلة:

الآن ، نظرًا لأننا نفهم مفهوم طرق تمرير المعلمات ، فسنرى العديد من أمثلة البرامج لفهم آلية تمرير المعلمات في C ++:

  1. مثال -1 - الاتصال حسب العنوان (1)
  2. مثال -2 - الاتصال حسب العنوان (2)
  3. مثال 3 - الاتصال بالمرجع (1)
  4. مثال 4 - الاتصال بالمرجع (2)

تم إعطاء المثالين الأولين لشرح كيفية عمل طريقة الاتصال حسب العنوان في C ++. المثالان الأخيران هما شرح مفهوم الاتصال بالإشارة.

مثال -1 - الاتصال حسب العنوان (1)

في هذا المثال ، سوف نوضح آلية الاتصال حسب العنوان. من الدالة main () ، نستدعي الدالة hello () ونمرر عنوان var. في تعريف الوظيفة ، نتلقى عنوان var في متغير المؤشر ، أي p. داخل الدالة hello ، يتم تغيير قيمة var إلى 200 بمساعدة المؤشر. لذلك ، يتم تغيير قيمة var إلى 200 داخل الدالة main () بعد استدعاء الوظيفة hello ().

#يشمل
استخدام مساحة الاسمساعات؛

فارغأهلا(int *ص)
{
كلفة <<endl<< 'داخل hello () وظيفة:' <<endl؛
كلفة << 'قيمة * p =' << *ص<<endl؛
*ص= 200؛
كلفة << 'قيمة * p =' << *ص<<endl؛
كلفة << 'الخروج من وظيفة hello ().' <<endl؛
}

intالأساسية()
{
intأين= 100؛
كلفة << 'قيمة var داخل الدالة الرئيسية () =' <<أين<<endl؛

أهلا(&أين)؛

كلفة <<endl<< 'قيمة var داخل الدالة الرئيسية () =' <<أين<<endl؛

إرجاع 0؛
}

مثال -2 - الاتصال حسب العنوان (2)

هذا مثال آخر على طريقة الاتصال حسب العنوان. في هذا المثال ، سنشرح كيف يمكن استخدام طريقة الاتصال حسب العنوان لحل مشكلة واقعية. على سبيل المثال ، نريد كتابة دالة لمبادلة متغيرين. إذا استخدمنا آلية الاستدعاء بالقيمة لمبادلة متغيرين ، فلن يتم تبديل المتغيرات الفعلية في وظيفة المتصل. يمكن استخدام طريقة الاتصال حسب العنوان في مثل هذا السيناريو. في هذا المثال ، نقوم بتمرير عنوان كل من var_1 (& var_1) و var_2 (& var_2) إلى دالة mySwap (). داخل وظيفة mySwap () ، نقوم بتبديل قيم هذين المتغيرين بمساعدة المؤشرات. كما ترى في الإخراج أدناه ، يتم تبديل القيمة الفعلية لهذه المتغيرات في الوظيفة main () بعد تنفيذ وظيفة mySwap ().

#يشمل
استخدام مساحة الاسمساعات؛

فارغmySwap(int *vptr_1 ،int *vptr_2)
{
inttemp_var؛
temp_var= *vptr_1؛
*vptr_1= *vptr_2؛
*vptr_2=temp_var؛
}

intالأساسية()
{
intفار_1= 100؛
intvar_2= 300؛

كلفة << 'قبل استدعاء دالة mySwap () ، قيمة var_1:' <<فار_1<<endl؛
كلفة << 'قبل استدعاء دالة mySwap () ، قيمة var_2:' <<var_2<<endl<<endl؛

كلفة << 'استدعاء وظيفة mySwap () - الاتصال حسب العنوان.' <<endl<<endl؛
mySwap(&var_1 ،&var_2)؛

كلفة << 'بعد استدعاء دالة mySwap () ، قيمة var_1:' <<فار_1<<endl؛
كلفة << 'بعد استدعاء دالة mySwap () ، قيمة var_2:' <<var_2<<endl؛

إرجاع 0؛
}

مثال 3 - الاتصال بالمرجع (1)

في هذا المثال ، سوف نوضح كيف يعمل الاتصال حسب المرجع في C ++. في تعريف الدالة hello () ، يتم تلقي القيمة كمتغير مرجعي (& p). بمساعدة المتغير المرجعي (أي ، p) ، يمكننا تغيير قيمة المعلمة الفعلية (var) داخل الوظيفة الرئيسية ().

#يشمل
استخدام مساحة الاسمساعات؛

فارغأهلا(int &ص)
{
كلفة <<endl<< 'داخل hello () وظيفة:' <<endl؛
كلفة << 'قيمة p =' <<ص<<endl؛
ص= 200؛
كلفة << 'قيمة p =' <<ص<<endl؛
كلفة << 'الخروج من وظيفة hello ().' <<endl؛
}

intالأساسية()
{
intأين= 100؛
كلفة << 'قيمة var داخل الدالة الرئيسية () =' <<أين<<endl؛

أهلا(أين)؛

كلفة <<endl<< 'قيمة var داخل الدالة الرئيسية () =' <<أين<<endl؛

إرجاع 0؛
}

مثال 4 - الاتصال بالمرجع (2)

هذا مثال آخر لمكالمة من خلال الإشارة. في هذا المثال ، سوف نوضح كيف يعمل الاتصال حسب المرجع في C ++ بمساعدة مثال من العالم الحقيقي. يتم استدعاء وظيفة mySwap () من الدالة main () بالمعلمات التالية - var_1 و var_2. داخل وظيفة mySwap () ، نتلقى المعلمات كمتغيرات مرجعية.

#يشمل
استخدام مساحة الاسمساعات؛

فارغmySwap(int &vref_1 ،int &vref_2)
{
inttemp_var؛
temp_var=vref_1؛
vref_1=vref_2؛
vref_2=temp_var؛
}

intالأساسية()
{
intفار_1= 100؛
intvar_2= 300؛

كلفة << 'قبل استدعاء دالة mySwap () ، قيمة var_1:' <<فار_1<<endl؛
كلفة << 'قبل استدعاء دالة mySwap () ، قيمة var_2:' <<var_2<<endl<<endl؛

كلفة << 'استدعاء وظيفة mySwap () - الاتصال بالإشارة.' <<endl<<endl؛
mySwap(var_1 ، var_2)؛

كلفة << 'بعد استدعاء دالة mySwap () ، قيمة var_1:' <<فار_1<<endl؛
كلفة << 'بعد استدعاء دالة mySwap () ، قيمة var_2:' <<var_2<<endl؛

إرجاع 0؛
}

استنتاج

فهم طرق تمرير المعلمات في C ++ أمر بالغ الأهمية. تدعم لغة البرمجة C الاتصال حسب القيمة والاتصال بالعنوان فقط. ولكن ، يدعم C ++ الاتصال بالإشارة إلى جانب الآليتين السابقتين. في هذه المقالة ، رأينا العديد من الأمثلة العملية لفهم مفهوم الاتصال حسب العنوان والمكالمة بالإشارة. الاتصال حسب العنوان هو وسيلة قوية وشائعة للغاية في تطبيقات المجال المضمنة.