Upload
illana-christensen
View
50
Download
0
Embed Size (px)
DESCRIPTION
עקרונות התכנות. תרגול מספר 10. על מה נדבר?. מצביעים מה זה? איך? למה? מצביעים ומערכים אריתמטיקה של מצביעים מערך של מצביעים מצביעים ופונקציות. משתנים וזכרון. לכל טיפוס בשפה יש גודל לדוגמה: char הוא בגודל 1B int הוא בגודל 4B double הוא בגודל 8B - PowerPoint PPT Presentation
Citation preview
10תרגול מספר
עקרונות התכנות
על מה נדבר?מצביעים
?מה זה? איך? למהמצביעים ומערכיםאריתמטיקה של מצביעיםמערך של מצביעיםמצביעים ופונקציות
2עקרונות התכנות – תשס"ט
משתנים וזכרון לכל טיפוס בשפה יש
גודל:לדוגמה
char 1 הוא בגודלBint 4 הוא בגודלBdouble 8 הוא בגודלB
'הפונsizeof)( מחזירה את הגודל בתאים של
משתנה מסוג כלשהו, אין לנו שימוש מיוחד בה פרט
לדוגמא3 עקרונות התכנות – תשס"ט
משתנים וזכרון )המשך( בשלב הגדרת המשתנה מוקצה
המקום המתאים לו בזכרון המחשב.
שלושה דברים יש לדעת עלמשתנה:
4
c = ‘a’4010
4011
4012
4013i = 1
4014
4015
4016
4017
4018
4019
4020
4021
d = 1.0
4022
4023
4024
4025
dicשם
1.01‘a’ערך
401540114010כתוב
ת
עקרונות התכנות – תשס"ט
משתנים וזכרון )המשך( בעת הרצת התוכנית מערכת ההפעלה קובעת
בשבילנו את מיקום המשתנים בזכרוןאולם, לעיתים נרצה לדעת את כתובות אלו& כדי לבצע זאת נשתמש באופרטור
5 עקרונות התכנות – תשס"ט
האופרטור & כאשר מפעילים את האופרטור & על משתנה אנו
ערכול ולא כתובתולמבקשים להתיחס
6 עקרונות התכנות – תשס"ט
מצביעים לאחר שגילינו את כתובתו של משתנה מסוים בזכרון
נרצה "להחזיק" את כתובת זו כלומר, לבצע בה שימוש.
לכן הוגדרה קבוצה חדשה של טיפוסים – מצביעים מצביע הינו משתנה שמכיל בתוכו כתובת מזכרון
המחשב על משתנה מצביעבמילים אחרות – משתנה זה
אחר
7 עקרונות התכנות – תשס"ט
מצביעים )המשך(:לדוגמה
הגדרנו שני משתנים מטיפוסint
b ו-aבזכרון – ברצוננו להגדיר לכל אחד מהם
מצביע המצביע ל-ערךa הוא
a של הכתובת המצביע ל-ערךb הוא
b של הכתובת
8
4010
4011
4012int a = 2
4013
4014
4015
4016int b = 5
4017
4018
4019
4020Pointer To
4010
4021
4022
4023
4024Pointer to
4014
4025
עקרונות התכנות – תשס"ט
האופרטור *:לאופרטור * יש שני תפקידים
הגדרת מצביעגישה לערך המוצבע
9 עקרונות התכנות – תשס"ט
האופרטור * - הגדרת מצביע:הגדרת מצביע תתבצע באופן הבא int *a; כלומר, אנו מגדירים מצביע למשתנה מטיפוסintבאותה צורה ניתן להגדיר מצביע לכל טיפוס אחרגודלו של המצביע תלוי בגודל זכרון המחשב בלבד 4בד"כ גודלוB
10 עקרונות התכנות – תשס"ט
האופרטור * גישה לערך המוצבעלעיתים נרצה לגשת לערך עליו אנו מצביעים :גישה זו תתבצע ע"י האופרטור * באופן הבא
11
intהגדרת משתנה מטיפוס 1ואיתחולו ל-
הגדרת מצביע למשתנה מטיפוס int ואיתחולו לכתובתו של x .
x מצביע על pxכלומר שהוא pxהדפסת ערכו של
xכתובתו של pxהדפסת הערך המוצבע ע"י xכלומר הדפסת ערכו של
עקרונות התכנות – תשס"ט
סיכום ביניים לאופרטור & יש תפקיד אחד
של הכתובתוהוא לקבל את משתנה אחר
:לאופרטור * יש שני תפקידים להגדיר משתנה מטיפוס
מצביע עליו אנו לערךלגשת
מצביעים
12 עקרונות התכנות – תשס"ט
הערותלכל טיפוס יש צורך להגדיר מצביע משלו-ניתן להתיחס לint* או float* וכנ"ל לגבי שאר(
הטיפוסים שהכרנו( כטיפוסים.:אם ננסה להגדיר מספר משתנים בצורה הבאה
:הקומפיילר יפרש זאת כ :לכן הדרך "היפה" והברורה היא כך
13
x-הוא מצביע ל int-ו y-ו z הם intמטיפוס
שלושת המשתנים הם מצביעים intל-
עקרונות התכנות – תשס"ט
1דוגמה איזה מההשמות הבאות אינן
חוקיות
14
int int*
int* int*
int int
int* int
int* int
עקרונות התכנות – תשס"ט
2דוגמה :בהינתן ארבעה משתנים
int i1, i2;float f1, f2;
הדפיסו את ערכם וכתובתם למסך בעזרת מצביע
15 עקרונות התכנות – תשס"ט
)פתרון(2דוגמה
16 עקרונות התכנות – תשס"ט
3דוגמה ?מה תדפיס התוכנית
17
px-ו py מצביעים על x-ו y בהתאמה.
px = *px + *py*השורה משמעה:
מצביע עליו pxכך את הערך ש- py( ותחבר אותו לערך ש-3)
( 7(. את התוצאה )4מצביע עליו ) מצביע pxשים במקום בזכרון ש-
.xעליו – כלומר ב-
.7 הוא xלכן ערכו של עקרונות התכנות – תשס"ט
4דוגמה ?האם הקוד הבא בסדר
18
שורה שניה תגרוםלקריסת התוכנית
אנחנו מנסים לשים ערך במקום מצביע? לא p מצביע. לאן pאליו
ניתן לדעת. לא איתחלנו אותו ולכן הוא מצביע למקום כלשהו בזכרון.
שימו לב, אין כאן טעות קומפילציהאך התוכנית תקרוס בזמן ריצה
עקרונות התכנות – תשס"ט
מצביעים ומערכים:למדנו להגדיר מערך שם המערךarr המצביע לאיבר מצביע קבוע הוא
הראשון במערך. :גישה לאברי המערך גישה זאת אומרת למחשב: "גש לאן שמצביעarr ,
(, והבא את הערך היושב offset צעדים )3זוז בזכרון".
19 עקרונות התכנות – תשס"ט
מצביעים ומערכים )המשך(
20 עקרונות התכנות – תשס"ט
מצביעים ומערכים )המשך( ניתן להשתמש באריתמטיקה של מערכים
ואריתמטיקה של מצביעים בצורה משולבת
21
array &array[0]
*array array[0]
עקרונות התכנות – תשס"ט
אריתמטיקה של מצביעים:הפעולות הבאות חוקיות במצביעים
( קידום והפחתה עצמיתp++, ++p, p--, --p).חיבור וחיסור בין מצביעים ובין מצביע למספר :פעולות לוגיות< ,> ,=> ,=< ,==.
דוגמה. נניחint *p המצביע על מקום מסויים תדע לקדם את המצביע ++pבמערך. הפעולה
בתים(.4 הוא int בתים )מכיוון שגודל בארבעה
22 עקרונות התכנות – תשס"ט
5דוגמה נתון מערךa ומצביע pהמאותחל לתחילת המערך
23
2000
2008
37
2000
4028
39
12
32
עקרונות התכנות – תשס"ט
6דוגמה מהו פלט הקוד
הבא?
24 עקרונות התכנות – תשס"ט
7דוגמה ?מהו פלט הקוד הבא
25 עקרונות התכנות – תשס"ט
מערך של מצביעיםראינו שניתן ליצור מערך של כל טיפוס בשפה.כלומר, ניתן גם ליצור מערך של מצביעים
26
יצירת מערך של איברים שהטיפוס כלומר מצביעים *intשלהם הוא
intל-
איתחול אברי המערך בכתובת המשתנים
הדפסת הערך המוצבע ע"י אופרטור *
עקרונות התכנות – תשס"ט
מצביעים ופונקציות אחד השימושים הנפוצים במצביעים הוא בפרמטר
של פונקציות. הכתובתהעברת מצביע לפונקציה מעתיקה את
ולכן כל שינוי בפרמטרים אלו בתוך הפונקציה משתנה גם מחוץ לפונקציה.
27 עקרונות התכנות – תשס"ט
8דוגמה
28 עקרונות התכנות – תשס"ט
9דוגמה
29 עקרונות התכנות – תשס"ט
10דוגמה פונקציה שמחזירה
מצביע
30 עקרונות התכנות – תשס"ט
שאלות ??
31 עקרונות התכנות – תשס"ט