#double_pointerادامه :
• کاربرد
double pointer در تعریف ارایه های 2 بعدی :
ما میتوانیم با استفاده از
double pointer به آرایههای دو بعدی دسترسی داشته باشیم. در این حالت، ما یک single
pointer برای هر سطر از آرایه و یک
double pointer برای نشان دادن سطرهای آرایه داریم. برای مثال، فرض کنید میخواهیم آرایهای دو بعدی با اندازه 3*3 از نوع int تعریف کنیم. میتوانیم به شکل زیر این کار را انجام دهیم:
int main()
{
int rows = 3, cols = 3, i, j;
// Allocating memory for 2D array using double pointer
int** arr = (int**)malloc(rows * sizeof(int*));
for(i = 0; i < rows; i++)
{
arr[i] = (int*)malloc(cols * sizeof(int));
}
// Initializing elements of 2D array
for(i = 0; i < rows; i++)
{
for(j = 0; j < cols; j++)
{
arr[i][j] = i + j;
}
}
// Displaying elements of 2D array
for(i = 0; i < rows; i++)
{
for(j = 0; j < cols; j++)
{
printf("%d ", arr[i][j]);
}
printf("\n");
}
// Freeing memory
for(i = 0; i < rows; i++)
{
free(arr[i]);
}
free(arr);
return 0;
}
این برنامه یک آرایه دو بعدی با اندازه 3 در 3 تعریف میکند و سپس به صورت دستی مقادیر آن را پر میکند. بعد از آن، تمام مقادیر آرایه چاپ میشوند. در انتها، حافظه مربوط به آرایه را آزاد میکند.
برای تعریف یک آرایه دو بعدی، این برنامه ابتدا یک
double pointer تعریف میکند که به آدرس یک آرایه از اشارهگرها اشاره میکند. سپس با استفاده از دو حلقه، حافظه برای هر سطر و ستون ایجاد و به اشارهگر مربوطه تخصیص داده میشود.
در ادامه، آرایه با دستورات حلقه پر شده و مقادیر آن چاپ میشوند. در انتها، برای جلوگیری از نشتی حافظه، تمام حافظهای که برای آرایه اختصاص داده شده را آزاد میکند.
خروجی این تابع، ماتریس ۳ در ۳ زیر را در خروجی چاپ میکند و سپس حافظهی اختصاص داده شده به ماتریس را آزاد میکند:
0 1 2
1 2 3
2 3 4
• تفاوت بین استفاده از
double pointer و تعریف معمولی برای آرایه های 2 بعدی در C، به دو دلیل اصلی برمیگردد: دسترسی به عناصر و اختصاص حافظه.
در تعریف معمولی آرایه دو بعدی، میتوان عناصر آن را به صورت مستقیم با نشانی آنها در حافظه دسترسی داد. برای مثال، اگر یک آرایه دو بعدی به نام
arr
با ابعاد 3 در 3 داشته باشیم، میتوان به عناصر آن با استفاده از فرمول
arr[i][j]
دسترسی داشت. اما در استفاده از
double pointer، نیاز است که در ابتدا فضای حافظه برای سطرها تخصیص داده شود، و سپس برای هر سطر، فضای حافظه برای ستونها تخصیص داده شود. در این روش، ابتدا یک اشارهگر از نوع
int **
برای سطرها تعریف میشود، سپس برای هر سطر، یک اشارهگر جدید از نوع
int *
تعریف میشود که به فضای حافظه برای ستونهای آن سطر اشاره میکند.
به عبارت دیگر، در تعریف معمولی، فضای حافظه برای تمام آرایه در یک بلاک در نظر گرفته میشود و ابعاد آن در زمان کامپایل مشخص میشود. اما در
double pointer، اولاً باید حافظه برای اشارهگرهای سطرها تخصیص داده شود، سپس برای هر سطر، باید فضای حافظه برای ستونهای آن تخصیص داده شود. به عنوان نتیجه،
double pointer میتواند انعطافپذیری بیشتری در استفاده از حافظه داشته باشد، اما در عوض، ایجاد آن بیشتر از زمان و تلاش میطلبد.
استفاده از
double pointer برای تعریف آرایه های دو بعدی در C، مزیت های زیر را دارد:
1. اختصاص دادن حافظه دقیق: با استفاده از
double pointer، میتوانید دقیقاً مشخص کنید که چه مقدار حافظه برای آرایه شما اختصاص داده میشود. این باعث میشود که از حافظه بیشتر و نامطمئن استفاده نکنید و به راحتی از حافظه کمتری برای برنامه خود استفاده کنید.
2. قابلیت تغییر اندازه: استفاده از
double pointer میتواند به شما امکان تغییر اندازه آرایه را بدهد. به عنوان مثال، میتوانید بعد از تخصیص حافظه برای یک آرایه ۲ بعدی با استفاده از
double pointer، اندازه آن را تغییر دهید و از آن به عنوان یک آرایه با ابعاد جدید استفاده کنید.
3. افزایش سرعت: استفاده از
double pointer میتواند به طراحی و اجرای سریعتر برنامه شما کمک کند، زیرا برنامه شما برای دسترسی به دادهها، فقط باید به یک اشارهگر (
pointer) دسترسی داشته باشد که به اشارهگر دیگری اشاره میکند.
حمایت از کانال : 🔥🔥🔥🔥🔥🔥حامی باش🔥🔥🔥🔥🔥🔥
#مهندس_الکترونیک
#الکترونیک 🆔 @elec_source