معامل الوصول للقيمة (Dereference)
جزء من قسم Logic & Flow في رحلة C++ على Coddy — الدرس 3 من 56.
الآن بعد أن أصبحت قادرًا على الحصول على pointer إلى variable، تحتاج إلى تعلم كيفية الوصول إلى القيمة الموجودة في عنوان الذاكرة ذاك وتعديلها. هنا يبرز دور معامل dereference (المتمثل في يمكنك أيضًا استخدام معامل إلغاء الإشارة (هذا الوصول غير المباشر هو ما يجعل المؤشرات (pointers) قوية جداً - يمكنك قراءة التعديل على المتغيرات من أي مكان في برنامجك طالما أن لديك pointer يُشير إليها.
*) والذي يُعد أمرًا أساسيًا.يُستخدم معامل `dereference` * للوصول إلى القيمة المخزنة في الـ memory `address` التي يشير (`pointing`) إليها الـ `pointer`. وعندما تضع * قبل `pointer` `variable`، فإنه "يتتبع" الـ `address` ويعطيك القيمة الفعلية المخزنة هناك.تذكر أن عامل العنوان (&) يُستخدم للحصول على عنوان الذاكرة لمتغير، بينما يُستخدم عامل إلغاء الإشارة (*) للوصول إلى القيمة عند ذلك العنوان.int number = 42;
int* ptr = &number; // ptr يخزن عنوان number
int value = *ptr; // value يحتوي الآن على 42dereference) لتعديل المتغير الأصلي (original) من خلال المؤشر (pointer). عندما تقوم بتعيين قيمة جديدة لـ *ptr، فأنت في الواقع تقوم بتغيير القيمة المخزنة في ذلك الموقع من الذاكرة:*ptr = 100; // يغير number إلى 100
// number أصبح الآن 100، حتى وإن عدلناه من خلال ptrالتحدي
سهلقم بإنشاء برنامج يوضح كيفية استخدام معامل إلغاء المرجعية (dereference) لتعديل قيمة متغير من خلال pointer.
سيتم تقديم الـ input التالي:
- عدد صحيح يمثل القيمة الأولية للمتغير
- عدد صحيح يمثل القيمة الجديدة المراد تعيينها من خلال الـ pointer
يجب على برنامجك أن يقوم بما يلي:
- Declare متغير من نوع integer باسم
temperatureو initialize له بقيمة الـ input الأولى - Create pointer باسم
tempPtrpoints إلى المتغيرtemperature - Print القيمة الـ Original عن طريق dereference للـ pointer
- استخدم معامل dereference لـ Change قيمة
temperatureإلى قيمة الـ input الثانية through الـ pointer - Print القيمة الـ New عن طريق dereference للـ pointer مرة أخرى
استخدم صيغة المخرجات المحددة التالية تمامًا:
Original value: [original value]
New value: [new value]جرّب بنفسك
#include <iostream>
using namespace std;
int main() {
// اقرأ قيم الإدخال
int initialValue, newValue;
cin >> initialValue;
cin >> newValue;
// TODO: اكتب الكود الخاص بك أدناه
// 1. أعلن عن متغير temperature وقم بتهيئته بـ initialValue
// 2. أنشئ المؤشر tempPtr الذي يشير إلى temperature
// 3. Print original value using pointer dereference
// 4. غيّر قيمة temperature من خلال المؤشر باستخدام 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