1 / 31

עקרונות התכנות

עקרונות התכנות. תרגול מספר 10. על מה נדבר?. מצביעים מה זה? איך? למה? מצביעים ומערכים אריתמטיקה של מצביעים מערך של מצביעים מצביעים ופונקציות. משתנים וזכרון. לכל טיפוס בשפה יש גודל לדוגמה: char הוא בגודל 1B int הוא בגודל 4B double הוא בגודל 8B

Download Presentation

עקרונות התכנות

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. עקרונות התכנות תרגול מספר 10

  2. על מה נדבר? • מצביעים • מה זה? איך? למה? • מצביעים ומערכים • אריתמטיקה של מצביעים • מערך של מצביעים • מצביעים ופונקציות עקרונות התכנות – תשס"ט

  3. משתנים וזכרון • לכל טיפוס בשפה יש גודל • לדוגמה: • char הוא בגודל 1B • int הוא בגודל 4B • double הוא בגודל 8B • הפונ' sizeof() מחזירה את הגודל בתאים של משתנה מסוג כלשהו, אין לנו שימוש מיוחד בה פרט לדוגמא עקרונות התכנות – תשס"ט

  4. משתנים וזכרון (המשך) • בשלב הגדרת המשתנה מוקצה המקום המתאים לו בזכרון המחשב. • שלושה דברים יש לדעת על משתנה: עקרונות התכנות – תשס"ט

  5. משתנים וזכרון (המשך) • בעת הרצת התוכנית מערכת ההפעלה קובעת בשבילנו את מיקום המשתנים בזכרון • אולם, לעיתים נרצה לדעת את כתובות אלו • כדי לבצע זאת נשתמש באופרטור & עקרונות התכנות – תשס"ט

  6. האופרטור & • כאשר מפעילים את האופרטור & על משתנה אנו מבקשים להתיחס לכתובתו ולא לערכו עקרונות התכנות – תשס"ט

  7. מצביעים • לאחר שגילינו את כתובתו של משתנה מסוים בזכרון נרצה "להחזיק" את כתובת זו כלומר, לבצע בה שימוש. • לכן הוגדרה קבוצה חדשה של טיפוסים – מצביעים • מצביע הינו משתנה שמכיל בתוכו כתובת מזכרון המחשב • במילים אחרות – משתנה זה מצביע על משתנה אחר עקרונות התכנות – תשס"ט

  8. מצביעים (המשך) • לדוגמה: • הגדרנו שני משתנים מטיפוס intבזכרון – a ו-b • ברצוננו להגדיר לכל אחד מהם מצביע • ערך המצביע ל-a הוא הכתובת של a • ערך המצביע ל-b הוא הכתובת של b עקרונות התכנות – תשס"ט

  9. האופרטור * • לאופרטור * יש שני תפקידים: • הגדרת מצביע • גישה לערך המוצבע עקרונות התכנות – תשס"ט

  10. האופרטור * - הגדרת מצביע • הגדרת מצביע תתבצע באופן הבא: int *a; • כלומר, אנו מגדירים מצביע למשתנה מטיפוס int • באותה צורה ניתן להגדיר מצביע לכל טיפוס אחר • גודלו של המצביע תלוי בגודל זכרון המחשב בלבד • בד"כ גודלו 4B עקרונות התכנות – תשס"ט

  11. האופרטור * גישה לערך המוצבע • לעיתים נרצה לגשת לערך עליו אנו מצביעים • גישה זו תתבצע ע"י האופרטור * באופן הבא: הגדרת משתנה מטיפוס int ואיתחולו ל-1 הגדרת מצביע למשתנה מטיפוס int ואיתחולו לכתובתו של x. כלומר px מצביע על x הדפסת ערכו של px שהוא כתובתו של x הדפסת הערך המוצבע ע"י px כלומר הדפסת ערכו של x עקרונות התכנות – תשס"ט

  12. סיכום ביניים • לאופרטור & יש תפקיד אחד והוא לקבל את הכתובת של משתנה אחר • לאופרטור * יש שני תפקידים: • להגדיר משתנה מטיפוס מצביע • לגשת לערך עליו אנו מצביעים עקרונות התכנות – תשס"ט

  13. הערות • לכל טיפוס יש צורך להגדיר מצביע משלו • ניתן להתיחס ל-int* או float* (וכנ"ל לגבי שאר הטיפוסים שהכרנו) כטיפוסים. • אם ננסה להגדיר מספר משתנים בצורה הבאה: • הקומפיילר יפרש זאת כ: • לכן הדרך "היפה" והברורה היא כך: x הוא מצביע ל-int ו-y ו-z הם מטיפוס int שלושת המשתנים הם מצביעים ל-int עקרונות התכנות – תשס"ט

  14. דוגמה 1 • איזה מההשמות הבאות אינן חוקיות intint* int*  int* int int int*  int int*  int עקרונות התכנות – תשס"ט

  15. דוגמה 2 • בהינתן ארבעה משתנים: • int i1, i2; • float f1, f2; • הדפיסו את ערכם וכתובתם למסך בעזרת מצביע עקרונות התכנות – תשס"ט

  16. דוגמה 2 (פתרון) עקרונות התכנות – תשס"ט

  17. דוגמה 3 • מה תדפיס התוכנית? px ו-py מצביעים על x ו-y בהתאמה. השורה *px = *px + *py משמעה: כך את הערך ש-px מצביע עליו (3) ותחבר אותו לערך ש-py מצביע עליו (4). את התוצאה (7) שים במקום בזכרון ש-px מצביע עליו – כלומר ב-x. לכן ערכו של x הוא 7. עקרונות התכנות – תשס"ט

  18. דוגמה 4 • האם הקוד הבא בסדר? • שורה שניה תגרום לקריסת התוכנית אנחנו מנסים לשים ערך במקום אליו p מצביע. לאן p מצביע? לא ניתן לדעת. לא איתחלנו אותו ולכן הוא מצביע למקום כלשהו בזכרון. • שימו לב, אין כאן טעות קומפילציה אך התוכנית תקרוס בזמן ריצה עקרונות התכנות – תשס"ט

  19. מצביעים ומערכים • למדנו להגדיר מערך: • שם המערך arr הוא מצביע קבועהמצביע לאיבר הראשון במערך. • גישה לאברי המערך: • גישה זאת אומרת למחשב: "גש לאן שמצביע arr, זוז 3 צעדים (offset), והבא את הערך היושב בזכרון". עקרונות התכנות – תשס"ט

  20. מצביעים ומערכים (המשך) עקרונות התכנות – תשס"ט

  21. מצביעים ומערכים (המשך) • ניתן להשתמש באריתמטיקה של מערכים ואריתמטיקה של מצביעים בצורה משולבת עקרונות התכנות – תשס"ט

  22. אריתמטיקה של מצביעים • הפעולות הבאות חוקיות במצביעים: • קידום והפחתה עצמית (p++, ++p, p--, --p) • חיבור וחיסור בין מצביעים ובין מצביע למספר. • פעולות לוגיות: <, >, >=, <=, ==. • דוגמה. נניח int *p המצביע על מקום מסויים במערך. הפעולה p++ תדע לקדם את המצביע בארבעה בתים (מכיוון שגודל int הוא 4 בתים). עקרונות התכנות – תשס"ט

  23. דוגמה 5 • נתון מערך a ומצביע p המאותחל לתחילת המערך 2000 2008 37 2000 4028 39 12 32 עקרונות התכנות – תשס"ט

  24. דוגמה 6 • מהו פלט הקוד הבא? עקרונות התכנות – תשס"ט

  25. דוגמה 7 • מהו פלט הקוד הבא? עקרונות התכנות – תשס"ט

  26. מערך של מצביעים • ראינו שניתן ליצור מערך של כל טיפוס בשפה • כלומר, ניתן גם ליצור מערך של מצביעים. יצירת מערך של איברים שהטיפוס שלהם הוא int* כלומר מצביעים ל-int איתחול אברי המערך בכתובת המשתנים הדפסת הערך המוצבע ע"י אופרטור * עקרונות התכנות – תשס"ט

  27. מצביעים ופונקציות • אחד השימושים הנפוצים במצביעים הוא בפרמטר של פונקציות. • העברת מצביע לפונקציה מעתיקה את הכתובת ולכן כל שינוי בפרמטרים אלו בתוך הפונקציה משתנה גם מחוץ לפונקציה. עקרונות התכנות – תשס"ט

  28. דוגמה 8 עקרונות התכנות – תשס"ט

  29. דוגמה 9 עקרונות התכנות – תשס"ט

  30. דוגמה 10 • פונקציה שמחזירה מצביע עקרונות התכנות – תשס"ט

  31. שאלות ?? עקרונות התכנות – תשס"ט

More Related