در این قسمت تیم کدگیت را با آموزش اشارهگرها در سی پلاس پلاس همراهی کنید. در آغاز آموزش به معرفی اشارهگرها پرداخته سپس اشارهگرها را پیاده سازی میکنیم. پیشنهاد میکنیم قبل از مطالعه این آموزش، آموزشهای مقدماتی سی پلاس پلاس را مطالعه کنید.
اشارهگرها در سی پلاس پلاس
همانطور که میدانید هر متغیر در سی پلاس پلاس فضایی در حافظه را میگیرد. برای دسترسی به آدرس متغیر از & استفاده میکنیم. برای درک بهتر این مطلب کد زیر را بررسی کنید:
int var1;
char var2[10];
cout << "Address of var1 variable: ";
cout << &var1 << endl;
cout << "Address of var2 variable: ";
cout << &var2 << endl;
همانطور که میبینید دو متغیر var1 و var2 را ساختیم و آدرس حافظه آنها را چاپ کردیم. خروجی کد بالا مشابه زیر میباشد:
Address of var1 variable: 0x11ffe04
Address of var2 variable: 0x11ffdf0
اشارهگرها در سی پلاس پلاس یک متغیر هستند که مقدار آنها آدرس حافظه یک متغیر دیگر است. به عبارت دیگر اشارهگرها آدرس حافظه را در خود ذخیره میکنند. اشارهگرها در سی پلاس پلاس به صورت زیر تعریف میشوند:
type *var-name;
Type همان نوع متغیر ماست که میتواند int، Float یا … باشد. بعد از type یک * (ستاره) میآید که نشان دهنده اشارهگر است. در آخر نیز اسم اشارهگر میآید. برای درک بهتر مطالب بالا چند مثال در این مورد میزنیم.
مثال اول اشارهگرها
در این مثال یک متغیر را تعریف سپس یک اشاره گر را ساخته و آدرس متغیر را به اشارهگر میدهیم. کد این مثال به صورت زیر میباشد:
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;
کد بالا سه خروجی دارد اولی مقدار متغیر var است و دومی مقدار اشارهگر ip است. سومین خروجی به ما نحوه دسترسی محتوای حافظه با توجه به داشتن اشارهگر آن را به ما نشان میدهد پس در حقیقت سومین خروجی همان مقداری است که در آدرس حافظه اشاره گر ذخیره شده است (همان مقدار var). خروجی کد بالا به صورت زیر است:
Value of var variable: 20
Address stored in ip variable: 0x11ffdec
Value of *ip variable: 20

مثال دوم اشارهگرها
این مثال عملیات جمع اشارهگر در سی پلاس پلاس را توضیح میدهد. ابتدا یک آرایه و یک متغیر (Max) ساخته، اشارهگری به ابتدای آرایه اشاره میکند. هدف چاپ عناصر آرایه با کمک اشاره گر است. کد این مثال به صورت زیر است:
int var11[MAX] = { 10, 100, 200 };
int *ptr;
// let us have array address in pointer.
ptr = var11;
for (int i = 0; i < MAX; i++) {
cout << "Address of var[" << i << "] = ";
cout << ptr << endl;
cout << "Value of var[" << i << "] = ";
cout << *ptr << endl;
// point to the next location
ptr++;
}
در کد بالا یک حلقه For نوشتیم برای چاپ عناصر آرایه به کمک اشارهگر. در انتهای حلقه اشارهگر را یک آدرس حافظه به جلو بردیم (با عمل جمع) این بدین معنی است که اشاره گر به خانه بعدی آرایه اشاره میکند. جمع یا تفریق اشارهگرها در سی پلاس پلاس ما را به خانههای قبلی و بعدی آدرس حافظه درون اشارهگر میبرد.
