פורסם 2009 בינואר 2216 שנים צהריים טובים,אני נתקלתי במשהו קטן בנושא מצביעים שאני לא כל כך מבין, אשמח אם מישהו יוכל להכווין אותי מעט.אם נתון לי המבנה הבא :struct complicated{char** p;char arr[7];};מה למעשה מציין המצביע P, מה נותנות שתי הכוכביות?בהמשך לזה אחרי שהוגדר טיפוס חדש כמבנה ישנה גם השורה הבא שאני לא מבין מה היא עושה בעצם:(&com)->arr[i]=*com.p[e[i]];com הוא משתנה שהוגדר כמבנה הנתון.תודה רבה מראש.
פורסם 2009 בינואר 2216 שנים **char הוא מצביע למצביע ל-char. משתמשים בזה, לדוגמה, כשאתה רוצה להחזיק מערך של מצביעים (נניח, אם אתה רוצה ליצור מערך דו-מימדי של char, כשאתה לא יודע מראש את הגודל שלו).השורה שאתה שואל לגביה, אז ככה - לגבי אגף שמאל:אם a הוא מצביע ל-struct מסוים בעל שדה b, אז הביטוי הזה:a->bשקול לביטוי הזה:(*a).bהפעולה & היא הפעולה ההפוכה לפעולה *, כלומר:*(&com)זה פשוט כמו לכתוב com.הקטע של [arr[i אמור להיות ברור.אגף ימין:אפשר להתייחס לכל מצביע בתור מערך, ולהיפך. כלומר, אם יש לך מצביע p, אז הביטוי הזה:p[i]שקול לביטוי:*(p+i)כלומר להתקדם i צעדים מהמקום אליו מצביע p, ואז לראות מה יושב בתא הזה.במקרה הזה, com.p פשוט מתייחסים ל-com.p בתור מערך וניגשים לתא שנמצא במקום ה-[e[i שבו.com.p הוא מערך של מצביעים ל-char, אז אפשר לעשות לערך שבפנים dereference (כלומר להפעיל עליו *).אני מקווה שעשיו קצת יותר מובן מה השורה עושה.
פורסם 2009 בינואר 2316 שנים מחבר תודה רבה על העזרה וההסבר.שכחתי רק לשאול גם אם כותבים char* d[7] האם הכוונה היא מערך של מצביעים כפי שאמרת?ודבר נוסף, אם יש לי את התנאי הזה: for ( com.p=d, q=b; q< b+7; q++) איך אפשר להבין את שני הביטויים הראשונים משמאל?תודה רבה שוב פעם.
פורסם 2009 בינואר 2416 שנים אם כבר הועלה נושא על מבנים, אז יש לי שאלה אחרת באותו נושא:אני צריך לשלוח שני מבנים לפונקציה מסויימת איך עושים זאת מבחינת סינטקס?
פורסם 2009 בינואר 2516 שנים מחבר ערב טוב,אני מנסה כבר יומיים לפתור את השאלה שנתנו לי ואני לא מצליח, אני אעלה אותה במלואה ואשמח אם תוכלו לעזור לי בהבנה שלה.char b[] = {'i', 'o', 'n', 'n', 'm', 'g', 'r'};int e[] = {4, 1, 6, 2, 0, 3, 5};char* q;char* d[7];int i = 0;struct complicated{char** p;char arr[7];};typedef struct complicated Complicated;Complicated com;for (com.p=d, q=b; q < b+7; q++){d[i]=q;i++;}for (i=0; i < 7; i++){(&com)->arr[i]=*com.p[e[i]];}הביטוי הינו מצביע, רשמו את מושא הצבעתו, לדוגמה, , בא הבאי הביטויי A כתבו את ער.&x רישמו ,x- מצביע ל באcom.arr[4] _______________________*(&com)->p[3] _______________________*(q-1) _______________________?com.arr[] A המער B מהו תוכהבנתי את מה שרשמתם לגבי מה ששאלתי, אבל אני לא מצליח להגיע לדברים שמבקשים ממני לעשות, אני לא רואה את הקשר בין החלקים השונים של התוכנית. למשל, com.arr[4] אמור לקבל את הערך שיש בחלק P של המערך שהוא כביכול מצביע, אבל לכל אורך התוכנית החלק P הזה לא קיבל שום ערך חוץ מבתנאי הראשון וממנו אי אפשר לדעת מהו הערך הזה עצמו..תודה רבה מראש.
פורסם 2009 בינואר 2516 שנים למה אי אפשר לדעת ? P מצביע על D ולכן כל המניפולציות שעושים על D יראו דרך P. תריץ debugger נורמלי על התוכנית ותקרא מה קורה שם שלב שלב.
ארכיון
דיון זה הועבר לארכיון ולא ניתן להוסיף בו תגובות חדשות.