Array indexing چیست؟🚀
Array indexing تکنیکیه که برای دسترسی به المنت ها در یک آرایه بر اساس موقعیت یا ایندکس اونها استفاده میشه. همونطور که میدونید هر المنت در یک آرایه با ایندکس خود مشخص میشه که نشون دهنده موقعیت اون نسبت به المنت اول هست. ایندکسینگ امکان دسترسی موثر و مستقیم به هر المنت در آرایه رو فراهم میکنه که برای کارهای محاسباتی مختلف ضروری هست. به عنوان مثال یک آرایه یک بعدی رو در نظر بگیرید:
int A[5] ={10, 20, 30, 40, 50}
در این آرایه 5 عنصر وجود داره که در مکان های حافظه به هم پیوسته ذخیره میشن. ایندکس المنت اول 0، المنت دوم 1 و... هست. و همونطور که میدونید برای دسترسی مثلا به المنت سوم آرایه باید اینکار رو انجام بدیم:
A[2] = 30;
از اونجا که ایندکسینگ از صفر شروع میشه در واقع ایندکس دوم به المنت سوم اشاره داره. اما میدونستید میشه هر کدوم از این هارو محاسبه کرد؟
موقعیت هر المنت در یک آرایه یک بعدی رو میشه با استفاده از یک فرمول ساده محاسبه کرد. این فرمول آدرس پایه آرایه، ایندکس المنت و اندازه هر المنت در حافظه رو محاسبه میکنه( توجه داشته باشید فقط برای آرایه های یک بعدی جوابه)
Address of A[i] = Base Address + (i * Size of each element)
به عنوان مثال، اگر آدرس پایه آرایهA هزار باشه و هر عدد صحیح 4 بایت حافظه اشغال کنه، آدرس المنت در ایندکس دوم میشه:
Address of A[2] = 1000 + (2 * 4) = 1008
بنابراین، المنت در ایندکس 2 در حافظه به آدرس 1008 ذخیره میشه.
محاسبه آدرس المنت چند بعدی ⬇️
اما این ها برای آرایه های یک بعدی بود و برای آرایه های چند بعدی مساعل پیچیده تر میشه، چون باید چندین ایندکس رو در نظر بگیرید. با این حال، فرآیند رو میشه به صورت انتراعی توضیح داد. به عنوان مثال فرمول کلی ما در آرایه های یک بعدی اینه: ( فرمول بالایی هم هست اما این جامع تره)
Address of A[i] = B + W * (i - L_B)
به صورت خلاصه معنی این فرمول یعنی این:
- B: آدرس پایه آرایه است.
- W: اندازه هر المنت در بایت.
- i: ایندکس المنت.
- L_B(lower bound): به کوچکترین یا مقدار ایندکس اولیه ای که المنت آرایه از اون ایندکس شروع میشه اشاره داره. ( به صورت دیفالت 0 هست که در نظر گرفته نمیشه)
به عنوان مثال:
یک ارایه به اسم A با ویژگی ها زیر رو در نظر بگیرید:
B = 2000;
W=4byte;
index=4;
lb=1;
ما میتونیم با استفاده از فرمول گفته شده به راحتی به این صورت به جواب برسیم:
Address of A[4] = 2000 + 4 * (4 - 1) = 2000 + 4 * 3 = 2000 + 12 = 2012;
به صورت کلی این فرمول ساده ای هست و پراستفاده ترین فرمولی هست که استفاده میشه. چون در دنیای کامپیوتر آرایه های یک بعدی محبوبیت و معروفیت بیشتر نسبت به بقیه آرایه ها دارند. اما برای باقی آرایه ها نیز ما فرمول مشابه ای داریم با کمی تغییر.
محاسبه آدرس یک المنت در آرایه دو بعدی⚡️
یک آرایه دو بعدی رو میشه به عنوان یک ماتریس با سطرها و ستون ها تجسم کرد. آدرس یک المنت A[i][j] به ترتیب ذخیره سازی ماتریس بستگی داره که ترتیب ردیف اصلی، عناصر ماتریس سطر به سطر ذخیره میشن. فرمول محاسبه آدرس یک عنصر به صورت زیره:
Address of A[i][j] = B + W * [N * (i - L_r) + (j - L_c)]
- B: آدرس پایه آرایه هست.
- W: اندازه هر عنصر بر حسب بایت است.
- N: تعداد کل ستون های آرایه است.
- i: شاخص ردیف عنصر است.
- j: شاخص ستون عنصر است.
- L_r: به lower bound ایندکس row اشاره داره (اگر مشخص نشده باشه 0 هست).
- L_c: به lower bound ایندکس column اشاره داره (اگر مشخص نشده باشه 0 هست).
به عنوان مثال من یک آرایه دارم با ویژگی های زیر:
B = 1000
W = 4
N = 4
اگر بخواییم آدرس المنت رو در A[2][3] پیدا کنیم. میایم به این صورت به جواب میرسم:
Address of A[2][3] = 1000 + 4 * [4 * (2 - 0) + (3 - 0)] -> 1000 + 44 = 1044
به صورت کلی این فقط قسمت کوچیکی از آرایه ها هست که بنظرم یکی از جذاب ترین بخش های اون بود. سعی کردم توضیحات مختصر و کوتاهی در موردشون بدم. همچنین شما میتونین برای اطلاعات بیشتر مانند محاسبه آرایه های 3بعدی و kبعدی به مقاله و PDF زیر مراجعه کنید.
- Article
- Article
#array