لماذا يبدأ Index المصفوفات من الصفر
هناك قاعدة ذهبية تقول :
اسم المصفوفة = عنوانها
أي أن :
arr=&arr
و لو فرضنا أن شكل الذاكرة هذا هو :
و بالطبع هذا شكل توضيحي لا أكثر ، ومن المفيد ذكره قبل بدء الشرح أن ترقيم عناوين الذاكرة يبدأ من الصفر و أن الحجم التخزيني لمتغير integer هو 2byte
الشرح:
لنفترض أنه لدينا برنامج يحجز مساحة بين 1024 و 2048 من عنواين الذاكرة و يبدأ عند 1024 بمصفوفة من نوع int أي كل عنصر سيحجز له بايتين فلو قلنا في البرنامج
cout<<arr[0];
فإن الكومبايلر سيفهم لوحده أنها مؤشر لـ
*(1024+0)
فلو أردت أن تصل للعنصر الخامس يمكنك أن تكتب
*(1024+(5*2))
وهكذا
فلو لم يتم البدء من الـindex صفر لكان أول عنصر أٌهمل
و بالتالي نحن عندما نكتب
arr[0]
نحن نصرّح عن مؤشر بالمعنى العام.
و هذا كود يوضح المترادفات حول هذا المجال :
#include<iostream.h>
void main()
{
int arr[5]={1,2,3,4,5};
int *ptr=arr;
for(int i=0;i<5;i++)
{
cout<<arr<<"\t";
}
cout<<"\n\n\n";
cout<<"now !!! reading array element using pointers"<<endl;
for(int j=0;j<5;j++)
{
cout<<*(arr+j)<<"\t";
}
cout<<endl;
////ptr=arr=&arr
for(int k=0;k<5;k++)
{
cout<<*(ptr+k)<<"\t";
}
cout<<endl;
cout<<*arr<<endl;//=arr[0]
cout<<arr<<endl;//=&arr[0]
cout<<&arr<<endl;//arr=&arr
}المراجع :
الشكل التوضيحي للذاكرة و الكود من كتاب مدخل إلى الخوارزميات و البرمجة .