1 00:00:00,000 --> 00:00:03,395 >> [Speel van musiek] 2 00:00:03,395 --> 00:00:11,031 3 00:00:11,031 --> 00:00:13,280 DAVID J. MALAN: Dit is soos 'n groentjie seminaar vandag. 4 00:00:13,280 --> 00:00:14,060 OK. 5 00:00:14,060 --> 00:00:15,024 So baie reën uit. 6 00:00:15,024 --> 00:00:17,690 Dit is geneig om te gebeur op Woensdae, maar des te meer geleentheid 7 00:00:17,690 --> 00:00:18,700 vir vrae van vandag. 8 00:00:18,700 --> 00:00:22,210 So laat ons begin eintlik af met die film in net 'n oomblik. 9 00:00:22,210 --> 00:00:24,560 Maar ons sal grandly begin soos altyd. 10 00:00:24,560 --> 00:00:28,000 >> Dit is CS50, en dit is die einde van die week 4. 11 00:00:28,000 --> 00:00:30,820 So as jy ooit gekyk TV of 'n fliek waarin 12 00:00:30,820 --> 00:00:34,690 daar is 'n paar rekenaar kundiges en die polisie, of FBI, of 'n agentskap 13 00:00:34,690 --> 00:00:36,930 probeer om 'n paar te vang teenstander, wel, jy het 14 00:00:36,930 --> 00:00:40,850 waarskynlik gehoor van die uitdrukking "te verbeter," waardeur dit een of ander manier tegnikus 15 00:00:40,850 --> 00:00:44,750 mettertyd zoomt in oneindig ver na die misdadigers te sien 16 00:00:44,750 --> 00:00:48,640 identiteit of die kenteken selfs in die blink van 'n spieël 17 00:00:48,640 --> 00:00:50,390 of die glinstering van iemand se oog. 18 00:00:50,390 --> 00:00:55,196 So ja, laat ons 'n blik op 'n paar sulke tonele uit Hollywood. 19 00:00:55,196 --> 00:00:55,862 [Video speel] 20 00:00:55,862 --> 00:00:59,243 -OK, Nou, laat ons 'n goeie blik op jou. 21 00:00:59,243 --> 00:01:06,488 22 00:01:06,488 --> 00:01:07,415 >> -Hou dit vas. 23 00:01:07,415 --> 00:01:08,267 Begin dit terug. 24 00:01:08,267 --> 00:01:09,121 >> -Wag 'n minuut. 25 00:01:09,121 --> 00:01:11,300 Gaan regs. 26 00:01:11,300 --> 00:01:12,209 >> -Daar, Vries dit. 27 00:01:12,209 --> 00:01:12,750 -Volskerm. 28 00:01:12,750 --> 00:01:13,558 -OK, Vries dit. 29 00:01:13,558 --> 00:01:14,820 -Tighten Op dit, sal jy? 30 00:01:14,820 --> 00:01:16,530 Vector in daardie man deur die agterwiel. 31 00:01:16,530 --> 00:01:19,400 -Zoom In reg hier op hierdie plek. 32 00:01:19,400 --> 00:01:22,846 -Met die regte toerusting, die beeld vergroot kan word en geslyp. 33 00:01:22,846 --> 00:01:24,065 -Wat is dit? 34 00:01:24,065 --> 00:01:25,600 -Dit Is 'n verbetering program. 35 00:01:25,600 --> 00:01:26,860 -Kan Jy duidelik dat om enige? 36 00:01:26,860 --> 00:01:27,890 -Ek weet nie. 37 00:01:27,890 --> 00:01:29,050 Kom ons verbeter dit. 38 00:01:29,050 --> 00:01:31,575 >> -Enhance Artikel A6. 39 00:01:31,575 --> 00:01:33,642 >> -Ek Versterk die detail, and-- Ek dink daar is 40 00:01:33,642 --> 00:01:35,433 genoeg om te verbeter, stel dit aan my skerm. 41 00:01:35,433 --> 00:01:37,080 -Ek Versterk die weerkaatsing in haar oog. 42 00:01:37,080 --> 00:01:38,830 >> -Laat Hierdie loop deur video verbetering. 43 00:01:38,830 --> 00:01:40,100 -Edgar, Kan jy dit verbeter? 44 00:01:40,100 --> 00:01:41,875 >> -Hou vas. 45 00:01:41,875 --> 00:01:44,010 >> -I've Werk op die besinning. 46 00:01:44,010 --> 00:01:44,995 >> Weerspieëling -Someone se. 47 00:01:44,995 --> 00:01:45,495 -Reflection. 48 00:01:45,495 --> 00:01:47,399 -Daar Is 'n weerspieëling van die man se gesig. 49 00:01:47,399 --> 00:01:48,065 -Die Besinning. 50 00:01:48,065 --> 00:01:48,981 -Daar Is 'n weerspieëling. 51 00:01:48,981 --> 00:01:50,600 -Zoom In die spieël. 52 00:01:50,600 --> 00:01:52,712 -Jy Kan 'n weerspieëling te sien. 53 00:01:52,712 --> 00:01:54,350 -Kan Jy die beeld te verbeter van hier af? 54 00:01:54,350 --> 00:01:55,370 -Kan Jy hom hier te verbeter? 55 00:01:55,370 --> 00:01:56,210 -Kan Jy dit verbeter? 56 00:01:56,210 --> 00:01:56,900 Kan jy dit te verbeter? 57 00:01:56,900 --> 00:01:57,870 >> -Kan Ons dit verbeter? 58 00:01:57,870 --> 00:01:58,717 >> -Kan Jy dit verbeter? 59 00:01:58,717 --> 00:02:00,050 -Hold Op 'n tweede, sal ek verhoog. 60 00:02:00,050 --> 00:02:00,924 -Zoom In aan die deur. 61 00:02:00,924 --> 00:02:01,700 -Times 10. 62 00:02:01,700 --> 00:02:02,586 -Zoom. 63 00:02:02,586 --> 00:02:03,490 -Trek in. 64 00:02:03,490 --> 00:02:03,990 -Meer. 65 00:02:03,990 --> 00:02:04,690 -Wait, Stop. 66 00:02:04,690 --> 00:02:05,190 SECRET. 67 00:02:05,190 --> 00:02:05,970 -Pause Dit. 68 00:02:05,970 --> 00:02:09,460 -Rotate Ons 75 grade rondom die vertikale, asseblief. 69 00:02:09,460 --> 00:02:10,962 SECRET. 70 00:02:10,962 --> 00:02:14,040 Gaan terug na die kant oor die deur, weer. 71 00:02:14,040 --> 00:02:15,860 >> -Got 'N beeld verbete wat kan bitmap? 72 00:02:15,860 --> 00:02:18,776 >> Hey, miskien kan ons die Pradeep gebruik Sen metode om te sien in die vensters. 73 00:02:18,776 --> 00:02:20,372 -Dit Sagteware is die toestand van die kuns. 74 00:02:20,372 --> 00:02:21,845 >> -Die Eiewaarde is af. 75 00:02:21,845 --> 00:02:24,300 >> -Met die regte kombinasie van algorithm-- 76 00:02:24,300 --> 00:02:26,755 >> -hy Se geneem uitskakeling algoritmes na die volgende vlak, 77 00:02:26,755 --> 00:02:28,730 en ek kan dit gebruik om verbeter die foto. 78 00:02:28,730 --> 00:02:31,286 >> -Lock Op en vergroot die z-as. 79 00:02:31,286 --> 00:02:32,560 >> -Enhance. 80 00:02:32,560 --> 00:02:33,100 >> -Enhance. 81 00:02:33,100 --> 00:02:33,600 >> -Enhance. 82 00:02:33,600 --> 00:02:34,960 -Freeze En te verbeter. 83 00:02:34,960 --> 00:02:37,180 >> [Einde afspeel] 84 00:02:37,180 --> 00:02:41,160 >> DAVID J. MALAN: Alle reg, sodat Al wat is eintlik woorde. 85 00:02:41,160 --> 00:02:44,450 Hulle is maar net gespan saam in 'n manier wat nie eintlik sinvol. 86 00:02:44,450 --> 00:02:48,400 En, in werklikheid, CS50 en kursusse soos dit geneig is om 'n baie van die TV en flieks ruïneer 87 00:02:48,400 --> 00:02:48,900 vir jou. 88 00:02:48,900 --> 00:02:52,330 Want wanneer die rekenaar kundiges is huppelend af en sê terme 89 00:02:52,330 --> 00:02:56,860 fancy dinge soos eievektore, en die z-as, 90 00:02:56,860 --> 00:02:59,572 en 'n aantal ander eintlik meer tegniese terme, 91 00:02:59,572 --> 00:03:02,030 hulle regtig net bedrading woorde saam al te dikwels. 92 00:03:02,030 --> 00:03:05,020 Is dat een van ons hoop is dat, as 'n newe-effek van die neem van kursusse 93 00:03:05,020 --> 00:03:08,245 soos hierdie, sal meer mense in die wêreld werklik in staat wees om te weeg in 94 00:03:08,245 --> 00:03:12,040 en net so effens beïnvloed ooit die kwaliteit en akkuraatheid van die films? 95 00:03:12,040 --> 00:03:14,350 >> In werklikheid, laat ons 'n blik op die werklikheid. 96 00:03:14,350 --> 00:03:18,070 So hier is die personeel van foto Maria, een van ons onderrig genote. 97 00:03:18,070 --> 00:03:20,050 En veronderstel sy is vermoedelik van iets. 98 00:03:20,050 --> 00:03:23,730 En tog, daar is 'n sprankie 'n stuk van bewyse in haar oog, 99 00:03:23,730 --> 00:03:25,480 of in die weerspieëling van haar bril. 100 00:03:25,480 --> 00:03:30,760 Wel, as ons presies doen soos die films stel, waarin ons zoom en "verbeter", 101 00:03:30,760 --> 00:03:34,080 dit is hoe baie inligting is in Maria se gesig 102 00:03:34,080 --> 00:03:36,795 wanneer jy 'n beeld te vang met daardie oorspronklike resolusie. 103 00:03:36,795 --> 00:03:39,120 >> En, in werklikheid, kan jy hierdie punte te sien. 104 00:03:39,120 --> 00:03:41,900 En dit is wat genoem pixels, P-I-X-E-L-S, 105 00:03:41,900 --> 00:03:45,740 wat net 'n vierkant tipies dit is 'n punt wat 'n beeld komponeer. 106 00:03:45,740 --> 00:03:49,200 En terug in die dag, en eintlik nog vandag met 'n paar van vandag se LED TVs 107 00:03:49,200 --> 00:03:51,950 of LCD TVs, as jy het ' een in jou kamer of by die huis, 108 00:03:51,950 --> 00:03:55,100 as jy gaan super naby daaraan, en veral as dit 'n ietwat ouer TV, 109 00:03:55,100 --> 00:03:58,760 jy kan waarskynlik selfs sien dat hierdie kolle en dit is wat komponeer 'n beeld. 110 00:03:58,760 --> 00:04:00,980 >> En daar is geen meer inligting as dit. 111 00:04:00,980 --> 00:04:05,400 Ons kon "verbeter", in die sin van gladstryking dinge oor en soort 112 00:04:05,400 --> 00:04:09,040 afleidings soort, soort van wat kleur moet langs Mary's oog 113 00:04:09,040 --> 00:04:10,910 sodat dit nie eintlik so pixelated. 114 00:04:10,910 --> 00:04:14,510 Maar as ek hou inzoomen, is daar is die slegte ou in haar oë. 115 00:04:14,510 --> 00:04:16,600 Soos dit is al die inligting wat ons het. 116 00:04:16,600 --> 00:04:18,920 Jy kan nie ' inligting uit niks. 117 00:04:18,920 --> 00:04:20,790 Daar is slegs 'n eindige aantal bisse daar. 118 00:04:20,790 --> 00:04:22,873 >> So in Probleem Stel 4, waar jy het 'n geleentheid 119 00:04:22,873 --> 00:04:24,580 om te speel met hierdie soort van die wêreld. 120 00:04:24,580 --> 00:04:27,610 In Probleem Stel 4, sal jy verken die wêreld van beelde, en forensiese ondersoeke, 121 00:04:27,610 --> 00:04:30,870 en eintlik skryf kode wat herstel verlore beelde. 122 00:04:30,870 --> 00:04:33,510 Jy sal kode te skryf wat manipuleer bestaande beelde 123 00:04:33,510 --> 00:04:36,120 en uiteindelik verstaan ​​wat is gaan op onder die kap. 124 00:04:36,120 --> 00:04:38,540 >> En dit blyk, dit is eintlik nie al wat ingewikkeld. 125 00:04:38,540 --> 00:04:41,320 Byvoorbeeld, as ons wou verteenwoordig 'n smiley face waar 126 00:04:41,320 --> 00:04:44,160 met hierdie swart pixels, of hierdie swart kolle, 127 00:04:44,160 --> 00:04:47,230 Wel, ons kan eenvoudig verteenwoordig hulle as werklik 'n bitmap. 128 00:04:47,230 --> 00:04:50,040 En as jy ooit gehoor het dat uitdrukking bitmap, miskien 129 00:04:50,040 --> 00:04:52,330 dit begin nou 'n maak bietjie meer sin vandag. 130 00:04:52,330 --> 00:04:53,580 >> Ons weet reeds wat 'n bietjie is. 131 00:04:53,580 --> 00:04:54,160 Dit is 0 of 1. 132 00:04:54,160 --> 00:04:56,201 En 'n kaart is net iets soos 'n stukkie papier 133 00:04:56,201 --> 00:04:59,180 wat gee jou aanwysings en het miskien 'n rooster van x- en y-koördinate. 134 00:04:59,180 --> 00:05:00,540 So hier is 'n bitmap. 135 00:05:00,540 --> 00:05:03,680 Dit is 'n kaart van stukkies waardeur 'n 1 is blykbaar 136 00:05:03,680 --> 00:05:07,857 gaan 'n wit pixel verteenwoordig, en 'n 0 gaan 'n swart pixel verteenwoordig. 137 00:05:07,857 --> 00:05:09,440 Maar ons kon beslis flip dit rond. 138 00:05:09,440 --> 00:05:11,648 Dit maak nie regtig saak so Solank as wat ons is konsekwent. 139 00:05:11,648 --> 00:05:15,570 En hier is hoe, in binary-- binnekant geheue van 'n rekenaar of selfs binne 140 00:05:15,570 --> 00:05:18,160 van 'n lêer op jou hard drive-- kan jy slaan 141 00:05:18,160 --> 00:05:20,240 die eenvoudigste van smiley face beelde. 142 00:05:20,240 --> 00:05:23,990 Maar wat is ons, natuurlik, ontbreek in hierdie beeld? 143 00:05:23,990 --> 00:05:24,610 Kleur, reg? 144 00:05:24,610 --> 00:05:28,220 Dit is 'n duidelike volgende stap of verbetering om dit te verbeter met kleur. 145 00:05:28,220 --> 00:05:32,230 So ongelukkig met net 'n enkele bietjie, 0 of 1, kan ons kleur verteenwoordig. 146 00:05:32,230 --> 00:05:36,100 Dit kan rooi, of blou wees, of swart of wit, of groen, of pienk, 147 00:05:36,100 --> 00:05:37,420 of enige pare van kleure. 148 00:05:37,420 --> 00:05:40,860 Maar ter wille van eenvoud, sal ons net aanneem swart en wit. 149 00:05:40,860 --> 00:05:45,930 >> So, wat logies moet ons as ons wil implementeer kleur in 'n beeld? 150 00:05:45,930 --> 00:05:49,080 Wat moet ons doen? 151 00:05:49,080 --> 00:05:51,900 Soos as die beperkende faktor hier is dat met 'n bietjie kan jy net 152 00:05:51,900 --> 00:05:55,977 verteenwoordig twee state, 0 of 1, wit of swart, wat wil jy doen? 153 00:05:55,977 --> 00:05:56,810 GEHOOR: Meer data. 154 00:05:56,810 --> 00:05:58,813 DAVID J. MALAN: Meer stukkies, ja meer data, meer stukkies. 155 00:05:58,813 --> 00:06:01,440 En, inderdaad, dit is presies hoe kleur prente verteenwoordig. 156 00:06:01,440 --> 00:06:05,120 Eerder as 'n enkel bietjie, 'n 0 of 1 vir elke pixel, elke dot, 157 00:06:05,120 --> 00:06:06,170 jy net die gebruik van verskeie. 158 00:06:06,170 --> 00:06:09,660 Miskien gebruik 8, miskien, meer algemeen gebruik 24, en inderdaad, in Probleem Stel 159 00:06:09,660 --> 00:06:13,300 4, sal jy speel met 'n lêer formaat wat 24 stukkies gebruik tipies. 160 00:06:13,300 --> 00:06:15,430 >> Maar die meeste van julle is waarskynlik vertroud is met JPEG. 161 00:06:15,430 --> 00:06:17,460 As jy al ooit geneem 'n foto op jou selfoon, 162 00:06:17,460 --> 00:06:20,360 of foto of iets gesien op Facebook, of Flickr, enige aantal 163 00:06:20,360 --> 00:06:24,882 van foto gebaseerde webwerwe, jy het waarskynlik 'n JPEG prent gesien voor. 164 00:06:24,882 --> 00:06:27,840 En dit blyk, is dit die lêer formaat ons gaan gebruik in PSet 4, 165 00:06:27,840 --> 00:06:30,340 waardeur jy gaan moet beelde herstel 166 00:06:30,340 --> 00:06:35,160 dat ek per ongeluk het verwyder van 'n beskadig geheue kaart in die kamera, 167 00:06:35,160 --> 00:06:35,800 as jy wil. 168 00:06:35,800 --> 00:06:38,490 >> En dit blyk dat selfs al JPEG is redelik sophisticated-- 169 00:06:38,490 --> 00:06:40,906 dit is baie meer gesofistikeerd as die swart en wit kolle 170 00:06:40,906 --> 00:06:44,480 ons het 'n oomblik gelede, want daar is eintlik fancy algoritmes wat 171 00:06:44,480 --> 00:06:47,410 word gebruik om 'n JPEG compress, so dat jy 'n baie mooi kan hê, 172 00:06:47,410 --> 00:06:49,832 kwaliteit foto, maar met behulp relatief min stukkies. 173 00:06:49,832 --> 00:06:51,790 En ons sal terug te kom kompressie voor lank. 174 00:06:51,790 --> 00:06:56,280 Dit blyk dat die eerste drie grepe in 'n JPEG image-- 175 00:06:56,280 --> 00:07:02,750 maak nie saak wat jy 'n foto geneem het of-- is die waardes 255, 216, 255. 176 00:07:02,750 --> 00:07:05,990 >> Met ander woorde, as jy net sien dat patroon van stukkies, 177 00:07:05,990 --> 00:07:09,180 hier verteenwoordig as drie grepe, of 24 stukkies totaal 178 00:07:09,180 --> 00:07:13,810 met 'n hoë waarskynlikheid kan jy aflei dat jy op soek is na dit op hierdie eerste drie 179 00:07:13,810 --> 00:07:15,230 grepe van 'n JPEG. 180 00:07:15,230 --> 00:07:18,040 En dit is wat bekend staan as die handtekening van 'n JPEG. 181 00:07:18,040 --> 00:07:20,540 Daar is baie van die lêer formate daar is geneig om te begin 182 00:07:20,540 --> 00:07:23,735 met sekere patrone van 0e en 1e, sodat Windows en Mac OS en iOS, 183 00:07:23,735 --> 00:07:28,272 en Android weet watter soort lêer hulle is, bykomend tot die sogenaamde lêer 184 00:07:28,272 --> 00:07:29,730 uitbreiding wat 'n baie lêers. 185 00:07:29,730 --> 00:07:32,590 As jy jpg, dit is 'n ander leidraad tot die rekenaar. 186 00:07:32,590 --> 00:07:35,310 >> So laat ons kyk nou na hierdie 'n bietjie meer tegnies. 187 00:07:35,310 --> 00:07:37,390 Ons weet die desimale stelsel is 0 tot 9. 188 00:07:37,390 --> 00:07:38,740 Ons weet binêre is 0 en 1. 189 00:07:38,740 --> 00:07:41,842 En as jy dink terug aan PSet 0, ons het jou stoei met, 190 00:07:41,842 --> 00:07:43,800 vir 'n bietjie iets genoem heksadesimaal, 191 00:07:43,800 --> 00:07:47,320 waar jy 16 syfers, in plaas van 10 of in plaas van 2. 192 00:07:47,320 --> 00:07:50,405 En dié syfers deur konvensie, is 0 tot 9 en dan 'n 193 00:07:50,405 --> 00:07:55,040 deur f, waar f verteenwoordig wat desimale getal, net soos 'n vinnige gesonde verstand 194 00:07:55,040 --> 00:07:56,640 kontroleer? 195 00:07:56,640 --> 00:07:57,610 So, 15. 196 00:07:57,610 --> 00:08:01,390 En 'n moet 10 verteenwoordig, net deur aard van die bestel wat ek gegee het. 197 00:08:01,390 --> 00:08:04,350 Dis net 'n arbitrêre konvensie, maar dit is redelik standaard. 198 00:08:04,350 --> 00:08:06,870 >> So as ons kyk na hierdie patroon drie bytes-- laat 199 00:08:06,870 --> 00:08:09,620 net begin om te kyk na dit in 'n wyse wat in ooreenstemming is met hoe 200 00:08:09,620 --> 00:08:12,450 rekenaar wetenskaplikes oor die algemeen kyk na en dink oor lêers. 201 00:08:12,450 --> 00:08:15,580 Jy kan seker dink oor lêers in 0e en 1e en desimale, 202 00:08:15,580 --> 00:08:19,340 maar in werklikheid, is ons geneig om binêre gebruik of meer tipies hexadecimal-- 203 00:08:19,340 --> 00:08:20,760 terug van PSet 0. 204 00:08:20,760 --> 00:08:25,857 So laat my voorstel dat 255, 216, 255 en is net hierdie patrone van 0e en 1e. 205 00:08:25,857 --> 00:08:28,440 En jy kan dit kyk of jy wil die wiskunde te doen van Week 0. 206 00:08:28,440 --> 00:08:30,810 Maar vir nou, net aanneem dat dit inderdaad korrek is. 207 00:08:30,810 --> 00:08:33,850 Ek het net herskryf drie desimale getalle as drie binêre waardes. 208 00:08:33,850 --> 00:08:36,100 Nou wat ek gaan doen, is om voeg net 'n paar wit ruimte, 209 00:08:36,100 --> 00:08:37,266 net ter wille van leesbaarheid se. 210 00:08:37,266 --> 00:08:39,940 En kennis, Ek gaan net om dinge uitmekaar beweeg. 211 00:08:39,940 --> 00:08:43,090 So voor, agter, voor, agter. 212 00:08:43,090 --> 00:08:46,180 Ek is niks interessant ander doen as net die verspreiding van dinge uit sodat 213 00:08:46,180 --> 00:08:50,380 daardie kennisgewing elke stel agt stukkies is nou twee stelle vier stukkies. 214 00:08:50,380 --> 00:08:54,920 Dit is nuttig omdat heksadesimale is veral die mode 215 00:08:54,920 --> 00:09:00,930 want elke heksadesimale syfer 0 deur f, of meer spesifiek 0 tot 15, 216 00:09:00,930 --> 00:09:03,430 kan word met presies vier stukkies. 217 00:09:03,430 --> 00:09:07,960 Met ander woorde, in heksadesimaal as jy wil verteenwoordig 'n 0, dit is net 0000, 218 00:09:07,960 --> 00:09:08,780 vier nulle. 219 00:09:08,780 --> 00:09:13,997 En as jy wil om 15 verteenwoordig, dit is 1111, wat vier stukkies. 220 00:09:13,997 --> 00:09:16,080 En as jy die wiskunde te doen, As dit is die kinders plaasvind, 221 00:09:16,080 --> 00:09:18,210 dit is die 16s plek, wat gaan you-- gee 222 00:09:18,210 --> 00:09:19,960 eerder wat gaan aan- jammer, in binêre, 223 00:09:19,960 --> 00:09:23,660 wat gaan jy 15 gee, kinders plek, twees plek, viere en agstes plek. 224 00:09:23,660 --> 00:09:26,821 So laat my stel dat stel van vier stukkies aan die linkerkant 225 00:09:26,821 --> 00:09:28,070 is wat ons gaan f noem. 226 00:09:28,070 --> 00:09:30,110 Dit is die grootste getal wat jy kan met vier stukkies. 227 00:09:30,110 --> 00:09:33,300 En ons weet reeds van heksadesimaal, f is die grootste syfer in heksadesimaal. 228 00:09:33,300 --> 00:09:36,020 Ons het 'n ander f het daar twee daar. 229 00:09:36,020 --> 00:09:38,980 En vir nou, net op geloof dat ek die wiskunde reg gedoen 230 00:09:38,980 --> 00:09:41,890 en dat die linker helfte van daardie stukkies, 1101, 231 00:09:41,890 --> 00:09:43,980 is dieselfde as d in heksadesimaal. 232 00:09:43,980 --> 00:09:46,490 En die regterhand, 1000, is net 8. 233 00:09:46,490 --> 00:09:48,140 >> En dat 'n mens maklik om te sien, reg? 234 00:09:48,140 --> 00:09:51,670 Die 8 represents-- reg onder daardie agts plek. 235 00:09:51,670 --> 00:09:56,040 So het ons een in die kolom agts en niks in die viere, twees of kinders. 236 00:09:56,040 --> 00:09:59,830 So nou meer konvensioneel, mense is geneig om heksadesimale syfers soos hierdie te skryf, 237 00:09:59,830 --> 00:10:03,000 jy net suig hulle saam, en dan kan jy hulle as voorvoegsel met 0x. 238 00:10:03,000 --> 00:10:05,920 Dit beteken niks anders as 'n visuele leidraad na 'n human-- 239 00:10:05,920 --> 00:10:10,350 hier kom 'n heksadesimale value-- omdat dit kan nie anders wees voor die hand liggend. 240 00:10:10,350 --> 00:10:13,629 >> Wat is om te sê, uiteindelik, wat die patroon van nulle en ene, 241 00:10:13,629 --> 00:10:16,170 of die patroon van die heksadesimale syfers in dieselfde dat jy 242 00:10:16,170 --> 00:10:18,990 gaan om te begin soek na in Probleem Stel 4 is this-- 243 00:10:18,990 --> 00:10:22,120 En die probleem Stel 4 spec sal wandel jy deur middel van hierdie in meer detail-- 244 00:10:22,120 --> 00:10:25,344 maar besef as 'n soort van arcane as hierdie dalk lyk met die eerste oogopslag, 245 00:10:25,344 --> 00:10:27,010 jy gaan begin sien dit 'n baie. 246 00:10:27,010 --> 00:10:30,320 En in die feit, selfs in GDB, die debugger ons op Maandag bekendgestel 247 00:10:30,320 --> 00:10:35,440 en Dan stel in PSet 3, gaan dikwels wys jou heksadesimale waardes 248 00:10:35,440 --> 00:10:39,910 net omdat hulle geneig is om meer te wees konvensionele as desimale of binêre 249 00:10:39,910 --> 00:10:41,157 in die wêreld van rekenaars. 250 00:10:41,157 --> 00:10:42,490 Nou laat sit dit in konteks. 251 00:10:42,490 --> 00:10:48,040 Baie van julle dalk onthou foto hier, wat van wat gekom het? 252 00:10:48,040 --> 00:10:51,240 Vista, sodat selfs vroeër as dat Windows XP het dit debuut. 253 00:10:51,240 --> 00:10:52,620 So, dit is 'n pragtige landskap. 254 00:10:52,620 --> 00:10:55,940 En in werklikheid, as jy poke rond online-- Ek dink dit is 'n Wikipedia artikel, 255 00:10:55,940 --> 00:11:00,110 waarin iemand het baie verbasend uit het gevind dat hierdie plek in die wêreld opgestel 256 00:11:00,110 --> 00:11:02,240 sy of haar kamera in presies die regte place-- 257 00:11:02,240 --> 00:11:06,510 en dit vandag lyk, maar like-- dit is presies dieselfde omgewing. 258 00:11:06,510 --> 00:11:10,060 Hierdie beeld is, is in 'n lêer formaat genoem bitmap, b-m-p. 259 00:11:10,060 --> 00:11:12,910 En ons gaan 'n super neem vinnige blik op wat dit beteken. 260 00:11:12,910 --> 00:11:17,770 >> Maar bitmap is net 'n ander manier van verteenwoordig beelde nog steeds met behulp pixels 261 00:11:17,770 --> 00:11:19,580 in 0e en 1e uiteindelik. 262 00:11:19,580 --> 00:11:23,282 Maar op 'n vinnige blik, dit het 'n meer interessante handtekening 263 00:11:23,282 --> 00:11:24,490 aan die begin van die lêer. 264 00:11:24,490 --> 00:11:26,670 Dit is nie net drie grepe, eerder daar 265 00:11:26,670 --> 00:11:30,770 'n hele klomp van die patrone van grepe wat voorafbepaalde betekenis. 266 00:11:30,770 --> 00:11:34,490 Byvoorbeeld, iewers in die eerste paar grepe beeld bitmap van 267 00:11:34,490 --> 00:11:37,440 gaan om die grootte van die wees beeld van die breedte van die beeld, 268 00:11:37,440 --> 00:11:40,390 Die hoogte van die beeld, so nuttige metadata, as jy wil. 269 00:11:40,390 --> 00:11:43,940 Nuttige inligting wat Photoshop of enige grafiese program wat jy gebruik 270 00:11:43,940 --> 00:11:45,180 kan eintlik omgee. 271 00:11:45,180 --> 00:11:47,170 >> So meer hieroor in Probleem Stel 4, maar dit 272 00:11:47,170 --> 00:11:49,220 is slegs om te sê dat aan die einde van die dag 273 00:11:49,220 --> 00:11:52,390 al die lêer formate wat jy het al met behulp vir years-- Microsoft Word-lêers, 274 00:11:52,390 --> 00:11:55,820 Getalle lêers, Excel-lêers, enige aantal lêer formate 275 00:11:55,820 --> 00:11:57,770 dat sommige dalk bekend lêer uitbreiding 276 00:11:57,770 --> 00:12:00,130 is net 0e en 1e onder die kap. 277 00:12:00,130 --> 00:12:02,970 En mense het besluit wat die konvensies is, 278 00:12:02,970 --> 00:12:08,340 wat patrone van 0e en 1e verteenwoordig 'n Woord lêer teenoor 'n Excel-lêer, 279 00:12:08,340 --> 00:12:10,322 versus enige aantal ander lêer formate. 280 00:12:10,322 --> 00:12:12,780 So in PSet 4, sal jy 'n het geleentheid om te speel met dit. 281 00:12:12,780 --> 00:12:14,405 >> Maar wat beteken dit om 'n struct het. 282 00:12:14,405 --> 00:12:18,012 Dit is eintlik 'n mooi segue nou in C, wat slegs 'n paar het 283 00:12:18,012 --> 00:12:20,220 van bykomende funksies wat ons het nie gekyk na nog. 284 00:12:20,220 --> 00:12:24,230 Dit is 'n mooi klein taal en een van die mooi eienskappe oor C is 'n struct. 285 00:12:24,230 --> 00:12:27,300 Byvoorbeeld, as jy wou represent-- laat 286 00:12:27,300 --> 00:12:33,690 sê jy wou 'n veranderlike daardie verteenwoordig 'n student in 'n program. 287 00:12:33,690 --> 00:12:37,330 Miskien was jy 'n kursus te skryf registrasie program, of kern shopping 288 00:12:37,330 --> 00:12:38,870 instrument, of iets soos dit. 289 00:12:38,870 --> 00:12:42,922 Wat is die stukke van data wat verband hou aan 'n student wat by my opkom? 290 00:12:42,922 --> 00:12:44,880 Soos 'n student verteenwoordig met watter waardes? 291 00:12:44,880 --> 00:12:45,732 Ja? 292 00:12:45,732 --> 00:12:46,940 Jy het 'n naam as 'n student. 293 00:12:46,940 --> 00:12:48,900 Wat doen 'n tipiese student? 294 00:12:48,900 --> 00:12:49,320 >> GEHOOR: [onhoorbaar] 295 00:12:49,320 --> 00:12:50,200 >> DAVID J. MALAN: So, jammer. 296 00:12:50,200 --> 00:12:50,660 >> GEHOOR: Age. 297 00:12:50,660 --> 00:12:52,980 >> DAVID J. MALAN: 'n ouderdom of verjaardag in dieselfde, yep. 298 00:12:52,980 --> 00:12:53,557 Wat anders? 299 00:12:53,557 --> 00:12:54,390 GEHOOR: ID nommer? 300 00:12:54,390 --> 00:12:57,460 DAVID J. MALAN: So 'n ID-nommer, miskien 'n telefoonnommer, miskien 'n dorm, of huis, 301 00:12:57,460 --> 00:12:58,670 of kollege, of iets soos dit. 302 00:12:58,670 --> 00:13:01,820 Enige aantal stukke van die data wat jy mag hê in jou kontakte lys 303 00:13:01,820 --> 00:13:03,890 is wat dalk 'n student te definieer. 304 00:13:03,890 --> 00:13:08,490 So as ons wou om dit te doen, in die kode, ons kan iets eenvoudig soos dit te doen. 305 00:13:08,490 --> 00:13:15,670 Ons kan 'n program sodat hê het kom ons sê, int main (void). 306 00:13:15,670 --> 00:13:18,920 En as ek wil 'n verteenwoordig student Ek kan hê, byvoorbeeld, 307 00:13:18,920 --> 00:13:24,330 'n string genoem naam vir daardie student, 'n string genoem dorm vir daardie student, 308 00:13:24,330 --> 00:13:26,900 Miskien 'n int genoem ID vir die student. 309 00:13:26,900 --> 00:13:30,840 En omdat ek met behulp van string, ek nodig om terug te gaan en sit CS50.h. 310 00:13:30,840 --> 00:13:33,300 Miskien gaan ek stdio.h nodig. 311 00:13:33,300 --> 00:13:38,190 So laat my preemptively diegene doen en ek is gaan hierdie student.c noem vir nou 312 00:13:38,190 --> 00:13:40,080 en behalwe hierdie. 313 00:13:40,080 --> 00:13:44,206 >> En nou kan ek iets te doen met hierdie veranderlikes. 314 00:13:44,206 --> 00:13:46,830 En ons is net gaan om te skryf wat as 'n kommentaar in pseudo-kode, 315 00:13:46,830 --> 00:13:48,829 want dit is nie interessant wat ons doen vir nou. 316 00:13:48,829 --> 00:13:51,242 OK, so dit is 'n program wat een of ander manier slaan 'n student. 317 00:13:51,242 --> 00:13:53,450 Wat wil ek doen as ek wil twee studente stoor? 318 00:13:53,450 --> 00:13:55,991 So my eerste instink gaan om alles reg wees, wag 'n minuut, 319 00:13:55,991 --> 00:14:01,920 as ek 'n ander student waarom ek nie doen net string naam 2, string dorm 2, 320 00:14:01,920 --> 00:14:04,190 int id2. 321 00:14:04,190 --> 00:14:06,540 En ons het weg gedoen langs die pad voor 322 00:14:06,540 --> 00:14:10,890 en wat was ons oplossing vir wat lyk soort van 'n afskrif plak hackish te wees 323 00:14:10,890 --> 00:14:11,555 werk hier? 324 00:14:11,555 --> 00:14:12,346 GEHOOR: 'n skikking. 325 00:14:12,346 --> 00:14:13,830 DAVID J. MALAN: Ja, Ons kan 'n skikking gebruik. 326 00:14:13,830 --> 00:14:15,620 Reg om hierdie baie vinnig raak lomp. 327 00:14:15,620 --> 00:14:18,453 Jy het om te arbitrêr soort begin noem al hierdie veranderlikes. 328 00:14:18,453 --> 00:14:22,190 En jy, die mens, te hou spoor wat OK NAME2 ooreenstem 329 00:14:22,190 --> 00:14:25,060 met dorm2 ooreenstem met id2. 330 00:14:25,060 --> 00:14:26,200 Dit word net 'n gemors. 331 00:14:26,200 --> 00:14:29,350 So dit is 'n baie makliker, onthou van 'n paar weke gelede, 332 00:14:29,350 --> 00:14:34,300 net om te genoem string name en miskien gee ons drie van dié. 333 00:14:34,300 --> 00:14:36,940 En dan het ons dalk string slaapsale en 334 00:14:36,940 --> 00:14:41,900 drie van dié, of met 'n konstante, int ids en het drie van daardie. 335 00:14:41,900 --> 00:14:45,250 Maar selfs nou dit voel 'n bietjie slordig, reg. 336 00:14:45,250 --> 00:14:49,440 Ons praat oor studente en nog Ek is regtig woning op die lae vlak 337 00:14:49,440 --> 00:14:50,470 besonderhede implementering. 338 00:14:50,470 --> 00:14:52,790 Die student is 'n naam en 'n dorm en ID. 339 00:14:52,790 --> 00:14:59,814 >> Hoekom kan ek nie net 'n veranderlike verklaar genoem student en noem dit is. 340 00:14:59,814 --> 00:15:02,230 En as ek wil 'n ander student, Hoekom het ek nie net noem dit t. 341 00:15:02,230 --> 00:15:05,260 Of as ek wil 'n hele klomp studente, waarom net nie ek nie 342 00:15:05,260 --> 00:15:09,740 sê ek het 'n hele klas van studente, en dit is drie van hulle. 343 00:15:09,740 --> 00:15:12,470 Met ander woorde, kan waarom nie ek kom met my eie soort data, genoem 344 00:15:12,470 --> 00:15:15,641 Studente, binne wat 'n naam, 'n ID, is 'n dorm, 345 00:15:15,641 --> 00:15:16,890 is 'n aantal van ander velde. 346 00:15:16,890 --> 00:15:19,030 En dit blyk jy kan presies dit te doen. 347 00:15:19,030 --> 00:15:21,850 >> So C het hierdie funksie genoem struct. 348 00:15:21,850 --> 00:15:24,700 Dit is 'n taal funksie wat kan ons juis dit doen. 349 00:15:24,700 --> 00:15:28,370 Ek gaan om voort te gaan en maak structs.h 350 00:15:28,370 --> 00:15:32,299 waar ons gaan na die sien volgende definisie van 'n student. 351 00:15:32,299 --> 00:15:35,215 Dit blyk uit - en hierdie een is selfs eenvoudiger as die een wat 'n ID 352 00:15:35,215 --> 00:15:36,080 'n oomblik gelede. 353 00:15:36,080 --> 00:15:39,120 As jy wil om te kom met jou tuisgemaakte tipe data, 354 00:15:39,120 --> 00:15:42,750 en bykomend tot int, en char en dryf en al hierdie ander wat bestaan, 355 00:15:42,750 --> 00:15:45,810 kan jy dit doen deur letterlik skryf typedef struct, 356 00:15:45,810 --> 00:15:47,880 dan 'n paar krulhakies, binnekant van wat jy 357 00:15:47,880 --> 00:15:51,460 n lys van die veranderlikes wat jy wil assosieer met hierdie nuwe persoonlike data 358 00:15:51,460 --> 00:15:55,670 tik soos 'n naam en 'n dorm, en dan na die krulhakies 359 00:15:55,670 --> 00:15:57,860 jy 'n naam op die nuwe tipe data gee. 360 00:15:57,860 --> 00:15:59,220 So, byvoorbeeld, student. 361 00:15:59,220 --> 00:16:03,247 >> En wat is lekker oor hierdie nou is dat As ons kyk na die ooreenstemmende kode, 362 00:16:03,247 --> 00:16:05,080 die konvensie, eerste van alles, is hierdie plaas 363 00:16:05,080 --> 00:16:08,230 in 'n lêer genaamd iets dot h, 'n kop-lêer, wat ons het nie 364 00:16:08,230 --> 00:16:09,780 begin gebruik onsself te veel. 365 00:16:09,780 --> 00:16:12,120 Maar ons gaan om te begin gebruik van nou nogal 'n bietjie. 366 00:16:12,120 --> 00:16:18,650 En wat ons kan doen met hierdie, uiteindelik in hierdie paar reëls van die kode 367 00:16:18,650 --> 00:16:22,130 is verklaar presies dit tipe data, 'n student. 368 00:16:22,130 --> 00:16:23,230 En nou, laat se gebruik. 369 00:16:23,230 --> 00:16:27,274 >> Ek gaan nou gaan in 'n lêer genaamd structs1.c. 370 00:16:27,274 --> 00:16:29,440 En laat ons 'n blik op 'n paar eienskappe hier. 371 00:16:29,440 --> 00:16:32,250 So die dinge hier is meestal bekende, en ons sal 372 00:16:32,250 --> 00:16:35,040 kom terug na wat is nie vertroud in net 'n oomblik. 373 00:16:35,040 --> 00:16:39,880 Dit is natuurlik ook my eie header-lêer, wat is 'n nuwe, asook, 374 00:16:39,880 --> 00:16:42,580 behalwe vir PSet 3 waar Onthou, ons het helpers.h. 375 00:16:42,580 --> 00:16:45,150 So jy kan include helpers.h onthou. 376 00:16:45,150 --> 00:16:49,381 >> Hoekom al gebruik ek aanhalings in plaas van hakies? 377 00:16:49,381 --> 00:16:50,630 Wanneer ek kies tussen hulle? 378 00:16:50,630 --> 00:16:52,310 Byna altyd lyk asof ek om hakies te gebruik. 379 00:16:52,310 --> 00:16:55,040 En dan, almal van 'n skielike op lyn ses Ek gebruik dubbele aanhalingstekens. 380 00:16:55,040 --> 00:16:55,860 Hoekom kan dit wees? 381 00:16:55,860 --> 00:16:56,700 Ja? 382 00:16:56,700 --> 00:16:57,725 >> GEHOOR: [onhoorbaar] 383 00:16:57,725 --> 00:16:59,350 DAVID J. MALAN: Dit is 'n werklike, wat? 384 00:16:59,350 --> 00:17:00,559 GEHOOR: Dit is in jou IDE. 385 00:17:00,559 --> 00:17:02,475 DAVID J. MALAN: Ja, dit is in my werklike IDE. 386 00:17:02,475 --> 00:17:05,690 En laat ons nie die bewoners van die IDE, want dit is net 'n instrument wat ek gebruik. 387 00:17:05,690 --> 00:17:08,119 Dit is in my huidige gids, spesifiek. 388 00:17:08,119 --> 00:17:11,647 So structs.h is my eie lêer nie in die IDE geïnstalleer is, 389 00:17:11,647 --> 00:17:14,480 in die bedryfstelsel self, eerder dit is in my huidige gids. 390 00:17:14,480 --> 00:17:16,910 So het die konvensie is as jy wil om jou eie kop lêer in te sluit, 391 00:17:16,910 --> 00:17:18,200 jy net gebruik dubbele aanhalingstekens. 392 00:17:18,200 --> 00:17:23,290 >> Wat doen ons hierdie ding noem in lyn 8, in die algemeen? 393 00:17:23,290 --> 00:17:25,200 Dit is wat? 394 00:17:25,200 --> 00:17:28,220 # define iets. 395 00:17:28,220 --> 00:17:31,040 Dit verteenwoordig konstantes, reg? 396 00:17:31,040 --> 00:17:33,140 As jy wil 'n te hê waarde in jou program 397 00:17:33,140 --> 00:17:35,110 dat jy 'n hele gebruik n klomp van die tye, dit is 398 00:17:35,110 --> 00:17:39,330 goeie konvensie om dit uit faktor, verklaar dat dit met die hash simbool 399 00:17:39,330 --> 00:17:43,340 definieer, dan, deur die konvensie, in alle hoofletters word-- al is dit nie 400 00:17:43,340 --> 00:17:45,320 streng nodig nie, maar dit is menslike konvensie 401 00:17:45,320 --> 00:17:47,210 om konstantes kapitaliseer sodat hulle spring uit 402 00:17:47,210 --> 00:17:50,380 op jou visually-- ruimte en dan is die waarde wat jy wil wees 403 00:17:50,380 --> 00:17:52,250 gelykstaande aan die naam van wat konstant. 404 00:17:52,250 --> 00:17:56,110 Geen kommapunt, maar jy net volg dat die patroon is daar. 405 00:17:56,110 --> 00:17:57,770 >> So, wat doen ek in hierdie werklike kode. 406 00:17:57,770 --> 00:18:00,660 So laat ons neem 'n blik op die hoofprogram hier. 407 00:18:00,660 --> 00:18:04,080 In reël 12 omdat ek ingesluit structs.h, 408 00:18:04,080 --> 00:18:06,492 Ek het nou mettertyd aan my beskikking 'n nuwe soort data. 409 00:18:06,492 --> 00:18:09,200 Ek het nie net toegang tot int, en char en vlot, en string, 410 00:18:09,200 --> 00:18:10,060 en blou en ander. 411 00:18:10,060 --> 00:18:12,470 Ek het nou toegang tot 'n tipe student data. 412 00:18:12,470 --> 00:18:17,740 So in lyn 12, ek kombinasie twee ideas-- n mens 'n persoonlike tipe data en twee, 413 00:18:17,740 --> 00:18:18,940 met behulp van 'n skikking. 414 00:18:18,940 --> 00:18:21,700 En so in hierdie program as Ek wil eintlik ondersteun 415 00:18:21,700 --> 00:18:24,320 drie verskillende studente in my program, ek 416 00:18:24,320 --> 00:18:30,480 kan net sê gee my 'n veranderlike genoem studente, wat elk 417 00:18:30,480 --> 00:18:32,970 is van die tipe studente, wat is my persoonlike data tipe. 418 00:18:32,970 --> 00:18:35,890 En spesifiek, gee my drie van dié in my skikking. 419 00:18:35,890 --> 00:18:37,750 >> So nou wat doen ons in hierdie program? 420 00:18:37,750 --> 00:18:40,670 Hier is net 'n lus vir die iterating 0-3, want dit is 421 00:18:40,670 --> 00:18:42,110 wat die waarde van studente is. 422 00:18:42,110 --> 00:18:44,420 Ek is net waarna die gebruiker gee my die student se naam. 423 00:18:44,420 --> 00:18:48,090 En dan in lyn 17, ons 'n meestal bekende lyn. 424 00:18:48,090 --> 00:18:50,370 Ons het ons ou vriend GetString aan die regterkant. 425 00:18:50,370 --> 00:18:52,345 En wat stuk sintaksis is blykbaar 'n nuwe, 426 00:18:52,345 --> 00:18:55,130 As jy nog nooit in C het geprogrammeer voor, en het nog nooit gebruik word om die structs? 427 00:18:55,130 --> 00:18:55,510 Ja? 428 00:18:55,510 --> 00:18:56,417 >> GEHOOR: Die Name. 429 00:18:56,417 --> 00:18:57,500 DAVID J. MALAN: Die Name. 430 00:18:57,500 --> 00:19:01,220 Maar dit is nie te veel van 'n sprong, want nou studente hakies i 431 00:19:01,220 --> 00:19:02,590 gee jou die i-de student. 432 00:19:02,590 --> 00:19:04,730 En as jy wil om te duik binnekant van die struktuur, 433 00:19:04,730 --> 00:19:09,490 jy net gebruik om 'n enkele tydperk en dan is die naam van die veranderlike binne, 434 00:19:09,490 --> 00:19:11,900 of die eiendom in daardie jy wil om toegang te kry. 435 00:19:11,900 --> 00:19:14,816 Net so dan, as ek gevra het die gebruiker, gee my die student se dorm, 436 00:19:14,816 --> 00:19:18,390 jy kan insgelyks winkel wat string in die dorm veranderlike binnekant 437 00:19:18,390 --> 00:19:19,940 van daardie student struktuur. 438 00:19:19,940 --> 00:19:21,410 >> En nou is dinge 'n bietjie fancy. 439 00:19:21,410 --> 00:19:24,420 En dit gaan lyk op dalk 'n baie baie gou. 440 00:19:24,420 --> 00:19:27,970 Maar jy sal sien dit baie meer in PSet 4, so laat ons net blik op dit nou. 441 00:19:27,970 --> 00:19:33,364 Dit blyk dat in line 23 deur 38, wat dink jy ek dalk doen? 442 00:19:33,364 --> 00:19:35,530 Ek het die kommentaar verwyder vir vandag, maar die weergawe 443 00:19:35,530 --> 00:19:38,660 van die kode aanlyn verwysing het al kommentaar. 444 00:19:38,660 --> 00:19:40,171 Wat doen ek blyk te wees doen? 445 00:19:40,171 --> 00:19:42,530 >> GEHOOR: die lêer met al Spaar die inligting wat die gebruiker aangegaan. 446 00:19:42,530 --> 00:19:44,530 >> DAVID J. MALAN: Ja, presies, dit is 'n nuwe manier 447 00:19:44,530 --> 00:19:46,370 wat ons nou sien twee Nog 'n kenmerk van C, 448 00:19:46,370 --> 00:19:48,700 waardeur ek my eie lêers kan skep. 449 00:19:48,700 --> 00:19:51,580 Tot dusver byna elke program jy geskryf het is staatloos. 450 00:19:51,580 --> 00:19:53,334 Sodra dit gedoen is hardloop, dit is dit. 451 00:19:53,334 --> 00:19:55,000 Daar is geen geheue of herinnering van dit. 452 00:19:55,000 --> 00:19:56,110 Daar is geen lêer gestoor. 453 00:19:56,110 --> 00:19:58,120 Maar as jy wil red insette wat 454 00:19:58,120 --> 00:20:02,100 gebeur het, soos in 'n spel of 'n program soos hierdie, dit blyk ons ​​kan doen. 455 00:20:02,100 --> 00:20:04,360 En jy sal dit meer sien in PSet 4 en in Afdeling. 456 00:20:04,360 --> 00:20:08,661 Maar hierdie lyn 23 in wese skep 'n lêer genaamd students.csv. 457 00:20:08,661 --> 00:20:10,160 En jy kan voor het hierdie. 458 00:20:10,160 --> 00:20:14,250 Selfs as jy nog nooit voorheen CS bestudeer, CSV is komma geskei veranderlikes. 459 00:20:14,250 --> 00:20:19,000 Dit is soos 'n baie arm man se weergawe van 'n Excel-lêer, 460 00:20:19,000 --> 00:20:22,270 wat beteken dat dit kan oopgemaak word in Excel en in Apple Getalle, 461 00:20:22,270 --> 00:20:23,830 en dit het rye en kolomme. 462 00:20:23,830 --> 00:20:26,485 Maar dit is nie 'n eie formaat soos Microsoft of Apple. 463 00:20:26,485 --> 00:20:29,840 Dis net kommas skeiding van die waardes wat ons sal sien in 'n oomblik. 464 00:20:29,840 --> 00:20:31,010 >> En net 'n raaiskoot. 465 00:20:31,010 --> 00:20:33,480 In lyn 23, op die heel einde, my tweede argument 466 00:20:33,480 --> 00:20:37,700 om hierdie nuwe funksie genoem f oop vir die lêer oop is w. 467 00:20:37,700 --> 00:20:39,430 Wat kan w dui? 468 00:20:39,430 --> 00:20:40,022 Ja? 469 00:20:40,022 --> 00:20:41,260 >> GEHOOR: Dit kan jy skryf na die lêer? 470 00:20:41,260 --> 00:20:42,630 >> DAVID J. MALAN: Dit kan jy skryf na die lêer. 471 00:20:42,630 --> 00:20:44,810 So is daar 'n paar van die variante dat ons hier kan aansluit in. 472 00:20:44,810 --> 00:20:47,184 Maar as jy net wil om te lees die lêer, wat kyk na dit 473 00:20:47,184 --> 00:20:50,010 en lees dit in die geheue, het jy net quote unquote "r" te gebruik. 474 00:20:50,010 --> 00:20:53,110 As jy wil om te skryf aan die lêer, haal jy gebruik unquote "w". 475 00:20:53,110 --> 00:20:55,190 Daar is ook voeg en 'n paar ander dinge 476 00:20:55,190 --> 00:20:57,356 as jy wil om bestaande lêers te verander. 477 00:20:57,356 --> 00:21:00,480 Nou gaan ons hou dit sien ding, dan sal ons terug te kom om te reël 24. 478 00:21:00,480 --> 00:21:02,640 NULL, dit blyk, is 'n spesiale waarde wat 479 00:21:02,640 --> 00:21:06,070 kan teruggestuur word deur sekere funksies as iets wrong-- gegaan het 480 00:21:06,070 --> 00:21:08,490 indien die lêer nie bestaan ​​nie, As jy nie van die geheue het hardloop, 481 00:21:08,490 --> 00:21:09,620 of 'n klomp van die ander foute. 482 00:21:09,620 --> 00:21:13,470 Maar vir nou, laat ons net aanvaar dat dit is net konvensionele foutopsporing. 483 00:21:13,470 --> 00:21:17,090 Hier in lyn 26, ek iterating 0-3 oor al my studente. 484 00:21:17,090 --> 00:21:20,470 En dit is 'n soort van soort van 'n nuwe funksie, fprintf, 485 00:21:20,470 --> 00:21:21,460 maar net 'n raaiskoot. 486 00:21:21,460 --> 00:21:24,370 As printf is net druk 'n geformatteerde string, 487 00:21:24,370 --> 00:21:26,507 wat beteken fprintf waarskynlik beteken? 488 00:21:26,507 --> 00:21:27,590 GEHOOR: Druk na 'n lêer. 489 00:21:27,590 --> 00:21:29,290 DAVID J. MALAN: Druk 'n geformateerde string na 'n lêer. 490 00:21:29,290 --> 00:21:31,180 Dit is wat die addisionele f middel is lêer. 491 00:21:31,180 --> 00:21:36,420 En die nuwe eerste argument moet wees die veranderlike wat jou lêer verteenwoordig. 492 00:21:36,420 --> 00:21:38,866 Dan het ons net 'n formaat string net soos printf. 493 00:21:38,866 --> 00:21:40,740 En selfs al is dit sintaksis is 'n nuwe, dit net 494 00:21:40,740 --> 00:21:44,610 beteken prop in die student se naam, plug-in die student dorm, en dan 495 00:21:44,610 --> 00:21:47,160 met fclose, maak die lêer. 496 00:21:47,160 --> 00:21:49,730 En dan lastly-- dit is nuut en ons sal terug kom 497 00:21:49,730 --> 00:21:53,240 voordat long-- ek bevry die student vir die redes 498 00:21:53,240 --> 00:21:54,860 wat gebeur het bo is daar. 499 00:21:54,860 --> 00:21:56,820 Maar ons sal terug te kom om die wat voor long-- 500 00:21:56,820 --> 00:21:59,820 dit is as gevolg van hoe GetString is eintlik werk onder die kap. 501 00:21:59,820 --> 00:22:01,280 >> So laat ons neem 'n vinnige blik hier. 502 00:22:01,280 --> 00:22:04,380 As ek tik ls in my gids, sien dat ek dit nie doen nie 503 00:22:04,380 --> 00:22:09,360 'n lêer genaamd students.csv, net nie daar nie, nie bestaan ​​nie. 504 00:22:09,360 --> 00:22:14,965 So as ek nou hierdie program saam te stel, maak structs-1. / structs-1, 505 00:22:14,965 --> 00:22:20,570 en ek gaan om voort te gaan en tik in Andi, wat woon in Berkeley by Yale. 506 00:22:20,570 --> 00:22:26,350 Ons gaan Rob het wat woon in Thayer hierdie dae. 507 00:22:26,350 --> 00:22:33,760 En laat kom met waar is, dink ek, Maria is in Mather, 508 00:22:33,760 --> 00:22:35,100 as ek reg onthou het. 509 00:22:35,100 --> 00:22:36,460 >> So dit lyk asof niks gebeur nie. 510 00:22:36,460 --> 00:22:40,680 Maar as ek tik ls nou, daar is students.csv. 511 00:22:40,680 --> 00:22:43,080 Kom ons gaan voort en oop students.csv. 512 00:22:43,080 --> 00:22:46,050 Dit is weer eens 'n baie liggewig lêer formaat. 513 00:22:46,050 --> 00:22:49,570 Maar ek het net 'n konvensie aangeneem dat ek twee rye en kolomme hier. 514 00:22:49,570 --> 00:22:52,020 Die eerste kolom is mense se eerste name. 515 00:22:52,020 --> 00:22:55,740 Die tweede kolom is die student se dorm, of kollege, of huis, of iets anders. 516 00:22:55,740 --> 00:22:57,900 En nou het ek dit gered permanent in 'n lêer. 517 00:22:57,900 --> 00:22:59,280 >> So dit is nie al wat interessant. 518 00:22:59,280 --> 00:23:02,980 Maar dit is net 'n stepping stone nou om in staat om inligting te volhard 519 00:23:02,980 --> 00:23:04,040 permanent. 520 00:23:04,040 --> 00:23:08,340 So laat ons sien nou wat meer kan ons doen met hierdie en ander funksies. 521 00:23:08,340 --> 00:23:10,729 Maar eers, enige vrae? 522 00:23:10,729 --> 00:23:12,145 Dit was 'n baie, en dit was vinnig. 523 00:23:12,145 --> 00:23:16,131 Maar jy sal 'n baie te sien meer in PSet 4, as well. 524 00:23:16,131 --> 00:23:16,630 Ja? 525 00:23:16,630 --> 00:23:19,360 >> GEHOOR: Is daar 'n manier om voortgaan toevoeging van name om die lêer? 526 00:23:19,360 --> 00:23:19,880 >> DAVID J. MALAN: Goeie vraag. 527 00:23:19,880 --> 00:23:21,800 Is daar 'n manier om voort te gaan toevoeging van name om die lêer? 528 00:23:21,800 --> 00:23:22,340 Ja. 529 00:23:22,340 --> 00:23:24,630 En, in werklikheid, as jy uiteindelik up re-opening van die lêer, 530 00:23:24,630 --> 00:23:26,780 sou jy quote gebruik unquote "n" vir aanhegnavraag, 531 00:23:26,780 --> 00:23:31,090 wat sou net voeg 'n nuwe lyn, 'n weer en weer, presies nuwe lyn. 532 00:23:31,090 --> 00:23:32,010 Goeie vraag. 533 00:23:32,010 --> 00:23:32,950 Ander vrae? 534 00:23:32,950 --> 00:23:33,450 Ja? 535 00:23:33,450 --> 00:23:35,580 GEHOOR: As jy het die program weer op die oomblik, 536 00:23:35,580 --> 00:23:38,000 sou dit hou die toevoeging van name aan die lêer of sou dit oop te maak 'n nuwe lêer? 537 00:23:38,000 --> 00:23:38,740 >> DAVID J. MALAN: Ag, goeie vraag. 538 00:23:38,740 --> 00:23:41,448 As jy hardloop die program weer reg nou, miskien getik in nuwe name, 539 00:23:41,448 --> 00:23:44,820 sou dit toe te voeg tot die lêer of die lêer oorskryf? 540 00:23:44,820 --> 00:23:47,420 Die laasgenoemde, want ek is nie die gebruik van aanhegnavraag af. 541 00:23:47,420 --> 00:23:49,930 En omdat ek net blindelings die opening van die lêer vir skryf, 542 00:23:49,930 --> 00:23:51,310 dit is net gaan om die lêer oorskryf. 543 00:23:51,310 --> 00:23:54,570 So sou ek inderdaad hoef te doen is voeg, as ek wil eintlik 'n lang termyn 544 00:23:54,570 --> 00:23:55,350 databasis. 545 00:23:55,350 --> 00:23:58,220 >> Nou CSV is nuttig, eerlik, selfs vir soos as jy writing-- 546 00:23:58,220 --> 00:24:00,100 en ons sal uiteindelik sien later in die semester wanneer 547 00:24:00,100 --> 00:24:01,455 ons gebruik CSVs vir ander doeleindes. 548 00:24:01,455 --> 00:24:04,920 As jy wil al die mense op te slaan wat vir 'n gebeurtenis, 549 00:24:04,920 --> 00:24:07,420 of ingeskryf vir jou student groep, of iets soos dit, 550 00:24:07,420 --> 00:24:10,330 stoor die data in hierdie soort van formaat is super gerieflik. 551 00:24:10,330 --> 00:24:12,580 Omdat letterlik, as ek was om hierdie lêer aflaai. 552 00:24:12,580 --> 00:24:14,540 Ek kon double-- en laat eintlik dit te probeer 553 00:24:14,540 --> 00:24:16,720 as ek Excel of Nommers hier. 554 00:24:16,720 --> 00:24:19,130 >> Ek gaan regs-kliek of Control-kliek my lêer. 555 00:24:19,130 --> 00:24:20,020 Oeps. 556 00:24:20,020 --> 00:24:21,830 Regs-kliek of Control-kliek my lêer. 557 00:24:21,830 --> 00:24:24,960 Kom, my muis nie saam. 558 00:24:24,960 --> 00:24:32,694 Download-- ek gaan aflaai hier al die lêers sodat 559 00:24:32,694 --> 00:24:33,860 net sodat ek kan hierdie een te gryp. 560 00:24:33,860 --> 00:24:37,850 En laat ons sien of dit werk students.csv-- eerste keer 561 00:24:37,850 --> 00:24:39,310 Ek het geaktiveer. 562 00:24:39,310 --> 00:24:41,360 Nou wil hulle my kontakte te sien. 563 00:24:41,360 --> 00:24:44,310 Nou, ek moet registreer. 564 00:24:44,310 --> 00:24:47,620 Kyk hoe maklik dit is om CSVs gebruik? 565 00:24:47,620 --> 00:24:50,840 Ja, hou dit op datum is. 566 00:24:50,840 --> 00:24:52,375 OK, nou is ons gereed vir klas. 567 00:24:52,375 --> 00:24:58,750 568 00:24:58,750 --> 00:25:00,370 OK, o, wat is nuut? 569 00:25:00,370 --> 00:25:02,920 OK, naby. 570 00:25:02,920 --> 00:25:04,750 Dit was magies. 571 00:25:04,750 --> 00:25:07,280 OK, nou het ons te werk. 572 00:25:07,280 --> 00:25:10,890 En nou is dit vergeet wat Ek het oorspronklik lêer oopgemaak word, 573 00:25:10,890 --> 00:25:13,090 maar wat daar a-- ons gaan. 574 00:25:13,090 --> 00:25:16,341 OK, so nou het ons 'n Excel-lêer. 575 00:25:16,341 --> 00:25:18,290 Dankie. 576 00:25:18,290 --> 00:25:20,764 >> OK, so wat ek gedoen het, was die maklike deel. 577 00:25:20,764 --> 00:25:23,930 Natuurlik het ek kon vooraf geïnstalleer Excel, of Getalle, of wat ook al program. 578 00:25:23,930 --> 00:25:25,846 Maar dit is lekker, want nou kan ek manipuleer 579 00:25:25,846 --> 00:25:28,090 die data in 'n standaard formaat. 580 00:25:28,090 --> 00:25:30,294 >> So nou, laat ons konteks oorskakel na waar ons opgehou het 581 00:25:30,294 --> 00:25:32,710 laaste tyd, wat was om te begin af te neem opleiding wiele. 582 00:25:32,710 --> 00:25:34,543 Maar eers moet jy nie het nie sien dit vroeër middagete 583 00:25:34,543 --> 00:25:38,150 is dit weer gebeur hier by Vuur en Ice in Cambridge, Sitar in New Haven. 584 00:25:38,150 --> 00:25:43,150 Teken op CS50s webwerf so gou as moontlik om CS50 studente en personeel aan te sluit. 585 00:25:43,150 --> 00:25:46,090 >> So het ons opleiding wiele af op Maandag as follows-- 586 00:25:46,090 --> 00:25:49,120 string is verklaar in CS50s biblioteek vir 'n geruime tyd. 587 00:25:49,120 --> 00:25:52,650 En dit is lekker, want dit kan ons oor veranderlikes te praat as 588 00:25:52,650 --> 00:25:54,660 volledige woorde en sinne en nog baie meer. 589 00:25:54,660 --> 00:25:56,710 Maar dit blyk string bestaan ​​nie. 590 00:25:56,710 --> 00:26:00,200 Dit is net 'n sinoniem of 'n alias, wat ons geskep het vir iets wat 591 00:26:00,200 --> 00:26:03,780 is eintlik 'n bietjie meer tegniese genoem char *. 592 00:26:03,780 --> 00:26:07,900 >> En inderdaad, 'n voorbeeld het ons gesien van 'n program op Maandag 593 00:26:07,900 --> 00:26:11,200 dit het nie gedra nogal soos ons verwag het nie. 594 00:26:11,200 --> 00:26:13,630 Dit was die lêer, vergelyk-0. 595 00:26:13,630 --> 00:26:17,910 En onthou dat vergelyk-0, as Ek Maandag se program heropstel 596 00:26:17,910 --> 00:26:22,670 en hardloop vergelyk-0 en tik in ma in klein en ma in klein weer. 597 00:26:22,670 --> 00:26:25,320 Die program het daarop aangedring ek tik verskillende dinge, 598 00:26:25,320 --> 00:26:29,210 selfs al ma, alles in klein, is identies visueel. 599 00:26:29,210 --> 00:26:31,990 So wat was die kort antwoord waarom die rekenaar dink 600 00:26:31,990 --> 00:26:34,500 daardie twee snare is anders? 601 00:26:34,500 --> 00:26:35,250 Ja? 602 00:26:35,250 --> 00:26:36,534 >> GEHOOR: [onhoorbaar] 603 00:26:36,534 --> 00:26:37,450 DAVID J. MALAN: Right. 604 00:26:37,450 --> 00:26:39,600 So, ma, die eerste keer Ek tik dit in, is om 605 00:26:39,600 --> 00:26:42,710 iewers gestoor in my rekenaar se geheue, maar in 'n ander plek 606 00:26:42,710 --> 00:26:44,690 as die tweede keer wat ek tik in ma. 607 00:26:44,690 --> 00:26:46,580 Nou is dit beslis kan word new. 608 00:26:46,580 --> 00:26:49,205 Die rekenaar kan slim wees en besef dat hierdie twee stringe, hey, 609 00:26:49,205 --> 00:26:49,954 hulle is identies. 610 00:26:49,954 --> 00:26:51,520 Laat my nie kere stoor dit. 611 00:26:51,520 --> 00:26:54,229 Maar rekenaars dit nie doen nie optimalisering, tensy jy hulle vertel om te. 612 00:26:54,229 --> 00:26:56,061 So, by verstek, hulle is net gaan aan die einde 613 00:26:56,061 --> 00:26:57,670 in twee verskillende plekke in die geheue. 614 00:26:57,670 --> 00:27:01,570 En so meer duidelik wanneer wees ons vergelyk die twee stringe, 615 00:27:01,570 --> 00:27:03,950 die eerste genoem s, die tweede genoem 616 00:27:03,950 --> 00:27:08,530 t, wat spesifiek was ek vergelyk hier op die lyn 13? 617 00:27:08,530 --> 00:27:09,494 Ja. 618 00:27:09,494 --> 00:27:12,390 >> GEHOOR: Dis die plek in die geheue dat die veranderlike sal wys. 619 00:27:12,390 --> 00:27:14,900 >> DAVID J. MALAN: Presies, ek was vergelyk die plek in die geheue 620 00:27:14,900 --> 00:27:16,300 dat diegene veranderlikes verwys na. 621 00:27:16,300 --> 00:27:20,560 So spesifiek, as ma was by byte nommer 1, en 2, en 3, 622 00:27:20,560 --> 00:27:24,020 en 4-- want onthou agteroorskuisstreep 0 moet al die pad aan die einde wees. 623 00:27:24,020 --> 00:27:29,420 En die ander geval van ma, m-o-m, was by adres 10, 11, 12, en 13. 624 00:27:29,420 --> 00:27:33,100 Ek was te vergelyk 1, daardie adres, wat plek in die geheue, 625 00:27:33,100 --> 00:27:35,160 teen 10, wat natuurlik nie dieselfde nie. 626 00:27:35,160 --> 00:27:36,260 1 is nie 10. 627 00:27:36,260 --> 00:27:39,620 >> So dit is lekker in daardie dit is redelik eenvoudig. 628 00:27:39,620 --> 00:27:42,870 Maar dit is problematies sover kan ons nie lyk snare te vergelyk. 629 00:27:42,870 --> 00:27:44,930 So fundamentally-- en op hierdie lae vlak, 630 00:27:44,930 --> 00:27:47,300 as jy wou implementeer 'n program om te vergelyk 631 00:27:47,300 --> 00:27:50,270 twee afsonderlike woorde wat die gebruiker getik in vir gehalte, 632 00:27:50,270 --> 00:27:53,944 doen hulle line-up vir char char, net in algemene terme, 633 00:27:53,944 --> 00:27:55,360 wat doen wat ons moet doen, glo? 634 00:27:55,360 --> 00:27:57,940 Dit is nie voldoende om net kyk na die twee adresse. 635 00:27:57,940 --> 00:27:58,860 Wat moet ons doen? 636 00:27:58,860 --> 00:27:59,360 Ja? 637 00:27:59,360 --> 00:28:01,120 >> GEHOOR: iterasies deur die string [onhoorbaar]. 638 00:28:01,120 --> 00:28:02,600 >> DAVID J. MALAN: Ja, laat Itereer deur die string. 639 00:28:02,600 --> 00:28:05,808 Kom ons gebruik 'n lus vir die, 'n while lus, of alles wat jy die meeste gemaklik met. 640 00:28:05,808 --> 00:28:08,840 En as ons het twee stringe het iewers in die geheue, laat ons kyk na elke se 641 00:28:08,840 --> 00:28:11,770 eerste karakter, dan elke tweede karakter, dan die derde en vierde 642 00:28:11,770 --> 00:28:15,206 en vyfde, totdat ons getref wat spesiale brandwag waarde? 643 00:28:15,206 --> 00:28:16,080 GEHOOR: [onhoorbaar] 644 00:28:16,080 --> 00:28:18,800 DAVID J. MALAN: Ja, agteroorskuisstreep nul, op watter punt in óf string 645 00:28:18,800 --> 00:28:20,100 ons kan besluit dit is dit. 646 00:28:20,100 --> 00:28:21,970 Het ons ooreenstem elke enkele karakter? 647 00:28:21,970 --> 00:28:22,990 Indien nie, keer terug onwaar. 648 00:28:22,990 --> 00:28:24,770 As dit so is, terug te keer waar. 649 00:28:24,770 --> 00:28:28,800 En so dit is presies wat hierdie weergawe van die program te vergelyk-1.c doen. 650 00:28:28,800 --> 00:28:31,677 Dit is identies aan wat ons gekyk na Maandag, behalwe dat ek 651 00:28:31,677 --> 00:28:34,760 ontslae geraak van die woord string-- al wat geen funksionele impact-- al 652 00:28:34,760 --> 00:28:37,450 Ek doen nou die verwydering 'n visuele opleiding wiele, 653 00:28:37,450 --> 00:28:40,880 maar om dit duidelik dat sien s en t is adresse. 654 00:28:40,880 --> 00:28:43,020 En dit is wat die ster, die asterisk, verteenwoordig 655 00:28:43,020 --> 00:28:46,690 is 'n adres, andersins bekend meer tegnies as 'n wyser. 656 00:28:46,690 --> 00:28:49,880 >> So wanneer ek verklaar s op reël 9 en sê char * s, 657 00:28:49,880 --> 00:28:52,160 dit beteken nie dat gee my 'n string. 658 00:28:52,160 --> 00:28:56,360 Dit beteken vir my 'n veranderlike wie doel in die lewe is om 'n adres te stoor. 659 00:28:56,360 --> 00:29:00,400 Omdat ek oor die plaas adres van 'n string in dit. 660 00:29:00,400 --> 00:29:03,500 En inderdaad, GetString, te wees duidelik, nie 'n string terug te keer. 661 00:29:03,500 --> 00:29:06,110 Dit maak nie ma terug backslash nul, per se. 662 00:29:06,110 --> 00:29:10,005 Wat beteken GetString spesifiek en juis terugkeer? 663 00:29:10,005 --> 00:29:10,880 GEHOOR: [onhoorbaar] 664 00:29:10,880 --> 00:29:14,080 DAVID J. MALAN: 'n adres, die adres van die eerste karakter 665 00:29:14,080 --> 00:29:16,070 in sommige string wat dit gekry het. 666 00:29:16,070 --> 00:29:19,250 En so nou ons sien 'n spesiale navraag weer. 667 00:29:19,250 --> 00:29:20,640 En ek verwys na hierdie vroeër. 668 00:29:20,640 --> 00:29:23,620 Dit gaan 'n goeie konvensie dat ons sal weer en weer kyk nou. 669 00:29:23,620 --> 00:29:27,540 Ek check om seker te maak dat die s is nie van nul en t is nie null. 670 00:29:27,540 --> 00:29:30,100 Omdat gebaseer op my regtig vinnige melding vroeër, 671 00:29:30,100 --> 00:29:35,510 wat kan beteken as GetString terugkeer nie 'n adres, maar N-U-L-L, wat weer 672 00:29:35,510 --> 00:29:36,990 'n paar spesiale waarde? 673 00:29:36,990 --> 00:29:37,890 >> GEHOOR: Fout. 674 00:29:37,890 --> 00:29:38,600 >> DAVID J. MALAN: Dit is 'n fout. 675 00:29:38,600 --> 00:29:39,550 Iets het verkeerd geloop. 676 00:29:39,550 --> 00:29:41,341 En wat tipies kan gebeur, veral 677 00:29:41,341 --> 00:29:45,162 met strings-- wat dalk onbekende lengte in advance-- 678 00:29:45,162 --> 00:29:46,870 Miskien is die rekenaars uit die geheue, miskien 679 00:29:46,870 --> 00:29:49,280 jy in so 'n getikte lang woord of sin 680 00:29:49,280 --> 00:29:51,880 of geplak so 'n groot opstel daar is net nie genoeg geheue. 681 00:29:51,880 --> 00:29:55,340 En so GetString kan nie terugkeer die adres van die hele ding, 682 00:29:55,340 --> 00:29:56,620 sodat dit net terug niks. 683 00:29:56,620 --> 00:30:00,580 En dit sê 'n fout het gebeur deur die terugkeer van die spesiale NULL waarde. 684 00:30:00,580 --> 00:30:02,890 Dit is die nul-adres, om so te praat. 685 00:30:02,890 --> 00:30:06,157 >> Nou blyk dit kom met 'n C funksie dat iterasie doen. 686 00:30:06,157 --> 00:30:09,240 Ons hoef nie te implementeer met 'n lus vir die of 'n while lus onsself. 687 00:30:09,240 --> 00:30:11,150 Ons kan nie 'n funksie te gebruik, saaklik genoem, 688 00:30:11,150 --> 00:30:15,400 roer comp, of string vergelyk, wie se doel in die lewe is om presies dit te doen. 689 00:30:15,400 --> 00:30:19,990 Jy gee dit twee wysers, twee adresse, en dit sal gaan na die adresse 690 00:30:19,990 --> 00:30:23,130 en dan te vergelyk brief brief vir brief vir gehalte, 691 00:30:23,130 --> 00:30:26,610 stop net vir dit wat waar is? 692 00:30:26,610 --> 00:30:31,540 Wanneer intuïtief comp moet roer ophou iterating, net om duidelik te wees? 693 00:30:31,540 --> 00:30:35,400 Wanneer dit tref 'n backslash 0 in óf string, op watter punt is dit kan besluit 694 00:30:35,400 --> 00:30:38,910 Alles het wat ooreenstem, of is daar 'n verskil is? 695 00:30:38,910 --> 00:30:42,740 >> So, as ons hardloop dit nou en probeer ons klein kapitalisasie spel, 696 00:30:42,740 --> 00:30:49,260 so maak vergelyk-1, ./compare-1 en tik ma in klein sowel tye. 697 00:30:49,260 --> 00:30:50,560 Nou is dit dieselfde ding. 698 00:30:50,560 --> 00:30:54,080 En as ek doen dit weer met klein en dan miskien hoofletters. 699 00:30:54,080 --> 00:30:56,720 Nou is dit inderdaad onderskei tussen die boonste en kleinletters. 700 00:30:56,720 --> 00:31:00,440 So nie al wat hard of magiese, maar dit beteken nou verduidelik 701 00:31:00,440 --> 00:31:03,140 wat gaan aan onder die enjinkap. 702 00:31:03,140 --> 00:31:07,640 >> So, wat meer kan ons onttrek Van hierdie soort van les? 703 00:31:07,640 --> 00:31:08,980 So laat ons neem 'n blik op hierdie. 704 00:31:08,980 --> 00:31:15,380 Ek gaan om voort te gaan en skryf 'n vinnige program hier genoem kopie-0. 705 00:31:15,380 --> 00:31:21,594 En nou, laat ons gaan voort en eintlik Kom ons doen this-- met kopie-0, 706 00:31:21,594 --> 00:31:23,010 'n blik op wat ek hier het. 707 00:31:23,010 --> 00:31:24,712 Ek het eers die gebruiker te vertel, sê iets. 708 00:31:24,712 --> 00:31:26,420 Toe kry ek 'n string en ek gestoor in s. 709 00:31:26,420 --> 00:31:29,810 Dan gaan ek as s gelyk gelyk NULL, net terug 1. 710 00:31:29,810 --> 00:31:31,590 So dit is net standaard fout nagaan. 711 00:31:31,590 --> 00:31:33,112 Niks interessant gebeur het. 712 00:31:33,112 --> 00:31:36,320 En in die feit, as ons ontslae te raak van die fout nagaan, dit lyk soos 1 week kode 713 00:31:36,320 --> 00:31:36,985 op die oomblik. 714 00:31:36,985 --> 00:31:39,110 Maar ek het begin om 'n te kry bietjie beter oor dat. 715 00:31:39,110 --> 00:31:43,340 >> Nou in lyn 16, 'n week gelede, miskien selfs 'n paar dae of minute gelede 716 00:31:43,340 --> 00:31:46,720 jy kan sê lyn 16 is skep van 'n veranderlike genoem t 717 00:31:46,720 --> 00:31:48,219 en kopiëring is in dit. 718 00:31:48,219 --> 00:31:50,010 En dit is 'n perfek redelike afhaal. 719 00:31:50,010 --> 00:31:51,560 Maar wees nou meer akkuraat. 720 00:31:51,560 --> 00:31:54,190 Wat gebeur in lyn 16? 721 00:31:54,190 --> 00:31:56,170 Wat is om gekopieer van links na regs? 722 00:31:56,170 --> 00:31:56,669 Ja? 723 00:31:56,669 --> 00:31:58,490 GEHOOR: Is t kry 'n adres van s? 724 00:31:58,490 --> 00:32:01,220 >> DAVID J. MALAN: Presies, t is om die adres van die s. 725 00:32:01,220 --> 00:32:05,170 So nou duidelik te wees, as ek gaan terug na wat vroeër byvoorbeeld 726 00:32:05,170 --> 00:32:08,520 en ek trek die ding wat ek in getik het. 727 00:32:08,520 --> 00:32:11,640 En wat ek getik in-- hier is s, en hier 728 00:32:11,640 --> 00:32:15,830 is wat ek in iewers getik in geheue, ma en dan 'n backslash 729 00:32:15,830 --> 00:32:17,840 0 dit is bygevoeg vir my. 730 00:32:17,840 --> 00:32:23,060 Wat ek gestoor in hier, onthou, dit is op plek 1, 2, 3, 4, 731 00:32:23,060 --> 00:32:24,655 Dit is wat tans in s. 732 00:32:24,655 --> 00:32:29,220 So as op die lyn 16, sê ek gee my ander veranderlike genoem t en store 733 00:32:29,220 --> 00:32:33,590 by die waarde van s, wat kry hier gestoor sal nie ma 734 00:32:33,590 --> 00:32:35,480 maar eerder net die nommer 1. 735 00:32:35,480 --> 00:32:38,520 >> So as ons vorentoe kyk in hierdie program Nou, wat gaan gebeur? 736 00:32:38,520 --> 00:32:40,690 So sien dat daar hierdie funksie jy dalk 737 00:32:40,690 --> 00:32:44,410 het hierdie gebruik 'n geruime tyd gelede vir die keiser of Vigenere, of dalk glad nie. 738 00:32:44,410 --> 00:32:48,170 Ek eis met my printf, ek is gaan om te kapitaliseer die kopie t. 739 00:32:48,170 --> 00:32:51,616 Eerste in die lyn 19, vinnige gesonde verstand kyk, StrLen tjeks die lengte van t. 740 00:32:51,616 --> 00:32:53,740 Want ek wil nie probeer om iets te kapitaliseer 741 00:32:53,740 --> 00:32:55,104 As daar is geen string daar. 742 00:32:55,104 --> 00:32:57,520 As die gebruiker net druk Enter, daar is niks om te kapitaliseer. 743 00:32:57,520 --> 00:33:01,100 So ek wil nie line 21 te doen. 744 00:33:01,100 --> 00:33:05,758 So lyn 21 kapitaliseer watter letter, blykbaar, in t? 745 00:33:05,758 --> 00:33:06,514 >> GEHOOR: m? 746 00:33:06,514 --> 00:33:08,722 DAVID J. MALAN: Dit lyk soos dit is kopiëring watter een? 747 00:33:08,722 --> 00:33:09,486 GEHOOR: m. 748 00:33:09,486 --> 00:33:10,450 DAVID J. MALAN: Uh, m. 749 00:33:10,450 --> 00:33:12,685 OK, so die eerste m, omdat kennisgewing dat ek 750 00:33:12,685 --> 00:33:14,935 verby te toupper, wat as jy dit nog nooit gesien het dit is 751 00:33:14,935 --> 00:33:16,980 net 'n funksie om kapitaliseer aangesien sy insette. 752 00:33:16,980 --> 00:33:20,240 t bracket nul beteken gee vir my die nul karakter van t. 753 00:33:20,240 --> 00:33:22,550 En so hoe gaan dit prentjie verander, om duidelik te wees? 754 00:33:22,550 --> 00:33:25,490 755 00:33:25,490 --> 00:33:29,160 Wat moet kry herskryf of verander met betrekking tot s en t en ma 756 00:33:29,160 --> 00:33:30,097 backslash nul. 757 00:33:30,097 --> 00:33:31,470 >> GEHOOR: [onhoorbaar] 758 00:33:31,470 --> 00:33:34,030 >> DAVID J. MALAN: Ja, so hierdie een hier net 759 00:33:34,030 --> 00:33:40,860 moet verander kry aan- los this-- moet raak verander na 'n kapitaal m. 760 00:33:40,860 --> 00:33:44,330 Maar nou, kyk later in die program, as ek druk 761 00:33:44,330 --> 00:33:49,800 s en t as ek skoon hier, kyk wat is gaan gebeur uit te druk s en t. 762 00:33:49,800 --> 00:33:54,310 So maak kopie-0, ./copy-0. 763 00:33:54,310 --> 00:33:57,140 Laat my gaan voort en tik in ma in alle klein. 764 00:33:57,140 --> 00:34:00,140 Let beide die oorspronklike en die kopie gekapitaliseer. 765 00:34:00,140 --> 00:34:00,850 Hoekom? 766 00:34:00,850 --> 00:34:04,431 Wel, s en t is albei verwys na, as jy wil, dieselfde stuk van die geheue. 767 00:34:04,431 --> 00:34:06,930 En eerlik, dit is om regtig uninteresting-- die feit 768 00:34:06,930 --> 00:34:09,150 wat ons gebruik adres nul hier. 769 00:34:09,150 --> 00:34:11,719 Ek bedoel, ek het nie regtig omgee waar dinge is in die geheue. 770 00:34:11,719 --> 00:34:13,550 Jammer ek skoonmaak 'n bietjie te veel. 771 00:34:13,550 --> 00:34:15,674 Maar ek het nie regtig omgee waar dinge in die geheue. 772 00:34:15,674 --> 00:34:18,510 En so, inderdaad wat programmeerders is geneig om te dink oor 773 00:34:18,510 --> 00:34:21,080 is dat wanneer jy praat oor 'n adres, of 'n wyser, 774 00:34:21,080 --> 00:34:22,679 wat omgee waar dit in die geheue. 775 00:34:22,679 --> 00:34:24,989 Ek gee nie om as dit by byte een of 'n miljard. 776 00:34:24,989 --> 00:34:27,920 Ek het net sorg dat dit veranderlike is effektief 777 00:34:27,920 --> 00:34:29,620 wys op daardie stuk van die geheue. 778 00:34:29,620 --> 00:34:33,350 En so, voortaan, eerder as verskoning oor arbitrêre geheue adresse, laat 779 00:34:33,350 --> 00:34:36,710 net begin om te trek wenke as wysers, as pyle. 780 00:34:36,710 --> 00:34:39,340 So, wat s en t werklik is, volgens hierdie program, 781 00:34:39,340 --> 00:34:42,130 as gevolg van hoe ek geskep t, dit is net twee afsonderlike veranderlikes 782 00:34:42,130 --> 00:34:43,840 wys op dieselfde stuk van die geheue. 783 00:34:43,840 --> 00:34:45,215 En ons gee nie om waar hulle is. 784 00:34:45,215 --> 00:34:47,130 Sodat ons kan abstrakte weg wat detail. 785 00:34:47,130 --> 00:34:48,780 >> So hoe kan ek dit regmaak? 786 00:34:48,780 --> 00:34:54,120 As ek wil 'n weergawe van die kopie te skryf program wat eintlik afskrifte van die string 787 00:34:54,120 --> 00:34:56,840 en kapitaliseer net die kopie, net intuïtief, 788 00:34:56,840 --> 00:34:59,766 wat het 'n wees bestanddeel ons oplossing? 789 00:34:59,766 --> 00:35:00,640 GEHOOR: [onhoorbaar] 790 00:35:00,640 --> 00:35:01,420 DAVID J. MALAN: Ons moet 'n wat? 791 00:35:01,420 --> 00:35:01,820 GEHOOR: stuk van die geheue. 792 00:35:01,820 --> 00:35:03,280 DAVID J. MALAN: Ons moet 'n ander deel van die geheue, reg? 793 00:35:03,280 --> 00:35:05,360 Ons weet nie hoe om doen dit nie, noodwendig nie. 794 00:35:05,360 --> 00:35:11,330 Maar ek soort van moet dit so gebeur dat die oorspronklike ma in kleinletters 795 00:35:11,330 --> 00:35:14,170 beland in daardie ekstra stuk van die geheue. 796 00:35:14,170 --> 00:35:19,770 En dan wanneer ek die kopie, ek wil nie hierdie kopie hier te verander. 797 00:35:19,770 --> 00:35:26,020 Ek plaas net hier te verander kopie sodat die oorspronklike is onveranderd. 798 00:35:26,020 --> 00:35:27,980 >> So, laat ons sien hoe ons dit kan doen nie. 799 00:35:27,980 --> 00:35:31,800 In kopie-1, wat reeds gestroop van kommentaar, 800 00:35:31,800 --> 00:35:33,250 maar online kommentaar. 801 00:35:33,250 --> 00:35:36,710 Ons plaas doen following-- hierdie lyne identies, kry vir my 'n string 802 00:35:36,710 --> 00:35:38,340 en noem dit is. 803 00:35:38,340 --> 00:35:43,500 Maar nou laat ons kyk na een van ons mees kompleks, maar die laaste van die kompleksiteit 804 00:35:43,500 --> 00:35:47,340 vir 'n rukkie, lyn 16 doen presies dit. 805 00:35:47,340 --> 00:35:49,400 So as jou gemaklike met die prentjie wat ons net drew-- 806 00:35:49,400 --> 00:35:51,790 gee my 'n nuwe stuk van die geheue, kopieer alles in dit, 807 00:35:51,790 --> 00:35:53,730 Kom ons kyk hoe ons te vertaal dat die kode. 808 00:35:53,730 --> 00:35:59,400 >> So line 16, op die linkerkant, char * t gee my die boks hier. 809 00:35:59,400 --> 00:36:00,230 Dit is al wat dit doen nie. 810 00:36:00,230 --> 00:36:03,240 Op die regterkant, m alloc of malloc, 811 00:36:03,240 --> 00:36:06,480 is geheuetoekenning, super fancy, 'n kriptiese manier om net te sê 812 00:36:06,480 --> 00:36:07,640 gee my 'n stuk van die geheue. 813 00:36:07,640 --> 00:36:09,290 Hoeveel geheue het ons nodig? 814 00:36:09,290 --> 00:36:10,910 Wel, is 'n soort van 'n groot uitdrukking. 815 00:36:10,910 --> 00:36:12,570 Maar laat ons sien wat dit sê hier. 816 00:36:12,570 --> 00:36:15,940 So hierdie, natuurlik, is gee vir my die string lengte van s. 817 00:36:15,940 --> 00:36:19,094 So, ma moet dit wat wees? 818 00:36:19,094 --> 00:36:21,010 So net drie, reg? ma is drie karakters. 819 00:36:21,010 --> 00:36:22,830 Jy tel nie die backslash nul wanneer jy 820 00:36:22,830 --> 00:36:25,960 praat oor die lengte van 'n string dis eintlik die menslike sigbare letters. 821 00:36:25,960 --> 00:36:28,020 So ma, so dit gee my 3. 822 00:36:28,020 --> 00:36:31,170 Maar wag 'n minuut, ek voeg nou 1. 823 00:36:31,170 --> 00:36:34,861 Hoekom moet ek eintlik wil ken 4 grepe en nie net 3? 824 00:36:34,861 --> 00:36:35,360 Ja? 825 00:36:35,360 --> 00:36:36,910 >> GEHOOR: Vir die brandwag waarde? 826 00:36:36,910 --> 00:36:38,951 >> DAVID J. MALAN: Presies, vir daardie brandwag waarde. 827 00:36:38,951 --> 00:36:40,840 Vir agteroorskuisstreep nul, Ek moet 4 grepe totaal. 828 00:36:40,840 --> 00:36:42,870 So ek moet die lengte van die string plus 1. 829 00:36:42,870 --> 00:36:45,400 En dan net vir 'n goeie measure-- selfs al op hierdie stelsel, 830 00:36:45,400 --> 00:36:49,390 dit is altyd gaan 1-- te wees ek sê vermenigvuldig dit met die grootte van 'n kar. 831 00:36:49,390 --> 00:36:51,552 Blyk sizeof is 'n operateur in C wat 832 00:36:51,552 --> 00:36:53,260 net vir jou vertel die aantal grepe wat 833 00:36:53,260 --> 00:36:54,700 wat nodig is vir 'n sekere tipe data. 834 00:36:54,700 --> 00:36:57,740 Dit werk nie vir skikkings, Tipies, soms is dit nie. 835 00:36:57,740 --> 00:36:59,210 Maar in die algemene geval, no. 836 00:36:59,210 --> 00:37:02,330 Maar dit sal vir my sê hoeveel grepe n char is, wat blyk altyd 1. 837 00:37:02,330 --> 00:37:04,080 So dit is soos vermenigvuldig met 1. 838 00:37:04,080 --> 00:37:05,900 >> So super kriptiese soek reël van die kode. 839 00:37:05,900 --> 00:37:09,320 Maar al wat dit doen is gee vir my 'n stuk van die geheue. 840 00:37:09,320 --> 00:37:13,590 Maar beteken dit blyk te wees kopiëring enigiets in daardie geheue? 841 00:37:13,590 --> 00:37:14,560 Nog nie. 842 00:37:14,560 --> 00:37:22,040 En so wat doen ek op die lyn 22, en 23, 24, 25, goed, ek het net dit te doen. 843 00:37:22,040 --> 00:37:23,760 En dit is 'n soort van ou skool stuff nou. 844 00:37:23,760 --> 00:37:26,010 Dit is soos PSet 2, waar jy net beweeg dinge 845 00:37:26,010 --> 00:37:28,620 rond in die geheue, of eerder in stringe. 846 00:37:28,620 --> 00:37:31,920 >> So ek iterating van 0 tot die lengte van die string s. 847 00:37:31,920 --> 00:37:37,820 En ek is die kopiëring van die i-de karakter in s in die i-de karakter in t. 848 00:37:37,820 --> 00:37:41,820 En omdat Ek, die programmeerder, gemaak seker presies soos baie grepe toewys 849 00:37:41,820 --> 00:37:44,600 as ek nodig het, dit is perfek een-tot-een verhouding. 850 00:37:44,600 --> 00:37:47,060 En ek kopieer ma in onderkas om die nuwe een. 851 00:37:47,060 --> 00:37:50,170 En dan laastens, ek doen hierdie lyn. 852 00:37:50,170 --> 00:37:54,637 En so die effek is slegs om te kapitaliseer hier t. 853 00:37:54,637 --> 00:37:56,470 So 'n baie om te absorbeer nie, maar as jy net oorweeg 854 00:37:56,470 --> 00:37:58,220 wat regtig aangaan op onder die kap 855 00:37:58,220 --> 00:38:00,880 is net die beweging van hierdie grepe rond, alles wat 856 00:38:00,880 --> 00:38:06,617 is nodig om op te los hierdie probleem is regverdig om ons die stuk van die geheue te gee. 857 00:38:06,617 --> 00:38:08,450 En aan die risiko van oorweldigend, laat ek jou wys 858 00:38:08,450 --> 00:38:13,200 een ander voorbeeld wat amper identies, behalwe vir hierdie een 859 00:38:13,200 --> 00:38:14,350 reël van die kode. 860 00:38:14,350 --> 00:38:18,870 So dit is die hacker weergawe van hierdie program, as jy wil. 861 00:38:18,870 --> 00:38:21,050 Maar laat ons net distilleer dit in wat gaan aan. 862 00:38:21,050 --> 00:38:28,920 Line 24 gebruik word om hierdie t wees bracket i kry s bracket i. 863 00:38:28,920 --> 00:38:33,370 Nou, ek is te verander in die veel meer kriptiese star t 864 00:38:33,370 --> 00:38:36,280 plus 1 gelyk star s plus 1. 865 00:38:36,280 --> 00:38:38,702 >> So wat gebeur en hoekom het ons 'n ster karakter? 866 00:38:38,702 --> 00:38:41,410 Ons het die ster gesien nie, en dit word anders hier gebruik word. 867 00:38:41,410 --> 00:38:45,490 Ons het vroeër gesien char *, nou is ek sien 'n ster aan die begin, en dit is OK. 868 00:38:45,490 --> 00:38:48,190 Omdat dit blyk ons kan soort van net aflei 869 00:38:48,190 --> 00:38:50,280 van dié eerste beginsels wat aangaan. 870 00:38:50,280 --> 00:38:53,860 So net om duidelik te wees, wat s? 871 00:38:53,860 --> 00:38:55,052 Verlede week was dit 'n string. 872 00:38:55,052 --> 00:38:56,260 Dit beteken nie meer genoeg nie. 873 00:38:56,260 --> 00:38:57,690 Wat is s, spesifiek? 874 00:38:57,690 --> 00:38:58,590 >> GEHOOR: [onhoorbaar] 875 00:38:58,590 --> 00:38:59,881 >> DAVID J. MALAN: Dit is 'n wyser. 876 00:38:59,881 --> 00:39:02,610 Dit is die adres van die eerste karakter wat ons getik. 877 00:39:02,610 --> 00:39:04,780 OK, wat is t? 878 00:39:04,780 --> 00:39:05,660 >> GEHOOR: [onhoorbaar] 879 00:39:05,660 --> 00:39:07,950 >> DAVID J. MALAN: Die adres van die eerste byte 880 00:39:07,950 --> 00:39:10,490 in t, dat deel van die geheue hertoegewys. 881 00:39:10,490 --> 00:39:14,720 So dit blyk dat wanneer ons Itereer van 0 tot aan die einde string 882 00:39:14,720 --> 00:39:17,424 length-- eerste van alles, i begin by 0, want 883 00:39:17,424 --> 00:39:18,840 van hierdie ou skool vir lus ding. 884 00:39:18,840 --> 00:39:22,400 So net vir die eenvoud, laat aanvaar dat die eerste reël van die kode 885 00:39:22,400 --> 00:39:23,760 is regtig net hierdie, reg. 886 00:39:23,760 --> 00:39:26,080 As ek nul, en voeg nul iets vermoedelik 887 00:39:26,080 --> 00:39:27,540 gaan nie 'n effek. 888 00:39:27,540 --> 00:39:28,560 >> So, wat is hierdie woord? 889 00:39:28,560 --> 00:39:31,600 Dit blyk dat die ster operateur in hierdie konteks 890 00:39:31,600 --> 00:39:33,700 is die dereference operateur, wat net 891 00:39:33,700 --> 00:39:37,530 'n fancy manier om te sê gaan aan die volgende adres. 892 00:39:37,530 --> 00:39:42,080 So as s is die adres van die eerste karakter in hierdie deel van die geheue, 893 00:39:42,080 --> 00:39:43,630 * s middel gaan daar. 894 00:39:43,630 --> 00:39:45,630 En omdat ons getrek die prentjie op hierdie manier, 895 00:39:45,630 --> 00:39:47,430 kan jy die neem van die volgende geestelike model. 896 00:39:47,430 --> 00:39:51,030 As dit is s, en jy sê * s, * s soort van soos geute en ladders, 897 00:39:51,030 --> 00:39:54,540 as jy onthou die spel van kleins af, is soos volg dat die pyl en gaan 898 00:39:54,540 --> 00:39:55,570 die adres. 899 00:39:55,570 --> 00:39:57,080 >> * t is die dieselfde ding. 900 00:39:57,080 --> 00:39:59,855 So hier begin, gaan na die stuk. 901 00:39:59,855 --> 00:40:03,350 Ek kan nie net trek op die skerm op die manier. 902 00:40:03,350 --> 00:40:05,560 * t beteken om hier te gaan. 903 00:40:05,560 --> 00:40:08,830 En dan, die lus is net sê beweeg hier hierdie karakter, 904 00:40:08,830 --> 00:40:11,330 beweeg hier hierdie karakter, beweeg hier hierdie karakter. 905 00:40:11,330 --> 00:40:12,890 Maar hoe doen ek dit incrementation doen? 906 00:40:12,890 --> 00:40:15,430 Ek het nodig om ongedaan te maak wat ek net verwyder. 907 00:40:15,430 --> 00:40:18,140 Dit is wat algemeen genoem wyser rekenkundige, wat 908 00:40:18,140 --> 00:40:20,040 beteken wiskunde met adresse. 909 00:40:20,040 --> 00:40:22,460 >> As in hierdie lus, Ek hou die verhoog i, 910 00:40:22,460 --> 00:40:26,880 en s is 'n adres en t is 'n adres, as ek net bly by 1, 911 00:40:26,880 --> 00:40:31,406 wat net beteken bly beweeg vorentoe, en stuur en stuur in die geheue. 912 00:40:31,406 --> 00:40:34,030 Dit is soos Oxford Street, die straat dat die CS gebou is op. 913 00:40:34,030 --> 00:40:36,490 Die CS geboue is op 33 Oxford Street. 914 00:40:36,490 --> 00:40:39,870 So as jy was om te doen 33 Oxford Street plus 1, 915 00:40:39,870 --> 00:40:42,870 wat bring jy 34 Oxford Straat, dan 35 Oxford Street, 916 00:40:42,870 --> 00:40:46,380 dan 36 Oxford Street, ongeag die geboue eintlik - indien hulle bestaan. 917 00:40:46,380 --> 00:40:50,540 En so, dit is al wat ons doen hier met wyser rekenkundige. 918 00:40:50,540 --> 00:40:53,820 >> So dit is 'n super arcane manier van uitdrukking onsself. 919 00:40:53,820 --> 00:40:56,160 Maar alles wat gebeur onder die enjinkap 920 00:40:56,160 --> 00:40:59,330 is net na hierdie adresse, soos na 'n kaart, as jy wil, 921 00:40:59,330 --> 00:41:02,692 of die volgende pyle soos ons het getrek op die skerm. 922 00:41:02,692 --> 00:41:04,910 OK, 'n baie om te verteer. 923 00:41:04,910 --> 00:41:10,410 Enige vraag oor sintaksis, konsepte, wysers, malloc, of die wil. 924 00:41:10,410 --> 00:41:11,480 Ja, hier eerste. 925 00:41:11,480 --> 00:41:13,755 >> GEHOOR: So waar daardie sê * t gelyk toupper * t, 926 00:41:13,755 --> 00:41:15,575 is dat gaan om te kapitaliseer al die letters of just-- 927 00:41:15,575 --> 00:41:17,283 >> DAVID J. MALAN: Ag, regtig 'n goeie vraag. 928 00:41:17,283 --> 00:41:19,805 So in hierdie lyn hier, 31, gaan dit om te kapitaliseer 929 00:41:19,805 --> 00:41:21,430 die eerste letter van of al die briewe. 930 00:41:21,430 --> 00:41:23,460 So laat antwoord dat deur te gaan terug na die eerste beginsels. 931 00:41:23,460 --> 00:41:26,168 En die eerste beginsels hier bedoel ek gaan net na die basiese definisies 932 00:41:26,168 --> 00:41:27,000 van wat betrokke is. 933 00:41:27,000 --> 00:41:29,770 So toupper is 'n funksie wat kapitaliseer n kar. 934 00:41:29,770 --> 00:41:30,530 Dit is al. 935 00:41:30,530 --> 00:41:36,740 * t beteken gaan na die first-- gaan na die adres in t. 936 00:41:36,740 --> 00:41:40,350 So, in die prentjie, indien dit die stuk geheue ons toegeken met malloc, 937 00:41:40,350 --> 00:41:43,310 en dit is t, * t beteken gaan hier. 938 00:41:43,310 --> 00:41:46,710 >> Intussen is jy verby wat waarde, klein m 939 00:41:46,710 --> 00:41:50,040 om toupper, jy kry terug kapitaal M, waar gaan jy dit plaas? 940 00:41:50,040 --> 00:41:52,410 Jy sit dit in dieselfde plek. 941 00:41:52,410 --> 00:41:55,540 En so deur daardie logika van daardie basiese definisies is dit net 942 00:41:55,540 --> 00:41:58,792 kapitaliseer die eerste letter tensy jy Itereer met i of 'n 943 00:41:58,792 --> 00:42:02,000 lus of 'n while lus, dit gaan nie om enigiets meer as jy hom vra nie. 944 00:42:02,000 --> 00:42:02,583 Goeie vraag. 945 00:42:02,583 --> 00:42:03,237 Ja? 946 00:42:03,237 --> 00:42:05,369 >> GEHOOR: Hoekom het jy gebruik die dereference metode eerder as 947 00:42:05,369 --> 00:42:05,979 die skikking? 948 00:42:05,979 --> 00:42:07,395 >> DAVID J. MALAN: Ag, goeie vraag. 949 00:42:07,395 --> 00:42:10,672 Hoekom sal jy die dereference gebruik metode in plaas van die skikking metode? 950 00:42:10,672 --> 00:42:12,130 Geen spesifieke rede, om eerlik te wees. 951 00:42:12,130 --> 00:42:15,290 En, in werklikheid, vir hierdie soort voorbeeld, regs, 952 00:42:15,290 --> 00:42:17,556 Ek is net die maak van die argument program meer ingewikkeld, 953 00:42:17,556 --> 00:42:19,680 meer oë glas oor, mense uitcheck 954 00:42:19,680 --> 00:42:22,830 want dit lyk super arcane, maar selfs al is dit dieselfde ding doen. 955 00:42:22,830 --> 00:42:26,695 En so, eerlik, dit is 'n onnodig visueel komplekse oplossing 956 00:42:26,695 --> 00:42:27,320 om die probleem. 957 00:42:27,320 --> 00:42:29,580 >> Dit is nog steeds 'n goeie ontwerp, vyf uit vyf vir die ontwerp, 958 00:42:29,580 --> 00:42:33,140 of dit nou in die bracket notasie of die wyser notasie. 959 00:42:33,140 --> 00:42:36,299 But-- veral wanneer ons later in die kursus in PSet 5 960 00:42:36,299 --> 00:42:39,340 wanneer ons implementeer woordeboek wat Ek het genoem 'n paar van times-- 961 00:42:39,340 --> 00:42:42,300 ons sal eintlik omgee oor die lae vlak geheue adresse 962 00:42:42,300 --> 00:42:44,140 dat ons regtig verstaan wat gaan aan. 963 00:42:44,140 --> 00:42:48,300 >> Maar vir nou, is dit blyk dat hierdie reël van die kode hier vierkantige hakies 964 00:42:48,300 --> 00:42:49,900 nie regtig bestaan ​​nie. 965 00:42:49,900 --> 00:42:52,230 Hulle is wat genoem sintaktiese suiker, wat 966 00:42:52,230 --> 00:42:58,390 is net 'n uitgesoekte koel manier om te sê die samesteller vat vierkantige hakies te wees 967 00:42:58,390 --> 00:43:00,420 wat wiskundige uitdrukking. 968 00:43:00,420 --> 00:43:02,660 So dit is 'n menslike konvensie in staat wees om net skryf 969 00:43:02,660 --> 00:43:04,220 hierdie baie gebruikers-vriendelike hakies. 970 00:43:04,220 --> 00:43:06,850 Maar wat die samesteller, klang, regtig doen enige tyd 971 00:43:06,850 --> 00:43:10,970 jy skryf wat uitgelig in lyn 24, onder die enjinkap dit is regtig 972 00:43:10,970 --> 00:43:12,330 dit na hierdie. 973 00:43:12,330 --> 00:43:16,200 Dit is net meer aangenaam as 'n mens lees en skryf kode soos lyn 24. 974 00:43:16,200 --> 00:43:18,530 Maar uiteindelik diegene opleiding wiele te kom af 975 00:43:18,530 --> 00:43:21,780 wanneer 'n mens se eie gerief kry sterker. 976 00:43:21,780 --> 00:43:27,240 >> Alle reg, sodat onthou dan dat dit was die soort grootste probleem 977 00:43:27,240 --> 00:43:27,807 Ons het in. 978 00:43:27,807 --> 00:43:30,640 En dit is wat hierdie hele gelei damn gesprek oor wysers, 979 00:43:30,640 --> 00:43:32,340 en adresse, en kopiëring dinge. 980 00:43:32,340 --> 00:43:35,410 Dit was omdat ons struikel oor hierdie stupid, dom probleem, waardeur 981 00:43:35,410 --> 00:43:38,830 Ek geïmplementeer logically-- met Lauren hier op die demo en die lemoensap 982 00:43:38,830 --> 00:43:43,770 in die milk-- 'n perfek algoritmies korrekte funksie 983 00:43:43,770 --> 00:43:47,010 vir die uitruiling van twee veranderlikes ' waardes, maar die damn ding 984 00:43:47,010 --> 00:43:50,550 het nie 'n aanhoudende, of permanente, effek op my kode. 985 00:43:50,550 --> 00:43:51,820 >> En hoekom is dit? 986 00:43:51,820 --> 00:43:54,650 In 'n neutedop, hoekom is dit implementering van swap 987 00:43:54,650 --> 00:43:58,740 logies korrek, maar het geen impak op die veranderlikes wat geslaag om dit, 988 00:43:58,740 --> 00:44:01,119 soos x en y vir hoof? 989 00:44:01,119 --> 00:44:02,410 Wat was die kern van die probleem? 990 00:44:02,410 --> 00:44:02,909 Ja? 991 00:44:02,909 --> 00:44:05,532 GEHOOR: Omdat veranderlike gemaak afskrifte van veranderlike in die pas 992 00:44:05,532 --> 00:44:06,240 deur funksie. 993 00:44:06,240 --> 00:44:09,060 >> DAVID J. MALAN: Presies, wanneer jy slaag veranderlikes in 'n funksie, of argumente 994 00:44:09,060 --> 00:44:11,030 in 'n funksie, hulle is verbygegaan kopie, wat 995 00:44:11,030 --> 00:44:14,770 beteken dat jy 'n identiese soek patroon van die stukkies vir beide x en y, 996 00:44:14,770 --> 00:44:15,955 genoem hier a en b. 997 00:44:15,955 --> 00:44:18,080 En jy kan enigiets doen jy wil met dié kopieë, 998 00:44:18,080 --> 00:44:20,657 maar hulle gaan nie het uitwerking op die roeping funksie. 999 00:44:20,657 --> 00:44:22,990 En, in werklikheid, is ons het dit prentjie op die skerm, onthou 1000 00:44:22,990 --> 00:44:25,520 laaste keer, waardeur as jy regtig dink oor wat 1001 00:44:25,520 --> 00:44:28,570 gaan op onder die hood-- as dit is jou rekenaar se geheue, 1002 00:44:28,570 --> 00:44:31,650 en af ​​hier is die stuk van geheue wat gebruik word vir die hoof, 1003 00:44:31,650 --> 00:44:34,020 dit is die deel van geheue wat gebruik word vir swap, 1004 00:44:34,020 --> 00:44:37,090 en so selfs as hoof het twee veranderlikes, x en y, 1005 00:44:37,090 --> 00:44:41,840 swap dalk identies soek waardes, wat albei 1 en 2, 1006 00:44:41,840 --> 00:44:44,520 maar hulle is heeltemal verskillende dele van die geheue. 1007 00:44:44,520 --> 00:44:46,130 >> So moet ons 'n oplossing vir hierdie. 1008 00:44:46,130 --> 00:44:51,580 En eerlik, wil dit voorkom dat ons nou 'n oplossing vir hierdie probleem, reg. 1009 00:44:51,580 --> 00:44:55,760 As ons nou die vermoë om dinge manipuleer deur middel van adresse 1010 00:44:55,760 --> 00:44:59,310 en, soort van geute en lere styl, volg hierdie pyle 1011 00:44:59,310 --> 00:45:02,820 en iewers heen te gaan wat ons wil in die geheue, kan ons nie 1012 00:45:02,820 --> 00:45:06,220 hierdie probleem deur te los wat van hoof te ruil 1013 00:45:06,220 --> 00:45:09,650 nie die waardes wat ons wil swap, maar net intuïtief 1014 00:45:09,650 --> 00:45:11,630 wat kan ons slaag om plaas te ruil? 1015 00:45:11,630 --> 00:45:12,620 >> [INTERPOSING VOICES] 1016 00:45:12,620 --> 00:45:15,244 >> DAVID J. MALAN: Hoekom het ons nie net slaag dit die adresse, reg? 1017 00:45:15,244 --> 00:45:17,470 Hoekom gee ons nie 'n ruil skat kaart, as jy wil, 1018 00:45:17,470 --> 00:45:20,950 wat lei dit na die werklike waardes x en y. 1019 00:45:20,950 --> 00:45:24,340 Kom ons ruil, eintlik verander diegene oorspronklike stukkies, eerder as 1020 00:45:24,340 --> 00:45:26,797 net verby afskrifte van die stukkies. 1021 00:45:26,797 --> 00:45:29,130 En so, in werklikheid, dit is wat gaan die oplossing wees. 1022 00:45:29,130 --> 00:45:31,899 Hierdie weergawe is hier duidelik sleg en verkeerd is. 1023 00:45:31,899 --> 00:45:35,190 En nou, met die eerste oogopslag, dit lyk net asof ons 'n klomp van die sterre bygevoeg lukraak 1024 00:45:35,190 --> 00:45:37,106 en ons vingers gekruis dat dit sou stel. 1025 00:45:37,106 --> 00:45:38,460 Maar, sou dit nou saam te stel. 1026 00:45:38,460 --> 00:45:40,090 >> Maar laat ons sien wat hierdie dinge beteken nie. 1027 00:45:40,090 --> 00:45:43,990 En ongelukkig, die skrywers van C kan nog 'n simbool gekies 1028 00:45:43,990 --> 00:45:46,380 om dit 'n bietjie te maak duidelik, maar die ster operateur 1029 00:45:46,380 --> 00:45:48,610 het verskillende betekenis in twee verskillende kontekste. 1030 00:45:48,610 --> 00:45:50,890 En ons het gesien; maar laat ons onderskei. 1031 00:45:50,890 --> 00:45:55,310 >> So by die top daar toe ek 'n en b verander 1032 00:45:55,310 --> 00:46:00,470 uit om int in die slegte weergawe sterre, A en B int, 1033 00:46:00,470 --> 00:46:01,740 Voorheen was heelgetalle. 1034 00:46:01,740 --> 00:46:05,752 Wat is 'n en b nou in die goeie, groen weergawe? 1035 00:46:05,752 --> 00:46:06,900 Hulle is adresse. 1036 00:46:06,900 --> 00:46:09,610 Adresse van wat, om duidelik te wees? 1037 00:46:09,610 --> 00:46:10,770 Adresse van heelgetalle. 1038 00:46:10,770 --> 00:46:12,520 So die feit dat ek sê int star middel 1039 00:46:12,520 --> 00:46:15,440 Hierdie is die adres van die 'n heelgetal, spesifiek. 1040 00:46:15,440 --> 00:46:19,120 >> So nou kennis van die reëls van die kode, iets anders het ook verander. 1041 00:46:19,120 --> 00:46:22,770 tmp bly dieselfde, want dit is net die tydelike heelgetal, 1042 00:46:22,770 --> 00:46:24,110 geen geheue magic daar. 1043 00:46:24,110 --> 00:46:26,370 Maar 'n nou moet 'n ster. 1044 00:46:26,370 --> 00:46:28,560 En, in werklikheid, elke ander melding van a en b, 1045 00:46:28,560 --> 00:46:31,780 sien dat al wat verander van rooi na groen 1046 00:46:31,780 --> 00:46:34,209 is dat ek as voorvoegsel daardie veranderlikes met sterre. 1047 00:46:34,209 --> 00:46:35,750 Want ek wil nie 'n en b kopieer. 1048 00:46:35,750 --> 00:46:40,350 Want as ek net kopieer a en b en ruil A en B, wat ek eintlik uitruiling? 1049 00:46:40,350 --> 00:46:43,760 Net adresse, ek wil ruil Wat is op die adresse. 1050 00:46:43,760 --> 00:46:44,860 Ek wil om daar te gaan. 1051 00:46:44,860 --> 00:46:48,000 En so het die ster operateur binnekant van my funksie, 1052 00:46:48,000 --> 00:46:51,700 nie binnekant van die parameter lys beteken jy gaan na die adresse 1053 00:46:51,700 --> 00:46:54,490 en eintlik verander daardie waardes. 1054 00:46:54,490 --> 00:46:56,500 >> So wat doen die prentjie nou lyk plaas. 1055 00:46:56,500 --> 00:47:03,250 Wel, as ek verby plaas in vir A en B nie 1 en 2-- 1056 00:47:03,250 --> 00:47:05,790 Ek het eintlik nodig om by te voeg een ander definisie hier. 1057 00:47:05,790 --> 00:47:09,030 So veronderstel dat hierdie stuk geheue is op plek 10. 1058 00:47:09,030 --> 00:47:12,960 >> Dit is by die plek 11, maar dit is 'n bietjie van 'n vereenvoudiging, 1059 00:47:12,960 --> 00:47:18,900 Ek het nou twee keuses het ek slaag x en y of ek hulle adresse te slaag? 1060 00:47:18,900 --> 00:47:22,500 As ek slaag hulle adresse soos hierdie, ek het net 1061 00:47:22,500 --> 00:47:25,390 nou nodig om te implementeer swap per die groen-kode 1062 00:47:25,390 --> 00:47:29,080 sodat wanneer dit sien 'n en wanneer dit sien kom b, beteken dit nie net kopieer a en b 1063 00:47:29,080 --> 00:47:30,540 en beweeg die melk en lemoensap. 1064 00:47:30,540 --> 00:47:32,664 Die melk en lemoensap metafoor breek nou af, 1065 00:47:32,664 --> 00:47:35,060 want dit is koppies van vloeibare en nie kaarte. 1066 00:47:35,060 --> 00:47:37,750 Ons plaas moet gaan aan te spreek 10 en ons 1067 00:47:37,750 --> 00:47:42,420 nodig om te gaan om aan te spreek 11, en voer dan dat uitruiling logika. 1068 00:47:42,420 --> 00:47:45,580 >> So het die logika is dieselfde, maar ons het 'n effens ander manier nodig 1069 00:47:45,580 --> 00:47:47,160 toegang tot daardie veranderlikes. 1070 00:47:47,160 --> 00:47:52,400 En so in die einde, wat die program het om te lyk soos dit is. 1071 00:47:52,400 --> 00:47:56,610 In swap.c letterlik gekopieer en geplak die groen weergawe. 1072 00:47:56,610 --> 00:47:58,450 Maar ek moet een verandering te maak. 1073 00:47:58,450 --> 00:48:00,180 Dit is nie voldoende om net swap verander. 1074 00:48:00,180 --> 00:48:03,830 Wat ander reël van die kode het ek nodig om te verander? 1075 00:48:03,830 --> 00:48:04,330 Ja? 1076 00:48:04,330 --> 00:48:05,770 >> GEHOOR: Waar dit neem om die argumente. 1077 00:48:05,770 --> 00:48:07,603 >> DAVID J. MALAN: Waar dit neem om sy argument. 1078 00:48:07,603 --> 00:48:09,985 So as ek blaai tot hoof, ek kan nie net slaag in x en y, 1079 00:48:09,985 --> 00:48:12,820 en, ek belowe, die laaste stuk nuwe sintaksis vandag. 1080 00:48:12,820 --> 00:48:17,200 Ek nodig het om te slaag in nie x en y maar die adres van x en y. 1081 00:48:17,200 --> 00:48:20,400 En dit blyk, die simbool dat die skrywers van C gekies 1082 00:48:20,400 --> 00:48:23,860 is as jy 'n ampersand hier gebruik, nie om verwar word met die bis ampersand, 1083 00:48:23,860 --> 00:48:27,130 as jy 'n ampersand gebruik hier en 'n ampersand hier 1084 00:48:27,130 --> 00:48:29,570 hierdie figure uit vir jou, Wat is die adres van x, 1085 00:48:29,570 --> 00:48:31,740 miskien is dit 10, wat is die adres van y, miskien is dit 1086 00:48:31,740 --> 00:48:35,400 11, en gaan diegene in plaas. 1087 00:48:35,400 --> 00:48:37,210 >> So baie om al absorbeer in 'n keer. 1088 00:48:37,210 --> 00:48:40,190 Maar laat ons nou sien vinnig ons oorblywende vier minute 1089 00:48:40,190 --> 00:48:42,150 waar dinge verkeerd kan gaan. 1090 00:48:42,150 --> 00:48:45,120 En as 'n eenkant, eintlik Ek het hierdie foto, 1091 00:48:45,120 --> 00:48:46,920 TF het hierdie foto 'n jaar of twee gelede. 1092 00:48:46,920 --> 00:48:49,190 So dit is die agterste hoek van Eliot eetsaal. 1093 00:48:49,190 --> 00:48:52,310 Pointers is dalk die moeilikste onderwerp wat ons dek in CS50. 1094 00:48:52,310 --> 00:48:54,810 So as jy bekommerd die soort helling is soos miskien is dit 1095 00:48:54,810 --> 00:48:56,770 meer van 'n hokkiestok soos hierdie, besef 1096 00:48:56,770 --> 00:49:00,160 ons soort van nader 'n hoogtepunt in terme van die konseptuele kompleksiteit. 1097 00:49:00,160 --> 00:49:02,300 >> En ek bring hierdie foto, want ek sweer 1098 00:49:02,300 --> 00:49:05,920 God, in die herfs 1996, toe ek CS50 met my onderrig mede, 1099 00:49:05,920 --> 00:49:09,620 Nishat Mehta, sit hy my in die hoek van die Eliot D. Hall oor middagete, 1100 00:49:09,620 --> 00:49:12,330 of aandete, of iets om te probeer om my te help verstaan ​​wenke. 1101 00:49:12,330 --> 00:49:16,520 En dit is waar ek was weke na dit is in lesing toe ingevoer 1102 00:49:16,520 --> 00:49:18,170 Ek het uiteindelik verstaan ​​wenke. 1103 00:49:18,170 --> 00:49:20,590 En ek is hoopvol dat dit sal ver gouer vir jou klik. 1104 00:49:20,590 --> 00:49:23,540 Maar besef dit absoluut onder die meer gesofistikeerde onderwerpe 1105 00:49:23,540 --> 00:49:24,420 Ons het gekyk na. 1106 00:49:24,420 --> 00:49:25,819 Maar dit is een van die mees kragtige. 1107 00:49:25,819 --> 00:49:28,860 En wanneer jy dit kry, dit is regtig al net gaan om uiteindelik saam te kom. 1108 00:49:28,860 --> 00:49:31,460 So wees verseker dit nie moet al sink in vandag. 1109 00:49:31,460 --> 00:49:32,980 >> So hier is die laaste program ons gaan om te kyk na. 1110 00:49:32,980 --> 00:49:35,605 En ons gaan eindig met 'n vinnige drie minute van die claymation 1111 00:49:35,605 --> 00:49:37,030 gemaak deur ons vriend, Nick Parlante. 1112 00:49:37,030 --> 00:49:41,440 Hier is 'n program, wat op die top twee lyne verklaar 'n veranderlike x en y. 1113 00:49:41,440 --> 00:49:44,780 Wat albei adresse heelgetalle, AKA wenke. 1114 00:49:44,780 --> 00:49:48,125 Ons het toe te ken genoeg geheue na 'n int stoor 1115 00:49:48,125 --> 00:49:51,344 en die stoor van die adres van daardie geheue in x. 1116 00:49:51,344 --> 00:49:53,260 So, is dit nog makliker as die voorbeeld voordat. 1117 00:49:53,260 --> 00:49:56,100 Gee my vier grepe van die geheue, dit is die grootte van 'n int, 1118 00:49:56,100 --> 00:49:58,000 en sit dit in x adres. 1119 00:49:58,000 --> 00:50:01,070 Hierdie lyn beteken hier gaan na die adres in x 1120 00:50:01,070 --> 00:50:05,270 en sit die betekenis van die lewe, die nommer 42 is daar. 1121 00:50:05,270 --> 00:50:07,710 Maar hierdie lyn bekommer my. 1122 00:50:07,710 --> 00:50:12,620 Ster y beteken gaan na die adres in y, en sit die ongelukkige nommer 13 is daar. 1123 00:50:12,620 --> 00:50:15,780 Hoekom is dit gevaarlik, op hierdie punt in die story-- hoewel vinnig vertel 1124 00:50:15,780 --> 00:50:17,980 in ons besig om te kwyn minute here-- hoekom is dit sleg 1125 00:50:17,980 --> 00:50:19,660 vir my om te sê, gaan na die adres in y? 1126 00:50:19,660 --> 00:50:21,077 >> GEHOOR: Jy het nie [onhoorbaar]. 1127 00:50:21,077 --> 00:50:22,910 DAVID J. MALAN: Ek het nie sit iets in y. 1128 00:50:22,910 --> 00:50:25,520 So, wat is die waarde van y, op hierdie punt in die verhaal? 1129 00:50:25,520 --> 00:50:26,570 Ons het geen idee nie. 1130 00:50:26,570 --> 00:50:29,190 Dit is 'n paar vullis waarde en ook nie Binky weet. 1131 00:50:29,190 --> 00:50:32,532 As ons kon eindig op hierdie nota. 1132 00:50:32,532 --> 00:50:34,832 >> [Video speel] 1133 00:50:34,832 --> 00:50:36,500 >> Hey, Binky, wakker. 1134 00:50:36,500 --> 00:50:39,140 Dit is tyd vir wyser pret. 1135 00:50:39,140 --> 00:50:40,210 >> -Wat is dit? 1136 00:50:40,210 --> 00:50:41,690 Meer inligting oor die riglyne? 1137 00:50:41,690 --> 00:50:43,570 O, goody. 1138 00:50:43,570 --> 00:50:46,600 >> -Goed, Om te begin, ek dink ons ​​is gaan 'n paar wenke nodig. 1139 00:50:46,600 --> 00:50:47,380 >> -OK. 1140 00:50:47,380 --> 00:50:51,120 Hierdie kode ken twee pointers wat kan verwys na heelgetalle. 1141 00:50:51,120 --> 00:50:53,557 >> -OK, Goed ek sien die twee wysers, maar hulle 1142 00:50:53,557 --> 00:50:55,140 lyk nie te wees om iets te wys. 1143 00:50:55,140 --> 00:50:55,970 >> -Dis reg. 1144 00:50:55,970 --> 00:50:58,100 Aanvanklik wenke nie wys nie. 1145 00:50:58,100 --> 00:51:00,950 Die dinge wat hulle wys is genoem pointees en die opstel van hulle op 1146 00:51:00,950 --> 00:51:02,330 is 'n aparte stap. 1147 00:51:02,330 --> 00:51:03,210 >> -OH, Regs, regs. 1148 00:51:03,210 --> 00:51:03,940 Ek het geweet dat. 1149 00:51:03,940 --> 00:51:05,730 Die pointees is geskei. 1150 00:51:05,730 --> 00:51:08,310 So hoe kan jy 'n pointee ken? 1151 00:51:08,310 --> 00:51:11,960 >> -OK, Goed hierdie kode toegeken word nie 'n nuwe heelgetal pointee, 1152 00:51:11,960 --> 00:51:15,050 en hierdie deel stelle x wys om dit te. 1153 00:51:15,050 --> 00:51:16,240 >> Hey, wat lyk beter. 1154 00:51:16,240 --> 00:51:17,743 So maak dit iets te doen. 1155 00:51:17,743 --> 00:51:23,580 >> -OK, Sal ek dereference die wyser x om stoor die nommer 42 in sy pointee. 1156 00:51:23,580 --> 00:51:27,130 Vir hierdie truuk, sal ek moet my towerstaffie van dereferencing. 1157 00:51:27,130 --> 00:51:30,200 >> -Jou Towerstaffie van dereferencing? 1158 00:51:30,200 --> 00:51:32,310 Uh, dat dit is 'n groot. 1159 00:51:32,310 --> 00:51:34,270 >> -Dit Is wat die kode lyk. 1160 00:51:34,270 --> 00:51:35,970 Ek sal net die opstel van die aantal and-- 1161 00:51:35,970 --> 00:51:37,070 >> [POP KLANK] 1162 00:51:37,070 --> 00:51:39,140 >> Hey, kyk daar dit gaan. 1163 00:51:39,140 --> 00:51:43,980 So, doen 'n dereference op x volg die pyl om toegang te verkry sy pointee. 1164 00:51:43,980 --> 00:51:46,150 In hierdie geval, om te slaan 42 daar. 1165 00:51:46,150 --> 00:51:50,700 Hey, probeer om dit te gebruik om die aantal te stoor 13 deur die ander pointer, y. 1166 00:51:50,700 --> 00:51:51,840 >> -OK. 1167 00:51:51,840 --> 00:51:56,270 Ek sal net gaan oor hier om y, en kry die nommer 13 ingestel. 1168 00:51:56,270 --> 00:52:00,380 En dan neem die muur van dereferencing en just-- 1169 00:52:00,380 --> 00:52:01,646 >> [Sirene klank] 1170 00:52:01,646 --> 00:52:04,080 >> -OH, Hey wat nie gewerk het nie. 1171 00:52:04,080 --> 00:52:06,470 Sê, uh, Binky, doen ek nie, dink dereferencing 1172 00:52:06,470 --> 00:52:10,850 y is 'n goeie idee, want die opstel die pointee is 'n aparte stap. 1173 00:52:10,850 --> 00:52:12,480 En ek dink nie ons ooit gedoen het. 1174 00:52:12,480 --> 00:52:14,620 >> -Hmm, Goeie punt. 1175 00:52:14,620 --> 00:52:19,810 >> -Yeah Ons toegeken die wyser, y, maar ons nooit sit dit om te verwys na 'n pointee. 1176 00:52:19,810 --> 00:52:21,590 >> -Hmm, Baie oplettend. 1177 00:52:21,590 --> 00:52:23,215 Hey, jy kyk goed daar Binky. 1178 00:52:23,215 --> 00:52:26,390 Kan jy dit op te los sodat y punte dieselfde pointee as x. 1179 00:52:26,390 --> 00:52:29,290 >> -Sure, Ek gebruik my towerstaffie van wyser opdrag. 1180 00:52:29,290 --> 00:52:31,970 >> -Is Dit gaan 'n wees probleem, soos tevore? 1181 00:52:31,970 --> 00:52:33,790 >> Nee, dit beteken nie die pointees raak. 1182 00:52:33,790 --> 00:52:35,840 Dit verander net een wyser om te wys op dieselfde thing-- 1183 00:52:35,840 --> 00:52:36,465 >> [Knal KLANK] 1184 00:52:36,465 --> 00:52:37,450 --as ander. 1185 00:52:37,450 --> 00:52:38,440 >> -O ek sien. 1186 00:52:38,440 --> 00:52:41,200 Nou y punte na dieselfde plek as x. 1187 00:52:41,200 --> 00:52:42,950 So, wag, nou y is vasgestel. 1188 00:52:42,950 --> 00:52:44,110 Dit het 'n pointee. 1189 00:52:44,110 --> 00:52:47,779 Sodat jy kan probeer om die muur van die weer dereferencing die 13 oor te stuur. 1190 00:52:47,779 --> 00:52:51,110 >> -OH, OK, hier gaan. 1191 00:52:51,110 --> 00:52:52,330 >> Hey, kyk na dit. 1192 00:52:52,330 --> 00:52:53,570 Nou dereferencing werke op y. 1193 00:52:53,570 --> 00:52:57,900 En omdat die wysers deel dat een pointee, het hulle albei sien die 13. 1194 00:52:57,900 --> 00:52:59,952 >> -Yeah, Deel, uh, wat ook al. 1195 00:52:59,952 --> 00:53:01,535 So, gaan ons nou plekke skakel? 1196 00:53:01,535 --> 00:53:03,730 >> -OH, Kyk ons ​​uit tyd. 1197 00:53:03,730 --> 00:53:04,660 >> -But-- 1198 00:53:04,660 --> 00:53:06,520 >> -net Onthou die drie wyser reëls. 1199 00:53:06,520 --> 00:53:09,550 Nommer 1, die basiese struktuur is dat jy 'n wyser, 1200 00:53:09,550 --> 00:53:11,630 en dit wys oor 'n pointee. 1201 00:53:11,630 --> 00:53:13,740 Maar die wyser en pointee is geskei. 1202 00:53:13,740 --> 00:53:15,620 En die algemene fout is om 'n wyser 1203 00:53:15,620 --> 00:53:18,000 maar om te vergeet om te gee dit 'n pointee. 1204 00:53:18,000 --> 00:53:21,170 >> Nommer 2, wyser dereferencing begin by die wyser 1205 00:53:21,170 --> 00:53:24,020 en volg die pyl oor om toegang tot sy pointee. 1206 00:53:24,020 --> 00:53:27,815 Soos ons almal weet, dit werk net as daar is 'n pointee, wat soort van kry terug 1207 00:53:27,815 --> 00:53:29,260 nommer 1 regeer. 1208 00:53:29,260 --> 00:53:31,990 >> Nommer 3, pointer opdrag neem een ​​wyser 1209 00:53:31,990 --> 00:53:35,330 en verander dit om te verwys na die dieselfde as 'n ander pointee wyser. 1210 00:53:35,330 --> 00:53:37,150 So na die opdrag, die twee wysers 1211 00:53:37,150 --> 00:53:40,927 sal verwys na dieselfde pointee, soms is genoem wat deel. 1212 00:53:40,927 --> 00:53:42,510 En dit is al wat daar is om dit, regtig. 1213 00:53:42,510 --> 00:53:43,130 Bye-bye nou. 1214 00:53:43,130 --> 00:53:43,475 >> [Einde afspeel] 1215 00:53:43,475 --> 00:53:44,830 >> DAVID J. MALAN: Dit is dit vir CS50. 1216 00:53:44,830 --> 00:53:46,246 Dank aan Professor Nick Parlante. 1217 00:53:46,246 --> 00:53:47,730 Ons sal sien dat jy volgende week. 1218 00:53:47,730 --> 00:53:51,706 1219 00:53:51,706 --> 00:53:56,435 >> [Elektroniese musiek Speel] 1220 00:53:56,435 --> 00:57:22,775