السلام عليكم
سؤال سألته لنفسي كثيراً لماذا المصفوفات تبدأ من الصفر في معظم اللغات البرمجية مثل 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
وهكذا
أرجو ان اكون أوضحت السبب
جميل جدًا ما خطته أفكارك وأناملك عزيزي أحمد، بالفعل أصبت المطلوب حول الـ arrays وسبب بدايتها من الصفر والكثير يسألون عن سبب البداية من الصفر وقد أوضحت أنت القانون وكيفية تطبيق ذلك.
سأقتبس المقالة للفائدة لاحقًا لإيضاح الفكرة لمن يسألون من خلالي.
أشكرك وأشد على يدك بإتحافنا بالمزيد بالمقالات التي من هذا النوع 🙂
تحياتي.
سلمت اخي محمد
شكراً لك 😀
بااااارك الله فيييك اخي العزيز .. احسنت
وفيك , شكراً
برنس يا مجدي والله 💪😍
شكراً 😊
جميل جدا انك تكون فاهم ال Computer Structure ماشي ازاي
وحلو اوي المقال ومختصر ومفيد
شكراً …
0x153312 + 2 = 0x153315
أليس الصحيح أن تكون هكذا؟
0x153312 + 2 = 0x153314
انت على صواب , تم التعديل وشكراً لتنبيهك