الانتقال إلى المحتوى الرئيسي

كيفية إرجاع مؤشر من دالة ج: دليل لإرجاع المؤشرات من دالة إلى ج

  • الأستاذ عبد الرّحمن اسطمبولي
  • المقالات

في لغة البرمجة ج ، غالبا ما تكون هناك حالات عندما يكون من الضروري إرجاع مؤشر من وظيفة. تلعب المؤشرات دورا مهما في إدارة الذاكرة وهياكل البيانات ، لذا فإن عودتها الصحيحة من الوظائف تعد جانبا مهما في تطوير البرنامج. في هذه المقالة ، سننظر في طرق مختلفة لإرجاع المؤشرات من الوظائف إلى ج.

النقطة الأساسية عند إرجاع المؤشرات من دالة هي الإعلان الصحيح وتهيئة المؤشر داخل الدالة. في وظيفة ، يجب أن تعلن مؤشر باستخدام المشغل ' * ' وتخصيص الذاكرة لذلك باستخدام وظيفة مالوك ().

تتمثل إحدى طرق إرجاع مؤشر من دالة في استخدام عامل الإرجاع. في هذه الحالة ، يتم إرجاع المؤشر الذي تم إنشاؤه داخل الوظيفة إلى وظيفة الاتصال. من المهم أن تتذكر أنه بعد إرجاع مؤشر من دالة ، يجب استخدامه أو تخزينه في متغير.

على سبيل المثال ، هناك إنت *جيتسكوير(عدد إنت) وظيفة التي ترجع مؤشر إلى مربع رقم. يتم إنشاء مؤشر داخل الوظيفة ويتم تخصيص الذاكرة لها باستخدام مالوك (). ثم يتم تخزين قيمة مربع الرقم في هذه الذاكرة باستخدام عامل التشغيل'*'. في نهاية الدالة ، يتم إرجاع المؤشر باستخدام عبارة الإرجاع.

  1. الدافع والإعداد
  2. إرجاع المؤشرات من دالة
  3. أمثلة وتوصيات
  4. مثال 1: إرجاع مؤشر إلى الذاكرة المخصصة
  5. توصيات للعمل مع المؤشرات التي تم إرجاعها
  6. مثال 2: إرجاع مؤشر إلى متغير ثابت
  7. مثال 3: إرجاع مؤشر إلى بنية محلية
  8. سؤال وجواب

الدافع والإعداد

تعلم تقنية العودة مؤشرات من وظائف في لغة البرمجة ج يمكن أن تكون مفيدة جدا للمطور. عودة مؤشرات يسمح ليس فقط لتحقيق قدر أكبر من المرونة في البرنامج ، ولكن أيضا لتحسين استخدام موارد الذاكرة.

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

لدراسة هذا الموضوع ، يجب أن يكون لديك مترجم ج تثبيت ، مثل دول مجلس التعاون الخليجي أو البصرية ج++. إذا لزم الأمر ، يمكنك استخدام بيئة تطوير متكاملة (إيد) مثل التعليمات البرمجية::كتل أو الكسوف. تركيب وتكوين مترجم هو خطوة هامة من شأنها أن تسمح لك لكتابة وتجميع برامج ج.

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

وجود الدافع للدراسة والمواد التحضيرية اللازمة ، يمكنك البدء في دراسة وممارسة مؤشرات العودة من وظائف في لغة البرمجة ج.

إرجاع المؤشرات من دالة

في لغة البرمجة سي ، يمكنك إرجاع المؤشرات من الوظائف ، وهي أداة مهمة ومفيدة. يمكن استخدام المؤشر الذي تم إرجاعه لنقل البيانات أو الكائنات بين وظائف أو أجزاء من البرنامج.

لإرجاع مؤشر من دالة ، يجب أن يكون النوع الذي تم إرجاعه من الدالة مؤشرا. على سبيل المثال:

إنت * جيتنومبر()

{

كثافة العمليات * الأسطوانات = (كثافة العمليات*)مالوك (حجم (كثافة العمليات));

* الأسطوانات = 10;

عودة الأسطوانات;

}

في هذا المثال ، تقوم الدالة` جيتنومبر () ' بإرجاع مؤشر إلى قيمة عدد صحيح. فإنه يخصص الذاكرة لعدد صحيح باستخدام وظيفة 'مالوك ()' ويعين القيمة 10. ثم يقوم بإرجاع مؤشر إلى تلك الذاكرة المخصصة.

عند استدعاء هذه الوظيفة ، يمكنك تعيين المؤشر الذي تم إرجاعه إلى متغير واستخدامه لاحقا:

إنت * عدد = جيتنومبر();

برينتف ("٪د " ، * عدد);

مجانا (عدد);

في هذا المثال ، عندما يتم استدعاء وظيفة` جيتنومبر () ' ، فإنه يعود مؤشر إلى عدد صحيح. يتم تخزين هذا المؤشر في متغير 'رقم'. ثم يمكننا استخدام هذا المؤشر عن طريق إلغاء الإشارة إليه باستخدام عامل التشغيل `*` للحصول على القيمة ، و `برينتف()` لعرضه.

بعد استخدام المؤشر ، تحتاج إلى تحرير الذاكرة باستخدام 'الحرة ()' لتجنب تسرب الذاكرة.

ومع ذلك ، يجب أن تضع في اعتبارك بعض المشكلات المحتملة عند إرجاع المؤشرات من الوظائف:

  • يجب أن تكون حريصا على عدم إرجاع مؤشر إلى متغير محلي للوظيفة. نظرا لأن المتغيرات المحلية للوظيفة موجودة فقط أثناء تنفيذ الوظيفة ، عندما تنتهي الوظيفة ، يتم تحرير ذاكرة المتغير المحلي ويصبح المؤشر غير صالح.
  • تحتاج إلى التأكد من أن المؤشر الذي تم إرجاعه له معنى ولا يشير إلى بيانات غير صالحة أو ذاكرة تم تحريرها في مكان آخر في البرنامج.

يمكن أن تكون المؤشرات العائدة من الوظائف أداة برمجة قوية ، ولكن يجب أن يكون استخدامها مدروسا وواعيا.

أمثلة وتوصيات

فيما يلي بعض الأمثلة والتوصيات لإرجاع المؤشرات من الوظائف في لغة البرمجة سي.

مثال 1: إرجاع مؤشر إلى الذاكرة المخصصة

يخصص الذاكرة لصفيف مع حجم محدد وإرجاع مؤشر إلى هذا الصفيف:

# تشمل

# تشمل

إنت * تخصيص الذاكرة (حجم إنت) {

إنت * أر = (إنت*)مالوك(حجم * سيزوف(إنت));

عودة آر;

}

كثافة العمليات الرئيسية () {

كثافة العمليات الحجم = 5;

إنت * بتر = تخصيص الذاكرة (الحجم);

// باستخدام المؤشر

ل (إنت أنا = 0 ؛ أنا < الحجم ؛ أنا i) {

بتر [أنا] = أنا + 1;

برينتف ("٪د " ، بتر [ط]);

}

مجانا (بتر) ؛ / / الافراج عن الذاكرة

العودة 0;

}

. ثم يتم استخدام المؤشر للوصول إلى الذاكرة المخصصة.

توصيات للعمل مع المؤشرات التي تم إرجاعها

  • للتأكد من أن الذاكرة قد تم تخصيصها بنجاح.
  • عندما لم تعد هناك حاجة إليها.
  • كن حذرا عند استخدام المؤشرات التي تم إرجاعها لتجنب تسرب الذاكرة أو تلف الذاكرة.
  • تجنب إرجاع مؤشر إلى متغير محلي ، حيث يتم تحرير الذاكرة المخصصة للمتغيرات المحلية بعد الخروج من الوظيفة ، ويصبح المؤشر غير صالح.

مثال 2: إرجاع مؤشر إلى متغير ثابت

. المتغير الثابت له عمر مؤقت ويحتفظ بقيمته بين استدعاءات الوظائف:

# تشمل

إنت * الحصول على ثابت متغير () {

ثابت عدد كثافة العمليات = 0;

count++;

العودة والعد

}

كثافة العمليات الرئيسية () {

إنت * بتر 1 = الحصول على ثابت متغير();

إنت * بتر 2 = الحصول على ثابت متغير();

برينتف ("٪د

"،*بتر 1) ؛ / / النواتج 1

برينتف ("٪د

"،*بتر 2) ؛ / / النواتج 2

العودة 0;

}

يزيد.

مثال 3: إرجاع مؤشر إلى بنية محلية

، ثم إرجاع مؤشر إلى هذه البنية:

# تشمل

اكتببنية الدفاع {

اسم الحرف [20];

كثافة العمليات العمر;

} شخص;

شخص * إنشاء تعليمات () {

شخص ص;

ستركبي(p.name ، "جون");

ص. العمر = 25;

العودة و ف

}

كثافة العمليات الرئيسية () {

شخص * بتر = كريتي_ستروكت();

برينتف ("الاسم: ٪ ق

"،بتر->اسم) ؛ / / مخرجات المعلومات القمامة

برينتف ("العمر: ٪ د

"،بتر->العمر) ؛ / / مخرجات معلومات القمامة

العودة 0;

}

وظيفة إخراج قيم حقول الهيكل ، لكنها تمثل بيانات القمامة.

الميزاتالمزاياالعيوب
إرجاع مؤشر إلى الذاكرة المخصصة ديناميكيا- المؤشر إلى الذاكرة المخصصة- الحاجة إلى تحرير الذاكرة باستخدام
إرجاع مؤشر إلى متغير ثابت- قيمة ثابتة بين المكالمات وظيفة- استخدام الذاكرة المشتركة ، والتي يمكن تغييرها من أماكن أخرى في البرنامج
إرجاع مؤشر إلى متغير محلي- قيمة قصيرة الأجل ، يتم تخزينها فقط حتى تخرج الوظيفة- يصبح المؤشر الذي تم إرجاعه غير صالح بعد الخروج من الوظيفة

سؤال وجواب