خبر و ترفند روز

خبر و ترفند های روز را اینجا بخوانید!

راهنمای ضروری برای اشاره گرها در برنامه نویسی C

اشاره گرها برای بسیاری از برنامه های C حیاتی هستند، اما درک آنها ممکن است دشوار باشد. نحو و نحوه کار آنها را با مثال های عملی مرور کنید.

اشاره گرها یک جنبه ضروری از برنامه نویسی C هستند که برای استفاده موثر از زبان به درک خوبی از آن نیاز دارید. آنها به مدیریت کارآمد حافظه، انتقال داده ها توسط مرجع، مدیریت آرایه ها و رشته ها و موارد دیگر کمک می کنند. با این حال، آنها نیاز به استفاده دقیق برای جلوگیری از خطا دارند.

جزئیات نشانگرهای C، از درک حافظه و آدرس ها تا تسلط بر محاسبات اشاره گر را کاوش کنید.

حافظه و آدرس ها

نمای نزدیک از قسمت داخلی کامپیوتر

حافظه – که اغلب به عنوان مخفف RAM (حافظه دسترسی تصادفی) استفاده می شود – فضای ذخیره سازی در رایانه است که داده ها و دستورالعمل های مورد نیاز یک برنامه را برای اجرا در خود نگه می دارد. به عنوان فضای کاری برای برنامه شما عمل می کند. کوچکترین واحد حافظه معمولاً یک بایت است که برابر با هشت بیت است.

هر مکان حافظه دارای یک آدرس منحصر به فرد است و بسته به رایانه می تواند مقدار متفاوتی از داده ها را ذخیره کند. هنگامی که یک متغیر را در C اعلام می کنید، به طور ضمنی به آن یک مکان حافظه اختصاص می دهید تا داده های آن را ذخیره کند. آن را مانند یک خانه در نظر بگیرید که دارای یک آدرس منحصر به فرد است که می توانید برای مکان یابی آن استفاده کنید.

حافظه رایانه خود را به عنوان دنباله ای از سلول های ذخیره سازی تصور کنید که هر کدام حاوی یک بایت داده است. فرض کنید دو متغیر x و y در یک برنامه C وجود دارد:

int x = 5;
int y = 10;

در حافظه، ممکن است شبیه به این باشد:

نشانی

داده ها

1000

1004

10

در اینجا، مکان های حافظه جداگانه این متغیرها را ذخیره می کنند. داده ای که x نشان می دهد در آدرس حافظه 1000 قرار دارد، در حالی که داده های y آدرس حافظه 1004 را اشغال می کنند.

وقتی با اشاره گرها کار می کنید، درک حافظه و آدرس ها بسیار مهم است زیرا آنها متغیرهایی هستند که آدرس های حافظه را ذخیره می کنند. آنها به شما امکان می دهند به داده های ذخیره شده در یک مکان حافظه خاص دسترسی داشته باشید و آنها را دستکاری کنید.

مطلب مرتبط:   5 نوع مدل استقرار ابری و نحوه استفاده از آنها

اعلام و راه‌اندازی اشاره‌گرها در C

قبل از اینکه بتوانید داده ها را با استفاده از نشانگرها در C تغییر دهید، باید آن را اعلام و مقداردهی اولیه کنید.

اعلام

برای اعلام یک اشاره گر، نوع داده ای را که به آن اشاره می کند و به دنبال آن یک ستاره (*) و سپس نام اشاره گر را مشخص می کنید. مثلا:

int *ptr;

در اینجا، int *ptr یک اشاره گر به نام ptr را اعلام می کند که می تواند آدرس حافظه یک عدد صحیح را ذخیره کند.

مقداردهی اولیه

پس از اعلان، باید آن را با آدرس حافظه ای که به آن اشاره می کند مقداردهی اولیه کنید. می توانید آن را به این صورت مقداردهی اولیه کنید:

int x = 5;
int *ptr = &x;

در این اعلان، عملگر & آدرس متغیر x را واکشی می کند. کد اساسا می گوید “ptr یک متغیر است، مکان حافظه یک مقدار صحیح را ذخیره می کند، و آن مکان هر جایی است که x در حال حاضر به آن اشاره دارد.”

اکنون، ptr آدرس متغیر عدد صحیح x را نگه می دارد. برای مثال:

متغیر

نشانی

ارزش

1000

ptr

—-

1000

اشاره گرها در C نه تنها آدرس یک متغیر را ذخیره می کنند، بلکه آدرس منحصر به فرد خود را در حافظه کامپیوتر نیز دارند.

اشاره گرهای عدم ارجاع

عدم ارجاع یک اشاره گر C به معنای دسترسی به مقدار ذخیره شده در آدرس حافظه ای است که توسط اشاره گر به آن اشاره شده است.

فرض کنید یک اشاره گر دارید، int *ptr، که به یک متغیر عدد صحیح اشاره می کند، و آن متغیر دارای مقدار 10 است. برای دسترسی به مقدار از طریق اشاره گر، از عملگر ستاره (*) استفاده می کنید:

int x = 10;

int *ptr = &x; // ptr points to the address of x

int value = *ptr; // Dereferencing ptr to get the value

این مثال از متغیر ptr برای بازیابی مقدار در آدرس حافظه ای که به آن اشاره می کند استفاده می کند. بنابراین، مقدار اکنون مقدار 10 را دارد که محتوای x است.

مطلب مرتبط:   شبیه سازی مشکل مونتی هال با استفاده از پایتون

حساب اشاره گر

حساب اشاره گر یک ویژگی قدرتمند در C است، به ویژه برای کار با آرایه ها و رشته ها (که آرایه های کاراکترها هستند) مفید است. این به شما امکان می دهد عملیات حسابی را روی نشانگرها انجام دهید تا در حافظه حرکت کنید.

در اینجا یک مثال نشان می دهد که چگونه می توانید از آن استفاده کنید.

با اعلام آرایه ای از اعداد صحیح شروع کنید:

int numbers[] = {10, 20, 30};

یک اشاره گر به یک int اعلام کنید و مکان حافظه آرایه اعداد را به آن اختصاص دهید:

int *ptr = numbers;

در اینجا نیازی به استفاده از عملگر “&” نیست زیرا اعداد به طور ضمنی یک نوع اشاره گر هستند.

متغیر ptr اکنون به اولین عنصر آرایه اشاره می کند:

printf("%d\n", *ptr); // 10

می توانید با افزایش 2 نشانگر به عنصر سوم آرایه حرکت کنید:

ptr += 2;
printf("%d\n", *ptr); // 30

می توانید با کم کردن نشانگر از آن به عقب حرکت دهید:

ptr--;
printf("%d\n", *ptr); ;// 20

محاسبات اشاره گر به ویژه برای پیمایش آرایه ها و کار با تخصیص حافظه پویا مفید است.

اشاره گرها و توابع در C

اگر درک می کنید که توابع در برنامه نویسی C چگونه کار می کنند، پس در راه استفاده از نشانگرهای تابع هستید. در اینجا چند راه وجود دارد که می توانید از آنها استفاده کنید.

نشانگرهای تابع

شما می توانید نشانگرهای تابع را برای استفاده پویا از توابع، مانند هر مقدار دیگر، اعلام و استفاده کنید. این به ویژه برای فراخوانی و اجرای عملکرد پویا مفید است.

int (*operation)(int, int); // Declare a function pointer
operation = add; // Pointer to an add function
int result = operation(5, 3); // Call the function through the pointer

این کد یک اشاره گر تابعی را به نام عملیات اعلام می کند که می تواند به تابعی اشاره کند که دو عدد صحیح می گیرد و یک عدد را برمی گرداند. تابع افزودن (اشاره گر به) را به عملیات اختصاص می دهد. سپس از متغیر عملیات برای فراخوانی غیرمستقیم add(5,3) استفاده می کند.

عبور از مرجع

اشاره گرها به شما امکان می دهند آرگومان ها را با ارجاع به توابع ارسال کنید و به شما امکان می دهند داده های اصلی را در تابع تغییر دهید. این برای توابعی که نیاز به تغییر مقدار یک متغیر خارج از محدوده خود دارند بسیار مهم است.

void modifyValue(int *x) {
  *x = 42; // Modifies the value of x in the calling code
}

تابع modifyValue مقدار هر آرگومانی را که کد فراخوانی به آن می‌دهد تغییر می‌دهد و آن را روی 42 تنظیم می‌کند.

مطلب مرتبط:   نحوه استفاده مجدد از کامپوننت های Vue با اسلات ها

تخصیص حافظه پویا

توابع می توانند نشانگرها را به حافظه تخصیص یافته به صورت پویا برگردانند. زمانی که نیاز به ایجاد و برگرداندن ساختارهای داده نامحدود مانند آرایه‌ها یا لیست‌های پیوندی دارید، رایج است. برای استفاده از آن باید حافظه پشته و پشته را به خوبی درک کنید.

int *createArray(int size) {
  int *arr = (int *)malloc(size * sizeof(int));
  return arr;
}

این کد یک تابع، createArray را تعریف می کند که یک عدد صحیح، اندازه را به عنوان ورودی می گیرد. در داخل تابع، به صورت پویا حافظه را برای یک آرایه عدد صحیح با اندازه مشخص شده با استفاده از malloc تخصیص می دهد. پس از مقداردهی اولیه آرایه، یک اشاره گر به این آرایه تازه ایجاد شده برمی گرداند.

کاربردهای رایج

اشاره گرها به دلایل متعددی در C ضروری هستند و آنها چیزی هستند که C را از سایر زبان های برنامه نویسی مانند پایتون متمایز می کنند. در اینجا برخی از کاربردهای رایج آورده شده است:

  • تخصیص حافظه پویا
  • دستکاری آرایه
  • عبور از مرجع
  • ساختارهای داده
  • مدیریت منابع

درک این کاربردهای رایج اشاره گرها می تواند مهارت های برنامه نویسی C شما را افزایش دهد. برخی از این موارد را برای بهبود درک خود از اشاره گرها تمرین کنید.

استفاده از اشاره گر در برنامه نویسی C را تمرین کنید

تسلط بر اشاره گرها در برنامه نویسی C یک مهارت ارزشمند است که به شما امکان می دهد حافظه را به طور موثر مدیریت کنید، داده ها را دستکاری کنید و عملیات پیشرفته را انجام دهید. تمرین و مهارت در استفاده از اشاره گرها توانایی شما را در ایجاد برنامه های C قوی و کارآمد از نظر منابع بسیار بهبود می بخشد.