תרגיל c למי שמבין - תכנות - HWzone פורומים
עבור לתוכן
  • צור חשבון

תרגיל c למי שמבין


ohad5g

Recommended Posts

היי שלום השאלה מה לא עובר קומפילציה כאשר

[CODEint a, *b, c[4];
1. *(c+3) = 8;
2. a = *(c + *b);
3. *(c++) = 12;
4. c = b;
5. b = c;
6. a = (*c)++;
7. *(b+1) = (*c)++;
8. a = *b - *c;
9. *c = *(b++);
10. *(b++)= *(&a);
]

קישור לתוכן
שתף באתרים אחרים

  • 4 שבועות מאוחר יותר...

קודם כל - מה אומרת ההגדרה:

int a, *b, c[4];

או בעברית:

int a;
int * b;
int c[4];

ועכשיו נעבור אחד-אחד.

לא בדקתי מול קומפיילר, אז ייתכן ואני אומר שטויות מזעזעות - אל תסמוך עלי! יש לך קומפיילר לבדוק את זה איתו!

*(c+3) = 8;

בעברית: האם אפשר לשים ערך במקום מספר שלוש (המקום הרביעי!) של המערך c?

תשובה: כן! אין שום בעיה לשים בתא (האחרון!) של המערך c את הערך 8.

a = *(c + *b);

בעברית: האם אפשר לשים בתוך המשתנה a, את הערך של אחד האיברים ב c?

תשובה: כן!

שאלה: והאם אפשרי, שהאינדקס בתוך המערך c, יקבע ע"H ערך שהמבציע b מצבעי עליו?

תשובה: כן!

*(c++) = 12;

לכאורה נראה שאין כאן בעיה - אבל יש פה קאטצ'.

מנסים לשנות את הערך של ה"מצביע" c - וזה אסור!

c = b;

כנ"ל.

b = c;

האם המצביע b, יכול להצביע על האיבר הראשון במערך c?

כן!

a = (*c)++;

זה מותר - כי לא מנסים לשנות את הערך של c , אלא את הערך של התא הראשון של המערך c.

*(b+1) = (*c)++;

מותר - צד ימין לא בעייתי (אחד למעלה), וצד שמאל הקומפיילר לא יכול לדעת אם הוא בעייתי או לא.

a = *b - *c;

מותר.

*c = *(b++);

מותר.

*(b++)= *(&a);

מותר. שקול לחלוטין ל:

*b = a;
b++;

קישור לתוכן
שתף באתרים אחרים

ארכיון

דיון זה הועבר לארכיון ולא ניתן להוסיף בו תגובות חדשות.

×
  • צור חדש...