سلام!
در این جلسه می خواهیم طرز کار آرایه ها را در ++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تایی تعریف کنید. سپس مقدار تمامی خانه ها را از ورودی بخوانید و آرایه را مرتب کنید.
موفق باشید!