עבור לתוכן

מערכים ומצביעים.

Featured Replies

פורסם

אני לומד בספר שלי על מערכים ומצביעים ועל הקשר שבינהם.

וצריך לעשות תרגיל עם פונקציה.

כלומר לשלוח מערך לפונקציה כמצביע.

נגיד ככה:

void lol(int *ptr)
{
......
}

int main()
{
int mar[10];
lol(mar);
}

בספר כתוב שהאיבר הראשון במערך (0) הוא גם מצביע לכן אפשר לעשות ככה.

אבל זה כותב שגיאה.

תודה לעוזרים.

פורסם

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

פורסם

האיבר הראשון במערך הוא לא מצביע.

או שבספר כתוב משהו לא נכון, או שהבנת אותו לא נכון.

המערך עצמו הוא מצביע לאיבר הראשון.

מה זה אומר?

נניח שהגדרתי מערך בגודל 10:

int a[10];

אז לעשות [a[0 ולעשות a* זה בדיוק אותו דבר (המעבד לא מבדיל ביניהם).

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


int f(int *x) {
// do some stuff
}

int a[10];
f(a); // send an array as a pointer

פורסם

האיבר הראשון במערך הוא לא מצביע.

או שבספר כתוב משהו לא נכון, או שהבנת אותו לא נכון.

המערך עצמו הוא מצביע לאיבר הראשון.

מה זה אומר?

נניח שהגדרתי מערך בגודל 10:

int a[10];

אז לעשות [a[0 ולעשות a* זה בדיוק אותו דבר (המעבד לא מבדיל ביניהם).

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


int f(int *x) {
// do some stuff
}

int a[10];
f(a); // send an array as a pointer

תוסיף להסבר של שניצל שאם אתה מפעיל את האופרטור ++ על המצביע בפונקציה את למעשה מגיע לאיבר הבא במערך, אבל כמו שאמרתי לא ברור מה הבעיה שאתה נתקל בה, התקלה הכי שכיחה במקרים האלה ב- C זה שאתה פונה בעזרת המצביע לשטח בזכרון שלא הוגדר עבור התכנית שלך , כמו אם הפעלת את אופרטור הקידום ++ על המערך בן 10 איברים יותר מ- 10 פעמים ומנסה לגשת לשטח בזכרון שמעבר לגבולות שנקבעו למערך

פורסם

נכון, אבל במקרה הזה אתה לא תראה את השגיאה בשלב הקומפילציה של התכנית, אלא רק כשתריץ אותה.

בכל מקרה, Paci - מה השגיאה שהוא מוציא לך?

פורסם
  • מחבר

נראה לי שהסתדרתי.

תודה לכולם על העזרה. (:

ארכיון

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

דיונים חדשים