دروس الوحدة (2/2)
المؤشرات
تعد المؤشرات إحدى أقوى الميزات وأكثرها تميزًا في لغة C++. فهي تسمح لك بالوصول إلى الذاكرة الفعلية للكمبيوتر مباشرة، مما يتيح لك إدارة الموارد بكفاءة والأداء العالي.
1. ما هي الذاكرة والعنوان؟
يتم تخزين كل متغير تعلنه في برنامجك في خلية من ذاكرة الوصول العشوائي (RAM). تحتوي كل خلية على عنوان ذاكرة فريد (يتم التعبير عنه عادةً بتنسيق سداسي عشري، على سبيل المثال، 0x7ffee3bf87ac).
تتيح لنا لغة C++ الحصول على عنوان الذاكرة لأي متغير باستخدام عنوان المشغل &:
int x = 42;
std::cout << &x; // Prints the memory address of x (e.g., 0x7ffee3bf87ac)2. تعريف المؤشر
المؤشر هو متغير خاص يخزن عنوان الذاكرة لمتغير آخر كقيمته.
يتطلب بناء الجملة استخدام العلامة النجمية * بعد نوع البيانات:
int x = 42;
int* ptr = &x; // ptr is a pointer to an integer that contains the address of x3. عامل إلغاء المرجعية (*)
للوصول إلى القيمة المخزنة في العنوان الذي يشير إليه المؤشر أو تعديلها، نستخدم عامل المرجعية (أو عامل غير الاتجاه)، والذي يمثله أيضًا الرمز *:
int x = 42;
int* ptr = &x;
std::cout << *ptr; // Prints 42 (the value ptr points to)
*ptr = 100; // Modifies the value of x through the pointer
std::cout << x; // Now prints 100!4. المؤشرات الفارغة: nullptr
يجب تهيئة المؤشر الذي لا يشير إلى أي عنوان صالح باستخدام الكلمة الأساسية nullptr (المقدمة في C++ 11):
int* ptr = nullptr; // Safe null pointerجربه بنفسك
بشكل رئيسي، هناك قيمة متغيرة صحيحة تمت تهيئتها إلى 42. قم بتعريف مؤشر إلى عدد صحيح ptr يشير إلى عنوان القيمة. استخدم إلغاء مرجعية ptr لتعيين قيمة القيمة إلى 100، وأخيرًا قم بطباعة القيمة باستخدام std::cout.
إظهار التلميح
قم بتعريف المؤشر باستخدام `int* ptr = &value;`، وتعديل القيمة عن طريق إلغاء الإشارة إلى `*ptr = 100;`، وطباعة `std::cout << value;`.
الحل متاح بعد 3 من المحاولات
حدد دالة doubleValue التي تقبل المؤشر إلى عدد صحيح (int* ptr) وتضرب القيمة التي يشير إليها بمقدار 2 (إذا لم يكن المؤشر فارغًا). بشكل رئيسي، قم باستدعاء doubleValue لتمرير عنوان المتغير num وطباعته.
إظهار التلميح
يجب أن تقبل الدالة `int* ptr`. في الداخل، استخدم `*ptr = (_ptr) _ 2`. بشكل رئيسي، اتصل بها باستخدام `doubleValue(&num);`.
الحل متاح بعد 3 من المحاولات
بالنظر إلى الكود المقدم، ما التعبير الذي يسمح لك بتعديل قيمة a مباشرة، وضبطها على 10؟
int a = 5;
int* p = &a;
// quale istruzione assegna 10 ad a?