آرایه Static و Dynamic در ++C

بازدید148.8kپست ها1آخرین فعالیت2 سال پیش
1
0

زبان ++C همانند اکثر زبان های برنامه نویسی دیگر، ساختاری به نام آرایه دارد که امکان تعریف مجموعه ای از متغیرهای هم نوع (اصطلاحا مجموعه عناصر همگن) را فراهم می کند. چنین ساختاری به صورت زیر نعریف می شود:

type name[ number of elements ];

که در آن type یکی از انواع داده های استاندارد ++C، ساختمان و یا کلاس است. number of elements هم تعداد اعضا یا عناصر آرایه را مشخص می کند که باید عدد ثابتی باشد. مثلا عبارت زیر یک آرایه 10 عضوی از اعداد اعشاری به نام arr نعریف می کند:

float arr[ 10 ];

توجه داشته باشید که شماره اندیس اعضای آرایه در ++C همیشه از صفر شروع می شود:

arr[ 0 ], arr[ 1 ], ..., arr[ 9 ]

این نوع تعریف، آرایه هایی را ایجاد می کند که به آرایه های ایستا معروف هستند. این اسم گذاری از آنجا ناشی می شود که طول چنین آرایه هایی در حین تعریف مشخص می شود، و مقدار ثابتی است. لازم به ذکر است که برای تعیین طول تابع (یا همان تعداد اعضای آن) حتما باید از یک عدد و یا داده ثابت (const) استفاده کنید. به عبارت دیگر، در این زبان نمی توان از یک متغیر برای تعیین طول آرایه استفاده کرد. پس عباراتی مانند دستورالعمل های زیر در زبان ++C کامپایل نشده و خطا تولید می کند:

int n;

cin >> n;

double arr[ n ];

چرا که n یک متغیر است و نمی تواند برای تعیین طول آرایه به کار رود. البته این مساله در برخی کامپایلرهای جدید وجود ندارد، که قبل از برنامه نویسی باید بررسی شود.

حال ببینیم این ویژگی چه مشکلاتی را ممکن است به وجود بیاورد.

فرض کنید از ما خواسته شده است برنامه ای بنویسیم که تعدادی نمره (عدد اعشاری) دریافت کرده و با استفاده از هر روش دلخواهی آنها را مرتب کند. تعداد نمره ها از قبل مشخص نیست. اگر بخواهیم از یک آرایه ایستا استفاده کنیم، باید طول ثابتی را در نظر بگیریم. پس باید یک حداکثر برای تعداد نمره ها معلوم کنیم. مثلا فرض کنیم حداکثر می توان هزار نمره وارد کرد. پس تعریف می کنیم:

float marks[ 1000 ];

اما تعریف فوق دو ایراد دارد. اول این که اگر تعداد نمره ها بیشتر از هزار باشد، برنامه کار نمی کند؛ و دوم، اگر مثلا فقط سه نمره وارد شود، 997 عضو از عناصر آرایه بلااستفاده خواهند ماند، که حافظه اشغال کرده اند. رفع این دو ایراد راه ساده ای دارد: استفاده از آرایه پویا.

آرایه پویا همانند آرایه ایستا، برای تعریف عناصر هم نوع به کار می رود. با این تفاوت که می توان در زمان تعریف، از متغیرها برای تعیین طول استفاده کرد. حالت کلی تعریف آرایه پویا با عبارت زیر مشخص می شود:

type *name;

name = new type[ number of elements ];

 

به عنوان نمونه، عبارت بالا را باید نوشت:

 

int n;

double *arr;

cin >> n;

arr = new double[ n ];

که باعث می شود یک آرایه پویا به نام arr و به طول n ایجاد شود.

آرایه های پویا پس از تعریف، هیچ تفاوتی با آرایه ایستای معمولی ندارند و دسترسی به عناصر آنها با اندیس صورت می گیرد. اما حتما باید به خاطر داشت باشید که حافظه استفاده شده برای آرایه پویا را بعد از استفاده، با دستور delete آزاد کنید:

delete[ ] name;

برای آرایه arr که در قبلا تعریف کرده ایم:

delete[ ] arr;

همانطور که مشاهده می کنید، آرایه های پویا ارتباط نزدبکی با اشاره گرها و بحث تخصیص حافظه دارند. با این وجود، ایراداتی دارند که گاهی برنامه نویس را مجبور می کند از ساختارهای دیگر - مانند لیست پیوندی - استفاده کند.

aachp.ir

0

سلام آیا این اعمال که در این مطالب ذکر شد در سی شارپ هم قابل انجام است ؟منظورم در رابطه با ارایه های دینامیک است، البته من نیاز به این دارم که عمر اشیاء اختصاص داده شده به این ارایه ها را طوری مشخص کنم که زود حافظه را آزاد کند و ان را به اعمال مهمتری اختصاص بدهد منظورم مثلا نوشتن یک حرف در چند ثانیه و پس از گرفتن پاسخ مثلا در دو ثانیه حرف بعدی نوشته شود ایا این گونه استفاده ها از این نوع کد نویسی امکان پذیر است ؟ البته اگر ممکنه با ذکر مثال توضیح بدین و چطور میشه جلوی خطای احتمالی ان را هنگام اجرا گرفت؟ ایا با طبق قواعد نوشتن کد ها خطایی رخ نمی دهد؟یا راه دیگری باید در پیش گرفت؟

آخرین ویرایش: 17-04-2022 ???? 19:57، توسط mahdi6413

سوال برنامه نویسی دارید؟

ندونستن عیب نیست، نپرسیدن چرا!

خوش آمدید

برای طرح سوال، ایجاد بحث و فعالیت در سایت نیاز است ابتدا وارد حساب کاربری خود شوید. در صورتی که هنوز عضو سایت نیستید میتوانید در عرض تنها چند ثانیه ثبت نام کنید.