1 00:00:00,000 --> 00:00:00,320 2 00:00:00,320 --> 00:00:02,700 >> Дэвид Дж. Малан: Давайте напишем программу в которые мы пытаемся поменять значения 3 00:00:02,700 --> 00:00:04,970 две переменные, х и у. 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 Тогда я объявляю переменную у и хранить в нем значение, 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 И тогда я распечатать то, что я утверждаю, являются новые значения х и у. 12 00:00:30,610 --> 00:00:32,030 >> Теперь то, что эта функция подкачки? 13 00:00:32,030 --> 00:00:34,970 Это не то, что приходит с С. В самом деле, если мы посмотрим на верхней части моей 14 00:00:34,970 --> 00:00:38,850 файл, вы заметите, что я объявил Прототип для этой функции обмена 15 00:00:38,850 --> 00:00:42,750 указав, что он принимает два целых, условно назвать и б, и это 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 значение в, хотя я мог бы просто как легко хранить в нем б. 21 00:00:57,260 --> 00:01:00,925 Я тогда собирался изменить значение из равным что в б. 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 Я хранятся во временной переменной, изменил значение, чтобы быть 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, значение х и у, даже 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 Ну, получается, что в основном, когда мы Вызывайте эту функцию подкачки, передавая 35 00:01:36,160 --> 00:01:39,960 х и у в качестве аргументов, это на самом деле копии х и у, что 36 00:01:39,960 --> 00:01:41,310 передаются в раздел подкачки. 37 00:01:41,310 --> 00:01:45,430 А именно, их значения 1 и 2 перешла в своп как и Ъ. 38 00:01:45,430 --> 00:01:48,590 И это и б, что мы в конечном итоге перекачки в основной. 39 00:01:48,590 --> 00:01:50,810 >> То есть, один становится 2, 2 становится 1. 40 00:01:50,810 --> 00:01:54,630 Но из-за подкачки не имеет возвращаемого значения и потому, что он получил копии х 41 00:01:54,630 --> 00:01:58,220 и у, это поведение нет эффекта от х и у. 42 00:01:58,220 --> 00:02:02,610 В самом деле, и б находятся в области видимости, так сказать, поменять, тогда как х и у остаются 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