1 00:00:00,000 --> 00:00:00,320 2 00:00:00,320 --> 00:00:02,700 >> Дејвид Џ MALAN: Да се ​​напише програма во која се обидуваме да се разменуваат вредностите на 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 Тогаш јас го нарекувам функција наречена swap. 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 >> Сега што е оваа функција swap? 13 00:00:32,030 --> 00:00:34,970 Тоа не е нешто што доаѓа со C. Всушност, ако се погледне на врвот на мојата 14 00:00:34,970 --> 00:00:38,850 датотека, ќе забележите дека јас сум прогласи прототип за оваа функција swap 15 00:00:38,850 --> 00:00:42,750 прецизирајќи дека тоа се потребни двајца ints, произволно нарекува и b, и овој 16 00:00:42,750 --> 00:00:44,300 функција не се врати ништо. 17 00:00:44,300 --> 00:00:48,370 Па веројатно, тоа го прави она што го кажува во свопови на a и вредности на b. 18 00:00:48,370 --> 00:00:50,170 Ајде сега се имплементира, swap. 19 00:00:50,170 --> 00:00:53,820 >> Прво, јас одам да се прогласи привремен променлива и додели на тоа 20 00:00:53,820 --> 00:00:57,260 на вредноста во, иако можев само како лесно да се чуваат во него б. 21 00:00:57,260 --> 00:01:00,925 Јас сум тогаш ќе се смени вредноста на да се биде еднаква на онаа во б. 22 00:01:00,925 --> 00:01:04,849 А потоа на крај, јас ќе одам да се промени вредноста на b за да биде она што беше, но е 23 00:01:04,849 --> 00:01:06,340 сега во Temp. 24 00:01:06,340 --> 00:01:08,910 >> Сега тврдам она што јас сум само направено е логично точни. 25 00:01:08,910 --> 00:01:12,780 Сум чуваат во привремена променлива, промени вредност да биде 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 >> Направи, без swap. 30 00:01:21,625 --> 00:01:24,350 точка коса црта, без swap. 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 се донесен во трампа како и 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 се scoped, така да се каже, да се разменуваат, додека x и y остане 43 00:02:02,610 --> 00:02:03,990 scoped до главна. 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