تمرير مصفوفة إلى دالة C ++

Passing An Array Function C



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

بناء الجملة

[يعودنوع] [اسموظيفة] (البياناتنوعاسم ارينامي[مجموعة مصفوفةبحجم])

{

وظيفةهيئة

}

مثال 1

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









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



عرض(علامات)؛

تشير الوسيطة في المعلمة إلى عنوان ذاكرة المصفوفة. في معلمة رأس الوظيفة ، يتم تحويل int m [7] إلى int * m. يتضمن هذا نفس عنوان المصفوفة الأصلية. عندما نستخدم m [5] في جسم الوظيفة ، سنقوم بمعالجة المصفوفة الأصلية.





عرض باطل(الباحث م[7] )

في نظام التشغيل Linux ، يتطلب الحصول على الإخراج من خلال محطة بعض المتطلبات الأساسية ليتم تثبيتها. يحتاج إلى مترجم لتجميع ثم تنفيذ التعليمات البرمجية في محطة موجه الأوامر. يستخدم G ++ في C ++ للترجمة.



$g ++ -أوcode3 code3.c

$./كود 3

حيث يتم استخدام –o لتخزين الإخراج من الملف المصدر إلى ملف الإخراج.

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

مثال 2

مثال آخر بخصوص تمرير المصفوفة عبر المعلمة هو تمرير مصفوفة متعددة الأبعاد إلى الوظيفة. يتم استخدام مصفوفة ثنائية الأبعاد (2d) هنا. في الوظيفة الرئيسية ، نحتاج إلى تهيئة مصفوفة.

مجموعة Int[صف][عمودي]

تتضمن تهيئة المصفوفة ثنائية الأبعاد الصف والعمود. ويتم الاحتفاظ بترتيبهم طوال البرنامج. تمت تهيئة المصفوفة ثنائية الأبعاد برقمين بين قوسين. كما وصفنا عمودين في التهيئة.

عرض(على واحد)؛

سنستخدم فقط اسم المصفوفة في المعلمة كوسيطة.

الآن سنقوم بعرض أداء وظيفة العرض. عند بدء تشغيل الوظيفة ، يتطلب الأمر متغير مصفوفة لقبول مصفوفة تم تمريرها من خلال استدعاء الوظيفة من خلال البرنامج الرئيسي.

عرض باطل(كثافة العمليات[][2] )

من الضروري ذكر عدد الأعمدة. في المقارنة ، ليس ضروريًا في حالة الصفوف. لهذا السبب تركنا أقواس الصف فارغة هنا حيث نستخدم حلقة for لعرض النتائج. ولكن في حالة المصفوفة ثنائية الأبعاد ، نستخدم حلقة for المتداخلة. يحتوي على عبارتين من أجل مع متغيرين فيهما.

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

مثال 3

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

بدءًا من البرنامج الرئيسي ، يتم تهيئة المصفوفة بالقيم.

متوسط ​​= getAverage(الرصيد،5)؛

سيتم تخزين النتيجة في متغير avg. بدلاً من تمرير اسم المصفوفة فقط ، يُضاف حجم المصفوفة أيضًا إلى المعلمة.

تحتوي المعلمة أيضًا على متغير نوع الصفيف ونوع بيانات عدد صحيح لتلقي حجم الصفيف. نوع البرنامج الرئيسي هو int لأنه سيحصل على قيمة عدد صحيح من الوظيفة. وإلا فهو باطل في حالات أخرى.

الآن سنرى الإخراج. يتم الحصول على هذه القيمة من خلال الصورة من الوظيفة.

مثال 4

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

printMax(آر آر 1)؛

printMax(arr2)؛

حيث printMax هو اسم الوظيفة و arr هو المصفوفة. لن تعود النتيجة من الوظيفة ويتم عرضها هناك. سيحسب For loop العدد الأقصى في كلا المصفوفتين. يتم استخدام عبارة if داخل حلقة for. رأس الوظيفة هو:

طباعة باطلة(int arr[5])

نظرًا لأن كلا المصفوفتين يحتويان على قيم مختلفة ، فستكون النتائج مختلفة.

مثال 5

هذا المثال هو ملخص لجميع أنواع المصفوفات التي تمر عبر المعلمات. قد تكون هذه مصفوفات بحجم أو غير بحجم أو مؤشر. سوف نعتبرهم واحدا تلو الآخر.

في البرنامج الرئيسي ، يتم الإعلان عن كل وظيفة أولاً. يمكنك الإشارة إلى الاختلاف في إعلانهم.

Int sum1(int tmp[5])؛

مجموع Int sum2(int tmp[])؛

Int sum3(int*tmp)؛

تصور هذه المصفوفات الثلاثة أنه يمكن تمرير المصفوفات بوجود هذه المعلمات في الوظيفة.

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

المجموع = sum1(مبيعات)؛

المجموع = sum2(مبيعات)؛

المجموع = سوم 3(مبيعات)؛

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

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

يمكنك أن ترى أن الإجابة هي نفسها لجميع الوظائف الثلاث المستخدمة.

استنتاج

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