معامل الوصول للقيمة (Dereference)
جزء من قسم Logic & Flow في رحلة C++ على Coddy — الدرس 3 من 56.
الآن بعد أن أصبح بإمكانك الحصول على مؤشر لمتغير، تحتاج إلى تعلم كيفية الوصول إلى القيمة الموجودة في عنوان الذاكرة هذا وتعديلها. هنا يصبح عامل إلغاء المرجعية (*) ضروريًا.
يُستخدم عامل إلغاء المرجعية (dereference operator) * للوصول إلى القيمة المخزنة في عنوان الذاكرة الذي يشير إليه المؤشر. عندما تضع * قبل متغير المؤشر، فإنه "يتبع" العنوان ويعطيك القيمة الفعلية المخزنة هناك.
int number = 42;
int* ptr = &number; // ptr يخزن عنوان number
int value = *ptr; // value يحتوي الآن على 42يمكنك أيضاً استخدام عامل إلغاء المرجعية (dereference operator) لتعديل المتغير الأصلي من خلال المؤشر. عندما تقوم بتعيين قيمة جديدة لـ *ptr، فأنت في الواقع تقوم بتغيير القيمة المخزنة في ذلك الموقع من الذاكرة:
*ptr = 100; // يغير number إلى 100
// قيمة number الآن هي 100، على الرغم من أننا قمنا بتعديلها من خلال ptrهذا الوصول غير المباشر هو ما يجعل المؤشرات قوية للغاية - حيث يمكنك قراءة وتعديل المتغيرات من أي مكان في برنامجك طالما أن لديك مؤشراً إليها.
التحدي
سهلقم بإنشاء برنامج يوضح عامل إلغاء المرجعية (dereference operator) من خلال تعديل قيمة متغير عبر مؤشر.
سيتم توفير المدخلات التالية:
- عدد صحيح يمثل القيمة الأولية لمتغير
- عدد صحيح يمثل القيمة الجديدة التي سيتم تعيينها عبر المؤشر
يجب أن يقوم برنامجك بما يلي:
- الإعلان عن متغير صحيح باسم
temperatureوتهيئته بقيمة المدخل الأول - إنشاء مؤشر باسم
tempPtrيشير إلى المتغيرtemperature - طباعة القيمة الأصلية عن طريق إلغاء مرجعية المؤشر
- استخدام عامل إلغاء المرجعية لتغيير قيمة
temperatureإلى قيمة المدخل الثاني من خلال المؤشر - طباعة القيمة الجديدة عن طريق إلغاء مرجعية المؤشر مرة أخرى
استخدم تنسيق المخرجات الدقيق التالي:
Original value: [original value]
New value: [new value]ورقة مرجعية
يُستخدم عامل إلغاء المرجعية (dereference operator) * للوصول إلى القيمة المخزنة في عنوان الذاكرة الذي يشير إليه المؤشر:
int number = 42;
int* ptr = &number; // ptr يخزن عنوان number
int value = *ptr; // value يحتوي الآن على 42يمكنك أيضاً استخدام عامل إلغاء المرجعية لتعديل المتغير الأصلي من خلال المؤشر:
*ptr = 100; // يغير number إلى 100
// number الآن هو 100، على الرغم من أننا قمنا بتعديله من خلال ptrيسمح لك هذا الوصول غير المباشر بقراءة وتعديل المتغيرات من أي مكان في برنامجك طالما أن لديك مؤشراً إليها.
جرّب بنفسك
#include <iostream>
using namespace std;
int main() {
// قراءة قيم المدخلات
int initialValue, newValue;
cin >> initialValue;
cin >> newValue;
// TODO: اكتب كودك أدناه
// 1. قم بتعريف متغير درجة الحرارة وتهيئته بالقيمة initialValue
// 2. قم بإنشاء مؤشر tempPtr يشير إلى درجة الحرارة
// 3. اطبع القيمة الأصلية باستخدام إلغاء مرجع المؤشر
// 4. قم بتغيير قيمة درجة الحرارة من خلال المؤشر باستخدام newValue
// 5. اطبع القيمة الجديدة باستخدام إلغاء مرجع المؤشر
return 0;
}يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.
جميع دروس Logic & Flow
1المؤشرات والذاكرة
ما هو المؤشر؟معامل العنوان (Address-Of)معامل الوصول للقيمة (Dereference)المؤشرات الفارغة (Null Pointers)المؤشرات والمصفوفاتالذاكرة الديناميكية باستخدام 'new'تحرير الذاكرة باستخدام 'delete'مراجعة - تمارين على المؤشرات2المتجهات (المصفوفات الديناميكية)
مقدمة إلى std::vectorإنشاء Vectorإضافة العناصرالوصول إلى العناصرحجم الـ Vectorالتكرار باستخدام For Loopالـ Range-Based For Loopإزالة العناصرملخص - عمليات الـ Vector