اشارهگرها در C++
آشنایی با اشارهگرها در C++، تعریف، استفاده و کار با حافظه
اشارهگرها در C++
اشارهگرها (Pointers) متغیرهایی هستند که آدرس حافظه متغیرهای دیگر را ذخیره میکنند. یکی از قدرتمندترین ویژگیهای C++ هستند.
تعریف اشارهگر
type *pointerName;
مثالهای تعریف
int *ptr; // اشارهگر به int
double *dptr; // اشارهگر به double
char *cptr; // اشارهگر به char
string *sptr; // اشارهگر به string
عملگرهای اشارهگر
| عملگر | نام | توضیح |
|---|---|---|
| & | Address-of | آدرس متغیر را میگیرد |
| * | Dereference | مقدار در آدرس را میگیرد |
مثال پایه
int number = 42;
int *ptr = &number; // ptr آدرس number را نگه میدارد
cout << "مقدار number: " << number << endl; // 42
cout << "آدرس number: " << &number << endl; // 0x7fff...
cout << "مقدار ptr: " << ptr << endl; // 0x7fff...
cout << "مقدار در ptr: " << *ptr << endl; // 42
تغییر مقدار از طریق اشارهگر
int number = 10;
int *ptr = &number;
*ptr = 20; // مقدار number را به 20 تغییر میدهد
cout << number; // 20
اشارهگرهای null
int *ptr = nullptr; // C++11
// یا
int *ptr = NULL; // قدیمی
اشارهگرها و آرایهها
int numbers[5] = {10, 20, 30, 40, 50};
int *ptr = numbers; // ptr به اولین عنصر اشاره میکند
cout << *ptr; // 10 (اولین عنصر)
cout << *(ptr + 1); // 20 (دومین عنصر)
cout << *(ptr + 2); // 30 (سومین عنصر)
پیمایش آرایه با اشارهگر
int numbers[5] = {10, 20, 30, 40, 50};
int *ptr = numbers;
for (int i = 0; i < 5; i++) {
cout << *(ptr + i) << " ";
}
// خروجی: 10 20 30 40 50
حساب اشارهگر (Pointer Arithmetic)
int numbers[5] = {10, 20, 30, 40, 50};
int *ptr = numbers;
ptr++; // به عنصر بعدی میرود
ptr += 2; // دو عنصر جلو میرود
ptr--; // به عنصر قبلی میرود
اشارهگرها و توابع
void modifyValue(int *ptr) {
*ptr = 100; // مقدار را تغییر میدهد
}
int main() {
int number = 5;
modifyValue(&number);
cout << number; // 100
return 0;
}
اشارهگرهای ثابت
اشارهگر به مقدار ثابت
int number = 10;
const int *ptr = &number;
// *ptr = 20; // خطا! نمیتوان مقدار را تغییر داد
اشارهگر ثابت
int number1 = 10, number2 = 20;
int *const ptr = &number1;
*ptr = 15; // صحیح
// ptr = &number2; // خطا! نمیتوان آدرس را تغییر داد
بهترین شیوهها
- همیشه اشارهگرها را مقداردهی اولیه کنید
- از nullptr به جای NULL استفاده کنید
- قبل از استفاده، null بودن را بررسی کنید
- از اشارهگرها با دقت استفاده کنید
نکات مهم
- اشارهگرها آدرس حافظه را نگه میدارند
- *ptr مقدار در آدرس را میدهد
- &ptr آدرس خود اشارهگر را میدهد
- مراقب اشارهگرهای معلق (Dangling) باشید
این مبحث بخشی از دوره آموزش کامل C++ است.