Menu
Coddy logo textTech
flag Ar iconالعربيةdown icon

المؤشرات إلى الهياكل

جزء من قسم Logic & Flow في رحلة C على Coddy — الدرس 44 من 63.

الآن بعد أن أصبحت مرتاحاً في التعامل مع الـ structs، حان الوقت لدمجها مع مفهوم قوي آخر في لغة C: المؤشرات (pointers). تماماً كما يمكنك إنشاء مؤشرات لأنواع البيانات الأساسية مثل int أو char، يمكنك أيضاً إنشاء مؤشرات تحمل عنوان متغير من نوع struct.

يتبع بناء الجملة للإعلان عن مؤشر إلى هيكل (struct) نفس النمط المتبع في إعلانات المؤشرات الأخرى:

struct StructureName *pointerName;

على سبيل المثال، باستخدام هيكل Point المألوف لدينا:

struct Point p1 = {10, 20};
struct Point *ptr;

يؤدي هذا إلى إنشاء مؤشر باسم ptr يمكنه تخزين عنوان Point struct. ولجعل المؤشر يشير فعلياً إلى متغير الـ struct الخاص بنا، استخدم عامل العنوان (address-of operator):

ptr = &p1;

الآن يحمل ptr عنوان الذاكرة لمتغير الـ p1 struct. يفتح هذا آفاقاً جديدة للعمل مع الـ structs، خاصة عند تمريرها إلى الدوال أو إدارة الذاكرة ديناميكياً. تعد المؤشرات إلى الـ structs ضرورية لبناء هياكل بيانات أكثر تعقيداً وكتابة برامج C فعالة.

challenge icon

التحدي

سهل

قم بإنشاء برنامج بلغة C يوضح كيفية التعامل مع المؤشرات إلى الهياكل (pointers to structs). يجب أن يقوم برنامجك بما يلي:

  1. تعريف struct باسم Product مع الأعضاء التاليين:
    • عدد صحيح id لتخزين معرف المنتج
    • مصفوفة أحرف name بحجم 25 لتخزين اسم المنتج
    • رقم عشري price لتخزين سعر المنتج
    • عدد صحيح quantity لتخزين الكمية المتاحة
  2. في الدالة الرئيسية (main function)، قم بإنشاء متغير من نوع Product باسم item وقم بتهيئته بالقيم التالية:
    • ID: 501
    • Name: "Laptop"
    • Price: 899.99
    • Quantity: 15
  3. قم بالتصريح عن مؤشر (pointer) إلى هيكل Product باسم itemPtr
  4. قم بتعيين عنوان المتغير item إلى itemPtr باستخدام عامل العنوان (address-of operator)
  5. اطبع معلومات المنتج الأصلية عن طريق الوصول إلى أعضاء الهيكل مباشرة (باستخدام عامل النقطة dot operator) بهذا التنسيق الدقيق:
    • Original Product Info:
    • ID: [id]
    • Name: [name]
    • Price: [price]
    • Quantity: [quantity]
  6. اطبع نفس معلومات المنتج عن طريق الوصول إلى أعضاء الهيكل من خلال المؤشر (باستخدام عامل إلغاء المرجعية وتدوين النقطة: (*itemPtr).member) بهذا التنسيق الدقيق:
    • Product Info via Pointer:
    • ID: [id]
    • Name: [name]
    • Price: [price]
    • Quantity: [quantity]
  7. تحقق من أن المؤشر يشير بشكل صحيح إلى الهيكل عن طريق طباعة عناوين الذاكرة بهذا التنسيق الدقيق:
    • Address of item: [address]
    • Value of itemPtr: [address]
    • Address verification: [result]

بالنسبة للتحقق من العنوان، اطبع Match إذا كانت العناوين متطابقة، أو No Match إذا كانت مختلفة.

يختبر هذا التحدي فهمك للتصريح عن المؤشر إلى الهيكل (pointer-to-struct)، وتعيين العنوان باستخدام عامل العنوان، والوصول إلى أعضاء الهيكل من خلال المؤشرات باستخدام عامل إلغاء المرجعية مدمجاً مع تدوين النقطة. ستتحقق أيضاً من أن المؤشر يحمل عنوان متغير الهيكل بشكل صحيح.

ورقة مرجعية

يمكنك إنشاء مؤشرات للهياكل (structs) باستخدام نفس بناء الجملة المستخدم في إعلانات المؤشرات الأخرى:

struct StructureName *pointerName;

لجعل مؤشر يشير إلى متغير هيكل (struct variable)، استخدم عامل العنوان (address-of operator):

struct Point p1 = {10, 20};
struct Point *ptr;
ptr = &p1;

قم بالوصول إلى أعضاء الهيكل من خلال مؤشر باستخدام عامل إلغاء المرجعية (dereference operator) وتدوين النقطة (dot notation):

(*ptr).member

جرّب بنفسك

#include <stdio.h>
#include <string.h>

// TODO: قم بتعريف هيكل المنتج (Product struct) هنا

int main() {
    // TODO: اكتب الكود الخاص بك هنا
    // 1. قم بإنشاء وتهيئة متغير المنتج 'item'
    // 2. قم بتعريف مؤشر للمنتج باسم 'itemPtr'
    // 3. قم بتعيين عنوان 'item' إلى 'itemPtr'
    // 4. قم بطباعة معلومات المنتج الأصلية باستخدام عامل النقطة (dot operator)
    // 5. قم بطباعة معلومات المنتج عبر المؤشر باستخدام (*itemPtr).member
    // 6. قم بطباعة العناوين والتحقق منها
    
    return 0;
}
quiz iconاختبر نفسك

يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.

جميع دروس Logic & Flow