עבור לתוכן

מדריך: מצביעים בשפת C

Featured Replies

פורסם

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

http://www.f2h.co.il/2042545784

פורסם

סחתיין :xyxthumbs:

אבל יש לי כמה הערות/תיקונים.

בעמוד הראשון:

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

זו לא שגיאת קומפילציה, זו שגיאת זמן ריצה. קומפיילרים מסויימים יזהירו שהמשתנה p לא מאותחל לפני שניגשים אליו, אבל יסכימו לקמפל את הקוד לרוב.

בעמוד 3, "שינוי ערכו של פרמטר המועבר לפונקציה", הייתי ממליץ לך לתת דוגמה של מה היה קורה אם הפונקציה לא הייתה מקבלת מצביע, אלא פשוט int (ושהיא בעצם לא מסוגלת לשנות את הפרמטר באמת).

בעמוד 4:

היתרון בהעברת מצביע לתו כפרמטר לפונקציה, הוא שמצביע תופס פחות זיכרון מאשר כל בלוק הזיכרון של string , שגודלו 50 bytes , לעומת זאת המצביע לתו תופס רק 4 bytes.

זה מאוד לא מדויק. כשמעבירים מערך לפונקציה, לא משנה איך מעבירים אותו, מועבר רק מצביע. כלומר הפונקציות הבאות שקולות (בשני המקרים מועבר רק מצביע):

void func(char* str);
void func(char str[50]);

ועוד משהו שכדאי לך להוסיף - את ה-* אפשר להצמיד לטיפוס או לשם של המשתנה, כלומר השורות הבאות שקולות:

int* p;
int *p;

אבל אם מגדירים מספר מצביעים באותה השורה, אז חייבים לשים * לפני כל אחד מהם. כלומר:

int *p, *q;

ולא

int* p, q;

(במקרה השני, q פשוט יהיה int ולא מצביע)

פורסם

מדריך חמוד ויפה

תתיחס להערות של שניצל באמת

מה שחשוב באמת בפוינטרים זה להבין את השימוש והכוח שיש בהם

כל אחד יודע מה פוינטר יעשה כך וכך, אבל הרבה לא יודעים להשתמש בהם

ישר כוח

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

ארכיון

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

דיונים חדשים