C/C++ מדריכי
C הקדמה לתכנות ב
C++ הקדמה להיררכית מחלקות ב הצגה מזורזת :C++ הבנת דף הבית

שיעור 14: קדימויות אופרטורים ב C

קדימויות אופרטורים ב C

C מכילה הרבה אופרטורים, ובגלל הדרך בה פועלת קדימות האופרטורים, האינטראקציה בין מספר אופרטורים יכולה להיות מבלבלת.

x=5+3*6;

x מקבל את הערך 23, לא 48, כיוון שב C כפל וחילוק הם בעלי עדיפות גבוהה יותר מחיבור וחיסור.

char *a[10];

האם a מצביע יחיד למערך של 10 תווים, או האם הוא מערך של 10 מצביעים לתווים? אלא אם כן אתה מכיר את מוסכמות הקדימויות ב C, אין לך דרך לדעת. באופן דומה, בשיעור 11 ראינו שבגלל קדימויות, פקודות כמו *p.i=10; לא עובדות. במקום זאת, יש להשתמש בצורה (*p).i=10; כדי לכפות קדימות נכונה.

הטבלה הבאה מ Kernigan and Richie מראה את היררכית העדיפויות ב C. השורה העליונה היא בעלת העדיפות הגבוהה ביותר.

אסוציאטיביות

אופרטורים

שמאל לימין

( [ - .

ימין לשמאל*

! - ++ -{- + * & (type-cast) sizeof

שמאל לימין

/ %

שמאל לימין

<< >>

שמאל לימין

< <= > >=

שמאל לימין

== !=

שמאל לימין

&

שמאל לימין

^

שמאל לימין

|

שמאל לימין

&&

שמאל לימין

||

שמאל לימין

?:

ימין לשמאל

= += -= *= /= %= &= ^= |= <<= >>=

שמאל לימין

,

*(+, - ו * הן הצורות האונריות)

על ידי שימוש בטבלה זו, ניתן לראות ש char *a[10]; הנו מערך של 10 מצביעים לתווים. ניתן גם לראות מדוע הסוגריים נחוצים אם הטיפול ב (*p).i אמור להיעשות כהלכה. לאחר מעט תרגול, תזכור בעל פה את רוב הטבלה הזו, אבל מידי פעם משהו לא יעבוד בגלל שהסתבכת בבעיית קדימויות דקה.




לדף הראשון

<< לדף הקודם

לדף הבא >>