1 SPEAKER: מתברר שביכולתנו להחליף בהצלחה את הערכים בשני משתנים על ידי ההעברה ל לתפקד לא על ידי ערך או על ידי העתקה, אבל על ידי הפניה או על ידי הכתובות שלהם. במילים אחרות, אנחנו צריכים למנף משהו ידוע כמצביע. מצביע, באמת, הוא פשוט כתובת של כמה משתנה. ולכן אם אנו מספקים פונקציה שנקראת, נניח, להחליף עם הכתובת של משתנה ואת כתובתו של אחר משתנה, החלפה צריכה להיות מוסמכת ללכת לכל אחת מהכתובות האלה ולמעשה לשנות את ערכים שנמצאים שם. בואו לראות את זה בהקשר נכון. בואו reimplement החלפה כדלקמן. ראשית, בואו נשנה לא להיות int אבל כדי להיות מצביע int או כתובת של int. אז בואו נעשה את אותו הדבר עבור B, שינוי זה מint להיות מצביע int או הכתובת של int. ואז בתוך swap, בואו עדיין להכריז tmp כך שיש לנו מקום זמני לערכו. אבל של הערך אינו עצמו, כי, שוב, היא עכשיו הכתובת של כמה int. אז אם אנחנו רוצים ללכת לכתובת זו ו לקבל int בכתובת זו, שיש לנו dereference מצביע זה, גם בדרך של מפעיל הכוכב, כתיבת כוכב. בשלב הבא, אני לא רוצה לשנות את הערך של. אני רוצה לשנות את הערך ב , תוך התחשבות, שוב, כי הוא כתובת. אז כדי לעשות זאת, אני צריך שוב לומר כוכב מקבל. ועכשיו אני רוצה לשים בשווי זה בב, לא את הערך של b, אשר גם היא כתובת. אז שוב אני אומר, כוכב ב. לאחר מכן, בשורה האחרונה שלי, אני צריך להחליף את מה שהוא בכתובת ב עם מה שהיה במיקום של מקורי. כדי לעשות זאת, אני עושה את הכוכב ב מקבל tmp. עכשיו בסופו של היום, זה פונקציה היא עדיין רק שלוש שורות של קוד. אבל בגלל שזה מניפולציה ערכים בדרך של הכתובת שלהם ולא ערכי גלם שהועברו אל פונקציה, אני טוען שהחלפה היא עכשיו מוסמך לשנות את הערכים ש הם עברו בבאמצעות הכתובות שלהם. אבל אני צריך לעשות שינוי אחד עדיין. אני כבר לא יכול לעבור ב x ו-y בעצמם. אני צריך לעבור בכתובות של x ו-y. וכדי לעשות את זה, אני צריך קצת מעט גבי סימון עד שונה. אני רוצה להחליף את x ו-y על ידי עובר ב הכתובת של x, שמסומנת על ידי x אמפרסנד, ואת הכתובת של y, שמסומן על ידי y אמפרסנד. בדומה לכך, למעלה עכשיו אני צריך לשנות את אב הטיפוס של הפונקציה להתאים את השינוי שעשיתי, כך ש הוא, שוב, מצביע int. b הוא, שוב, מצביע int. ועכשיו אני יכול לשמור את הקובץ שלי. ובואו הידור מחדש ולהפעיל אותו. הפוך החלפת לוכסן נקודת החלפה. והזמן, x ו-y זה הוא אכן החברה החליף כאלה שהערכים שלהם לא 1 ו -2, אבל 2 ו 1.