פורסם 2011 במאי 3014 שנים שלום,יש לי שאלה מעבודה שאני לא מבין את הגיון הלוגי מאחורה: "רשום תוכנית שתקלוט 3 מערכים מטיפוס שלם. כל מערך בן 5 איברים. בעזרת מערך של מחוונים המקבל את הכתובת של 3 המערכים, מצא מיהו המספר הגדול בכל 3 המערכים וכמה פעמים הוא מופיע."השאלה שלי היא בשביל מה צריכים מערך של מצביעים, אם אפשר להשתמש במצביע אחד שכל פעם אני אתן לו את הערך התחלתי של כל מערך וישמור על המספר הגדול בתוך משתנה BIG וכמות הפעמיים במשתנה C_BIG?ואם אפשר, אני אשמח מאוד לדוגמא של איך משתמשים במערך מסוג פיונטרים (לא הגענו לחומר הזה בשיעור ולא מצאתי באינטרנט שימושים\דוגמאות לשימוש במערכים של מצביעים - למרות שמחר המבחן :s05: ).תודה רבה
פורסם 2011 במאי 3014 שנים הדוגמה שלהם באמת לא כל כך טובה, כי כמו שאמרת אין שום צורך בכלל לשמור את כל הנתונים.אבל נניח שהחלק בתוכנה שקורא את הנתונים לתוך המערכים יושב בנפרד מהחלק בתוכנה שמנתח אותם (מוציא את המספר הגדול ביותר וכו'). בתוכנה רגילה זה דבר מאוד סביר (ואפילו מומלץ) בסך הכל. אז אתה צריך שתהיה לך פונקציה שיודעת לטפל בכל הנתונים אחרי שהם כבר נקראו. על מנת לקבל את הנתונים הללו, היא צריכה לקבל מערך של מערכים - דהיינו, מערך של מצביעים (להזכירך, מערך הוא בעצמו מצביע).משתמשים במערך של מצביעים בדיוק כמו משתמשים במערך של איברים מכל טיפוס אחר - כשמכניסים ומוציאים איברים מהמערך רק צריך לוודא שהם מהטיפוס המתאים (כלומר, אם זה מערך של *int אז האיברים שנכנסים ויוצאים ממנו צריכים להיות מטיפוס *int).
פורסם 2011 במאי 3014 שנים מחבר מחיפוש ברשת על מערך של פוינטרים עולה הנושא של הקצאת זיכרון (דינמאי) ע"י פקודה: c[i]=(int *)malloc(20* sizeof(int));אשמח מאוד לתירגום הפקודה.
פורסם 2011 במאי 3014 שנים יש צורך בהקצאה דינאמית רק אם אינך יודע את הגודל הדרוש מראש.במקרה שלך אתה יודע (3 מערכים בגודל 5 כל אחד).
פורסם 2011 במאי 3114 שנים שים לב שאתה צריך ליצור את המערך שלך בצורה רגילה בגודל של 3 * 5 (זו מטריצה למעשה), ורק לשלוח את הכתובת של המטריצה שלך לפונקציה.זה צריך להראות משהו כזה:#define MAT_WIDTH (5)#define MAT_HEIGHT (3)void my_func_with_mat_param(int mat_param[][MAT_WIDTH], int size){ int i = 0, j = 0; for (i = 0; i < size; ++i) { for (j = 0; j < MAT_WIDTH; ++j) { /* do some more things here */ mat_param[j] = (i + 1) * (j + 1); } }}int main(){ int my_arr[MAT_HEIGHT][MAT_WIDTH] = { { 0 } }; /* do things with the matrix */ my_func_with_mat_param(my_arr, MAT_HEIGHT); return 0;}
פורסם 2011 ביוני 214 שנים מחבר אתה בטוח שצריך פה מטריצה?בנוסף לא ראיתי איכן מערך הפוינטרים מצורף והשימוש בו..שוב תודה.
ארכיון
דיון זה הועבר לארכיון ולא ניתן להוסיף בו תגובות חדשות.