PDA

View Full Version : سوال: تخصیص حافظه



kamran_14
چهارشنبه 27 اردیبهشت 1391, 14:16 عصر
1- آیا آرایه ها هم با تخصیص حافظه یعنی

int[] a=new int[10]
مقدار می گیرند
پس چرا برای کد زیر خطا گرفته می شه


string[] a=new string[10];
listBox1.Items.Add(a);


ولی برای کد زیر خطا گرفته نمی شه؟


string[] a=new string[10];
messageBox.show(a);

Mahmoud.Afrad
چهارشنبه 27 اردیبهشت 1391, 14:45 عصر
در
string[] a = new string[10]; تخصیص حافظه صورت میگیره ولی مقدار نمیگیره.
اگر بنویسید


string[] a = new string[10];
listBox1.Items.Add(a[0]);

خطا میگیره چون مقدار null هست.
ولی اگر بنویسید
listBox1.Items.Add(a); نوع آرایه رو به لیست اضافه میکنه نه مقدارشو.

در
MessageBox.Show(a);هم خطا به خاطر اینه که باید یک رشته رو به متد شو بفرستید نه یک آرایه را. اگر میخواهید محتویاتش رو نشون بدید باید طریق اندیس به هر عنصر از آرایه دسترسی پیدا کنید.

فرید نجفلو
پنج شنبه 28 اردیبهشت 1391, 00:57 صبح
سلام
اگه بخوایدهمراه با تعریف مقادیر رو نیز اختصاص بدید می تونید به این صورت بنویسید

string[] a ={ "1", "2", "3", "4" };
listBox1.Items.AddRange(a);

kamran_14
پنج شنبه 28 اردیبهشت 1391, 13:28 عصر
ممنون از جوابی که برام نوشتید
فقط نوع عددی اند که در هنگام تخصیص حافظه مقدار اولیه می گیرند؟مثلا:

int[] a=new int[10]

فرید نجفلو
پنج شنبه 28 اردیبهشت 1391, 17:43 عصر
ممنون از جوابی که برام نوشتید
فقط نوع عددی اند که در هنگام تخصیص حافظه مقدار اولیه می گیرند؟مثلا:

int[] a=new int[10]

سلام تفاوتی وجود نداره:
int[] a ={ 0,1,2,3,4,5,6,7,8,9,10 };

kamran_14
پنج شنبه 28 اردیبهشت 1391, 21:36 عصر
برای اینکه آرایه ای از رشته ها تعریف کنیم . می نویسیم:

string[] a=new string[500];
اما چون فقط تخصیص حافظه صورت می گیره و مقداری به این 500 ارایه نسبت داده نمیشه ممکنه در بعضی قسمتهای برنامه به علت استفاده از ارایه ی a خطا بده (به خاطر نداشتن مقدار). اما من می خوام قبل از اینکه این اتفاق بیفته به تمام خونه های آرایه ی a مقدار اولیه نسبت بدم تا چنین مشکلی به وجود نیاد. من چطوری می تونم تمام خونه های این آرایه رو هنگام اعلان پر کنم؟آیا این کار شدنیه یا نه؟

فرید نجفلو
پنج شنبه 28 اردیبهشت 1391, 22:42 عصر
سلام
به نظر من با new فکر نکنم به نتیجه برسید چون رشته ها از نوع ارجاعی هستن و کامپایلر سی شارپ تمام انواع ارجاعی رو (بدون استثنا) با null ست می کنه
در مورد string هم چند لحظه پیش اینجا (http://barnamenevis.org/showthread.php?341771-ندادن-مقدار-اولیه-به-یک-متغیر-در-c&p=1507708&viewfull=1#post1507708) توضیحاتی دادم

kamran_14
شنبه 30 اردیبهشت 1391, 16:29 عصر
این کد که تعریف یک آرایه ی رشته ای و دادن مقدار اولیه به آن است:

string a=new string[] {"1","2","3","4"}
با این نحوه ی تعریف چه فرقی داره؟

string a={"1","2"."3","4"}

فرید نجفلو
شنبه 30 اردیبهشت 1391, 18:28 عصر
این کد که تعریف یک آرایه ی رشته ای و دادن مقدار اولیه به آن است:

string a=new string[] {"1","2","3","4"}
با این نحوه ی تعریف چه فرقی داره؟

string a={"1","2"."3","4"}


سلام
تو این مورد هیچ فرقی ندارن (البته اگه اون نقطه بین 2 و 3 رو کاما حساب کنیم :چشمک:)
همون طور که که گفتم انواع اولیه(Primetive) نیازی به new ندارن ولی میشه استفاده کرد
مخصوصا در مورد string استفاده از new مگر در موارد خواص انجام نمیشه و سازنده بدون پارامتر هم نداره
بازم تاکید می کنم بهتره برای انواع اولیه (string,bool,int,...) بهتره از انتساب صریح (=) مثل کد دومتون استفاده کنید