مهندس الکترونیک

#double_pointer
Канал
Логотип телеграм канала مهندس الکترونیک
@elec_sourceПродвигать
2,63 тыс.
подписчиков
269
фото
129
видео
274
ссылки
کانال تلگرام مهندس الکترونیک لینک حمایت در سایت رسمی حامی باش : 🌠https://hamibash.com/elec_source🌠 - لینک گروه : @elec_src_grp کانال یوتیوب https://youtube.com/@elec_source?si=oupCXK8o1DYDeAi9
#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
#C
نکات برنامه نویسی در C برای میکرو کنترلر ها :
نکته ی شماره 8 :

#double_pointer
در زبان برنامه‌نویسی C، pointer to pointer برای زمانی استفاده می‌شود که می‌خواهیم آدرس یک pointer دیگر را ذخیره کنیم. pointer اول برای ذخیره آدرس متغیر استفاده می‌شود و pointer دوم برای ذخیره آدرس pointer اول استفاده می‌شود. به همین دلیل آن‌ها را double-pointer می‌نامند. می‌توان از یک pointer to pointer برای تغییر مقادیر پوینترهای معمولی یا ایجاد آرایه 2 بعدی به اندازه متغیر استفاده کرد. یک double-pointer در حافظه نیز همان فضایی که یک pointer معمولی به خود اختصاص می‌دهد را اشغال می‌کند.
• تعریف pointer to pointer در زبان برنامه‌نویسی C
تعریف pointer to pointer در زبان برنامه‌نویسی C شبیه تعریف یک pointer است، با این تفاوت که باید یک '*' اضافی قبل از نام پوینتر قرار داده شود.
data_type_of_pointer **name_of_variable = & normal_pointer_variable;
int val = 5;
int *ptr = &val; // storing address of val to pointer ptr.
int **d_ptr = &ptr; // pointer to a pointer declared
// which is pointing to an integer

این کد یک نمونه از تعریف یک پوینتر به پوینتر در زبان برنامه‌نویسی C است. در این مثال، ما یک متغیر از نوع int به نام "val" داریم که یک مقدار عددی به آن اختصاص داده شده است. سپس با استفاده از یک پوینتر معمولی به نام "ptr"، آدرس متغیر "val" را ذخیره می‌کنیم. در ادامه، با استفاده از یک پوینتر به پوینتر به نام "d_ptr"، آدرس پوینتر "ptr" را نیز ذخیره می‌کنیم. در واقع، "d_ptr" به یک پوینتر معمولی اشاره می‌کند که خود به پوینتر "val" اشاره دارد.

در کلیت، تعریف پوینتر به پوینتر به ما این امکان را می‌دهد که به پوینترها به عنوان یک متغیر دسترسی داشته باشیم و آدرس آنها را در یک پوینتر دیگر ذخیره کنیم. این کار برای مواردی مانند ایجاد آرایه‌های چند بعدی با اندازه متغیر قابل تغییر مفید است.
این کد یک نمونه از استفاده از پوینتر به پوینتر (double pointer) در زبان برنامه‌نویسی C است:
// C program to demonstrate pointer to pointer
#include <stdio.h>

int main()
{
int var = 789;

// pointer for var
int* ptr2;

// double pointer for ptr2
int** ptr1;

// storing address of var in ptr2
ptr2 = &var;

// Storing address of ptr2 in ptr1
ptr1 = &ptr2;

// Displaying value of var using
// both single and double pointers
printf("Value of var = %d\n", var);
printf("Value of var using single pointer = %d\n", *ptr2);
printf("Value of var using double pointer = %d\n", **ptr1);

return 0;
{
این برنامه، مثالی از استفاده از Double Pointer در زبان C است. در ابتدا یک متغیر به نام var از نوع integer با مقدار 789 تعریف شده است. سپس یک pointer به نام ptr2 برای متغیر var تعریف شده و آدرس آن در این pointer ذخیره شده است. در ادامه یک double pointer به نام ptr1 تعریف شده و آدرس pointer ptr2 در آن ذخیره شده است.

در خطوط بعدی، مقدار متغیر var با استفاده از هر دو single pointer و double pointer چاپ شده است. ابتدا مقدار متغیر var، سپس با استفاده از pointer ptr2 و در نهایت با استفاده از double pointer ptr1 و ptr2 چاپ شده است.

در نتیجه، این برنامه خروجی زیر را تولید می‌کند:

Value of var = 789
Value of var using single pointer = 789
Value of var using double pointer = 789

ادامه در پست بعدی : 👇👇👇



حمایت از کانال : 🔥🔥🔥🔥🔥🔥حامی باش🔥🔥🔥🔥🔥🔥
#مهندس_الکترونیک
#الکترونیک

🆔 @elec_source