1 00:00:00,000 --> 00:00:02,742 2 00:00:02,742 --> 00:00:05,680 >> СПІКЕР 1: Прывітанне ўсім. 3 00:00:05,680 --> 00:00:07,530 Мы збіраемся, каб пачаць. 4 00:00:07,530 --> 00:00:09,330 Я думаю, што людзі ўсё яшчэ ідуць быць фільтрацыі ст. 5 00:00:09,330 --> 00:00:12,840 Але ў мэтах эканоміі часу, таму мы можам атрымаць вы, хлопцы, адсюль на час, 6 00:00:12,840 --> 00:00:14,110 мы збіраемся пачаць. 7 00:00:14,110 --> 00:00:18,780 Так што сардэчна запрашаем да CS50 Віктарына 0 водгукаў. 8 00:00:18,780 --> 00:00:23,020 Для тых з вас, хто не зразумеў, яшчэ, у вас ёсць пытанне на сераду. 9 00:00:23,020 --> 00:00:25,700 Ву-ху. 10 00:00:25,700 --> 00:00:29,780 >> Калі вы яшчэ не пачалі вывучаць яшчэ і не зразумеў, што гэта існуе пакуль, 11 00:00:29,780 --> 00:00:34,070 апошнія апытанні і ўся інфармацыя аб ваш тэст знаходзяцца на cs50.net/quizzes. 12 00:00:34,070 --> 00:00:38,090 Там-то даволі добры матэрыял там, Мінулыя віктарыны ад апошняга 10 13 00:00:38,090 --> 00:00:43,760 гадоў, а таксама інфармацыю пра гэта віктарыны і тэмах 14 00:00:43,760 --> 00:00:46,250 , Якія будуць пакрытыя. 15 00:00:46,250 --> 00:00:48,980 Так што давайце пачнем. 16 00:00:48,980 --> 00:00:54,240 >> Так вы, хлопцы, магчыма, памятаеце, першы дзень класа Давіда былі тыя лямпы на. 17 00:00:54,240 --> 00:00:59,650 Так па сутнасці, усё, што адбываецца пад капотам кампутара з'яўляецца 18 00:00:59,650 --> 00:01:00,860 зроблена ў двайковай сістэме. 19 00:01:00,860 --> 00:01:04,080 Двайковай азначае, што гэта гучыць як, 0 і 1 гадоў. 20 00:01:04,080 --> 00:01:09,290 Яна мае два значэння, можна ўявіць. 21 00:01:09,290 --> 00:01:14,675 >> Гэтак жа, як у першы дзень раздзел калі Дэвід уключыў святло 22 00:01:14,675 --> 00:01:21,990 лямпа для прадстаўлення на, або 1, наш кампутар разумее двайковы як 0 і 23 00:01:21,990 --> 00:01:24,110 1-х, ці не. 24 00:01:24,110 --> 00:01:25,360 Асновы Binary. 25 00:01:25,360 --> 00:01:29,440 26 00:01:29,440 --> 00:01:32,470 Кожнае месца прадстаўлена ў базе два. 27 00:01:32,470 --> 00:01:36,260 Такім чынам, вы дадайце 2 да 0 да З 1 па 2 усё, аж да. 28 00:01:36,260 --> 00:01:41,970 >> Каб вылічыць, што ваша праграма з'яўляецца дзесятковай, вы проста вынікаеце гэта раўнанне 29 00:01:41,970 --> 00:01:42,840 Тып рэч. 30 00:01:42,840 --> 00:01:49,510 Калі ў вас ёсць 1 у любым з гэтых месцаў, Вы памножце яго на ўсе 31 00:01:49,510 --> 00:01:53,820 засноўваць гэта, дадайце яго, і Вы атрымліваеце дзесятковай. 32 00:01:53,820 --> 00:01:57,930 Так што гэта, як вы лічыце да 5 у двайковым выглядзе. 33 00:01:57,930 --> 00:02:01,400 Гэтак жа, як тое, што мы рабілі на апошні слайд, гэта, як вы б 34 00:02:01,400 --> 00:02:02,650 ўяўляюць з 1 па 5. 35 00:02:02,650 --> 00:02:05,320 36 00:02:05,320 --> 00:02:09,660 >> Сапраўды гэтак жа, гэтак жа, як вы можаце дадаваць і адняць у дзесятковай ці засноўваць 10, або 37 00:02:09,660 --> 00:02:13,040 сапраўды любы падстава, на можна дадаць і адняць у двайковай сістэме. 38 00:02:13,040 --> 00:02:18,400 Дакладна, што вы чакалі б, калі вы дадаць двух да, калі яна роўная больш 39 00:02:18,400 --> 00:02:24,220 чым 1, вы носіце 1, зрабіць яго 0, і зрабіць даданне такім чынам, проста 40 00:02:24,220 --> 00:02:29,910 як можна было б чакаць з рэгулярным дзесятковы або любы іншы базы. 41 00:02:29,910 --> 00:02:30,970 Прахладны. 42 00:02:30,970 --> 00:02:35,140 >> Так як я ўжо казаў, усё, што адбываецца пад капотам нашага кампутара 43 00:02:35,140 --> 00:02:37,560 робіцца ў 0 і 1, альбо бінарны. 44 00:02:37,560 --> 00:02:43,470 Так як жа мы выказваем, напрыклад, літар або лічбаў або знакаў? 45 00:02:43,470 --> 00:02:45,560 І адказ на гэта ASCII. 46 00:02:45,560 --> 00:02:49,380 >> ASCII з'яўляецца адлюстраваннем паміж персанажамі што мы звычайна бачым у 47 00:02:49,380 --> 00:02:53,360 Ангельскую мову, як сайт, B, C о, падкрэсліваюць, працяжнік, і 48 00:02:53,360 --> 00:02:54,910 нічога падобнага. 49 00:02:54,910 --> 00:02:57,260 І ён адлюстроўвае, што ў значэнне ASCII. 50 00:02:57,260 --> 00:03:03,080 Значэнне ASCII гэта проста лік, што можна зразумець, кампутары. 51 00:03:03,080 --> 00:03:07,430 І гэтак жа, як вы можаце зрабіць даданне і адніманне з лікамі, вы можаце зрабіць 52 00:03:07,430 --> 00:03:10,890 іх са значэннямі ASCII. 53 00:03:10,890 --> 00:03:14,050 >> Такім чынам, у гэтым прыкладзе, што гэта будзе раздрукаваць? 54 00:03:14,050 --> 00:03:26,790 55 00:03:26,790 --> 00:03:35,480 Так, так проста прастору B прастору C прастору D. Дзе мая мыш ісці? 56 00:03:35,480 --> 00:03:39,200 57 00:03:39,200 --> 00:03:43,380 Звярніце ўвагу, вы можаце вызначыць Int на 65. 58 00:03:43,380 --> 00:03:47,080 І пры друку, што з дапамогай адсоткаў C, гэта будзе інтэрпрэтаваць, што, як 59 00:03:47,080 --> 00:03:49,330 характар ​​і раздрукуюць А. 60 00:03:49,330 --> 00:03:52,800 >> Акрамя таго, вы можаце абвясціць гэта як сімвал. 61 00:03:52,800 --> 00:03:56,860 І калі вы раздрукаваць яго з дапамогай адсоткаў C, гэта будзе інтэрпрэтаваць, што, як 62 00:03:56,860 --> 00:04:05,240 адсоткаў D. І гэтак жа, як вы можаце дадаць лік, вы можаце дадаць сімвалы 63 00:04:05,240 --> 00:04:06,878 Значэння ASCII, у гэтым выпадку. 64 00:04:06,878 --> 00:04:11,370 65 00:04:11,370 --> 00:04:16,130 >> Так трохі паказальнік для ўсіх. 66 00:04:16,130 --> 00:04:19,610 5, у выглядзе радка, ня фактычна роўная 5. 67 00:04:19,610 --> 00:04:26,610 Так як мы можам пераўтварыць Радок 5 да цэлага 5? 68 00:04:26,610 --> 00:04:28,930 Любыя ідэі? 69 00:04:28,930 --> 00:04:31,630 Так. 70 00:04:31,630 --> 00:04:36,720 >> Так што, калі ў нас ёсць 5 у выглядзе радка, мы можам адняць 0. 71 00:04:36,720 --> 00:04:37,820 І што дасць нам 5. 72 00:04:37,820 --> 00:04:41,670 І сапраўды гэтак жа, калі ў нас ёсць 5 як цэлае, дадаць, што ў радок 0. 73 00:04:41,670 --> 00:04:43,112 І гэта дае нам радок 5. 74 00:04:43,112 --> 00:04:46,350 75 00:04:46,350 --> 00:04:48,350 Прахладны. 76 00:04:48,350 --> 00:04:52,940 >> Цяпер успомніце назад у лекцыі той, дзе мы гаварылі пра алгарытмаў. 77 00:04:52,940 --> 00:04:57,260 Так як жа мы на самай справе хочам кампутар каб рабіць цікавыя рэчы? 78 00:04:57,260 --> 00:05:00,460 Вы ведаеце, проста складанне і адніманне нумары і друку рэчы з ня 79 00:05:00,460 --> 00:05:01,730 што цікава. 80 00:05:01,730 --> 00:05:04,620 Як правіла, мы хочам, каб наш кампутар да выконваць свайго роду алгарытм. 81 00:05:04,620 --> 00:05:07,820 Што-то крыху больш складана чым проста просты арыфметыкі. 82 00:05:07,820 --> 00:05:11,930 >> Алгарытм проста крок за крокам набору інструкцый для выканання, як 83 00:05:11,930 --> 00:05:14,640 пэўны task-- 84 00:05:14,640 --> 00:05:15,660 гэтак жа, як рэцэпт. 85 00:05:15,660 --> 00:05:19,990 Магчыма, вы памятаеце першы дзень Клас, дзе Давід Падлічым нумар 86 00:05:19,990 --> 00:05:22,550 людзей і колькі людзей былі ў пакоі. 87 00:05:22,550 --> 00:05:24,480 Вы маглі б быць выкарыстаны для падліку адзін за адным. 88 00:05:24,480 --> 00:05:25,860 1, 2, 3, 4. 89 00:05:25,860 --> 00:05:28,010 У гэтым выпадку лінейны алгарытм часу. 90 00:05:28,010 --> 00:05:31,710 >> Але Давід ўвёў алгарытм Вы злічыць людзей у нумары 91 00:05:31,710 --> 00:05:37,340 дзе ўсе ўстаюць, вы Прамоўце Лік іншай асобе, дадаць, што 92 00:05:37,340 --> 00:05:39,200 лік, і адзін чалавек садзіцца. 93 00:05:39,200 --> 00:05:40,410 І вы паўтарыць гэта. 94 00:05:40,410 --> 00:05:42,910 Гэта адзін тып алгарытму. 95 00:05:42,910 --> 00:05:47,520 Мы можам прааналізаваць, як эфектыўна ап Алгарытм заснаваны на гэта падчас выканання. 96 00:05:47,520 --> 00:05:49,680 Але мы пагаворым крыху пра гэта крыху пазней. 97 00:05:49,680 --> 00:05:52,740 98 00:05:52,740 --> 00:05:57,090 >> Такім чынам, усе алгарытмы могуць таксама запісаць у псевдокоде. 99 00:05:57,090 --> 00:06:01,120 ПСЕВДОКОД проста англійская як сінтаксіс, які выкарыстоўваецца для прадстаўлення 100 00:06:01,120 --> 00:06:02,420 мова праграмавання. 101 00:06:02,420 --> 00:06:06,070 Напрыклад, калі мы хацелі спытаць карыстальніка адгадаць мой любімы нумар, мы 102 00:06:06,070 --> 00:06:08,390 псевдокод можа мець як такой. 103 00:06:08,390 --> 00:06:09,850 >> Атрымаць карыстальнікі думаю. 104 00:06:09,850 --> 00:06:13,570 Калі здагадка дакладная, сказаць ім, яны маюць рацыю, інакш сказаць ім 105 00:06:13,570 --> 00:06:15,560 яны не правільна. 106 00:06:15,560 --> 00:06:22,530 І псевдокод гэта спосаб лёгка прадстаўляючы ідэю або алгарытм. 107 00:06:22,530 --> 00:06:26,910 Так што цяпер мы маглі б на самай справе пісаць гэта на мове, што кампутар 108 00:06:26,910 --> 00:06:27,980 маглі б разуменне. 109 00:06:27,980 --> 00:06:35,660 Такім чынам, мы можам запісаць наш псевдокод і інтэрпрэтаваць, што ў зыходным кодзе. 110 00:06:35,660 --> 00:06:41,320 >> Пакуль, зыходны код павінен прытрымлівацца ў пэўнай сінтаксісам 111 00:06:41,320 --> 00:06:42,490 мова праграмавання. 112 00:06:42,490 --> 00:06:45,430 І да гэтага часу, у CS50, мы выкарыстоўвалі ў асноўным у. 113 00:06:45,430 --> 00:06:48,320 Так што гэта можа быць зыходны код у. 114 00:06:48,320 --> 00:06:51,440 Пазней у ходзе, вы ноччу прыходзяць у кантакт з іншымі праграмавання 115 00:06:51,440 --> 00:06:52,480 Мовы, як PHP. 116 00:06:52,480 --> 00:06:57,540 Ці, калі вы нават прымаць іншыя класы, вам можа зрабіць Java, Python, ці нават OCML. 117 00:06:57,540 --> 00:07:01,570 Але ў нашай мове з праграмы, гэта як мы маглі б напісаць зыходны код для 118 00:07:01,570 --> 00:07:04,760 алгарытм псевдокод, што Я толькі што апісаў раней. 119 00:07:04,760 --> 00:07:08,630 120 00:07:08,630 --> 00:07:11,430 >> Так як жа ваш кампутар на самай справе зразумець, што? 121 00:07:11,430 --> 00:07:14,490 Як я ўжо казаў, гэта толькі сапраўды разумее нулі і адзінкі. 122 00:07:14,490 --> 00:07:17,880 Так, як гэта атрымаць ад крыніцы Код да таго, што можа быць 123 00:07:17,880 --> 00:07:18,960 зразумеў? 124 00:07:18,960 --> 00:07:22,920 Ну, у нас ёсць што называецца кампілятар. 125 00:07:22,920 --> 00:07:28,450 >> Калі вы памятаеце таму ў большасць psets, вы былі нейкія праграмы 126 00:07:28,450 --> 00:07:30,370 напісана ў кропка C File. 127 00:07:30,370 --> 00:07:32,550 І тады вы павінны ўвесці марку. 128 00:07:32,550 --> 00:07:35,970 Дык што ж рабіць рабіць? 129 00:07:35,970 --> 00:07:39,970 >> Вы можаце ўвесці марку, каб кампіляваць Праграма таму someone-- 130 00:07:39,970 --> 00:07:42,730 той, хто напісаў свой р набор; верагодна David-- 131 00:07:42,730 --> 00:07:44,190 стварыў зрабіць файл. 132 00:07:44,190 --> 00:07:51,320 І што кажа зрабіць, каб ведаць, каб запусціць свой кампілятар, называецца звон, што воля 133 00:07:51,320 --> 00:07:55,560 скампіляваць зыходны код аб'екта Код, які нулі і адзінкі 134 00:07:55,560 --> 00:07:57,720 што ваш кампутар разумее. 135 00:07:57,720 --> 00:08:01,610 Але крыху пазней, мы пойдзем больш падрабязна аб кампілятараў. 136 00:08:01,610 --> 00:08:05,640 137 00:08:05,640 --> 00:08:10,800 >> Так ўспомніць PSET 0, where-- так, ў вас ёсць пытанне? 138 00:08:10,800 --> 00:08:11,620 >> АЎДЫТОРЫЯ: [неразборліва]? 139 00:08:11,620 --> 00:08:12,490 >> СПІКЕР 1: Так. 140 00:08:12,490 --> 00:08:14,960 Я думаю, што яны на самой справе павінны быць онлайн. 141 00:08:14,960 --> 00:08:15,120 Так. 142 00:08:15,120 --> 00:08:16,572 >> АЎДЫТОРЫЯ: Гэта як [неразборліва]? 143 00:08:16,572 --> 00:08:19,476 144 00:08:19,476 --> 00:08:20,830 >> СПІКЕР 1: Гэта не так. 145 00:08:20,830 --> 00:08:25,810 Знаходзяцца на cs50.net/quizzes. 146 00:08:25,810 --> 00:08:32,900 >> АЎДЫТОРЫЯ: Slash віктарыны, слэш 2013, слэш 0, і проста націсніце праз 147 00:08:32,900 --> 00:08:35,956 віктарыны 2013 і віктарыны 0, перагледзець раздзел слайды. 148 00:08:35,956 --> 00:08:40,380 >> СПІКЕР 1: Так, так што калі вы, хлопцы, жадаеце пацягніце яго ўверх і паглядзець на яго на вашым 149 00:08:40,380 --> 00:08:42,740 уласны кампутар, гэта таксама добра. 150 00:08:42,740 --> 00:08:43,130 Сказаць, што зноў. 151 00:08:43,130 --> 00:08:44,546 >> АЎДЫТОРЫЯ: [неразборліва]. 152 00:08:44,546 --> 00:08:48,780 >> СПІКЕР 1: Так, [неразборліва] з'яўляецца фіктыўная пераменная. 153 00:08:48,780 --> 00:08:49,644 О, так? 154 00:08:49,644 --> 00:08:51,372 >> АЎДЫТОРЫЯ: [неразборліва]? 155 00:08:51,372 --> 00:08:54,300 >> Дынамік 1: Не, забастоўкі ня на экзамене. 156 00:08:54,300 --> 00:08:55,950 На жаль, яе пытанне было, быў ўдары па іспыту. 157 00:08:55,950 --> 00:08:59,530 І гэта не так. 158 00:08:59,530 --> 00:09:05,780 Так PSET 0, вы, хлопцы, павінны мець усе рэалізаваны небудзь праз драпіну. 159 00:09:05,780 --> 00:09:13,100 І мы даведаліся некаторыя асновы праграмавання будаўнічыя блокі, якія выкарыстоўваюць драпіны. 160 00:09:13,100 --> 00:09:15,590 >> Такім чынам, давайце зірнем на некаторыя з гэтых будаўнічых блокаў 161 00:09:15,590 --> 00:09:18,170 , Якія складаюць праграму. 162 00:09:18,170 --> 00:09:20,570 Упершыню гэта лагічны выраз. 163 00:09:20,570 --> 00:09:24,540 Лагічныя выразы з'яўляюцца тыя, і 0-х ці ўсё, што мае 164 00:09:24,540 --> 00:09:25,700 два магчымых значэння. 165 00:09:25,700 --> 00:09:30,320 У гэтым выпадку, сапраўдным або ілжывым, або выключыць, і так ці не. 166 00:09:30,320 --> 00:09:35,390 Прыклад просты, вельмі просты, праграма, якая выкарыстоўвае лагічны 167 00:09:35,390 --> 00:09:39,140 выраз тут. 168 00:09:39,140 --> 00:09:43,220 >> Так для таго, каб лагічных выразаў у быць карысна, у нас ёсць лагічныя аператары. 169 00:09:43,220 --> 00:09:48,920 Гэтыя аператары, якія можна выкарыстоўваць параўнаць пэўныя значэння. 170 00:09:48,920 --> 00:09:52,820 Таму ў нас ёсць і ці не роўна, менш або роўна, або больш, чым 171 00:09:52,820 --> 00:09:55,130 роўныя, і менш, чым або больш, чым. 172 00:09:55,130 --> 00:09:59,060 Але гэтыя аператары не вельмі карысна калі мы не можам аб'яднаць іх у 173 00:09:59,060 --> 00:10:00,320 ўмовы. 174 00:10:00,320 --> 00:10:04,370 >> Так вы, хлопцы, памятаеце з нуля і з вашага р ўсталёўвае, што мы 175 00:10:04,370 --> 00:10:05,400 было ўмовы. 176 00:10:05,400 --> 00:10:09,710 Яны, па сутнасці, як відэльцы ў логіка вашай праграмы, што 177 00:10:09,710 --> 00:10:12,670 выконвае ў залежнасці ад таго ўмова выконваецца. 178 00:10:12,670 --> 00:10:18,150 Так адным з умоў, якія мы мелі выкарыстоўваць шмат разоў у гэтым курсе 179 00:10:18,150 --> 00:10:21,470 калі, то ў іншым месцы, калі, і ў іншым месцы ўмовы. 180 00:10:21,470 --> 00:10:24,060 >> Вось прыклад таго, як Вы маглі б выкарыстоўваць гэта. 181 00:10:24,060 --> 00:10:28,430 Хто-небудзь ведае розніцу паміж толькі з дапамогай калі заявы ўсіх 182 00:10:28,430 --> 00:10:32,530 аж вершах, калі, яшчэ, калі, і яшчэ ў спалучэнні? 183 00:10:32,530 --> 00:10:33,013 Так? 184 00:10:33,013 --> 00:10:34,263 >> АЎДЫТОРЫЯ: [неразборліва]. 185 00:10:34,263 --> 00:10:40,741 186 00:10:40,741 --> 00:10:42,160 >> СПІКЕР 1: Точно. 187 00:10:42,160 --> 00:10:50,210 Так што, калі ў мяне было, калі ўсё, аж гэтым чынам, нават калі гэта ўмова вяртання 188 00:10:50,210 --> 00:10:52,800 праўда, ён усё роўна будзе працягваць тэставання ў бліжэйшыя два. 189 00:10:52,800 --> 00:11:00,120 У той час як, з яшчэ-калі, да ELSE асабістых дадзеных, калі адзін вяртае ісціну, 190 00:11:00,120 --> 00:11:02,640 астатнія не правяраў. 191 00:11:02,640 --> 00:11:05,955 Любыя пытанні аб тым, што? 192 00:11:05,955 --> 00:11:06,890 Прахладны. 193 00:11:06,890 --> 00:11:12,240 >> Такім чынам, вы карыстаецеся, калі-інакш з ELSE заяву, калі вы ведаеце, што ён можа толькі 194 00:11:12,240 --> 00:11:14,470 быць адным з гэтых выпадкаў. 195 00:11:14,470 --> 00:11:21,550 Такім чынам, мы ведаем, калі х менш 0, гэта дакладна не будзе 196 00:11:21,550 --> 00:11:22,890 больш, чым 0. 197 00:11:22,890 --> 00:11:26,940 198 00:11:26,940 --> 00:11:31,480 >> Далей, яшчэ адным будаўнічым блокам што мы даведаліся з'яўляюцца завесы. 199 00:11:31,480 --> 00:11:33,310 У нас ёсць тры тыпу цыклаў. 200 00:11:33,310 --> 00:11:35,830 Для завес, у той час як завесы, і зрабіць у той час як завесы. 201 00:11:35,830 --> 00:11:38,730 І ўвогуле, калі вы садзіцеся ў нешта напісаць, вы павінны вырашыць, 202 00:11:38,730 --> 00:11:40,060 які з трох вы хочаце выкарыстаць. 203 00:11:40,060 --> 00:11:41,900 Так як жа нам вырашыць, які? 204 00:11:41,900 --> 00:11:44,920 205 00:11:44,920 --> 00:11:48,790 >> Мы наогул выкарыстоўваем для цыклу, калі мы ведаем, колькі разоў мы хочам ітэрацыі 206 00:11:48,790 --> 00:11:53,650 праз тое ці колькі разоў мы хочам, каб выканаць задачу. 207 00:11:53,650 --> 00:11:58,830 Мы выкарыстоўваем у той час як завесы, калі нам патрэбныя стан, каб быць праўдай, каб працягваць працаваць. 208 00:11:58,830 --> 00:12:03,730 І мы выкарыстоўваем зрабіць у той час як вельмі падобны на у той час як, але мы хочам, каб наш код для запуску на 209 00:12:03,730 --> 00:12:04,880 меры адзін раз. 210 00:12:04,880 --> 00:12:09,410 >> Так што ў той час, усё, што знаходзіцца ў волю заўсёды выконваюцца хоць бы адзін раз. 211 00:12:09,410 --> 00:12:13,120 У той час як, з той час, яго не можа працаваць наогул, калі 212 00:12:13,120 --> 00:12:15,490 ўмова не выканана. 213 00:12:15,490 --> 00:12:16,740 Любыя пытанні з гэтым? 214 00:12:16,740 --> 00:12:20,480 215 00:12:20,480 --> 00:12:22,860 >> Так структура для цыклу. 216 00:12:22,860 --> 00:12:23,620 Вы, хлопцы, усе бачылі гэта. 217 00:12:23,620 --> 00:12:25,320 Вы ініцыялізаваць яго. 218 00:12:25,320 --> 00:12:26,600 У вас ёсць свайго роду стане. 219 00:12:26,600 --> 00:12:32,340 Так, напрыклад, мы маглі б ініцыялізаваць як для я роўная 0. 220 00:12:32,340 --> 00:12:34,040 я менш за 10. 221 00:12:34,040 --> 00:12:35,442 І я ++. 222 00:12:35,442 --> 00:12:39,010 Вельмі просты, што мы зрабілі. 223 00:12:39,010 --> 00:12:42,210 >> Некаторы час цыклу, гэтак жа, у вас ёсць мець свайго роду ініцыялізацыі, 224 00:12:42,210 --> 00:12:44,980 свайго роду стане, і свайго роду абнаўлення. 225 00:12:44,980 --> 00:12:51,990 Так што мы можам рэалізаваць нашы цыкле таксама як час цыкла з дапамогай гэтага. 226 00:12:51,990 --> 00:12:56,000 І сапраўды гэтак жа з спраў у той час як завесы, мы маглі б мець некаторую ініцыялізацыю, 227 00:12:56,000 --> 00:12:58,640 выканаць тое, абнавіць яго, і Затым праверце стан. 228 00:12:58,640 --> 00:13:03,500 229 00:13:03,500 --> 00:13:05,140 >> Так што цяпер функцыі. 230 00:13:05,140 --> 00:13:06,460 Ставім ўсе разам. 231 00:13:06,460 --> 00:13:10,140 Мы, магчыма, захочаце напісаць некаторыя выгляд функцыі. 232 00:13:10,140 --> 00:13:12,790 Агульныя функцыі, якія вы, магчыма, ўжо бачылі гэта галоўны. 233 00:13:12,790 --> 00:13:13,770 Асноўны з'яўляецца функцыяй. 234 00:13:13,770 --> 00:13:16,160 Ён мае тып якое вяртаецца значэння, унутр. 235 00:13:16,160 --> 00:13:18,470 Ён мае імя функцыі, асноўны. 236 00:13:18,470 --> 00:13:20,810 І яна мае аргументы, ARGC і ARGV. 237 00:13:20,810 --> 00:13:24,040 Так галоўны гэта проста функцыя. 238 00:13:24,040 --> 00:13:27,230 >> Іншыя функцыі, якія вы выкарыстоўвалі, printf-- Е з'яўляецца function-- 239 00:13:27,230 --> 00:13:29,330 GetInt, ToUpper. 240 00:13:29,330 --> 00:13:32,010 Але гэта, аказваецца, быў рэалізаваны для нас 241 00:13:32,010 --> 00:13:33,270 свайго роду бібліятэкі. 242 00:13:33,270 --> 00:13:37,400 Калі вы, хлопцы, памятаеце уключаючы гэтая бібліятэка CS50.h або 243 00:13:37,400 --> 00:13:38,510 Стандарт I / O бібліятэка. 244 00:13:38,510 --> 00:13:39,200 Так, пытанне? 245 00:13:39,200 --> 00:13:41,610 >> Залы: асноўны проста ўласціва з? 246 00:13:41,610 --> 00:13:44,740 Ці мае гэта толькі часткова [неразборліва]? 247 00:13:44,740 --> 00:13:47,370 >> СПІКЕР 1: Пытанне ў тым, калі галоўны ўласцівая ст. 248 00:13:47,370 --> 00:13:51,460 І так, усё функцыі значыць асноўную функцыю. 249 00:13:51,460 --> 00:13:55,290 Гэта свайго роду неабходныя для кампутара ведаць, з чаго пачаць 250 00:13:55,290 --> 00:13:55,993 выканання кода. 251 00:13:55,993 --> 00:13:58,108 >> АЎДЫТОРЫЯ: Дык вы не захацелі [неразборліва]? 252 00:13:58,108 --> 00:13:59,480 >> СПІКЕР 1: N: 253 00:13:59,480 --> 00:14:00,760 Яшчэ пытанні? 254 00:14:00,760 --> 00:14:03,430 255 00:14:03,430 --> 00:14:04,770 Прахладны. 256 00:14:04,770 --> 00:14:08,050 Гэтак жа, як вы можаце выкарыстоўваць функцыю што напісана для вас, вы можаце таксама 257 00:14:08,050 --> 00:14:10,380 напісаць сваю ўласную функцыю. 258 00:14:10,380 --> 00:14:17,050 Гэта функцыя, што хто мог бы напісалі для разліку аб'ёму 259 00:14:17,050 --> 00:14:18,395 з д, напрыклад. 260 00:14:18,395 --> 00:14:21,300 261 00:14:21,300 --> 00:14:29,500 Там у які вяртаецца тып тут, у гэтым выпадку Int, наша імя функцыі д і нашы 262 00:14:29,500 --> 00:14:31,360 Спіс параметраў. 263 00:14:31,360 --> 00:14:34,550 >> І звярніце ўвагу, што ў вас ёсць, каб запісаць дадзеныя тып параметру, які патрабуецца 264 00:14:34,550 --> 00:14:38,660 выкарыстоўваць або функцыя не ведаць, якія 265 00:14:38,660 --> 00:14:41,650 параметр павінен я быць прыняцце. 266 00:14:41,650 --> 00:14:48,110 Так, у дадзеным выпадку, мы хочам цэлае, як наш ўваход. 267 00:14:48,110 --> 00:14:50,390 Дык чаму можа мы хочам выкарыстоўваць функцыі? 268 00:14:50,390 --> 00:14:52,800 >> Перш за ўсё, выдатна падыходзіць для арганізацыі. 269 00:14:52,800 --> 00:14:56,350 Яны дапамагаюць разбіць свой код у больш арганізаванай кавалкі і зрабіць 270 00:14:56,350 --> 00:14:57,960 яго было прасцей чытаць. 271 00:14:57,960 --> 00:14:59,760 Спрашчэнне. 272 00:14:59,760 --> 00:15:01,740 Гэта добра для дызайну. 273 00:15:01,740 --> 00:15:04,570 Калі вы чытаеце кавалак кода і асноўная функцыя сапраўды, 274 00:15:04,570 --> 00:15:07,750 вельмі доўга, гэта можа быць складаней Прычына пра тое, што адбываецца. 275 00:15:07,750 --> 00:15:11,710 Так што калі вы разбіць яго на функцый, гэта можа быць больш зручным для чытання. 276 00:15:11,710 --> 00:15:12,750 І паўторна-здольнасць. 277 00:15:12,750 --> 00:15:16,940 Калі ў вас ёсць кавалак кода, які быўшы называецца або запусціць некалькі разоў, 278 00:15:16,940 --> 00:15:20,690 замест перазапісу, што код 10 разоў у асноўнай функцыі, вы маглі б 279 00:15:20,690 --> 00:15:21,440 хочаце выкарыстоўваць яго. 280 00:15:21,440 --> 00:15:25,740 І тады кожны раз, вы павінны выкарыстоўваць, што кавалак кода, выклікаць функцыю. 281 00:15:25,740 --> 00:15:30,550 282 00:15:30,550 --> 00:15:35,380 >> Так што цяпер, калі мы ўспомнім, назад нуля, мы таксама казалі пра некалькі канцэпцый, 283 00:15:35,380 --> 00:15:37,680 адзін з якіх разьбы. 284 00:15:37,680 --> 00:15:41,120 Тэма з'яўляецца паняцце кратнага паслядоўнасці кода 285 00:15:41,120 --> 00:15:43,040 выкананне адначасова. 286 00:15:43,040 --> 00:15:47,490 Так ўспомніце дня, дзе Дэвід быў Вы, хлопцы, адлічыць колькасць 287 00:15:47,490 --> 00:15:48,440 людзі ў пакоі. 288 00:15:48,440 --> 00:15:50,550 >> Па сутнасці, што адбываецца на ўсе з вас, хлопцы былі 289 00:15:50,550 --> 00:15:52,370 працуе асобныя патокі. 290 00:15:52,370 --> 00:15:55,540 І гэтыя тэмы ішлі разам каб атрымаць свайго роду адказ. 291 00:15:55,540 --> 00:15:58,890 Сапраўды гэтак жа ў пустым, калі ў вас ёсць некалькі спрайты, можа 292 00:15:58,890 --> 00:16:01,070 ёсць котка і сабака. 293 00:16:01,070 --> 00:16:08,770 І яны былі б адначасова працуюць ўласныя скрыпты. 294 00:16:08,770 --> 00:16:10,020 Гэта з'яўляецца прыкладам разьбы. 295 00:16:10,020 --> 00:16:12,860 296 00:16:12,860 --> 00:16:18,000 >> І іншае паняцце, што было уведзены ў пустым была падзеі. 297 00:16:18,000 --> 00:16:22,550 І падзеі, калі некалькі частак ваш код мець зносіны адзін з адным. 298 00:16:22,550 --> 00:16:26,840 У нуля, гэта было, калі вы выкарыстоўвалі кантроль і вяшчання Калі я 299 00:16:26,840 --> 00:16:29,500 Атрымаеце блокаў. 300 00:16:29,500 --> 00:16:35,170 >> А таксама, у задачы Набор 4, мы бачылі трохі падзей, а таксама. 301 00:16:35,170 --> 00:16:38,250 Вы, хлопцы, маглі б выкарыстоўваць Бібліятэка Gevent. 302 00:16:38,250 --> 00:16:42,450 І была функцыя waitForClick у якім вы чакалі 303 00:16:42,450 --> 00:16:44,300 для карыстальніка, каб націснуць кнопку. 304 00:16:44,300 --> 00:16:47,870 І ваш пстрычка, у гэтым выпадку, было б падзей і чакаць клік гэта ваш 305 00:16:47,870 --> 00:16:49,120 апрацоўшчык падзей. 306 00:16:49,120 --> 00:16:53,690 307 00:16:53,690 --> 00:16:58,630 >> А таксама, па ўсёй паказ psets і працуе на вашых psets, вы 308 00:16:58,630 --> 00:17:01,920 магчыма, ўступаюць у кантакт з Некаторыя з гэтых каманд. 309 00:17:01,920 --> 00:17:05,579 Гэта тое, што вы набралі ў ваша акно тэрмінала або што акно 310 00:17:05,579 --> 00:17:12,119 што з'яўляецца на вашым г праўку, істотна перайдзіце кампутар. 311 00:17:12,119 --> 00:17:19,440 >> Так, напрыклад, LS пералічвае змесціва каталога. 312 00:17:19,440 --> 00:17:22,510 Стварэнне каталога стварае новую тэчку. 313 00:17:22,510 --> 00:17:24,819 CD, змяніць каталог. 314 00:17:24,819 --> 00:17:28,400 RM, выдаліць, выдаляе файл ці некаторыя каталог. 315 00:17:28,400 --> 00:17:31,050 А потым выдаліць каталог выдаляе каталог. 316 00:17:31,050 --> 00:17:32,300 >> АЎДЫТОРЫЯ: [неразборліва]? 317 00:17:32,300 --> 00:17:36,978 318 00:17:36,978 --> 00:17:38,370 >> СПІКЕР 1: Так, вядома. 319 00:17:38,370 --> 00:17:42,530 320 00:17:42,530 --> 00:17:46,040 На жаль, пытанне было, калі вас б прапанаваць пакласці гэта 321 00:17:46,040 --> 00:17:48,840 на шпаргалку. 322 00:17:48,840 --> 00:17:49,440 Гэта магло б дапамагчы. 323 00:17:49,440 --> 00:17:51,490 Калі ў вас ёсць нумар, вы можаце паставіць яго на. 324 00:17:51,490 --> 00:17:56,170 Гэта таксама проста, як правіла досыць добра запомніць, таму што, калі вы выкарыстоўваеце яго 325 00:17:56,170 --> 00:17:59,060 Вы маглі б хацець проста значыць ён запомніў. 326 00:17:59,060 --> 00:18:02,750 Гэта зробіць вашу жыццё нашмат прасцей. 327 00:18:02,750 --> 00:18:04,000 Я адказаў на ваша пытанне? 328 00:18:04,000 --> 00:18:10,528 329 00:18:10,528 --> 00:18:14,290 >> Так што цяпер, мы крыху пагаварылі коратка пра бібліятэкі. 330 00:18:14,290 --> 00:18:18,570 Але два галоўных тыя, якія мы былі выкарыстоўваючы да гэтага часу ў ход ідуць 331 00:18:18,570 --> 00:18:20,860 стандарт ўводу / высновы і CS50. 332 00:18:20,860 --> 00:18:25,410 Якія рэчы ўключаныя у стандартнай бібліятэцы ўводу / высновы? 333 00:18:25,410 --> 00:18:28,410 >> Так, да гэтага часу мы выкарыстоўвалі Printf. 334 00:18:28,410 --> 00:18:31,150 У CS50, мы выкарыстоўвалі GetInt і GetString. 335 00:18:31,150 --> 00:18:37,200 І тып дадзеных радок таксама адбываецца , Які быў абвешчаны ў гэтым CS50 бібліятэкі. 336 00:18:37,200 --> 00:18:40,250 Мы пагаворым яшчэ трохі ў глыбіні аб як бібліятэкі працуюць і як яны 337 00:18:40,250 --> 00:18:41,870 ўзаемадзейнічаць з астатняй часткай кода. 338 00:18:41,870 --> 00:18:46,220 Але тыя, з'яўляюцца двума асноўнымі тыя, якія мы ўступаюць у кантакт з да гэтага часу ў 339 00:18:46,220 --> 00:18:48,430 Вядома. 340 00:18:48,430 --> 00:18:50,050 >> Віды. 341 00:18:50,050 --> 00:18:58,120 Гэта добра, каб памятаць, колькі кожны тып прадстаўлены ці як 342 00:18:58,120 --> 00:19:02,840 колькасць байт кожны тып requires-- 343 00:19:02,840 --> 00:19:04,990 Int, 4 байта; сімвал, 1 байт. 344 00:19:04,990 --> 00:19:06,550 Паплавок складае 4 байта. 345 00:19:06,550 --> 00:19:07,782 Што такое двайны? 346 00:19:07,782 --> 00:19:09,032 >> АЎДЫТОРЫЯ: [неразборліва]. 347 00:19:09,032 --> 00:19:11,398 348 00:19:11,398 --> 00:19:16,240 >> СПІКЕР 1: Так, так паплавок але падвоіць памер. 349 00:19:16,240 --> 00:19:17,150 А як наконт тых часоў? 350 00:19:17,150 --> 00:19:18,400 >> АЎДЫТОРЫЯ: [неразборліва]. 351 00:19:18,400 --> 00:19:21,614 352 00:19:21,614 --> 00:19:24,680 >> СПІКЕР 1: OK. 353 00:19:24,680 --> 00:19:25,410 Што такое доўга? 354 00:19:25,410 --> 00:19:26,660 >> АЎДЫТОРЫЯ: [неразборліва]. 355 00:19:26,660 --> 00:19:29,400 356 00:19:29,400 --> 00:19:31,450 >> СПІКЕР 1: Так, два разы на Int. 357 00:19:31,450 --> 00:19:34,240 358 00:19:34,240 --> 00:19:34,705 Так. 359 00:19:34,705 --> 00:19:36,100 >> АЎДЫТОРЫЯ: [неразборліва]. 360 00:19:36,100 --> 00:19:38,030 >> СПІКЕР 1: Лонг [неразборліва]. 361 00:19:38,030 --> 00:19:41,860 А потым доўга доўга удвая больш, чым. 362 00:19:41,860 --> 00:19:42,814 >> АЎДЫТОРЫЯ: Не, няма. 363 00:19:42,814 --> 00:19:47,107 Доўгая проста унутр. 364 00:19:47,107 --> 00:19:50,910 Гэта залежыць ад архітэктуры да [неразборліва] 365 00:19:50,910 --> 00:19:52,922 і Int маюць аднолькавы памер. 366 00:19:52,922 --> 00:19:54,172 [Неразборліва]. 367 00:19:54,172 --> 00:19:58,841 368 00:19:58,841 --> 00:20:00,920 >> СПІКЕР 1: Так доўга і Int аднолькавыя. 369 00:20:00,920 --> 00:20:02,943 А потым вельмі доўга ўдвая унутр. 370 00:20:02,943 --> 00:20:03,910 Прахладны. 371 00:20:03,910 --> 00:20:05,550 І потым, што гэта апошні тып? 372 00:20:05,550 --> 00:20:06,510 >> АЎДЫТОРЫЯ: Паказальнік. 373 00:20:06,510 --> 00:20:10,350 >> СПІКЕР 1: Так, так мы даведаліся Крыху пра паказальнікаў. 374 00:20:10,350 --> 00:20:14,015 І незалежна ад таго, паказальнік паказваючы to-- яго можа быць знак зоркі 375 00:20:14,015 --> 00:20:15,880 або Int star-- 376 00:20:15,880 --> 00:20:20,530 гэта заўсёды 4 байта для паказальніка. 377 00:20:20,530 --> 00:20:21,633 Пытанні аб тым, што? 378 00:20:21,633 --> 00:20:22,116 Так? 379 00:20:22,116 --> 00:20:24,531 >> АЎДЫТОРЫЯ: [неразборліва]? 380 00:20:24,531 --> 00:20:29,530 >> СПІКЕР 1: Так доўга і Int з'яўляюцца тое ж самае ў гэтым CS50 прылады. 381 00:20:29,530 --> 00:20:32,302 >> АЎДЫТОРЫЯ: Прыбор цалкам ўзаемазаменныя. 382 00:20:32,302 --> 00:20:33,510 >> СПІКЕР 1: Так. 383 00:20:33,510 --> 00:20:36,610 Так потым доўга доўга двайны унутр. 384 00:20:36,610 --> 00:20:39,250 >> АЎДЫТОРЫЯ: Гэта 32 біт? 385 00:20:39,250 --> 00:20:40,620 >> СПІКЕР 1: 32 біт, так. 386 00:20:40,620 --> 00:20:43,572 >> АЎДЫТОРЫЯ: Так [неразборліва]? 387 00:20:43,572 --> 00:20:46,790 >> СПІКЕР 1: Так, калі гэта не так відавочна кажуць, вас 388 00:20:46,790 --> 00:20:47,870 павінны ўзяць на сябе 32 біт. 389 00:20:47,870 --> 00:20:50,040 >> АЎДЫТОРЫЯ: Было б нешта сказаць як мяркуючы 390 00:20:50,040 --> 00:20:51,498 Архітэктура як прыбора. 391 00:20:51,498 --> 00:20:58,800 392 00:20:58,800 --> 00:21:01,710 Для 64-бітнай, толькі тое, што Змена з'яўляюцца прагне і паказальнікі. 393 00:21:01,710 --> 00:21:05,614 Як яны [неразборліва]. 394 00:21:05,614 --> 00:21:06,590 >> СПІКЕР 1: Да? 395 00:21:06,590 --> 00:21:07,566 >> АЎДЫТОРЫЯ: Вопрос. 396 00:21:07,566 --> 00:21:10,982 Так на адным з практыкі віктарыны, ён просіць аб непадпісаным Int. 397 00:21:10,982 --> 00:21:15,374 Так як жа, што вызначаецца ад Int [неразборліва]? 398 00:21:15,374 --> 00:21:18,140 >> СПІКЕР 1: без знака у таксама 4 байта. 399 00:21:18,140 --> 00:21:21,172 Але чым адрозніваюцца падпісаны Int і без знака Int? 400 00:21:21,172 --> 00:21:22,422 >> АЎДЫТОРЫЯ: [неразборліва]. 401 00:21:22,422 --> 00:21:24,868 402 00:21:24,868 --> 00:21:25,630 >> СПІКЕР 1: Права. 403 00:21:25,630 --> 00:21:27,570 Можна ўявіць адмоўныя значэння. 404 00:21:27,570 --> 00:21:28,580 Але як гэта зрабіць? 405 00:21:28,580 --> 00:21:30,536 >> АЎДЫТОРЫЯ: [неразборліва]. 406 00:21:30,536 --> 00:21:36,370 >> СПІКЕР 1: Так, гэта эканоміць 1 біт для прадстаўлення знака. 407 00:21:36,370 --> 00:21:40,910 408 00:21:40,910 --> 00:21:45,040 Падпісаны мае адзін біт, што ўяўляе сабой знак. 409 00:21:45,040 --> 00:21:48,886 І без знака проста ўсе станоўчыя. 410 00:21:48,886 --> 00:21:50,365 >> АЎДЫТОРЫЯ: ОК. 411 00:21:50,365 --> 00:21:54,230 Дык вы кажаце, што нумар на дваіх чалавек у два разы больш паплаўком? 412 00:21:54,230 --> 00:21:58,202 >> СПІКЕР 1: Двухмесны ў два разы Памер цэлага, так. 413 00:21:58,202 --> 00:22:01,639 >> АЎДЫТОРЫЯ: Як паказальнік каб доўга доўга [неразборліва]? 414 00:22:01,639 --> 00:22:06,058 415 00:22:06,058 --> 00:22:10,870 >> СПІКЕР 1: Такім чынам, пытанне ў тым, як робіць паказальнік на доўгі long-- 416 00:22:10,870 --> 00:22:13,800 Як гэта толькі чатыры байта, калі вельмі доўга яе 8 байт. 417 00:22:13,800 --> 00:22:17,310 Так што памятаеце, што гэта паказальнік, па сутнасці справы, на вельмі базавага значэння. 418 00:22:17,310 --> 00:22:19,046 >> АЎДЫТОРЫЯ: [неразборліва]. 419 00:22:19,046 --> 00:22:22,670 >> СПІКЕР 1: Так, так паказальнік гэта проста вочка памяці. 420 00:22:22,670 --> 00:22:28,040 Так што не мае значэння, як шмат месца што паказальнік накіраваны ў. 421 00:22:28,040 --> 00:22:32,060 Гэта неабходна толькі 4 байта, каб адсочваць з гэтай вочка памяці. 422 00:22:32,060 --> 00:22:34,760 423 00:22:34,760 --> 00:22:36,010 Яшчэ пытанні? 424 00:22:36,010 --> 00:22:39,800 425 00:22:39,800 --> 00:22:41,050 Прахладны. 426 00:22:41,050 --> 00:22:42,920 427 00:22:42,920 --> 00:22:47,460 >> Так апошняе, што ў мяне ёсць выкарыстоўваецца стандартны вывад. 428 00:22:47,460 --> 00:22:51,020 Вы павінны выкарыстоўваць іх часта Дастаткова таго, што вы можаце ўспомніць. 429 00:22:51,020 --> 00:22:54,800 Але гэта, калі мы выкарыстоўваем Е, напрыклад. 430 00:22:54,800 --> 00:22:59,260 І ў нас ёсць гэтыя запаўняльнікі, называліся коды фармату. 431 00:22:59,260 --> 00:23:03,910 >> Так працэнтаў з гольца, адсоткаў я для міжнар, і мы можам таксама выкарыстоўваць працэнтную в. 432 00:23:03,910 --> 00:23:05,130 Гэта тое ж самае. 433 00:23:05,130 --> 00:23:08,200 Але, як правіла, у CS50 мы паспрабуйце выкарыстоўваць працэнтную I. 434 00:23:08,200 --> 00:23:09,860 Працэнт е для паплаўка. 435 00:23:09,860 --> 00:23:15,620 Працэнт Л.Д. доўга доўга і адсоткаў з для радка. 436 00:23:15,620 --> 00:23:18,550 >> Сапраўды гэтак жа, мы выкарысталі некалькі гэтыя кіраўнікі паслядоўнасці. 437 00:23:18,550 --> 00:23:22,431 Напрыклад, зваротны слэш н для новай лініі. 438 00:23:22,431 --> 00:23:26,910 Гэта проста, калі вы фарматаванне ваш код для друку ф. 439 00:23:26,910 --> 00:23:27,260 Так? 440 00:23:27,260 --> 00:23:28,906 >> АЎДЫТОРЫЯ: Што такое адсоткаў сут на працягу? 441 00:23:28,906 --> 00:23:31,850 >> СПІКЕР 1: Такім чынам, пытанне з'яўляецца тое, што адсоткаў сут на працягу? 442 00:23:31,850 --> 00:23:33,270 Працэнт г для цэлых лікаў. 443 00:23:33,270 --> 00:23:37,392 Працэнт D і I адсоткаў аднолькавыя. 444 00:23:37,392 --> 00:23:41,130 >> АЎДЫТОРЫЯ: У чым розніца паміж зваротны слеш н і зваротны г? 445 00:23:41,130 --> 00:23:45,300 >> СПІКЕР 1: Такім чынам, пытанне ў чым Розніца паміж люфта п і 446 00:23:45,300 --> 00:23:48,615 люфт г? 447 00:23:48,615 --> 00:23:50,906 Я думаю, зваротнай касой р is-- 448 00:23:50,906 --> 00:23:54,340 >> АЎДЫТОРЫЯ: Так зваротны слеш г ўсяго толькі мае на ўвазе, вяртаецца ў пачатак радка 449 00:23:54,340 --> 00:23:56,670 фактычна не збіраюся з новага радка. 450 00:23:56,670 --> 00:24:01,000 Так што, калі вы друкуеце зваротнай касой г і вы вярнуцца да пачатку радка 451 00:24:01,000 --> 00:24:04,005 затым раздрукаваць больш матэрыялу, перазапісу матэрыял, які ўжо на 452 00:24:04,005 --> 00:24:04,390 [Неразборліва]. 453 00:24:04,390 --> 00:24:06,725 У той час як, н фактычна ідзе на новы лініі і ідзе ў [неразборліва]. 454 00:24:06,725 --> 00:24:10,525 455 00:24:10,525 --> 00:24:13,915 >> СПІКЕР 1: Ну, любыя іншыя пытанні? 456 00:24:13,915 --> 00:24:15,430 Добра. 457 00:24:15,430 --> 00:24:18,617 Я збіраюся перадаць яго далей, каб Дэн, які будзе працягвацца. 458 00:24:18,617 --> 00:24:25,078 >> [Апладысменты] 459 00:24:25,078 --> 00:25:08,814 460 00:25:08,814 --> 00:25:09,720 >> Дэн: Усе правша. 461 00:25:09,720 --> 00:25:18,590 Так што я буду казаць пра іншую шырынёй Дыяпазон ідэй з класа, якія 462 00:25:18,590 --> 00:25:23,220 прыкладна прадстаўнік тыдні два і пачатак тры тыдні, пачынаючы з 463 00:25:23,220 --> 00:25:28,690 з ліцця, які проста спосаб лячэння значэнне пэўнага тыпу, як 464 00:25:28,690 --> 00:25:30,830 значэнне іншага тыпу. 465 00:25:30,830 --> 00:25:34,110 Такім чынам, мы можам зрабіць гэта з знакаў у Інтс, ўсплывае на цэлых лікаў, і 466 00:25:34,110 --> 00:25:35,360 доўгія прагне падвоіць. 467 00:25:35,360 --> 00:25:38,170 468 00:25:38,170 --> 00:25:44,500 >> Усе гэтыя рэчы можна выкарыстоўваць у якасці спосабаў лячэння некаторы лікавае значэнне 469 00:25:44,500 --> 00:25:48,370 мінус сімвал, як некаторыя іншыя лікавае значэнне. 470 00:25:48,370 --> 00:25:54,480 Такім чынам, ёсць некаторыя пытанні, з гэтым, з Вядома, якіх прыходзіць, калі вы прыводзіце 471 00:25:54,480 --> 00:25:57,860 рэчы, як паплавок на цэлых лікаў. 472 00:25:57,860 --> 00:26:00,500 Так што гэта крыху дзіўна. 473 00:26:00,500 --> 00:26:03,170 У нас ёсць паплавок, які з'яўляецца 1,31. 474 00:26:03,170 --> 00:26:05,220 Памножым яго на 10 тысяч. 475 00:26:05,220 --> 00:26:08,380 А потым мы друкуем яго ў якасці міжнар. 476 00:26:08,380 --> 00:26:09,630 Што гэта выйсце? 477 00:26:09,630 --> 00:26:11,600 478 00:26:11,600 --> 00:26:14,020 10000 раз 1,31. 479 00:26:14,020 --> 00:26:18,761 Так 13000, у тым, што адгадаць? 480 00:26:18,761 --> 00:26:20,685 >> Залы: Я думаю, што гэта 10000. 481 00:26:20,685 --> 00:26:24,234 >> Дэн: Так што я памножыўшы яго на 10 тысяч да Я ліцця яго. 482 00:26:24,234 --> 00:26:25,202 >> АЎДЫТОРЫЯ: Ох. 483 00:26:25,202 --> 00:26:27,622 Не было там быць адзін 9 і некаторыя 0 лічбы? 484 00:26:27,622 --> 00:26:29,270 >> Дэн: Вы, магчыма, некаторыя дзіўныя лічбы. 485 00:26:29,270 --> 00:26:32,410 486 00:26:32,410 --> 00:26:37,670 Так правільна, гэта ў 1,3 разы 10000. 487 00:26:37,670 --> 00:26:40,040 Дык вось 13000. 488 00:26:40,040 --> 00:26:41,313 І гэты дадатковы weird-- 489 00:26:41,313 --> 00:26:42,160 >> АЎДЫТОРЫЯ: 13100. 490 00:26:42,160 --> 00:26:42,650 >> Дэн: 13100. 491 00:26:42,650 --> 00:26:44,910 Дзякуй, Боб. 492 00:26:44,910 --> 00:26:46,610 І гэты дадатковы weirdness-- 493 00:26:46,610 --> 00:26:48,060 гэта 9,9-- 494 00:26:48,060 --> 00:26:53,860 проста таму, што гэтага ліцця скончыў акруглення ўніз, дзе 495 00:26:53,860 --> 00:26:55,394 яно не павінна быць. 496 00:26:55,394 --> 00:26:55,871 Так. 497 00:26:55,871 --> 00:26:58,256 >> АЎДЫТОРЫЯ: ліццё адбываецца пасля ўсё астатняе? 498 00:26:58,256 --> 00:27:03,865 >> Дэн: Так таму што ў мяне гэта ў друку, гэта робіць гэты множанне перад ім 499 00:27:03,865 --> 00:27:05,230 робіць гэты кастынг. 500 00:27:05,230 --> 00:27:06,140 >> АЎДЫТОРЫЯ: [неразборліва]. 501 00:27:06,140 --> 00:27:11,350 >> Дэн: Я думаю, што гэта паставіць пад першым, ды, які будзе 10000. 502 00:27:11,350 --> 00:27:12,610 Што яшчэ? 503 00:27:12,610 --> 00:27:13,330 Прахладны. 504 00:27:13,330 --> 00:27:16,344 Так што гэта 13099. 505 00:27:16,344 --> 00:27:17,840 Чаму гэта адбываецца? 506 00:27:17,840 --> 00:27:18,900 Недакладнасць. 507 00:27:18,900 --> 00:27:21,020 >> Паплаўкі не ідэальныя. 508 00:27:21,020 --> 00:27:27,550 Яны могуць толькі прадстаўляць ліку ў пэўную колькасць ўважаецца лічбаў. 509 00:27:27,550 --> 00:27:35,120 Так што, калі мы раздрукаваць 8 SIG інжыр на гэта паплавок, мы атрымліваем свайго роду 510 00:27:35,120 --> 00:27:36,800 пачварны погляд нумар. 511 00:27:36,800 --> 00:27:45,580 І гэта таму, што 1,31 не можа дакладна быць прадстаўлены просты 512 00:27:45,580 --> 00:27:49,000 ступенямі двойкі ў машыне. 513 00:27:49,000 --> 00:27:53,530 Так што ў рэшце рэшт прымаючы бліжэй думаю, што ў канчатковым выніку 514 00:27:53,530 --> 00:27:55,710 быць крыху нізка. 515 00:27:55,710 --> 00:27:57,730 Сэнс? 516 00:27:57,730 --> 00:27:59,110 ОК. 517 00:27:59,110 --> 00:28:05,840 >> Зараз, перайшлі ў іншы спосаб робіць ўмоўныя аператары, дзе ўсё 518 00:28:05,840 --> 00:28:09,900 мы клапоцімся аб тым, адна пераменная. 519 00:28:09,900 --> 00:28:16,570 Такім чынам, у гэтым канкрэтным прыкладзе, мы атрымліваючы цэлы лік ад карыстальніка. 520 00:28:16,570 --> 00:28:21,070 А потым мы глядзім на што гэта цэлае з'яўляецца. 521 00:28:21,070 --> 00:28:23,500 Як мяркуецца, гэта лік ад аднаго да чатырох. 522 00:28:23,500 --> 00:28:24,800 Гэта тое, што мы просім. 523 00:28:24,800 --> 00:28:28,450 >> Такім чынам, вы зрабіць перамыкач імя зменнай. 524 00:28:28,450 --> 00:28:34,290 Тады вы стварылі выпадкі можна шануе гэта магло быць. 525 00:28:34,290 --> 00:28:37,730 Так выпадку, калі адзін, кажуць, што гэта нізка. 526 00:28:37,730 --> 00:28:41,080 І тады вы парушыце выйсці стану перамыкача, так 527 00:28:41,080 --> 00:28:43,270 Вы не працягваць. 528 00:28:43,270 --> 00:28:44,830 >> У наступным case-- 529 00:28:44,830 --> 00:28:46,940 так справа два і справа three-- 530 00:28:46,940 --> 00:28:51,920 калі гэта справа два ён проста падае да Першы радок кода ён бачыць, як з 531 00:28:51,920 --> 00:28:55,400 трехмодовом, пакуль не ўбачыць перапынак. 532 00:28:55,400 --> 00:29:00,430 Так што прычына вы атрымліваеце выпадак адзін на толькі друк нізкі таму, што I 533 00:29:00,430 --> 00:29:01,890 ёсць гэты перапынак тут. 534 00:29:01,890 --> 00:29:05,360 Калі я, скажам, ігнараваць гэты break-- калі я кінуў гэтую breakaway-- 535 00:29:05,360 --> 00:29:09,740 было б надрукаваць нізкі, і тады было б друкаваць сярэдзіну, і тады было б зламіць. 536 00:29:09,740 --> 00:29:12,200 >> Так перапынкі з'яўляюцца важнай часткай з пераключэння ўмовы і 537 00:29:12,200 --> 00:29:14,340 яны павінны быць там. 538 00:29:14,340 --> 00:29:20,070 Любыя выпадкі, якія відавочна не агаворана апрацоўваюцца па змаўчанні 539 00:29:20,070 --> 00:29:26,645 Справа ў камутатары і павінны быць пададзеныя. 540 00:29:26,645 --> 00:29:31,363 >> АЎДЫТОРЫЯ: Так 1, 2, 3, і 4 будзе н? 541 00:29:31,363 --> 00:29:33,310 >> Дэн: Значэнні, н можа быць. 542 00:29:33,310 --> 00:29:34,654 Так. 543 00:29:34,654 --> 00:29:35,146 Так? 544 00:29:35,146 --> 00:29:37,606 >> АЎДЫТОРЫЯ: Такім чынам, калі ў вас ёсць што [неразборліва]? 545 00:29:37,606 --> 00:29:44,002 546 00:29:44,002 --> 00:29:46,830 >> Дэн: Вы б надрукаваць нізкі, а затым было б надрукаваць сярэдзіну, і 547 00:29:46,830 --> 00:29:47,400 то было б зламіць. 548 00:29:47,400 --> 00:29:50,244 >> Зала: А чаму б раздрукаваць сярэдні калі [неразборліва]? 549 00:29:50,244 --> 00:29:54,036 550 00:29:54,036 --> 00:30:00,550 >> Дэн: Так што ўсё пад выпадку да перапынку трапляе пад. 551 00:30:00,550 --> 00:30:09,390 Так справа адзін прынт пад выпадак адзін, як гэта наступныя друкаваныя. 552 00:30:09,390 --> 00:30:09,890 Так? 553 00:30:09,890 --> 00:30:11,140 >> АЎДЫТОРЫЯ: [неразборліва]? 554 00:30:11,140 --> 00:30:15,890 555 00:30:15,890 --> 00:30:22,170 >> Дэн: Так гэты лік толькі прыватным значэнне, гэтая пераменная 556 00:30:22,170 --> 00:30:23,420 можна ўзяць, ці не так? 557 00:30:23,420 --> 00:30:26,740 558 00:30:26,740 --> 00:30:28,490 Ці мае гэта сэнс? 559 00:30:28,490 --> 00:30:28,990 Так. 560 00:30:28,990 --> 00:30:31,490 >> АЎДЫТОРЫЯ: [неразборліва]? 561 00:30:31,490 --> 00:30:34,130 >> Дэн: Так, справа два будзе друкаваць сярэдняга, а затым разбіць. 562 00:30:34,130 --> 00:30:35,380 >> АЎДЫТОРЫЯ: [неразборліва]? 563 00:30:35,380 --> 00:30:37,954 564 00:30:37,954 --> 00:30:40,050 >> Дэн: Я думаю, што любы? 565 00:30:40,050 --> 00:30:43,855 Якія яшчэ тыпы дадзеных Вы можаце перайсці? 566 00:30:43,855 --> 00:30:46,320 >> АЎДЫТОРЫЯ: Вы можаце перамыкацца ў адносінах да любых тыпах дадзеных. 567 00:30:46,320 --> 00:30:50,905 Але гэта значыць толькі нічога над сімвалаў і Інтс і ўсё ў такім духу, што, паколькі 568 00:30:50,905 --> 00:30:55,600 калі вы пераключэнні паказальнік што на самой справе не мае сэнсу, 569 00:30:55,600 --> 00:30:59,555 пераключэння нагрузак, калі ён нават давайце Вы робіце гэта, таму што з якая плавае кропкай 570 00:30:59,555 --> 00:31:02,840 у дакладнасці, вы не будзеце сапраўды хачу зрабіць гэта ў любым выпадку. 571 00:31:02,840 --> 00:31:07,320 Так у значнай ступені, усяго Інтс і сімвалы і ўсё ў такім духу. 572 00:31:07,320 --> 00:31:12,360 >> Дэн: Так, гэта калі ў вас ёсць відавочнае значэння, што вы ведаеце, я думаю, што, можа быць 573 00:31:12,360 --> 00:31:14,250 што пераход на самай справе карысна. 574 00:31:14,250 --> 00:31:17,094 575 00:31:17,094 --> 00:31:18,990 Добра? 576 00:31:18,990 --> 00:31:21,370 ОК. 577 00:31:21,370 --> 00:31:26,180 >> Сфера з'яўляецца дыяпазон, што заявіў пераменная распаўсюджваецца. 578 00:31:26,180 --> 00:31:32,190 Такім чынам, у гэтай маленькай кавалак кода ў мяне ёсць, было б поўна памылак. 579 00:31:32,190 --> 00:31:41,450 А прычына ў тым, я абвясціў гэтую Int я ў рамках гэтага цыкла. 580 00:31:41,450 --> 00:31:46,390 А потым я спрабую спасылацца, што я за межамі, што для сферы завесы. 581 00:31:46,390 --> 00:31:50,330 >> Так у асноўным, вы можаце думаць аб рамкі як усе, што вы аб'яўляеце 582 00:31:50,330 --> 00:31:59,750 з ўнутры набору фігурных дужках толькі існуе ў тых фігурныя дужкі. 583 00:31:59,750 --> 00:32:04,990 А калі паспрабаваць і выкарыстоўваць гэтую зменную за межамі тых фігурныя дужкі, вы будзеце 584 00:32:04,990 --> 00:32:08,356 атрымаеце памылку ад кампілятара. 585 00:32:08,356 --> 00:32:08,812 Так? 586 00:32:08,812 --> 00:32:09,724 >> АЎДЫТОРЫЯ: Так што гэта адзін не працуе? 587 00:32:09,724 --> 00:32:11,790 >> Дэн: Гэта не працуе, так. 588 00:32:11,790 --> 00:32:17,190 589 00:32:17,190 --> 00:32:18,660 Радка. 590 00:32:18,660 --> 00:32:19,780 Радок сімвал *. 591 00:32:19,780 --> 00:32:22,250 Яны сапраўды гэтак жа. 592 00:32:22,250 --> 00:32:25,540 Яны проста паказальнікі на знакі. 593 00:32:25,540 --> 00:32:33,000 І любыя радкі, якія вы павінны павінны скончыцца з зваротнай касой рысы нулявы, які знаходзіцца ўсяго 594 00:32:33,000 --> 00:32:34,410 з канвенцыя. 595 00:32:34,410 --> 00:32:36,680 >> Яна называецца NULL тэрмінатар. 596 00:32:36,680 --> 00:32:39,050 І NULL-- 597 00:32:39,050 --> 00:32:41,670 капітал N, капітал U, капітал L, капіталу L-- 598 00:32:41,670 --> 00:32:44,290 гэта не тое ж самае, NULL тэрмінатар. 599 00:32:44,290 --> 00:32:46,640 Гэта паказальнік. 600 00:32:46,640 --> 00:32:48,280 Гэта сімвал. 601 00:32:48,280 --> 00:32:49,530 Яны вельмі розныя. 602 00:32:49,530 --> 00:32:50,200 Памятаеце гэта. 603 00:32:50,200 --> 00:32:52,320 Гэта будзе на віктарыне, напэўна. 604 00:32:52,320 --> 00:32:54,040 Я не бачыў віктарыну. 605 00:32:54,040 --> 00:32:57,880 606 00:32:57,880 --> 00:32:58,840 Так? 607 00:32:58,840 --> 00:33:01,232 >> АЎДЫТОРЫЯ: Так NULL, скажам, паказальнік? 608 00:33:01,232 --> 00:33:01,995 >> Дэн: Так. 609 00:33:01,995 --> 00:33:05,170 >> АЎДЫТОРЫЯ: Што робіць [неразборліва]? 610 00:33:05,170 --> 00:33:10,050 >> Дэн: Калі, скажам, Таноса выклікаецца, калі вам не хапае памяці, каб атрымаць 611 00:33:10,050 --> 00:33:14,400 незалежна ад памеру вы просіце, Таноса вернецца NULL. 612 00:33:14,400 --> 00:33:19,550 Гэта, у асноўным, кожны раз, калі функцыя павінна вяртаць паказальнік, вы 613 00:33:19,550 --> 00:33:22,600 трэба праверыць супраць NULL, таму што NULL з'яўляецца даволі good-- 614 00:33:22,600 --> 00:33:25,260 гэта, свайго роду, значэнне смецця. 615 00:33:25,260 --> 00:33:27,050 Гэта нулявы наколькі паказальнікі ісці. 616 00:33:27,050 --> 00:33:29,630 617 00:33:29,630 --> 00:33:32,250 >> Кожны раз, калі вы выклікаеце функцыю, што вяртае паказальнік. 618 00:33:32,250 --> 00:33:35,960 Вы будзеце жадаць, каб праверыць, што ўпэўнены, што гэты паказальнік ня NULL 619 00:33:35,960 --> 00:33:37,760 таму NULL з'яўляецца вельмі распаўсюджаным з'явай. 620 00:33:37,760 --> 00:33:40,160 Гэта свайго роду вяртанне смецця. 621 00:33:40,160 --> 00:33:44,902 Так што калі што-то не ідуць прама, проста вярнуць NULL замест. 622 00:33:44,902 --> 00:33:45,898 >> АЎДЫТОРЫЯ: [неразборліва]? 623 00:33:45,898 --> 00:33:48,922 >> Дэн: Так, і што гэта такое. 624 00:33:48,922 --> 00:33:51,750 >> АЎДЫТОРЫЯ: [неразборліва]? 625 00:33:51,750 --> 00:33:52,800 >> Дэн: Загавор, так як гэта. 626 00:33:52,800 --> 00:33:54,150 Гэта NULL тэрмінатар. 627 00:33:54,150 --> 00:33:56,560 Гэта маленькая N-U-L-L, калі вы правапіс яго. 628 00:33:56,560 --> 00:33:59,860 >> АЎДЫТОРЫЯ: І я проста пайшоў таму і праверыў яго. 629 00:33:59,860 --> 00:34:03,010 І калі вы паспрабуеце паставіць з якая плавае кропкай Значэнне ў перамыкач, ён будзе крычаць на вас 630 00:34:03,010 --> 00:34:05,916 кажучы, зацвярджэнне патрабуе выраз цэлага тыпу. 631 00:34:05,916 --> 00:34:07,166 >> DAN: Там вы ідзяце. 632 00:34:07,166 --> 00:34:09,639 633 00:34:09,639 --> 00:34:12,246 Але так, якой было пытанне? 634 00:34:12,246 --> 00:34:13,496 >> АЎДЫТОРЫЯ: [неразборліва]? 635 00:34:13,496 --> 00:34:16,150 636 00:34:16,150 --> 00:34:23,679 >> Дэн: Так сталіца N, капітал U, капітал L, капіталу L з'яўляецца актуальнай з рэччу. 637 00:34:23,679 --> 00:34:29,719 Гэта паказальнік NULL і будзе разглядацца толькі ў якасці такіх. 638 00:34:29,719 --> 00:34:33,530 Вы ніколі не паспрабаваць і заклінанні NULL характар ​​і паглядзець любы 639 00:34:33,530 --> 00:34:35,630 іншага шляху, акрамя гэтага. 640 00:34:35,630 --> 00:34:36,610 Так? 641 00:34:36,610 --> 00:34:42,490 >> АЎДЫТОРЫЯ: Так вяртання на персанаж макс або то ў заўвагах, ці так 642 00:34:42,490 --> 00:34:43,960 ўвасабляюць тую ж самую функцыю як [неразборліва]? 643 00:34:43,960 --> 00:34:50,655 644 00:34:50,655 --> 00:34:54,949 >> АЎДЫТОРЫЯ: Дык вы маеце на ўвазе вяртанне сЬаг макс ад GetChar, або 645 00:34:54,949 --> 00:34:55,444 тое, што гэта? 646 00:34:55,444 --> 00:34:55,940 >> АЎДЫТОРЫЯ: Так. 647 00:34:55,940 --> 00:34:58,620 >> АЎДЫТОРЫЯ: Так, так што агульная тэрмін для ўсіх тых рэчаў, 648 00:34:58,620 --> 00:34:59,920 дазорцы значэння. 649 00:34:59,920 --> 00:35:03,640 Так як вяртанне цэлалікавае макс ад GetInt і сімвал макс ад GetChar, гэта 650 00:35:03,640 --> 00:35:06,010 павінен быць, як, усё ў парадку, калі гэтыя рэчы вяртаюцца да нас, 651 00:35:06,010 --> 00:35:07,210 то пайшло не так. 652 00:35:07,210 --> 00:35:09,950 >> Для паказальнікаў, мы як раз ёсць гэта дазорнай значэнне, што кожны 653 00:35:09,950 --> 00:35:10,750 узгадняе. 654 00:35:10,750 --> 00:35:13,210 І гэта тое, што вам вярнуцца калі справы ідуць дрэнна. 655 00:35:13,210 --> 00:35:15,910 Так сімвал макс гэта тое, што мы выкарыстоўваем каб ўяўляць сабой нешта 656 00:35:15,910 --> 00:35:18,100 як NULL або GetChar. 657 00:35:18,100 --> 00:35:23,420 >> АЎДЫТОРЫЯ: Так што, калі вы тэстуеце GetChar, можа вы проста пакласці NULL? 658 00:35:23,420 --> 00:35:23,910 Б, што змяніць сітуацыю? 659 00:35:23,910 --> 00:35:25,400 >> Дэн: Вы не маглі б проста праверыць NULL. 660 00:35:25,400 --> 00:35:30,130 Вы павінны былі б праверыць сЬаг макс таму Вяртаецца значэнне з функцыі 661 00:35:30,130 --> 00:35:35,416 персанаж не з'яўляецца паказальнікам. 662 00:35:35,416 --> 00:35:35,888 Так? 663 00:35:35,888 --> 00:35:38,248 >> АЎДЫТОРЫЯ: задае гэтае пытанне для даўжыні радка. 664 00:35:38,248 --> 00:35:40,136 Якія ўключаюць у сябе нулявой сімвал ці што? 665 00:35:40,136 --> 00:35:41,000 >> DAN: Няма 666 00:35:41,000 --> 00:35:45,930 І гэта на самай справе, як даўжыня радка ведае, каб спыніць, таму што ён праходзіць праз 667 00:35:45,930 --> 00:35:49,070 Ваш масіў сімвалаў да ён бачыць пусты знак. 668 00:35:49,070 --> 00:35:51,030 А потым гэта як, усё Добра, я зрабіў. 669 00:35:51,030 --> 00:35:52,130 >> АЎДЫТОРЫЯ: [неразборліва] пяць? 670 00:35:52,130 --> 00:35:53,990 >> Дэн: Добры дзень бы пяць. 671 00:35:53,990 --> 00:35:55,240 Так. 672 00:35:55,240 --> 00:35:59,580 673 00:35:59,580 --> 00:36:02,880 Так масівы бесперапыннасць блокі памяці. 674 00:36:02,880 --> 00:36:08,480 Яны маюць імгненны доступ, кажучы Імя масіва, а затым, у кучаравых 675 00:36:08,480 --> 00:36:16,720 дужкі, што індэкс вы хочаце пайсці каб, яны індэксуюцца з нуля праз 676 00:36:16,720 --> 00:36:20,100 даўжыня масіва мінус 1. 677 00:36:20,100 --> 00:36:23,070 >> І яны абвешчаныя па тыпу рэч, якая вы захоўваеце ў 678 00:36:23,070 --> 00:36:29,750 Масіў, імя масіва, а затым што памер гэтага масіва. 679 00:36:29,750 --> 00:36:36,660 Так што гэта сімвал масіў даўжыні шэсць, што мае гэтыя значэння. 680 00:36:36,660 --> 00:36:42,050 681 00:36:42,050 --> 00:36:42,700 Так? 682 00:36:42,700 --> 00:36:43,950 >> АЎДЫТОРЫЯ: [неразборліва]? 683 00:36:43,950 --> 00:36:47,980 684 00:36:47,980 --> 00:36:48,460 >> Дэн: Так. 685 00:36:48,460 --> 00:36:51,340 >> АЎДЫТОРЫЯ: [неразборліва]? 686 00:36:51,340 --> 00:36:56,700 >> Дэн: Калі ў вас ёсць тое, што адбываецца у масіў ўжо зрабіў. 687 00:36:56,700 --> 00:37:02,260 Такім чынам, вы можаце паказаць гэта замест гэтага як, скажам, знак, што назва вашай 688 00:37:02,260 --> 00:37:12,200 масіў, пустыя дужкі роўная кучаравыя рыхтавацца H коска E коска L коскі L коску 689 00:37:12,200 --> 00:37:16,290 O коска NULL характар і фігурная дужка. 690 00:37:16,290 --> 00:37:18,180 Гэта таксама будзе працаваць у якасці дэкларацыі. 691 00:37:18,180 --> 00:37:20,886 >> АЎДЫТОРЫЯ: [неразборліва]? 692 00:37:20,886 --> 00:37:23,110 >> Дэн: Тады вы павінны мець памер ужо зрабіў. 693 00:37:23,110 --> 00:37:23,896 >> АЎДЫТОРЫЯ: [неразборліва]? 694 00:37:23,896 --> 00:37:25,146 >> Дэн: Так. 695 00:37:25,146 --> 00:37:30,114 696 00:37:30,114 --> 00:37:32,420 Усе правша. 697 00:37:32,420 --> 00:37:36,430 Аргументы каманднага радка з'яўляюцца адным са спосабаў атрыманне дадзеных ад карыстальніка ў якасці 698 00:37:36,430 --> 00:37:39,380 Аргументы галоўны. 699 00:37:39,380 --> 00:37:40,600 Галоўная прымае два аргументу. 700 00:37:40,600 --> 00:37:47,680 Лік аргументаў, што ў цяперашні час прайшлі ўздоўж каманднага радка і 701 00:37:47,680 --> 00:37:55,340 вектар радкоў або масіў радкоў з усіх аргументаў. 702 00:37:55,340 --> 00:38:07,840 >> Так што, калі я, скажам, называецца такая функцыя, як кропка з 1 прасторы, 2 прасторы, тры, 703 00:38:07,840 --> 00:38:10,110 агдс будзе 4. 704 00:38:10,110 --> 00:38:17,370 І агду 0 будзе кропка з. 705 00:38:17,370 --> 00:38:19,130 Argv1 будзе 1. 706 00:38:19,130 --> 00:38:23,030 argv2 б 2. argv3 будзе 3, у гэтым канкрэтным выпадку. 707 00:38:23,030 --> 00:38:23,310 Так? 708 00:38:23,310 --> 00:38:25,400 >> АЎДЫТОРЫЯ: [неразборліва]? 709 00:38:25,400 --> 00:38:34,010 >> Дэн: апошні элемент у масіве таму што масіў даўжынёй агдс плюс 710 00:38:34,010 --> 00:38:41,050 адзін з ARGB, апошні элемент з'яўляецца паказальнікам NULL. 711 00:38:41,050 --> 00:38:42,580 Гэта агдс плюс 1. 712 00:38:42,580 --> 00:38:46,210 713 00:38:46,210 --> 00:38:52,150 Такім чынам, у выпадку, што я толькі што сказаў, гэта будзе агду 0 з'яўляецца кропка з. 714 00:38:52,150 --> 00:38:56,330 агду 1 студзеня argv2 з'яўляецца 2. агду 3 з'яўляецца 3. 715 00:38:56,330 --> 00:39:03,490 агду 4, які з'яўляецца адным больш, чым агдс будзе NULL. 716 00:39:03,490 --> 00:39:04,870 >> І гэта NULL паказальнік. 717 00:39:04,870 --> 00:39:06,590 Так. 718 00:39:06,590 --> 00:39:11,250 І гэта таму, што радок сімвал зорка паказальнік. 719 00:39:11,250 --> 00:39:14,102 Такім чынам, ён павінен быць таго ж тыпу. 720 00:39:14,102 --> 00:39:14,595 Так? 721 00:39:14,595 --> 00:39:16,074 >> АЎДЫТОРЫЯ: Два пытання. 722 00:39:16,074 --> 00:39:21,004 Так адзін, у чым розніца паміж Гэтая і іншыя GetString чым аднаго тыпу 723 00:39:21,004 --> 00:39:22,483 у карыстацкім рухавіка? 724 00:39:22,483 --> 00:39:25,934 І два, гэта захоўваецца ў Ваш нядаўні памяці? 725 00:39:25,934 --> 00:39:28,399 Так як, GetString б быць [неразборліва]? 726 00:39:28,399 --> 00:39:31,357 727 00:39:31,357 --> 00:39:33,650 >> Дэн: Дзе гэта захоўваецца? 728 00:39:33,650 --> 00:39:34,905 Я не ведаю, дзе ён захоўваецца. 729 00:39:34,905 --> 00:39:40,000 >> АЎДЫТОРЫЯ: Так, на самай справе, вы ведаеце, як любы функцыянаваць вы называеце гэта аргументы 730 00:39:40,000 --> 00:39:42,170 захоўваюцца ў стэку? 731 00:39:42,170 --> 00:39:46,610 Так агдс і агду аргументы ў асноўны і яны ў стэку, або сапраўды 732 00:39:46,610 --> 00:39:49,131 ледзь вышэй, што вы думаеце, як пачатак стэка. 733 00:39:49,131 --> 00:39:53,490 Тое, што было іншая частка пытання? 734 00:39:53,490 --> 00:39:56,821 >> АЎДЫТОРЫЯ: Так у чым жа [неразборліва]? 735 00:39:56,821 --> 00:40:00,990 >> Дэн: Так, гэта проста іншы спосаб атрымання дадзеных ад карыстальніка. 736 00:40:00,990 --> 00:40:06,030 Гэтая песня трохі больш эфектыўным і гэта зручней для сцэнарыяў, таму што вас 737 00:40:06,030 --> 00:40:10,070 можа проста перадаць аргументы ваш галоўны Функцыя замест таго, каб чакаць, 738 00:40:10,070 --> 00:40:13,400 для карыстальнікаў, калі ў вас няма ніякіх карыстальнікаў. 739 00:40:13,400 --> 00:40:16,280 >> АЎДЫТОРЫЯ: І так, атрымаць радкі будзе [неразборліва]. 740 00:40:16,280 --> 00:40:17,922 Было б захоўваць рэчы вам трэба. 741 00:40:17,922 --> 00:40:18,834 >> Дэн Да? 742 00:40:18,834 --> 00:40:21,114 >> АЎДЫТОРЫЯ: [неразборліва]? 743 00:40:21,114 --> 00:40:27,545 >> Дэн: Так, агду 0 заўсёды ўключае кропка слэш выкліку функцыі. 744 00:40:27,545 --> 00:40:28,042 Так? 745 00:40:28,042 --> 00:40:29,292 >> АЎДЫТОРЫЯ: [неразборліва]? 746 00:40:29,292 --> 00:40:33,509 747 00:40:33,509 --> 00:40:37,310 >> Дэн: Так, кожны з аргументаў скончылася ў NULL характару, таму што яны 748 00:40:37,310 --> 00:40:38,310 з'яўляюцца радкамі. 749 00:40:38,310 --> 00:40:40,892 >> АЎДЫТОРЫЯ: [неразборліва]? 750 00:40:40,892 --> 00:40:44,116 >> Дэн: Так, агду агдс з'яўляецца паказальнікам NULL. 751 00:40:44,116 --> 00:40:45,112 >> АЎДЫТОРЫЯ: [неразборліва]? 752 00:40:45,112 --> 00:40:47,104 >> Дэн: О, так. 753 00:40:47,104 --> 00:40:48,100 Так, шкада. 754 00:40:48,100 --> 00:40:49,594 >> АЎДЫТОРЫЯ: Так [неразборліва]? 755 00:40:49,594 --> 00:41:08,518 756 00:41:08,518 --> 00:41:16,340 >> Дэн: Такім чынам, пытанне, калі ў вас каманднага радка кропка слэш кропку з 1, 2, 757 00:41:16,340 --> 00:41:20,410 б колькасць каманднага радка Аргументы быць два ці было б тры? 758 00:41:20,410 --> 00:41:24,420 759 00:41:24,420 --> 00:41:28,240 >> Залы: Я думаю, што гэта не мае вялікага значэння. 760 00:41:28,240 --> 00:41:31,370 Я, як правіла, кажуць, о, вы не прайшлі любыя аргументы каманднага радка, калі, 761 00:41:31,370 --> 00:41:32,730 Відавочна, вы выклікалі функцыю. 762 00:41:32,730 --> 00:41:37,950 Так што я, як правіла, вусна выключыць Функцыя з каманднага радка 763 00:41:37,950 --> 00:41:40,350 Аргументы хоць гэта ўключаны ў ARGV. 764 00:41:40,350 --> 00:41:42,600 >> Дэн: Але калі гэта было на test-- 765 00:41:42,600 --> 00:41:46,550 yeah-- а таксама, калі вы кажаце, то як агдс роўны 3, 766 00:41:46,550 --> 00:41:48,512 вы знаходзіцеся ў бяспечнай стоячы. 767 00:41:48,512 --> 00:41:49,416 Так? 768 00:41:49,416 --> 00:41:50,666 >> АЎДЫТОРЫЯ: [неразборліва]? 769 00:41:50,666 --> 00:42:00,990 770 00:42:00,990 --> 00:42:09,510 >> Дэн: Я думаю, што калі замест выкліку гэтага у ARGC і струнных агду дужках 771 00:42:09,510 --> 00:42:14,350 але захаваў тыя ж тыпы і проста называецца ім-то іншае, як 772 00:42:14,350 --> 00:42:16,640 і б, ці будзе гэта ўсё яшчэ працуе? 773 00:42:16,640 --> 00:42:18,790 І гэта было б па-ранейшаму працаваць, Вы б просто-- 774 00:42:18,790 --> 00:42:21,520 замест выкарыстання argc-- Вы б выкарыстоўваць і б. 775 00:42:21,520 --> 00:42:24,436 776 00:42:24,436 --> 00:42:25,408 Так? 777 00:42:25,408 --> 00:42:26,658 >> АЎДЫТОРЫЯ: [неразборліва]? 778 00:42:26,658 --> 00:42:34,642 779 00:42:34,642 --> 00:42:38,850 >> Дэн: Так што пытанне GetString з'яўляецца збіраецеся захоўваць памяць у кучы 780 00:42:38,850 --> 00:42:42,280 таму GetString з'яўляецца сімвал *. 781 00:42:42,280 --> 00:42:47,530 Ён захоўвае памяць, у кучы, таму што называе цяпер Таноса ў фактычны 782 00:42:47,530 --> 00:42:49,258 Рэалізацыя GetString. 783 00:42:49,258 --> 00:42:53,210 784 00:42:53,210 --> 00:42:55,090 ОК, як рухацца далей. 785 00:42:55,090 --> 00:42:55,950 >> Бяспеку. 786 00:42:55,950 --> 00:43:01,090 Такім чынам, каб быць па-сапраўднаму бяспечным, вы не спадзявацца на няма адзін, і вы не дазволіць ні адной доступ да любога 787 00:43:01,090 --> 00:43:04,540 Вашай інфармацыі, і менавіта таму кожны будуе свае ўласныя машыны, 788 00:43:04,540 --> 00:43:09,580 іх уласныя аперацыйныя сістэмы, усе іх праграмы з нуля, і, відавочна, 789 00:43:09,580 --> 00:43:13,410 не падпісацца любым іншым машын праз Інтэрнэт. 790 00:43:13,410 --> 00:43:17,350 Так кампутары небяспечна. 791 00:43:17,350 --> 00:43:19,200 Яны на самай справе. 792 00:43:19,200 --> 00:43:20,940 Мы павінны давяраць іншым людзям. 793 00:43:20,940 --> 00:43:26,500 >> А ідэя бяспекі з'яўляецца тое, што вы спрабуючы абмежаваць колькасць 794 00:43:26,500 --> 00:43:27,540 Давер, які вам трэба. 795 00:43:27,540 --> 00:43:32,080 І адным са сродкаў вы, што праз крыптаграфіі. 796 00:43:32,080 --> 00:43:34,950 Крыптаграфія, па сутнасці, у нас ёсць сакрэты. 797 00:43:34,950 --> 00:43:38,880 >> Часам мы павінны прайсці нашы сакрэты разам праз, скажам, інтэрнэт ці 798 00:43:38,880 --> 00:43:39,980 іншыя рэчы. 799 00:43:39,980 --> 00:43:43,180 І мы не хочам, каб людзі ведаць гэтыя сакрэты. 800 00:43:43,180 --> 00:43:50,100 Такім чынам, мы зашыфраваць нашы сакрэты ў шляху што мы спадзяемся, што ніхто не можа высветліць. 801 00:43:50,100 --> 00:43:51,600 >> Такім чынам, мы used-- 802 00:43:51,600 --> 00:43:54,340 праз ходзе гэтай class-- 803 00:43:54,340 --> 00:44:00,750 рэчы, як шыфр Цэзара і [Неразборліва], якія з'яўляюцца вельмі, вельмі 804 00:44:00,750 --> 00:44:03,200 небяспечныя спосабы шыфравання рэчы. 805 00:44:03,200 --> 00:44:07,930 Іх лёгка зразумець, што яны і што вашыя дадзеныя знаходзяцца. 806 00:44:07,930 --> 00:44:12,130 Рэальны свет выкарыстоўвае значна больш складаныя схемы шыфравання. 807 00:44:12,130 --> 00:44:13,880 І мы не зможам атрымаць у значна больш, чым гэта. 808 00:44:13,880 --> 00:44:18,280 809 00:44:18,280 --> 00:44:19,430 >> Адладка. 810 00:44:19,430 --> 00:44:20,785 GDB з'яўляецца лепшым. 811 00:44:20,785 --> 00:44:24,014 812 00:44:24,014 --> 00:44:25,810 Я збіраюся гэта падкрэсліць яшчэ раз. 813 00:44:25,810 --> 00:44:30,920 Выкарыстоўвайце GDB ўвесь час кожны Час у вас ёсць праблемы. 814 00:44:30,920 --> 00:44:36,030 Каманды, якія з'яўляюцца карыснымі ў GDB з'яўляюцца зламаць, якія вы перадаеце радок 815 00:44:36,030 --> 00:44:41,330 лік, імя функцыі, па сутнасці дзе ў кодзе вы хочаце спыніць, 816 00:44:41,330 --> 00:44:45,600 і быць у стане ўзяць пад кантроль. 817 00:44:45,600 --> 00:44:54,140 >> Друк займае зменную і друкуе усё, што пераменная у тым, што 818 00:44:54,140 --> 00:44:55,990 кропка ў выкананні. 819 00:44:55,990 --> 00:45:00,130 Далей перамяшчае выкананне а таксама адзін крок. 820 00:45:00,130 --> 00:45:05,050 І крок крокі ўнутры функцыі ў вашым выкананні. 821 00:45:05,050 --> 00:45:10,480 >> Іншыя рэчы працаваць, які з'яўляецца, як вы на самой справе запусціць свой код. 822 00:45:10,480 --> 00:45:16,630 Працягнуць прымае ўсе меры, неабходныя каб дабрацца да наступнай кропкі супыну. 823 00:45:16,630 --> 00:45:18,300 І ёсць многія, многія іншыя. 824 00:45:18,300 --> 00:45:19,040 Шукайце іх. 825 00:45:19,040 --> 00:45:19,901 Яны выдатна. 826 00:45:19,901 --> 00:45:20,863 Так? 827 00:45:20,863 --> 00:45:22,113 >> АЎДЫТОРЫЯ: [неразборліва]? 828 00:45:22,113 --> 00:45:26,635 829 00:45:26,635 --> 00:45:28,200 >> Дэн: Так, які з'яўляецца адладчык. 830 00:45:28,200 --> 00:45:34,230 Так адладчык гэта праграма, якая дазваляе адладжваць праграму. 831 00:45:34,230 --> 00:45:39,931 Гэта не праграма, якая знаходзіць памылкі для Вы, тым не менш, што было б выдатна. 832 00:45:39,931 --> 00:45:43,020 833 00:45:43,020 --> 00:45:46,040 >> І апошняе, для мяне з'яўляецца пошук. 834 00:45:46,040 --> 00:45:51,470 Так тыпаў пошуку, што мы гаварылі аб гэтага класа лінейны пошук, 835 00:45:51,470 --> 00:45:55,960 які з'яўляецца толькі, што вы глядзіце праз кожны элемент прасторы пошуку, адзін 836 00:45:55,960 --> 00:46:00,410 элемент, у той час, пакуль вы не знойдзеце тое, што Вы шукаеце або пакуль вы не дасягнеце 837 00:46:00,410 --> 00:46:03,350 канец вашай прасторы пошуку, пры якім момант вы сказаць, што вы не маглі знайсці 838 00:46:03,350 --> 00:46:06,360 элемент, які вы шукалі. 839 00:46:06,360 --> 00:46:13,450 І гэта займае ў лепшым выпадку пастаяннае час, які з'яўляецца 0 1, і ў горшым выпадку лінейных 840 00:46:13,450 --> 00:46:16,070 Час, якое роўна 0 н. 841 00:46:16,070 --> 00:46:19,250 >> Бінарны пошук, які неабходны брудныя элементы. 842 00:46:19,250 --> 00:46:24,230 Вы ідзяце ў сярэдзіне вашых элементаў, гл, калі элемент вы шукаеце 843 00:46:24,230 --> 00:46:30,120 больш ці менш, чым элемент што вы ў сярэдзіне. 844 00:46:30,120 --> 00:46:36,510 Гэта гэта больш, вы кажаце, што дно з гэтай катэгорыі прастору гэта ваш 845 00:46:36,510 --> 00:46:41,550 бягучае месцазнаходжанне, сярэдні, і вы перазапусціць працэс. 846 00:46:41,550 --> 00:46:46,150 Калі ён менш, вы паглядзіце сказаць што the-- так, у чым справа? 847 00:46:46,150 --> 00:46:47,400 >> АЎДЫТОРЫЯ: [неразборліва]? 848 00:46:47,400 --> 00:46:51,000 849 00:46:51,000 --> 00:46:54,260 >> Дэн: Так. 850 00:46:54,260 --> 00:46:58,360 Любы выгляд роду, які вучылі ў клас справядлівая гульня для тэсту. 851 00:46:58,360 --> 00:47:01,504 852 00:47:01,504 --> 00:47:04,920 >> [Смех] 853 00:47:04,920 --> 00:47:10,260 >> Дэн: А тое, што ў вас не было зрабіць гэта для набору праблем, гэта справядліва 854 00:47:10,260 --> 00:47:12,420 Гульня для выпрабаванні. 855 00:47:12,420 --> 00:47:15,186 >> АЎДЫТОРЫЯ: Ці можам мы пайсці па ім, як to-- 856 00:47:15,186 --> 00:47:17,052 >> Дэн: Гэта ўжо не будзе больш. 857 00:47:17,052 --> 00:47:20,496 >> СПІКЕР 2: Фактычны код для [Неразборліва] на study.cs50.net. 858 00:47:20,496 --> 00:47:25,910 859 00:47:25,910 --> 00:47:32,680 Так што, калі вы паглядзіце на праблемы практыкі на старонцы сартавання зліццём з 860 00:47:32,680 --> 00:47:35,880 study.cs50.net, ёсць код для рэалізацыі сартавання зліццём. 861 00:47:35,880 --> 00:47:38,550 Такім чынам, вы не павінны ажыццяўляць гэта сябе сёння ўвечары. 862 00:47:38,550 --> 00:47:42,090 Але пераканайцеся, што вы разумееце яго, а чым проста запамінаючы яго. 863 00:47:42,090 --> 00:47:45,035 >> АЎДЫТОРЫЯ: [неразборліва]? 864 00:47:45,035 --> 00:47:49,720 >> СПІКЕР 2: На старонцы сартаванне зліццём на study.cs50.net, існуе практыка 865 00:47:49,720 --> 00:47:53,570 Праблема, што, калі вы пстрыкніце па Праблема, у самым канцы ёсць 866 00:47:53,570 --> 00:47:56,280 Рашэнне, якое з'яўляецца зліццё Рэалізацыя роду. 867 00:47:56,280 --> 00:47:58,510 Але пераканайцеся, што вы разумееце яго а не проста запамінаць яго 868 00:47:58,510 --> 00:47:59,760 або капіюючы яе ўніз. 869 00:47:59,760 --> 00:48:02,870 870 00:48:02,870 --> 00:48:06,340 >> АЎДЫТОРЫЯ: І цалкам справядліва Праблема для здачы іспыту будзе 871 00:48:06,340 --> 00:48:07,990 нешта накшталт вось спіс. 872 00:48:07,990 --> 00:48:12,100 Што гэта спіс выглядаць пасля адзін крок Вылучаныя роду або 873 00:48:12,100 --> 00:48:13,330 сартаванне ўстаўкамі або любы іншы. 874 00:48:13,330 --> 00:48:14,940 Адзін поўны ітэрацыя спісу. 875 00:48:14,940 --> 00:48:18,530 Так што нават калі вы не ў канчатковым выніку трэба Код для яго, вы павінны зразумець, гэта 876 00:48:18,530 --> 00:48:20,440 дастаткова, каб ведаць, як гэта адбываецца каб быць змены гэтага масіва. 877 00:48:20,440 --> 00:48:24,144 878 00:48:24,144 --> 00:48:25,394 >> DAN: Вось гэта для мяне. 879 00:48:25,394 --> 00:48:30,604 880 00:48:30,604 --> 00:48:32,588 >> [Апладысменты] 881 00:48:32,588 --> 00:49:06,316 882 00:49:06,316 --> 00:49:07,410 >> LUCAS: Прывітанне ўсім. 883 00:49:07,410 --> 00:49:08,390 Мяне клічуць Лукас. 884 00:49:08,390 --> 00:49:16,840 Я збіраюся казаць аб рэкурсіі, усё расліны, якія мы вынялі, і 885 00:49:16,840 --> 00:49:18,050 трохі усіх паказальнікаў. 886 00:49:18,050 --> 00:49:18,740 ОК? 887 00:49:18,740 --> 00:49:20,340 Такім чынам, перш за ўсё, Рэкурсія. 888 00:49:20,340 --> 00:49:22,951 Што гэта значыць сказаць, што функцыя з'яўляецца рэкурсыўнай? 889 00:49:22,951 --> 00:49:24,675 >> АЎДЫТОРЫЯ: Званкі сябе. 890 00:49:24,675 --> 00:49:26,500 >> LUCAS: ОК, называе сябе, так. 891 00:49:26,500 --> 00:49:27,700 Так любіце гэтую фатаграфію, напрыклад. 892 00:49:27,700 --> 00:49:30,280 Гэта як на малюнку ўнутры карціны і гэтак далей. 893 00:49:30,280 --> 00:49:35,740 Так, напрыклад, вы можаце have-- Дана што казаў пра бінарнага пошуку. 894 00:49:35,740 --> 00:49:41,840 Адзін са спосабаў, у якіх двайковы пошук рэкурсіўная з'яўляецца тое, што вы 895 00:49:41,840 --> 00:49:43,130 спрабуючы знайсці шэраг. 896 00:49:43,130 --> 00:49:44,250 Так вы ідзяце ў сярэдзіне. 897 00:49:44,250 --> 00:49:47,130 І тады вы пераканайцеся, што лічбы там У злева і справа. 898 00:49:47,130 --> 00:49:49,650 >> І потым, калі вы даведаліся нумар будзе злева, гэта тое ж самае 899 00:49:49,650 --> 00:49:53,340 рэч, як раз рабіць пошук, але толькі злева ад спісу. 900 00:49:53,340 --> 00:49:57,350 Дык вось, як гэта гучыць як гэта рэкурсіўная. 901 00:49:57,350 --> 00:50:01,870 Дык вось чаму вы, хлопцы, ёсць рэкурсіўная рашэнне для сартавання зліццём. 902 00:50:01,870 --> 00:50:04,270 >> Такім чынам, вось прыклад. 903 00:50:04,270 --> 00:50:07,280 Так скажам, што я хачу, каб выбраць ўсе лікі ад 1 да п. 904 00:50:07,280 --> 00:50:13,790 Я разумею, што сума п лік п плюс н мінус 1 да 1. 905 00:50:13,790 --> 00:50:17,810 Але тады, калі я гляджу на п мінус 1 плюс н мінус 2 плюс 1, гэта тое ж самае 906 00:50:17,810 --> 00:50:20,680 паняцці, як падсумоўваючых нумары да н мінус 1. 907 00:50:20,680 --> 00:50:25,890 Таму я магу сказаць суму роўнай суме роўная п плюс сума п мінус 1. 908 00:50:25,890 --> 00:50:28,010 Ці мае гэта сэнс? 909 00:50:28,010 --> 00:50:32,630 >> І я таксама б-то яшчэ называецца базавы варыянт, які з'яўляецца тое, што 910 00:50:32,630 --> 00:50:37,440 Сума лікаў на нуля будзе роўная нулю. 911 00:50:37,440 --> 00:50:42,770 Таму, як толькі я дабяруся да колькасці нуля, я перастанем лічыць. 912 00:50:42,770 --> 00:50:45,330 Ці мае гэта сэнс? 913 00:50:45,330 --> 00:50:48,120 >> Дык вось прыклад таго, як Я магу рэалізаваць гэта. 914 00:50:48,120 --> 00:50:49,860 Так што ў мяне гэтую функцыю ў некаторых. 915 00:50:49,860 --> 00:50:51,700 Гэта займае цэлае п. 916 00:50:51,700 --> 00:50:56,300 Дык вось я спачатку правяраю, калі п менш або роўна нуля. 917 00:50:56,300 --> 00:51:00,310 Такім чынам, калі гэта менш або роўна нулю, я вярнуць нуль, які з'яўляецца нашым базавым сцэнаром. 918 00:51:00,310 --> 00:51:05,690 У адваротным выпадку, я магу проста вярнуцца н плюс сума лікаў ад 919 00:51:05,690 --> 00:51:07,190 адзін да н мінус адзін. 920 00:51:07,190 --> 00:51:09,360 Сэнс? 921 00:51:09,360 --> 00:51:10,100 ОК. 922 00:51:10,100 --> 00:51:11,610 >> Дык вось, як гэта выглядае. 923 00:51:11,610 --> 00:51:15,260 У вас ёсць суму 2 роўных 2 плюс сума 1. 924 00:51:15,260 --> 00:51:18,930 І некаторыя з 1 студзені плюс Сума 0, які з'яўляецца 0. 925 00:51:18,930 --> 00:51:20,216 Сэнс? 926 00:51:20,216 --> 00:51:25,342 Так што, калі мы паглядзім на стос ваш Праграма, гэта тое, што ён выглядае. 927 00:51:25,342 --> 00:51:26,820 >> Па-першае, у нас ёсць асноўнай функцыяй. 928 00:51:26,820 --> 00:51:30,320 І тады асноўная функцыя называецца сума 2. 929 00:51:30,320 --> 00:51:36,690 І тады сума 2 збіраецца сказаць, о, сума 2 роўная 2 плюс сума аднаго. 930 00:51:36,690 --> 00:51:39,460 Так што я дадаць суму 1 у стэк. 931 00:51:39,460 --> 00:51:43,860 І сума 1 збіраецца назваць суму 0, які таксама будзе дададзены 932 00:51:43,860 --> 00:51:44,630 ў стэк. 933 00:51:44,630 --> 00:51:49,240 І тады кожны з гэтых тыя, якія на іншы прыйдзецца вярнуцца 934 00:51:49,240 --> 00:51:52,020 да таго, як астатнія могуць працягваць ісці. 935 00:51:52,020 --> 00:51:56,240 >> Так, напрыклад, тут, сума 0, Спачатку збіраецца вяртаць 0. 936 00:51:56,240 --> 00:51:58,320 А потым выбраць суму 1. 937 00:51:58,320 --> 00:52:00,850 Тады сума 1 збіраецца вярнуцца 1 суме 2. 938 00:52:00,850 --> 00:52:03,900 І, нарэшце, сума 2 будзе вярнуцца 3 да асноўнай. 939 00:52:03,900 --> 00:52:05,320 Ці мае гэта сэнс? 940 00:52:05,320 --> 00:52:09,496 >> Гэта сапраўды важна, каб зразумець, як стэк працуе і паспрабаваць 941 00:52:09,496 --> 00:52:11,980 убачыць, калі гэта мае сэнс. 942 00:52:11,980 --> 00:52:13,260 Такім чынам, сартаванне. 943 00:52:13,260 --> 00:52:16,170 Дык чаму ж сартаванне важна, у першую чаргу? 944 00:52:16,170 --> 00:52:18,260 Чаму мы павінны клапаціцца? 945 00:52:18,260 --> 00:52:20,310 Любы? 946 00:52:20,310 --> 00:52:20,695 Прывядзіце мне прыклад? 947 00:52:20,695 --> 00:52:21,040 Так? 948 00:52:21,040 --> 00:52:22,968 >> АЎДЫТОРЫЯ: [неразборліва]. 949 00:52:22,968 --> 00:52:24,700 >> LUCAS: Так, добра. 950 00:52:24,700 --> 00:52:26,090 Такім чынам, вы можаце шукаць больш эфектыўна. 951 00:52:26,090 --> 00:52:28,580 Гэта добры спосаб. 952 00:52:28,580 --> 00:52:32,462 Так, напрыклад, у нас ёсць шмат рэчы, на самай справе, у нашым жыцці, што 953 00:52:32,462 --> 00:52:32,920 сартуюцца. 954 00:52:32,920 --> 00:52:34,830 Напрыклад, слоўнікі. 955 00:52:34,830 --> 00:52:39,210 >> Гэта вельмі важна, каб усе слова ў нейкі парадак, што мы 956 00:52:39,210 --> 00:52:41,970 можаце атрымаць доступ лёгка. 957 00:52:41,970 --> 00:52:43,280 Дык вось, што ён казаў. 958 00:52:43,280 --> 00:52:45,530 Вы можаце шукаць больш эфектыўна. 959 00:52:45,530 --> 00:52:48,740 Падумайце аб тым, як цяжка было б мець слоўнік, у якім словы знаходзяцца ў 960 00:52:48,740 --> 00:52:49,500 выпадковым парадку. 961 00:52:49,500 --> 00:52:53,120 Вы павінны глядзець на, у значнай ступені, кожнае слова, пакуль не знойдзеце 962 00:52:53,120 --> 00:52:54,720 слова, якое вы шукаеце. 963 00:52:54,720 --> 00:52:58,710 >> Калі вы выкарыстоўваеце Facebook таксама, калі Вы глядзіце на вашых сяброў, вы 964 00:52:58,710 --> 00:53:03,540 ўбачыце, што Facebook пакласці вашыя бліжэй адзін знаходзіцца на вяршыні тых 965 00:53:03,540 --> 00:53:05,470 што вы не кажаце з, што нашмат. 966 00:53:05,470 --> 00:53:08,080 Калі вы прайсці ўвесь шлях да дна спіс сяброў, вы будзеце бачыць 967 00:53:08,080 --> 00:53:11,250 людзі, што вы, верагодна, нават не памятаеце, што вы сябры с. 968 00:53:11,250 --> 00:53:14,590 І гэта таму, што Facebook гатункаў вашыя сябры, заснаваныя на тым, як 969 00:53:14,590 --> 00:53:16,472 зачыніць вы да іх. 970 00:53:16,472 --> 00:53:17,930 >> Так арганізацыі дадзеных. 971 00:53:17,930 --> 00:53:18,450 Таксама Pokemon. 972 00:53:18,450 --> 00:53:21,400 Такім чынам, вы бачыце, што ўсе Покемон маюць нумары. 973 00:53:21,400 --> 00:53:27,210 І гэта, як лёгка спосаб доступу да дадзеных. 974 00:53:27,210 --> 00:53:29,050 >> АЎДЫТОРЫЯ: Доступ Pokemon. 975 00:53:29,050 --> 00:53:29,890 >> LUCAS: Так. 976 00:53:29,890 --> 00:53:32,395 >> АЎДЫТОРЫЯ: [неразборліва]. 977 00:53:32,395 --> 00:53:33,460 >> LUCAS: Так. 978 00:53:33,460 --> 00:53:35,140 Такім чынам, выбар роду. 979 00:53:35,140 --> 00:53:41,610 Сартаваць Выбар збіраецца выбраць маленькі малокомплектных значэнне спісу кожны 980 00:53:41,610 --> 00:53:43,300 час у кожнай ітэрацыі. 981 00:53:43,300 --> 00:53:46,800 Гэта накшталт як тое, што вы робіце у вашай галаве, калі вы спрабуеце 982 00:53:46,800 --> 00:53:48,430 адсартаваць спіс пад рукой. 983 00:53:48,430 --> 00:53:51,990 >> У прынцыпе, усё, што вам зрабіць, гэта паглядзець для найменшага колькасці. 984 00:53:51,990 --> 00:53:54,280 Вы ставіце яго ў адсартаваным спісе. 985 00:53:54,280 --> 00:53:56,230 І тады вы паглядзіце на Наступны найменшая колькасць. 986 00:53:56,230 --> 00:54:00,080 І тады вы працягваеце рабіць , Што і так далей. 987 00:54:00,080 --> 00:54:04,600 >> Так выбар роду ў асноўным вы выберыце кожны раз найменшы 988 00:54:04,600 --> 00:54:05,750 малокомплектных значэнне. 989 00:54:05,750 --> 00:54:10,840 Пакладзеце ў канцы сартуюцца частка спісу. 990 00:54:10,840 --> 00:54:12,370 І працягваць рабіць гэта. 991 00:54:12,370 --> 00:54:15,890 Так што давайце хутка ўбачыць, што як гэта выглядае. 992 00:54:15,890 --> 00:54:19,340 Дык вось сартуюцца і малокомплектных спіс. 993 00:54:19,340 --> 00:54:23,350 >> Такім чынам, для сартуюцца з спісу, гэта першапачаткова пусты. 994 00:54:23,350 --> 00:54:26,760 А потым я збіраюся выбраць найменшая колькасць тут, які з'яўляецца 2. 995 00:54:26,760 --> 00:54:30,650 Так што я атрымаць нумар 2, і я паставіў ў пачатку спісу. 996 00:54:30,650 --> 00:54:34,910 А потым я гляджу на наступны маленькі элемент, які з'яўляецца 3. 997 00:54:34,910 --> 00:54:37,050 Так што я паклаў яго ў канцы з адсартаваныя спісу. 998 00:54:37,050 --> 00:54:38,140 І тады я працягваць рабіць гэта. 999 00:54:38,140 --> 00:54:40,040 Я лічу, 4 і паклаў яго ў канцы. 1000 00:54:40,040 --> 00:54:41,360 Знайсці 5 і паклаў яго ў канцы. 1001 00:54:41,360 --> 00:54:44,830 >> І паглядзім, як усе тыя часы, што Я кажу пакласці яго ў канец, 1002 00:54:44,830 --> 00:54:46,850 у асноўным, абмен двух значэнняў. 1003 00:54:46,850 --> 00:54:48,100 ОК? 1004 00:54:48,100 --> 00:54:50,140 1005 00:54:50,140 --> 00:54:52,825 І тады апошні, вы проста ёсць яшчэ адзін элемент. 1006 00:54:52,825 --> 00:54:55,870 Так што гэта ўжо адсартаваныя. 1007 00:54:55,870 --> 00:54:57,800 >> Такім чынам, сартаванне ўстаўкамі. 1008 00:54:57,800 --> 00:55:03,180 Ўносяцца роду вы будзеце мець таксама што рэч у тым, сартуюцца і 1009 00:55:03,180 --> 00:55:04,690 малокомплектных спіс. 1010 00:55:04,690 --> 00:55:14,540 Адзінае, што кожны раз, што Вы дадаеце элемент у сартуюцца 1011 00:55:14,540 --> 00:55:18,170 Спіс, вы проста выбраць элемент, які знаходзіцца ў пярэдняй часткі малокомплектных спіс. 1012 00:55:18,170 --> 00:55:20,880 А потым вы збіраецеся знайсці, што Становішча гэта павінна быць у адсартаваны 1013 00:55:20,880 --> 00:55:22,300 частка спісу. 1014 00:55:22,300 --> 00:55:25,840 >> Давайце паглядзім, што гэта так гэта мае больш сэнсу. 1015 00:55:25,840 --> 00:55:29,360 Гэта значыць першапачаткова, напрыклад, я спрабую ўставіць нумар тры ў 1016 00:55:29,360 --> 00:55:30,680 адсартаваны частка спісу. 1017 00:55:30,680 --> 00:55:31,800 Так што спіс не мае нічога. 1018 00:55:31,800 --> 00:55:34,160 Таму я магу толькі паставіць нумар 3. 1019 00:55:34,160 --> 00:55:37,480 >> Цяпер я хачу, каб дадаць нумар 5 у адсартаваны частка спісу. 1020 00:55:37,480 --> 00:55:38,900 Так я гляджу на колькасці 5. 1021 00:55:38,900 --> 00:55:40,450 Я заўважаю, што гэта больш, чым 3. 1022 00:55:40,450 --> 00:55:41,980 Так што я ведаю, што гэта павінна быць пасля 3. 1023 00:55:41,980 --> 00:55:44,100 Так што я паклаў 3 і 5. 1024 00:55:44,100 --> 00:55:45,940 >> Тады я хачу ўставіць нумар 2. 1025 00:55:45,940 --> 00:55:51,630 Я заўважаю, што лік 2 на самай справе апошні затым як 3 і 5. 1026 00:55:51,630 --> 00:55:54,580 Так што я на самой справе павінны паставіць усё гэта чынам у пачатку спісу. 1027 00:55:54,580 --> 00:55:59,030 Так што я павінен, накшталт, перакласці ўсе элементы ў адсартаваным спісе, таму я магу 1028 00:55:59,030 --> 00:56:01,970 вызваліць месца для ліку 2. 1029 00:56:01,970 --> 00:56:03,160 >> Потым я бачу нумар 6. 1030 00:56:03,160 --> 00:56:05,450 Я бачу, што гэта павінна быць пасля 5. 1031 00:56:05,450 --> 00:56:06,240 Так што я паклаў яго там. 1032 00:56:06,240 --> 00:56:07,965 І, нарэшце, я гляджу на колькасці 4. 1033 00:56:07,965 --> 00:56:11,030 І я заўважаю, ён павінен быць паміж 3 і 5. 1034 00:56:11,030 --> 00:56:14,870 І тады я паклаў яго туды і зрух ўсе астатнія элементы. 1035 00:56:14,870 --> 00:56:16,120 Сэнс? 1036 00:56:16,120 --> 00:56:17,880 1037 00:56:17,880 --> 00:56:19,150 >> Bubble Сартаваць. 1038 00:56:19,150 --> 00:56:25,730 Так пузырьковый сартавання ў асноўным тое, што вы збіраецца do-- мы называем гэта бурбалка 1039 00:56:25,730 --> 00:56:30,113 Сартаваць таму што вы ідзяце праз list-- гэта на самай справе лепш, калі я проста паказаць 1040 00:56:30,113 --> 00:56:32,300 Хочаце это-- 1041 00:56:32,300 --> 00:56:35,030 і вы збіраецеся параўноўваць суседнія колькасці. 1042 00:56:35,030 --> 00:56:38,410 І вы збіраецеся абмяняць іх пазіцыі, калі яны не 1043 00:56:38,410 --> 00:56:39,190 у правільным парадку. 1044 00:56:39,190 --> 00:56:42,570 >> Так у асноўным, што збіраецца адбудзецца тут, напрыклад, 1045 00:56:42,570 --> 00:56:44,160 ў вас ёсць 8 і 6. 1046 00:56:44,160 --> 00:56:47,270 Вы ведаеце, што парадак сартавання будзе на самай справе быць 6 і 5, ці не так? 1047 00:56:47,270 --> 00:56:49,540 Так што вы збіраецеся памяняць загады. 1048 00:56:49,540 --> 00:56:51,370 Потым я бачу 8 і 4 тут. 1049 00:56:51,370 --> 00:56:52,250 І я раблю тое ж самае. 1050 00:56:52,250 --> 00:56:53,400 Я памяняць зноў. 1051 00:56:53,400 --> 00:56:55,070 І, нарэшце, 2 і 8. 1052 00:56:55,070 --> 00:56:56,670 Я таксама памяняць іх месцамі. 1053 00:56:56,670 --> 00:57:01,690 >> Яна называецца Bubble Сартаваць таму што пасля кожны з гэтых ітэрацый, на самай справе, 1054 00:57:01,690 --> 00:57:05,910 Найбольшая колькасць у спісе атрымлівае ўсё шлях да канца спісу. 1055 00:57:05,910 --> 00:57:06,940 Ці мае гэта сэнс? 1056 00:57:06,940 --> 00:57:11,880 Таму што ён трымае замены яго і перасоўванне яго направа. 1057 00:57:11,880 --> 00:57:14,440 >> Такім чынам, гэта другая ітэрацыя. 1058 00:57:14,440 --> 00:57:17,200 Было б тое ж самае. 1059 00:57:17,200 --> 00:57:20,190 Я зраблю адзін своп і то апошні. 1060 00:57:20,190 --> 00:57:23,290 Я, што няма свопы і спіс сартуецца. 1061 00:57:23,290 --> 00:57:27,460 Такім чынам, у Bubble Сартаваць, мы ў асноўным трымаць перажывае спісу і перапампоўкі 1062 00:57:27,460 --> 00:57:32,310 рэчы, пакуль я не заўважыў, што я не рабіў любыя свопы робяць гэтую ітэрацыю, якая 1063 00:57:32,310 --> 00:57:34,270 азначае, што спіс ужо адсартаваны. 1064 00:57:34,270 --> 00:57:35,520 Сэнс? 1065 00:57:35,520 --> 00:57:38,400 1066 00:57:38,400 --> 00:57:40,870 >> Давайце трохі пагаворым пра час працы. 1067 00:57:40,870 --> 00:57:45,165 Так вы, хлопцы, памятаеце Вялікі O, Omega, і Тэта? 1068 00:57:45,165 --> 00:57:49,290 1069 00:57:49,290 --> 00:57:50,990 Так? 1070 00:57:50,990 --> 00:57:53,070 Добра, што Вялікі О, у першую чаргу? 1071 00:57:53,070 --> 00:57:54,315 >> АЎДЫТОРЫЯ: [неразборліва]. 1072 00:57:54,315 --> 00:57:59,070 >> LUCAS: Так, гэта называецца горшым выпадку выканання, які проста азначае, што гэта 1073 00:57:59,070 --> 00:58:03,470 колькі вы чакаеце праграму ўзяць для запуску. 1074 00:58:03,470 --> 00:58:04,910 Як, з пункту гледжання of-- 1075 00:58:04,910 --> 00:58:06,660 у гэтым case-- п. 1076 00:58:06,660 --> 00:58:09,150 Лік элементаў у Спіс у горшым выпадку. 1077 00:58:09,150 --> 00:58:12,520 Маўляў, у горшым выпадку. 1078 00:58:12,520 --> 00:58:17,100 >> Такім чынам, для Bubble Сартаваць, напрыклад, У нас ёсць вялікія O н плошчы. 1079 00:58:17,100 --> 00:58:20,580 Чаму ў нас, што? 1080 00:58:20,580 --> 00:58:24,716 Чаму Bubble Сартаваць Big O н квадрат? 1081 00:58:24,716 --> 00:58:27,614 >> АЎДЫТОРЫЯ: [неразборліва]. 1082 00:58:27,614 --> 00:58:35,670 >> LUCAS: Так, так у горшым выпадку будзе што я павінен буду зрабіць п ітэрацый. 1083 00:58:35,670 --> 00:58:39,260 Такім чынам, кожны з ітэрацый збіраецца прывесці да самага вялікага элемент у канец 1084 00:58:39,260 --> 00:58:40,290 з спісу. 1085 00:58:40,290 --> 00:58:44,230 Так у горшым выпадку з'яўляецца тое, што ў мяне ёсць зрабіць гэтую рэч п разоў. 1086 00:58:44,230 --> 00:58:48,550 І для кожнага з тых часоў, я павінен зрабіць п свопы таму што я павінен параўнаць 1087 00:58:48,550 --> 00:58:49,870 кожны з двух элементаў. 1088 00:58:49,870 --> 00:58:53,730 Дык вось чаму ён н квадрат таму што гэта п раз п. 1089 00:58:53,730 --> 00:59:00,120 >> Тады, выбар роду таксама н плошчы таму, што для кожнай ітэрацыі, я павінен 1090 00:59:00,120 --> 00:59:02,650 глядзець на кожнага элемента у спісе. 1091 00:59:02,650 --> 00:59:04,980 А потым знайсці найменшы, Гэта азначае, што я павінен 1092 00:59:04,980 --> 00:59:06,130 праглядаць п элементаў. 1093 00:59:06,130 --> 00:59:11,750 І што я павінен зрабіць, што п раз, таму што Я павінен выбраць усе п элементаў. 1094 00:59:11,750 --> 00:59:18,273 >> Сартаванне ўстаўкамі таксама н плошчы таму што ў горшым выпадку будзе 1095 00:59:18,273 --> 00:59:20,950 быць, адзін, я павінен ўставіць п лікаў, ці не так? 1096 00:59:20,950 --> 00:59:22,765 Так што я ўжо ведаю, што я збіраюся мець п ітэрацый. 1097 00:59:22,765 --> 00:59:25,466 1098 00:59:25,466 --> 00:59:29,840 Але для кожнага з гэтых лікаў, калі б мне давялося глядзець на ўсе нумары ў 1099 00:59:29,840 --> 00:59:34,380 адсартаваны спіс і паклаў яго ўсю дарогу ў пярэдняй, што будзе н плошчы 1100 00:59:34,380 --> 00:59:36,230 таму што гэта будзе п раз п разоў. 1101 00:59:36,230 --> 00:59:38,280 Сэнс? 1102 00:59:38,280 --> 00:59:41,512 Як наконт амега? 1103 00:59:41,512 --> 00:59:42,886 >> АЎДЫТОРЫЯ: [неразборліва]. 1104 00:59:42,886 --> 00:59:44,620 >> LUCAS: Гэта ў лепшым выпадку. 1105 00:59:44,620 --> 00:59:48,810 Так што гэта, як, у шмат разоў для сартаванне, у лепшым выпадку з'яўляецца 1106 00:59:48,810 --> 00:59:50,660 калі спіс ужо адсартаваны. 1107 00:59:50,660 --> 00:59:52,670 Такім чынам, вы сапраўды не маюць нічога рабіць. 1108 00:59:52,670 --> 00:59:56,290 Bubble Сартаваць мае лепшы сцэнар н. 1109 00:59:56,290 --> 00:59:58,820 Як вы, хлопцы, ведаеце, чаму? 1110 00:59:58,820 --> 01:00:00,620 >> АЎДЫТОРЫЯ: [неразборліва]. 1111 01:00:00,620 --> 01:00:05,640 >> LUCAS: Так, калі вам адсочваць Ці рацыён дадзеных было ніякіх свопов або 1112 01:00:05,640 --> 01:00:10,533 ня, калі ў вас ёсць што-то накшталт усталяваны ў праўда, калі б была ітэрацыі, калі 1113 01:00:10,533 --> 01:00:15,140 Спіс ужо адсартаваныя, у асноўным, што здарыцца, я буду 1114 01:00:15,140 --> 01:00:17,890 паспрабуйце памяняць кожны два суседніх элементаў. 1115 01:00:17,890 --> 01:00:19,920 Я збіраюся бачыць, што няма свопы. 1116 01:00:19,920 --> 01:00:21,230 І я проста вярнуць адразу. 1117 01:00:21,230 --> 01:00:24,240 >> Дык гэта значыць, што я проста павінен быў прайсці праз спіс адзін раз. 1118 01:00:24,240 --> 01:00:28,990 Так што гэта н таму я гляджу у п элементаў. 1119 01:00:28,990 --> 01:00:30,930 Чаму выбар роду п квадрат? 1120 01:00:30,930 --> 01:00:35,150 1121 01:00:35,150 --> 01:00:45,520 >> Так, нават калі спіс адсартаваны, для Кожная ітэрацыя выбару роду, я 1122 01:00:45,520 --> 01:00:47,590 павінны выбраць мінімальны элемент. 1123 01:00:47,590 --> 01:00:49,980 Такім чынам, што азначае, што ў мяне ёсць, каб шукаць на ўсіх элементаў у малокомплектных 1124 01:00:49,980 --> 01:00:53,350 пералічыць і знайсці мінімум для кожнай ітэрацыі. 1125 01:00:53,350 --> 01:00:54,600 Ці мае гэта сэнс? 1126 01:00:54,600 --> 01:00:56,880 1127 01:00:56,880 --> 01:01:04,690 >> І ўстаўкі меч п, таму што ў справа, што я спрабую ўставіць 1128 01:01:04,690 --> 01:01:09,320 нумары і ўсе нумары, калі я паспрабуйце ўставіць іх, я бачу, што яны 1129 01:01:09,320 --> 01:01:10,510 знаходзяцца ў правільным становішчы. 1130 01:01:10,510 --> 01:01:15,120 Я не павінен пайсці праверыць усе іншыя Лічбы ў малокомплектных спіс. 1131 01:01:15,120 --> 01:01:17,170 Дык вось чаму ён будзе н. 1132 01:01:17,170 --> 01:01:19,480 Сэнс? 1133 01:01:19,480 --> 01:01:21,035 І што тэта? 1134 01:01:21,035 --> 01:01:23,410 >> АЎДЫТОРЫЯ: [неразборліва]. 1135 01:01:23,410 --> 01:01:24,380 >> LUCAS: Што, прабачце? 1136 01:01:24,380 --> 01:01:24,960 Скажыце гэта яшчэ раз. 1137 01:01:24,960 --> 01:01:25,666 >> АЎДЫТОРЫЯ: [неразборліва]. 1138 01:01:25,666 --> 01:01:26,490 >> LUCAS: Дакладна. 1139 01:01:26,490 --> 01:01:31,280 Такім чынам, вы можаце бачыць, што толькі выбар захоўваецца ў Merge роду маюць thetas. 1140 01:01:31,280 --> 01:01:39,920 І гэта таму, што ў вас ёсць толькі тэта калі абодва Big O і Амега аднолькавыя. 1141 01:01:39,920 --> 01:01:41,520 ОК. 1142 01:01:41,520 --> 01:01:44,210 І, нарэшце, сартаванне зліццём ёсць у лог п. 1143 01:01:44,210 --> 01:01:48,910 >> А потым, як казаў Дэн, сартаванне зліццём накшталт як такім жа чынам, што 1144 01:01:48,910 --> 01:01:50,320 вы бінарны пошук. 1145 01:01:50,320 --> 01:01:53,530 Такім чынам, вы атрымаеце спіс. 1146 01:01:53,530 --> 01:01:55,170 І вы збіраецеся разрэзаць напалову. 1147 01:01:55,170 --> 01:02:00,580 І тады вы скараціць іх у невялікіх паловак. 1148 01:02:00,580 --> 01:02:01,730 І тады вы аб'яднаеце іх. 1149 01:02:01,730 --> 01:02:02,960 Вы, хлопцы, памятаеце, што, ці не так? 1150 01:02:02,960 --> 01:02:04,960 ОК, як ён казаў. 1151 01:02:04,960 --> 01:02:08,330 >> ОК, паказальнікі. 1152 01:02:08,330 --> 01:02:11,078 Так што гэта паказальнік? 1153 01:02:11,078 --> 01:02:12,050 >> АЎДЫТОРЫЯ: [неразборліва]. 1154 01:02:12,050 --> 01:02:12,820 >> LUCAS: адрас. 1155 01:02:12,820 --> 01:02:13,720 ОК. 1156 01:02:13,720 --> 01:02:18,530 Я ведаю, што Дэвід паказвае кучу відэа Бинки і рэчы, якія паказваюць 1157 01:02:18,530 --> 01:02:19,080 адзін да аднаго. 1158 01:02:19,080 --> 01:02:22,960 Але мне падабаецца думаць, паказальнікаў толькі як адрас. 1159 01:02:22,960 --> 01:02:26,110 Так што гэта зменная, якая будзе захоўваць адрасы. 1160 01:02:26,110 --> 01:02:31,940 >> Так што гэта проста гэта спецыяльная пераменная гэта значыць задоўга чатыры байта. 1161 01:02:31,940 --> 01:02:36,550 Памятаеце, што паказальнік да чаго гэта заўсёды чатыры байта доўгія для нашай 32-біт 1162 01:02:36,550 --> 01:02:39,370 Машына так і ў выпадку з прыбор. 1163 01:02:39,370 --> 01:02:41,920 1164 01:02:41,920 --> 01:02:47,050 І гэта як раз мае месца зменнай ўнутры яго. 1165 01:02:47,050 --> 01:02:50,240 >> ОК, так што гэтая памяць, у асноўным. 1166 01:02:50,240 --> 01:02:57,420 Такім чынам, кожны блок памяці на самай справе мае этыкетка, якая з'яўляецца адрас 1167 01:02:57,420 --> 01:02:58,890 slotty памяці. 1168 01:02:58,890 --> 01:03:02,370 Такім чынам, што азначае, што ў мяне можа быць паказальнік, які паказвае на 1169 01:03:02,370 --> 01:03:03,380 любы з гэтых адрасоў. 1170 01:03:03,380 --> 01:03:09,930 Так што прычына, чаму мы будзем выкарыстоўваць паказальнікі з'яўляецца калі мне давядзецца запамінаць размяшчэнне 1171 01:03:09,930 --> 01:03:12,300 што канкрэтная пераменная памяці. 1172 01:03:12,300 --> 01:03:16,560 >> І вы, хлопцы, памятаеце, што адзін з тых, выпадкі былі, калі ў мяне ёсць функцыя 1173 01:03:16,560 --> 01:03:20,820 калі ў мяне ёсць на самой справе хачу, каб вы своп для рэчыўных лікаў, я на самой справе 1174 01:03:20,820 --> 01:03:22,110 павінны паслаць паказальнік. 1175 01:03:22,110 --> 01:03:23,460 Ня пераменная. 1176 01:03:23,460 --> 01:03:25,200 Вы, хлопцы, памятаеце вы, што? 1177 01:03:25,200 --> 01:03:26,450 Розніца between-- 1178 01:03:26,450 --> 01:03:33,350 1179 01:03:33,350 --> 01:03:34,120 як называецца? 1180 01:03:34,120 --> 01:03:36,010 Выклік па значэнні і выкліку па спасылцы, ці не так? 1181 01:03:36,010 --> 01:03:36,840 >> ОК, так. 1182 01:03:36,840 --> 01:03:38,330 Так што тэлефануйце па значэнні. 1183 01:03:38,330 --> 01:03:43,570 Калі вы проста адправіць зменную функцыянаваць вы проста даслаўшы значэнне. 1184 01:03:43,570 --> 01:03:45,610 Такім чынам, вы на самой справе адпраўкі копія зменнай. 1185 01:03:45,610 --> 01:03:49,720 І ваша праграма не магла клапаціцца менш о, калі тая ж пераменная фактычна 1186 01:03:49,720 --> 01:03:51,650 робіць копію. 1187 01:03:51,650 --> 01:03:56,330 >> І, заклікаючы спасылка азначае, што Я на самой справе напрамкі копіі 1188 01:03:56,330 --> 01:03:57,550 паказальнік на гэтую зменную. 1189 01:03:57,550 --> 01:04:00,970 Дык гэта значыць, што я пасылаю Размяшчэнне гэтай зменнай. 1190 01:04:00,970 --> 01:04:04,440 Так адчуваю я маю размяшчэнне зменная, калі я тэлефаную функцыя 1191 01:04:04,440 --> 01:04:09,700 з паказальнікамі, я ў стане на самай справе змяніць дадзеныя, якія былі ў асноўнай. 1192 01:04:09,700 --> 01:04:12,050 Сэнс? 1193 01:04:12,050 --> 01:04:17,560 >> Хоць, паказальнік з'яўляецца копіяй, паказальнік ўсё яшчэ мае рэальны адрас 1194 01:04:17,560 --> 01:04:20,090 зменная, што я хачу змяніць. 1195 01:04:20,090 --> 01:04:21,920 Сэнс? 1196 01:04:21,920 --> 01:04:24,290 >> Так стварэння паказальнікаў. 1197 01:04:24,290 --> 01:04:28,410 Памятаеце, паказальнік заўсёды ёсць тып, які ён, паказваючы 1198 01:04:28,410 --> 01:04:29,890 каб затым зорачку. 1199 01:04:29,890 --> 01:04:31,030 І тады вы паставіць імя. 1200 01:04:31,030 --> 01:04:35,765 Так што памятаеце, што кожны раз, калі ў вас ёсць усе зоркі, гэта як паказальнік на 1201 01:04:35,765 --> 01:04:38,990 што ўсё, што пераменная увядзіце што вы мелі. 1202 01:04:38,990 --> 01:04:42,850 >> Такім чынам, тут, у зорку, напрыклад, гэта ўказальнік і цэлы лік. 1203 01:04:42,850 --> 01:04:47,680 І тады сімвал зорка паказальнік сімвал зоркі і гэтак далей. 1204 01:04:47,680 --> 01:04:47,960 Так? 1205 01:04:47,960 --> 01:04:52,710 >> АЎДЫТОРЫЯ: Што рабіць, калі ў нас ёсць паказальнік на п здымацца х. 1206 01:04:52,710 --> 01:04:55,255 Я ведаю, што стварае паказальнік на х. 1207 01:04:55,255 --> 01:04:59,432 Ці значыць гэта таксама абвясціць х цэлае? 1208 01:04:59,432 --> 01:05:05,170 >> LUCAS: ОК, так што, калі вы кажаце, н-зоркавы х, вы не ствараеце паказальнік 1209 01:05:05,170 --> 01:05:06,000 пераменная х. 1210 01:05:06,000 --> 01:05:08,170 Вы ствараеце паказальнік з імем х. 1211 01:05:08,170 --> 01:05:09,396 >> АЎДЫТОРЫЯ: [неразборліва]. 1212 01:05:09,396 --> 01:05:14,250 >> LUCAS: Таму калі я кажу н зорны х, я кажучы, эй, у памяці, я збіраюся 1213 01:05:14,250 --> 01:05:16,390 атрымаць адзін з гэтых трох скрынак. 1214 01:05:16,390 --> 01:05:20,750 І я хачу сказаць, што, што будзе х, які з'яўляецца 1215 01:05:20,750 --> 01:05:22,000 будзе паказальнік. 1216 01:05:22,000 --> 01:05:26,860 1217 01:05:26,860 --> 01:05:30,640 І нешта цікавае пра паказальніках з'яўляецца тое, што мы кажам, што ў іх ёсць 1218 01:05:30,640 --> 01:05:32,620 4 байта для 32-бітнай машыне. 1219 01:05:32,620 --> 01:05:36,320 І прычына, што тлумачыцца тым, што 4 байта 32-біт. 1220 01:05:36,320 --> 01:05:40,490 >> І машыны, якія 64 біт на самай справе ёсць паказальнікі адрасы 1221 01:05:40,490 --> 01:05:43,480 , Што ў 64 біта. 1222 01:05:43,480 --> 01:05:49,820 Дык гэта проста азначае, што памер адрасы ў машыне адрозніваецца. 1223 01:05:49,820 --> 01:05:52,270 >> Так Супастаўленне і разнаймення. 1224 01:05:52,270 --> 01:05:54,310 Ёсць два аператара, што вы, хлопцы, павінны памятаць. 1225 01:05:54,310 --> 01:05:55,450 Першы Ампэрсанд. 1226 01:05:55,450 --> 01:05:56,810 Другой зоркай. 1227 01:05:56,810 --> 01:06:05,060 Не палохайцеся гэтай зоркі і гэта зоркі, таму што памятаеце, што, у 1228 01:06:05,060 --> 01:06:06,950 гэты выпадак, у вас ёсць п зорку. 1229 01:06:06,950 --> 01:06:08,700 >> Гэта як усё гэта разам. 1230 01:06:08,700 --> 01:06:10,720 Там няма н Space Star. 1231 01:06:10,720 --> 01:06:12,070 Дык гэта значыць, што гэта тып. 1232 01:06:12,070 --> 01:06:14,870 Памятаеце, што, калі ў вас ёсць пераменная зорка, ты 1233 01:06:14,870 --> 01:06:16,230 казаць пра тып. 1234 01:06:16,230 --> 01:06:20,540 >> Калі ў вас ёсць толькі зорку, а затым Імя зменнай, гэта азначае, што 1235 01:06:20,540 --> 01:06:24,100 вы разнаймення паказальніка, які азначае, што вы глядзіце на 1236 01:06:24,100 --> 01:06:28,290 паказальнік, знайсці адрас, гэта паказваючы на, збіраецца на гэты адрас, 1237 01:06:28,290 --> 01:06:30,850 і, гледзячы на ​​кожны раз, калі у вас там. 1238 01:06:30,850 --> 01:06:34,310 Таму я кажу сваім студэнтам, што, калі ў вас ёсць зоркі, вы павінны думаць, што гэта 1239 01:06:34,310 --> 01:06:36,850 абрэвіятура ўтрымання. 1240 01:06:36,850 --> 01:06:39,770 >> Так што калі ў вас ёсць паказальнік, і вы зрабіць зорку паказальнік, гэта 1241 01:06:39,770 --> 01:06:41,720 змест паказальніка. 1242 01:06:41,720 --> 01:06:44,580 Так вы ідзяце ў тое, што ён, паказваючы на і паглядзець на пастаянным змесце. 1243 01:06:44,580 --> 01:06:47,730 І Ампэрсанд тое ж самае рэчы, як адрас. 1244 01:06:47,730 --> 01:06:52,560 >> Так што, калі ў мяне ёсць пераменная A-- як, давайце сказаць, што я зрабіў Int роўная 3-- 1245 01:06:52,560 --> 01:06:56,900 калі я хачу, каб знайсці адрас, што пераменная памяці, я магу проста зрабіць 1246 01:06:56,900 --> 01:06:58,240 Ампэрсанд. 1247 01:06:58,240 --> 01:07:00,280 Так што гэта адрас. 1248 01:07:00,280 --> 01:07:01,530 Сэнс? 1249 01:07:01,530 --> 01:07:03,790 1250 01:07:03,790 --> 01:07:05,040 >> Дык вось прыклад. 1251 01:07:05,040 --> 01:07:08,370 1252 01:07:08,370 --> 01:07:11,530 Гэта адсутнічае цэлалікавае б і цэлалікавае гр. 1253 01:07:11,530 --> 01:07:16,520 Так Int роўная 3 азначае, што Я збіраюся пайсці ў памяці. 1254 01:07:16,520 --> 01:07:19,870 І я збіраюся знайсці слот і справа тут лік 3. 1255 01:07:19,870 --> 01:07:22,200 >> А потым Int б роўная 4. 1256 01:07:22,200 --> 01:07:23,100 Я збіраюся зрабіць тое ж самае. 1257 01:07:23,100 --> 01:07:25,840 Да памяці і паставіць шэраг 4 ў ​​адным з скрынь. 1258 01:07:25,840 --> 01:07:27,100 І Int роўная 5. 1259 01:07:27,100 --> 01:07:29,740 Знайсці іншую скрынку і паставіць шэраг 5. 1260 01:07:29,740 --> 01:07:36,160 >> Дык што ж гэта лінія робіш? н зорка гадавых роўная Ампэрсанд а. 1261 01:07:36,160 --> 01:07:37,800 Такім чынам, у першую чаргу, н зоркай у год. 1262 01:07:37,800 --> 01:07:39,050 Што ён робіць? 1263 01:07:39,050 --> 01:07:40,930 1264 01:07:40,930 --> 01:07:42,298 >> АЎДЫТОРЫЯ: [неразборліва]. 1265 01:07:42,298 --> 01:07:47,890 >> LUCAS: Так, так н зорка гадавых, першы, аб'яўляе паказальнік пад назвай гадавых. 1266 01:07:47,890 --> 01:07:53,720 А потым ён прысваення значэння што паказальнік будзе адрас. 1267 01:07:53,720 --> 01:07:55,790 Так Ампэрсанд. 1268 01:07:55,790 --> 01:07:58,510 Тады, калі я зорка Pb, што гэта зорка рь? 1269 01:07:58,510 --> 01:08:02,418 1270 01:08:02,418 --> 01:08:03,150 >> Ой, прабачце. 1271 01:08:03,150 --> 01:08:06,330 Гэта таксама адсутнічае. н зорка рь. 1272 01:08:06,330 --> 01:08:07,905 Я маю на ўвазе зоркі шт. 1273 01:08:07,905 --> 01:08:11,200 Мне вельмі шкада. 1274 01:08:11,200 --> 01:08:11,940 Гэта тое ж самае. 1275 01:08:11,940 --> 01:08:16,408 Але зараз я добра ар стварэння паказальнік б, а затым паказальнік на с. 1276 01:08:16,408 --> 01:08:16,886 Так? 1277 01:08:16,886 --> 01:08:18,136 >> АЎДЫТОРЫЯ: [неразборліва]? 1278 01:08:18,136 --> 01:08:25,490 1279 01:08:25,490 --> 01:08:26,670 >> LUCAS: Так. 1280 01:08:26,670 --> 01:08:32,630 Так што, калі вы ідзяце ў памяці і вы ідзяце ў акно, гэта пазначэнне для гадавых, 1281 01:08:32,630 --> 01:08:37,149 вы на самой справе збіраецца ўбачыць адрас. 1282 01:08:37,149 --> 01:08:38,399 ОК? 1283 01:08:38,399 --> 01:08:42,970 1284 01:08:42,970 --> 01:08:43,300 Так? 1285 01:08:43,300 --> 01:08:45,605 >> АЎДЫТОРЫЯ: [неразборліва]? 1286 01:08:45,605 --> 01:08:49,260 >> LUCAS: Так, паказальнік з'яўляецца адрасам. 1287 01:08:49,260 --> 01:08:50,120 Ніколі не забывайце, што. 1288 01:08:50,120 --> 01:08:52,800 Гэта як самы важны частка аб паказальніках. 1289 01:08:52,800 --> 01:08:56,180 Там у захоўванні і адрас некаторай зменнай. 1290 01:08:56,180 --> 01:08:56,890 Што яшчэ? 1291 01:08:56,890 --> 01:08:58,370 Яшчэ пытанні? 1292 01:08:58,370 --> 01:08:59,189 ОК. 1293 01:08:59,189 --> 01:09:00,399 >> Так Паказальнікі і масівы. 1294 01:09:00,399 --> 01:09:08,189 Памятаеце, што, калі я раблю дзесятковага масіў 3, у асноўным, тое, што я раблю, я, накшталт 1295 01:09:08,189 --> 01:09:12,779 з, абвясціўшы ў паказальнік. 1296 01:09:12,779 --> 01:09:18,960 Так масіў накшталт як паказальнік на асаблівае месца ў памяці, у якой я 1297 01:09:18,960 --> 01:09:21,999 выдзелена тры слота для цэлых лікаў. 1298 01:09:21,999 --> 01:09:23,430 Ці мае гэта сэнс? 1299 01:09:23,430 --> 01:09:30,250 >> Таму, калі я раблю цэлалікавае масіў 3, тое, што я робіць, у асноўным, з'яўляецца стварэнне трох 1300 01:09:30,250 --> 01:09:31,479 слоты ў памяці. 1301 01:09:31,479 --> 01:09:33,899 Так што я проста знайсці тры слота ў памяці. 1302 01:09:33,899 --> 01:09:38,810 Так што, калі я раблю, то, зоркай масіва, яго у асноўным азначае ўтрыманне масіва, 1303 01:09:38,810 --> 01:09:46,180 што азначае сцерці паказальнік, я іду да таго месца, што гэта, паказваючы на, 1304 01:09:46,180 --> 01:09:47,939 і я паставіў нумар адзін. 1305 01:09:47,939 --> 01:09:53,729 >> А потым, калі я зорка масіў плюс 1, што тое ж самае, як рабіць масіў 1306 01:09:53,729 --> 01:09:59,690 кранштэйны адзін, які проста азначае, я іду ў месца, якое ён, паказваючы на. 1307 01:09:59,690 --> 01:10:03,000 І тады плюс 1 маркі мне перайсці на адну пазіцыю. 1308 01:10:03,000 --> 01:10:06,510 Так я іду на гэтую пасаду, фактычна, і паставіць нумар два. 1309 01:10:06,510 --> 01:10:10,900 >> І вось, нарэшце, калі я раблю Масіў плюс 2, я іду туды, дзе 1310 01:10:10,900 --> 01:10:11,825 якое паказвае масіва ў. 1311 01:10:11,825 --> 01:10:14,690 А потым я перайду да блокаў памяці. 1312 01:10:14,690 --> 01:10:16,240 І тады я паклаў тут лік тры. 1313 01:10:16,240 --> 01:10:16,600 Так? 1314 01:10:16,600 --> 01:10:21,400 >> АЎДЫТОРЫЯ: Так зорка масіў проста кажучы самы першы пункт. 1315 01:10:21,400 --> 01:10:25,090 І вы можаце дадаць 1, толькі таму, што мы толькі сапраўды 1316 01:10:25,090 --> 01:10:27,295 спасылаючыся, што першы адрас. 1317 01:10:27,295 --> 01:10:28,545 >> LUCAS: Так. 1318 01:10:28,545 --> 01:10:32,720 1319 01:10:32,720 --> 01:10:36,020 Чаму мы, напрыклад, сказаць, масіў 0, масіў 1, і масіў 2? 1320 01:10:36,020 --> 01:10:38,970 1321 01:10:38,970 --> 01:10:42,790 Я кажу, навошта ты 0, 1, 2, 3, а не 1, 2, 3? 1322 01:10:42,790 --> 01:10:46,550 Адной з прычын з'яўляецца, адным, кампутар праграмісты аддаюць перавагу, каб пачаць 1323 01:10:46,550 --> 01:10:47,750 пачынаючы з 0. 1324 01:10:47,750 --> 01:10:52,370 Два, таму што, калі вы робіце масіў 0, гэта тое ж самае, робяць масіў 1325 01:10:52,370 --> 01:10:56,330 плюс 0, што азначае, я іду ў што пазіцыя, і я не 1326 01:10:56,330 --> 01:10:59,320 прапускаць любыя блокі памяці. 1327 01:10:59,320 --> 01:11:01,750 Так што я не перамяшчаць любыя блокі памяці. 1328 01:11:01,750 --> 01:11:02,015 Так? 1329 01:11:02,015 --> 01:11:03,265 >> АЎДЫТОРЫЯ: [неразборліва]? 1330 01:11:03,265 --> 01:11:05,928 1331 01:11:05,928 --> 01:11:12,670 >> LUCAS: Так яна просіць, што з'яўляецца рабіць адрозненне паміж 1332 01:11:12,670 --> 01:11:14,000 гэта ці рабіць Таноса. 1333 01:11:14,000 --> 01:11:17,550 Адно з адрозненняў складаецца ў тым цэлалікавых масіў 3 стварэнні 1334 01:11:17,550 --> 01:11:19,260 Масіў у стэку. 1335 01:11:19,260 --> 01:11:23,080 І калі я раблю Таноса, яго стварае ў кучы. 1336 01:11:23,080 --> 01:11:25,250 Ці мае гэта сэнс? 1337 01:11:25,250 --> 01:11:28,870 >> Так як жа Таноса самай справе працуе? 1338 01:11:28,870 --> 01:11:32,245 Дык чаму ж мы нават трэба выкарыстоўваць Таноса? 1339 01:11:32,245 --> 01:11:35,730 1340 01:11:35,730 --> 01:11:39,700 Ваш кампілятар роду дзеячаў з усіх зменныя, якія вы абвешчаныя. 1341 01:11:39,700 --> 01:11:44,040 І ён стварае прастору для ўсіх з іх у стэку. 1342 01:11:44,040 --> 01:11:47,180 Так усё зменныя збіраюцца быць дзе ў стэку. 1343 01:11:47,180 --> 01:11:49,460 Дык вось зменныя асяроддзі. 1344 01:11:49,460 --> 01:11:53,850 >> Так у асноўным, месцы для гэтых зменных ў памяці вылучаецца на 1345 01:11:53,850 --> 01:11:55,080 час кампіляцыі. 1346 01:11:55,080 --> 01:11:58,790 Дык гэта значыць, што ваш кампутар мае ведаць усе гэтыя зменныя 1347 01:11:58,790 --> 01:11:59,790 загадзя. 1348 01:11:59,790 --> 01:12:02,500 Для гэтага не трэба ведаць, што значэнне вы збіраецеся пакласці ў іх. 1349 01:12:02,500 --> 01:12:05,490 Але для гэтага трэба ведаць, як аб'ём памяці вам трэба. 1350 01:12:05,490 --> 01:12:09,380 >> Але цяпер давайце ўявім, што, напрыклад, вы ствараеце масіў або прымаць 1351 01:12:09,380 --> 01:12:13,430 Радок, вы прымаеце ад карыстальніка. 1352 01:12:13,430 --> 01:12:17,300 Вы не ведаеце, як доўга радок будзе, напрыклад. 1353 01:12:17,300 --> 01:12:20,600 Дык вы не ведаеце дакладна, колькі блокі памяці вы вылучаеце, ці не так? 1354 01:12:20,600 --> 01:12:24,120 >> Так што на самой справе не мае сэнсу для Вы сказаць пакласці 100 знакаў. 1355 01:12:24,120 --> 01:12:26,420 А што потым, калі карыстальнік піша 150? 1356 01:12:26,420 --> 01:12:27,670 Вы збіраецеся быць п'яным. 1357 01:12:27,670 --> 01:12:30,160 1358 01:12:30,160 --> 01:12:34,620 >> Так у асноўным, вы не можаце быць упэўненыя ў тым, як аб'ём памяці трэба вылучыць 1359 01:12:34,620 --> 01:12:35,960 пры кампіляцыі праграмы. 1360 01:12:35,960 --> 01:12:38,240 Вы проста ведаеце, што на час працы. 1361 01:12:38,240 --> 01:12:39,950 Дык вось чаму ў вас кучу. 1362 01:12:39,950 --> 01:12:47,610 Так куча будзе мець памяць што вы выдзялення падчас 1363 01:12:47,610 --> 01:12:50,810 Працягласць выканання праграмы. 1364 01:12:50,810 --> 01:12:55,780 >> Так у асноўным, калі вы робіце Таноса, што Вы робіце вылучае памяць у 1365 01:12:55,780 --> 01:13:00,160 выканання, што азначае, што вы вырашыўшы права ў той момант, што вам 1366 01:13:00,160 --> 01:13:02,670 павінны мець гэтую памяць. 1367 01:13:02,670 --> 01:13:04,210 Дык вось, калі вы вылучаючы яго. 1368 01:13:04,210 --> 01:13:06,430 Ці мае гэта сэнс? 1369 01:13:06,430 --> 01:13:11,690 >> Так што памятаеце, стэк мае зменныя што ствараюцца на час кампіляцыі. 1370 01:13:11,690 --> 01:13:14,560 А потым куча мае зменныя што ствараюцца, як вы ідзяце 1371 01:13:14,560 --> 01:13:15,600 з Таноса, напрыклад. 1372 01:13:15,600 --> 01:13:16,850 >> АЎДЫТОРЫЯ: [неразборліва]? 1373 01:13:16,850 --> 01:13:19,179 1374 01:13:19,179 --> 01:13:24,340 >> LUCAS: Так GetString з'яўляецца буду называць Таноса. 1375 01:13:24,340 --> 01:13:26,710 Дазвольце мне казаць пра Таноса, і Я растлумачу GetString. 1376 01:13:26,710 --> 01:13:32,000 Так Таноса тое ж самае як размеркаванне памяці. 1377 01:13:32,000 --> 01:13:34,600 Так ён збіраецца вылучыць памяці ў кучы. 1378 01:13:34,600 --> 01:13:40,010 І ён збіраецца вяртаць паказальнік на дзе, што памяць была выдзелена ў. 1379 01:13:40,010 --> 01:13:43,090 >> Такім чынам, калі вы do-- 1380 01:13:43,090 --> 01:13:44,910 тут example-- 1381 01:13:44,910 --> 01:13:45,830 н зорка паказальнік. 1382 01:13:45,830 --> 01:13:50,520 А потым паказальнік роўны Таноса памер цалевых раз 10. 1383 01:13:50,520 --> 01:13:52,110 Я ствараю паказальнік. 1384 01:13:52,110 --> 01:13:59,020 І тады я задаю гэты паказальнік значэнне паказальніка, што Malloc 1385 01:13:59,020 --> 01:13:59,680 дае мне. 1386 01:13:59,680 --> 01:14:04,150 >> Вось я і пытаю Таноса вы можаце вылучыць прастору для 10 цэлых лікаў. 1387 01:14:04,150 --> 01:14:05,390 Вось што ён казаў. 1388 01:14:05,390 --> 01:14:09,020 І Таноса дае мне паказальнік да таго месца. 1389 01:14:09,020 --> 01:14:11,460 Сэнс? 1390 01:14:11,460 --> 01:14:12,270 ОК. 1391 01:14:12,270 --> 01:14:17,940 Я І GetString з'яўляецца, у асноўным, робяць тэлефануйце ў Таноса так што вы можаце вылучыць 1392 01:14:17,940 --> 01:14:21,680 памяці падчас выканання. 1393 01:14:21,680 --> 01:14:26,460 >> Заўсёды памятайце, каб праверыць на нуль таму Таноса збіраецца вярнуцца нуль 1394 01:14:26,460 --> 01:14:28,200 калі ён не можа вылучыць памяць. 1395 01:14:28,200 --> 01:14:31,660 Давайце выкажам здагадку, што вы просіце смешна аб'ём памяці. 1396 01:14:31,660 --> 01:14:33,950 Кампутар не будзе магчымасць выдзяляць так шмат. 1397 01:14:33,950 --> 01:14:36,410 >> Так Таноса толькі збіраецца вярнуцца нуль. 1398 01:14:36,410 --> 01:14:42,210 Так заўсёды памятаць, каб праверыць, калі паказальнік, які вы атрымалі ад Таноса з'яўляецца 1399 01:14:42,210 --> 01:14:45,640 NULL ці не, таму што, калі гэта, можна быць разнаймення паказальніка і 1400 01:14:45,640 --> 01:14:48,340 выклікаючы пабочных памылкі. 1401 01:14:48,340 --> 01:14:50,930 І, нарэшце, не забудзьцеся Ваш вольнай памяці. 1402 01:14:50,930 --> 01:14:57,800 1403 01:14:57,800 --> 01:15:00,560 >> Malloc стварае памяць у кучы. 1404 01:15:00,560 --> 01:15:03,436 І вы павінны вызваліць памяць перш чым праграма сканчаецца. 1405 01:15:03,436 --> 01:15:05,370 Добра, гэта ўсё для мяне. 1406 01:15:05,370 --> 01:15:07,900 На жаль, Роб. 1407 01:15:07,900 --> 01:15:07,950 Дзякуючы. 1408 01:15:07,950 --> 01:15:09,878 >> [Апладысменты] 1409 01:15:09,878 --> 01:15:12,679 >> LUCAS: Любыя апошнія пытанні перад Роб прыходзіць? 1410 01:15:12,679 --> 01:15:13,138 Няма? 1411 01:15:13,138 --> 01:15:13,597 Так? 1412 01:15:13,597 --> 01:15:15,892 >> АЎДЫТОРЫЯ: я не бачыў гэта адзін онлайн. 1413 01:15:15,892 --> 01:15:17,269 Вы загрузілі яго яшчэ? 1414 01:15:17,269 --> 01:15:19,106 >> LUCAS: Я думаю, што Дэйв загрузкі яго ў бліжэйшы час. 1415 01:15:19,106 --> 01:15:19,880 >> DAVE: Гэта будзе размешчана. 1416 01:15:19,880 --> 01:15:20,310 >> LUCAS: Гэта будзе онлайн. 1417 01:15:20,310 --> 01:15:21,175 >> АЎДЫТОРЫЯ: Гэта залежыць. 1418 01:15:21,175 --> 01:15:22,090 >> LUCAS: Гэта залежыць? 1419 01:15:22,090 --> 01:15:23,157 ОК. 1420 01:15:23,157 --> 01:15:23,644 Так? 1421 01:15:23,644 --> 01:15:27,053 >> АЎДЫТОРЫЯ: [неразборліва]? 1422 01:15:27,053 --> 01:15:30,285 >> LUCAS: Так, вы павінны вызваліць усіх памяць, якая змяшчаецца ў кучы. 1423 01:15:30,285 --> 01:15:31,535 >> АЎДЫТОРЫЯ: [неразборліва]? 1424 01:15:31,535 --> 01:15:34,518 1425 01:15:34,518 --> 01:15:36,160 >> LUCAS: Так. 1426 01:15:36,160 --> 01:15:39,980 Кожны раз, калі ў вас ёсць культуры Таноса, Вы павінны мець культуру бясплатна 1427 01:15:39,980 --> 01:15:42,640 пасля спынення выкарыстання гэтай зменнай. 1428 01:15:42,640 --> 01:15:44,800 Так Таноса і вольныя заўсёды разам. 1429 01:15:44,800 --> 01:15:45,410 Іх лепшыя сябры. 1430 01:15:45,410 --> 01:15:46,720 Так. 1431 01:15:46,720 --> 01:15:47,970 Роб? 1432 01:15:47,970 --> 01:15:55,595 1433 01:15:55,595 --> 01:15:56,850 >> ROB: Я пайду хутка. 1434 01:15:56,850 --> 01:16:00,466 А таксама відэа будзе мірыцца. 1435 01:16:00,466 --> 01:16:01,716 У мяне ёсць мікрафон на. 1436 01:16:01,716 --> 01:16:24,060 1437 01:16:24,060 --> 01:16:26,230 >> Такім чынам, тыдзень пяць матэрыял. 1438 01:16:26,230 --> 01:16:27,970 Першае, што мы павінны гэта стэк. 1439 01:16:27,970 --> 01:16:33,390 Так што памятаеце, што ёсць толькі адзін стэк кадраў у выпадку актыўнага выкліку функцыі. 1440 01:16:33,390 --> 01:16:34,710 Мы ўбачым, што ў секунду. 1441 01:16:34,710 --> 01:16:37,850 А таксама памятаць, што насамрэч адбываецца у кожным кадры стэка збіраюцца быць 1442 01:16:37,850 --> 01:16:41,880 лакальныя зменныя нашых функцый, аргументы, якія перадаюцца ў наш 1443 01:16:41,880 --> 01:16:43,880 функцыі, разам з парай іншыя рэчы, якія вы сапраўды не 1444 01:16:43,880 --> 01:16:45,260 трэба турбавацца аб. 1445 01:16:45,260 --> 01:16:50,950 >> Дык вось прыклад праграмы, дзе, апавяшчэнне, асноўнай з'яўляецца printfing вяртанне 1446 01:16:50,950 --> 01:16:52,830 Значэнне Foo 4. 1447 01:16:52,830 --> 01:16:57,930 Foo толькі збіраецца вярнуцца Значэнне бар 4 коскі 6. 1448 01:16:57,930 --> 01:17:02,380 І бар збіраецца ўсталяваць некаторыя мясцовыя пераменная п роўная 4 разы 6. 1449 01:17:02,380 --> 01:17:03,920 А потым вярнуцца н. 1450 01:17:03,920 --> 01:17:09,130 >> Такім чынам, давайце зірнем на стэк на працягу фактычны ітэрацыі гэтай праграмы. 1451 01:17:09,130 --> 01:17:10,500 Такім чынам, ёсць падстава нашага стэка. 1452 01:17:10,500 --> 01:17:12,620 Памятаеце, што стэк расце ўверх. 1453 01:17:12,620 --> 01:17:15,370 Так у ніжняй часткі нашага стэка, мы ёсць фрэйм ​​стэка для асноўнага. 1454 01:17:15,370 --> 01:17:17,000 Пры запуску праграмы, галоўным заўсёды будзе ў 1455 01:17:17,000 --> 01:17:18,560 Дно нашай стэка. 1456 01:17:18,560 --> 01:17:20,880 >> І тое, што ўнутры нашага стэк выклікаў для асноўнай? 1457 01:17:20,880 --> 01:17:23,810 Такім чынам, нават пры тым, што не існуе ніякага мясцовага зменныя ў асноўным, як я ўжо казаў, 1458 01:17:23,810 --> 01:17:29,670 мы агдс і RGV займаючы месца ўнутры асноўнага кадра стэка. 1459 01:17:29,670 --> 01:17:33,260 Так галоўны цяпер збіраецца выклікаць функцыю Foo. 1460 01:17:33,260 --> 01:17:35,125 А гэта значыць, Foo збіраецца атрымаць свой уласны кадр стэка. 1461 01:17:35,125 --> 01:17:36,970 >> Так што цяпер мы ўнутры функцыя Foo. 1462 01:17:36,970 --> 01:17:38,610 І тое, што трэба ісці ў фрэйм ​​стэка класа Foo? 1463 01:17:38,610 --> 01:17:41,100 Ну, Foo мае аргументаў н. 1464 01:17:41,100 --> 01:17:45,440 І н роўная 4 з, што тое, што Асноўны праходзіць у якасці аргументу Foo ст. 1465 01:17:45,440 --> 01:17:48,490 >> Так што цяпер Foo збіраецца назваць бар. 1466 01:17:48,490 --> 01:17:52,070 Што бар прыйдзецца ўнутры яго 'кадра стэка? 1467 01:17:52,070 --> 01:17:55,610 Ён мае х, роўнае 4 Y, роўным шасці. 1468 01:17:55,610 --> 01:17:58,540 Гэта яшчэ не ўсё, што мы збіраемся мець ў кадры стэка, таму што бар 1469 01:17:58,540 --> 01:18:00,580 таксама мае лакальную зменную п. 1470 01:18:00,580 --> 01:18:03,370 І н мы збіраемся ўсталяваць роўным 24. 1471 01:18:03,370 --> 01:18:05,750 >> Так што цяпер бар збіраецца вярнуцца н. 1472 01:18:05,750 --> 01:18:09,300 Так бар вяртаецца 24 да кадр стэка нешта. 1473 01:18:09,300 --> 01:18:12,560 І таму, што бар цяпер вяртаецца, што азначае, што мы выскокваюць кадр стэка 1474 01:18:12,560 --> 01:18:14,250 для панэлі з стэка. 1475 01:18:14,250 --> 01:18:18,430 Так уся памяць, што бар быў выкарыстоўваючы цяпер з стэка. 1476 01:18:18,430 --> 01:18:21,550 >> Зараз, Foo таксама збіраецца вярнуцца 24 на галоўную. 1477 01:18:21,550 --> 01:18:25,470 Так што цяпер Foo вяртаецца, памяць што Foo выкарыстаў у сваёй ' 1478 01:18:25,470 --> 01:18:27,550 кадр стэка таксама сышоў. 1479 01:18:27,550 --> 01:18:29,660 А цяпер, галоўны збіраецца патэлефанаваць Printf. 1480 01:18:29,660 --> 01:18:31,660 Так Е з'яўляецца толькі адна функцыя. 1481 01:18:31,660 --> 01:18:35,320 Калі мы называем Е, гэта будзе іншы фрэйм ​​стэка для Printf 1482 01:18:35,320 --> 01:18:36,470 выклік функцыі. 1483 01:18:36,470 --> 01:18:37,990 >> Што мы перадаем Printf? 1484 01:18:37,990 --> 01:18:40,090 Гэта тое, што збіраецца пайсці на яго кадра стэка. 1485 01:18:40,090 --> 01:18:44,970 Па крайняй меры, мы перадаем што адсоткаў я зваротны слэш н і 1486 01:18:44,970 --> 01:18:47,180 аргумент 24. 1487 01:18:47,180 --> 01:18:50,370 Гэта можа мець больш у гэта кадр стэка калі Е, здараецца, выкарыстоўваючы некаторыя 1488 01:18:50,370 --> 01:18:51,200 лакальныя зменныя. 1489 01:18:51,200 --> 01:18:51,920 Мы не ведаем. 1490 01:18:51,920 --> 01:18:53,810 >> Але ўсё, што ідзе ў Е-ых стэк выклікаў. 1491 01:18:53,810 --> 01:18:55,740 Гэта збіраецца выканаць Printf. 1492 01:18:55,740 --> 01:18:56,830 Тады Е зроблена. 1493 01:18:56,830 --> 01:18:57,820 Ён вернецца. 1494 01:18:57,820 --> 01:18:58,960 Нарэшце, галоўны робіцца. 1495 01:18:58,960 --> 01:18:59,860 Галоўная вернецца. 1496 01:18:59,860 --> 01:19:02,020 І тады наша праграма. 1497 01:19:02,020 --> 01:19:02,480 Так? 1498 01:19:02,480 --> 01:19:04,505 >> АЎДЫТОРЫЯ: Вы бачыце [неразборліва] 1499 01:19:04,505 --> 01:19:05,900 Аргументы [неразборліва] 1500 01:19:05,900 --> 01:19:06,830 параметры? 1501 01:19:06,830 --> 01:19:09,970 >> ROB: Так што ёсць тонкае адрозненне паміж аргументамі і параметрамі. 1502 01:19:09,970 --> 01:19:14,400 І сапраўды, у агульнай кажуць, людзі, як правіла, проста змешваць іх ўвесь час. 1503 01:19:14,400 --> 01:19:17,550 Але параметры фармальнае назваць рэчы. 1504 01:19:17,550 --> 01:19:20,180 >> Так агдс і агду з'яўляюцца Параметры На галоўную. 1505 01:19:20,180 --> 01:19:23,440 Аргументы, што вы на самой справе прайсці ў якасці гэтых параметраў. 1506 01:19:23,440 --> 01:19:28,340 Так што, калі я тэлефаную Foo з 4, 4 гэта аргумент я перадаю ў. 1507 01:19:28,340 --> 01:19:31,460 І параметр N, усярэдзіне Foo, прымае значэнне 4 1508 01:19:31,460 --> 01:19:32,880 з 4 быў аргумент. 1509 01:19:32,880 --> 01:19:35,826 >> АЎДЫТОРЫЯ: [неразборліва]? 1510 01:19:35,826 --> 01:19:37,880 >> ROB: н з'яўляецца лакальнай зменнай у бар. 1511 01:19:37,880 --> 01:19:41,420 1512 01:19:41,420 --> 01:19:44,960 н-ранейшаму мясцовага да Foo, але гэта параметр, каб Foo. 1513 01:19:44,960 --> 01:19:48,190 Гэта не лакальная пераменная. 1514 01:19:48,190 --> 01:19:48,546 Так? 1515 01:19:48,546 --> 01:19:51,180 >> АЎДЫТОРЫЯ: [неразборліва]? 1516 01:19:51,180 --> 01:19:55,400 >> ROB: Foo проста выклікае бар і вяртання безадносна штрых аддачу. 1517 01:19:55,400 --> 01:19:56,786 >> АЎДЫТОРЫЯ: [неразборліва]? 1518 01:19:56,786 --> 01:19:59,591 >> ROB: Так, проста каб паглядзець, шматразовага стэк кадраў. 1519 01:19:59,591 --> 01:20:00,082 Так? 1520 01:20:00,082 --> 01:20:03,519 >> Зала: А чаму быў Foo называецца да Printf? 1521 01:20:03,519 --> 01:20:05,920 >> ROB: Чаму Foo выклікаецца перад Printf? 1522 01:20:05,920 --> 01:20:10,740 Так што я мог мець, а не, то зрабілі як Int х роўная Foo з 4 1523 01:20:10,740 --> 01:20:12,980 а затым друкуецца х. 1524 01:20:12,980 --> 01:20:17,900 Але замест гэтага, я сумяшчаў функцыі патэлефанаваць у аргумент Е. 1525 01:20:17,900 --> 01:20:23,670 >> Але звярніце ўвагу, што мы не можам на самай справе выканаць выклік ня PRINTF пакуль мы 1526 01:20:23,670 --> 01:20:25,610 высветліць, што Foo 4 з'яўляецца. 1527 01:20:25,610 --> 01:20:27,480 Так што мы збіраемся ацаніць гэты. 1528 01:20:27,480 --> 01:20:32,504 І толькі адзін раз, што робіцца збіраюцца вярнуцца і ацаніць гэта. 1529 01:20:32,504 --> 01:20:32,990 Так? 1530 01:20:32,990 --> 01:20:37,364 >> АЎДЫТОРЫЯ: Паколькі і бар [неразборліва] 1531 01:20:37,364 --> 01:20:41,738 Значэнне, чаму б нам не мець [неразборліва]? 1532 01:20:41,738 --> 01:20:44,400 >> ROB: Яны цалкам павінны быць унутр. 1533 01:20:44,400 --> 01:20:46,260 Гэта не быў злоўлены за некалькі праходаў. 1534 01:20:46,260 --> 01:20:49,010 Так і павінна быць Int бар і Int Foo, так як абодва з іх 1535 01:20:49,010 --> 01:20:50,460 вяртаюцца цэлыя. 1536 01:20:50,460 --> 01:20:54,214 Пустата, толькі калі яны не збіраюцца вярнуцца фактычныя значэння. 1537 01:20:54,214 --> 01:20:54,692 Так? 1538 01:20:54,692 --> 01:20:58,038 >> АЎДЫТОРЫЯ: Калі вы мелі радок вышэй вяртанне [неразборліва]? 1539 01:20:58,038 --> 01:21:01,862 1540 01:21:01,862 --> 01:21:03,730 >> ROB: лінія над наўзамен? 1541 01:21:03,730 --> 01:21:04,410 >> АЎДЫТОРЫЯ: Так. 1542 01:21:04,410 --> 01:21:10,780 Як калі б вы зрабілі Е і [неразборліва], будзе раздрукаваць два разы? 1543 01:21:10,780 --> 01:21:12,992 >> ROB: Так ўнутры Foo? 1544 01:21:12,992 --> 01:21:15,945 Калі б мы мелі Printf прама тут? 1545 01:21:15,945 --> 01:21:16,750 >> АЎДЫТОРЫЯ: Так. 1546 01:21:16,750 --> 01:21:19,510 >> ROB: Дык што, калі ў нас быў PRINTF права тут, будуць друкавацца адзін раз. 1547 01:21:19,510 --> 01:21:23,400 Так мы называем Foo раз прама тут, тады мы будзем ударыў Printf. 1548 01:21:23,400 --> 01:21:24,620 Тады мы будзем называць бар. 1549 01:21:24,620 --> 01:21:25,710 А потым Foo вернецца. 1550 01:21:25,710 --> 01:21:26,275 І вось менавіта. 1551 01:21:26,275 --> 01:21:30,985 Мы толькі калі сутыкаюцца з Е адзін раз. 1552 01:21:30,985 --> 01:21:31,482 Так? 1553 01:21:31,482 --> 01:21:32,973 >> АЎДЫТОРЫЯ: [неразборліва] 1554 01:21:32,973 --> 01:21:37,950 Е выкліку Foo, таму што мы першыя называючы Printf а затым мы перадаем 1555 01:21:37,950 --> 01:21:38,580 аргументы. 1556 01:21:38,580 --> 01:21:40,960 >> ROB: Так у тэорыі, ня Е выкліку Foo? 1557 01:21:40,960 --> 01:21:42,220 Дык не. 1558 01:21:42,220 --> 01:21:47,360 Проста парадак, што з будзе выканаць гэтыя рэчы ёсць, перш чым мы зможам 1559 01:21:47,360 --> 01:21:49,800 выклікаць функцыю, усе аргументы да функцыі павінны 1560 01:21:49,800 --> 01:21:51,600 быць цалкам ацэнены. 1561 01:21:51,600 --> 01:21:53,540 Так як гэта цалкам ацэнены? 1562 01:21:53,540 --> 01:21:54,610 Так, гэта проста радок. 1563 01:21:54,610 --> 01:21:55,480 Гэта проста значэнне. 1564 01:21:55,480 --> 01:21:57,200 >> Тады мы павінны цалкам ацаніць гэта. 1565 01:21:57,200 --> 01:21:59,720 Як толькі гэта будзе зроблена, цяпер усё яе аргументы ацэньваюцца. 1566 01:21:59,720 --> 01:22:01,982 І зараз мы можам зрабіць тэлефануйце ў Е. 1567 01:22:01,982 --> 01:22:02,478 Так? 1568 01:22:02,478 --> 01:22:03,966 >> АЎДЫТОРЫЯ: Адно пытанне. 1569 01:22:03,966 --> 01:22:06,942 Калі ў вас ёсць функцыя пустэч, павінны ў вас ёсць зваротны коскі? 1570 01:22:06,942 --> 01:22:09,910 >> ROB: Вы не вяртанне коскі калі ў вас ёсць функцыя пустэч. 1571 01:22:09,910 --> 01:22:13,370 1572 01:22:13,370 --> 01:22:14,780 ОК. 1573 01:22:14,780 --> 01:22:15,830 Так што цяпер некаторыя куча матэрыял. 1574 01:22:15,830 --> 01:22:19,640 Так кучы, як мы збіраемся мець справу з кіравання дынамічнай памяццю. 1575 01:22:19,640 --> 01:22:23,100 І гэта наўпрост кантрастуе з стэк, які мы б назвалі аўтаматычны 1576 01:22:23,100 --> 01:22:24,100 кіраванне памяццю. 1577 01:22:24,100 --> 01:22:27,140 >> Так у стэку, вы ніколі не павінны справу з тым, як лакальных зменных 1578 01:22:27,140 --> 01:22:30,400 штурхаюць і выштурхваецца ўсе гэтыя кадры стэка і ўсё такое. 1579 01:22:30,400 --> 01:22:31,070 Вы не павінны турбавацца пра гэта. 1580 01:22:31,070 --> 01:22:32,070 Гэта аўтаматычны. 1581 01:22:32,070 --> 01:22:36,990 Так куча ўручную. 1582 01:22:36,990 --> 01:22:38,070 І [неразборліва] 1583 01:22:38,070 --> 01:22:41,260 паступае з гэтых функцый Таноса і бясплатна. 1584 01:22:41,260 --> 01:22:43,550 >> Дык вось яшчэ праграма. 1585 01:22:43,550 --> 01:22:47,145 Усё, што мы робім, mallocing цэлым лікам. 1586 01:22:47,145 --> 01:22:49,360 Мы захоўваць яго ў зорным х. 1587 01:22:49,360 --> 01:22:52,520 Вядома, мы павінны праверыць каб убачыць, калі х з'яўляецца несапраўдным. 1588 01:22:52,520 --> 01:22:56,400 Тады мы ідзем проста ўсталяваць, што х паказвае на 50. 1589 01:22:56,400 --> 01:23:00,350 1590 01:23:00,350 --> 01:23:03,260 Друкуйце тое, што х паказвае на, друк х, а затым бясплатна х. 1591 01:23:03,260 --> 01:23:08,920 >> Так як гэта на самай справе будзе выглядаць калі мы паглядзім на нашу стэка і кучы? 1592 01:23:08,920 --> 01:23:10,950 Такім чынам, мы пачнем зноў. 1593 01:23:10,950 --> 01:23:12,580 У ніжняй частцы нашай стэк, як і раней. 1594 01:23:12,580 --> 01:23:15,930 Памятаеце, што цябе куча непасрэдна выступае супраць стэк? 1595 01:23:15,930 --> 01:23:18,850 Такім чынам, мы будзем мець верх нашага кучы там. 1596 01:23:18,850 --> 01:23:22,590 >> Так у ніжняй часткі нашага стэка, у нас ёсць наш кадр стэка для асноўнага. 1597 01:23:22,590 --> 01:23:28,000 Гэта мае месца для ARGC, ARGV, і мы цяпер маюць лакальную зменную х, якія 1598 01:23:28,000 --> 01:23:30,030 з'яўляецца Int зорка. 1599 01:23:30,030 --> 01:23:32,240 Такім чынам, мы збіраемся для перабору з дапамогай гэтай праграмы. 1600 01:23:32,240 --> 01:23:34,420 Першае, што мы маем, заклік да Таноса. 1601 01:23:34,420 --> 01:23:36,250 >> Такім чынам, мы робім выклік Таноса. 1602 01:23:36,250 --> 01:23:37,100 Malloc з'яўляецца функцыяй. 1603 01:23:37,100 --> 01:23:38,770 Гэта збіраецца атрымаць кадр стэка. 1604 01:23:38,770 --> 01:23:40,180 Што мы пераходзе да Malloc? 1605 01:23:40,180 --> 01:23:41,610 Гэта збіраецца ісці ўнутр з кадра стэка. 1606 01:23:41,610 --> 01:23:45,130 Мы праходжання памер п, што на 4. 1607 01:23:45,130 --> 01:23:49,700 Так што перадаецца Таноса. 1608 01:23:49,700 --> 01:23:50,910 >> Што Таноса рабіць? 1609 01:23:50,910 --> 01:23:53,820 Яна захоплівае нам некаторы прастору ў кучы. 1610 01:23:53,820 --> 01:23:55,320 Такім чынам, мы збіраемся пайсці ў кучы. 1611 01:23:55,320 --> 01:23:57,990 І мы збіраемся захапіць 4 байта з кучы. 1612 01:23:57,990 --> 01:24:01,500 Так што давайце проста даць, што адвольны адрас. 1613 01:24:01,500 --> 01:24:06,680 0x123 Проста рабіць выгляд, што гэта адрас, які знаходзіцца на кучы. 1614 01:24:06,680 --> 01:24:12,300 >> Дык што ж такое на самай справе ўнутры, што вобласць памяці ў адрасным Ox123? 1615 01:24:12,300 --> 01:24:13,080 Смецце. 1616 01:24:13,080 --> 01:24:15,270 Такім чынам, мы яшчэ не запісалі нічога ў ёй. 1617 01:24:15,270 --> 01:24:18,830 Такім чынам, наколькі мы ведаем, яго можа быць што заўгодна. 1618 01:24:18,830 --> 01:24:20,560 Вы не павінны лічыць, што гэта нулявы. 1619 01:24:20,560 --> 01:24:23,870 Гэта, хутчэй за ўсё, не роўная нулю. 1620 01:24:23,870 --> 01:24:26,260 >> Так што цяпер Malloc вяртаецца. 1621 01:24:26,260 --> 01:24:28,020 І што ж нам рабіць, калі Malloc вяртаецца? 1622 01:24:28,020 --> 01:24:29,800 Але няхай будзе, што ён вяртае. 1623 01:24:29,800 --> 01:24:32,290 Пакладзем х, роўныя, што яна вяртаецца. 1624 01:24:32,290 --> 01:24:33,690 Дык што ж гэта вяртанне? 1625 01:24:33,690 --> 01:24:38,150 Гэта вяртанне 0x123 так як гэта адрас блока памяці, які яго 1626 01:24:38,150 --> 01:24:40,850 проста вылучаецца ў кучы. 1627 01:24:40,850 --> 01:24:47,160 >> Так вярнуцца 0x123 х цяпер збіраецца быць усталяваны роўны 0x123, якія, вобразна, 1628 01:24:47,160 --> 01:24:52,940 мы часта маляваць як х, якія маюць фактычнае стрэлка, якая паказвае на гэты блок. 1629 01:24:52,940 --> 01:24:55,820 Але х проста захоўваць гэты адрас. 1630 01:24:55,820 --> 01:24:58,670 Так што цяпер мы павінны праверыць, калі х з'яўляецца несапраўдным. 1631 01:24:58,670 --> 01:24:59,120 Гэта не нуль. 1632 01:24:59,120 --> 01:25:02,170 Мы робім выгляд, што што Таноса ўдалося. 1633 01:25:02,170 --> 01:25:04,950 >> Так што цяпер зорка х роўная 50. 1634 01:25:04,950 --> 01:25:08,450 Так зорка памятае гэта азначае пайсці на гэты адрас. 1635 01:25:08,450 --> 01:25:12,700 Так 0x123 Мы збіраемся пайсці на гэты адрас. 1636 01:25:12,700 --> 01:25:14,660 Так што падводзіць нас там. 1637 01:25:14,660 --> 01:25:16,310 Што мы робім па гэтым адрасе? 1638 01:25:16,310 --> 01:25:19,020 Мы захоўвання 50. 1639 01:25:19,020 --> 01:25:22,500 >> Такім чынам, пасля гэтай лініі, гэта значыць тое, што рэчы будуць выглядаць. 1640 01:25:22,500 --> 01:25:24,640 Так што цяпер гэта ўжо не смецце там. 1641 01:25:24,640 --> 01:25:28,910 Цяпер мы ведаем, што 50 заключаецца ў тым, прыватнасці адрас, таму што 1642 01:25:28,910 --> 01:25:32,410 мы ўсталёўваем яго ў тым, што. 1643 01:25:32,410 --> 01:25:32,790 ОК? 1644 01:25:32,790 --> 01:25:34,370 Так што цяпер мы збіраемся друкаваць ф. 1645 01:25:34,370 --> 01:25:38,490 >> Такім чынам, спачатку мы збіраемся друкаваць зоркі х. 1646 01:25:38,490 --> 01:25:39,640 Так што ж такое зорка х? 1647 01:25:39,640 --> 01:25:44,300 Зноў жа, зорка х азначае пайсці рэч, якая х паказвае на. 1648 01:25:44,300 --> 01:25:47,140 Так х захоўвання 0x123 Перайсці да гэтага. 1649 01:25:47,140 --> 01:25:48,490 Мы атрымліваем 50. 1650 01:25:48,490 --> 01:25:50,540 Так раздрукаваць е, што. 1651 01:25:50,540 --> 01:25:54,900 А гэта значыць, што гэта збіраецца друкаваць 50. 1652 01:25:54,900 --> 01:25:56,850 А потым, што вяртае. 1653 01:25:56,850 --> 01:25:58,340 >> І тады ў нас ёсць другая Printf. 1654 01:25:58,340 --> 01:25:59,370 Цяпер мы адсоткаў р. 1655 01:25:59,370 --> 01:26:01,680 Калі вы яшчэ не бачылі яго, што гэта проста, як вы надрукаваць паказальнік. 1656 01:26:01,680 --> 01:26:04,960 Таму ў нас ёсць працэнтнае I, працэнтаў е, і ўсе тыя, якія ўжо. 1657 01:26:04,960 --> 01:26:07,160 Так адсоткаў р, друкаваць паказальнік. 1658 01:26:07,160 --> 01:26:08,920 >> Так х з'яўляецца паказальнікам. 1659 01:26:08,920 --> 01:26:13,440 Так што, калі мы збіраемся друкаваць х сабе, Мы друкуем тое, што на самой справе ўнутры 1660 01:26:13,440 --> 01:26:19,220 х, што 0x123 Такім чынам, першы друк е збіраецца друкаваць 50. 1661 01:26:19,220 --> 01:26:23,620 Другая друк е збіраецца друкаваць 0x123 Да? 1662 01:26:23,620 --> 01:26:27,460 >> АЎДЫТОРЫЯ: Вы карыстаецеся адсоткаў х надрукаваць паказальнік? 1663 01:26:27,460 --> 01:26:31,200 >> ROB: Так што вы карыстаецеся адсоткаў х надрукаваць паказальнік? 1664 01:26:31,200 --> 01:26:38,350 Такім чынам, вы можаце, але адсоткаў х проста, наогул, для, як калі ў вас ёсць некаторыя 1665 01:26:38,350 --> 01:26:40,325 цэлае, і вы хочаце надрукаваць гэта як шаснаццатковае. 1666 01:26:40,325 --> 01:26:43,250 1667 01:26:43,250 --> 01:26:44,880 Вось толькі, як ты гэта робіш. 1668 01:26:44,880 --> 01:26:47,160 >> Прымаючы пад увагу, адсоткаў г будзе раздрукаваць у выглядзе дзесятковых лікаў. 1669 01:26:47,160 --> 01:26:50,310 Гэта былі мы атрымаць адсоткаў г. я проста цэлае. 1670 01:26:50,310 --> 01:26:52,690 адсоткаў р спецыяльна для паказальнікаў. 1671 01:26:52,690 --> 01:26:54,060 >> Так х з'яўляецца паказальнікам. 1672 01:26:54,060 --> 01:26:56,360 Мы хочам выкарыстоўваць працэнтную р. 1673 01:26:56,360 --> 01:26:57,937 Але адсоткаў х мог працаваць. 1674 01:26:57,937 --> 01:26:58,414 Так? 1675 01:26:58,414 --> 01:26:59,664 >> АЎДЫТОРЫЯ: [неразборліва]? 1676 01:26:59,664 --> 01:27:04,138 1677 01:27:04,138 --> 01:27:05,388 >> ROB: Так. 1678 01:27:05,388 --> 01:27:07,870 1679 01:27:07,870 --> 01:27:13,440 Па крайняй меры, для гэтага call-- таму я не ўключаць яго ў тут. 1680 01:27:13,440 --> 01:27:19,850 Але гэтыя два аргументу абавязкова ўнутры гэтага кадра стэка 1681 01:27:19,850 --> 01:27:23,040 разам з любымі лакальных зменных Е, здараецца, выкарыстоўваючы. 1682 01:27:23,040 --> 01:27:27,020 І тады, пры наступным выкліку PRINTF зараз ўнутры Printf кадр стэка з'яўляецца 1683 01:27:27,020 --> 01:27:33,960 адсоткаў р зваротны слеш н і незалежна ад значэнне х, якое з'яўляецца 0x123. 1684 01:27:33,960 --> 01:27:34,425 Так? 1685 01:27:34,425 --> 01:27:35,675 >> АЎДЫТОРЫЯ: [неразборліва]? 1686 01:27:35,675 --> 01:27:38,145 1687 01:27:38,145 --> 01:27:40,880 >> ROB: Гэта будзе друкаваць тое які выглядае наступным чынам. 1688 01:27:40,880 --> 01:27:41,846 >> АЎДЫТОРЫЯ: [неразборліва]. 1689 01:27:41,846 --> 01:27:44,510 >> ROB: Так ён друкуе яго ў адраснай форме. 1690 01:27:44,510 --> 01:27:47,003 Гэта падобна на адрас. 1691 01:27:47,003 --> 01:27:47,494 Так? 1692 01:27:47,494 --> 01:27:49,458 >> АЎДЫТОРЫЯ: [неразборліва]? 1693 01:27:49,458 --> 01:27:51,075 >> ROB: Чаму што? 1694 01:27:51,075 --> 01:27:52,920 >> АЎДЫТОРЫЯ: [неразборліва]? 1695 01:27:52,920 --> 01:27:55,240 >> ROB: Чаму гэта паказальнік 4 байта? 1696 01:27:55,240 --> 01:27:58,500 Такім чынам, ёсць цэлая куча з 0. перад гэтым. 1697 01:27:58,500 --> 01:28:03,740 Так што гэта сапраўды 0x0000000123. 1698 01:28:03,740 --> 01:28:06,510 На 64-бітнай сістэме, не было б цэлая куча больш нулёў. 1699 01:28:06,510 --> 01:28:11,410 1700 01:28:11,410 --> 01:28:11,900 Так? 1701 01:28:11,900 --> 01:28:13,150 >> АЎДЫТОРЫЯ: [неразборліва]. 1702 01:28:13,150 --> 01:28:17,290 1703 01:28:17,290 --> 01:28:21,130 >> ROB: Такім чынам, першы Е збіраецца print-- 1704 01:28:21,130 --> 01:28:21,980 >> АЎДЫТОРЫЯ: [неразборліва]. 1705 01:28:21,980 --> 01:28:24,420 >> ROB: Так, гэта будзе раздрукаваць што х паказвае на. 1706 01:28:24,420 --> 01:28:27,030 1707 01:28:27,030 --> 01:28:29,070 Зорка кажа, што гэта рэч паказваючы. 1708 01:28:29,070 --> 01:28:30,300 Захопіце яго. 1709 01:28:30,300 --> 01:28:31,455 Дык што ж гэта, паказваючы на? 1710 01:28:31,455 --> 01:28:31,850 50. 1711 01:28:31,850 --> 01:28:32,410 Захопіце яго. 1712 01:28:32,410 --> 01:28:33,390 Гэта тое, што мы збіраемся друкаваць. 1713 01:28:33,390 --> 01:28:37,020 Прымаючы пад увагу, наступны, мы проста друк х сабе. 1714 01:28:37,020 --> 01:28:38,850 Што знаходзіцца ўнутры F? 1715 01:28:38,850 --> 01:28:43,710 0x123. 1716 01:28:43,710 --> 01:28:44,500 ОК. 1717 01:28:44,500 --> 01:28:46,620 >> І вось, нарэшце, у нас ёсць вольная. 1718 01:28:46,620 --> 01:28:48,040 Што мы перадаем вызваліць? 1719 01:28:48,040 --> 01:28:49,470 Мы праходжання х. 1720 01:28:49,470 --> 01:28:52,380 У той час я фактычна адлюстроўваецца гэта ў кадры стэка. 1721 01:28:52,380 --> 01:28:56,370 >> Так мы перадаем значэнне 0x123 вызваліць. 1722 01:28:56,370 --> 01:28:59,070 Так што зараз бясплатна ведае, усё ў парадку, Я павінен ісці да кучы 1723 01:28:59,070 --> 01:29:00,050 і бясплатна, што памяць. 1724 01:29:00,050 --> 01:29:03,920 Гэта ўжо не выкарыстоўваць тое, што з'яўляецца па адрасе 0x123. 1725 01:29:03,920 --> 01:29:07,010 >> Так бясплатна збіраецца выпусціць што з кучы. 1726 01:29:07,010 --> 01:29:09,490 Цяпер наша куча зноў пусты. 1727 01:29:09,490 --> 01:29:11,120 У нас няма ніякіх уцечак памяці. 1728 01:29:11,120 --> 01:29:12,940 Зараз бясплатна вернецца. 1729 01:29:12,940 --> 01:29:16,130 Звярніце ўвагу, што да гэтага часу х 0x123. 1730 01:29:16,130 --> 01:29:18,240 Але што зараз не сапраўдныя памяці. 1731 01:29:18,240 --> 01:29:21,220 1732 01:29:21,220 --> 01:29:23,986 Мы павінны больш разыменовывания х. 1733 01:29:23,986 --> 01:29:24,440 Так? 1734 01:29:24,440 --> 01:29:27,240 >> Залы: вярнуцца 0 залішнім? 1735 01:29:27,240 --> 01:29:28,290 >> ROB: Ці з'яўляецца RETUREN 0 лішнім? 1736 01:29:28,290 --> 01:29:31,110 Так. 1737 01:29:31,110 --> 01:29:33,950 Мы проста пакласці, што там, таму што у нас ёсць вяртанне адзін для паветра. 1738 01:29:33,950 --> 01:29:36,830 Так што гэта, як, так, дазваляе ўключаць вяртанне 0. 1739 01:29:36,830 --> 01:29:37,310 Так? 1740 01:29:37,310 --> 01:29:38,560 >> АЎДЫТОРЫЯ: [неразборліва]? 1741 01:29:38,560 --> 01:29:42,110 1742 01:29:42,110 --> 01:29:45,580 >> ROB: Такім чынам, пасля свабодных х, што адбудзецца, калі мы спробе разнаймення паказальніка? 1743 01:29:45,580 --> 01:29:47,240 Цалкам магчыма, што ўсё ідзе як трэба. 1744 01:29:47,240 --> 01:29:49,330 Цалкам магчыма, што мы ўсё роўна атрымаеце 50. 1745 01:29:49,330 --> 01:29:53,590 >> Магчыма, таксама, што гэтая памяць у цяперашні час выкарыстоўваецца для іншага. 1746 01:29:53,590 --> 01:29:57,140 Так што гэта нявызначаны паводзіны. 1747 01:29:57,140 --> 01:30:00,772 І не вызначана азначае нічога можа здарыцца. 1748 01:30:00,772 --> 01:30:01,250 Так? 1749 01:30:01,250 --> 01:30:02,500 >> АЎДЫТОРЫЯ: [неразборліва]? 1750 01:30:02,500 --> 01:30:07,942 1751 01:30:07,942 --> 01:30:10,830 >> ROB: Не, так што калі вы прызначаеце х на іншае. 1752 01:30:10,830 --> 01:30:15,870 Так што, калі тут мы сказалі х роўная Таноса то else-- 1753 01:30:15,870 --> 01:30:17,100 Таноса памер event-- 1754 01:30:17,100 --> 01:30:20,180 тое, што зыходны блок памяці не вызваляецца. 1755 01:30:20,180 --> 01:30:21,490 І мы афіцыйна страціў яго. 1756 01:30:21,490 --> 01:30:23,150 Гэта значыць ўцечка памяці. 1757 01:30:23,150 --> 01:30:25,090 Мы страцілі ўсе спасылкі ў гэтым блоку памяці. 1758 01:30:25,090 --> 01:30:26,827 Так што няма ніякага спосабу, мы можам альбо вызваліць яго. 1759 01:30:26,827 --> 01:30:32,074 1760 01:30:32,074 --> 01:30:36,630 Такім чынам, затым вярнуцца 0 сродкі зрабілі. 1761 01:30:36,630 --> 01:30:37,900 >> Добра, так перапаўнення стэка. 1762 01:30:37,900 --> 01:30:39,320 У чым ідэя тут? 1763 01:30:39,320 --> 01:30:41,210 Так што памятаеце, куча ідзе ўніз. 1764 01:30:41,210 --> 01:30:43,480 Стэк расце. 1765 01:30:43,480 --> 01:30:48,000 Так што гэта быў прыклад з лекцыі, Я думаю, дзе асноўным толькі збіраецца 1766 01:30:48,000 --> 01:30:51,380 Выклікайце гэтую функцыю Фу, якая збіраецца называць сябе рэкурсіўна над і 1767 01:30:51,380 --> 01:30:52,320 зноў і зноў. 1768 01:30:52,320 --> 01:30:55,370 >> Так стэк кадраў збіраюцца працаваць сапраўды гэтак жа. 1769 01:30:55,370 --> 01:30:58,130 Такім чынам, мы збіраемся пачаць з галоўнай ў якасці ніжняга кадра стэка. 1770 01:30:58,130 --> 01:31:02,000 Тады галоўны збіраецца патэлефанаваць Foo, які збіраецца атрымаць кадр стэка. 1771 01:31:02,000 --> 01:31:04,260 >> Тады Foo збіраецца патэлефанаваць Foo зноў, якая збіраецца атрымаць 1772 01:31:04,260 --> 01:31:05,500 іншы фрэйм ​​стэка. 1773 01:31:05,500 --> 01:31:08,270 І тады зноў, і зноў, і зноў, і зноў, пакуль, у рэшце рэшт, мы не запусціць 1774 01:31:08,270 --> 01:31:09,190 ў кучу. 1775 01:31:09,190 --> 01:31:11,990 Так што гэта, як мы атрымліваем перапаўненне стэка. 1776 01:31:11,990 --> 01:31:14,910 І ў гэты момант, вы SEG няспраўнасць. 1777 01:31:14,910 --> 01:31:17,335 Ці вы сапраўды SEG віны перад гэтая кропка, але так. 1778 01:31:17,335 --> 01:31:19,660 >> АЎДЫТОРЫЯ: дампа памяці Ці жа, як SEG віне? 1779 01:31:19,660 --> 01:31:26,140 >> ROB: Такім чынам, вы ўбачыце сегментацыю Ядро віна скідалі. 1780 01:31:26,140 --> 01:31:28,760 Вы атрымліваеце дамп калі Вы SEG няспраўнасць. 1781 01:31:28,760 --> 01:31:32,580 І гэта як звалку ўсё змесціва вашай бягучай памяці так 1782 01:31:32,580 --> 01:31:36,670 што вы можаце паспрабаваць і вызначыць чаму вы SEG парушанымі. 1783 01:31:36,670 --> 01:31:37,135 Так? 1784 01:31:37,135 --> 01:31:38,385 >> АЎДЫТОРЫЯ: [неразборліва]? 1785 01:31:38,385 --> 01:31:40,855 1786 01:31:40,855 --> 01:31:45,460 >> ROB: Так сродак памылкі сегментацыі ёсць перапаўненне стэка. 1787 01:31:45,460 --> 01:31:47,060 Так што не абавязкова. 1788 01:31:47,060 --> 01:31:49,880 Сегментацыя віна азначае, што вы дотыку памяці такім чынам, 1789 01:31:49,880 --> 01:31:50,880 Вы не павінны быць. 1790 01:31:50,880 --> 01:31:54,750 Так адзін з спосабаў такога выпадку, калі Вы перапаўнення стэка, мы пачынаем кранальна 1791 01:31:54,750 --> 01:31:58,736 памяці такім чынам, што мы не павінны быць. 1792 01:31:58,736 --> 01:31:59,208 Так? 1793 01:31:59,208 --> 01:32:00,458 >> АЎДЫТОРЫЯ: [неразборліва]? 1794 01:32:00,458 --> 01:32:03,456 1795 01:32:03,456 --> 01:32:05,830 >> ROB: Так ўнутры бясконцага цыклу. 1796 01:32:05,830 --> 01:32:08,770 Маўляў, гэта як рэкурсыўнай бясконцага завесы і такім чынам мы атрымліваем яшчэ адзін 1797 01:32:08,770 --> 01:32:09,770 фрэйм ​​стэка кожны раз. 1798 01:32:09,770 --> 01:32:13,540 Але толькі ўнутры рэгулярным бясконцая, а одно-- 1799 01:32:13,540 --> 01:32:16,390 добра, давайце нават не друкаваць F-- 1800 01:32:16,390 --> 01:32:17,040 што-то рабіць. 1801 01:32:17,040 --> 01:32:18,390 Незалежна. 1802 01:32:18,390 --> 01:32:20,610 >> Мы не збіраемся атрымліваць іншы фрэйм ​​стэка. 1803 01:32:20,610 --> 01:32:22,530 Мы проста будзем працягваць зацыклення над гэтай адной інструкцыі. 1804 01:32:22,530 --> 01:32:23,920 Стэк не расце. 1805 01:32:23,920 --> 01:32:27,290 Гэта тое, што кожны рэкурсіўны выклік дае нам фрэйм ​​стэка. 1806 01:32:27,290 --> 01:32:31,231 Вось чаму мы атрымліваем перапаўненне стэка. 1807 01:32:31,231 --> 01:32:31,728 Так? 1808 01:32:31,728 --> 01:32:38,189 >> АЎДЫТОРЫЯ: Так што, калі вы сказалі, каб атрымаць у той час як цыкл, а затым [неразборліва]? 1809 01:32:38,189 --> 01:32:42,000 >> ROB: Так што калі ўнутры той час цыклу быў Е, вы ўсё яшчэ будзе 1810 01:32:42,000 --> 01:32:42,790 ня SEG віна. 1811 01:32:42,790 --> 01:32:46,090 Я проста не хачу, каб заблытаць рэчы. 1812 01:32:46,090 --> 01:32:46,610 Было б цыкл. 1813 01:32:46,610 --> 01:32:48,225 Вы б атрымаць адзіную стос кадр для Printf. 1814 01:32:48,225 --> 01:32:49,580 >> Тады Е вернецца. 1815 01:32:49,580 --> 01:32:50,280 Тады вы зноў б пятлю. 1816 01:32:50,280 --> 01:32:51,460 Вы б атрымаць адзіную стос кадр для Printf. 1817 01:32:51,460 --> 01:32:52,850 Гэта вернецца. 1818 01:32:52,850 --> 01:32:54,060 Аднамесны кадр стэка. 1819 01:32:54,060 --> 01:33:00,215 Дык вы не атрымліваеце гэта бясконцая нагрувашчванне кадры стэка. 1820 01:33:00,215 --> 01:33:03,185 >> АЎДЫТОРЫЯ: [неразборліва]? 1821 01:33:03,185 --> 01:33:04,040 >> ROB: Так. 1822 01:33:04,040 --> 01:33:09,360 Так што гэта перапаўненне стэка адбываецца таму ні адзін з іх 1823 01:33:09,360 --> 01:33:11,600 званкі на Foo вяртаюцца. 1824 01:33:11,600 --> 01:33:15,250 Так што, калі мы вернемся, то мы б пачынаюць губляць кадры стэка. 1825 01:33:15,250 --> 01:33:17,870 І тады мы б не перапаўнення стэка. 1826 01:33:17,870 --> 01:33:20,070 І вось чаму вам патрэбен базавы варыянт для вашых асабістых функцый. 1827 01:33:20,070 --> 01:33:22,992 1828 01:33:22,992 --> 01:33:23,479 Так? 1829 01:33:23,479 --> 01:33:27,375 >> АЎДЫТОРЫЯ: Ці з'яўляецца дадзены патэнцыйны памер і стэк для кучы ж для 1830 01:33:27,375 --> 01:33:29,880 усе праграмы? 1831 01:33:29,880 --> 01:33:31,910 >> ROB: Груба. 1832 01:33:31,910 --> 01:33:35,090 Ці з'яўляецца дадзены патэнцыйны памер стэка і куча аднолькавыя для ўсіх праграм? 1833 01:33:35,090 --> 01:33:37,180 Груба. 1834 01:33:37,180 --> 01:33:40,080 Існуе некаторая рандомизации да дзе пачынаецца стэка і 1835 01:33:40,080 --> 01:33:42,400 дзе куча пачынаецца. 1836 01:33:42,400 --> 01:33:45,870 Калі вам пашчасціла мець кучу глабальныя зменныя і рэчы, вы маглі б 1837 01:33:45,870 --> 01:33:49,520 забраць з некаторага прасторы для кучы. 1838 01:33:49,520 --> 01:33:54,060 >> На 64-бітнай сістэме, вы практычна маюць бясконцую памяць. 1839 01:33:54,060 --> 01:33:55,820 Там проста так шмат. 1840 01:33:55,820 --> 01:33:59,250 Паміж 32 біт і 64 біт, што значная розніца. 1841 01:33:59,250 --> 01:34:02,350 >> Вы збіраецеся атрымаць нашмат больш стэк і куча месца на 64-бітнай 1842 01:34:02,350 --> 01:34:05,810 Сістэма таму што проста больш адрасоў, якія яны могуць выкарыстоўваць. 1843 01:34:05,810 --> 01:34:09,360 Але на індывідуальнай сістэмы, яна будзе быць прыкладна такое ж колькасць стэка 1844 01:34:09,360 --> 01:34:10,785 і куча прастору. 1845 01:34:10,785 --> 01:34:13,635 1846 01:34:13,635 --> 01:34:15,530 Добра. 1847 01:34:15,530 --> 01:34:18,220 >> Так апошняе, што з'яўляецца кампіляцыя. 1848 01:34:18,220 --> 01:34:19,810 Такім чынам, вы павінны ведаць гэты працэс. 1849 01:34:19,810 --> 01:34:22,240 Ёсць чатыры вялікія крокі. 1850 01:34:22,240 --> 01:34:24,400 Такім чынам, першы варта лёгка запомніць. 1851 01:34:24,400 --> 01:34:25,085 Папярэдняя апрацоўка. 1852 01:34:25,085 --> 01:34:28,390 Ён мае прэфікс папярэдне ў ім. 1853 01:34:28,390 --> 01:34:32,080 Так справа даходзіць да ўсяго астатняга. 1854 01:34:32,080 --> 01:34:34,000 >> Важна памятаць, хэш. 1855 01:34:34,000 --> 01:34:37,250 Так хэш вызначае і хэш ўключае ва ўсіх тых. 1856 01:34:37,250 --> 01:34:39,560 Гэта ўсё папярэдне працэсар дырэктывы. 1857 01:34:39,560 --> 01:34:42,030 Гэта тыя рэчы, што папярэдняй апрацоўкі клапоціцца аб. 1858 01:34:42,030 --> 01:34:43,680 >> Такім чынам, што ж папярэдне працэсар рабіць? 1859 01:34:43,680 --> 01:34:44,850 Гэта сапраўды тупы рэч. 1860 01:34:44,850 --> 01:34:49,380 Усё гэта здольна ўсе з іх капіявання, і выразаць і ўстаўляць аперацыі. 1861 01:34:49,380 --> 01:34:51,790 >> Так хэш ўключае стандартны i0 кропка гадзіну. 1862 01:34:51,790 --> 01:34:52,990 Што гэта робіць? 1863 01:34:52,990 --> 01:34:56,610 Гэта захоп стандартны i0 кропка гадзіну падаць і ўставіць яго ў верхняй 1864 01:34:56,610 --> 01:34:58,960 там, дзе яна кажа хэш ўключае Стандарт i0 кропка ч. 1865 01:34:58,960 --> 01:35:02,480 >> І любы хэш вызначыць, што мы бачыў, што тое, што робіш? 1866 01:35:02,480 --> 01:35:06,730 Яго капіяванне значэння, што хэш- вызначана вызначаецца як і ўстаўка, што 1867 01:35:06,730 --> 01:35:08,500 ўсюды, дзе вы выкарыстоўваеце значэнне. 1868 01:35:08,500 --> 01:35:13,400 Так препроцессор проста робіць сапраўды Аперацыі, заснаваныя просты тэкст. 1869 01:35:13,400 --> 01:35:15,870 Ён нічога не робіць смарт. 1870 01:35:15,870 --> 01:35:18,920 Так усё астатняе больш складаным. 1871 01:35:18,920 --> 01:35:22,970 >> Так што цяпер препроцессор зрабіць, мы на самай справе кампіляцыі. 1872 01:35:22,970 --> 01:35:24,320 Такім чынам, што ж кампіляцыі на ўвазе? 1873 01:35:24,320 --> 01:35:27,310 Цяпер мы збіраемся з С-код у кодзе зборкі. 1874 01:35:27,310 --> 01:35:27,570 Так? 1875 01:35:27,570 --> 01:35:28,820 >> АЎДЫТОРЫЯ: [неразборліва]? 1876 01:35:28,820 --> 01:35:32,390 1877 01:35:32,390 --> 01:35:34,220 >> ROB: Так, мы злавілі, што. 1878 01:35:34,220 --> 01:35:36,880 1879 01:35:36,880 --> 01:35:38,660 Так кампіляцыі. 1880 01:35:38,660 --> 01:35:40,310 Мы збіраемся ад з да зборкі. 1881 01:35:40,310 --> 01:35:42,470 Так што гэта фактычнае змена мовы. 1882 01:35:42,470 --> 01:35:45,240 Кампіляцыя сябе азначае пераход ад на мове высокага ўзроўню ў 1883 01:35:45,240 --> 01:35:47,340 ніжэй узровень мовы. 1884 01:35:47,340 --> 01:35:50,720 >> І з з'яўляецца мове высокага ўзроўню у параўнанні са сходу. 1885 01:35:50,720 --> 01:35:52,320 Што такое зборка? 1886 01:35:52,320 --> 01:35:56,440 Яго інструкцыі, якія, у значнай шмат, зрабіў для вашага працэсара. 1887 01:35:56,440 --> 01:35:59,130 Але кампутар ўсё яшчэ робіць не разумею зборку. 1888 01:35:59,130 --> 01:36:01,570 Гэта разумее толькі нулі і адзінкі. 1889 01:36:01,570 --> 01:36:06,160 Так што наступны крок гэта зборка, якая прыводзіць нас ад гэтых інструкцый, 1890 01:36:06,160 --> 01:36:08,760 ваш працэсар разумее і фактычна перакладае іх, каб 1891 01:36:08,760 --> 01:36:10,820 адзінкі і нулі. 1892 01:36:10,820 --> 01:36:13,570 >> Так C да зборкі ў двайковы. 1893 01:36:13,570 --> 01:36:15,870 Але ў мяне няма выкананы яшчэ. 1894 01:36:15,870 --> 01:36:19,550 Так што думайце бібліятэкі CS50. 1895 01:36:19,550 --> 01:36:23,070 Мы падалі вам двайковага для гэта CS50 бібліятэка, якая мае GetString 1896 01:36:23,070 --> 01:36:24,400 і GetInt і ўсё такое. 1897 01:36:24,400 --> 01:36:25,700 >> Але CS50 library-- 1898 01:36:25,700 --> 01:36:27,650 ў і з у тым: ці не з'яўляецца выкананым. 1899 01:36:27,650 --> 01:36:29,570 Гэта не мае галоўную функцыю. 1900 01:36:29,570 --> 01:36:32,230 Гэта проста куча двайковы што вы можаце выкарыстоўваць. 1901 01:36:32,230 --> 01:36:41,730 Так звязванне як мы збіраем усё з гэтых розных бінарных файлаў 1902 01:36:41,730 --> 01:36:43,110 ў фактычны выкананы файл. 1903 01:36:43,110 --> 01:36:45,900 Той, які вы можаце ўвесці кропка слэш кропку з. 1904 01:36:45,900 --> 01:36:51,660 >> Так што гэта, як файл, які напісаў, - усё, што ваша праграма is-- 1905 01:36:51,660 --> 01:36:53,620 Цэзар кропка з. 1906 01:36:53,620 --> 01:36:55,100 Але цяпер ён быў складзены ўніз ў двайковы. 1907 01:36:55,100 --> 01:36:56,480 Так Цэзар кропка а. 1908 01:36:56,480 --> 01:36:59,620 І гэта наша CS50 бібліятэкі бінарны. 1909 01:36:59,620 --> 01:37:02,284 І яны спалучаючыся ў адзіны выкананы файл. 1910 01:37:02,284 --> 01:37:02,758 Так? 1911 01:37:02,758 --> 01:37:04,008 >> АЎДЫТОРЫЯ: [неразборліва]? 1912 01:37:04,008 --> 01:37:08,800 1913 01:37:08,800 --> 01:37:12,710 >> ROB: Такім чынам, спачатку ўключаюць, памятаеце, хэш ўключаюць фактычна 1914 01:37:12,710 --> 01:37:13,810 папярэдняй апрацоўкі крок. 1915 01:37:13,810 --> 01:37:14,750 Але гэта асобная. 1916 01:37:14,750 --> 01:37:20,730 Калі вы не выкарыстоўваеце любыя функцыі, якія знаходзяцца за межамі вашага адным файле, то, 1917 01:37:20,730 --> 01:37:26,100 не, вы не павінны звязаць нічога так у вас ёсць усё. 1918 01:37:26,100 --> 01:37:30,310 >> Тым не менш, Е ўвязваецца ст. 1919 01:37:30,310 --> 01:37:32,820 Калі Вы ніколі не выкарыстоўваць Printf, гэта тое, што , Які павінен быць звязаны ў 1920 01:37:32,820 --> 01:37:35,740 таму што вы не пішаце, што. 1921 01:37:35,740 --> 01:37:39,530 І на самай справе, Е аўтаматычна звязаны ў. 1922 01:37:39,530 --> 01:37:42,760 Вы ведаеце, як у камандным радку ці калі вы ўводзіце зрабіць, вы бачыце, што ёсць 1923 01:37:42,760 --> 01:37:46,690 працяжнік л CS50, які мае спасылку ў бібліятэцы CS50? 1924 01:37:46,690 --> 01:37:49,070 Printf, і ўсё ў такім духу, што адбываецца , Звязаны аўтаматычна. 1925 01:37:49,070 --> 01:37:51,730 1926 01:37:51,730 --> 01:37:53,930 Любыя іншыя пытанні па тэме? 1927 01:37:53,930 --> 01:37:56,280 >> АЎДЫТОРЫЯ: [неразборліва]? 1928 01:37:56,280 --> 01:37:58,300 >> ROB: Звязванне? 1929 01:37:58,300 --> 01:38:03,450 У нас ёсць цэлы букет розныя бінарныя файлы. 1930 01:38:03,450 --> 01:38:06,410 Гэта кананічны прыклад што мы выкарыстоўваем гэта бібліятэка CS50. 1931 01:38:06,410 --> 01:38:09,960 Мы сабралі і дадзена вам у двайковы для гэтага CS50 бібліятэкі. 1932 01:38:09,960 --> 01:38:12,410 >> Вы хочаце выкарыстоўваць GetString у вашай праграме. 1933 01:38:12,410 --> 01:38:14,750 Так вы ідзяце і выкарыстоўваць GetString. 1934 01:38:14,750 --> 01:38:19,700 Але без майго двайковым кодзе для GetString, пры кампіляцыі кода 1935 01:38:19,700 --> 01:38:23,140 ўніз, вы не змаглі запусціць свой Праграма таму GetString Радок 1936 01:38:23,140 --> 01:38:25,080 яшчэ не цалкам вызначаны. 1937 01:38:25,080 --> 01:38:29,220 >> Гэта толькі пры спасылцы на мой двайковы што ўтрымлівае GetString што зараз, усе 1938 01:38:29,220 --> 01:38:31,130 Добра, я магу на самой справе выканаць GetString. 1939 01:38:31,130 --> 01:38:32,330 Мой файл завершана. 1940 01:38:32,330 --> 01:38:34,208 І я магу запусціць гэты. 1941 01:38:34,208 --> 01:38:34,697 Так? 1942 01:38:34,697 --> 01:38:37,631 >> АЎДЫТОРЫЯ: Ці канвертаваць лінковка бінарны да выкананых? 1943 01:38:37,631 --> 01:38:42,032 Так што нават калі ў вас няма сябра бібліятэкі, ці не будзе яшчэ будзе 1944 01:38:42,032 --> 01:38:44,477 неабходна перавесці [Неразборліва]? 1945 01:38:44,477 --> 01:38:48,640 >> ROB: Так выкананы па-ранейшаму ў двайковай сістэме. 1946 01:38:48,640 --> 01:38:51,750 Гэта проста аб'яднанне цэлае куча выкананых файлаў. 1947 01:38:51,750 --> 01:38:55,124 1948 01:38:55,124 --> 01:38:56,591 >> АЎДЫТОРЫЯ: Вялікі дзякуй. 1949 01:38:56,591 --> 01:38:58,560 >> ROB: Няма праблем. 1950 01:38:58,560 --> 01:38:59,540 Яшчэ пытанні? 1951 01:38:59,540 --> 01:39:02,001 У адваротным выпадку, мы ўсё гатова. 1952 01:39:02,001 --> 01:39:02,690 Добра. 1953 01:39:02,690 --> 01:39:02,990 Дзякуючы. 1954 01:39:02,990 --> 01:39:03,590 >> [Апладысменты] 1955 01:39:03,590 --> 01:39:04,490 >> Залы: Дзякуй. 1956 01:39:04,490 --> 01:39:05,740 >> ROB: Так. 1957 01:39:05,740 --> 01:39:06,582