PDA

View Full Version : تعریف اندازه آرایه



اوبالیت به بو
دوشنبه 29 تیر 1388, 13:52 عصر
سلام
یه سوالی دارم و اون هم اینه که چرا تو C++ نمیشه اندازه آرایه رو از یک متغیر گرفت؟ به این کد توجه کنید:


int x = 3;
int arr[x];

و تنها راه حل این موضوع اینه که یا باید به صورت عددی اندازه آزایه رو مقدردهی کنی یا از ثابت استفاده کنی:


int arr [3];
or
const int x = 3;
int arr[x];

از یک راه دیگه اومدم استفاده کنم که باز جواب نداد:


int i;
cin >> i;
const int x = i;
int arr[x];

آیا راه حلی وجود داره تا اندازه آرایه رو خود کاربر وارد کنه؟ یعنی بر اساس ورودی کاربر اندازش مشخص بشه؟ در C# این کار رو میشه کرد:


int i = 3;
int[] x = new int[i];

ممنون از راهنمایی دوستان.

tdkhakpur
دوشنبه 29 تیر 1388, 14:02 عصر
سلام
جواب این سوال شما به کامپایل مربوط میشود ببینید شما وقتی که یک متغیر تعریف میکنید هنوز جایش در حافظه مشخص نیست و کامپایلر قادر نیست که برای هر متغییر یک جستجوی کلی برای قرار دادن آدرس در جایی که خودش متغییر هست و هنوز جای این متغییر هم مشخص نشده انجام دهد.
ولی با Const یا define باعث میشوید بطور direct عدد مورد نظر در محل حافظه جدید قرار داده شود نه ادرس محل.

Nima_NF
دوشنبه 29 تیر 1388, 14:04 عصر
طول آرایه ها در زمان کامپایل باید مشخص باشند در حالی که متغیرها در زمان اجرا تخصیص داده می شوند، برای مورد شما باید به صورت دینامیک با new عمل کنید دقیقا مانند C# به این شکل:



int i;
cin >> i;

int *x = new int[i];

x همانند آرایه ای از int عمل می کند.

فقط یادتان باشد که در ++C باید حافظه را پس بگیرید:



delete [] x;

اوبالیت به بو
دوشنبه 29 تیر 1388, 14:15 عصر
int i;
cin >> i;

int *x = new int[i];
با این خطا مواجه می شم:

cannot convert 'int *' to 'int *[]'

tdkhakpur
دوشنبه 29 تیر 1388, 14:27 عصر
سلام
مشکلی در کد شما نیست به هر حال کد زیر را هم امتحان کنید.


int *x = (int *) new int[i];

اوبالیت به بو
دوشنبه 29 تیر 1388, 14:36 عصر
کد جناب Nima_NF (http://barnamenevis.org/forum/member.php?u=46043) هم درست بود اما من یک اشتباه می کردم و یک براکت اضافه می ذاشتم:


int *x[] = new int[i];

درست:


int *x = new int[i];
or
int *x = (int *) new int[i];

تقصیره C# بود. بد عادت کرده...:گیج:

hovooo
دوشنبه 18 آبان 1388, 10:30 صبح
شرمنده که تو تاپیک شما سوالم رو مطرح میکنم اما فکر کنم جای خوبیه چون خیلی گشتم پیدا نشد شاید شما بتونید کمکم کنید

حالا سوال:::


شما آرایه یه بعدی رو داینامیک تعریف کردی من نیاز دارم آرایه دو بعدی رو داینامیک تعریف کنم اما مشکل دارم


int *x = (int *) new int[i][j];

جواب نمیده اینم ارورش


constant expression required

hovooo
دوشنبه 18 آبان 1388, 10:35 صبح
حالا یه تقاضا دیگه هم دارم
می خوام این آرایه دو بعدی رو به عنوان آرگومان از تابع عبور بدم و بعد از تغییرات خوب دو باره برش گردونم چه جوری باید دیکلیر بشه و چه جوری باید احضارش کنم اگه با یه مثال کوچیک راهنماییم کنی ممنون میشم

راستش پروژه من ضرب ما تریس استراسن که خوب الان اون قسمت کوچیک کردن و بعد تشکیل ام ها و بعد تشکیل ماتریس c رو انجام دادم فعلا مشکلم با دریافت داینامیک ابعاد و احضار اون تو تابع و دیکلیر کردن ماتریس دو بعدی داینامیک

afi_program
دوشنبه 18 آبان 1388, 12:47 عصر
وقتی می خوای تعریف کنی بنویسint** برا ارسال به تابع هم به همین صورت.هر چند بعدی که بخوای با همین * میتونی تعریف کنی.
موفق باشی

tdkhakpur
دوشنبه 18 آبان 1388, 14:06 عصر
بصورت زير مقدار دهي كنيد


int i=10, j=20;
int *x = (int *) new int[i*j];