با سلام خدمت تمامی دوستان عزیز سایت پی وی لرن .و کاربرانی که دوره کامل آموزش زبان C را دنبال می کنند. و کاربرانی که با سری آموزش های زبان C همراهمون هستند.از اونجایی که اشاره گرها در C بسیار مهمه این جلسه رو به آشنایی با اشاره گرها در C و نحوه بکارگیری و انواعی از آن مانند اشاره گر NULL می پردازیم.
اشاره گرها در C برای یادگیری آسان و سرگرم کننده هستند.برخی از کارهای برنامه نویسی C به راحتی با اشاره گرها انجام می شود و دیگر کارها مانند تخصیص حافظه پویا بدون استفاده از اشاره گر انجام نمی شود.بنابراین ضروری است که اشاره گرها کامل یاد بگیرید تا تبدیل به یک برنامه نویس کامل C شوید. بیایید آنها را با مراحل ساده و آسان یاد بگیریم.
همانطور که می دانید، هر متغیر یک مکان در حافظه است و هر مکان در حافظه دارای آدرسی است که با استفاده از عملگر & می توان به آن آدرس دسترسی داشت. مثال زیر را در نظر بگیرید که آدرس متغیرها را چاپ می کند:
1 2 3 4 5 6 7 8 9 10 11 12 | #include <stdio.h> int main () { int var1; char var2[10]; printf("Address of var1 variable: %x\n", &var1 ); printf("Address of var2 variable: %x\n", &var2 ); return 0; } |
زمانی که کد بالا کامپایل و اجرا شود، نتیجه زیر را تولید خواهد کرد:
1 2 | Address of var1 variable: bff5a400 Address of var2 variable: bff5a3f6 |
اشاره گر متغیری است که آدرس متغیر دیگر را در خود ذخیره می کند. منظور از آدرس، محلی از حافظه است که متغیر در آن قرار دارد. مانند سایر متغیرها یا ثابت ها اشاره گرها هم باید قبل از استفاده تعریف شوند. شکل کلی تعریف اشاره گر به صورت زیر است:
1 | type *var-name; |
در اینجا، type نوع اشاره گر است و باید یکی از انواع داده معتبر در زبان C باشد. var-name نام متغیر اشاره گر است. علامت * همان علامتی است که برای ضرب استفاده می شود.با این حال، در این دستور ستاره برای تعریف یک متغیر به عنوان یک اشاره گر استفاده می شود.چند نمونه از اعلان های معتبر اشاره گر در زبان 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 13 14 15 16 17 18 19 | #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: %x\n", &var ); /* address stored in pointer variable */ printf("Address stored in ip variable: %x\n", ip ); /* access the value using the pointer */ printf("Value of *ip variable: %d\n", *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 یک ثابت است که در چندین کتابخانه استاندارد زبان C با مقدار صفر مشخص شده است.
برنامه زیر را در در مورد اشاره گر NULL را در نظر بگیرید:
1 2 3 4 5 6 7 8 9 10 | #include <stdio.h> int main () { int *ptr = NULL; printf("The value of ptr is : %x\n", ptr ); return 0; } |
زمانی که کد بالا کامپایل و اجرا شود، نتیجه زیر را تولید خواهد کرد:
1 | The value of ptr is 0 |
در اکثر سیستم عامل ها، برنامه ها نمی توانند به آدرس حافظه ۰ دسترسی داشته باشند، زیرا این آدرس توسط سیستم عامل رزرو شده است. با اینحال، آدرس حافظه ۰ اهمیت خاصی دارد؛ این آدرس نشان می دهد که اشاره گر به محلی از حافظه که قابل دسترسی باشد اشاره نمی کند. به طور کلی اگر یک اشاره گر به آدرس حافظه ۰ اشاره کند، یعنی این اشاره گر به هیچ چیزی اشاره نمی کند.
برای چک کردن یک نشانگر صفر، می توانید از عبارت ‘if’ به صورت زیر استفاده کنید:
1 2 | if(ptr) /* succeeds if p is not null */ if(!ptr) /* succeeds if p is null */ |
ردیف | مفاهیم و توضیحات |
۱ | اشاره گر ریاضی چهارعملگر ریاضی در C وجود دارد که می توان در هنگام استفاده از اشاره گرها از آن ها استفاده کرد: ++، -، +، – |
۲ | آرایه ای از اشاره گرها شما می توانید آرایه ها را برای نگهداری تعدادی اشاره گر ها تعریف کنید. |
۳ | اشاره گر به اشاره گر C به شما اجازه می دهدکه اشاره گری برای اشاره به اشاره گر دیگر و غیره داشته باشید. |
۴ | ارسال اشاره گر به تابع در C ارسال اشاره گر به عنوان آرگومان به یک تابع |
۵ | بازگشت اشاره گر از تابع در C زبان C به توابع اجازه می دهد تا یک اشاره گر به متغیر محلی، متغیر استاتیک و حافظه اختصاص داده شده به صورت پویا را به عنوان خروجی تابع، بازگشت داده شود. |
خوشحالیم ازاینکه در این مجموعه آموزشها همراه ما هستید.امیدوارم مفید واقع شده باشد. جلسه بعد را با رشته ها در C آغاز می کنیم.
sajjad
nice