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

عامل السهم (->)

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

عند العمل مع المؤشرات إلى الـ structs، يتطلب الوصول إلى أعضاء الـ struct بناء جملة خاصاً. وبينما يمكنك استخدام عامل إلغاء المرجعية (dereference operator) وتدوين النقطة (dot notation) معاً، توفر لغة C عاملاً أكثر ملاءمة خصيصاً لهذا الغرض: وهو عامل السهم (arrow operator) (->).

يسمح لك عامل السهم بالوصول إلى أعضاء الـ struct من خلال مؤشر بطريقة نظيفة وقابلة للقراءة:

ptr->member

هذا يعادل كتابة (*ptr).member، ولكنه أكثر إيجازاً بكثير.

إليك كيف يعمل ذلك من الناحية العملية:

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

// استخدام عامل السهم
printf("x = %d, y = %d\n", ptr->x, ptr->y);

// هذا يعادل:
printf("x = %d, y = %d\n", (*ptr).x, (*ptr).y);

يجعل عامل السهم كودك أكثر نظافة وأسهل في القراءة، خاصة عند التعامل مع هياكل بيانات معقدة. إنها الطريقة القياسية للوصول إلى أعضاء الـ struct من خلال المؤشرات في لغة البرمجة C.

challenge icon

التحدي

سهل

قم بإنشاء برنامج بلغة C يوضح استخدام عامل السهم (arrow operator) للوصول إلى أعضاء الهيكل (struct) من خلال المؤشرات. يجب أن يقوم برنامجك بما يلي:

  1. تعريف struct باسم Book بالأعضاء التالية:
    • عدد صحيح id لتخزين معرف الكتاب
    • مصفوفة أحرف title بحجم 40 لتخزين عنوان الكتاب
    • مصفوفة أحرف author بحجم 30 لتخزين اسم المؤلف
    • رقم عشري price لتخزين سعر الكتاب
    • عدد صحيح pages لتخزين عدد الصفحات
  2. في الدالة الرئيسية (main function)، قم بإنشاء متغير من نوع Book باسم myBook
  3. قم بالتصريح عن مؤشر لهيكل Book باسم bookPtr
  4. قم بتعيين عنوان myBook إلى bookPtr
  5. اقرأ قيم الإدخال التالية وقم بتعيينها لأعضاء الهيكل باستخدام عامل السهم من خلال المؤشر:
    • اقرأ عدداً صحيحاً للمعرف وقم بتعيينه باستخدام bookPtr->id
    • اقرأ سلسلة نصية للعنوان وقم بتعيينها باستخدام bookPtr->title
    • اقرأ سلسلة نصية للمؤلف وقم بتعيينها باستخدام bookPtr->author
    • اقرأ رقماً عشرياً للسعر وقم بتعيينه باستخدام bookPtr->price
    • اقرأ عدداً صحيحاً للصفحات وقم بتعيينه باستخدام bookPtr->pages
  6. بعد قراءة جميع القيم، قم بإجراء العمليات التالية باستخدام عامل السهم:
    • تطبيق خصم بنسبة 10% على السعر: bookPtr->price = bookPtr->price * 0.9;
    • إضافة 50 صفحة إضافية: bookPtr->pages += 50;
  7. اطبع معلومات الكتاب باستخدام عامل السهم للوصول إلى كل عضو بهذا التنسيق الدقيق:
    • Book Information:
    • ID: [id]
    • Title: [title]
    • Author: [author]
    • Price: [price]
    • Pages: [pages]
  8. احسب واطبع السعر لكل صفحة باستخدام عامل السهم بالتنسيق التالي: Price per page: [price_per_page]

يختبر هذا التحدي فهمك لعامل السهم للوصول إلى أعضاء الهيكل من خلال المؤشرات. ستتدرب على استخدام صيغة ptr->member لكل من القراءة من أعضاء الهيكل والكتابة إليها، مما يوضح أنها تعادل (*ptr).member ولكنها أكثر ملاءمة وقابلية للقراءة.

جرّب بنفسك

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

// TODO: قم بتعريف هيكل Book هنا

int main() {
    // TODO: قم بإنشاء متغير من نوع Book باسم myBook
    
    // TODO: قم بالتصريح عن مؤشر (pointer) لـ Book باسم bookPtr
    
    // TODO: قم بتعيين عنوان myBook إلى bookPtr
    
    // قراءة قيم المدخلات
    int id;
    char title[40];
    char author[30];
    float price;
    int pages;
    
    scanf("%d", &id);
    scanf("%s", title);
    scanf("%s", author);
    scanf("%f", &price);
    scanf("%d", &pages);
    
    // TODO: قم بتعيين قيم المدخلات لأعضاء الهيكل (struct members) باستخدام عامل السهم (arrow operator)
    
    // TODO: قم بتطبيق خصم 10% على price باستخدام عامل السهم (arrow operator)
    
    // TODO: قم بإضافة 50 صفحة إضافية (bonus pages) باستخدام عامل السهم (arrow operator)
    
    // TODO: قم بطباعة معلومات الكتاب باستخدام عامل السهم (arrow operator)
    
    // TODO: قم بحساب وطباعة السعر لكل صفحة باستخدام عامل السهم (arrow operator)
    
    return 0;
}
quiz iconاختبر نفسك

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

جميع دروس Logic & Flow