המצגת נטענת. אנא המתן

המצגת נטענת. אנא המתן

הרצאה 02 סוגי משתנים קרן כליף.

מצגות קשורות


מצגת בנושא: "הרצאה 02 סוגי משתנים קרן כליף."— תמליל מצגת:

1 הרצאה 02 סוגי משתנים קרן כליף

2 ביחידה זו נלמד: משתנה לוקאלי (אוטומטי) משתנה גלובאלי משתנה סטטי extern
משתנה גלובאלי סטטי © Keren Kalif

3 משתנים מקומיים משתנה המוגדר בתוך בלוק (if, לולאה, פונקציה, סתם בתוך {}) נקרא משתנה מקומי (לוקאלי/אוטומטי) וטווח ההכרה שלו הוא רק בבלוק בו הוגדר ערכו של משתנה לוקאלי נשמר כל עוד אנחנו בבלוק, והוא נמחק ביציאה ממנו משתנה לוקאלי מאוחסן במחסנית של הפונקציה ערכו זבל במידה ולא אותחל משתנה שמוגדר בתוך פונקציה (גם פרמטר המתקבל) "חי" כל עוד הריצה היא בתוך הפונקציה © Keren Kalif

4 כפילות שם במשתנים מקומיים
פונקציות שונות יכולות להגדיר משתנים מקומיים בשם זהה, שכן פניה למשתנה תמיד תהייה בטווח הפונקציה בו הוגדר במידה ויש כפילות בין משתנים לוקאליים, מה שקובע זה הבלוק הפנימי ביותר דוגמא: © Keren Kalif

5 משתנים סטטיים משתנה סטטי הוא משתנה שערכו נשמר בין הקריאות השונות לפונקציה משתנה סטטי מאותחל רק בקריאה הראשונה לפונקציה בדומה למשתנים מקומיים, המשתנים הסטטיים מוכרים אך ורק בתוך הפונקציה אשר בה הם הוגדרו. משך חייהם מרגע תחילת הריצה של התוכנית ועד סיום ריצת התוכנית. מאחר ושטח הזיכרון של כל פונקציה נמחק עם היציאה ממנה, משתנים סטטיים נשמרים באזור זיכרון אחר הנקרא data-segment, הקיים לאורך כל חיי התוכנית, והם משתחררים רק עם היציאה מהתוכנית כדי להגדיר משתנה סטטי נשתמש במילת המפתח static לפני טיפוס המשתנה © Keren Kalif

6 משתנים סטטיים - דוגמא #include <stdio.h> int counter() { static int count = 0; count++; return count; } void main() printf("'counter' was called %d times\n", ); counter::count = ? 1 3 2 זיכרון ה- data segment counter() counter() counter counter() main ( line 3) main ( line 2) main ( line 1) מחסנית הקריאות © Keren Kalif

7 משתנה סטטי ברקורסיה הבעיה היא מאחר והמשתנה הסטטי אינו מתאפס עבור כל מספר מחדש, ולכן עבור המספר השני ממשיך לספור את הספרות מבלי לאפס את המונה... © Keren Kalif

8 משתנים גלובליים משתנה אשר מוגדר מחוץ לפונקציה הוא משתנה גלובלי (אינו משויך לאף פונקציה) במידה ולא אותחל ערכו 0, ולא זבל כל הפונקציות שכתובות מתחת למשתנה הגלובלי בקובץ בו הוגדר, יכולות לגשת אליו ולשנות את ערכו השימוש בו הוא בעייתי ולכן נשמר למצבים מיוחדים בלבד כל אחד יכול לשנות אותו זה פוגע ברעיון של הסתרת המידע ושכל פונקציה מסתמכת רק על נתונים שהם פנימיים לה משתנה גלובלי קיים לאורך כל חיי התוכנית מאחר ואינו משויך לאף פונקציה, הוא אינו נמצא על המחסנית, אלא על חלקת הזיכרון המשותפת לכל הפונקציות ה- data- segment © Keren Kalif

9 משתנים גלובליים - דוגמא
int global = 3; void incGlobal() { global++; printf("In function: global=%d\n", global); } void main() printf("At first, global=%d\n", global); incGlobal(); printf("After function (1), global=%d\n", global); global = 10; printf("In main after change global, global=%d\n", global); printf("After function (2), global=%d\n", global); זיכרון ה- data segment global = 10 11 4 3 זיכרון ה- heap incGlobal main מחסנית הקריאות © Keren Kalif

10 המשתנה מוכר מנקודה זו ומטה ניסיון גישה למשתנה גלובלי שהוגדר למעלה
extern יבוא משתנה שטרם הוגדר שימוש במשתנה גלובלי לפני הגדרתו שימוש במשתנה גלובלי מקובץ אחר שלא עשינו לו include התחייבות בפני הקומפיילר שהמשתנה יוגדר בהמשך. אם המשתנה לא יוגדר בהמשך תתקבל שגיאת לינקר. המשתנה מוכר מנקודה זו ומטה ניסיון גישה למשתנה גלובלי שהוגדר למעלה © Keren Kalif

11 משתנה סטטי גלובלי משתנה גלובלי שלא ניתן לייבא אותו באמצעות extern
ניסיון ייבוא משתנה סטטי גלובלי יגרור שגיאת לינקר © Keren Kalif

12 סיכום והשוואה בין סוגי המשתנים
משתנה סטטי גלובלי משתנה גלובלי משתנה סטטי משתנה לוקאלי זבל אתחול ב"מ כל אורך התוכנית סיום הבלוק בו הוגדר אורך חיים מנקודת הגדרתו בקובץ ומטה, לא ניתן להשתמש בו באמצעות extern מנקודת הגדרתו בקובץ ומטה, או ע"י extern, גם בקבצים אחרים הבלוק בו הוגדר טווח הכרה data segment stack של הפונקציה מיקום בזכרון © Keren Kalif

13 ביחידה זו למדנו: משתנה לוקאלי (אוטומטי) משתנה גלובאלי משתנה סטטי
extern משתנה גלובאלי סטטי © Keren Kalif


הורד את "ppt "הרצאה 02 סוגי משתנים קרן כליף.

מצגות קשורות


מודעות Google