Presentation is loading. Please wait.

Presentation is loading. Please wait.

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

Similar presentations


Presentation on theme: "סוגי משתנים קרן כליף."— Presentation transcript:

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

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

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

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

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

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 2 3 זיכרון ה- data segment counter() counter counter() counter() main ( line 3) main ( line 2) main ( line 1) מחסנית הקריאות

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

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

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); global = 11 10 4 3 זיכרון ה- data segment incGlobal main מחסנית הקריאות

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

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

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

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


Download ppt "סוגי משתנים קרן כליף."

Similar presentations


Ads by Google