اشاره‌گرها در 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;  // خطا! نمی‌توان آدرس را تغییر داد

بهترین شیوه‌ها

نکات مهم

این مبحث بخشی از دوره آموزش کامل C++ است.

ابزارهای مرتبط