1 00:00:00,000 --> 00:00:00,499 2 00:00:00,499 --> 00:00:11,261 [MUSIC KUCHEZA] 3 00:00:11,261 --> 00:00:12,640 >> DAVID J. Malan: All wa kulia. 4 00:00:12,640 --> 00:00:14,525 Hii ni CS50. 5 00:00:14,525 --> 00:00:16,009 Na hii ni mwanzo wa wiki 5. 6 00:00:16,009 --> 00:00:18,050 Na kama unaweza kuwa niliona, baadhi ya vifaa 7 00:00:18,050 --> 00:00:21,050 ni kupata kidogo zaidi tata, denser kidogo. 8 00:00:21,050 --> 00:00:24,560 >> Na ni rahisi sana, hasa kama tumekuwa katika tabia kwa muda fulani, 9 00:00:24,560 --> 00:00:28,600 kuwa anajaribu mpapuro chini zaidi chochote cha kufanya, sisi ni kusema katika darasa. 10 00:00:28,600 --> 00:00:31,626 Lakini kutambua, kwamba ni si labda mbinu bora za ufundishaji 11 00:00:31,626 --> 00:00:34,250 kujifunza aina hii ya vifaa, na vifaa zaidi kwa ujumla. 12 00:00:34,250 --> 00:00:37,250 Na hivyo sisi ni radhi kwa kutangaza kwamba CS50 ya mwenyewe Gheng 13 00:00:37,250 --> 00:00:39,780 Gong imeanza kuandaa kisheria seti ya maelezo 14 00:00:39,780 --> 00:00:42,100 kwa ajili ya kozi, tumaini la ambayo ni kwamba, mmoja, haya 15 00:00:42,100 --> 00:00:44,030 si tu kutumika kama kumbukumbu na rasilimali 16 00:00:44,030 --> 00:00:47,410 kwa kupitia upya nyenzo na kwenda nyuma kwa njia ya vifaa kwamba wanaweza kuwa na 17 00:00:47,410 --> 00:00:51,230 alitoroka mara ya kwanza kote, lakini pia hivyo vichwa yako inaweza kuwa zaidi 18 00:00:51,230 --> 00:00:53,740 up kuliko chini, wakati inakuja wakati kwa hotuba, 19 00:00:53,740 --> 00:00:56,960 hivyo kwamba unaweza kushiriki zaidi kwa kufikiri, kama 20 00:00:56,960 --> 00:00:59,170 kinyume na zaidi scribbly. 21 00:00:59,170 --> 00:01:02,510 >> Kwa kuwa alisema, ni nini utapata juu ya tovuti ni hati kama huu. 22 00:01:02,510 --> 00:01:04,660 Na taarifa, juu kushoto, kuna si tu meza ya yaliyomo, 23 00:01:04,660 --> 00:01:06,920 lakini pia codes huo mara moja kuruka wewe 24 00:01:06,920 --> 00:01:09,077 kwa sehemu sahihi katika video online. 25 00:01:09,077 --> 00:01:11,410 Na nini Chang hapa amefanya ni, kimsingi, kumbukumbu 26 00:01:11,410 --> 00:01:13,340 kile kilichotokea katika hii hasa hotuba. 27 00:01:13,340 --> 00:01:16,370 Na wengi wa mihadhara ni tayari online sasa na URL hii. 28 00:01:16,370 --> 00:01:20,110 Na tutaweza kuendelea baada ya salio ya wale mwishoni mwa wiki hii, 29 00:01:20,110 --> 00:01:22,380 hivyo kuchukua faida ya rasilimali hiyo. 30 00:01:22,380 --> 00:01:25,740 >> Hivyo bila wasiwasi zaidi, sisi kuanza peel nyuma 31 00:01:25,740 --> 00:01:28,180 safu ambayo imekuwa kamba kwa muda fulani. 32 00:01:28,180 --> 00:01:30,670 Na nini sisi kusema kamba kweli ni wiki iliyopita? 33 00:01:30,670 --> 00:01:31,720 34 00:01:31,720 --> 00:01:32,900 Hivyo char nyota. 35 00:01:32,900 --> 00:01:34,900 Na char nyota, vizuri, nini gani kwamba kweli maana? 36 00:01:34,900 --> 00:01:37,150 Naam, muda wote huu, kama tumekuwa wamekuwa wakitoa wito kazi, 37 00:01:37,150 --> 00:01:40,450 kama GetString, na hifadhi kinachojulikana kurudi 38 00:01:40,450 --> 00:01:42,910 thamani ya GetString katika variable-- ni kuitwa 39 00:01:42,910 --> 00:01:47,721 s aina string-- sisi tumekuwa kuandika mstari wa kanuni up huko juu. 40 00:01:47,721 --> 00:01:49,970 Na ni tu wakati mimi kuona yangu handwriting kujitukuza hapa 41 00:01:49,970 --> 00:01:51,930 kufanya mimi kutambua jinsi mauaji hii ni. 42 00:01:51,930 --> 00:01:54,180 >> Hata hivyo, hebu kudhani kwamba, juu ya upande wa kulia 43 00:01:54,180 --> 00:01:57,070 ni, hata hivyo, busara picha ya nini 44 00:01:57,070 --> 00:01:58,880 kinachoendelea haya yote muda na GetString. 45 00:01:58,880 --> 00:02:00,380 GetString, bila shaka, anapata kamba. 46 00:02:00,380 --> 00:02:01,691 Lakini ni nini kwamba kweli maana yake nini? 47 00:02:01,691 --> 00:02:04,190 Ina maana anapata chunk ya kumbukumbu kutoka mfumo wa uendeshaji 48 00:02:04,190 --> 00:02:06,040 na wito kazi, iitwayo malloc. 49 00:02:06,040 --> 00:02:07,390 Lakini zaidi juu ya kwamba baadaye. 50 00:02:07,390 --> 00:02:09,139 Na kisha populates kwamba chunk ya kumbukumbu 51 00:02:09,139 --> 00:02:11,764 pamoja na barua user ina typed katika, ikifuatiwa na, bila shaka, 52 00:02:11,764 --> 00:02:14,800 null tabia, au backslash zero mwishoni sana. 53 00:02:14,800 --> 00:02:18,280 >> Wakati huo huo, upande wa mkono wa kushoto ya hadithi hii, muda wote huu, 54 00:02:18,280 --> 00:02:20,850 tumekuwa kutangaza variable, kama s. 55 00:02:20,850 --> 00:02:24,770 Na kwamba variable ni nini sasa kuanza wito pointer. 56 00:02:24,770 --> 00:02:29,190 Siyo sanduku ndani ya ambayo sisi kuweka kamba, Daven, per se, 57 00:02:29,190 --> 00:02:32,550 lakini badala ya sisi kuweka katika kwamba mraba sanduku upande wa kushoto nini hasa? 58 00:02:32,550 --> 00:02:34,890 59 00:02:34,890 --> 00:02:35,390 Yeah? 60 00:02:35,390 --> 00:02:37,118 >> Watazamaji: pepe ya ambapo ni iko katika kumbukumbu. 61 00:02:37,118 --> 00:02:38,118 >> DAVID J. Malan: Hasa. 62 00:02:38,118 --> 00:02:40,690 pepe ya ambapo Daven iko katika kumbukumbu. 63 00:02:40,690 --> 00:02:44,650 Na si ambapo wote wa Daven iko, per se, lakini hasa anwani 64 00:02:44,650 --> 00:02:45,150 ya nini? 65 00:02:45,150 --> 00:02:46,311 66 00:02:46,311 --> 00:02:46,810 Yeah? 67 00:02:46,810 --> 00:02:47,460 >> Watazamaji: tabia ya kwanza. 68 00:02:47,460 --> 00:02:50,209 >> DAVID J. Malan: tabia ya kwanza katika Daven, ambayo, katika kesi hii, 69 00:02:50,209 --> 00:02:53,820 Mimi mapendekezo mara kiholela na kubadili pesa 1, OX1, 70 00:02:53,820 --> 00:02:55,910 ambayo ina maana ya hexadecimal ya simu ya 1. 71 00:02:55,910 --> 00:02:57,993 Lakini pengine ni kwenda kuwa idadi kubwa sana 72 00:02:57,993 --> 00:03:01,260 ili tupate kuteka kwa 0x kama kiambishi awali, 73 00:03:01,260 --> 00:03:02,806 anayewakilisha tabia ya hexadecimal. 74 00:03:02,806 --> 00:03:05,930 Na kwa sababu hatuna haja ya kujua wapi mapumziko ya wahusika wa Daven 75 00:03:05,930 --> 00:03:09,860 ni kwa sababu ya yale kubuni rahisi uamuzi huo ulifanywa miaka mingi iliyopita? 76 00:03:09,860 --> 00:03:10,548 Yeah? 77 00:03:10,548 --> 00:03:11,651 >> Watazamaji: Backslash 0. 78 00:03:11,651 --> 00:03:12,900 DAVID J. Malan: Yeah, kwa uhakika. 79 00:03:12,900 --> 00:03:18,100 backslash 0 utapata, angalau katika wakati linear, traverse kamba, 80 00:03:18,100 --> 00:03:20,400 kutembea kutoka kushoto kwenda kulia, na kwa kitanzi, au wakati wa 81 00:03:20,400 --> 00:03:22,608 kitanzi, au kitu kama kwamba, na kuamua, oh, hapa 82 00:03:22,608 --> 00:03:24,751 ni mwisho wa kamba fulani. 83 00:03:24,751 --> 00:03:27,000 Hivyo, pamoja na tu anwani katika mwanzo wa kamba, 84 00:03:27,000 --> 00:03:30,290 tuweze kupata ukamilifu wa yake, kwa sababu wakati wote huu, 85 00:03:30,290 --> 00:03:32,030 kamba imekuwa tu nyota Char. 86 00:03:32,030 --> 00:03:36,370 >> Hivyo ni hakika faini kuendelea kutumia Maktaba CS50 na kufikirika hii, 87 00:03:36,370 --> 00:03:38,440 hivyo kusema, lakini tutaweza kuanza kuona hasa 88 00:03:38,440 --> 00:03:41,230 nini imekuwa kinachoendelea chini ya wakati huu kwa ujumla. 89 00:03:41,230 --> 00:03:45,260 Hivyo unaweza kukumbuka mfano huu, pia, kutoka wakati wa mwisho, kulinganisha 0, 90 00:03:45,260 --> 00:03:47,300 ambao hawakuwa kweli kulinganisha. 91 00:03:47,300 --> 00:03:49,070 Lakini sisi alianza kutatua hili. 92 00:03:49,070 --> 00:03:52,020 >> Lakini kama labda rejea, natakiwa maslahi mtu 93 00:03:52,020 --> 00:03:54,261 katika pink tembo leo, pia yaliyotolewa na Chang? 94 00:03:54,261 --> 00:03:55,760 Vipi kuhusu wewe mbele? [Inaudible]. 95 00:03:55,760 --> 00:03:56,660 Kuja juu juu. 96 00:03:56,660 --> 00:03:58,740 >> Na wakati huo huo, kama wewe kuja, hebu 97 00:03:58,740 --> 00:04:01,670 kufikiria kwa muda tu kile kanuni hii kwa kweli alikuwa akifanya. 98 00:04:01,670 --> 00:04:04,917 Ni kutangaza vigezo mbili hadi juu, s na t, na wito GetString. 99 00:04:04,917 --> 00:04:08,250 Hii si sana user-kirafiki mpango, kwa sababu haina kukuambia nini cha kufanya. 100 00:04:08,250 --> 00:04:10,541 Lakini hebu kudhani tu tuko kulenga sehemu Juicy. 101 00:04:10,541 --> 00:04:14,470 Na kisha sisi kufanya, kama s ni sawa na sawa na t, ni lazima kusema printf, 102 00:04:14,470 --> 00:04:16,170 typed kitu kimoja. 103 00:04:16,170 --> 00:04:16,670 Hello. 104 00:04:16,670 --> 00:04:17,050 Nini jina lako? 105 00:04:17,050 --> 00:04:17,779 >> Janelle: Janelle. 106 00:04:17,779 --> 00:04:19,529 DAVID J. Malan: Janelle, vyema kukutana na wewe. 107 00:04:19,529 --> 00:04:21,800 Hivyo changamoto yako katika mkono kwa ajili ya tembo hii 108 00:04:21,800 --> 00:04:25,230 ni kuteka us kwanza picha ya nini kuwakilishwa katika wale wawili wa kwanza 109 00:04:25,230 --> 00:04:25,970 mistari. 110 00:04:25,970 --> 00:04:28,139 Hivyo s na t inaweza kuwa kuwakilishwa jinsi ya screen? 111 00:04:28,139 --> 00:04:30,680 Na unaweza tu kuteka ni pamoja na kidole yako juu ya screen hii kubwa. 112 00:04:30,680 --> 00:04:31,780 113 00:04:31,780 --> 00:04:34,510 >> Hivyo kuna nusu mbili kwa kila upande wa kwamba equation. 114 00:04:34,510 --> 00:04:37,760 Hivyo kuna s upande wa kushoto, na kisha GetString juu ya haki. 115 00:04:37,760 --> 00:04:40,540 Na kisha kuna t upande wa kushoto, na kisha GetString juu ya haki. 116 00:04:40,540 --> 00:04:42,630 Hivyo jinsi gani tunaanza kuchora picha kwamba 117 00:04:42,630 --> 00:04:46,340 inawakilisha nini kinaendelea hapa katika kumbukumbu, unaweza kusema? 118 00:04:46,340 --> 00:04:49,150 Na napenda basi wewe kueleza nini unafanya kama wewe kwenda. 119 00:04:49,150 --> 00:04:49,820 >> Janelle: OK. 120 00:04:49,820 --> 00:04:58,890 Naam, kwanza, itakuwa kuuliza kupata string pembejeo. 121 00:04:58,890 --> 00:05:00,439 Na itakuwa store-- oh, sorry. 122 00:05:00,439 --> 00:05:01,230 DAVID J. Malan: OK. 123 00:05:01,230 --> 00:05:01,730 Good. 124 00:05:01,730 --> 00:05:03,330 Na hii inaitwa nini? 125 00:05:03,330 --> 00:05:03,950 Oh, OK. 126 00:05:03,950 --> 00:05:04,450 Kuendelea. 127 00:05:04,450 --> 00:05:05,575 Sikuwa na maana kwa kupinga. 128 00:05:05,575 --> 00:05:07,060 Janelle: Sorry. 129 00:05:07,060 --> 00:05:14,237 Hivyo ingekuwa pembejeo katika anwani of-- si uhakika. 130 00:05:14,237 --> 00:05:17,320 Siwezi hasa kumbuka ya simu, lakini naamini ilikuwa ni kwa kuanzia na 0. 131 00:05:17,320 --> 00:05:18,420 >> DAVID J. Malan: Hiyo ni haki ya wote, kwa sababu mimi alifanya namba up, 132 00:05:18,420 --> 00:05:19,650 hivyo hakuna jibu sahihi. 133 00:05:19,650 --> 00:05:22,105 >> Janelle: Kuanzia na 0 arc. 134 00:05:22,105 --> 00:05:24,000 >> DAVID J. Malan: Sawa, hivyo kipengele 0. 135 00:05:24,000 --> 00:05:24,765 Uhakika. 136 00:05:24,765 --> 00:05:28,295 >> Janelle: Na kisha kama alikuwa kama wawili tu-letter-- 137 00:05:28,295 --> 00:05:30,496 >> DAVID J. Malan: Sawa, nyuma yenu. 138 00:05:30,496 --> 00:05:33,629 >> Janelle: Hivyo kipengele 0, na basi kipengele 1 au kipengele 2. 139 00:05:33,629 --> 00:05:36,670 DAVID J. Malan: Na ambayo kipande cha picha ni wewe kuchora sasa hivi? 140 00:05:36,670 --> 00:05:37,690 wito kwa GetString? 141 00:05:37,690 --> 00:05:38,830 Au tamko la s? 142 00:05:38,830 --> 00:05:42,890 >> Janelle: tamko ya s, naamini. 143 00:05:42,890 --> 00:05:45,980 Oh, GetString, kwa sababu ingekuwa kuwa inputted katika kila [? eneo hilo. ?] 144 00:05:45,980 --> 00:05:46,510 >> DAVID J. Malan: Good. 145 00:05:46,510 --> 00:05:47,051 Hasa. 146 00:05:47,051 --> 00:05:49,300 Hata ingawa hii kwa ufanisi anarudi safu, kukumbuka, 147 00:05:49,300 --> 00:05:53,300 wakati sisi kupata nyuma kamba, tunaweza index ndani ya kwamba string kutumia 01 na 2. 148 00:05:53,300 --> 00:05:56,180 Kitaalam, hizi ni pengine kuwakilishwa na anwani ya mtu binafsi, 149 00:05:56,180 --> 00:05:57,100 lakini hiyo ni faini. 150 00:05:57,100 --> 00:06:00,170 >> Hivyo tuseme, kama naweza tu kufunga mbele kwa ambapo sisi kushoto mbali 151 00:06:00,170 --> 00:06:04,320 mara ya mwisho, kama moja ya masharti mara g b e, 152 00:06:04,320 --> 00:06:10,337 backslash 0, na hivyo anayewakilisha Gabe ya pembejeo, jinsi gani sisi kuwakilisha s sasa? 153 00:06:10,337 --> 00:06:12,670 Kama hii ni kumbukumbu hiyo ni wamekuwa akarudi na GetString? 154 00:06:12,670 --> 00:06:14,415 155 00:06:14,415 --> 00:06:17,610 >> Janelle: Je, ni kuwa kuwakilishwa na arc? 156 00:06:17,610 --> 00:06:18,750 >> DAVID J. Malan: Kwa arc? 157 00:06:18,750 --> 00:06:19,130 Naam, hakuna. 158 00:06:19,130 --> 00:06:21,171 Hebu tu kusema, pictorially, basi mimi tu kwenda mbele 159 00:06:21,171 --> 00:06:25,710 na kupendekeza kwamba, kama hii ni s, hii ni thamani ya kurudi kwa GetString. 160 00:06:25,710 --> 00:06:29,482 Na ve inayotolewa hii kama 0, 1, 2, ambayo ni kikamilifu busara, kwa sababu sisi 161 00:06:29,482 --> 00:06:30,940 unaweza index ndani ya kamba, kama vile. 162 00:06:30,940 --> 00:06:33,340 Lakini tu kuwa thabiti na mara ya mwisho, basi mimi kwenda mbele 163 00:06:33,340 --> 00:06:37,310 na kiholela kupendekeza kwamba hii ni mahali 1, hii ni mahali 2, 164 00:06:37,310 --> 00:06:39,597 hii ni anwani 3, na kadhalika. 165 00:06:39,597 --> 00:06:41,430 Na hivyo, tu kuwa super wazi, nini kinaendelea 166 00:06:41,430 --> 00:06:44,580 kwenda katika s kama matokeo ya mstari wa kwanza wa code, ungeweza kusema? 167 00:06:44,580 --> 00:06:45,420 >> Janelle: 1 mitaani? 168 00:06:45,420 --> 00:06:46,420 >> DAVID J. Malan: Hasa. 169 00:06:46,420 --> 00:06:47,190 Hivyo kushughulikia 0x1. 170 00:06:47,190 --> 00:06:48,220 171 00:06:48,220 --> 00:06:51,230 Na wakati huo huo, napenda kwenda mbele na duplicate mengi ya nini umefanya kosa 172 00:06:51,230 --> 00:06:52,740 na kuongeza t yangu mwenyewe hapa. 173 00:06:52,740 --> 00:06:56,340 Kama ningekuwa na aina katika Gabe tena mara ya pili, 174 00:06:56,340 --> 00:07:01,530 wakati wakiongozwa na GetString, ambapo, bila shaka, ni Gabe kwenda? 175 00:07:01,530 --> 00:07:02,280 Naam, presumably-- 176 00:07:02,280 --> 00:07:04,935 177 00:07:04,935 --> 00:07:05,975 >> Janelle: Kama ilivyokuwa katika hapa? 178 00:07:05,975 --> 00:07:06,850 DAVID J. Malan: Yeah. 179 00:07:06,850 --> 00:07:08,516 Janelle: Au ni pia katika masanduku sawa? 180 00:07:08,516 --> 00:07:11,940 DAVID J. Malan: Hebu kupendekeza, yeah, hasa, hivyo katika masanduku haya ya ziada. 181 00:07:11,940 --> 00:07:15,230 Lakini nini muhimu sasa ni kwamba, hata ingawa nimekuwa inayotolewa haya pretty karibu 182 00:07:15,230 --> 00:07:18,650 together-- 0x1, hii ni 0x2-- katika hali halisi, 183 00:07:18,650 --> 00:07:25,750 hii sasa inaweza kuwa anwani 0x10, kwa mfano, na 0x11, na 0x12, 184 00:07:25,750 --> 00:07:26,870 na kadhalika. 185 00:07:26,870 --> 00:07:29,955 Na hivyo, kama hiyo kesi, nini kinaendelea na kuishia hapa katika t? 186 00:07:29,955 --> 00:07:30,830 >> Janelle: 0x10? 187 00:07:30,830 --> 00:07:31,830 DAVID J. Malan: Hasa. 188 00:07:31,830 --> 00:07:33,180 Hivyo 0x10. 189 00:07:33,180 --> 00:07:34,570 Na hivyo sasa, swali la mwisho. 190 00:07:34,570 --> 00:07:37,510 Una, kwa mbali, alikuwa na kazi gumu kwa tembo hivi sasa. 191 00:07:37,510 --> 00:07:42,650 Kwa sasa, kama mimi kuvuta up code tena, wakati mimi kufanya, katika line tatu, 192 00:07:42,650 --> 00:07:47,630 kama s ni sawa na ni sawa na t, nini ni mimi kwa kweli kulinganisha kwamba tumekuwa inayotolewa hapa? 193 00:07:47,630 --> 00:07:49,271 >> Janelle: anwani mbili? 194 00:07:49,271 --> 00:07:50,270 DAVID J. Malan: Hasa. 195 00:07:50,270 --> 00:07:53,350 Hivyo mimi nina kusema ni s sawa sawa na t? 196 00:07:53,350 --> 00:07:56,210 Kwa maneno mengine, ni sawa sawa na 1 10? 197 00:07:56,210 --> 00:07:59,710 Na bila shaka, Jibu la wazi sasa ni, hakuna. 198 00:07:59,710 --> 00:08:02,920 Na hivyo mpango huu ni hatimaye kwenda magazeti nini, unaweza kusema? 199 00:08:02,920 --> 00:08:05,770 200 00:08:05,770 --> 00:08:08,405 >> Janelle: Je, ni kuwa, typed kitu kimoja? 201 00:08:08,405 --> 00:08:11,446 >> DAVID J. Malan: Hivyo kama s ni 1 na t ni 10? 202 00:08:11,446 --> 00:08:13,320 >> Janelle: You typed mambo mbalimbali. 203 00:08:13,320 --> 00:08:13,570 >> DAVID J. Malan: Hasa. 204 00:08:13,570 --> 00:08:14,480 Typed mambo mbalimbali. 205 00:08:14,480 --> 00:08:14,850 Wote haki. 206 00:08:14,850 --> 00:08:16,714 Hivyo duru ya applause, kama tunaweza, hapa. 207 00:08:16,714 --> 00:08:17,214 [Makofi] 208 00:08:17,214 --> 00:08:17,708 Hiyo ilikuwa chungu. 209 00:08:17,708 --> 00:08:18,208 Mimi najua. 210 00:08:18,208 --> 00:08:19,684 Nicely kufanyika. 211 00:08:19,684 --> 00:08:24,690 Hivyo sasa hebu angalia kama hatuwezi tease mbali nini fix mara. 212 00:08:24,690 --> 00:08:28,040 Na bila shaka, wakati sisi fasta Haya ambayo mimi itabidi sasa ya kuwakilisha katika green-- 213 00:08:28,040 --> 00:08:29,690 sisi alifanya michache ya nyongeza hapa. 214 00:08:29,690 --> 00:08:32,409 Kwanza, tu kama sanity kuangalia, mimi nina kuangalia kwanza 215 00:08:32,409 --> 00:08:35,110 kama s ni sawa na batili na t sawa na null. 216 00:08:35,110 --> 00:08:39,440 Na tu kuwa wazi, wakati anaweza s au t kuwa null katika code kama hii? 217 00:08:39,440 --> 00:08:43,140 218 00:08:43,140 --> 00:08:44,490 Wakati wanaweza s au t kuwa null. 219 00:08:44,490 --> 00:08:44,990 Yeah? 220 00:08:44,990 --> 00:08:45,990 >> Watazamaji: [inaudible]. 221 00:08:45,990 --> 00:08:49,490 222 00:08:49,490 --> 00:08:50,510 >> DAVID J. Malan: Hasa. 223 00:08:50,510 --> 00:08:52,840 Kama string kwamba mtumiaji typed katika ni njia ya muda mrefu pia 224 00:08:52,840 --> 00:08:56,140 walionao katika kumbukumbu, au baadhi weird kona kesi kama hiyo, 225 00:08:56,140 --> 00:08:59,010 GetString, kama tutaweza kuona, literally leo, katika nyaraka zake, 226 00:08:59,010 --> 00:09:02,330 anasema atarudi null kama thamani maalum sentinel, 227 00:09:02,330 --> 00:09:05,417 au tu aina ya ishara maalum hiyo ina maana kitu potoka. 228 00:09:05,417 --> 00:09:07,500 Hivyo tunataka kuangalia kwa kwamba, kwa sababu ni zamu nje 229 00:09:07,500 --> 00:09:09,720 kwamba null ni thamani ya hatari sana. 230 00:09:09,720 --> 00:09:14,250 >> Mara nyingi, kama wewe jaribu kufanya kitu kwa null kuwashirikisha function-- kupita 231 00:09:14,250 --> 00:09:17,470 kama pembejeo, kwa instance-- kazi ambayo wanaweza sana itakuwa ajali na, pamoja na hayo, 232 00:09:17,470 --> 00:09:19,090 kuchukua chini ya mpango yako yote. 233 00:09:19,090 --> 00:09:22,570 Hivyo line hii ya tatu sasa ni tu sanity kuangalia, kuangalia makosa, kama wewe. 234 00:09:22,570 --> 00:09:25,450 Hiyo ni tabia nzuri sasa kwa sisi kupata katika wakati wowote sisi 235 00:09:25,450 --> 00:09:28,050 kujaribu kutumia thamani kwamba inaweza, uwezekano, kuwa null. 236 00:09:28,050 --> 00:09:32,000 >> Sasa, katika mstari wa nne hapa, "Kama strcmp (s, t)," vizuri, 237 00:09:32,000 --> 00:09:33,180 nini kuwa akimaanisha? 238 00:09:33,180 --> 00:09:36,750 Naam, sisi alisema hii ilikuwa kwa ufupi sana aitwaye kazi kwa kamba kulinganisha. 239 00:09:36,750 --> 00:09:40,370 Na madhumuni yake katika maisha ni kulinganisha hoja yake ya kwanza dhidi yake ya pili, 240 00:09:40,370 --> 00:09:44,640 lakini si katika suala la anwani zao, kama tulivyofanya bila kukusudia wakati 241 00:09:44,640 --> 00:09:48,270 iliyopita na kanuni nyekundu, lakini badala ya kulinganisha hizo mbili 242 00:09:48,270 --> 00:09:53,210 masharti katika humanly Intuitive njia kwa kulinganisha hili, juu ya hii, 243 00:09:53,210 --> 00:09:56,690 dhidi ya hili, juu ya hili, na kisha kuacha ikiwa na wakati moja 244 00:09:56,690 --> 00:09:59,590 au wote wawili wa vidole yangu hits backslash 0. 245 00:09:59,590 --> 00:10:04,530 Hivyo mtu miaka iliyopita kutekelezwa strcmp kutekeleza kwa us utendaji 246 00:10:04,530 --> 00:10:08,890 kwamba sisi matumaini sisi ingekuwa Gotten na tu kulinganisha maadili mbili rahisi. 247 00:10:08,890 --> 00:10:14,929 >> Sasa kusema ukweli, mimi kuweka kuchora yote ya namba hizi mbalimbali. 248 00:10:14,929 --> 00:10:17,470 Lakini ukweli ni, nimekuwa kufanya haya juu wakati wote. 249 00:10:17,470 --> 00:10:19,580 Na hivyo basi mimi tu kwenda mbele na mpapuro hizi nje 250 00:10:19,580 --> 00:10:23,100 kufanya hatua hiyo, mwishoni mwa wa siku na kusonga mbele, 251 00:10:23,100 --> 00:10:30,160 sisi siyo kweli kwenda huduma ya juu nini anwani mambo ni kweli 252 00:10:30,160 --> 00:10:30,790 katika kumbukumbu. 253 00:10:30,790 --> 00:10:34,320 Hivyo mimi nina si kwenda kuteka haya aina ya namba sana tena, 254 00:10:34,320 --> 00:10:38,970 Mimi tu abstract hii mbali kidogo zaidi ya kirafiki na mishale tu. 255 00:10:38,970 --> 00:10:42,060 >> Kwa maneno mengine, kama s ni pointer, vizuri, hebu tu kuteka ni, literally, 256 00:10:42,060 --> 00:10:45,430 kama pointer, arrow akizungumzia kutoka yenyewe kwa kitu kingine, 257 00:10:45,430 --> 00:10:48,280 na si wasiwasi sana zaidi kuhusu minutia ya anwani hizi 258 00:10:48,280 --> 00:10:49,910 ambayo, tena, mimi alifanya juu anyway. 259 00:10:49,910 --> 00:10:52,680 Lakini tutaweza kuona wale anwani, wakati mwingine, wakati debugging code. 260 00:10:52,680 --> 00:10:56,450 >> Sasa wakati huo huo, mpango huu up hapa fixes, bila shaka, 261 00:10:56,450 --> 00:10:58,720 kwamba tatizo kwa kulinganisha wale masharti mawili. 262 00:10:58,720 --> 00:11:00,260 Lakini sisi mbio katika tatizo jingine. 263 00:11:00,260 --> 00:11:03,180 Hii ilikuwa na nakala mpango mara ya mwisho, 264 00:11:03,180 --> 00:11:06,880 ambapo, mimi alikuwa anajaribu capitalize tu tabia ya kwanza katika kamba. 265 00:11:06,880 --> 00:11:09,620 Lakini ilikuwa ni nini dalili tuliona mara ya mwisho wakati 266 00:11:09,620 --> 00:11:14,150 user typed katika thamani, kama Gabe katika lowercase, kwa s, 267 00:11:14,150 --> 00:11:19,310 kisha sisi kwa ajili s katika t, kama katika mstari wa tatu huko, 268 00:11:19,310 --> 00:11:22,900 na kisha mimi alijaribu capitalize t bracket 0? 269 00:11:22,900 --> 00:11:25,950 Mara ya athari za nini kubadilisha t bracket 0 hapa? 270 00:11:25,950 --> 00:11:27,150 >> Watazamaji: Ni iliyopita s. 271 00:11:27,150 --> 00:11:29,360 >> DAVID J. Malan: Yeah, Mimi iliyopita s, kama vile. 272 00:11:29,360 --> 00:11:31,050 Kwa sababu kile kweli kinachoendelea? 273 00:11:31,050 --> 00:11:34,130 Naam, napenda kuona kama naweza safi up picha hii, kama ifuatavyo. 274 00:11:34,130 --> 00:11:41,390 >> Kama s ni, tena, neno g, a, b, e, backslash, 0, na s 275 00:11:41,390 --> 00:11:44,084 tutaweza kuendelea kuchora kama sanduku hapa, lakini hakuna zaidi ya anwani. 276 00:11:44,084 --> 00:11:45,250 Hebu kuacha kufanya mambo up. 277 00:11:45,250 --> 00:11:47,510 Hebu tu kuteka picha kurahisisha dunia. 278 00:11:47,510 --> 00:11:52,640 >> Wakati mimi kutangaza t kwa kamba t, ambayo inajenga kwamba chunk ya kumbukumbu. 279 00:11:52,640 --> 00:11:55,850 Square hutokea kwa kuwa 32 bits katika kompyuta nyingi. 280 00:11:55,850 --> 00:11:59,530 Kwa kweli, kama wameweza milele habari za kompyuta kuwa na 32-bit usanifu, 281 00:11:59,530 --> 00:12:03,000 kweli dhana-kusema, kwamba tu ina maana inatumia anwani 32-bit. 282 00:12:03,000 --> 00:12:05,370 Na kama kiufundi kando, kama wameweza umewahi kujiuliza 283 00:12:05,370 --> 00:12:09,630 kwa nini kompyuta wakubwa, kama kweli alijaribu supu yao juu na kura ya RAM, 284 00:12:09,630 --> 00:12:12,360 inaweza tu kuwa na upeo ya gigabytes nne ya RAM, 285 00:12:12,360 --> 00:12:14,860 vizuri kwamba ni kwa sababu, literally, kompyuta yako ya zamani inaweza tu 286 00:12:14,860 --> 00:12:17,250 kuhesabu kama juu kama 4 bilioni, bilioni 4 ka, 287 00:12:17,250 --> 00:12:20,590 kwa sababu ilikuwa kutumia 32-bit namba kwa anwani. 288 00:12:20,590 --> 00:12:23,260 >> Lakini katika hali yoyote, katika hii mfano, hadithi ya rahisi sana. 289 00:12:23,260 --> 00:12:27,250 t ni mwingine tu pointer, au kweli nyota char, kamba aka. 290 00:12:27,250 --> 00:12:30,860 Na jinsi gani mimi wanataka update picha hii sasa na kwamba mstari wa pili wa kanuni, 291 00:12:30,860 --> 00:12:31,950 baada ya dot, dot, dot? 292 00:12:31,950 --> 00:12:35,845 Wakati mimi kufanya string t sawa na s semicolon, jinsi gani picha hii kubadilika? 293 00:12:35,845 --> 00:12:37,500 294 00:12:37,500 --> 00:12:38,000 Yeah? 295 00:12:38,000 --> 00:12:38,916 >> Watazamaji: [inaudible]. 296 00:12:38,916 --> 00:12:41,087 297 00:12:41,087 --> 00:12:42,020 >> DAVID J. Malan: Yeah. 298 00:12:42,020 --> 00:12:42,600 Hasa. 299 00:12:42,600 --> 00:12:45,620 Mimi tu ya kuweka mshale kutoka t sanduku kwa anwani huo, 300 00:12:45,620 --> 00:12:47,570 ile ile ya kwanza ya mbili katika alitoa. 301 00:12:47,570 --> 00:12:50,850 Au kitaalam, kama hii guy bado walikuwa katika 0x1, 302 00:12:50,850 --> 00:12:53,052 ni kama nilikuwa ingawa 0x1 hapa na 0x1 hapa. 303 00:12:53,052 --> 00:12:54,760 Lakini tena, anayejali kuhusu anwani? 304 00:12:54,760 --> 00:12:56,345 Ni wazo tu kwamba sasa mambo. 305 00:12:56,345 --> 00:12:57,720 Hivyo hii ni nini kinatokea hapa. 306 00:12:57,720 --> 00:13:02,690 Hivyo bila shaka, kama wewe kufanya t bracket 0, ambayo ni safu nukuu, 307 00:13:02,690 --> 00:13:05,650 ya course-- na kusema ukweli, inaonekana kama kuna safu zaidi ya hapa, 308 00:13:05,650 --> 00:13:07,340 lakini sasa kuna jambo hili weird. 309 00:13:07,340 --> 00:13:11,160 Kujua kwamba lugha ya programu, C, inatoa kipengele hiki, 310 00:13:11,160 --> 00:13:14,650 ambapo, hata kama t ni pointer, au s ni pointer, 311 00:13:14,650 --> 00:13:18,050 bado unaweza kutumia utambuzi, starehe za mraba bracket 312 00:13:18,050 --> 00:13:22,520 nukuu kwenda kipengele kwanza, au kipengele pili, au yoyote ya kipengele 313 00:13:22,520 --> 00:13:26,130 kwamba pointer ni akizungumzia kwa sababu, labda, ni 314 00:13:26,130 --> 00:13:29,410 ni, kama katika kesi hii, akionyesha baadhi safu. 315 00:13:29,410 --> 00:13:30,340 >> Hivyo ni jinsi gani sisi kurekebisha hili? 316 00:13:30,340 --> 00:13:33,660 Kwa kweli, hii ni mahali ambapo got kidogo mno katika mtazamo wa kwanza. 317 00:13:33,660 --> 00:13:35,340 Lakini hapa ni toleo mpya na kuboreshwa. 318 00:13:35,340 --> 00:13:37,460 >> Hivyo kwanza, mimi nina kupata kuondoa maktaba CS50, 319 00:13:37,460 --> 00:13:41,170 tu kuwaonyesha kwamba s ni kweli nyota Char, tu kisawe. 320 00:13:41,170 --> 00:13:43,540 Na t ni pia nyota Char. 321 00:13:43,540 --> 00:13:48,290 Lakini ni nini kinaendelea juu ya mkono wa kulia upande wa kwamba line 322 00:13:48,290 --> 00:13:49,970 ambapo t ni kwa ajili thamani? 323 00:13:49,970 --> 00:13:50,790 >> Malloc ni nini? 324 00:13:50,790 --> 00:13:51,630 Nini ni strlen? 325 00:13:51,630 --> 00:13:52,547 Sizeof (Char) ni nini? 326 00:13:52,547 --> 00:13:54,380 Kwa nini heck gani hii line kuangalia hivyo tata? 327 00:13:54,380 --> 00:13:55,713 Nini ni kufanya katika ngazi ya juu? 328 00:13:55,713 --> 00:13:56,482 329 00:13:56,482 --> 00:13:57,440 Nini ni kuhifadhi katika t? 330 00:13:57,440 --> 00:13:58,646 Yeah? 331 00:13:58,646 --> 00:14:01,104 Watazamaji: Ni kugawa kiasi fulani cha kumbukumbu nafasi. 332 00:14:01,104 --> 00:14:03,032 Ni kuhifadhi, mimi nadhani, barua [inaudible]. 333 00:14:03,032 --> 00:14:04,032 >> DAVID J. Malan: Perfect. 334 00:14:04,032 --> 00:14:04,540 Perfect. 335 00:14:04,540 --> 00:14:06,650 Ni kugawa baadhi ya kiasi cha kumbukumbu nafasi 336 00:14:06,650 --> 00:14:08,940 kuhifadhi, labda, barua siku zijazo. 337 00:14:08,940 --> 00:14:11,310 Na hasa, malloc hiyo ni kurudi nini? 338 00:14:11,310 --> 00:14:13,114 339 00:14:13,114 --> 00:14:14,851 >> Watazamaji: Kurudi [inaudible]? 340 00:14:14,851 --> 00:14:15,850 DAVID J. Malan: Hasa. 341 00:14:15,850 --> 00:14:18,850 Kurudi pepe ya kwamba kumbukumbu, ambayo ni njia dhana ya kusema, 342 00:14:18,850 --> 00:14:21,640 anarudi pepe ya Byte kwanza ya kwamba kumbukumbu. 343 00:14:21,640 --> 00:14:25,460 Wajibu ni juu yangu kukumbuka kiasi gani kumbukumbu mimi kwa kweli 344 00:14:25,460 --> 00:14:27,140 zilizotengwa au aliuliza malloc kwa. 345 00:14:27,140 --> 00:14:28,384 >> Sasa ni kiasi gani ni kwamba? 346 00:14:28,384 --> 00:14:30,550 Vizuri, hata kama kuna mengi ya mabano hapa, 347 00:14:30,550 --> 00:14:32,970 malloc inachukua tu hoja moja. 348 00:14:32,970 --> 00:14:37,250 Na mimi nina kubainisha strlen ya s, hivyo kutoa me ka kama wengi kama kuna katika s, 349 00:14:37,250 --> 00:14:37,800 lakini kuongeza moja. 350 00:14:37,800 --> 00:14:38,300 Kwa nini? 351 00:14:38,300 --> 00:14:39,030 352 00:14:39,030 --> 00:14:39,530 Yeah? 353 00:14:39,530 --> 00:14:40,840 >> Watazamaji: backslash 0. 354 00:14:40,840 --> 00:14:41,840 DAVID J. Malan: Hasa. 355 00:14:41,840 --> 00:14:43,423 Sisi nimepata kufanya housekeeping kidogo. 356 00:14:43,423 --> 00:14:45,970 Hivyo kwa sababu kuna backslash 0, tunatarajia bora kukumbuka kwamba. 357 00:14:45,970 --> 00:14:47,310 Vinginevyo, tunakwenda kujenga string kwamba 358 00:14:47,310 --> 00:14:49,170 hana kwamba Terminator maalum. 359 00:14:49,170 --> 00:14:52,640 >> Wakati huo huo, tu kuwa super anal, nina sizeof (Char), 360 00:14:52,640 --> 00:14:55,730 tu katika kesi ya mtu anaendesha yangu code si juu ya CS50 appliance, 361 00:14:55,730 --> 00:14:58,220 lakini labda kompyuta tofauti kabisa ambapo chars 362 00:14:58,220 --> 00:15:01,470 ni byte moja, kwa mkataba huo, lakini mbili ka, au jambo kubwa kuliko hiyo. 363 00:15:01,470 --> 00:15:04,490 Ni tu kuwa super, super mnaichukia makosa. 364 00:15:04,490 --> 00:15:06,940 Hata ingawa, katika hali halisi, ni zaidi uwezekano wa kwenda kuwa 1. 365 00:15:06,940 --> 00:15:11,490 >> Sasa, wakati huo huo, mimi kwenda mbele na nakala kamba, t bracket i sawa na t bracket s. 366 00:15:11,490 --> 00:15:14,962 Nami kuahirisha kwa wiki iliyopita chanzo code kuona nini kinaendelea. 367 00:15:14,962 --> 00:15:17,670 Lakini takeaway muhimu, na sababu mimi kuweka code sasa katika kijani, 368 00:15:17,670 --> 00:15:22,520 ni kwa sababu kwamba mstari wa mwisho sana, t bracket 0 sawa na toupper, 369 00:15:22,520 --> 00:15:25,230 ina athari ya kuyafanyia ambayo kamba? 370 00:15:25,230 --> 00:15:26,960 t na / au s? 371 00:15:26,960 --> 00:15:29,280 372 00:15:29,280 --> 00:15:30,580 Hiyo mstari wa mwisho wa kanuni. 373 00:15:30,580 --> 00:15:32,930 374 00:15:32,930 --> 00:15:35,560 >> Tu t, kwa sababu nini kilichotokea wakati huu, 375 00:15:35,560 --> 00:15:41,500 kama mimi kidogo kutengua hatua hiyo ya mwisho, nini kilichotokea, ambapo mimi wito malloc, 376 00:15:41,500 --> 00:15:45,380 Mimi kimsingi kupata chunk ya kumbukumbu kwamba ni kawaida sawa kama awali, 377 00:15:45,380 --> 00:15:47,020 kwa sababu hiyo ni hesabu mimi alivyofanya. 378 00:15:47,020 --> 00:15:50,920 Mimi nina kuhifadhi katika t anwani ya kwamba chunk ya kumbukumbu. 379 00:15:50,920 --> 00:15:53,370 Hata ingawa hii inaonekana nzuri na pretty, nzuri na tupu, 380 00:15:53,370 --> 00:15:56,882 ukweli ni kuna, nini tutaweza kuweka wito, maadili takataka katika hapa. 381 00:15:56,882 --> 00:15:59,340 Hiyo chunk ya kumbukumbu nguvu sana vizuri na zimetumika kabla, 382 00:15:59,340 --> 00:16:00,940 sekunde chache, dakika chache zilizopita. 383 00:16:00,940 --> 00:16:04,410 Hivyo kuna inaweza kabisa kuwa namba au barua huko, tu kwa ajali. 384 00:16:04,410 --> 00:16:08,580 Lakini wao ni si halali, hata mimi mwenyewe na idadi ya chunk hii ya kumbukumbu 385 00:16:08,580 --> 00:16:12,510 na chars halisi, kama mimi kufanya katika kwamba kwa kitanzi huko. 386 00:16:12,510 --> 00:16:13,180 Wote haki? 387 00:16:13,180 --> 00:16:16,180 >> Hivyo sasa, kilele cha mifano hizi tatu 388 00:16:16,180 --> 00:16:20,730 kwamba walikuwa inaonekana kuvunjwa mara ya mwisho, hii Swap mfano, kazi hii 389 00:16:20,730 --> 00:16:23,670 kazi katika akili kuwa ni swapped a na b. 390 00:16:23,670 --> 00:16:25,620 Lakini haikuwa kazi kwa namna gani nyingine? 391 00:16:25,620 --> 00:16:27,616 392 00:16:27,616 --> 00:16:28,614 Yeah? 393 00:16:28,614 --> 00:16:29,612 >> Watazamaji: [inaudible]. 394 00:16:29,612 --> 00:16:35,600 395 00:16:35,600 --> 00:16:36,700 >> DAVID J. Malan: Hasa. 396 00:16:36,700 --> 00:16:39,530 Kama ningekuwa kuwaita kazi hii kutoka another-- kwa mfano, 397 00:16:39,530 --> 00:16:42,870 kutokana na kazi kama kuu, ambapo Nina variable, x na y, kama mimi 398 00:16:42,870 --> 00:16:46,160 alifanya wiki iliyopita, kanuni na huo, na mimi kupita katika x na y 399 00:16:46,160 --> 00:16:49,860 kwa Byta, na kisha kuwaita Swap-- hii, bila shaka, ni toleo sahihi 400 00:16:49,860 --> 00:16:52,220 ni nini sisi ni juu ya see-- haikuwa kazi. 401 00:16:52,220 --> 00:16:53,770 Kwa hiyo kile ni fix? 402 00:16:53,770 --> 00:16:56,850 >> Naam, hivyo tu kuwa wazi, basi mimi kwenda mbele 403 00:16:56,850 --> 00:17:05,450 and-- nipe moja ya pili hapa, na kuona kama naweza kuonyesha moja ya mwisho, ambayo 404 00:17:05,450 --> 00:17:12,464 itakuwa in-- hebu angalia kama naweza kupata hii fast-- OK halisi, [inaudible]. 405 00:17:12,464 --> 00:17:18,440 406 00:17:18,440 --> 00:17:19,240 OK, huko ni. 407 00:17:19,240 --> 00:17:21,000 Hivyo kupuuza amri mimi nina tu kuandika. 408 00:17:21,000 --> 00:17:23,780 Mimi nataka retrieve katika dakika ya mwisho mfano 409 00:17:23,780 --> 00:17:27,960 kutoka wakati wa mwisho, ambayo sasa inaitwa hakuna Swap. 410 00:17:27,960 --> 00:17:30,200 >> Hivyo hakuna Swap ni ambapo sisi kushoto mbali wakati wa mwisho, 411 00:17:30,200 --> 00:17:32,930 ambapo, mimi initialized x kwa 1 na y kwa 2. 412 00:17:32,930 --> 00:17:35,840 Mimi kisha kuwaita Swap, kupita katika 1 na 2. 413 00:17:35,840 --> 00:17:37,930 Na kisha kazi hii kazi katika baadhi ya hisia, 414 00:17:37,930 --> 00:17:40,750 lakini hakuwa na kudumu athari juu ya x na y. 415 00:17:40,750 --> 00:17:45,430 Hivyo swali katika mkono ni jinsi sasa je, sisi kweli kurekebisha tatizo hili? 416 00:17:45,430 --> 00:17:47,820 Ni ufumbuzi katika mkono ni nini? 417 00:17:47,820 --> 00:17:53,150 >> Naam, katika swap.c, ambayo ni mpya leo, taarifa wanandoa wa tofauti. 418 00:17:53,150 --> 00:17:54,700 x na y ni sawa. 419 00:17:54,700 --> 00:17:57,250 Lakini nini ni wazi tofauti juu ya line 25? 420 00:17:57,250 --> 00:17:58,880 421 00:17:58,880 --> 00:18:01,715 Nini mpya huko, kama unakumbuka nini inaonekana kama pili iliyopita? 422 00:18:01,715 --> 00:18:02,565 >> Watazamaji: [inaudible]. 423 00:18:02,565 --> 00:18:03,440 >> DAVID J. Malan: Yeah. 424 00:18:03,440 --> 00:18:06,680 Hivyo ampersands ni kipande mpya ya syntax si tu katika mpango huu, 425 00:18:06,680 --> 00:18:08,560 lakini pia kwa ujumla zaidi katika CS50. 426 00:18:08,560 --> 00:18:10,680 Hadi sasa, sidhani tumeona mifano yoyote 427 00:18:10,680 --> 00:18:14,070 au kweli aliyesema kuhusu wao katika yoyote undani, zaidi ya, labda, preemptively 428 00:18:14,070 --> 00:18:16,467 katika sehemu, Ampersand kama hii. 429 00:18:16,467 --> 00:18:19,300 Naam, ni zamu nje Ampersand ni moja ya vipande ya mwisho ya syntax mpya 430 00:18:19,300 --> 00:18:20,174 tunakwenda kujifunza. 431 00:18:20,174 --> 00:18:23,500 All maana ni pepe ya baadhi kutofautiana. 432 00:18:23,500 --> 00:18:25,070 Kwa nini anwani haina x kuishi? 433 00:18:25,070 --> 00:18:26,510 Lakini nini anwani haina y kuishi? 434 00:18:26,510 --> 00:18:28,700 Kwa sababu kama tatizo la msingi kabla ya 435 00:18:28,700 --> 00:18:32,970 ilikuwa kwamba x na y walikuwa kuwa kupita kama nakala, nini sisi kweli wanataka kufanya 436 00:18:32,970 --> 00:18:38,780 ni kutoa Swap na kama ilivyo kwa hazina ramani ambayo inaongoza kwa ambapo x na y kweli 437 00:18:38,780 --> 00:18:41,910 ni katika RAM, ili Swap unaweza kufuata ramani kwamba 438 00:18:41,910 --> 00:18:47,760 na kwenda popote x au y alama doa na mabadiliko ya maadili halisi ya 1 na 2 439 00:18:47,760 --> 00:18:48,270 huko. 440 00:18:48,270 --> 00:18:50,710 >> Hivyo Swap inahitaji mabadiliko kidogo sana. 441 00:18:50,710 --> 00:18:53,760 Na katika mtazamo wa kwanza, hii nguvu kuonekana kidogo sawa na char nyota. 442 00:18:53,760 --> 00:18:54,850 Na hakika ni. 443 00:18:54,850 --> 00:18:59,635 Hivyo ni pointer kwa nini aina ya data, misingi ya sehemu hii yalionyesha? 444 00:18:59,635 --> 00:19:00,810 445 00:19:00,810 --> 00:19:01,620 Hivyo ni int. 446 00:19:01,620 --> 00:19:04,880 >> Hivyo ni tena int, ni pepe ya int. 447 00:19:04,880 --> 00:19:07,910 Na vile vile, b sasa ni kwenda kuwa pepe ya int. 448 00:19:07,910 --> 00:19:12,470 Hivyo wakati mimi sasa wito Swap kutoka Kuu, Mimi si kwenda kutoa Swap 1 na 2. 449 00:19:12,470 --> 00:19:15,540 Mimi nina kwenda kuwapa kama Ng'ombe-kitu na ng'ombe-kitu, 450 00:19:15,540 --> 00:19:19,820 anwani mbili ambayo itasababisha Swap na maeneo yao halisi 451 00:19:19,820 --> 00:19:21,310 katika kumbukumbu ya kompyuta yangu. 452 00:19:21,310 --> 00:19:25,580 >> Hivyo sasa, utekelezaji yangu iliyobaki inahitaji mabadiliko tad. 453 00:19:25,580 --> 00:19:28,650 Nini ni wazi tofauti na sasa katika mistari haya matatu ya kanuni? 454 00:19:28,650 --> 00:19:31,350 Kuna nyota hizi damn wote juu ya mahali pa, wote haki? 455 00:19:31,350 --> 00:19:33,014 Hivyo nini kinaendelea hapa? 456 00:19:33,014 --> 00:19:33,514 Yeah? 457 00:19:33,514 --> 00:19:35,055 >> Watazamaji: Ni wazi [inaudible]. 458 00:19:35,055 --> 00:19:36,832 459 00:19:36,832 --> 00:19:37,990 >> DAVID J. Malan: Hasa. 460 00:19:37,990 --> 00:19:41,560 Hivyo katika context-- hii na hii ilikuwa si bora uamuzi wa kubuni, admittedly, 461 00:19:41,560 --> 00:19:42,530 miaka iliyopita. 462 00:19:42,530 --> 00:19:45,110 Katika hali hii, ambapo wewe tu na nyota, 463 00:19:45,110 --> 00:19:48,240 na huna kuwa na aina data, kama int, mara moja kwa upande wa kushoto, 464 00:19:48,240 --> 00:19:53,146 badala una ishara sawa, kwa uwazi, kwa mantiki hii, wakati wewe kusema nyota, 465 00:19:53,146 --> 00:19:56,980 hiyo ina maana kwenda anwani hiyo ni katika. 466 00:19:56,980 --> 00:19:58,870 Kufuata ramani hazina, hivyo kusema. 467 00:19:58,870 --> 00:20:01,720 >> Na wakati huo huo, katika line 37, ina maana kitu kimoja. 468 00:20:01,720 --> 00:20:05,460 Kwenda mahali a, na kuweka kile huko? 469 00:20:05,460 --> 00:20:09,520 Chochote ni saa eneo hilo b bayana. 470 00:20:09,520 --> 00:20:10,980 Kwa maneno mengine, kwenda b. 471 00:20:10,980 --> 00:20:12,130 Kupata thamani hiyo. 472 00:20:12,130 --> 00:20:15,620 Kwenda na, kwa sawa saini, zoezi operator, 473 00:20:15,620 --> 00:20:17,010 kuweka thamani kwamba kuna. 474 00:20:17,010 --> 00:20:19,272 >> Vile vile, int temp ni tu int. 475 00:20:19,272 --> 00:20:20,730 Hakuna inahitaji mabadiliko kuhusu temp. 476 00:20:20,730 --> 00:20:24,810 Ni tu kioo vipuri kutoka Annenberg kwa baadhi ya maziwa au juisi ya machungwa. 477 00:20:24,810 --> 00:20:27,630 Lakini mimi haja ya kusema, kwenda b. 478 00:20:27,630 --> 00:20:31,449 Kwenda kwamba marudio na kuweka thamani katika temp huko. 479 00:20:31,449 --> 00:20:32,490 Hivyo nini kinatokea, basi? 480 00:20:32,490 --> 00:20:36,540 Wakati mimi kwa kweli kuwaita Byta wakati huu, kama tray hii ya kwanza hapa inawakilisha Kuu, 481 00:20:36,540 --> 00:20:42,270 tray hii ya pili inawakilisha Swap, wakati Mimi kupita Ampersand x na y Ampersand 482 00:20:42,270 --> 00:20:47,150 kutoka Kuu kwa Byta, tu kuwa wazi, ni kitu gani stack frame kupokea? 483 00:20:47,150 --> 00:20:48,700 484 00:20:48,700 --> 00:20:49,200 Yeah? 485 00:20:49,200 --> 00:20:50,180 >> Watazamaji: [inaudible]. 486 00:20:50,180 --> 00:20:51,180 DAVID J. Malan: Hasa. 487 00:20:51,180 --> 00:20:53,129 pepe ya x na anwani ya y. 488 00:20:53,129 --> 00:20:55,170 Na unaweza kufikiria haya kama anwani ya posta. 489 00:20:55,170 --> 00:20:58,772 33 Oxford Street na 35 Oxford Street, na wewe 490 00:20:58,772 --> 00:21:01,230 wanataka kuhamia majengo mawili kwamba ni katika maeneo hayo. 491 00:21:01,230 --> 00:21:04,680 >> Ni aina ya wazo ujinga, lakini hiyo yote maana sisi na mahali. 492 00:21:04,680 --> 00:21:07,000 Ambapo katika dunia unaweza wewe kupata wale ints mbili? 493 00:21:07,000 --> 00:21:09,470 Ambapo katika dunia unaweza kupata majengo hayo mawili? 494 00:21:09,470 --> 00:21:15,170 Hivyo kama hatimaye, baada ya hayo mimi wakati kwenda katika chanzo code ya leo na kukusanya 495 00:21:15,170 --> 00:21:22,110 Swap na kukimbia ./swap, hatimaye, kwa mara ya kwanza sisi kweli kuona kwamba 496 00:21:22,110 --> 00:21:25,330 maadili yangu na kwa kweli wamekuwa swapped kwa mafanikio. 497 00:21:25,330 --> 00:21:30,860 Na sasa, tunaweza hata kuchukua kumbuka ya hii katika, kusema, GDB. 498 00:21:30,860 --> 00:21:32,740 >> Hivyo basi mimi kwenda katika faili moja. 499 00:21:32,740 --> 00:21:35,010 Hebu kwenda mbele na kukimbia GDB ya ./swap. 500 00:21:35,010 --> 00:21:36,590 501 00:21:36,590 --> 00:21:40,547 Na sasa, katika Swap, mimi nina kwenda mbele na kuweka hatua ya mapumziko katika Kuu. 502 00:21:40,547 --> 00:21:42,630 Na sasa mimi nina kwenda mbele na kuendesha programu. 503 00:21:42,630 --> 00:21:45,810 Na sasa tunaona code yangu paused katika mstari huo. 504 00:21:45,810 --> 00:21:48,330 >> Kama mimi kwenda mbele na magazeti x, nini anatakiwa kuona hapa? 505 00:21:48,330 --> 00:21:49,314 506 00:21:49,314 --> 00:21:49,980 Ni swali. 507 00:21:49,980 --> 00:21:51,030 508 00:21:51,030 --> 00:21:51,530 Sema tena? 509 00:21:51,530 --> 00:21:52,295 >> Watazamaji: [inaudible]. 510 00:21:52,295 --> 00:21:53,910 >> DAVID J. Malan: Hivyo namba random, labda. 511 00:21:53,910 --> 00:21:56,010 Labda mimi kupata bahati, na ni nzuri na rahisi, kama 0. 512 00:21:56,010 --> 00:21:57,230 Lakini labda ni baadhi ya idadi random. 513 00:21:57,230 --> 00:21:58,090 Katika kesi hiyo, mimi got bahati. 514 00:21:58,090 --> 00:21:59,030 Ni hutokea tu kuwa 0. 515 00:21:59,030 --> 00:22:00,780 Lakini ni kweli bahati, kwa sababu si mpaka mimi 516 00:22:00,780 --> 00:22:06,280 aina ya pili na kisha magazeti x ina kuwa mstari wa kanuni, line 19, ameuawa. 517 00:22:06,280 --> 00:22:10,942 >> Wakati huo huo, kama mimi aina ya pili yake, na sasa magazeti nje y, mimi nina kwenda kuona 2. 518 00:22:10,942 --> 00:22:13,900 Sasa, kama mimi aina ya pili, ni kwenda kwa kupata utata kidogo, kwa sababu sasa, 519 00:22:13,900 --> 00:22:17,250 printf ni kwenda kuonekana kwenye screen, kama ilivyokuwa. x ni 1. 520 00:22:17,250 --> 00:22:18,606 >> Hebu kufanya hii tena. 521 00:22:18,606 --> 00:22:20,480 Na sasa, hapa ambapo mambo kupata kuvutia. 522 00:22:20,480 --> 00:22:21,580 523 00:22:21,580 --> 00:22:26,580 Kabla ya mimi wito Swap au hata hatua ndani yake, hebu kuchukua peek kidogo. 524 00:22:26,580 --> 00:22:28,980 x ni, tena, 1. 525 00:22:28,980 --> 00:22:33,240 Y ni, bila shaka, haraka sanity kuangalia, 2, hivyo si ngumu huko. 526 00:22:33,240 --> 00:22:35,740 Lakini Ampersand x ni nini? 527 00:22:35,740 --> 00:22:36,760 528 00:22:36,760 --> 00:22:39,350 Jibu, ni aina ya funky kuangalia. 529 00:22:39,350 --> 00:22:43,500 Lakini nyota int katika mabano ni tu njia Pato la Taifa ya kusema hii ni mahali. 530 00:22:43,500 --> 00:22:48,290 Ni si int, ni pointer kwa int, au vinginevyo inajulikana kama mahali. 531 00:22:48,290 --> 00:22:49,742 >> Jambo hili mambo ni nini? 532 00:22:49,742 --> 00:22:51,825 Sisi sijawahi kuona kitu kabisa kama kwamba kabla. 533 00:22:51,825 --> 00:22:53,650 534 00:22:53,650 --> 00:22:58,120 Hivyo hii ni mahali katika kompyuta yangu ya kumbukumbu ya ambapo x hutokea kuishi. 535 00:22:58,120 --> 00:22:59,040 Ni Ox-kitu. 536 00:22:59,040 --> 00:23:01,290 Na hii ni, kusema ukweli, kwa nini Nimekuwa kuanza kuchora mishale, 537 00:23:01,290 --> 00:23:03,340 badala ya namba, kwa sababu ambao kwa kweli wasiwasi 538 00:23:03,340 --> 00:23:06,890 kwamba int yako ni saa fulani anwani hiyo ni kwamba kubwa. 539 00:23:06,890 --> 00:23:12,160 Lakini bffff0c4, haya yote ni kweli hexadecimal tarakimu, 540 00:23:12,160 --> 00:23:13,720 ambayo ni 0 kupitia f. 541 00:23:13,720 --> 00:23:16,590 >> Hivyo sisi ni si kwenda kukaa pia muda mrefu juu ya nini mambo hayo ni. 542 00:23:16,590 --> 00:23:19,400 Lakini kama mimi magazeti nje y, bila shaka, naona 2. 543 00:23:19,400 --> 00:23:22,440 Lakini Ampersand y, naona anwani hii. 544 00:23:22,440 --> 00:23:26,527 Na taarifa, kwa curious, jinsi mbali mbali ni x na y? 545 00:23:26,527 --> 00:23:27,985 Unaweza kupuuza zaidi ya mahali. 546 00:23:27,985 --> 00:23:29,330 547 00:23:29,330 --> 00:23:29,920 Tarakimu ka. 548 00:23:29,920 --> 00:23:33,510 Na kwamba ni sambamba na yetu mapema kudai kwamba jinsi kubwa ni int? 549 00:23:33,510 --> 00:23:34,130 Tarakimu ka. 550 00:23:34,130 --> 00:23:37,420 Hivyo inaonekana kama kila kitu ni bitana up nicely, kama unaweza matumaini, katika kumbukumbu. 551 00:23:37,420 --> 00:23:40,010 >> Hivyo sasa, hebu haraka tu mbele hadi mwisho wa hadithi hii. 552 00:23:40,010 --> 00:23:43,290 Hebu kwenda mbele na aina hatua, kupiga mbizi katika Swap kazi. 553 00:23:43,290 --> 00:23:46,880 Sasa angalia, kama mimi aina, ni kufanana na anwani ya x. 554 00:23:46,880 --> 00:23:52,130 Kama mimi aina b, ni kufanana kwa anwani ya y. 555 00:23:52,130 --> 00:23:57,020 Hivyo kile lazima mimi kuona kama mimi kusema, kwenda mahali? 556 00:23:57,020 --> 00:23:58,120 Hivyo magazeti nyota. 557 00:23:58,120 --> 00:24:00,130 Hivyo nyota ina maana kwenda huko, katika muktadha huu. 558 00:24:00,130 --> 00:24:02,730 Ampersand ina maana nini pepe ya. 559 00:24:02,730 --> 00:24:05,000 Hivyo nyota njia 1. 560 00:24:05,000 --> 00:24:09,590 Na magazeti nyota b inatoa me 2. 561 00:24:09,590 --> 00:24:15,750 >> Na napenda kudhani, kwa wakati huu, kwamba angalau kificho kwamba 562 00:24:15,750 --> 00:24:18,950 kuendelea kutekeleza sasa unaweza kuwa kujadiliana kupitia katika njia hiyo. 563 00:24:18,950 --> 00:24:21,150 Lakini tutaweza kupitia upya wazo hili kabla ya muda mrefu. 564 00:24:21,150 --> 00:24:23,850 Hivyo toleo hili la Swap ni sasa sahihi na inaruhusu 565 00:24:23,850 --> 00:24:26,650 sisi wabadilishane data ya aina fulani. 566 00:24:26,650 --> 00:24:29,120 >> Kwa hiyo, maswali yoyote basi juu ya Swap? 567 00:24:29,120 --> 00:24:29,890 On nyota? 568 00:24:29,890 --> 00:24:30,690 On pepe ya? 569 00:24:30,690 --> 00:24:33,270 Na utaona, na tatizo kuweka 4, aina ya, 570 00:24:33,270 --> 00:24:37,310 lakini tatizo kuweka 5, dhahiri, ni jinsi gani hizi mambo ni muhimu na kupata mengi zaidi 571 00:24:37,310 --> 00:24:39,584 vizuri pamoja nao, kama matokeo. 572 00:24:39,584 --> 00:24:40,430 Chochote wakati wote? 573 00:24:40,430 --> 00:24:40,930 Wote haki. 574 00:24:40,930 --> 00:24:44,350 Hivyo malloc ni, tena, kazi hii kwamba tu kutenga kumbukumbu, kumbukumbu 575 00:24:44,350 --> 00:24:45,330 mgao. 576 00:24:45,330 --> 00:24:47,024 Na kwa nini hii ni muhimu? 577 00:24:47,024 --> 00:24:48,940 Naam, muda wote huu, tumekuwa kutumia malloc. 578 00:24:48,940 --> 00:24:52,230 Kama wewe kufikiria sasa jinsi GetString kazi, labda, ni 579 00:24:52,230 --> 00:24:56,140 wamekuwa kuuliza mtu kwa chunk ya kumbukumbu, wakati wowote aina ya mtumiaji kamba 580 00:24:56,140 --> 00:24:59,040 katika, kwa sababu sisi hakika hakujua, kama CS50 wafanyakazi, 581 00:24:59,040 --> 00:25:02,710 jinsi kubwa masharti wale ambao binadamu ni kwenda aina inaweza kuwa. 582 00:25:02,710 --> 00:25:07,910 >> Basi hebu, kwa mara ya kwanza, kuanza kwa peel nyuma jinsi matendo CS50 maktaba, 583 00:25:07,910 --> 00:25:10,990 kwa njia ya mifano michache ambayo itasababisha yetu huko. 584 00:25:10,990 --> 00:25:15,300 Hivyo kama mimi kufungua gedit na kufungua scanf 0, 585 00:25:15,300 --> 00:25:17,055 tunakwenda kuona kanuni zifuatazo. 586 00:25:17,055 --> 00:25:18,720 587 00:25:18,720 --> 00:25:23,530 Scanf 0, inapatikana kwenye tovuti kwa ajili ya leo, ina mistari wachache wa kanuni 588 00:25:23,530 --> 00:25:25,351 hapa, 14 mpaka 20. 589 00:25:25,351 --> 00:25:26,600 Na hebu angalia nini ni kufanya. 590 00:25:26,600 --> 00:25:28,920 Ni anatangaza int, iitwayo x. 591 00:25:28,920 --> 00:25:30,850 Ni anasema kitu kama, idadi tafadhali. 592 00:25:30,850 --> 00:25:33,940 Na sasa inasema, scanf% i, & x. 593 00:25:33,940 --> 00:25:35,620 Hivyo kuna rundo la mambo mpya huko. 594 00:25:35,620 --> 00:25:38,420 >> Lakini scanf, unaweza aina ya kufikiri ya kama kinyume cha printf. 595 00:25:38,420 --> 00:25:40,090 printf, bila shaka, prints kwa screen. 596 00:25:40,090 --> 00:25:44,410 scanf aina ya scans kutoka mtumiaji keyboard kitu yeye au yeye ana typed. 597 00:25:44,410 --> 00:25:46,550 >> % I ni tu kama printf. 598 00:25:46,550 --> 00:25:49,410 Hii ina maana kutarajia user aina int. 599 00:25:49,410 --> 00:25:52,820 Na sasa, kwa nini unafikiri mimi inaweza kuwa kupita scanf & x? 600 00:25:52,820 --> 00:25:54,030 601 00:25:54,030 --> 00:25:57,770 Kama kusudi katika maisha ya scanf ni kupata kitu kutoka kwa mtumiaji, 602 00:25:57,770 --> 00:26:02,480 nini maana ya kupita, & x, sasa? 603 00:26:02,480 --> 00:26:02,980 Yeah? 604 00:26:02,980 --> 00:26:03,896 >> Watazamaji: [inaudible]. 605 00:26:03,896 --> 00:26:05,540 606 00:26:05,540 --> 00:26:06,540 DAVID J. Malan: Hasa. 607 00:26:06,540 --> 00:26:12,900 Chochote mimi, binadamu, aina katika, pembejeo yangu ni kwenda kuokolewa katika eneo hilo. 608 00:26:12,900 --> 00:26:17,660 Ni si ya kutosha, kukumbuka, tu kupita katika x, kwa sababu tumeona tayari, 609 00:26:17,660 --> 00:26:21,630 wakati wowote, unaweza kupita tu variable mbichi, kama int, kwa baadhi ya kazi nyingine, 610 00:26:21,630 --> 00:26:25,640 uhakika, inaweza kubadilika kwamba variable, lakini si moja kwa moja. 611 00:26:25,640 --> 00:26:27,360 Ni hawezi kuwa na athari juu ya Kuu. 612 00:26:27,360 --> 00:26:29,420 Ni inaweza tu mabadiliko nakala yake mwenyewe ndani. 613 00:26:29,420 --> 00:26:32,560 Lakini kama, badala yake, huna nipe int halisi, 614 00:26:32,560 --> 00:26:36,640 lakini nipe maelekezo kwa kwamba int, mimi sasa, kuwa scanf, 615 00:26:36,640 --> 00:26:41,050 Hakika, siwezi kufuata kwamba kushughulikia na kuweka idadi huko 616 00:26:41,050 --> 00:26:43,280 hivyo kuwa na huduma hiyo kama vizuri. 617 00:26:43,280 --> 00:26:45,120 >> Hivyo wakati mimi kukimbia mpango huu, hebu angalia. 618 00:26:45,120 --> 00:26:49,660 Kufanya scanf 0 dot slash, scanf 0. 619 00:26:49,660 --> 00:26:54,030 Na kama mimi sasa aina ya simu kama 50, shukrani kwa ajili ya 50. 620 00:26:54,030 --> 00:26:58,150 Kama mimi sasa aina ya simu kama hasi 1, kwa hasi 1. 621 00:26:58,150 --> 00:27:04,200 Mimi sasa aina ya simu kama 1.5, hm. 622 00:27:04,200 --> 00:27:06,030 Kwa nini mpango wangu kupuuza mimi? 623 00:27:06,030 --> 00:27:07,300 624 00:27:07,300 --> 00:27:09,880 Naam, kwa sababu tu, mimi aliiambia ni kwa kutarajia int tu. 625 00:27:09,880 --> 00:27:10,380 Wote haki. 626 00:27:10,380 --> 00:27:11,630 Hivyo hiyo ni toleo moja ya hili. 627 00:27:11,630 --> 00:27:16,600 Hebu kuchukua mambo up notch na kupendekeza kwamba hii si nzuri. 628 00:27:16,600 --> 00:27:20,530 Na humu uongo mfano rahisi sana jinsi gani tunaweza kuanza kuandika code 629 00:27:20,530 --> 00:27:24,450 kwamba watu wengine wanaweza kutumia au maelewano kwa kufanya mambo mabaya. 630 00:27:24,450 --> 00:27:28,336 Hivyo mstari 16, hivyo sawa katika roho kwa mbele, 631 00:27:28,336 --> 00:27:29,960 lakini mimi si kutangaza ni int wakati huu. 632 00:27:29,960 --> 00:27:32,970 Mimi nina kutangaza ni char nyota, aka kamba. 633 00:27:32,970 --> 00:27:35,190 >> Lakini ni nini kwamba kweli maana yake nini? 634 00:27:35,190 --> 00:27:38,790 Hivyo kama mimi si bayana address-- na Mimi nina wito ni kiholela, buffer, 635 00:27:38,790 --> 00:27:43,370 lakini mimi naweza kuiita s, kuwa simple-- na kisha mimi kufanya hivyo, kueleza kwangu, 636 00:27:43,370 --> 00:27:48,630 kama unaweza, kwa kuzingatia uliopita mantiki, ni nini scanf kufanya katika line 18, 637 00:27:48,630 --> 00:27:55,000 kama kupita% s na buffer, ambayo ni anwani? 638 00:27:55,000 --> 00:27:58,210 Scanf ni kitu gani, kama wewe kuomba halisi mantiki hiyo kama toleo 0, 639 00:27:58,210 --> 00:28:00,640 kwenda kujaribu kufanya hapa, wakati aina ya mtumiaji kitu katika? 640 00:28:00,640 --> 00:28:02,630 641 00:28:02,630 --> 00:28:03,409 Yeah? 642 00:28:03,409 --> 00:28:04,407 >> Watazamaji: [inaudible]. 643 00:28:04,407 --> 00:28:07,401 644 00:28:07,401 --> 00:28:08,890 >> DAVID J. Malan: Hasa. 645 00:28:08,890 --> 00:28:11,577 Scanf, kwa mantiki ya awali, ni kwenda kuchukua kamba 646 00:28:11,577 --> 00:28:13,410 kwamba typed binadamu in-- ni sasa kamba, 647 00:28:13,410 --> 00:28:15,790 si ya simu, labda, kama yeye au yeye cooperates-- 648 00:28:15,790 --> 00:28:19,310 na ni kwenda kujaribu kuweka kwamba kamba katika kumbukumbu katika chochote anwani 649 00:28:19,310 --> 00:28:20,340 buffer bayana. 650 00:28:20,340 --> 00:28:23,870 Na hii ni kubwa, kwa sababu buffer ni kweli maana ya kuwa ya mahali. 651 00:28:23,870 --> 00:28:30,470 >> Lakini mimi kudai mpango huu ni Buggy katika njia kubwa sana, kwa sababu kile thamani ya kitu 652 00:28:30,470 --> 00:28:31,330 buffer na default? 653 00:28:31,330 --> 00:28:33,380 654 00:28:33,380 --> 00:28:34,790 Nini mimi initialized katika? 655 00:28:34,790 --> 00:28:35,770 Nini chunk ya kumbukumbu? 656 00:28:35,770 --> 00:28:37,480 657 00:28:37,480 --> 00:28:38,620 Mimi sina, haki? 658 00:28:38,620 --> 00:28:42,265 >> Hivyo ingawa nimekuwa zilizotengwa nyota Char hiyo tena kuitwa s, 659 00:28:42,265 --> 00:28:48,030 ni badala kuitwa, buffer-- hivyo hebu kuteka jina variable ya 660 00:28:48,030 --> 00:28:53,380 sasa kama buffer-- kama nina si kuitwa GetString au malloc hapa, 661 00:28:53,380 --> 00:28:56,030 kwamba ufanisi ina maana kwamba buffer ni baadhi tu ya thamani ya takataka. 662 00:28:56,030 --> 00:28:57,030 >> Sasa nini maana gani? 663 00:28:57,030 --> 00:29:00,220 Ina maana kwamba mimi aliiambia scanf kutarajia kamba kutoka kwa mtumiaji. 664 00:29:00,220 --> 00:29:01,300 Na unajua nini? 665 00:29:01,300 --> 00:29:03,883 Kitu chochote hii ni akizungumzia to-- na mimi kuteka alama swali, 666 00:29:03,883 --> 00:29:07,060 lakini katika hali halisi, ni kwenda kuwa kitu kama OX1, 2, 3, haki? 667 00:29:07,060 --> 00:29:10,730 Ni baadhi ya thamani bogus kwamba tu hutokea kwa kuwa kuna kutoka kabla. 668 00:29:10,730 --> 00:29:13,440 Hivyo kuweka njia nyingine, ni kana kwamba buffer ni tu 669 00:29:13,440 --> 00:29:16,180 akizungumzia kitu katika kumbukumbu. 670 00:29:16,180 --> 00:29:17,610 Mimi sijui nini. 671 00:29:17,610 --> 00:29:24,130 >> Hivyo kama mimi aina katika Gabe sasa, ni kwenda kujaribu kuweka g-b-e / 0 huko. 672 00:29:24,130 --> 00:29:25,530 Lakini ambaye anajua nini kwamba ni? 673 00:29:25,530 --> 00:29:27,480 Na katika siku za nyuma, yoyote wakati tumekuwa alijaribu kugusa 674 00:29:27,480 --> 00:29:29,770 kumbukumbu kwamba hana mali kwetu, nini kilichotokea? 675 00:29:29,770 --> 00:29:31,020 676 00:29:31,020 --> 00:29:32,870 Au karibu kila wakati. 677 00:29:32,870 --> 00:29:34,310 Mkato wa soko kosa, haki? 678 00:29:34,310 --> 00:29:37,829 >> Arrow hii, mimi hawana wazo ambapo ni akizungumzia. ni baadhi tu thamani random. 679 00:29:37,829 --> 00:29:40,370 Na bila shaka, kama wewe kutafsiri thamani random kama ya mitaani, 680 00:29:40,370 --> 00:29:42,610 wewe ni kwenda kwa baadhi random marudio. 681 00:29:42,610 --> 00:29:46,810 Hivyo Gabe nguvu kweli ajali mpango wangu katika kesi hii hapa. 682 00:29:46,810 --> 00:29:50,600 >> Hivyo tunaweza kufanya nini hiyo ni karibu kama mbaya? 683 00:29:50,600 --> 00:29:52,660 Fikiria hili tatu na Mfano wa mwisho scanf. 684 00:29:52,660 --> 00:29:53,890 685 00:29:53,890 --> 00:29:56,870 Toleo hili ni bora katika maana gani? 686 00:29:56,870 --> 00:29:57,990 687 00:29:57,990 --> 00:30:01,400 Kama wewe ni starehe na tatizo uliopita, hii ni bora. 688 00:30:01,400 --> 00:30:02,250 Kwa nini? 689 00:30:02,250 --> 00:30:03,250 >> Watazamaji: [inaudible]. 690 00:30:03,250 --> 00:30:06,235 691 00:30:06,235 --> 00:30:07,110 DAVID J. Malan: Good. 692 00:30:07,110 --> 00:30:09,970 Hivyo kesi hii ya mstari 16 ni bora zaidi, kwa maana ya 693 00:30:09,970 --> 00:30:12,030 kwamba sisi ni wazi kugawa baadhi ya kumbukumbu. 694 00:30:12,030 --> 00:30:14,190 Sisi siyo kutumia malloc, sisi ni kutumia wiki 2 695 00:30:14,190 --> 00:30:16,060 mfumo wa tu kutangaza safu. 696 00:30:16,060 --> 00:30:18,130 Na tumekuwa alisema kuwa kabla ya kamba ni tu safu ya wahusika, 697 00:30:18,130 --> 00:30:19,690 hivyo hii ni kinyume kabisa halali. 698 00:30:19,690 --> 00:30:22,910 Lakini ni, bila shaka, kama wewe kumbuka, fasta ukubwa, 16. 699 00:30:22,910 --> 00:30:25,440 >> Hivyo mpango huu ni salama kabisa, kama mimi aina 700 00:30:25,440 --> 00:30:29,760 katika masharti tabia ya moja, mbili tabia ya masharti, 15 masharti tabia. 701 00:30:29,760 --> 00:30:34,970 Lakini kwa haraka kama mimi kuanza kuandika 16, 17, 18, 1000 tabia ya masharti, 702 00:30:34,970 --> 00:30:37,390 ambapo ni string kwamba kwenda kuishia? 703 00:30:37,390 --> 00:30:39,570 Ni kwenda kuishia sehemu hapa. 704 00:30:39,570 --> 00:30:42,820 Lakini basi ambaye anajua kile kingine ni nje ya mipaka 705 00:30:42,820 --> 00:30:44,270 ya safu hii hasa? 706 00:30:44,270 --> 00:30:48,015 >> Ni kana kwamba nimekuwa alitangaza 16 masanduku hapa. 707 00:30:48,015 --> 00:30:49,300 708 00:30:49,300 --> 00:30:52,690 Hivyo badala ya kuteka zote 16, tutaweza tu kujifanya kuwa nimekuwa inayotolewa 16. 709 00:30:52,690 --> 00:30:56,540 Lakini kama mimi kisha kujaribu kusoma kamba hiyo ni kwa muda mrefu, kama wahusika 50, 710 00:30:56,540 --> 00:31:01,270 Mimi nina kwenda kuanza kuweka a, b, c, d, x, y, z. 711 00:31:01,270 --> 00:31:04,916 Na hii ni labda baadhi ya wengine kumbukumbu sehemu 712 00:31:04,916 --> 00:31:06,790 tena kuwa, inaweza kusababisha mpango wangu kwa ajali, 713 00:31:06,790 --> 00:31:10,600 kwa sababu nimekuwa si aliuliza kwa chochote zaidi ya ka 16 tu. 714 00:31:10,600 --> 00:31:12,260 >> Hivyo ni nani anayejali? 715 00:31:12,260 --> 00:31:13,880 Naam, hapa maktaba CS50. 716 00:31:13,880 --> 00:31:17,220 Na zaidi ya hii ni tu kama maelekezo juu juu. 717 00:31:17,220 --> 00:31:21,670 Maktaba CS50, muda wote huu, imekuwa na mstari huu katika line 52. 718 00:31:21,670 --> 00:31:23,680 Tumeona typedef, au utaona typedef 719 00:31:23,680 --> 00:31:27,930 katika pset 4, ambayo inajenga tu kisawe ambapo char nyota inaweza kuwa zaidi 720 00:31:27,930 --> 00:31:29,290 tu inajulikana kama kamba. 721 00:31:29,290 --> 00:31:31,540 Hivyo hii ni moja ya magurudumu mafunzo chache 722 00:31:31,540 --> 00:31:34,120 tumekuwa kutumika kwa siri chini ya kofia. 723 00:31:34,120 --> 00:31:36,490 >> Wakati huo huo, hapa ni kazi, getchar. 724 00:31:36,490 --> 00:31:38,190 Sasa inaonekana, hakuna mwili yake. 725 00:31:38,190 --> 00:31:40,273 Na kwa kweli, kama mimi kuweka scrolling, mimi si kweli 726 00:31:40,273 --> 00:31:42,080 kuona utekelezaji yoyote ya kazi hizi. 727 00:31:42,080 --> 00:31:43,140 728 00:31:43,140 --> 00:31:45,516 Kama sanity hundi, kwa nini ni kwamba? 729 00:31:45,516 --> 00:31:46,795 >> Watazamaji: [inaudible]. 730 00:31:46,795 --> 00:31:47,670 DAVID J. Malan: Yeah. 731 00:31:47,670 --> 00:31:48,950 Hivyo hii ni header file. 732 00:31:48,950 --> 00:31:52,520 Na header files vyenye prototypes, pamoja na baadhi ya mambo mengine, inaonekana, 733 00:31:52,520 --> 00:31:53,780 kama typedefs. 734 00:31:53,780 --> 00:31:56,910 Lakini katika CS50.c, ambayo tumekuwa kamwe kupewa wewe moja kwa moja, 735 00:31:56,910 --> 00:32:02,100 lakini imekuwa katika CS50 appliance wote wakati huu, ndani ya folders yake, 736 00:32:02,100 --> 00:32:04,990 taarifa kwamba kuna zima rundo la kazi katika hapa. 737 00:32:04,990 --> 00:32:06,720 >> Kwa kweli, hebu kitabu chini. 738 00:32:06,720 --> 00:32:08,810 Hebu kupuuza wengi wao, kwa sasa. 739 00:32:08,810 --> 00:32:12,670 Lakini kitabu chini ya GetInt na kuona jinsi GetInt kazi. 740 00:32:12,670 --> 00:32:13,890 Hivyo hapa ni GetInt. 741 00:32:13,890 --> 00:32:17,727 Na kama wewe milele kweli kumjali jinsi kupata int kazi, hapa ni kuweka kumbukumbu yake. 742 00:32:17,727 --> 00:32:19,560 Na miongoni mwa mambo anasema ni anakwambia 743 00:32:19,560 --> 00:32:21,340 nini ni kati ya maadili inaweza kurudi. 744 00:32:21,340 --> 00:32:24,400 Ni kimsingi hasi bilioni 2 chanya bilioni 2, kutoa au kuchukua. 745 00:32:24,400 --> 00:32:26,420 >> Na zinageuka, yote hii wakati, ingawa tumekuwa kamwe 746 00:32:26,420 --> 00:32:28,570 alikuwa na wewe kuangalia kwa ajili yake, kama kitu fulani kitaenda vibaya, 747 00:32:28,570 --> 00:32:30,680 zinageuka kuwa wote wakati huu, GetInt ina 748 00:32:30,680 --> 00:32:33,600 anarudi maalum mara kwa mara, si null, 749 00:32:33,600 --> 00:32:36,760 lakini badala int_max, ambayo ni tu programu ya mkataba. 750 00:32:36,760 --> 00:32:38,846 Ina maana hapa ni thamani maalum. 751 00:32:38,846 --> 00:32:41,470 Kuhakikisha na kuangalia kwa hii, tu katika kesi kitu kitaenda vibaya. 752 00:32:41,470 --> 00:32:43,261 Lakini tumekuwa kamwe bothered na kwamba hadi sasa, 753 00:32:43,261 --> 00:32:45,200 kwa sababu tena, hii ni maana ya kurahisisha. 754 00:32:45,200 --> 00:32:46,950 >> Lakini jinsi gani GetInt kupata kutekelezwa? 755 00:32:46,950 --> 00:32:48,450 Naam, moja, inachukua hakuna hoja. 756 00:32:48,450 --> 00:32:49,390 Tunajua kwamba. 757 00:32:49,390 --> 00:32:50,820 Ni anarudi int. 758 00:32:50,820 --> 00:32:51,950 Tunajua kwamba. 759 00:32:51,950 --> 00:32:54,460 Hivyo ni jinsi gani kazi chini ya Hood? 760 00:32:54,460 --> 00:32:58,290 >> Hivyo kuna inaonekana usio kitanzi, angalau muonekano wa moja. 761 00:32:58,290 --> 00:33:00,290 Taarifa kwamba sisi ni kutumia GetString. 762 00:33:00,290 --> 00:33:04,000 Hivyo kwamba ni ya kuvutia. GetInt wito kazi yetu wenyewe, GetString. 763 00:33:04,000 --> 00:33:05,645 Na sasa kwa nini huenda hii kuwa kesi? 764 00:33:05,645 --> 00:33:07,400 765 00:33:07,400 --> 00:33:09,842 Kwa nini mimi kuwa kujihami hapa katika line 165? 766 00:33:09,842 --> 00:33:11,390 767 00:33:11,390 --> 00:33:15,639 Nini inaweza kutokea katika line 164, tu kuwa wazi? 768 00:33:15,639 --> 00:33:16,930 Ni jibu sawa mbele. 769 00:33:16,930 --> 00:33:18,660 770 00:33:18,660 --> 00:33:20,089 Ili tu kuwa nje ya kumbukumbu. 771 00:33:20,089 --> 00:33:23,130 Kitu fulani kitaenda vibaya na GetString, sisi nimepata kuwa na uwezo wa kushughulikia hiyo. 772 00:33:23,130 --> 00:33:27,070 Na sababu mimi si kurudi null ni kwamba, kitaalam, null ni pointer. 773 00:33:27,070 --> 00:33:29,120 GetInt ina kurudi int. 774 00:33:29,120 --> 00:33:31,060 Hivyo nimekuwa kiholela aliamua, kimsingi, 775 00:33:31,060 --> 00:33:34,600 kwamba bilioni 2, kutoa au kuchukua, ni kwenda kuwa thamani maalum kwamba naweza kamwe 776 00:33:34,600 --> 00:33:35,970 kweli kupata kutoka kwa mtumiaji. 777 00:33:35,970 --> 00:33:39,930 Ni tu thamani moja mimi nina kwenda kupoteza kuwakilisha kosa code. 778 00:33:39,930 --> 00:33:41,540 >> Hivyo sasa, mambo kupata dhana kidogo. 779 00:33:41,540 --> 00:33:44,670 Na si kabisa kazi moja kama kabla, lakini ni sawa sana. 780 00:33:44,670 --> 00:33:50,120 Hivyo taarifa, mimi kutangaza hapa, katika line 172, wote int n na char c. 781 00:33:50,120 --> 00:33:53,600 Na kisha mimi kutumia mstari huu funky, sscanf, ambayo ni zamu nje 782 00:33:53,600 --> 00:33:55,990 haina Scan kamba kutoka keyboard. 783 00:33:55,990 --> 00:33:59,226 Ni anasimama kamba zilizopo ambazo user tayari typed katika. 784 00:33:59,226 --> 00:34:02,100 Kwa hiyo mimi tayari kuitwa GetString, ambayo ina maana nina kamba katika kumbukumbu. 785 00:34:02,100 --> 00:34:05,020 sscanf ni nini wewe d wito parsing kazi. 786 00:34:05,020 --> 00:34:07,760 Inaonekana katika kamba nimekuwa typed katika, tabia ya na tabia, 787 00:34:07,760 --> 00:34:09,250 na anafanya kitu muhimu. 788 00:34:09,250 --> 00:34:10,969 Kamba kwamba ni kuhifadhiwa katika mstari. 789 00:34:10,969 --> 00:34:13,560 Nami najua kuwa tu kwa kwenda nyuma hadi hapa na kusema, oh, OK, 790 00:34:13,560 --> 00:34:15,143 Mimi kuitwa ni si s wakati huu, lakini line. 791 00:34:15,143 --> 00:34:15,989 792 00:34:15,989 --> 00:34:18,080 >> Na sasa hii ni tofauti kidogo. 793 00:34:18,080 --> 00:34:22,480 Lakini hii ina maana ufanisi, kwa sababu tutaweza kiasi fulani wimbi mikono yetu katika leo, 794 00:34:22,480 --> 00:34:26,070 kwamba sisi ni kuangalia kwa kuona kama user typed katika 795 00:34:26,070 --> 00:34:29,909 na int na labda tabia nyingine. 796 00:34:29,909 --> 00:34:33,610 Kama mtumiaji typed katika int, ni kwenda kuhifadhiwa katika n, kwa sababu mimi nina 797 00:34:33,610 --> 00:34:36,739 kupita hili kwa mitaani, hila mpya tumeona leo. 798 00:34:36,739 --> 00:34:41,570 Kama mtumiaji typed pia katika kama 123x, kwamba x 799 00:34:41,570 --> 00:34:45,060 ni kwenda kuishia barua katika tabia ya c. 800 00:34:45,060 --> 00:34:48,739 >> Sasa ni zamu nje kwamba sscanf wataniambia, akili, 801 00:34:48,739 --> 00:34:54,750 jinsi vigezo vingi mara sscanf mafanikio na uwezo wa kujaza. 802 00:34:54,750 --> 00:34:58,770 Hivyo kwa mantiki hii, kama kazi Mimi nina kutekeleza ni GetInt, 803 00:34:58,770 --> 00:35:00,900 lakini mimi nina kuangalia, uwezekano, kwa mtumiaji 804 00:35:00,900 --> 00:35:04,190 kwa kuwa typed katika int ikifuatiwa na kitu kingine, 805 00:35:04,190 --> 00:35:08,580 nini nataka sscanf ya thamani ya kurudi kweli kuwa? 806 00:35:08,580 --> 00:35:10,950 Kama lengo ni kupata tu int kutoka kwa mtumiaji? 807 00:35:10,950 --> 00:35:13,980 808 00:35:13,980 --> 00:35:19,300 >> Hivyo kama anarudi sscanf 2, hiyo ina maana gani? 809 00:35:19,300 --> 00:35:21,660 user typed katika kitu kama, literally, 810 00:35:21,660 --> 00:35:24,770 123x, ambayo ni nonsense tu. 811 00:35:24,770 --> 00:35:27,490 Ni hali makosa, na Nataka kuangalia kwa ajili hiyo. 812 00:35:27,490 --> 00:35:32,960 >> Hivyo kama aina ya mtumiaji hii katika, na mantiki hii, nini sscanf kurudi, 813 00:35:32,960 --> 00:35:33,740 unaweza kusema? 814 00:35:33,740 --> 00:35:35,070 815 00:35:35,070 --> 00:35:39,130 Hivyo ni kwenda na kurudi 2, kwa sababu 123 ni kwenda katika hapa, 816 00:35:39,130 --> 00:35:41,580 na x ni kwenda kuishia katika hapa. 817 00:35:41,580 --> 00:35:43,970 Lakini sitaki x kupata kujazwa. 818 00:35:43,970 --> 00:35:48,580 Nataka sscanf kwa tu kufanikiwa katika kujaza kwanza ya vigezo wake. 819 00:35:48,580 --> 00:35:52,490 Na hivyo ndiyo sababu mimi wanataka sscanf kurudi 1. 820 00:35:52,490 --> 00:35:55,750 >> Na kama hii ni kidogo juu ya kichwa kwa wakati huu, hiyo ni kabisa faini. 821 00:35:55,750 --> 00:36:00,030 Kutambua kuwa, moja ya maadili ya GetInt na GetString 822 00:36:00,030 --> 00:36:03,630 ni kwamba sisi ni kufanya heck ya mengi ya makosa ya kuangalia kama hii ili 823 00:36:03,630 --> 00:36:07,130 kwamba, hadi sasa, unaweza pretty much aina kitu chochote katika keyboard yako, 824 00:36:07,130 --> 00:36:08,490 na sisi kukamata yake. 825 00:36:08,490 --> 00:36:10,592 Na sisi hakika, wafanyakazi, utakuwa dhahiri si 826 00:36:10,592 --> 00:36:13,300 kuwa chanzo cha mdudu katika yako mpango, kwa sababu sisi ni kujitetea 827 00:36:13,300 --> 00:36:16,270 kuangalia kwa wote wa kijinga mambo ambayo mtumiaji anaweza kufanya, 828 00:36:16,270 --> 00:36:18,900 kama kuandika kamba, wakati kweli alitaka int. 829 00:36:18,900 --> 00:36:21,350 Hivyo kwa now-- tutaweza kuja nyuma ya hii kabla ya long-- 830 00:36:21,350 --> 00:36:23,710 lakini muda wote huu, GetString na GetInt na 831 00:36:23,710 --> 00:36:29,950 imekuwa chini ya Hood kutumia hii wazo msingi ya anwani ya kumbukumbu. 832 00:36:29,950 --> 00:36:32,580 >> Hivyo sasa, hebu kufanya mambo a user-kirafiki kidogo zaidi. 833 00:36:32,580 --> 00:36:38,740 Kama unaweza kukumbuka, kutoka Binky mwisho time-- kama panya yangu cooperate-- hivyo 834 00:36:38,740 --> 00:36:42,560 tulikuwa na kanuni hii, ambayo kusema ukweli, ni haki nonsensical. 835 00:36:42,560 --> 00:36:45,330 Kanuni hii kinafikia chochote muhimu, lakini ilikuwa ni mfano 836 00:36:45,330 --> 00:36:48,330 kwamba profesa Parlante kutumika ili kuwakilisha 837 00:36:48,330 --> 00:36:51,840 nini kinachoendelea katika mpango kuwashirikisha kumbukumbu. 838 00:36:51,840 --> 00:36:54,850 >> Basi hebu retell hii hadithi super kwa ufupi. 839 00:36:54,850 --> 00:36:58,720 Hizi kwanza mistari miwili, katika Kiingereza, kufanya nini, unaweza kusema? 840 00:36:58,720 --> 00:37:01,230 841 00:37:01,230 --> 00:37:05,430 Tu katika sababu za binadamu, lakini kidogo suala kiufundi, kuchukua kumchoma. 842 00:37:05,430 --> 00:37:06,346 Watazamaji: [inaudible]. 843 00:37:06,346 --> 00:37:07,705 844 00:37:07,705 --> 00:37:11,080 >> DAVID J. Malan: Sawa, wewe ni kuanzisha anwani kwa x yako na y vigezo. 845 00:37:11,080 --> 00:37:15,520 Si kabisa, kwa sababu x na y ni si vigezo katika maana ya asili. 846 00:37:15,520 --> 00:37:18,054 x na y ni anwani au kuhifadhi mahali. 847 00:37:18,054 --> 00:37:19,220 Basi hebu jaribu hii mara moja zaidi. 848 00:37:19,220 --> 00:37:21,010 Si mwanzo mbaya, ingawa. 849 00:37:21,010 --> 00:37:21,510 Yeah? 850 00:37:21,510 --> 00:37:22,426 >> Watazamaji: [inaudible]. 851 00:37:22,426 --> 00:37:23,966 852 00:37:23,966 --> 00:37:24,840 DAVID J. Malan: Good. 853 00:37:24,840 --> 00:37:26,173 Nadhani hiyo ni safi kidogo. 854 00:37:26,173 --> 00:37:28,630 Kutangaza kuyatumia mbili, integers mbili. 855 00:37:28,630 --> 00:37:30,150 Na sisi ni kuwaita x na y. 856 00:37:30,150 --> 00:37:32,790 Au kama tulikuwa na kuteka hii kama picha, tena, 857 00:37:32,790 --> 00:37:36,410 kukumbuka kwa urahisi kabisa kwamba wote sisi ni kufanya na kwamba mstari wa kwanza 858 00:37:36,410 --> 00:37:39,690 ni kuchora sanduku kama hii, pamoja na baadhi ya thamani ya takataka ndani yake, 859 00:37:39,690 --> 00:37:41,920 na kuiita X, na kisha sanduku mwingine kama huu, 860 00:37:41,920 --> 00:37:43,880 pamoja na baadhi ya thamani ya takataka ndani yake, na kuiita y. 861 00:37:43,880 --> 00:37:45,810 Tumekuwa alitangaza mbili kuyatumia kwamba hatimaye 862 00:37:45,810 --> 00:37:47,860 mapenzi kuhifadhi pepe ya int. 863 00:37:47,860 --> 00:37:49,170 Hivyo kwamba ni yote kuna. 864 00:37:49,170 --> 00:37:53,290 >> Hivyo wakati Binky alifanya hivyo, udongo tu inaonekana kama hii. 865 00:37:53,290 --> 00:37:55,350 Na Nick aina tu ya ilimalizika mishale, 866 00:37:55,350 --> 00:37:57,590 kana kwamba wao siyo akizungumzia popote hasa, kwa sababu wao ni tu 867 00:37:57,590 --> 00:37:58,250 takataka maadili. 868 00:37:58,250 --> 00:38:01,670 Wao ni si wazi initialized mahali popote hasa. 869 00:38:01,670 --> 00:38:03,980 >> Sasa line ya pili ya code, kukumbuka, ilikuwa hii. 870 00:38:03,980 --> 00:38:07,510 Hivyo katika sababu user-kirafiki, lakini kwa kiasi fulani ya kiufundi Kiingereza, 871 00:38:07,510 --> 00:38:09,790 ni mstari wa code kufanya nini? 872 00:38:09,790 --> 00:38:10,391 Yeah? 873 00:38:10,391 --> 00:38:11,333 >> Watazamaji: [inaudible]. 874 00:38:11,333 --> 00:38:12,746 875 00:38:12,746 --> 00:38:13,950 >> DAVID J. Malan: Perfect. 876 00:38:13,950 --> 00:38:17,016 Ni kugawa chunk ya kumbukumbu hiyo ni ya ukubwa wa int. 877 00:38:17,016 --> 00:38:18,140 Na kwamba ni jibu nusu. 878 00:38:18,140 --> 00:38:20,056 You akajibu haki nusu wa kujieleza. 879 00:38:20,056 --> 00:38:22,473 Nini kinatokea kwenye mkono wa kushoto upande wa ishara sawa? 880 00:38:22,473 --> 00:38:22,972 Yeah? 881 00:38:22,972 --> 00:38:24,814 Watazamaji: Na chukueni ni kwa x variable? 882 00:38:24,814 --> 00:38:27,690 >> DAVID J. Malan: Na chukueni ni kwa x kutofautiana. 883 00:38:27,690 --> 00:38:31,650 Hivyo kwa kurejea, mkono wa kulia upande kutenga kumbukumbu ya kutosha kuhifadhi int. 884 00:38:31,650 --> 00:38:34,150 Lakini malloc hasa anarudi anwani 885 00:38:34,150 --> 00:38:37,270 ya kwamba chunk ya kumbukumbu, ambayo wewe wameweza tu mapendekezo anapata kuhifadhiwa katika x. 886 00:38:37,270 --> 00:38:42,560 >> Basi nini Nick alifanya mara ya mwisho kwa Binky ni yeye dragged kwamba pointer nje, udongo, 887 00:38:42,560 --> 00:38:46,820 kwa uhakika sasa katika chunk ya kumbukumbu nyeupe ambayo ni sawa na ukubwa wa int. 888 00:38:46,820 --> 00:38:49,360 Na hakika, hiyo ni maana kuwakilisha ka nne. 889 00:38:49,360 --> 00:38:55,310 >> Sasa, line ya pili ya code alifanya hivyo, nyota x anapata 42. 890 00:38:55,310 --> 00:38:58,530 Hivyo 42 ni moja kwa moja juu ya mkono wa kulia upande, maana ya maisha. 891 00:38:58,530 --> 00:39:00,500 Upande mkono wa kushoto, nyota x nini maana ya? 892 00:39:00,500 --> 00:39:01,600 893 00:39:01,600 --> 00:39:03,280 Hiyo pia wanaweza kuwa na gone-- kwamba ni sawa. 894 00:39:03,280 --> 00:39:04,220 OK. 895 00:39:04,220 --> 00:39:06,875 >> Watazamaji: Kimsingi, kwenda [inaudible] 896 00:39:06,875 --> 00:39:07,750 DAVID J. Malan: Good. 897 00:39:07,750 --> 00:39:08,760 Watazamaji: [inaudible]. 898 00:39:08,760 --> 00:39:09,760 DAVID J. Malan: Hasa. 899 00:39:09,760 --> 00:39:11,979 Upande wa mkono wa kushoto ina maana kwenda x. 900 00:39:11,979 --> 00:39:12,520 x ni mahali. 901 00:39:12,520 --> 00:39:15,520 Ni kama 33 Oxford Street, au OX1. 902 00:39:15,520 --> 00:39:18,690 Na nyota x maana kwenda kuwa kushughulikia na kuweka kile huko? 903 00:39:18,690 --> 00:39:19,520 42. 904 00:39:19,520 --> 00:39:21,290 >> Hivyo kweli, kwamba ni nini hasa Nick alivyofanya. 905 00:39:21,290 --> 00:39:23,740 Alianza na na, kimsingi, kiakili 906 00:39:23,740 --> 00:39:26,270 kunyooshea kidole x, kufuatia arrow 907 00:39:26,270 --> 00:39:30,670 kwa sanduku nyeupe juu ya mkono wa kulia upande, na kuweka namba 42 hapo. 908 00:39:30,670 --> 00:39:34,120 Lakini basi mambo got kidogo hatari, sawa? 909 00:39:34,120 --> 00:39:35,860 Binky ya juu ya kupoteza kichwa chake. 910 00:39:35,860 --> 00:39:39,465 >> Star y sawa na 13, bahati mbaya, maana yake nini? 911 00:39:39,465 --> 00:39:43,620 Hivyo nyota y njia kwenda mahali katika y. 912 00:39:43,620 --> 00:39:45,630 Lakini ni mahali katika y nini? 913 00:39:45,630 --> 00:39:47,899 914 00:39:47,899 --> 00:39:49,440 Zote haki, ni thamani ya takataka, haki? 915 00:39:49,440 --> 00:39:50,800 Mimi akauchomoa kama alama ya swali. 916 00:39:50,800 --> 00:39:54,850 Nick akauchomoa kama curled up mshale. 917 00:39:54,850 --> 00:39:59,600 Na kama hivi karibuni kama wewe kujaribu kufanya nyota y, akisema kwenda huko, 918 00:39:59,600 --> 00:40:03,872 lakini kuna si halali anwani, ni baadhi anuani ya bogus, 919 00:40:03,872 --> 00:40:05,080 mpango kinaendelea kwa ajali. 920 00:40:05,080 --> 00:40:08,580 Na kichwa Binky ni kwenda kuruka mbali hapa, kama ilivyokuwa. 921 00:40:08,580 --> 00:40:12,130 >> Hivyo katika mwisho, mpango huu mara tu gorofa ya nje flaw. 922 00:40:12,130 --> 00:40:13,540 Ilikuwa ni mpango buggy. 923 00:40:13,540 --> 00:40:14,760 Na zinahitajika kuwa fasta. 924 00:40:14,760 --> 00:40:18,260 Na njia pekee, kwa kweli, kurekebisha itakuwa, kwa mfano, mstari huu, 925 00:40:18,260 --> 00:40:21,010 ambayo sisi hawakuwa hata kupata, kwa sababu mpango wa kugonga mapema mno. 926 00:40:21,010 --> 00:40:26,170 Lakini kama sisi walikuwa na kurekebisha hili, nini athari gani kufanya y x sawa na? 927 00:40:26,170 --> 00:40:30,010 Naam, ni kimsingi anasema y katika chochote thamani x ni akizungumzia katika. 928 00:40:30,010 --> 00:40:32,430 >> Hivyo katika hadithi Nick ya, au hadithi Binky ya, wote 929 00:40:32,430 --> 00:40:34,640 x na y walikuwa akionyesha chunk nyeupe ya kumbukumbu, 930 00:40:34,640 --> 00:40:38,300 hivyo kwamba, hatimaye, wakati wewe je nyota y sawa na 13 tena, 931 00:40:38,300 --> 00:40:43,080 wewe kuishia kuweka 13 katika eneo sahihi. 932 00:40:43,080 --> 00:40:47,640 Basi wote wa mistari haya ni kikamilifu halali, ila kwa ajili ya hii moja, 933 00:40:47,640 --> 00:40:51,730 wakati kilichotokea kabla ya kweli kwa ajili y baadhi ya thamani. 934 00:40:51,730 --> 00:40:54,290 >> Sasa nashiriki, huna lazima nizungumze kwa njia zote 935 00:40:54,290 --> 00:40:56,560 wa aina hii ya masuala juu yako mwenyewe. 936 00:40:56,560 --> 00:40:59,310 Hebu kwenda mbele na kufungua up window terminal hapa 937 00:40:59,310 --> 00:41:03,050 na kufungua, kwa muda tu, mpango super short kwamba 938 00:41:03,050 --> 00:41:04,360 pia ni aina ya pointless. 939 00:41:04,360 --> 00:41:05,152 Ni mbaya. 940 00:41:05,152 --> 00:41:06,610 Ni haina kufikia kitu chochote muhimu. 941 00:41:06,610 --> 00:41:10,180 Lakini haina kuonyesha masuala ya kumbukumbu, hivyo hebu kuchukua kuangalia. 942 00:41:10,180 --> 00:41:11,830 >> Kuu, super rahisi. 943 00:41:11,830 --> 00:41:14,830 Ni inaonekana wito kazi, f, na kisha anarudi 0. 944 00:41:14,830 --> 00:41:16,310 Ni aina ya ngumu kwa fujo hii up. 945 00:41:16,310 --> 00:41:18,540 Hivyo Kuu ni nzuri, hivyo mbali. 946 00:41:18,540 --> 00:41:20,100 >> Hivyo f ni tatizo. 947 00:41:20,100 --> 00:41:22,120 Na tu hakuwa na kuweka kiasi juhudi katika kumtaja ni 948 00:41:22,120 --> 00:41:23,990 hapa, kuweka umakini juu ya kanuni. 949 00:41:23,990 --> 00:41:25,740 f ina mistari miwili. 950 00:41:25,740 --> 00:41:27,610 Na hebu angalia nini sasa kinachoendelea. 951 00:41:27,610 --> 00:41:29,840 Hivyo kwa upande mmoja here-- na napenda kufanya 952 00:41:29,840 --> 00:41:32,680 hii inaendana na uliopita example-- kwa upande mmoja, 953 00:41:32,680 --> 00:41:35,830 upande wa mkono wa kushoto ni kufanya nini, kwa Kiingereza? 954 00:41:35,830 --> 00:41:36,493 Ni is-- 955 00:41:36,493 --> 00:41:37,701 Watazamaji: Kujenga pointer. 956 00:41:37,701 --> 00:41:40,830 DAVID J. Malan: Kujenga pointer kwa int na kuiita x. 957 00:41:40,830 --> 00:41:43,789 Hivyo ni kujenga moja ya masanduku wale Mimi kuendelea kuchora juu ya screen ya kugusa. 958 00:41:43,789 --> 00:41:45,913 Na sasa, juu ya mkono wa kulia upande, malloc, bila shaka, 959 00:41:45,913 --> 00:41:47,420 ni kugawa chunk ya kumbukumbu. 960 00:41:47,420 --> 00:41:49,989 Na tu kuwa wazi, jinsi kumbukumbu kiasi gani ni inaonekana 961 00:41:49,989 --> 00:41:52,030 kugawa, kama wewe tu aina ya kufanya hesabu hapa? 962 00:41:52,030 --> 00:41:53,200 963 00:41:53,200 --> 00:41:54,040 >> Hivyo ni 40 ka. 964 00:41:54,040 --> 00:41:57,400 Nami najua kuwa tu kwa sababu mimi najua int, juu ya CS50 appliance, angalau, 965 00:41:57,400 --> 00:41:58,060 ni ka nne. 966 00:41:58,060 --> 00:41:59,610 Hivyo mara 10 4 ni 40. 967 00:41:59,610 --> 00:42:04,924 Hivyo hii ni hifadhi ya x, anwani ya nje ya kwanza ya 40 ints kwamba 968 00:42:04,924 --> 00:42:07,340 zimetengwa nafasi nyuma, kwa nyuma, kwa nyuma, kwa nyuma. 969 00:42:07,340 --> 00:42:08,470 >> Na kwamba ni nini muhimu kuhusu malloc. 970 00:42:08,470 --> 00:42:11,261 Haina kuchukua kumbukumbu kidogo hapa, kidogo hapa, kidogo hapa. 971 00:42:11,261 --> 00:42:14,220 Ni anakupa chunk moja ya kumbukumbu, contiguously, kutoka uendeshaji 972 00:42:14,220 --> 00:42:15,240 mfumo. 973 00:42:15,240 --> 00:42:18,500 >> Sasa nini kuhusu hili, x bracket 10 sawa na 0? 974 00:42:18,500 --> 00:42:19,470 Holela mstari wa kanuni. 975 00:42:19,470 --> 00:42:21,100 Ni haina kufikia kitu chochote muhimu. 976 00:42:21,100 --> 00:42:26,128 Lakini ni ya kuvutia, kwa sababu x bracket 10--? 977 00:42:26,128 --> 00:42:26,628 Yeah? 978 00:42:26,628 --> 00:42:27,912 >> Watazamaji: [inaudible]? 979 00:42:27,912 --> 00:42:30,500 >> DAVID J. Malan: x bracket 10 haina kuwa null. 980 00:42:30,500 --> 00:42:35,070 null undani tu anakuja katika kucheza na masharti, mwishoni mwa kamba. 981 00:42:35,070 --> 00:42:36,700 Lakini wazo nzuri. 982 00:42:36,700 --> 00:42:39,615 >> Jinsi kubwa ni safu hii, hata ingawa nimekuwa zilizotengwa 40 ka? 983 00:42:39,615 --> 00:42:42,560 984 00:42:42,560 --> 00:42:43,690 Ni kwa njia ya tisa 0, haki? 985 00:42:43,690 --> 00:42:45,120 Ni 10 ints, jumla. 986 00:42:45,120 --> 00:42:48,790 40 ka, lakini 10 ints, indexed 0 kupitia 0. 987 00:42:48,790 --> 00:42:50,930 >> Hivyo ni kwamba x bracket 10 nini? 988 00:42:50,930 --> 00:42:53,090 Ni kweli baadhi jamii haijulikani thamani ya takataka. 989 00:42:53,090 --> 00:42:54,780 Ni kumbukumbu hiyo haina mali yangu. 990 00:42:54,780 --> 00:42:59,650 Mimi haipaswi kugusa kwamba Byte idadi 41, 42, 43, 44. 991 00:42:59,650 --> 00:43:01,420 Mimi nina kwenda kidogo mbali sana. 992 00:43:01,420 --> 00:43:04,490 >> Na hakika, kama mimi kukimbia hii mpango, ili vizuri sana ajali. 993 00:43:04,490 --> 00:43:05,790 Lakini wakati mwingine, tutaweza kupata bahati. 994 00:43:05,790 --> 00:43:07,706 Na hivyo tu kuonyesha Haya na kusema ukweli, 995 00:43:07,706 --> 00:43:11,000 huwezi kujua kabla ya je it-- hebu kukimbia hii. 996 00:43:11,000 --> 00:43:12,480 Haikuwa kweli ajali. 997 00:43:12,480 --> 00:43:15,032 >> Lakini kama mimi kubadili hali hii, kwa mfano, kuwa kama 1,000, 998 00:43:15,032 --> 00:43:16,740 kufanya kweli hii makusudi, hebu angalia 999 00:43:16,740 --> 00:43:18,710 kama tunaweza kupata ajali wakati huu. 1000 00:43:18,710 --> 00:43:20,070 OK, haikuwa ajali. 1001 00:43:20,070 --> 00:43:22,600 Vipi kuhusu 100,000? 1002 00:43:22,600 --> 00:43:25,000 Hebu remake yake, na sasa rerun yake. 1003 00:43:25,000 --> 00:43:25,500 OK. 1004 00:43:25,500 --> 00:43:25,960 Phew. 1005 00:43:25,960 --> 00:43:26,460 Wote haki. 1006 00:43:26,460 --> 00:43:29,090 Hivyo inaonekana, tena, hizi makundi ya kumbukumbu, hivyo kusema, 1007 00:43:29,090 --> 00:43:32,660 ni sababu kubwa, hivyo tunaweza kupata bahati tena na tena. 1008 00:43:32,660 --> 00:43:36,510 Lakini hatimaye, mara moja kupata ridiculous na kwa kweli kwenda mbali nje ya screen, 1009 00:43:36,510 --> 00:43:39,120 wewe kugusa kumbukumbu kwamba kwa kweli, kweli haina ni yako. 1010 00:43:39,120 --> 00:43:40,870 >> Lakini kusema ukweli, hizi aina ya mende ni kwenda 1011 00:43:40,870 --> 00:43:43,020 kuwa vigumu na vigumu kufikiri juu yako mwenyewe. 1012 00:43:43,020 --> 00:43:47,880 Lakini nashiriki, kama programmers, tuna zana kwamba kuruhusu sisi kufanya hili kwa ajili yetu. 1013 00:43:47,880 --> 00:43:50,140 Hivyo hii ni, pengine, moja wa mipango ya ugliest, 1014 00:43:50,140 --> 00:43:52,060 hata uglier ya pato GDB ya. 1015 00:43:52,060 --> 00:43:55,670 Lakini daima ina line au mbili ambazo ni super muhimu. 1016 00:43:55,670 --> 00:44:00,310 >> Valgrind ni programu ambayo husaidia wewe si Debug mpango, per se, 1017 00:44:00,310 --> 00:44:03,500 lakini kupata kumbukumbu-kuhusiana matatizo, hasa. 1018 00:44:03,500 --> 00:44:07,590 Itakuwa moja kwa moja kukimbia code yako kwa wewe na kuangalia kwa mambo mawili. 1019 00:44:07,590 --> 00:44:10,680 Moja, je, kufanya kitu ajali kama kugusa kumbukumbu 1020 00:44:10,680 --> 00:44:11,980 kwamba hakuwa na mali yenu? 1021 00:44:11,980 --> 00:44:13,590 Ni itakusaidia kupata kesi hizo. 1022 00:44:13,590 --> 00:44:15,710 >> Na mbili, itasaidia kupata kitu kinachoitwa 1023 00:44:15,710 --> 00:44:19,270 uvujaji kumbukumbu, ambayo tuna kupuuzwa kabisa, naively, 1024 00:44:19,270 --> 00:44:21,380 kwa baadhi ya wakati na blissfully. 1025 00:44:21,380 --> 00:44:23,140 Lakini zinageuka, kila wakati huu, wakati wowote 1026 00:44:23,140 --> 00:44:26,620 umetumia GetString katika hivyo, wengi wa mipango yetu, 1027 00:44:26,620 --> 00:44:28,930 wewe ni kuuliza uendeshaji mfumo kwa kumbukumbu, 1028 00:44:28,930 --> 00:44:32,070 lakini una kumbukumbu yoyote ya milele kutoa ni 1029 00:44:32,070 --> 00:44:36,169 nyuma, kufanya unalloc, au bure, kama ni kuitwa. 1030 00:44:36,169 --> 00:44:37,960 Hapana, kwa sababu tumekuwa kamwe aliuliza wewe kufanya hivyo. 1031 00:44:37,960 --> 00:44:41,250 >> Lakini muda wote huu, mipango tumekuwa kuandika katika C 1032 00:44:41,250 --> 00:44:43,800 wamekuwa kinachovuja kumbukumbu, kuuliza uendeshaji 1033 00:44:43,800 --> 00:44:46,190 mfumo kwa zaidi na zaidi kumbukumbu kwa masharti na whatnot, 1034 00:44:46,190 --> 00:44:47,870 lakini kamwe kuikabidhi nyuma. 1035 00:44:47,870 --> 00:44:50,080 Na sasa hii ni kidogo ya kurahisisha, 1036 00:44:50,080 --> 00:44:53,550 lakini kama wameweza milele kukimbia Mac yako au PC yako kwa muda kabisa, ufunguzi 1037 00:44:53,550 --> 00:44:55,790 kura ya mipango, labda kufunga programu, 1038 00:44:55,790 --> 00:44:57,795 na hata kama wako kompyuta hana kugonga, 1039 00:44:57,795 --> 00:45:01,690 ni kupata hivyo polepole sana, kana kwamba ni kweli 1040 00:45:01,690 --> 00:45:04,290 kutumia mengi ya kumbukumbu au rasilimali, ingawa, 1041 00:45:04,290 --> 00:45:06,070 kama wewe si hata kugusa keyboard, 1042 00:45:06,070 --> 00:45:10,430 ambayo inaweza be-- lakini si always-- inaweza kuwa mipango wewe ni mbio 1043 00:45:10,430 --> 00:45:11,920 kuwa wao wenyewe na uvujaji kumbukumbu. 1044 00:45:11,920 --> 00:45:15,645 Na wao kuendelea kuuliza OS kwa zaidi na zaidi ya kumbukumbu, lakini kusahau kuhusu hilo, 1045 00:45:15,645 --> 00:45:18,470 si kweli kutumia, lakini kwa hiyo kuchukua kumbukumbu mbali 1046 00:45:18,470 --> 00:45:20,500 na programu nyingine ambao wanaweza kutaka yake. 1047 00:45:20,500 --> 00:45:23,940 Hivyo hiyo ni maelezo ya kawaida. 1048 00:45:23,940 --> 00:45:25,940 Sasa hapa ni ambapo Valgrind ya pato ni kabisa 1049 00:45:25,940 --> 00:45:29,290 mauaji kwa wale chini na vizuri zaidi sawa. 1050 00:45:29,290 --> 00:45:32,690 Lakini ya kuvutia mambo ni haki hapa. 1051 00:45:32,690 --> 00:45:37,060 Ni ananiambia kuandika batili ya ukubwa nne kinachotokea katika mpango huu, 1052 00:45:37,060 --> 00:45:40,640 hasa, katika mstari wa 21 ya memory.c. 1053 00:45:40,640 --> 00:45:45,450 >> Kama mimi kwenda kwa mstari 21, hm, kuna kweli ni kuandika batili ya ukubwa nne. 1054 00:45:45,450 --> 00:45:46,250 Kwa nini ukubwa nne? 1055 00:45:46,250 --> 00:45:49,500 Naam, hii number-- na inaweza kuwa anything-- ni int. 1056 00:45:49,500 --> 00:45:50,450 Hivyo ni ka nne. 1057 00:45:50,450 --> 00:45:52,550 Hivyo mimi nina kuweka ka nne ambapo wao si. 1058 00:45:52,550 --> 00:45:55,080 Hiyo ni nini Valgrind ni kweli kuniambia. 1059 00:45:55,080 --> 00:45:57,600 Aidha, itakuwa pia kuniambia, kama tutaweza kuona, 1060 00:45:57,600 --> 00:46:01,490 kama wewe kukimbia hii katika pset siku zijazo, kama na wakati ve kuvuja kumbukumbu, ambayo kwa hakika 1061 00:46:01,490 --> 00:46:05,300 Mimi, kwa sababu nimekuwa inayoitwa malloc, lakini nina si kweli 1062 00:46:05,300 --> 00:46:08,010 kuitwa, katika kesi hii, huru, ambayo tutaweza hatimaye kuona 1063 00:46:08,010 --> 00:46:09,830 ni kinyume cha malloc. 1064 00:46:09,830 --> 00:46:10,860 1065 00:46:10,860 --> 00:46:12,930 >> Hivyo sasa, nadhani, Mfano wa mwisho. 1066 00:46:12,930 --> 00:46:14,050 1067 00:46:14,050 --> 00:46:16,690 Hivyo hii moja kidogo zaidi arcane, lakini ni labda 1068 00:46:16,690 --> 00:46:19,180 sababu kubwa kwa kuwa makini na kumbukumbu, 1069 00:46:19,180 --> 00:46:24,490 na mipango ya sababu kwamba wengi na / au servrar mtandao, hata siku hii ya leo, 1070 00:46:24,490 --> 00:46:28,200 ni yamechukuliwa na wabaya mahali fulani kwenye mtandao ambao ni kwa namna fulani 1071 00:46:28,200 --> 00:46:33,390 kutuma packets bogus kwa server yako kujaribu maelewano akaunti yako, 1072 00:46:33,390 --> 00:46:36,420 au kuchukua data yako, au tu kwa ujumla kuchukua juu ya mashine. 1073 00:46:36,420 --> 00:46:38,910 Buffer kufurika, kama jina la kupendekeza, njia 1074 00:46:38,910 --> 00:46:40,740 wingi si int, lakini buffer. 1075 00:46:40,740 --> 00:46:43,490 Na buffer ni njia tu dhana ya kusema ni rundo la kumbukumbu. 1076 00:46:43,490 --> 00:46:46,710 >> Na hakika, mimi kuitwa kamba kabla ya buffer, badala ya s. 1077 00:46:46,710 --> 00:46:49,234 Kwa sababu kama ni buffer, kama katika akili YouTube, 1078 00:46:49,234 --> 00:46:52,400 au wakati wowote wewe ni kuangalia video, unaweza kuwa na kuonekana neno buffering, 1079 00:46:52,400 --> 00:46:53,040 dot, dot, dot. 1080 00:46:53,040 --> 00:46:54,240 Ni incredibly annoying. 1081 00:46:54,240 --> 00:46:55,990 Na kwamba tu ina maana kuwa mchezaji video yako 1082 00:46:55,990 --> 00:46:58,710 ni kujaribu kushusha kura ya ka, kura ya ka 1083 00:46:58,710 --> 00:47:00,170 kutoka video kutoka katika mtandao. 1084 00:47:00,170 --> 00:47:02,920 Lakini ni polepole, hivyo ni kujaribu download rundo la yao 1085 00:47:02,920 --> 00:47:06,430 kujaza buffer, chombo, ili una ka kutosha kwamba unaweza kisha 1086 00:47:06,430 --> 00:47:09,174 kuonyesha video, bila pausing mara kwa mara. 1087 00:47:09,174 --> 00:47:11,340 Lakini zinageuka, unaweza na buffer kwa hii kubwa. 1088 00:47:11,340 --> 00:47:15,710 Lakini kujaribu kuweka hii data sana katika yake, na sana mambo mabaya yanaweza kutokea. 1089 00:47:15,710 --> 00:47:22,780 Hivyo kwa mfano, hebu tuangalie teaser hii ya mwisho ya mfano. 1090 00:47:22,780 --> 00:47:24,720 Hii ni mpango mwingine kwamba, katika mtazamo wa kwanza, 1091 00:47:24,720 --> 00:47:26,540 haina kufanya kitu chochote super muhimu. 1092 00:47:26,540 --> 00:47:29,590 Ni got Kuu ya kazi kwamba wito kazi hiyo, f. 1093 00:47:29,590 --> 00:47:36,640 Na kazi hiyo, f, hapa juu, ina char safu, iitwayo c, ukubwa 12. 1094 00:47:36,640 --> 00:47:39,340 Na kisha ni kwa kutumia hii kazi mpya iitwayo strncpy. 1095 00:47:39,340 --> 00:47:40,430 1096 00:47:40,430 --> 00:47:45,190 >> Ni zinageuka kuwa, pamoja na hii rahisi, rahisi mstari wa kanuni, mistari miwili tu, 1097 00:47:45,190 --> 00:47:49,130 tumefanya mpango wangu nzima, na kwa hiyo, kompyuta yangu yote, 1098 00:47:49,130 --> 00:47:54,000 na user akaunti yangu, na ngumu wangu gari uwezekano wa mazingira magumu kwa mtu yeyote 1099 00:47:54,000 --> 00:47:58,170 ambaye anajua na ni nzuri ya kutosha ya kuendesha mpango huu na baadhi ya mstari amri 1100 00:47:58,170 --> 00:47:58,900 hoja. 1101 00:47:58,900 --> 00:48:03,400 Kwa maneno mengine, kama hii guy mbaya unaweka ndani ya argvargv [1] na kuandika 1102 00:48:03,400 --> 00:48:08,750 katika keyboard hasa crafted sana kamba, si abc, 123, lakini kimsingi, 1103 00:48:08,750 --> 00:48:15,180 alama binary kwamba kuwakilisha executable code, mpango kwamba yeye au yeye aliandika, 1104 00:48:15,180 --> 00:48:19,190 na mpango huu rahisi, ambayo ni mwakilishi wa maelfu ya programu 1105 00:48:19,190 --> 00:48:23,610 kwamba ni vile vile katika mazingira magumu, daresay, yeye au yeye inaweza hatimaye kufuta yote 1106 00:48:23,610 --> 00:48:26,680 files kwenye gari yangu ngumu, kupata blinking haraka hivyo kwamba yeye au yeye anaweza 1107 00:48:26,680 --> 00:48:30,170 aina amri juu yao wenyewe, email files kila mmoja kwangu. 1108 00:48:30,170 --> 00:48:34,660 Kitu chochote ambacho siwezi kufanya, yeye au anaweza kufanya na kanuni hii. 1109 00:48:34,660 --> 00:48:36,575 >> Sisi si kabisa kutatua hii bado. 1110 00:48:36,575 --> 00:48:38,700 Na kwa kweli, ni kwenda kwa kuhusisha picha kidogo 1111 00:48:38,700 --> 00:48:41,470 kama hii, ambayo tutaweza karibuni kuja kuelewa wote bora. 1112 00:48:41,470 --> 00:48:44,480 Lakini kwa leo, hebu mwisho juu ya nini, hopefully, kidogo zaidi 1113 00:48:44,480 --> 00:48:48,360 kueleweka XKCD utani, mpaka sisi kuendelea mara ya pili. 1114 00:48:48,360 --> 00:48:51,100 1115 00:48:51,100 --> 00:48:51,600 Wote haki. 1116 00:48:51,600 --> 00:48:53,446 Angalia wewe juu ya Jumatano. 1117 00:48:53,446 --> 00:48:54,754 >> [MUSIC KUCHEZA] 1118 00:48:54,754 --> 00:48:57,790 >> SPIKA: Na sasa, kina mawazo, na Daven Farnham. 1119 00:48:57,790 --> 00:49:00,890 1120 00:49:00,890 --> 00:49:04,770 Kumbukumbu ni kama kuruka ndani ya rundo la majani ya dhahabu juu ya Jumapili alasiri. 1121 00:49:04,770 --> 00:49:09,000 Upepo unavuma, tossing yako hair-- oh, I miss siku when-- 1122 00:49:09,000 --> 00:49:11,100 1123 00:49:11,100 --> 00:49:12,650 >> [Kicheko] 1124 00:49:12,650 --> 00:49:13,750