المؤشر - Pointer
في لغة C++، المؤشر هو متغير يقوم بتخزين عنوان الذاكرة لمتغير آخر. توفر المؤشرات آلية قوية للعمل مع الذاكرة وهياكل البيانات. إنها تسمح بالمعالجة المباشرة لعناوين الذاكرة وتمكن من إدارة الذاكرة بكفاءة.
إعلان المؤشرات
للإعلان عن مؤشر، يمكنك استخدام نوع البيانات متبوعًا بالعلامة النجمية (*) واسم المؤشر. على سبيل المثال:
int *ptr; // Declares a pointer to an integer double *dblPtr; // Declares a pointer to a double
تفعيل المؤشرات
يجب تفعيل المؤشرات قبل الاستخدام. يمكنك تفعيل المؤشر عن طريق تعيين عنوان متغير له. يتم استخدام عنوان الـoperator (&) للحصول على عنوان الذاكرة للمتغير.
int num = 10; int *ptr = # // Initializes ptr with the address of num
عدم مرجعية المؤشرات Dereferencing Pointers
Dereferencing a pointer إلى المؤشر يعني الوصول إلى القيمة المخزنة في عنوان الذاكرة الذي يشير إليه. يتم استخدام عامل الـderefrencing (*) لهذا الغرض.
int num = 10; int *ptr = # cout << *ptr; // Prints the value stored at the address pointed by ptr
مثال 1:
#include <iostream> using namespace std; int main() { // Declaration of a pointer to an integer int *ptr; // Declaration and initialization of an integer variable int val = 5; // Assigning the address of 'val' to the pointer 'ptr' ptr = &val; // Printing the address stored in the pointer cout << ptr << endl; // Printing the value stored at the address pointed by 'ptr' cout << *ptr << endl; // Return 0 to indicate successful execution return 0; }
يعلن هذا الكود عن مؤشر، ويقوم بتفعيل متغير عدد صحيح، ويعين عنوان هذا المتغير للمؤشر، ثم يطبع قيمة المؤشر (عنوان الذاكرة) والقيمة التي يشير إليها.
النقاط الرئيسية:
- الإعلان عن المؤشر:
int *ptr;: يعلن عن مؤشر لعدد صحيح. هذا المؤشر غير مفعل حاليًا. - الإعلان وتفعيل المتغير:
int val = 5;: يعلن عن متغير عدد صحيح يسمى val ويقوم بتفعيله وإعطاؤه القيمة 5. - تعيين عنوان للمؤشر:
ptr = &val;: يعين عنوان الذاكرة للمتغير val للمؤشر ptr. الآن "يشير" ptr إلى موقع الذاكرة الخاص بـ val. - طباعة قيمة المؤشر (عنوان الذاكرة):
cout << ptr << endl;: يطبع عنوان الذاكرة المخزن في المؤشر ptr. يتم تمثيل العنوان عادةً بتنسيق hexadecimal. - طباعة القيمة على العنوان المشار إليه بالمؤشر:
cout << *ptr << endl;: يستخدم عامل الـdereference (*) للوصول إلى القيمة المخزنة في عنوان الذاكرة المشار إليه بواسطة ptr. ويطبع القيمة المخزنة في المتغير val.
المخرجات:
إذا قمت بتشغيل هذا البرنامج، فإن المخرجات ستكون كما يلي:
0x7ffee3c86a4c // The memory address (this will vary on each run) 5 // The value stored at the memory address
مثال 2:
#include <iostream> using namespace std; int main() { int *p; int v = 9; p = &v; cout << *p << endl; return 0; }
يطبع هذا الكود عنوان القيمة التي يشير إليها المؤشر p باستخدام التعبيرات &*p.
cout << &*p << endl;: يستخدم عامل الـdereference (*) للوصول إلى القيمة المخزنة في عنوان الذاكرة المشار إليه بـ p. ثم يأخذ عامل التشغيل & عنوان هذه القيمة. بشكل أساسي، &*p يعادل p فقط، لذلك يطبع هذا السطر عنوان الذاكرة المخزن في المؤشر p.