פורסם 2009 בדצמבר 1515 שנים צהריים טובים אני רוצה ליצור תת-תוכנית אליה אני שולח n (מספר טבעי), שני מערכים בגודל n, ו- x מספר כלשהו כשבתור פלט אני מקבל y מספר אחר התת-תוכנית משתמשת בקלט על מנת לחשב על y אך לא משנה את הקלט ומחזירה לתכנית שכחתי איך אני רושם את 'השליחה' במיוחד כשזה נוגע לשליחת מערך של מספרים ? (המערכים הם בגודל n+1 לצורך העניין וכבר מכילים ערכים) y = calc_y(n, x[i], y[i], x);
פורסם 2009 בדצמבר 1515 שנים מעבירים מערכים בדיוק כמו שמעבירים משתנים רגילים (כלומר נותנים את השם של המשתנה שמחזיק את המערך וזהו). חוץ מזה, תחליט - x זה מספר או מערך? הוא לא יכול להיות גם וגם...
פורסם 2009 בדצמבר 1515 שנים מחבר תתעלם מה-x בסוף, אני אסמן אותו בשם אחראז מה אני רושם עבור מערך x בגודל n? x[n] או פשוט x ?ואני זוכר שהיה משהו עם כוכבית *, זה כשאני רוצה לשנות ערכים בתור המערך שאני שולח?
פורסם 2009 בדצמבר 1515 שנים בשביל להגדיר פונקציה שמקבלת מערך ואורך:int f(int[] array, int n);אוint f(int* array, int n);בשביל לקרוא לפונקציה כזו:int arr[N];int y;y = f(arr, N);
פורסם 2009 בדצמבר 1915 שנים מחבר היי, מצטער שאני נזכר כל כך מאוחר אבל בשורה הראשונה שכתבת בשביל להגדיר פונקציה שמקבלת מערך למה כתוב int[] array ? אף פעם לא ראיתי את זה כתוב בצורה כזאת.. נגיד שסתם הגדרתי גודל אוניברסלי N גדול בתחילת הקוד לכל המערכים ובמהלך התכנית העיקרית אני מגיע ל n קטן יותר שבאמת מכיל את אורך המערך שאני משתמש בו, ואני רוצה לשלוח מערך מסוג double בגודל n וסתם משתנה x מסוג double לתת-תכנית אז איך אני כותב את ההגדרה של התת-תכנית ואיך את הקריאה?האם אפשר לכתוב ככה את ההגדרה של התת-תכנית?double calc_pol(double *x, double *y, int n, double x_p);
פורסם 2009 בדצמבר 1915 שנים היי, מצטער שאני נזכר כל כך מאוחר אבל בשורה הראשונה שכתבת בשביל להגדיר פונקציה שמקבלת מערך למה כתוב int[] array ? זה שלא ראית לא אומר שזה לא קיים כמו שאמרתי, אלה הגדרות (כמעט) שקולות. נגיד שסתם הגדרתי גודל אוניברסלי N גדול בתחילת הקוד לכל המערכים ובמהלך התכנית העיקרית אני מגיע ל n קטן יותר שבאמת מכיל את אורך המערך שאני משתמש בו, ואני רוצה לשלוח מערך מסוג double בגודל n וסתם משתנה x מסוג double לתת-תכנית אז איך אני כותב את ההגדרה של התת-תכנית ואיך את הקריאה? בשביל להעביר מערך לפונקציה, כל מה שאתה צריך זה להעביר את ה-*int או ה-[]int. אתה לא חייב להעביר את הגודל שלו לפונקציה, אבל הפונקציה צריכה איכשהו לדעת איפה המערך מסתיים, כדי שתוכל לעבור עליו בלי לגלוש מהגבולות שלו. דרך אחת כזו היא להעביר את גודל המערך לפונקציה, בנוסף למערך. דרך אחרת, לדוגמה, נמצאת בשימוש בכל הפונקציות שמטפלות במחרוזות - במקום להעביר את גודל המערך, המערך עצמו מכיל איפשהו את התו '0\' שמציין את סופו. אם אתה רוצה להעביר פרמטר נוסף x לפונקציה, פשוט תוסיף את ה-double x בחתימה של הפונקציה, לדוגמה: int f(int* array, int n, double x); לסיכום: אין שום דבר מיוחד בפרמטר שהוא מערך, ואין שום דבר מיוחד בפרמטר שמציין את האורך שלו. אלה פרמטרים כמו כל פרמטר אחר לפונקציה. נ.ב. אין כזה דבר תת-תוכנית. יש "פונקציה" או בעברית "שיגרה".
פורסם 2009 בדצמבר 1915 שנים מחבר אז בעצם כשאני מעביר מערך לפונקציה אני מעביר את כולו ואני לא חייב לציין בהעברה את הגודל שלו, אה?העברת הגודל שלו (n) היא בשבילי כדי שאוכל 'לעבוד' עליו בפונקציה מבלי לחרוג מגבול גודלו?
פורסם 2009 בדצמבר 1915 שנים בדיוק.יש מקרים שבהם כן צריך לדעת את גודל המערך בהעברה (כשמעבירים מערכים רב-מימדיים).
ארכיון
דיון זה הועבר לארכיון ולא ניתן להוסיף בו תגובות חדשות.