English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
في هذا المقال، ستتعلم كل شيء عن الإشارات. ستتعلم كيفية تخزين القيم في الحاسوب وكيفية الوصول إليها باستخدام الإشارات.
المؤشر هو ميزة قوية في C++، مما يفرق بين C++ وبقية لغات البرمجة (مثل Java وPython).
يستخدم المؤشر في برامج C++ لتحديد الذاكرة وتعديل العناوين.
للتفهم المؤشر، يجب أن تعرف أولاً كيف يمكن تخزين البيانات على الحاسوب.
كل متغير يتم إنشاؤه في البرنامج يتم تخصيص موقعًا في ذاكرة الحاسوب له. القيمة المخزنة في المتغير في الواقع مخزنة في الموقع المحدد.
للتعرف على حيث يتم تخزين البيانات، يحتوي C++ على عمليات التشير (reference) (&). يعطي عمليات التشير (reference) (&) عنوان المتغير الذي يأخذه.
إذا كان var متغيرًا، فإن &var تعطي عنوان المتغير.
#include <iostream> using namespace std; int main() { int var1 = 3; int var2 = 24; int var3 = 17; cout << &var1 << endl; cout << &var2 << endl; cout << &var3 << endl; }
نتيجة الإخراج
0x7fff5fbff8ac 0x7fff5fbff8a8 0x7fff5fbff8a4
ملاحظة: قد لا تحصل على نفس النتيجة على نظامك.
الرقم 0x في بداية العنوان يعني أن العنوان يكون في شكل عشري.
لاحظ أن الفرق بين العنوان الأول والثاني هو 4 بايت، والفرق بين العنوان الثاني والثالث هو 4 بايت.
هذا لأن حجم عدد (متغير من نوع int) في نظام 64 بت هو 4 بايت.
C ++ يتيح لك التدخل مباشرة في بيانات ذاكرة الحاسوب. يمكنك تخصيص وإلغاء تخصيص أي مساحة في ذاكرة الحاسوب حسب الحاجة. يتم تنفيذ ذلك باستخدام متغيرات المؤشر (pointer).
متغير المؤشر هو متغير يشير إلى عنوان الذاكرة الخاص بالمتغير الآخر المخزن في الذاكرة.
int *p; أو, int* p;
الجملة السابقة تعريفها متغير مؤشر p. إنه يحتوي على عنوان الذاكرة
النجم (* هو عمليات التشير (de-reference)، ويعنيمؤشر إلى مؤشر.
في هذا السياق، يشير المؤشر p إلى مؤشر على int، أي أنه يشير إلى عنوان الذاكرة الذي يحتوي على قيمة عددية.
كما ذكرت سابقًا، يعطي عمليات التشير (reference) (&) عنوان المتغير.
للحصول على القيمة المخزنة في عنوان الذاكرة، نستخدم عمليات التشير (de-reference) (\*).
مثال:إذا كانت متغير number يتم تخزينها في عنوان ذاكرة0x123فيها، وتحتوي على قيمة5.
عمليات التشير (&) تعطي القيمة0x123و عمليات التشير (*) تعطي القيمة5.
ملاحظة:ملاحظة: رمز (*) الموجود في بيانات مؤشر C++ ليس مؤشر مرجع. إنه مجرد رمز مشابه لإنشاء مؤشر.
C ++ برنامج يشرح عمل الإشارات.
#include <iostream> using namespace std; int main() { int *pc, c; c = 5; cout << "Address of c (&c): " << &c << endl; cout << "Value of c (c): " << c << endl << endl; pc = &c; // يحفظ السهم pc عنوان المتغير c cout << "عنوان السهم الذي يحتويه pc (pc): " << pc << endl; cout << "قيمة سهم العنوان pc (*pc): " << *pc << endl << endl; c = 11; // يتم تغيير القيمة في عنوان الذاكرة &c من 5 إلى 11. cout << "عنوان سهم العنوان pc (pc): " << pc << endl; cout << "محتوى سهم العنوان pc (*pc): " << *pc << endl << endl; *pc = 2; cout << "Address of c (&c): " << &c << endl; cout << "Value of c (c): " << c << endl << endl; return 0; }
نتيجة الإخراج
عنوان Address of c (&c): 0046FD44 قيمة Value of c (c): 5 عنوان السهم الذي يحتويه pc (pc): 0046F قيمة سهم العنوان pc (*pc): 5 عنوان سهم العنوان pc (pc): 0046FD4 محتوى سهم العنوان pc (*pc): عنوان Address of c (&c): 0046FD44 قيمة Value of c (c): 2
توجيه استخدام البرنامج
عند c = 5; يتم تخزين القيمة 5 في عنوان المتغير c - 0x7fff5fbff8c.
عند pc = &c; عنوان سهم pc هو c - 0x7fff5fbff8c، يخرج التعبير (ميزة الاستدلال) *pc القيمة المخزنة في هذا العنوان، وهي 5.
عند c = 11؛ لأن سهم pc يحتوي على عنوان المظروف مع c - 0x7fff5fbff8c، فإن قيمة c ستتغير أيضًا عند تنفيذ التعبير *pc، أصبحت الآن 11.
عند *pc = 2؛ غير محتوى العنوان المخزن في pc - 0x7fff5fbff8c. أصبحت 11 2. لذا، عندما نخرج قيمة c، هذه القيمة هي 2 أيضًا.
إذا كنت ترغب في أن يشير سهم pc إلى عنوان c.
int c, *pc; pc=c; /*خطأ! pc هو العنوان، بينما c ليس عنوانًا. */ *pc=&c; /*خطأ! * pc هو القيمة التي تشير إليها العنوان، بينما &c هو العنوان نفسه.*/ pc=&c; /* صحيح! pc هو عنوان، و&c هو عنوان. */ *pc=c; /* صحيح! *pc هو عنوان يشير إليه، والـ c هو قيمة. */
في هذين الحالتين، المؤشر pc ليس يشير إلى عنوان C.
ينبغي عليك أيضًا مراجعة هذه التعليمات التى تتعلق بالمؤشرات: