1 00:00:00,000 --> 00:00:02,670 >> [TEMA MUSIC] 2 00:00:02,670 --> 00:00:11,834 3 00:00:11,834 --> 00:00:13,365 >> SPEAKER 1: Hei, alle sammen. 4 00:00:13,365 --> 00:00:14,365 Velkommen tilbake til del. 5 00:00:14,365 --> 00:00:15,700 6 00:00:15,700 --> 00:00:18,700 Lovely day out-- som er grunnen, jeg er sikker, det er bare fire av dere her 7 00:00:18,700 --> 00:00:21,180 og ikke vår vanlige pakken. 8 00:00:21,180 --> 00:00:22,670 Jeg har vært syk denne helgen. 9 00:00:22,670 --> 00:00:24,294 Så jeg har ikke Starburst for dere. 10 00:00:24,294 --> 00:00:26,400 Og jeg kan begynne å hoste fryktelig gjennom dette. 11 00:00:26,400 --> 00:00:27,790 Så bare bære over med meg. 12 00:00:27,790 --> 00:00:30,624 Jeg skal virkelig prøve og komme seg gjennom denne første, 13 00:00:30,624 --> 00:00:32,290 skjønt, før jeg har en hostende angrep. 14 00:00:32,290 --> 00:00:33,410 15 00:00:33,410 --> 00:00:37,390 Men bare være lett på meg en Litt bit-- det er alt jeg ber om. 16 00:00:37,390 --> 00:00:39,370 17 00:00:39,370 --> 00:00:44,289 >> Så vår agenda for today-- bare en reminder-- din quiz er neste uke. 18 00:00:44,289 --> 00:00:46,830 Jeg fortalte deg dette i forrige uke så det ville ikke ta deg av vakt. 19 00:00:46,830 --> 00:00:47,954 Så jeg minner deg igjen. 20 00:00:47,954 --> 00:00:49,180 Neste ukes quiz. 21 00:00:49,180 --> 00:00:52,730 For dette formål, neste ukes delen vil være mye mer 22 00:00:52,730 --> 00:00:55,180 of-- Jeg skal prøve og arbeide i noen vurdering. 23 00:00:55,180 --> 00:00:58,130 Så hvis dere kunne hjelpe meg ved å sende meg 24 00:00:58,130 --> 00:01:00,990 ting som du er komfortabel med, at du er bekymret, 25 00:01:00,990 --> 00:01:03,530 emner som du ønsker for meg å dekke, det ville være flott. 26 00:01:03,530 --> 00:01:05,740 Så jeg kan prøve og jobbe dem inn i vår seksjon neste uke 27 00:01:05,740 --> 00:01:11,540 eller sende deg ekstra materiale eller prep at du kanskje ikke får andre steder. 28 00:01:11,540 --> 00:01:12,150 >> Yeah! 29 00:01:12,150 --> 00:01:13,520 Flere folk kommer! 30 00:01:13,520 --> 00:01:17,320 Jeg tenkte, gjorde jeg det dårlig sist uke, som ingen ønsker å komme tilbake? 31 00:01:17,320 --> 00:01:18,065 Jeg er redd. 32 00:01:18,065 --> 00:01:18,892 33 00:01:18,892 --> 00:01:21,100 Så de andre tre tingene at vi kommer til å gå over 34 00:01:21,100 --> 00:01:24,850 er omdirigering, fil I / O, og deretter pekere og dynamisk minne. 35 00:01:24,850 --> 00:01:29,160 Jeg er sikker på at dere alle er super begeistret pointers-- alles favoritt tema, 36 00:01:29,160 --> 00:01:31,310 så enkel å forstå. 37 00:01:31,310 --> 00:01:33,130 Jeg er sikker på at dere alle fikk det, ikke sant? 38 00:01:33,130 --> 00:01:39,510 >> Så første ting først, redirection-- Dette er i utgangspunktet bare en måte 39 00:01:39,510 --> 00:01:42,920 å kontrollere hvordan du innspill ting i programmet, 40 00:01:42,920 --> 00:01:44,606 hvordan du skriver ut ting fra programmet. 41 00:01:44,606 --> 00:01:46,980 De viktigste måtene som du fyrene har vært i samspill med det 42 00:01:46,980 --> 00:01:51,650 er bare gjennom standard ut med print screen her. 43 00:01:51,650 --> 00:01:55,940 Men det finnes måter å pipe-- som vi ser her 44 00:01:55,940 --> 00:01:58,980 er en av våre words-- slag av rør som informasjon 45 00:01:58,980 --> 00:02:02,850 eller at data i en fil fra en fil. 46 00:02:02,850 --> 00:02:05,820 Det er bare ulike måter å å få ting inn i programmet 47 00:02:05,820 --> 00:02:10,681 og ut av programmet, i stedet for bare å skrive dem ut på denne skjermen 48 00:02:10,681 --> 00:02:12,430 eller å sette inn ting fra kommandolinjen. 49 00:02:12,430 --> 00:02:13,760 50 00:02:13,760 --> 00:02:18,030 >> Så første er lite større enn innskuddstegn. 51 00:02:18,030 --> 00:02:22,085 Så output-- det skrives bare utgangs til en fil i stedet for skjermen din. 52 00:02:22,085 --> 00:02:23,620 53 00:02:23,620 --> 00:02:29,500 Så hvis du hadde noe som trykte "Hei, verden!" til skjermen, 54 00:02:29,500 --> 00:02:32,400 hvis du setter den i stedet å output.text, at 55 00:02:32,400 --> 00:02:35,220 skaper denne filen som heter output.text. 56 00:02:35,220 --> 00:02:38,550 Og når du åpner den, det vil si "Hei, verden!" der inne. 57 00:02:38,550 --> 00:02:41,410 Dette kan være super nyttig hvis du har massevis av feil 58 00:02:41,410 --> 00:02:43,430 faktisk, som vi ser i denne. 59 00:02:43,430 --> 00:02:46,810 Hvis du gjør to caret, det vil skrive ut feilmeldinger. 60 00:02:46,810 --> 00:02:52,090 >> Så hvis du har et problem med kompilering, den har en masse feil 61 00:02:52,090 --> 00:02:56,770 og du bli sugd ned i å prøve for å bla gjennom i kommandolinjen 62 00:02:56,770 --> 00:02:59,110 gjennom alle dem, kan du bare skrive dem til en fil, 63 00:02:59,110 --> 00:03:02,130 åpne opp filen slik at du kan bla gjennom dem lettere. 64 00:03:02,130 --> 00:03:05,160 Jeg har faktisk brukt som en mye når jeg var debugging 65 00:03:05,160 --> 00:03:07,970 mine 181 psets for maskinlæring. 66 00:03:07,970 --> 00:03:10,000 Så det kan være super nyttig senere. 67 00:03:10,000 --> 00:03:18,370 Det er også nyttig hvis du har et program at kanskje genererer et bibliotek 68 00:03:18,370 --> 00:03:20,430 eller generere noen sett av strenger, og du 69 00:03:20,430 --> 00:03:22,846 må være i stand til å se at det genererer dem riktig. 70 00:03:22,846 --> 00:03:23,860 71 00:03:23,860 --> 00:03:25,160 Dette er måten å gjøre det. 72 00:03:25,160 --> 00:03:28,280 >> Så hvis du skriver dem ut til en fil, du kan lettere undersøke dem, ikke sant? 73 00:03:28,280 --> 00:03:30,930 Versus prøver å bla gjennom kommandolinjen. 74 00:03:30,930 --> 00:03:32,740 75 00:03:32,740 --> 00:03:35,820 Og så en ting å merke seg er at det bare med større 76 00:03:35,820 --> 00:03:40,090 enn innskuddstegn, hvis du skriver til en fil som allerede exists-- 77 00:03:40,090 --> 00:03:44,990 så ut som om vi kjørte denne første tid, satte vi den til output.text, 78 00:03:44,990 --> 00:03:49,970 og da vi hadde en andre program som trykte dette som programmet to 79 00:03:49,970 --> 00:03:54,250 og gjorde en større enn å output.text, det vil overskrive at-- så 80 00:03:54,250 --> 00:03:56,715 skrive hva som var noensinne i den filen til å begynne med. 81 00:03:56,715 --> 00:03:57,720 82 00:03:57,720 --> 00:04:00,750 >> Så hvis du ønsker å tilføye til en fil, som vi ser her, 83 00:04:00,750 --> 00:04:04,779 du bare gjøre to større enn tegn. 84 00:04:04,779 --> 00:04:05,820 Og det vil føye til det. 85 00:04:05,820 --> 00:04:06,750 Det vil ikke overskrive den. 86 00:04:06,750 --> 00:04:09,770 Så hvis du trenger å kjøre flere programmer og hva slags holde 87 00:04:09,770 --> 00:04:13,170 oversikten over hva alle av dem er tilbake til deg i en fil, 88 00:04:13,170 --> 00:04:14,190 det er en måte å gjøre det. 89 00:04:14,190 --> 00:04:17,231 Hvis du ikke bryr seg hva som er i filen og det er lov å bli overskrevet, 90 00:04:17,231 --> 00:04:19,204 du kan bare bruke en enkelt større enn. 91 00:04:19,204 --> 00:04:20,600 Betyr det fornuftig for alle? 92 00:04:20,600 --> 00:04:23,205 93 00:04:23,205 --> 00:04:31,140 >> PUBLIKUM: Som dot slash hei større enn produksjonen dot tekst, som to ganger, 94 00:04:31,140 --> 00:04:34,030 det vil bare bare vises på produksjonen dot tekst en annen tid-- 95 00:04:34,030 --> 00:04:34,810 >> SPEAKER 1: Høyre. 96 00:04:34,810 --> 00:04:40,450 Så det ville i utgangspunktet bare helt skrive hva som var der til å begynne med. 97 00:04:40,450 --> 00:04:44,260 Hvis denne filen her, output.text allerede 98 00:04:44,260 --> 00:04:48,230 eksisterer, innerst inne hva du kaller som igjen med en enkelt større 99 00:04:48,230 --> 00:04:51,920 enn du kan bare tenke på det så ut som det erstattet filen. 100 00:04:51,920 --> 00:04:54,824 Som når du lagrer et Word dokument og du lagre som, 101 00:04:54,824 --> 00:04:57,365 og du beholde samme navn, og det helt overskriver it-- 102 00:04:57,365 --> 00:04:58,680 Dette er den samme typen ting. 103 00:04:58,680 --> 00:05:00,380 104 00:05:00,380 --> 00:05:03,550 Noen som har noen spørsmål om bare sender ut til en fil? 105 00:05:03,550 --> 00:05:05,051 106 00:05:05,051 --> 00:05:05,550 Awesome. 107 00:05:05,550 --> 00:05:11,440 >> Så åpenbart, hvis du reversere pilens retning, kan det gjøre innspill. 108 00:05:11,440 --> 00:05:13,090 109 00:05:13,090 --> 00:05:19,960 Så når dere hadde som Caesar eller Visioneer 110 00:05:19,960 --> 00:05:23,195 og du måtte innspill noe, du hadde en kommandolinje argument 111 00:05:23,195 --> 00:05:24,960 som faktisk inngang det. 112 00:05:24,960 --> 00:05:27,410 Dette er en annen måte å gjøre det. 113 00:05:27,410 --> 00:05:30,520 Så i stedet for å vente for en ledetekst, 114 00:05:30,520 --> 00:05:33,800 som når du bedt om å oppgi melding i Caesar eller Visioneer, 115 00:05:33,800 --> 00:05:36,490 hvis du hadde en tekstfil som hadde meldingen, 116 00:05:36,490 --> 00:05:38,280 du kan bare skrive det inn i det. 117 00:05:38,280 --> 00:05:44,930 >> Så hvis dette var som dot slash Caesar 3 mindre enn pilen skrive inn tekst, som 118 00:05:44,930 --> 00:05:47,240 er budskapet ditt, at ville kjøre helt fint. 119 00:05:47,240 --> 00:05:51,310 120 00:05:51,310 --> 00:05:54,020 Når Caesar programmet faktisk bedt om innspill fra brukeren, 121 00:05:54,020 --> 00:05:57,360 det ville allerede ha det fordi du har skrevet i denne filen. 122 00:05:57,360 --> 00:05:58,830 Det er bare en annen måte. 123 00:05:58,830 --> 00:06:02,445 Bare en omvendt av output-- bare inngang for dine data. 124 00:06:02,445 --> 00:06:04,570 125 00:06:04,570 --> 00:06:06,680 >> Og deretter den siste er røret. 126 00:06:06,680 --> 00:06:07,780 Så dette er ganske kult. 127 00:06:07,780 --> 00:06:09,890 Fordi det tillater deg å ta utgangen fra ett 128 00:06:09,890 --> 00:06:13,695 program og sette det som input til et annet program. 129 00:06:13,695 --> 00:06:15,250 130 00:06:15,250 --> 00:06:18,630 Jeg vet ikke om noen av dere spilt med dechiffrere 131 00:06:18,630 --> 00:06:20,590 at CS50 kan ha gitt deg, men det ville 132 00:06:20,590 --> 00:06:27,380 tillate deg å ta noen eksempler fil, skriver du det inn i kryptering, 133 00:06:27,380 --> 00:06:30,350 og deretter derfra skriver det inn dekryptering din 134 00:06:30,350 --> 00:06:32,470 å sørge for at det viste seg det samme. 135 00:06:32,470 --> 00:06:34,050 Så det er litt som tre-veis loop. 136 00:06:34,050 --> 00:06:38,400 137 00:06:38,400 --> 00:06:39,423 Gå for det. 138 00:06:39,423 --> 00:06:41,785 >> PUBLIKUM: Hvis et program har flere innganger, 139 00:06:41,785 --> 00:06:47,646 er det en måte å fortelle det hvilken inngang å bruke tekstfilen eller utgang for? 140 00:06:47,646 --> 00:06:49,325 >> SPEAKER 1: Den har flere innganger. 141 00:06:49,325 --> 00:06:52,190 142 00:06:52,190 --> 00:07:00,430 Uansett filen din input-- når det er ber om innspill som første gang, er det 143 00:07:00,430 --> 00:07:03,240 kommer til å anta, tror jeg, det er kommer til å pipe i hele filen. 144 00:07:03,240 --> 00:07:03,979 145 00:07:03,979 --> 00:07:07,145 Så hvis du har flere innganger, er du kommer til å være sanitæranlegg i flere filer. 146 00:07:07,145 --> 00:07:08,190 147 00:07:08,190 --> 00:07:12,390 Så hvis du spør etter meldinger tre ganger i koden din, 148 00:07:12,390 --> 00:07:15,230 du kommer til å være å sette i tre forskjellige filer. 149 00:07:15,230 --> 00:07:15,980 Og det blir gal. 150 00:07:15,980 --> 00:07:18,188 Og du skal ikke behøve å bekymre deg for det akkurat nå. 151 00:07:18,188 --> 00:07:19,150 Men det er tanken. 152 00:07:19,150 --> 00:07:20,680 153 00:07:20,680 --> 00:07:26,822 >> Så ja, er røret bare produksjonen av en Programmet benytter inngang til den andre. 154 00:07:26,822 --> 00:07:27,665 Alle bra det? 155 00:07:27,665 --> 00:07:28,565 156 00:07:28,565 --> 00:07:29,065 Cool. 157 00:07:29,065 --> 00:07:30,170 158 00:07:30,170 --> 00:07:30,932 OK. 159 00:07:30,932 --> 00:07:32,890 Du vil sannsynligvis ikke ha å gjøre for mye med det. 160 00:07:32,890 --> 00:07:35,670 Men du bør forstå måter du kan bruke dette. 161 00:07:35,670 --> 00:07:38,910 Og det er noen saker som kan det være lurt å bruke den. 162 00:07:38,910 --> 00:07:44,590 >> Så fil I / O- jeg vet hva du er saying-- vi er vant til å lese fra 163 00:07:44,590 --> 00:07:50,500 og skrive til vår skjerm der, som er standard i og standard ut. 164 00:07:50,500 --> 00:07:54,370 Og det er det dere har vært gjort siden begynnelsen av klasse her. 165 00:07:54,370 --> 00:07:58,220 Men du kan også lese og skrive filer, som er alt fil I / O- så fil input, 166 00:07:58,220 --> 00:07:59,850 utgang er alt det står for. 167 00:07:59,850 --> 00:08:00,930 168 00:08:00,930 --> 00:08:04,360 Så dette betyr i utgangspunktet at du kan lagre dine data nå. 169 00:08:04,360 --> 00:08:08,460 >> Når du bare skrive det ut til skjermen, er det i utgangspunktet borte, ikke sant? 170 00:08:08,460 --> 00:08:12,507 Så snart du gjør "Hello verden "og kjør" Hello world " 171 00:08:12,507 --> 00:08:14,090 det skrives "Hello world" til skjermen. 172 00:08:14,090 --> 00:08:16,370 Men du kan egentlig ikke gjøre noe med det derfra. 173 00:08:16,370 --> 00:08:18,950 Hvis du lagrer i en tekst fil, så plutselig 174 00:08:18,950 --> 00:08:22,789 du har denne informasjonen som du har lov å manipulere eller sette den i en fil, 175 00:08:22,789 --> 00:08:24,080 eller sette den i et program senere. 176 00:08:24,080 --> 00:08:26,370 177 00:08:26,370 --> 00:08:29,290 En av grunnene hvorfor vi gjør dette er bare 178 00:08:29,290 --> 00:08:31,560 som en måte til å lagre data for senere bruk. 179 00:08:31,560 --> 00:08:34,790 180 00:08:34,790 --> 00:08:37,279 >> Jeg har et par skritt her bare vandre gjennom standard 181 00:08:37,279 --> 00:08:39,450 I / O. I trinn en, trenger for å lage en referanse 182 00:08:39,450 --> 00:08:43,480 til filen med alle caps FIL stjerners fil. 183 00:08:43,480 --> 00:08:45,740 Slik som skaper en peker til en fil. 184 00:08:45,740 --> 00:08:48,080 185 00:08:48,080 --> 00:08:49,650 Så da du ønsker å åpne den. 186 00:08:49,650 --> 00:08:52,940 Og du sier, bokstavelig talt, bare filen tilsvarer fopen. 187 00:08:52,940 --> 00:08:57,400 Og dette kommer til å returnere en Peker til filen du nettopp åpnet. 188 00:08:57,400 --> 00:08:59,610 189 00:08:59,610 --> 00:09:01,460 Jeg så et par av dere Gutta på kontortid. 190 00:09:01,460 --> 00:09:07,400 >> Men en av de tingene er remember-- pekere 191 00:09:07,400 --> 00:09:10,409 kan være noen adresse eller null, ikke sant? 192 00:09:10,409 --> 00:09:12,700 Hvis vi noen gang har en sak der noe kan returnere null, 193 00:09:12,700 --> 00:09:14,990 hva har vi å gjøre før vi noen gang bruke det? 194 00:09:14,990 --> 00:09:16,220 195 00:09:16,220 --> 00:09:19,000 Vi må sjekke om det er null eller ikke, ikke sant? 196 00:09:19,000 --> 00:09:23,600 Fordi noen av dere kan ha hatt problemet der uansett objekt 197 00:09:23,600 --> 00:09:26,110 ble returnert i avslapnings var null. 198 00:09:26,110 --> 00:09:28,170 Du prøvde å utføre noen funksjon på den. 199 00:09:28,170 --> 00:09:29,770 Og datamaskinen nettstedet ugyldig. 200 00:09:29,770 --> 00:09:30,725 Høyre? 201 00:09:30,725 --> 00:09:33,640 Jeg vedder på at et par av dere kan ha hatt dette problemet. 202 00:09:33,640 --> 00:09:38,890 >> Så med fopen, vil fopen enten returnere en peker til filen, 203 00:09:38,890 --> 00:09:41,200 eller hvis noe går galt, det kommer til å returnere null. 204 00:09:41,200 --> 00:09:45,980 Så du må alltid sjekke at det ikke har returnert null 205 00:09:45,980 --> 00:09:47,880 før du prøver å gjøre noe annet. 206 00:09:47,880 --> 00:09:49,110 207 00:09:49,110 --> 00:09:51,974 Dette er som en standard paradigme at du kommer til å trenge her. 208 00:09:51,974 --> 00:09:54,390 Hvis det er noen gang en mulighet for at noe kunne returnere null, 209 00:09:54,390 --> 00:09:56,590 sjekk for å sørge for at det ikke før du fortsetter. 210 00:09:56,590 --> 00:09:58,911 Ellers, du kommer å få nydelig område feil. 211 00:09:58,911 --> 00:10:00,410 Og ingen liker å forholde seg til disse. 212 00:10:00,410 --> 00:10:03,180 213 00:10:03,180 --> 00:10:06,410 >> Så som vi ser her, det første argumentet er bare banen til filen. 214 00:10:06,410 --> 00:10:09,380 Hvis denne filen ikke finnes, det kommer til å lage denne filen. 215 00:10:09,380 --> 00:10:10,713 Og det er bare kommer til å være tom. 216 00:10:10,713 --> 00:10:10,789 217 00:10:10,789 --> 00:10:13,080 Og så det andre argumentet er den modusen du ønsker. 218 00:10:13,080 --> 00:10:14,610 Ønsker vi å lese fra denne filen? 219 00:10:14,610 --> 00:10:15,560 Ønsker du å skrive fra det? 220 00:10:15,560 --> 00:10:16,476 Ønsker du å tilføye? 221 00:10:16,476 --> 00:10:17,600 222 00:10:17,600 --> 00:10:20,670 Så egentlig hva jeg nettopp said-- hvis filen ikke eksisterer 223 00:10:20,670 --> 00:10:23,400 og du prøver å lese fra det, det kommer til å kaste en feil. 224 00:10:23,400 --> 00:10:26,890 Hvis filen name-- liker hvis file.text ikke finnes ennå 225 00:10:26,890 --> 00:10:29,250 og du ønsker å skrive til det, vil det skape 226 00:10:29,250 --> 00:10:33,110 en tom fil som heter file.text for deg. 227 00:10:33,110 --> 00:10:36,612 Og hvis du ønsker å legge til, du bør gjøre det samme. 228 00:10:36,612 --> 00:10:38,081 Betyr det fornuftig? 229 00:10:38,081 --> 00:10:40,580 Hvis du prøver å lese fra en fil som ikke finnes ennå, 230 00:10:40,580 --> 00:10:41,590 det vil kaste en feil. 231 00:10:41,590 --> 00:10:44,340 Ellers vil det skape filen for du gjør hva du vil det. 232 00:10:44,340 --> 00:10:45,970 233 00:10:45,970 --> 00:10:46,470 Cool. 234 00:10:46,470 --> 00:10:47,510 235 00:10:47,510 --> 00:10:48,880 Nå kan vi lese fra filen. 236 00:10:48,880 --> 00:10:52,570 Og dette er bare slags kommer gjennom de forskjellige funksjonene 237 00:10:52,570 --> 00:10:58,980 at vi har for fil I / O. Dette vil være nødvendig i denne ukens PSet, 238 00:10:58,980 --> 00:11:00,505 hvis jeg husker riktig. 239 00:11:00,505 --> 00:11:02,880 Ja, det absolutt vil være nødvendig i denne ukens PSet. 240 00:11:02,880 --> 00:11:04,260 241 00:11:04,260 --> 00:11:07,010 Så fgetc returnerer neste tegn. 242 00:11:07,010 --> 00:11:08,350 243 00:11:08,350 --> 00:11:10,300 fgets bare returnerer en tekstlinje. 244 00:11:10,300 --> 00:11:11,790 245 00:11:11,790 --> 00:11:14,610 Det vil returnere noe opp til en ny linje, og det vil bryte. 246 00:11:14,610 --> 00:11:15,950 247 00:11:15,950 --> 00:11:18,700 Så fread leser en viss antall byte og plasserer dem 248 00:11:18,700 --> 00:11:20,700 inn i en matrise, hvilke er noe du kan 249 00:11:20,700 --> 00:11:25,485 ønsker å gjøre med re-size-- kan være nyttig. 250 00:11:25,485 --> 00:11:26,550 251 00:11:26,550 --> 00:11:29,290 >> Hvor mange mennesker har lest den PSet spec, forresten? 252 00:11:29,290 --> 00:11:30,980 253 00:11:30,980 --> 00:11:32,261 OK. 254 00:11:32,261 --> 00:11:32,760 [Uhørbart] 255 00:11:32,760 --> 00:11:35,380 256 00:11:35,380 --> 00:11:36,580 >> SPEAKER 1: OK. 257 00:11:36,580 --> 00:11:37,530 OK. 258 00:11:37,530 --> 00:11:41,940 Definitivt lese at-- det er en morsom PSet. 259 00:11:41,940 --> 00:11:51,320 Du kommer til å gjenopprette en slettet minne card-- veldig spennende når det fungerer. 260 00:11:51,320 --> 00:11:54,100 Men definitivt, begynner å lese den. 261 00:11:54,100 --> 00:11:56,280 Kom snakke med meg hvis du har spørsmål om det. 262 00:11:56,280 --> 00:11:59,290 >> OK, så som jeg sa, fread leser et visst antall byte. 263 00:11:59,290 --> 00:12:01,340 264 00:12:01,340 --> 00:12:03,590 Det er litt vilkårlig antall at du kommer til å stille. 265 00:12:03,590 --> 00:12:05,990 266 00:12:05,990 --> 00:12:08,260 Og så fseek bare trekk til en viss stilling. 267 00:12:08,260 --> 00:12:11,150 Så kanskje du ikke bryr seg om de neste 10 byte. 268 00:12:11,150 --> 00:12:12,880 Du ønsker bare å hoppe fremover. 269 00:12:12,880 --> 00:12:14,030 Du bryr deg ikke om dem. 270 00:12:14,030 --> 00:12:16,280 Vil du lese starter på byte 11. 271 00:12:16,280 --> 00:12:18,252 fseek lar deg gjøre det. 272 00:12:18,252 --> 00:12:20,710 Så det tillater deg å være selektiv om hva du leser. 273 00:12:20,710 --> 00:12:25,880 Fordi fgetc, fgets, og fread lese fra et bestemt sted i filen. 274 00:12:25,880 --> 00:12:27,260 275 00:12:27,260 --> 00:12:35,090 >> En måte å tenke på dette er hvis dette er vår fil, når du først åpne den, 276 00:12:35,090 --> 00:12:41,140 du har denne posisjonen i filen som starter i begynnelsen. 277 00:12:41,140 --> 00:12:45,040 Når du ringer fgetc, fgetf eller fread, 278 00:12:45,040 --> 00:12:48,875 det kommer til å starte fra denne posisjonen markør. 279 00:12:48,875 --> 00:12:51,340 280 00:12:51,340 --> 00:12:55,245 La oss si at du bare ønsker å lese denne del av minnet over her. 281 00:12:55,245 --> 00:12:56,300 282 00:12:56,300 --> 00:12:57,960 Du kan ikke bare ringe. 283 00:12:57,960 --> 00:13:02,430 Du må søke over her og deretter lese derfra 284 00:13:02,430 --> 00:13:06,540 eller lese, blir, eller getc, avhengig av hva du ønsker. 285 00:13:06,540 --> 00:13:09,310 Så søker bare lar deg hoppe over deler av minnet. 286 00:13:09,310 --> 00:13:11,590 Og det er den eneste måten du kan hoppe over ting 287 00:13:11,590 --> 00:13:14,012 uten å lese dem inn i buffer. 288 00:13:14,012 --> 00:13:15,470 Betyr det fornuftig for alle? 289 00:13:15,470 --> 00:13:21,110 290 00:13:21,110 --> 00:13:24,780 >> Selvfølgelig, det er en Mange parallelle her-- 291 00:13:24,780 --> 00:13:27,780 produksjonen vår, eller innspill omdirigering, du har lese og skrive. 292 00:13:27,780 --> 00:13:31,800 Så fputc bare skriver en tegnet inn i filen. 293 00:13:31,800 --> 00:13:33,655 fputs skriver en linje. 294 00:13:33,655 --> 00:13:35,030 295 00:13:35,030 --> 00:13:37,420 Fprintf skriver ut en formatert utgang. 296 00:13:37,420 --> 00:13:41,190 Så hvis du har faner, eller plass, eller whatnot. 297 00:13:41,190 --> 00:13:44,180 Og så fwrite skriver noen rekke bytes i en fil. 298 00:13:44,180 --> 00:13:48,860 Så dette er på samme måte fwrite og fread er analoge 299 00:13:48,860 --> 00:13:57,550 opposites-- fgets, fputs, og deretter fputc og fgetc-- massevis 300 00:13:57,550 --> 00:14:00,710 sprø, raske ting. 301 00:14:00,710 --> 00:14:05,300 >> Bare slags holde denne handy-- vil du ha forskjellige tider 302 00:14:05,300 --> 00:14:08,680 der kanskje du bare vil ett tegn om gangen. 303 00:14:08,680 --> 00:14:09,890 Kanskje du vil ha en hel linje. 304 00:14:09,890 --> 00:14:14,320 Med ordboken pset-- som er i to psets, 305 00:14:14,320 --> 00:14:19,690 Jeg tror, ​​vi gir deg en hel ordbok i et tekstformat 306 00:14:19,690 --> 00:14:22,252 som har hvert ord adskilt av en linje. 307 00:14:22,252 --> 00:14:24,210 Så hvis du ønsker å lese i ett ord om gangen, 308 00:14:24,210 --> 00:14:31,769 hva kan du bruke hvis du leser og de er alle skilt på nye linjer, 309 00:14:31,769 --> 00:14:33,310 og du bare vil ha ett ord om gangen? 310 00:14:33,310 --> 00:14:35,320 311 00:14:35,320 --> 00:14:36,040 >> Målgruppe: fgets 312 00:14:36,040 --> 00:14:36,748 >> SPEAKER 1: Høyre. 313 00:14:36,748 --> 00:14:39,960 Fgets-- fordi som returnerer det som er på én linje. 314 00:14:39,960 --> 00:14:42,750 Og hvis hvert ord er dens egen linje, kan vi bruke fgets. 315 00:14:42,750 --> 00:14:44,511 316 00:14:44,511 --> 00:14:45,010 Cool. 317 00:14:45,010 --> 00:14:47,290 Betyr det fornuftig, alle? 318 00:14:47,290 --> 00:14:48,020 Cool? 319 00:14:48,020 --> 00:14:50,020 Ja, vi kommer til å få til den morsomme delen med pekere 320 00:14:50,020 --> 00:14:51,728 veldig snart, der du komme til å gjøre litt matematikk. 321 00:14:51,728 --> 00:14:52,776 Og det vil være stor. 322 00:14:52,776 --> 00:14:55,690 323 00:14:55,690 --> 00:14:57,740 >> Siste step-- lukke filen. 324 00:14:57,740 --> 00:15:01,090 Med så mange ting her, en av våre paradigmer 325 00:15:01,090 --> 00:15:03,550 er om det kan komme tilbake null, se etter null. 326 00:15:03,550 --> 00:15:06,160 Hvis du åpner noe, du får heller lukke den. 327 00:15:06,160 --> 00:15:10,419 OK, så du ikke er ferdig før du er gjort med mindre du har lukket den. 328 00:15:10,419 --> 00:15:12,585 Typen som det er ikke over inntil feite dama synger. 329 00:15:12,585 --> 00:15:14,130 Det er som å stenge filen. 330 00:15:14,130 --> 00:15:16,860 331 00:15:16,860 --> 00:15:19,190 Som det står her, bare å gjenta, alltid 332 00:15:19,190 --> 00:15:21,750 åpne filen før du er leser eller skriver til den. 333 00:15:21,750 --> 00:15:24,450 Og alltid lukke det hvis du har åpnet den. 334 00:15:24,450 --> 00:15:25,460 All right? 335 00:15:25,460 --> 00:15:25,960 Cool. 336 00:15:25,960 --> 00:15:26,835 >> Så her er et eksempel. 337 00:15:26,835 --> 00:15:29,250 338 00:15:29,250 --> 00:15:34,330 Så tiny-- Jeg vet ikke om du gutta kan se det veldig bra. 339 00:15:34,330 --> 00:15:36,805 Hvis bare vi kunne øke lysstyrken eller annen måte. 340 00:15:36,805 --> 00:15:40,430 341 00:15:40,430 --> 00:15:45,030 La meg faktisk gjøre dette hvis jeg kan. 342 00:15:45,030 --> 00:15:48,020 343 00:15:48,020 --> 00:15:51,470 OK, dere kan egentlig ikke se at i det hele tatt, kan du? 344 00:15:51,470 --> 00:15:52,905 OK, vi kommer til å gjøre dette, da. 345 00:15:52,905 --> 00:16:35,094 346 00:16:35,094 --> 00:16:35,594 [Uhørbart] 347 00:16:35,594 --> 00:16:56,670 348 00:16:56,670 --> 00:16:58,605 >> Jeg antar at dette er mye bedre å se. 349 00:16:58,605 --> 00:17:17,330 350 00:17:17,330 --> 00:17:19,455 Kan noen se hvor min mus gikk er spørsmålet? 351 00:17:19,455 --> 00:17:22,837 Ah, der det er-- hva sliter! 352 00:17:22,837 --> 00:17:48,910 353 00:17:48,910 --> 00:17:49,520 >> OK. 354 00:17:49,520 --> 00:17:53,845 I utgangspunktet bør dere ha kind av en idé om hva dette gjør. 355 00:17:53,845 --> 00:17:56,740 356 00:17:56,740 --> 00:17:57,600 Det er ikke perfekt. 357 00:17:57,600 --> 00:17:58,851 358 00:17:58,851 --> 00:18:02,425 Men jeg vil heller forklare det enn å bruke mer tid på å prøve å formatere den riktig. 359 00:18:02,425 --> 00:18:03,610 360 00:18:03,610 --> 00:18:07,280 I utgangspunktet, som du ser her, vi starter med fil åpen. 361 00:18:07,280 --> 00:18:09,620 Og vi har noen databasefil at vi er 362 00:18:09,620 --> 00:18:12,300 åpning som sier det er våre studenter. 363 00:18:12,300 --> 00:18:14,020 Og vi kommer til å skrive til den. 364 00:18:14,020 --> 00:18:15,060 365 00:18:15,060 --> 00:18:17,720 Så selvfølgelig, returnere null. 366 00:18:17,720 --> 00:18:19,650 Så vi må sjekke for null. 367 00:18:19,650 --> 00:18:22,930 Og så hvis det ikke er null, vi går gjennom. 368 00:18:22,930 --> 00:18:25,660 Og som du ser, vi er looping gjennom her. 369 00:18:25,660 --> 00:18:26,960 Det er studenter. 370 00:18:26,960 --> 00:18:30,520 Studenter er hash definert som tre. 371 00:18:30,520 --> 00:18:34,060 Og det vi gjør er at vi er skrive til filen, ikke sant? 372 00:18:34,060 --> 00:18:36,975 Så hva skal vi skrive ut til vår fil? 373 00:18:36,975 --> 00:18:47,040 374 00:18:47,040 --> 00:18:48,906 >> PUBLIKUM: Poengene som er i array? 375 00:18:48,906 --> 00:18:49,680 >> SPEAKER 1: Yeah. 376 00:18:49,680 --> 00:18:50,980 Resultatet som er i den array-- nøyaktig. 377 00:18:50,980 --> 00:18:53,050 Så vi åpner dette database fil, som 378 00:18:53,050 --> 00:18:56,040 Jeg antar er en slags karakterer database. 379 00:18:56,040 --> 00:19:01,100 Og vi er bare å skrive ut scorene til hver elev til denne filen. 380 00:19:01,100 --> 00:19:02,140 Cool? 381 00:19:02,140 --> 00:19:02,640 Good. 382 00:19:02,640 --> 00:19:03,811 383 00:19:03,811 --> 00:19:04,310 Awesome. 384 00:19:04,310 --> 00:19:05,100 OK. 385 00:19:05,100 --> 00:19:06,950 La oss komme tilbake to-- 386 00:19:06,950 --> 00:19:08,646 >> PUBLIKUM: Jeg har en rask spørsmål. 387 00:19:08,646 --> 00:19:11,570 Er printf ikke i for loop? 388 00:19:11,570 --> 00:19:12,870 Det er bare i hvis loop? 389 00:19:12,870 --> 00:19:14,370 SPEAKER 1: Nei, det er i for loop. 390 00:19:14,370 --> 00:19:16,150 391 00:19:16,150 --> 00:19:18,810 Jeg kan ikke se min musen veldig godt her oppe. 392 00:19:18,810 --> 00:19:21,359 Så jeg sliter med å format som det skal. 393 00:19:21,359 --> 00:19:22,525 Denne braketten skal være borte. 394 00:19:22,525 --> 00:19:23,610 395 00:19:23,610 --> 00:19:25,130 Det bør være her nede. 396 00:19:25,130 --> 00:19:26,605 Dette er hva som er i for loop. 397 00:19:26,605 --> 00:20:10,680 398 00:20:10,680 --> 00:20:11,180 There. 399 00:20:11,180 --> 00:20:12,160 Nå er det pen. 400 00:20:12,160 --> 00:20:16,720 Så det er slik det skal be-- unntatt for at siste brakett som jeg avvist. 401 00:20:16,720 --> 00:20:17,220 OK. 402 00:20:17,220 --> 00:20:19,491 Betyr det fornuftig for alle? 403 00:20:19,491 --> 00:20:19,990 OK. 404 00:20:19,990 --> 00:20:23,750 Vi kommer til å gå videre til neste ting then-- 405 00:20:23,750 --> 00:20:26,180 som, faktisk, du kommer til å trenge å se koden. 406 00:20:26,180 --> 00:20:28,370 Så jeg skal bare kopiere at over akkurat nå. 407 00:20:28,370 --> 00:20:31,500 408 00:20:31,500 --> 00:20:32,000 OK. 409 00:20:32,000 --> 00:20:35,110 Så jeg kommer til å vise dere denne koden. 410 00:20:35,110 --> 00:20:38,240 Og jeg vil at du skal prøve og figur ut hva det er ment å gjøre. 411 00:20:38,240 --> 00:20:49,740 412 00:20:49,740 --> 00:20:52,480 >> Så gitt at-- ta et minutt eller så. 413 00:20:52,480 --> 00:20:54,440 Prøve og finne ut hva som skjer her. 414 00:20:54,440 --> 00:21:58,840 415 00:21:58,840 --> 00:21:59,570 >> Noen ideer? 416 00:21:59,570 --> 00:22:08,180 417 00:22:08,180 --> 00:22:12,470 >> Vi vet at vi har minst to argumenter i kommandolinjen, ikke sant? 418 00:22:12,470 --> 00:22:16,270 Jeg antar hvorav den ene kommer til å bli at [uhørbart] av vårt program er 419 00:22:16,270 --> 00:22:17,530 og så noe annet. 420 00:22:17,530 --> 00:22:19,980 Fordi hvis [uhørbart] er mindre enn to, vi kjefte på dem. 421 00:22:19,980 --> 00:22:21,140 Høyre? 422 00:22:21,140 --> 00:22:25,300 Og fra bruk, ser det ut som det kommer til å være en slags fil. 423 00:22:25,300 --> 00:22:26,260 Vi er alle enige i det? 424 00:22:26,260 --> 00:22:29,110 425 00:22:29,110 --> 00:22:31,570 Så nå, hva er loopen gjør? 426 00:22:31,570 --> 00:22:32,570 Hva er det å gå gjennom? 427 00:22:32,570 --> 00:22:35,000 428 00:22:35,000 --> 00:22:36,449 >> PUBLIKUM: Alle filene. 429 00:22:36,449 --> 00:22:37,240 SPEAKER 1: Nettopp. 430 00:22:37,240 --> 00:22:39,650 Det kommer gjennom alle filer som vi har innspill der. 431 00:22:39,650 --> 00:22:40,720 432 00:22:40,720 --> 00:22:46,040 Så for hver fil, er det åpne opp noen streng der. 433 00:22:46,040 --> 00:22:47,560 Det åpner opp den filen. 434 00:22:47,560 --> 00:22:48,060 Høyre? 435 00:22:48,060 --> 00:22:49,140 436 00:22:49,140 --> 00:22:52,380 Og det er å lese fra den. 437 00:22:52,380 --> 00:22:53,420 438 00:22:53,420 --> 00:22:55,540 Selvfølgelig, sjekke om det er null. 439 00:22:55,540 --> 00:22:57,220 Og så er det å skrive ut. 440 00:22:57,220 --> 00:23:01,460 Hvis det er null, er det bare å fortelle oss at det er ikke en fil som eksisterer. 441 00:23:01,460 --> 00:23:04,290 Fordi husk, med Les vår fil har å eksistere. 442 00:23:04,290 --> 00:23:04,810 Høyre? 443 00:23:04,810 --> 00:23:06,870 Med skrive- og append, du kan komme unna med det. 444 00:23:06,870 --> 00:23:08,970 Men med lese, har vår fil å eksistere. 445 00:23:08,970 --> 00:23:10,430 446 00:23:10,430 --> 00:23:13,330 >> Og så hvis den ikke finnes, hva gjør vi her? 447 00:23:13,330 --> 00:23:14,810 448 00:23:14,810 --> 00:23:15,780 La oss bare begynne her. 449 00:23:15,780 --> 00:23:18,815 Hva er dette do-- dette første tegnet. 450 00:23:18,815 --> 00:23:20,960 451 00:23:20,960 --> 00:23:21,790 Hva gjør den? 452 00:23:21,790 --> 00:23:24,100 Han får en karakter, ikke sant? 453 00:23:24,100 --> 00:23:25,400 Så hva er dette å gjøre? 454 00:23:25,400 --> 00:23:26,775 Det blir det første tegnet. 455 00:23:26,775 --> 00:23:28,860 456 00:23:28,860 --> 00:23:30,200 Noen som vet EOF? 457 00:23:30,200 --> 00:23:31,170 >> PUBLIKUM: End of file? 458 00:23:31,170 --> 00:23:32,680 >> SPEAKER 1: Slutt på file-- nøyaktig. 459 00:23:32,680 --> 00:23:35,310 Så det kommer til å gå gjennom hele filen, ikke sant? 460 00:23:35,310 --> 00:23:36,710 461 00:23:36,710 --> 00:23:40,780 Og så kommer det til å oppdatere ved få hver påfølgende karakter. 462 00:23:40,780 --> 00:23:41,565 Høyre? 463 00:23:41,565 --> 00:23:43,636 Og hva er det du gjør? 464 00:23:43,636 --> 00:23:44,760 PUBLIKUM: Å sette det in-- 465 00:23:44,760 --> 00:23:46,741 466 00:23:46,741 --> 00:23:49,170 >> SPEAKER 1: putchar utskrifter til din skjermsparer. 467 00:23:49,170 --> 00:23:50,867 468 00:23:50,867 --> 00:23:51,950 [Uhørbart] tegnet. 469 00:23:51,950 --> 00:23:54,300 Og så når det [uhørbart] Dette vil lukke filen. 470 00:23:54,300 --> 00:23:57,370 >> PUBLIKUM: Har du ikke trenger en [? annet? ?] 471 00:23:57,370 --> 00:23:59,005 >> SPEAKER 1: Ikke nødvendigvis. 472 00:23:59,005 --> 00:24:01,480 Jeg mener, det er slags underforstått i dette. 473 00:24:01,480 --> 00:24:06,780 Fordi dette kommer tilbake, skjønt, så lenge da dette ikke fange dette, du er fin. 474 00:24:06,780 --> 00:24:07,940 475 00:24:07,940 --> 00:24:10,250 Jeg mener det er sannsynligvis bra praksis å gjøre et annet. 476 00:24:10,250 --> 00:24:15,755 Men et annet er ikke alltid nødvendig spesielt 477 00:24:15,755 --> 00:24:17,610 hvis du har noe som en retur, som 478 00:24:17,610 --> 00:24:20,640 betyr at i dette tilfelle hvis den fanger det, er at programmet kommer til å ende 479 00:24:20,640 --> 00:24:21,850 og det vil aldri komme til dette. 480 00:24:21,850 --> 00:24:23,030 481 00:24:23,030 --> 00:24:29,190 Det er mer for tilfellet der du er ikke nødvendigvis tilbake noe. 482 00:24:29,190 --> 00:24:31,370 For hvis dette ikke var tilbake noe, 483 00:24:31,370 --> 00:24:34,430 det ville bety at hvis dette var sant, resten av dette ville fortsatt kjøre. 484 00:24:34,430 --> 00:24:36,138 Og i så fall, du ønsker en falsk. 485 00:24:36,138 --> 00:24:38,240 Hvis det er tilbake, og programmets avslutning, 486 00:24:38,240 --> 00:24:41,960 et annet er ikke nødvendig alle tid, avhengig av sammenhengen. 487 00:24:41,960 --> 00:24:43,084 488 00:24:43,084 --> 00:24:44,375 Jacob, hadde du et spørsmål? 489 00:24:44,375 --> 00:24:46,100 PUBLIKUM: Yeah. 490 00:24:46,100 --> 00:24:49,300 Så gjør fgetc få neste tegn? 491 00:24:49,300 --> 00:24:50,734 Hvordan øke karakter? 492 00:24:50,734 --> 00:24:51,400 SPEAKER 1: Yeah. 493 00:24:51,400 --> 00:24:52,774 Så fgetc blir neste tegn. 494 00:24:52,774 --> 00:24:54,140 495 00:24:54,140 --> 00:24:56,866 Du kan tenke på det som C ++ i en forstand. 496 00:24:56,866 --> 00:24:58,350 >> PUBLIKUM: Så hva var EOF? 497 00:24:58,350 --> 00:25:00,877 >> SPEAKER 1: EOF er slutt på fil. 498 00:25:00,877 --> 00:25:03,960 Det er bare en markør som lar deg vite at du er på slutten av filen. 499 00:25:03,960 --> 00:25:06,742 Så dette kommer til å skrive ut til standard ut. 500 00:25:06,742 --> 00:25:08,950 Og så kommer det til å lukke filen når den er ferdig. 501 00:25:08,950 --> 00:25:10,700 Og så la oss gå til neste fil, ikke sant? 502 00:25:10,700 --> 00:25:12,660 Så samlet, hva betyr dette programmet gjøre? 503 00:25:12,660 --> 00:25:15,402 504 00:25:15,402 --> 00:25:16,090 >> [Uhørbart] 505 00:25:16,090 --> 00:25:16,900 >> SPEAKER 1: Yeah. 506 00:25:16,900 --> 00:25:18,770 Den skriver bare ut alt det. 507 00:25:18,770 --> 00:25:23,270 Så hvis dere noen gang har brukt CAT og deretter navnet på noen file-- 508 00:25:23,270 --> 00:25:26,240 Jeg vet ikke om noen av dere har gang gjort det på terminalen. 509 00:25:26,240 --> 00:25:29,630 Men hvis du noen gang bruke den kommando CAT-- C-A-T-- 510 00:25:29,630 --> 00:25:31,880 og deretter uansett fil du har det-- det 511 00:25:31,880 --> 00:25:37,260 skrives det ut til terminalen, som kan være super nyttig for noen ting. 512 00:25:37,260 --> 00:25:38,746 Jeg bruker det mye. 513 00:25:38,746 --> 00:25:40,120 Betyr det fornuftig for alle? 514 00:25:40,120 --> 00:25:41,480 515 00:25:41,480 --> 00:25:42,100 Cool? 516 00:25:42,100 --> 00:25:46,530 >> OK, så din oppgave now-- enten ved selv eller med folk rundt you-- 517 00:25:46,530 --> 00:25:54,930 er å bare skrive et enkelt program som vil bare skrive "Hei, verden!" 518 00:25:54,930 --> 00:25:56,255 ut til en fil. 519 00:25:56,255 --> 00:26:00,215 >> [Uhørbart] 520 00:26:00,215 --> 00:26:56,210 521 00:26:56,210 --> 00:26:57,040 >> [Uhørbart] 522 00:26:57,040 --> 00:26:59,248 >> SPEAKER 1: Jeg var som gjorde Jeg gjør det dårlig i forrige uke? 523 00:26:59,248 --> 00:27:00,201 524 00:27:00,201 --> 00:27:01,492 Jeg trodde ikke det var så ille. 525 00:27:01,492 --> 00:27:02,479 526 00:27:02,479 --> 00:27:03,520 Jeg er glad du er alle her. 527 00:27:03,520 --> 00:27:04,655 Det gjør meg virkelig glad. 528 00:27:04,655 --> 00:27:07,565 529 00:27:07,565 --> 00:27:10,160 Jeg er en jente på enkle gleder. 530 00:27:10,160 --> 00:27:11,688 Jeg liker bare når min seksjon deltar. 531 00:27:11,688 --> 00:27:13,830 532 00:27:13,830 --> 00:27:18,270 Så får jeg bare dette startet for dere slik at vi kan kode sammen. 533 00:27:18,270 --> 00:27:22,290 Jeg liker ikke å sette noen på flekken med mindre du ønsker å være. 534 00:27:22,290 --> 00:27:26,486 535 00:27:26,486 --> 00:27:30,086 >> PUBLIKUM: For quiz, gjør vi må skrive et program? 536 00:27:30,086 --> 00:27:33,260 >> SPEAKER 1: Du kan bli bedt om å skrive enkle programmer for hånd. 537 00:27:33,260 --> 00:27:35,940 538 00:27:35,940 --> 00:27:36,590 Yup. 539 00:27:36,590 --> 00:27:38,510 >> PUBLIKUM: Quizen er i neste uke, ikke sant? 540 00:27:38,510 --> 00:27:40,108 >> SPEAKER 1: Quizen er neste onsdag. 541 00:27:40,108 --> 00:27:40,855 542 00:27:40,855 --> 00:27:43,730 Det betyr at det er en nydelig [? CSE?] gradering fest etterpå, som 543 00:27:43,730 --> 00:27:50,390 betyr at du vil få din score tilbake som kvelden-- til hvilken tid? 544 00:27:50,390 --> 00:27:50,890 Hvem vet? 545 00:27:50,890 --> 00:27:51,973 Men det vil være den kvelden. 546 00:27:51,973 --> 00:28:02,020 547 00:28:02,020 --> 00:28:02,855 >> OK. 548 00:28:02,855 --> 00:28:04,250 Hvordan ønsker vi å starte denne? 549 00:28:04,250 --> 00:28:07,964 550 00:28:07,964 --> 00:28:09,630 Jeg skal gi deg et hint-- starter med dette. 551 00:28:09,630 --> 00:28:11,455 >> PUBLIKUM: Du må åpne en fil. 552 00:28:11,455 --> 00:28:12,250 >> SPEAKER 1: Yeah. 553 00:28:12,250 --> 00:28:14,060 Så hva vil du kalle dette? 554 00:28:14,060 --> 00:28:16,150 Har du bare ønsker å kalle det "file"? 555 00:28:16,150 --> 00:28:17,480 La oss gjøre det enkelt. 556 00:28:17,480 --> 00:28:26,752 Så fopen-- hva som er vår utgang test kommer til å være? 557 00:28:26,752 --> 00:28:36,130 Kall det "Hello". 558 00:28:36,130 --> 00:28:37,810 Og hva er vår modus? 559 00:28:37,810 --> 00:28:39,764 560 00:28:39,764 --> 00:28:41,055 Hva gjør vi til denne filen? 561 00:28:41,055 --> 00:28:42,676 562 00:28:42,676 --> 00:28:43,500 >> PUBLIKUM: Les. 563 00:28:43,500 --> 00:28:44,401 564 00:28:44,401 --> 00:28:44,900 Skrive. 565 00:28:44,900 --> 00:28:46,191 SPEAKER 1: Vi skriver til den. 566 00:28:46,191 --> 00:28:47,360 567 00:28:47,360 --> 00:28:47,860 Lovely. 568 00:28:47,860 --> 00:28:50,330 569 00:28:50,330 --> 00:28:52,860 OK, så vi har denne filen nå. 570 00:28:52,860 --> 00:28:54,920 571 00:28:54,920 --> 00:28:56,212 Hva trenger vi å gjøre? 572 00:28:56,212 --> 00:28:57,420 PUBLIKUM: Sjekk om det er null. 573 00:28:57,420 --> 00:28:59,820 SPEAKER 1: Sjekk om det er null-- nøyaktig. 574 00:28:59,820 --> 00:29:01,980 Det er det jeg liker å høre. 575 00:29:01,980 --> 00:29:05,930 Det burde være automatisk, spesielt ganske mye fra dette punktet. 576 00:29:05,930 --> 00:29:07,530 577 00:29:07,530 --> 00:29:10,950 Hvis du starter segfaulting, har du sannsynligvis ikke sjekke for null et sted. 578 00:29:10,950 --> 00:29:12,480 Ni av ti ganger, det er kommer til å være din feil. 579 00:29:12,480 --> 00:29:15,400 Så hvis du bare kunne komme i vane, alltid sjekke om det er null, 580 00:29:15,400 --> 00:29:18,150 livet ditt kommer til å bli fin og easy-- eller enklere. 581 00:29:18,150 --> 00:29:19,480 >> Så sjekk for å se om det er null. 582 00:29:19,480 --> 00:29:21,200 583 00:29:21,200 --> 00:29:24,820 Så hvis det ikke er null, noe som er hva bang lik 584 00:29:24,820 --> 00:29:26,784 means-- ikke null-- det er gyldig. 585 00:29:26,784 --> 00:29:27,700 Hva ønsker vi å gjøre? 586 00:29:27,700 --> 00:29:29,750 587 00:29:29,750 --> 00:29:31,570 Vi bare ønsker å skrive ut til den filen, ikke sant? 588 00:29:31,570 --> 00:29:32,923 Så hva skal vi bruke? 589 00:29:32,923 --> 00:29:34,092 >> PUBLIKUM: fprintf 590 00:29:34,092 --> 00:29:36,800 >> SPEAKER 1: Fprintf-- nydelig. 591 00:29:36,800 --> 00:29:38,150 592 00:29:38,150 --> 00:29:44,000 Og fprintf tar to arguments-- der det kommer og hva vi ønsker skrevet ut. 593 00:29:44,000 --> 00:29:45,820 Så hva er det første? 594 00:29:45,820 --> 00:29:46,570 Hvor er det hen? 595 00:29:46,570 --> 00:29:47,490 >> PUBLIKUM: Fil. 596 00:29:47,490 --> 00:29:48,785 >> SPEAKER 1: Det kommer til fil. 597 00:29:48,785 --> 00:29:49,784 598 00:29:49,784 --> 00:29:50,950 Og hva er det vi ønsker skrevet ut? 599 00:29:50,950 --> 00:29:52,900 600 00:29:52,900 --> 00:29:58,065 "Hei, verden!" 601 00:29:58,065 --> 00:29:58,565 OK. 602 00:29:58,565 --> 00:30:03,670 Vi har en siste thing-- en annen stor paradigme her. 603 00:30:03,670 --> 00:30:04,479 604 00:30:04,479 --> 00:30:05,145 PUBLIKUM: Lukk. 605 00:30:05,145 --> 00:30:05,853 SPEAKER 1: Lukk. 606 00:30:05,853 --> 00:30:09,990 607 00:30:09,990 --> 00:30:10,540 Der du går. 608 00:30:10,540 --> 00:30:13,384 >> PUBLIKUM: Er dette skjer hvis filen er null? 609 00:30:13,384 --> 00:30:15,050 SPEAKER 1: Nei, dette er hvis det ikke er null. 610 00:30:15,050 --> 00:30:16,881 PUBLIKUM: Å, om det er not-- OK. 611 00:30:16,881 --> 00:30:21,728 612 00:30:21,728 --> 00:30:25,410 For fopen og deretter to argumenter som går på innsiden, 613 00:30:25,410 --> 00:30:27,655 hva betyr det første argumentet betyr igjen? 614 00:30:27,655 --> 00:30:30,392 >> SPEAKER 1: Argumentet er akkurat som navnet på filen 615 00:30:30,392 --> 00:30:31,350 at du ønsker å gå til. 616 00:30:31,350 --> 00:30:36,020 Så etter dette går, ville du har noen fil som heter "Hei" 617 00:30:36,020 --> 00:30:38,320 som hadde "Hello, world" i den. 618 00:30:38,320 --> 00:30:38,820 Det er alt. 619 00:30:38,820 --> 00:30:39,500 Bare navnet. 620 00:30:39,500 --> 00:30:42,685 621 00:30:42,685 --> 00:30:48,650 >> PUBLIKUM: Og siden det er å skrive, det Filen trenger ikke å allerede finnes. 622 00:30:48,650 --> 00:30:49,675 Er det det du sa? 623 00:30:49,675 --> 00:30:50,410 >> SPEAKER 1: Høyre. 624 00:30:50,410 --> 00:30:50,910 Nettopp. 625 00:30:50,910 --> 00:30:53,110 626 00:30:53,110 --> 00:30:55,839 Hvis "Hello" som en fil ikke finnes ennå, er det 627 00:30:55,839 --> 00:30:58,380 kommer til å lage en fil som heter Hello "og skrive til det for deg. 628 00:30:58,380 --> 00:30:59,631 629 00:30:59,631 --> 00:31:03,610 >> PUBLIKUM: Når du forteller programmet for å skrev til filen, 630 00:31:03,610 --> 00:31:08,075 Hvorfor skriver du "file" i stedet for navnet på filen og fprintf-- 631 00:31:08,075 --> 00:31:13,600 >> SPEAKER 1: Fordi i dette tilfellet, har vi at store FILE-- alt i caps-- stjerne, 632 00:31:13,600 --> 00:31:14,260 fil. 633 00:31:14,260 --> 00:31:17,370 Så det er en peker til filen at du snakker om. 634 00:31:17,370 --> 00:31:19,930 Dette er den måten at vi bare referere til det. 635 00:31:19,930 --> 00:31:24,850 Så i dette tilfellet deg kan tenke på file-- aha, 636 00:31:24,850 --> 00:31:31,271 vi kan bruke dette-- fil her refererer til åpningen av "Hallo" 637 00:31:31,271 --> 00:31:32,145 og la den skrive. 638 00:31:32,145 --> 00:31:34,728 >> PUBLIKUM: Kan vi sette en "Hello" stedet [? for bare?] f fil? 639 00:31:34,728 --> 00:31:40,160 SPEAKER 1: Nei, fordi "Hello" må være åpen og skrivbar. 640 00:31:40,160 --> 00:31:41,820 641 00:31:41,820 --> 00:31:45,980 Fil her er som en benevnelse som sier OK, vi 642 00:31:45,980 --> 00:31:49,190 har denne file-- hello-- at vi ser på. 643 00:31:49,190 --> 00:31:50,680 Det har blitt åpnet. 644 00:31:50,680 --> 00:31:52,140 Og vi kommer til å skrive til den. 645 00:31:52,140 --> 00:31:55,130 Hvis du bare bruker "Hallo", som er innkapslet i det. 646 00:31:55,130 --> 00:31:56,846 Så det kommer til å frike ut. 647 00:31:56,846 --> 00:31:58,590 648 00:31:58,590 --> 00:32:00,300 Jeg mener, du kunne ha kalt det. 649 00:32:00,300 --> 00:32:03,960 Du kunne ha gjort fil, stjerne, "Hello", lik det. 650 00:32:03,960 --> 00:32:07,840 Men hele poenget er at du trenger en fil stjerners pekeren for 651 00:32:07,840 --> 00:32:09,281 for å kunne bruke disse funksjonene. 652 00:32:09,281 --> 00:32:11,280 PUBLIKUM: Kan du gjøre filen, stjerne, fil, "Hello" 653 00:32:11,280 --> 00:32:13,113 eller trenger du å sette fil stjerne, fil ved det? 654 00:32:13,113 --> 00:32:16,330 SPEAKER 1: Du kunne gjøre filen, stjerne, "Hello". 655 00:32:16,330 --> 00:32:19,790 Du kan endre dette til det navnet du ønsker. 656 00:32:19,790 --> 00:32:22,114 Det er helt vilkårlig hva det heter. 657 00:32:22,114 --> 00:32:23,179 658 00:32:23,179 --> 00:32:24,220 Du kan kalle det noe. 659 00:32:24,220 --> 00:32:25,501 660 00:32:25,501 --> 00:32:28,020 Name it flying spaghetti, hvis du ville. 661 00:32:28,020 --> 00:32:29,690 >> PUBLIKUM: Hva er "w" i anførselstegn for? 662 00:32:29,690 --> 00:32:31,540 >> SPEAKER 1: Den "w" er akkurat den modusen. 663 00:32:31,540 --> 00:32:33,170 Så vi skriver til denne filen. 664 00:32:33,170 --> 00:32:34,410 665 00:32:34,410 --> 00:32:35,320 Alle gode? 666 00:32:35,320 --> 00:32:36,227 Clear? 667 00:32:36,227 --> 00:32:36,981 Ja. 668 00:32:36,981 --> 00:32:40,365 >> PUBLIKUM: Så når den skriver dette fil, hvor går så finner vi at filen? 669 00:32:40,365 --> 00:32:43,820 >> SPEAKER 1: Det vil være i samme katalog som du er i for øyeblikket. 670 00:32:43,820 --> 00:32:45,650 671 00:32:45,650 --> 00:32:48,880 Hvis du er i PSet tre og du kjører denne, innenfor din PSet 672 00:32:48,880 --> 00:32:52,600 tre mappen kommer til å være denne filen som heter "Hello". 673 00:32:52,600 --> 00:32:53,160 Cool? 674 00:32:53,160 --> 00:32:53,757 Alle gode? 675 00:32:53,757 --> 00:32:55,840 Jeg føler at du er alt få det, og det er flott. 676 00:32:55,840 --> 00:32:57,290 677 00:32:57,290 --> 00:32:57,790 OK. 678 00:32:57,790 --> 00:33:05,960 Så tilbake til min lysbilde show-- Jeg elsker når ting fungerer. 679 00:33:05,960 --> 00:33:08,674 OK, pointers-- Er dere spent? 680 00:33:08,674 --> 00:33:09,465 Pekere er stor. 681 00:33:09,465 --> 00:33:11,581 682 00:33:11,581 --> 00:33:13,580 De tar en liten bit å vikle hodet rundt. 683 00:33:13,580 --> 00:33:15,288 Dette er mitt andre år undervisnings pekere. 684 00:33:15,288 --> 00:33:16,850 Og jeg tror jeg endelig fikk den. 685 00:33:16,850 --> 00:33:18,650 Så hvis du sliter, er det OK. 686 00:33:18,650 --> 00:33:19,940 687 00:33:19,940 --> 00:33:24,070 Som jeg sa tidligere, tegne bilder hjelper mye med ting i CS, 688 00:33:24,070 --> 00:33:27,400 så mye som jeg tror folk har en tendens å tenke oh, er vi på en datamaskin. 689 00:33:27,400 --> 00:33:28,399 Vi burde bare kode. 690 00:33:28,399 --> 00:33:30,190 No-- tegnebilder vil virkelig hjelpe deg. 691 00:33:30,190 --> 00:33:32,773 Og jeg oppfordrer deg til å trykke inn din kindergartner side 692 00:33:32,773 --> 00:33:35,010 og hente ut fargestifter eller markører og uavgjort. 693 00:33:35,010 --> 00:33:36,110 Fordi det vil hjelpe deg. 694 00:33:36,110 --> 00:33:39,380 Og hvis du ser meg på kontortiden, jeg skal frakte rundt stabler av papir 695 00:33:39,380 --> 00:33:41,580 med penner tegne ting ut. 696 00:33:41,580 --> 00:33:44,370 >> Så spesielt med pointers-- tegne bilder. 697 00:33:44,370 --> 00:33:47,970 Og jeg er sikker på at vi faktisk kommer til å være å tegne noen bilder her også. 698 00:33:47,970 --> 00:33:51,270 >> Så dere alle fikk se Binky, denne kule claymation ting. 699 00:33:51,270 --> 00:33:54,720 Og vi synes det er veldig morsomt når Han eksploderer i en haug med brikker. 700 00:33:54,720 --> 00:33:56,280 701 00:33:56,280 --> 00:33:57,755 Det er litt komisk lettelse for klassen. 702 00:33:57,755 --> 00:34:02,140 703 00:34:02,140 --> 00:34:05,900 C [uhørbart] denne stor evne å være i stand til å styre minnet. 704 00:34:05,900 --> 00:34:10,090 Og det er en av de tingene som virkelig gjør det så kraftig språk. 705 00:34:10,090 --> 00:34:13,469 Men med stor makt følger stort ansvar. 706 00:34:13,469 --> 00:34:16,230 Og sprø ting kan skje hvis du ikke er forsiktig. 707 00:34:16,230 --> 00:34:18,560 Så når du bruker pekere, ønsker du å gjøre 708 00:34:18,560 --> 00:34:21,440 sikker på at du virkelig forstår nøyaktig hva du gjør. 709 00:34:21,440 --> 00:34:25,530 Forhåpentligvis neste litt tiden vil hjelpe deg virkelig forstår 710 00:34:25,530 --> 00:34:27,850 pekere, hvordan du bruker dem, og hvordan du kan manipulere dem. 711 00:34:27,850 --> 00:34:29,170 712 00:34:29,170 --> 00:34:33,460 >> Så memory-- jeg er sikker på at vi har sett dette diagrammet før. 713 00:34:33,460 --> 00:34:38,540 Så dette er bare et enkelt diagram over hvordan ting kan være lagret i minnet. 714 00:34:38,540 --> 00:34:43,145 Så du i utgangspunktet har disse store matriser av én byte blokker 715 00:34:43,145 --> 00:34:46,000 er hva vi har her-- svak trinn med en hver gang. 716 00:34:46,000 --> 00:34:51,810 Dette er i hex [uhørbart] så åtte-bits blokker. 717 00:34:51,810 --> 00:34:55,510 Og hver blokk er tilknyttet med noen heksadesimal adresse. 718 00:34:55,510 --> 00:34:58,750 Så hvis du noen gang se 0x, det er bare å notere 719 00:34:58,750 --> 00:35:00,670 at det er en heksadesimal adresse. 720 00:35:00,670 --> 00:35:03,970 Du kan anta at dette betyr noen adresse i minnet. 721 00:35:03,970 --> 00:35:06,935 Vi snakker om minneadresser når du ser heksadesimale. 722 00:35:06,935 --> 00:35:10,420 723 00:35:10,420 --> 00:35:14,630 >> Vi har ints er variabler, flyter er variabler som lagrer. 724 00:35:14,630 --> 00:35:16,260 Så ints butikk ints. 725 00:35:16,260 --> 00:35:17,430 Flyter butikken flyter. 726 00:35:17,430 --> 00:35:20,260 Så vi har også pekere at butikken minneadresser. 727 00:35:20,260 --> 00:35:21,660 Det er en slags kartlegging. 728 00:35:21,660 --> 00:35:24,240 Pekere er utelukkende for minneadresser. 729 00:35:24,240 --> 00:35:25,780 730 00:35:25,780 --> 00:35:27,292 Så det er som din type der. 731 00:35:27,292 --> 00:35:29,550 732 00:35:29,550 --> 00:35:34,470 Apparatet er 32-bit, noe som betyr at minne adresse er fire byte. 733 00:35:34,470 --> 00:35:37,830 Så noen peker som du har er også kommer til å være fire byte. 734 00:35:37,830 --> 00:35:43,200 Ellers hvis det er fire bytes, minnet er fire byte. 735 00:35:43,200 --> 00:35:44,790 Pekere butikken minne. 736 00:35:44,790 --> 00:35:46,430 Derfor er de fire byte. 737 00:35:46,430 --> 00:35:48,460 Cool-- bare vil forsterke det. 738 00:35:48,460 --> 00:35:50,120 739 00:35:50,120 --> 00:35:52,220 >> Du bør få denne tegneserien nå. 740 00:35:52,220 --> 00:35:55,040 Jeg vet ikke hvor mange av dere er xkcd fans, men jeg elsker xkcd. 741 00:35:55,040 --> 00:35:55,780 Det er flott. 742 00:35:55,780 --> 00:35:57,290 743 00:35:57,290 --> 00:35:57,790 >> OK. 744 00:35:57,790 --> 00:36:01,640 Så skaper pointers-- som jeg sa, det er ganske mye bare liker noe annet. 745 00:36:01,640 --> 00:36:02,930 Du har en type. 746 00:36:02,930 --> 00:36:04,050 Du har et navn. 747 00:36:04,050 --> 00:36:04,810 Høyre? 748 00:36:04,810 --> 00:36:10,410 Det er det vi har der. [? Hex?] Stjerne betyr at det er en peker, 749 00:36:10,410 --> 00:36:12,250 og deretter hva du vil kalle det. 750 00:36:12,250 --> 00:36:15,770 Så den typen representerer hva du kan lagre. 751 00:36:15,770 --> 00:36:16,850 752 00:36:16,850 --> 00:36:17,990 All right? 753 00:36:17,990 --> 00:36:24,350 På samme måte som hvis vi gjør ints, vi vet at vi lagrer en int der. 754 00:36:24,350 --> 00:36:25,990 755 00:36:25,990 --> 00:36:30,280 Med en peker, det holder en minneadresse. 756 00:36:30,280 --> 00:36:34,240 Men hva det betyr er at-- her er der en tegning kommer til å komme godt med. 757 00:36:34,240 --> 00:36:36,170 758 00:36:36,170 --> 00:36:45,980 Så i dette tilfellet, har vi noen value-- la oss si fire. 759 00:36:45,980 --> 00:36:49,306 Fire er ved adresse en. 760 00:36:49,306 --> 00:36:49,805 OK? 761 00:36:49,805 --> 00:36:51,550 762 00:36:51,550 --> 00:36:56,170 >> Denne første her betyr at det er en peker 2x. 763 00:36:56,170 --> 00:36:56,740 Høyre? 764 00:36:56,740 --> 00:36:57,628 Det er noen pekeren x. 765 00:36:57,628 --> 00:36:58,852 766 00:36:58,852 --> 00:37:00,940 x kan være noe, uansett. 767 00:37:00,940 --> 00:37:01,960 768 00:37:01,960 --> 00:37:05,130 Uansett x er-- si x er fire. 769 00:37:05,130 --> 00:37:07,280 Det kommer til å lagre minneadresse her. 770 00:37:07,280 --> 00:37:12,260 Så int, stjerne, er X- dette noen andre sporet i memory-- 771 00:37:12,260 --> 00:37:13,590 som vet hva dette er. 772 00:37:13,590 --> 00:37:15,430 Men det kommer til å lagre en adresse her. 773 00:37:15,430 --> 00:37:27,040 Så dette ville være like-- i dette tilfellet, uansett, 774 00:37:27,040 --> 00:37:32,630 er lagret på 0x1-- det som er lagret til den adressen vår pekeren holder, 775 00:37:32,630 --> 00:37:35,280 har å matche opp med hva vi har utpekt. 776 00:37:35,280 --> 00:37:40,330 Så på 0x1, i dette tilfellet, er dette x. 777 00:37:40,330 --> 00:37:42,500 778 00:37:42,500 --> 00:37:49,340 Dette kan bare noensinne være en int mens vi bruker dette. 779 00:37:49,340 --> 00:37:52,950 >> Tilsvarende, hvis vi har annen 1y, uansett 780 00:37:52,950 --> 00:37:59,130 adressen lagres med en y har å være en char-- samme med z. 781 00:37:59,130 --> 00:38:05,840 På samme måte, når du prøve og gjøre intx lik 0,4, 782 00:38:05,840 --> 00:38:09,275 det kommer til å kjefte på deg og være som ingen, du sa du ønsket en int. 783 00:38:09,275 --> 00:38:10,525 Dette er ment å være en int. 784 00:38:10,525 --> 00:38:11,900 Slutt å prøve å gjøre det til en float. 785 00:38:11,900 --> 00:38:14,150 >> Så la ting være det de ønsker å være. 786 00:38:14,150 --> 00:38:15,159 787 00:38:15,159 --> 00:38:16,200 La ting være seg selv. 788 00:38:16,200 --> 00:38:19,380 789 00:38:19,380 --> 00:38:23,450 Så store tingen er bare uansett type peker 790 00:38:23,450 --> 00:38:26,101 det er, det er den eneste ting du kan lagre det. 791 00:38:26,101 --> 00:38:26,600 OK? 792 00:38:26,600 --> 00:38:27,910 793 00:38:27,910 --> 00:38:31,160 Med praksis, som med forrige uke, alt 794 00:38:31,160 --> 00:38:32,817 synes virkelig slags abstrakt. 795 00:38:32,817 --> 00:38:34,150 Vi kommer til å gjøre noen praksis. 796 00:38:34,150 --> 00:38:36,760 Det bør være mer fornuftig. 797 00:38:36,760 --> 00:38:44,580 >> Så Klassifisering og dereferencing-- det er veldig viktig å få disse rett. 798 00:38:44,580 --> 00:38:46,630 Jeg har fortsatt å oppdatere nå og da. 799 00:38:46,630 --> 00:38:48,450 Og jeg er like vente, som en vil jeg? 800 00:38:48,450 --> 00:38:56,080 Så tegnet faktisk vil gi du referansen eller adressen til. 801 00:38:56,080 --> 00:39:00,100 Så det returnerer adresse i hukommelse av hvilke variable er lagret. 802 00:39:00,100 --> 00:39:01,170 803 00:39:01,170 --> 00:39:07,020 Så det kommer til å faktisk komme tilbake til deg en heksadesimal, mens dereferencing det 804 00:39:07,020 --> 00:39:10,641 faktisk kommer til å gi deg dataene som er lagret der. 805 00:39:10,641 --> 00:39:11,140 OK? 806 00:39:11,140 --> 00:39:12,680 807 00:39:12,680 --> 00:39:16,060 Så vi kommer til å se på et eksempel veldig fort, eller faktisk opp neste. 808 00:39:16,060 --> 00:39:18,050 809 00:39:18,050 --> 00:39:19,150 >> OK. 810 00:39:19,150 --> 00:39:21,790 Så vi må tenke virkelig nøye om dette. 811 00:39:21,790 --> 00:39:23,860 Så her har vi noen heltall x. 812 00:39:23,860 --> 00:39:26,485 Jeg kommer til å prøve og trekke dette ut til den beste av mine evner. 813 00:39:26,485 --> 00:39:30,230 814 00:39:30,230 --> 00:39:32,410 Så vi kommer til å ha dette sporet x. 815 00:39:32,410 --> 00:39:35,850 816 00:39:35,850 --> 00:39:37,315 Og det er lagring av fem. 817 00:39:37,315 --> 00:39:38,640 818 00:39:38,640 --> 00:39:40,090 Sin adresse er 0x4. 819 00:39:40,090 --> 00:39:41,920 820 00:39:41,920 --> 00:39:43,160 Cool? 821 00:39:43,160 --> 00:39:44,100 All good. 822 00:39:44,100 --> 00:39:45,470 >> Så nå har vi denne pekeren. 823 00:39:45,470 --> 00:39:46,916 824 00:39:46,916 --> 00:39:47,990 Det var over her. 825 00:39:47,990 --> 00:39:52,130 826 00:39:52,130 --> 00:39:57,560 Og tegnet gir oss adressen til noe. 827 00:39:57,560 --> 00:40:00,780 Så, i dette tilfellet, er det adressen til x. 828 00:40:00,780 --> 00:40:01,875 Hva er adressen til X? 829 00:40:01,875 --> 00:40:05,660 830 00:40:05,660 --> 00:40:12,590 04-- og denne pekeren er på 0x08. 831 00:40:12,590 --> 00:40:14,490 832 00:40:14,490 --> 00:40:14,990 Cool? 833 00:40:14,990 --> 00:40:16,570 834 00:40:16,570 --> 00:40:21,570 Så du kan tenke på dette pekeren, 04, peker litt over her. 835 00:40:21,570 --> 00:40:22,840 836 00:40:22,840 --> 00:40:25,740 Og de heter pekere fordi som vi får mer inn i dette, 837 00:40:25,740 --> 00:40:28,450 du kommer til å se peker til ting. 838 00:40:28,450 --> 00:40:31,470 Og ett kvartal peker til en annen blokken vil gjøre mye mer fornuftig. 839 00:40:31,470 --> 00:40:32,760 840 00:40:32,760 --> 00:40:33,890 Så her er to. 841 00:40:33,890 --> 00:40:38,230 Og så har vi noen kopi, som er what-- 0x0C. 842 00:40:38,230 --> 00:40:41,290 843 00:40:41,290 --> 00:40:43,420 Og det kommer til å dereference vår pekeren. 844 00:40:43,420 --> 00:40:46,790 >> Så hva det er å si er OK, her er vår pekeren. 845 00:40:46,790 --> 00:40:53,090 Verdien den lagrer er 0x04, og hva det er å si er å gå til denne adressen 846 00:40:53,090 --> 00:40:54,300 og fortelle meg hva som er i den. 847 00:40:54,300 --> 00:40:55,520 848 00:40:55,520 --> 00:40:57,710 Så det er effektivt hva denne pilen gjør. 849 00:40:57,710 --> 00:40:58,750 850 00:40:58,750 --> 00:41:01,280 Du kan tenke på dette som din stjerne. 851 00:41:01,280 --> 00:41:05,410 Så OK, når vi gjør stjerne, betyr det følge. 852 00:41:05,410 --> 00:41:06,810 Gå til denne adressen. 853 00:41:06,810 --> 00:41:11,430 Og det er i utgangspunktet bare å følge denne pilen til dette minnet blings. 854 00:41:11,430 --> 00:41:15,380 Og gi oss hva som er i den, noe som er fem. 855 00:41:15,380 --> 00:41:18,840 Det er derfor vårt eksemplar er lik fem. 856 00:41:18,840 --> 00:41:20,120 Betyr det fornuftig? 857 00:41:20,120 --> 00:41:22,769 Er det noen som trenger meg til å gå gjennom det igjen, eller saktere? 858 00:41:22,769 --> 00:41:24,560 Du vil ha meg til å gå gjennom det en gang til? 859 00:41:24,560 --> 00:41:25,060 OK. 860 00:41:25,060 --> 00:41:27,549 861 00:41:27,549 --> 00:41:28,840 Vi kommer til å tegne den på nytt. 862 00:41:28,840 --> 00:41:31,930 863 00:41:31,930 --> 00:41:37,205 Når vi starter, vi alle er enige om vi har noen del av minnet som er en variabel 864 00:41:37,205 --> 00:41:40,890 x som vi satt lik 5. 865 00:41:40,890 --> 00:41:42,910 Vi kontrollerer ikke hvor det er i minnet. 866 00:41:42,910 --> 00:41:45,520 Så dette stedet er bare vilkårlig tildelt. 867 00:41:45,520 --> 00:41:47,770 868 00:41:47,770 --> 00:41:48,731 Bra det? 869 00:41:48,731 --> 00:41:49,230 OK. 870 00:41:49,230 --> 00:41:50,420 871 00:41:50,420 --> 00:41:53,330 Så vi initialisere en peker til en int. 872 00:41:53,330 --> 00:41:56,900 Det er derfor det er lov til å peke på x fordi vi har en int i her. 873 00:41:56,900 --> 00:42:00,840 Vi har en annen del av minnet fordi denne pekeren 874 00:42:00,840 --> 00:42:03,485 er en variabel akkurat som alt annet. 875 00:42:03,485 --> 00:42:06,615 Det er vilkårlig tildelt noen plass i minnet. 876 00:42:06,615 --> 00:42:07,630 877 00:42:07,630 --> 00:42:10,830 Og hva den lagrer er adressen til x. 878 00:42:10,830 --> 00:42:13,200 Ampersand betyr adressen til x. 879 00:42:13,200 --> 00:42:14,575 Så hva er adressen til x? 880 00:42:14,575 --> 00:42:19,179 881 00:42:19,179 --> 00:42:20,614 >> PUBLIKUM: Det er zero-- 882 00:42:20,614 --> 00:42:21,280 SPEAKER 1: 0x04. 883 00:42:21,280 --> 00:42:24,350 884 00:42:24,350 --> 00:42:25,940 Så then-- siste. 885 00:42:25,940 --> 00:42:30,650 Vi har noen copy-- igjen bare en annen variabel. 886 00:42:30,650 --> 00:42:32,520 Så la oss tildele noen vilkårlig sted. 887 00:42:32,520 --> 00:42:35,260 888 00:42:35,260 --> 00:42:38,080 Og vi dereference vår pekeren. 889 00:42:38,080 --> 00:42:42,490 Stjernen betyr gå til adresse lagret i min pekeren. 890 00:42:42,490 --> 00:42:44,480 Fortell meg hva som er der. 891 00:42:44,480 --> 00:42:47,290 Så adressen lagret i vår pekeren er 0x04. 892 00:42:47,290 --> 00:42:49,070 893 00:42:49,070 --> 00:42:51,310 Så vi går til denne adressen. 894 00:42:51,310 --> 00:42:52,402 895 00:42:52,402 --> 00:42:54,590 Den peker til denne adressen. 896 00:42:54,590 --> 00:42:57,481 Hva er inni denne minneblokk? 897 00:42:57,481 --> 00:42:57,980 Det er en fem. 898 00:42:57,980 --> 00:42:59,210 899 00:42:59,210 --> 00:43:01,650 Så det er det vi tilordner vår kopi. 900 00:43:01,650 --> 00:43:03,430 901 00:43:03,430 --> 00:43:04,860 Alle gode? 902 00:43:04,860 --> 00:43:05,360 Cool. 903 00:43:05,360 --> 00:43:07,010 904 00:43:07,010 --> 00:43:08,330 Igjen-- bilder. 905 00:43:08,330 --> 00:43:19,750 906 00:43:19,750 --> 00:43:25,200 >> Så sporing verdiene her-- jeg er kommer til å la dere synes om dette. 907 00:43:25,200 --> 00:43:26,550 908 00:43:26,550 --> 00:43:27,750 Vi kan tegne et annet bilde. 909 00:43:27,750 --> 00:43:31,260 Men jeg vil at du skal prøve og grunn gjennom dette på egen hånd i et minutt. 910 00:43:31,260 --> 00:44:01,430 911 00:44:01,430 --> 00:44:04,149 >> Siden de ikke gi oss et eksempel adresse, 912 00:44:04,149 --> 00:44:06,940 Jeg bare kommer til å gjøre tegnet X- som skal bidra til å drive den hjem. 913 00:44:06,940 --> 00:44:07,950 Ampersand betyr adresse. 914 00:44:07,950 --> 00:44:09,540 915 00:44:09,540 --> 00:44:12,360 >> Så i den første, alle gå med den første linjen. 916 00:44:12,360 --> 00:44:15,690 Noen x settet five-- noen tilfeldig sporet i minnet. 917 00:44:15,690 --> 00:44:17,660 918 00:44:17,660 --> 00:44:23,200 Int stjerners pekeren er lik til adressen til x, rett? 919 00:44:23,200 --> 00:44:28,180 Int stjerners pekeren skaper denne blokken, kaller det peker, 920 00:44:28,180 --> 00:44:30,650 og tildeler den til adressen til x. 921 00:44:30,650 --> 00:44:32,750 922 00:44:32,750 --> 00:44:34,230 Jeg er forferdelig på ampersand. 923 00:44:34,230 --> 00:44:36,460 924 00:44:36,460 --> 00:44:40,550 >> Nå hva vi gjør er at vi sier OK, dereference vår pekeren. 925 00:44:40,550 --> 00:44:42,760 Så vi går OK, hva som er i vår peker? 926 00:44:42,760 --> 00:44:44,820 Det er tegnet x. 927 00:44:44,820 --> 00:44:49,400 Gå til Ampersand x og overføre den. 928 00:44:49,400 --> 00:44:51,620 929 00:44:51,620 --> 00:44:57,480 >> Så nå er tegnet x kommer til å være 35. 930 00:44:57,480 --> 00:45:01,540 931 00:45:01,540 --> 00:45:05,174 Så i utgangspunktet, når du er dereferencing, går du OK. 932 00:45:05,174 --> 00:45:07,090 Du kommer til å være tegning bilder som dette. 933 00:45:07,090 --> 00:45:09,423 Du kommer til å være tegning pilene enn hvor det er. 934 00:45:09,423 --> 00:45:16,030 Så gå til denne spalten i minne og enten gi meg denne verdien tilbake, eller endre det. 935 00:45:16,030 --> 00:45:21,620 I dette tilfellet, fordi vi er på dette verdi, vi tilordne den til å være 35. 936 00:45:21,620 --> 00:45:24,700 Mens det i den siste en, hvis du legger merke til, vi 937 00:45:24,700 --> 00:45:27,680 ble tilordne hva som var her til noe annet. 938 00:45:27,680 --> 00:45:30,450 939 00:45:30,450 --> 00:45:32,245 >> Så de har denne awesome tabellen. 940 00:45:32,245 --> 00:45:35,000 941 00:45:35,000 --> 00:45:36,890 Det er ikke så ille. 942 00:45:36,890 --> 00:45:37,970 Dere jobber på den. 943 00:45:37,970 --> 00:45:39,640 Jeg kommer til å trekke den ut på brettet. 944 00:45:39,640 --> 00:45:41,306 Vi kommer til å fylle det ut sammen, OK? 945 00:45:41,306 --> 00:45:42,290 946 00:45:42,290 --> 00:45:45,530 Så grip litt papir, grip en partner, begynne å jobbe. 947 00:45:45,530 --> 00:45:53,897 948 00:45:53,897 --> 00:45:55,605 Jeg kommer til å få en større stykke kritt. 949 00:45:55,605 --> 00:45:56,624 950 00:45:56,624 --> 00:45:58,150 Fordi det kommer til å bli mye. 951 00:45:58,150 --> 00:45:59,410 952 00:45:59,410 --> 00:45:59,910 OK. 953 00:45:59,910 --> 00:48:08,567 954 00:48:08,567 --> 00:48:09,150 PROFESSOR: OK. 955 00:48:09,150 --> 00:48:11,599 956 00:48:11,599 --> 00:48:12,890 La oss starte med den første raden. 957 00:48:12,890 --> 00:48:14,070 958 00:48:14,070 --> 00:48:16,970 Vi begynner der, så dere kan kanskje virke gjennom litt mer. 959 00:48:16,970 --> 00:48:17,870 OK. 960 00:48:17,870 --> 00:48:19,810 a er lik b ganger c så hva er en? 961 00:48:19,810 --> 00:48:21,420 962 00:48:21,420 --> 00:48:23,260 Det er ikke et lurespørsmål, jeg lover. 963 00:48:23,260 --> 00:48:24,440 >> STUDENT: 4 ganger 5. 964 00:48:24,440 --> 00:48:25,420 >> PROFESSOR: 4 ganger 5. 965 00:48:25,420 --> 00:48:25,920 20. 966 00:48:25,920 --> 00:48:26,730 Så hva er b? 967 00:48:26,730 --> 00:48:27,921 968 00:48:27,921 --> 00:48:28,420 STUDENT: 4. 969 00:48:28,420 --> 00:48:30,204 970 00:48:30,204 --> 00:48:31,043 >> PROFESSOR: Og c? 971 00:48:31,043 --> 00:48:31,542 STUDENT: 5. 972 00:48:31,542 --> 00:48:32,083 PROFESSOR: 5. 973 00:48:32,083 --> 00:48:35,960 Og så dette er bare kommer til bli tegnet en, ampersand b, 974 00:48:35,960 --> 00:48:38,575 ampersand c, ikke sant? 975 00:48:38,575 --> 00:48:39,728 976 00:48:39,728 --> 00:48:40,596 Ikke dårlig. 977 00:48:40,596 --> 00:48:42,081 Det er enkelt nok. 978 00:48:42,081 --> 00:48:42,580 OK. 979 00:48:42,580 --> 00:48:44,300 Så den neste. 980 00:48:44,300 --> 00:48:48,725 A er lik en ganger c, i tilfelle noen var ukjent med det. 981 00:48:48,725 --> 00:48:49,812 982 00:48:49,812 --> 00:48:53,300 Er alle kjent med tiden er lik? 983 00:48:53,300 --> 00:49:00,105 OK, alt dette means-- dette er forkortelse for en lik en ganger c. 984 00:49:00,105 --> 00:49:04,840 Du kan også gjøre det med divisjon, med tillegg, med subtraksjon. 985 00:49:04,840 --> 00:49:12,130 Du kan gjøre et likemenn, eller et pluss lik c betyr a er lik en pluss c, lik en minus 986 00:49:12,130 --> 00:49:15,190 c ville være lik en minus c. 987 00:49:15,190 --> 00:49:16,690 Det er bare syntaktisk sukker. 988 00:49:16,690 --> 00:49:19,380 989 00:49:19,380 --> 00:49:24,140 >> Så, i dette tilfellet, er lik a en ganger c ville gi oss det? 990 00:49:24,140 --> 00:49:25,910 991 00:49:25,910 --> 00:49:28,186 Igjen, ikke et lurespørsmål. 992 00:49:28,186 --> 00:49:28,965 >> STUDENT: 100. 993 00:49:28,965 --> 00:49:29,300 >> PROFESSOR: 100. 994 00:49:29,300 --> 00:49:30,383 Har noe annet endre? 995 00:49:30,383 --> 00:49:31,790 996 00:49:31,790 --> 00:49:32,290 Nei. 997 00:49:32,290 --> 00:49:37,380 998 00:49:37,380 --> 00:49:39,850 Kanskje vil jeg endelig få bedre på mine-tegn. 999 00:49:39,850 --> 00:49:42,047 >> STUDENT: OK, sorry, hvordan fikk du 100? 1000 00:49:42,047 --> 00:49:42,630 PROFESSOR: OK. 1001 00:49:42,630 --> 00:49:46,594 Slik at a er lik a ganger c, så en ganger c. 1002 00:49:46,594 --> 00:49:48,510 STUDENT: Åh, du bruker en for previous-- 1003 00:49:48,510 --> 00:49:49,135 PROFESSOR: Ja. 1004 00:49:49,135 --> 00:49:51,450 Så disse er våre nyeste verdier. 1005 00:49:51,450 --> 00:49:53,990 Dette er hva du bør være bruker når vi beveger oss ned, OK. 1006 00:49:53,990 --> 00:49:57,290 1007 00:49:57,290 --> 00:50:01,520 Så, er b det eneste endring, ikke sant? 1008 00:50:01,520 --> 00:50:02,910 Så la oss fylle ut alt annet. 1009 00:50:02,910 --> 00:50:09,110 1010 00:50:09,110 --> 00:50:11,330 B. Hva er b kommer til å være? 1011 00:50:11,330 --> 00:50:13,020 1012 00:50:13,020 --> 00:50:14,140 Å være eller ikke å være. 1013 00:50:14,140 --> 00:50:18,680 1014 00:50:18,680 --> 00:50:20,240 Så hva er dette å gjøre? 1015 00:50:20,240 --> 00:50:21,605 Hva er stjernen pa gjør? 1016 00:50:21,605 --> 00:50:23,280 1017 00:50:23,280 --> 00:50:25,350 >> STUDENT: Kode til plasseringen av pa. 1018 00:50:25,350 --> 00:50:26,390 1019 00:50:26,390 --> 00:50:27,480 >> STUDENT: Nei, ikke helt. 1020 00:50:27,480 --> 00:50:29,470 Så dette er en d referanse. 1021 00:50:29,470 --> 00:50:31,580 >> STUDENT: Så b er handed verdien av pa. 1022 00:50:31,580 --> 00:50:37,340 >> PROFESSOR: Ja, så pa adressen til en, ikke sant? 1023 00:50:37,340 --> 00:50:42,430 Så det er å si gå til hvor en er lagret og gir den verdi som. 1024 00:50:42,430 --> 00:50:43,884 Så hva er b? 1025 00:50:43,884 --> 00:50:44,425 STUDENT: 100. 1026 00:50:44,425 --> 00:50:46,534 PROFESSOR: 100. 1027 00:50:46,534 --> 00:50:47,450 Perfect. 1028 00:50:47,450 --> 00:50:49,879 OK, så pc er det som er i endring. 1029 00:50:49,879 --> 00:50:51,170 Alt annet forblir den samme. 1030 00:50:51,170 --> 00:50:57,160 1031 00:50:57,160 --> 00:50:58,620 Hva er pc kommer til å være? 1032 00:50:58,620 --> 00:51:00,770 1033 00:51:00,770 --> 00:51:01,580 Enkel oppgave. 1034 00:51:01,580 --> 00:51:03,520 1035 00:51:03,520 --> 00:51:05,990 Pc er lik pa, og hva som er pa? 1036 00:51:05,990 --> 00:51:07,049 >> STUDENT: Ampersand en. 1037 00:51:07,049 --> 00:51:07,840 PROFESSOR: Perfect. 1038 00:51:07,840 --> 00:51:09,490 1039 00:51:09,490 --> 00:51:10,740 Nå får vi interessant. 1040 00:51:10,740 --> 00:51:12,310 1041 00:51:12,310 --> 00:51:15,230 OK, la oss bryte dette ned. 1042 00:51:15,230 --> 00:51:21,110 Først, hva er b ganger c, fordi det er den enkle delen av denne, ikke sant? 1043 00:51:21,110 --> 00:51:22,360 B ganger c er-- 1044 00:51:22,360 --> 00:51:23,320 >> STUDENT: 500. 1045 00:51:23,320 --> 00:51:28,880 >> PROFESSOR: Ja, så hva er dette en gjør, 1046 00:51:28,880 --> 00:51:33,705 hvis det er stjerne pb, hva endring? 1047 00:51:33,705 --> 00:51:35,320 1048 00:51:35,320 --> 00:51:37,242 >> STUDENT: Hva er i the-- 1049 00:51:37,242 --> 00:51:38,200 PROFESSOR: Hva er i b? 1050 00:51:38,200 --> 00:51:41,340 STUDENT: Hva er i rommet at pb peker til. 1051 00:51:41,340 --> 00:51:43,406 PROFESSOR: Og pb peker to-- 1052 00:51:43,406 --> 00:51:43,905 STUDENT: B. 1053 00:51:43,905 --> 00:51:46,740 PROFESSOR: B. Så den eneste ting endring er b, ikke sant. 1054 00:51:46,740 --> 00:51:50,800 Så b ganger c, 500. 1055 00:51:50,800 --> 00:51:52,367 Så det er det endrer seg nå. 1056 00:51:52,367 --> 00:51:59,091 1057 00:51:59,091 --> 00:51:59,590 Cool. 1058 00:51:59,590 --> 00:52:00,340 1059 00:52:00,340 --> 00:52:00,840 Lovely. 1060 00:52:00,840 --> 00:52:01,905 Dere gjør stor. 1061 00:52:01,905 --> 00:52:03,650 1062 00:52:03,650 --> 00:52:06,740 All right, bryte dette ned. 1063 00:52:06,740 --> 00:52:08,050 1064 00:52:08,050 --> 00:52:09,630 C er i endring, ikke sant? 1065 00:52:09,630 --> 00:52:11,530 Så vi kan fylle ut alt annet. 1066 00:52:11,530 --> 00:52:12,540 1067 00:52:12,540 --> 00:52:13,205 La oss se. 1068 00:52:13,205 --> 00:52:19,125 1069 00:52:19,125 --> 00:52:19,625 OK. 1070 00:52:19,625 --> 00:52:21,420 1071 00:52:21,420 --> 00:52:24,740 Vi vet at c kommer til å være den produktet av to tall, ikke sant? 1072 00:52:24,740 --> 00:52:26,290 1073 00:52:26,290 --> 00:52:27,980 Hvilke to tall, skjønt? 1074 00:52:27,980 --> 00:52:28,970 >> STUDENT: A og c? 1075 00:52:28,970 --> 00:52:31,930 >> PROFESSOR: Så en er rett for den første. 1076 00:52:31,930 --> 00:52:34,385 Så vi d refererer p av en, ikke sant? 1077 00:52:34,385 --> 00:52:35,390 1078 00:52:35,390 --> 00:52:42,870 P av en peker til en, så vi vet at dette kommer til å være 100 ganger hva? 1079 00:52:42,870 --> 00:52:46,232 Ganger hva gjør pc peker på? 1080 00:52:46,232 --> 00:52:47,410 1081 00:52:47,410 --> 00:52:48,740 Peker på en. 1082 00:52:48,740 --> 00:52:55,038 Så 100 ganger 100 er 10.000. 1083 00:52:55,038 --> 00:52:56,170 Betyr det fornuftig? 1084 00:52:56,170 --> 00:52:57,640 1085 00:52:57,640 --> 00:52:58,200 Cool. 1086 00:52:58,200 --> 00:53:00,500 Oppløpssiden, folkens, siste raden. 1087 00:53:00,500 --> 00:53:01,190 OK. 1088 00:53:01,190 --> 00:53:02,160 Hva endres her? 1089 00:53:02,160 --> 00:53:05,640 1090 00:53:05,640 --> 00:53:06,935 >> STUDENT: A. 1091 00:53:06,935 --> 00:53:09,435 PROFESSOR: A. Perfect, så alt annet kan forbli den samme. 1092 00:53:09,435 --> 00:53:16,210 1093 00:53:16,210 --> 00:53:16,710 OK. 1094 00:53:16,710 --> 00:53:17,970 Og hva er en? 1095 00:53:17,970 --> 00:53:23,610 1096 00:53:23,610 --> 00:53:26,060 Så det er en ganger hva? 1097 00:53:26,060 --> 00:53:27,120 Dette er stjerne pb. 1098 00:53:27,120 --> 00:53:29,750 1099 00:53:29,750 --> 00:53:34,490 Så stjerners pb betyr her er pb, til pb punkter b. 1100 00:53:34,490 --> 00:53:35,370 >> STUDENT: 500. 1101 00:53:35,370 --> 00:53:36,230 >> PROFESSOR: 500. 1102 00:53:36,230 --> 00:53:39,236 Så vi har 500 ganger 100. 1103 00:53:39,236 --> 00:53:41,758 Det er 50.000. 1104 00:53:41,758 --> 00:53:43,216 Puh! 1105 00:53:43,216 --> 00:53:45,646 Se på det. 1106 00:53:45,646 --> 00:53:47,982 >> STUDENT: Hvorfor har vi den & c for last-- 1107 00:53:47,982 --> 00:53:48,690 PROFESSOR: Beklager. 1108 00:53:48,690 --> 00:53:50,080 STUDENT: Oh, OK. 1109 00:53:50,080 --> 00:53:51,600 PROFESSOR: My bad. 1110 00:53:51,600 --> 00:53:52,890 Masse skriftlig. 1111 00:53:52,890 --> 00:53:53,917 1112 00:53:53,917 --> 00:53:54,500 Alle gode? 1113 00:53:54,500 --> 00:53:55,630 1114 00:53:55,630 --> 00:53:56,660 Ikke så ille, ikke sant? 1115 00:53:56,660 --> 00:53:58,490 Bare tar litt stund å jobbe seg gjennom. 1116 00:53:58,490 --> 00:54:01,080 Hvis du bryter det ned, forstå hva hver del 1117 00:54:01,080 --> 00:54:03,197 henviser to-- som med alt det er, 1118 00:54:03,197 --> 00:54:05,780 yes-- bryte det ned til den lille problemer og deretter sette sammen, 1119 00:54:05,780 --> 00:54:07,345 og du kan gjøre noen awesome ting. 1120 00:54:07,345 --> 00:54:08,970 Det er svarene, men vi gjorde det. 1121 00:54:08,970 --> 00:54:10,324 1122 00:54:10,324 --> 00:54:11,115 Pointer aritmetikk. 1123 00:54:11,115 --> 00:54:13,961 1124 00:54:13,961 --> 00:54:14,460 Ah. 1125 00:54:14,460 --> 00:54:15,510 Hendene mine er alle kalkholdig. 1126 00:54:15,510 --> 00:54:17,970 Så legge til eller trekke int justerer pekeren 1127 00:54:17,970 --> 00:54:21,890 av størrelsen av den type av pekeren. 1128 00:54:21,890 --> 00:54:22,940 1129 00:54:22,940 --> 00:54:28,390 Husk hvordan hver type har en annen størrelse? 1130 00:54:28,390 --> 00:54:34,890 Så ut som en dobbel eller en lang lenge er åtte og int er fire, men røye er ett. 1131 00:54:34,890 --> 00:54:38,360 >> Så hva du ønsker å gjøre er-- én ting å huske 1132 00:54:38,360 --> 00:54:44,080 er bare at hvor mye din pekeren verdi faktisk endrer 1133 00:54:44,080 --> 00:54:46,550 vil avhenge typen peker det er. 1134 00:54:46,550 --> 00:54:50,820 1135 00:54:50,820 --> 00:54:51,820 Alle bra med dette? 1136 00:54:51,820 --> 00:54:52,760 Kan jeg slette den? 1137 00:54:52,760 --> 00:54:53,440 Vi er bra? 1138 00:54:53,440 --> 00:54:53,940 Awesome. 1139 00:54:53,940 --> 00:55:01,020 1140 00:55:01,020 --> 00:55:07,501 >> Så hvis vi har noen peker at-- dette kommer til å be-- jeg er 1141 00:55:07,501 --> 00:55:08,834 kommer til å gjøre det en int pekeren. 1142 00:55:08,834 --> 00:55:10,610 1143 00:55:10,610 --> 00:55:12,760 Den lagrer dette. 1144 00:55:12,760 --> 00:55:14,210 1145 00:55:14,210 --> 00:55:20,170 Hvis du skulle si pekeren pluss en, hva det kommer til å gjøre 1146 00:55:20,170 --> 00:55:23,420 er det kommer til å oppdatere den ved størrelsen av en int 1147 00:55:23,420 --> 00:55:25,950 fordi det er den typen peker det er. 1148 00:55:25,950 --> 00:55:28,260 >> Med C, alt svært strenge og regulert. 1149 00:55:28,260 --> 00:55:29,440 1150 00:55:29,440 --> 00:55:35,260 Den int pekeren kommer til å oppdatere etter hvor mye plass en int ville ta. 1151 00:55:35,260 --> 00:55:36,260 En int er fire byte. 1152 00:55:36,260 --> 00:55:37,650 1153 00:55:37,650 --> 00:55:39,060 >> Så hva ville dette bli til? 1154 00:55:39,060 --> 00:55:40,876 1155 00:55:40,876 --> 00:55:44,390 Du bare legge fire på dette. 1156 00:55:44,390 --> 00:55:50,040 Nå pekeren ville be-- OK. 1157 00:55:50,040 --> 00:55:51,820 1158 00:55:51,820 --> 00:55:55,380 >> Så hvis det var en røye og vi gjorde pekeren pluss en, hva ville det være nå? 1159 00:55:55,380 --> 00:56:00,300 1160 00:56:00,300 --> 00:56:03,330 Hvis det started-- late vi started-- akkurat nå er det 0x08. 1161 00:56:03,330 --> 00:56:04,850 1162 00:56:04,850 --> 00:56:10,850 La oss nå si at dette var en char peker, og vi har lagt en. 1163 00:56:10,850 --> 00:56:11,850 Hva ville det endre til? 1164 00:56:11,850 --> 00:56:14,989 1165 00:56:14,989 --> 00:56:16,030 Hvor mange byte er en char? 1166 00:56:16,030 --> 00:56:16,680 >> PUBLIKUM: One. 1167 00:56:16,680 --> 00:56:17,304 >> SPEAKER 1: One. 1168 00:56:17,304 --> 00:56:18,309 PUBLIKUM: Så 0x09. 1169 00:56:18,309 --> 00:56:19,600 SPEAKER 1: Så det ville være ni. 1170 00:56:19,600 --> 00:56:22,571 1171 00:56:22,571 --> 00:56:23,820 Så bare noe å huske. 1172 00:56:23,820 --> 00:56:28,340 Akkurat når du legger til en, er det ikke legge en mindre det er en char. 1173 00:56:28,340 --> 00:56:34,190 Det er å legge til hvor mange bytes den typen som det er, 1174 00:56:34,190 --> 00:56:36,960 det er derfor vi har denne ligningen her oppe. 1175 00:56:36,960 --> 00:56:40,190 Så det er int ganger størrelsen av den type pekeren. 1176 00:56:40,190 --> 00:56:42,850 1177 00:56:42,850 --> 00:56:44,730 >> Så vi har eksempel her. 1178 00:56:44,730 --> 00:56:47,250 1179 00:56:47,250 --> 00:56:54,430 y ble tildelt denne verdien, 0x4, når vi gjorde y pluss er lik én. 1180 00:56:54,430 --> 00:56:56,830 Hva det betyr, hva som er ix, endres ikke. 1181 00:56:56,830 --> 00:56:58,610 Den største forandringen er hva som er i y. 1182 00:56:58,610 --> 00:57:04,980 Adressen som er lagret i y oppdatert av fire fordi det er fire bytes i en int 1183 00:57:04,980 --> 00:57:06,097 og det er en int pekeren. 1184 00:57:06,097 --> 00:57:07,290 1185 00:57:07,290 --> 00:57:07,790 >> OK. 1186 00:57:07,790 --> 00:57:09,123 Så nå har vi en annen øvelse. 1187 00:57:09,123 --> 00:57:11,140 1188 00:57:11,140 --> 00:57:13,500 Så spørsmålet er hva som vil skrive ut. 1189 00:57:13,500 --> 00:57:36,710 1190 00:57:36,710 --> 00:57:37,650 Noen ideer? 1191 00:57:37,650 --> 00:57:41,690 1192 00:57:41,690 --> 00:57:43,699 >> PUBLIKUM: Antall tegn i glad katt? 1193 00:57:43,699 --> 00:57:44,490 SPEAKER 1: Nettopp. 1194 00:57:44,490 --> 00:57:45,531 Så liker med streng. 1195 00:57:45,531 --> 00:57:47,302 1196 00:57:47,302 --> 00:57:48,260 Har alle får det? 1197 00:57:48,260 --> 00:57:49,509 Ønsker vi å gå gjennom det? 1198 00:57:49,509 --> 00:57:50,300 1199 00:57:50,300 --> 00:57:52,010 >> Ja, OK. 1200 00:57:52,010 --> 00:57:57,385 Så det vi har her-- jeg som dette så mye mer. 1201 00:57:57,385 --> 00:57:59,340 Jeg trenger ikke å [Uhørbart] latterlig. 1202 00:57:59,340 --> 00:58:01,690 >> Så vi har vår streng her, lykkelig katt. 1203 00:58:01,690 --> 00:58:02,950 Lovely. 1204 00:58:02,950 --> 00:58:05,080 Vi har noen teller som vi å holde styr på. 1205 00:58:05,080 --> 00:58:11,430 Så vi har noen char * pekeren som bare er satt lik Str. 1206 00:58:11,430 --> 00:58:14,320 Hva dette gjør er at det er tildele noen pekeren 1207 00:58:14,320 --> 00:58:16,380 til begynnelsen av strengen. 1208 00:58:16,380 --> 00:58:19,840 Fordi jeg er sikker på, da det ble nevnt i foredraget, 1209 00:58:19,840 --> 00:58:22,290 vi har gitt dere denne datatype kalt streng. 1210 00:58:22,290 --> 00:58:29,070 >> Men egentlig strenger er bare en rekke of-- som char *. 1211 00:58:29,070 --> 00:58:32,330 Det er en peker til en haug med karakterer som er sammenhengende i minnet. 1212 00:58:32,330 --> 00:58:33,680 1213 00:58:33,680 --> 00:58:36,280 Så dette bare setter det lik noen streng er 1214 00:58:36,280 --> 00:58:38,980 identifisert ved der sin første tegnet er. 1215 00:58:38,980 --> 00:58:42,710 Så dette er bare å sette et tidspunkt lik begynnelsen av strengen. 1216 00:58:42,710 --> 00:58:44,130 Alle bra det? 1217 00:58:44,130 --> 00:58:44,960 Cool. 1218 00:58:44,960 --> 00:58:49,840 >> Så dette er dereferencing vår pekeren. 1219 00:58:49,840 --> 00:58:53,760 Så det er faktisk kommer til å gi oss noen verdi her, 1220 00:58:53,760 --> 00:58:55,610 i vår streng som vi snakker om. 1221 00:58:55,610 --> 00:58:58,342 Og vi sier så lenge det er ikke null terminator. 1222 00:58:58,342 --> 00:59:00,550 Så fortsett til du får til slutten av strengen. 1223 00:59:00,550 --> 00:59:02,180 1224 00:59:02,180 --> 00:59:04,190 Oppdater pekeren etter én. 1225 00:59:04,190 --> 00:59:09,250 Så r, vil det faktisk oppdatere ved én hver gang fordi dette er en røye, 1226 00:59:09,250 --> 00:59:09,820 char *. 1227 00:59:09,820 --> 00:59:10,930 1228 00:59:10,930 --> 00:59:12,340 >> Så det kommer til å gå gjennom. 1229 00:59:12,340 --> 00:59:13,290 Det kommer til å oppdatere. 1230 00:59:13,290 --> 00:59:16,705 Så det første gang dette går, det kommer til å være her på h. 1231 00:59:16,705 --> 00:59:17,590 Det kommer til å oppdatere. 1232 00:59:17,590 --> 00:59:18,185 >> Det vil være en a. 1233 00:59:18,185 --> 00:59:21,310 Det vil være en p, y, og så videre og så videre. 1234 00:59:21,310 --> 00:59:22,300 Vi vil oppdatere telleren. 1235 00:59:22,300 --> 00:59:26,160 Når den når enden, det bare skriver ut hvor langt det er kommet. 1236 00:59:26,160 --> 00:59:27,550 1237 00:59:27,550 --> 00:59:28,050 Ja. 1238 00:59:28,050 --> 00:59:31,475 >> PUBLIKUM: Så Det teller plassen som en, ikke sant? 1239 00:59:31,475 --> 00:59:31,974 OK. 1240 00:59:31,974 --> 00:59:34,294 1241 00:59:34,294 --> 00:59:35,222 >> SPEAKER 1: Tenk det. 1242 00:59:35,222 --> 00:59:36,830 Er det en question-- 1243 00:59:36,830 --> 00:59:37,746 >> PUBLIKUM: [uhørlig]. 1244 00:59:37,746 --> 00:59:37,968 1245 00:59:37,968 --> 00:59:38,884 >> SPEAKER 1: Ingen grunn til bekymring. 1246 00:59:38,884 --> 00:59:39,720 1247 00:59:39,720 --> 00:59:42,736 Dette gjør jeg det. 1248 00:59:42,736 --> 00:59:47,710 All right, så en ting jeg forstå er at med en matrise, 1249 00:59:47,710 --> 00:59:51,736 du kan også behandle det som en pekeren fordi arrays er bare 1250 00:59:51,736 --> 00:59:52,860 kontinuerlige flekker av minne. 1251 00:59:52,860 --> 00:59:53,970 1252 00:59:53,970 --> 00:59:56,380 >> Så du kan behandle det på samme måte. 1253 00:59:56,380 --> 00:59:59,000 Du kan manipulere dem med pekere, også. 1254 00:59:59,000 --> 01:00:04,770 Så i stedet for å gjøre, i dette tilfellet er analog tingen 1255 01:00:04,770 --> 01:00:07,490 ville være matrise 0 er lik 1. 1256 01:00:07,490 --> 01:00:08,760 1257 01:00:08,760 --> 01:00:15,210 >> Men på samme måte som en streng bestemmes 1258 01:00:15,210 --> 01:00:18,740 ved starten av der sin første tegnet er, 1259 01:00:18,740 --> 01:00:22,270 en oppstilling bestemmes av der det første elementet er. 1260 01:00:22,270 --> 01:00:25,120 Fordi vi vet, er vi garantert, at disse 1261 01:00:25,120 --> 01:00:27,985 kommer til å være kontinuerlig minneblokker. 1262 01:00:27,985 --> 01:00:29,360 Det er det som gjør det mulig for oss å gjøre dette. 1263 01:00:29,360 --> 01:00:31,193 Vi vet de er kontinuerlige minneblokker. 1264 01:00:31,193 --> 01:00:32,230 1265 01:00:32,230 --> 01:00:36,500 >> Så i dette tilfellet, ved å dereferencing bare array, som forteller oss, 1266 01:00:36,500 --> 01:00:40,800 OK, gå til starten av klyngen, som er her. 1267 01:00:40,800 --> 01:00:42,640 Så du kan sette den lik en. 1268 01:00:42,640 --> 01:00:48,610 Og i dette tilfellet, uansett utvalg typen er, når du oppdaterer den etter en, 1269 01:00:48,610 --> 01:00:50,830 det er akkurat som å oppdatere den til neste indeks. 1270 01:00:50,830 --> 01:00:52,760 1271 01:00:52,760 --> 01:00:56,360 Du kan gjøre det fordi du vet hva som er i array. 1272 01:00:56,360 --> 01:00:59,770 Så det vet hvor mye du skal oppdatere pekeren ved, 1273 01:00:59,770 --> 01:01:02,925 hvilken adresse å oppdatere den til så at du er på neste spor. 1274 01:01:02,925 --> 01:01:04,740 1275 01:01:04,740 --> 01:01:09,400 >> Så dette er bare en annen måte å skrive matrise 0 er lik 1, 1276 01:01:09,400 --> 01:01:15,114 matrise en lik 2, array brakett 2 er lik 3. 1277 01:01:15,114 --> 01:01:16,780 Det er bare en annen måte å tenke på det. 1278 01:01:16,780 --> 01:01:19,600 Fordi de er kontinuerlige blokker i minnet, 1279 01:01:19,600 --> 01:01:21,830 du kan referere til dem heller av rekken notation-- 1280 01:01:21,830 --> 01:01:24,390 som jeg personlig finne easier-- men kanskje 1281 01:01:24,390 --> 01:01:27,347 du trenger for å manipulere det strengt av minneadresser. 1282 01:01:27,347 --> 01:01:28,930 Og dette er måten du ville gjøre det. 1283 01:01:28,930 --> 01:01:30,630 1284 01:01:30,630 --> 01:01:32,630 Kind of mer som en kule ting du kan gjøre 1285 01:01:32,630 --> 01:01:35,213 versus kanskje ikke noe du er faktisk kommer til å gjennomføre. 1286 01:01:35,213 --> 01:01:36,960 1287 01:01:36,960 --> 01:01:38,630 >> Jeg bruker det i 61. 1288 01:01:38,630 --> 01:01:41,710 Dere trenger sannsynligvis ikke å bekymre seg for det for mye. 1289 01:01:41,710 --> 01:01:43,693 Men hvis du er interessert, ta 61 neste år. 1290 01:01:43,693 --> 01:01:45,269 1291 01:01:45,269 --> 01:01:46,560 Vi er på oppløpssiden gutta. 1292 01:01:46,560 --> 01:01:47,510 Jeg vet, det er lenge. 1293 01:01:47,510 --> 01:01:50,570 1294 01:01:50,570 --> 01:01:58,880 Dynamic Memory Allocation-- slik at vi vet at en 1295 01:01:58,880 --> 01:02:01,790 på ting når vi snakket under vår første delen sammen, 1296 01:02:01,790 --> 01:02:04,560 vi så på en swap funksjon hvor det var 1297 01:02:04,560 --> 01:02:08,010 utenfor rammen av våre viktigste funksjon. 1298 01:02:08,010 --> 01:02:14,370 Og vi passerer i disse verdiene som var effektivt kopier. 1299 01:02:14,370 --> 01:02:20,570 >> Og når swap ferdig utføring, det bare igjen en stabel. 1300 01:02:20,570 --> 01:02:22,830 Husk, vi har en stable ramme for swap. 1301 01:02:22,830 --> 01:02:26,070 Det etterlater og de verdier la med det. 1302 01:02:26,070 --> 01:02:27,050 Og de var borte. 1303 01:02:27,050 --> 01:02:28,615 Vi kunne ikke gjøre noe med dem, og vi var trist 1304 01:02:28,615 --> 01:02:29,989 fordi vi ikke kan bytte våre verdier. 1305 01:02:29,989 --> 01:02:31,070 1306 01:02:31,070 --> 01:02:36,560 >> Men med C, som jeg nevnte, du har mye makt over minnet. 1307 01:02:36,560 --> 01:02:43,310 Så det du kan gjøre er at du kan fordele ting på haugen her 1308 01:02:43,310 --> 01:02:46,830 som vil bo der til du forteller dem noe annet. 1309 01:02:46,830 --> 01:02:48,280 >> De er som gode barn. 1310 01:02:48,280 --> 01:02:49,150 De bo der. 1311 01:02:49,150 --> 01:02:50,270 De forlater ikke. 1312 01:02:50,270 --> 01:02:52,750 De vil bli der til du er lignende, OK, kan du gå bort. 1313 01:02:52,750 --> 01:02:55,920 >> Mens ting på stakken, who-- de er som uskikkelige barn. 1314 01:02:55,920 --> 01:02:59,160 De vil bare stikke av når du vil å være der og da de er borte. 1315 01:02:59,160 --> 01:03:00,160 Du kan ikke få dem tilbake. 1316 01:03:00,160 --> 01:03:01,350 1317 01:03:01,350 --> 01:03:07,187 >> Så haugen er-- vi kommer til å snakke om malloc og gratis, som 1318 01:03:07,187 --> 01:03:08,895 Jeg er sikker på at dere hørt om i forelesningen. 1319 01:03:08,895 --> 01:03:10,270 1320 01:03:10,270 --> 01:03:14,210 Og det er i utgangspunktet en måte å ha svært vedvarende data. 1321 01:03:14,210 --> 01:03:18,920 Så du kan holde dataene rundt så lenge du vil. 1322 01:03:18,920 --> 01:03:19,546 Mhm. 1323 01:03:19,546 --> 01:03:21,475 >> PUBLIKUM: Kan du definere haug og stable? 1324 01:03:21,475 --> 01:03:24,030 Er de liker steder å sette ting? 1325 01:03:24,030 --> 01:03:26,630 >> SPEAKER 1: Så de er utgangspunktet just-- de er 1326 01:03:26,630 --> 01:03:29,530 måten vi refererer bare til minnet. 1327 01:03:29,530 --> 01:03:37,300 Så heap er bare steder der minnet er tildelt dynamisk, 1328 01:03:37,300 --> 01:03:40,960 mens stabelen henviser mer å stable rammer 1329 01:03:40,960 --> 01:03:45,950 som er mer sentralt i funksjoner som faktisk kjører. 1330 01:03:45,950 --> 01:03:47,200 Du trenger egentlig ikke har kontroll. 1331 01:03:47,200 --> 01:03:50,690 >> Den store forskjellen, har du kontroll over haugen hvis du vil. 1332 01:03:50,690 --> 01:03:52,710 Du har mindre kontroll over bunken. 1333 01:03:52,710 --> 01:03:55,030 Stabelen avhenger funksjoner som kjører, 1334 01:03:55,030 --> 01:03:58,320 og i hvilken rekkefølge de er løpe, og hvordan ting er returnert. 1335 01:03:58,320 --> 01:04:01,290 Mens med haugen, som vi får se, kan du si, 1336 01:04:01,290 --> 01:04:06,639 OK, jeg vil at denne verdien skal være rundt før jeg fortelle deg noe annet. 1337 01:04:06,639 --> 01:04:08,180 Du har ikke lov til å bli kvitt det. 1338 01:04:08,180 --> 01:04:09,300 Du har ikke lov til å overstyre den. 1339 01:04:09,300 --> 01:04:11,675 Du kommer til å holde den rundt for så lenge jeg fortelle deg. 1340 01:04:11,675 --> 01:04:15,780 Du kommer til å være sjefen i haugen, mens stack-- kanskje hvis du 1341 01:04:15,780 --> 01:04:18,080 som finagle din vei du kan være sjefen. 1342 01:04:18,080 --> 01:04:19,340 Men ikke helt. 1343 01:04:19,340 --> 01:04:20,480 1344 01:04:20,480 --> 01:04:22,070 Og det er egentlig bare minne. 1345 01:04:22,070 --> 01:04:24,260 Det er bare forskjellige måter å henvise til minne. 1346 01:04:24,260 --> 01:04:25,800 1347 01:04:25,800 --> 01:04:26,400 >> Cool. 1348 01:04:26,400 --> 01:04:28,630 Så med det, hvordan kontrollere hukommelsen. 1349 01:04:28,630 --> 01:04:32,070 Det er med malloc, som du kommer til å få til å bruke. 1350 01:04:32,070 --> 01:04:37,100 Så det er bare kort for minnetildeling. 1351 01:04:37,100 --> 01:04:38,459 Det er alt det er. 1352 01:04:38,459 --> 01:04:41,250 Det er en haug med andre kule funksjoner som har alloc på slutten, 1353 01:04:41,250 --> 01:04:42,750 og de står for forskjellige ting. 1354 01:04:42,750 --> 01:04:43,550 1355 01:04:43,550 --> 01:04:49,050 >> Så når du trenger lagringsplass som trenger å vare lenger enn din nåværende funksjon slik 1356 01:04:49,050 --> 01:04:51,010 at når den nåværende Funksjonen går bort, 1357 01:04:51,010 --> 01:04:55,774 du har fortsatt dataene du fikk fra det, ønsker du å bruke malloc. 1358 01:04:55,774 --> 01:04:57,190 Det vil initialisere den på haugen. 1359 01:04:57,190 --> 01:05:00,140 Og som jeg sa og holde sier, vil du holde den der 1360 01:05:00,140 --> 01:05:03,050 før du forteller det ellers, som er det viktige her. 1361 01:05:03,050 --> 01:05:08,450 >> Så en ting å legge merke til, og det er vanligvis veldig viktig, 1362 01:05:08,450 --> 01:05:13,620 er at dette sizeof er super nyttig å bruke 1363 01:05:13,620 --> 01:05:16,440 fordi, avhengig av typen av maskinen du kjører, 1364 01:05:16,440 --> 01:05:22,470 den kan ha varierende mengder minne som det tar. 1365 01:05:22,470 --> 01:05:26,870 Så du alltid vil bruke størrelsen på slik at du ikke er maskinavhengig, 1366 01:05:26,870 --> 01:05:30,300 slik at koden vil kjøre på hvilken som helst maskin. 1367 01:05:30,300 --> 01:05:32,360 >> Og det er bare en del med å skrive god kode. 1368 01:05:32,360 --> 01:05:34,610 Hvis det fungerer på en maskin, men ikke noen av de andre, 1369 01:05:34,610 --> 01:05:36,440 Hvor nyttig var programmet ditt? 1370 01:05:36,440 --> 01:05:38,420 Slik at du alltid vil sørg for og bruke sizeof. 1371 01:05:38,420 --> 01:05:41,306 >> PUBLIKUM: Så er det som størrelse på 10 inches [uhørbart]? 1372 01:05:41,306 --> 01:05:43,698 >> SPEAKER 1: Dette er på størrelse med 10 ints. 1373 01:05:43,698 --> 01:05:44,197 ja. 1374 01:05:44,197 --> 01:05:45,360 1375 01:05:45,360 --> 01:05:48,830 Så størrelsen på ints vil returnere hvor mye tar en int. 1376 01:05:48,830 --> 01:05:51,530 Eller størrelse på røye, hvordan mye koster en char ta. 1377 01:05:51,530 --> 01:05:54,150 Og så hvor mange blokker av det du vil? 1378 01:05:54,150 --> 01:05:57,590 >> Så i dette tilfellet ønsker vi noe at vi kan lagre 10 ints til. 1379 01:05:57,590 --> 01:06:00,240 Og det vil fungere uansett av maskinen, noe som er kult. 1380 01:06:00,240 --> 01:06:01,720 1381 01:06:01,720 --> 01:06:04,846 Så hvor mange byte vil som faktisk gir deg? 1382 01:06:04,846 --> 01:06:06,190 Rask matematikk. 1383 01:06:06,190 --> 01:06:06,787 >> PUBLIKUM: 40. 1384 01:06:06,787 --> 01:06:07,370 SPEAKER 1: 40. 1385 01:06:07,370 --> 01:06:07,869 Nettopp. 1386 01:06:07,869 --> 01:06:09,520 1387 01:06:09,520 --> 01:06:12,030 Så en annen stor ting. 1388 01:06:12,030 --> 01:06:14,840 Pointer eller malloc kan returnere null. 1389 01:06:14,840 --> 01:06:17,910 >> Så igjen, sjekk alltid se om det returnerte null 1390 01:06:17,910 --> 01:06:19,620 før du prøver og gjøre noe med det. 1391 01:06:19,620 --> 01:06:23,430 1392 01:06:23,430 --> 01:06:27,350 Hvis du prøver og dereferanse denne pekeren nå, 1393 01:06:27,350 --> 01:06:29,720 det bare kommer til å segfault fordi du gikk og prøvde 1394 01:06:29,720 --> 01:06:31,730 å røre null når du ikke skal ha. 1395 01:06:31,730 --> 01:06:34,000 Så alltid sjekke for null. 1396 01:06:34,000 --> 01:06:36,075 Igjen, kan alt du gjør. 1397 01:06:36,075 --> 01:06:38,300 1398 01:06:38,300 --> 01:06:39,720 >> Det kan returnere null. 1399 01:06:39,720 --> 01:06:42,740 Det vil returnere null hvis du er enten tom for plass, eller uansett grunn 1400 01:06:42,740 --> 01:06:44,350 det kjørte inn i noen minne bug. 1401 01:06:44,350 --> 01:06:45,890 1402 01:06:45,890 --> 01:06:47,510 Det noen ganger bare returnerer null. 1403 01:06:47,510 --> 01:06:48,990 Så du må bare se etter det. 1404 01:06:48,990 --> 01:06:51,050 Det er alt dette lysbildet sier. 1405 01:06:51,050 --> 01:06:53,366 1406 01:06:53,366 --> 01:06:55,240 Og så det vi har her er en oppfordring til å frigjøre. 1407 01:06:55,240 --> 01:07:00,550 Så på samme måte som hvis du åpne en fil du må lukke en fil, 1408 01:07:00,550 --> 01:07:04,340 hvis du malloc minne, du må du frigjøre dette minnet. 1409 01:07:04,340 --> 01:07:06,530 Og dere vil få å gjøre virkelig kule ting. 1410 01:07:06,530 --> 01:07:09,624 >> Og det er et program du kan kjøre til se om du noen gang lekker minne. 1411 01:07:09,624 --> 01:07:11,040 Men du ikke ønsker å lekke minne. 1412 01:07:11,040 --> 01:07:11,820 Det er virkelig ille. 1413 01:07:11,820 --> 01:07:13,191 1414 01:07:13,191 --> 01:07:15,020 Bare rotet opp ting. 1415 01:07:15,020 --> 01:07:20,939 >> Det er ille å gjøre akkurat som programmering lurt for utforming effektivitet. 1416 01:07:20,939 --> 01:07:22,980 Men det er også bare snill av dårlig for datamaskinen. 1417 01:07:22,980 --> 01:07:26,780 Så bare gratis ting når du malloc dem. 1418 01:07:26,780 --> 01:07:28,190 1419 01:07:28,190 --> 01:07:30,210 >> Dere ser symmetriene her. 1420 01:07:30,210 --> 01:07:31,180 Super enkel. 1421 01:07:31,180 --> 01:07:33,010 Bare gratis og deretter uansett pekeren, 1422 01:07:33,010 --> 01:07:34,843 uansett navnet pekeren er, og det 1423 01:07:34,843 --> 01:07:36,710 vil ta seg av å frigjøre den for deg. 1424 01:07:36,710 --> 01:07:38,200 1425 01:07:38,200 --> 01:07:38,700 Cool. 1426 01:07:38,700 --> 01:07:40,410 1427 01:07:40,410 --> 01:07:42,530 >> Så har vi dette. 1428 01:07:42,530 --> 01:07:44,770 Så vi skal bare gå gjennom dette programmet. 1429 01:07:44,770 --> 01:07:46,560 Og så dere er ferdig. 1430 01:07:46,560 --> 01:07:50,240 >> Så [uhørbart] bare main. 1431 01:07:50,240 --> 01:07:51,690 Så vi har noen int * pekeren. 1432 01:07:51,690 --> 01:07:53,648 Så vi har en peker som kommer til å holde ints. 1433 01:07:53,648 --> 01:07:54,500 1434 01:07:54,500 --> 01:07:56,170 Og hvor mange ints er det kommer til å holde? 1435 01:07:56,170 --> 01:07:57,400 1436 01:07:57,400 --> 01:07:58,170 Bare en. 1437 01:07:58,170 --> 01:07:59,400 1438 01:07:59,400 --> 01:08:01,100 Størrelsen på en int. 1439 01:08:01,100 --> 01:08:03,900 >> Vi sjekker for å se om pekeren er null fordi det 1440 01:08:03,900 --> 01:08:06,130 er, vi ønsker å si ikke gjør noe. 1441 01:08:06,130 --> 01:08:07,065 Det er ille. 1442 01:08:07,065 --> 01:08:08,130 1443 01:08:08,130 --> 01:08:12,130 Så vi skrive ut noen feil ut av hukommelse, som oftest tilbake 1, 1444 01:08:12,130 --> 01:08:14,260 som dere er vant til. 1445 01:08:14,260 --> 01:08:17,390 >> Og så har vi her, vi dereference vår pekeren. 1446 01:08:17,390 --> 01:08:22,840 Så det betyr at vi kommer til å lagre noe på det stedet gitt til oss. 1447 01:08:22,840 --> 01:08:24,350 1448 01:08:24,350 --> 01:08:30,830 Int * pekeren, eller malloc, returnerer Adressen der det satt av dette 1449 01:08:30,830 --> 01:08:31,750 minne for deg. 1450 01:08:31,750 --> 01:08:32,830 1451 01:08:32,830 --> 01:08:34,800 Så det er i utgangspunktet noe som gir deg like-- hvis du 1452 01:08:34,800 --> 01:08:38,149 tenk om en haug med hus i et nabolag 1453 01:08:38,149 --> 01:08:40,640 at du ønsker å sette møbler i, malloc 1454 01:08:40,640 --> 01:08:43,850 er som OK, får du å gå for å huse tre. 1455 01:08:43,850 --> 01:08:45,800 Og det gir deg adressen til huset tre. 1456 01:08:45,800 --> 01:08:48,775 >> Så dette akkurat nå, dette peker lagrer en adresse, 1457 01:08:48,775 --> 01:08:50,149 lagrer adressen til huset ditt. 1458 01:08:50,149 --> 01:08:51,470 1459 01:08:51,470 --> 01:08:54,640 * PTR midler, OK, jeg er i mitt hus. 1460 01:08:54,640 --> 01:08:55,326 Cool. 1461 01:08:55,326 --> 01:08:56,580 Jeg trenger å få noen heltall. 1462 01:08:56,580 --> 01:08:59,229 >> Så du ber for noen å gi deg møbler nå. 1463 01:08:59,229 --> 01:09:00,430 Så du får noen int. 1464 01:09:00,430 --> 01:09:05,100 Og det setter den i pekeren der den peker til. 1465 01:09:05,100 --> 01:09:08,670 >> Og da er det bare utskrifter ut, har du tastet der. 1466 01:09:08,670 --> 01:09:11,060 Og igjen, referansen. 1467 01:09:11,060 --> 01:09:15,649 Så dette er som du gikk til denne adresse og du så hva som var der. 1468 01:09:15,649 --> 01:09:17,120 1469 01:09:17,120 --> 01:09:17,630 Cool? 1470 01:09:17,630 --> 01:09:20,174 >> Og så selvfølgelig frigjøre vi vår pekeren. 1471 01:09:20,174 --> 01:09:21,590 Ikke glem å frigjøre pekeren. 1472 01:09:21,590 --> 01:09:22,933 Ikke glem å sjekke for null. 1473 01:09:22,933 --> 01:09:24,349 Ikke glem å frigjøre pekeren. 1474 01:09:24,349 --> 01:09:27,270 Du har to ting du husker fra dette, eller at du bør huske. 1475 01:09:27,270 --> 01:09:27,770 Ja. 1476 01:09:27,770 --> 01:09:31,590 PUBLIKUM: [uhørlig] stuff sånn, char * s. 1477 01:09:31,590 --> 01:09:33,760 Hvordan kommer vi aldri frigjøre dem? 1478 01:09:33,760 --> 01:09:34,529 >> SPEAKER 1: Hm? 1479 01:09:34,529 --> 01:09:36,450 >> PUBLIKUM: Er de like strenger? 1480 01:09:36,450 --> 01:09:39,160 Du sa strenger er akkurat som char * s, ikke sant? 1481 01:09:39,160 --> 01:09:41,200 Så hvorfor ikke vi frigjøre strenger? 1482 01:09:41,200 --> 01:09:43,204 >> SPEAKER 1: Du bare til gratis hvis du mallocing. 1483 01:09:43,204 --> 01:09:44,620 PUBLIKUM: Oh, hvis du mallocing. 1484 01:09:44,620 --> 01:09:47,399 SPEAKER 1: Så malloc og fri er to ting 1485 01:09:47,399 --> 01:09:49,000 at du alltid bør ha sammen. 1486 01:09:49,000 --> 01:09:51,630 f åpne, f tett, to ting du bør ha sammen. 1487 01:09:51,630 --> 01:09:54,471 I begge disse tilfellene, se etter null. 1488 01:09:54,471 --> 01:09:54,971 Ja. 1489 01:09:54,971 --> 01:09:57,130 >> PUBLIKUM: Så gratis er bare tillater noe annet 1490 01:09:57,130 --> 01:09:59,690 skal lagres der etter dette programmet har brukt det? 1491 01:09:59,690 --> 01:10:01,946 >> SPEAKER 1: Det er bare å si: OK, jeg er ferdig med dette. 1492 01:10:01,946 --> 01:10:03,320 Du trenger ikke å holde den rundt. 1493 01:10:03,320 --> 01:10:05,340 1494 01:10:05,340 --> 01:10:08,190 Ellers datamaskinen vil akkurat som prøver og holde den der. 1495 01:10:08,190 --> 01:10:10,910 Og så can't-- det går inn minneproblemer senere. 1496 01:10:10,910 --> 01:10:13,660 Du ønsker alltid å frigjøre det fordi det forteller datamaskinen, OK, jeg er 1497 01:10:13,660 --> 01:10:15,190 ferdig med dette stedet i minnet. 1498 01:10:15,190 --> 01:10:17,190 Du kan ha den tilbake for meg å bruke senere. 1499 01:10:17,190 --> 01:10:19,250 1500 01:10:19,250 --> 01:10:20,500 Cool? 1501 01:10:20,500 --> 01:10:21,320 Ja. 1502 01:10:21,320 --> 01:10:26,950 >> PUBLIKUM: Så vi brukte% d bare fordi en dobbel som kommer tilbake, 1503 01:10:26,950 --> 01:10:28,330 eller hvorfor er-- [uhørbart]. 1504 01:10:28,330 --> 01:10:30,170 1505 01:10:30,170 --> 01:10:31,620 >> PUBLIKUM: Kan du bruke% i? 1506 01:10:31,620 --> 01:10:32,760 >> SPEAKER 1: Du kan bruke% i. 1507 01:10:32,760 --> 01:10:35,052 1508 01:10:35,052 --> 01:10:36,135 Noen siste minutt spørsmål? 1509 01:10:36,135 --> 01:10:38,310 1510 01:10:38,310 --> 01:10:38,985 Gå fremover. 1511 01:10:38,985 --> 01:10:40,610 PUBLIKUM: Jeg har bare en rask spørsmål. 1512 01:10:40,610 --> 01:10:50,200 Så ptr variabel, that's-- aktig, med int * ptr = malloc, 1513 01:10:50,200 --> 01:10:54,142 det er bare å si det er peker til et sted i memory-- 1514 01:10:54,142 --> 01:10:55,600 SPEAKER 1: Ønsker du [uhørbart]? 1515 01:10:55,600 --> 01:10:58,050 PUBLIKUM: --that er størrelse of-- nei, det er OK. 1516 01:10:58,050 --> 01:11:01,292 Men det er bare å peke på et sted i minne som er akkurat som fire byte. 1517 01:11:01,292 --> 01:11:02,000 SPEAKER 1: Høyre. 1518 01:11:02,000 --> 01:11:03,030 1519 01:11:03,030 --> 01:11:07,070 Så malloc størrelsen på int sier OK, jeg kommer til å gå løpe vekk, 1520 01:11:07,070 --> 01:11:08,780 finne fire byte med minne for deg. 1521 01:11:08,780 --> 01:11:10,700 Når den finner at fire bytes minne, det 1522 01:11:10,700 --> 01:11:14,030 gir deg tilbake den adressen av hvor den starter, 1523 01:11:14,030 --> 01:11:16,160 og det er det lagret i pekeren, eller ptr. 1524 01:11:16,160 --> 01:11:17,510 1525 01:11:17,510 --> 01:11:18,010 Good. 1526 01:11:18,010 --> 01:11:18,742 1527 01:11:18,742 --> 01:11:21,700 Dere ser mindre forvirret enn de fleste folk når jeg snakker om pekeren, 1528 01:11:21,700 --> 01:11:23,670 så jeg føler meg ganske bra akkurat nå. 1529 01:11:23,670 --> 01:11:24,520 >> OK. 1530 01:11:24,520 --> 01:11:27,960 Som alltid bør dere ha alle fått dine pset2 karakterer nå. 1531 01:11:27,960 --> 01:11:32,769 Jeg vet det har vært noen wonky ting der det står, formel ikke gyldig 1532 01:11:32,769 --> 01:11:33,310 eller noe. 1533 01:11:33,310 --> 01:11:36,166 Hvis du får det, alle karakterene dine er gyldige på min side. 1534 01:11:36,166 --> 01:11:38,040 Så jeg kan sende deg skjermbilder av dine karakterer. 1535 01:11:38,040 --> 01:11:39,011 1536 01:11:39,011 --> 01:11:41,760 Bare gi meg beskjed så godt hvis du er mangler noen karakterer eller noe 1537 01:11:41,760 --> 01:11:43,060 ser ikke ut til å gi mening. 1538 01:11:43,060 --> 01:11:43,720 Kom til meg. 1539 01:11:43,720 --> 01:11:44,830 1540 01:11:44,830 --> 01:11:48,830 >> Jeg har vært super stolt av deg gutta allerede, så fortsett med det. 1541 01:11:48,830 --> 01:11:50,640 Og har en god resten av uken. 1542 01:11:50,640 --> 01:11:53,440 Jeg er sikker på at jeg vil se noen av dere i kontortiden. 1543 01:11:53,440 --> 01:11:55,414