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

جدول المحتويات:

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

فيديو: كيفية تمرير مصفوفة إلى دالة

فيديو: كيفية تمرير مصفوفة إلى دالة
فيديو: المحاضره 29_ امثله على تمرير مصفوفة الى داخل الدالة | Passing arrays as a parameter in c+ 2024, ديسمبر
Anonim

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

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

انه ضروري

مترجمي لغات C و C ++

تعليمات

الخطوة 1

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

دالة صفيف باطلة (int aNumbers [3]) ؛

تسمى هذه الوظيفة بتمرير مصفوفة إليها كوسيطة مباشرة:

إفراغ SomeFunction ()

{

int aNumbers = {1، 2، 3} ؛

ArrayFunction (aNumbers) ؛

}

يتم نسخ البيانات المنقولة إلى المكدس. تعديل المصفوفة في الوظيفة التي تم استدعاؤها لا يغير المصدر.

الخطوة 2

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

دالة صفيف باطلة (int aNumbers ) ؛

يمكن أيضًا تمرير المصفوفات متعددة الأبعاد بطريقة مماثلة (يمكن أن يكون "البعد" الأول فقط متغيرات):

دالة صفيف باطلة (int aNumbers [3] [2]) ؛

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

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

الخطوه 3

قم بتمرير المصفوفة بالمؤشر. يجب أن تكون وسيطة الدالة مؤشرًا لقيمة من نوع يتوافق مع عناصر المصفوفة. على سبيل المثال:

دالة صفيف باطلة (int * pNumbers) ؛

يمكن الوصول إلى البيانات في دالة ما في التدوين للعمل مع عناصر المصفوفة ، واستخدام حساب العنوان:

دالة صفيف باطلة (int * pNumbers)

{

pNumbers [0] = 10 ؛ // الوصول إلى العنصر 0

* (pNumbers + 1) = 20 ؛ // الوصول إلى العنصر 1

}

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

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

إفراغ SomeFunction ()

{

int aNumbers = {1، 2، 3} ؛

ArrayFunction (aNumbers) ؛ // مجموعة كاملة

ArrayFunction (& aNumbers [1]) ؛ // بدءًا من العنصر الثاني

}

تتضمن هذه الطريقة أيضًا تمرير عدد العناصر المتاحة في معامل إضافي أو استخدام مصفوفة فاصلة.

الخطوة 4

قم بتمرير البيانات إلى دالة ذات معلمة تكون كائنًا أو مرجعًا إلى كائن من الفئة التي تنفذ وظيفة الصفيف. عادةً ما توجد مثل هذه الفئات أو قوالب الفئات في المكتبات والأطر الشائعة (QVector in Qt و CArray في MFC و std:: vector في STL وما إلى ذلك).

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

دالة صفيف باطلة (QVector oArray)

{

int nItemCount = oArray.count () ؛

int nItem = oArray [0] ؛

}

إفراغ SomeFunction ()

{

QVector oArray (10) ؛

لـ (int i = 0 ؛ i

موصى به: