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

لماذا يتجاهل C وC++ أطوال المصفوفات في تواقيع الوظائف؟

تم النشر بتاريخ 2024-12-26
تصفح:745

Why Do C and C   Ignore Array Lengths in Function Signatures?

تمرير المصفوفات إلى الوظائف في C و C

سؤال:

لماذا C و تسمح مترجمات C بإعلانات طول المصفوفة في توقيعات الوظائف، مثل int dis(char a[1])، عندما لا تكون كذلك مفروض؟

الإجابة:

إن بناء الجملة المستخدم لتمرير المصفوفات إلى الوظائف في C وC هو أمر غريب تاريخي يسمح بتمرير المؤشر إلى العنصر الأول للمصفوفة بدلاً من المصفوفة نفسها.

شرح تفصيلي:

في C وC، المصفوفات ليست كذلك مرت بالرجوع إلى الوظائف. بدلاً من ذلك، يتم تمرير مؤشر إلى العنصر الأول من الصفيف. هذا يعني أن التدوين [] في توقيع الوظيفة يتم تجاهله فعليًا من قبل المترجم.

الآثار:

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

المنظور التاريخي:

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

أحدث البرنامج التعليمي أكثر>

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

Copyright© 2022 湘ICP备2022001581号-3