PDA

View Full Version : مبتدی: نحوه بدست اوردن محتوای خانه ارایه نه ادرس ان؟



boysilent
چهارشنبه 26 بهمن 1390, 18:45 عصر
با سلام برای بدست اوردن محتوای ارایه باید چکاکرد این برنامه ای که من نوشتم ادرسشو میده:دیی

#include <conio>
#include <iostream.h>
#include <stdio.h>
void main()
{
int a[]={0},b[]={0},i,j,l;
cout<<"toool\n";
cin>>l;
for(i=1;i<l;i++)
{
cout<<"meghdar"<<i<<"= ";
cin>>a[i];

} for(j=1;j<l;j++)
{
cout<<a[5];
}
getch();


}

shahmohammadi
چهارشنبه 26 بهمن 1390, 19:26 عصر
سلام.
مشکل برنامه در اینجاست که آرایه فقط یک عضوش تعریف شده ولی در ادامه انتظار دارید که به مکان های بیشتری دسترسی داشته باشه. بعد از گرفتن l باید آرایه رو به اندازه ی دلخواه allocate کنید.
برای بهینه بودن بهتر بود آرایه رو هم از 0 تا l پیمایش کنید نه از یک تا l.

boysilent
چهارشنبه 26 بهمن 1390, 20:20 عصر
چیزی متوجه نشدم؟؟؟؟

shahmohammadi
چهارشنبه 26 بهمن 1390, 21:39 عصر
یک مثال می زنم، وقتی آرایه رو به صورت int a[10] تعریف کنیم، نمی تونیم در برنامه بنویسیم a[15]=12. چون تنها 10 خونه رو از حافظه گرفتیم و نمی تونیم به خونه های دیگه دسترسی داشته باشیم.
در برنامه شما دستور int a[]={0} آرایه ای رو تعریف می کنه که فقط یک عضو داره که برابر با 0 هست. در صورتی که بعدا دستوراتی مانند cout<<a[5] رو به کار بردید که مجاز به اون کار نیستید. اشکال کار درست همین جاست. وقتی برنامه به یه چنین جایی می رسه "استثنا" رخ می ده و مثل بالا از برنامه خارج می شه.

boysilent
چهارشنبه 26 بهمن 1390, 22:33 عصر
اقا من وقتی بخوام از کاربر بگیرم که نمیدونم چند تا خونه باس باشه؟؟؟؟
http://p30codenevis.ir/cpp-programming/84-arrays-in-c-plus-plus.html
برنامه من فقط ادرس خونه ها رومیده؟؟؟

m.khani_121
چهارشنبه 26 بهمن 1390, 23:38 عصر
اقا من وقتی بخوام از کاربر بگیرم که نمیدونم چند تا خونه باس باشه؟؟؟؟
http://p30codenevis.ir/cpp-programming/84-arrays-in-c-plus-plus.html
برنامه من فقط ادرس خونه ها رومیده؟؟؟

خب یا باید از خود کاربر اول بپرسی که طول آرایه چقدر باشه یا پیش فرض خودت یه مقدار مناسب بهش بدی . اون آدرسی هم که شما میگی آدرس نیس چون تو برنامه چیزی به نام [5]a تعریف نشده برنامه میره تو یه خونه حافظه یه مقدار بهت میده !!

shahmohammadi
پنج شنبه 27 بهمن 1390, 00:51 صبح
اقا من وقتی بخوام از کاربر بگیرم که نمیدونم چند تا خونه باس باشه؟؟؟؟
http://p30codenevis.ir/cpp-programming/84-arrays-in-c-plus-plus.html
برنامه من فقط ادرس خونه ها رومیده؟؟؟
بله، در این موارد می شه از آرایه های پویا هم استفاده کرد. یعنی از عملگر new برای اضافه کردن به حافظه و از عملگر delete برای حذف این حافظه استفاده می شه.
این هم نمونه اش:
#include <conio.h>
#include <iostream>
#include <stdio.h>
using namespace std;
int main()
{
int *a,*b,i,j,l;
cout<<"toool\n";
cin>>l;
a=new int[l];
for(i=0;i<l;i++)
{
cout<<"meghdar"<<i<<"= ";
cin>>a[i];
}
for(j=0;j<l;j++)
{
cout<<a[j];
}
delete[] a;
getch();
return 0;
}
موفق باشید.

boysilent
پنج شنبه 27 بهمن 1390, 07:36 صبح
ممنون از دوستان//
ولی هرچقدر احلیل میکنم این قسمتش یکم نامفهومه؟
a=new int[l];

shahmohammadi
پنج شنبه 27 بهمن 1390, 15:39 عصر
این گرامر استفاده از new هست.
ابتدا یک اشاره گر تعریف می کنیم.از نوع type. (هر نوعی مثل int, float, وحتی نوعی از یک کلاس که خودمون تعریف کردیم.)
type *a;
بعدش از ورودی اندازه آرایه رو می گیریم ودر متغیر L قرار می دهیم.
حالا برای اینکه آرایه مون به اندازه L عضو داشته باشه به صورت زیر از new استفاده می کنیم:
a=new type[L];
به همین سادگی. حالا اگه نوعمون float بود به جای type در بالا float رو می نوشتیم.
در آخر برنامه هم که دیگه می خواهیم برنامه خاتمه پیدا کنه، دستور زیر رو می نویسیم:
delete[] a;