Menu
Coddy logo textTech

אופרטור החץ (->)

חלק מהיחידה לוגיקה וזרימת תוכנית במסלול ה-C של Coddy. שיעור 45 מתוך 63.

בעבודה עם מצביעים למבנים, גישה לחברי המבנה דורשת תחביר מיוחד. אפשר להשתמש יחד באופרטור ביטול ההפניה ובסימון נקודה, אבל C מספקת אופרטור נוח יותר במיוחד למטרה הזאת: אופרטור החץ (->).

אופרטור החץ מאפשר לך לגשת לחברי מבנה דרך מצביע בצורה נקייה וקריאה:

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 שמדגימה שימוש באופרטור החץ כדי לגשת לחברי struct דרך מצביעים. התוכנית שלכם צריכה:

  1. להגדיר struct בשם Book עם החברים הבאים:
    • מספר שלם id לאחסון מזהה הספר
    • מערך תווים title בגודל 40 לאחסון כותרת הספר
    • מערך תווים author בגודל 30 לאחסון שם המחבר
    • מספר ממשי מסוג float בשם price לאחסון מחיר הספר
    • מספר שלם pages לאחסון מספר העמודים
  2. בפונקציה הראשית, ליצור משתנה Book בשם myBook
  3. להכריז על מצביע למבנה Book בשם bookPtr
  4. להקצות את הכתובת של myBook ל-bookPtr
  5. לקרוא את ערכי הקלט הבאים ולהקצות אותם לחברי המבנה באמצעות אופרטור החץ דרך המצביע:
    • לקרוא מספר שלם עבור המזהה ולהקצות אותו באמצעות bookPtr->id
    • לקרוא מחרוזת עבור הכותרת ולהקצות אותה באמצעות bookPtr->title
    • לקרוא מחרוזת עבור שם המחבר ולהקצות אותה באמצעות bookPtr->author
    • לקרוא מספר ממשי מסוג float עבור המחיר ולהקצות אותו באמצעות 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: הכריזו על מצביע ל-Book בשם bookPtr
    
    // TODO: הקצו ל-bookPtr את הכתובת של myBook
    
    // קראו את ערכי הקלט
    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: הקצו את ערכי הקלט לשדות המבנה באמצעות אופרטור החץ
    
    // TODO: החילו הנחה של 10% על price באמצעות אופרטור החץ
    
    // TODO: הוסיפו 50 עמודי בונוס באמצעות אופרטור החץ
    
    // TODO: הדפיסו את פרטי הספר באמצעות אופרטור החץ
    
    // TODO: חשבו והדפיסו את המחיר לעמוד באמצעות אופרטור החץ
    
    return 0;
}
quiz iconבחנו את עצמכם

השיעור הזה כולל חידון קצר. התחילו את השיעור כדי לענות עליו ולעקוב אחרי ההתקדמות.

כל השיעורים ביחידה לוגיקה וזרימת תוכנית

תרגלו בעצמכם: קומפיילר C אונליין