اشاره گر ها در زبان C
اشاره گرها یکی از مباحث آسان و سرگرم کننده زبان برنامه نویسی C برای یادگیری هستند. با استفاده از اشاره گرها انجام برخی از کارها بسیار راحتر می شود. همچنین انجام برخی از کارها نظیر تخصیص حافظه پویا بدون استفاده از اشاره گرها امکان پذیر نیست. بنابراین یادگیری این مبحث برای تبدیل شدن به یک برنامه نویسی حرفه ای لازم است.
همانطور که می دانید، هر متغیر یک مکان در حافظه است و هر مکان در حافظه دارای آدرسی است که با استفاده از عملگر & می توان به آن آدرس دسترسی داشت. مثال زیر را در نظر بگیرید که آدرس متغیرها را چاپ می کند:
1 2 3 4 5 6 7 8 | #include <stdio.h> int main () { int var1; char var2[10]; printf("Address of var1 variable: %xn", &var1 ); printf("Address of var2 variable: %xn", &var2 ); return 0; } |
زمانی که کد بالا توسط کامپایلر C و اجرا شود، نتیجه زیر را تولید خواهد کرد:
1 2 | Address of var1 variable: bff5a400 Address of var2 variable: bff5a3f6 |
اشاره گر چیست؟
اشاره گر متغیری است که آدرس متغیر دیگر را در خود ذخیره می کند. منظور از آدرس، محلی از حافظه است که متغیر در آن قرار دارد. مانند سایر متغیرها یا ثابت ها اشاره گرها هم باید قبل از استفاده تعریف شوند. شکل کلی تعریف یک اشاره گر به صورت زیر است:
1 | type *var-name; |
در اینجا، type نوع اشاره گر است و باید یکی انواع داده معتبر در زبان C باشد. نام گذاری اشاره گرها از قوانین نام گذاری متغیر پیروی می کند. علامت * همان علامتی است که برای ضرب استفاده می شود اما در اینجا برای تعریف یک اشاره گر استفاده شده است.
چند نمونه از اعلان های معتبر اشاره گر در زبان C:
1 2 3 4 | int *ip; /* pointer to an integer */ double *dp; /* pointer to a double */ float *fp; /* pointer to a float */ char *ch /* pointer to a character */ |
نحوه استفاده از اشاره گرها
چند عملیات مهم وجود دارد که اغلب با استفاده از اشاره گرها انجام می دهیم. (الف) یک متغیر اشاره گر را تعریف کنیم، (ب) آدرس متغیر را به یک اشاره گر اختصاص دهیم و (پ) در نهایت به مقداری که در آدرس موجود در اشاره گر قرار دارد، دسترسی پیدا کنیم. این کار با استفاده از عملگر * انجام می شود که مقداری که در آدرس حافظه قرار دارد را برمیگرداند.
مثال زیر نحوه استفاده از اشاره گرها را نشان می دهد:
1 2 3 4 5 6 7 8 9 10 11 12 | #include <stdio.h> int main () { int var = 20; /* actual variable declaration */ int *ip; /* pointer variable declaration */ ip = &var; /* store address of var in pointer variable*/ printf("Address of var variable: %xn", &var ); /* address stored in pointer variable */ printf("Address stored in ip variable: %xn", ip ); /* access the value using the pointer */ printf("Value of *ip variable: %dn", *ip ); return 0; } |
زمانی که کد بالا کامپایل و اجرا شود، نتیجه زیر را تولید خواهد کرد:
1 2 3 | Address of var variable: bffd8b3c Address stored in ip variable: bffd8b3c Value of *ip variable: 20 |
اشاره گر NULL
همواره یکی از کار های خوب در هنگام استفاده از اشاره گرها، تخصیص مقدار NULL به آن ها می باشد. البته این کار زمانی که درست است که شما هیچ آدرس دقیق و معینی برای تخصیص به اشاره گر خود ندارید. اشاره گری که با NULL مقدار دهی شود، اشاره گر NULL نامیده می شود.
اشاره گر NULL یک ثابت است که در چندین کتابخانه استاندارد زبان C با مقدار صفر مشخص شده است.
برنامه زیر را در نظر بگیرید:
1 2 3 4 5 6 | #include <stdio.h> int main () { int *ptr = NULL; printf("The value of ptr is : %xn", ptr ); return 0; } |
زمانی که کد بالا کامپایل و اجرا شود، نتیجه زیر را تولید خواهد کرد:
1 | The value of ptr is 0 |
در اغلب سیستم عامل ها، برنامه ها نمی توانند به آدرس حافظه 0 دسترسی داشته باشند، زیرا این آدرس توسط سیستم عامل رزرو شده است. با این وجود، آدرس حافظه 0 اهمیت خاصی دارد؛ این آدرس نشان می دهد که اشاره گر به محلی از حافظه که قابل دسترسی باشد اشاره نمی کند. به طور کلی اگر یک اشاره گر به آدرس حافظه 0 اشاره کند، می گویند این اشاره گر به هیچ چیزی اشاره نمی کند.
برای چک کردن این که آیا یک اشاره گر به محلی از حافظه اشاره می کند (NULL نیست) یا نه، می توانید به صورت زیر عمل کنید:
1 2 | if(ptr) /* succeeds if p is not null */ if(!ptr) /* succeeds if p is null */ |
دستور اول NULL نبودن اشاره گر و دستور دوم NULL بودن آن را بررسی می کند.
جزئیات بیشتر در مورد اشاره گرها
مبحث اشاره گرها بسیار بزرگ است اما هر برنامه نویس باید به خوبی با آن آشنا باشد تا بتواند نیاز های خود را برطرف کند. در جدول زیر چند شکل دیگر استفاده از اشاره گرها در زبان C را مشاهده می کنید:
ردیف | مفهوم و توضیحات |
1 | اشاره گر ریاضی چهار عملگر ریاضی در زبان C وجود دارد که می توان در هنگام استفاده از اشاره گرها از آن ها استفاده کرد: ++، -، +، – |
2 | آرایه ای از اشاره گرها شما می توانید آرایه ای تعریف کنید که مجموعه ای اشاره گرها را در خود نگه داری کند. |
3 | اشاره گر به اشاره گر در زبان C می توانید اشاره گری تعریف کنید که به یک اشاره گر دیگر اشاره کند. |
4 | ارسال اشاره گر با تابع در زبان برنامه نویسی C شما می توانید یک اشاره گر را به عنوان آرگومان به یک تابع ارسال کنید. |
5 | بازگشت اشاره گر از تابع زبان C به توابع اجازه می دهد تا یک اشاره گر به متغیر محلی، متغیر استاتیک و حافظه اختصاص داده شده به صورت پویا را به عنوان خروجی تابع، بازگشت داده شود. |
هیچ نظری ثبت نشده است