در این مطلب به آموزش اشاره گرها در زبان برنامه نویسی سی پلاس پلاس ( 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

اشاره گر چیست ؟

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

type *var-name;

در اینجا ، type نوع متغیری است که اشاره گر به آن اشاره خواهد کرد. این نوع باید یک نوع موجود در c++ باشد . var-name اسم متغیر اشاره گر است. علامت ( * ) که در اینجا استفاده شده دقیقا همان علامتی است که برای ضرب دو عدد استفاده می‌شود. با این حال ، در اینجا علامت ( * ) برای تعیین یک متغیر به عنوان اشاره گر به کار می رود. چند تعریف موجود اشاره گرها :

int    *ip;    // اشاره به یک integer
double *dp;    // اشاره به یک double
float  *fp;    // اشاره به یک float
char   *ch     // اشاره به یک character

مقدار حقیقی نوع اطلاعات همه ی اشاره گرها ، جدای از integer ، float  و ... ، یک عدد چندرقمی هگزادسیمال است که نشانگر آدرس یک خانه از حافظه است. تنها تفاوت بین اشاره گرها ، نوع متغیری است که اشاره گر به آدرس آن متغیر اشاره می‌کند.

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

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

#include <iostream>

using namespace std;

int main () {
   int  var = 20;   // تعیین مقدار متغیر
   int  *ip;        // متغیر اشاره گر 

   ip = &var;       // ذخیره آدرس متغیر تعریف شده در اشاره گر

   cout << "Value of var variable: ";
   cout << var << endl;

   // چاپ آدرس ذخیره شده در اشاره گر
cout << "Address stored in ip variable: "; cout << ip << endl; // دسترسی به مقدار موجود در آدرس ذخیره شده در اشاره گر 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