1 00:00:00,000 --> 00:00:02,000 [Powered by Google Translate] [Частка 4] [менш камфортна] 2 00:00:02,000 --> 00:00:04,000 [Nate Хардисон] [Harvard University] 3 00:00:04,000 --> 00:00:07,000 [Гэта CS50.] [CS50.TV] 4 00:00:07,000 --> 00:00:10,000 >> Добра, дабро запрашаем у падзел. 5 00:00:10,000 --> 00:00:13,000 У раздзеле гэтага тыдня мы збіраемся зрабіць некалькі рэчаў. 6 00:00:13,000 --> 00:00:17,000 Мы ідзем да першага пастаўленай задачы рэзюмэ 2, 7 00:00:17,000 --> 00:00:20,000 якая з'яўляецца наборам Цэзара і Виженера праблемы. 8 00:00:20,000 --> 00:00:23,000 І тады мы будзем апускацца ў агляд Віктарына 0 9 00:00:23,000 --> 00:00:26,000 і выдаткаваць трохі часу, рэзюмуючы, што мы казалі пра 10 00:00:26,000 --> 00:00:30,000 У кожным з лекцый да гэтага часу, і мы таксама робім некалькі праблем 11 00:00:30,000 --> 00:00:32,000 ад віктарынах папярэдняга года. 12 00:00:32,000 --> 00:00:36,000 Такім чынам, вы, хлопцы, ёсць добры спосаб падрыхтавацца да гэтага. 13 00:00:36,000 --> 00:00:40,000 >> Для пачатку, я загрузіў некалькі добрых рашэнняў 14 00:00:40,000 --> 00:00:45,000 за папярэдні набор праблем, задач 2, у гэтай прасторы. 15 00:00:45,000 --> 00:00:48,000 Калі вы, хлопцы, усе трапілі на гэтую спасылку, 16 00:00:48,000 --> 00:00:53,000 і калі вы пстрыкніце сваё імя і націсніце на маім першым пераглядзе 17 00:00:53,000 --> 00:00:56,000 Вы ўбачыце caesar.c, а гэта менавіта тое, што я гляджу. 18 00:00:56,000 --> 00:01:00,000 Давайце пагаворым пра гэта вельмі хутка. 19 00:01:00,000 --> 00:01:02,000 Гэта ўсяго толькі прыклад рашэння. 20 00:01:02,000 --> 00:01:05,000 Гэта не абавязкова ідэальнае рашэнне. 21 00:01:05,000 --> 00:01:08,000 Ёсць шмат розных спосабаў, каб напісаць гэта, 22 00:01:08,000 --> 00:01:10,000 але ёсць некалькі рэчаў, якія я хацеў бы падкрэсліць 23 00:01:10,000 --> 00:01:13,000 што я бачыў, як я сартаванні, распаўсюджаныя памылкі, якія я думаю, 24 00:01:13,000 --> 00:01:18,000 гэтае рашэнне робіць вельмі добрую працу ў звароце. 25 00:01:18,000 --> 00:01:22,000 >> Першы па нейкай загаловак каментара ў верхняй частцы. 26 00:01:22,000 --> 00:01:25,000 У радках з 1 па 7 вы бачыце дэталі, 27 00:01:25,000 --> 00:01:28,000 што менавіта гэтая праграма робіць. 28 00:01:28,000 --> 00:01:32,000 Добрая стандартная практыка, калі вы пішаце код C 29 00:01:32,000 --> 00:01:35,000 незалежна ад таго, ваша праграма змяшчаецца ў адным файле або 30 00:01:35,000 --> 00:01:38,000 Ці ён пабіты на некалькі файлаў, каб мець нейкі 31 00:01:38,000 --> 00:01:40,000 арыенціровачны каментар на самым версе. 32 00:01:40,000 --> 00:01:43,000 Гэта таксама для людзей, якія выходзяць і напісаць код у рэальным свеце. 33 00:01:43,000 --> 00:01:47,000 Гэта дзе пакладуць інфармацыю аб аўтарскім праве. 34 00:01:47,000 --> 00:01:50,000 Ніжэй прыведзены # ўключае ў сябе. 35 00:01:50,000 --> 00:01:55,000 Па радку 16 ёсць гэтая # вызначыць, што мы вернемся ў толькі трохі. 36 00:01:55,000 --> 00:01:59,000 І вось аднойчы функцыя пачынаецца, як толькі асноўныя старты, 37 00:01:59,000 --> 00:02:03,000 таму што гэтая праграма была ўсё змяшчаюцца ў адной функцыяй 38 00:02:03,000 --> 00:02:09,000 Самае першае, што адбываецца, і гэта вельмі ідыёматычны і тыповыя праграмы C 39 00:02:09,000 --> 00:02:14,000 , Якая прымае ў аргументы каманднага радка-гэта тое, што ён адразу правярае 40 00:02:14,000 --> 00:02:18,000 >> па колькасці аргументаў, агдс. 41 00:02:18,000 --> 00:02:24,000 Вось тут мы бачым, што гэтая праграма чакае 2 аргументы дакладна. 42 00:02:24,000 --> 00:02:27,000 Памятаеце ёсць тое, што першы аргумент, што гэта асаблівы 43 00:02:27,000 --> 00:02:29,000 гэта заўсёды імя праграмы, якая запускаюцца, 44 00:02:29,000 --> 00:02:31,000 імя выкананага файла. 45 00:02:31,000 --> 00:02:36,000 І так, што яна робіць гэта не дазваляе карыстачу запусціць праграму 46 00:02:36,000 --> 00:02:42,000 з вялікім ці меншай колькасцю аргументаў. 47 00:02:42,000 --> 00:02:44,000 Таму мы хочам, каб праверыць гэта адразу таму, што 48 00:02:44,000 --> 00:02:52,000 мы не можам фактычна атрымаць доступ да гэтай ARGV масіва прама тут надзейна 49 00:02:52,000 --> 00:02:55,000 пакуль мы не правяралі, наколькі яна вялікая. 50 00:02:55,000 --> 00:02:58,000 >> Адна з найбольш распаўсюджаных памылак я бачыў, быў бы людзі адразу ідуць у 51 00:02:58,000 --> 00:03:01,000 і захоп ARGV [1]. 52 00:03:01,000 --> 00:03:06,000 Яны захапіць ключавыя аргументы з масіва і не да я праверыць на ім, 53 00:03:06,000 --> 00:03:11,000 а затым яны зробяць тэст на агдс, а таксама наступны тэст, 54 00:03:11,000 --> 00:03:16,000 Ці не першым аргументам было сапраўды цэлае, у той жа час, 55 00:03:16,000 --> 00:03:20,000 і гэта не працуе, таму што ў выпадку, калі няма аргументаў, 56 00:03:20,000 --> 00:03:26,000 Вы будзеце захапіць аргумент, што там няма або спробу захапіць адзін, што не. 57 00:03:26,000 --> 00:03:29,000 >> Іншая вялікая рэч, якую вы павінны былі заўважыць, што 58 00:03:29,000 --> 00:03:32,000 Вы заўсёды хочаце, каб раздрукаваць нейкі карысны паведамленне пра памылку 59 00:03:32,000 --> 00:03:34,000 карыстачу арыентавацца іх. 60 00:03:34,000 --> 00:03:37,000 Я ўпэўнены, што вы ўсё запуску праграм, дзе раптам ён выходзіць з ладу, 61 00:03:37,000 --> 00:03:41,000 і вы атрымаеце гэты смешны маленькі дыялог, які ўсплывае і кажа: 62 00:03:41,000 --> 00:03:44,000 нешта жудасна загадкавым і, магчыма, дае вам код памылкі ці нешта ў гэтым родзе 63 00:03:44,000 --> 00:03:47,000 што не мае сэнсу. 64 00:03:47,000 --> 00:03:50,000 Гэта дзе вы сапраўды хочаце, каб забяспечыць нешта карыснае 65 00:03:50,000 --> 00:03:54,000 і арыентаваныя на карыстача, так што, калі яны запусціць яго яны ідуць "О," асоба далонню. 66 00:03:54,000 --> 00:03:58,000 "Я дакладна ведаю, што рабіць. Я ведаю, як гэта выправіць". 67 00:03:58,000 --> 00:04:01,000 >> Калі вы не друкаваць паведамленне, то ў выніку вы на самой справе 68 00:04:01,000 --> 00:04:04,000 пакідаючы карыстачу пайсці вывучаць зыходны код 69 00:04:04,000 --> 00:04:07,000 каб высветліць, што пайшло не так. 70 00:04:07,000 --> 00:04:11,000 Ёсць таксама некалькі разоў, што вы будзеце выкарыстоўваць розныя коды памылак. 71 00:04:11,000 --> 00:04:14,000 Тут мы проста выкарысталі адзін кажуць, што адбылася памылка, 72 00:04:14,000 --> 00:04:16,000 адбылася памылка, адбылася памылка. 73 00:04:16,000 --> 00:04:20,000 Больш праграм, часта праграм, якія выклікаюцца іншымі праграмамі, 74 00:04:20,000 --> 00:04:25,000 вернецца нейкі адмысловы код памылкі ў розных сцэнарах 75 00:04:25,000 --> 00:04:28,000 праграмна паведаміць, што вы б інакш 76 00:04:28,000 --> 00:04:32,000 проста выкарыстоўваць добры англійская паведамленне для. 77 00:04:32,000 --> 00:04:35,000 Cool. 78 00:04:35,000 --> 00:04:37,000 Як мы працуем ўніз, вы бачыце, мы выцягнуць ключ з. 79 00:04:37,000 --> 00:04:40,000 Мы правяраем, каб убачыць, калі ключ падыходзіць. 80 00:04:40,000 --> 00:04:42,000 Мы атрымалі паведамленне ад карыстальніка. 81 00:04:42,000 --> 00:04:46,000 Таму мы робім гэта ў гэтым цыкле зрабіць у той час і гэта тое, што мы кроем 82 00:04:46,000 --> 00:04:50,000 У няшмат, але аказваецца, што калі ўвесці кантроль D 83 00:04:50,000 --> 00:04:54,000 калі вы атрымліваеце GetString радкі на тэрмінал 84 00:04:54,000 --> 00:04:59,000 што гэта на самай справе робіць гэта ён пасылае спецыяльны сімвал 85 00:04:59,000 --> 00:05:01,000 ў праграме. 86 00:05:01,000 --> 00:05:05,000 Гэта называецца ELF або сімвал канца файла. 87 00:05:05,000 --> 00:05:08,000 І ў гэтым выпадку, наша радок паведамлення будзе нулявым, 88 00:05:08,000 --> 00:05:14,000 так што гэта было не тое, што мы правяралі ў задачу паставіў перад сабой. 89 00:05:14,000 --> 00:05:17,000 >> Але, як мы будзем працягваць, цяпер, калі мы пачалі казаць пра паказальніках 90 00:05:17,000 --> 00:05:21,000 і дынамічнае выдзяленне памяці ў кучы, 91 00:05:21,000 --> 00:05:25,000 праверка на нуль кожны раз, калі ў вас ёсць функцыя, якая можа 92 00:05:25,000 --> 00:05:30,000 вярнуць нулявое значэнне, як тое, што вы хочаце атрымаць у звычку рабіць. 93 00:05:30,000 --> 00:05:33,000 Гэта тут, перш за ўсё для ілюстрацыі. 94 00:05:33,000 --> 00:05:36,000 Але калі вы бачыце GetString ў будучыні, 95 00:05:36,000 --> 00:05:41,000 так ад праблемы Set 4, Вы будзеце хацець мець гэта на ўвазе. 96 00:05:41,000 --> 00:05:44,000 Зноў жа, гэта не з'яўляецца праблемай для задач 3 альбо, так як мы не пакрываецца яшчэ. 97 00:05:44,000 --> 00:05:53,000 І, нарэшце, мы дабіраемся да гэтай частцы, дзе мы пяройдзем да асноўнай цыкл шыфравання, 98 00:05:53,000 --> 00:05:57,000 і ёсць некалькі рэчаў, што тут адбываецца. 99 00:05:57,000 --> 00:06:02,000 Па-першае, мы перабору ўсёй радкі паведамленні. 100 00:06:02,000 --> 00:06:07,000 Тут мы захавалі StrLen выклік у стан, 101 00:06:07,000 --> 00:06:12,000 якія многія з вас паказалі не вялікі шлях. 102 00:06:12,000 --> 00:06:15,000 Аказваецца, у гэтым выпадку ён таксама не вялікая, 103 00:06:15,000 --> 00:06:20,000 Збольшага таму, што мы, змяніўшы змесціва самога паведамленні 104 00:06:20,000 --> 00:06:27,000 ўнутры цыклу, так што калі ў нас ёсць паведамленне, што гэта 10 сімвалаў, 105 00:06:27,000 --> 00:06:32,000 Упершыню мы пачынаем цыкл, што для StrLen вернецца і што? 106 00:06:32,000 --> 00:06:35,000 10. 107 00:06:35,000 --> 00:06:40,000 >> Але калі мы затым змяніць паведамленне, сказаць, што мы змяніць сваё 5-й знак, 108 00:06:40,000 --> 00:06:46,000 і кідаецца ў \ 0 знак у 5-й пазіцыі, 109 00:06:46,000 --> 00:06:49,000 на наступнай ітэрацыі StrLen (паведамленне) не вернецца, што ён зрабіў 110 00:06:49,000 --> 00:06:52,000 самы першы раз, калі мы паўторны, 111 00:06:52,000 --> 00:06:56,000 але замест гэтага вярнуць 5, таму што мы кінулі ў тым, што нулявы тэрмінатар, 112 00:06:56,000 --> 00:06:59,000 і даўжынёй струны вызначаецца 113 00:06:59,000 --> 00:07:03,000 становішчам, што \ 0. 114 00:07:03,000 --> 00:07:09,000 У гэтым выпадку, гэта выдатны спосаб пайсці, таму што мы змяніўшы яе на месца. 115 00:07:09,000 --> 00:07:13,000 Але вы заўважылі, што гэта на самай справе дзіўна простая для шыфравання 116 00:07:13,000 --> 00:07:16,000 калі вы можаце атрымаць матэматыку правільна. 117 00:07:16,000 --> 00:07:19,000 Усё, што патрабуецца, каб праверыць, ці сапраўды ліст, што вы глядзіце на 118 00:07:19,000 --> 00:07:21,000 гэта верхні або ніжні рэгістр. 119 00:07:21,000 --> 00:07:24,000 >> Таму мы толькі павінны праверыць, што і ў нас няма для праверкі 120 00:07:24,000 --> 00:07:27,000 гэта альфа справа ў тым, што 121 00:07:27,000 --> 00:07:30,000 Калі знак у верхнім рэгістры або, калі гэта маленькая 122 00:07:30,000 --> 00:07:33,000 то гэта вызначана літары, 123 00:07:33,000 --> 00:07:38,000 таму што ў нас няма вялікіх і малых знакаў. 124 00:07:38,000 --> 00:07:41,000 Іншая рэч, якую мы робім, і гэта крыху складана- 125 00:07:41,000 --> 00:07:45,000 гэта мы змянілі стандартны шыфр Цэзара формуле 126 00:07:45,000 --> 00:07:49,000 , Якія мы далі ў спецыфікацыі пастаўленай задачы. 127 00:07:49,000 --> 00:07:52,000 У чым розніца тут у тым, што мы вычыталі 128 00:07:52,000 --> 00:07:58,000 У верхнім рэгістры капіталу выпадак, і тады мы дадатковага капіталу 129 00:07:58,000 --> 00:08:02,000 Рэзервовае у канцы. 130 00:08:02,000 --> 00:08:05,000 >> Я ведаю, некаторыя з вас зрабілі гэта ў кодзе. 131 00:08:05,000 --> 00:08:09,000 Хто-небудзь з вас зрабіць гэта ў вашых паданнях? 132 00:08:09,000 --> 00:08:13,000 Вы зрабілі гэта. Ці можаце вы растлумачыць, што гэта робіць, Sahb? 133 00:08:13,000 --> 00:08:18,000 Шляхам адымання яго, таму што вы зрабілі мод адразу пасля яго, 134 00:08:18,000 --> 00:08:21,000 вы павінны прыняць яго, так што такім чынам вы атрымаеце [кашаль] пазіцыя. 135 00:08:21,000 --> 00:08:25,000 А потым, дадаўшы яго пазней вы перайшла той, які вы хацелі. 136 00:08:25,000 --> 00:08:27,000 Так, менавіта так. 137 00:08:27,000 --> 00:08:32,000 Што Sahb сказаў, што калі мы хочам дадаць 138 00:08:32,000 --> 00:08:36,000 наша паведамленне, і нашы ключавыя разам 139 00:08:36,000 --> 00:08:42,000 , А затым мод, які, мод, які па NUM_LETTERS, 140 00:08:42,000 --> 00:08:50,000 калі мы не будзем маштабаваць нашы паведамленні ў адпаведныя 0 да 25 Дыяпазон па-першае, 141 00:08:50,000 --> 00:08:54,000 Затым мы маглі б у канчатковым выніку атрымаць сапраўды дзіўны нумар 142 00:08:54,000 --> 00:08:59,000 таму, што каштоўнасці, якія мы глядзім на тое, калі мы глядзім на паведамленне [я], 143 00:08:59,000 --> 00:09:03,000 Калі мы глядзім на га характару нашых тэкставых паведамленняў, 144 00:09:03,000 --> 00:09:08,000 гэта значэнне дзесьці ў гэтым ад 65 да 122 Дыяпазон 145 00:09:08,000 --> 00:09:13,000 на аснове ASCII значэння для верхняга рэгістра ад А да Z малыя. 146 00:09:13,000 --> 00:09:18,000 І таму, калі мы мода гэта на 26 ці NUM_LETTERS, 147 00:09:18,000 --> 00:09:23,000 так як гэта быў наш # вызначыць у правым верхнім тут, 148 00:09:23,000 --> 00:09:28,000 што збіраецца даць нам значэнне, якое ў 0 да 25 дыяпазон, 149 00:09:28,000 --> 00:09:30,000 і нам патрэбен спосаб, каб затым маштабаваць, якія падтрымліваюць 150 00:09:30,000 --> 00:09:32,000 і атрымаць яго ў адпаведныя ASCII дыяпазону. 151 00:09:32,000 --> 00:09:36,000 Самы просты спосаб зрабіць гэта, каб проста маштабаваць ўсё ўніз 152 00:09:36,000 --> 00:09:39,000 у 0 да 25 Дыяпазон Пачнем з таго, 153 00:09:39,000 --> 00:09:43,000 , А затым перакласці ўсе назад у канцы. 154 00:09:43,000 --> 00:09:46,000 >> Яшчэ адна распаўсюджаная памылка, што я бачыў, людзі бягуць у тым, што 155 00:09:46,000 --> 00:09:50,000 калі вы на самой справе не зрабіць гэта прама зараз маштабавання 156 00:09:50,000 --> 00:09:53,000 і вы дадаеце паведамленне і ключавыя разам і дадаць іх, скажам, 157 00:09:53,000 --> 00:09:58,000 ў сімвал зменнай, праблема з гэтым 158 00:09:58,000 --> 00:10:01,000 гэта паведамленне, так як [я] з'яўляецца адносна вялікая колькасць, каб пачаць з- 159 00:10:01,000 --> 00:10:05,000 памятаеце, што гэта па меншай меры 65, калі гэта сімвал верхняга рэгістра- 160 00:10:05,000 --> 00:10:09,000 калі ў вас ёсць вялікі ключ, скажам, нешта накшталт 100, 161 00:10:09,000 --> 00:10:13,000 і вы дадаеце гэтыя 2 разам у падпісаных сімвал вы збіраецеся атрымаць перапаўненне. 162 00:10:13,000 --> 00:10:17,000 Вы збіраецеся атрымаць значэнне, якое перавышае 127, 163 00:10:17,000 --> 00:10:22,000 , Якая з'яўляецца найбуйнейшым значэнне, сімвал можа захоўваць зменная. 164 00:10:22,000 --> 00:10:26,000 Зноў жа, чаму вы хочаце зрабіць такую ​​рэч з самага пачатку. 165 00:10:26,000 --> 00:10:29,000 Некаторыя людзі атрымалі вакол гэтай справы рабіць, калі яшчэ і тэставання 166 00:10:29,000 --> 00:10:33,000 каб убачыць, калі яна будзе перапаўненне перш чым зрабіць гэта, 167 00:10:33,000 --> 00:10:36,000 але такім чынам атрымлівае ад усяго гэтага. 168 00:10:36,000 --> 00:10:40,000 І тады ў гэтым рашэнні мы выводзім ўсю радок у самым канцы. 169 00:10:40,000 --> 00:10:45,000 Іншыя людзі раздрукаваць сімвал за адзін раз. Абодва з'яўляюцца дзіўнымі. 170 00:10:45,000 --> 00:10:51,000 На дадзены момант, вы, хлопцы, ёсць якія-небудзь пытанні, ніякіх каментароў з гэтай нагоды? 171 00:10:51,000 --> 00:10:56,000 Што вам падабаецца, што вам не падабаецца? 172 00:10:56,000 --> 00:10:58,000 >> У мяне было пытанне. 173 00:10:58,000 --> 00:11:01,000 Можа быць, я прапусціў яго падчас вашага тлумачэнні, але як гэтая праграма 174 00:11:01,000 --> 00:11:07,000 прапусціць прасторы для падлучэння ключа да даўжыні тэксту? 175 00:11:07,000 --> 00:11:10,000 Гэта ўсяго толькі шыфр Цэзара. >> Эх, шкада, так. 176 00:11:10,000 --> 00:11:13,000 Так, мы бачым, што. 177 00:11:13,000 --> 00:11:16,000 У шыфр Цэзара мы абышлі, таму што 178 00:11:16,000 --> 00:11:18,000 Мы толькі перавярнуў знакаў. 179 00:11:18,000 --> 00:11:27,000 Мы толькі павярнуць іх, калі яны былі верхнім ці ніжнім рэгістры. 180 00:11:27,000 --> 00:11:32,000 Вы, хлопцы, адчуваў сябе даволі добра з гэтай нагоды? 181 00:11:32,000 --> 00:11:34,000 Вы можаце скапіяваць гэты дом, бяры, 182 00:11:34,000 --> 00:11:37,000 параўнаць яго з тым, што вы, хлопцы напісалі. 183 00:11:37,000 --> 00:11:42,000 Вызначана не саромейцеся, дасылайце пытанні на гэтую тэму таксама. 184 00:11:42,000 --> 00:11:46,000 І зноў жа, разумею, што мэта тут з вашай праблемай ўсталёўвае 185 00:11:46,000 --> 00:11:50,000 Не каб вы, хлопцы, каб напісаць ідэальны код для мноства праблем. 186 00:11:50,000 --> 00:11:57,000 Гэта вопыт. Так. 187 00:11:57,000 --> 00:12:01,000 >> Вярнуцца да рабіць падчас цыклу, калі ён роўны нулю, 188 00:12:01,000 --> 00:12:06,000 так нулявога проста нічога не значыць, яны проста націсніце ўвод? 189 00:12:06,000 --> 00:12:12,000 Null гэта спецыяльнае значэнне паказальніка, 190 00:12:12,000 --> 00:12:17,000 і мы выкарыстоўваем нуль, калі мы хочам сказаць, 191 00:12:17,000 --> 00:12:23,000 у нас ёсць паказальнік зменнай, якая паказвае на няма. 192 00:12:23,000 --> 00:12:28,000 І звычайна гэта азначае, што гэтая пераменная, гэтая пераменная паведамленне 193 00:12:28,000 --> 00:12:35,000 пуста, і тут, таму што мы выкарыстоўваем CS50 асаблівы тып радкі, 194 00:12:35,000 --> 00:12:37,000 што CS50 тып радкі? 195 00:12:37,000 --> 00:12:42,000 Ці бачылі вы, што гэта такое, калі Дэвід адкінуў капюшон ў лекцыі? 196 00:12:42,000 --> 00:12:44,000 Гэта фанкі-гэта паказальнік, дакладна? 197 00:12:44,000 --> 00:12:48,000 Добра, так. >> Гэта сімвал *. 198 00:12:48,000 --> 00:12:52,000 І так на самай справе мы маглі б замяніць гэтую 199 00:12:52,000 --> 00:12:56,000 прама тут з сімвалаў паведамленняў *, 200 00:12:56,000 --> 00:13:04,000 і так GetString функцыя, калі яна не паспяхова атрымаць радок ад карыстальніка, 201 00:13:04,000 --> 00:13:08,000 ён не можа разабраць радок, і ў адным выпадку, у якім ён не можа разабраць радок 202 00:13:08,000 --> 00:13:11,000 , Калі карыстальнік ўводзіць сімвал канца файла, кантрольная D, 203 00:13:11,000 --> 00:13:17,000 які не тое, што вы звычайна робіце, але калі гэта адбудзецца, 204 00:13:17,000 --> 00:13:20,000 то функцыя верне гэта значэнне, як спосаб сказаць 205 00:13:20,000 --> 00:13:23,000 "Гэй, я не атрымаць радок". 206 00:13:23,000 --> 00:13:27,000 Што адбудзецца, калі мы не ставім паведамленне = NULL, 207 00:13:27,000 --> 00:13:30,000 якіх з'яўляецца тое, што мы не рабілі яшчэ? 208 00:13:30,000 --> 00:13:32,000 Чаму б гэта было тут праблема? 209 00:13:32,000 --> 00:13:38,000 Таму што я ведаю, што мы крыху пагаварылі ў лекцыі аб уцечках памяці. 210 00:13:38,000 --> 00:13:42,000 Так, давайце зробім гэта, і давайце паглядзім, што адбудзецца. 211 00:13:42,000 --> 00:13:44,000 >> Пытанне Васіля Блажэннага было тое, што адбудзецца, калі мы на самай справе не 212 00:13:44,000 --> 00:13:48,000 гэта паведамленне = NULL тэст? 213 00:13:48,000 --> 00:13:51,000 Давайце пракруткі уверх да вяршыні. 214 00:13:51,000 --> 00:13:53,000 Вы, хлопцы, можаце пракаментаваць гэта. 215 00:13:53,000 --> 00:13:55,000 На самай справе, я выратую яго ў пераглядзе. 216 00:13:55,000 --> 00:13:58,000 Гэта будзе 3-я рэдакцыя. 217 00:13:58,000 --> 00:14:02,000 Што вы павінны зрабіць, каб запусціць гэтую праграму, вам прыйдзецца націснуць гэтую значок з выявай шасцярэнькі тут, 218 00:14:02,000 --> 00:14:04,000 і вы будзеце мець, каб дадаць аргументы да яго. 219 00:14:04,000 --> 00:14:10,000 Вы павінны даць яму галоўны аргумент, так як мы хочам перадаць у аргуменце каманднага радка. 220 00:14:10,000 --> 00:14:13,000 Тут я збіраюся даць яму нумар 3. Мне падабаецца 3. 221 00:14:13,000 --> 00:14:19,000 Цяпер маштабаванне назад, запусціўшы праграму. 222 00:14:19,000 --> 00:14:24,000 Гэта працуе, кампіляцыя, будаўніцтва. 223 00:14:24,000 --> 00:14:27,000 Тут мы ідзем. Ён чакае запыту. 224 00:14:27,000 --> 00:14:33,000 Калі я ўводжу нешта накшталт прывітанне-дзе прайшло? 225 00:14:33,000 --> 00:14:38,000 О, мая праграма займае занадта шмат часу для запуску. Я быў jawing занадта доўга. 226 00:14:38,000 --> 00:14:40,000 Вось ён ідзе. 227 00:14:40,000 --> 00:14:43,000 Зараз я набіраю ў прывітанне. 228 00:14:43,000 --> 00:14:46,000 Мы бачым, што ён шыфруе належным чынам. 229 00:14:46,000 --> 00:14:52,000 Цяпер, што адбудзецца, калі мы робім хуткую GetString вярнуць NULL? 230 00:14:52,000 --> 00:14:57,000 Памятаеце, я казаў, што мы зрабілі гэта, націснуўшы кіравання D ў той жа час. 231 00:14:57,000 --> 00:14:59,000 Я прагортку ўверх тут. Мы будзем запускаць яго зноў. 232 00:14:59,000 --> 00:15:01,000 Будаўніцтва. Там ён ідзе. 233 00:15:01,000 --> 00:15:04,000 Цяпер, калі я ударыў кіравання D 234 00:15:04,000 --> 00:15:12,000 Я атрымаў гэты радок, якая кажа opt/sandbox50/bin/run.sh, памылкі сегментацыі. 235 00:15:12,000 --> 00:15:15,000 Хіба вы, хлопцы, бачылі, што раней? 236 00:15:15,000 --> 00:15:17,000 >> [Студэнт] Чаму не->> Прабачце? 237 00:15:17,000 --> 00:15:20,000 [Студэнт] Чаму няма дампа памяці ў гэтым выпадку? 238 00:15:20,000 --> 00:15:26,000 Дамп гэта-пытанне чаму няма дампа тут? 239 00:15:26,000 --> 00:15:29,000 Пытанне ў тым, што там можа быць, але дамп ўяўляе сабой файл 240 00:15:29,000 --> 00:15:31,000 , Які атрымлівае захоўваецца на цвёрдым дыску. 241 00:15:31,000 --> 00:15:34,000 У гэтым выпадку мы адключылі дампы 242 00:15:34,000 --> 00:15:37,000 на бягу сервер, так што мы не былі людзі сегментах разломаў 243 00:15:37,000 --> 00:15:40,000 і стварэнне тон дампы памяці. 244 00:15:40,000 --> 00:15:46,000 Але вы можаце атрымаць. 245 00:15:46,000 --> 00:15:48,000 Асноўныя звалкі такая штука, што часта можна адключыць, 246 00:15:48,000 --> 00:15:52,000 і часам вы робіце. 247 00:15:52,000 --> 00:15:55,000 Сегментацыя віна, каб адказаць на ваша пытанне, Васіль, 248 00:15:55,000 --> 00:16:00,000 кажа, што мы паспрабавалі атрымаць доступ да паказальніка 249 00:16:00,000 --> 00:16:05,000 , Якія не былі ўсталяваныя, каб паказаць на што-небудзь. 250 00:16:05,000 --> 00:16:09,000 Памятаеце, Бинки ў відэа, калі Бинки спрабуе 251 00:16:09,000 --> 00:16:12,000 перайсці да паказальніка, які не паказваючы на ​​што-небудзь? 252 00:16:12,000 --> 00:16:16,000 У гэтым выпадку я думаю, тэхнічна паказальнік паказвае на нешта. 253 00:16:16,000 --> 00:16:20,000 Гэта паказвае на нулявы, які з'яўляецца тэхнічна 0, 254 00:16:20,000 --> 00:16:25,000 але, што называецца ў сегменце, які не даступны 255 00:16:25,000 --> 00:16:28,000 па вашай праграме, так што вы атрымаеце памылку сегментацыі 256 00:16:28,000 --> 00:16:31,000 таму што вы не доступу да памяці, які ў дзеючы сегмент 257 00:16:31,000 --> 00:16:38,000 як сегмент кучы або стэку сегмент або сегмент дадзеных. 258 00:16:38,000 --> 00:16:40,000 Cool. 259 00:16:40,000 --> 00:16:48,000 Любыя пытанні аб Цэзара? 260 00:16:48,000 --> 00:16:51,000 >> Давайце рухацца далей. Давайце паглядзім на перагляд 2 вельмі хутка. 261 00:16:51,000 --> 00:17:00,000 Вось Виженера. 262 00:17:00,000 --> 00:17:04,000 Тут, у Виженера 263 00:17:04,000 --> 00:17:06,000 Мы пройдзем праз гэта даволі хутка, таму што, зноў жа, 264 00:17:06,000 --> 00:17:10,000 Виженера і Цэзара вельмі падобныя. 265 00:17:10,000 --> 00:17:12,000 Загалоўку гэтай заўвагі раней, 266 00:17:12,000 --> 00:17:17,000 # Вызначыць гэта перш за пазбегнуць выкарыстання гэтых магічных лікаў. 267 00:17:17,000 --> 00:17:21,000 Прыемна тое, што мы хочам, каб перайсці да 268 00:17:21,000 --> 00:17:23,000 розных алфавіту ці нешта накшталт гэтага. 269 00:17:23,000 --> 00:17:26,000 Замест таго, каб ісці ўручную змяняць усе 26 у кодзе 270 00:17:26,000 --> 00:17:30,000 мы маглі б змяніць гэта 27 або кінуць яго ўніз 271 00:17:30,000 --> 00:17:34,000 калі б мы выкарыстоўвалі розныя алфавіты, розныя мовы. 272 00:17:34,000 --> 00:17:38,000 Зноў жа, у нас ёсць гэтая праверка колькасць аргументаў, 273 00:17:38,000 --> 00:17:42,000 і сапраўды можна амаль прыняць гэта ў якасці шаблону. 274 00:17:42,000 --> 00:17:46,000 Практычна кожны праграме вы павінны напісаць- 275 00:17:46,000 --> 00:17:50,000 калі ён прымае аргументы каманднага радка-некаторая паслядоўнасць ліній 276 00:17:50,000 --> 00:17:55,000 , Які чытаецца як гэта ў самым пачатку. 277 00:17:55,000 --> 00:17:59,000 Гэта адно з першых выпрабаванняў здаровае вы хочаце зрабіць. 278 00:17:59,000 --> 00:18:03,000 >> Вось тое, што мы рабілі, было мы пераканаліся, што 279 00:18:03,000 --> 00:18:06,000 Ключавое слова сапраўды было, і гэта была другая праверка, што мы і зрабілі. 280 00:18:06,000 --> 00:18:11,000 Звярніце ўвагу яшчэ раз, што мы аддзяліліся ад гэтага ARGC і 2. 281 00:18:11,000 --> 00:18:14,000 Звярніце ўвагу, што ў гэтым выпадку адна рэч, якую мы павінны былі зрабіць, было, замест 282 00:18:14,000 --> 00:18:18,000 выкарыстання, каб я, мы хацелі праверыць усю радок, 283 00:18:18,000 --> 00:18:21,000 і для таго, каб рабіць, што вы на самой справе трэба ісці па адным знаку 284 00:18:21,000 --> 00:18:23,000 за радком. 285 00:18:23,000 --> 00:18:29,000 Там няма добры спосаб называць штосьці на ёй 286 00:18:29,000 --> 00:18:31,000 таму што нават, напрыклад, каб я верне 0 287 00:18:31,000 --> 00:18:37,000 калі ён не можа разабраць цэлае, так што нават не працуе. 288 00:18:37,000 --> 00:18:42,000 Зноў жа, добрае паведамленне аб тым, карыстачу менавіта тое, што адбылося. 289 00:18:42,000 --> 00:18:45,000 Тады тут, зноў жа, мы таксама апрацоўваем выпадак, калі 290 00:18:45,000 --> 00:18:50,000 Карыстальнік ўводзіць у элемент кіравання D выпадковы характар. 291 00:18:50,000 --> 00:18:54,000 >> І тады Шарлота было пытанне раней пра тое, як нам удасца прапусціць прасторы 292 00:18:54,000 --> 00:18:57,000 У нашым радок тут. 293 00:18:57,000 --> 00:19:00,000 Гэта было збольшага падобна на тое, што мы зрабілі з Myspace праграмы 294 00:19:00,000 --> 00:19:04,000 што мы зрабілі ў раздзеле, і тое, як гэта працуе 295 00:19:04,000 --> 00:19:08,000 тое, што мы адсочвалі колькасць лістоў, якія мы бачылі. 296 00:19:08,000 --> 00:19:13,000 Калі мы ішлі праз радок паведамлення, як мы ішлі па адным знаку, 297 00:19:13,000 --> 00:19:16,000 Мы адсочвалі індэкс як частка нашага цыклу, і тады мы таксама адсочвалі 298 00:19:16,000 --> 00:19:21,000 колькасць літар, так што без спецыяльных сімвалаў, без лічбаў, без прабелаў 299 00:19:21,000 --> 00:19:27,000 што мы бачылі ў асобнай зменнай. 300 00:19:27,000 --> 00:19:33,000 А потым гэтае рашэнне змяняе ключ 301 00:19:33,000 --> 00:19:41,000 каб атрымаць фактычны ключ цэлае, і ён робіць гэта на лета, 302 00:19:41,000 --> 00:19:47,000 Права, перш чым ён потым ідзе для шыфравання фактычны характар ​​паведамленні. 303 00:19:47,000 --> 00:19:50,000 Ёсць некаторыя рашэнні, якія былі цалкам выдатнымі таксама 304 00:19:50,000 --> 00:19:58,000 што б змяніць ўверх пры праверцы дзеянні ключа. 305 00:19:58,000 --> 00:20:01,000 У дадатак да пераканаўшыся, што характар ​​і ключавое слова 306 00:20:01,000 --> 00:20:05,000 быў літары Аказалася таксама, што ў цэлае 307 00:20:05,000 --> 00:20:13,000 У 0 да 25 дыяпазон затым прапусціць таго, каб зрабіць гэта пазней у гэтым цыкле. 308 00:20:13,000 --> 00:20:18,000 Зноў жа, вы бачыце тут, гэта сапраўды сапраўды такі жа код 309 00:20:18,000 --> 00:20:22,000 якія мы выкарыстоўвалі ў Цэзар у гэтай кропцы. 310 00:20:22,000 --> 00:20:25,000 Ты робіш адно і тое ж, так што рэальны трук з'яўляецца высвятленне таго, 311 00:20:25,000 --> 00:20:30,000 як уключыць ключавое слова ў цэлае. 312 00:20:30,000 --> 00:20:35,000 >> Адна рэч, якую мы зрабілі тут, што некалькі шчыльных 313 00:20:35,000 --> 00:20:39,000 гэта мы паўтарылі гэтую фразу, я думаю, вы маглі б назваць яго, 314 00:20:39,000 --> 00:20:45,000 3 асобных разы на 58 ліній, 59 і 61. 315 00:20:45,000 --> 00:20:52,000 Можа хто-небудзь растлумачыць, што менавіта гэтая фраза робіць? 316 00:20:52,000 --> 00:20:55,000 Гэта доступе характар, як вы сказалі. 317 00:20:55,000 --> 00:20:59,000 Так, гэта [неразборліва] знакаў у ключавых слоў, 318 00:20:59,000 --> 00:21:04,000 і таму гэты лік літар бачыў, таму што вы толькі рухаючыся ўздоўж 319 00:21:04,000 --> 00:21:06,000 Ключавое слова раз вы бачылі ліст, 320 00:21:06,000 --> 00:21:10,000 так што гэта будзе эфектыўна прапусціць прастор і таму падобнае. 321 00:21:10,000 --> 00:21:12,000 Так, менавіта так. 322 00:21:12,000 --> 00:21:16,000 А потым, як толькі вы бачылі ключавое слова пустым вы проста мода, каб вы вярнуцца вакол. 323 00:21:16,000 --> 00:21:18,000 Менавіта так. Гэта ідэальнае тлумачэнне. 324 00:21:18,000 --> 00:21:23,000 Што Кевін сказаў, што мы хочам, каб індэкс ў ключавое слова. 325 00:21:23,000 --> 00:21:28,000 Мы хочам, каб num_letters_seen характар, калі хочаце, 326 00:21:28,000 --> 00:21:32,000 Але калі num_letters_seen перавышае даўжыню ключавога слова, 327 00:21:32,000 --> 00:21:37,000 Так мы вернемся ў адпаведным дыяпазоне мы выкарыстоўваем мод аператара 328 00:21:37,000 --> 00:21:40,000 эфектыўна абгарнуць вакол. 329 00:21:40,000 --> 00:21:43,000 Напрыклад, як у кароткатэрміновай, наша ключавое слова бекон, 330 00:21:43,000 --> 00:21:46,000 і гэта 5 літар. 331 00:21:46,000 --> 00:21:50,000 Але мы бачылі 6 літар у нашай тэкстам у гэтай кропцы 332 00:21:50,000 --> 00:21:52,000 і зашыфраваныя 6. 333 00:21:52,000 --> 00:21:57,000 Мы ў канчатковым выніку доступ да num_letters_seen, 334 00:21:57,000 --> 00:22:00,000 , Што на 6, мод даўжыня ключавога слова, 5, 335 00:22:00,000 --> 00:22:04,000 і такім чынам мы атрымаем 1, і так, што мы будзем рабіць гэта мы будзем 336 00:22:04,000 --> 00:22:14,000 доступ да першага ў характары нашага ключавога слова ў гэтай кропцы. 337 00:22:14,000 --> 00:22:21,000 >> Добра, любыя пытанні па Виженера 338 00:22:21,000 --> 00:22:26,000 перш чым рухацца далей? 339 00:22:26,000 --> 00:22:31,000 Вы, хлопцы, адчуваў сябе даволі добра з гэтай нагоды? 340 00:22:31,000 --> 00:22:35,000 Крута, вялікае. 341 00:22:35,000 --> 00:22:38,000 Я хачу, каб пераканацца, што вы, хлопцы атрымліваюць шанец убачыць код 342 00:22:38,000 --> 00:22:48,000 што мы думаем, выглядае добра, і ёсць шанец даведацца ад яго. 343 00:22:48,000 --> 00:22:53,000 Гэта будзе апошняй мы будзем выкарыстоўваць прабелы ў цяперашні час, 344 00:22:53,000 --> 00:22:59,000 і мы збіраемся пераходзіць цяпер, і я збіраюся пайсці ў cs50.net/lectures 345 00:22:59,000 --> 00:23:06,000 так што мы можам зрабіць трохі агляду віктарыны. 346 00:23:06,000 --> 00:23:10,000 Лепшы спосаб Я думаю, што пачаць рабіць тэст агляд 347 00:23:10,000 --> 00:23:15,000 павінен прыйсці да гэтай лекцыі старонцы, cs50.net/lectures, 348 00:23:15,000 --> 00:23:20,000 і пад кожным з загалоўкаў тыдзень, так што калі я гляджу тут на Тыдні 0, 349 00:23:20,000 --> 00:23:27,000 Я бачу, што ў нас ёсць спіс пытанняў, якія мы абмяркоўвалі ў тыдзень 0. 350 00:23:27,000 --> 00:23:31,000 >> Калі любая з гэтых тэм здаецца незнаёмай для вас 351 00:23:31,000 --> 00:23:34,000 вы вызначана хочаце, каб вярнуцца і прочесать лекцыі і, магчыма, 352 00:23:34,000 --> 00:23:39,000 нават бегла лекцыі, глядзець іх зноў, калі вы хочаце 353 00:23:39,000 --> 00:23:44,000 каб адчуваць сябе за тое, што адбываецца з кожным з гэтых тэм. 354 00:23:44,000 --> 00:23:49,000 Скажу дадаткова ў гэтым годзе адзін з прахалодных рэсурсы ў нас ёсць 355 00:23:49,000 --> 00:23:55,000 Менавіта гэтыя шорты, якія мы стварылі, і калі вы паглядзіце на Тыдні 0, 356 00:23:55,000 --> 00:24:00,000 у нас няма ўсіх тэмах, але ў нас ёсць даволі шмат з іх, 357 00:24:00,000 --> 00:24:03,000 некаторыя з іх складаней, таму назіраць гэтыя шорты зноў 358 00:24:03,000 --> 00:24:08,000 гэта добры спосаб, каб вы да хуткасці. 359 00:24:08,000 --> 00:24:15,000 У прыватнасці, я збіраюся паставіць у раз'ём для 3 на дне, так як я зрабіў тыя. 360 00:24:15,000 --> 00:24:20,000 Але калі вы змагаецеся з двайковай, біты, шасцігранныя, у такім жа родзе, 361 00:24:20,000 --> 00:24:22,000 двайковых з'яўляецца выдатным месцам для пачатку. 362 00:24:22,000 --> 00:24:25,000 ASCII яшчэ адзін, гэта добра, каб прагледзець таксама. 363 00:24:25,000 --> 00:24:31,000 Вы нават можаце сачыць за мной у 1,5 разы хуткасць, калі я буду занадта павольным для вас. 364 00:24:31,000 --> 00:24:35,000 Так як гэта водгук, не саромейцеся рабіць гэта. 365 00:24:35,000 --> 00:24:40,000 >> Проста, каб пачаць вельмі хутка, мы збіраемся прайсці праз пару такіх віктарыны праблемы 366 00:24:40,000 --> 00:24:44,000 проста хутка адтоку праз іх. 367 00:24:44,000 --> 00:24:50,000 Напрыклад, давайце паглядзім на праблемы 16, што ў мяне прама тут на дошцы. 368 00:24:50,000 --> 00:24:54,000 У нас гэта наступны разлік у двайковай, 369 00:24:54,000 --> 00:24:56,000 і мы хочам паказаць любую працу. 370 00:24:56,000 --> 00:24:59,000 Добра, я збіраюся даць гэтаму стрэл. 371 00:24:59,000 --> 00:25:01,000 Вы, хлопцы, павінны прытрымлівацца разам з паперай, 372 00:25:01,000 --> 00:25:04,000 і мы будзем рабіць гэта вельмі хутка. 373 00:25:04,000 --> 00:25:06,000 Мы хочам, каб выканаць наступныя разлікі ў двайковай сістэме. 374 00:25:06,000 --> 00:25:16,000 У мяне 00110010. 375 00:25:16,000 --> 00:25:27,000 І я збіраюся дадаць да яго 00110010. 376 00:25:27,000 --> 00:25:30,000 Для геніяў матэматыкі вынікаючы ўздоўж дома, 377 00:25:30,000 --> 00:25:35,000 Гэта фактычна памнажэннем на 2. 378 00:25:35,000 --> 00:25:37,000 Давайце пачнем. 379 00:25:37,000 --> 00:25:39,000 Мы збіраемся прытрымлівацца той жа алгарытм таго, што мы робім 380 00:25:39,000 --> 00:25:43,000 калі мы дадаем дзесятковых лікаў. 381 00:25:43,000 --> 00:25:46,000 Сапраўды Адзіная розніца ў тым, што мы пятля назад вакол 382 00:25:46,000 --> 00:25:51,000 калі ў нас будзе 1 + 1, а не толькі мы атрымаем да 10. 383 00:25:51,000 --> 00:25:53,000 >> Калі мы пачнем з правага боку, вельмі хутка, што першая лічба? 384 00:25:53,000 --> 00:25:55,000 [Студэнт] 0. >> [Nate H.] 0. 385 00:25:55,000 --> 00:25:58,000 Вялікі, другая лічба? 386 00:25:58,000 --> 00:26:00,000 [Студэнт] 1. 387 00:26:00,000 --> 00:26:02,000 [Nate H.] Гэта 1? 1 + 1 ёсць? 388 00:26:02,000 --> 00:26:04,000 [Студэнт] 10. 389 00:26:04,000 --> 00:26:08,000 [Nate H.] Сапраўды, так у чым жа лічбу, што я пішу прама пад 2 адзінкі складваюцца? 390 00:26:08,000 --> 00:26:11,000 [Студэнт] 1, 0 або 0, а затым правесці 1. 391 00:26:11,000 --> 00:26:15,000 [Nate H.] 0 і несці 1, дакладна. 392 00:26:15,000 --> 00:26:18,000 Далей 1 ўверх, Васіль, вы ўверх. 393 00:26:18,000 --> 00:26:20,000 Які трэці? >> [Васіль] 1. 394 00:26:20,000 --> 00:26:23,000 [Nate H.] 1, дасканалым. Кевін? 395 00:26:23,000 --> 00:26:27,000 [Кевін] 0. >> [Nate H.] 0, Шарлота? 396 00:26:27,000 --> 00:26:30,000 [Charlotte] 0. >> [Nate H.] Так, і што мне рабіць? 397 00:26:30,000 --> 00:26:32,000 [Студэнт] 1. 398 00:26:32,000 --> 00:26:34,000 [Nate H.] І што мне рабіць? І тады я нясу 1. 399 00:26:34,000 --> 00:26:36,000 Perfect, Sahb? >> [Sahb] Зараз у вас ёсць 1. 400 00:26:36,000 --> 00:26:40,000 [Nate H.] І я раблю нешта тут? 401 00:26:40,000 --> 00:26:43,000 [Sahb] Тады для наступнага ў вас ёсць 1, таму што вы пераносіцца на 1. 402 00:26:43,000 --> 00:26:49,000 [Nate H.] Вялікі, так што тут мы можам скончыць гэта. 403 00:26:49,000 --> 00:26:51,000 Cool. 404 00:26:51,000 --> 00:26:54,000 [Студэнт] Лі 0 + 0 = 0? 405 00:26:54,000 --> 00:26:56,000 0 + 0 = 0. 406 00:26:56,000 --> 00:27:01,000 1 + 1, як вы сказалі, 10, або 1, 0, а. 407 00:27:01,000 --> 00:27:07,000 10 з'яўляецца няправільным, таму што мне 10 азначае лік 10, 408 00:27:07,000 --> 00:27:12,000 і гэта дзівацтва, як мы, прадстаўляючы яго, калі мы пішам гэта. 409 00:27:12,000 --> 00:27:20,000 Уявім лік 2, 1, 0, а лік 10 трохі адрозніваецца. 410 00:27:20,000 --> 00:27:23,000 >> Што збольшага добра пра бінарных тое, што ёсць на самой справе не так шмат 411 00:27:23,000 --> 00:27:25,000 выпадках трэба вучыцца. 412 00:27:25,000 --> 00:27:30,000 Там у 0 + 0 = 0, 0 + 1 = 1, 413 00:27:30,000 --> 00:27:34,000 1 + 1 = 0, а затым выканаць 1, 414 00:27:34,000 --> 00:27:37,000 а затым вы можаце ўбачыць тут, на трэцім слупку справа 415 00:27:37,000 --> 00:27:40,000 у нас было гэта 1, 1, 1. 416 00:27:40,000 --> 00:27:43,000 А 1 + 1 + 1 1, 417 00:27:43,000 --> 00:27:45,000 і вы несяце іншую 1. 418 00:27:45,000 --> 00:27:48,000 Калі вы робіце двайковай Акрамя таго, даволі простая. 419 00:27:48,000 --> 00:27:51,000 Я зраблю яшчэ пару гэтых здаровае праверыць сябе 420 00:27:51,000 --> 00:27:54,000 перш чым вы ідзяце, таму што гэта 421 00:27:54,000 --> 00:28:00,000 верагодна, тое, што мы бачым на віктарыну. 422 00:28:00,000 --> 00:28:03,000 Зараз давайце зробім гэта ў наступны таксама. 423 00:28:03,000 --> 00:28:06,000 Давайце зробім праблемы 17. 424 00:28:06,000 --> 00:28:12,000 Мы збіраемся пераўтварыць наступным двайковага ліку ў дзесятковы. 425 00:28:12,000 --> 00:28:28,000 У мяне 10100111001. 426 00:28:28,000 --> 00:28:33,000 Памятаеце, у падвоеным відэа, якое я зрабіў 427 00:28:33,000 --> 00:28:36,000 Я ішоў праз пару прыкладаў, і я паказаў, як 428 00:28:36,000 --> 00:28:41,000 усё працуе, калі вы робіце гэта ў дзесятковай сістэме. 429 00:28:41,000 --> 00:28:45,000 Калі вы працуеце ў дзесятковы ўяўленне Я думаю, што мы 430 00:28:45,000 --> 00:28:48,000 На дадзены момант у нашай жыцця так бегла кажа на гэта, што 431 00:28:48,000 --> 00:28:53,000 гэта даволі лёгка замазаць механіку таго, як яна сапраўды працуе. 432 00:28:53,000 --> 00:28:59,000 >> Але каб зрабіць хуткае рэзюмэ, калі ў мяне ёсць нумар 137 433 00:28:59,000 --> 00:29:06,000 У рэчаіснасці гэта азначае і зноў жа, гэта ў дзесятковы шоу- 434 00:29:06,000 --> 00:29:19,000 лік 137 у дзесятковай азначае, што ў мяне ёсць 1 х 100 + 3 х 10 + 7 х 1. 435 00:29:19,000 --> 00:29:22,000 Гэта ўсё знаходжання на экране. 436 00:29:22,000 --> 00:29:29,000 І потым, калі вы паглядзіце на гэтыя лічбы прама тут, 437 00:29:29,000 --> 00:29:34,000 100, 10 і 1, вы бачыце, што яны на самой справе ўсё паўнамоцтвы 10. 438 00:29:34,000 --> 00:29:43,000 У мяне ёсць 10 ², 10 ¹, і ад 10 да нуля. 439 00:29:43,000 --> 00:29:48,000 У нас падобнага роду рэчы ў двайковай, 440 00:29:48,000 --> 00:29:55,000 выключэннем таго, што наша база, як мы яго называем, складае 2 замест 10. 441 00:29:55,000 --> 00:29:58,000 Гэтыя 10s, што я напісаў тут на дне, 442 00:29:58,000 --> 00:30:02,000 гэта 10 ², 10 ¹, 10 да нуля, 10, наша база, 443 00:30:02,000 --> 00:30:08,000 і паказчык, 0, 1, або 2, 444 00:30:08,000 --> 00:30:14,000 выцякае з становішча лічбы ў нумары, што мы пішам. 445 00:30:14,000 --> 00:30:21,000 1, калі мы паглядзім на гэта, гэта 1, у 2-й пазіцыі. 446 00:30:21,000 --> 00:30:27,000 3 у 1-й пазіцыі, а 7 знаходзіцца ў 0-й пазіцыі. 447 00:30:27,000 --> 00:30:35,000 Вось як мы атрымаем розныя паказчыкі ніжэй для нашай базы. 448 00:30:35,000 --> 00:30:40,000 >> Пасля ўсяго гэтага МЫ-на самай справе, вы ведаеце, што? 449 00:30:40,000 --> 00:30:43,000 Мы зробім усё, дзе ж мой адмяніць кнопку ісці? 450 00:30:43,000 --> 00:30:45,000 Там ён ідзе. 451 00:30:45,000 --> 00:30:47,000 Я люблю гэтую рэч адмяніць. 452 00:30:47,000 --> 00:30:51,000 Пасля гэтага я думаю, для мяне па крайняй меры 453 00:30:51,000 --> 00:30:54,000 Самы просты спосаб пачаць пераўтварэнні двайковага ліку 454 00:30:54,000 --> 00:30:57,000 або шаснаццатковы лік, дзе база знаходзіцца ў 16 455 00:30:57,000 --> 00:31:02,000 , А не 10 або 2, каб ісці наперад і пішам 456 00:31:02,000 --> 00:31:09,000 баз і індэксаў для ўсіх лікаў у маёй двайковага ліку ў верхняй частцы. 457 00:31:09,000 --> 00:31:14,000 Калі мы пачнем злева направа зноў, 458 00:31:14,000 --> 00:31:17,000 якая з'яўляецца своеасаблівай парадаксальна, 459 00:31:17,000 --> 00:31:23,000 Я змяню Back To Black тут, у нас ёсць 2 да 0-я пазіцыя, 460 00:31:23,000 --> 00:31:27,000 а то ў нас 2 ¹, 2 ², 461 00:31:27,000 --> 00:31:33,000 а затым ад 2 да 3, ад 2 да 4, 2 да 5, 6, 462 00:31:33,000 --> 00:31:39,000 7, 8, 9 і 10. 463 00:31:39,000 --> 00:31:41,000 Гэтыя лічбы я выпісаў ўсе паказчыкі. 464 00:31:41,000 --> 00:31:48,000 Я толькі напісаў баз тут у першыя 3 толькі для прасторы. 465 00:31:48,000 --> 00:31:50,000 >> На дадзены момант я збіраюся ісці наперад і на самай справе я збіраюся сцерці 466 00:31:50,000 --> 00:31:53,000 рэчы, якія мы зрабілі ў дзесятковай, калі гэта нармальна. 467 00:31:53,000 --> 00:31:57,000 Вы ўсё зразумеў. 468 00:31:57,000 --> 00:32:05,000 Тыя з вас, глядзець онлайн Я ўпэўненая, што зможа пераматаць мяне, калі хочаце. 469 00:32:05,000 --> 00:32:07,000 Пераключэнне назад на пяро. 470 00:32:07,000 --> 00:32:12,000 Такім чынам, што мы можам зрабіць, калі вы, хлопцы, не цалкам да хуткасці на свае сілы 2, 471 00:32:12,000 --> 00:32:15,000 гэта абсалютна выдатна. 472 00:32:15,000 --> 00:32:18,000 Гэта бывае. Я разумею. 473 00:32:18,000 --> 00:32:23,000 Я калісьці на сумоўе, дзе мне сказалі, што я павінен ведаць усе ступені ліку 2 474 00:32:23,000 --> 00:32:26,000 ўверх праз 2 да 30. 475 00:32:26,000 --> 00:32:29,000 Гэта была не праца ў мяне ёсць. 476 00:32:29,000 --> 00:32:32,000 У любым выпадку, вы, хлопцы, можаце ісці наперад і рабіць матэматыку тут, 477 00:32:32,000 --> 00:32:35,000 але з бінарнымі гэта сапраўды не мае сэнсу, 478 00:32:35,000 --> 00:32:38,000 і таксама не мае сэнсу з дзесятковай або шаснаццатковай альбо, 479 00:32:38,000 --> 00:32:43,000 рабіць матэматыку, дзе ў вас ёсць нулі. 480 00:32:43,000 --> 00:32:49,000 Вы можаце бачыць, у мяне 0 тут, сюды 0, 0 тут, 0 тут, 0 тут, 0 тут. 481 00:32:49,000 --> 00:32:52,000 Чаму гэта магло б ніякага сэнсу рабіць фактычныя матэматыцы 482 00:32:52,000 --> 00:32:56,000 Для разліку адпаведнай магутнасці 2 на гэтую пасаду? 483 00:32:56,000 --> 00:32:59,000 Менавіта так, як сказала Шарлота, гэта будзе 0. 484 00:32:59,000 --> 00:33:05,000 Мог бы таксама зэканоміць час, калі вылічэнні ступені ліку 2 не з'яўляецца вашай моцнай бокам. 485 00:33:05,000 --> 00:33:10,000 У гэтым выпадку нам трэба толькі вылічыць яго для 2 да 0, што-? 486 00:33:10,000 --> 00:33:12,000 [Студэнт] 1. 487 00:33:12,000 --> 00:33:14,000 [Nate H.] 1, 2 да 3, які з'яўляецца-? 488 00:33:14,000 --> 00:33:16,000 [Студэнт] 8. >> [Nate H.] 8. 489 00:33:16,000 --> 00:33:18,000 Ад 2 да 4? 490 00:33:18,000 --> 00:33:21,000 [Студэнт] 2. Мне вельмі шкада, 1. 491 00:33:21,000 --> 00:33:26,000 [Nate H.] 2 да 4, 16, дакладна. 492 00:33:26,000 --> 00:33:28,000 Ад 2 да 5, Кевін? >> 32. 493 00:33:28,000 --> 00:33:32,000 [Nate H.] 32, ад 2 да 8? 494 00:33:32,000 --> 00:33:38,000 [Студэнт] 32 х 8, 256. 495 00:33:38,000 --> 00:33:41,000 [Nate H.] Perfect. 496 00:33:41,000 --> 00:33:43,000 І ад 2 да 10? 497 00:33:43,000 --> 00:33:45,000 [Студэнт] 1024. 498 00:33:45,000 --> 00:33:49,000 [Nate H.] Так, 1024. 499 00:33:49,000 --> 00:33:57,000 >> Пасля таго як мы атрымалі гэтыя лічбы мы можам падвесці іх усе. 500 00:33:57,000 --> 00:34:01,000 І гэта, дзе гэта сапраўды важна зрабіць некалькі рэчаў. 501 00:34:01,000 --> 00:34:07,000 Адзін з іх, ідучы павольна і праверыць вашу працу. 502 00:34:07,000 --> 00:34:10,000 Вы можаце сказаць, што ёсць 1 у канцы гэтага ліку, 503 00:34:10,000 --> 00:34:15,000 так што я абавязкова павінны атрымаць няцотны лік, як мой вынік, 504 00:34:15,000 --> 00:34:18,000 таму што ўсе астатнія збіраюцца быць цотнымі нумарамі 505 00:34:18,000 --> 00:34:21,000 улічваючы, што гэта двайковы лік. 506 00:34:21,000 --> 00:34:24,000 Іншая рэч, якую трэба зрабіць, гэта калі вы дабрацца да гэтай кропкі на выпрабавальным 507 00:34:24,000 --> 00:34:27,000 і вы напісалі яе так далёка 508 00:34:27,000 --> 00:34:30,000 і вы працуеце па-за часам 509 00:34:30,000 --> 00:34:33,000 паглядзіце на колькасць ачкоў, што гэтая праблема стаіць. 510 00:34:33,000 --> 00:34:40,000 Гэтая праблема, як вы можаце бачыць, калі я сальта назад з маім ноўтбукам сапраўды хутка- 511 00:34:40,000 --> 00:34:44,000 гэтая праблема стаіць 2 ачкі, так што гэта не з таго 512 00:34:44,000 --> 00:34:47,000 Вы павінны ісці праз, калі вы сапраўды мала часу. 513 00:34:47,000 --> 00:34:52,000 Але мы будзем вярнуцца да iPad, і мы будзем прайсці праз гэта вельмі хутка. 514 00:34:52,000 --> 00:34:54,000 >> Мне падабаецца рабіць невялікія ліку спачатку 515 00:34:54,000 --> 00:34:56,000 таму што я лічу, што прасцей. 516 00:34:56,000 --> 00:35:00,000 Мне падабаецца 32 і 8, таму што яны ідуць разам даволі лёгка, і мы атрымліваем 50. 517 00:35:00,000 --> 00:35:03,000 16 і 1 атрымлівае 17. 518 00:35:03,000 --> 00:35:05,000 Там мы атрымаем 57, 519 00:35:05,000 --> 00:35:14,000 і тады мы зможам зрабіць усё астатняе з гэтага, так што мы можам зрабіць, 57, 156. 520 00:35:14,000 --> 00:35:16,000 Пойдзем. 521 00:35:16,000 --> 00:35:19,000 Чалавек, добра, давайце паглядзім. 522 00:35:19,000 --> 00:35:27,000 У нас было 57, 256 і 1024. 523 00:35:27,000 --> 00:35:31,000 На дадзены момант, я б проста прайсці. 524 00:35:31,000 --> 00:35:35,000 Я паняцця не маю. Я выразна трэба чытаць на гэтым. 525 00:35:35,000 --> 00:35:40,000 7, 6, 4, Вы атрымліваеце 17. 526 00:35:40,000 --> 00:35:42,000 1, 5, 5, 2, 13. 527 00:35:42,000 --> 00:35:45,000 Тады мы атрымаем 3, а затым мы атрымліваем 1. 528 00:35:45,000 --> 00:35:52,000 1337. 529 00:35:52,000 --> 00:35:55,000 Велікоднае яйка, ніхто? 530 00:35:55,000 --> 00:35:59,000 Ніхто прызнаць гэты нумар? 531 00:35:59,000 --> 00:36:02,000 Крыс прызнаецца ліку. Што гэта значыць, Крыс? 532 00:36:02,000 --> 00:36:04,000 [Chris] Leet. 533 00:36:04,000 --> 00:36:11,000 Leet, так што калі вы паглядзіце на гэта, падобна, Літ. 534 00:36:11,000 --> 00:36:15,000 Хакер рэчы. Сачыце за такога роду рэчы па сярэднетэрміновай або тэст, а. 535 00:36:15,000 --> 00:36:19,000 Калі вы бачыце такія рэчы, і вы задаецца пытаннем "А" 536 00:36:19,000 --> 00:36:22,000 , Што можа на самой справе нешта значаць. 537 00:36:22,000 --> 00:36:24,000 Я не ведаю. Дэвід любіць пакласці яго цалі 538 00:36:24,000 --> 00:36:26,000 Гэта добры спосаб праверыць яго стан сьвядомасьці. 539 00:36:26,000 --> 00:36:30,000 Як добра, я бачу, што адбываецца. 540 00:36:30,000 --> 00:36:34,000 >> Вось тыдзень 1 0/Week рэчы. 541 00:36:34,000 --> 00:36:39,000 Калі вярнуцца да нашых ноўтбукам зараз, 542 00:36:39,000 --> 00:36:46,000 паменшыць маштаб, і пару іншых рэчаў. 543 00:36:46,000 --> 00:36:50,000 Там у ASCII, якія мы рабілі шмат з праблемай набору. 544 00:36:50,000 --> 00:36:55,000 Гэта паняцце капіталу A. Што гэта на самай справе? 545 00:36:55,000 --> 00:36:57,000 Ведаючы гэта дзесятковы лік. 546 00:36:57,000 --> 00:37:00,000 65 з'яўляецца тое, што ён адлюстроўваецца ў табліцы ASCII, 547 00:37:00,000 --> 00:37:03,000 і вось таму, як кампутар піша ён, 548 00:37:03,000 --> 00:37:06,000 і гэта, як мы ўжо сыходзіць з фактычнай запісу 549 00:37:06,000 --> 00:37:09,000 характар ​​капіталу і характар ​​ніжняга рэгістра 550 00:37:09,000 --> 00:37:14,000 У некаторых з гэтых рашэнняў і праблема набору, што вы рабілі. 551 00:37:14,000 --> 00:37:16,000 Некалькі іншых рэчаў. 552 00:37:16,000 --> 00:37:25,000 У нас ёсць заявы, лагічныя выразы, умовы, цыклы, зменныя і патокаў. 553 00:37:25,000 --> 00:37:29,000 >> Тыя, усё, здаецца, мае сэнс па большай частцы? 554 00:37:29,000 --> 00:37:35,000 Некаторыя з гэтай тэрміналогіі трохі напалоханым ў разы. 555 00:37:35,000 --> 00:37:46,000 Мне падабаецца думаць, заявы, як па большай частцы тое, што заканчваецца кропкай з коскі. 556 00:37:46,000 --> 00:37:51,000 Такія заявы, як х = 7, якая ўсталёўвае зменную 557 00:37:51,000 --> 00:37:54,000 Меркавана называецца х = 7. 558 00:37:54,000 --> 00:38:01,000 Меркавана х таксама тып, які можа захаваць нумар 7, 559 00:38:01,000 --> 00:38:05,000 так што Int або, магчыма, таркай або кароткая або сімвал, 560 00:38:05,000 --> 00:38:07,000 нешта накшталт гэтага. 561 00:38:07,000 --> 00:38:12,000 Лагічнае выраз выкарыстоўвае гэтыя падвойныя роўна 562 00:38:12,000 --> 00:38:17,000 і выбуху роўная або не роўная, менш, больш, чым, 563 00:38:17,000 --> 00:38:22,000 менш або роўныя, усё ў такім жа родзе. 564 00:38:22,000 --> 00:38:28,000 Умовы гэта значыць, калі іншае справаздачнасці. 565 00:38:28,000 --> 00:38:32,000 Я памятаю, што вы не можаце мець іншае без адпаведных калі. 566 00:38:32,000 --> 00:38:37,000 Акрамя таго, вы не можаце мець яшчэ, калі без адпаведных калі. 567 00:38:37,000 --> 00:38:40,000 Завесы, нагадаем 3 выгляду завес мы былі ў вас малатком 568 00:38:40,000 --> 00:38:43,000 за апошнія пару секцый і праблемы мноства. 569 00:38:43,000 --> 00:38:46,000 Выкарыстанне жа час, калі вы атрымліваеце карыстацкага ўводу, 570 00:38:46,000 --> 00:38:51,000 выкарыстанне ў той час як завесы, пакуль пэўны ўмова праўдзіва, 571 00:38:51,000 --> 00:38:56,000 , А затым з дапамогай гэтых цыклаў, калі вам трэба 572 00:38:56,000 --> 00:39:01,000 ведаць, якія ітэрацыі цыклу вы зараз знаходзіцеся, як я думаю пра гэта. 573 00:39:01,000 --> 00:39:07,000 Або калі вы робіце для кожнага знака ў радку я хачу нешта зрабіць, 574 00:39:07,000 --> 00:39:15,000 Для кожнага элемента ў масіве я хачу нешта зрабіць, каб гэтага элемента. 575 00:39:15,000 --> 00:39:18,000 >> Тэмы і падзеі. 576 00:39:18,000 --> 00:39:21,000 Гэтыя якія мы не так відавочна ў C, 577 00:39:21,000 --> 00:39:23,000 але памятайце, гэта з нуля. 578 00:39:23,000 --> 00:39:26,000 Гэта паняцце, якія маюць розныя сцэнары. 579 00:39:26,000 --> 00:39:32,000 Гэта таксама гэта паняцце трансляцыі падзеі. 580 00:39:32,000 --> 00:39:37,000 Некаторыя людзі не выкарыстоўвалі вяшчанне ў сваіх праектах на пачатковым этапе, 581 00:39:37,000 --> 00:39:40,000 які цалкам халаднавата, 582 00:39:40,000 --> 00:39:46,000 але гэтыя 2 розныя спосабы апрацоўкі гэтага больш праблем, паралелізм, 583 00:39:46,000 --> 00:39:49,000 які з'яўляецца, як вы атрымліваеце праграм для выканання 584 00:39:49,000 --> 00:39:54,000 або, здавалася б выканаць у той жа час? 585 00:39:54,000 --> 00:39:59,000 Розныя задачы, якія выконваюцца ў той час як іншыя задачы таксама працуе. 586 00:39:59,000 --> 00:40:01,000 Гэта, як ваша аперацыйная сістэма, здаецца, працуе. 587 00:40:01,000 --> 00:40:04,000 Вось чаму, хоць, напрыклад, 588 00:40:04,000 --> 00:40:10,000 У мяне ёсць мой браўзэр працуе, я таксама можаце ўключыць Spotify і гуляць песні. 589 00:40:10,000 --> 00:40:14,000 Гэта больш, канцэптуальныя рэчы, каб зразумець. 590 00:40:14,000 --> 00:40:17,000 Я хацеў бы зірнуць на тэмы, коратка 591 00:40:17,000 --> 00:40:21,000 Калі вы хочаце даведацца больш аб гэтым. 592 00:40:21,000 --> 00:40:26,000 >> Давайце паглядзім, я лічу, што можна было б 593 00:40:26,000 --> 00:40:31,000 Праблема пра гэта ў адным з іх. 594 00:40:31,000 --> 00:40:35,000 Зноў жа, я думаю, што тэмы і падзеі, не тое, што мы разгледзім у C 595 00:40:35,000 --> 00:40:41,000 толькі таму, што гэта значна цяжэй, чым у Scratch. 596 00:40:41,000 --> 00:40:44,000 Вы не павінны турбавацца пра яе, але, безумоўна, разумеюць канцэпцыі, 597 00:40:44,000 --> 00:40:47,000 зразумець, што адбываецца. 598 00:40:47,000 --> 00:40:52,000 Перш чым рухацца далей, любыя пытанні на тыдзень 0 матэрыялаў? 599 00:40:52,000 --> 00:40:55,000 Кожны адчуваў сябе даволі добра? 600 00:40:55,000 --> 00:41:03,000 Разуменне зменных і што такое зменная? 601 00:41:03,000 --> 00:41:08,000 >> Рухаемся далей. Тыдзень 1. 602 00:41:08,000 --> 00:41:12,000 Некалькі рэчаў тут, якія не былі асабліва пакрытыя 603 00:41:12,000 --> 00:41:21,000 У віктарыне водгук абавязкова, а таксама больш канцэптуальныя рэчы, каб думаць. 604 00:41:21,000 --> 00:41:30,000 Па-першае, гэта паняцце аб тым, што зыходны код, кампілятары і аб'ектны код ёсць. 605 00:41:30,000 --> 00:41:32,000 Хто-небудзь? Васіля. 606 00:41:32,000 --> 00:41:37,000 З'яўляецца аб'ектна-код я маю на ўвазе зыходнага кода з'яўляецца тое, што вы паклалі ў ляск, 607 00:41:37,000 --> 00:41:42,000 і аб'ектны код з'яўляецца тое, што звонам ставіць так, што ваш кампутар можа прачытаць праграму. 608 00:41:42,000 --> 00:41:44,000 Менавіта так. 609 00:41:44,000 --> 00:41:47,000 Зыходны код код C, што вы на самай справе надрукаваць. 610 00:41:47,000 --> 00:41:50,000 Код аб'екта з'яўляецца тое, што вы выходзіце з ляск. 611 00:41:50,000 --> 00:41:54,000 Гэта 0 і 1, што ў двайковым фармаце. 612 00:41:54,000 --> 00:41:59,000 Тады што ж адбываецца, калі ў вас ёсць некалькі аб'ектных файлаў, 613 00:41:59,000 --> 00:42:04,000 сказаць, што вы збіраеце праект або праграма, якая выкарыстоўвае некалькі файлаў зыходнага кода, 614 00:42:04,000 --> 00:42:09,000 якія па дамове прадастаўляецца. з пашырэннем файла. 615 00:42:09,000 --> 00:42:13,000 Вось чаму ў нас ёсць caesar.c, vigenère.c. 616 00:42:13,000 --> 00:42:18,000 Калі вы пішаце Java праграмы вы даеце ім пашырэнне. Java. 617 00:42:18,000 --> 00:42:24,000 Python праграмы маюць пашырэнне. Ру часта. 618 00:42:24,000 --> 00:42:26,000 >> Калі ў вас ёсць некалькі. З файламі, вы іх кампіляцыі. 619 00:42:26,000 --> 00:42:29,000 Clang выплёўвае ўсё гэта двайковы смецце. 620 00:42:29,000 --> 00:42:33,000 Потым, таму што вы толькі хочаце 1 праграма 621 00:42:33,000 --> 00:42:37,000 ў вас ёсць кампаноўнік спасылцы ўсе гэтыя аб'ектныя файлы разам 622 00:42:37,000 --> 00:42:40,000 у 1 выкананы файл. 623 00:42:40,000 --> 00:42:45,000 Гэта таксама тое, што адбываецца, калі вы выкарыстоўваеце CS50 бібліятэцы, напрыклад. 624 00:42:45,000 --> 00:42:50,000 Бібліятэка CS50 з'яўляецца і тое. Ч. файл загалоўка 625 00:42:50,000 --> 00:42:53,000 што вы чытаеце, што # includecs50.h. 626 00:42:53,000 --> 00:42:58,000 І тады гэта таксама спецыяльны файл бібліятэкі двайковых 627 00:42:58,000 --> 00:43:02,000 , Якое было складзена гэта 0 і 1, 628 00:43:02,000 --> 00:43:08,000 і што-л сцяг, таму, калі мы вернемся да нашых прасторах і мы глядзім вельмі хутка 629 00:43:08,000 --> 00:43:11,000 на тое, што тут адбываецца, калі мы глядзім на нашу каманду ляск, 630 00:43:11,000 --> 00:43:15,000 тое, што мы атрымалі, гэта наш зыходны код файла прама тут. 631 00:43:15,000 --> 00:43:18,000 Гэта куча сцягоў кампілятара. 632 00:43:18,000 --> 00:43:22,000 І тады ў самым канцы, гэтыя-л сцягі спасылку ў 633 00:43:22,000 --> 00:43:30,000 фактычныя двайковыя файлы на гэтыя 2 бібліятэкі, CS50 бібліятэкі, а затым матэматычную бібліятэку. 634 00:43:30,000 --> 00:43:35,000 >> Разуменне кожнага тыпу файлаў мэты " 635 00:43:35,000 --> 00:43:38,000 У працэсе кампіляцыі з'яўляецца тое, што вы хочаце, каб мець магчымасць 636 00:43:38,000 --> 00:43:43,000 даць хоць бы падрабязны агляд. 637 00:43:43,000 --> 00:43:46,000 Зыходны код прыходзіць цалі Код аб'екта выходзіць. 638 00:43:46,000 --> 00:43:53,000 Файлы Код аб'екта звязаць разам, і вы атрымаеце прыгожы, выкананы файл. 639 00:43:53,000 --> 00:43:55,000 Cool. 640 00:43:55,000 --> 00:43:58,000 Гэта таксама, дзе вы можаце атрымаць памылкі ў некалькіх кропках 641 00:43:58,000 --> 00:44:00,000 У працэсе кампіляцыі. 642 00:44:00,000 --> 00:44:04,000 Гэта калі, напрыклад, калі вы возьмеце гэтую сувязь сцяг, 643 00:44:04,000 --> 00:44:10,000 CS50 сцяг, і вы апусціце яго ў прасторы або калі вы працуеце ваш код, 644 00:44:10,000 --> 00:44:13,000 гэта дзе вы атрымаеце памылку ў стадыі кампаноўкі, 645 00:44:13,000 --> 00:44:18,000 і кампаноўнік будзе сказаць: "Гэй, вы завецца функцыяй GetString 646 00:44:18,000 --> 00:44:20,000 , Які ў CS50 бібліятэкі ". 647 00:44:20,000 --> 00:44:25,000 "Вы сказалі мне, што ў CS50 бібліятэка, і я не магу знайсці код для яго." 648 00:44:25,000 --> 00:44:28,000 Вось дзе вы павінны звязаць яго, і гэта асобная 649 00:44:28,000 --> 00:44:33,000 ад памылкі кампілятара, таму што кампілятар глядзіць на сінтаксіс і такога роду рэчы. 650 00:44:33,000 --> 00:44:38,000 Гэта добра, каб ведаць, што адбываецца, калі. 651 00:44:38,000 --> 00:44:42,000 >> Іншыя рэчы, каб ведаць. 652 00:44:42,000 --> 00:44:49,000 Я б сказаў, вы вызначана хочаце, каб зірнуць на кароткім на прывядзенне зроблена Іарданіі 653 00:44:49,000 --> 00:44:55,000 каб зразумець, што цэлымі знаходзіцца пад капотам, 654 00:44:55,000 --> 00:44:58,000 якія сімвалы знаходзяцца пад капотам. 655 00:44:58,000 --> 00:45:02,000 Калі мы гаворым пра ASCII, і мы на самай справе глядзім на табліцу ASCII, 656 00:45:02,000 --> 00:45:07,000 што гэта робіць дае нам пад капотам погляд 657 00:45:07,000 --> 00:45:13,000 на тое, як кампутар на самай справе ўяўляе капіталу і лічба 7 658 00:45:13,000 --> 00:45:17,000 і коска і знак пытання. 659 00:45:17,000 --> 00:45:20,000 Кампутар таксама мае спецыяльныя спосабы прадстаўлення 660 00:45:20,000 --> 00:45:23,000 лік 7, як лік. 661 00:45:23,000 --> 00:45:27,000 Гэта мае асаблівае спосаб прадстаўлення ліку 7 як лік з якая плавае кропкай, 662 00:45:27,000 --> 00:45:29,000 і тых, хто вельмі розныя. 663 00:45:29,000 --> 00:45:32,000 Прывядзенне то, як вы кажаце кампутар "Гэй, я хачу вам канвертаваць 664 00:45:32,000 --> 00:45:37,000 ад аднаго прадстаўлення да іншага прадстаўленні ". 665 00:45:37,000 --> 00:45:40,000 Чаму б нам не паглядзець на гэта. 666 00:45:40,000 --> 00:45:44,000 >> Я хацеў бы таксама зірнуць на кароткіх па бібліятэках і кароткі на кампілятары. 667 00:45:44,000 --> 00:45:47,000 Гэтыя размовы аб працэсе кампіляцыі, 668 00:45:47,000 --> 00:45:53,000 што бібліятэка, і перайсці на некаторыя з гэтых пытанняў, якія вы маглі б спытаў. 669 00:45:53,000 --> 00:45:55,000 Пытанні па тыдзень 1 матэрыял? 670 00:45:55,000 --> 00:46:03,000 Ці ёсць тэмы тут, што ў засмучэнне вы хочаце, каб пакрыць? 671 00:46:03,000 --> 00:46:07,000 Я стараюся, каб прадуць большасць з іх раней тым, каб мы маглі дабрацца да 672 00:46:07,000 --> 00:46:13,000 паказальнікаў і зрабіць трохі рэкурсіі. 673 00:46:13,000 --> 00:46:15,000 Думкі? 674 00:46:15,000 --> 00:46:19,000 Усё, што для пакрыцця? 675 00:46:19,000 --> 00:46:21,000 Час для некаторых шакалад можа быць? 676 00:46:21,000 --> 00:46:23,000 Вы, хлопцы, працуеце праз яго. 677 00:46:23,000 --> 00:46:26,000 Я буду трымаць пацягваючы свой кавы. 678 00:46:26,000 --> 00:46:31,000 2-я тыдзень. 679 00:46:31,000 --> 00:46:34,000 Добрае слова, добры выклік. 680 00:46:34,000 --> 00:46:38,000 У 2-я тыдзень, мы гаварылі трохі больш пра функцыях. 681 00:46:38,000 --> 00:46:43,000 >> У першыя некалькі камплектаў праблемы мы сапраўды не пісаць ніякіх функцый на ўсіх 682 00:46:43,000 --> 00:46:45,000 акрамя якім функцыя? 683 00:46:45,000 --> 00:46:47,000 [Студэнт] Main. >> Галоўнае, дакладна. 684 00:46:47,000 --> 00:46:51,000 І так мы бачылі розныя касцюмы, што асноўнай носіць. 685 00:46:51,000 --> 00:46:54,000 Там у адной, у якой ён не прымае аргументаў, 686 00:46:54,000 --> 00:46:58,000 і мы проста скажам, пустэчу ў круглых дужках, 687 00:46:58,000 --> 00:47:01,000 і тады ёсць іншы, дзе мы хочам прымаць аргументы каманднага радка, 688 00:47:01,000 --> 00:47:08,000 і, як мы бачылі, што там у вас ёсць Int ARGC і ARGV масіў радкоў 689 00:47:08,000 --> 00:47:13,000 ці цяпер, калі мы на самай справе падвяргаецца радкі, каб быць знак *, што 690 00:47:13,000 --> 00:47:20,000 мы збіраемся, каб пачаць пісаць яго як сімвал * ARGV, а затым дужкі. 691 00:47:20,000 --> 00:47:22,000 У задачы Set 3, вы, хлопцы, бачылі кучу функцый, 692 00:47:22,000 --> 00:47:27,000 і вы рэалізавалі кучу функцый, маляваць, глядзець уверх, сутычка. 693 00:47:27,000 --> 00:47:31,000 Прататыпы былі напісаныя там для вас. 694 00:47:31,000 --> 00:47:33,000 >> Тое, што я хацеў распавесці пра тут з функцыямі вельмі хутка 695 00:47:33,000 --> 00:47:38,000 з'яўляецца тое, што існуе 3 частак да іх кожны раз, калі вы пішаце функцыю. 696 00:47:38,000 --> 00:47:43,000 Вы павінны пазначыць тып якое вяртаецца значэння функцыі. 697 00:47:43,000 --> 00:47:46,000 Вы павінны паказаць імя функцыі, а затым вы павінны паказаць 698 00:47:46,000 --> 00:47:51,000 Спіс аргументаў або спісу параметраў. 699 00:47:51,000 --> 00:47:57,000 Напрыклад, калі б я напісаць функцыю, каб падвесці вынікі кучу цэлых лікаў 700 00:47:57,000 --> 00:48:03,000 , А затым вярнуцца да мяне суму, што было б майго вяртання тыпу 701 00:48:03,000 --> 00:48:06,000 калі б я хацеў, каб падвесці цэлых лікаў, а затым вярнуць суму? 702 00:48:06,000 --> 00:48:12,000 Тады імя функцыі. 703 00:48:12,000 --> 00:48:27,000 Калі я пайду наперад і напісаць у зялёны, гэтая частка вяртаецца тыпу. 704 00:48:27,000 --> 00:48:34,000 Гэтая частка назвы. 705 00:48:34,000 --> 00:48:40,000 А потым у дужках 706 00:48:40,000 --> 00:48:46,000 Тут я даю аргументы, 707 00:48:46,000 --> 00:48:56,000 Часта скарочана аргументы, якія часам называюцца параметрамі для параметраў. 708 00:48:56,000 --> 00:49:00,000 І калі ў вас ёсць, вы проста паказваеце адзін. 709 00:49:00,000 --> 00:49:06,000 Калі ў вас некалькі вы падзеліце кожны з коскі. 710 00:49:06,000 --> 00:49:13,000 І для кожнага аргументу, вы даеце яму 2 рэчы, якія, Кевін? 711 00:49:13,000 --> 00:49:18,000 [Кевін] Вы павінны даць тыпу, а затым імя. 712 00:49:18,000 --> 00:49:21,000 І тое імя, і імя гэтае імя, якое вы збіраецеся выкарыстоўваць 713 00:49:21,000 --> 00:49:25,000 спасылацца на гэты аргумент у межах сумы функцый, 714 00:49:25,000 --> 00:49:27,000 у межах функцыі, якія вы ў цяперашні час напісання. 715 00:49:27,000 --> 00:49:32,000 >> Вы не павінны, напрыклад, калі я збіраюся падводзіць вынікі, 716 00:49:32,000 --> 00:49:41,000 скажам, масіў цэлых лікаў-Мы робім Int масіва, 717 00:49:41,000 --> 00:49:46,000 і я дам сабе некаторыя фігурныя дужкі там- 718 00:49:46,000 --> 00:49:51,000 Затым, калі я перадаць масіў у суме функцый 719 00:49:51,000 --> 00:49:55,000 Я перадаю яго ў першую пазіцыю спісу аргументаў. 720 00:49:55,000 --> 00:49:59,000 Але масіў, які я праходжу ў не павінна мець назву апр. 721 00:49:59,000 --> 00:50:07,000 Обр будзе, як я спасылацца на гэты аргумент у целе функцыі. 722 00:50:07,000 --> 00:50:10,000 Іншая справа, што мы павінны прыняць да ўвагі, 723 00:50:10,000 --> 00:50:14,000 і гэта трохі адрозніваецца ад функцыі, але я думаю, гэта важны момант, 724 00:50:14,000 --> 00:50:20,000 з'яўляецца тое, што ў C, калі я пішу гэтую функцыю, як 725 00:50:20,000 --> 00:50:29,000 Адкуль я ведаю, колькі элементаў у гэтым масіве? 726 00:50:29,000 --> 00:50:31,000 Гэта свайго роду пытанне з падвохам. 727 00:50:31,000 --> 00:50:35,000 Мы гаварылі пра гэта трохі ў раздзеле мінулым тыдні. 728 00:50:35,000 --> 00:50:40,000 Як мне даведацца колькасць элементаў ўнутры масіва ў C? 729 00:50:40,000 --> 00:50:44,000 Ці ёсць спосаб? 730 00:50:44,000 --> 00:50:49,000 >> Аказваецца, што няма ніякага спосабу даведацца. 731 00:50:49,000 --> 00:50:52,000 Вы павінны перадаць яго ў асобнасці. 732 00:50:52,000 --> 00:50:55,000 Існуе трук, які вы можаце зрабіць 733 00:50:55,000 --> 00:51:00,000 калі вы знаходзіцеся ў той жа функцыяй, у якой масіў быў абвешчаны, 734 00:51:00,000 --> 00:51:04,000 і вы працуеце са стэкам масіва. 735 00:51:04,000 --> 00:51:06,000 Але гэта працуе, толькі калі вы знаходзіцеся ў той жа функцыі. 736 00:51:06,000 --> 00:51:09,000 Пасля таго як вы перадаць масіў у іншую функцыю або калі вы абвясцілі масіў 737 00:51:09,000 --> 00:51:12,000 а вы ставіце гэты масіў у кучы, вы выкарыстоўвалі таНос 738 00:51:12,000 --> 00:51:15,000  і ў такім жа родзе, то ўсе стаўкі выключаны. 739 00:51:15,000 --> 00:51:18,000 Тады вам на самай справе трэба абыйсці 740 00:51:18,000 --> 00:51:21,000 адмысловы аргумент ці іншай параметр 741 00:51:21,000 --> 00:51:23,000 кажу вам, як вялікі масіў. 742 00:51:23,000 --> 00:51:28,000 У гэтым выпадку, я хацеў бы выкарыстаць коску-Прабачце, гэта будзе ад экрана тут- 743 00:51:28,000 --> 00:51:32,000 і я б перайсці ў іншы аргумент 744 00:51:32,000 --> 00:51:40,000  і называць яго Int даўжыня па даўжыні. 745 00:51:40,000 --> 00:51:44,000 >> Адна рэч, якая можа прыйсці на тэст 746 00:51:44,000 --> 00:51:49,000 просіць вас напісаць або ажыццяўляць пэўную функцыю называюць нешта. 747 00:51:49,000 --> 00:51:54,000 Калі мы не дамо вам прататып, так што гэта ўсё справа тут, 748 00:51:54,000 --> 00:51:58,000 ўвесь гэты бардак называецца аб'яву функцыі або прататып функцыі, 749 00:51:58,000 --> 00:52:01,000 гэта адна з першых рэчаў, якія вы хочаце, каб прыбіць, калі яна не дадзена 750 00:52:01,000 --> 00:52:03,000 Вам адразу на віктарыну. 751 00:52:03,000 --> 00:52:06,000 Іншы трук я даведаўся, што 752 00:52:06,000 --> 00:52:11,000 сказаць, што мы сапраўды даюць вам прататып функцыі, і мы кажам: "Гэй, ты павінен пісаць". 753 00:52:11,000 --> 00:52:16,000 Усярэдзіне фігурных дужках, што ў вас на тэст 754 00:52:16,000 --> 00:52:20,000 Калі вы заўважыце, што ёсць вяртаецца тыпу, і вы заўважыце, што тып вяртаецца 755 00:52:20,000 --> 00:52:25,000 гэта нешта іншае, чым пустата, якая азначае, што функцыя не вяртае нічога, 756 00:52:25,000 --> 00:52:28,000 тое, што вы вызначана хочаце зрабіць, гэта напісаць 757 00:52:28,000 --> 00:52:33,000 свайго роду вяртанне заявы ў самым канцы функцыі. 758 00:52:33,000 --> 00:52:40,000 Вяртанне, і ў гэтым выпадку, мы будзем ставіць пустую, таму што мы хочам, каб запоўніць пустыя. 759 00:52:40,000 --> 00:52:44,000 Але гэта атрымлівае вас думаць у правільным кірунку, пра тое, як я буду падыходзіць да гэтай праблемы? 760 00:52:44,000 --> 00:52:49,000 І гэта нагадвае вам, што вы будзеце мець, каб вярнуць значэнне 761 00:52:49,000 --> 00:52:51,000 выклікалай функцыі. 762 00:52:51,000 --> 00:52:54,000 >> Так. >> [Студэнт] ці стыль ужываецца, калі мы пішам код на віктарыну? 763 00:52:54,000 --> 00:52:58,000 Такія, як водступ і ў такім жа родзе? >> [Студэнт] Так. 764 00:52:58,000 --> 00:53:00,000 Не, не так шмат. 765 00:53:00,000 --> 00:53:09,000 Я думаю, што шмат-гэта тое, што мы будзем ўдакладніць на віктарыну у дзень, 766 00:53:09,000 --> 00:53:15,000 але, як правіла турбуючыся аб # ўключае ў сябе і ў такім жа родзе, гэта выгляд звонку. 767 00:53:15,000 --> 00:53:17,000 [Студэнт] Вам трэба каментаваць свае рукапісныя код? 768 00:53:17,000 --> 00:53:19,000 Вам трэба каментаваць свае рукапісныя код? 769 00:53:19,000 --> 00:53:24,000 Каментуючы гэта заўсёды добра, калі вы турбуецеся аб частковай крэдытнай 770 00:53:24,000 --> 00:53:29,000 ці вы хочаце паведаміць пра свой намер грэйдэр. 771 00:53:29,000 --> 00:53:33,000 Але я, зноў жа, будзе ўдакладніць на віктарыну сябе і ў той дзень, віктарыны, 772 00:53:33,000 --> 00:53:39,000 Але я не веру, што вы будзеце абавязаны пісаць каментары, няма. 773 00:53:39,000 --> 00:53:42,000 Як правіла, няма, але гэта вызначана тая рэч, дзе 774 00:53:42,000 --> 00:53:45,000 Вы можаце паведаміць вашыя намеры, як "Гэй, гэта куды я іду з ім". 775 00:53:45,000 --> 00:53:49,000 І часам гэта можа дапамагчы з частковым крэдыту. 776 00:53:49,000 --> 00:53:51,000 Cool. 777 00:53:51,000 --> 00:53:53,000 >> Васіля. 778 00:53:53,000 --> 00:53:56,000 [Васіль] У чым розніца паміж аб'яве, скажам, унутр мову 779 00:53:56,000 --> 00:54:03,000 у аргументах або параметрах у параўнанні з аб'явай зменнай ўнутры функцыі? 780 00:54:03,000 --> 00:54:05,000 Wow, кава пайшоў у дыхальнае горла. 781 00:54:05,000 --> 00:54:07,000 [Васіль] Як якое рэчаў, якія мы хочам змясціць у аргументах. 782 00:54:07,000 --> 00:54:09,000 Так, гэта вялікае пытанне. 783 00:54:09,000 --> 00:54:11,000 Як вы выбіраеце тое, што рэчы, якія вы хочаце змясціць у развагах 784 00:54:11,000 --> 00:54:17,000 супраць таго, што рэчы, якія вы павінны рабіць ўнутры функцыі? 785 00:54:17,000 --> 00:54:24,000 У гэтым выпадку мы ўключылі абодва гэтых якасці аргументаў 786 00:54:24,000 --> 00:54:29,000 таму што яны тое, што той, хто збіраецца выкарыстоўваць функцыю сумы 787 00:54:29,000 --> 00:54:32,000 Неабходна ўказаць гэтыя рэчы. 788 00:54:32,000 --> 00:54:35,000 >> Сума функцыя, пра якую мы казалі, не мае магчымасці даведацца, 789 00:54:35,000 --> 00:54:40,000 наколькі вялікі масіў яна атрымлівае ад свайго абанента або той, хто выкарыстоўвае суму функцыю. 790 00:54:40,000 --> 00:54:44,000 Ён не мае магчымасці даведацца, як вялікі, што масіў. 791 00:54:44,000 --> 00:54:48,000 Таму мы прайсці ў гэтым даўжыня прама тут у якасці аргументу 792 00:54:48,000 --> 00:54:51,000 таму, што гэта тое, што мы ў асноўным кажуць выклікалай функцыі, 793 00:54:51,000 --> 00:54:55,000 хто збіраецца выкарыстоўваць функцыю сумы, "Гэй, вы не толькі павінны даць нам масіў 794 00:54:55,000 --> 00:54:59,000 цэлых лікаў, вы таксама павінны сказаць нам, як вялікі масіў, які Вы далі нам ". 795 00:54:59,000 --> 00:55:03,000 [Васіль] Тыя, абодва будуць аргументы каманднага радка? 796 00:55:03,000 --> 00:55:06,000 Не, гэта фактычныя аргументы, якія вы перадаеце ў функцыю. 797 00:55:06,000 --> 00:55:10,000 >> Дазвольце мне зрабіць новую старонку тут. 798 00:55:10,000 --> 00:55:13,000 [Васіль] Як імя будзе праходзіць- 799 00:55:13,000 --> 00:55:24,000 [Nate H.] Калі ў мяне ёсць Int асноўных (несапраўднымі), 800 00:55:24,000 --> 00:55:27,000 і я збіраюся паставіць у маім вяртанні 0 ўніз тут на дне, 801 00:55:27,000 --> 00:55:31,000 і сказаць, што я хачу, каб выклікаць функцыю сумы. 802 00:55:31,000 --> 00:55:42,000 Я хачу сказаць, Int х = SUM (); 803 00:55:42,000 --> 00:55:46,000 Каб выкарыстаць функцыю сумы я павінен прайсці як у масіве, што я хачу, каб падвесці вынік 804 00:55:46,000 --> 00:55:51,000 і даўжыня масіва, так што гэта, дзе 805 00:55:51,000 --> 00:55:54,000 мяркуючы, што я быў масіў цэлых лікаў, 806 00:55:54,000 --> 00:56:12,000 сказаць, што я Int numbaz [] = 1, 2, 3, 807 00:56:12,000 --> 00:56:16,000 выгляд выкарыстання, які пасек сінтаксіс там жа, 808 00:56:16,000 --> 00:56:21,000 тое, што я хацеў бы зрабіць гэта ў суме я хацеў бы перайсці ў 809 00:56:21,000 --> 00:56:27,000 як numbaz і № 3 810 00:56:27,000 --> 00:56:30,000 распавесці суму функцыю "Добра, вось масіў, які я хачу, каб вы падвесці". 811 00:56:30,000 --> 00:56:34,000 "Вось яго памеру." 812 00:56:34,000 --> 00:56:39,000 Ці мае гэта сэнс? Я адказаў на ваша пытанне? 813 00:56:39,000 --> 00:56:42,000 >> Шмат у чым гэта адбываецца паралельная, што мы робім з асноўнымі 814 00:56:42,000 --> 00:56:44,000 калі ў нас ёсць аргументы каманднага радка. 815 00:56:44,000 --> 00:56:47,000 Такая праграма, як шыфр Цэзара, напрыклад, што неабходна 816 00:56:47,000 --> 00:56:53,000 аргументы каманднага радка не змог бы нічога зрабіць. 817 00:56:53,000 --> 00:56:57,000 Не ведаю, як для шыфравання, калі Вы не сказаць яму, што ключ да выкарыстання 818 00:56:57,000 --> 00:57:03,000 або калі вы не сказалі яму, што радок, якую вы хацелі зашыфраваць. 819 00:57:03,000 --> 00:57:08,000 Падказка для ўводу, гэта дзе ў нас ёсць 2 розных механізмаў 820 00:57:08,000 --> 00:57:14,000 для прыняцця ўваходзе ў ад карыстальніка, для прыняцця інфармацыі ад карыстальніка. 821 00:57:14,000 --> 00:57:19,000 Для задач 1 мы бачылі, гэта GetInt, GetString, GetFloat шляху 822 00:57:19,000 --> 00:57:26,000 навядзення для ўводу, і гэта завецца выкарыстаннем стандартнага ўваходнага струменя. 823 00:57:26,000 --> 00:57:28,000 Гэта крыху адрозніваецца. 824 00:57:28,000 --> 00:57:31,000 Гэта тое, што вы можаце зрабіць за адзін раз, у адрозненне ад 825 00:57:31,000 --> 00:57:35,000 калі вы запускаеце праграму, пры запуску праграма працуе. 826 00:57:35,000 --> 00:57:41,000 Аргументы каманднага радка ўсіх паказаных пры запуску праграмы, запушчанай. 827 00:57:41,000 --> 00:57:47,000 Мы змешвання двух з іх. 828 00:57:47,000 --> 00:57:52,000 Калі мы выкарыстоўваем аргументы функцыі, гэта так жа, як аргументы каманднага радка да асноўнага. 829 00:57:52,000 --> 00:57:56,000 Гэта пры выкліку функцыі вы павінны сказаць яму, 830 00:57:56,000 --> 00:58:05,000 што менавіта яму трэба для таго, каб выконваць свае задачы. 831 00:58:05,000 --> 00:58:08,000 Яшчэ адна добрая рэч, каб глядзець на, і я дам вам паглядзець на гэта ў вольны час, 832 00:58:08,000 --> 00:58:11,000 і яна была пакрыта у віктарыне, было гэта паняцце за рамкі 833 00:58:11,000 --> 00:58:15,000 і лакальных зменных у параўнанні з глабальнымі зменнымі. 834 00:58:15,000 --> 00:58:18,000 У звярнуць увагу на гэта. 835 00:58:18,000 --> 00:58:23,000 >> Цяпер, калі мы становімся на гэтую іншыя рэчы, 836 00:58:23,000 --> 00:58:27,000 3 тыдні мы пачалі гаварыць аб пошуку і сартаванні. 837 00:58:27,000 --> 00:58:32,000 Пошук і сартыроўка, па меншай меры, CS50, 838 00:58:32,000 --> 00:58:39,000 вельмі увядзеннем у некаторыя з найбольш тэарэтычная частка кампутарнай навукі. 839 00:58:39,000 --> 00:58:42,000 Праблема пошуку, задачы сартавання 840 00:58:42,000 --> 00:58:46,000 вялікі, кананічнай праблемы. 841 00:58:46,000 --> 00:58:52,000 Як вы знаходзіце вызначанага ліку ў масіве мільярдаў лікаў? 842 00:58:52,000 --> 00:58:55,000 Як знайсці канкрэтнае імя ў тэлефоннай кнізе 843 00:58:55,000 --> 00:58:59,000 , Якая захоўваецца на вашым ноўтбуку? 844 00:58:59,000 --> 00:59:04,000 І таму мы ўвядзем гэта паняцце асімптатычнага часу працы 845 00:59:04,000 --> 00:59:11,000 сапраўды колькасна, як доўга, як цяжка гэтыя праблемы з'яўляюцца, 846 00:59:11,000 --> 00:59:14,000 Як доўга яны прымаюць рашэнні. 847 00:59:14,000 --> 00:59:20,000 У, я лічу, 2011 віктарыне ёсць праблема, што я думаю вартасцяў 848 00:59:20,000 --> 00:59:27,000 пакрыццё вельмі хутка, што гэта, праблема 12. 849 00:59:27,000 --> 00:59:32,000 О не, гэта Omega. 850 00:59:32,000 --> 00:59:41,000 >> Тут мы гаворым аб максімальна магчымай час выканання 851 00:59:41,000 --> 00:59:46,000 для канкрэтнага алгарытму, а затым мінімальна магчымы час выканання. 852 00:59:46,000 --> 00:59:52,000 Гэта Omega і O ў рэчаіснасці з'яўляюцца толькі цэтлікі. 853 00:59:52,000 --> 00:59:55,000 Яны пазначэнняў клавіш для кажучы 854 00:59:55,000 --> 00:59:59,000 як хутка ў лепшым выпадку будзе наш алгарытм выканання, 855 00:59:59,000 --> 01:00:06,000 і як павольна ў горшым выпадку будзе наш алгарытм бегчы? 856 01:00:06,000 --> 01:00:10,000 Давайце зробім некалькі з іх, і яны былі таксама пакрытыя 857 01:00:10,000 --> 01:00:13,000 у кароткатэрміновай аб асімптатычнай пазначэнняў, якія я вельмі рэкамендую. 858 01:00:13,000 --> 01:00:17,000 Джэксан зрабіў вельмі добрую працу. 859 01:00:17,000 --> 01:00:23,000 З бінарны пошук, мы гаворым пра бінарнага пошуку як алгарытм, 860 01:00:23,000 --> 01:00:28,000 і мы звычайна кажам пра гэта з пункту гледжання яго вялікі O. 861 01:00:28,000 --> 01:00:30,000 Што такое Big O? 862 01:00:30,000 --> 01:00:34,000 Што такое мінімальна магчымы час выканання двайковага пошуку? 863 01:00:34,000 --> 01:00:36,000 [Студэнт] N ²? 864 01:00:36,000 --> 01:00:41,000 Зачыніць, я думаю, падобна на тое. 865 01:00:41,000 --> 01:00:43,000 Гэта нашмат хутчэй, чым гэта. 866 01:00:43,000 --> 01:00:45,000 [Студэнт] Двайковыя? >> Так, бінарны пошук. 867 01:00:45,000 --> 01:00:47,000 [Студэнт] Гэта часопіс з. 868 01:00:47,000 --> 01:00:49,000 Уваход п, так што ж ўвайсці п маеце на ўвазе? 869 01:00:49,000 --> 01:00:51,000 Гэта паловы гэтага кожнай ітэрацыі. 870 01:00:51,000 --> 01:00:56,000 Сапраўды, так і ў мінімальна магчымы выпадак, 871 01:00:56,000 --> 01:01:00,000 кажуць, што калі ў вас ёсць адсартаваны масіў 872 01:01:00,000 --> 01:01:08,000 мільён цэлых лікаў і нумар, які вы шукаеце 873 01:01:08,000 --> 01:01:14,000 гэта альбо першы элемент масіва ці самы апошні элемент масіва. 874 01:01:14,000 --> 01:01:18,000 Памятаеце, што алгарытм двайковага пошуку працы, гледзячы на ​​сярэдні элемент, 875 01:01:18,000 --> 01:01:21,000 бачачы калі гэта матч, які вы шукаеце. 876 01:01:21,000 --> 01:01:23,000 Калі гэта так, то вялікі, вы яго знайшлі. 877 01:01:23,000 --> 01:01:27,000 >> У лепшым выпадку, як хутка робіць выканання двайковага пошуку? 878 01:01:27,000 --> 01:01:29,000 [Студэнты] 1. 879 01:01:29,000 --> 01:01:32,000 1, гэта пастаяннае час, вялікая O 1. Так. 880 01:01:32,000 --> 01:01:36,000 [Студэнт] У мяне ёсць пытанне. Калі вы кажаце ўвайсці п, вы маеце на ўвазе ў адносінах да падставы 2, правільна? 881 01:01:36,000 --> 01:01:40,000 Так, так вось іншая рэч. 882 01:01:40,000 --> 01:01:44,000 Мы кажам, § п, і я думаю, калі я вучыўся ў сярэдняй школе 883 01:01:44,000 --> 01:01:48,000 Я заўсёды лічыў, што часопіс быў падставай 10. 884 01:01:48,000 --> 01:01:57,000 Так, ды так, увайсці падставы 2 звычайна гэта тое, што мы выкарыстоўваем. 885 01:01:57,000 --> 01:02:02,000 Зноў жа, вяртаючыся да бінарны пошук, калі вы шукаеце альбо 886 01:02:02,000 --> 01:02:05,000 элемента ў самым канцы ці элемент у самым пачатку, 887 01:02:05,000 --> 01:02:08,000 таму што вы пачынаеце ў сярэдзіне, і тады вы скідаюць 888 01:02:08,000 --> 01:02:13,000 залежнасці ад таго, палова не адказваюць крытэрам, што вы шукаеце, 889 01:02:13,000 --> 01:02:15,000 і вы пераходзіце да наступнага паловы і наступную палову і наступная палова. 890 01:02:15,000 --> 01:02:19,000 Калі я шукаю найбольшы элемент у мільён цэлых лікаў 891 01:02:19,000 --> 01:02:25,000 Я збіраюся ўдвая скараціць яго на самы часопіса 1 мільёна раз 892 01:02:25,000 --> 01:02:28,000 перш чым я, нарэшце, пратэставаць і ўбачыць, што элемент я шукаю 893 01:02:28,000 --> 01:02:33,000 знаходзіцца ў вялікай або ў вышэйшай індэкс масіва, 894 01:02:33,000 --> 01:02:38,000 і што будзе часопіс п, увайсці ў 1 млн. раз. 895 01:02:38,000 --> 01:02:40,000 >> Bubble роду. 896 01:02:40,000 --> 01:02:43,000 Хлопцы, вы памятаеце алгарытм пузырьковый сартавання? 897 01:02:43,000 --> 01:02:47,000 Кевін, вы можаце даць мне хуткае паўтор таго, што адбылося ў алгарытм сартавання бурбалка? 898 01:02:47,000 --> 01:02:50,000 [Кевін] У асноўным гэта праходзіць праз усе, што ў спісе. 899 01:02:50,000 --> 01:02:52,000 Ён глядзіць на першых двух. 900 01:02:52,000 --> 01:02:55,000 Калі першы больш, чым другой яго свопы іх. 901 01:02:55,000 --> 01:02:58,000 Затым ён параўноўвае другой і трэцяй, тое ж самае, свопы, 902 01:02:58,000 --> 01:03:00,000 Трэці і чацвёрты, на ўсім шляху ўніз. 903 01:03:00,000 --> 01:03:03,000 Вялікія нумары будуць ісці да канца. 904 01:03:03,000 --> 01:03:07,000 І пасля аднак многія завесы вы зрабілі. 905 01:03:07,000 --> 01:03:11,000 Сапраўды, так што Кевін сказаў, што мы будзем назіраць вялікія ліку 906 01:03:11,000 --> 01:03:15,000 Бурбалка да канца масіва. 907 01:03:15,000 --> 01:03:19,000 Напрыклад, вы пярэчыце ісці з намі праз гэтую Напрыклад, калі гэта наш масіў? 908 01:03:19,000 --> 01:03:21,000 [Кевін] Вы будзеце прымаць 2 і 3. 909 01:03:21,000 --> 01:03:23,000 3 больш, чым 2, так што вы памяняць іх месцамі. 910 01:03:23,000 --> 01:03:29,000 [Nate H.] Права, такім чынам, мы перастаўляць іх, і такім чынам мы атрымліваем 2, 3, 6, 4 і 9. 911 01:03:29,000 --> 01:03:31,000 [Кевін] Тады вы параўнайце 3 і 6. 912 01:03:31,000 --> 01:03:33,000 3 меньш, чым 6, так што вы пакінеце іх, 913 01:03:33,000 --> 01:03:37,000 і 6 і 4, трэба памяняць іх месцамі таму што 4 менш, чым 6. 914 01:03:37,000 --> 01:03:42,000 [Nate H.] Права, так што я атрымліваю 2, 3, 4, 6, 9. 915 01:03:42,000 --> 01:03:46,000 [Кевін] і 9 больш, чым 6, так што вы пакінеце яго. 916 01:03:46,000 --> 01:03:48,000 І вы вярнуліся б праз гэта зноў. 917 01:03:48,000 --> 01:03:50,000 >> [Nate H.] Ці магу я зрабіць у гэты момант? >> [Кевін] Няма 918 01:03:50,000 --> 01:03:52,000 І чаму я не рабіў у гэты момант? 919 01:03:52,000 --> 01:03:54,000 Таму што ён падобны на майго масіў адсартаваны. Я гляджу на гэта. 920 01:03:54,000 --> 01:03:57,000 [Кевін] прайсці праз гэта зноў і пераканайцеся, што няма больш свопы 921 01:03:57,000 --> 01:04:00,000 перш чым вы зможаце цалкам спыніць. 922 01:04:00,000 --> 01:04:04,000 Менавіта, таму трэба працягваць ісці да канца і пераканайцеся, што няма свопов 923 01:04:04,000 --> 01:04:06,000 што вы можаце зрабіць у гэтай кропцы. 924 01:04:06,000 --> 01:04:08,000 Гэта было сапраўды проста пашанцавала, як вы сказалі, што мы скончылі 925 01:04:08,000 --> 01:04:12,000 толькі таго, каб зрабіць 1 праход, і мы сартуюцца. 926 01:04:12,000 --> 01:04:16,000 Але для гэтага, у агульным выпадку, мы на самай справе павінны рабіць гэта зноў і зноў. 927 01:04:16,000 --> 01:04:20,000 І на самай справе, гэта быў прыклад лепшым выпадку, 928 01:04:20,000 --> 01:04:24,000 як мы бачылі ў праблеме. 929 01:04:24,000 --> 01:04:28,000 Мы бачылі, што найлепшае справа N. 930 01:04:28,000 --> 01:04:32,000 Мы пайшлі праз масіў 1 раз. 931 01:04:32,000 --> 01:04:35,000 Што гэта горшы магчымы выпадак для гэтага алгарытму? 932 01:04:35,000 --> 01:04:37,000 [Кевін] N ². 933 01:04:37,000 --> 01:04:41,000 І што гэта падобна? Што б масіў падобна, што б узяць п ² час? 934 01:04:41,000 --> 01:04:43,000 [Кевін] [неразборліва] адсартаваны. 935 01:04:43,000 --> 01:04:51,000 Менавіта, таму, калі ў мяне была маса 9, 7, 6, 5, 2, 936 01:04:51,000 --> 01:04:54,000 Спачатку 9 будзе бурбалка на ўсім шляху ўверх. 937 01:04:54,000 --> 01:04:59,000 Пасля 1 ітэрацыі мы б 7, 6, 5, 2, 9. 938 01:04:59,000 --> 01:05:07,000 Тады 7 будзе тапырыцца, 6, 5, 2, 7, 9, і гэтак далей, і гэтак далей. 939 01:05:07,000 --> 01:05:13,000 >> Мы павінны прайсці праз увесь масіў п раз, 940 01:05:13,000 --> 01:05:16,000 і вы можаце атрымаць трохі больш дакладным, чым гэта 941 01:05:16,000 --> 01:05:23,000 таму што як толькі мы пераехалі ў 9 ўсе, аж да апошняй у яго магчымае становішчы 942 01:05:23,000 --> 01:05:26,000 Мы ведаем, што мы ніколі не павінны параўноўвацца з гэтым элементам зноў. 943 01:05:26,000 --> 01:05:29,000 Як толькі мы пачынаем бурбалкі 7 да 944 01:05:29,000 --> 01:05:35,000 Мы ведаем, што мы можам спыніць толькі 7 з'яўляецца правам да 9 945 01:05:35,000 --> 01:05:37,000 паколькі мы ўжо па параўнанні з 9 да яе. 946 01:05:37,000 --> 01:05:46,000 Калі вы робіце гэта ў разумны спосаб гэта не па-сапраўднаму, я думаю, што шмат часу. 947 01:05:46,000 --> 01:05:49,000 Вы не збіраецеся, каб параўнаць усе магчымыя [неразборліва] камбінацыях 948 01:05:49,000 --> 01:05:55,000 кожны раз, калі вы праходзіце праз кожную ітэрацыю. 949 01:05:55,000 --> 01:05:59,000 Але ўсё ж, калі мы гаворым пра гэта верхняя мяжа мы кажам, што 950 01:05:59,000 --> 01:06:04,000 Вы глядзіце на п ² параўнання ўвесь шлях да канца. 951 01:06:04,000 --> 01:06:12,000 >> Давайце вернемся, і так як мы пачынаем атрымліваць крыху менш па часе 952 01:06:12,000 --> 01:06:15,000 Я б сказаў, вы павінны абавязкова прайсці астатняй частцы гэтай табліцы, 953 01:06:15,000 --> 01:06:17,000 запоўніць усе гэта. 954 01:06:17,000 --> 01:06:20,000 Падумайце аб прыкладах. Падумайце аб канкрэтных прыкладах. 955 01:06:20,000 --> 01:06:22,000 Гэта сапраўды зручна і карысна зрабіць. 956 01:06:22,000 --> 01:06:25,000 Намалюйце яго. 957 01:06:25,000 --> 01:06:28,000 Гэта свайго роду табліцу, як вы ідзяце праз ў галіне камп'ютэрных навук 958 01:06:28,000 --> 01:06:32,000 Вы павінны сапраўды пачаць ведаем, што гэтыя на памяць. 959 01:06:32,000 --> 01:06:34,000 Гэтыя віды пытанняў, якія вы атрымаеце ў інтэрв'ю. 960 01:06:34,000 --> 01:06:36,000 Гэта розныя рэчы, якія добра б ведаць, 961 01:06:36,000 --> 01:06:41,000 і думаць аб тых крайніх выпадках, сапраўды, высвятляючы, як падумаць аб 962 01:06:41,000 --> 01:06:45,000 ведаючы, што для пузырьковый сартавання ў самы непадыходны масіва 963 01:06:45,000 --> 01:06:52,000 сартаваць тым, што гэта той, які ў зваротным парадку. 964 01:06:52,000 --> 01:06:58,000 >> Паказальнікі. Давайце трохі пагаворым аб паказальніках. 965 01:06:58,000 --> 01:07:03,000 У апошнія некалькі хвілін тут мы маем 966 01:07:03,000 --> 01:07:11,000 Я ведаю, гэта тое, што разам з файлавага ўводу / высновы, што з'яўляецца адносна новым. 967 01:07:11,000 --> 01:07:19,000 Калі мы гаворым пра паказальнікаў па гэтай прычыне мы хочам казаць пра паказальніках 968 01:07:19,000 --> 01:07:24,000 Таму што, адзін, калі мы працуем у C 969 01:07:24,000 --> 01:07:33,000 мы сапраўды на даволі нізкім узроўні па параўнанні з большасцю сучасных моў праграмавання. 970 01:07:33,000 --> 01:07:38,000 Мы на самай справе здольны маніпуляваць зменнымі ў памяці, 971 01:07:38,000 --> 01:07:43,000 высветліць, дзе яны фактычна знаходзяцца ў межах нашай памяці. 972 01:07:43,000 --> 01:07:46,000 Пасля таго як вы пайшлі на ўзяцце аперацыйная сістэма класаў, якія вы ўбачыце, 973 01:07:46,000 --> 01:07:48,000 , Што гэта, зноў жа, свайго роду абстракцыяй. 974 01:07:48,000 --> 01:07:50,000 Гэта не на самай справе. 975 01:07:50,000 --> 01:07:52,000 У нас ёсць віртуальная памяць, што хавае гэтыя дэталі ад нас. 976 01:07:52,000 --> 01:07:58,000 >> Але цяпер можна выказаць здагадку, што калі ў вас ёсць праграма, 977 01:07:58,000 --> 01:08:02,000 Напрыклад, калі вы пачаць паказ шыфр Цэзара праграму 978 01:08:02,000 --> 01:08:06,000 Я пераключыцца назад на мой IPad сапраўды хутка- 979 01:08:06,000 --> 01:08:12,000 , Што ў самым пачатку вашай праграмы, калі ў вас, скажам, 980 01:08:12,000 --> 01:08:15,000 4 гігабайтамі аператыўнай памяці на вашым ноўтбуку, 981 01:08:15,000 --> 01:08:21,000 Вы атрымаеце адкладзеце гэты кавалак, і мы называем гэта RAM. 982 01:08:21,000 --> 01:08:25,000 І ён пачынаецца ў месца, дзе мы збіраемся называць 0, 983 01:08:25,000 --> 01:08:30,000 і заканчваецца ў месцы, якое мы будзем называць 4 гігабайт. 984 01:08:30,000 --> 01:08:37,000 Я сапраўды не магу пісаць. Чалавек, які ўзламаў. 985 01:08:37,000 --> 01:08:40,000 Калі ваша праграма выконвае 986 01:08:40,000 --> 01:08:44,000 Аперацыйная сістэма выразае аператыўнай памяці, 987 01:08:44,000 --> 01:08:51,000 і ён вызначае розныя сегменты для розных частак праграмы для жылля 988 01:08:51,000 --> 01:08:58,000 Тут, унізе гэтай галіне з'яўляецца своеасаблівай нічыйнай зямлі. 989 01:08:58,000 --> 01:09:02,000 Калі вы ідзяце крыху далей тут 990 01:09:02,000 --> 01:09:05,000 ў вас ёсць на самай справе месца, дзе 991 01:09:05,000 --> 01:09:09,000 Код для жыцця праграмы. 992 01:09:09,000 --> 01:09:13,000 Гэта фактычна двайковы код, выкананы файл, што на самой справе загружаецца ў памяць 993 01:09:13,000 --> 01:09:17,000 калі вы запусціце праграму, і яна жыве ў сегменце кода. 994 01:09:17,000 --> 01:09:22,000 І, як ваша праграма выконваецца працэсарам глядзіць на гэты сегмент кода 995 01:09:22,000 --> 01:09:24,000 каб высветліць, што з'яўляецца наступная інструкцыя? 996 01:09:24,000 --> 01:09:27,000 Якая наступная радок кода мне трэба выканаць? 997 01:09:27,000 --> 01:09:31,000 >> Там таксама сегмент дадзеных, і гэта, дзе гэтыя канстанты радкоў 998 01:09:31,000 --> 01:09:34,000 атрымаць захоўваецца, што вы выкарыстоўваеце. 999 01:09:34,000 --> 01:09:42,000 А потым далей уверх там гэта месца называецца кучай. 1000 01:09:42,000 --> 01:09:46,000 Мы доступу да памяці там з дапамогай таНос, 1001 01:09:46,000 --> 01:09:49,000 , А затым на самым версе вашай праграмы 1002 01:09:49,000 --> 01:09:52,000 ёсць стэк, 1003 01:09:52,000 --> 01:09:57,000 а вось дзе мы гулялі на працягу большай частцы пачатку. 1004 01:09:57,000 --> 01:09:59,000 Гэта не ў маштабе ці нічога. 1005 01:09:59,000 --> 01:10:03,000 Шмат гэта вельмі залежыць ад машыны, 1006 01:10:03,000 --> 01:10:10,000 залежыць ад аперацыйнай сістэмы, але гэта адносна, як усе атрымліваюць разбіты ўверх. 1007 01:10:10,000 --> 01:10:17,000 Калі вы запусціце праграму, і вы абвясьцеце зменную х 1008 01:10:17,000 --> 01:10:27,000 Я збіраюся зрабіць яшчэ адну скрынку ўніз, і гэта будзе аператыўнай памяці. 1009 01:10:27,000 --> 01:10:29,000 І я збіраюся паглядзець. 1010 01:10:29,000 --> 01:10:34,000 Мы будзем маляваць зубчастыя лініі, каб паказаць, гэта ўсяго толькі невялікая частка аператыўнай памяці 1011 01:10:34,000 --> 01:10:38,000 і не ўсё пра яго, як мы малюем на самым версе. 1012 01:10:38,000 --> 01:10:43,000 >> Калі я заяўляю, цэлая пераменная называецца х, 1013 01:10:43,000 --> 01:10:49,000 тое, што я на самой справе атрымаць адлюстраванне 1014 01:10:49,000 --> 01:10:54,000 , Якія захоўваюцца ў табліцы знакаў маёй праграмы 1015 01:10:54,000 --> 01:11:00,000 , Які злучае імя х у гэтую вобласць памяці, якую я намалявала 1016 01:11:00,000 --> 01:11:03,000 прама тут, паміж вертыкальнымі палосамі. 1017 01:11:03,000 --> 01:11:08,000 Калі ў мяне ёсць радок кода, у маёй праграме, якая кажа х = 7 1018 01:11:08,000 --> 01:11:15,000 Працэсар ведае "О, добра, я ведаю, што х жыццё ў гэтым месцы ў памяці." 1019 01:11:15,000 --> 01:11:25,000 "Я збіраюся пайсці далей і напісаць 7 існуе". 1020 01:11:25,000 --> 01:11:28,000 Як ён ведае, што размяшчэнне гэта ў памяці? 1021 01:11:28,000 --> 01:11:30,000 Добра, што ўсё гэта робіцца падчас кампіляцыі. 1022 01:11:30,000 --> 01:11:34,000 Кампілятар клапоціцца аб размеркаванні дзе кожная з зменных збіраецеся пайсці 1023 01:11:34,000 --> 01:11:40,000 і стварэнне спецыяльных адлюстраванне або, хутчэй, злучэнне кропак 1024 01:11:40,000 --> 01:11:43,000 паміж сімвалам і куды ён ідзе, імя зменнай 1025 01:11:43,000 --> 01:11:46,000 і дзе ён будзе жыць у памяці. 1026 01:11:46,000 --> 01:11:50,000 Але аказваецца, што мы сапраўды можам атрымаць да яго доступ у нашых праграмах. 1027 01:11:50,000 --> 01:11:55,000 Гэта становіцца важным, калі мы пачынаем казаць аб некаторых структур дадзеных, 1028 01:11:55,000 --> 01:11:58,000 якая з'яўляецца канцэпцыя, што мы збіраемся ўвесці пазней. 1029 01:11:58,000 --> 01:12:09,000 >> Але цяпер, як вы можаце ведаць, што я магу стварыць паказальнік на гэтае месца, х. 1030 01:12:09,000 --> 01:12:12,000 Напрыклад, я магу стварыць зменную-паказальнік. 1031 01:12:12,000 --> 01:12:16,000 Калі мы ствараем паказальнік зменнай мы выкарыстоўваем пазначэнне зоркі. 1032 01:12:16,000 --> 01:12:21,000 У гэтым выпадку, гэта кажа, што я збіраюся стварыць паказальнік на Int. 1033 01:12:21,000 --> 01:12:24,000 Гэта тыпу як і любы іншы. 1034 01:12:24,000 --> 01:12:27,000 Мы даем яму зменнай, як у, 1035 01:12:27,000 --> 01:12:32,000 , А затым пакласці яго роўным адрас, па адрасе. 1036 01:12:32,000 --> 01:12:38,000 У гэтым выпадку, мы можам усталяваць у паказваюць на х 1037 01:12:38,000 --> 01:12:43,000 прымаючы адрасе х, якія мы робім з гэтым амперсанда, 1038 01:12:43,000 --> 01:12:55,000 , А затым пакласці ў паказваюць на гэта. 1039 01:12:55,000 --> 01:12:59,000 Тое, што гэта па сутнасці робіць гэта, калі мы паглядзім на нашу RAM 1040 01:12:59,000 --> 01:13:02,000 гэта стварае асобную зменную. 1041 01:13:02,000 --> 01:13:04,000 Гэта будзе называць яго ў, 1042 01:13:04,000 --> 01:13:06,000 і калі гэты радок кода выконваецца 1043 01:13:06,000 --> 01:13:13,000 гэта на самай справе збіраецца стварыць невялікі паказальнік, які мы звычайна выкарыстоўваюць, як страла, 1044 01:13:13,000 --> 01:13:15,000 і ён усталёўвае ў паказваюць на х. 1045 01:13:15,000 --> 01:13:17,000 Так. 1046 01:13:17,000 --> 01:13:19,000 [Студэнт] Калі х гэта ўжо паказальнік, вы б проста зрабіць 1047 01:13:19,000 --> 01:13:22,000 Int * у = х, замест таго, амперсанда? 1048 01:13:22,000 --> 01:13:24,000 Так. 1049 01:13:24,000 --> 01:13:27,000 Калі х гэта ўжо паказальнік, то вы можаце ўсталяваць 2 паказальнікаў роўныя адзін аднаму, 1050 01:13:27,000 --> 01:13:30,000 У гэтым выпадку ў не будзе ўказваць на х, 1051 01:13:30,000 --> 01:13:34,000 але гэта будзе паказваць на любой х вызначае. 1052 01:13:34,000 --> 01:13:37,000 На жаль, мы па-за часам. 1053 01:13:37,000 --> 01:13:44,000 >> Што я магу сказаць на дадзены момант, мы можам пагаварыць пра гэта ў аўтаномным рэжыме, 1054 01:13:44,000 --> 01:13:49,000 Але я б сказаў, пачаць працаваць праз гэтую праблему, № 14. 1055 01:13:49,000 --> 01:13:53,000 Вы можаце ўбачыць там ужо крыху запоўнены для вас тут. 1056 01:13:53,000 --> 01:13:57,000 Вы можаце бачыць, што, калі мы заяўляем, 2 паказальнікаў, Int * х * і ў, 1057 01:13:57,000 --> 01:14:01,000 і заўважым, што паказвае * Побач з зменнай было тое, што было зроблена ў мінулым годзе. 1058 01:14:01,000 --> 01:14:05,000 Аказваецца, што гэта падобна на тое, што мы робім у гэтым годзе. 1059 01:14:05,000 --> 01:14:11,000 Гэта не мае значэння, дзе вы пішаце *, калі вы аб'яўленні паказальніка. 1060 01:14:11,000 --> 01:14:17,000 Але мы напісалі * побач з тыпам 1061 01:14:17,000 --> 01:14:24,000 таму што гэта робіць яго вельмі ясна, што вы аб'яўленні зменнай-паказальніка. 1062 01:14:24,000 --> 01:14:27,000 Вы можаце бачыць, што абвяшчэнне 2 паказальніка дае нам 2 скрынкі. 1063 01:14:27,000 --> 01:14:31,000 Вось калі мы ўсталёўваем х роўна таНос 1064 01:14:31,000 --> 01:14:34,000 што гэта кажа ў адмене памяці ў кучы. 1065 01:14:34,000 --> 01:14:41,000 Гэты маленькі скрыню прама тут, гэты круг, знаходзіцца ў кучу. 1066 01:14:41,000 --> 01:14:43,000 X паказвае на гэта. 1067 01:14:43,000 --> 01:14:46,000 Заўважым, што ў яшчэ не паказваючы ні да чаго. 1068 01:14:46,000 --> 01:14:50,000 Каб атрымаць памяць для захоўвання ліку 42 у х 1069 01:14:50,000 --> 01:14:55,000 мы будзем выкарыстоўваць тое, што абазначэнне? 1070 01:14:55,000 --> 01:14:59,000 [Студэнт] * х = 42. 1071 01:14:59,000 --> 01:15:01,000 Сапраўды, * х = 42. 1072 01:15:01,000 --> 01:15:06,000 Гэта азначае, прытрымлівайцеся за стрэлкай і кінуць 42 у там. 1073 01:15:06,000 --> 01:15:09,000 Тут, дзе мы ўсталёўваем у і х мы ў паказваючы на ​​х. 1074 01:15:09,000 --> 01:15:13,000 Зноў жа, гэта проста падабаецца тое, што Кевін сказаў, дзе мы ўсталёўваем у роўна х. 1075 01:15:13,000 --> 01:15:15,000 Y не паказвае на х. 1076 01:15:15,000 --> 01:15:19,000 Хутчэй, гэта паказвае на тое, што X паказвае на, а таксама. 1077 01:15:19,000 --> 01:15:24,000 >> І, нарэшце, у апошнім акне ёсць 2 магчымых рэчаў, якія мы маглі б зрабіць. 1078 01:15:24,000 --> 01:15:28,000 Адзін з іх мы маглі б сказаць * х = 13. 1079 01:15:28,000 --> 01:15:33,000 Іншая справа, мы маглі б сказаць, Алекс, вы ведаеце, што мы маглі б зрабіць тут? 1080 01:15:33,000 --> 01:15:37,000 Можна сказаць, * х = 13 ці- 1081 01:15:37,000 --> 01:15:41,000 [Студэнт] Можна сказаць, што Int. 1082 01:15:41,000 --> 01:15:45,000 [Nate H.] Калі гэта былі прылічаныя да Int зменная, якую мы маглі б зрабіць гэта. 1083 01:15:45,000 --> 01:15:49,000 Мы маглі б таксама сказаць, у * = 13, таму што яны абодва паказваюць на тое ж месца, 1084 01:15:49,000 --> 01:15:51,000 , Каб мы маглі выкарыстоўваць або зменную туды дабрацца. 1085 01:15:51,000 --> 01:15:56,000 Так. >> [Студэнт] Што б гэта выглядала, калі мы проста скажам Int х 13? 1086 01:15:56,000 --> 01:16:00,000 Гэта было б абвясціць новую зменную х, якая не будзе працаваць. 1087 01:16:00,000 --> 01:16:04,000 Мы павінны былі б сутыкнення, таму што мы абвясцілі х, каб быць паказальнікам тут. 1088 01:16:04,000 --> 01:16:10,000 [Студэнт] Калі мы проста павінны былі гэта заяву само па сабе тое, што гэта будзе выглядаць з пункту гледжання круга? 1089 01:16:10,000 --> 01:16:14,000 Калі б мы мелі х = 13, то мы павінны былі б скрынку, і замест таго, каб стрэлка 1090 01:16:14,000 --> 01:16:16,000 выходзячы з акна мы зрабіць гэта, як толькі 13. 1091 01:16:16,000 --> 01:16:19,000 [Студэнт] у поле. Добра. 1092 01:16:19,000 --> 01:16:24,000 >> Дзякуй за ўвагу і ўдачы на ​​Quiz 0. 1093 01:16:24,000 --> 01:16:28,000 [CS50.TV]