1 00:00:00,000 --> 00:00:01,110 >> [MUSIC Playing] 2 00:00:01,110 --> 00:00:10,567 3 00:00:10,567 --> 00:00:11,650 DAVID J. Malan: Në rregull. 4 00:00:11,650 --> 00:00:15,610 Kjo është CS50, dhe kjo është fundi i Javës Four. 5 00:00:15,610 --> 00:00:19,420 Dhe një nga temat sot është ajo e mjekësisë ligjore dixhitale, 6 00:00:19,420 --> 00:00:20,989 arti i shërohet informacion. 7 00:00:20,989 --> 00:00:22,780 Dhe me të vërtetë, edhe pse ju jeni në mes 8 00:00:22,780 --> 00:00:25,070 tani e Paqes në tre dhe Breakout, javën e ardhshme, 9 00:00:25,070 --> 00:00:27,880 Fokusi do të jetë në pikërisht këtë domain. 10 00:00:27,880 --> 00:00:30,686 >> Pra, një nga punët coolest kam kishte ishte kthyer në shkollën e diplomuar, 11 00:00:30,686 --> 00:00:33,560 kur unë isha duke punuar për lokale Middlesex County Prokurorit të Qarkut-së 12 00:00:33,560 --> 00:00:34,950 zyra, mjeko-ligjore duke bërë punë. 13 00:00:34,950 --> 00:00:37,450 Pra, në thelb, Massachusetts Policia e Shtetit, në disa raste, 14 00:00:37,450 --> 00:00:40,100 kur punojnë në raste do sjellë në gjëra të tilla si hard drives 15 00:00:40,100 --> 00:00:42,185 dhe disqe floppy dhe kartat e kujtesës dhe të ngjashme. 16 00:00:42,185 --> 00:00:44,060 Dhe ata do të dorëzojë ato për mua dhe mentorin tim, 17 00:00:44,060 --> 00:00:48,070 dhe qëllimi ynë është për të gjetur prova, nëse ka pasur ndonjë, në këto media. 18 00:00:48,070 --> 00:00:50,700 Shikime të Tani, ju mund të keni parë e kësaj bote të mjekësisë ligjore 19 00:00:50,700 --> 00:00:53,000 në media, TV dhe filma. 20 00:00:53,000 --> 00:00:55,730 Por punë kam pasur, dhe guxoj të them se bota, 21 00:00:55,730 --> 00:00:57,550 nuk është fare si ju do të shihni atë. 22 00:00:57,550 --> 00:01:00,794 Le të marrin një vështrim në atë ju ndoshta keni parë. 23 00:01:00,794 --> 00:01:01,460 [VIDEO Playback] 24 00:01:01,460 --> 00:01:02,930 OK. 25 00:01:02,930 --> 00:01:05,380 Tani, le të marrë një sy të mirë në ju. 26 00:01:05,380 --> 00:01:06,850 >> [MUSIC Playing] 27 00:01:06,850 --> 00:01:12,260 28 00:01:12,260 --> 00:01:12,932 >> -Hold Atë. 29 00:01:12,932 --> 00:01:13,657 Run që i mbështesin. 30 00:01:13,657 --> 00:01:14,733 >> -Wait Një minutë. 31 00:01:14,733 --> 00:01:15,233 Shko e drejtë. 32 00:01:15,233 --> 00:01:16,371 33 00:01:16,371 --> 00:01:16,870 -Ka. 34 00:01:16,870 --> 00:01:17,369 Freeze se. 35 00:01:17,369 --> 00:01:17,930 PLOTE-ekran. 36 00:01:17,930 --> 00:01:18,376 >> OK. 37 00:01:18,376 --> 00:01:18,875 Freeze se. 38 00:01:18,875 --> 00:01:20,160 -Tighten Deri në këtë, do ju? 39 00:01:20,160 --> 00:01:22,126 >> -Vector Në më se djalë nga rrota e pasme. 40 00:01:22,126 --> 00:01:24,435 >> -Zoom Në të drejtë këtu në këtë vend. 41 00:01:24,435 --> 00:01:28,580 >> -Me Pajisje të drejtë, image mund të zgjerohet dhe të mprehur. 42 00:01:28,580 --> 00:01:29,330 >> -Çfarë Është se? 43 00:01:29,330 --> 00:01:30,780 >> -Ajo Është një program zgjerimin. 44 00:01:30,780 --> 00:01:32,170 >> -Mund Ju të qartë se deri ndonjë? 45 00:01:32,170 --> 00:01:33,070 >> -Unë Nuk e di. 46 00:01:33,070 --> 00:01:34,150 Le të rritur atë. 47 00:01:34,150 --> 00:01:35,440 >> -Enhance Seksioni A6. 48 00:01:35,440 --> 00:01:36,570 49 00:01:36,570 --> 00:01:38,562 Unë zgjeruara detaje, and-- 50 00:01:38,562 --> 00:01:40,020 -Unë Mendoj se ka mjaft për të rritur. 51 00:01:40,020 --> 00:01:40,976 Lirimin e tij për ekranin tim. 52 00:01:40,976 --> 00:01:42,559 >> -Unë Zgjeruara reflektimin në sytë e saj. 53 00:01:42,559 --> 00:01:44,322 -Le Është drejtuar këtë përmes zgjerimin Video. 54 00:01:44,322 --> 00:01:45,210 >> -Edgar, Mund të rrisë këtë? 55 00:01:45,210 --> 00:01:45,710 >> -Hang Më. 56 00:01:45,710 --> 00:01:47,570 57 00:01:47,570 --> 00:01:49,458 >> -Ve Qenë duke punuar në këtë reflektim. 58 00:01:49,458 --> 00:01:50,402 >> Pasqyrim i dikujt -Ka së. 59 00:01:50,402 --> 00:01:50,902 >> -Reflection. 60 00:01:50,902 --> 00:01:52,870 -Nuk Është një pasqyrim i fytyrës së njeriut. 61 00:01:52,870 --> 00:01:53,694 >> Reflektim, Partia! 62 00:01:53,694 --> 00:01:54,610 -Nuk Është një reflektim. 63 00:01:54,610 --> 00:01:55,880 -Zoom Në në pasqyrë. 64 00:01:55,880 --> 00:01:57,860 Ju mund të shihni një reflektim. 65 00:01:57,860 --> 00:01:59,630 >> -A Mund të përmirësuar imazhin nga këtu? 66 00:01:59,630 --> 00:02:00,377 67 00:02:00,377 --> 00:02:01,210 -A Mund të rritur atë? 68 00:02:01,210 --> 00:02:02,190 -A Mund të rritur atë? 69 00:02:02,190 --> 00:02:03,066 -A Mund ne të rritur këtë? 70 00:02:03,066 --> 00:02:03,898 -A Mund të rritur atë? 71 00:02:03,898 --> 00:02:04,740 -Hold Në një të dytë. 72 00:02:04,740 --> 00:02:05,281 Unë do të rritur. 73 00:02:05,281 --> 00:02:06,470 -Zoom Në në derë. 74 00:02:06,470 --> 00:02:06,970 -Times 10. 75 00:02:06,970 --> 00:02:08,009 -Zoom. 76 00:02:08,009 --> 00:02:08,509 -Move Në. 77 00:02:08,509 --> 00:02:09,340 -Më Shumë. 78 00:02:09,340 --> 00:02:10,094 -Wait, Të ndaluar. 79 00:02:10,094 --> 00:02:10,750 -Ndaloni. 80 00:02:10,750 --> 00:02:11,250 -Pause Atë. 81 00:02:11,250 --> 00:02:13,542 Na -Rotate 75 gradë rreth vertikale, ju lutem. 82 00:02:13,542 --> 00:02:14,750 83 00:02:14,750 --> 00:02:16,127 >> -Ndaloni. 84 00:02:16,127 --> 00:02:19,330 Kthehu mbrapa në pjesën përpara derës përsëri. 85 00:02:19,330 --> 00:02:21,420 >> -Got Një enhancer imazhit që mund të bitmap? 86 00:02:21,420 --> 00:02:24,420 >> -Maybe Ne mund të përdorim Pradeep Singh Metoda për të parë në dritare. 87 00:02:24,420 --> 00:02:25,902 >> -The software është shtet i artit. 88 00:02:25,902 --> 00:02:26,866 >> , Partia eigenvalue është off. 89 00:02:26,866 --> 00:02:29,758 >> -Me Të djathtë kombinim i algorithms-- 90 00:02:29,758 --> 00:02:32,168 >> Ndriçim marrë -Ai-së algoritme në nivelin e ardhshëm, 91 00:02:32,168 --> 00:02:34,110 dhe unë mund t'i përdorë ato për të rritur këtë fotografi. 92 00:02:34,110 --> 00:02:36,840 >> -Lock Në dhe të zgjeruar z-aks. 93 00:02:36,840 --> 00:02:37,351 >> -Enhance. 94 00:02:37,351 --> 00:02:37,850 Përmirëso. 95 00:02:37,850 --> 00:02:38,720 -Enhance. 96 00:02:38,720 --> 00:02:40,070 -Freeze Dhe të rritur. 97 00:02:40,070 --> 00:02:43,420 [VIDEO END rishikim] 98 00:02:43,420 --> 00:02:45,830 DAVID J. Malan: Pra, ata janë të të gjitha fjalët, por ato nuk ishin të 99 00:02:45,830 --> 00:02:47,870 përdorur në fjali të saktë. 100 00:02:47,870 --> 00:02:52,370 Dhe me të vërtetë në të ardhmen, në çdo kohë, ju lutem, dëgjoni dikë që thotë fjalën, 101 00:02:52,370 --> 00:02:54,250 "Rritur", nënqeshje vetëm pak. 102 00:02:54,250 --> 00:02:57,190 Sepse kur ju përpiqeni për të rritur, për shembull, kjo është ajo që ndodh. 103 00:02:57,190 --> 00:02:58,580 >> Kështu që këtu është një foto mrekullueshëm. 104 00:02:58,580 --> 00:02:59,720 Ky është vet Daven CS50-së. 105 00:02:59,720 --> 00:03:03,740 Dhe mendoj se ne të kërkuar për të të përqëndrohet në në vezullim në sy të tij, 106 00:03:03,740 --> 00:03:05,870 ose reflektim i djalë i keq që ishte në mënyrë të qartë 107 00:03:05,870 --> 00:03:07,820 kapur nga kamera e sigurisë. 108 00:03:07,820 --> 00:03:10,330 Kjo është ajo që ndodh kur ju zoom në një imazh që 109 00:03:10,330 --> 00:03:14,060 ka vetëm një numër i caktuar i bit që lidhen me të. 110 00:03:14,060 --> 00:03:15,420 >> Kjo është ajo që ju do të merrni. 111 00:03:15,420 --> 00:03:19,190 Dhe me të vërtetë, në sy Daven-së është vetëm katër, ndoshta gjashtë pixels 112 00:03:19,190 --> 00:03:22,110 që kompozoj saktësisht se çfarë ishte dritëz atje. 113 00:03:22,110 --> 00:03:25,890 Pra Problem Set Katër në fund të fundit do të duhet ju eksploruar këtë botë, veçanërisht 114 00:03:25,890 --> 00:03:28,090 nga natyra e diçka ne e quajmë fotografi i / o, ku 115 00:03:28,090 --> 00:03:31,000 i / o është vetëm një mënyrë e sofistikuar për të duke thënë input dhe output. 116 00:03:31,000 --> 00:03:34,280 >> Pra deri më tani, të gjitha bashkëveprimet ne kemi pasur me një kompjuter 117 00:03:34,280 --> 00:03:36,770 kanë qenë kryesisht me tuaj tastierë dhe ekran, 118 00:03:36,770 --> 00:03:40,770 por jo aq shumë me hard disk, ose kursim të dosjeve përtej atyre ju 119 00:03:40,770 --> 00:03:41,620 veten shkruani. 120 00:03:41,620 --> 00:03:44,570 Programet tuaja deri tani kanë nuk janë krijuar, dhe të kursimit, 121 00:03:44,570 --> 00:03:46,270 dhe përditësimin dosjet e tyre. 122 00:03:46,270 --> 00:03:47,150 >> E pra, çfarë është një skedar? 123 00:03:47,150 --> 00:03:48,105 E pra, diçka si një JPEG. 124 00:03:48,105 --> 00:03:50,520 Ky është një imazh që ju mund duhet ose ngarkoni në Facebook, 125 00:03:50,520 --> 00:03:51,690 ose të shihni kudo në internet. 126 00:03:51,690 --> 00:03:54,460 Në të vërtetë, që foto ne vetëm pa e Daven ishte një JPEG. 127 00:03:54,460 --> 00:03:57,570 Dhe çfarë është interesante për fotografi si JPEGs 128 00:03:57,570 --> 00:04:02,170 është se ato mund të identifikohen, zakonisht, nga modele të caktuara të bit. 129 00:04:02,170 --> 00:04:05,200 >> Me fjalë të tjera, çfarë është ajo që dallon një JPEG nga një GIF 130 00:04:05,200 --> 00:04:08,109 nga një PING nga një fjalë dokument nga një file Excel? 131 00:04:08,109 --> 00:04:09,900 E pra, kjo është vetëm e ndryshme modelet e copa. 132 00:04:09,900 --> 00:04:12,820 Dhe këto modele të ndryshme janë zakonisht në fillim të këtyre dosjeve. 133 00:04:12,820 --> 00:04:18,200 >> Kështu që kur kompjuteri juaj hap një Word doc, ose kur një kompjuter hap një JPEG, 134 00:04:18,200 --> 00:04:20,940 kjo duket në mënyrë tipike në disa bit e para në dosjen. 135 00:04:20,940 --> 00:04:24,059 Dhe në qoftë se ajo njeh një model, ai thotë, oh, ky është një imazh. 136 00:04:24,059 --> 00:04:25,850 Më lejoni të shfaq atë në përdoruesi si një grafik. 137 00:04:25,850 --> 00:04:27,870 Ose, oh, kjo duket si një Word doc. 138 00:04:27,870 --> 00:04:30,480 Më lejoni të tregojë se për të përdoruesit, si një ese. 139 00:04:30,480 --> 00:04:33,020 >> Kështu për shembull, JPEGs, rezulton, janë 140 00:04:33,020 --> 00:04:35,460 mjaft të sofistikuar nën kapuç. 141 00:04:35,460 --> 00:04:40,140 Por tre bytes e para në më të çdo JPEG fillojë me këto tre numra. 142 00:04:40,140 --> 00:04:44,680 Pra byte zero, një, dhe dy janë, në më çdo JPEG, 255, atëherë numri 143 00:04:44,680 --> 00:04:46,675 216, atëherë numri 255. 144 00:04:46,675 --> 00:04:48,990 >> Dhe ajo që ju do të jetë në gjendje për të fillojnë të bëjnë javën e ardhshme 145 00:04:48,990 --> 00:04:52,920 është në të vërtetë poking nën individualitet e dosjeve si JPEGs 146 00:04:52,920 --> 00:04:57,210 dhe si fotografi bitmap, dhe duke parë ajo që ka qenë gjithmonë atje për aq kohë 147 00:04:57,210 --> 00:04:58,650 si ju keni qenë duke përdorur një kompjuter. 148 00:04:58,650 --> 00:05:01,860 >> Por ajo që është atje nuk është në mënyrë tipike shkruar si numra dhjetorë si kjo. 149 00:05:01,860 --> 00:05:04,620 Shkencëtarët kompjuter nuk e bëjnë kanë tendencë për të folur në decimal. 150 00:05:04,620 --> 00:05:06,139 Ata vërtetë nuk flasin në binar. 151 00:05:06,139 --> 00:05:07,930 Në mënyrë tipike, kur ne duam për të shprehur numrat, 152 00:05:07,930 --> 00:05:10,710 ne fakt përdorni hexadecimal, të cilat ju mund të kujtojnë 153 00:05:10,710 --> 00:05:13,027 nga, të themi, Problem Set Një, e cila sfidoi 154 00:05:13,027 --> 00:05:14,610 ju të mendoni për një sistem të ndryshëm. 155 00:05:14,610 --> 00:05:17,170 >> Ne, natyrisht, janë të njohur me decimal, zero përmes nëntë. 156 00:05:17,170 --> 00:05:18,215 Biseduam për binar. 157 00:05:18,215 --> 00:05:20,710 Dhe ne nuk të vërtetë kanë për të përdorur që shumë këtu 158 00:05:20,710 --> 00:05:22,470 më jashtë, sepse kompjuterat do të përdorë këtë. 159 00:05:22,470 --> 00:05:24,900 Por programuesit do shumë shpesh, por jo gjithmonë, 160 00:05:24,900 --> 00:05:29,360 përdorni hexadecimal, e cila vetëm do të thotë ju keni 16 shkronja në alfabetin tënd, 161 00:05:29,360 --> 00:05:31,330 në krahasim me dy ose 10. 162 00:05:31,330 --> 00:05:34,530 >> Deri sa ju të mbështeteni për të më e lartë se nëntë në heksadecimal? 163 00:05:34,530 --> 00:05:41,120 Qe shkojnë 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, a, b, c, d, e, f, vetëm nga konventa. 164 00:05:41,120 --> 00:05:43,540 Por ajo që është kryesore është që çdo nga këto është një simbol i vetëm. 165 00:05:43,540 --> 00:05:44,340 Nuk ka 10. 166 00:05:44,340 --> 00:05:48,400 Nuk ka 11, në vetvete, sepse çdo i shifrave tuaja, ashtu si në decimal 167 00:05:48,400 --> 00:05:51,940 dhe ashtu si në binar, duhet vetëm të të jetë një karakter të vetëm, nga konventa. 168 00:05:51,940 --> 00:05:55,280 >> Pra, që atëherë është alfabeti ne kemi në dispozicionin tonë për heksadecimal. 169 00:05:55,280 --> 00:05:58,600 Pra, çfarë e bën një JPEG duket si në qoftë se ju ishin të shkruar nga këta të tre e parë 170 00:05:58,600 --> 00:06:01,980 nuk bytes si decimal, por, për shembull, si heksadecimal? 171 00:06:01,980 --> 00:06:03,640 Dhe pse është magji edhe të gjithë që të dobishme? 172 00:06:03,640 --> 00:06:05,290 >> E pra, një vështrim i shpejtë në një shembull. 173 00:06:05,290 --> 00:06:09,030 Pra, nëse unë shkruaj nga copa që përfaqësojnë këto numbers-- decimal 174 00:06:09,030 --> 00:06:12,450 kjo mund të jetë një ndryshkur pak tani nga disa javë prapa, 175 00:06:12,450 --> 00:06:14,820 por një e majtë dhe një e drejtë janë goxha e lehtë. 176 00:06:14,820 --> 00:06:17,990 255 ishte numri më i madh që ne mund të përfaqësojë me tetë bit. 177 00:06:17,990 --> 00:06:18,820 Ishte të gjitha ato. 178 00:06:18,820 --> 00:06:21,320 Pra, i vetmi që është e butë interesante është një e mesme. 179 00:06:21,320 --> 00:06:24,700 Dhe në qoftë se ju lloj i bëni jashtë matematikë, ju do të nxjerr një përfundim se, me të vërtetë, 180 00:06:24,700 --> 00:06:27,949 se modeli i një dhe zero përfaqëson 216. 181 00:06:27,949 --> 00:06:30,240 Pra, le të vetëm të parashikojë për tani që këto janë të sakta. 182 00:06:30,240 --> 00:06:31,730 Por pse është kjo interesante? 183 00:06:31,730 --> 00:06:33,970 >> E pra, një bajt, natyrisht, është tetë bit. 184 00:06:33,970 --> 00:06:38,980 Dhe kjo rezulton se në qoftë se ju mendoni se e një bajt si dy copa të katër copa, 185 00:06:38,980 --> 00:06:39,500 si kjo. 186 00:06:39,500 --> 00:06:41,000 Më lejoni vetëm të shtoni një hapësirë. 187 00:06:41,000 --> 00:06:42,550 Pra, para, pas. 188 00:06:42,550 --> 00:06:46,520 Unë e kam vetëm të shtuar një hapësirë ​​të bardhë për hir Vizualizimi-së këtu. 189 00:06:46,520 --> 00:06:51,840 Si mund të kemi tani të përfaqësojë në, të themi, heksadecimal secilin kuadrat i bit, 190 00:06:51,840 --> 00:06:52,880 secili grup i katër bit? 191 00:06:52,880 --> 00:06:56,420 >> Kështu për shembull, në të majtë tani, ne kemi 1111 në binar. 192 00:06:56,420 --> 00:07:00,420 Çfarë është se numri në decimal, në qoftë se ju bëni jashtë matematikë? 193 00:07:00,420 --> 00:07:03,780 Ju keni vendin Ones, vend twos, vendi katër këmbët, dhe vendi tetë. 194 00:07:03,780 --> 00:07:04,341 >> Audienca: 15. 195 00:07:04,341 --> 00:07:05,340 DAVID J. Malan: Kjo është 15. 196 00:07:05,340 --> 00:07:08,340 Pra, nëse ne bëjmë tetë plus katër plus dy plus një, ne kemi marrë 15. 197 00:07:08,340 --> 00:07:11,790 Kështu që unë mund të shkruani 15 më poshtë 1111 dhe por pika e tërë këtu 198 00:07:11,790 --> 00:07:13,190 është heksadecimal, nuk dhjetore. 199 00:07:13,190 --> 00:07:17,310 Pra, në vend të shkruar 15, 1-5, Unë jam duke shkuar për të shkruar që në magji, 200 00:07:17,310 --> 00:07:22,311 e cila në qoftë se ju mendoni përsëri, në qoftë se ju keni zero nëpërmjet f, çfarë është 15 do të jetë? 201 00:07:22,311 --> 00:07:22,810 Audienca: f. 202 00:07:22,810 --> 00:07:24,434 DAVID J. Malan: Pra, ajo rezulton se është f. 203 00:07:24,434 --> 00:07:29,140 Dhe ju mund të punojnë jashtë se duke thënë, dhe, nëse A është 10, pastaj në rregull, f është 15. 204 00:07:29,140 --> 00:07:33,250 Pra, me të vërtetë, ne mund të rishkruaj ky grup i njëjtë i numrave si f f. 205 00:07:33,250 --> 00:07:35,750 Atëherë, nëse ne bëjmë një grimë e matematikës, ne do të nxjerr një përfundim se kjo është d. 206 00:07:35,750 --> 00:07:38,650 Tetë është shumë e lehtë, sepse ne kanë një një në vendin e tetë. 207 00:07:38,650 --> 00:07:40,620 Dhe pastaj, ne kemi një çift shumë f f-së. 208 00:07:40,620 --> 00:07:44,669 >> Pra, ajo që njerëzit kanë tendencë për të bërë nga konventa kur ata përdorin heksadecimal është se ata vetëm 209 00:07:44,669 --> 00:07:47,710 shkruaj këtë pak më shkurtimisht, shpëtoj nga shumica e asaj hapësirë ​​të bardhë. 210 00:07:47,710 --> 00:07:50,890 Dhe vetëm të jenë super të qartë të lexuesit se kjo është heksadecimal, 211 00:07:50,890 --> 00:07:54,670 Konventa e thjeshtë në mes të njerëzit po ju shkruani zero 212 00:07:54,670 --> 00:07:58,000 x, e cila nuk ka kuptimin tjetër se një identifikues vizuale të, 213 00:07:58,000 --> 00:07:59,590 këtu vjen një numër magji. 214 00:07:59,590 --> 00:08:04,210 >> Dhe pastaj, të vendosni dy shifra, f f në këtë rast, pastaj d a, pastaj f f. 215 00:08:04,210 --> 00:08:06,700 Pra histori të gjatë të shkurtër, heksadecimal vetëm ka tendencë 216 00:08:06,700 --> 00:08:11,990 të jetë e dobishme për shkak se secili prej saj shifrat e kodit, zero nëpërmjet f, të përkryer linjat 217 00:08:11,990 --> 00:08:13,880 me një model të katër copa. 218 00:08:13,880 --> 00:08:18,080 >> Pra, nëse ju keni dy numra heksadecimal, zero përmes F, përsëri dhe përsëri, 219 00:08:18,080 --> 00:08:20,256 që ju jep të përkryer tetë bit ose një bajt. 220 00:08:20,256 --> 00:08:22,380 Pra, kjo është arsyeja pse ajo tenton të të jetë konvencionale të dobishme. 221 00:08:22,380 --> 00:08:24,990 Nuk ka intelektuale përmbajtje me të vërtetë përtej kësaj, 222 00:08:24,990 --> 00:08:27,010 përveç shërbimeve të saj aktual. 223 00:08:27,010 --> 00:08:29,310 >> Tani JPEGs nuk janë vetëm paraqesë formate për graphics. 224 00:08:29,310 --> 00:08:33,230 Ju mund të kujtojnë se ka fotografi si kjo në botë, 225 00:08:33,230 --> 00:08:34,830 të paktën nga disa vjet mbrapa. 226 00:08:34,830 --> 00:08:37,580 >> Pra, kjo ishte në të vërtetë instaluar në Windows XP 227 00:08:37,580 --> 00:08:39,960 në miliona PC në mbarë botën. 228 00:08:39,960 --> 00:08:43,000 Dhe kjo ishte një fotografi bitmap, BMP. 229 00:08:43,000 --> 00:08:47,690 Dhe një fotografi bitmap, si ju do të shihni tjetër javë, thjesht do të thotë një model i dots, 230 00:08:47,690 --> 00:08:51,710 pixels si ata janë quajtur, një hartë në copa, me të vërtetë. 231 00:08:51,710 --> 00:08:55,160 >> Pra, çfarë është interesante, edhe pse, në lidhje me këtë format file, BMP, është 232 00:08:55,160 --> 00:08:58,590 që nën kapuç, atë ka më shumë se vetëm tre bytes 233 00:08:58,590 --> 00:09:01,020 që kompozoj header e saj, në mënyrë të flasin, e disa kafshon e para. 234 00:09:01,020 --> 00:09:03,330 Ajo në fakt duket pak komplikuar në shikim të parë. 235 00:09:03,330 --> 00:09:04,704 Dhe ju do të shihni këtë në setin P. 236 00:09:04,704 --> 00:09:06,810 Dhe për të gjetur diçka nga të veçantë të kësaj tani 237 00:09:06,810 --> 00:09:10,720 nuk është aq e rëndësishme, sa vetëm fakti që në fillim të çdo bitmap 238 00:09:10,720 --> 00:09:13,823 fotografi, një format grafik, ka një bandë e tërë e numrave. 239 00:09:13,823 --> 00:09:14,980 240 00:09:14,980 --> 00:09:16,720 >> Tani Microsoft, autor i këtij formati, 241 00:09:16,720 --> 00:09:18,820 ka tendencë për të thirrur ata Gjërat nuk Ints dhe chars 242 00:09:18,820 --> 00:09:22,259 dhe gjithandej, por fjalët dhe d fjalët dhe longs dhe bytes. 243 00:09:22,259 --> 00:09:23,800 Pra, ata janë vetëm lloje të ndryshme të të dhënave. 244 00:09:23,800 --> 00:09:25,170 Ata janë emra të ndryshëm për të njëjtën gjë. 245 00:09:25,170 --> 00:09:26,740 Por ju do të shihni se në P Set Katër. 246 00:09:26,740 --> 00:09:31,450 >> Por kjo është vetëm për të thënë se në qoftë se një njeri dy klikimeve disa fotografi bmp në e tij 247 00:09:31,450 --> 00:09:35,015 ose hard drive e saj, dhe një dritare hapet up duke treguar atë që e imazhit, 248 00:09:35,015 --> 00:09:38,500 se ka ndodhur për shkak të operimit sistemi me sa duket vënë re jo vetëm 249 00:09:38,500 --> 00:09:41,460 file extension bmp në emrin e file, 250 00:09:41,460 --> 00:09:45,010 por edhe fakti se ka disa konventë në modelin e copa 251 00:09:45,010 --> 00:09:47,490 në fillim e këtë dosje bitmap. 252 00:09:47,490 --> 00:09:50,270 >> Por le të tani të përqëndrohet në tillë një fotografi e komplikuar, 253 00:09:50,270 --> 00:09:52,120 por në vend të kësaj në diçka si kjo. 254 00:09:52,120 --> 00:09:55,190 Supozoni këtu në Gedit, unë vetëm kanë fillimet 255 00:09:55,190 --> 00:09:57,070 i një programi që është shumë e thjeshtë. 256 00:09:57,070 --> 00:09:58,860 Unë kam marrë disa përfshin deri të lartë. 257 00:09:58,860 --> 00:10:02,120 Tani unë kam marrë # Include "structs.h", por Unë do të kthehem në se në një moment. 258 00:10:02,120 --> 00:10:03,974 Por kjo është e dobishme për tani. 259 00:10:03,974 --> 00:10:05,890 Pra, ky është një program që do të zbatojë 260 00:10:05,890 --> 00:10:07,335 si bazën e të dhënave të gjendjes civile. 261 00:10:07,335 --> 00:10:09,710 Pra, një bazë të dhënash e studentëve, dhe çdo studenti në botë 262 00:10:09,710 --> 00:10:13,190 ka një emër dhe një shtëpi dhe ndoshta disa sende të tjera, por ne do të mbani atë të thjeshtë. 263 00:10:13,190 --> 00:10:15,140 Çdo nxënës ka një emër dhe një shtëpi. 264 00:10:15,140 --> 00:10:17,700 >> Pra, nëse kam kërkuar të shkruaj një Programi qëllimi i të cilit në jetë 265 00:10:17,700 --> 00:10:19,860 ishte vetëm për të iterate nga zero për deri në tre, 266 00:10:19,860 --> 00:10:22,070 në qoftë se ka tre studentë në Universitetin e Harvardit. 267 00:10:22,070 --> 00:10:25,350 Dhe unë vetëm dua të të marrë, duke përdorur GetString, emrin e studentit dhe shtëpi, 268 00:10:25,350 --> 00:10:26,600 dhe pastaj vetëm të shtypura ato jashtë. 269 00:10:26,600 --> 00:10:28,630 >> Kjo është lloj si Javës Një, Java Dy gjëra tani, 270 00:10:28,630 --> 00:10:30,810 ku unë vetëm dua një për loop ose diçka të tillë. 271 00:10:30,810 --> 00:10:34,500 Dhe unë dua të thërrasë GetString disa herë, dhe pastaj të shtypura f disa herë. 272 00:10:34,500 --> 00:10:37,340 Pra, si mund të bëj këtë, edhe pse, kur të dyja një emër dhe një shtëpi 273 00:10:37,340 --> 00:10:39,070 janë të përfshirë për çdo student? 274 00:10:39,070 --> 00:10:42,830 >> Pra instinkti im i parë mund të jetë për të bërë diçka si kjo. 275 00:10:42,830 --> 00:10:49,620 Unë mund të them së pari, dhe, më jepni, thonë, një rrjet të strings quajtur emra. 276 00:10:49,620 --> 00:10:51,530 Dhe unë nuk dua një hardcode tre këtu. 277 00:10:51,530 --> 00:10:53,064 Çfarë dua të vënë atje? 278 00:10:53,064 --> 00:10:55,730 Pra STUDENTËT, sepse kjo është vetëm një konstante deklaruar në krye, 279 00:10:55,730 --> 00:10:57,860 vetëm kështu që unë nuk duhet të hardcode tre në vende të shumta. 280 00:10:57,860 --> 00:11:00,859 Në këtë mënyrë, unë mund të ndryshojë atë një vend, dhe kjo ndikon në ndryshimin kudo. 281 00:11:00,859 --> 00:11:04,470 Dhe pastaj, unë mund të bëj string shtëpi STUDENTËT. 282 00:11:04,470 --> 00:11:10,250 >> Dhe tani, unë mund të bëjë diçka si për (int i = 0; i 00:11:14,390 Kështu që unë jam i shtypur të shpejtë, por kjo është ndoshta Sintaksa njohur tani. 284 00:11:14,390 --> 00:11:17,030 >> Dhe tani, kjo ishte më shumë kohëve të fundit. 285 00:11:17,030 --> 00:11:22,890 Nëse unë dua të vënë në i-th Emri i studentit, unë mendoj se kam bërë këtë. 286 00:11:22,890 --> 00:11:26,480 Dhe pastaj, jo emrat por shtëpitë kllapa i. 287 00:11:26,480 --> 00:11:29,930 Bëj këtë, GetString, dhe le shkoj mbrapa dhe të rregulluar këtë linjë. 288 00:11:29,930 --> 00:11:30,430 Pajtohem? 289 00:11:30,430 --> 00:11:31,200 Nuk pajtohem? 290 00:11:31,200 --> 00:11:32,366 Kjo nuk është shumë përdorues-miqësor. 291 00:11:32,366 --> 00:11:33,890 Unë nuk e kam thënë përdoruesit se çfarë të bëjë. 292 00:11:33,890 --> 00:11:36,520 >> Por tani, në qoftë se unë edhe kërkuar për më vonë, le të 293 00:11:36,520 --> 00:11:40,060 të themi, të shkruar këto gjëra out-- kështu TODO vonë. 294 00:11:40,060 --> 00:11:42,330 Unë do të bëjë më shumë me this-- kjo ndoshta IS 295 00:11:42,330 --> 00:11:45,970 një zbatimi korrekt i duke marrë emrat dhe shtëpi, tre 296 00:11:45,970 --> 00:11:48,870 e tyre e përgjithshme secili, nga një përdorues. 297 00:11:48,870 --> 00:11:51,280 >> Por kjo nuk është dizajn shumë e mirë, e drejtë? 298 00:11:51,280 --> 00:11:55,220 Po në qoftë se një student ka jo vetëm një emër dhe një shtëpi, por edhe një numër ID, 299 00:11:55,220 --> 00:11:57,770 dhe një numër telefoni, dhe një adresë e-mail, 300 00:11:57,770 --> 00:12:00,280 dhe ndoshta një faqe në shtëpi, dhe ndoshta një të trajtojë Twitter, 301 00:12:00,280 --> 00:12:03,730 dhe çdo numër të detaje të tjera lidhur me një student ose një person, 302 00:12:03,730 --> 00:12:04,610 në përgjithësi. 303 00:12:04,610 --> 00:12:07,720 Si do të fillojë për të shtuar funksionalitetin për këtë program? 304 00:12:07,720 --> 00:12:14,080 >> E pra, unë ndjehem si mënyrë më të thjeshtë mund të jetë për të bërë diçka si, le të themi, 305 00:12:14,080 --> 00:12:16,490 int IDS STUDENTËT. 306 00:12:16,490 --> 00:12:18,380 Kështu që unë mund të vënë të gjitha kartat e identitetit e tyre në atje. 307 00:12:18,380 --> 00:12:22,240 Dhe pastaj, për diçka si numrat e telefonit, 308 00:12:22,240 --> 00:12:24,400 Unë nuk jam i sigurt se si të paraqesin se vetëm ende. 309 00:12:24,400 --> 00:12:30,280 Pra, le të shkojnë përpara dhe të vetëm thirrje kjo Twitters STUDENTËT, të cilat 310 00:12:30,280 --> 00:12:33,550 është pak e çuditshme, but-- dhe një bandë më shumë fusha. 311 00:12:33,550 --> 00:12:36,360 >> Unë kam filluar të në mënyrë efektive kopjoni dhe ngjisni këtu. 312 00:12:36,360 --> 00:12:39,416 Dhe kjo do të rritet mjaft ngathët shumë shpejt, e drejtë? 313 00:12:39,416 --> 00:12:42,290 A nuk do të ishte mirë nëse do të kishte në botë e njohur një strukturë e të dhënave 314 00:12:42,290 --> 00:12:45,600 jo si një int ose një varg, por diçka nivel më të lartë, një abstraksion, kështu 315 00:12:45,600 --> 00:12:47,570 për të folur, i njohur si një student? 316 00:12:47,570 --> 00:12:50,220 C nuk ka ardhur me të ndërtuar në funksionalitetin për studentët, 317 00:12:50,220 --> 00:12:52,260 por çka nëse kam kërkuar për të dhënë atë të tillë? 318 00:12:52,260 --> 00:12:55,640 >> E pra, ajo rezulton, unë jam duke shkuar për të të hapur një skedar të quajtur structs.h këtu, 319 00:12:55,640 --> 00:12:57,090 dhe ju mund të bëjë pikërisht këtë. 320 00:12:57,090 --> 00:12:58,290 Dhe ne jemi duke shkuar për të fillojnë të bëjnë këtë tani. 321 00:12:58,290 --> 00:13:01,490 Dhe nën kapuç e P Set Tre, ju keni qenë tashmë duke bërë këtë tani. 322 00:13:01,490 --> 00:13:05,920 Nuk ka gjë të tillë si një g rect ose një g ovale në gjuhën e programimit C. 323 00:13:05,920 --> 00:13:10,570 >> Folks në Stanford zbatuar ato lloje të të dhënave duke përdorur këtë qasje këtu, 324 00:13:10,570 --> 00:13:13,900 duke deklaruar të dhënat e tyre të ri Llojet duke përdorur një fjalen ri 325 00:13:13,900 --> 00:13:16,744 quajtur struct dhe një tjetër e quajtur typedef. 326 00:13:16,744 --> 00:13:19,660 Dhe me të vërtetë, edhe pse sintaksë duket pak e ndryshme nga sende 327 00:13:19,660 --> 00:13:23,550 ne kemi parë më parë, në parim, kjo është super e thjeshtë. 328 00:13:23,550 --> 00:13:25,297 >> Kjo thjesht do të thotë "të përcaktuar një lloj." 329 00:13:25,297 --> 00:13:27,255 Kjo do të jetë një struktura, dhe një strukturë 330 00:13:27,255 --> 00:13:29,400 është vetëm si një enë për gjëra të shumta. 331 00:13:29,400 --> 00:13:31,780 Dhe kjo strukturë është duke shkuar që të ketë një varg të quajtur emrin, 332 00:13:31,780 --> 00:13:33,210 dhe një varg të quajtur shtëpi. 333 00:13:33,210 --> 00:13:37,520 Dhe le të thërrasë, vetëm për lehtësi, tërë ky student Struktura e të dhënave. 334 00:13:37,520 --> 00:13:40,320 >> Pra, në momentin që ju të merrni për të pikëpresje, ju keni tani 335 00:13:40,320 --> 00:13:43,280 krijuar të dhënat tuaj Lloji i quajtur studenti 336 00:13:43,280 --> 00:13:46,420 që tani qëndron së bashku int, dhe noton, dhe char, dhe string, 337 00:13:46,420 --> 00:13:50,270 dhe g rect, dhe g ovale, dhe çdo numër e gjëra të tjera njerëzit kanë shpikur. 338 00:13:50,270 --> 00:13:53,340 >> Pra, çfarë është e dobishme në lidhje me këtë tani është se në qoftë se unë kthehem 339 00:13:53,340 --> 00:13:57,430 të struct 0 dhe të përfundojë kjo zbatimi, të cilat kam shkruar 340 00:13:57,430 --> 00:14:02,080 paraprakisht këtu, vini re se të gjitha i Çrregullia pashmangshme që 341 00:14:02,080 --> 00:14:05,490 ishte gati të fillojnë të ndodhin, si kam shtuar numrat e telefonit dhe Twitters dhe të gjitha 342 00:14:05,490 --> 00:14:07,370 këto gjëra të tjera për të Përkufizimi studentit, 343 00:14:07,370 --> 00:14:11,810 tani ajo përfundoi në mënyrë të përmbledhur deri si vetëm një grup të nxënësve. 344 00:14:11,810 --> 00:14:15,500 >> Dhe secili prej atyre nxënësve tani ka gjëra të shumta në brendësi të tij. 345 00:14:15,500 --> 00:14:16,930 Kështu që vetëm lë një pyetje. 346 00:14:16,930 --> 00:14:19,700 Si mund të merrni në emër, dhe shtëpia, dhe ID, 347 00:14:19,700 --> 00:14:21,640 dhe çdo gjë tjetër është e brenda e studentit? 348 00:14:21,640 --> 00:14:22,930 Super thjeshtë, si edhe. 349 00:14:22,930 --> 00:14:25,730 Sintaksa e re, por një ide e thjeshtë. 350 00:14:25,730 --> 00:14:29,239 >> Ju thjesht indeksi në grup, siç bëmë javën e kaluar dhe këtë. 351 00:14:29,239 --> 00:14:31,030 Dhe çfarë është në mënyrë të qartë copë e re e sintaksës? 352 00:14:31,030 --> 00:14:32,590 353 00:14:32,590 --> 00:14:35,880 Vetëm., Që do të thotë "të shkojnë brenda Struktura dhe merrni fushë të quajtur 354 00:14:35,880 --> 00:14:39,030 Emri, të marrë në fushë të quajtur shtëpi, të marrë në fushë të quajtur studenti. " 355 00:14:39,030 --> 00:14:41,940 >> Pra, në P Set Tre, nëse ju jeni të ende duke punuar në këtë, 356 00:14:41,940 --> 00:14:44,020 dhe shumica e njerëzve ende janë, kuptojnë se si ju 357 00:14:44,020 --> 00:14:46,130 filloni duke përdorur gjëra të tilla si g rects dhe g ovale 358 00:14:46,130 --> 00:14:50,201 dhe gjëra të tjera që nuk duket të vijnë nga Java Zero, Një ose dy, 359 00:14:50,201 --> 00:14:52,950 të kuptojë se kjo është për shkak se Stanford deklaruar disa lloje të reja të të dhënave. 360 00:14:52,950 --> 00:14:56,160 >> Dhe me të vërtetë, kjo është pikërisht ajo që ne do të të bëjë, si dhe, në P Set Four, kur 361 00:14:56,160 --> 00:14:59,880 ne të fillojnë të merren me gjëra të si imazhe, bitmaps, dhe më shumë. 362 00:14:59,880 --> 00:15:02,882 Pra, kjo është vetëm një ngacmues dhe një Modeli mendore për atë që është për të ardhur. 363 00:15:02,882 --> 00:15:04,590 Tani, unë zvarritur pak këtë mëngjes. 364 00:15:04,590 --> 00:15:09,560 Unë kam qenë lloj kurioz për të parë se çfarë letër-muri Microsoft në fakt 365 00:15:09,560 --> 00:15:10,310 duket si sot. 366 00:15:10,310 --> 00:15:15,200 Dhe del dikush në 2006 në fakt shkoi në pothuajse saktësisht 367 00:15:15,200 --> 00:15:19,210 njëjti vend për të fotografuar në realitet atë që duket si se këto ditë. 368 00:15:19,210 --> 00:15:21,380 Fushë është tani pak më i madh. 369 00:15:21,380 --> 00:15:24,850 >> Pra, duke folur tani e imazheve, le të sjellë përsëri Daven këtu 370 00:15:24,850 --> 00:15:26,890 në ekran dhe Nikollës, dhe vetëm të ju kujtoj 371 00:15:26,890 --> 00:15:30,540 se në qoftë se ju dëshironi që të bashkohen me ne për drekë kjo e premte, kreu të zakonshme URL tonë 372 00:15:30,540 --> 00:15:31,440 këtu. 373 00:15:31,440 --> 00:15:33,530 >> Pra, ku nuk e kemi lënë jashtë të hënën? 374 00:15:33,530 --> 00:15:35,140 Ne kemi prezantuar këtë problem, apo jo? 375 00:15:35,140 --> 00:15:37,610 Kjo ishte me sa duket një saktë zbatimi i swap, 376 00:15:37,610 --> 00:15:40,460 ku ju duke marrë dy ints, e quajtur, e quajtur b, 377 00:15:40,460 --> 00:15:44,130 shkëmbim të tyre, ashtu si Laura bëri këtu në skenë me qumësht dhe ujë, 378 00:15:44,130 --> 00:15:46,820 duke përdorur një të përkohshme variable, ose një kupë bosh, 379 00:15:46,820 --> 00:15:50,540 në mënyrë që ne mund të vënë b në një dhe një in b pa bërë një rrëmujë e gjërave. 380 00:15:50,540 --> 00:15:51,560 Ne kemi përdorur një ndryshore. 381 00:15:51,560 --> 00:15:52,870 Ajo që quhet temp. 382 00:15:52,870 --> 00:15:55,520 >> Por, ajo që ishte themelore Problemi me këtë kod të hënën? 383 00:15:55,520 --> 00:15:57,700 384 00:15:57,700 --> 00:15:58,870 Cili ishte problemi këtu? 385 00:15:58,870 --> 00:16:00,106 386 00:16:00,106 --> 00:16:00,605 Po. 387 00:16:00,605 --> 00:16:01,970 >> Audienca: Ajo merr më shumë hapësirë. 388 00:16:01,970 --> 00:16:04,719 >> DAVID J. Malan: Merr më shumë hapësirë, sepse unë jam duke përdorur një ndryshore, 389 00:16:04,719 --> 00:16:05,400 dhe kjo është OK. 390 00:16:05,400 --> 00:16:07,300 Kjo është e vërtetë, por unë jam i do të thotë kjo është në rregull. 391 00:16:07,300 --> 00:16:10,030 Është vetëm 32 bit në madh Skema e gjërave, kështu që nuk është një punë e madhe. 392 00:16:10,030 --> 00:16:10,655 Mendime të tjera? 393 00:16:10,655 --> 00:16:12,572 Audienca: Ajo vetëm këmbime variablat nivel lokal. 394 00:16:12,572 --> 00:16:13,571 DAVID J. Malan: Pikërisht. 395 00:16:13,571 --> 00:16:15,090 Ajo vetëm këmbime e variablave në nivel lokal. 396 00:16:15,090 --> 00:16:18,173 Për shkak se çdo herë që të thërrasë një function-- kur kam pasur tabaka nga Annenberg 397 00:16:18,173 --> 00:16:19,840 Herën e fundit, ju keni kryesor në pjesën e poshtme. 398 00:16:19,840 --> 00:16:23,560 Sa më shpejt që ju e quani një funksion të quajtur swap, swap-i nuk ka marrë x dhe y, 399 00:16:23,560 --> 00:16:24,400 vlerat origjinale. 400 00:16:24,400 --> 00:16:26,392 Çfarë ka marrë swap, e ne të pretendojnë? 401 00:16:26,392 --> 00:16:27,100 Audienca: Kopjet. 402 00:16:27,100 --> 00:16:28,090 DAVID J. Malan: Pra, kopjet e tyre. 403 00:16:28,090 --> 00:16:31,120 Pra, ajo merr një dhe dy, në qoftë se ju kujtojnë shembullin nga koha e kaluar, 404 00:16:31,120 --> 00:16:34,730 por një kopje e një dhe dy që janë swapped sukses. 405 00:16:34,730 --> 00:16:38,550 Por për fat të keq në fund, ato vlera janë ende të njëjta. 406 00:16:38,550 --> 00:16:41,880 Pra, ne mund të shohim këtë me tonë mik të ri, shpresë Gdb, 407 00:16:41,880 --> 00:16:45,180 se ju ose TFS dhe Ca-së kanë qenë e ju do të udhëheqin drejt si vijon. 408 00:16:45,180 --> 00:16:51,210 >> Pra nuk ka risjell swap duket like-- le të hapur deri this-- duket si kjo. 409 00:16:51,210 --> 00:16:54,160 Ne niset x për një, y për të dy. 410 00:16:54,160 --> 00:16:55,620 Sikur një bandë e shtypura f-së. 411 00:16:55,620 --> 00:16:58,080 Por më pas, thirrjes këtu ishte që të bie në ujdi, e cila 412 00:16:58,080 --> 00:17:00,260 është pikërisht kodi ne vetëm e pa një moment më parë. 413 00:17:00,260 --> 00:17:03,180 Cila është e saktë në fillim shikim, por funksionale, 414 00:17:03,180 --> 00:17:06,800 ky program nuk funksionon, për shkak se ajo nuk permanente shkëmbim X dhe Y. 415 00:17:06,800 --> 00:17:10,190 >> Pra, le të shohim këtë, një të ngrohtë të shpejtë deri këtu me Gdb, një ./noswap. 416 00:17:10,190 --> 00:17:11,867 417 00:17:11,867 --> 00:17:15,200 Një bandë e informacionit të madhe se Unë do të të shpëtoj prej me Kontrollit L tani për tani. 418 00:17:15,200 --> 00:17:17,516 Dhe tani, unë jam duke shkuar për të të shkojnë përpara dhe të drejtuar atë. 419 00:17:17,516 --> 00:17:19,349 Dhe për fat të keq, që nuk ishte se i dobishëm. 420 00:17:19,349 --> 00:17:22,355 Ajo u zhvillua programin brenda kësaj Programi quhet Gdb, një Rregullues, 421 00:17:22,355 --> 00:17:23,730 por ajo nuk e lejoni të thes rreth. 422 00:17:23,730 --> 00:17:26,229 >> Pra, si mund unë në fakt pauzë ekzekutimi brenda këtij programi? 423 00:17:26,229 --> 00:17:27,410 424 00:17:27,410 --> 00:17:28,329 Pra pushim. 425 00:17:28,329 --> 00:17:32,340 Dhe unë mund të thyejnë në ndonjë Linja numër, një, 10, 15. 426 00:17:32,340 --> 00:17:35,530 Por unë mund të thyejnë simbolikisht duke thënë pushim Main. 427 00:17:35,530 --> 00:17:38,980 Dhe kjo po ndodh për të vendosur një pushim pikë, me sa duket në linjë 16 në kryesore. 428 00:17:38,980 --> 00:17:40,050 Dhe ku është linjë 16? 429 00:17:40,050 --> 00:17:42,960 Le të shkojmë deri në kodin dhe të shkojnë deri në noswap. 430 00:17:42,960 --> 00:17:46,930 Dhe me të vërtetë, linja 16 është e parë në program. 431 00:17:46,930 --> 00:17:52,130 >> Deri tani, në qoftë se unë të shkojnë përpara dhe lloji drejtuar këtë herë, Enter, ajo ndaluar. 432 00:17:52,130 --> 00:17:53,080 Pra, le të thes rreth. 433 00:17:53,080 --> 00:17:55,716 Print x-- pse është x zero? 434 00:17:55,716 --> 00:17:56,705 435 00:17:56,705 --> 00:17:57,830 Dhe injorojnë shenjë dollar. 436 00:17:57,830 --> 00:17:59,725 Kjo është vetëm për njohës Përdorimi i programit. 437 00:17:59,725 --> 00:18:00,780 438 00:18:00,780 --> 00:18:03,140 Pse është x zero në këtë moment? 439 00:18:03,140 --> 00:18:03,640 Po. 440 00:18:03,640 --> 00:18:07,061 >> Audienca: Ajo heshti e drejtë para se të Linja 16, jo të vërtetë në linjë 16. 441 00:18:07,061 --> 00:18:08,060 DAVID J. Malan: Pikërisht. 442 00:18:08,060 --> 00:18:11,630 Gdb, si parazgjedhje, ka ndaluar Ekzekutimi i vetëm para linjë 16. 443 00:18:11,630 --> 00:18:14,820 Pra, ajo nuk e ka ekzekutuar, i cili do të thotë x është i një vlere të panjohur. 444 00:18:14,820 --> 00:18:17,150 Dhe ne mori me fat që është e diçka të pastër si zero. 445 00:18:17,150 --> 00:18:20,310 Deri tani, nëse unë lloji tjetër, tani ajo ekzekutuar 16. 446 00:18:20,310 --> 00:18:22,000 Është duke pritur për mua për të ekzekutuar 17. 447 00:18:22,000 --> 00:18:23,400 Më lejoni të shkojnë përpara dhe të shtypura x. 448 00:18:23,400 --> 00:18:24,094 Kjo është një. 449 00:18:24,094 --> 00:18:25,260 Më lejoni të shkojnë përpara dhe y të shtypura. 450 00:18:25,260 --> 00:18:26,176 Çfarë duhet të shikoni tani? 451 00:18:26,176 --> 00:18:27,660 452 00:18:27,660 --> 00:18:28,560 >> Audienca: [padëgjueshme] 453 00:18:28,560 --> 00:18:29,165 >> DAVID J. Malan: Një louder pak. 454 00:18:29,165 --> 00:18:30,040 >> Audienca: [padëgjueshme] 455 00:18:30,040 --> 00:18:30,537 456 00:18:30,537 --> 00:18:32,120 DAVID J. Malan: Jo mjaft e një konsensusi. 457 00:18:32,120 --> 00:18:34,760 Pra, po, ne shohim disa vlera e mbeturinave. 458 00:18:34,760 --> 00:18:37,862 Tani, y është 134514064 atje. 459 00:18:37,862 --> 00:18:39,320 E pra, kjo është vetëm disa vlera e mbeturinave. 460 00:18:39,320 --> 00:18:41,350 Programi im përdor RAM për qëllime të ndryshme. 461 00:18:41,350 --> 00:18:42,350 Ka funksione të tjera. 462 00:18:42,350 --> 00:18:44,040 Njerëz të tjerë shkroi brenda kompjuterin tim. 463 00:18:44,040 --> 00:18:46,789 Pra, ato copa janë përdorur për vlera të tjera, dhe çfarë unë jam duke parë 464 00:18:46,789 --> 00:18:49,470 është mbeturinat e disa Përdorimi para të atij kujtesës. 465 00:18:49,470 --> 00:18:53,350 >> Pra, nuk është e madhe, sepse sa më shpejt si unë lloji tjetër dhe pastaj të shtypura y, 466 00:18:53,350 --> 00:18:55,640 është e inicializuar me vlera që unë dua. 467 00:18:55,640 --> 00:18:57,400 Deri tani, le të shkojë përpara pak më të shpejtë. 468 00:18:57,400 --> 00:18:58,540 N për të ardhshëm. 469 00:18:58,540 --> 00:18:59,570 Le të bëjë atë përsëri. 470 00:18:59,570 --> 00:19:00,530 Le të bëjë atë përsëri. 471 00:19:00,530 --> 00:19:02,404 Por unë nuk dua të goditur kjo këtu, sepse në qoftë se unë 472 00:19:02,404 --> 00:19:05,110 duan të shohin se çfarë po ndodh brenda e swap, çfarë është komanda? 473 00:19:05,110 --> 00:19:05,520 >> Audienca: hapa. 474 00:19:05,520 --> 00:19:06,436 >> DAVID J. Malan: hapa. 475 00:19:06,436 --> 00:19:09,800 Pra, kjo hapa mua në një funksion, në vend se mbi të. 476 00:19:09,800 --> 00:19:12,270 Dhe tani, është pak i fshehtë sinqerisht, por kjo është vetëm 477 00:19:12,270 --> 00:19:14,581 thënë mua unë jam në linjë 33 tani. 478 00:19:14,581 --> 00:19:15,580 Dhe le ta bëjmë këtë përsëri. 479 00:19:15,580 --> 00:19:16,080 Printo temp. 480 00:19:16,080 --> 00:19:17,129 481 00:19:17,129 --> 00:19:20,170 Vlera e mbeturinave, negative këtë herë, por kjo është vetëm ende një vlerë të mbeturinave. 482 00:19:20,170 --> 00:19:22,810 Pra, le të bëjë tjetër, temp të shtypura. 483 00:19:22,810 --> 00:19:27,130 Është nisur me 1, e cila ishte vlera e x, aka a. 484 00:19:27,130 --> 00:19:29,110 >> Tani, ku janë tonë një dhe x vjen nga? 485 00:19:29,110 --> 00:19:32,510 E pra, njoftim kryesore, ne quajtur këto vlerat x dhe y. 486 00:19:32,510 --> 00:19:34,740 Ne pastaj kaloi ato në shkëmbim si në vijim. 487 00:19:34,740 --> 00:19:37,010 X arriti i pari, y presje. 488 00:19:37,010 --> 00:19:40,020 Dhe pastaj, swap mund të telefononi ata x dhe y. 489 00:19:40,020 --> 00:19:42,630 Por për qartësi, është e duke i quajtur ato një dhe b. 490 00:19:42,630 --> 00:19:45,970 Por a dhe b tani do të jenë të kopje të x dhe y, respektivisht. 491 00:19:45,970 --> 00:19:50,660 >> Pra, nëse unë kthehem në Gdb, temp është tashmë një dhe a është tashmë e. 492 00:19:50,660 --> 00:19:56,130 Por nëse i bëj tjetër dhe tani bëjnë të shtypura a, a tashmë është lëvizur gjatë. 493 00:19:56,130 --> 00:20:00,030 Qumështi është derdhur në ish- gotë lëng portokalli-së, ose anasjelltas. 494 00:20:00,030 --> 00:20:04,750 >> Dhe në qoftë se unë bëj tjetër përsëri, dhe tani në qoftë se unë të shtypura nga si një kontroll mendje e shëndoshë, 495 00:20:04,750 --> 00:20:07,687 një është ende dy, por b është tani një. 496 00:20:07,687 --> 00:20:08,770 Sinqerisht, është ende atje. 497 00:20:08,770 --> 00:20:10,670 Unë nuk bëj kujdes atë temp është. 498 00:20:10,670 --> 00:20:16,850 Por sa më shpejt që unë tani lloji, le të themi, vazhdojnë të kthehen, tani unë jam në fund 499 00:20:16,850 --> 00:20:17,480 programi. 500 00:20:17,480 --> 00:20:20,730 Dhe për fat të keq, x është akoma një dhe y është ende dy. 501 00:20:20,730 --> 00:20:22,272 >> Pra, çfarë ishte shërbimeve të gdb atje? 502 00:20:22,272 --> 00:20:23,980 Ajo nuk e ka ndihmuar mua fix problemi në vetvete, 503 00:20:23,980 --> 00:20:26,265 por me shpresë të më ndihmojë kuptojnë atë duke e kuptuar 504 00:20:26,265 --> 00:20:30,000 se po, logjika ime është e drejtë, por kodi im nuk është në fund të fundit që ka 505 00:20:30,000 --> 00:20:31,450 një ndikim të përhershëm. 506 00:20:31,450 --> 00:20:34,570 Pra, kjo është një problem që ne jemi do të tani të zgjidhur sot. 507 00:20:34,570 --> 00:20:37,870 >> Por le të marrë atje me anë të kësaj. 508 00:20:37,870 --> 00:20:39,230 String është një gënjeshtër. 509 00:20:39,230 --> 00:20:41,860 Ajo, gjithashtu, nuk është një lloj i të dhënave që ekziston në C. Kjo është 510 00:20:41,860 --> 00:20:44,750 qenë sinonim për disa koha për diçka tjetër, 511 00:20:44,750 --> 00:20:47,300 dhe ne mund të zbulojnë se si më poshtë. 512 00:20:47,300 --> 00:20:53,282 >> Më lejoni të shkoj përpara dhe të hapur një program i quajtur krahasojnë-0. 513 00:20:53,282 --> 00:20:56,240 Dhe në vend se të shtypni këtë jashtë, ne do të fillojnë të ecin nëpër kodin 514 00:20:56,240 --> 00:20:58,040 Unë tashmë e ka shkruar, por kjo është vetëm disa rreshta. 515 00:20:58,040 --> 00:20:59,570 Pra, kjo është e krahasojnë-0. 516 00:20:59,570 --> 00:21:02,380 Dhe gjëja e parë që unë jam duke bërë po bëhet një linjë të tekstit. 517 00:21:02,380 --> 00:21:05,610 >> Por vini re atë që unë jam duke bërë për herë të parë. 518 00:21:05,610 --> 00:21:07,910 Çfarë është e ndryshme në mënyrë të qartë në lidhje me linjë 21? 519 00:21:07,910 --> 00:21:10,020 520 00:21:10,020 --> 00:21:11,402 Në fakt, prit një minutë. 521 00:21:11,402 --> 00:21:12,110 Kjo është kopje dy. 522 00:21:12,110 --> 00:21:13,568 Kjo nuk është edhe programi i drejtë. 523 00:21:13,568 --> 00:21:14,780 Në rregull, vigjilent spoiler. 524 00:21:14,780 --> 00:21:16,890 Në rregull, kështu që mos u mërzit se. 525 00:21:16,890 --> 00:21:18,520 Kjo është përgjigje për një pyetje të ardhmen. 526 00:21:18,520 --> 00:21:21,450 >> Këtu është e krahasoni-0, dhe unë jam i gati për të marrë një linjë të tekstit. 527 00:21:21,450 --> 00:21:22,435 Programi-së shumë më e thjeshtë. 528 00:21:22,435 --> 00:21:23,560 Pra, kjo është e drejtpërdrejtë. 529 00:21:23,560 --> 00:21:28,070 Kjo është si një javë, Week Dy sende në momentin. String s = GetString. 530 00:21:28,070 --> 00:21:29,700 Tani, unë them përsëri këtu. 531 00:21:29,700 --> 00:21:31,830 varg t = GetString. 532 00:21:31,830 --> 00:21:35,300 Dhe pastaj, gjëja e fundit në këtë program, si emrin e saj, 533 00:21:35,300 --> 00:21:37,090 po unë jam duke shkuar për të përpiqen për të krahasuar ato. 534 00:21:37,090 --> 00:21:40,709 >> Pra, nëse s, vargu i parë, barabartë = t, atëherë unë jam 535 00:21:40,709 --> 00:21:42,250 do të thonë se ju shkruani të njëjtën gjë. 536 00:21:42,250 --> 00:21:44,291 Tjetër, Unë jam duke shkuar për të thënë ju shkruani gjëra të ndryshme. 537 00:21:44,291 --> 00:21:45,880 Pra, le të përpilojnë dhe të drejtuar këtë program. 538 00:21:45,880 --> 00:21:48,481 Pra, ti krahasoni zero. 539 00:21:48,481 --> 00:21:48,980 Duket e mirë. 540 00:21:48,980 --> 00:21:50,490 Nuk ka gabime përmbledhje. 541 00:21:50,490 --> 00:21:52,386 >> Më lejoni të shkojnë përpara tani dhe lloji ./compare-0. 542 00:21:52,386 --> 00:21:55,230 543 00:21:55,230 --> 00:21:59,220 Më lejoni të shkojnë përpara dhe të thonë diçka : Daven dhe diçka: Rob. 544 00:21:59,220 --> 00:22:00,450 Dhe unë lloji gjëra të ndryshme. 545 00:22:00,450 --> 00:22:01,250 Deri më tani, në mënyrë të mirë. 546 00:22:01,250 --> 00:22:02,680 Programi duket të jetë e saktë. 547 00:22:02,680 --> 00:22:03,880 >> Por le të drejtuar atë përsëri. 548 00:22:03,880 --> 00:22:05,800 Thuaj diçka: Gabe. 549 00:22:05,800 --> 00:22:07,140 Thuaj diçka: Gabe. 550 00:22:07,140 --> 00:22:08,520 551 00:22:08,520 --> 00:22:09,020 Të gjithë të drejtë. 552 00:22:09,020 --> 00:22:10,851 Ndoshta unë goditi space bar apo diçka shokuar. 553 00:22:10,851 --> 00:22:11,600 Le të bëjë atë përsëri. 554 00:22:11,600 --> 00:22:13,020 Pra Zamyla. 555 00:22:13,020 --> 00:22:13,970 556 00:22:13,970 --> 00:22:14,470 Zamyla. 557 00:22:14,470 --> 00:22:15,740 558 00:22:15,740 --> 00:22:17,330 Gjëra të ndryshme. 559 00:22:17,330 --> 00:22:19,430 Pra, çfarë po ndodh? 560 00:22:19,430 --> 00:22:23,200 >> Pra, ne kemi këto dy linja e Kodi, GetString duke u quajtur dy herë. 561 00:22:23,200 --> 00:22:25,760 Dhe pastaj, unë jam thjesht duke u përpjekur për të krahasuar s dhe t. 562 00:22:25,760 --> 00:22:28,370 Por ajo që me të vërtetë, atëherë po ndodh? 563 00:22:28,370 --> 00:22:31,180 E pra, shkrim dore tim gati kasap këtë shembull disi. 564 00:22:31,180 --> 00:22:34,630 Dhe le të vërtetë të hedhin këtë deri këtu, si. 565 00:22:34,630 --> 00:22:37,390 566 00:22:37,390 --> 00:22:45,712 >> Pra, ne kemi një linjë si String s = GetString. 567 00:22:45,712 --> 00:22:48,295 Pra, kjo është thjesht e parë Linja interesante nga ky program. 568 00:22:48,295 --> 00:22:49,920 569 00:22:49,920 --> 00:22:52,974 Por ajo që e gjithë kjo kohë ka qenë ndodh nën kapuç? 570 00:22:52,974 --> 00:22:55,890 E pra, në të dorës së majtë anë është varg, e cila është një lloj ndryshore, 571 00:22:55,890 --> 00:22:56,785 dhe është quajtur s. 572 00:22:56,785 --> 00:23:00,019 Kështu që unë e di se kjo është duke përdorur kujtesën, ose RAM, në kompjuterin tim disi. 573 00:23:00,019 --> 00:23:02,060 Kështu që unë jam duke shkuar për të abstrakte barazim se si një shesh. 574 00:23:02,060 --> 00:23:04,820 32 bit, rezulton, por më shumë se në të ardhmen. 575 00:23:04,820 --> 00:23:06,410 Dhe pastaj, çfarë po ndodh këtu? 576 00:23:06,410 --> 00:23:08,700 >> E pra, GetString padyshim merr një varg nga përdoruesit. 577 00:23:08,700 --> 00:23:11,360 Dhe GetString mori Zamyla ose Gabe ose Daven. 578 00:23:11,360 --> 00:23:14,640 Pra, le të zgjedhin parë e atyre, që ishte Daven. 579 00:23:14,640 --> 00:23:19,174 Pra në mënyrë efektive, çfarë GetString mori më në këtë rast e parë është D-a-v-E-n. 580 00:23:19,174 --> 00:23:22,690 581 00:23:22,690 --> 00:23:25,045 Dhe pastaj, çfarë tjetër ka ajo më jep fshehurazi? 582 00:23:25,045 --> 00:23:25,920 Audienca: [padëgjueshme] 583 00:23:25,920 --> 00:23:28,720 DAVID J. Malan: Po, / 0 ose null karakter. 584 00:23:28,720 --> 00:23:30,550 Pra, në mënyrë efektive më dha një varg. 585 00:23:30,550 --> 00:23:34,550 Por ne tashmë e dimë nga e mëparshme duket se një varg është vetëm një grup 586 00:23:34,550 --> 00:23:37,895 të karaktereve, dhe është e ndërprerë nga ky karakter të veçantë sentinel, / 0. 587 00:23:37,895 --> 00:23:39,220 588 00:23:39,220 --> 00:23:42,310 >> Por nëse kjo është e vërtetë dhe kjo është një shesh, 589 00:23:42,310 --> 00:23:44,160 kjo është qartë një drejtkëndësh shumë më të madhe. 590 00:23:44,160 --> 00:23:46,830 Dhe në të vërtetë, kjo është, Unë pretendojnë, vetëm 32 bit. 591 00:23:46,830 --> 00:23:49,500 Dhe kjo është në mënyrë të qartë më shumë se 32 bit, sepse kjo është ndoshta 592 00:23:49,500 --> 00:23:51,583 tetë plus tetë plus tetë plus tetë plus tetë, 593 00:23:51,583 --> 00:23:53,320 vetëm për shkak të bytes në ASCII. 594 00:23:53,320 --> 00:23:57,030 Si dreq do të shkojmë për të përshtaten Daven në këtë kuti të vogël këtu? 595 00:23:57,030 --> 00:23:59,880 >> E pra, ajo që është GetString bërë në të vërtetë? 596 00:23:59,880 --> 00:24:03,680 E pra, ky rrjet këtu paraqet memorie kompjuteri tim ose RAM. 597 00:24:03,680 --> 00:24:07,564 Pra, le të themi në mënyrë arbitrare se nëse secili prej tyre perfaqeson nje bajt, 598 00:24:07,564 --> 00:24:09,730 atëherë ne mund të mendoj për secilin byte si ka një adresë, 599 00:24:09,730 --> 00:24:13,830 si 33 Rruga e Oksfordit, ose 34 Oxford Street, apo 35 Oxford Street. 600 00:24:13,830 --> 00:24:16,700 >> Pra, ashtu si shtëpitë kanë adresat dhe ndërtesat kanë adresat, 601 00:24:16,700 --> 00:24:19,810 kështu që të bëjë bytes individuale të kujtesës kanë adresat ose numrat 602 00:24:19,810 --> 00:24:21,042 që në mënyrë unike identifikimin e tyre. 603 00:24:21,042 --> 00:24:22,000 Tani, kjo është arbitrar. 604 00:24:22,000 --> 00:24:25,370 Por, për ta mbajtur atë të thjeshtë, unë jam duke shkuar për të përdorni hexadecimal vetëm nga konventa, 605 00:24:25,370 --> 00:24:28,200 por 0x do të thotë asgjë tjetër se "kjo është heksadecimal." 606 00:24:28,200 --> 00:24:31,030 dhe unë jam duke shkuar për të thonë se "D" përfundon në Byte Një në kujtesën. 607 00:24:31,030 --> 00:24:34,210 >> I kam asgjë tjetër ndodh në kujtesës, kështu Daven mori vendin e parë 608 00:24:34,210 --> 00:24:35,509 në Byte One. 609 00:24:35,509 --> 00:24:36,800 Kjo, pastaj, do të jetë 0x2. 610 00:24:36,800 --> 00:24:37,831 611 00:24:37,831 --> 00:24:38,705 Kjo do të 0x3. 612 00:24:38,705 --> 00:24:39,840 613 00:24:39,840 --> 00:24:41,800 Kjo do të jetë 0x4. 614 00:24:41,800 --> 00:24:43,025 Kjo do të 0x5. 615 00:24:43,025 --> 00:24:44,025 Kjo do të jetë 0x6. 616 00:24:44,025 --> 00:24:45,560 617 00:24:45,560 --> 00:24:48,290 >> Por sapo ju të fillojnë të mendojnë në lidhje me atë duke bërë të kompjuterit 618 00:24:48,290 --> 00:24:50,710 nën kapuç, ju mund të filloni për të dëshmoj 619 00:24:50,710 --> 00:24:54,960 si ju, disa vjet më parë, do të kanë zbatuar C vetvete. 620 00:24:54,960 --> 00:24:58,360 Çfarë është GetString ndoshta returning-- shkak të 621 00:24:58,360 --> 00:25:00,946 ndjehet si ajo nuk është kthyer Daven, në vetvete, 622 00:25:00,946 --> 00:25:03,320 sepse ai me siguri nuk do të përshtaten në këtë box-- pak 623 00:25:03,320 --> 00:25:05,090 kështu që ajo që është e GetString ndoshta kthyer? 624 00:25:05,090 --> 00:25:07,958 625 00:25:07,958 --> 00:25:08,920 >> Audienca: [padëgjueshme] 626 00:25:08,920 --> 00:25:10,540 >> DAVID J. Malan: Vendndodhja e Daven. 627 00:25:10,540 --> 00:25:12,770 Dhe kjo është bërë këtë ndonjëherë që Week One. 628 00:25:12,770 --> 00:25:16,150 Çfarë GetString është me të vërtetë kthimit nuk është një varg, në vetvete. 629 00:25:16,150 --> 00:25:17,780 Kjo është një nga gënjeshtrat e vogla të bardha. 630 00:25:17,780 --> 00:25:22,520 Është kthyer adresën e string në kujtesë, adresa unike. 631 00:25:22,520 --> 00:25:24,820 Daven jeton në 33 Oxford Street. 632 00:25:24,820 --> 00:25:29,310 Por më shumë shkurtimisht, Gavin jeton në 0x1, Adresa Number One. 633 00:25:29,310 --> 00:25:32,280 >> Pra, ajo që merr vënë në këtë pak kuti pastaj, të jetë i qartë, 634 00:25:32,280 --> 00:25:35,930 është vetëm adresa e atij vargut. 635 00:25:35,930 --> 00:25:38,110 Pra, e gjithë kjo kohë, kjo ka qenë në vazhdim e sipër. 636 00:25:38,110 --> 00:25:41,650 Por ajo që kjo lë të kuptohet se tani është se nëse të gjithë s ka 637 00:25:41,650 --> 00:25:44,710 është një numër në brendësi të saj, i cili është për të ndaluar ju, programues, 638 00:25:44,710 --> 00:25:47,970 nga vënë ndonjë numër në çdo ndryshueshme dhe vetëm duke kërcyer 639 00:25:47,970 --> 00:25:49,080 në atë copë e kujtesës? 640 00:25:49,080 --> 00:25:51,320 Dhe me të vërtetë, ne do të shohim që është një kërcënim herën tjetër. 641 00:25:51,320 --> 00:25:53,500 >> Por tani për tani, kjo ndihet pamjaftueshme. 642 00:25:53,500 --> 00:25:55,630 Nëse unë them, merrni mua një string, më jepni Daven. 643 00:25:55,630 --> 00:25:57,230 Por ju nuk duhet të vërtetë jepni Daven. 644 00:25:57,230 --> 00:25:59,310 Të gjithë ju më jepni është adresa Daven-së. 645 00:25:59,310 --> 00:26:04,310 Si mund ta dini me siguri ku Daven fillon dhe ends-- 646 00:26:04,310 --> 00:26:07,140 Historia e gjetjes weird-- ku Daven fillon dhe mbaron, 647 00:26:07,140 --> 00:26:10,435 dhe pastaj, tjetër string në memorie fillon? 648 00:26:10,435 --> 00:26:11,520 649 00:26:11,520 --> 00:26:13,620 >> E pra, nëse ju jeni të dorëzuar mua fillimi i Daven, 650 00:26:13,620 --> 00:26:17,230 në thelb, si mund ta di ku në fund të emrit të tij është? 651 00:26:17,230 --> 00:26:20,550 Ky karakter i veçantë null, e cila është e gjitha më e rëndësishme tani 652 00:26:20,550 --> 00:26:23,040 nëse vargjet nën të individualitet identifikohen thjesht 653 00:26:23,040 --> 00:26:25,820 në mënyrë unike nga vendndodhja e tyre në kujtesën. 654 00:26:25,820 --> 00:26:28,130 Pra, e gjithë kjo kohë, kjo është atë që është duke ndodhur. 655 00:26:28,130 --> 00:26:32,470 >> Pra, kur ne shohim tani në Kodi këtu, shpjegojnë 656 00:26:32,470 --> 00:26:35,790 në qoftë se ju do të bug në linjë 26. 657 00:26:35,790 --> 00:26:39,560 Pse është Zamyla dhe Zamyla ndryshme? 658 00:26:39,560 --> 00:26:41,330 Pse është Gabe dhe Gabe ndryshme? 659 00:26:41,330 --> 00:26:42,154 Po, në shpinë. 660 00:26:42,154 --> 00:26:43,390 >> Audienca: Ata kanë adresa të ndryshme. 661 00:26:43,390 --> 00:26:45,931 >> DAVID J. Malan: Thjesht sepse ata kanë adresa të ndryshme. 662 00:26:45,931 --> 00:26:48,820 Sepse kur ju telefononi GetString përsëri, të cilat unë do të bëj shpejt këtu, 663 00:26:48,820 --> 00:26:52,870 në qoftë se kjo është linja e dytë, string t, siç kam bërë në atë program, 664 00:26:52,870 --> 00:26:55,030 është e barabartë me një tjetër thirrje për GetString. 665 00:26:55,030 --> 00:26:56,370 666 00:26:56,370 --> 00:26:58,670 Herën tjetër unë e quaj GetString, unë jam duke shkuar 667 00:26:58,670 --> 00:27:00,190 për të marrë një copë të ndryshme të kujtesës. 668 00:27:00,190 --> 00:27:02,220 >> GetString lejohet të pyesni operative 669 00:27:02,220 --> 00:27:03,800 sistemi për më shumë dhe më shumë memorie. 670 00:27:03,800 --> 00:27:07,894 Kjo nuk do të ripërdorimin e njëjtë gjashtë bytes çdo herë të vetme. 671 00:27:07,894 --> 00:27:09,810 Ajo do të marrë një të re copë e kujtesës, e cila 672 00:27:09,810 --> 00:27:12,780 do të thotë t do të merrni disa vlera të tjera mbi këtu. 673 00:27:12,780 --> 00:27:15,380 >> Pra, kur të bëj s barabartë = t, ju nuk jeni të krahasuar 674 00:27:15,380 --> 00:27:17,880 D kundër kësaj dhe një kundër kjo dhe V kundër kësaj. 675 00:27:17,880 --> 00:27:19,588 Ju jeni duke e krahasuar këtë kundër kësaj, e cila 676 00:27:19,588 --> 00:27:24,020 sinqerisht është useless-- goxha useful-- është shumë e kotë, pasi që me të vërtetë 677 00:27:24,020 --> 00:27:25,830 kujdeset ku vargjet janë në kujtesën? 678 00:27:25,830 --> 00:27:26,850 >> Dhe me të vërtetë, ne nuk kemi. 679 00:27:26,850 --> 00:27:28,980 Dhe ne nuk jemi duke shkuar për fillojnë veçanërisht i kujdesshëm. 680 00:27:28,980 --> 00:27:34,180 Vetëm për aq sa mete mund të lindin dhe kërcënimet e sigurisë mund të lindin vullnetin 681 00:27:34,180 --> 00:27:36,100 ne fakt të fillojnë të kujdesen për këtë. 682 00:27:36,100 --> 00:27:37,230 Pra, le të rregulluar këtë problem. 683 00:27:37,230 --> 00:27:39,650 Rezulton, ju rregullohet super thjesht. 684 00:27:39,650 --> 00:27:42,600 >> Dhe le të vërtetë, para se unë tregojnë se përsëri, çfarë do 685 00:27:42,600 --> 00:27:47,170 të bëni në qoftë se në një klasë CS50, dhe keni pasur për të zbatuar 686 00:27:47,170 --> 00:27:48,600 një krahasim kundër dy vargjet. 687 00:27:48,600 --> 00:27:51,440 Ju në mënyrë të qartë nuk mund të përdorni vetëm s barabartë = t. 688 00:27:51,440 --> 00:27:54,090 Por vetëm logjikisht, sa do ta krahasojmë këtë varg 689 00:27:54,090 --> 00:27:56,370 kundër këtij vargut duke përdorur kodin e C? 690 00:27:56,370 --> 00:27:56,880 Po. 691 00:27:56,880 --> 00:27:58,780 >> Audienca: Vetëm të bëjë për lak [padëgjueshme] 692 00:27:58,780 --> 00:28:00,670 693 00:28:00,670 --> 00:28:01,670 DAVID J. Malan: Perfect. 694 00:28:01,670 --> 00:28:02,900 Audienca: [padëgjueshme] 695 00:28:02,900 --> 00:28:03,310 DAVID J. Malan: Po. 696 00:28:03,310 --> 00:28:05,390 Vetëm të përdorni një për lak ose një ndërsa lak apo çfarëdo. 697 00:28:05,390 --> 00:28:08,710 Por vetëm të aplikoni idenë themelore se në qoftë se kjo është një copë e kujtesës ose një grup 698 00:28:08,710 --> 00:28:11,590 dhe kjo është, iterate mbi dy në të njëjtën kohë. 699 00:28:11,590 --> 00:28:12,960 Dhe vetëm krahasoni letra. 700 00:28:12,960 --> 00:28:14,260 >> Dhe ju keni marrë të jetë një pak të kujdesshëm, sepse ju 701 00:28:14,260 --> 00:28:16,247 nuk duan një gisht të kaloj tjera 702 00:28:16,247 --> 00:28:18,080 sepse një varg është më gjatë se sa të tjera. 703 00:28:18,080 --> 00:28:21,380 Pra, ju jeni do të dëshironi të shikoni për kjo vlerë të veçantë në fund, null. 704 00:28:21,380 --> 00:28:24,017 Por kjo është me të vërtetë, në fund, aq e thjeshtë sa që. 705 00:28:24,017 --> 00:28:26,100 Dhe sinqerisht, ne nuk kemi nevojë për të reinvent timon atë. 706 00:28:26,100 --> 00:28:27,960 Këtu është Version Dy. 707 00:28:27,960 --> 00:28:32,910 Dhe ajo që unë jam duke shkuar për të thënë këtu është se në vend të krahasimit s barabartë = t, 708 00:28:32,910 --> 00:28:38,964 Unë jam në vend që do të them, nëse vargu krahasimi i s presje t barabartë = 0. 709 00:28:38,964 --> 00:28:40,130 Tani, çfarë është string krahasoni? 710 00:28:40,130 --> 00:28:43,046 >> Kjo rezulton, kjo është një funksion që vjen me C, qëllimi i të cilit në jetë 711 00:28:43,046 --> 00:28:44,650 është për të krahasuar dy vargjet. 712 00:28:44,650 --> 00:28:48,300 Dhe trazim të krahasuar, nëse lexojmë saj faqe apo dokumentacionin ose CS50 njeri 713 00:28:48,300 --> 00:28:50,630 referencë, ajo do të thjesht ju them se trazim 714 00:28:50,630 --> 00:28:55,730 krahasoni kthimit ose një negative Numri i ose një numër pozitiv ose zero, 715 00:28:55,730 --> 00:28:57,660 ku do të thotë zero ata janë të barabartë. 716 00:28:57,660 --> 00:28:58,570 >> Pra thjesht hamendje. 717 00:28:58,570 --> 00:29:00,390 Çfarë mund të thotë nëse llokoçis kthimit të krahasuar 718 00:29:00,390 --> 00:29:02,110 vlera negative apo vlera pozitive? 719 00:29:02,110 --> 00:29:02,785 720 00:29:02,785 --> 00:29:04,285 Audienca: Më e madhe ose më pak se. 721 00:29:04,285 --> 00:29:05,570 DAVID J. Malan: Po, madhe se ose më pak se. 722 00:29:05,570 --> 00:29:08,640 Pra, në qoftë se ju të kërkuar për të zgjidhur një tërësi bandë e vargjet në një dictionary-- 723 00:29:08,640 --> 00:29:12,975 si ne do përfundimisht poshtë road-- Funksioni i përsosur për të përdorur potencialisht, 724 00:29:12,975 --> 00:29:15,850 sepse kjo do të bëjë që krahasimi i strings për ju, dhe tregoni 725 00:29:15,850 --> 00:29:20,060 ju bën një vijë para b, ose bën b vijnë përpara një alfabetik. 726 00:29:20,060 --> 00:29:21,490 Ne mund të bëjë pikërisht këtë. 727 00:29:21,490 --> 00:29:23,620 >> Dhe njoftim kam bërë një tjetër gjë në këtë shembull. 728 00:29:23,620 --> 00:29:26,870 Çfarë tjetër ka ndryshuar më e lartë deri në këtë funksion kryesor? 729 00:29:26,870 --> 00:29:28,500 730 00:29:28,500 --> 00:29:29,350 Char *. 731 00:29:29,350 --> 00:29:31,150 Dhe kjo është se gënjeshtër tjetër bardhë. 732 00:29:31,150 --> 00:29:33,750 E gjithë kjo kohë, kur ju keni qenë i shkruar në varg, 733 00:29:33,750 --> 00:29:38,350 ne kemi qenë në fshehtësi rishkrimin string si char * në mënyrë që tingëllimë të vërtetë 734 00:29:38,350 --> 00:29:39,270 ju kupton. 735 00:29:39,270 --> 00:29:42,450 >> Me fjalë të tjera, në CS50.h dhe si ne do të shohim në fund, 736 00:29:42,450 --> 00:29:45,950 kemi bërë një sinonim i quajtur varg kjo është e njëjta gjë si char *. 737 00:29:45,950 --> 00:29:49,910 Dhe tani për tani, e di vetëm se *, Në këtë kontekst, të paktën, 738 00:29:49,910 --> 00:29:51,286 do të thotë adresën. 739 00:29:51,286 --> 00:29:52,210 >> Adresën e kujt? 740 00:29:52,210 --> 00:29:56,390 E pra, fakti që kam thënë char *, dhe nuk int * ose noton *, 741 00:29:56,390 --> 00:30:00,820 do të thotë se char * është adresa e një char. 742 00:30:00,820 --> 00:30:06,770 Pra, kjo kuti pak këtu, aka string, është me të vërtetë i tipit char *, 743 00:30:06,770 --> 00:30:10,490 e cila është thjesht një mënyrë e sofistikuar për të thënë, në këtë kuti do të shkojë një adresë. 744 00:30:10,490 --> 00:30:12,430 Dhe çfarë bën që adresa referohen? 745 00:30:12,430 --> 00:30:13,780 Me sa duket, një char. 746 00:30:13,780 --> 00:30:16,410 >> Por ne mund absolutisht kanë int * dhe gjëra të tjera. 747 00:30:16,410 --> 00:30:20,790 Por tani për tani, char * është me të vërtetë më e drejtpërdrejtë dhe një interes. 748 00:30:20,790 --> 00:30:23,310 Pra, ky problem është duke shkuar të rritet, edhe pse, përsëri. 749 00:30:23,310 --> 00:30:24,830 >> Supozoni I hapur këtë program. 750 00:30:24,830 --> 00:30:27,670 Le të shohim nëse tani ne mund të parashikojnë çfarë është e gabuar me këtë kod. 751 00:30:27,670 --> 00:30:31,140 Pra, në këtë program, kopje-0, unë jam duke shkuar për të shkuar përpara dhe përsëri e quajnë 752 00:30:31,140 --> 00:30:34,190 GetString dhe ruajtur vlerën në s. 753 00:30:34,190 --> 00:30:38,800 >> Dhe pastaj, pse jam unë duke bërë këtë, vetëm si një kujtim nga javët e fundit? 754 00:30:38,800 --> 00:30:40,960 Ne e bëmë të themi se GetString nganjëherë kthehet null. 755 00:30:40,960 --> 00:30:42,793 Çfarë do të thotë nëse GetString kthehet null? 756 00:30:42,793 --> 00:30:45,040 757 00:30:45,040 --> 00:30:46,034 Diçka shkoi keq. 758 00:30:46,034 --> 00:30:48,950 Kjo ndoshta do të thotë vargu është shumë e madhe, nga e kompjuterit e kujtesës. 759 00:30:48,950 --> 00:30:51,724 Kjo ndodh super, super, super rrallë, por kjo mund të ndodhë. 760 00:30:51,724 --> 00:30:53,890 Ne duam që të shikoni për të, dhe kjo është e gjitha ne jemi duke bërë. 761 00:30:53,890 --> 00:30:57,910 >> Sepse ne do të shohim tani, në qoftë se ju nuk e bëni filloni duke kontrolluar zakonisht për gjëra të 762 00:30:57,910 --> 00:31:00,870 si null, ju mund të në të vërtetë të fillojë për të shkuar 763 00:31:00,870 --> 00:31:03,106 për adresat në kujtesën që janë të pavlefshme. 764 00:31:03,106 --> 00:31:05,980 Dhe ju do të jeni për të filluar inducing gjithnjë e më shumë gabime segmentimit. 765 00:31:05,980 --> 00:31:08,360 Ose në një Mac apo PC, vetëm duke shkaktuar një kompjuter për të ul receptorin e telefonit 766 00:31:08,360 --> 00:31:10,340 ose një program për të ngrirë, potencialisht. 767 00:31:10,340 --> 00:31:14,930 >> Deri tani, unë pretendojnë në kopje-0.c, që unë jam duke shkuar për të kopjuar këto vargjet nga rruga 768 00:31:14,930 --> 00:31:15,685 i linjës 28. 769 00:31:15,685 --> 00:31:16,850 770 00:31:16,850 --> 00:31:18,750 Dhe pastaj, unë jam duke shkuar pretendimit në fund 771 00:31:18,750 --> 00:31:21,430 këtu që unë jam duke shkuar për të ndryshuar një prej tyre. 772 00:31:21,430 --> 00:31:22,330 >> Pra këtë njoftim. 773 00:31:22,330 --> 00:31:24,370 Unë jam duke e quajtur strlen tonë të vjetër mik. 774 00:31:24,370 --> 00:31:28,960 Dhe vetëm të shpjegojë në anglisht çfarë kjo linjë 34 është duke bërë? 775 00:31:28,960 --> 00:31:32,480 Çfarë do t kllapa 0 përfaqësojnë në të majtë. 776 00:31:32,480 --> 00:31:32,980 Po. 777 00:31:32,980 --> 00:31:34,339 >> Audienca: Karakteri i parë i t? 778 00:31:34,339 --> 00:31:35,880 DAVID J. Malan: karakteri i parë i t. 779 00:31:35,880 --> 00:31:36,379 Kjo ishte. 780 00:31:36,379 --> 00:31:40,024 Karakteri i parë i t, unë dua të caktojë versionin uppercase 781 00:31:40,024 --> 00:31:41,190 të karakterit të parë në t. 782 00:31:41,190 --> 00:31:43,200 Pra, kjo është kapitalizuar Letra e parë. 783 00:31:43,200 --> 00:31:46,340 Dhe pastaj, gjëja e fundit që unë bëj në këtë program është pohoj këtu është 784 00:31:46,340 --> 00:31:50,340 origjinal, s, dhe këtu është kopje, t. 785 00:31:50,340 --> 00:31:54,610 >> Por bazuar në histori ne vetëm tha për atë që vargjet të vërtetë janë, 786 00:31:54,610 --> 00:31:57,520 çfarë është linjë 28 vërtetë duke bërë, dhe çfarë është 787 00:31:57,520 --> 00:31:59,405 bug rezultuar shkuar të jetë në ekran? 788 00:31:59,405 --> 00:32:01,300 789 00:32:01,300 --> 00:32:03,500 >> Pra, së pari, pyetja e parë, 28. 790 00:32:03,500 --> 00:32:09,040 Çfarë është = varg t s me të vërtetë duke bërë? 791 00:32:09,040 --> 00:32:16,430 Në qoftë se ne kemi mbi-dorën e majtë Ana këtu = varg t s; 792 00:32:16,430 --> 00:32:19,400 që më jep një kuti këtu dhe një kuti këtu. 793 00:32:19,400 --> 00:32:25,530 Dhe mendoj kjo adresë është 0x, le të themi, 50 këtë herë, në mënyrë arbitrare. 794 00:32:25,530 --> 00:32:28,847 Çfarë bën = varg t s bëjnë nën kapuç? 795 00:32:28,847 --> 00:32:30,340 >> Audienca: [padëgjueshme] 796 00:32:30,340 --> 00:32:34,100 >> DAVID J. Malan: Ajo ruan kujtesën adresojnë atje, kështu që 0x50 shkon atje. 797 00:32:34,100 --> 00:32:37,980 Pra, nëse tani, unë shkoj për të parë karakter në t dhe uppercase atë, 798 00:32:37,980 --> 00:32:39,535 çfarë jam unë në mënyrë efektive duke bërë të s? 799 00:32:39,535 --> 00:32:41,300 800 00:32:41,300 --> 00:32:43,450 Unë jam me të vërtetë duke bërë të njëjtën gjë, apo jo? 801 00:32:43,450 --> 00:32:47,680 Sepse nëse Adresa 0x50-- dhe vetëm, unë nuk kanë shumë vend në bord këtu, 802 00:32:47,680 --> 00:32:51,750 por supozojmë se kjo është e 0x50 poshtë këtu, diku në kujtesë të kompjuterit tim. 803 00:32:51,750 --> 00:32:55,825 >> Dhe unë, për shembull, Gabe në Fjala këtu, si kjo. 804 00:32:55,825 --> 00:32:57,120 805 00:32:57,120 --> 00:33:01,980 Dhe unë kam thënë t kllapa 0 merr kapitalizuar. 806 00:33:01,980 --> 00:33:04,860 E pra, t kllapa 0 është Letra e parë në t. 807 00:33:04,860 --> 00:33:07,840 Pra, pak g do të bëhet G. i madh Por problemi 808 00:33:07,840 --> 00:33:09,410 është, çfarë bën s gjithashtu tregojnë për? 809 00:33:09,410 --> 00:33:10,300 >> Audienca: E njëjta gjë. 810 00:33:10,300 --> 00:33:11,841 >> DAVID J. Malan: E njëjta gjë e saktë. 811 00:33:11,841 --> 00:33:16,342 Pra, një shpjegim i thjeshtë ndoshta, edhe në qoftë se sintaksa është pak i çuditshëm. 812 00:33:16,342 --> 00:33:17,050 Pra, le ta bëjmë këtë. 813 00:33:17,050 --> 00:33:20,210 Bëni kopje-0 dhe pastaj ./copy-0. 814 00:33:20,210 --> 00:33:21,820 815 00:33:21,820 --> 00:33:24,110 Thuaj diçka: Gabe. 816 00:33:24,110 --> 00:33:26,760 Dhe për fat të keq, të dy ata tani janë kapitalizuar, 817 00:33:26,760 --> 00:33:29,500 por për se themel Arsyeja që ne jemi thjesht 818 00:33:29,500 --> 00:33:32,350 tani që kanë të bëjnë me adresat. 819 00:33:32,350 --> 00:33:36,470 >> Deri sa nuk kemi të fillojnë të address-- nuk ka pun intended-- 820 00:33:36,470 --> 00:33:39,270 si nuk kemi të fillojnë për të adresuar ky problem i veçantë? 821 00:33:39,270 --> 00:33:44,400 E pra, në copy1.c, gjërat janë duke shkuar për të marrë një pak më e komplikuar. 822 00:33:44,400 --> 00:33:49,310 Por unë do të pretendojnë një zgjidhje e konceptualisht e thjeshtë. 823 00:33:49,310 --> 00:33:50,852 >> Pra, shumë për të marrë në shikim të parë. 824 00:33:50,852 --> 00:33:53,560 Nuk do të jetë e lehtë për të parë herë që të shtypni atë, ndoshta, 825 00:33:53,560 --> 00:33:57,440 por nëse problemi është se thjesht duke bërë = t s vetëm 826 00:33:57,440 --> 00:33:59,694 kopje adresa, çfarë, përsëri në qoftë se unë mund të vini për ju, 827 00:33:59,694 --> 00:34:02,110 do të jetë zgjidhje për të vërtetë kopjimi një varg? 828 00:34:02,110 --> 00:34:04,906 829 00:34:04,906 --> 00:34:06,770 >> Audienca: Ne do të ndoshta përdorni një lak përsëri. 830 00:34:06,770 --> 00:34:06,890 >> DAVID J. Malan: Po. 831 00:34:06,890 --> 00:34:08,390 Pra, ne do të duhet një lak përsëri. 832 00:34:08,390 --> 00:34:11,800 Dhe për shkak se në qoftë se ne duam të kopje një s varg në një tjetër varg, 833 00:34:11,800 --> 00:34:14,120 ne ndoshta doni të bëni atë karakter nga karakteri. 834 00:34:14,120 --> 00:34:17,199 Por problemi është, në qoftë se kjo është me origjinë s, 835 00:34:17,199 --> 00:34:22,159 tani ne kemi nevojë për të filluar në mënyrë të qartë caktimin e kujtesës për t. 836 00:34:22,159 --> 00:34:24,320 >> Me fjalë të tjera, le të shlyen këtë për herë të fundit. 837 00:34:24,320 --> 00:34:28,659 Nëse kjo është String s = GetString. 838 00:34:28,659 --> 00:34:30,956 839 00:34:30,956 --> 00:34:32,455 Dhe le të vënë këtë deri këtu, si. 840 00:34:32,455 --> 00:34:36,639 841 00:34:36,639 --> 00:34:37,420 Kjo është GetString. 842 00:34:37,420 --> 00:34:39,070 843 00:34:39,070 --> 00:34:43,860 Dhe pastaj, foto për diçka si kjo do të jetë si më parë, 844 00:34:43,860 --> 00:34:44,360 g-a-b-e- / 0. 845 00:34:44,360 --> 00:34:47,294 846 00:34:47,294 --> 00:34:48,960 Kjo duket një diçka të vogël si kjo. 847 00:34:48,960 --> 00:34:53,650 Dhe s për këtë arsye, ne e quajmë këtë 0x50, dhe që do të jetë 51, 52. 848 00:34:53,650 --> 00:34:54,409 >> Pra, kjo është 0x50. 849 00:34:54,409 --> 00:34:55,679 850 00:34:55,679 --> 00:34:59,690 Dhe pastaj, unë bëj varg t. 851 00:34:59,690 --> 00:35:02,450 Në kujtim, që vetëm do të më jepni një shesh të vogël si kjo. 852 00:35:02,450 --> 00:35:04,080 Pra, çfarë është hapi kyç tani? 853 00:35:04,080 --> 00:35:09,870 Nëse unë dua të kopjoni s në t, çfarë bosh nuk kemi nevojë për të mbushur në këtu? 854 00:35:09,870 --> 00:35:12,050 Apo çfarë na duhet të bëjë në nivel të lartë? 855 00:35:12,050 --> 00:35:14,101 856 00:35:14,101 --> 00:35:14,600 Po? 857 00:35:14,600 --> 00:35:16,200 858 00:35:16,200 --> 00:35:17,020 Dikush? 859 00:35:17,020 --> 00:35:17,690 Po. 860 00:35:17,690 --> 00:35:19,214 >> Audienca: Ne duhet të [padëgjueshme]. 861 00:35:19,214 --> 00:35:21,380 DAVID J. Malan: Po, ne duhet të plotësoni këtë bosh. 862 00:35:21,380 --> 00:35:24,340 Unë nuk mund të kopjoni dhe pastaj germa emrin Gabe-së 863 00:35:24,340 --> 00:35:28,120 deri sa unë kërkoj të sistemit operativ për një copë e kujtesës 864 00:35:28,120 --> 00:35:30,640 kjo është të paktën po aq i madh sa në origjinal. 865 00:35:30,640 --> 00:35:32,130 Kështu që na lë me një pyetje. 866 00:35:32,130 --> 00:35:36,080 >> Si mund të kërkojë të sistemit operativ nuk vetëm për një pointer-- të thjeshtë të vogël 867 00:35:36,080 --> 00:35:38,530 pasi kjo është quajtur, një adresa, a nuk pointer-- 868 00:35:38,530 --> 00:35:40,980 për një kuti të thjeshtë të vogël si kjo quhet një varg? 869 00:35:40,980 --> 00:35:44,200 Si mund të pyesni operative sistem për një copë të madhe të kujtesës? 870 00:35:44,200 --> 00:35:48,430 Deri tani, unë kam marrë vetëm që i mbështesin në mënyrë indirekte duke telefonuar GetString. 871 00:35:48,430 --> 00:35:50,740 Pra, si është e GetString madje edhe duke marrë kujtimin e saj? 872 00:35:50,740 --> 00:35:53,430 >> E pra, ajo rezulton se ka ky funksion tjetër këtu 873 00:35:53,430 --> 00:35:55,160 që ne tani do të fillojnë të përdorin. 874 00:35:55,160 --> 00:35:59,780 Tani, kjo duket than-- mënyrë më të fshehtë dhe unë jam i vetmi që mund të shihni it-- 875 00:35:59,780 --> 00:36:03,150 këtë linjë duket rruga më e fshehtë atëherë ajo duhet në shikim të parë. 876 00:36:03,150 --> 00:36:04,650 Por le të vë në lojë atë larg. 877 00:36:04,650 --> 00:36:07,950 >> Në anën e majtë, unë kam char * t. 878 00:36:07,950 --> 00:36:13,280 Pra, në anglisht, le të fillojë për të formuluar dënimet e duhura në zhargon teknik. 879 00:36:13,280 --> 00:36:19,757 Pra, kjo është caktimin e një variabël i tipit char * quajtur t. 880 00:36:19,757 --> 00:36:21,090 Tani, çfarë do të vërtetë do të thotë? 881 00:36:21,090 --> 00:36:23,881 >> E pra, që do të thotë, çfarë jam unë do për të vënë në këtë variabël të quajtur t? 882 00:36:23,881 --> 00:36:24,780 883 00:36:24,780 --> 00:36:26,402 Një adresë e një char. 884 00:36:26,402 --> 00:36:28,360 Pra, kjo është vetëm e thjeshtë, Mënyra më e arsyeshme 885 00:36:28,360 --> 00:36:29,930 e përshkruan anën e majtë. 886 00:36:29,930 --> 00:36:32,890 Kështu që krijon kjo kuti këtu vetëm. 887 00:36:32,890 --> 00:36:34,760 Pra, në anën e djathtë, me sa duket, do 888 00:36:34,760 --> 00:36:37,170 për të caktuar se madhe copë e kujtesës se si? 889 00:36:37,170 --> 00:36:38,340 Pra, le të vë në lojë këtë larg. 890 00:36:38,340 --> 00:36:41,131 >> Është e madhe në shikim të parë, por çfarë po ndodh brenda këtu? 891 00:36:41,131 --> 00:36:43,740 Së pari, nuk ka e malloc, e cila është me sa duket miku ynë i ri, 892 00:36:43,740 --> 00:36:45,450 "Memorie ndajë." 893 00:36:45,450 --> 00:36:49,560 Pra, ky është argumenti duke u kaluar në të, kështu që është një argument mjaft i madh. 894 00:36:49,560 --> 00:36:50,970 Pra, le të vë në lojë këtë larg. 895 00:36:50,970 --> 00:36:53,410 >> strlen i s, natyrisht, paraqet the-- 896 00:36:53,410 --> 00:36:54,142 897 00:36:54,142 --> 00:36:55,600 Audienca: Numri i karaktereve. 898 00:36:55,600 --> 00:36:56,710 DAVID J. Malan: Vetëm Numri i karaktereve në s. 899 00:36:56,710 --> 00:36:59,040 Pra, gjatësia e s, string origjinale. 900 00:36:59,040 --> 00:37:00,350 Pra, G-a-b-e. 901 00:37:00,350 --> 00:37:02,320 Pra, kjo është ndoshta katër në këtë rast. 902 00:37:02,320 --> 00:37:05,485 Pse jam unë duke bërë +1 pas duke e quajtur strlen të s? 903 00:37:05,485 --> 00:37:06,360 Audienca: [padëgjueshme] 904 00:37:06,360 --> 00:37:07,590 DAVID J. Malan: Për se karakter të veçantë null. 905 00:37:07,590 --> 00:37:11,260 Nëse ju më pyesni se çfarë është gjatësia e Emri Gabe-së, unë jam duke shkuar për të thënë katër. 906 00:37:11,260 --> 00:37:14,480 Nën kapuç, edhe pse, unë duhet që byte pestë për karakterin null. 907 00:37:14,480 --> 00:37:16,100 Pra, kjo është arsyeja pse unë jam duke bërë +1. 908 00:37:16,100 --> 00:37:21,730 >> Tani vetëm në rast se ju jeni duke këtë program në një kompjuter tjetër se, të themi, 909 00:37:21,730 --> 00:37:24,610 aplikim CS50, ku madhësia e një char 910 00:37:24,610 --> 00:37:26,350 mund të jenë të ndryshme nga computer-- tim 911 00:37:26,350 --> 00:37:30,590 rezulton se unë mund të telefononi këtë sizeof operator, thjesht pyesni kompjuterin, 912 00:37:30,590 --> 00:37:32,870 çfarë është madhësia e një char në këtë kompjuter? 913 00:37:32,870 --> 00:37:37,400 >> Dhe duke shumëzuar pesë në këtë shembull nga madhësia e një char, e cila 914 00:37:37,400 --> 00:37:40,440 në shumicën e kompjuterëve do të vetëm të jetë një, e malloc 915 00:37:40,440 --> 00:37:44,830 do të ndajë për mua kjo madh copë e kujtesës mbi këtu në të djathtë. 916 00:37:44,830 --> 00:37:47,140 Dhe ajo do të return-- kjo është një function-- kështu që është e 917 00:37:47,140 --> 00:37:48,265 do të kthehen tek unë çfarë? 918 00:37:48,265 --> 00:37:50,914 919 00:37:50,914 --> 00:37:51,830 Audienca: Adresa? 920 00:37:51,830 --> 00:37:53,709 DAVID J. Malan: adresa e çfarë? 921 00:37:53,709 --> 00:37:55,250 Audienca: Nga kujtesës kjo ndarë? 922 00:37:55,250 --> 00:37:56,450 DAVID J. Malan: Nga memorie të ndarë. 923 00:37:56,450 --> 00:37:59,189 Kështu që unë nuk kam asnjë ide, sinqerisht, ku kjo do të përfundojë. 924 00:37:59,189 --> 00:38:01,480 Unë do të propozojë që ajo do të përfundojë deri në 0x88. 925 00:38:01,480 --> 00:38:02,770 926 00:38:02,770 --> 00:38:06,009 Krejtësisht arbitrare, por diku tjetër se 0x50, 927 00:38:06,009 --> 00:38:08,800 për shkak të sistemit operativ, çfarë Windows dhe Mac OS të bëjë për mua, është 928 00:38:08,800 --> 00:38:11,230 sigurohuni se ai është duke i dhënë me chunks të ndryshme të RAM. 929 00:38:11,230 --> 00:38:14,210 >> Pra, kjo është vlera e ku ky copë e kujtesës mund të përfundojnë. 930 00:38:14,210 --> 00:38:16,060 Pra, kjo është ajo që përfundon këtu, 0x88. 931 00:38:16,060 --> 00:38:17,480 932 00:38:17,480 --> 00:38:21,570 Deri tani në mënyrë të qartë, unë mund ta kuptoj se kjo nuk është e njëjtë si kjo, 933 00:38:21,570 --> 00:38:23,960 sepse ata janë treguar në chunks të ndryshme të kujtesës. 934 00:38:23,960 --> 00:38:29,980 Pra, nëse unë tani në të vërtetë dua të kopjoni këtë në, le të bëjë zgjidhjen e propozuar. 935 00:38:29,980 --> 00:38:36,870 >> Le të shkojë, të krijojë një për lak, dhe të bëjë t kllapa i merr s kllapa i. 936 00:38:36,870 --> 00:38:39,760 Sepse tani unë mund të përdorni kjo array-si simbol, 937 00:38:39,760 --> 00:38:43,390 sepse edhe pse e malloc shumë generically ndan mua kujtesës, 938 00:38:43,390 --> 00:38:45,290 memorie është bytes vetëm puqur. 939 00:38:45,290 --> 00:38:47,240 Byte, byte, bajt, të kthyer prapa në shpinë. 940 00:38:47,240 --> 00:38:50,030 >> Unë mund me siguri si një programues trajtojnë atë si një grup, i cili 941 00:38:50,030 --> 00:38:55,090 do të thotë unë mund të përdorni këtë në fund të njohur simbol i vetëm disa kllapa katrore. 942 00:38:55,090 --> 00:38:56,462 943 00:38:56,462 --> 00:39:00,020 >> Pra, më lejoni të bëj një pauzë atje, sepse kjo është një shumë të gjithë në të njëjtën kohë, edhe 944 00:39:00,020 --> 00:39:03,530 pse ideja themelore në radhitje është se string, të gjithë këtë kohë, 945 00:39:03,530 --> 00:39:05,550 nuk është një lloj i ri dhënave në vetvete. 946 00:39:05,550 --> 00:39:10,150 Është vetëm një të ashtu-quajtur akrep, një adresë e një karakter, 947 00:39:10,150 --> 00:39:12,650 e cila vetëm do të thotë se është një numër i që nga konventa e njeriut 948 00:39:12,650 --> 00:39:15,350 ne priren për të shkruar si 0x diçka. 949 00:39:15,350 --> 00:39:18,590 >> Por kjo është vetëm një numër, si 33 Oxford Street, 950 00:39:18,590 --> 00:39:20,530 e cila ndodh të jetë Adresa e ndërtesës CS-së. 951 00:39:20,530 --> 00:39:22,000 952 00:39:22,000 --> 00:39:23,545 Çdo pyetje mbi këto detaje? 953 00:39:23,545 --> 00:39:24,790 954 00:39:24,790 --> 00:39:25,289 Po? 955 00:39:25,289 --> 00:39:28,530 >> Audienca: Pse ne kontrolloni për t barabartë tek null? 956 00:39:28,530 --> 00:39:30,740 >> DAVID J. Malan: Pse nuk kemi kontrolloni për t barabartë me null? 957 00:39:30,740 --> 00:39:33,250 Nëse lexojmë documentation-- question-- madhe për malloc, 958 00:39:33,250 --> 00:39:37,020 kjo do të thotë në shtyp gjobë, ndonjëherë malloc mund të kthehen null, 959 00:39:37,020 --> 00:39:38,080 ashtu si GetString. 960 00:39:38,080 --> 00:39:41,820 Dhe me të vërtetë, GetString kthen null në qoftë se, nga ana tjetër, e malloc kthen null, 961 00:39:41,820 --> 00:39:43,130 sepse GetString përdor malloc. 962 00:39:43,130 --> 00:39:46,400 >> Dhe kjo mund të ndodhë nëse OS, Mac OS, Windows, çdo gjë, është thjesht 963 00:39:46,400 --> 00:39:48,130 jashtë kujtesës për ju. 964 00:39:48,130 --> 00:39:49,820 Pra, kjo është ajo që ka ndodhur atje. 965 00:39:49,820 --> 00:39:52,910 >> Dhe më lejoni të zbulojë një gjë tjetër që vetëm mund të fryj mendjen tuaj 966 00:39:52,910 --> 00:39:55,100 ose plotësisht të jetë shumë larg mbi linjë. 967 00:39:55,100 --> 00:39:59,770 Por më lejoni të ndalem njëjtë për lak për kopjim, 968 00:39:59,770 --> 00:40:05,480 të cilën një moment më parë, risjell ishte këtë. t kllapa i merr s kllapa i. 969 00:40:05,480 --> 00:40:06,740 >> E bukur dhe user-friendly. 970 00:40:06,740 --> 00:40:09,330 Ndjehet si Week Dy përsëri. 971 00:40:09,330 --> 00:40:14,920 Por ky version në fakt mund të jetë e rishkruhen si ky, i cili duket i fshehtë. 972 00:40:14,920 --> 00:40:18,280 Kjo është një teknikë të quajtur akrep aritmetike, adresa aritmetikë. 973 00:40:18,280 --> 00:40:19,600 Por pse e bën këtë punë? 974 00:40:19,600 --> 00:40:22,220 >> Tani annoyingly, Autorët e C vendosi të përdorë 975 00:40:22,220 --> 00:40:25,070 simboli * për qëllime të ndryshme. 976 00:40:25,070 --> 00:40:29,020 Ne kemi parë që përdoret një herë tashmë, char *, që do të thotë "më jepni një ndryshore 977 00:40:29,020 --> 00:40:31,210 që do të përmbajë adresa e një char. " 978 00:40:31,210 --> 00:40:33,990 * Pra, char në këtë kontekst do të thotë "më jep mua një ndryshore." 979 00:40:33,990 --> 00:40:40,050 >> Për fat të keq, në qoftë se ju përdorni * pa një fjalë para saj, si shkrumb, 980 00:40:40,050 --> 00:40:41,905 është quajtur tani Operatori dereference. 981 00:40:41,905 --> 00:40:43,530 Dhe ne do të shohim më shumë të këtë para se të gjatë. 982 00:40:43,530 --> 00:40:44,930 Por ai thjesht do të thotë "shkoni atje." 983 00:40:44,930 --> 00:40:49,070 Është si duke thënë, në qoftë se dikush i dorëzoi mua në një copë letër "33 Oxford Street" 984 00:40:49,070 --> 00:40:53,830 në qoftë se unë bëj "* 33 Oxford Street", që do të thotë "Shkojnë poshtë rrugës për të ndërtesës CS." 985 00:40:53,830 --> 00:40:57,220 >> Pra * thjesht do të thotë të shkoni atje nëse nuk ka asnjë fjalë në frontin e tij. 986 00:40:57,220 --> 00:40:59,100 Pra, çfarë është t, të jetë i qartë? 987 00:40:59,100 --> 00:41:03,250 t është adresa e copë e kujtesës që është dhënë përsëri në mua. 988 00:41:03,250 --> 00:41:06,650 s është adresa e asaj, që të jetë i qartë, në shembullin e kemi diskutuar, 989 00:41:06,650 --> 00:41:07,500 i Gabe renditshëm? 990 00:41:07,500 --> 00:41:08,990 991 00:41:08,990 --> 00:41:10,005 s është adresa of-- 992 00:41:10,005 --> 00:41:11,585 993 00:41:11,585 --> 00:41:12,460 Audienca: string. 994 00:41:12,460 --> 00:41:14,126 DAVID J. Malan: Nga emri origjinal Gabe-së. 995 00:41:14,126 --> 00:41:16,660 Pra, kjo është adresa e kjo copë e kujtesës. 996 00:41:16,660 --> 00:41:22,220 Pra, nëse unë them t + i-- i, njoftim, është vetëm miku ynë i vjetër. 997 00:41:22,220 --> 00:41:24,770 Është vetëm një variabël indeks që është iterating nga zero në dorë 998 00:41:24,770 --> 00:41:26,960 në gjatësinë e string s. 999 00:41:26,960 --> 00:41:30,367 Kështu ajo do të jetë zero, atëherë, pastaj dy, pastaj tre, pastaj katër. 1000 00:41:30,367 --> 00:41:33,200 Pra, le të mblidhen këto të reja Scratch-si copa mister, nëse do, 1001 00:41:33,200 --> 00:41:36,140 edhe pse, përsëri, sintaksë është shumë më e errët se Scratch. 1002 00:41:36,140 --> 00:41:39,522 Pra, t është një adresë + Unë do të më jepni 1003 00:41:39,522 --> 00:41:42,480 një numër, sepse këto janë të gjitha Numrat që ne kemi qenë duke tërhequr si magji. 1004 00:41:42,480 --> 00:41:43,560 Por ata janë vetëm numra. 1005 00:41:43,560 --> 00:41:49,960 >> Pra, nëse adresa e t thoshim: ishte 0x88, çfarë është 0x88 plus zero. 1006 00:41:49,960 --> 00:41:51,564 1007 00:41:51,564 --> 00:41:53,980 Edhe nëse ju nuk jeni të kënaqur me magji akoma, të marrë një guess. 1008 00:41:53,980 --> 00:41:54,410 >> Audienca: origjinale. 1009 00:41:54,410 --> 00:41:55,850 >> DAVID J. Malan: Ende 0x88. 1010 00:41:55,850 --> 00:41:58,910 Pra, çfarë do të thotë * 0x88? 1011 00:41:58,910 --> 00:42:02,670 Kjo do të thotë, "të shkojnë atje", që do të thotë mënyrë efektive, "vënë gishtin këtu." 1012 00:42:02,670 --> 00:42:06,930 Dhe tani në të djathtë anën e kjo shprehje, * dhe pastaj në parens, 1013 00:42:06,930 --> 00:42:11,586 s + i nënkupton S, e cila është adresuar deri këtu e pak g. 1014 00:42:11,586 --> 00:42:16,220 s + 0 është, sigurisht, s, çfarëdo që është. 1015 00:42:16,220 --> 00:42:21,230 >> Deri tani, kjo është s *, të cilat ashtu si * 33 Oxford Street do të thotë të shkojnë në adresën e 1016 00:42:21,230 --> 00:42:22,010 s. 1017 00:42:22,010 --> 00:42:24,170 Kështu që këtu është ky gisht, dora e djathtë. 1018 00:42:24,170 --> 00:42:26,050 Pra, çfarë jam unë do të kopje në çfarë? 1019 00:42:26,050 --> 00:42:30,260 Gjëja në të djathtë, e cila është Gabe, pak g këtu, në këtu. 1020 00:42:30,260 --> 00:42:32,750 >> Dhe kështu që efekti i se përsëritje e parë e lak, 1021 00:42:32,750 --> 00:42:36,200 si ju propozuar, edhe pse kjo duket crazy më e komplikuar se çdo gjë 1022 00:42:36,200 --> 00:42:42,110 ne kemi parë më parë, është thjesht duke thënë shkoni këtu dhe kopje atë karakter këtu. 1023 00:42:42,110 --> 00:42:44,700 Është duke ju dhënë një hartë të të dy vende. 1024 00:42:44,700 --> 00:42:46,130 >> Dhe ne do të shohim shumë më tepër për këtë. 1025 00:42:46,130 --> 00:42:50,600 Por tani për tani, shpresa është vetëm për të prezantoj disa nga këto ide themelore. 1026 00:42:50,600 --> 00:42:53,550 Dhe me të vërtetë, le të shohim në një program final këtu, 1027 00:42:53,550 --> 00:42:57,480 dhe pastaj claymation premtuar, e cila do të bëjë çdo gjë në rregull. 1028 00:42:57,480 --> 00:42:57,980 Të gjithë të drejtë. 1029 00:42:57,980 --> 00:43:01,680 Pra më lejoni të hapur up-- atje të shkojmë. 1030 00:43:01,680 --> 00:43:02,850 1031 00:43:02,850 --> 00:43:05,440 Pra, le me-- ne do të kthehen për këtë foto para se të gjatë. 1032 00:43:05,440 --> 00:43:08,360 Më lejoni të hapur këtë shembull përfundimtar këtu. 1033 00:43:08,360 --> 00:43:09,440 1034 00:43:09,440 --> 00:43:12,710 >> Kështu që këtu është një super, super program i cili realizon 1035 00:43:12,710 --> 00:43:15,050 asgjë në jetë që bën në vijim. 1036 00:43:15,050 --> 00:43:18,740 Ajo së pari shpall dy variablave, x dhe y, që nuk janë numra këtë herë, 1037 00:43:18,740 --> 00:43:19,240 në vetvete. 1038 00:43:19,240 --> 00:43:20,448 Ata nuk janë integers, në vetvete. 1039 00:43:20,448 --> 00:43:22,899 Ata janë me sa duket int *. 1040 00:43:22,899 --> 00:43:25,690 Pra vetëm njeri, çfarë do të thotë në qoftë se llojin e të dhënave tuaja, ndryshueshme tuaj, 1041 00:43:25,690 --> 00:43:26,860 është e tipit int * yll? 1042 00:43:26,860 --> 00:43:30,240 Kjo është adresa e një int. 1043 00:43:30,240 --> 00:43:31,990 >> Kështu që unë kam asnjë ide se ku është ende. 1044 00:43:31,990 --> 00:43:35,150 Ajo thjesht do të thotë "të vënë, përfundimisht, adresa e një int këtu. " 1045 00:43:35,150 --> 00:43:38,340 0x50, 0x88, kudo që është në kujtesës, një adresë po ndodh atje. 1046 00:43:38,340 --> 00:43:40,200 Dhe kjo është ajo y është do të jetë, si. 1047 00:43:40,200 --> 00:43:44,920 >> Nëse unë tani them x = malloc (sizeof (int)), kjo është një mënyrë e sofistikuar për të thënë, 1048 00:43:44,920 --> 00:43:49,000 hey sistemit operativ, nëpërmjet malloc, më jepni kujtesë të mjaftueshme për madhësinë 1049 00:43:49,000 --> 00:43:52,370 e një int, e cila është ndoshta do të jetë 32 bit ose katër bytes. 1050 00:43:52,370 --> 00:43:53,680 >> Pra, çfarë do malloc kthehet? 1051 00:43:53,680 --> 00:43:55,250 Malloc kthen një adresë. 1052 00:43:55,250 --> 00:43:57,020 Pra, çfarë do të merrni ruhen në x? 1053 00:43:57,020 --> 00:44:00,600 Adresa e copë e kujtesës, katër bytes, që malloc 1054 00:44:00,600 --> 00:44:03,360 gjetur vetëm për mua duke i pyetur sistemit operativ. 1055 00:44:03,360 --> 00:44:08,240 >> Tani ndërkohë, linjë katër këtu, x = 42 *. 1056 00:44:08,240 --> 00:44:09,990 Vetëm të jetë i qartë, çfarë po ndodh atje poshtë? 1057 00:44:09,990 --> 00:44:11,530 Në anën e majtë, * x. 1058 00:44:11,530 --> 00:44:13,610 që është si * 33 Oxford Street. 1059 00:44:13,610 --> 00:44:15,523 Pra * x do të thotë çfarë? 1060 00:44:15,523 --> 00:44:16,450 >> Audienca: Go to. 1061 00:44:16,450 --> 00:44:17,908 >> DAVID J. Malan: Shko në atë adresë. 1062 00:44:17,908 --> 00:44:20,466 Kudo se copë e memorie është, shkoni për të. 1063 00:44:20,466 --> 00:44:21,979 Dhe të vënë atë atje, natyrisht? 1064 00:44:21,979 --> 00:44:22,520 Audienca: 42. 1065 00:44:22,520 --> 00:44:23,580 DAVID J. Malan: 42. 1066 00:44:23,580 --> 00:44:25,650 Në rregull, y *, të njëjtën ide. 1067 00:44:25,650 --> 00:44:26,860 Shko në adresën në y. 1068 00:44:26,860 --> 00:44:31,740 Vendos numrin 13 atje, por ajo që është y në këtë moment? 1069 00:44:31,740 --> 00:44:33,172 1070 00:44:33,172 --> 00:44:34,630 Audienca: Nuk ka memorie për y. 1071 00:44:34,630 --> 00:44:35,710 DAVID J. Malan: Ka ka memorie për y. 1072 00:44:35,710 --> 00:44:38,215 Pra, çfarë e bën y ndoshta përmbajnë, si ne kemi qenë duke thënë se? 1073 00:44:38,215 --> 00:44:38,520 >> Audienca: Garbage. 1074 00:44:38,520 --> 00:44:39,480 >> DAVID J. Malan: Disa vlera e mbeturinave. 1075 00:44:39,480 --> 00:44:41,320 Tani, vlera e mbeturinave është ende një numër. 1076 00:44:41,320 --> 00:44:43,160 Ajo ende mund të jetë i gabuar për një adresë. 1077 00:44:43,160 --> 00:44:45,160 Është sikur dikush scribbled diçka poshtë, 1078 00:44:45,160 --> 00:44:48,002 dhe unë keqinterpretuar atë si kuptim disa ndërtesa poshtë rrugës. 1079 00:44:48,002 --> 00:44:50,460 Dhe në qoftë se ju vetëm të përpiqen për të shkuar në disa ndërtesa që ju nuk bëni vet, 1080 00:44:50,460 --> 00:44:53,710 apo ndonjë copë e kujtesës ju nuk keni qenë dhënë, gjëra të këqija mund të ndodhë. 1081 00:44:53,710 --> 00:44:57,740 Kompjuteri mund të rrëzimit, ose disa të tjera Sjellja e papërcaktuar mund të ndodhë. 1082 00:44:57,740 --> 00:45:01,310 >> Pra intro, atëherë, për të Binky është kjo. 1083 00:45:01,310 --> 00:45:04,290 Unë ende kujtohet, 20 disa vite më vonë i rastësishëm, 1084 00:45:04,290 --> 00:45:07,200 ku isha kur më në fund kuptohet pointers. 1085 00:45:07,200 --> 00:45:09,520 >> Që do të thotë, në qoftë se ju lënë këtu në tre minuta 1086 00:45:09,520 --> 00:45:12,170 dhe mendoj se unë nuk bëj kuptojnë pointers, të realizuar 1087 00:45:12,170 --> 00:45:14,410 M'u kujtua për 20 vjet për disa arsye të çmendur 1088 00:45:14,410 --> 00:45:17,140 kur dhe pse ajo më në fund zhytur në, i ulur me mësimin tim 1089 00:45:17,140 --> 00:45:19,501 shokët, Nishat Mehta në mbrapa e Eliot Dining Hall. 1090 00:45:19,501 --> 00:45:21,250 Tani, unë kam mend kjo për shkak se kjo ishte 1091 00:45:21,250 --> 00:45:23,920 njëra nga temat I, në veçanti, luftuan me të. 1092 00:45:23,920 --> 00:45:26,470 Dhe pastaj, ai më në fund klikuar, si unë guxoj të them shumë tema 1093 00:45:26,470 --> 00:45:27,460 përfundimisht do. 1094 00:45:27,460 --> 00:45:32,590 Dhe tani, për të bërë që të ndjehen të gjithë më të lumtur dhe të gjithë më bindëse, 1095 00:45:32,590 --> 00:45:35,360 le të marrin një vështrim përfundimtar në tonë tre minuta e fundit këtu në Binky, 1096 00:45:35,360 --> 00:45:37,675 nga mikut tonë, Nick Parlante nga Stanford. 1097 00:45:37,675 --> 00:45:38,910 1098 00:45:38,910 --> 00:45:41,580 >> [VIDEO Playback] 1099 00:45:41,580 --> 00:45:42,750 >> -Hej, Binky. 1100 00:45:42,750 --> 00:45:43,500 Zgjohu! 1101 00:45:43,500 --> 00:45:45,960 Është koha për argëtim akrep. 1102 00:45:45,960 --> 00:45:47,012 >> -Çfarë Është se? 1103 00:45:47,012 --> 00:45:48,723 Mëso për pointers? 1104 00:45:48,723 --> 00:45:50,580 Oh, Goody! 1105 00:45:50,580 --> 00:45:53,563 >> -Well, Për të filluar, unë mendoj që ne jemi do të duhet një çift pointers. 1106 00:45:53,563 --> 00:45:54,390 >> OK. 1107 00:45:54,390 --> 00:45:57,930 Ky kod ndan dy pointers, të cilat mund të tregojnë për integers. 1108 00:45:57,930 --> 00:45:58,430 OK. 1109 00:45:58,430 --> 00:46:02,140 E pra, unë shoh dy pointers, por ata nuk duket të jetë duke treguar për ndonjë gjë. 1110 00:46:02,140 --> 00:46:02,980 >> -Kjo Është e drejtë. 1111 00:46:02,980 --> 00:46:05,100 Fillimisht, pointers nuk tregojnë për ndonjë gjë. 1112 00:46:05,100 --> 00:46:08,030 Gjërat që ata tregojnë për quhen pointees, dhe vendosjen e tyre deri-së 1113 00:46:08,030 --> 00:46:09,370 një hap i veçantë. 1114 00:46:09,370 --> 00:46:10,220 >> Oh, e drejtë, e drejtë. 1115 00:46:10,220 --> 00:46:10,950 Unë e dinte se. 1116 00:46:10,950 --> 00:46:12,385 Të pointees janë të ndara. 1117 00:46:12,385 --> 00:46:14,315 Er, kështu që si mund të ndajë një pointee? 1118 00:46:14,315 --> 00:46:15,340 1119 00:46:15,340 --> 00:46:15,960 >> OK. 1120 00:46:15,960 --> 00:46:18,970 E pra, ky kod ndan një pointee re numër i plotë, 1121 00:46:18,970 --> 00:46:20,950 dhe kjo pjesë përcakton x për pikë për të. 1122 00:46:20,950 --> 00:46:22,050 1123 00:46:22,050 --> 00:46:23,230 >> -Hej, Që duket më mirë. 1124 00:46:23,230 --> 00:46:25,060 Pra, të bëjë atë të bëjë diçka. 1125 00:46:25,060 --> 00:46:25,990 >> OK. 1126 00:46:25,990 --> 00:46:30,455 Unë do dereference x akrep në ruani numrin 42 në pointee saj. 1127 00:46:30,455 --> 00:46:32,830 Për këtë mashtrim, unë do të duhet tim Magic Wand e Dereferencing. 1128 00:46:32,830 --> 00:46:34,130 1129 00:46:34,130 --> 00:46:36,080 >> -Your Magic Wand e Dereferencing? 1130 00:46:36,080 --> 00:46:37,357 1131 00:46:37,357 --> 00:46:38,190 That-- kjo është e madhe. 1132 00:46:38,190 --> 00:46:39,340 1133 00:46:39,340 --> 00:46:41,080 >> -Kjo është ajo që kodi duket si. 1134 00:46:41,080 --> 00:46:44,110 Do vendosur vetëm numrin, dhe [POP] 1135 00:46:44,110 --> 00:46:44,700 >> -Hej, Shikoni. 1136 00:46:44,700 --> 00:46:46,140 Nuk shkon. 1137 00:46:46,140 --> 00:46:50,980 >> -Kështu që duke bërë një dereference në x poshtë shigjeta për të hyrë pointee saj. 1138 00:46:50,980 --> 00:46:53,160 Në këtë rast, një dyqan 42 në atje. 1139 00:46:53,160 --> 00:46:57,710 Hey përpiquni të përdorni atë për të ruajtur numrin 13 nëpërmjet kursorit tjetër, y. 1140 00:46:57,710 --> 00:46:58,760 >> OK. 1141 00:46:58,760 --> 00:47:03,270 Unë do të shkoj vetëm mbi këtu për të y, dhe për të marrë numrin 13 krijimit. 1142 00:47:03,270 --> 00:47:07,930 Dhe pastaj, të marrë shkopin e Dereferencing dhe vetëm [BUZZ] 1143 00:47:07,930 --> 00:47:08,960 >> Oh! 1144 00:47:08,960 --> 00:47:09,500 >> Oh, hej! 1145 00:47:09,500 --> 00:47:11,090 Kjo nuk funksionoi. 1146 00:47:11,090 --> 00:47:15,630 Thuaj, Binky, unë nuk mendoj dereferencing y është një ide e mirë, sepse ju e dini, 1147 00:47:15,630 --> 00:47:17,850 ngritjen e pointee është një hap i veçantë. 1148 00:47:17,850 --> 00:47:20,450 Dhe unë nuk mendoj se ne ndonjëherë e bëri atë. 1149 00:47:20,450 --> 00:47:21,480 >> Pikë -Mirë. 1150 00:47:21,480 --> 00:47:21,980 -Po. 1151 00:47:21,980 --> 00:47:25,680 Ne ndarë tregues y, por ne kurrë nuk e vënë atë në tregojnë për një pointee. 1152 00:47:25,680 --> 00:47:27,190 1153 00:47:27,190 --> 00:47:28,616 >> -Shumë Vëmendshëm. 1154 00:47:28,616 --> 00:47:30,240 -Hej, Ju jeni në kërkim të mira atje, Binky. 1155 00:47:30,240 --> 00:47:33,400 A mund të rregullohet në mënyrë që pikat y në të njëjtën pointee si X? 1156 00:47:33,400 --> 00:47:34,000 >> -Sure. 1157 00:47:34,000 --> 00:47:36,780 Unë do të përdorin magjik shkop magjik e mia e Pointer Caktimin. 1158 00:47:36,780 --> 00:47:38,740 >> -A Që do të jetë një problem si më parë? 1159 00:47:38,740 --> 00:47:39,240 -Jo. 1160 00:47:39,240 --> 00:47:40,660 Kjo nuk prek pointees. 1161 00:47:40,660 --> 00:47:44,450 Ajo vetëm ndryshon një tregues për tregojnë të njëjtën gjë si një tjetër. 1162 00:47:44,450 --> 00:47:45,450 >> Oh, unë shoh. 1163 00:47:45,450 --> 00:47:48,200 Tani pikë y në të njëjtin vend si x. 1164 00:47:48,200 --> 00:47:48,910 Pra, të presim. 1165 00:47:48,910 --> 00:47:49,950 Tani, y është fikse. 1166 00:47:49,950 --> 00:47:51,120 Ajo ka një pointee. 1167 00:47:51,120 --> 00:47:54,510 Kështu që ju mund të përpiquni shkopin e Dereferencing përsëri për të dërguar 13 over. 1168 00:47:54,510 --> 00:47:56,510 >> -Uh, OK. 1169 00:47:56,510 --> 00:47:58,160 Këtu ajo shkon. [POP] 1170 00:47:58,160 --> 00:47:59,340 >> -Hej, Shikoni në se. 1171 00:47:59,340 --> 00:48:00,750 Tani dereferencing punimeve të y. 1172 00:48:00,750 --> 00:48:04,991 Dhe për shkak se pointers janë ndarë se një pointee, ata të dy e shohin 13. 1173 00:48:04,991 --> 00:48:05,490 -Po. 1174 00:48:05,490 --> 00:48:06,870 Ndarja, çfarëdo. 1175 00:48:06,870 --> 00:48:08,820 Pra, do të shkojmë për të kaluar vende tani? 1176 00:48:08,820 --> 00:48:09,440 >> Oh, shikoni. 1177 00:48:09,440 --> 00:48:10,830 Ne jemi jashtë kohe. 1178 00:48:10,830 --> 00:48:11,570 >> -But-- 1179 00:48:11,570 --> 00:48:13,530 >> -Vetëm mos harroni të tre rregullat akrep. 1180 00:48:13,530 --> 00:48:16,560 Numri Një, struktura bazë është se ju keni një tregues, 1181 00:48:16,560 --> 00:48:18,680 dhe kjo vë mbi të një pointee. 1182 00:48:18,680 --> 00:48:20,640 Por akrep dhe pointee janë të ndara, 1183 00:48:20,640 --> 00:48:22,610 dhe gabim i përbashkët është për të ngritur një tregues, 1184 00:48:22,610 --> 00:48:25,000 por për të harruar për të dhënë atë një pointee. 1185 00:48:25,000 --> 00:48:28,170 >> Numër Dy, dereferencing akrep fillon në treguesin 1186 00:48:28,170 --> 00:48:31,050 dhe ndjek shigjetën e saj mbi të hyni pointee saj. 1187 00:48:31,050 --> 00:48:33,400 Siç e dimë të gjithë, kjo punon vetëm nëse ka 1188 00:48:33,400 --> 00:48:36,270 një pointee, cili lloj i merr përsëri Rregulli numër një. 1189 00:48:36,270 --> 00:48:39,000 >> Numri Tre, akrep Detyra merr një akrep 1190 00:48:39,000 --> 00:48:42,320 dhe ndryshon atë që të tregojnë për njëjtë pointee si një tjetër tregues. 1191 00:48:42,320 --> 00:48:44,160 Pra, pas detyrës, dy pointers 1192 00:48:44,160 --> 00:48:45,910 do pikë të njëjtë pointee. 1193 00:48:45,910 --> 00:48:47,990 Ndonjëherë, që quhet ndarja. 1194 00:48:47,990 --> 00:48:49,740 Dhe kjo është e gjitha nuk është për atë, me të vërtetë. 1195 00:48:49,740 --> 00:48:50,277 Bye-bye tani. 1196 00:48:50,277 --> 00:48:51,110 [VIDEO END rishikim] 1197 00:48:51,110 --> 00:48:52,568 DAVID J. Malan: Kjo është ajo për CS50. 1198 00:48:52,568 --> 00:48:55,110 Ne do të shihemi javën e ardhshme. 1199 00:48:55,110 --> 00:48:56,064