اشاره‌گرها در ++C

آموختن اشاره‌گرهای ++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

استفاده از اشاره‌گرها در ++C

تنها چند عمل محدود است که به طور مکرر روی اشاره‌گرها صورت می‌گیرد.

  1. یک متغیر اشاره‌گر تعریف می‌کنیم.
  2. آدرس یک متغیر را به آن تخصیص می‌دهیم.
  3. در آخر با استفاده از آدرس موجود در اشاره‌گر به مقدار مورد نظر دسترسی پیدا می‌کنیم.

این کار را با استفاده از عملگر یگانی * انجام دهیم. این عملگر مقدار متغیری که در آدرس عملوندش قرار گرفته را برمی‌گرداند. مثال زیر این عملیات را نشان می‌دهد.

#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 باید با آنها آشنا باشد را لیست کرده است.

مطلب پیشنهادی:  اورلود کردن عملگر ایندکس در ++C

ردیف

مفهوم و توضیح آن

1

اشاره‌گرهای Null

++C از اشاره‌گرهای null پشتیبانی می‌کند، این اشاره‌گرها یک ثابت با مقدار صفر هستند که در چندین کتابخانه استاندارد تعریف شده‌اند.

2

محاسبات اشاره‌گرها

چهار عمل حسابی وجود دارد که می‌توان روی اشاره‌گرها انجام داد: ++، – -، +، –

3

اشاره‌گرها در برابر آرایه‌ها

ارتباط تنگاتنگی بین اشاره‌گرها و آرایه‌ها وجود دارد.

4

آرایه اشاره‌گرها

می‌توان آرایه‌ها را برای ذخیره اشاره‌گرها تعریف کرد.

5

اشاره گر به اشاره‌گر

در ++C می‌توان با یک اشاره‌گر به یک اشاره‌گر دیگر اشاره کرد و الی آخر.

6

ارسال اشاره‌گر به توابع

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

7

برگرداندن اشاره‌گر از یک تابع

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

منبع: ترجمه از سایت tutorialspoint.com

امیدواریم آموزش اشاره‌گرها در ++C براتون مفید واقع شده باشه. در جلسه بعد آموزش ++C با ما همراه باشید.

اگر این نوشته‌ برایتان مفید بود لطفا کامنت بنویسید.

مطالعه دیگر جلسات این آموزش<< جلسه قبلی                    جلسه بعدی >>

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *