[Powered by Google Translate] הדוד DICIURCIO: אז מושג חשוב להבין ב
תכנות הוא הרעיון של היקף.
היקף יכול להיות מוגדר כהקשר שבו משתנה הוא
גלוי או נגיש.
לדוגמה, תניח שיש לנו תפקיד, ראשי, כי הוא
אמור להגדיל משתנים, x, מאחד עד שתיים.
כפי שניתן לראות, עיקרי מאתחל x לאחד, מדפיס
מתוך טקסט כלשהו, ​​ואז רץ תוספת הפונקציה, לפני
להדפיס יותר טקסט.
אם פונקציה זו הייתה כדי לפעול כראוי, זה היית
להדפיס את x כ2.
בואו ננסה את זה.
>> אז כמו שאתם יכולים לראות, עיקריים לא עושה את מה שאנו צפויים.
זה מחזיר את הערך 1, ולא
מ 2 שציפינו.
הסיבה למחדל הזה יכול להיות מוסבר על ידי היקף.
בפונקציה, עיקרי, אנו אותחלנו x
רק בתוך הפונקציה.
במילים אחרות, x משתנה הוא הכריז באופן מקומי בתוך
הפונקציה עיקרית, ואינה נגישה
מחוץ לפונקציה.
רק ראשי יכול לגשת x במצב הזה.
כאשר אנו קוראים תוספת אנחנו לא נעבור x כקלט, אבל
רק עותק של x.
כתוצאה מכך, תוספת הפונקציה רק ​​מוסיפה
את הערך 1 לעותק של הערך של x.
אבל לא לX עצמו.
כשנחזור לראשי, x עצמו לא השתנה כלל.
אז מדפיס את x יניב את הערך של 1 בלבד.
>> טוב, אז זה משאיר את השאלה: כיצד עלינו לתקן
זה פונקציה?
פתרון אחד הוא שיש תוספת להחזיר ערך.
בדרך זו, תוספת הפונקציה
להחזיר לנו את מספר שלם.
אז הנה הקוד המתוקן שלנו עם
פונקצית תוספת חלופית.
הנה, אנחנו במקום חזרנו x + 1, ולא רק הסוף
עם x שווה ל x + 1.
כמו כן, שימו לב שהחלפנו את הפלט של
תוספת, לבטל את העבר, עם int, וקבע כי
תוספת ייצאה עכשיו בחזרה ערך שלם.
עכשיו, אחרי ריצות תוספת, הוא יחזור בשווי של
2, בדיוק כפי שהתכוונ ו.
>> מצב נוסף שממחיש את חשיבותו של ההיקף
הוא בscopeloop.c.
בקוד זה, יש לנו ללולאה שבמשתנה
סך מאותחל בכל שלב.
למרבה הצער, את הקוד הזה אינו משגת.
הסיבה לכך היא מוחלט משתנים למעשה אינה קיימת
מחוץ ללולאה.
משתנים מוצהרים בתוך לולאות קיימים רק בתוך
לולאה עצמו ובאה לידי ביטוי בשגיאות שלנו
הודעה, סך ריק.
סך הכל משתנה טרם הכריז במסגרת
של הפונקציה עיקרית.
בנוסף, במהלך כל איטרציה שלנו ללולאה, אנחנו
הם reinitializing המוחלט ל0.
זה עצמו לא לשמור את הקוד מקומפילציה, אבל זה
ימנע מסך אי פעם לסיכום ערך העבר 1.
>> שוב, מה היא הדרך הטובה ביותר לתקן את זה?
אחת השיטות הקלות יותר כולל ביצוע כולל מקומי
הפונקציה העיקרית, ולא לעצמו את הלולאה.
זה יסתכם למעשה כדי להגדיל, וסופו של דבר,
לאפשר לו להיות מודפס לאחר ללולאה.
טכניקה נוספת שאני אגיד רק בקצרה לסכם היית
יהיה השימוש במשתנים הגלובליים.
משתנה גלובלי הם משתנים שהוכרזו לפני ראשיים
שיישמר על ערכם לאורך כל התכנית.
כמובן, פונקציות יכולות לשנות את הערך של גלובלי,
אבל הם לא יוצאים מהיקף כמו משתנים מקומיים.
עם זאת, שימוש במשתנים הגלובליים נוטה להיות קמט את מצחו
על עיצוב כרע, מאחר שיש דרכים טובות יותר
שיתוף נתונים בין פונקציות.
לדוגמה, שימוש במצביעים.
אבל גם על זה בפעם אחרת.
>> לבסוף, חשוב להיות בעל הבנה של היקף
בהקשר של הזיכרון של המחשב, או זכרון RAM.
כאשר אנו מבצעים תכנית, משתנים ופונקציות מקומיים
נוספים למיקום ספציפי ב
זכרון RAM נקרא מחסנית.
כתמורת פונקציות, מסגרות הערימה של המשתנים
להסיר ביעילות מהמחסנית משחררת את זיכרון רב יותר.
אז בעת בדיקת היקף, לוודא שאתה זוכר את שלושה האלה
נקודתי מפתח.
אחד, היקף יכול להיות מקומי או גלובלי.
זה תלוי בי משתנה הוא הכריז.
שני משתנים, מוצהרים או אותחלו בפונקציות
מקומי כדי שהפונקציה ולא ניתן לשנות על ידי אחרים
פונקציות, לפחות לא בלי שימוש במצביעים.
לבסוף, הם גם משתנה מקומיים ללולאות ה
הכריז מבפנים.
המשתנים אינם נגישים
מחוץ לעניינים.
>> זה הכל לעת עתה בהיקפו.
תודה שצפה.