آموختن اشارهگرهای ++C آسان و جذاب است. برخی کارها در ++C را میتوان با استفاده از اشارهگرها آسانتر انجام داد، و برخی دیگر از کارها در ++C ، مانند اختصاص حافظه پویا (دینامیک) را نمیتوان بدون وجود اشارهگرها به انجام رساند.
همانطور که میدانید هر متغیر مکانی از حافظه است و هر مکان حافظه دارای آدرس تعریف شدهای میباشد که با استفاده از عملگر & میتوان به آن دسترسی داشت. در مثال زیر آدرس یک متغیر تعریف شده چاپ خواهد شد.
#include <iostream> using namespace std; int main () { int var1; char var2[10]; cout << "Address of var1 variable: "; cout << &var1 << endl; cout << "Address of var2 variable: "; cout << &var2 << endl; return 0; }
با اجرای کد فوق، خروجی زیر تولید میشود.
Address of var1 variable: 0xbfebd5c0 Address of var2 variable: 0xbfebd5b6
اشارهگر چیست
یک اشارهگر(pointer) متغیری است که مقدار آن آدرس یک متغیر دیگر است.همانند هر متغیر یا ثابت دیگری، باید یک اشارهگر را پیش از استفاده از آن اعلان کنید. شکل عمومی اعلان یک متغیر اشارهگر به صورت زیر است.
type *var-name;
در این عبارت، type نوع پایه اشارهگر است؛ که باید یک نوع داده مجاز از ++C باشد و var-name نام متغیر اشارهگر میباشد. ستارهای (*) که برای اعلان متغیر به کار میرود همان ستارهای است که به عنوان علامت جمع نیز استفاده میشود. اما در اینجا ستاره برای تعیین یک متغیر به عنوان اشارهگر استفاده شده است. چند مثال صحیح اعلان اشارهگر در زیر لیست شده است.
int *ip; // pointer to an integer double *dp; // pointer to a double float *fp; // pointer to a float char *ch // pointer to character
نوع داده همه اشارهگرها، چه integer، چه float، چه character و یا هر نوع دیگری، در واقع مشابه هم و یک عدد هگزادسیمال است که آدرسی از حافظه را بیان میکند. تنها تفاوت میان اشارهگرهای نوع دادهای مختلف، نوع دادهای است که به آن اشاره میشود.
استفاده از اشارهگرها در ++C
تنها چند عمل محدود است که به طور مکرر روی اشارهگرها صورت میگیرد.
- یک متغیر اشارهگر تعریف میکنیم.
- آدرس یک متغیر را به آن تخصیص میدهیم.
- در آخر با استفاده از آدرس موجود در اشارهگر به مقدار مورد نظر دسترسی پیدا میکنیم.
این کار را با استفاده از عملگر یگانی * انجام دهیم. این عملگر مقدار متغیری که در آدرس عملوندش قرار گرفته را برمیگرداند. مثال زیر این عملیات را نشان میدهد.
#include <iostream> using namespace std; int main () { int var = 20; // actual variable declaration. int *ip; // pointer variable ip = &var; // store address of var in pointer variable cout << "Value of var variable: "; cout << var << endl; // print the address stored in ip pointer variable cout << "Address stored in ip variable: "; cout << ip << endl; // access the value at the address available in pointer cout << "Value of *ip variable: "; cout << *ip << endl; return 0; }
با اجرای کد فوق، خروجی زیر حاصل میشود.
Value of var variable: 20 Address stored in ip variable: 0xbfc601ac Value of *ip variable: 20
اشارهگرها در ++C
اشارهگرها مفاهیم فراوان اما آسانی دارند و برای برنامهنویسی ++C بسیار حائز اهمیت هستند. جدول زیر برخی از مفاهیم مهم اشارهگرها که هر برنامهنویس ++C باید با آنها آشنا باشد را لیست کرده است.
ردیف |
مفهوم و توضیح آن |
1 |
اشارهگرهای Null ++C از اشارهگرهای null پشتیبانی میکند، این اشارهگرها یک ثابت با مقدار صفر هستند که در چندین کتابخانه استاندارد تعریف شدهاند. |
2 |
محاسبات اشارهگرها چهار عمل حسابی وجود دارد که میتوان روی اشارهگرها انجام داد: ++، – -، +، – |
3 |
اشارهگرها در برابر آرایهها ارتباط تنگاتنگی بین اشارهگرها و آرایهها وجود دارد. |
4 |
آرایه اشارهگرها میتوان آرایهها را برای ذخیره اشارهگرها تعریف کرد. |
5 |
اشاره گر به اشارهگر در ++C میتوان با یک اشارهگر به یک اشارهگر دیگر اشاره کرد و الی آخر. |
6 |
ارسال اشارهگر به توابع در هردو حالت ارسال آرگومان با رفرنس یا با آدرس، امکان تغییر آرگومان درون تابع فراخوانی شده وجود دارد. |
7 |
برگرداندن اشارهگر از یک تابع ++C به یک تابع اجازه میدهد تا اشارهگری به یک متغیر محلی، متغیر استاتیک و یا حافظه پویای تخصیصیافته را برگرداند. |
منبع: ترجمه از سایت tutorialspoint.com
امیدواریم آموزش اشارهگرها در ++C براتون مفید واقع شده باشه. در جلسه بعد آموزش ++C با ما همراه باشید.
اگر این نوشته برایتان مفید بود لطفا کامنت بنویسید.