سلام. فرض کن یک آرایه ای به شکل زیر از نوع int تعریف کردی.
int arr[] = {6, 28,75, 2};
همچنین فرض کن خونه اول یعنی خونه ای که در آن مقدار 6 هست مکانش در حافظه در خونه 3000 باشه. چون نوع داده ای که تعریف شده از نوع int هستش یعنی هر خونه از آرایه 4 بایت فضا میگیره.
از طرفی برای به دست آوردن ایندکس یک خونه از آرایه از فرمول زیر باید استفاده کنی
interesting location address: آدرس خونه ای که می خواهی ایندکس آونو به دست بیاری
offset location address: آدرس خونه اول آرایه هست که در مثال گفته شده آدرس خونه اول آرایه 3000 در نظر گرفته شده پس این مقدار این 3000 میشه
Size of integer هم که 4 بایت هست
حالا اگه بخوای ایندکس مربوط به اولین خونه آرایه رو به دست بیاری می نویسی
3000-3000/4 = 0
همونطور که می بینی خونه اول چون آدرس offset آن با آدرس خودش یکی است پس مقدارش صفر شده پس ایندکس این خونه صفره.
برای خانه بعدی آدرس حافظه اش میشه 3004 پس ایندکس این خونه برابر با
3004-3000/4 = 1
و ایندکس خونه بعدی یک شده و به همین ترتیب برای مابقی خونه ها می تونی حساب کنی.
دلیل اصلی که از صفره اینه که آدرس خونه offset با خونه اول آرایه یکیه