سلام!

در این جلسه می خواهیم طرز کار آرایه ها را در ++c یاد بدهیم و سپس طرز تعریف آرایه را در heap توضیح دهیم.

فرض کنید یک آرایه ی معمولی ۱۰ تایی را تعریف کرده اید:

int ar[10];

این خط باعث می شود که compiler به دنبال ۱۰ جای خالی پشت سر هم در حافظه بگردد و هر وقت که پیدا کرد، آدرس اولین خانه را در ar بریزد (پس نتیجه می گیریم که ar هم اشاره گر است). حالا مثلا اگر در برنامه بگوییم

ar[5] = 5;

یعنی ۵ خانه جلوتر از خانه ای که ar به آن اشاره می کند را پیدا کن و مقدار آن را برابر با ۵ قرار بده. نتیجه ای که از این توضیحات می توان گرفت این است که «خب، پس صدا کردن خانه ی ۱۲ام آرایه در حالی که آرایه ۱۰ تایی است ممکن است!» جواب این است: بله! شما می توانید با کمک ++c روی حافظه راه بروید و این منبع عمده ی مشکلاتی است که برنامه نویسان مبتدی با آن مواجه می شوند. پس هنگام استفاده از آرایه ها حواستان را جمع کنید.

حالا می خواهیم یه آرایه ی ۱۰ تایی را در heap تعریف کنیم. مزایای این کار نسبت به تعریف آرایه در stack علاوه بر در اختیار داشتن فضای بیشتر، این است که شما می توانید اندازه ی آرایه را یک متغیر بدهید.تعریف آرایه با سایز ثابت:

int *ar = new int[10];

تعریف آرایه به اندازه ی یک متغیر:

int *ar = new int[n];

الآن اشاره گر ar به خانه ی اول آرایه (که در heap است) اشاره می کند. پس می توان گفت:

ar[5] = 546;

طرز deallocate کردن آرایه هم کمی فرق می کند. برای این کار باید نوشت:

delete[] ar;

این خط تمامی خانه های آرایه ی ar را آزاد می کند.

مفاهیم این جلسه تمام شدند. حالا نوبت تمارین است:

۱. یک آرایه ی ۲۰ تایی در heap تعریف کنید و سپس تمامی خانه های آن را برابر با شماره ی خانه قرار دهید. تمامی عضوهای آرایه را چاپ کنید.

۲. یک آرایه ی ۱۰ تایی از int در heap تعریف کنید. سپس مقدار تمامی خانه های آن را از ورودی بخوانید. حالا با کمک یک تابع، مقدار تمامی خانه های این آرایه را با ۱ جمع کنید (آرایه جزو ورودی های تابع باشد).

۳. یک عدد از کاربر بگیرید (n) و یک آرایه ی nتایی تعریف کنید. سپس مقدار تمامی خانه ها را از ورودی بخوانید و آرایه را مرتب کنید.

موفق باشید!