clover
جمعه 12 تیر 1388, 18:06 عصر
برای کار با ماتریس دو بعدی معمولا از آرایه دو بعدی استفاده میشه که محدودیت هایی داره از جمله اینکه باید طول آرایه را در ابتدا مشخص کرد .
من برای ساخت یک ماتریس دوبعدی (با تعیین طول و عرض در طول برنامه ) از عملگر new استفاده کردم و آرایه ای متشکل از آرایه ها به شکل زیر تعریف کردم .
int row, col;
cin>>row>>col;
int **array = new int * [row];
for (int i=0; i<col; i++)
{
array[i] = new int [col];
}
حالا به راحتی می تونم به شکل زیر با عناصر آرایه array کار کنم .
for (int i=0; i<row; i++)
{
for (int j=0; j<col; j++)
{
cin>>array[i][j];
}
}
for (int i=0; i<row; i++)
{
for (int j=0; j<col; j++)
{
cout<<array[i][j];
}
}
سوال اولم اینه که آرایه array یه آرایه تک بعدی اما من با دو اندیس ازش استفاده میکنم و کامپایلر نه تنها از اون ایراد نمیگیره بلکه به صورت اتوماتیک به خانه های آرایه های داخل این آرایه اشاره می کنه ، می خوام بدونم مکانیزم این کار به چه صورتی هست ، یعنی کامپایلر این دو اندیس رو چطور استفاده می کنه .
سوال دوم اینه که چطور می تونم حافظه ای را که تخصیص دادم به طور صحیح آزاد کنم .
آیا اصلا این کار مجاز است ؟ یا من بدون اینکه بدانم دارم محتویات حافظه را رونویسی می کنم ؟
من برای ساخت یک ماتریس دوبعدی (با تعیین طول و عرض در طول برنامه ) از عملگر new استفاده کردم و آرایه ای متشکل از آرایه ها به شکل زیر تعریف کردم .
int row, col;
cin>>row>>col;
int **array = new int * [row];
for (int i=0; i<col; i++)
{
array[i] = new int [col];
}
حالا به راحتی می تونم به شکل زیر با عناصر آرایه array کار کنم .
for (int i=0; i<row; i++)
{
for (int j=0; j<col; j++)
{
cin>>array[i][j];
}
}
for (int i=0; i<row; i++)
{
for (int j=0; j<col; j++)
{
cout<<array[i][j];
}
}
سوال اولم اینه که آرایه array یه آرایه تک بعدی اما من با دو اندیس ازش استفاده میکنم و کامپایلر نه تنها از اون ایراد نمیگیره بلکه به صورت اتوماتیک به خانه های آرایه های داخل این آرایه اشاره می کنه ، می خوام بدونم مکانیزم این کار به چه صورتی هست ، یعنی کامپایلر این دو اندیس رو چطور استفاده می کنه .
سوال دوم اینه که چطور می تونم حافظه ای را که تخصیص دادم به طور صحیح آزاد کنم .
آیا اصلا این کار مجاز است ؟ یا من بدون اینکه بدانم دارم محتویات حافظه را رونویسی می کنم ؟