פורסם 2013 ביולי 212 שנים היי שלום השאלה מה לא עובר קומפילציה כאשר [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); ]
פורסם 2013 ביולי 2512 שנים קודם כל - מה אומרת ההגדרה: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++;
ארכיון
דיון זה הועבר לארכיון ולא ניתן להוסיף בו תגובות חדשות.