"إذا أراد العامل أن يؤدي عمله بشكل جيد، فعليه أولاً أن يشحذ أدواته." - كونفوشيوس، "مختارات كونفوشيوس. لو لينجونج"
الصفحة الأمامية > برمجة > كيف يمكنني استخدام حلقة for-based على صفيف تم تمريره إلى وظيفة غير رئيسية في C++؟

كيف يمكنني استخدام حلقة for-based على صفيف تم تمريره إلى وظيفة غير رئيسية في C++؟

تم النشر بتاريخ 2024-11-09
تصفح:735

How can I use a range-based for-loop on an array passed to a non-main function in C  ?

تم تمرير حلقة for المستندة إلى النطاق إلى وظيفة غير رئيسية

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

لحل هذه المشكلة وتمكين استخدام حلقة for-based، المصفوفة يجب الإشارة إليه بدلاً من تمريره كمؤشر. يؤدي هذا إلى الاحتفاظ بمعلومات حجم المصفوفة. فيما يلي الأمثلة المعدلة التي توضح النهج الصحيح:

void foo(int (&bar)[3]);

int main() {
  int bar[3] = {1,2,3};
  for (int i : bar) {
    cout << i << endl;
  }
  foo(bar);
}

void foo(int (&bar)[3]) {
  for (int i : bar) {
    cout << i << endl;
  }
}

// Generic implementation
template <std::size_t array_size>
void foo(int (&bar)[array_size]) {
  for (int i : bar) {
    cout << i << endl;
  }
}
أحدث البرنامج التعليمي أكثر>

تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.

Copyright© 2022 湘ICP备2022001581号-3