1 00:00:00,000 --> 00:00:06,180 2 00:00:06,180 --> 00:00:07,820 >> Джэйсан Хиршхорн: Сардэчна запрашаем А5, усё. 3 00:00:07,820 --> 00:00:11,270 У нас ёсць захапляльная тыдзень наперадзе нас, у асноўным, таму што ёсць так шмат новага 4 00:00:11,270 --> 00:00:12,350 сутыкаецца ў гэтым пакоі. 5 00:00:12,350 --> 00:00:12,920 Гэта выдатна. 6 00:00:12,920 --> 00:00:15,740 Многія з вас тут выпадкова, які яшчэ лепш. 7 00:00:15,740 --> 00:00:18,220 Так што, спадзяюся вы будзеце трымаць далучыліся да нас. 8 00:00:18,220 --> 00:00:20,220 >> На гэтым тыдні мы збіраемся выдаткаваць асноўная частка раздзеле 9 00:00:20,220 --> 00:00:21,870 рыхтуецца да віктарыны. 10 00:00:21,870 --> 00:00:26,580 Так за нашым парадку дня, мы збіраемся казаць трохі аб рэсурсах для класа, 11 00:00:26,580 --> 00:00:30,350 але і для віктарыны, а затым, зноў жа, марнаваць вялікую частку класа размовы 12 00:00:30,350 --> 00:00:31,390 аб пытаннях. 13 00:00:31,390 --> 00:00:33,900 Пасля таго, як мы скончылі адказваць на вашы пытанні, або калі вашы пытанні 14 00:00:33,900 --> 00:00:39,010 натуральна, прывесці нас да некаторага кадавання, я ёсць праблемы ўзоры з прамежкавых выбарах 15 00:00:39,010 --> 00:00:43,180 мінулае, якое мы будзем кадзіраваць жывуць у раздзеле разам, што таксама выхоўваць некаторыя іншыя 16 00:00:43,180 --> 00:00:45,420 добрыя тэмы для пакрыцця. 17 00:00:45,420 --> 00:00:48,280 >> Такім чынам, спачатку, як мы прайшлі праз для апошнія пару тыдняў, каб нагадаць вам, 18 00:00:48,280 --> 00:00:51,700 хлопцы, ёсць тона рэсурсаў па дадзеным курсе. 19 00:00:51,700 --> 00:00:55,020 Многія з іх будзе неверагодна карысным для вас, як вы будзеце працягваць 20 00:00:55,020 --> 00:00:57,280 вучыцца на віктарыне 0, таму што гэта ў аўторак днём. 21 00:00:57,280 --> 00:00:59,630 Так што ўсё з вас былі вучыцца на некаторы час. 22 00:00:59,630 --> 00:01:02,640 >> Ёсць канспекты лекцый і крыніца код, які вы павінны 23 00:01:02,640 --> 00:01:04,050 абавязкова праверыць. 24 00:01:04,050 --> 00:01:05,019 Глядзець шорты. 25 00:01:05,019 --> 00:01:07,470 Праверце study.cs50.net. 26 00:01:07,470 --> 00:01:11,770 А потым, пералічаныя ніжэй, шэраг іншых рэсурсаў. 27 00:01:11,770 --> 00:01:14,020 >> Зноў жа, віктарына 0 заўтра на 1 гадзіну. 28 00:01:14,020 --> 00:01:18,230 Калі вы яшчэ не зрабілі гэтага, праверце па-за Аб Віктарына 0 дакумента аб 29 00:01:18,230 --> 00:01:21,370 Хатняя старонка Вядома, каб высветліць, дзе вы прымаючы віктарыны. 30 00:01:21,370 --> 00:01:25,770 Віктарына пачынаецца ў 01:10 і заканчваецца 70 хвілін праз. 31 00:01:25,770 --> 00:01:29,610 Так што калі вы толькі пасля 1:10, вы збіраецца атрымаць, што значна менш хвілін 32 00:01:29,610 --> 00:01:30,940 чым 70 прайсці тэст. 33 00:01:30,940 --> 00:01:33,570 Таму пераканайцеся, што вы там на час. 34 00:01:33,570 --> 00:01:38,690 Калі вы пашырэнне студэнт або ёсць некаторыя іншыя меркаванні тэставання, гэта 35 00:01:38,690 --> 00:01:40,400 можа быць не ў 1:00 заўтра. 36 00:01:40,400 --> 00:01:43,540 Але, зноў жа, праверыць Аб Віктарына 0 дакумент, каб пераканацца, што вы ведаеце, калі 37 00:01:43,540 --> 00:01:44,760 вы прымаеце віктарыну. 38 00:01:44,760 --> 00:01:46,440 Я напісаў 75 хвілін тут. 39 00:01:46,440 --> 00:01:48,580 Я думаю, што гэта права, а не 70. 40 00:01:48,580 --> 00:01:53,420 >> Яна ахоплівае ўвесь матэрыял ад тыдня 0 лекцыю на мінулым тыдні ў сераду. 41 00:01:53,420 --> 00:01:59,350 І зноў жа, для гэтай віктарыне, за што дакумент, вы атрымліваеце адзін двухбаковы і 8 42 00:01:59,350 --> 00:02:03,770 1/2 на 11 аркушы паперы, які вы атрымліваеце выкарыстоўваць у якасці нататак падчас віктарыны. 43 00:02:03,770 --> 00:02:08,570 Многія людзі, калі не большасць людзей, маюць выявілі, што адзіны самы карысны спосаб 44 00:02:08,570 --> 00:02:11,970 вучыцца для віктарыны з'яўляецца зрабіць даследаванне ліст, 45 00:02:11,970 --> 00:02:13,730 адзін-тэнт, сваіх уласных. 46 00:02:13,730 --> 00:02:17,710 Так што глядзіце на апошнія з іх, калі вы бачылі ў мінулым тыя. 47 00:02:17,710 --> 00:02:19,960 Звярніцеся да сяброў, каб бачыць тое, што яны змяшчаюць на іх. 48 00:02:19,960 --> 00:02:23,610 >> Але рукі ўніз, лепшы спосаб вы можаце даследаванне, каб прайсці праз усе, і 49 00:02:23,610 --> 00:02:26,530 звесці яго да таго, што павінны ці не належыць на гэтым лісце 50 00:02:26,530 --> 00:02:30,570 папера, таму што гэта проста вельмі карысны спосаб для вас, каб пераканацца, 51 00:02:30,570 --> 00:02:33,620 вы збіраецеся праз усё і трохі знаёмыя з ім. 52 00:02:33,620 --> 00:02:36,690 Большасць людзей, мы знаходзім, хоць яны ўжо ліст паперы сядзіць 53 00:02:36,690 --> 00:02:39,840 побач з імі на віктарыне, не ўключайце да яго, таму што, зноў жа, што вельмі 54 00:02:39,840 --> 00:02:43,290 Працэс праходжання інфармацыі дапамагло ім навучыцца. 55 00:02:43,290 --> 00:02:45,370 >> Хто-небудзь ёсць якія-небудзь пытанні аб віктарыне 0? 56 00:02:45,370 --> 00:02:50,120 57 00:02:50,120 --> 00:02:51,450 Мае ўсіх - 58 00:02:51,450 --> 00:02:53,230 Я не збіраюся рабіць ўзняццем рук. 59 00:02:53,230 --> 00:02:53,550 Не бярыце ў галаву. 60 00:02:53,550 --> 00:02:54,790 Я збіраўся спытаць, хто пачаў вывучаць. 61 00:02:54,790 --> 00:02:58,360 Але я не хачу, каб вас усё не падняць рукі. 62 00:02:58,360 --> 00:03:01,290 Так як я ўжо сказаў - так, Аві, ісці наперад. 63 00:03:01,290 --> 00:03:04,205 >> AVI: Што будзе карысная рэч паставіць на адну пэйджар? 64 00:03:04,205 --> 00:03:05,875 >> СТУДЭНЦКАЯ: Гэта залежыць ад вас. 65 00:03:05,875 --> 00:03:08,210 >> Джэйсан Хиршхорн: Вы атрымліваеце выкарыстоўваць сваё меркаваньне. 66 00:03:08,210 --> 00:03:13,220 Карысныя рэчы, каб пакласці на адну пэйджар, калі вы не ўпэўненыя аб вялікім O 67 00:03:13,220 --> 00:03:17,510 выканання розных відаў пошуку і віды, лічы гэта на там у 68 00:03:17,510 --> 00:03:18,760 зручна дэндзі дыяграмы. 69 00:03:18,760 --> 00:03:22,250 Такім чынам, калі вы папрасілі, каб на віктарына, вам не трэба, каб паспрабаваць высветліць 70 00:03:22,250 --> 00:03:23,560 гэта па-за або прычына праз выканання. 71 00:03:23,560 --> 00:03:24,730 Вы можаце проста скапіяваць яго. 72 00:03:24,730 --> 00:03:28,320 Калі вы паглядзіце на віктарына мінулым, шмат раз, там працуе часу пытанні. 73 00:03:28,320 --> 00:03:34,150 Так што было б прыкладам добрай рэч, каб паставіць на свой адной пэйджар. 74 00:03:34,150 --> 00:03:37,450 >> Іншыя добрыя рэчы, каб надзець, калі вы блытаюць аб тым, каб абвясціць 75 00:03:37,450 --> 00:03:40,570 Функцыя або тое, што розныя часткі Аб'яву функцыі з'яўляюцца, напісаць 76 00:03:40,570 --> 00:03:43,400 што ні на ёсць, агульная версія а затым, магчыма прыклад. 77 00:03:43,400 --> 00:03:47,290 Калі вы збянтэжаныя аб паказальніках, схема, як паказальнікі праца 78 00:03:47,290 --> 00:03:48,660 верагодна, вельмі карысна. 79 00:03:48,660 --> 00:03:52,440 Калі вы збянтэжаныя аб рэкурсіі, а паспрабаваць рэкурсіўнага функцыю там 80 00:03:52,440 --> 00:03:54,980 можа таксама апынуцца сапраўды карыснымі. 81 00:03:54,980 --> 00:03:57,290 Ці значыць гэта, даць вам некаторыя ідэі? 82 00:03:57,290 --> 00:04:01,820 >> AVI: Вы павінны разумець, Увесь працэс кампіляцыі, як 83 00:04:01,820 --> 00:04:03,220 , Як гэта ўсё працуе? 84 00:04:03,220 --> 00:04:06,620 >> Джэйсан Хиршхорн: Усе , Якая была пакрыта мог 85 00:04:06,620 --> 00:04:08,060 паказаць на віктарыне. 86 00:04:08,060 --> 00:04:08,930 Пытанні - 87 00:04:08,930 --> 00:04:11,300 але зноў жа, некаторыя рэчы будуць ўзважаны ступені, чым іншыя. 88 00:04:11,300 --> 00:04:14,330 Некаторыя рэчы прыдумалі зноў і зноў у класе, у 89 00:04:14,330 --> 00:04:15,590 лекцыя, і падзел. 90 00:04:15,590 --> 00:04:17,220 Іншыя рэчы не маюць прыдумаць, што часта. 91 00:04:17,220 --> 00:04:22,900 >> Мы шмат казалі аб # уключыць і -Л-тое і тое, што тыя, значыць, у 92 00:04:22,900 --> 00:04:24,390 працэс кампіляцыі. 93 00:04:24,390 --> 00:04:29,120 Мы шмат казалі пра GDB, чапляцца, гэтыя розныя сцягі, якія мы выкарыстоўваем, калі 94 00:04:29,120 --> 00:04:33,100 мы збіраем і тое, і тое, што make15, напрыклад, сапраўды 95 00:04:33,100 --> 00:04:34,510 азначае і сапраўды робіць. 96 00:04:34,510 --> 00:04:38,110 Мы не будзем казаць, як шмат пра кожны крок у 97 00:04:38,110 --> 00:04:39,240 працэс кампіляцыі. 98 00:04:39,240 --> 00:04:40,410 У нас яшчэ казалі пра гэта. 99 00:04:40,410 --> 00:04:42,550 Так што гэта яшчэ тое, што вы павінны быць знаёмыя з. 100 00:04:42,550 --> 00:04:44,610 Але зноў жа, мы не збіраемся быць - 101 00:04:44,610 --> 00:04:49,140 рэчы, якія прыходзяць часцей, у класе , Хутчэй за ўсё, каб прыдумаць больш 102 00:04:49,140 --> 00:04:52,495 часта і больш моцна ўзважаны на віктарыне. 103 00:04:52,495 --> 00:04:53,280 >> Крута. 104 00:04:53,280 --> 00:04:54,580 Любыя іншыя пытанні аб віктарыне 0? 105 00:04:54,580 --> 00:04:57,660 106 00:04:57,660 --> 00:05:00,050 >> ОК, так што я паклаў спіс тэмы на дошцы. 107 00:05:00,050 --> 00:05:01,550 Я прайшоў праз вучэбную праграму. 108 00:05:01,550 --> 00:05:07,340 Я прайшоў праз раздзеле агляду ад учора ўвечары, і гэтыя слайды прыдумаць 109 00:05:07,340 --> 00:05:13,710 з няпоўнага спісу пытанняў , Калі мы разгледзелі да гэтага часу ў CS50 110 00:05:13,710 --> 00:05:16,800 і рэчы, якія маглі б з'яўляюцца на віктарыне. 111 00:05:16,800 --> 00:05:19,900 Так што я не збіраюся прайсці праз кожны з іх. 112 00:05:19,900 --> 00:05:22,370 Гэта зойме значна больш часу, чым мы маем цяпер. 113 00:05:22,370 --> 00:05:26,880 Але я паставіць гэта тут, мы спадзяемся прабежку ваша памяць, як да рэчаў, якія могуць 114 00:05:26,880 --> 00:05:28,420 быць ці не быць так добра знаёмыя з вамі. 115 00:05:28,420 --> 00:05:32,850 >> І я хацеў бы правесці большую частку раздзел адказваючы на ​​вашы пытанні аб 116 00:05:32,850 --> 00:05:35,130 Гэтыя тэмы, тэмы, якія тут не разглядаюцца. 117 00:05:35,130 --> 00:05:36,130 Мы можам напісаць псевдокод. 118 00:05:36,130 --> 00:05:40,010 Мы можам напісаць рэальны код пераканацца, што вы - 119 00:05:40,010 --> 00:05:44,280 Я магу адказаць на ваша пытанне і дапамагчы усе прынцыпова зразумець 120 00:05:44,280 --> 00:05:48,330 Многія з гэтых пытанняў, так што вы будзеце адчуваць сябе падрыхтаваны і камфортна будзе ў 121 00:05:48,330 --> 00:05:50,150 віктарына заўтра. 122 00:05:50,150 --> 00:05:52,300 Так што чытайце па спісе. 123 00:05:52,300 --> 00:05:54,780 Вы, спадзяюся, прыйшлі да падзелу з некаторымі пытаннямі, а таксама. 124 00:05:54,780 --> 00:05:58,480 Калі вы будзеце гатовыя, падніміце руку і мы пачнем. 125 00:05:58,480 --> 00:06:01,590 126 00:06:01,590 --> 00:06:05,200 >> Майце на ўвазе, пытанні ў вас ёсць, няма дурных пытанняў. 127 00:06:05,200 --> 00:06:06,250 Мы чулі, што шмат. 128 00:06:06,250 --> 00:06:09,490 І пытанні ў вас ёсць, я гатовы зрабіць стаўку, многім іншым людзям і 129 00:06:09,490 --> 00:06:11,740 сяджу тут і глядзець онлайн ёсць таксама. 130 00:06:11,740 --> 00:06:13,770 Такім чынам, вы можаце толькі дапамагчы людзям , Задаючы пытанні. 131 00:06:13,770 --> 00:06:15,070 Маркус. 132 00:06:15,070 --> 00:06:18,040 >> Маркус: Паміж стэка і куча, ці ёсць папярэдне выдзелена 133 00:06:18,040 --> 00:06:22,880 працэнт памяці, які вызначаецца як гэта для стэка або кучы? 134 00:06:22,880 --> 00:06:25,010 Ці як гэта працуе, дакладна? 135 00:06:25,010 --> 00:06:26,230 >> Джэйсан Хиршхорн: Добры пытанне. 136 00:06:26,230 --> 00:06:28,640 Я збіраюся назад прасачыць няшмат. 137 00:06:28,640 --> 00:06:30,910 Ці ўсіх - 138 00:06:30,910 --> 00:06:31,660 калі ласка, будзьце сумленнымі. 139 00:06:31,660 --> 00:06:34,130 Я ведаю, я прашу вас, каб падняць ваш рукой перад сваімі аднагодкамі. 140 00:06:34,130 --> 00:06:38,510 Але ёсць людзі, якія лічаць, нязручна са стэкам і кучай 141 00:06:38,510 --> 00:06:42,980 і хацелі б перайсці, што і што тыя, значыць? 142 00:06:42,980 --> 00:06:43,880 Падніміце руку, калі - 143 00:06:43,880 --> 00:06:44,420 ОК. 144 00:06:44,420 --> 00:06:45,120 Дзякуй. 145 00:06:45,120 --> 00:06:48,420 Такім чынам, мы збіраемся пайсці стос і куча сапраўды хутка, а затым 146 00:06:48,420 --> 00:06:50,370 перайсці ў адказваючы на ​​ваша пытанне. 147 00:06:50,370 --> 00:06:58,250 >> Так што, калі мы выцягнуць скрынку прадстаўляць памяці на вашым кампутары, што некаторыя 148 00:06:58,250 --> 00:07:02,160 рэчы, якія ідуць у гэтым полі? 149 00:07:02,160 --> 00:07:03,630 Галоўная. 150 00:07:03,630 --> 00:07:04,020 Асноўная функцыя. 151 00:07:04,020 --> 00:07:05,890 Дзе галоўны ісці? 152 00:07:05,890 --> 00:07:08,090 >> СТУДЭНЦКАЯ: [неразборліва]. 153 00:07:08,090 --> 00:07:09,390 >> Джэйсан Хиршхорн: Так мы будзем пакласці галоўны тут. 154 00:07:09,390 --> 00:07:12,180 155 00:07:12,180 --> 00:07:13,430 Што яшчэ ідзе ў гэтым полі? 156 00:07:13,430 --> 00:07:16,000 157 00:07:16,000 --> 00:07:18,140 >> СТУДЭНЦКАЯ: Функцыі, якія вы называеце. 158 00:07:18,140 --> 00:07:19,020 >> Джэйсан Хиршхорн: Функцыі што мы называем. 159 00:07:19,020 --> 00:07:20,440 І куды яны ідуць? 160 00:07:20,440 --> 00:07:21,300 >> Студэнт: У стэку. 161 00:07:21,300 --> 00:07:22,380 >> Джэйсан Хиршхорн: Яны перайсці ў стэку. 162 00:07:22,380 --> 00:07:27,350 Так што мы збіраемся называць гэта рэч тут стэк. 163 00:07:27,350 --> 00:07:31,880 І наверсе, у нас ёсць куча. 164 00:07:31,880 --> 00:07:35,450 Так памяць ня скрынка гэтак жа, як гэта. 165 00:07:35,450 --> 00:07:37,330 Але гэта на самай справе вельмі падобныя. 166 00:07:37,330 --> 00:07:40,840 Гэта збіраецца быць шмат каробак над і больш, у залежнасці ад памеру вашага 167 00:07:40,840 --> 00:07:43,730 кампутар або наколькі вялікая ваша памяць. 168 00:07:43,730 --> 00:07:46,950 >> У катыровак канец цытаты "дна" гэта стэк. 169 00:07:46,950 --> 00:07:50,880 І ёсць некалькі рэчаў, , Якія ідуць у стэк. 170 00:07:50,880 --> 00:07:53,840 А тыя, залежыць ад функцый у вас ёсць у вашым кодзе. 171 00:07:53,840 --> 00:07:57,780 У вас заўсёды ёсць адна функцыя ў вашым Код называюць асноўным, так што заўсёды 172 00:07:57,780 --> 00:08:00,480 раздзел тут, у стэк прысвечана асноўным. 173 00:08:00,480 --> 00:08:03,980 >> Гэтыя часткі ў стэку называюцца кадры стэка. 174 00:08:03,980 --> 00:08:09,580 Пры выкліку іншай функцыі, скажам асноўны выклікае бінарную функцыю пошуку, 175 00:08:09,580 --> 00:08:11,075 мы ставім іншую рамку ў стэку. 176 00:08:11,075 --> 00:08:13,830 177 00:08:13,830 --> 00:08:17,320 У прыватнасці, мы збіраемся ахвяраваць частку памяці на нашым 178 00:08:17,320 --> 00:08:22,960 кампутар для захоўвання бінарны пошук Гадзінны зменныя і запусціць выкананы файл 179 00:08:22,960 --> 00:08:24,150 Пошук кода. 180 00:08:24,150 --> 00:08:26,810 >> Так мы называем бінарны пошук. 181 00:08:26,810 --> 00:08:30,440 182 00:08:30,440 --> 00:08:33,340 У гэтым кавалку памяці, мы збіраемся для захоўвання сваіх лакальных зменных. 183 00:08:33,340 --> 00:08:35,270 Мы збіраемся захоўваць свае Printf званкі. 184 00:08:35,270 --> 00:08:38,159 Што б ні здарылася, што функцыя будуць захоўвацца прама там. 185 00:08:38,159 --> 00:08:40,350 Двайковага пошуку збіраецца выконваць. 186 00:08:40,350 --> 00:08:42,210 Яна збіраецца завяршыць выкананне. 187 00:08:42,210 --> 00:08:47,450 Што такое слова ў C, што азначае што функцыя павінна 188 00:08:47,450 --> 00:08:49,306 завяршыць яе выкананне? 189 00:08:49,306 --> 00:08:50,040 >> СТУДЭНЦКАЯ: Вяртанне. 190 00:08:50,040 --> 00:08:50,870 >> Джэйсан Хиршхорн: Вяртанне. 191 00:08:50,870 --> 00:08:53,230 Таму, калі вы бачыце аператар вяртання, канцы функцыі 192 00:08:53,230 --> 00:08:54,350 калі яна трапляе, што. 193 00:08:54,350 --> 00:08:56,740 Так бінарны пошук ударыць яго вяртання. 194 00:08:56,740 --> 00:09:01,360 Гэтая частка памяці будзе істотна быць вызваленыя да. 195 00:09:01,360 --> 00:09:03,510 А галоўнае вернецца да выканання. 196 00:09:03,510 --> 00:09:07,240 Так галоўны прыпыніць дзе б было, выклік бінарны пошук, атрымаць якое вяртаецца значэння, 197 00:09:07,240 --> 00:09:08,700 і працягнуць выкананне. 198 00:09:08,700 --> 00:09:10,840 Гэты стэк кадра сыдзе. 199 00:09:10,840 --> 00:09:14,810 >> Калі мы называем рэкурсіўнага функцыю, якая гэта функцыя, якая называе сябе больш 200 00:09:14,810 --> 00:09:18,480 і больш, мы маглі б атрымаць - сказаць, што мы зрабіў бінарны пошук рэкурсіўна. 201 00:09:18,480 --> 00:09:21,520 Мы маглі б атрымаць бінарны пошук версію адзін, бінарны пошук двух, бінарны пошук 202 00:09:21,520 --> 00:09:24,090 тры, бінарны пошук чатыры, бінарны пошук пяць. 203 00:09:24,090 --> 00:09:27,950 А потым гэтая апошняя бінарны пошук пяць выйдзе на базавы варыянт, і стэк 204 00:09:27,950 --> 00:09:31,010 кадры будуць вяртацца і працягваць закрыццё пакуль мы не вернемся да асноўнай. 205 00:09:31,010 --> 00:09:32,530 Мы можам пайсці па рэкурсіі ў трохі. 206 00:09:32,530 --> 00:09:35,530 Але ўсё гэта значыць, калі вы выкліку некалькіх функцый адначасова, 207 00:09:35,530 --> 00:09:39,250 там будзе некалькі стэка кадраў у стэку. 208 00:09:39,250 --> 00:09:42,900 >> Куча, з іншага боку, да тут, не для функцый, 209 00:09:42,900 --> 00:09:44,380 ня для лакальных зменных. 210 00:09:44,380 --> 00:09:48,920 Гэта для дынамічна размяркоўваецца зменныя. 211 00:09:48,920 --> 00:09:57,210 Такім чынам, гэтыя зменныя, якія могуць быць ініцыялізацыі ў любой асноўны або 212 00:09:57,210 --> 00:09:58,640 функцыянаваць, што асноўныя выклікі. 213 00:09:58,640 --> 00:10:00,790 Нідзе ў кодзе, яны можна ініцыялізаваць. 214 00:10:00,790 --> 00:10:04,360 І для ініцыялізацыі дынамічна размешчаная пераменная. 215 00:10:04,360 --> 00:10:06,970 Якую функцыю ў C мы выкарыстоўваем? 216 00:10:06,970 --> 00:10:07,600 >> СТУДЭНЦКАЯ: Malloc. 217 00:10:07,600 --> 00:10:09,240 >> Джэйсан Хиршхорн: Malloc. 218 00:10:09,240 --> 00:10:10,800 Вы называеце Таноса. 219 00:10:10,800 --> 00:10:12,260 Вы атрымліваеце прастору памяці. 220 00:10:12,260 --> 00:10:15,020 І гэта прастора памяці з'яўляецца ў кучы. 221 00:10:15,020 --> 00:10:18,840 І гэта прастора памяці застаецца там, пакуль не тэлефанаваць бясплатна. 222 00:10:18,840 --> 00:10:22,670 >> Так дынамічна выдзеленыя зменныя ў куча будзе існаваць да таго часу, як вы 223 00:10:22,670 --> 00:10:25,250 хачу, каб яны існуюць, і яны не будуць не пайду, пакуль вы відавочна 224 00:10:25,250 --> 00:10:26,760 сказаць ім, каб сысці. 225 00:10:26,760 --> 00:10:29,670 Вы можаце стварыць іх у адной функцыі. 226 00:10:29,670 --> 00:10:31,930 Стэк, якія функцыянуюць у рамка сыдзе. 227 00:10:31,930 --> 00:10:35,490 Але, што пераменная будзе па-ранейшаму існуюць ў кучы, пакуль не будзе вызвалены, 228 00:10:35,490 --> 00:10:39,650 патэнцыйна той функцыяй, якая называецца бінарны пошук або любы іншы. 229 00:10:39,650 --> 00:10:42,580 >> Так што тыя кучы зменныя застацца там так доўга, як вы хочаце 230 00:10:42,580 --> 00:10:43,490 ім заставацца там. 231 00:10:43,490 --> 00:10:46,090 І яны атрымліваюць паставіць тут. 232 00:10:46,090 --> 00:10:47,450 А потым наступны атрымлівае пакласці там. 233 00:10:47,450 --> 00:10:50,210 Яны трымаюць напаўняецца ў, і яны там заставайцеся, пакуль не тэлефанаваць бясплатна. 234 00:10:50,210 --> 00:10:52,870 >> І па сутнасці, куча і стэк, атрымліваць на пытанне Маркуса, 235 00:10:52,870 --> 00:10:54,500 расці насустрач адзін аднаму. 236 00:10:54,500 --> 00:10:57,730 І калі яны бягуць сябар у сябра, вы, выкарыстоўваецца ўсю памяць у вашым 237 00:10:57,730 --> 00:11:01,330 кампутар, і ваша праграма будзе кінуць таму што вы не маеце больш памяці 238 00:11:01,330 --> 00:11:02,420 пакінулі ў выкарыстанні. 239 00:11:02,420 --> 00:11:07,290 У прамежках паміж імі існуе патэнцыйна іншае. 240 00:11:07,290 --> 00:11:10,980 Але для рамкі дадзенага курсу, вы не трэба турбавацца пра гэта. 241 00:11:10,980 --> 00:11:12,020 >> Так што быў адказ на ваша пытанне. 242 00:11:12,020 --> 00:11:13,520 Не турбуйцеся пра гэта. 243 00:11:13,520 --> 00:11:15,550 Але гэта было доўгі адказ. 244 00:11:15,550 --> 00:11:17,800 Усё, што вам трэба ведаць, куча і стэк будзе - 245 00:11:17,800 --> 00:11:18,900 адзін пачынаецца на дне. 246 00:11:18,900 --> 00:11:19,570 Стэк робіць. 247 00:11:19,570 --> 00:11:20,790 Куча там наверсе. 248 00:11:20,790 --> 00:11:21,990 Яны будуць расці бліжэй адзін да аднаго. 249 00:11:21,990 --> 00:11:23,110 >> І калі яны тычацца, гэта праблема. 250 00:11:23,110 --> 00:11:24,500 Вы не хапіла памяці. 251 00:11:24,500 --> 00:11:28,760 А акрамя таго, у дадатак да ведаючы, дзе яны, што захоўваецца ў абодва 252 00:11:28,760 --> 00:11:30,512 стэка і кучы. 253 00:11:30,512 --> 00:11:31,410 Керціс. 254 00:11:31,410 --> 00:11:33,570 >> CURTIS: Калі яны сутыкаюцца, з'яўляецца тое, што перапаўненне стэка? 255 00:11:33,570 --> 00:11:35,670 >> Джэйсан Хиршхорн: Калі яны сутыкаюцца, гэта не перапаўненне стэка. 256 00:11:35,670 --> 00:11:38,340 Перапаўненне стэка з'яўляецца іншая вобласць што мы можам перайсці, калі вы хочаце. 257 00:11:38,340 --> 00:11:40,020 Добра, мы яшчэ вернемся да гэтага крыху пазней. 258 00:11:40,020 --> 00:11:42,730 >> СТУДЭНЦКАЯ: Якое слова называецца калі яны б'юць адзін аднаго, 259 00:11:42,730 --> 00:11:44,450 стэк і куча? 260 00:11:44,450 --> 00:11:46,640 >> Джэйсан Хиршхорн: У цяперашні час, няма пра што турбавацца. 261 00:11:46,640 --> 00:11:47,750 Проста ведайце - 262 00:11:47,750 --> 00:11:50,530 Я адкажу на гэтае пытанне пасля заняткаў. 263 00:11:50,530 --> 00:11:52,680 Калі яны сутыкаюцца адзін з адным, у яго скончыліся памяці, таму што няма больш 264 00:11:52,680 --> 00:11:53,330 прастору там. 265 00:11:53,330 --> 00:11:55,450 >> СТУДЭНЦКАЯ: На жаль, тое, што віна сегмент? 266 00:11:55,450 --> 00:11:58,710 >> Джэйсан Хиршхорн: Сегмент Няспраўнасць можа быць выклікана для - 267 00:11:58,710 --> 00:12:02,240 гэта залежыць, чаму называецца SEG віне аўтара. 268 00:12:02,240 --> 00:12:06,260 Часам, ваш перапаўненне стэка, яно будзе кажуць сегмент абвінаваціць як памылкі. 269 00:12:06,260 --> 00:12:08,180 >> СТУДЭНЦКАЯ: А як наконт разнаймення нулявы зменнай? 270 00:12:08,180 --> 00:12:10,040 Гэта памылка сегмент? 271 00:12:10,040 --> 00:12:11,480 >> Джэйсан Хиршхорн: разнаймення пусты паказальнік - 272 00:12:11,480 --> 00:12:17,850 Такім чынам, калі ў вас ёсць паказальнік, які вам ўсталяваць роўны нулю, паказальнікі, нагадаем, 273 00:12:17,850 --> 00:12:20,270 адрасы памяці і не захоўвайце як іх значэння. 274 00:12:20,270 --> 00:12:23,660 І пусты паказальнік, па сутнасці, захоўванне 0, 0-й 275 00:12:23,660 --> 00:12:26,670 звярнуцца ў гэтай зменнай. 276 00:12:26,670 --> 00:12:30,010 Так 0x, 0, 0, 0, 0, і гэтак далей. 277 00:12:30,010 --> 00:12:35,030 Гэта 0-й адрас у памяці, што гэта не ў нашай карціне, гэта там 278 00:12:35,030 --> 00:12:38,800 дзесьці, вось абаронены на кампутары. 279 00:12:38,800 --> 00:12:40,130 Нам не дазваляюць дакрануцца да яе. 280 00:12:40,130 --> 00:12:44,680 >> Так што, калі ваша праграма гэта выкананне, калі нешта спрабуе пайсці ў памяці 281 00:12:44,680 --> 00:12:48,990 адрас 0, ён ведае, што гэта значыць пустое значэнне. 282 00:12:48,990 --> 00:12:50,820 Яна ведае, нішто не павінна быць там. 283 00:12:50,820 --> 00:12:53,420 Так што, калі вы спрабуеце выкарыстоўваць нешта ёсць і лячыць нешта накшталт там ці 284 00:12:53,420 --> 00:12:58,355 спрабуе ісці ў гэтае месца, вы збіраецца атрымаць віну сегм або памылку. 285 00:12:58,355 --> 00:13:00,520 Я адказаў на ваша пытанне? 286 00:13:00,520 --> 00:13:03,170 >> А зараз мы вернемся да перапаўнення стэка. 287 00:13:03,170 --> 00:13:09,560 Рэчы ў стэку, а вы, хлопцы, бачыў, у - намалюем блізка 288 00:13:09,560 --> 00:13:11,966 план кадра стэка. 289 00:13:11,966 --> 00:13:15,050 Ці ўсё могуць бачыць, што? 290 00:13:15,050 --> 00:13:16,650 Так у нас ёсць фрэйм ​​стэка. 291 00:13:16,650 --> 00:13:23,260 Мы эканомім масіў у якасці мясцовага зменная ў гэтай функцыі. 292 00:13:23,260 --> 00:13:29,510 Так бы мовіць, наш масіў мае пяць месцаў. 293 00:13:29,510 --> 00:13:33,230 Усе пяць з іх будуць захаваны у гэтым кадры стэка. 294 00:13:33,230 --> 00:13:37,540 >> Калі мы пачнем пісаць за Межы дадзенага масіва - 295 00:13:37,540 --> 00:13:43,990 таму, калі мы пачнем пісаць у, скажам, што гэта 0. 296 00:13:43,990 --> 00:13:46,800 Такія паказчыкі пяць нашага масіва. 297 00:13:46,800 --> 00:13:50,980 Калі мы пачнем пісаць у індэкс 5, які мы не маем, калі ў нас ёсць 298 00:13:50,980 --> 00:13:55,900 масіў памерам 5, мы пачынаем пісаць у індэкс 6, 7, 8, 9, мы можам атрымаць стэк 299 00:13:55,900 --> 00:13:57,960 Памылка перапаўнення. 300 00:13:57,960 --> 00:14:00,510 >> Наогул гэта не - 301 00:14:00,510 --> 00:14:04,910 вы, верагодна, трапіць у бяду калі вы ідзяце на адзін. 302 00:14:04,910 --> 00:14:08,640 Але ў цэлым, вы атрымаеце ў за ўсё клопатаў, калі вы ідзяце на сябе шмат 303 00:14:08,640 --> 00:14:12,770 і вы ідзяце да гэтага часу больш, што вы пішаце над зваротным адрасам, што 304 00:14:12,770 --> 00:14:16,080 Функцыя, якая знаходзіцца па адрасе Дно кадра стэка. 305 00:14:16,080 --> 00:14:16,520 >> Таму што, ці не так? 306 00:14:16,520 --> 00:14:17,670 Вы - у - прабачце. 307 00:14:17,670 --> 00:14:18,550 Ці не "таму што прама." 308 00:14:18,550 --> 00:14:20,470 >> У кадры стэка, у вас ёсць Вашы лакальныя зменныя. 309 00:14:20,470 --> 00:14:27,090 У самым нізе стэка кадр зваротны адрас. 310 00:14:27,090 --> 00:14:28,790 Вось дзе функцыя ідзе, калі ўсё скончыцца. 311 00:14:28,790 --> 00:14:33,750 І калі вы перазапісаць, што вяртанне адрас, то, калі гэты фрэйм ​​стэка, 312 00:14:33,750 --> 00:14:36,680 калі вы збіраецеся праз стэк кадр і выканання кожнага радка, вы 313 00:14:36,680 --> 00:14:40,350 збіраецца ісці на новы зваротнага адрасу што там напісана, а ня 314 00:14:40,350 --> 00:14:40,910 Фактычны адзін. 315 00:14:40,910 --> 00:14:45,050 І вось як мы бачылі некаторыя парушэнні правілаў бяспекі 316 00:14:45,050 --> 00:14:46,780 можа здарыцца з кампутарамі. 317 00:14:46,780 --> 00:14:52,760 >> Так перапаўнення стэка, карацей кажучы, гэта калі Вы перазапісаць ўдзел у стэку 318 00:14:52,760 --> 00:14:55,440 вы павінны выкарыстоўваць, мясцовы Пераменная вы павінны выкарыстоўваць, і 319 00:14:55,440 --> 00:14:58,070 у прыватнасці, калі вы пачынаеце перазапісу важныя рэчы, як 320 00:14:58,070 --> 00:14:59,100 зваротны адрас. 321 00:14:59,100 --> 00:15:00,090 І вось, калі вы атрымаеце паведамленне пра памылку. 322 00:15:00,090 --> 00:15:03,980 Ці, можа быць, нават вы маглі б пачаць нават пісаць у - 323 00:15:03,980 --> 00:15:05,370 кажуць бінарны пошук быў прама над асноўным. 324 00:15:05,370 --> 00:15:07,790 Калі вы перапісаў шмат, вам мог бы напісаць у асноўны. 325 00:15:07,790 --> 00:15:10,230 Але ў цэлым, вы атрымліваеце паведамленне пра памылку і Затым, таму што кампутар ведае 326 00:15:10,230 --> 00:15:12,270 Вы робіце тое, што вы не павінны рабіць. 327 00:15:12,270 --> 00:15:12,560 Так. 328 00:15:12,560 --> 00:15:13,910 >> Студэнт: У чым розніца паміж перапаўнення стэка 329 00:15:13,910 --> 00:15:16,940 і перапаўненне буфера? 330 00:15:16,940 --> 00:15:19,420 >> Джэйсан Хиршхорн: Перапаўненне буфера з'яўляецца больш агульным тыпам 331 00:15:19,420 --> 00:15:20,395 тое, што я толькі што апісаў. 332 00:15:20,395 --> 00:15:22,610 >> Студэнт: Так перапаўненне стэка з'яўляецца прыклад перапаўнення буфера. 333 00:15:22,610 --> 00:15:23,420 >> Джэйсан Хиршхорн: Цалкам дакладна. 334 00:15:23,420 --> 00:15:28,700 Гэта масіў мы можам думаць аб якасці буфера, прастору для рэчаў, каб уваходзіць 335 00:15:28,700 --> 00:15:30,600 Гэта перапаўненне буфера. 336 00:15:30,600 --> 00:15:33,210 Мы маглі б перапаўненне буфера. 337 00:15:33,210 --> 00:15:36,870 Калі б не было буфер, які там часта з'яўляецца масівам куча, і мы 338 00:15:36,870 --> 00:15:40,600 перапісаў гэтыя межы, то мы б ёсць перапаўненне буфера. 339 00:15:40,600 --> 00:15:44,870 >> І выходзіць за рамкі гэтага курса, яны выяўлены крыху па-іншаму. 340 00:15:44,870 --> 00:15:48,040 Кампілятар мае асаблівае спосабы выяўлення сябар. 341 00:15:48,040 --> 00:15:50,660 Але перапаўненне буфера з'яўляецца больш агульным тып, што я апісаў, 342 00:15:50,660 --> 00:15:54,090 які быў перапаўненне буфера. 343 00:15:54,090 --> 00:15:56,240 Хіба што адказаць на ваша пытанне? 344 00:15:56,240 --> 00:15:57,910 Салодкі. 345 00:15:57,910 --> 00:16:01,850 >> Ці былі іншыя пытанні, звязаныя ў стэк або ў кучы? 346 00:16:01,850 --> 00:16:04,920 347 00:16:04,920 --> 00:16:05,510 Так. 348 00:16:05,510 --> 00:16:08,220 >> СТУДЭНЦКАЯ: я ведаю, у вас ёсць, каб вызваліць радкоў таму што яны ў кучы 349 00:16:08,220 --> 00:16:09,305 і вы не хочаце, каб ўцечка памяці. 350 00:16:09,305 --> 00:16:12,240 Але ў вас ёсць, каб вызваліць глабальныя зменныя і ўсё ў такім духу? 351 00:16:12,240 --> 00:16:14,335 Або яны аўтаматычна вызваляюцца? 352 00:16:14,335 --> 00:16:15,700 >> Джэйсан Хиршхорн: Добры пытанне. 353 00:16:15,700 --> 00:16:22,340 Такім чынам, у CS50.H, мы ствараем гэтую рэч ты клікаў радок. 354 00:16:22,340 --> 00:16:23,800 Радок сапраўды тое, што? 355 00:16:23,800 --> 00:16:24,810 >> СТУДЭНЦКАЯ: Чар зорка. 356 00:16:24,810 --> 00:16:29,180 >> Джэйсан Хиршхорн: знак зоркі, паказальнік ў сімвал, паказальнік на 357 00:16:29,180 --> 00:16:30,650 масіў знакаў. 358 00:16:30,650 --> 00:16:32,210 Гэта тое, што радок. 359 00:16:32,210 --> 00:16:36,050 Так што мы павінны вызваліць яго, так як GetString, які мы выкарыстоўвалі шмат - 360 00:16:36,050 --> 00:16:38,370 Радок імя роўная GetString - 361 00:16:38,370 --> 00:16:43,560 што mallocs для нас некаторы колькасць памяці на кучы, а затым вяртае паказальнік на 362 00:16:43,560 --> 00:16:47,230 Першы знак, што радок, сімвал зоркі. 363 00:16:47,230 --> 00:16:52,760 >> Так нібыта, калі вы не былі пісаць бясплатна на любым з вашых радкоў 364 00:16:52,760 --> 00:16:55,600 што вы назвалі да гэтага часу, у вас ёсць працякала некаторы колькасць памяці. 365 00:16:55,600 --> 00:16:57,430 Вядома, мы не казалі пра гэта, так што ніхто не дабраўся ў 366 00:16:57,430 --> 00:16:58,520 Бяда за гэта. 367 00:16:58,520 --> 00:16:59,980 Але ісці наперад, так. 368 00:16:59,980 --> 00:17:03,990 Пры выкліку GetString, вы mallocing некаторы прастору ў кучы. 369 00:17:03,990 --> 00:17:07,640 І калі вы не тэлефануйце бясплатна пазней, што Радок, у вас ёсць ўцечка памяці. 370 00:17:07,640 --> 00:17:09,440 Гэта адказ на ваша пытанне? 371 00:17:09,440 --> 00:17:10,606 >> Ды 372 00:17:10,606 --> 00:17:15,020 >> СТУДЭНЦКАЯ: Такім чынам, каб зрабіць гэта, мы выкарыстоўваем бясплатна прама перад вяртаннем? 373 00:17:15,020 --> 00:17:18,510 Маўляў, у рамках, я думаю, калі мы кажам, як, тап_п, у 374 00:17:18,510 --> 00:17:24,410 Аб'ём кода, гэта ў тых фігурныя дужкі, прама перад - 375 00:17:24,410 --> 00:17:26,140 Вы ведаеце, дзе вы б звычайна ставяць вяртанне. 376 00:17:26,140 --> 00:17:27,950 Вы паставіць бясплатна да гэтага? 377 00:17:27,950 --> 00:17:31,000 >> Джэйсан Хиршхорн: Такім чынам, вы можаце паставіць бясплатна куды вы хочаце паставіць бясплатна. 378 00:17:31,000 --> 00:17:33,810 Таму што гэтыя вылучаюцца дынамічна зменныя, таму што яны могуць 379 00:17:33,810 --> 00:17:39,170 жыць за рамкі прыватнасці Функцыя, калі вы тэлефануеце Таноса ў 380 00:17:39,170 --> 00:17:44,140 асобную функцыю, напрыклад, GetString, вы можаце патэлефанаваць бясплатна ў асноўны. 381 00:17:44,140 --> 00:17:46,050 Вам не трэба называць яго ў канкрэтнай функцыі 382 00:17:46,050 --> 00:17:47,570 дзе Таноса называецца. 383 00:17:47,570 --> 00:17:50,340 Але вы павінны назваць яго да асноўных дэкларацый. 384 00:17:50,340 --> 00:17:51,120 >> І гэта сапраўды залежыць. 385 00:17:51,120 --> 00:17:54,960 Гэта залежыць ад таго, чаму вы malloced, што прастору ў першую чаргу. 386 00:17:54,960 --> 00:17:57,320 Некаторыя людзі будуць называць вызваліць даволі хутка. 387 00:17:57,320 --> 00:17:59,220 Некаторыя людзі ніколі не будуць тэлефанаваць бясплатна да канец сваёй праграмы. 388 00:17:59,220 --> 00:18:00,660 І яны будуць праходзіць праз і бясплатна ўсё. 389 00:18:00,660 --> 00:18:03,597 Гэта залежыць ад таго, чаму вы назвалі Таноса. 390 00:18:03,597 --> 00:18:11,270 >> СТУДЭНЦКАЯ: А што б вы сказалі, калі вы назвалі выкарыстанне GetString? 391 00:18:11,270 --> 00:18:13,320 Вы б сказаў, што бясплатна і што? 392 00:18:13,320 --> 00:18:20,040 >> Джэйсан Хиршхорн: Так сінтаксіс бясплатна проста бясплатна, адкрытыя дужка, недалёка 393 00:18:20,040 --> 00:18:22,130 Хлопец, і імя паказальніка. 394 00:18:22,130 --> 00:18:26,410 Так што калі вы пішаце радок роўных імя GetString, вы ставіце імя тут. 395 00:18:26,410 --> 00:18:27,760 Гэтае імя паказальніка. 396 00:18:27,760 --> 00:18:30,570 І ён ведае, каб вызваліць гэтую памяць. 397 00:18:30,570 --> 00:18:33,920 >> Студэнт: Так што, калі ён вызваляе гэтую памяць, паказальнік-ранейшаму паказвае на тое месца, 398 00:18:33,920 --> 00:18:34,970 ў памяці? 399 00:18:34,970 --> 00:18:39,020 Ці гэта паказальнік таксама вызваляецца ад адрас, які ён паказвае. 400 00:18:39,020 --> 00:18:40,290 >> Джэйсан Хиршхорн: Мы павінны паспрабаваць гэта. 401 00:18:40,290 --> 00:18:41,430 Мы павінны кадзіраваць што. 402 00:18:41,430 --> 00:18:43,880 Давайце вернемся, калі мы дабяромся да кадавання, і давайце код, які. 403 00:18:43,880 --> 00:18:46,000 І калі вы хочаце, каб высветліць адказ да таго, што вы таксама можаце код, які 404 00:18:46,000 --> 00:18:46,690 у той жа час. 405 00:18:46,690 --> 00:18:49,100 Але гэта вялікае пытанне. 406 00:18:49,100 --> 00:18:53,480 >> СТУДЭНЦКАЯ: Ці можна бясплатна нешта занадта рана? 407 00:18:53,480 --> 00:18:58,530 Такім чынам, вы ўсё яшчэ гэта трэба для вашай праграмы, і вы вызвалілі, што аб'ём памяці? 408 00:18:58,530 --> 00:18:59,200 >> Джэйсан Хиршхорн: Так. 409 00:18:59,200 --> 00:19:03,020 Гэта магчыма, калі вы бясплатна нешта і тады вы выкарыстоўваць яго зноў, вы будзеце 410 00:19:03,020 --> 00:19:06,890 сутыкнецеся з памылкай. 411 00:19:06,890 --> 00:19:10,810 Але гэта на вас, таму што вы вызвалілі нешта, а затым назваў яго пазней. 412 00:19:10,810 --> 00:19:13,940 Так, каб было памылкай праграміста. 413 00:19:13,940 --> 00:19:14,780 Але так. 414 00:19:14,780 --> 00:19:17,760 Вы маглі б напісаць, што. 415 00:19:17,760 --> 00:19:19,240 >> Ёсць яшчэ пытанні па - 416 00:19:19,240 --> 00:19:19,760 Так. 417 00:19:19,760 --> 00:19:22,820 >> Студэнт: Так што калі вы, як мяркуецца, толькі вызваліць яго ў цэлым да 418 00:19:22,820 --> 00:19:25,490 Праграма заканчваецца, ці значыць гэта, калі Праграма заканчваецца, і вы не вызваліць яго, 419 00:19:25,490 --> 00:19:27,580 што памяць яшчэ вылучаецца? 420 00:19:27,580 --> 00:19:31,330 >> Джэйсан Хиршхорн: Калі ваша праграма заканчваецца і вы забудзьцеся вызваліць нешта, то 421 00:19:31,330 --> 00:19:34,390 што памяць была выдзелена на працягу час жыцця вашай праграмы. 422 00:19:34,390 --> 00:19:37,670 Калі ваша праграма цалкам зачыняецца, што памяць не збіраецца 423 00:19:37,670 --> 00:19:39,490 каб застацца там назаўсёды. 424 00:19:39,490 --> 00:19:42,080 Кампутар досыць разумны, каб ведаць, , Што, калі праграма зачыняецца, гэта 425 00:19:42,080 --> 00:19:46,440 павінны пазбавіцца ад усіх памяці, што быў звязаны з гэтай праграмай. 426 00:19:46,440 --> 00:19:51,240 >> Тым не менш, ёсць інструменты можна запускаць па праграме для выяўлення, калі, калі 427 00:19:51,240 --> 00:19:54,720 Праграма завершана, вы забыліся каб вызваліць памяць. 428 00:19:54,720 --> 00:19:57,960 І для вашага наступнага праблемы ўсталяваць, дзе вы будзеце выкарыстоўваць Таноса і выкарыстанне 429 00:19:57,960 --> 00:20:02,610 паказальнікі, вы будзеце запускаць гэты запраграмаваць на вашу праграму, каб убачыць, калі, 430 00:20:02,610 --> 00:20:06,530 калі асноўныя вяртаецца, вы былі некаторыя рэчы, якія засталіся unfreed. 431 00:20:06,530 --> 00:20:09,130 >> Так што яны не збіраюцца заставацца malloced назаўжды ў вашым кампутары. 432 00:20:09,130 --> 00:20:11,720 Гэта было б марнатраўна, таму што вельмі хутка, кампутары 433 00:20:11,720 --> 00:20:12,960 б не хапіць памяці. 434 00:20:12,960 --> 00:20:16,450 Але калі яны не працаваць да канца вашага запраграмаваць і яны не вызваленыя і ваш 435 00:20:16,450 --> 00:20:20,260 Праграма выходзіць, што па-ранейшаму з'яўляецца праблемай што гэты інструмент дапаможа вам у вырашэнні. 436 00:20:20,260 --> 00:20:21,520 >> СТУДЭНЦКАЯ: Гэта Valgrind? 437 00:20:21,520 --> 00:20:22,910 >> Джэйсан Хиршхорн: Гэта называецца Valgrind. 438 00:20:22,910 --> 00:20:23,520 І вы будзеце - 439 00:20:23,520 --> 00:20:25,780 >> СТУДЭНЦКАЯ: Але мы не павінны ведаць, што для віктарыны, хоць? 440 00:20:25,780 --> 00:20:27,600 Я маю на ўвазе, гэта было казалі пра трохі ў лекцыі. 441 00:20:27,600 --> 00:20:33,600 >> Джэйсан Хиршхорн: Так Valgrind гэтае імя гэтага інструмента. 442 00:20:33,600 --> 00:20:37,180 Ведаючы, што яна робіць гэта дастаткова для віктарыны. 443 00:20:37,180 --> 00:20:40,200 Але вы не выкарыстоўвалі яго яшчэ на вашым Праблема ўсталяваць, таму што ў нас не было 444 00:20:40,200 --> 00:20:43,520 Праблема набор, які відавочна меў справу з Таноса, або Вы карыстаецеся Таноса. 445 00:20:43,520 --> 00:20:45,330 Такім чынам, вы яшчэ не выкарыстоўвалі Valgrind. 446 00:20:45,330 --> 00:20:47,760 Але вы будзеце выкарыстоўваць яго рана , Чым пазней. 447 00:20:47,760 --> 00:20:48,710 >> СТУДЭНЦКАЯ: Ці можаце вы паўтарыць што Valgrind з'яўляецца? 448 00:20:48,710 --> 00:20:49,190 >> Джэйсан Хиршхорн: Выбачайце? 449 00:20:49,190 --> 00:20:51,240 >> СТУДЭНЦКАЯ: Ці можаце вы паўтарыць, што Мэта Valgring з'яўляецца? 450 00:20:51,240 --> 00:20:53,100 >> Джэйсан Хиршхорн: Valgrind гэта імя - 451 00:20:53,100 --> 00:20:59,890 як GDB дапамагае вам адладкі праграмы, Valgrind дапамагае вам зразумець, калі 452 00:20:59,890 --> 00:21:03,210 рэчы не былі вызваленыя калі зачыняецца ваша праграма. 453 00:21:03,210 --> 00:21:05,110 Такім чынам, вы будзеце запусціць яго на вашай праграме. 454 00:21:05,110 --> 00:21:09,230 І ваша праграма выходзіць, і ён будзе казаць, ваша праграма называецца Таноса гэта многія 455 00:21:09,230 --> 00:21:13,670 раз для гэтага шмат байт, і вы толькі называецца свабодным гэта шмат разоў. 456 00:21:13,670 --> 00:21:16,520 І так вы пакінулі гэтыя шмат байт без вызвалення. 457 00:21:16,520 --> 00:21:18,050 Ці гэта будзе сказаць, што вы вызвалілі ўсё. 458 00:21:18,050 --> 00:21:19,070 Добрая праца. 459 00:21:19,070 --> 00:21:19,480 >> СТУДЭНЦКАЯ: ОК. 460 00:21:19,480 --> 00:21:21,060 І гэта называецца Valgring? 461 00:21:21,060 --> 00:21:24,940 >> Джэйсан Hirschhorn: V-A-L-G-R-I-N-D. 462 00:21:24,940 --> 00:21:25,970 >> СТУДЭНЦКАЯ: Пытанне аб паказальніках. 463 00:21:25,970 --> 00:21:30,080 Так бы мовіць, што вы н зоркі х роўна нешта. 464 00:21:30,080 --> 00:21:33,330 Гэта складае, што вы кладзеце там, у тым, што тое, што будучы пакласці ўнутр 465 00:21:33,330 --> 00:21:36,120 што х паказвае на, або паказальнік х? 466 00:21:36,120 --> 00:21:37,690 >> Джэйсан Хиршхорн: Ці можаце вы паўтарыць пытанне? 467 00:21:37,690 --> 00:21:39,340 Ці можам мы зрабіць гэта ў той час вы гэта кажаце? 468 00:21:39,340 --> 00:21:42,710 >> Студэнт: У віктарыне, на самай справе, той, які вы паслалі нас, як гэта было, сімвал 469 00:21:42,710 --> 00:21:46,520 зоркі праўда роўная CS50 скалы, ці не так? 470 00:21:46,520 --> 00:21:52,190 Дык гэта значыць, што, што CS50 скалы гэта тое, што праўда паказвае на? 471 00:21:52,190 --> 00:21:55,810 >> Джэйсан Хиршхорн: Дык вы кажаце аб сЬаг зоркі ў радок, як 472 00:21:55,810 --> 00:21:56,460 гэта працуе? 473 00:21:56,460 --> 00:21:56,890 Так. 474 00:21:56,890 --> 00:21:57,700 ОК. 475 00:21:57,700 --> 00:21:59,140 Давайце намалюем гэта тут. 476 00:21:59,140 --> 00:22:07,100 >> [БОК РАЗГОВОР] 477 00:22:07,100 --> 00:22:11,130 >> Джэйсан Хиршхорн: Так гэтая пераменная будзе з знакавай тыпу зоркі. 478 00:22:11,130 --> 00:22:14,580 Наколькі вялікая пераменная з знакавай тыпу зоркі? 479 00:22:14,580 --> 00:22:15,510 Колькі байт? 480 00:22:15,510 --> 00:22:16,450 >> СТУДЭНТЫ: Чатыры. 481 00:22:16,450 --> 00:22:18,210 >> Джэйсан Хиршхорн: Гэта чатыры байта. 482 00:22:18,210 --> 00:22:21,420 Колькі права з'яўляецца зменнай з тыпу дзесятковага зоркі? 483 00:22:21,420 --> 00:22:22,210 >> СТУДЭНТЫ: Чатыры. 484 00:22:22,210 --> 00:22:24,910 >> Джэйсан Хиршхорн: Чатыры байта. 485 00:22:24,910 --> 00:22:28,280 Калі гэта паказальнік, то гэта заўсёды чатыры байта, так як паказальнікі, іх 486 00:22:28,280 --> 00:22:30,070 значэнне з'яўляецца адрас памяці. 487 00:22:30,070 --> 00:22:35,160 І адрасы памяці на CS50 Прыбор чатыры байта. 488 00:22:35,160 --> 00:22:42,900 Таму, калі мы называем GetString ці калі мы скажам, имя_строки роўная, а затым у 489 00:22:42,900 --> 00:22:46,140 падвойныя двукоссі паставіць радок, мы ўкладваем - 490 00:22:46,140 --> 00:22:46,920 ну, гэта крыху па-іншаму. 491 00:22:46,920 --> 00:22:48,630 Мы зробім GetString ў якасці прыкладу. 492 00:22:48,630 --> 00:22:52,150 Або знак зоркі нешта роўная радок. 493 00:22:52,150 --> 00:22:54,360 На жаль, даць мне прыклад якія вы прачыталі? 494 00:22:54,360 --> 00:22:57,590 >> СТУДЭНЦКАЯ: знак зоркі праўда роўная "CS50 камяні" ў двукоссе. 495 00:22:57,590 --> 00:23:02,260 >> Джэйсан Хиршхорн: Так што гэта зорка, гэта мы будзем называць гэты зменную х для нашага 496 00:23:02,260 --> 00:23:04,060 агульныя мэты. 497 00:23:04,060 --> 00:23:05,970 Мы стварылі зменную х. 498 00:23:05,970 --> 00:23:07,610 Гэта тып сімвал зоркі. 499 00:23:07,610 --> 00:23:10,950 Гэта паказальнік на серыі знакаў. 500 00:23:10,950 --> 00:23:12,200 Так тут - 501 00:23:12,200 --> 00:23:23,710 502 00:23:23,710 --> 00:23:25,890 >> Так што гэта, як гэта будзе працаваць у памяці. 503 00:23:25,890 --> 00:23:27,410 Гэта будзе захоўваць адрас памяці. 504 00:23:27,410 --> 00:23:31,770 Было б захоўваць адрас памяці першы знак у масіве. 505 00:23:31,770 --> 00:23:33,830 А потым, калі вы вынікалі паказальнік, вы б 506 00:23:33,830 --> 00:23:35,200 атрымаць першы знак. 507 00:23:35,200 --> 00:23:38,780 >> І калі вы чытаеце гэтую рэч, як радок, ваш кампутар разумны 508 00:23:38,780 --> 00:23:42,930 дастаткова ведаць, чытаць усё гэта справа пакуль ён не трапляе ў зазор 0. 509 00:23:42,930 --> 00:23:45,530 Але калі вы чытаеце яму характар ​​у час, так што вы ітэрацыі 510 00:23:45,530 --> 00:23:49,910 гэты радок, то вы толькі што прачыталі характар, у той час, пакуль вы не дойдзе да 511 00:23:49,910 --> 00:23:50,850 зваротны слеш 0. 512 00:23:50,850 --> 00:23:52,335 Гэта не можа адказаць на вашыя Пытанне, аднак. 513 00:23:52,335 --> 00:23:55,610 >> СТУДЭНЦКАЯ: Так, але ў вас няма malloced, што прастора 514 00:23:55,610 --> 00:23:58,400 але для гэтага паказальніка. 515 00:23:58,400 --> 00:24:02,510 >> Джэйсан Хиршхорн: Так што я не зусім упэўнены, менавіта тое, што вы глядзіце на, 516 00:24:02,510 --> 00:24:03,640 таму што я не рабіў, што віктарыну. 517 00:24:03,640 --> 00:24:06,370 Гэта павінен быў быць карыснымі рэсурсаў з іншага TF. 518 00:24:06,370 --> 00:24:11,380 Калі вы ствараеце радок на стэк або ў якасці лакальнай зменнай, яно будзе 519 00:24:11,380 --> 00:24:16,920 проста масіў абвінавачванняў, а ня як правіла, знак зоркі паказваючы на 520 00:24:16,920 --> 00:24:18,600 іншую радок. 521 00:24:18,600 --> 00:24:20,550 Але я не ведаю. 522 00:24:20,550 --> 00:24:25,065 Гэта можа быць паказальнікам на іншы радок у стэку, а таксама. 523 00:24:25,065 --> 00:24:27,240 Так. 524 00:24:27,240 --> 00:24:31,116 >> СТУДЭНЦКАЯ: я ведаю, што вам трэба вылучыць памяць, калі паказальнік 525 00:24:31,116 --> 00:24:33,360 атрымліваць абвешчаны ўнутры іншай функцыі. 526 00:24:33,360 --> 00:24:36,740 Вы павінны зрабіць тое ж самае, калі гэта быў абвешчаны ўнутры асноўны, 527 00:24:36,740 --> 00:24:39,570 вы выкарыстоўваеце яго ўнутры асноўнай? 528 00:24:39,570 --> 00:24:43,590 >> Джэйсан Хиршхорн: Дык што, да. 529 00:24:43,590 --> 00:24:46,670 Вы можаце абвясціць паказальнік на любы адрас памяці ў памяці. 530 00:24:46,670 --> 00:24:51,440 Гэта можа быць адрас памяці мясцовы зменная, хоць часцяком, 531 00:24:51,440 --> 00:24:55,760 людзі не заяўляюць адрасы памяці у лакальных зменных, таму што яны ідуць 532 00:24:55,760 --> 00:24:59,890 далёка, як толькі што функцыя вяртае, якія Таму мы, як правіла Malloc рэчы. 533 00:24:59,890 --> 00:25:04,630 Але так, вы маглі б аб'явіць паказальнік ў іншай лакальнай зменнай. 534 00:25:04,630 --> 00:25:06,360 Гэта проста правіла, не робіцца. 535 00:25:06,360 --> 00:25:09,480 Але я магу зірнуць на што пэўная рэч пасля заняткаў. 536 00:25:09,480 --> 00:25:10,650 Так. 537 00:25:10,650 --> 00:25:12,350 >> СТУДЭНЦКАЯ: Я думаю, што гэта свайго роду з таго, што просяць. 538 00:25:12,350 --> 00:25:16,930 Гэта здаецца дзіўным, каб быць ініцыялізацыі паказальнік не так 539 00:25:16,930 --> 00:25:20,760 адрас, але як тое, што здаецца кошту. 540 00:25:20,760 --> 00:25:25,970 Падобна на тое, CS50 з'яўляецца тое, што ўнутры рэч быўшы паказаў на і 541 00:25:25,970 --> 00:25:28,820 не фактычны адрас, ці не так? 542 00:25:28,820 --> 00:25:30,520 >> Джэйсан Хиршхорн: Дык вось не так, аднак. 543 00:25:30,520 --> 00:25:32,470 Гэта не тое, што адбываецца. 544 00:25:32,470 --> 00:25:35,910 Пры аб'яўленні сЬаг зорку, гэта адрас памяці. 545 00:25:35,910 --> 00:25:38,860 Паказальнікі ўсе адрасы памяці паказваючы на ​​нешта іншае. 546 00:25:38,860 --> 00:25:41,480 Гэта нешта яшчэ можа быць на стэк, але амаль заўсёды знаходзіцца на 547 00:25:41,480 --> 00:25:43,440 кучы, як мы ўбачым гэта выкарыстоўваецца. 548 00:25:43,440 --> 00:25:46,860 549 00:25:46,860 --> 00:25:53,500 Але имя_строки роўная двайны двукоссі "GetString," мы бачым, што і мы 550 00:25:53,500 --> 00:25:55,010 можаце паглядзець, што і код, які. 551 00:25:55,010 --> 00:26:01,190 GetString радок не захоўваецца ў гэтая пераменная, або як радок 552 00:26:01,190 --> 00:26:04,580 імя не захоўваецца ў тым, што зменная, таму што гэта не так, як 553 00:26:04,580 --> 00:26:06,070 паказальнікі працаваць. 554 00:26:06,070 --> 00:26:06,770 Ці мае гэта сэнс? 555 00:26:06,770 --> 00:26:07,170 >> СТУДЭНЦКАЯ: Так. 556 00:26:07,170 --> 00:26:08,570 >> Джэйсан Хиршхорн: ОК. 557 00:26:08,570 --> 00:26:11,690 Будзем спадзявацца, што гэта не было заблытанай нікому. 558 00:26:11,690 --> 00:26:15,732 Але калі гэта так, мы можам паглядзець на яе яшчэ раз ў трохі, таму што мы на самай справе адбываецца 559 00:26:15,732 --> 00:26:19,240 кадзіраваць тое, што, мы спадзяемся, працы са радкамі і дапаможа вам адчуваць сябе 560 00:26:19,240 --> 00:26:22,170 больш камфортна з імі. 561 00:26:22,170 --> 00:26:24,869 >> Любыя іншыя пытанні, звязаныя з іх тэмы або іншыя тэмы, якія 562 00:26:24,869 --> 00:26:26,119 Я пакладу назад? 563 00:26:26,119 --> 00:26:32,280 564 00:26:32,280 --> 00:26:34,840 І - 565 00:26:34,840 --> 00:26:36,310 Прама цяпер. 566 00:26:36,310 --> 00:26:37,630 Так, Олдэн. 567 00:26:37,630 --> 00:26:39,860 >> ALDEN: Так што гэта не мае ніякага дачынення, але мы можам проста пайсці на 568 00:26:39,860 --> 00:26:42,760 вельмі хутка, што мы павінны ведаць, аб розніцы паміж 32 і 569 00:26:42,760 --> 00:26:46,345 64-разрадная машына? 570 00:26:46,345 --> 00:26:47,740 >> Джэйсан Хиршхорн: Так. 571 00:26:47,740 --> 00:26:52,111 Так 32 біта, колькі байт? 572 00:26:52,111 --> 00:26:53,060 >> ALDEN: Гэта чатыры байта. 573 00:26:53,060 --> 00:26:54,360 >> Джэйсан Хиршхорн: Гэта чатыры байта. 574 00:26:54,360 --> 00:26:58,420 І 64 біта, колькі байт? 575 00:26:58,420 --> 00:26:59,112 >> СТУДЭНЦКАЯ: Восем. 576 00:26:59,112 --> 00:27:00,610 >> Джэйсан Хиршхорн: Восем байт. 577 00:27:00,610 --> 00:27:03,980 Такім чынам, яшчэ раз, восем біт на адзін байт. 578 00:27:03,980 --> 00:27:08,340 Ваш CS50 прыбор 32-разрадная машына. 579 00:27:08,340 --> 00:27:13,650 Так адрасы памяці чатыры байта. 580 00:27:13,650 --> 00:27:17,460 Ёсць 2 да 32 адрасы памяці. 581 00:27:17,460 --> 00:27:21,310 Ад 0 да 2 ў 32 мінус 1. 582 00:27:21,310 --> 00:27:27,630 І я не ўпэўнены, але гэта верагодна, сфера, што вам трэба 583 00:27:27,630 --> 00:27:35,230 ведаю для 32-бітнай машыне, што памяць адрасы, зноў жа, доўга чатыры байта, 584 00:27:35,230 --> 00:27:39,620 і гэта максімальная сума адрасоў памяці. 585 00:27:39,620 --> 00:27:41,680 >> Акрамя таго, тыпы дадзеных - 586 00:27:41,680 --> 00:27:45,020 гэта можа быць нешта, як добра, што гэта варта адзначыць. 587 00:27:45,020 --> 00:27:49,610 Памер тыпу дадзеных залежыць ад машына вы працуеце з. 588 00:27:49,610 --> 00:27:56,760 Так сімвал, адзін знак, то, як колькасць байт на нашым CS50 прыбора? 589 00:27:56,760 --> 00:27:57,980 Адзін байт. 590 00:27:57,980 --> 00:28:02,310 І гэта на самай справе адзін байт, як добра на 64-бітнай машыне. 591 00:28:02,310 --> 00:28:05,920 >> І большасць тыпы дадзеных і той жа нумар байтаў на абедзвюх машынах. 592 00:28:05,920 --> 00:28:11,620 Але некаторыя тыпы дадзеных будуць адрознівацца на абедзвюх машынах. 593 00:28:11,620 --> 00:28:14,590 Так што было б патэнцыйна Адзінае, што вам трэба ведаць. 594 00:28:14,590 --> 00:28:16,710 >> Але нават тое, што, як мне здаецца, з'яўляецца за межамі - 595 00:28:16,710 --> 00:28:20,990 Я амаль упэўнены,, калі азірнуцца назад на старыя віктарыны, ён кажа, выкажам здагадку, для 596 00:28:20,990 --> 00:28:24,090 праблемы вы з дапамогай кадавання 32-разрадная машына. 597 00:28:24,090 --> 00:28:26,620 598 00:28:26,620 --> 00:28:30,620 Але ёсць, каб ісці разам з, што ў калі вам цікава, ёсць 599 00:28:30,620 --> 00:28:35,920 тыпы дадзеных, якія аналагічныя Памер на ўсіх машынах. 600 00:28:35,920 --> 00:28:42,670 >> Калі вы бачылі нешта накшталт uint32_t, вы можаце ці 601 00:28:42,670 --> 00:28:43,260 не бачылі, што. 602 00:28:43,260 --> 00:28:44,290 Гэта тып дадзеных. 603 00:28:44,290 --> 00:28:47,570 Гэта кажа, 32 біта незалежна ад таго, на якой машыне гэта на. 604 00:28:47,570 --> 00:28:50,350 Таму, калі людзі пішуць партатыўны Код, яны, верагодна, не будзе выкарыстоўваць цэлымі. 605 00:28:50,350 --> 00:28:53,260 Яны замест гэтага выкарыстоўваць гэтыя іншыя дадзеныя тыпы, што яны ведаюць, будзе тое ж самае 606 00:28:53,260 --> 00:28:54,780 Памер на кожнай машыне. 607 00:28:54,780 --> 00:28:58,080 608 00:28:58,080 --> 00:28:58,250 Мадх'я. 609 00:28:58,250 --> 00:29:00,150 >> Мадх'я: у мяне было пытанне аб працэс кампіляцыі. 610 00:29:00,150 --> 00:29:04,110 Так што калі вы пішаце праграму, якая выкарыстоўвае бібліятэка як CS50 ці нешта 611 00:29:04,110 --> 00:29:06,840 так, я ведаю, што гэтая бібліятэка павінен у нейкі момант, быць 612 00:29:06,840 --> 00:29:08,590 сабрана і звязана цалі 613 00:29:08,590 --> 00:29:13,380 Але колькі з гэтага адбываецца падчас складанне вашай праграмы? 614 00:29:13,380 --> 00:29:15,880 Якая частка гэтага працэсу бібліятэкі адбываецца, калі вы 615 00:29:15,880 --> 00:29:18,560 складання уласнай праграмы? 616 00:29:18,560 --> 00:29:24,020 >> Джэйсан Хиршхорн: Такім чынам, давайце пяройдзем Звычайна крокі гэтага працэсу. 617 00:29:24,020 --> 00:29:26,280 Вы пішаце. C файл. 618 00:29:26,280 --> 00:29:33,530 У вашым. C File, вы # ўключыць ваш бібліятэкі загалоўка, напрыклад, cs50.h. 619 00:29:33,530 --> 00:29:39,480 Што робіць, што рэзкае ўключаюць лінія зрабіць для вашай праграмы? 620 00:29:39,480 --> 00:29:40,525 Akchar. 621 00:29:40,525 --> 00:29:43,350 >> AKCHAR: Ён дадае прататыпы функцыі з загалоўка 622 00:29:43,350 --> 00:29:45,120 файлы ў бібліятэках. 623 00:29:45,120 --> 00:29:45,600 >> Джэйсан Хиршхорн: Цалкам дакладна. 624 00:29:45,600 --> 00:29:49,870 Гэта дадае гэтыя прататыпы функцый у код. 625 00:29:49,870 --> 00:29:55,230 Таму, калі ваш код складаецца ў на ранніх стадыях, кампілятар ведае 626 00:29:55,230 --> 00:29:59,250 што гэтыя функцыі сапраўды існуюць, і што ў іншым месцы яны былі вызначаныя. 627 00:29:59,250 --> 00:30:02,460 В. Ч файлы не ўключаюць вызначэння для гэтых функцый або, як 628 00:30:02,460 --> 00:30:03,950 яны сапраўды працуюць. 629 00:30:03,950 --> 00:30:07,960 Cs50.h проста ўключае нешта, што кажа GetString рэальная рэч, якая 630 00:30:07,960 --> 00:30:09,270 можа здарыцца. 631 00:30:09,270 --> 00:30:14,240 І standardio.h кажа Е з'яўляецца рэальная рэч, якая можа здарыцца. 632 00:30:14,240 --> 00:30:23,190 >> Так што ваша з мовай з гэтым. Загалоўкі файл запускаецца ператварыўся ў некаторыя 633 00:30:23,190 --> 00:30:27,750 машыначытальнай код, які ў канчатковым выніку атрымлівае ператварыўся ў двайковы 634 00:30:27,750 --> 00:30:30,030 Код, 0 і 1 ст. 635 00:30:30,030 --> 00:30:33,590 І гэта код, які ў канчатковым рахунку запускаецца на выкананне. 636 00:30:33,590 --> 00:30:38,550 -Л CS50 лініі - напрыклад, калі вы пішаце Clang - 637 00:30:38,550 --> 00:30:41,830 а затым вы ўключаеце-л CS50, ўводзе, што цалі 638 00:30:41,830 --> 00:30:42,180 І вы бачыце, што. 639 00:30:42,180 --> 00:30:43,890 Калі вы пішаце зрабіць, вы будзеце бачыць, што лінія тут. 640 00:30:43,890 --> 00:30:47,740 І мы ўбачым, што праз секунду, калі мы кадзіраваць ці позна, калі мы кода. 641 00:30:47,740 --> 00:30:50,390 >> Але што-л CS50 лінія робіць нешта трохі адрозніваецца ад 642 00:30:50,390 --> 00:30:52,440 # Ўключыць cs50.h. 643 00:30:52,440 --> 00:30:56,300 Што гэта-л CS50 лініі рабіць? 644 00:30:56,300 --> 00:30:56,820 Аві? 645 00:30:56,820 --> 00:31:00,310 >> AVI: Я хачу сказаць, што яна звязвае бібліятэка з функцыяй 646 00:31:00,310 --> 00:31:02,710 называць, як і. Ø файлаў. 647 00:31:02,710 --> 00:31:08,200 >> Джэйсан Хиршхорн: Такім чынам, вельмі блізка, калі не спот-ён. 648 00:31:08,200 --> 00:31:16,220 -Л CS50 прымае двайковы файл і аб'ядноўвае яго з вашым двайковы файл. 649 00:31:16,220 --> 00:31:21,410 Так cs50.h, няма ніякага сэнсу ў ператварэнні cs50.h ад мовы C ў двойкавую кожны 650 00:31:21,410 --> 00:31:23,130 раз, калі ён выкарыстоўваецца. 651 00:31:23,130 --> 00:31:26,650 Гэта было б глупства, таму што будзе марнаваць шмат часу. 652 00:31:26,650 --> 00:31:30,420 Так што ўжо складзены і ператварыўся ў выкананы файл. 653 00:31:30,420 --> 00:31:35,430 І цяпер ён збіраецца быць аб'яднаны з файлам у канцы. 654 00:31:35,430 --> 00:31:38,370 Так што тыя 1 і 0 збіраецеся зліцца з вашым іх 655 00:31:38,370 --> 00:31:39,150 і 0 ў канцы. 656 00:31:39,150 --> 00:31:43,670 Так што цяпер вы будзеце на самай справе ёсць рэальная 1 і 0, якія вызначаюць, якім GetString, 657 00:31:43,670 --> 00:31:47,890 напрыклад, працуе, ці як Е, напрыклад, працуе. 658 00:31:47,890 --> 00:31:52,750 >> І для атрымання дадатковай інфармацыі, ёсць кароткія кампілятары, Нейт дае, што 659 00:31:52,750 --> 00:31:55,410 вы павінны праверыць, што ідзе праз гэтыя крокі. 660 00:31:55,410 --> 00:31:56,050 Але - 661 00:31:56,050 --> 00:31:56,560 Так. 662 00:31:56,560 --> 00:32:01,700 >> СТУДЭНЦКАЯ: Ці з'яўляюцца яны заўсёды ў ўшчыльняючымі файлы. калі яны ў выглядзе бібліятэкі, 663 00:32:01,700 --> 00:32:06,764 гатовы быць аб'яднаныя, звязаныя - як яны ў двайковым кодзе? 664 00:32:06,764 --> 00:32:07,600 >> Джэйсан Хиршхорн: ОК. 665 00:32:07,600 --> 00:32:08,420 Што - 666 00:32:08,420 --> 00:32:11,780 >> СТУДЭНЦКАЯ: Гэта заўсёды мае месца для бібліятэкі, калі вы звязаць іх? 667 00:32:11,780 --> 00:32:12,500 >> Джэйсан Хиршхорн: Так. 668 00:32:12,500 --> 00:32:17,300 Так што ёсць. Ы файлы, якія будуць машынны код, які таксама будзе 669 00:32:17,300 --> 00:32:17,975 загадкавымі для вас. 670 00:32:17,975 --> 00:32:19,410 Вам не трэба турбавацца пра іх. 671 00:32:19,410 --> 00:32:24,930 Але ў цэлым, так, яны будуць быць у. аб файлы гатовыя да працы. 672 00:32:24,930 --> 00:32:27,170 >> СТУДЭНЦКАЯ: Такім чынам, калі вы грузіць да бібліятэка, вы толькі грузім 673 00:32:27,170 --> 00:32:28,880 . Ч і. Аб? 674 00:32:28,880 --> 00:32:32,210 Вы не грузім. Гр або. С. 675 00:32:32,210 --> 00:32:33,070 >> Джэйсан Хиршхорн: Так - 676 00:32:33,070 --> 00:32:36,260 і гэта ў гэтай кароткай, а таксама, калі гэтая інфармацыя, здаецца, прыходзіць 677 00:32:36,260 --> 00:32:36,700 трохі хутка. 678 00:32:36,700 --> 00:32:39,870 Але мала кампілятараў кажа пра гэта, а таксама. 679 00:32:39,870 --> 00:32:43,290 Калі вы грузіце бібліятэку, калі вы ставіце . Г, файл загалоўка, тых, 680 00:32:43,290 --> 00:32:46,290 прататыпы функцый, а таксама 1-х і 0-х, гэта ўсё, што трэба даць. 681 00:32:46,290 --> 00:32:50,640 Вам не трэба, каб даць як Функцыя працуе,. З файл. 682 00:32:50,640 --> 00:32:56,360 Так як кропка абстракцыі, або пазначыць інтэрфейсы, кропка, у гэтым SPL, 683 00:32:56,360 --> 00:32:59,650 пераносная бібліятэка Стэнфард, гэта для вас, каб не турбавацца аб тым, як новыя 684 00:32:59,650 --> 00:33:04,220 GRect працуе, або як рухацца работ, або як дадаць работ. 685 00:33:04,220 --> 00:33:06,520 Усё, што вам трэба ведаць, што дадаць з'яўляецца функцыяй, што вы можаце 686 00:33:06,520 --> 00:33:08,880 выкарыстоўваць, і ён робіць гэта. 687 00:33:08,880 --> 00:33:12,760 Такім чынам, вы сапраўды не трэба ведаць, як гэта напісана ў C. трэба проста 688 00:33:12,760 --> 00:33:15,460 ведаю, вось функцыі, тое, што яны зрабіць, і вось'S 1 і 0 689 00:33:15,460 --> 00:33:18,870 калі вы сапраўды хочаце іх выкарыстоўваць. 690 00:33:18,870 --> 00:33:19,530 >> Крута. 691 00:33:19,530 --> 00:33:26,980 Ёсць яшчэ пытанні па кампілятараў або іншыя тэмы на дошцы? 692 00:33:26,980 --> 00:33:30,300 >> Студэнт: У мяне ёсць пытанне аб рэалізацыі рэкурсіўных функцый. 693 00:33:30,300 --> 00:33:31,170 Пытанне аб рэкурсіі. 694 00:33:31,170 --> 00:33:33,030 У мяне было адчуванне, што б прыдумаць. 695 00:33:33,030 --> 00:33:38,310 Так што давайце хутка прайсці Рэкурсія з пэўным 696 00:33:38,310 --> 00:33:40,690 Напрыклад, фактарыяла. 697 00:33:40,690 --> 00:33:44,920 Таму што гэта прыклад, які часта з'яўляецца або выкарыстоўваецца 698 00:33:44,920 --> 00:33:46,170 каб праілюстраваць рэкурсіі. 699 00:33:46,170 --> 00:33:52,390 700 00:33:52,390 --> 00:33:56,410 >> Такім чынам, "4!" чытаецца як 4 фактарыяла. 701 00:33:56,410 --> 00:33:59,120 І што 4 фактарны значыць? 702 00:33:59,120 --> 00:34:00,696 Што гэта рабіць? 703 00:34:00,696 --> 00:34:02,235 Як разлічыць 4 фактарыяла? 704 00:34:02,235 --> 00:34:05,250 705 00:34:05,250 --> 00:34:07,960 4 разы 3 раз 2 раз 1. 706 00:34:07,960 --> 00:34:11,889 >> Так яшчэ адзін спосаб напісаць 4 фактарыяла з'яўляецца, каб напісаць гэта. 707 00:34:11,889 --> 00:34:16,780 708 00:34:16,780 --> 00:34:19,022 4 разы 3 фактарны. 709 00:34:19,022 --> 00:34:22,080 Таму што 3 фактарыяла 3 разы 2 раз 1. 710 00:34:22,080 --> 00:34:27,580 Так у 4 разы 3 фактарыяла 4 раз 3 раз 2 раз 1. 711 00:34:27,580 --> 00:34:32,679 Вось чаму фактарны з'яўляецца выдатным кандыдат на рэкурсіі, таму што гэта 712 00:34:32,679 --> 00:34:36,630 Зразумела, што ёсць нешта, што адбываецца зноў і зноў і зноў на 713 00:34:36,630 --> 00:34:39,820 меншая колькасць рэчаў да вы дойдзе да канца. 714 00:34:39,820 --> 00:34:42,570 Калі вы дасягне 1, 1 фактарыяла 1. 715 00:34:42,570 --> 00:34:43,719 Вы не можаце пайсці значна далей. 716 00:34:43,719 --> 00:34:47,219 0 фактарны таксама вызначаецца як 1. 717 00:34:47,219 --> 00:34:50,679 Таму, калі вы атрымліваеце 1 або 0, вы у рэшце рэшт, і вы можаце 718 00:34:50,679 --> 00:34:53,219 пачаць ісці назад. 719 00:34:53,219 --> 00:34:59,540 Так што, калі мы хацелі напісаць рэкурсіўны Функцыя для вылічэнні фактарыяла, 720 00:34:59,540 --> 00:35:02,170 мы збіраемся напісаць некаторыя псевдокод, што цяпер. 721 00:35:02,170 --> 00:35:03,300 Перш, чым мы напісаць, што псевдокод - 722 00:35:03,300 --> 00:35:05,660 Я дам вам, хлопцы пару хвілін напісаць псевдокод або проста думаю, 723 00:35:05,660 --> 00:35:09,600 пра гэта - Ёсць дзве рэчы, кожныя рэкурсіўная функцыя мае патрэбу. 724 00:35:09,600 --> 00:35:12,530 Якія гэтыя дзве рэчы? 725 00:35:12,530 --> 00:35:13,220 >> Джэк: Ён павінен называць сябе. 726 00:35:13,220 --> 00:35:13,680 >> Джэйсан Хиршхорн: Ной? 727 00:35:13,680 --> 00:35:14,460 О, Джэк. 728 00:35:14,460 --> 00:35:15,100 Ідзем далей. 729 00:35:15,100 --> 00:35:16,640 >> Джэк: Ён павінен называць сябе. 730 00:35:16,640 --> 00:35:19,220 >> Джэйсан Хиршхорн: Так рэкурсіўны функцыя павінна рэкурсіўны выклік, 731 00:35:19,220 --> 00:35:20,220 патэлефанаваць у сабе. 732 00:35:20,220 --> 00:35:20,770 Гэта адна. 733 00:35:20,770 --> 00:35:21,510 І тое, што іншая справа? 734 00:35:21,510 --> 00:35:22,250 >> Джэк: базавы варыянт. 735 00:35:22,250 --> 00:35:23,780 >> Джэйсан Хиршхорн: базавы варыянт. 736 00:35:23,780 --> 00:35:26,940 Базавая выпадак, вось, калі мы спыняемся. 737 00:35:26,940 --> 00:35:29,510 Так што ваша функцыя выклікаецца. 738 00:35:29,510 --> 00:35:31,410 Базавы варыянт стаіць на першым месцы. 739 00:35:31,410 --> 00:35:33,710 Вы хочаце ведаць, калі вы ў канцы. 740 00:35:33,710 --> 00:35:37,110 І калі вы не ў канцы, вы зрабіць свой рэкурсіўны выклік. 741 00:35:37,110 --> 00:35:39,880 І вы ідзяце праз гэтую функцыю зноў, праверыць базавы варыянт зноў. 742 00:35:39,880 --> 00:35:42,575 Калі вы яшчэ не канец, вы робіце іншы рэкурсіўны выклік, 743 00:35:42,575 --> 00:35:44,130 і гэтак далей, і гэтак далей. 744 00:35:44,130 --> 00:35:47,110 >> Вось чаму рэкурсіўныя функцыі заўсёды патрэбныя гэтыя базавыя выпадкі і тыя, 745 00:35:47,110 --> 00:35:48,210 рэкурсіўныя выклікі. 746 00:35:48,210 --> 00:35:51,280 Калі ў вас няма рэкурсіўны выклік, гэта не будзе рэкурсіўная функцыя. 747 00:35:51,280 --> 00:35:53,210 Калі ў вас не было базавы варыянт, Вы пайшлі б назаўсёды і 748 00:35:53,210 --> 00:35:54,780 там не было б канчатак. 749 00:35:54,780 --> 00:35:57,870 І базавы варыянт заўсёды на першым месцы, таму што вы заўсёды хочаце, каб праверыць 750 00:35:57,870 --> 00:36:00,420 калі вы ў канцы першага. 751 00:36:00,420 --> 00:36:04,770 Таму, перш чым зрабіць некаторыя псевдокод, чаму Вы не знайдзіце хвілінку, каб падумаць аб 752 00:36:04,770 --> 00:36:09,360 як рэкурсіўны фактарыяла было б напісана? 753 00:36:09,360 --> 00:36:23,340 754 00:36:23,340 --> 00:36:26,010 >> Акрамя таго, як многія, як вы робіце, ліст гэта на лісце паперы з'яўляецца 755 00:36:26,010 --> 00:36:27,960 тое, што вы будзеце мець, каб зрабіць на віктарыне заўтра. 756 00:36:27,960 --> 00:36:32,160 Так, верагодна, добрая практыка, каб зрабіць што код вы пішаце 757 00:36:32,160 --> 00:36:34,420 ўніз на ліст паперы - 758 00:36:34,420 --> 00:36:35,160 ці вы можаце зрабіць гэта. 759 00:36:35,160 --> 00:36:36,710 Вы ведаеце, дзе кропкі з коскі. 760 00:36:36,710 --> 00:36:37,660 Вы памятаеце сінтаксіс. 761 00:36:37,660 --> 00:36:40,400 Таму што вы не ў стане мець кампілятар сказаць вы зрабілі памылку. 762 00:36:40,400 --> 00:37:02,356 763 00:37:02,356 --> 00:37:07,240 >> Акрамя таго, у гэтым кірунку, заўтра, калі Вы кадавання праблемы, калі вы 764 00:37:07,240 --> 00:37:11,490 кінуліся за час, або калі вы вельмі блытаць, як вы, як мяркуецца, 765 00:37:11,490 --> 00:37:16,030 напісаць пэўную рэч у з, гэта трэба было б вам напісаць псеўда-код 766 00:37:16,030 --> 00:37:18,160 або пісаць каментары ў а. 767 00:37:18,160 --> 00:37:21,940 Таму што ёсць частковае крэдыт на Шмат пытанняў па віктарыны. 768 00:37:21,940 --> 00:37:24,840 Так што вы можаце быць паспеху, ці вы можа проста блытаць. 769 00:37:24,840 --> 00:37:28,030 Даць у каментарах або псеўда-код часта спосабы, якія вы 770 00:37:28,030 --> 00:37:29,360 можа атрымаць частковы крэдыт. 771 00:37:29,360 --> 00:37:31,440 >> Так што не пакінуць нешта пусты на віктарыне. 772 00:37:31,440 --> 00:37:33,490 Там няма пакарання за пакласці рэчы цалі 773 00:37:33,490 --> 00:37:37,650 На самай справе, мяркуючы ў псеўда-код або каментары збіраецца дапамагчы грэйдэр 774 00:37:37,650 --> 00:37:40,410 высветліць, калі вы на самой справе ведаеце, што Вы кажаце пра, і, магчыма, ўзнагароду 775 00:37:40,410 --> 00:37:42,030 Вы некаторая частковая заслуга ў гэтым. 776 00:37:42,030 --> 00:37:44,510 >> Таксама ў гэтым кірунку, пісаць ясна. 777 00:37:44,510 --> 00:37:47,650 Калі мы можам на самай справе не тое, што вы пішаце, мы не збіраемся называць цябе 778 00:37:47,650 --> 00:37:49,900 у поўнач заўтра да постаці тое, што вы напісалі. 779 00:37:49,900 --> 00:37:51,520 Мы проста збіраемся зняць акуляры. 780 00:37:51,520 --> 00:37:56,570 Пішыце ясна, каб мы маглі пачуць, дакладней, мы можам прачытаць, што вы напісалі. 781 00:37:56,570 --> 00:38:00,230 >> І калі ён кажа, дзве прапановы, не напісаць абзац. 782 00:38:00,230 --> 00:38:02,280 Выконвайце інструкцыі. 783 00:38:02,280 --> 00:38:03,500 Пішыце ясна. 784 00:38:03,500 --> 00:38:07,720 І пісаць у гэтых заўвагаў ці псевдокод для пытанняў, якія маглі б 785 00:38:07,720 --> 00:38:10,270 Узнагарода частковае крэдыт. 786 00:38:10,270 --> 00:38:12,520 >> Добра, давайце вернемся да фактарыяла. 787 00:38:12,520 --> 00:38:15,000 Таму ў нас ёсць функцыя фактарыяла. 788 00:38:15,000 --> 00:38:18,400 789 00:38:18,400 --> 00:38:21,550 Калі б я быў на самай справе пішу гэта ў C, што мне трэба паставіць перад імем 790 00:38:21,550 --> 00:38:22,800 функцыі? 791 00:38:22,800 --> 00:38:24,880 792 00:38:24,880 --> 00:38:30,060 Які вяртаецца тып, які, у гэтым так, мы дамо яму Int. 793 00:38:30,060 --> 00:38:35,450 А потым у фігурных дужках, з'яўляецца тое, што адбываецца ў фігурных дужках для 794 00:38:35,450 --> 00:38:36,850 функцыя? 795 00:38:36,850 --> 00:38:37,950 >> СТУДЭНТЫ: Тып аргументу. 796 00:38:37,950 --> 00:38:39,150 >> Джэйсан Хиршхорн: Яе аргументы. 797 00:38:39,150 --> 00:38:42,680 Так фактарны, верагодна, прымаць аргумент. 798 00:38:42,680 --> 00:38:44,500 Гэта, напэўна, толькі ўзяць адзін аргумент. 799 00:38:44,500 --> 00:38:49,450 І мы скажам гэта зойме цэлы лік, званае х. 800 00:38:49,450 --> 00:38:52,770 І зноў, пры напісанні прататып функцыя або запісы функцыю 801 00:38:52,770 --> 00:38:57,110 у кодзе перад яго вызначэння, вам напісаць тып дадзеных і імя 802 00:38:57,110 --> 00:39:01,370 гэтая пераменная толькі для гэтай функцыі. 803 00:39:01,370 --> 00:39:06,350 Такім чынам, вы можаце перадаць некаторы колькасць у гэта функцыя, яна будзе называцца х 804 00:39:06,350 --> 00:39:07,340 ўнутры. 805 00:39:07,340 --> 00:39:08,755 >> У нас ёсць функцыю фактарыяла. 806 00:39:08,755 --> 00:39:12,030 807 00:39:12,030 --> 00:39:15,850 Нам трэба дзве рэчы, базавы варыянт і рэкурсіўны выклік. 808 00:39:15,850 --> 00:39:20,900 Што такое базавы варыянт для фактарыяла? 809 00:39:20,900 --> 00:39:24,850 Кто-то, хто яе напісаў, а хто не мае кажуць яшчэ, што з'яўляецца базавым 810 00:39:24,850 --> 00:39:26,100 чахол для фактарыяла? 811 00:39:26,100 --> 00:39:28,400 812 00:39:28,400 --> 00:39:30,930 >> СТУДЭНЦКАЯ: Калі п менш чым 2, вярнуць 1. 813 00:39:30,930 --> 00:39:33,520 >> Джэйсан Хиршхорн: Калі п менш за 2, вярнуць 1. 814 00:39:33,520 --> 00:39:37,216 Мне гэта падабаецца, таму што гэта клапоціцца пра 0 і 1. 815 00:39:37,216 --> 00:39:45,290 Так зробім х <2, вярнуць 1. 816 00:39:45,290 --> 00:39:47,870 Калі нас прайшло 0, калі мы атрымаем прайшло 1, гэтая функцыя будзе 817 00:39:47,870 --> 00:39:49,790 неадкладна вярнуць 1. 818 00:39:49,790 --> 00:39:54,020 Калі нас прайшло некаторы лік, большае або роўна 2, мы збіраемся 819 00:39:54,020 --> 00:39:55,370 ёсць наш рэкурсіўны выклік. 820 00:39:55,370 --> 00:39:57,855 >> І так як гэта тое, што будзе працаваць? 821 00:39:57,855 --> 00:40:01,070 Можа хто-то яшчэ, хто працаваў над гэтым якія пакуль не кажуць, дайце мне 822 00:40:01,070 --> 00:40:07,380 рэкурсіўны выклік для гэтай функцыі у псевдокоде? 823 00:40:07,380 --> 00:40:10,770 Калі мы атрымаць прайшло ў колькасці х і гэта больш, чым 2, то 824 00:40:10,770 --> 00:40:13,370 мы хочам зрабіць? 825 00:40:13,370 --> 00:40:17,930 Мы таксама прыклад напісана на бок, якая можа даць вам падказку. 826 00:40:17,930 --> 00:40:20,770 >> СТУДЭНЦКАЯ: Патэлефануйце х раз Фактарыяла х мінус 1? 827 00:40:20,770 --> 00:40:22,020 >> Джэйсан Хиршхорн: Цалкам дакладна. 828 00:40:22,020 --> 00:40:24,610 829 00:40:24,610 --> 00:40:37,750 Мы збіраемся вярнуцца х раз Фактарыяла х мінус 1. 830 00:40:37,750 --> 00:40:41,810 І, што, хоць я і напісаў, у асноўным, тое, што вы сказалі, на англійскай мове, 831 00:40:41,810 --> 00:40:44,580 гэта фактарыяла будзе выкліканы зноў. 832 00:40:44,580 --> 00:40:46,320 Гэта будзе выконвацца на х мінус 1. 833 00:40:46,320 --> 00:40:49,320 Гэта будзе вярнуцца з некаторага цэлага, і то ён будзе размнажацца гэтыя два 834 00:40:49,320 --> 00:40:52,050 разам, і гэта значэнне будзе вярнуўся да таго, што называецца гэта 835 00:40:52,050 --> 00:40:55,010 фактарыяла, якія маглі б яшчэ адзін асобнік 836 00:40:55,010 --> 00:40:58,420 гэта фактарыяла. 837 00:40:58,420 --> 00:41:01,360 >> Так што гэта прыклад рэкурсіўнай Функцыя, вельмі 838 00:41:01,360 --> 00:41:02,530 проста рэкурсіўная функцыя. 839 00:41:02,530 --> 00:41:04,530 Але большасць з іх будзе так. 840 00:41:04,530 --> 00:41:11,170 Калі вы хацелі б добрую рэкурсіўным выклік для віктарыны, паспрабуйце кадавання 841 00:41:11,170 --> 00:41:13,230 бінарны пошук рэкурсіўна. 842 00:41:13,230 --> 00:41:18,950 Таму што, калі вы зрабілі бінарны пошук для Праблема ўсталяваць тры, вы, верагодна, зрабіў гэта 843 00:41:18,950 --> 00:41:21,730 шматкроць у цыкле. 844 00:41:21,730 --> 00:41:23,700 >> Але гэта таксама можа быць запісана рэкурсіўна. 845 00:41:23,700 --> 00:41:26,310 Вы будзеце мець патрэбу, каб напісаць уласны асобная функцыя, якая прымае некаторыя 846 00:41:26,310 --> 00:41:29,020 розныя аргументы каманднага радка - ці ня аргументы каманднага радка, некаторыя 847 00:41:29,020 --> 00:41:30,910 розныя толькі рэгулярныя аргументы. 848 00:41:30,910 --> 00:41:33,870 Але вы маглі б напісаць бінарны пошук рэкурсіўна, а таксама. 849 00:41:33,870 --> 00:41:36,190 >> СТУДЭНЦКАЯ: Такім чынам, вы, магчыма, таксама напісаў, замест х мінус 1, вы 850 00:41:36,190 --> 00:41:39,502 можа таксама напісаў х мінус мінус, ці вы маглі б 851 00:41:39,502 --> 00:41:40,830 напісана мінус мінус х. 852 00:41:40,830 --> 00:41:44,740 Вы можаце проста растлумачыць вельмі хутка, чаму тыя былі б розныя рэчы, 853 00:41:44,740 --> 00:41:49,510 як тое, што розніца паміж х мінус мінус і мінус мінус х? 854 00:41:49,510 --> 00:41:51,320 >> Джэйсан Хиршхорн: Не, я не буду ўдавацца ў гэта. 855 00:41:51,320 --> 00:41:55,500 Але я буду гаварыць з вамі пра гэта пасля таго, як клас. х мінус мінус, мінус мінус х 856 00:41:55,500 --> 00:41:57,780 памяншэння х на 1. 857 00:41:57,780 --> 00:41:59,090 Але яны робяць гэта крыху па-іншаму. 858 00:41:59,090 --> 00:42:00,340 Але я не хачу ўдавацца ў гэта. 859 00:42:00,340 --> 00:42:04,330 860 00:42:04,330 --> 00:42:09,090 Іншыя пытанні аб рэкурсіі або гэтая функцыя? 861 00:42:09,090 --> 00:42:10,140 Гэта не зусім нават псевдокод. 862 00:42:10,140 --> 00:42:15,060 Вось у прынцыпе і код у C можна было б напісаць для гэтага. 863 00:42:15,060 --> 00:42:19,393 >> OK, любыя іншыя пытанні пра тэмы тут? 864 00:42:19,393 --> 00:42:19,864 Так. 865 00:42:19,864 --> 00:42:23,130 >> СТУДЭНЦКАЯ: У мяне ёсць кароткі спіс з якая плавае кропкай і дакладнасць. 866 00:42:23,130 --> 00:42:24,260 >> Джэйсан Хиршхорн: Плывучы кропкі і дакладнасць. 867 00:42:24,260 --> 00:42:26,920 Можа хто-то вельмі хутка даць мне кароткі выклад 868 00:42:26,920 --> 00:42:28,210 з якая плавае кропкай і дакладнасць? 869 00:42:28,210 --> 00:42:30,420 Вы ўсе павінны былі зрабіць гэта для вашага Праблема ўсталяваць, так што вы ўсё 870 00:42:30,420 --> 00:42:31,700 знаёмыя з ёй. 871 00:42:31,700 --> 00:42:35,090 Ці, можа быць, не ўсе з вас. 872 00:42:35,090 --> 00:42:36,602 Любы? 873 00:42:36,602 --> 00:42:39,530 Дайце мне пачалі пляма. 874 00:42:39,530 --> 00:42:40,750 З якая плавае кропкай і дакладнасць. 875 00:42:40,750 --> 00:42:42,380 У чым праблема? 876 00:42:42,380 --> 00:42:42,960 Так. 877 00:42:42,960 --> 00:42:43,680 Вікторыя? 878 00:42:43,680 --> 00:42:44,480 >> VANESSA: Ванэса. 879 00:42:44,480 --> 00:42:45,285 >> Джэйсан Хиршхорн: Ванэса. 880 00:42:45,285 --> 00:42:45,680 Выбачайце. 881 00:42:45,680 --> 00:42:51,550 >> VANESSA: Там толькі канчатковае лік лікаў, якія могуць быць прадстаўлены 882 00:42:51,550 --> 00:42:57,930 таму што вы знаходзіцеся на, у нашым так, 32-разрадная сістэма. 883 00:42:57,930 --> 00:43:03,080 Такім чынам, што вы ўжо часткова павінны складаюць некаторыя лічбы. 884 00:43:03,080 --> 00:43:03,910 >> Джэйсан Хиршхорн: Дык вось Цалкам дакладна. 885 00:43:03,910 --> 00:43:08,110 Ёсць толькі пэўную колькасць колькасці, якія могуць быць прадстаўлены. 886 00:43:08,110 --> 00:43:11,770 Калі памножыць два вельмі вялікіх лікаў, гэта можа перапоўніць колькасць 887 00:43:11,770 --> 00:43:13,950 прастор ў вас ёсць, каб прадстаўляць цэлым лікам. 888 00:43:13,950 --> 00:43:17,930 Вось чаму часам мы выкарыстоўваем даўным замест Int. 889 00:43:17,930 --> 00:43:19,210 Гэта мае больш прасторы. 890 00:43:19,210 --> 00:43:21,210 Гэта можа трымаць большую колькасць. 891 00:43:21,210 --> 00:43:24,310 >> Дакладнасці з якая плавае коскі мае дачыненне да , Але таксама мае дачыненне да 892 00:43:24,310 --> 00:43:29,300 Справа ў тым, што дзесятковыя лічбы не заўсёды ўяўляецца. 893 00:43:29,300 --> 00:43:29,540 Выбачайце. 894 00:43:29,540 --> 00:43:31,280 Дазвольце мне сказаць гэта назад уверх. 895 00:43:31,280 --> 00:43:36,610 Дзесятковы лік 1.0 не заўсёды прадстаўлены як вы чакалі б, 896 00:43:36,610 --> 00:43:40,770 1,000000000. 897 00:43:40,770 --> 00:43:50,360 Гэта часам прадстаўлены ў выглядзе 1,000000001 або ,999999999. 898 00:43:50,360 --> 00:43:52,780 Гэта можа быць нават 89 кінуты дзесьці там. 899 00:43:52,780 --> 00:43:56,560 Так што тыя дзесятковыя лікі не прадстаўлены гэтак жа, як вы б 900 00:43:56,560 --> 00:43:58,430 чакаць, што яны павінны быць прадстаўлены. 901 00:43:58,430 --> 00:44:00,010 >> Такім чынам, у праблеме набор - 902 00:44:00,010 --> 00:44:00,860 гэта было два? - 903 00:44:00,860 --> 00:44:05,290 Праблема ўсталяваць два, дзе мы мелі справу з колькасці з якая плавае кропкай, калі мы хацелі 904 00:44:05,290 --> 00:44:08,690 ім прадстаўляць менавіта тое, што мы хацелі ім прадстаўляць, лік 905 00:44:08,690 --> 00:44:12,860 пені, або колькасць цэнтаў, памножым іх на 100. 906 00:44:12,860 --> 00:44:14,750 Мы акружылі іх. 907 00:44:14,750 --> 00:44:18,660 А потым мы адрэзалі ўсе пасля коскі. 908 00:44:18,660 --> 00:44:22,020 Гэта было для таго, каб яны былі б фактычна роўныя менавіта тое, што мы хацелі 909 00:44:22,020 --> 00:44:22,410 ім раўняцца. 910 00:44:22,410 --> 00:44:26,870 >> Таму што, калі вы бераце тое, што гэта плаваць і ператварыць яго ў міжнар, вы 911 00:44:26,870 --> 00:44:29,860 адрэзаць усё, каб правы дзесятковай кропкі. 912 00:44:29,860 --> 00:44:33,900 Таму што ёсць некаторыя з якая плавае кропкай недакладнасць, 100.000 можа быць 913 00:44:33,900 --> 00:44:37,440 прадстаўлены ў выглядзе 99,999999999. 914 00:44:37,440 --> 00:44:40,350 І калі вы проста адрэзаць усё, каб права адразу ж, вы збіраецеся 915 00:44:40,350 --> 00:44:41,600 атрымаць няправільны нумар. 916 00:44:41,600 --> 00:44:44,050 917 00:44:44,050 --> 00:44:44,180 Так. 918 00:44:44,180 --> 00:44:45,290 >> Студэнт: У мяне было пытанне аб прывядзенні. 919 00:44:45,290 --> 00:44:47,500 Які парадак гэта адбываецца ў? 920 00:44:47,500 --> 00:44:54,480 Калі вы хочаце зрабіць паплавок, кранштэйны, 1 падзелены на 10, яна робіць 1 дзеліцца на 10, 921 00:44:54,480 --> 00:44:58,910 затым атрымаць 0,1, а затым уключыце гэта ў звароце? 922 00:44:58,910 --> 00:45:01,470 >> Джэйсан Хиршхорн: Калі вы робіце плаваць 1 дзеліцца на 10 - 923 00:45:01,470 --> 00:45:02,550 >> СТУДЭНЦКАЯ: Так, а потым складае - 924 00:45:02,550 --> 00:45:04,240 Ну, было б нармальна ёсць яго роўным ў - 925 00:45:04,240 --> 00:45:04,690 Так. 926 00:45:04,690 --> 00:45:06,760 Вы хочаце, каб зрабіць яго плаваць, ці не так? 927 00:45:06,760 --> 00:45:12,790 >> Джэйсан Хиршхорн: Такім чынам, мы збіраемся выкарыстоўваць гэта, каб непасрэдна перайсці ў высвятленне таго, 928 00:45:12,790 --> 00:45:15,390 адказы на гэтыя пытанні праз кадзіраванне. 929 00:45:15,390 --> 00:45:18,180 Таму што вы, верагодна, ёсць шмат гэтыя драбнюткія пытанні, і гэта добры спосаб 930 00:45:18,180 --> 00:45:19,100 для іх вырашэння праз кадзіраванне. 931 00:45:19,100 --> 00:45:21,320 Так што мы збіраемся, каб закадаваць гэта прама цяпер, а затым мы збіраемся вярнуцца і 932 00:45:21,320 --> 00:45:24,020 код на пытанне, вы павінны былі. 933 00:45:24,020 --> 00:45:24,950 >> Такім чынам, першы радок - 934 00:45:24,950 --> 00:45:29,390 Я не павінен быў напісаць яго - што гэта Першае, што мы хочам зрабіць, калі мы 935 00:45:29,390 --> 00:45:32,250 адкрыць новы файл у Gedit? 936 00:45:32,250 --> 00:45:34,190 >> СТУДЭНЦКАЯ: Уключыце. 937 00:45:34,190 --> 00:45:35,920 >> Джэйсан Хиршхорн: Уключыце што? 938 00:45:35,920 --> 00:45:37,952 >> СТУДЭНЦКАЯ: бібліятэка CS50. 939 00:45:37,952 --> 00:45:39,920 >> Джэйсан Хиршхорн: ОК. 940 00:45:39,920 --> 00:45:42,590 Што яшчэ мы павінны ўключыць? 941 00:45:42,590 --> 00:45:46,820 Мы проста збіраемся, каб праверыць, што адбываецца , Калі вы прыводзіце нешта паплаўком. 942 00:45:46,820 --> 00:45:48,605 Але тое, што мы павінны ўключыць, калі мы збіраюся напісаць праграму на З? 943 00:45:48,605 --> 00:45:49,300 >> СТУДЭНЦКАЯ: Standard I / O. 944 00:45:49,300 --> 00:45:50,625 >> Джэйсан Хиршхорн: stdio.h. 945 00:45:50,625 --> 00:45:54,880 Мы на самой справе не трэба, для гэтага Праграма, cs50.h, хоць гэта 946 00:45:54,880 --> 00:45:55,920 заўсёды карысна ўключыць яго. 947 00:45:55,920 --> 00:45:58,260 Але мы заўсёды павінны stdio.h. 948 00:45:58,260 --> 00:45:59,660 >> СТУДЭНЦКАЯ: Пры кадаванні ў С? 949 00:45:59,660 --> 00:46:15,770 >> Джэйсан Хиршхорн: Пры кадаванні ў С. 950 00:46:15,770 --> 00:46:17,090 >> Так што я захаваць яго, як гэта. Гр файла. 951 00:46:17,090 --> 00:46:18,590 Я атрымаць некаторыя цікавыя падсвятленне сінтаксісу. 952 00:46:18,590 --> 00:46:22,890 Я напісаў пустэчу ўнутры асноўнай. 953 00:46:22,890 --> 00:46:24,792 Што несапраўдным на ўвазе? 954 00:46:24,792 --> 00:46:26,740 >> Студэнты не нясе ніякай аргументы каманднага радка. 955 00:46:26,740 --> 00:46:28,900 >> Джэйсан Хиршхорн: адпадае сродкі, у гэтым выпадак, галоўны не нясе ніякай 956 00:46:28,900 --> 00:46:29,700 аргументы каманднага радка. 957 00:46:29,700 --> 00:46:32,720 У іншых выпадках, гэта азначае, што функцыі не бярэ аргументы каманднага радка. 958 00:46:32,720 --> 00:46:36,560 Або функцыя, калі б мне прыйшлося пісаць пустэчу асноўных (несапраўднымі), што б сказаў асноўныя гадоў 959 00:46:36,560 --> 00:46:38,460 не вяртаюцца нічога. 960 00:46:38,460 --> 00:46:39,960 Так несапраўднымі проста нічога не значыць. 961 00:46:39,960 --> 00:46:42,510 Што б я напісаць, калі б я прымаць аргументы каманднага радка? 962 00:46:42,510 --> 00:46:45,250 963 00:46:45,250 --> 00:46:47,150 >> СТУДЭНЦКАЯ: унутр дугі з радок дугі супраць 964 00:46:47,150 --> 00:46:49,055 >> Джэйсан Хиршхорн: унутр агдс радок агду. 965 00:46:49,055 --> 00:46:54,050 966 00:46:54,050 --> 00:46:55,572 Ці так гэта? 967 00:46:55,572 --> 00:46:58,720 >> СТУДЭНЦКАЯ: Гэта знакавыя зорка ARGV дужкі. 968 00:46:58,720 --> 00:47:01,730 >> Джэйсан Хиршхорн: Такім чынам, вы маглі б напісаць Радок ARGV кранштэйны або знак зоркі агду 969 00:47:01,730 --> 00:47:03,710 дужкі, але вы павінны дужкі. 970 00:47:03,710 --> 00:47:06,290 Таму агду з'яўляецца масівам радкоў, памятаю. 971 00:47:06,290 --> 00:47:07,360 Гэта не проста адна струна. 972 00:47:07,360 --> 00:47:10,350 Так радок агду ёсць, вось гэта адзін радок называецца агду. 973 00:47:10,350 --> 00:47:13,630 Радок ARGV дужках, вось масіў радкоў. 974 00:47:13,630 --> 00:47:17,865 Так унутр агдс радок ARGV дужкі будзе тое, што я 975 00:47:17,865 --> 00:47:18,810 , Верагодна, напісаць. 976 00:47:18,810 --> 00:47:23,050 >> Такім чынам, вы хацелі захаваць у выглядзе цэлага ліку? 977 00:47:23,050 --> 00:47:24,285 >> СТУДЭНЦКАЯ: Так, цэлы лік. 978 00:47:24,285 --> 00:47:25,840 Або ў звароце. 979 00:47:25,840 --> 00:47:26,710 >> Джэйсан Хиршхорн: У паплаўком? 980 00:47:26,710 --> 00:47:30,790 Маўляў, паплавок х роўная 1 дзеліцца на 10. 981 00:47:30,790 --> 00:47:32,040 >> Джэйсан Хиршхорн: ОК. 982 00:47:32,040 --> 00:47:40,160 983 00:47:40,160 --> 00:47:42,240 Як мне раздрукаваць паплавок у Printf? 984 00:47:42,240 --> 00:47:45,100 985 00:47:45,100 --> 00:47:46,714 Што? 986 00:47:46,714 --> 00:47:47,560 >> СТУДЭНЦКАЯ% е. 987 00:47:47,560 --> 00:47:48,300 >> Джэйсан Хиршхорн:% е. 988 00:47:48,300 --> 00:47:50,810 Што цэлае? 989 00:47:50,810 --> 00:47:52,110 г, ці я. 990 00:47:52,110 --> 00:47:53,000 Што радок? 991 00:47:53,000 --> 00:47:54,240 >> СТУДЭНЦКАЯ: с. 992 00:47:54,240 --> 00:47:56,140 >> Джэйсан Хиршхорн: с. 993 00:47:56,140 --> 00:47:57,550 Як я магу атрымаць новую лінію? 994 00:47:57,550 --> 00:47:58,800 >> СТУДЭНЦКАЯ: Зваротная касая рыса н. 995 00:47:58,800 --> 00:48:04,610 996 00:48:04,610 --> 00:48:07,100 >> Джэйсан Хиршхорн: Што мне вярнуцца калі асноўныя трасы правільна? 997 00:48:07,100 --> 00:48:08,360 >> СТУДЭНЦКАЯ: 0. 998 00:48:08,360 --> 00:48:09,430 Ці трэба мне напісаць гэтую лінію, хоць? 999 00:48:09,430 --> 00:48:10,170 >> СТУДЭНЦКАЯ: Не. 1000 00:48:10,170 --> 00:48:11,513 Добра, мы не будзем пісаць, то. 1001 00:48:11,513 --> 00:48:16,450 1002 00:48:16,450 --> 00:48:17,190 Ці ўсё могуць прачытаць, што? 1003 00:48:17,190 --> 00:48:18,485 Гэта выглядае трохі малая. 1004 00:48:18,485 --> 00:48:20,160 Ці ўсё могуць убачыць, ці павінны Я зрабіць яго больш? 1005 00:48:20,160 --> 00:48:23,480 1006 00:48:23,480 --> 00:48:25,100 Я думаю, што для камеры, мы зробім гэта крыху больш, аднак. 1007 00:48:25,100 --> 00:48:35,750 1008 00:48:35,750 --> 00:48:38,410 >> Джэйсан Хиршхорн: Калі я хачу, каб ператварыць гэта . C файл у выкананы файл, што 1009 00:48:38,410 --> 00:48:39,260 я пішу? 1010 00:48:39,260 --> 00:48:41,610 >> СТУДЭНЦКАЯ: Зрабіце тэст. 1011 00:48:41,610 --> 00:48:42,080 >> Джэйсан Хиршхорн: Выбачайце? 1012 00:48:42,080 --> 00:48:42,790 >> СТУДЭНЦКАЯ: Зрабіце тэст. 1013 00:48:42,790 --> 00:48:44,040 >> Джэйсан Хиршхорн: Зрабіце тэст. 1014 00:48:44,040 --> 00:48:46,700 1015 00:48:46,700 --> 00:48:48,410 Мы казалі пра гэтая лінія раней. 1016 00:48:48,410 --> 00:48:49,140 Clang. 1017 00:48:49,140 --> 00:48:51,270 Што ляск? 1018 00:48:51,270 --> 00:48:52,200 Назва кампілятарам. 1019 00:48:52,200 --> 00:48:53,920 Што гэта лінія? 1020 00:48:53,920 --> 00:48:55,580 >> СТУДЭНЦКАЯ: Усталёўка яго на выкарыстанне GDB. 1021 00:48:55,580 --> 00:48:59,230 >> Джэйсан Хиршхорн: Наборы гэта на выкарыстанні GDB. 1022 00:48:59,230 --> 00:49:02,338 Гэтая лінія, што гэта такое? 1023 00:49:02,338 --> 00:49:03,290 >> СТУДЭНЦКАЯ: Зыходны код. 1024 00:49:03,290 --> 00:49:06,010 >> Джэйсан Хиршхорн: Гэта Зыходны файл,. З файл. 1025 00:49:06,010 --> 00:49:08,150 Што азначаюць гэтыя дзве лініі рабіць? 1026 00:49:08,150 --> 00:49:10,245 Ці гэтыя два не лініі. 1027 00:49:10,245 --> 00:49:12,300 >> СТУДЭНЦКАЯ: Ён называе гэта тэст. 1028 00:49:12,300 --> 00:49:15,410 >> Джэйсан Хиршхорн: Так працяжнік аб кажа, назваць яго нешта па-іншаму. 1029 00:49:15,410 --> 00:49:16,790 І вось вы тэлефануеце яго выпрабаванні. 1030 00:49:16,790 --> 00:49:18,900 Калі ў мяне не было, што ў, што б гэта назваць гэта? 1031 00:49:18,900 --> 00:49:20,260 >> СТУДЭНЦКАЯ: a.out. 1032 00:49:20,260 --> 00:49:22,340 >> Джэйсан Хиршхорн: a.out. 1033 00:49:22,340 --> 00:49:25,366 Што гэта рабіць? 1034 00:49:25,366 --> 00:49:27,670 >> СТУДЭНЦКАЯ: Спасылкі на матэматычную бібліятэку. 1035 00:49:27,670 --> 00:49:29,550 >> Джэйсан Хиршхорн: Ён звязвае у матэматычнай бібліятэкі. 1036 00:49:29,550 --> 00:49:32,880 Мы не ўключалі матэматычная бібліятэка, але так як гэта настолькі часта, яны ўжо 1037 00:49:32,880 --> 00:49:35,780 напісана марка заўсёды ўключаць матэматычная бібліятэка. 1038 00:49:35,780 --> 00:49:39,050 І гэтак жа, гэта ўключае ў сябе бібліятэка CS50. 1039 00:49:39,050 --> 00:49:43,010 >> Такім чынам, калі мы пералічым, у нас зараз ёсць выкананы званы тэст. 1040 00:49:43,010 --> 00:49:45,150 Каб выканаць яго, я пішу тэст. 1041 00:49:45,150 --> 00:49:48,330 Я бачу, што мой плавае кропкай, Як і чакалася, роўная 0. 1042 00:49:48,330 --> 00:49:50,890 1043 00:49:50,890 --> 00:49:51,590 Ці значыць гэта, - 1044 00:49:51,590 --> 00:49:52,060 так - 1045 00:49:52,060 --> 00:49:55,210 >> СТУДЭНЦКАЯ: Тады, калі вы паклалі плаваць зараз, як вы прывесці яго паплаўка - 1046 00:49:55,210 --> 00:49:56,870 >> Джэйсан Хиршхорн: Cast ад 1 да паплаўка? 1047 00:49:56,870 --> 00:49:59,180 >> СТУДЭНЦКАЯ: Не, кінуў поўны рэч - 1048 00:49:59,180 --> 00:49:59,500 так. 1049 00:49:59,500 --> 00:50:02,460 Калі вы толькі што зрабілі, што, бы якія робяць яго 0,1? 1050 00:50:02,460 --> 00:50:07,170 >> Джэйсан Хиршхорн: Добра, такім чынам вельмі хутка, 1 дзеліцца на 10, тыя 1051 00:50:07,170 --> 00:50:08,690 цэлыя падзеленая. 1052 00:50:08,690 --> 00:50:13,580 Таму, калі вы падзеліце цэлыя, яны 0, і вы эканоміце, што 0 у 1053 00:50:13,580 --> 00:50:17,170 плаваць, таму што слэш проста цэлалікавых дзяленне. 1054 00:50:17,170 --> 00:50:19,180 Так што цяпер мы павароту нешта ў звароце. 1055 00:50:19,180 --> 00:50:21,650 >> Давайце паглядзім, што адбудзецца. 1056 00:50:21,650 --> 00:50:22,900 Мы зробім тэст. 1057 00:50:22,900 --> 00:50:25,870 1058 00:50:25,870 --> 00:50:31,090 Так што цяпер мы бачым, што, што касая рыса не было цэлалікавых дзяленне было плавае 1059 00:50:31,090 --> 00:50:32,640 кропка дзялення. 1060 00:50:32,640 --> 00:50:35,700 Таму што адзін з яе аргументаў быў кінуты ў звароце. 1061 00:50:35,700 --> 00:50:38,380 Так што зараз гэта ўжо казаў, ставіцца да гэтага падзел, як мы маем справу з 1062 00:50:38,380 --> 00:50:40,140 плаваюць пункту, а не з цэлымі лікамі. 1063 00:50:40,140 --> 00:50:42,760 І такім чынам мы атрымліваем адказ мы чакаем. 1064 00:50:42,760 --> 00:50:44,620 >> Давайце паглядзім, што адбываецца - 1065 00:50:44,620 --> 00:50:47,103 упс. 1066 00:50:47,103 --> 00:50:51,646 Калі б я хацеў, каб надрукаваць больш дзесятковыя плямы, як я мог гэта зрабіць? 1067 00:50:51,646 --> 00:50:55,550 >> СТУДЭНЦКАЯ: Кропка кропка е, ці столькі, колькі знакаў пасля коскі, як вы хочаце. 1068 00:50:55,550 --> 00:51:02,280 1069 00:51:02,280 --> 00:51:04,440 >> Джэйсан Хиршхорн: Так што я раздрукаваць 10 дзесятковыя плямы. 1070 00:51:04,440 --> 00:51:06,610 І зараз мы бачым, што мы атрымліваем некаторыя дзіўныя рэчы. 1071 00:51:06,610 --> 00:51:09,650 І гэта ўзыходзіць на ваша пытанне аб плавае коскі недакладнасць. 1072 00:51:09,650 --> 00:51:10,950 Там у дзіўныя рэчы захоўваюцца тут. 1073 00:51:10,950 --> 00:51:13,650 1074 00:51:13,650 --> 00:51:15,275 >> ОК, ці значыць гэта адказ на ваша пытанне? 1075 00:51:15,275 --> 00:51:18,550 1076 00:51:18,550 --> 00:51:20,200 Што яшчэ вы хочаце хутка кадзіраваць? 1077 00:51:20,200 --> 00:51:25,470 >> СТУДЭНЦКАЯ: Я проста хацеў, каб убачыць ці ня, калі вы вызвалілі некаторы паказальнік, 1078 00:51:25,470 --> 00:51:30,410 яшчэ ці што паказальнік захоўвалі ў гэта таксама адрас, якой яна была 1079 00:51:30,410 --> 00:51:32,170 паказваючы на ​​раней. 1080 00:51:32,170 --> 00:51:34,100 >> Джэйсан Хиршхорн: ОК, так давайце зробім гэта. 1081 00:51:34,100 --> 00:51:38,030 Чара зорка PTR, гэта стварае зменную называецца PTR з знакавай тыпу зоркі. 1082 00:51:38,030 --> 00:51:39,280 Як напісаць Таноса? 1083 00:51:39,280 --> 00:51:40,550 Олдэн? 1084 00:51:40,550 --> 00:51:41,800 >> ALDEN: Проста Таноса. 1085 00:51:41,800 --> 00:51:44,820 1086 00:51:44,820 --> 00:51:51,040 Але тады ён павінен быць памер і у гэтым выпадку, я думаю, вы б 1087 00:51:51,040 --> 00:51:52,465 паказваць на знак. 1088 00:51:52,465 --> 00:51:54,450 Так што гэта будзе знак. 1089 00:51:54,450 --> 00:51:57,520 >> Джэйсан Хиршхорн: ОК, так што больш увогуле, ўнутры - 1090 00:51:57,520 --> 00:51:58,770 давайце рэдагавання. 1091 00:51:58,770 --> 00:52:05,100 1092 00:52:05,100 --> 00:52:09,260 Унутры Таноса, вы хочаце, каб шэраг байтаў ў кучы. 1093 00:52:09,260 --> 00:52:12,320 Як правіла, тое, што мы бачылі, што мы рабіць гэта мы збіраемся Malloc 1094 00:52:12,320 --> 00:52:14,940 радкі, напрыклад, або масівы цэлых лікаў. 1095 00:52:14,940 --> 00:52:21,600 Так што калі мы хочам 10 цэлых лікаў, або 10 сімвалы, 10 дасць нам 10. 1096 00:52:21,600 --> 00:52:24,370 А потым памер сімвалаў дасць нам, што памер сімвалаў, якія ў 1097 00:52:24,370 --> 00:52:25,120 гэты выпадак 1 байт. 1098 00:52:25,120 --> 00:52:26,250 Мы атрымліваем 10 байт. 1099 00:52:26,250 --> 00:52:28,540 Калі б мы павінны былі напісаць памер Int, што дасць нам 40 байт. 1100 00:52:28,540 --> 00:52:31,520 >> Так у больш агульным, усярэдзіне Таноса з'яўляецца колькасць байт вы хочаце. 1101 00:52:31,520 --> 00:52:34,620 У гэтым выпадку мы атрымліваем 1 байт. 1102 00:52:34,620 --> 00:52:36,900 Якія здаецца дзіўным выкарыстання з Таноса, але для нашага 1103 00:52:36,900 --> 00:52:38,470 мэты мае сэнс. 1104 00:52:38,470 --> 00:52:40,420 Так што ёсць што. 1105 00:52:40,420 --> 00:52:43,420 >> Мы збіраемся тэлефанаваць бясплатна. 1106 00:52:43,420 --> 00:52:47,040 Мы ад яго пазбавіцца, і мы выкарыстоўваем PTR зноў. 1107 00:52:47,040 --> 00:52:48,750 І што ж вы хочаце праверыць? 1108 00:52:48,750 --> 00:52:50,550 >> СТУДЭНЦКАЯ: Я проста хацеў праверыць, ці з'яўляецца ці не, ці было што-небудзь 1109 00:52:50,550 --> 00:52:51,900 ўнутры яго. 1110 00:52:51,900 --> 00:52:53,050 >> Джэйсан Хиршхорн: Ці так ён паказаў ні да чаго? 1111 00:52:53,050 --> 00:52:57,740 >> СТУДЭНЦКАЯ: Так, сапраўды, ці з'яўляецца ён па-ранейшаму быў адрас памяці. 1112 00:52:57,740 --> 00:53:02,220 >> Джэйсан Хиршхорн: Такім чынам, вы хочаце каб праверыць значэнне PTR? 1113 00:53:02,220 --> 00:53:03,470 >> СТУДЭНЦКАЯ: Так, менавіта так. 1114 00:53:03,470 --> 00:53:07,940 1115 00:53:07,940 --> 00:53:10,160 >> Джэйсан Хиршхорн: Што я пішу тут калі я хачу праверыць значэнне 1116 00:53:10,160 --> 00:53:11,880 кропка - што гэта, Іарданія сказаў, значэнне? 1117 00:53:11,880 --> 00:53:13,720 Або тое, што захоўваецца ўнутры PTR? 1118 00:53:13,720 --> 00:53:14,620 >> СТУДЭНЦКАЯ: адрас памяці. 1119 00:53:14,620 --> 00:53:16,330 >> Джэйсан Хиршхорн: адрас памяці. 1120 00:53:16,330 --> 00:53:20,520 Так што калі я пішу толькі ў гэтым, яно будзе дайце мне значэнне PTR. 1121 00:53:20,520 --> 00:53:22,800 І як я магу раздрукаваць адрас памяці? 1122 00:53:22,800 --> 00:53:26,470 Што радок фармату для адрасу памяці? 1123 00:53:26,470 --> 00:53:27,430 >> СТУДЭНЦКАЯ% р. 1124 00:53:27,430 --> 00:53:28,050 >> Джэйсан Хиршхорн:% р. 1125 00:53:28,050 --> 00:53:29,500 % З з'яўляецца радком. 1126 00:53:29,500 --> 00:53:30,750 % Р для паказальніка. 1127 00:53:30,750 --> 00:53:40,820 1128 00:53:40,820 --> 00:53:43,540 Ці так гэта? 1129 00:53:43,540 --> 00:53:44,790 Гэта правільна. 1130 00:53:44,790 --> 00:53:49,450 1131 00:53:49,450 --> 00:53:51,040 Так PTR роўна - 1132 00:53:51,040 --> 00:53:53,350 яна да гэтага часу нешта ў ім. 1133 00:53:53,350 --> 00:53:56,110 1134 00:53:56,110 --> 00:53:57,645 Гэта, верагодна, больш цікавае пытанне. 1135 00:53:57,645 --> 00:53:59,198 Што гэта лінія рабіць? 1136 00:53:59,198 --> 00:54:00,830 >> СТУДЭНЦКАЯ: Seg няспраўнасці. 1137 00:54:00,830 --> 00:54:01,310 >> Джэйсан Хиршхорн: Што? 1138 00:54:01,310 --> 00:54:02,678 >> СТУДЭНЦКАЯ: Я думаю, што SEG недахопы. 1139 00:54:02,678 --> 00:54:03,574 >> Джэйсан Хиршхорн: Хм? 1140 00:54:03,574 --> 00:54:04,920 >> СТУДЭНЦКАЯ: Я думаю, што гэта SEG няспраўнасць. 1141 00:54:04,920 --> 00:54:08,265 >> Джэйсан Хиршхорн: Так гэтая лінія з кода, зоркі PTR, што 1142 00:54:08,265 --> 00:54:10,152 робіць зорка на ўвазе? 1143 00:54:10,152 --> 00:54:11,240 >> СТУДЭНЦКАЯ: Змест. 1144 00:54:11,240 --> 00:54:11,560 >> Джэйсан Хиршхорн: Так. 1145 00:54:11,560 --> 00:54:13,910 Да атрымаць змесціва. 1146 00:54:13,910 --> 00:54:16,830 Так што гэта будзе ісці ў памяць звярнуцца туды і даць мне гэта. 1147 00:54:16,830 --> 00:54:21,030 Я выкарыстаў% аб прама тут, таму што там захоўваюцца сімвалы. 1148 00:54:21,030 --> 00:54:23,390 Такім чынам, мы збіраемся пайсці на гэты адрас мы толькі што бачыў - ці гэта, верагодна, будзе 1149 00:54:23,390 --> 00:54:25,190 трохі адрозніваецца ў гэтым раз, калі мы запусціць праграму. 1150 00:54:25,190 --> 00:54:28,010 Але мы пойдзем па гэтым адрасе якія мы ведаем усё яшчэ існуе 1151 00:54:28,010 --> 00:54:29,260 і паглядзець, што там. 1152 00:54:29,260 --> 00:54:35,640 1153 00:54:35,640 --> 00:54:37,110 >> Так што не SEG няспраўнасць. 1154 00:54:37,110 --> 00:54:38,970 Гэта проста не даюць нам нічога. 1155 00:54:38,970 --> 00:54:43,350 Гэта, магчыма, на самай справе дае нам нешта, мы проста не можам убачыць яго. 1156 00:54:43,350 --> 00:54:45,110 І гэта ўзыходзіць да гэтай ідэі - 1157 00:54:45,110 --> 00:54:47,270 і мы не збіраемся, каб атрымаць занадта шмат у гэта, таму што гэта за межамі 1158 00:54:47,270 --> 00:54:48,460 Аб'ём гэтага курса. 1159 00:54:48,460 --> 00:54:51,260 Але мы казалі аб прама тут, калі мы выйшаў за межы масіва на 1160 00:54:51,260 --> 00:54:54,890 1, мы не маглі б патрапіць у бяду. 1161 00:54:54,890 --> 00:54:58,550 >> Часам, калі вы проста сысці на 1, вы робіце нешта няправільна, і вы 1162 00:54:58,550 --> 00:54:59,220 можа трапіць у бяду. 1163 00:54:59,220 --> 00:55:00,820 Але вы не заўсёды трапляюць у непрыемнасці. 1164 00:55:00,820 --> 00:55:05,170 Гэта залежыць, колькі аб дрэннай рэчы вы робіце, вы збіраецеся патрапіць у бяду. 1165 00:55:05,170 --> 00:55:07,790 Які не павінен сказаць, быць неакуратнага з вашым кодам. 1166 00:55:07,790 --> 00:55:12,080 Але гэта сказаць, праграма не будзе заўсёды кінуць паліць, нават калі вы ідзяце куды-небудзь 1167 00:55:12,080 --> 00:55:14,130 ты не павінен ісці. 1168 00:55:14,130 --> 00:55:18,170 >> Добрым прыкладам гэтага з'яўляецца, шмат людзі ў іх праблемы набор 3, якія 1169 00:55:18,170 --> 00:55:22,350 быў 15, не правяраў Межы борце. 1170 00:55:22,350 --> 00:55:25,860 Такім чынам, вы глядзелі налева, паглядзеў на Добра, паглядзеў на вяршыню, паглядзеў 1171 00:55:25,860 --> 00:55:27,000 на дно. 1172 00:55:27,000 --> 00:55:31,540 Але вы не пераканайцеся ў тым, верхняя быў на самай справе адбываецца, каб быць на борце. 1173 00:55:31,540 --> 00:55:35,220 І шмат людзей, якія зрабілі гэта, і Аказалася, што ў іх праграма працавала 1174 00:55:35,220 --> 00:55:38,960 выдатна, таму што, дзе, што дошка была захоўваюцца ў памяці, калі вы пайшлі адзін 1175 00:55:38,960 --> 00:55:42,300 над ім або праверыць, што памяць адрас, не было нічога, 1176 00:55:42,300 --> 00:55:44,870 асабліва жудасна пра гэта, так што ваша праграма не была 1177 00:55:44,870 --> 00:55:45,970 збіраецца крычаць на вас. 1178 00:55:45,970 --> 00:55:48,870 >> Але мы ўсё роўна зняць акуляры, калі вы не пераканайцеся, што, так як вам 1179 00:55:48,870 --> 00:55:50,850 рабілі тое, што вы не былі павінен рабіць, і вы маглі б 1180 00:55:50,850 --> 00:55:51,860 атрымалі ў бядзе. 1181 00:55:51,860 --> 00:55:54,040 Рознагалоссі, тым не менш, вы, верагодна, гэтага не зрабілі. 1182 00:55:54,040 --> 00:55:57,790 Так што гэта, каб паказаць, што, так, мы ўсё яшчэ можам ісці да яе. 1183 00:55:57,790 --> 00:55:59,010 І мы не атрымліваем у Бяда ў гэтым выпадку. 1184 00:55:59,010 --> 00:56:04,000 Калі б мы паспрабавалі зрабіць чытаць Наступныя 100 знакаў, мы б 1185 00:56:04,000 --> 00:56:06,000 верагодна, трапіць у бяду. 1186 00:56:06,000 --> 00:56:09,400 І вы можаце напісаць чытанне наступнага 100 сімвалы, калі вы хочаце, робячы некаторыя 1187 00:56:09,400 --> 00:56:10,110 роду цыкл. 1188 00:56:10,110 --> 00:56:10,850 Так. 1189 00:56:10,850 --> 00:56:16,250 >> Студэнт: Так як мы былі прызначаныя, што прастору фактычнае значэнне, мы не былі б 1190 00:56:16,250 --> 00:56:17,050 на самай справе быць у стане бачыць нічога. 1191 00:56:17,050 --> 00:56:21,740 Можа быць, паспрабаваць яго з устаноўкай, што роўна як і ў З або яшчэ што-небудзь? 1192 00:56:21,740 --> 00:56:22,640 >> Джэйсан Хиршхорн: Добры пытанне. 1193 00:56:22,640 --> 00:56:25,340 Як мне ўсталяваць гэтае значэнне - 1194 00:56:25,340 --> 00:56:28,980 што радок кода я пішу на лініі сем рабіць тое, што вы сказалі? 1195 00:56:28,980 --> 00:56:34,040 >> СТУДЭНЦКАЯ: Зорка PTR роўная адной цытата C канец адзінарныя двукоссі. 1196 00:56:34,040 --> 00:56:36,970 >> Джэйсан Хиршхорн: Так гэта пакласці персанаж, с, у гэтым месцы, 1197 00:56:36,970 --> 00:56:40,200 таму што зноў, што зорка азначае пайсці ў туды. 1198 00:56:40,200 --> 00:56:43,320 І пры выкарыстанні на левай баку Аператар прысвойвання, што складае 1199 00:56:43,320 --> 00:56:47,270 падпісаць, мы не збіраемся, каб атрымаць, што значэнне так як устаноўлена, што значэнне. 1200 00:56:47,270 --> 00:56:48,520 Зараз давайце паглядзім, што адбудзецца. 1201 00:56:48,520 --> 00:56:54,700 1202 00:56:54,700 --> 00:56:56,770 >> Мы пакласці нешта ёсць і гэта было там. 1203 00:56:56,770 --> 00:56:58,000 Мы назвалі бясплатна. 1204 00:56:58,000 --> 00:57:00,100 Некаторыя рэчы, верагодна, адбылося ў кучы. 1205 00:57:00,100 --> 00:57:01,890 Так што гэта не там больш. 1206 00:57:01,890 --> 00:57:07,440 Але зноў жа, мы не атрымліваем ў праблему ісці туды. 1207 00:57:07,440 --> 00:57:10,260 >> Я раблю гэта ў кодзе, каб праілюстраваць што многія з іх 1208 00:57:10,260 --> 00:57:12,410 пытанні, якія ў вас ёсць, што яны сапраўды цікава 1209 00:57:12,410 --> 00:57:13,650 адказвае шмат часу. 1210 00:57:13,650 --> 00:57:15,260 І яны сапраўды добрыя пытанні. 1211 00:57:15,260 --> 00:57:19,010 І вы можаце зразумець іх на свой уласны, калі, напрыклад, 1212 00:57:19,010 --> 00:57:19,990 мы не ў раздзеле. 1213 00:57:19,990 --> 00:57:20,940 Так. 1214 00:57:20,940 --> 00:57:24,430 >> СТУДЭНЦКАЯ: Таму што ты не пасылае паказальнік ў любым месцы, вы павінны 1215 00:57:24,430 --> 00:57:26,530 выкарыстоўваць Таноса? 1216 00:57:26,530 --> 00:57:28,400 >> Джэйсан Хиршхорн: Дык гэта ўзыходзіць на ваш першапачатковы пытанне. 1217 00:57:28,400 --> 00:57:28,620 [? ?] 1218 00:57:28,620 --> 00:57:29,980 Няўжо гэта ўсяго толькі лакальная пераменная? 1219 00:57:29,980 --> 00:57:32,280 Malloc тут не тое, што пераканаўчымі. 1220 00:57:32,280 --> 00:57:35,260 Выкарыстанне Таноса тут не што пераканаўчым, таму што гэта 1221 00:57:35,260 --> 00:57:36,500 проста лакальная пераменная. 1222 00:57:36,500 --> 00:57:40,970 >> Студэнт: Так не маглі б вы зрабіць сімвал зоркі PTR роўная Прывітанне? 1223 00:57:40,970 --> 00:57:41,400 >> Джэйсан Хиршхорн: Ох. 1224 00:57:41,400 --> 00:57:43,300 Так што мы збіраемся цяпер вярнуцца на ваш першапачатковы пытанне. 1225 00:57:43,300 --> 00:57:46,885 Я думаю, што вы не былі задаволеныя з маім адказам. 1226 00:57:46,885 --> 00:57:48,220 ОК? 1227 00:57:48,220 --> 00:57:49,226 Як гэта? 1228 00:57:49,226 --> 00:57:49,682 >> СТУДЭНЦКАЯ: Так. 1229 00:57:49,682 --> 00:57:50,932 Пачакайце. 1230 00:57:50,932 --> 00:57:54,090 1231 00:57:54,090 --> 00:57:57,850 >> Джэйсан Хиршхорн: А дзе Вы хочаце раздрукаваць? 1232 00:57:57,850 --> 00:58:00,026 Такім чынам мы будзем раздрукаваць радок, як гэта? 1233 00:58:00,026 --> 00:58:06,380 1234 00:58:06,380 --> 00:58:07,630 >> СТУДЭНЦКАЯ: Цікава. 1235 00:58:07,630 --> 00:58:09,900 1236 00:58:09,900 --> 00:58:14,285 >> Джэйсан Хиршхорн: Так што гэта кажа, што гэта Аргумент мае тып характару. 1237 00:58:14,285 --> 00:58:17,200 1238 00:58:17,200 --> 00:58:18,620 Так гэта павінна быць характар. 1239 00:58:18,620 --> 00:58:25,170 1240 00:58:25,170 --> 00:58:26,280 >> СТУДЭНЦКАЯ: Проста бярэ першы. 1241 00:58:26,280 --> 00:58:28,610 >> Джэйсан Хиршхорн: Так што гэта гэта тое, што я сказаў раней. 1242 00:58:28,610 --> 00:58:34,240 Як я ўжо сказаў, гэта не захоўвання радок ўнутры зменнай паказальніка. 1243 00:58:34,240 --> 00:58:35,120 Гэта захоўвання - 1244 00:58:35,120 --> 00:58:36,350 >> СТУДЭНЦКАЯ: Першае значэнне радка. 1245 00:58:36,350 --> 00:58:40,810 >> Джэйсан Хиршхорн: адрас першае значэнне радка. 1246 00:58:40,810 --> 00:58:46,940 Калі б мы павінны былі раздрукаваць гэта, мы атрыманне значэнні ўнутры паказальнік. 1247 00:58:46,940 --> 00:58:51,005 І мы будзем бачыць, што гэта, на самай справе, адрас памяці. 1248 00:58:51,005 --> 00:58:53,595 1249 00:58:53,595 --> 00:58:56,440 >> Ці мае гэта сэнс? 1250 00:58:56,440 --> 00:58:56,940 Выбачайце. 1251 00:58:56,940 --> 00:58:58,996 Пачакайце, Я адказаў на ваш Пытанне, аднак? 1252 00:58:58,996 --> 00:58:59,790 >> СТУДЭНЦКАЯ: Так. 1253 00:58:59,790 --> 00:59:05,830 >> Джэйсан Хиршхорн: Гэтая радок кода з'яўляецца стварэння радок і затым яшчэ адзін 1254 00:59:05,830 --> 00:59:09,115 пераменная-паказальнік, які паказвае у гэтай радку, што масіў. 1255 00:59:09,115 --> 00:59:14,320 1256 00:59:14,320 --> 00:59:14,980 Так. 1257 00:59:14,980 --> 00:59:19,200 >> Студэнт: Так што, калі мы пайшлі адзін успамін звярнуцца далей, будзе атрымліваем г? 1258 00:59:19,200 --> 00:59:21,990 1259 00:59:21,990 --> 00:59:23,150 Ці была яна захоўваецца ў выглядзе радка? 1260 00:59:23,150 --> 00:59:24,400 >> Джэйсан Хиршхорн: Маўляў, мы зрабілі - 1261 00:59:24,400 --> 00:59:28,540 1262 00:59:28,540 --> 00:59:30,790 так што гэта каштоўны зрабіць. 1263 00:59:30,790 --> 00:59:33,780 Гэта арыфметыка, якія вы, хлопцы, бачылі раней, і павінны быць 1264 00:59:33,780 --> 00:59:35,550 адносна камфортна. 1265 00:59:35,550 --> 00:59:36,905 Гэта падобна на тое, пісаць - 1266 00:59:36,905 --> 00:59:41,980 1267 00:59:41,980 --> 00:59:46,350 калі мы павінны былі напісаць гэты радок кода, мы бачылі натацыі масіва раней. 1268 00:59:46,350 --> 00:59:55,900 Гэта павінна даць нам другі Значэнне ў гэтым масіве, ч. 1269 00:59:55,900 --> 01:00:05,010 >> Калі б мы зрабілі гэта, гэта павінна таксама даць нам другое значэнне ў гэтым масіве. 1270 01:00:05,010 --> 01:00:08,320 Таму што гэта будзе не ў памяць адрас першага рэч, але 1271 01:00:08,320 --> 01:00:10,530 адрас памяці рэчы адзін старэй. 1272 01:00:10,530 --> 01:00:14,360 І тады зорка аператар разыменовывает што паказальнік. 1273 01:00:14,360 --> 01:00:16,940 І зноў жа, давайце паглядзім. 1274 01:00:16,940 --> 01:00:18,664 Мы атрымліваем г зноў. 1275 01:00:18,664 --> 01:00:20,980 >> СТУДЭНЦКАЯ: Што менавіта робіць разыменовать значыць? 1276 01:00:20,980 --> 01:00:23,650 >> Джэйсан Хиршхорн: Dereference з'яўляецца мудрагелістае слова для пайсці. 1277 01:00:23,650 --> 01:00:26,390 Да, што і атрымаць тое, што там з'яўляецца разыменовывать паказальнік. 1278 01:00:26,390 --> 01:00:28,240 Гэта проста мудрагелістае слова для гэтага. 1279 01:00:28,240 --> 01:00:29,986 >> СТУДЭНЦКАЯ: Калі б мы хацелі друку ўся радок, мог мы 1280 01:00:29,986 --> 01:00:31,930 зрабіць Ампэрсанд паказальнік? 1281 01:00:31,930 --> 01:00:33,490 >> Джэйсан Хиршхорн: Добра, мы збіраецца спыняцца тут. 1282 01:00:33,490 --> 01:00:35,480 Мы збіраемся сканчаецца. 1283 01:00:35,480 --> 01:00:41,760 Ampersand дае адрас размяшчэнне, таму, калі вы робіце Ампэрсанд з 1284 01:00:41,760 --> 01:00:44,080 зменная, гэта дае вам адрас дзе захоўваецца гэтая пераменная. 1285 01:00:44,080 --> 01:00:48,580 Ampersand паказальнік дасць вам адрас PTR дзе PTR знаходзіцца ў памяці. 1286 01:00:48,580 --> 01:00:50,140 >> Мы не збіраемся ісці на з гэтым прыкладам. 1287 01:00:50,140 --> 01:00:52,640 Вы можаце высветліць гэта рэчы па сваім меркаванні. 1288 01:00:52,640 --> 01:00:55,740 Але зноў жа, гэта можа быць нават на мяжы трохі звыш таго, што вам трэба ведаць для 1289 01:00:55,740 --> 01:00:58,000 аб'ём гэтага сярэднетэрміновай перспектыве - 1290 01:00:58,000 --> 01:00:59,070 або гэты тэст, а. 1291 01:00:59,070 --> 01:01:00,270 Выбачайце. 1292 01:01:00,270 --> 01:01:03,770 >> Мы збіраемся рухацца далей, таму што я б падабаецца рабіць адну праблему кадавання 1293 01:01:03,770 --> 01:01:05,100 перад час скончыўся. 1294 01:01:05,100 --> 01:01:09,340 І мы збіраемся запраграмаваць тое, што я думаю, з'яўляецца найбольш пераканаўчым з іх 1295 01:01:09,340 --> 01:01:11,020 прыклады, atoi. 1296 01:01:11,020 --> 01:01:14,520 Так што гэта было пытанне аб віктарына два гады таму. 1297 01:01:14,520 --> 01:01:17,810 І ў мяне ёсць яго на дошцы тут. 1298 01:01:17,810 --> 01:01:20,680 >> Людзі спыталі адносна віктарыны - 1299 01:01:20,680 --> 01:01:23,640 ім далі крыху больш tesxt ў пытанне, але я ліквідаваны 1300 01:01:23,640 --> 01:01:26,640 Тэкст, таму што гэта было непатрэбным для нашых мэтаў цяпер. 1301 01:01:26,640 --> 01:01:29,180 Гэта было толькі некаторыя фон ад таго, што atoi зрабіў. 1302 01:01:29,180 --> 01:01:31,425 Але вы ўсё ведаеце, і вельмі знаёмыя з atoi. 1303 01:01:31,425 --> 01:01:35,620 >> Я прапаную вам закадаваць гэта на аркушы паперы. 1304 01:01:35,620 --> 01:01:39,310 Я таксама прапаную вам выкарыстоўваць стратэгію што мы перайшлі 1305 01:01:39,310 --> 01:01:41,040 шмат у нашым раздзеле. 1306 01:01:41,040 --> 01:01:44,130 Па-першае, пераканайцеся, што вы разумееце, што atoi робіць. 1307 01:01:44,130 --> 01:01:47,580 Намалюйце або прыдумаць некаторыя разумовы вобраз яго ў галаве. 1308 01:01:47,580 --> 01:01:51,120 Далей, выпісаць псевдокод для гэтага. 1309 01:01:51,120 --> 01:01:53,120 На віктарыне, калі ўсё, што вы атрымліваеце, псевдокод, па меншай меры, вы 1310 01:01:53,120 --> 01:01:54,550 пакласці што-то ўніз. 1311 01:01:54,550 --> 01:02:00,070 А потым адлюстраваць гэтую псевдокод на С. Калі ў вас ёсць чэк ў вашым 1312 01:02:00,070 --> 01:02:03,760 псевдокод, як праверыць, калі нешта з'яўляецца 1, што адлюстроўваецца на, калі 1313 01:02:03,760 --> 01:02:05,750 стан і гэтак далей. 1314 01:02:05,750 --> 01:02:07,850 І, нарэшце, код праграмы ў С. 1315 01:02:07,850 --> 01:02:15,000 >> Так вернемся да atoi і заняць пяць хвілін закадаваць гэта на лісце 1316 01:02:15,000 --> 01:02:19,480 папера, якая, верагодна, аб колькасць часу, вы б узяць на 1317 01:02:19,480 --> 01:02:21,260 віктарына для кадавання atoi. 1318 01:02:21,260 --> 01:02:27,060 Ад пяці да 15 хвілін, ад пяці да 12, ад пяці да 10 хвілін, аб памеры 1319 01:02:27,060 --> 01:02:30,150 раз, калі вы патрацілі б на гэта Пытанне ў віктарыне. 1320 01:02:30,150 --> 01:02:31,670 Так што бярыце пяць хвілін, калі ласка. 1321 01:02:31,670 --> 01:02:35,957 І калі ў вас ёсць якія-небудзь пытанні, падняць ваша рука, і я прыйду вакол. 1322 01:02:35,957 --> 01:06:39,570 1323 01:06:39,570 --> 01:06:41,066 >> [SIDE ГУТАРКІ] 1324 01:06:41,066 --> 01:08:35,279 1325 01:08:35,279 --> 01:08:37,580 >> Джэйсан Хиршхорн: Такім чынам, што было пяць хвілін. 1326 01:08:37,580 --> 01:08:39,880 Гэта было, верагодна, каля памеры раз, калі вы патрацілі б на тым, што на віктарыне, 1327 01:08:39,880 --> 01:08:42,120 можа быць, ніжні мяжа таго часу. 1328 01:08:42,120 --> 01:08:44,010 Мы будзем Нагадаем ў трохі. 1329 01:08:44,010 --> 01:08:45,740 Пачнем кадавання гэта. 1330 01:08:45,740 --> 01:08:49,479 І калі мы не атрымліваем усё шляхам, Адказы на гэты і гэты 1331 01:08:49,479 --> 01:08:54,189 пытанне віктарыны даступныя, зноў жа, Восень 2011, калі гэтае пытанне 1332 01:08:54,189 --> 01:08:54,913 з'явіўся на віктарыне. 1333 01:08:54,913 --> 01:08:57,830 >> І гэта варта было восем ачкоў на віктарыне то. 1334 01:08:57,830 --> 01:09:01,140 Восем ачкоў знаходзіцца на высокім канцы колькасць кропак нешта варта. 1335 01:09:01,140 --> 01:09:04,790 Большасць пытанняў знаходзяцца ў дыяпазоне ад аднаго да шасці ачкоў. 1336 01:09:04,790 --> 01:09:08,500 Так што гэта больш складаным Пытанне, вядома. 1337 01:09:08,500 --> 01:09:09,750 Хто-небудзь можа пачынайце мяне? 1338 01:09:09,750 --> 01:09:13,260 1339 01:09:13,260 --> 01:09:15,380 >> Як правіла, тое, што мы збіраемся хацець зрабіць з гэтым 1340 01:09:15,380 --> 01:09:17,550 функцыянаваць atoi, лагічна? 1341 01:09:17,550 --> 01:09:19,569 Што мы хочам зрабіць? 1342 01:09:19,569 --> 01:09:22,279 Так што мы збіраемся напісаць некаторыя псевдокод. 1343 01:09:22,279 --> 01:09:24,090 >> СТУДЭНЦКАЯ: Пераўтварэнне знакаў у цэлых лічбах. 1344 01:09:24,090 --> 01:09:26,700 >> Джэйсан Хиршхорн: Пераўтварэнне знакаў у цэлых лічбах. 1345 01:09:26,700 --> 01:09:27,479 ОК. 1346 01:09:27,479 --> 01:09:30,870 Дык колькі знакаў мы будзеце мець патрэбу, каб прайсці? 1347 01:09:30,870 --> 01:09:32,295 >> СТУДЭНЦКАЯ: Усё з іх. 1348 01:09:32,295 --> 01:09:34,100 >> СТУДЭНЦКАЯ: Усе персанажы у радку. 1349 01:09:34,100 --> 01:09:35,540 >> Джэйсан Хиршхорн: Усе сімвалы ў радку. 1350 01:09:35,540 --> 01:09:42,180 Так што, калі мы хацелі пайсці праз кожны знак у радку, што гэта рэч, 1351 01:09:42,180 --> 01:09:44,560 у З мы бачылі, што дазволіла нам прайсці праз кожны 1352 01:09:44,560 --> 01:09:45,939 знак у радку? 1353 01:09:45,939 --> 01:09:46,819 >> СТУДЭНТЫ: для завесы. 1354 01:09:46,819 --> 01:09:48,069 >> Джэйсан Хиршхорн: для завесы. 1355 01:09:48,069 --> 01:09:52,020 1356 01:09:52,020 --> 01:09:55,330 Так што мы збіраемся для перабору кожны знак у с. 1357 01:09:55,330 --> 01:10:00,940 >> Тады што мы будзем хацець зрабіць калі мы атрымліваем спецыфічны характар? 1358 01:10:00,940 --> 01:10:02,480 Скажам, у нас вы атрымліваеце прыняў 90. 1359 01:10:02,480 --> 01:10:03,460 Мы атрымліваем 9. 1360 01:10:03,460 --> 01:10:04,240 Гэта сімвал. 1361 01:10:04,240 --> 01:10:07,440 Што мы хочам зрабіць з што характар ​​9? 1362 01:10:07,440 --> 01:10:10,082 >> СТУДЭНЦКАЯ: адняць яго з характару 0? 1363 01:10:10,082 --> 01:10:11,860 >> СТУДЭНЦКАЯ: Дадаць 0? 1364 01:10:11,860 --> 01:10:13,350 >> Джэйсан Хиршхорн: Вылічаная гэта ад характару 0? 1365 01:10:13,350 --> 01:10:13,800 >> СТУДЭНЦКАЯ: Так. 1366 01:10:13,800 --> 01:10:15,573 >> Джэйсан Хиршхорн: Чаму Вы хочаце гэта зрабіць? 1367 01:10:15,573 --> 01:10:16,560 >> СТУДЭНЦКАЯ: [неразборліва] 1368 01:10:16,560 --> 01:10:17,010 значэнне. 1369 01:10:17,010 --> 01:10:18,380 Яго унутр значэнне. 1370 01:10:18,380 --> 01:10:21,580 >> Джэйсан Хиршхорн: Такім чынам, мы бярэм характар ​​9, адняць яго з 1371 01:10:21,580 --> 01:10:25,820 характар ​​0, каб атрымаць фактычнае цэлае 9. 1372 01:10:25,820 --> 01:10:27,070 Салодкі. 1373 01:10:27,070 --> 01:10:31,255 1374 01:10:31,255 --> 01:10:37,000 І як вы ведаеце, што характар 9 мінус 0 персанаж 9? 1375 01:10:37,000 --> 01:10:39,222 Што Дыяграма ты глядзець? 1376 01:10:39,222 --> 01:10:43,130 >> СТУДЭНЦКАЯ: Ёсць лагічна дзевяць месца паміж 9 і 0. 1377 01:10:43,130 --> 01:10:44,620 Ці вы маглі б паглядзець на табліцу ASCII. 1378 01:10:44,620 --> 01:10:45,120 >> Джэйсан Хиршхорн: табліца ASCII. 1379 01:10:45,120 --> 01:10:46,490 Але так, вы маеце рацыю, а таксама. 1380 01:10:46,490 --> 01:10:47,780 Такім чынам, мы адымаем 0. 1381 01:10:47,780 --> 01:10:49,010 Так што цяпер у нас ёсць цэлае 9. 1382 01:10:49,010 --> 01:10:49,970 І тое, што мы хочам рабіць з гэтым? 1383 01:10:49,970 --> 01:10:54,970 Калі ў нас ёсць 90, гэта першае цэлае мы, што мы хочам зрабіць? 1384 01:10:54,970 --> 01:10:58,180 >> СТУДЭНЦКАЯ: я б паставіў у часовым цэлага масіў, то зрабіць матэматыку да яго 1385 01:10:58,180 --> 01:11:02,088 пазней, каб зрабіць яго ў канцы. 1386 01:11:02,088 --> 01:11:03,020 >> Джэйсан Хиршхорн: ОК. 1387 01:11:03,020 --> 01:11:06,990 >> СТУДЭНЦКАЯ: Вы можаце пачаць у канцы масіў, а затым рухацца наперад так 1388 01:11:06,990 --> 01:11:10,350 што кожны раз, калі вы рухацца наперад, памножыць яго на 10. 1389 01:11:10,350 --> 01:11:10,830 >> Джэйсан Хиршхорн: ОК. 1390 01:11:10,830 --> 01:11:12,250 Гэта гучыць, як даволі пераканаўчыя ідэя. 1391 01:11:12,250 --> 01:11:16,040 Мы можам пачаць у канцы нашага масіва, і мы можам выкарыстоўваць strleng. 1392 01:11:16,040 --> 01:11:17,030 Мы можам выкарыстоўваць strleng тут. 1393 01:11:17,030 --> 01:11:18,870 Мы атрымаем даўжыню нашай радка. 1394 01:11:18,870 --> 01:11:20,100 Мы пачынаем у канцы. 1395 01:11:20,100 --> 01:11:29,170 І + першы, мы проста лічыць, што цэлы лік, і, магчыма, мы ствараем як 1396 01:11:29,170 --> 01:11:32,270 Новы цэлая пераменная наверсе, дзе мы захоўваем ўсе. 1397 01:11:32,270 --> 01:11:37,340 Такім чынам, мы пятля праз кожны знак уваход з з задам наперад, мы адымаем 0, і 1398 01:11:37,340 --> 01:11:42,790 то возьмем яго, і ў залежнасці ад дзе ён знаходзіцца, мы памнажаем яго 1399 01:11:42,790 --> 01:11:45,860 на ступень 10. 1400 01:11:45,860 --> 01:11:50,644 Таму што першы, што мы памножыць крайнюю правую лічбу па? 1401 01:11:50,644 --> 01:11:51,440 >> СТУДЭНЦКАЯ: 10 да 0. 1402 01:11:51,440 --> 01:11:53,170 >> Джэйсан Хиршхорн: 10 да 0. 1403 01:11:53,170 --> 01:11:56,010 Што Памножым другое правы характар ​​па? 1404 01:11:56,010 --> 01:11:57,450 >> СТУДЭНЦКАЯ: [неразборліва]. 1405 01:11:57,450 --> 01:11:57,960 >> Джэйсан Хиршхорн: Што? 1406 01:11:57,960 --> 01:11:59,150 >> СТУДЭНЦКАЯ: 10 да 1. 1407 01:11:59,150 --> 01:12:00,420 >> Джэйсан Хиршхорн: 10 да 1. 1408 01:12:00,420 --> 01:12:03,754 Трэці-правы персанаж? 1409 01:12:03,754 --> 01:12:04,580 >> СТУДЭНЦКАЯ: 10 да 2. 1410 01:12:04,580 --> 01:12:05,350 >> Джэйсан Хиршхорн: 10 да 2. 1411 01:12:05,350 --> 01:12:07,200 >> СТУДЭНЦКАЯ: Выбачайце, я не разумею, што мы робім тут. 1412 01:12:07,200 --> 01:12:08,640 >> Джэйсан Хиршхорн: ОК, давайце вернемся, то. 1413 01:12:08,640 --> 01:12:12,500 Так што мы збіраемся, каб атрымаць прайшло ў радку. 1414 01:12:12,500 --> 01:12:14,470 Таму што мы пішам atoi. 1415 01:12:14,470 --> 01:12:15,260 Такім чынам, мы атрымаць прайшло ў радку. 1416 01:12:15,260 --> 01:12:17,640 Скажам, у нас вы атрымліваеце прайшло у радку 90. 1417 01:12:17,640 --> 01:12:19,930 >> Першае, што мы збіраемся зрабіць, гэта ўсталяваць новы цэлая пераменная, што мы 1418 01:12:19,930 --> 01:12:22,150 проста хачу, каб стварыць у якасці нашага новага цэлага ліку. 1419 01:12:22,150 --> 01:12:24,630 Гэта тое, што мы збіраемся вярнуцца ў канцы. 1420 01:12:24,630 --> 01:12:30,110 Мы павінны прайсці праз кожны знак у радок, таму што мы вырашылі, 1421 01:12:30,110 --> 01:12:34,430 што мы павінны закрануць кожнага і затым дадаць яго ў наш новы цэлага ліку. 1422 01:12:34,430 --> 01:12:36,330 >> Але мы не можам проста дадаць яго ў выглядзе ліку. 1423 01:12:36,330 --> 01:12:38,270 Мы не можам проста ўзяць 9 і дадаць 9 да нашай цэлага ліку. 1424 01:12:38,270 --> 01:12:40,560 Гэта залежыць ад таго, якое месца гэта ў радку. 1425 01:12:40,560 --> 01:12:42,960 Мы збіраемся трэба памножыць гэта на ступень 10. 1426 01:12:42,960 --> 01:12:45,580 Таму што, як база 10 работ. 1427 01:12:45,580 --> 01:12:49,050 >> Так што мы збіраемся, каб атрымаць фактычнае характар, або фактычны цэлае 1428 01:12:49,050 --> 01:12:53,860 лік, шляхам адымання характар ​​0 ад характару 9, як мы зрабілі з 1429 01:12:53,860 --> 01:12:57,560 аднімання знакаў капіталу з любога характару мы мелі ў адным з 1430 01:12:57,560 --> 01:12:58,120 гэтыя праблемы. 1431 01:12:58,120 --> 01:13:04,190 Таму мы на самай справе атрымаць лік ад 0 да 9 захаваны як рэчавы лік, і мы будзем 1432 01:13:04,190 --> 01:13:07,590 памножыць яго на ступень 10 у залежнасці ад таго, дзе мы знаходзімся ў радок. 1433 01:13:07,590 --> 01:13:19,430 1434 01:13:19,430 --> 01:13:22,575 А потым мы збіраемся дадаць яго назад у наш новы цэлай зменнай. 1435 01:13:22,575 --> 01:13:32,840 1436 01:13:32,840 --> 01:13:37,890 >> Дык што ж гэта будзе выглядаць будзе быць - мы будзем маляваць тут. 1437 01:13:37,890 --> 01:13:40,086 Калі нас перадаюцца ў радку 90 - 1438 01:13:40,086 --> 01:13:41,336 >> СТУДЭНЦКАЯ: [неразборліва]. 1439 01:13:41,336 --> 01:13:43,190 1440 01:13:43,190 --> 01:13:45,540 >> Джэйсан Хиршхорн: Але atoi прымае радок. 1441 01:13:45,540 --> 01:13:46,350 Так што мы збіраемся прайсці праз правядзенне. 1442 01:13:46,350 --> 01:13:49,900 Мы будзем атрымаць прайшло 90. 1443 01:13:49,900 --> 01:13:51,540 Мы ідзём ад задняй да пярэдняй. 1444 01:13:51,540 --> 01:13:53,920 Бярэм 0. 1445 01:13:53,920 --> 01:13:55,080 >> СТУДЭНЦКАЯ: Мне вельмі шкада. 1446 01:13:55,080 --> 01:13:55,880 Можа быць, гэта глупства. 1447 01:13:55,880 --> 01:13:59,440 Калі мы становімся прайшло ў радку, чаму 90 тое, што мы 1448 01:13:59,440 --> 01:14:00,260 атрымліваць перададзеныя ў? 1449 01:14:00,260 --> 01:14:03,160 Паколькі 90 з'яўляецца цэлым лікам. 1450 01:14:03,160 --> 01:14:06,820 >> Джэйсан Хиршхорн: Таму што atoi бярэ радок і ператварае яго ў цэлае 1451 01:14:06,820 --> 01:14:08,320 ўяўленне гэтай радка. 1452 01:14:08,320 --> 01:14:13,650 Але радок 90 ня цэлы лік 90 або № 90. 1453 01:14:13,650 --> 01:14:17,920 Радок 90 з'яўляецца масівам з двух, ці тры сімвала, хутчэй, 9 1454 01:14:17,920 --> 01:14:22,740 характар, 0 характар, і зваротны слеш 0 характар. 1455 01:14:22,740 --> 01:14:26,260 >> І мы пішам atoi таму, што для Напрыклад, калі вы бераце на сябе каманду 1456 01:14:26,260 --> 01:14:30,230 Аргумент лінія, і яна захоўваецца ў агду, ён захоўваецца ў выглядзе радка. 1457 01:14:30,230 --> 01:14:32,940 Але калі вы хочаце, каб разглядаць яго як колькасці, вам трэба пераўтварыць яго ў 1458 01:14:32,940 --> 01:14:34,700 Фактычнае лік. 1459 01:14:34,700 --> 01:14:37,210 Які мы зрабілі адну з нашых праблемных мностваў. 1460 01:14:37,210 --> 01:14:38,800 Які мы зрабілі ў шэрагу з нашых праблемных мностваў. 1461 01:14:38,800 --> 01:14:41,690 Усё, што ўзяў цэлае як аргумент каманднага радка. 1462 01:14:41,690 --> 01:14:46,490 Дык вось чаму наша функцыя atoi прымае радок. 1463 01:14:46,490 --> 01:14:51,910 >> Такім чынам, яшчэ раз, у нашым прыкладзе, мы збіраецца ўзяць апошні. 1464 01:14:51,910 --> 01:14:55,050 Мы збіраемся адняць характар 0 з яго, таму што персанажы 0 1465 01:14:55,050 --> 01:14:58,810 адымаецца па характары 0 дае фактычнае лік 0, у адпаведнасці з 1466 01:14:58,810 --> 01:15:00,950 ASCII матэматыка, што мы робім. 1467 01:15:00,950 --> 01:15:04,870 >> Таму што персанажы прадстаўлены ў выглядзе адрозніваецца ад іх фактычнае - 1468 01:15:04,870 --> 01:15:08,830 характар, напрыклад, у ніжнім рэгістры 97. 1469 01:15:08,830 --> 01:15:10,260 Гэта не - ой! 1470 01:15:10,260 --> 01:15:13,290 Гэта не ўсё, што можна было б чакаць каб гэта было, 0, напрыклад. 1471 01:15:13,290 --> 01:15:16,200 Такім чынам, вы павінны адняць характар, каб атрымаць 0. 1472 01:15:16,200 --> 01:15:18,950 >> Так што мы збіраемся зрабіць, што тут каб атрымаць рэальнае лік. 1473 01:15:18,950 --> 01:15:22,560 А потым мы збіраемся памножыць яго на ступенню 10 у залежнасці ад таго, дзе 1474 01:15:22,560 --> 01:15:27,030 знаходзіцца ў радок, а затым прыняць, што і дадаць яго ў наш запаўняльніка 1475 01:15:27,030 --> 01:15:32,520 зменная, каб мы маглі прыдумаць наша канчатковая новая цэлае. 1476 01:15:32,520 --> 01:15:35,080 Ці значыць гэта, мае сэнс для ўсіх? 1477 01:15:35,080 --> 01:15:37,730 >> Так што мы не збіраемся, каб закадаваць гэта прама цяпер, таму што мы 1478 01:15:37,730 --> 01:15:38,830 атрымліваць мала часу. 1479 01:15:38,830 --> 01:15:40,860 Я прашу прабачэння за тэрмінах, што. 1480 01:15:40,860 --> 01:15:44,620 Але гэта тое, што, як мы спадзяемся, вы б быць у стане зрабіць на віктарыне - на 1481 01:15:44,620 --> 01:15:47,710 Прынамсі, атрымаць гэты псевдокод выпісалі. 1482 01:15:47,710 --> 01:15:50,840 >> І потым, калі б мы павінны былі напісаць псевдокод, на самай справе, мы маглі б зрабіць гэта 1483 01:15:50,840 --> 01:15:51,490 даволі хутка. 1484 01:15:51,490 --> 01:15:55,230 Кожны радок каментароў, якія мы мы пісалі тут перакладаецца як пра 1485 01:15:55,230 --> 01:15:56,970 адна лінія C кода. 1486 01:15:56,970 --> 01:16:01,780 Аб'яву новую зменную, лісты пятля, некаторыя адніманне, некаторыя 1487 01:16:01,780 --> 01:16:07,070 множанне, а некаторыя прызначэнне. 1488 01:16:07,070 --> 01:16:09,020 Мы б, верагодна, таксама хочуць, каб напісаць зваротную лінію. 1489 01:16:09,020 --> 01:16:12,040 Мы маглі б таксама хачу паставіць некаторыя праверкі ў тут. 1490 01:16:12,040 --> 01:16:12,655 Так. 1491 01:16:12,655 --> 01:16:15,720 >> Студэнт: Так ці можам мы разглядаць з як рэальную радок? 1492 01:16:15,720 --> 01:16:18,730 Таму што я ведаю, што гэта проста адрас. 1493 01:16:18,730 --> 01:16:22,090 Маўляў, як бы вы атрымаць даўжыню радок перадаецца праз? 1494 01:16:22,090 --> 01:16:25,310 >> Джэйсан Хиршхорн: Так як жа Даўжыня радкі? 1495 01:16:25,310 --> 01:16:25,830 STRLEN. 1496 01:16:25,830 --> 01:16:26,660 >> СТУДЭНЦКАЯ: STRLEN, так. 1497 01:16:26,660 --> 01:16:30,550 Але вы можаце пакласці сек як Аргумент для гэтага? 1498 01:16:30,550 --> 01:16:34,620 >> Джэйсан Хиршхорн: Так STRLEN прымае сімвал зорку. 1499 01:16:34,620 --> 01:16:38,090 І варта, што сЬаг зорку, і гэта працягвае адлік, пакуль ён не трапляе ў 1500 01:16:38,090 --> 01:16:41,865 зваротны слеш 0. STRLEN было на самай справе адзін з іншых праграм, якія мы 1501 01:16:41,865 --> 01:16:42,850 збіраліся кода. 1502 01:16:42,850 --> 01:16:44,560 Вось яшчэ адзін добры адзін для кода. 1503 01:16:44,560 --> 01:16:47,270 Гэта адзін крыху лягчэй, таму што, калі Вы будзеце думаць аб тым, што 1504 01:16:47,270 --> 01:16:47,830 канцэптуальна - 1505 01:16:47,830 --> 01:16:51,620 Я толькі што сказаў гэтага ўголас - STRLEN наступным паказальнік і працягвае ісці і 1506 01:16:51,620 --> 01:16:54,210 лічачы і ня адсочваць да вы дасягне зваротны слэш 0. 1507 01:16:54,210 --> 01:16:56,530 >> СТУДЭНЦКАЯ: ОК, атрымаў яго. 1508 01:16:56,530 --> 01:17:00,200 >> Джэйсан Хиршхорн: Так лепш ўдачы на ​​віктарыне 0 заўтра. 1509 01:17:00,200 --> 01:17:03,170 Калі ў вас ёсць якія-небудзь пытанні, я буду быць па-за пасля гэтага. 1510 01:17:03,170 --> 01:17:05,610 Не саромейцеся, пішыце мне. 1511 01:17:05,610 --> 01:17:08,480 Звярніцеся да вашага ўласным TF, калі вы не ў маім раздзеле, ці атрымаць мой 1512 01:17:08,480 --> 01:17:10,005 па электроннай пошце, калі вы хочаце яго. 1513 01:17:10,005 --> 01:17:13,140 >> Калі вы хочаце хвалявацца і проста адправіць мне па электроннай пошце, Freakout ліст, я буду 1514 01:17:13,140 --> 01:17:16,710 адправіць цябе назад, як, ўсьмешлівы твар, або, як, жарт ці нешта. 1515 01:17:16,710 --> 01:17:18,190 Так што не саромейцеся зрабіць гэта таксама. 1516 01:17:18,190 --> 01:17:20,750 Поспехі зноў, і я буду бачыць вас усіх на наступным тыдні. 1517 01:17:20,750 --> 01:17:23,435