פורסם 2005 בדצמבר 120 שנים אני לומד בספר שלי על מערכים ומצביעים ועל הקשר שבינהם.וצריך לעשות תרגיל עם פונקציה.כלומר לשלוח מערך לפונקציה כמצביע.נגיד ככה:void lol(int *ptr){......}int main(){int mar[10];lol(mar);}בספר כתוב שהאיבר הראשון במערך (0) הוא גם מצביע לכן אפשר לעשות ככה.אבל זה כותב שגיאה.תודה לעוזרים.
פורסם 2005 בדצמבר 120 שנים האיבר הראשון במערך הוא לא מצביע.או שבספר כתוב משהו לא נכון, או שהבנת אותו לא נכון.המערך עצמו הוא מצביע לאיבר הראשון.מה זה אומר?נניח שהגדרתי מערך בגודל 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
פורסם 2005 בדצמבר 120 שנים האיבר הראשון במערך הוא לא מצביע.או שבספר כתוב משהו לא נכון, או שהבנת אותו לא נכון.המערך עצמו הוא מצביע לאיבר הראשון.מה זה אומר?נניח שהגדרתי מערך בגודל 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 פעמים ומנסה לגשת לשטח בזכרון שמעבר לגבולות שנקבעו למערך
פורסם 2005 בדצמבר 220 שנים נכון, אבל במקרה הזה אתה לא תראה את השגיאה בשלב הקומפילציה של התכנית, אלא רק כשתריץ אותה.בכל מקרה, Paci - מה השגיאה שהוא מוציא לך?
ארכיון
דיון זה הועבר לארכיון ולא ניתן להוסיף בו תגובות חדשות.