لماذا المصفوفات في لغات البرمجة تبدأ رتبتها من الصفر Zero Based Index

ل

السلام عليكم 

سؤال سألته لنفسي كثيراً لماذا المصفوفات تبدأ من الصفر في معظم اللغات البرمجية مثل c/c++ , java , c# , python , js ,etc…

لماذا لاتبدأ من واحد كي لايحدث تشتت بين الطول “عدد العناصر” ورتب العناصر 

فمثلا لو لدي مصفوفة 

string[] names = new string[3];

أحتاج لاصل لاول عنصر 

names[0]

 بدلاً من

names[1]

سنوضح السبب 

الامر له علاقة بمعمارية الحاسب Computer Architecture 

طبعاً كلنا نعرف ان المتغيرات او المصفوفات تخزن في ذاكرة الحاسب المؤقتة RAM

لو استرجعنا تعريف الRAM التي اختصارها Random Access Memory انه مجموعة من الخانات المتتالية التي تقوم بتخزين القيمة النصية والرقميةوالمنطقية بصورة مؤقتة في عنواين متتالية .

 هذه الخانات يكون له عنوان بصيغة “سداسي عشر HEXADecimal اي من 0 الى F ” حتى نستطيع الوصول اليها واستخدامها 

فأول مكان في الذاكرة سيكون 0x000000

التالي 0x000001

الى ان يصل الى 10 يكون 0x00000A وهكذا

يتم حفظ القيم في الخانات الخالية بشكل متتابع 

فلو امتلئ اول جزء ينتقل للجزء الذي يليه 

الان لو اردنا تخزين مصفوفة محدد حجمها مسبقاً على سبيل المثال, ماذا سيحدث

نريد تخزين قيم مصفوفة مكونة من 6 عناصر

سنذهب في الذاكرة الى العنوان الفارغ وقتها وليكن 0x153312

توجد عملية تخبرنا بمكان تخزين العنصر وهذه العملية الحسابية هي :

مكان تخزين العنصر  = العنوان الرئيسي + رتبة العنصر 

The Address for the element in an array = Base Address + Index

فحينها لو اردنا تخزين اول عنصر الذي رتبته صفر “0” سنقوم بالتالي:

0x153312 + 0 = 0x153312

سيخزن في مكان الخانة المشار اليها 

لكن في حين بدأنا من 1 بدلاً من 0 سيكون :

0x153312 + 1 = 0x153313

لاحظ اننا بهذا الاسلوب تخطينا خانة كاملة فارغة في الذاكرة

نكمل 

العنصر الذي سيليه والذي رتبته 1 ستكون:

0x153312 + 1 = 0x153313

العنصر الذي سيليه والذي رتبته 2 ستكون:

0x153312 + 2 = 0x153314

وهكذا

أرجو ان اكون أوضحت السبب

عن الكاتب

أحمد مجدي

Full Stack Software Developer , Geek

10 تعليقات

اترك رداً على منذر البدوي الغاء الرد

هذا الموقع يستخدم Akismet للحدّ من التعليقات المزعجة والغير مرغوبة. تعرّف على كيفية معالجة بيانات تعليقك.