نوشتن بسیاری از برنامه ها بدون استفاده از مفهومی به نام "آرایه" غیر ممکن است. فکر کنید که می خواهید 100 عدد یا اسم یا هر چیز دیگری را در حافظه ذخیره کنید، اگر بخواهید برای هر کدام از آنها یک متغیر تعریف کنید و ورودی را در آن ذخیره کنید کاری بس دشوار و غیر اصولی خواهد بود ! در این مواقع آرایه ها به کار شما می آیند! آرایه مجموعه یا به عبارت بهتر زنجیره ای از متغیر ها است که در خانه های حافظه به صورت پشت سر هم قرار گرفته اند و دارای یک نام کلی هستند. هر کدام از خانه های آرایه به وسیله یک شماره یا "ایندکس" (index) مشخص شده اند و میتوان آنها را به صورت یک متغیر در نظر گرفت. برخی از نکات مهم در مورد آرایه ها :
- تمام خانه های آرایه از یک نوع هستند.
- شماره خانه های آرایه از "صفر" شروع می شود.
- خانه های آرایه به صورت پشت سر هم در حافظه قرار دارند.
- نام آرایه، آدرس اولین خانه ی شروع آرایه و همیشه ثابت است.
- ایندکس آرایه نباید از اندازه ی تعریف شده آن فراتر رود.
- در حالت کلی نمیتوان یک آرایه را به طور مستقیم به آرایه ی دیگر تخصیص داد.
تعریف آرایه چگونه است ؟
یک آرایه را میتوان به طریق مختلفی تعریف کرد. ساده ترین آنها به صورت زیر است. برای اعلان یک آرایه باید از علامت [ ] در کنار نام آن استفاده کنیم.
int a[10];
خط بالا یک آرایه استاتیک به نام a که دارای 10 خانه است و خانه های آن از نوع صحیح (int) هستند، را تعریف می کند. پس ابتدا نوع آرایه ، سپس نام و بعد از آن تعداد خانه های آرایه یا در یک کلام اندازه ی آرایه در بین دو علامت براکت آمده است. آرایه بالا دارای 10 خانه است که عبارتند از :(به خانه های آرایه، "عناصر" آرایه نیز گفته می شود)
{a[0] , a[1], a[2], a[3], a[4], a[5], a[6], a[7], a[8], a[9] }
دقت کنید که خانه های از صفر شروع شده و به 9 ختم شده اند. طول آرایه مقداری ثابت است و اگر در هنگام اجرای برنامه شماره یا ایندکس آرایه از اندازه ای که تعریف شده است فراتر رود،خظای زمان اجرا رخ می دهد و بسته به کامپایلری که استفاده می کنید، توضیحاتی در باره آن داده می شود. در حالت کلی تعداد خانه های آرایه باید در هنگام اعلان مشخص شود ولی میتوان به با روش هایی این اندازه را در هنگام نیاز تعیین کرد که در پست های بعدی به آن می پردازیم. مقدار دهی به آرایه می تواند به صورت های مختلف انجام شود. برای مثال میتوان یک آرایه را مانند بالا ابتدا اعلان کرد و در قسمت های دیگر برنامه مقدار دهی کرد. برای مثال می خواهیم مقدار 100 را به خانه ی اول ارایه اختصاص دهیم
a[0] = 100;
می بینید که تنها فرق آن با یک متغیر معمولی استفاده از علامت براکت و ایندکس است. تمام کارهای که با یک متغیر انجام می دهید را با یک خانه از آرایه نیز می توانید انجام دهید. در بالا گفتیم که نام آرایه در واقع ادرس اولین خانه ی آرایه است. پس برای ارسال آرایه به تابع کافی است که نام ارایه را به تابع بفرستیم. برای مثال از تابعی به نام Function داشته باشیم که آرگومان آن یک آرایه از نوع int باشد برای فرستادن آرایه a به تابع به صورت زیر عمل می کنیم.
Function (a);
در پست های قبل دیده بودیم که آرایه به صورت "ارجاع" به تابع ارسال می شود، پس در تابع Function هر تغییری که در آرایه a به وجود آید در برنامه اصلی نیز صورت خواهد گرفت. می توان یک اشاره گر را به صورت مستقیم به آرایه اختصاص داد. چون نام آرایه حاوی آدرس آرایه است تنها کافی است که اشاره گر را برابر نام آرایه قرار دهیم. مانند زیر :
Int* P = a;
در این صورت اگر p را چاپ کنیم ادرس ارایه و اگر *p را چاپ کنیم مقدار اولین خانه ی ارایه نمایش داده می شود. با افزایش مقدار p میتوانیم به خانه های دیگر آرایه دسترسی داشته باشیم.
آرایه های چند بعدی :
ارایه ای که در بالا تعریف کردیم یک آرایه یک بعدی از نوع int بود به این معنی که هر کدام از خانه های یا عناصر آن می توانند یک عدد صحیح را ذخیره کنند. آرایه های چند بعدی به آرایه های گفته می شود هر کدام از عناصر آن خود یک آرایه هستند. برای مثال یک ارایه ی 4 بعدی آرایه ای است که هر کدام از خانه های آن یک آرایه سه بعدی است! البته در عمل کمتر پیش می آید که ابعاد آرایه از سه بعد تجاوز کند به این دلیل که کار کردن با آن ها بسیار دشوار می شود ولی به هر حال تعریف و کار کردن با یک ارایه 10 بعدی نیز هیچ مانعی ندارد.
تعریف آرایه چند بعدی :
در این قسمت می خواهیم یک آرایه دو بعدی تعریف کنیم. یعنی آرایه ای که هر کدام از عناصر ان یک آرایه است.
double b [3][4];
خط بالا یک ارایه دو بعدی به نام b از نوع double تعریف می کند که دارای 3 خانه است که هر کدام از آنها یک ارایه 4 خانه ای هستند. آرایه های دو بعدی را می توان به صورت یک ماتریس تصور کرد. در بالا می توانید آرایه b را به صورت یک ماتریس با 3 سطر و 4 ستون تصور کنید. این آرایه 12 عنصر مستقل دارد که می توان آن ها را به صورت زیر تصور کرد.
b[0][0], b[0][1], b[0][2], b[0][3]
b[1][0], b[1][1], b[1][2], b[1][3]
b[2][0], b[2][1], b[2][2], b[2][3]
برای مقدار دهی یا دسترسی به یک عنصر در ارایه چند بعدی شبیه به آرایه یک بعدی عمل می کنیم و از ایندکس آن استفاده می کنیم.
b[0][2] = 20.55;
در خط بالا عنصری که در ردیف اول و ستون سوم قرار گرفته است را مقدار دهی کرده ایم. پس میبینید که دقیقا باید محل قرار گرفتن عنصر در ارایه را با ایندکس در داخل براکت مشخص کنیم. در این پست با مقدمات آرایه ها آشنا شدیم. در پست بعدی به سراغ آرایه های پویا و آرایه های CLR می رویم.