Menu
CoddyTech

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

جزء من قسم المنطق وتدفق التنفيذ في رحلة C على Coddy. الدرس 44 من 63.

والآن بعد أن أصبحت مرتاحًا في التعامل مع البُنى، حان وقت دمجها مع مفهوم قوي آخر في C: المؤشرات. تمامًا كما يمكنك إنشاء مؤشرات لأنواع البيانات الأساسية مثل int أو char، يمكنك أيضًا إنشاء مؤشرات تخزّن عنوان متغير من نوع بنية.

تتبع صياغة التصريح عن مؤشر إلى بنية النمط نفسه المتبع في تصريحات المؤشرات الأخرى:

struct StructureName *pointerName;

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

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

ينشئ هذا مؤشرًا باسم ptr يمكنه تخزين عنوان بنية Point. لجعل المؤشر يشير فعليًا إلى متغير البنية، استخدم عامل أخذ العنوان:

ptr = &p1;

لقراءة عضو عبر المؤشر، أزل الإشارة عنه ثم استخدم عامل النقطة. الأقواس مطلوبة، لأن . له أسبقية أعلى من *:

printf("%d", (*ptr).x); // مثل p1.x تمامًا

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

challenge icon

التحدي

سهل

أنشئ برنامجًا بلغة C يوضّح كيفية التعامل مع المؤشرات إلى البنى. يجب أن يقوم برنامجك بما يلي:

  1. عرّف struct باسم Product مع الأعضاء التالية:
    • عدد صحيح id لتخزين معرّف المنتج
    • مصفوفة محارف name بحجم 25 لتخزين اسم المنتج
    • عدد عشري price لتخزين سعر المنتج
    • عدد صحيح quantity لتخزين الكمية المتاحة
  2. في الدالة الرئيسية، أنشئ متغيرًا من نوع Product باسم item وامنحه القيم التالية عند تهيئته:
    • المعرّف: 501
    • الاسم: "Laptop"
    • السعر: 899.99
    • الكمية: 15
  3. صرّح عن مؤشر إلى بنية Product باسم itemPtr
  4. أسند عنوان المتغير item إلى itemPtr باستخدام معامل أخذ العنوان
  5. اطبع معلومات المنتج الأصلية عن طريق الوصول مباشرةً إلى أعضاء البنية (باستخدام معامل النقطة) بهذا التنسيق بالضبط:
    • 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 إذا كانا مختلفين.

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

جرّب بنفسك

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

// TODO: عرّف البنية Product هنا

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

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

جميع دروس المنطق وتدفق التنفيذ

تدرّب بنفسك: مترجم C عبر الإنترنت