1 00:00:00,000 --> 00:00:03,080 >> 1 SPEAKER: מתברר שביכולתנו להחליף בהצלחה את הערכים בשני 2 00:00:03,080 --> 00:00:07,670 משתנים על ידי ההעברה ל לתפקד לא על ידי ערך או על ידי העתקה, אבל 3 00:00:07,670 --> 00:00:10,390 על ידי הפניה או על ידי הכתובות שלהם. 4 00:00:10,390 --> 00:00:12,740 במילים אחרות, אנחנו צריכים למנף משהו ידוע כמצביע. 5 00:00:12,740 --> 00:00:15,580 מצביע, באמת, הוא פשוט כתובת של כמה משתנה. 6 00:00:15,580 --> 00:00:19,660 ולכן אם אנו מספקים פונקציה שנקראת, נניח, להחליף עם הכתובת של 7 00:00:19,660 --> 00:00:23,550 משתנה ואת כתובתו של אחר משתנה, החלפה צריכה להיות מוסמכת 8 00:00:23,550 --> 00:00:26,090 ללכת לכל אחת מהכתובות האלה ולמעשה לשנות את 9 00:00:26,090 --> 00:00:27,360 ערכים שנמצאים שם. 10 00:00:27,360 --> 00:00:28,890 >> בואו לראות את זה בהקשר נכון. 11 00:00:28,890 --> 00:00:31,360 בואו reimplement החלפה כדלקמן. 12 00:00:31,360 --> 00:00:35,810 ראשית, בואו נשנה לא להיות int אבל כדי להיות מצביע int או 13 00:00:35,810 --> 00:00:36,920 כתובת של int. 14 00:00:36,920 --> 00:00:40,820 אז בואו נעשה את אותו הדבר עבור B, שינוי זה מint להיות מצביע 15 00:00:40,820 --> 00:00:42,780 int או הכתובת של int. 16 00:00:42,780 --> 00:00:45,860 >> ואז בתוך swap, בואו עדיין להכריז tmp כך שיש לנו 17 00:00:45,860 --> 00:00:47,810 מקום זמני לערכו. 18 00:00:47,810 --> 00:00:52,430 אבל של הערך אינו עצמו, כי, שוב, היא עכשיו הכתובת 19 00:00:52,430 --> 00:00:53,270 של כמה int. 20 00:00:53,270 --> 00:00:57,320 אז אם אנחנו רוצים ללכת לכתובת זו ו לקבל int בכתובת זו, שיש לנו 21 00:00:57,320 --> 00:01:03,020 dereference מצביע זה, גם בדרך של מפעיל הכוכב, כתיבת כוכב. 22 00:01:03,020 --> 00:01:05,470 >> בשלב הבא, אני לא רוצה לשנות את הערך של. 23 00:01:05,470 --> 00:01:08,770 אני רוצה לשנות את הערך ב , תוך התחשבות, שוב, 24 00:01:08,770 --> 00:01:10,350 כי הוא כתובת. 25 00:01:10,350 --> 00:01:14,050 אז כדי לעשות זאת, אני צריך שוב לומר כוכב מקבל. 26 00:01:14,050 --> 00:01:18,360 ועכשיו אני רוצה לשים בשווי זה בב, לא את הערך של b, אשר 27 00:01:18,360 --> 00:01:19,720 גם היא כתובת. 28 00:01:19,720 --> 00:01:22,280 >> אז שוב אני אומר, כוכב ב. 29 00:01:22,280 --> 00:01:26,690 לאחר מכן, בשורה האחרונה שלי, אני צריך להחליף את מה שהוא בכתובת ב עם 30 00:01:26,690 --> 00:01:28,970 מה שהיה במיקום של מקורי. 31 00:01:28,970 --> 00:01:32,910 כדי לעשות זאת, אני עושה את הכוכב ב מקבל tmp. 32 00:01:32,910 --> 00:01:34,820 >> עכשיו בסופו של היום, זה פונקציה היא עדיין רק 33 00:01:34,820 --> 00:01:35,950 שלוש שורות של קוד. 34 00:01:35,950 --> 00:01:39,860 אבל בגלל שזה מניפולציה ערכים בדרך של הכתובת שלהם ולא 35 00:01:39,860 --> 00:01:43,700 ערכי גלם שהועברו אל פונקציה, אני טוען שהחלפה היא עכשיו 36 00:01:43,700 --> 00:01:47,670 מוסמך לשנות את הערכים ש הם עברו בבאמצעות הכתובות שלהם. 37 00:01:47,670 --> 00:01:49,510 >> אבל אני צריך לעשות שינוי אחד עדיין. 38 00:01:49,510 --> 00:01:52,190 אני כבר לא יכול לעבור ב x ו-y בעצמם. 39 00:01:52,190 --> 00:01:55,030 אני צריך לעבור בכתובות של x ו-y. 40 00:01:55,030 --> 00:01:58,160 וכדי לעשות את זה, אני צריך קצת מעט גבי סימון עד שונה. 41 00:01:58,160 --> 00:02:02,510 אני רוצה להחליף את x ו-y על ידי עובר ב הכתובת של x, שמסומנת על ידי 42 00:02:02,510 --> 00:02:07,190 x אמפרסנד, ואת הכתובת של y, שמסומן על ידי y אמפרסנד. 43 00:02:07,190 --> 00:02:10,570 >> בדומה לכך, למעלה עכשיו אני צריך לשנות את אב הטיפוס של הפונקציה 44 00:02:10,570 --> 00:02:14,980 להתאים את השינוי שעשיתי, כך ש הוא, שוב, מצביע int. 45 00:02:14,980 --> 00:02:17,190 b הוא, שוב, מצביע int. 46 00:02:17,190 --> 00:02:18,770 ועכשיו אני יכול לשמור את הקובץ שלי. 47 00:02:18,770 --> 00:02:20,680 ובואו הידור מחדש ולהפעיל אותו. 48 00:02:20,680 --> 00:02:25,330 >> הפוך החלפת לוכסן נקודת החלפה. 49 00:02:25,330 --> 00:02:29,660 והזמן, x ו-y זה הוא אכן החברה החליף כאלה שהערכים שלהם לא 50 00:02:29,660 --> 00:02:31,950 1 ו -2, אבל 2 ו 1. 51 00:02:31,950 --> 00:02:34,900