עבור לתוכן

רענון קטן בשפת C - שאלה

Featured Replies

פורסם

צהריים טובים ;)

אני רוצה ליצור תת-תוכנית אליה אני שולח n (מספר טבעי), שני מערכים בגודל n, ו- x מספר כלשהו כשבתור פלט אני מקבל y מספר אחר

התת-תוכנית משתמשת בקלט על מנת לחשב על y אך לא משנה את הקלט ומחזירה לתכנית

שכחתי איך אני רושם את 'השליחה' במיוחד כשזה נוגע לשליחת מערך של מספרים ? (המערכים הם בגודל n+1 לצורך העניין וכבר מכילים ערכים)

	y = calc_y(n, x[i], y[i], x);

פורסם

מעבירים מערכים בדיוק כמו שמעבירים משתנים רגילים (כלומר נותנים את השם של המשתנה שמחזיק את המערך וזהו). חוץ מזה, תחליט - x זה מספר או מערך? הוא לא יכול להיות גם וגם...

פורסם
  • מחבר

תתעלם מה-x בסוף, אני אסמן אותו בשם אחר

אז מה אני רושם עבור מערך x בגודל n?

x[n] או פשוט x ?

ואני זוכר שהיה משהו עם כוכבית *, זה כשאני רוצה לשנות ערכים בתור המערך שאני שולח?

פורסם

בשביל להגדיר פונקציה שמקבלת מערך ואורך:

int f(int[] array, int n);

או

int f(int* array, int n);

בשביל לקרוא לפונקציה כזו:

int arr[N];
int y;
y = f(arr, N);

פורסם
  • מחבר

היי, מצטער שאני נזכר כל כך מאוחר אבל בשורה הראשונה שכתבת בשביל להגדיר פונקציה שמקבלת מערך למה כתוב int[] array ?

אף פעם לא ראיתי את זה כתוב בצורה כזאת..

נגיד שסתם הגדרתי גודל אוניברסלי N גדול בתחילת הקוד לכל המערכים ובמהלך התכנית העיקרית אני מגיע ל n קטן יותר שבאמת מכיל את אורך המערך שאני משתמש בו, ואני רוצה לשלוח מערך מסוג double בגודל n וסתם משתנה x מסוג double לתת-תכנית אז איך אני כותב את ההגדרה של התת-תכנית ואיך את הקריאה?

האם אפשר לכתוב ככה את ההגדרה של התת-תכנית?

double calc_pol(double *x, double *y, int n, double x_p);

פורסם

היי, מצטער שאני נזכר כל כך מאוחר אבל בשורה הראשונה שכתבת בשביל להגדיר פונקציה שמקבלת מערך למה כתוב int[] array ?

זה שלא ראית לא אומר שזה לא קיים :) כמו שאמרתי, אלה הגדרות (כמעט) שקולות.

נגיד שסתם הגדרתי גודל אוניברסלי N גדול בתחילת הקוד לכל המערכים ובמהלך התכנית העיקרית אני מגיע ל n קטן יותר שבאמת מכיל את אורך המערך שאני משתמש בו, ואני רוצה לשלוח מערך מסוג double בגודל n וסתם משתנה x מסוג double לתת-תכנית אז איך אני כותב את ההגדרה של התת-תכנית ואיך את הקריאה?

בשביל להעביר מערך לפונקציה, כל מה שאתה צריך זה להעביר את ה-*int או ה-[]int. אתה לא חייב להעביר את הגודל שלו לפונקציה, אבל הפונקציה צריכה איכשהו לדעת איפה המערך מסתיים, כדי שתוכל לעבור עליו בלי לגלוש מהגבולות שלו. דרך אחת כזו היא להעביר את גודל המערך לפונקציה, בנוסף למערך. דרך אחרת, לדוגמה, נמצאת בשימוש בכל הפונקציות שמטפלות במחרוזות - במקום להעביר את גודל המערך, המערך עצמו מכיל איפשהו את התו '0\' שמציין את סופו.

אם אתה רוצה להעביר פרמטר נוסף x לפונקציה, פשוט תוסיף את ה-double x בחתימה של הפונקציה, לדוגמה:

int f(int* array, int n, double x);

לסיכום: אין שום דבר מיוחד בפרמטר שהוא מערך, ואין שום דבר מיוחד בפרמטר שמציין את האורך שלו. אלה פרמטרים כמו כל פרמטר אחר לפונקציה.

נ.ב. אין כזה דבר תת-תוכנית. יש "פונקציה" או בעברית "שיגרה".

פורסם
  • מחבר

אז בעצם כשאני מעביר מערך לפונקציה אני מעביר את כולו ואני לא חייב לציין בהעברה את הגודל שלו, אה?

העברת הגודל שלו (n) היא בשבילי כדי שאוכל 'לעבוד' עליו בפונקציה מבלי לחרוג מגבול גודלו?

פורסם

בדיוק.

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

ארכיון

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

דיונים חדשים