1 00:00:00,000 --> 00:00:00,320 2 00:00:00,320 --> 00:00:02,700 >> DAVID J. مالان: اجازه دهید به نوشتن یک برنامه در که ما سعی می کنیم به مبادله مقادیر 3 00:00:02,700 --> 00:00:04,970 دو متغیر، x و y. 4 00:00:04,970 --> 00:00:07,490 در پیش، من بسیار نوشته شده است این برنامه در حال حاضر. 5 00:00:07,490 --> 00:00:11,130 اول، من اعلام یک متغیر x، و ذخیره در آن ارزش، 1. 6 00:00:11,130 --> 00:00:14,120 پس از آن من اعلام متغیر y و ذخیره در آن مقدار، 2. 7 00:00:14,120 --> 00:00:17,700 >> سپس من با چون printf اقدام به نمایش مقادیر این دو متغیر. 8 00:00:17,700 --> 00:00:21,090 سپس من با چون printf دیگر ادعا می کنند به مبادله آن متغیرها. 9 00:00:21,090 --> 00:00:23,690 سپس من یک تابع به نام مبادله تماس بگیرید. 10 00:00:23,690 --> 00:00:26,100 و پس از آن من ادعا می کنند که متغیر اند جابجا شده است. 11 00:00:26,100 --> 00:00:30,610 و بعد من نسخه قابل چاپ کردن که آنچه که من ادعا می کنند مقادیر جدید از x و y هستند. 12 00:00:30,610 --> 00:00:32,030 >> در حال حاضر آنچه از این تابع مبادله است؟ 13 00:00:32,030 --> 00:00:34,970 این چیزی است که همراه با C. نیست در واقع، اگر ما در بالا از نگاه من 14 00:00:34,970 --> 00:00:38,850 فایل، شما متوجه است که من اعلام کرده ام یک نمونه اولیه برای این تابع مبادله 15 00:00:38,850 --> 00:00:42,750 مشخص است که دو نوع داده int طول می کشد، خودسرانه به نام a و b، و این 16 00:00:42,750 --> 00:00:44,300 تابع هیچ چیزی بر نمی گرداند. 17 00:00:44,300 --> 00:00:48,370 بنابراین احتمالا، آن را نشانی از آنچه در آن می گوید: در معاوضه و ارزش ب است. 18 00:00:48,370 --> 00:00:50,170 بیایید به مبادله پیاده سازی. 19 00:00:50,170 --> 00:00:53,820 >> اول، من قصد دارم به اعلام موقت متغیر و اختصاص دادن به آن 20 00:00:53,820 --> 00:00:57,260 ارزش در یک، هر چند من فقط می تواند به راحتی در آن B ذخیره می شود. 21 00:00:57,260 --> 00:01:00,925 من پس از رفتن به تغییر ارزش از به به که در B برابر باشد. 22 00:01:00,925 --> 00:01:04,849 و سپس در آخر، من قصد دارم برای تغییر ارزش ب به چه بود اما 23 00:01:04,849 --> 00:01:06,340 در حال حاضر در دما. 24 00:01:06,340 --> 00:01:08,910 >> حالا من ادعا می کنند آنچه که من فقط انجام داده ام از نظر منطقی درست باشد. 25 00:01:08,910 --> 00:01:12,780 I ذخیره کرده اید در یک متغیر موقت، ارزش را به B تغییر، و پس از آن 26 00:01:12,780 --> 00:01:15,580 مقدار b را تغییر می شود چه بود. 27 00:01:15,580 --> 00:01:18,620 اما وقتی که من کامپایل و اجرای این برنامه، من نگران هستند که نیست 28 00:01:18,620 --> 00:01:20,140 رفتن آنچه من می بینم. 29 00:01:20,140 --> 00:01:21,625 >> را، نه مبادله. 30 00:01:21,625 --> 00:01:24,350 نقطه بریده بریده، نه مبادله. 31 00:01:24,350 --> 00:01:27,560 و متاسفانه، با توجه به چون printf، مقدار x و y، حتی 32 00:01:27,560 --> 00:01:31,560 پس ما ادعا می کنند به مبادله شود آنها، هنوز هم 1 و 2. 33 00:01:31,560 --> 00:01:32,630 >> در حال حاضر این است که چرا؟ 34 00:01:32,630 --> 00:01:36,160 خب، معلوم است که در اصلی، زمانی که ما به این تابع swap، عبور در 35 00:01:36,160 --> 00:01:39,960 x و y را به عنوان آرگومان، آن را در واقع کپی از x و y که 36 00:01:39,960 --> 00:01:41,310 به مبادله گذشت. 37 00:01:41,310 --> 00:01:45,430 یعنی، ارزش های خود را 1 و 2 به مبادله به عنوان A و B منتقل می شود. 38 00:01:45,430 --> 00:01:48,590 و آن را A و B است که ما در نهایت می مبادله در اصلی. 39 00:01:48,590 --> 00:01:50,810 >> این است که، 1 می شود 2، 2 می شود 1. 40 00:01:50,810 --> 00:01:54,630 اما از آنجا که مبادله مقدار بازگشت ندارد و به دلیل آن نسخه از X دریافت 41 00:01:54,630 --> 00:01:58,220 و y، آن رفتار شده است هیچ تاثیری بر x و y. 42 00:01:58,220 --> 00:02:02,610 در واقع، a و b مورد نظر است، پس به صحبت می کنند، به مبادله، در حالی که x و y باقی می ماند 43 00:02:02,610 --> 00:02:03,990 صفحه اصلی مورد نظر است. 44 00:02:03,990 --> 00:02:05,070 >> بنابراین ما یک مشکل. 45 00:02:05,070 --> 00:02:06,320 اما چگونه آن را برطرف؟ 46 00:02:06,320 --> 00:02:08,312