1 00:00:00,000 --> 00:00:06,180 2 00:00:06,180 --> 00:00:07,820 >> JASON Hirschhorn: Velkommen til A5, alle. 3 00:00:07,820 --> 00:00:11,270 Vi har en spennende uke foran oss, mest fordi det er så mange nye 4 00:00:11,270 --> 00:00:12,350 står overfor i dette rommet. 5 00:00:12,350 --> 00:00:12,920 Det er fantastisk. 6 00:00:12,920 --> 00:00:15,740 Mange av dere er her ved et uhell, noe som er enda bedre. 7 00:00:15,740 --> 00:00:18,220 Så forhåpentligvis vil du holde med oss. 8 00:00:18,220 --> 00:00:20,220 >> Denne uken skal vi bruke hoveddelen av seksjonen 9 00:00:20,220 --> 00:00:21,870 forberedelsene til quiz. 10 00:00:21,870 --> 00:00:26,580 Så per vår agenda, kommer vi til å snakke litt om ressurser for klassen, 11 00:00:26,580 --> 00:00:30,350 men også for quiz, og da, igjen, tilbringer mesteparten av klassen snakker 12 00:00:30,350 --> 00:00:31,390 om spørsmål. 13 00:00:31,390 --> 00:00:33,900 Når vi er ferdig å svare på spørsmål, eller hvis dine spørsmål 14 00:00:33,900 --> 00:00:39,010 naturligvis føre oss til noen koding, jeg har prøve problemer fra tentamen 15 00:00:39,010 --> 00:00:43,180 fortid som vi vil kode bor i seksjonen sammen at også få opp noen andre 16 00:00:43,180 --> 00:00:45,420 gode emner å dekke. 17 00:00:45,420 --> 00:00:48,280 >> Så først, som vi har gått gjennom for siste par ukene for å minne deg 18 00:00:48,280 --> 00:00:51,700 folkens, det er massevis av ressurser tilgjengelig for dette kurset. 19 00:00:51,700 --> 00:00:55,020 Mange av dem vil være utrolig nyttig til deg som du fortsetter å 20 00:00:55,020 --> 00:00:57,280 studere for quiz 0, fordi det er tirsdag ettermiddag. 21 00:00:57,280 --> 00:00:59,630 Så alle dere har vært studere for en bit. 22 00:00:59,630 --> 00:01:02,640 >> Det er forelesningsnotater og kilde kode som du bør 23 00:01:02,640 --> 00:01:04,050 definitivt sjekke ut. 24 00:01:04,050 --> 00:01:05,019 Se shorts. 25 00:01:05,019 --> 00:01:07,470 Sjekk ut study.cs50.net. 26 00:01:07,470 --> 00:01:11,770 Og så, er oppført nedenfor, et tall av andre ressurser. 27 00:01:11,770 --> 00:01:14,020 >> Igjen, quiz 0 er i morgen på en. 28 00:01:14,020 --> 00:01:18,230 Hvis du ikke allerede har gjort det, sjekk ut Om Quiz 0 dokument på 29 00:01:18,230 --> 00:01:21,370 Kursets hjemmeside til å regne ut hvor du tar quizen. 30 00:01:21,370 --> 00:01:25,770 Quizen starter kl 01:10 og slutter 70 minutter senere. 31 00:01:25,770 --> 00:01:29,610 Så hvis du møter opp etter 01:10, er du kommer til å få så mange færre minutter 32 00:01:29,610 --> 00:01:30,940 enn 70 for å ta testen. 33 00:01:30,940 --> 00:01:33,570 Så sørg for at du er der i tide. 34 00:01:33,570 --> 00:01:38,690 Hvis du er en forlengelse student eller har noen andre test hensyn, det 35 00:01:38,690 --> 00:01:40,400 kanskje ikke på en i morgen. 36 00:01:40,400 --> 00:01:43,540 Men igjen, sjekk Om Quiz 0 dokumentere å sørge for at du vet når 37 00:01:43,540 --> 00:01:44,760 du tar quizen. 38 00:01:44,760 --> 00:01:46,440 Jeg skrev 75 minutter opp her. 39 00:01:46,440 --> 00:01:48,580 Jeg tror det er riktig, ikke 70 år. 40 00:01:48,580 --> 00:01:53,420 >> Den dekker alt materialet fra en uke 0 til forrige ukes forelesning på onsdag. 41 00:01:53,420 --> 00:01:59,350 Og igjen, for denne quiz, per at dokument, får du en tosidig og 8 42 00:01:59,350 --> 00:02:03,770 1/2 av 11 ark som du får å bruke som notater under quizen. 43 00:02:03,770 --> 00:02:08,570 Mange, om ikke de fleste, har fant at den mest nyttig måte 44 00:02:08,570 --> 00:02:11,970 å studere til prøven er å gjøre en studie ark, en 45 00:02:11,970 --> 00:02:13,730 ett-sider, av sine egne. 46 00:02:13,730 --> 00:02:17,710 Så se på tidligere seg hvis du har sett tidligere funn. 47 00:02:17,710 --> 00:02:19,960 Nå ut til venner for å se hva de legger på deres. 48 00:02:19,960 --> 00:02:23,610 >> Men hendene ned, den beste måten du kan studien er å gå gjennom alt og 49 00:02:23,610 --> 00:02:26,530 spikke det ned til hva som bør eller ikke hører hjemme på at ark 50 00:02:26,530 --> 00:02:30,570 papir, fordi det er bare en virkelig nyttig måte for deg å sørge for at 51 00:02:30,570 --> 00:02:33,620 du går gjennom alt og har noen kjennskap til det. 52 00:02:33,620 --> 00:02:36,690 De fleste mennesker, finner vi, selv om de har arket sitter rett 53 00:02:36,690 --> 00:02:39,840 ved siden av dem på quiz, ikke snu til det, fordi, igjen, som meget 54 00:02:39,840 --> 00:02:43,290 Prosessen med å gå gjennom den informasjonen har hjulpet dem å lære det. 55 00:02:43,290 --> 00:02:45,370 >> Er det noen som har noen spørsmål om quiz 0? 56 00:02:45,370 --> 00:02:50,120 57 00:02:50,120 --> 00:02:51,450 Har alle - 58 00:02:51,450 --> 00:02:53,230 Jeg har ikke tenkt til å gjøre en håndsopprekning. 59 00:02:53,230 --> 00:02:53,550 Bare hyggelig. 60 00:02:53,550 --> 00:02:54,790 Jeg hadde tenkt å spørre hvem begynte å studere. 61 00:02:54,790 --> 00:02:58,360 Men jeg ønsker ikke å gjøre deg alt ikke heve hendene. 62 00:02:58,360 --> 00:03:01,290 Så som jeg sa - ja, Avi, gå videre. 63 00:03:01,290 --> 00:03:04,205 >> AVI: Hva ville være en nyttig ting å sette på en-personsøker? 64 00:03:04,205 --> 00:03:05,875 >> STUDENT: Det er opp til deg. 65 00:03:05,875 --> 00:03:08,210 >> JASON Hirschhorn: Du får å bruke skjønn. 66 00:03:08,210 --> 00:03:13,220 Nyttige ting å sette på en-personsøker, Hvis du er forvirret om den store O 67 00:03:13,220 --> 00:03:17,510 runtime av ulike typer søk og sorterer, sette det på det i en 68 00:03:17,510 --> 00:03:18,760 hendige dandy diagrammet. 69 00:03:18,760 --> 00:03:22,250 På den måten, hvis du blir bedt om det på quiz, trenger du ikke å prøve og figur 70 00:03:22,250 --> 00:03:23,560 den ut eller grunn gjennom runtime. 71 00:03:23,560 --> 00:03:24,730 Du kan bare kopiere det ned. 72 00:03:24,730 --> 00:03:28,320 Hvis du ser på spørrekonkurranser tidligere, mye ganger, er det å kjøre tidsspørsmål. 73 00:03:28,320 --> 00:03:34,150 Slik det ville være et eksempel på en god ting å sette på en-personsøker. 74 00:03:34,150 --> 00:03:37,450 >> Andre gode ting å sette på, hvis du er forvirret om hvordan å erklære en 75 00:03:37,450 --> 00:03:40,570 funksjon eller hva de forskjellige deler av funksjonen erklæringen er, skriver 76 00:03:40,570 --> 00:03:43,400 at på det, en generisk versjon og så kanskje et eksempel. 77 00:03:43,400 --> 00:03:47,290 Hvis du er forvirret om pekere, et diagram som viser hvordan pekere arbeid er 78 00:03:47,290 --> 00:03:48,660 sannsynligvis veldig nyttig. 79 00:03:48,660 --> 00:03:52,440 Hvis du er forvirret om rekursjon, en smake rekursiv funksjon på det 80 00:03:52,440 --> 00:03:54,980 kan også vise seg å være veldig nyttig. 81 00:03:54,980 --> 00:03:57,290 Betyr det gi deg noen ideer? 82 00:03:57,290 --> 00:04:01,820 >> AVI: Du må forstå Hele kompilering prosessen, som 83 00:04:01,820 --> 00:04:03,220 hvordan det hele fungerer? 84 00:04:03,220 --> 00:04:06,620 >> JASON Hirschhorn: Alt som har vært dekket kunne 85 00:04:06,620 --> 00:04:08,060 møt opp på quiz. 86 00:04:08,060 --> 00:04:08,930 Spørsmål - 87 00:04:08,930 --> 00:04:11,300 men igjen, vil noen ting være vektet tyngre enn andre. 88 00:04:11,300 --> 00:04:14,330 Noen ting har kommet opp igjen og igjen i klassen, i 89 00:04:14,330 --> 00:04:15,590 forelesning, og seksjonen. 90 00:04:15,590 --> 00:04:17,220 Andre ting har ikke kommer opp så ofte. 91 00:04:17,220 --> 00:04:22,900 >> Vi har snakket mye om # include og -L noe og hva de mener i 92 00:04:22,900 --> 00:04:24,390 kompilering prosessen. 93 00:04:24,390 --> 00:04:29,120 Vi har snakket mye om GDB, klamre seg, de forskjellige flagg som vi bruker når 94 00:04:29,120 --> 00:04:33,100 vi kompilere noe, og hva make15, for eksempel, egentlig 95 00:04:33,100 --> 00:04:34,510 betyr og egentlig gjør. 96 00:04:34,510 --> 00:04:38,110 Vi har ikke snakke så mye om hvert enkelt trinn i 97 00:04:38,110 --> 00:04:39,240 kompilering prosessen. 98 00:04:39,240 --> 00:04:40,410 Vi har fremdeles snakket om det. 99 00:04:40,410 --> 00:04:42,550 Så det er fortsatt noe som du bør være kjent med. 100 00:04:42,550 --> 00:04:44,610 Men igjen, vi kommer ikke til å være - 101 00:04:44,610 --> 00:04:49,140 ting som kommer opp oftere i klassen er mer sannsynlig å komme opp mer 102 00:04:49,140 --> 00:04:52,495 ofte og er mer tungt vektet på quiz. 103 00:04:52,495 --> 00:04:53,280 >> Cool. 104 00:04:53,280 --> 00:04:54,580 Eventuelle andre spørsmål om quiz 0? 105 00:04:54,580 --> 00:04:57,660 106 00:04:57,660 --> 00:05:00,050 >> OK, så jeg satte en liste over emner på tavlen. 107 00:05:00,050 --> 00:05:01,550 Jeg gikk gjennom pensum. 108 00:05:01,550 --> 00:05:07,340 Jeg gikk gjennom gjennomgangen delen fra i går kveld og de lysbildene å komme opp 109 00:05:07,340 --> 00:05:13,710 med en ikke-uttømmende liste over emner at vi har dekket så langt i CS50 110 00:05:13,710 --> 00:05:16,800 og ting som kanskje vises på quiz. 111 00:05:16,800 --> 00:05:19,900 Så jeg kommer ikke til å gå gjennom hver eneste en av disse. 112 00:05:19,900 --> 00:05:22,370 Det ville ta mye mer tid enn vi har nå. 113 00:05:22,370 --> 00:05:26,880 Men jeg satt dette opp her for å forhåpentligvis joggetur hukommelsen som til ting som kan 114 00:05:26,880 --> 00:05:28,420 eller kanskje ikke så kjent med deg. 115 00:05:28,420 --> 00:05:32,850 >> Og jeg ville elske å tilbringe mesteparten av seksjonen svarer på dine spørsmål om 116 00:05:32,850 --> 00:05:35,130 disse emnene, emner som er ikke dekket her. 117 00:05:35,130 --> 00:05:36,130 Vi kan skrive pseudo-kode. 118 00:05:36,130 --> 00:05:40,010 Vi kan skrive ekte kode for å sikre at du - 119 00:05:40,010 --> 00:05:44,280 Jeg kan svare på spørsmål og hjelpe alle fundamentalt forstå en 120 00:05:44,280 --> 00:05:48,330 Mange av disse temaene, slik at du vil føle deg forberedt og behagelig å gå inn 121 00:05:48,330 --> 00:05:50,150 quizen i morgen. 122 00:05:50,150 --> 00:05:52,300 Så lese over listen. 123 00:05:52,300 --> 00:05:54,780 Du forhåpentligvis har kommet til kapittel med noen spørsmål også. 124 00:05:54,780 --> 00:05:58,480 Når du er klar, rekk opp hånden og vi vil komme i gang. 125 00:05:58,480 --> 00:06:01,590 126 00:06:01,590 --> 00:06:05,200 >> Husk, de spørsmålene du har, det finnes ingen dumme spørsmål. 127 00:06:05,200 --> 00:06:06,250 Vi har hørt at mye. 128 00:06:06,250 --> 00:06:09,490 Og de spørsmål du har, er jeg villig å satse, mange andre mennesker både 129 00:06:09,490 --> 00:06:11,740 sitter her og ser på online ha også. 130 00:06:11,740 --> 00:06:13,770 Så du kan bare hjelpe folk ved å stille spørsmål. 131 00:06:13,770 --> 00:06:15,070 Marcus. 132 00:06:15,070 --> 00:06:18,040 >> MARCUS: Mellom bunken og haugen, er det en forhåndstildelt 133 00:06:18,040 --> 00:06:22,880 andel av minnet som er definert som Dette er for stabelen eller haugen for? 134 00:06:22,880 --> 00:06:25,010 Eller hvordan fungerer det, egentlig? 135 00:06:25,010 --> 00:06:26,230 >> JASON Hirschhorn: Great spørsmål. 136 00:06:26,230 --> 00:06:28,640 Jeg kommer til å spore tilbake litt. 137 00:06:28,640 --> 00:06:30,910 Har alle - 138 00:06:30,910 --> 00:06:31,660 vær ærlig her. 139 00:06:31,660 --> 00:06:34,130 Jeg vet at jeg ber deg om å øke hånd foran dine jevnaldrende. 140 00:06:34,130 --> 00:06:38,510 Men er det folk som føler seg ukomfortabel med bunken og heap 141 00:06:38,510 --> 00:06:42,980 og ønsker å gå over det og hva de mener? 142 00:06:42,980 --> 00:06:43,880 Rekk opp hånden hvis - 143 00:06:43,880 --> 00:06:44,420 OK. 144 00:06:44,420 --> 00:06:45,120 Takk. 145 00:06:45,120 --> 00:06:48,420 Så vi kommer til å gå over bunken og haugen veldig raskt, og deretter 146 00:06:48,420 --> 00:06:50,370 flytte inn å svare på spørsmålet ditt. 147 00:06:50,370 --> 00:06:58,250 >> Så hvis vi trekker ut en boks til å representere minne på datamaskinen din, hva er noen 148 00:06:58,250 --> 00:07:02,160 ting som går i denne boksen? 149 00:07:02,160 --> 00:07:03,630 Main. 150 00:07:03,630 --> 00:07:04,020 En hovedfunksjon. 151 00:07:04,020 --> 00:07:05,890 Hvor går hoved gå? 152 00:07:05,890 --> 00:07:08,090 >> STUDENT: [uhørbart]. 153 00:07:08,090 --> 00:07:09,390 >> JASON Hirschhorn: Så får vi sette viktigste her nede. 154 00:07:09,390 --> 00:07:12,180 155 00:07:12,180 --> 00:07:13,430 Hva annet går i denne boksen? 156 00:07:13,430 --> 00:07:16,000 157 00:07:16,000 --> 00:07:18,140 >> STUDENT: Funksjonene som du ringer. 158 00:07:18,140 --> 00:07:19,020 >> JASON Hirschhorn: Funksjonene som vi kaller. 159 00:07:19,020 --> 00:07:20,440 Og hvor går de? 160 00:07:20,440 --> 00:07:21,300 >> STUDENT: I ​​bunken. 161 00:07:21,300 --> 00:07:22,380 >> JASON Hirschhorn: De gå i bunken. 162 00:07:22,380 --> 00:07:27,350 Så vi kommer til å kalle dette ting her nede i bunken. 163 00:07:27,350 --> 00:07:31,880 Og opp toppen, har vi haugen. 164 00:07:31,880 --> 00:07:35,450 Så minnet er ikke en boks akkurat som dette. 165 00:07:35,450 --> 00:07:37,330 Men det er faktisk ganske lik. 166 00:07:37,330 --> 00:07:40,840 Det kommer til å bli en masse bokser i løpet og over, avhengig av hvor stor din 167 00:07:40,840 --> 00:07:43,730 Datamaskinen er eller hvor stor din hukommelse er. 168 00:07:43,730 --> 00:07:46,950 >> På quote-unquote "bunnen" er stabelen. 169 00:07:46,950 --> 00:07:50,880 Og det er flere ting som går på stakken. 170 00:07:50,880 --> 00:07:53,840 Og de som er avhengig av hvilke funksjoner du har i koden din. 171 00:07:53,840 --> 00:07:57,780 Du har alltid en funksjon i din kode som kalles hoved, så det er alltid en 172 00:07:57,780 --> 00:08:00,480 seksjon her nede i stable viet til hoved. 173 00:08:00,480 --> 00:08:03,980 >> Disse seksjonene i bunken kalles stack rammer. 174 00:08:03,980 --> 00:08:09,580 Når du ringer en annen funksjon, sier hoved kaller en binær søkefunksjon, 175 00:08:09,580 --> 00:08:11,075 vi satt en annen ramme på stakken. 176 00:08:11,075 --> 00:08:13,830 177 00:08:13,830 --> 00:08:17,320 Mer spesifikt skal vi donere en del av minnet på vår 178 00:08:17,320 --> 00:08:22,960 datamaskin til å lagre binære søk lokale variabler og kjøre den binære 179 00:08:22,960 --> 00:08:24,150 search-koden. 180 00:08:24,150 --> 00:08:26,810 >> Så vi kaller binære søk. 181 00:08:26,810 --> 00:08:30,440 182 00:08:30,440 --> 00:08:33,340 I denne del av minnet, vi skal til å lagre sine lokale variabler. 183 00:08:33,340 --> 00:08:35,270 Vi kommer til å lagre sine printf samtaler. 184 00:08:35,270 --> 00:08:38,159 Uansett hva som skjer, er at funksjonen kommer til å være lagret der. 185 00:08:38,159 --> 00:08:40,350 Binære søk kommer til å utføre. 186 00:08:40,350 --> 00:08:42,210 Det kommer til å fullføre henrettelsen. 187 00:08:42,210 --> 00:08:47,450 Hva er ordet i C som betegner at en funksjon skal 188 00:08:47,450 --> 00:08:49,306 fullføre sin utførelse? 189 00:08:49,306 --> 00:08:50,040 >> STUDENT: Return. 190 00:08:50,040 --> 00:08:50,870 >> JASON Hirschhorn: Gå tilbake. 191 00:08:50,870 --> 00:08:53,230 Så når du ser en retur uttalelse, funksjons endene 192 00:08:53,230 --> 00:08:54,350 når den treffer det. 193 00:08:54,350 --> 00:08:56,740 Så binære søk vil treffe sin retur. 194 00:08:56,740 --> 00:09:01,360 Denne delen av minnet vil i hovedsak bli frigjort. 195 00:09:01,360 --> 00:09:03,510 Og hoved vil gå tilbake til gjennomføring. 196 00:09:03,510 --> 00:09:07,240 Så hoved vil ta en pause der var, samtale binære søk, få noen returverdi, 197 00:09:07,240 --> 00:09:08,700 og fortsette gjennomføringen. 198 00:09:08,700 --> 00:09:10,840 Dette stabelen rammen vil gå bort. 199 00:09:10,840 --> 00:09:14,810 >> Hvis vi kaller en rekursiv funksjon, som er en funksjon som kaller seg selv over 200 00:09:14,810 --> 00:09:18,480 og over, kan vi få - sier vi gjorde binære søk rekursivt. 201 00:09:18,480 --> 00:09:21,520 Vi kan få binære søk versjon en, binære søk to, binære søk 202 00:09:21,520 --> 00:09:24,090 tre, binære søk fire, binære søk fem. 203 00:09:24,090 --> 00:09:27,950 Og så denne siste binære søk fem vil treffe bunnen tilfellet, og stabelen 204 00:09:27,950 --> 00:09:31,010 rammer vil gå tilbake og holde lukking før vi kommer tilbake til hoved. 205 00:09:31,010 --> 00:09:32,530 Vi kan gå over rekursjon i en bit. 206 00:09:32,530 --> 00:09:35,530 Men alt dette er å si, hvis du er ringer flere funksjoner samtidig, 207 00:09:35,530 --> 00:09:39,250 Det vil være flere stack rammer på bunken. 208 00:09:39,250 --> 00:09:42,900 >> Haugen, på den annen side, opp her, er ikke for funksjoner, 209 00:09:42,900 --> 00:09:44,380 ikke for lokale variabler. 210 00:09:44,380 --> 00:09:48,920 Det er for dynamisk allokert variabler. 211 00:09:48,920 --> 00:09:57,210 Så disse er variabler som kan være initialisert i enten hoved-eller en 212 00:09:57,210 --> 00:09:58,640 Funksjon som viktigste samtalene. 213 00:09:58,640 --> 00:10:00,790 Hvor som helst i koden din, de kan bli initialisert. 214 00:10:00,790 --> 00:10:04,360 Og for å klargjøre en dynamisk tildelt variabel. 215 00:10:04,360 --> 00:10:06,970 Hvilken funksjon i C bruker vi? 216 00:10:06,970 --> 00:10:07,600 >> STUDENT: malloc. 217 00:10:07,600 --> 00:10:09,240 >> JASON Hirschhorn: malloc. 218 00:10:09,240 --> 00:10:10,800 Du kaller malloc. 219 00:10:10,800 --> 00:10:12,260 Du får en plass i minnet. 220 00:10:12,260 --> 00:10:15,020 Og den plassen minne er på haugen. 221 00:10:15,020 --> 00:10:18,840 Og det minneområdet som forblir der til du ringe gratis. 222 00:10:18,840 --> 00:10:22,670 >> Så dynamisk tildelte variabler i heap vil eksistere så lenge du 223 00:10:22,670 --> 00:10:25,250 vil ha dem til å eksistere, og de vil ikke gå bort før du eksplisitt 224 00:10:25,250 --> 00:10:26,760 fortelle dem til å gå unna. 225 00:10:26,760 --> 00:10:29,670 Du kan lage dem i én funksjon. 226 00:10:29,670 --> 00:10:31,930 At funksjonens stabel rammen vil gå bort. 227 00:10:31,930 --> 00:10:35,490 Men den variabelen vil fortsatt eksistere i haugen før den er frigjort, 228 00:10:35,490 --> 00:10:39,650 potensielt etter den funksjonen som kalles binære søk eller hva. 229 00:10:39,650 --> 00:10:42,580 >> Så de heap variabler bli der så lenge du vil 230 00:10:42,580 --> 00:10:43,490 dem til å bo der. 231 00:10:43,490 --> 00:10:46,090 Og de får satt her. 232 00:10:46,090 --> 00:10:47,450 Og så den neste blir lagt der. 233 00:10:47,450 --> 00:10:50,210 De får stadig fylt ut, og de bli der til du ringe gratis. 234 00:10:50,210 --> 00:10:52,870 >> Og egentlig, haugen og stakken, komme til Marcus 'spørsmål, 235 00:10:52,870 --> 00:10:54,500 vokser mot hverandre. 236 00:10:54,500 --> 00:10:57,730 Og hvis de kjører inn i hverandre, har du brukt opp alt minnet i din 237 00:10:57,730 --> 00:11:01,330 datamaskin, og programmet vil slutte fordi du ikke har noe mer minne 238 00:11:01,330 --> 00:11:02,420 igjen å bruke. 239 00:11:02,420 --> 00:11:07,290 Mellom dem er det potensielt andre ting. 240 00:11:07,290 --> 00:11:10,980 Men for omfanget av dette kurset, du trenger ikke å bekymre deg for det. 241 00:11:10,980 --> 00:11:12,020 >> Så det var svaret på spørsmålet ditt. 242 00:11:12,020 --> 00:11:13,520 Ikke noe å bekymre seg for. 243 00:11:13,520 --> 00:11:15,550 Men det var den lange svaret. 244 00:11:15,550 --> 00:11:17,800 Alt du trenger å vite er heap og stakk vil - 245 00:11:17,800 --> 00:11:18,900 en som begynner nederst. 246 00:11:18,900 --> 00:11:19,570 Stabelen gjør. 247 00:11:19,570 --> 00:11:20,790 Haugen er der oppe. 248 00:11:20,790 --> 00:11:21,990 De vil komme nærmere hverandre. 249 00:11:21,990 --> 00:11:23,110 >> Og hvis de berører, det er et problem. 250 00:11:23,110 --> 00:11:24,500 Du gikk tom for minne. 251 00:11:24,500 --> 00:11:28,760 Men også, i tillegg til å vite hvor de er, hvilke er lagret i både 252 00:11:28,760 --> 00:11:30,512 stable og heap. 253 00:11:30,512 --> 00:11:31,410 Curtis. 254 00:11:31,410 --> 00:11:33,570 >> CURTIS: Når de kolliderer, er at en stack overflow? 255 00:11:33,570 --> 00:11:35,670 >> JASON Hirschhorn: Når de kolliderer, det er ikke en stack overflow. 256 00:11:35,670 --> 00:11:38,340 En stack overflow er et annet område at vi kan gå over hvis du vil. 257 00:11:38,340 --> 00:11:40,020 OK, vil vi komme tilbake til det i litt. 258 00:11:40,020 --> 00:11:42,730 >> STUDENT: Hva er ordet som heter når de treffer hverandre, 259 00:11:42,730 --> 00:11:44,450 stable og haugen? 260 00:11:44,450 --> 00:11:46,640 >> JASON Hirschhorn: For nå, ikke bry deg om. 261 00:11:46,640 --> 00:11:47,750 Bare vet - 262 00:11:47,750 --> 00:11:50,530 Jeg vil svare på det spørsmålet etter klasse. 263 00:11:50,530 --> 00:11:52,680 Hvis de kjører inn i hverandre, du kjørte ut minne, fordi det er ikke mer 264 00:11:52,680 --> 00:11:53,330 plass der. 265 00:11:53,330 --> 00:11:55,450 >> STUDENT: Beklager, det er et segment feil? 266 00:11:55,450 --> 00:11:58,710 >> JASON Hirschhorn: Et segment feil kan kalles for - 267 00:11:58,710 --> 00:12:02,240 det avhenger hvorfor SEG skyld heter. 268 00:12:02,240 --> 00:12:06,260 Noen ganger din stack overflow, det vil sier SEG feil som feil. 269 00:12:06,260 --> 00:12:08,180 >> STUDENT: Hva om dereferencing en null variabel? 270 00:12:08,180 --> 00:12:10,040 Er det et segment feil? 271 00:12:10,040 --> 00:12:11,480 >> JASON Hirschhorn: dereferencing en nullpeker - 272 00:12:11,480 --> 00:12:17,850 OK, så hvis du har en peker som du settes lik null, pekere, husker, 273 00:12:17,850 --> 00:12:20,270 butikken minneadresser som sine verdier. 274 00:12:20,270 --> 00:12:23,660 Og en nullpeker er i hovedsak lagring 0, 0-th 275 00:12:23,660 --> 00:12:26,670 adressere i den variabelen. 276 00:12:26,670 --> 00:12:30,010 Så 0x, 0, 0, 0, 0, et cetera. 277 00:12:30,010 --> 00:12:35,030 At 0-th adresse i minnet som ikke i vår bilde, det er der oppe 278 00:12:35,030 --> 00:12:38,800 et sted, er det reservert for datamaskinen. 279 00:12:38,800 --> 00:12:40,130 Vi har ikke lov til å røre den. 280 00:12:40,130 --> 00:12:44,680 >> Så når programmet er å gjennomføre, hvis det er noe som prøver å gå til minne 281 00:12:44,680 --> 00:12:48,990 adresse 0, vet det at som er en tom verdi. 282 00:12:48,990 --> 00:12:50,820 Det vet ingenting skulle være der. 283 00:12:50,820 --> 00:12:53,420 Så hvis du prøver og bruke noe der og behandle noe sånt der eller 284 00:12:53,420 --> 00:12:58,355 prøver å gå til denne plasseringen, er du kommer til å få et segment feil eller en feil. 285 00:12:58,355 --> 00:13:00,520 Besvarer det spørsmålet ditt? 286 00:13:00,520 --> 00:13:03,170 >> Og nå skal vi gå tilbake å stable overløp. 287 00:13:03,170 --> 00:13:09,560 Ting i bunken, som dere har sett før, i - la oss trekke en nær 288 00:13:09,560 --> 00:13:11,966 opp av en stabel ramme. 289 00:13:11,966 --> 00:13:15,050 Alle kan se det? 290 00:13:15,050 --> 00:13:16,650 Så vi har vår stack ramme. 291 00:13:16,650 --> 00:13:23,260 Vi sparer en matrise på som en lokal variable i denne funksjonen. 292 00:13:23,260 --> 00:13:29,510 Så si vår matrise har fem plasser. 293 00:13:29,510 --> 00:13:33,230 Alle fem av disse vil bli lagret ved at stabel rammen. 294 00:13:33,230 --> 00:13:37,540 >> Hvis vi begynner å skrive utover grensene for denne matrisen - 295 00:13:37,540 --> 00:13:43,990 så hvis vi begynner å skrive inn, la oss si det er 0. 296 00:13:43,990 --> 00:13:46,800 De er de fem indekser av vår array. 297 00:13:46,800 --> 00:13:50,980 Hvis vi begynner å skrive inn indeks 5, som vi har ikke når vi har en 298 00:13:50,980 --> 00:13:55,900 matrise av størrelse 5, begynner vi å skrive inn Indeks 6, 7, 8, 9, vi kan få en Stack 299 00:13:55,900 --> 00:13:57,960 Flytsfeil. 300 00:13:57,960 --> 00:14:00,510 >> Vanligvis er det ikke - 301 00:14:00,510 --> 00:14:04,910 du vil sannsynligvis komme i trøbbel hvis du går over med én. 302 00:14:04,910 --> 00:14:08,640 Men generelt, vil du komme inn i mest problemer hvis du går over av mye 303 00:14:08,640 --> 00:14:12,770 og du går så langt over det du skriver over returadresse på at 304 00:14:12,770 --> 00:14:16,080 funksjon, som ligger på nederst i stabelen rammen. 305 00:14:16,080 --> 00:14:16,520 >> Fordi, ikke sant? 306 00:14:16,520 --> 00:14:17,670 Du - i - beklager. 307 00:14:17,670 --> 00:14:18,550 Ikke "fordi akkurat." 308 00:14:18,550 --> 00:14:20,470 >> I bunken ramme, har du lokale variabler. 309 00:14:20,470 --> 00:14:27,090 Helt nederst i stabelen rammen er returadressen. 310 00:14:27,090 --> 00:14:28,790 Det er der funksjonen går når det er over. 311 00:14:28,790 --> 00:14:33,750 Og hvis du overskriver at avkastningen adresse, så når denne bunken ramme, 312 00:14:33,750 --> 00:14:36,680 når du går gjennom bunken ramme og gjennomføring av hver linje, er du 313 00:14:36,680 --> 00:14:40,350 kommer til å gå til den nye returadresse som er skrevet der i stedet for 314 00:14:40,350 --> 00:14:40,910 Selve ett. 315 00:14:40,910 --> 00:14:45,050 Og det er slik vi har sett noen sikkerhetsbrudd 316 00:14:45,050 --> 00:14:46,780 kan skje med datamaskiner. 317 00:14:46,780 --> 00:14:52,760 >> Så stack overflow, kort sagt, er når du overskrive den delen i bunken 318 00:14:52,760 --> 00:14:55,440 du skal bruke, den lokale variabel du skal bruke, og 319 00:14:55,440 --> 00:14:58,070 spesielt når du begynner å overskrive viktige ting som 320 00:14:58,070 --> 00:14:59,100 returadresse. 321 00:14:59,100 --> 00:15:00,090 Og det er der du får en feilmelding. 322 00:15:00,090 --> 00:15:03,980 Eller kanskje du kan starte selv skrive inn - 323 00:15:03,980 --> 00:15:05,370 si binære søk var rett ovenfor hoved. 324 00:15:05,370 --> 00:15:07,790 Hvis du overskrev mye, du kunne skrive inn hoved. 325 00:15:07,790 --> 00:15:10,230 Men generelt, får du en feilmelding før da, fordi maskinen vet 326 00:15:10,230 --> 00:15:12,270 du gjør noe du ikke bør gjøre. 327 00:15:12,270 --> 00:15:12,560 Yeah. 328 00:15:12,560 --> 00:15:13,910 >> STUDENT: Hva er forskjellen mellom en stack overflow 329 00:15:13,910 --> 00:15:16,940 og en buffer overflow? 330 00:15:16,940 --> 00:15:19,420 >> JASON Hirschhorn: Buffer overflow er en mer generell type 331 00:15:19,420 --> 00:15:20,395 hva jeg nettopp har beskrevet. 332 00:15:20,395 --> 00:15:22,610 >> STUDENT: Så en stack overflow er en eksempel på et buffer overflow. 333 00:15:22,610 --> 00:15:23,420 >> JASON Hirschhorn: Nettopp. 334 00:15:23,420 --> 00:15:28,700 Dette er en matrise vi kan tenke på som en buffer, en plass for ting å gå i. 335 00:15:28,700 --> 00:15:30,600 Dette er en stack buffer overflow. 336 00:15:30,600 --> 00:15:33,210 Vi kunne ha en heap-bufferover. 337 00:15:33,210 --> 00:15:36,870 Hvis det var en buffer, hvor det ofte er en matrise haugen, og vi 338 00:15:36,870 --> 00:15:40,600 overskrev disse grensene, så vi ville har en heap-bufferover. 339 00:15:40,600 --> 00:15:44,870 >> Og utenfor rammen av dette kurset, de er oppdaget et litt annerledes. 340 00:15:44,870 --> 00:15:48,040 Kompilatoren har spesiell måter å oppdage hver. 341 00:15:48,040 --> 00:15:50,660 Men en buffer overflow er en mer generell type det jeg beskrev, 342 00:15:50,660 --> 00:15:54,090 som var en stack buffer overflow. 343 00:15:54,090 --> 00:15:56,240 Visste at spørsmålet ditt? 344 00:15:56,240 --> 00:15:57,910 Søt. 345 00:15:57,910 --> 00:16:01,850 >> Var det noen andre spørsmål relatert til stabelen eller haugen? 346 00:16:01,850 --> 00:16:04,920 347 00:16:04,920 --> 00:16:05,510 Yeah. 348 00:16:05,510 --> 00:16:08,220 >> STUDENT: Jeg vet at du har til gratis strenger fordi de er i haugen 349 00:16:08,220 --> 00:16:09,305 og du ikke ønsker å lekke minne. 350 00:16:09,305 --> 00:16:12,240 Men har du å frigjøre globale variabler og sånt? 351 00:16:12,240 --> 00:16:14,335 Eller blir de automatisk frigjort? 352 00:16:14,335 --> 00:16:15,700 >> JASON Hirschhorn: Godt spørsmål. 353 00:16:15,700 --> 00:16:22,340 Så i CS50.H, oppretter vi denne tingen for du ringte en streng. 354 00:16:22,340 --> 00:16:23,800 En streng er egentlig hva? 355 00:16:23,800 --> 00:16:24,810 >> STUDENT: Char stjerne. 356 00:16:24,810 --> 00:16:29,180 >> JASON Hirschhorn: En røye stjerne, en peker av et tegn, en peker til 357 00:16:29,180 --> 00:16:30,650 en rekke tegn. 358 00:16:30,650 --> 00:16:32,210 Det er det strengen er. 359 00:16:32,210 --> 00:16:36,050 Så vi trenger å frigjøre det, fordi getstring, som vi brukte mye - 360 00:16:36,050 --> 00:16:38,370 string navn tilsvarer getstring - 361 00:16:38,370 --> 00:16:43,560 som mallocs for oss noe minne på heap og returnerer en peker til 362 00:16:43,560 --> 00:16:47,230 første tegnet på at string, en røye stjerne. 363 00:16:47,230 --> 00:16:52,760 >> Så tilsynelatende, hvis du ikke har vært skrive gratis på noen av dine strenger 364 00:16:52,760 --> 00:16:55,600 at du har kalt så langt, har du vært lekker noe minne. 365 00:16:55,600 --> 00:16:57,430 Selvfølgelig har vi ikke snakket om det, så ingen har fått i 366 00:16:57,430 --> 00:16:58,520 problemer for å gjøre det. 367 00:16:58,520 --> 00:16:59,980 Men fremover, ja. 368 00:16:59,980 --> 00:17:03,990 Når du ringer getstring, er du mallocing litt plass på haugen. 369 00:17:03,990 --> 00:17:07,640 Og hvis du ikke kaller fri senere på at string, har du en minnelekkasje. 370 00:17:07,640 --> 00:17:09,440 Som svar på spørsmålet ditt? 371 00:17:09,440 --> 00:17:10,606 >> Yeah 372 00:17:10,606 --> 00:17:15,020 >> STUDENT: Så for å gjøre det, bruker vi fri rett før retur? 373 00:17:15,020 --> 00:17:18,510 Som, innenfor rammen av, tror jeg hvis vi sier, liker, int main, innenfor 374 00:17:18,510 --> 00:17:24,410 Omfanget av den kode som er innenfor disse klammeparentes, rett før - 375 00:17:24,410 --> 00:17:26,140 du vet hvor du vil vanligvis satt avkastning. 376 00:17:26,140 --> 00:17:27,950 Har du satt fri før det? 377 00:17:27,950 --> 00:17:31,000 >> JASON Hirschhorn: Så du kan sette fri uansett hvor du ønsker å sette fri. 378 00:17:31,000 --> 00:17:33,810 Fordi disse er dynamisk allokert variabler, fordi de kan 379 00:17:33,810 --> 00:17:39,170 bor utenfor rammen av en bestemt funksjon, hvis du kaller malloc i en 380 00:17:39,170 --> 00:17:44,140 separat funksjon, f.eks getstring, kan du ringe gratis på hoved. 381 00:17:44,140 --> 00:17:46,050 Du trenger ikke å kalle det i den spesifikke funksjon 382 00:17:46,050 --> 00:17:47,570 hvor malloc kalles. 383 00:17:47,570 --> 00:17:50,340 Men du trenger ikke å kalle det før hoved avkastning. 384 00:17:50,340 --> 00:17:51,120 >> Og det virkelig an. 385 00:17:51,120 --> 00:17:54,960 Det kommer an på hvorfor du malloced at plass i første omgang. 386 00:17:54,960 --> 00:17:57,320 Noen mennesker vil kalle fri ganske raskt. 387 00:17:57,320 --> 00:17:59,220 Noen mennesker vil ikke kalle gratis inntil slutten av sitt program. 388 00:17:59,220 --> 00:18:00,660 Og de vil gå gjennom og gratis alt. 389 00:18:00,660 --> 00:18:03,597 Det kommer an på hvorfor du ringte malloc. 390 00:18:03,597 --> 00:18:11,270 >> STUDENT: Og hva ville du si hvis du ringte bruk getstring? 391 00:18:11,270 --> 00:18:13,320 Du ville si fritt hva? 392 00:18:13,320 --> 00:18:20,040 >> JASON Hirschhorn: Så syntaksen for gratis er rett og slett fri, åpen paren, nær 393 00:18:20,040 --> 00:18:22,130 paren, og navnet på pekeren. 394 00:18:22,130 --> 00:18:26,410 Så hvis du skriver String navn equals getstring, sette deg navn her inne. 395 00:18:26,410 --> 00:18:27,760 Det er navnet på pekeren. 396 00:18:27,760 --> 00:18:30,570 Og den vet å frigjøre dette minnet. 397 00:18:30,570 --> 00:18:33,920 >> STUDENT: Så når det frigjør at minnet, pekeren fremdeles forholder seg til det stedet 398 00:18:33,920 --> 00:18:34,970 i minnet? 399 00:18:34,970 --> 00:18:39,020 Eller er pekeren også tømt for adressen som den peker på. 400 00:18:39,020 --> 00:18:40,290 >> JASON Hirschhorn: Vi bør prøve det. 401 00:18:40,290 --> 00:18:41,430 Vi bør kode som. 402 00:18:41,430 --> 00:18:43,880 La oss komme tilbake når vi kommer til koding, og la oss koden som. 403 00:18:43,880 --> 00:18:46,000 Og hvis du ønsker å finne ut svaret til det, kan du også kode som 404 00:18:46,000 --> 00:18:46,690 i mellomtiden. 405 00:18:46,690 --> 00:18:49,100 Men det er et stort spørsmål. 406 00:18:49,100 --> 00:18:53,480 >> STUDENT: Er det mulig å gratis noe for tidlig? 407 00:18:53,480 --> 00:18:58,530 Slik at du fortsatt trenger det for programmet, og du frigjort som minne? 408 00:18:58,530 --> 00:18:59,200 >> JASON Hirschhorn: Ja. 409 00:18:59,200 --> 00:19:03,020 Det er mulig, hvis du fri noe og så bruker du den på nytt, vil du 410 00:19:03,020 --> 00:19:06,890 kjøre inn en feil. 411 00:19:06,890 --> 00:19:10,810 Men det er på deg, fordi du frigjort noe, og så kalte det senere. 412 00:19:10,810 --> 00:19:13,940 Så det var en programmerer feil. 413 00:19:13,940 --> 00:19:14,780 Men ja. 414 00:19:14,780 --> 00:19:17,760 Du kan skrive det. 415 00:19:17,760 --> 00:19:19,240 >> Eventuelle flere spørsmål om - 416 00:19:19,240 --> 00:19:19,760 Ja. 417 00:19:19,760 --> 00:19:22,820 >> STUDENT: Så hvis du skal bare frigjøre det generelt før 418 00:19:22,820 --> 00:19:25,490 Programmet avsluttes, betyr det at dersom program slutter og du ikke frigjøre det, 419 00:19:25,490 --> 00:19:27,580 at minnet er fortsatt tildelt? 420 00:19:27,580 --> 00:19:31,330 >> JASON Hirschhorn: Hvis programmet slutter og du glemmer å frigjøre noe, så 421 00:19:31,330 --> 00:19:34,390 at minnet ble tildelt hele levetiden på programmet. 422 00:19:34,390 --> 00:19:37,670 Når programmet lukkes helt, at minnet ikke kommer 423 00:19:37,670 --> 00:19:39,490 å bo der for alltid. 424 00:19:39,490 --> 00:19:42,080 Datamaskinen er smart nok til å vite at når programmet lukkes, det 425 00:19:42,080 --> 00:19:46,440 bør kvitte seg med alt av minnet som er forbundet med det programmet. 426 00:19:46,440 --> 00:19:51,240 >> Men, det er verktøy du kan kjøre på et program for å finne ut om, når 427 00:19:51,240 --> 00:19:54,720 programmet er ferdig, du glemte å frigjøre minne. 428 00:19:54,720 --> 00:19:57,960 Og for din neste problemet satt der du skal bruke malloc og hjelp 429 00:19:57,960 --> 00:20:02,610 pekere, vil du kjøre dette programmere på programmet for å se om, 430 00:20:02,610 --> 00:20:06,530 når hoved avkastning, hadde du noen ting som var igjen unfreed. 431 00:20:06,530 --> 00:20:09,130 >> Så de ikke skal bo malloced alltid i datamaskinen. 432 00:20:09,130 --> 00:20:11,720 Det ville være bortkastet, fordi svært raskt, datamaskiner 433 00:20:11,720 --> 00:20:12,960 ville gå tom for minne. 434 00:20:12,960 --> 00:20:16,450 Men hvis de løper frem til utgangen av programmere og de er ikke frigjort og din 435 00:20:16,450 --> 00:20:20,260 Programmet kommer ut, det er fortsatt et problem at dette verktøyet vil hjelpe deg med å håndtere. 436 00:20:20,260 --> 00:20:21,520 >> STUDENT: Er det Valgrind? 437 00:20:21,520 --> 00:20:22,910 >> JASON Hirschhorn: Det er heter Valgrind. 438 00:20:22,910 --> 00:20:23,520 Og du vil være - 439 00:20:23,520 --> 00:20:25,780 >> STUDENT: Men vi trenger ikke å vite at for quiz, skjønt? 440 00:20:25,780 --> 00:20:27,600 Jeg mener, det ble snakket om en liten bit i forelesningen. 441 00:20:27,600 --> 00:20:33,600 >> JASON Hirschhorn: Så Valgrind er navnet på verktøyet. 442 00:20:33,600 --> 00:20:37,180 Å vite hva den gjør er nok for quiz. 443 00:20:37,180 --> 00:20:40,200 Men du har ikke brukt det ennå på din Problemet satt fordi vi ikke har hatt en 444 00:20:40,200 --> 00:20:43,520 Oppgavesettet som uttrykkelig har behandlet med malloc eller du bruker malloc. 445 00:20:43,520 --> 00:20:45,330 Så du ikke har brukt Valgrind ennå. 446 00:20:45,330 --> 00:20:47,760 Men du vil bruke det før heller enn senere. 447 00:20:47,760 --> 00:20:48,710 >> STUDENT: Kan du gjenta hva Valgrind er? 448 00:20:48,710 --> 00:20:49,190 >> JASON Hirschhorn: Sorry? 449 00:20:49,190 --> 00:20:51,240 >> STUDENT: Kan du gjenta det hensikten med Valgring er? 450 00:20:51,240 --> 00:20:53,100 >> JASON Hirschhorn: Valgrind er navnet - 451 00:20:53,100 --> 00:20:59,890 som GDB hjelper deg feilsøke programmet, Valgrind hjelper deg å finne ut om 452 00:20:59,890 --> 00:21:03,210 ting har ikke blitt frigjort når programmet lukkes. 453 00:21:03,210 --> 00:21:05,110 Så du vil kjøre det på programmet. 454 00:21:05,110 --> 00:21:09,230 Og programmet kommer ut, og det vil si programmet heter malloc dette mange 455 00:21:09,230 --> 00:21:13,670 ganger for dette mange bytes, og du bare kalt frie dette mange ganger. 456 00:21:13,670 --> 00:21:16,520 Og så du igjen disse mange bytes uten å bli frigjort. 457 00:21:16,520 --> 00:21:18,050 Eller det vil si at du har frigjort alt. 458 00:21:18,050 --> 00:21:19,070 God jobb. 459 00:21:19,070 --> 00:21:19,480 >> STUDENT: OK. 460 00:21:19,480 --> 00:21:21,060 Og det heter Valgring? 461 00:21:21,060 --> 00:21:24,940 >> JASON Hirschhorn: V-A-L-G-R-I-N-D. 462 00:21:24,940 --> 00:21:25,970 >> STUDENT: Et spørsmål om pekere. 463 00:21:25,970 --> 00:21:30,080 Så sier du har n stjerne x er lik noe. 464 00:21:30,080 --> 00:21:33,330 Som er lik, uansett hva du setter der, er at det som blir satt inni 465 00:21:33,330 --> 00:21:36,120 hva x peker til, eller markøren på x? 466 00:21:36,120 --> 00:21:37,690 >> JASON Hirschhorn: Kan du gjenta spørsmålet? 467 00:21:37,690 --> 00:21:39,340 Kan vi trekke den mens du sier det? 468 00:21:39,340 --> 00:21:42,710 >> STUDENT: I ​​quizen, faktisk, den en du sendte oss, det var som, røye 469 00:21:42,710 --> 00:21:46,520 stjerners sannhet lik CS50 steiner, ikke sant? 470 00:21:46,520 --> 00:21:52,190 Så betyr det at at CS50 bergarter er hva sannheten peker på? 471 00:21:52,190 --> 00:21:55,810 >> JASON Hirschhorn: Så du snakker om en char stjerne i en streng, hvordan 472 00:21:55,810 --> 00:21:56,460 som fungerer? 473 00:21:56,460 --> 00:21:56,890 Yeah. 474 00:21:56,890 --> 00:21:57,700 OK. 475 00:21:57,700 --> 00:21:59,140 La oss trekke dette over her. 476 00:21:59,140 --> 00:22:07,100 >> [SIDE SAMTALE] 477 00:22:07,100 --> 00:22:11,130 >> JASON Hirschhorn: Så denne variabelen kommer til å være av typen char stjerne. 478 00:22:11,130 --> 00:22:14,580 Hvor stor er en variabel av typen char stjerne? 479 00:22:14,580 --> 00:22:15,510 Hvor mange bytes? 480 00:22:15,510 --> 00:22:16,450 >> STUDENTER: Fire. 481 00:22:16,450 --> 00:22:18,210 >> JASON Hirschhorn: Det er fire byte. 482 00:22:18,210 --> 00:22:21,420 Hvor mange rettigheter er en variabel av type int stjerne? 483 00:22:21,420 --> 00:22:22,210 >> STUDENTER: Fire. 484 00:22:22,210 --> 00:22:24,910 >> JASON Hirschhorn: Fire bytes. 485 00:22:24,910 --> 00:22:28,280 Hvis det er en peker, så er det alltid fire bytes, fordi pekere, deres 486 00:22:28,280 --> 00:22:30,070 Verdien er et minneadresse. 487 00:22:30,070 --> 00:22:35,160 Og minneadresser på CS50 Apparatet er fire byte. 488 00:22:35,160 --> 00:22:42,900 Så når vi kaller getstring, eller når vi si, lik streng, og deretter i 489 00:22:42,900 --> 00:22:46,140 anførselstegn sette en streng, vi setter - 490 00:22:46,140 --> 00:22:46,920 vel, det er litt annerledes. 491 00:22:46,920 --> 00:22:48,630 Vi vil gjøre getstring som eksempel. 492 00:22:48,630 --> 00:22:52,150 Eller røye stjerners noe lik strengen. 493 00:22:52,150 --> 00:22:54,360 Beklager, gi meg et eksempel at du leser? 494 00:22:54,360 --> 00:22:57,590 >> STUDENT: char stjerne sannhet lik "CS50 rocks" i anførselstegn. 495 00:22:57,590 --> 00:23:02,260 >> JASON Hirschhorn: Så denne stjernen, dette vi vil kalle denne variabelen x for vår 496 00:23:02,260 --> 00:23:04,060 generiske formål. 497 00:23:04,060 --> 00:23:05,970 Vi har opprettet en variabel kalt x. 498 00:23:05,970 --> 00:23:07,610 Det er typen char stjerne. 499 00:23:07,610 --> 00:23:10,950 Det er en peker til en serie tegn. 500 00:23:10,950 --> 00:23:12,200 Så her nede - 501 00:23:12,200 --> 00:23:23,710 502 00:23:23,710 --> 00:23:25,890 >> Så dette er hvordan dette ville arbeide i minnet. 503 00:23:25,890 --> 00:23:27,410 Dette ville lagre en minneadresse. 504 00:23:27,410 --> 00:23:31,770 Det ville lagre minne adresse det første tegnet i rekken. 505 00:23:31,770 --> 00:23:33,830 Og så når du har fulgt pekeren, ville du 506 00:23:33,830 --> 00:23:35,200 få den første tegnet. 507 00:23:35,200 --> 00:23:38,780 >> Og hvis du leser dette ting som en streng, er datamaskinen din smart 508 00:23:38,780 --> 00:23:42,930 nok til å vite, lese hele greia før det blir til et tilbakeslag 0. 509 00:23:42,930 --> 00:23:45,530 Men hvis du leser det et tegn på en tid, slik at du gjentar gjennom 510 00:23:45,530 --> 00:23:49,910 denne strengen, så vil du bare lese en tegn om gangen til du kommer til 511 00:23:49,910 --> 00:23:50,850 backslash 0. 512 00:23:50,850 --> 00:23:52,335 Som kanskje ikke svare på spørsmålet, skjønt. 513 00:23:52,335 --> 00:23:55,610 >> STUDENT: Ja, men du har ikke malloced at plassen 514 00:23:55,610 --> 00:23:58,400 ennå for at pekeren. 515 00:23:58,400 --> 00:24:02,510 >> JASON Hirschhorn: Så jeg er ikke helt sikker nøyaktig hva du ser på, 516 00:24:02,510 --> 00:24:03,640 fordi jeg ikke gjorde det quiz. 517 00:24:03,640 --> 00:24:06,370 Det var ment å være et nyttig ressurs fra en annen TF. 518 00:24:06,370 --> 00:24:11,380 Hvis du oppretter en streng på stable eller som en lokal variabel, det vil 519 00:24:11,380 --> 00:24:16,920 bare være rekke kostnader snarere enn generelt en char stjerne peker til 520 00:24:16,920 --> 00:24:18,600 en annen streng. 521 00:24:18,600 --> 00:24:20,550 Men jeg vet ikke. 522 00:24:20,550 --> 00:24:25,065 Det kan være en peker til en annen streng på stabelen i tillegg. 523 00:24:25,065 --> 00:24:27,240 Yeah. 524 00:24:27,240 --> 00:24:31,116 >> STUDENT: Jeg vet at du trenger å allokere minne hvis pekeren er 525 00:24:31,116 --> 00:24:33,360 bli erklært inne av en annen funksjon. 526 00:24:33,360 --> 00:24:36,740 Har du behov for å gjøre det samme hvis det er blir erklært innsiden av hoved, 527 00:24:36,740 --> 00:24:39,570 du bruker den inne i main? 528 00:24:39,570 --> 00:24:43,590 >> JASON Hirschhorn: Så ja. 529 00:24:43,590 --> 00:24:46,670 Du kan erklære en peker til en hvilken som helst minneadresse i hukommelsen. 530 00:24:46,670 --> 00:24:51,440 Det kan være minneadressen til en lokal variabel, men ofte, 531 00:24:51,440 --> 00:24:55,760 folk ikke erklære minneadresser til lokale variabler fordi de går 532 00:24:55,760 --> 00:24:59,890 bort en gang at funksjonen returnerer, som er grunnen til at vi generelt malloc ting. 533 00:24:59,890 --> 00:25:04,630 Men ja, kan du erklære en peker til en annen lokal variabel. 534 00:25:04,630 --> 00:25:06,360 Det er bare generelt ikke gjort. 535 00:25:06,360 --> 00:25:09,480 Men jeg kan ta en titt på det spesifikke ting etter klassen. 536 00:25:09,480 --> 00:25:10,650 Yeah. 537 00:25:10,650 --> 00:25:12,350 >> STUDENT: Jeg tror dette er liksom av hva som blir spurt. 538 00:25:12,350 --> 00:25:16,930 Det virker rart å bli initialisering en peker ikke som en 539 00:25:16,930 --> 00:25:20,760 adresse, men som hva virker som en verdi. 540 00:25:20,760 --> 00:25:25,970 Det virker som den CS50 er hva som er inni tingen å peke til og 541 00:25:25,970 --> 00:25:28,820 ikke den faktiske adressen, ikke sant? 542 00:25:28,820 --> 00:25:30,520 >> JASON Hirschhorn: Så det er ikke er tilfelle, selv om. 543 00:25:30,520 --> 00:25:32,470 Det er ikke hva som skjer. 544 00:25:32,470 --> 00:25:35,910 Når du erklærer en char stjerne, det er en minneadresse. 545 00:25:35,910 --> 00:25:38,860 Pekere er alle minneadresser peke på noe annet. 546 00:25:38,860 --> 00:25:41,480 At noe annet kunne være på stabel, men nesten alltid er på 547 00:25:41,480 --> 00:25:43,440 heap i måten vi vil se den brukt. 548 00:25:43,440 --> 00:25:46,860 549 00:25:46,860 --> 00:25:53,500 Men streng tilsvarer anførsels "Getstring," vi kan se det og vi 550 00:25:53,500 --> 00:25:55,010 kan se gjennom den og kode som. 551 00:25:55,010 --> 00:26:01,190 getstring strengen ikke blir lagret i den variabelen, eller hva strengen 552 00:26:01,190 --> 00:26:04,580 Navnet er ikke blir lagret i det variabel, ikke fordi det er hvordan 553 00:26:04,580 --> 00:26:06,070 pekere fungerer. 554 00:26:06,070 --> 00:26:06,770 Betyr det fornuftig? 555 00:26:06,770 --> 00:26:07,170 >> STUDENT: Ja. 556 00:26:07,170 --> 00:26:08,570 >> JASON Hirschhorn: OK. 557 00:26:08,570 --> 00:26:11,690 Forhåpentligvis, det var ikke forvirrende for noen. 558 00:26:11,690 --> 00:26:15,732 Men hvis det var, kan vi se på det igjen i en bit, fordi vi faktisk kommer 559 00:26:15,732 --> 00:26:19,240 å kode noe som vil forhåpentligvis jobbe med strykere og hjelpe deg til å føle 560 00:26:19,240 --> 00:26:22,170 mer komfortabel med dem. 561 00:26:22,170 --> 00:26:24,869 >> Eventuelle andre spørsmål knyttet til disse emner eller andre emner som 562 00:26:24,869 --> 00:26:26,119 Jeg skal sette opp igjen? 563 00:26:26,119 --> 00:26:32,280 564 00:26:32,280 --> 00:26:34,840 Og - 565 00:26:34,840 --> 00:26:36,310 akkurat nå. 566 00:26:36,310 --> 00:26:37,630 Ja, Alden. 567 00:26:37,630 --> 00:26:39,860 >> ALDEN: Så dette er fullstendig irrelevant, men kan vi bare gå over 568 00:26:39,860 --> 00:26:42,760 veldig raskt hva vi trenger å vite om forskjellen mellom en 32 og 569 00:26:42,760 --> 00:26:46,345 64-bits maskin? 570 00:26:46,345 --> 00:26:47,740 >> JASON Hirschhorn: Ja. 571 00:26:47,740 --> 00:26:52,111 Så 32 bits er hvor mange byte? 572 00:26:52,111 --> 00:26:53,060 >> ALDEN: Det er fire byte. 573 00:26:53,060 --> 00:26:54,360 >> JASON Hirschhorn: Det er fire byte. 574 00:26:54,360 --> 00:26:58,420 Og 64 bits er hvor mange byte? 575 00:26:58,420 --> 00:26:59,112 >> STUDENT: Åtte. 576 00:26:59,112 --> 00:27:00,610 >> JASON Hirschhorn: Åtte bytes. 577 00:27:00,610 --> 00:27:03,980 Så igjen, er åtte bits én byte. 578 00:27:03,980 --> 00:27:08,340 Din CS50 apparatet er en 32-bits maskin. 579 00:27:08,340 --> 00:27:13,650 Så minneadresser er fire byte. 580 00:27:13,650 --> 00:27:17,460 Det er 2 til 32 minneadresser. 581 00:27:17,460 --> 00:27:21,310 0-2 som 32 minus en. 582 00:27:21,310 --> 00:27:27,630 Og jeg er ikke positivt, men det er trolig omfanget av hva du trenger for å 583 00:27:27,630 --> 00:27:35,230 vet for en 32-bits maskin, som minne adresser er, igjen, fire bytes lang, 584 00:27:35,230 --> 00:27:39,620 og det er det høyeste beløpet av minneadresser. 585 00:27:39,620 --> 00:27:41,680 >> Også datatyper - 586 00:27:41,680 --> 00:27:45,020 dette kan være noe som vel det er verdt å merke seg. 587 00:27:45,020 --> 00:27:49,610 Størrelsen av en datatype avhenger maskinen du arbeider med. 588 00:27:49,610 --> 00:27:56,760 Så en røye, en enkelt karakter, er hvordan mange byte på vår CS50 apparatet? 589 00:27:56,760 --> 00:27:57,980 En byte. 590 00:27:57,980 --> 00:28:02,310 Og det er faktisk en byte som vel på en 64-bits maskin. 591 00:28:02,310 --> 00:28:05,920 >> Og de fleste datatyper er det samme antall byte på begge maskinene. 592 00:28:05,920 --> 00:28:11,620 Men noen datatyper vil være annerledes på begge maskinene. 593 00:28:11,620 --> 00:28:14,590 Slik det ville være potensielt eneste du trenger å vite. 594 00:28:14,590 --> 00:28:16,710 >> Men selv det, tror jeg, er utenfor grensene - 595 00:28:16,710 --> 00:28:20,990 Jeg er nesten positivt, hvis du ser tilbake på gamle spørrekonkurranser, det sier, påta 596 00:28:20,990 --> 00:28:24,090 koding problemene du bruker en 32-bits maskin. 597 00:28:24,090 --> 00:28:26,620 598 00:28:26,620 --> 00:28:30,620 Men det er, å gå sammen med at det i Hvis du er interessert, er det 599 00:28:30,620 --> 00:28:35,920 datatyper som er de samme størrelse på alle maskiner. 600 00:28:35,920 --> 00:28:42,670 >> Hvis du har sett noe lignende uint32_t, kan du eller kan 601 00:28:42,670 --> 00:28:43,260 ikke har sett det. 602 00:28:43,260 --> 00:28:44,290 Det er en datatype. 603 00:28:44,290 --> 00:28:47,570 Det er å si, være 32 bits uansett hvilken maskin dette er på. 604 00:28:47,570 --> 00:28:50,350 Så når folk skriver bærbar kode, de sannsynligvis ikke vil bruke ints. 605 00:28:50,350 --> 00:28:53,260 De vil i stedet bruke disse andre data typer som de vet vil være den samme 606 00:28:53,260 --> 00:28:54,780 størrelsen på hver enkelt maskin. 607 00:28:54,780 --> 00:28:58,080 608 00:28:58,080 --> 00:28:58,250 Madhu. 609 00:28:58,250 --> 00:29:00,150 >> Madhu: Jeg hadde et spørsmål om kompilering prosessen. 610 00:29:00,150 --> 00:29:04,110 Så hvis du skriver et program som bruker et bibliotek som CS50 eller noe 611 00:29:04,110 --> 00:29:06,840 sånn, jeg vet at det biblioteket må, på et tidspunkt, være 612 00:29:06,840 --> 00:29:08,590 kompilert og linket i. 613 00:29:08,590 --> 00:29:13,380 Men hvor mye av det som skjer under utarbeidelsen av programmet? 614 00:29:13,380 --> 00:29:15,880 Hvilken del av det biblioteket prosess oppstår når du er 615 00:29:15,880 --> 00:29:18,560 kompilere ditt eget program? 616 00:29:18,560 --> 00:29:24,020 >> JASON Hirschhorn: Så la oss gå over generelt trinnene med denne prosessen. 617 00:29:24,020 --> 00:29:26,280 Du skriv din. C-fil. 618 00:29:26,280 --> 00:29:33,530 I ditt. C-fil, du # include din topp-biblioteker, for eksempel, cs50.h. 619 00:29:33,530 --> 00:29:39,480 Hva gjør det skarpt inkluderer linjen gjøre til programmet? 620 00:29:39,480 --> 00:29:40,525 Akchar. 621 00:29:40,525 --> 00:29:43,350 >> AKCHAR: Den legger prototyper av funksjonene fra header 622 00:29:43,350 --> 00:29:45,120 filer i bibliotekene. 623 00:29:45,120 --> 00:29:45,600 >> JASON Hirschhorn: Nettopp. 624 00:29:45,600 --> 00:29:49,870 Det legger disse funksjons prototyper til koden din. 625 00:29:49,870 --> 00:29:55,230 Så når koden blir kompilert i de tidlige stadier, kompilatoren vet 626 00:29:55,230 --> 00:29:59,250 at disse funksjonene virkelig eksisterer, og at et sted de har blitt definert. 627 00:29:59,250 --> 00:30:02,460 De. H-filer inkluderer ikke definisjoner for disse funksjonene eller hvordan 628 00:30:02,460 --> 00:30:03,950 de faktisk fungerer. 629 00:30:03,950 --> 00:30:07,960 Cs50.h omfatter bare noe som sier getstring er en real thing at 630 00:30:07,960 --> 00:30:09,270 kan skje. 631 00:30:09,270 --> 00:30:14,240 Og standardio.h sier printf er en ekte ting som kan skje. 632 00:30:14,240 --> 00:30:23,190 >> Så din c språk med dette. Header filen blir slått inn i noen 633 00:30:23,190 --> 00:30:27,750 maskinlesbar kode, som til slutt blir omgjort til binære 634 00:30:27,750 --> 00:30:30,030 kode, 0 og 1-ere. 635 00:30:30,030 --> 00:30:33,590 Og det er koden som til slutt blir henrettet. 636 00:30:33,590 --> 00:30:38,550 The-l CS50 linjen - for eksempel når du skriver Clang - 637 00:30:38,550 --> 00:30:41,830 og deretter du inkludere-l CS50, du skriver at i. 638 00:30:41,830 --> 00:30:42,180 Og du ser det. 639 00:30:42,180 --> 00:30:43,890 Når du skriver gjør, vil du se at linjen opp her. 640 00:30:43,890 --> 00:30:47,740 Og vi vil se det i et sekund når vi kode eller senere når vi kode. 641 00:30:47,740 --> 00:30:50,390 >> Men at-l CS50 linjen gjør noe litt annerledes enn 642 00:30:50,390 --> 00:30:52,440 # include cs50.h. 643 00:30:52,440 --> 00:30:56,300 Hva betyr det-l CS50 linjen gjøre? 644 00:30:56,300 --> 00:30:56,820 Avi? 645 00:30:56,820 --> 00:31:00,310 >> AVI: Jeg vil si at det knytter biblioteket til funksjonen 646 00:31:00,310 --> 00:31:02,710 ringe, som de. o-filer. 647 00:31:02,710 --> 00:31:08,200 >> JASON Hirschhorn: Så veldig tett, hvis ikke spot-on. 648 00:31:08,200 --> 00:31:16,220 The-l CS50 tar binærfilen og fusjonerer det med din binærfil. 649 00:31:16,220 --> 00:31:21,410 Så cs50.h, det er ingen vits i å snu cs50.h fra C-språk til binære hver 650 00:31:21,410 --> 00:31:23,130 eneste gang det blir brukt. 651 00:31:23,130 --> 00:31:26,650 Det ville være dumt, fordi det ville kaste bort en masse tid. 652 00:31:26,650 --> 00:31:30,420 Så det har allerede blitt utarbeidet og omgjort til en kjørbar. 653 00:31:30,420 --> 00:31:35,430 Og nå er det kommer til å bli slått sammen med din fil på slutten. 654 00:31:35,430 --> 00:31:38,370 Så de en-tallet og 0-er kommer å fusjonere med de 655 00:31:38,370 --> 00:31:39,150 og 0 er på slutten. 656 00:31:39,150 --> 00:31:43,670 Så nå vil du faktisk ha den faktiske 1-ere og 0-er som definerer hvordan getstring, 657 00:31:43,670 --> 00:31:47,890 for eksempel, fungerer, eller hvordan printf, for eksempel, fungerer. 658 00:31:47,890 --> 00:31:52,750 >> Og for mer informasjon, det er en korte kompilatorer som Nate gir at 659 00:31:52,750 --> 00:31:55,410 du bør sjekke ut som går gjennom disse trinnene. 660 00:31:55,410 --> 00:31:56,050 Men - 661 00:31:56,050 --> 00:31:56,560 Ja. 662 00:31:56,560 --> 00:32:01,700 >> STUDENT: Er de alltid i o-filer. når de er i biblioteket skjemaet, 663 00:32:01,700 --> 00:32:06,764 klar til å bli slått sammen, knyttet - som de er i binærkode? 664 00:32:06,764 --> 00:32:07,600 >> JASON Hirschhorn: OK. 665 00:32:07,600 --> 00:32:08,420 Hva - 666 00:32:08,420 --> 00:32:11,780 >> STUDENT: Er det alltid tilfelle for bibliotekene når du kobler dem? 667 00:32:11,780 --> 00:32:12,500 >> JASON Hirschhorn: Ja. 668 00:32:12,500 --> 00:32:17,300 Så det er. S filer, som vil være maskinkode, som også vil være 669 00:32:17,300 --> 00:32:17,975 kryptisk for deg. 670 00:32:17,975 --> 00:32:19,410 Du trenger ikke å bekymre deg om dem. 671 00:32:19,410 --> 00:32:24,930 Men generelt, ja, vil de være i. o-filer klar til å gå. 672 00:32:24,930 --> 00:32:27,170 >> STUDENT: Så når du leverer til bibliotek, trenger du bare sende 673 00:32:27,170 --> 00:32:28,880 den. h og. o? 674 00:32:28,880 --> 00:32:32,210 Du trenger ikke sende. C eller. S. 675 00:32:32,210 --> 00:32:33,070 >> JASON Hirschhorn: So - 676 00:32:33,070 --> 00:32:36,260 og det er i denne korte også, hvis denne informasjon ser ut til å være kommer en 677 00:32:36,260 --> 00:32:36,700 litt raskt. 678 00:32:36,700 --> 00:32:39,870 Men kort på kompilatorer snakker om dette også. 679 00:32:39,870 --> 00:32:43,290 Når du sender et bibliotek, hvis du sender den. h, topptekstfilen, de 680 00:32:43,290 --> 00:32:46,290 funksjonen prototyper, og ett-tallet og 0-tallet, det er alt du trenger å gi. 681 00:32:46,290 --> 00:32:50,640 Du trenger ikke å gi hvordan funksjonen fungerer, det. c-fil. 682 00:32:50,640 --> 00:32:56,360 Fordi poenget med abstraksjon, eller peke APIer, poenget på dette SPL, 683 00:32:56,360 --> 00:32:59,650 Stanford portable bibliotek, er det for deg å ikke bry deg om hvordan nye 684 00:32:59,650 --> 00:33:04,220 GRect fungerer, eller hvordan flytte verk, eller hvordan legge fungerer. 685 00:33:04,220 --> 00:33:06,520 Alt du trenger å vite er at add er en funksjon som du kan 686 00:33:06,520 --> 00:33:08,880 bruke, og det gjør dette. 687 00:33:08,880 --> 00:33:12,760 Så du egentlig ikke trenger å vite hvordan det er skrevet i C. Du trenger bare å 688 00:33:12,760 --> 00:33:15,460 vet, her er funksjonene, hva de gjøre, og her er de ett og 0 er 689 00:33:15,460 --> 00:33:18,870 når du virkelig ønsker å bruke dem. 690 00:33:18,870 --> 00:33:19,530 >> Cool. 691 00:33:19,530 --> 00:33:26,980 Eventuelle flere spørsmål om kompilatorer eller andre emner på brettet? 692 00:33:26,980 --> 00:33:30,300 >> STUDENT: Jeg har et spørsmål om implementere rekursive funksjoner. 693 00:33:30,300 --> 00:33:31,170 Et spørsmål om rekursjon. 694 00:33:31,170 --> 00:33:33,030 Jeg hadde en følelse av at ville komme opp. 695 00:33:33,030 --> 00:33:38,310 Så la oss gå raskt gjennom rekursjon med en spesifikk 696 00:33:38,310 --> 00:33:40,690 eksempel en faktoriell funksjon. 697 00:33:40,690 --> 00:33:44,920 Fordi dette er et eksempel på at ofte kommer opp eller brukes 698 00:33:44,920 --> 00:33:46,170 å illustrere rekursjon. 699 00:33:46,170 --> 00:33:52,390 700 00:33:52,390 --> 00:33:56,410 >> Så "fire!" leses som fire fakultet. 701 00:33:56,410 --> 00:33:59,120 Og hva betyr fire fakultet mener? 702 00:33:59,120 --> 00:34:00,696 Hva gjør det? 703 00:34:00,696 --> 00:34:02,235 Hvordan kan du beregne fire fakultet? 704 00:34:02,235 --> 00:34:05,250 705 00:34:05,250 --> 00:34:07,960 4 ganger 3 ganger 2 ganger 1. 706 00:34:07,960 --> 00:34:11,889 >> Så en annen måte å skrive fire fakultet er å skrive dette. 707 00:34:11,889 --> 00:34:16,780 708 00:34:16,780 --> 00:34:19,022 4 ganger tre fakultet. 709 00:34:19,022 --> 00:34:22,080 Fordi tre fakultet er 3 ganger 2 ganger 1. 710 00:34:22,080 --> 00:34:27,580 Så fire ganger tre fakultet er 4 ganger 3 ganger 2 ganger 1. 711 00:34:27,580 --> 00:34:32,679 Dette er grunnen til at fakultet er en stor kandidat for rekursjon, fordi det er 712 00:34:32,679 --> 00:34:36,630 klart at det ikke er noe skjer om og om igjen og om igjen på en 713 00:34:36,630 --> 00:34:39,820 mindre antall av ting før du kommer til enden. 714 00:34:39,820 --> 00:34:42,570 Når du kommer til en, er en faktoriell en. 715 00:34:42,570 --> 00:34:43,719 Du kan ikke gå mye lenger. 716 00:34:43,719 --> 00:34:47,219 0 fakultet er også definert som en. 717 00:34:47,219 --> 00:34:50,679 Så når du kommer til en eller 0, er du på slutten, og du kan 718 00:34:50,679 --> 00:34:53,219 begynne å gå opp igjen. 719 00:34:53,219 --> 00:34:59,540 Så hvis vi ønsket å skrive en rekursiv funksjonen til å beregne et fakultet, 720 00:34:59,540 --> 00:35:02,170 vi kommer til å skrive noen pseudo for det nå. 721 00:35:02,170 --> 00:35:03,300 Før vi skriver at pseudo - 722 00:35:03,300 --> 00:35:05,660 Jeg skal gi dere et par minutter å skrive pseudo-kode eller bare tenke 723 00:35:05,660 --> 00:35:09,600 om det - det er to ting hver rekursiv funksjon behov. 724 00:35:09,600 --> 00:35:12,530 Hva er de to tingene? 725 00:35:12,530 --> 00:35:13,220 >> JACK: Det har å kalle seg. 726 00:35:13,220 --> 00:35:13,680 >> JASON Hirschhorn: Noah? 727 00:35:13,680 --> 00:35:14,460 Oh, Jack. 728 00:35:14,460 --> 00:35:15,100 Gå fremover. 729 00:35:15,100 --> 00:35:16,640 >> JACK: Det har å kalle seg. 730 00:35:16,640 --> 00:35:19,220 >> JASON Hirschhorn: Så en rekursiv Funksjonen trenger en rekursiv samtale, en 731 00:35:19,220 --> 00:35:20,220 kaller til seg selv. 732 00:35:20,220 --> 00:35:20,770 Det er ett. 733 00:35:20,770 --> 00:35:21,510 Og hva er den andre tingen? 734 00:35:21,510 --> 00:35:22,250 >> JACK: En base case. 735 00:35:22,250 --> 00:35:23,780 >> JASON Hirschhorn: En base case. 736 00:35:23,780 --> 00:35:26,940 En base case er, her er når vi stopper. 737 00:35:26,940 --> 00:35:29,510 Så din funksjon blir kalt. 738 00:35:29,510 --> 00:35:31,410 Basen saken kommer først. 739 00:35:31,410 --> 00:35:33,710 Du ønsker å vite om du er på slutten. 740 00:35:33,710 --> 00:35:37,110 Og hvis du ikke er på slutten, du lage din rekursive kall. 741 00:35:37,110 --> 00:35:39,880 Og du går gjennom denne funksjonen igjen, Sjekk din base case igjen. 742 00:35:39,880 --> 00:35:42,575 Hvis du ikke er slutten, gjør du annen rekursive kall, 743 00:35:42,575 --> 00:35:44,130 et cetera, et cetera. 744 00:35:44,130 --> 00:35:47,110 >> Det er derfor rekursive funksjoner alltid trenger disse basis saker og de 745 00:35:47,110 --> 00:35:48,210 rekursive samtaler. 746 00:35:48,210 --> 00:35:51,280 Hvis du ikke har en rekursive kall, det ikke ville være en rekursiv funksjon. 747 00:35:51,280 --> 00:35:53,210 Hvis du ikke har en base case, du vil gå evig og 748 00:35:53,210 --> 00:35:54,780 det ville være noen slutt. 749 00:35:54,780 --> 00:35:57,870 Og base case alltid kommer først, fordi du vil alltid lurt å sjekke 750 00:35:57,870 --> 00:36:00,420 hvis du er på slutten først. 751 00:36:00,420 --> 00:36:04,770 Så før vi gjør noen pseudo, hvorfor trenger du ikke ta et minutt å tenke på 752 00:36:04,770 --> 00:36:09,360 hvordan en rekursiv faktoriell funksjon ville være skrevet? 753 00:36:09,360 --> 00:36:23,340 754 00:36:23,340 --> 00:36:26,010 >> Også, så mange som du gjør, skriving det ut på et ark er 755 00:36:26,010 --> 00:36:27,960 hva du skal ha til gjøre på quiz i morgen. 756 00:36:27,960 --> 00:36:32,160 Så sannsynligvis god praksis å gjøre at koden du skriver 757 00:36:32,160 --> 00:36:34,420 ned på papirark - 758 00:36:34,420 --> 00:36:35,160 eller du kan gjøre det. 759 00:36:35,160 --> 00:36:36,710 Du vet hvor semikolon er. 760 00:36:36,710 --> 00:36:37,660 Du husker syntaksen. 761 00:36:37,660 --> 00:36:40,400 Fordi du ikke være i stand til å ha en kompilatoren fortelle du har gjort en feil. 762 00:36:40,400 --> 00:37:02,356 763 00:37:02,356 --> 00:37:07,240 >> Også langs disse linjene, i morgen, når du har koding problemer, hvis du 764 00:37:07,240 --> 00:37:11,490 er rushed for tiden, eller hvis du er veldig forvirret med hensyn til hvordan du skal 765 00:37:11,490 --> 00:37:16,030 skrive det bestemt ting i c, det ville behoove du å skrive pseudo-kode 766 00:37:16,030 --> 00:37:18,160 eller skrive kommentarer i tillegg. 767 00:37:18,160 --> 00:37:21,940 Fordi det er delvis kreditt for en Mange av spørsmålene på quizen. 768 00:37:21,940 --> 00:37:24,840 Så du kan være på vei, eller du kan bare bli forvirret. 769 00:37:24,840 --> 00:37:28,030 Skriving i kommentarer eller pseudo-kode er ofte måter som du 770 00:37:28,030 --> 00:37:29,360 kan få delvis kreditt. 771 00:37:29,360 --> 00:37:31,440 >> Så ikke la noe blank på quiz. 772 00:37:31,440 --> 00:37:33,490 Det er ingen straff for å sette ting i. 773 00:37:33,490 --> 00:37:37,650 Faktisk kan sette i pseudo-kode eller kommentarer kommer til å hjelpe de grader 774 00:37:37,650 --> 00:37:40,410 finne ut om du faktisk vet hva du snakker om, og kanskje pris 775 00:37:40,410 --> 00:37:42,030 du noen delvis æren for det. 776 00:37:42,030 --> 00:37:44,510 >> Også langs disse linjene, skriv tydelig. 777 00:37:44,510 --> 00:37:47,650 Hvis vi kan egentlig ikke hva du skriver, vi kommer ikke til å ringe deg 778 00:37:47,650 --> 00:37:49,900 ved midnatt i morgen til figur ut hva du skrev. 779 00:37:49,900 --> 00:37:51,520 Vi kommer bare til å ta av poeng. 780 00:37:51,520 --> 00:37:56,570 Skriv tydelig, slik at vi kan høre, eller rettere sagt, vi kan lese hva du skrev. 781 00:37:56,570 --> 00:38:00,230 >> Og hvis det står to setninger, ikke skriv et avsnitt. 782 00:38:00,230 --> 00:38:02,280 Følg instruksjonene. 783 00:38:02,280 --> 00:38:03,500 Skriv tydelig. 784 00:38:03,500 --> 00:38:07,720 Og skrive inn disse kommentarene eller pseudo for spørsmål som kunne 785 00:38:07,720 --> 00:38:10,270 award delvis kreditt. 786 00:38:10,270 --> 00:38:12,520 >> OK, la oss gå til faktoriell. 787 00:38:12,520 --> 00:38:15,000 Så vi har en funksjon fakultet. 788 00:38:15,000 --> 00:38:18,400 789 00:38:18,400 --> 00:38:21,550 Hvis jeg skulle egentlig skrive dette i C, hva trenger jeg for å sette før navnet 790 00:38:21,550 --> 00:38:22,800 av funksjonen? 791 00:38:22,800 --> 00:38:24,880 792 00:38:24,880 --> 00:38:30,060 Den returtype, som i denne tilfelle, vil vi gi det int. 793 00:38:30,060 --> 00:38:35,450 Og så inne i klammeparentes, er hva som foregår inne i klammeparentes for 794 00:38:35,450 --> 00:38:36,850 en funksjon? 795 00:38:36,850 --> 00:38:37,950 >> STUDENTER: Argument type. 796 00:38:37,950 --> 00:38:39,150 >> JASON Hirschhorn: Dens argumenter. 797 00:38:39,150 --> 00:38:42,680 Så fakultet vil trolig ta et argument. 798 00:38:42,680 --> 00:38:44,500 Det vil trolig bare ta ett argument. 799 00:38:44,500 --> 00:38:49,450 Og vi vil si at det vil ta et heltall kalt x. 800 00:38:49,450 --> 00:38:52,770 Og igjen, når du skriver prototypen av en funksjon av eller skriving til funksjonen 801 00:38:52,770 --> 00:38:57,110 i koden din før du definerer det, du skrive datatype og navnet 802 00:38:57,110 --> 00:39:01,370 den variabelen for at funksjonen bare. 803 00:39:01,370 --> 00:39:06,350 Så du kan passere noen tall inn i dette funksjon, vil det bli referert til som x 804 00:39:06,350 --> 00:39:07,340 internt. 805 00:39:07,340 --> 00:39:08,755 >> Vi har vår faktoriell funksjon. 806 00:39:08,755 --> 00:39:12,030 807 00:39:12,030 --> 00:39:15,850 Vi trenger to ting, en base case og en rekursive kall. 808 00:39:15,850 --> 00:39:20,900 Hva er base case for fakultet? 809 00:39:20,900 --> 00:39:24,850 Noen som skrev det ut og hvem har ikke snakkes ennå, hva er base 810 00:39:24,850 --> 00:39:26,100 case for fakultet? 811 00:39:26,100 --> 00:39:28,400 812 00:39:28,400 --> 00:39:30,930 >> STUDENT: Hvis n er mindre enn 2, returnerer en. 813 00:39:30,930 --> 00:39:33,520 >> JASON Hirschhorn: Hvis n er mindre enn 2, returnere en. 814 00:39:33,520 --> 00:39:37,216 Jeg liker det, fordi det tar vare på 0 og 1. 815 00:39:37,216 --> 00:39:45,290 Så vi vil gjøre x <2, returnerer en. 816 00:39:45,290 --> 00:39:47,870 Hvis vi får gått 0, hvis vi får passert en, vil denne funksjonen 817 00:39:47,870 --> 00:39:49,790 umiddelbart returnere en. 818 00:39:49,790 --> 00:39:54,020 Hvis vi får gått noen nummer større enn eller lik 2, skal vi 819 00:39:54,020 --> 00:39:55,370 har vår rekursive kall. 820 00:39:55,370 --> 00:39:57,855 >> Og så hvordan er det å gå på jobb? 821 00:39:57,855 --> 00:40:01,070 Kan noen andre som jobbet på dette hvem har ikke snakket ennå gi meg 822 00:40:01,070 --> 00:40:07,380 rekursive kall for denne funksjonen i pseudokode? 823 00:40:07,380 --> 00:40:10,770 Hvis vi får gått på en rekke x og det er større enn 2, hvilken 824 00:40:10,770 --> 00:40:13,370 ønsker vi å gjøre? 825 00:40:13,370 --> 00:40:17,930 Vi har også et eksempel skrevet i side som kan gi deg et hint. 826 00:40:17,930 --> 00:40:20,770 >> STUDENT: Ring x ganger fakultetet av x minus 1? 827 00:40:20,770 --> 00:40:22,020 >> JASON Hirschhorn: Helt riktig. 828 00:40:22,020 --> 00:40:24,610 829 00:40:24,610 --> 00:40:37,750 Vi kommer til å returnere x ganger fakultetet av x minus en. 830 00:40:37,750 --> 00:40:41,810 Og det, selv om jeg skrev opp, utgangspunktet, hva du sa på engelsk, 831 00:40:41,810 --> 00:40:44,580 dette faktoriell funksjon vil bli kalt igjen. 832 00:40:44,580 --> 00:40:46,320 Det vil kjøre på x minus en. 833 00:40:46,320 --> 00:40:49,320 Det vil komme tilbake med noen heltall, og så det vil multiplisere disse to 834 00:40:49,320 --> 00:40:52,050 sammen, og denne verdien vil bli returneres til hva heter denne 835 00:40:52,050 --> 00:40:55,010 faktoriell funksjon, som kan være en annen forekomst av 836 00:40:55,010 --> 00:40:58,420 dette faktoriell funksjon. 837 00:40:58,420 --> 00:41:01,360 >> Så er det et eksempel på en rekursiv funksjon, en meget 838 00:41:01,360 --> 00:41:02,530 enkel rekursiv funksjon. 839 00:41:02,530 --> 00:41:04,530 Men de fleste av dem vil være som dette. 840 00:41:04,530 --> 00:41:11,170 Hvis du ønsker en god rekursiv utfordre for quiz, prøv koding 841 00:41:11,170 --> 00:41:13,230 binære søk rekursivt. 842 00:41:13,230 --> 00:41:18,950 Fordi hvis du gjorde binære søk etter Problemet satt tre, har du sannsynligvis gjorde det 843 00:41:18,950 --> 00:41:21,730 iterativt i en while-loop. 844 00:41:21,730 --> 00:41:23,700 >> Men det kan også skrives rekursivt. 845 00:41:23,700 --> 00:41:26,310 Du kommer til å trenge å skrive din egen egen funksjon som tar litt 846 00:41:26,310 --> 00:41:29,020 ulike kommandolinje-argumenter - eller ikke kommandolinje-argumenter, noen 847 00:41:29,020 --> 00:41:30,910 forskjellige bare vanlige argumenter. 848 00:41:30,910 --> 00:41:33,870 Men du kunne skrive binære søk rekursivt også. 849 00:41:33,870 --> 00:41:36,190 >> STUDENT: Så du kunne også skrevet, i stedet for x minus en, du 850 00:41:36,190 --> 00:41:39,502 kunne også skrevet x minus minus, eller du kan ha 851 00:41:39,502 --> 00:41:40,830 skrevet minus minus x. 852 00:41:40,830 --> 00:41:44,740 Kan du bare forklare veldig raskt hvorfor de ville være forskjellige ting, 853 00:41:44,740 --> 00:41:49,510 som hva forskjellen er mellom x minus minus og minus minus x? 854 00:41:49,510 --> 00:41:51,320 >> JASON Hirschhorn: Nei, jeg er ikke kommer til å gå inn på det. 855 00:41:51,320 --> 00:41:55,500 Men jeg vil snakke med deg om det etter klasse. x minus minus, minus minus x 856 00:41:55,500 --> 00:41:57,780 decrement x etter en. 857 00:41:57,780 --> 00:41:59,090 Men de gjør det litt annerledes. 858 00:41:59,090 --> 00:42:00,340 Men jeg ønsker ikke å gå inn på det. 859 00:42:00,340 --> 00:42:04,330 860 00:42:04,330 --> 00:42:09,090 Andre spørsmål om rekursjon eller denne funksjonen? 861 00:42:09,090 --> 00:42:10,140 Det er egentlig ikke engang pseudo. 862 00:42:10,140 --> 00:42:15,060 Det er i utgangspunktet koden i C du ville skrive for dette. 863 00:42:15,060 --> 00:42:19,393 >> OK, noen andre spørsmål om emner her oppe? 864 00:42:19,393 --> 00:42:19,864 Yeah. 865 00:42:19,864 --> 00:42:23,130 >> STUDENT: Jeg har en rask oversikt over flyttall og presisjon. 866 00:42:23,130 --> 00:42:24,260 >> JASON Hirschhorn: Flytende punkt og presisjon. 867 00:42:24,260 --> 00:42:26,920 Kan noen virkelig raskt gi meg en oversikt over 868 00:42:26,920 --> 00:42:28,210 flyttall og presisjon? 869 00:42:28,210 --> 00:42:30,420 Dere måtte gjøre dette for din oppgavesettet, slik at du er alt 870 00:42:30,420 --> 00:42:31,700 kjent med den. 871 00:42:31,700 --> 00:42:35,090 Eller kanskje ikke alle av dere. 872 00:42:35,090 --> 00:42:36,602 Anyone? 873 00:42:36,602 --> 00:42:39,530 Gi meg en gang spot. 874 00:42:39,530 --> 00:42:40,750 Flyttall og presisjon. 875 00:42:40,750 --> 00:42:42,380 Hva er problemet? 876 00:42:42,380 --> 00:42:42,960 Ja. 877 00:42:42,960 --> 00:42:43,680 Victoria? 878 00:42:43,680 --> 00:42:44,480 >> VANESSA: Vanessa. 879 00:42:44,480 --> 00:42:45,285 >> JASON Hirschhorn: Vanessa. 880 00:42:45,285 --> 00:42:45,680 Unnskyld. 881 00:42:45,680 --> 00:42:51,550 >> VANESSA: Det er bare et endelig antall med tall som kan representeres 882 00:42:51,550 --> 00:42:57,930 fordi du er på et, i vår sak, en 32-bit system. 883 00:42:57,930 --> 00:43:03,080 Så du må slags gjøre opp noen tall. 884 00:43:03,080 --> 00:43:03,910 >> JASON Hirschhorn: Så det er helt riktig. 885 00:43:03,910 --> 00:43:08,110 Det er bare en viss mengde tall som kan være representert. 886 00:43:08,110 --> 00:43:11,770 Hvis du multipliserer to svært store tall, det kan renne over mengden 887 00:43:11,770 --> 00:43:13,950 plasser du må representere et helt tall. 888 00:43:13,950 --> 00:43:17,930 Det er derfor noen ganger bruker vi en lang lang i stedet for en int. 889 00:43:17,930 --> 00:43:19,210 Det har flere områder. 890 00:43:19,210 --> 00:43:21,210 Som kan holde et større antall. 891 00:43:21,210 --> 00:43:24,310 >> Floating point presisjon har å gjøre med det, men også har å gjøre med 892 00:43:24,310 --> 00:43:29,300 faktum at desimaltall er ikke alltid representert. 893 00:43:29,300 --> 00:43:29,540 Unnskyld. 894 00:43:29,540 --> 00:43:31,280 La meg sette dette opp igjen. 895 00:43:31,280 --> 00:43:36,610 Desimaltallet 1.0 er ikke alltid representert som du forventer, 896 00:43:36,610 --> 00:43:40,770 1,000000000. 897 00:43:40,770 --> 00:43:50,360 Det er noen ganger representert som 1,000000001 eller 0,999999999. 898 00:43:50,360 --> 00:43:52,780 Det kan bli enda 89 kastet der inne et sted. 899 00:43:52,780 --> 00:43:56,560 Så de desimaltall er ikke representert akkurat som du ville gjort 900 00:43:56,560 --> 00:43:58,430 forventer at de skal være representert. 901 00:43:58,430 --> 00:44:00,010 >> Så i oppgavesettet - 902 00:44:00,010 --> 00:44:00,860 var det to? - 903 00:44:00,860 --> 00:44:05,290 Problemet satt to, hvor vi har jobbet med flyttall, da vi ønsket 904 00:44:05,290 --> 00:44:08,690 dem til å representere akkurat hva vi ønsket dem for å representere, antallet 905 00:44:08,690 --> 00:44:12,860 av pennies, eller antall cent, vi multipliserer dem ved 100. 906 00:44:12,860 --> 00:44:14,750 Vi rundet dem. 907 00:44:14,750 --> 00:44:18,660 Og da vi kuttet ut alt bak kommaet. 908 00:44:18,660 --> 00:44:22,020 Det var for å sikre at de ville faktisk like nøyaktig hva vi ønsket 909 00:44:22,020 --> 00:44:22,410 dem til å like. 910 00:44:22,410 --> 00:44:26,870 >> Fordi når du tar noe som er en dupp og gjøre det til en int, du 911 00:44:26,870 --> 00:44:29,860 avskåret alt mot høyre for desimaltegnet. 912 00:44:29,860 --> 00:44:33,900 Fordi det er noen flyttall unøyaktighet, 100.000 kan være 913 00:44:33,900 --> 00:44:37,440 representert som 99,999999999. 914 00:44:37,440 --> 00:44:40,350 Og hvis du bare klippe av alt å riktig med en gang, du kommer til å 915 00:44:40,350 --> 00:44:41,600 få feil nummer. 916 00:44:41,600 --> 00:44:44,050 917 00:44:44,050 --> 00:44:44,180 Yeah. 918 00:44:44,180 --> 00:44:45,290 >> STUDENT: Jeg hadde et spørsmål om casting. 919 00:44:45,290 --> 00:44:47,500 Hvilken rekkefølge forekommer det i? 920 00:44:47,500 --> 00:44:54,480 Hvis du vil gjøre float, braketter, en delt med 10, betyr det ikke en delt på 10, 921 00:44:54,480 --> 00:44:58,910 deretter får 0,1, og slå det inn en flottør? 922 00:44:58,910 --> 00:45:01,470 >> JASON Hirschhorn: Hvis du gjør flyte en delt på 10 - 923 00:45:01,470 --> 00:45:02,550 >> STUDENT: Ja, og så lik - 924 00:45:02,550 --> 00:45:04,240 Vel, ville det normalt har det like - 925 00:45:04,240 --> 00:45:04,690 Yeah. 926 00:45:04,690 --> 00:45:06,760 Du ønsker å gjøre det til en float, ikke sant? 927 00:45:06,760 --> 00:45:12,790 >> JASON Hirschhorn: OK, så vi kommer til å bruke det til naturlig overgang til å finne ut 928 00:45:12,790 --> 00:45:15,390 svar på disse spørsmålene ved koding. 929 00:45:15,390 --> 00:45:18,180 Fordi du vil sannsynligvis ha en mye disse minutt spørsmål, og en god måte 930 00:45:18,180 --> 00:45:19,100 å løse dem er gjennom koding. 931 00:45:19,100 --> 00:45:21,320 Så vi kommer til å kode dette akkurat nå, og da skal vi gå tilbake og 932 00:45:21,320 --> 00:45:24,020 kode spørsmålet du hadde. 933 00:45:24,020 --> 00:45:24,950 >> Så den første linjen - 934 00:45:24,950 --> 00:45:29,390 Jeg burde ikke ha skrevet det - hva er det første vi vil gjøre når vi 935 00:45:29,390 --> 00:45:32,250 åpne opp en ny fil i gedit? 936 00:45:32,250 --> 00:45:34,190 >> STUDENT: Inkluder. 937 00:45:34,190 --> 00:45:35,920 >> JASON Hirschhorn: Inkluder hva? 938 00:45:35,920 --> 00:45:37,952 >> STUDENT: CS50 bibliotek. 939 00:45:37,952 --> 00:45:39,920 >> JASON Hirschhorn: OK. 940 00:45:39,920 --> 00:45:42,590 Hva annet bør vi inkludere? 941 00:45:42,590 --> 00:45:46,820 Vi er bare nødt til å sjekke hva som skjer når du kaster noe til en flåte. 942 00:45:46,820 --> 00:45:48,605 Men hva trenger vi å inkludere hvis vi er kommer til å skrive et C-program? 943 00:45:48,605 --> 00:45:49,300 >> STUDENT: Standard I / O. 944 00:45:49,300 --> 00:45:50,625 >> JASON Hirschhorn: stdio.h. 945 00:45:50,625 --> 00:45:54,880 Vi har faktisk ikke trenger, for dette program, cs50.h, selv om det er 946 00:45:54,880 --> 00:45:55,920 alltid nyttig å inkludere det. 947 00:45:55,920 --> 00:45:58,260 Men vi trenger alltid trenger stdio.h. 948 00:45:58,260 --> 00:45:59,660 >> STUDENT: Når koding i C? 949 00:45:59,660 --> 00:46:15,770 >> JASON Hirschhorn: Når koding i C. 950 00:46:15,770 --> 00:46:17,090 >> Så jeg lagre det som dette. C-fil. 951 00:46:17,090 --> 00:46:18,590 Jeg får noen fine syntax highlighting. 952 00:46:18,590 --> 00:46:22,890 Jeg skrev tomrommet inni hoved. 953 00:46:22,890 --> 00:46:24,792 Hva ugyldig bety? 954 00:46:24,792 --> 00:46:26,740 >> STUDENT: ikke tar noen kommandolinje-argumenter. 955 00:46:26,740 --> 00:46:28,900 >> JASON Hirschhorn: Void betyr i denne fall ikke hoved ikke ta noen 956 00:46:28,900 --> 00:46:29,700 kommandolinje-argumenter. 957 00:46:29,700 --> 00:46:32,720 I andre tilfeller, betyr det at funksjonen tar ikke kommandolinje-argumenter. 958 00:46:32,720 --> 00:46:36,560 Eller funksjonen, hvis jeg skulle skrive ugyldig main (void), som vil si hoved sin 959 00:46:36,560 --> 00:46:38,460 ikke tilbake noe. 960 00:46:38,460 --> 00:46:39,960 Så ugyldig bare betyr ingenting. 961 00:46:39,960 --> 00:46:42,510 Hva skulle jeg skrive hvis jeg skulle ta kommandolinje-argumenter? 962 00:46:42,510 --> 00:46:45,250 963 00:46:45,250 --> 00:46:47,150 >> STUDENT: int arc c streng arc v. 964 00:46:47,150 --> 00:46:49,055 >> JASON Hirschhorn: int argc streng argv. 965 00:46:49,055 --> 00:46:54,050 966 00:46:54,050 --> 00:46:55,572 Er det riktig? 967 00:46:55,572 --> 00:46:58,720 >> STUDENT: Det er røye stjerne argv parentes. 968 00:46:58,720 --> 00:47:01,730 >> JASON Hirschhorn: Så du kunne skrive string argv braketter eller røye stjerne argv 969 00:47:01,730 --> 00:47:03,710 parentes, men du trenger brakettene. 970 00:47:03,710 --> 00:47:06,290 Fordi argv er en matrise strenger, huske. 971 00:47:06,290 --> 00:47:07,360 Det er ikke bare én streng. 972 00:47:07,360 --> 00:47:10,350 Så streng argv er, her er en streng som heter argv. 973 00:47:10,350 --> 00:47:13,630 String argv parentes er, er her en rekke strenger. 974 00:47:13,630 --> 00:47:17,865 Så int argc streng argv brak ville være noe som jeg 975 00:47:17,865 --> 00:47:18,810 ville trolig skrive. 976 00:47:18,810 --> 00:47:23,050 >> Så du ønsket å spare i et heltall? 977 00:47:23,050 --> 00:47:24,285 >> STUDENT: Ja, heltall. 978 00:47:24,285 --> 00:47:25,840 Eller i en flåte. 979 00:47:25,840 --> 00:47:26,710 >> JASON Hirschhorn: I en dupp? 980 00:47:26,710 --> 00:47:30,790 Like, float x er lik 1 delt på 10. 981 00:47:30,790 --> 00:47:32,040 >> JASON Hirschhorn: OK. 982 00:47:32,040 --> 00:47:40,160 983 00:47:40,160 --> 00:47:42,240 Hvordan kan jeg skrive ut en dupp i printf? 984 00:47:42,240 --> 00:47:45,100 985 00:47:45,100 --> 00:47:46,714 Hva? 986 00:47:46,714 --> 00:47:47,560 >> STUDENT:% f. 987 00:47:47,560 --> 00:47:48,300 >> JASON Hirschhorn:% f. 988 00:47:48,300 --> 00:47:50,810 Hva er et heltall? 989 00:47:50,810 --> 00:47:52,110 d eller jeg. 990 00:47:52,110 --> 00:47:53,000 Hva er en streng? 991 00:47:53,000 --> 00:47:54,240 >> STUDENT: s. 992 00:47:54,240 --> 00:47:56,140 >> JASON Hirschhorn: s. 993 00:47:56,140 --> 00:47:57,550 Hvordan får jeg en ny linje? 994 00:47:57,550 --> 00:47:58,800 >> STUDENT: Omvendt skråstrek n. 995 00:47:58,800 --> 00:48:04,610 996 00:48:04,610 --> 00:48:07,100 >> JASON Hirschhorn: Hva gjør jeg tilbake hvis viktigste kjører riktig? 997 00:48:07,100 --> 00:48:08,360 >> STUDENT: 0. 998 00:48:08,360 --> 00:48:09,430 Trenger jeg å skrive at linje, skjønt? 999 00:48:09,430 --> 00:48:10,170 >> STUDENT: Nei. 1000 00:48:10,170 --> 00:48:11,513 OK, vi vil ikke skrive det, da. 1001 00:48:11,513 --> 00:48:16,450 1002 00:48:16,450 --> 00:48:17,190 Alle kan lese det? 1003 00:48:17,190 --> 00:48:18,485 Det ser litt liten. 1004 00:48:18,485 --> 00:48:20,160 Alle kan se, eller bør Jeg gjøre det større? 1005 00:48:20,160 --> 00:48:23,480 1006 00:48:23,480 --> 00:48:25,100 Jeg tror for kameraet, vil vi gjøre det litt større, skjønt. 1007 00:48:25,100 --> 00:48:35,750 1008 00:48:35,750 --> 00:48:38,410 >> JASON Hirschhorn: Hvis jeg ønsker å snu dette . C-fil inn i en kjørbar, hva 1009 00:48:38,410 --> 00:48:39,260 skriver jeg? 1010 00:48:39,260 --> 00:48:41,610 >> STUDENT: Gjør test. 1011 00:48:41,610 --> 00:48:42,080 >> JASON Hirschhorn: Sorry? 1012 00:48:42,080 --> 00:48:42,790 >> STUDENT: Gjør test. 1013 00:48:42,790 --> 00:48:44,040 >> JASON Hirschhorn: Gjør test. 1014 00:48:44,040 --> 00:48:46,700 1015 00:48:46,700 --> 00:48:48,410 Vi snakket om denne linjen tidligere. 1016 00:48:48,410 --> 00:48:49,140 Klang. 1017 00:48:49,140 --> 00:48:51,270 Hva er klang? 1018 00:48:51,270 --> 00:48:52,200 Navnet på kompilatoren. 1019 00:48:52,200 --> 00:48:53,920 Hva er denne linjen? 1020 00:48:53,920 --> 00:48:55,580 >> STUDENT: Setter den opp for bruk av GDB. 1021 00:48:55,580 --> 00:48:59,230 >> JASON Hirschhorn: Sett det opp for bruk av GDB. 1022 00:48:59,230 --> 00:49:02,338 Denne linjen, hva er det? 1023 00:49:02,338 --> 00:49:03,290 >> STUDENT: Kildekoden. 1024 00:49:03,290 --> 00:49:06,010 >> JASON Hirschhorn: Det er kildefilen, den. c-fil. 1025 00:49:06,010 --> 00:49:08,150 Hva har disse to linjene gjøre? 1026 00:49:08,150 --> 00:49:10,245 Eller disse to ikke linjene. 1027 00:49:10,245 --> 00:49:12,300 >> STUDENT: Det navnene det teste. 1028 00:49:12,300 --> 00:49:15,410 >> JASON Hirschhorn: Så dash o sier, navnet noe annerledes. 1029 00:49:15,410 --> 00:49:16,790 Og her du kaller det test. 1030 00:49:16,790 --> 00:49:18,900 Hvis jeg ikke har det i, hva ville det nevne dette? 1031 00:49:18,900 --> 00:49:20,260 >> STUDENT: a.out. 1032 00:49:20,260 --> 00:49:22,340 >> JASON Hirschhorn: a.out. 1033 00:49:22,340 --> 00:49:25,366 Hva gjør dette? 1034 00:49:25,366 --> 00:49:27,670 >> STUDENT: Lenker regnestykket bibliotek. 1035 00:49:27,670 --> 00:49:29,550 >> JASON Hirschhorn: Det knytter i regnestykket biblioteket. 1036 00:49:29,550 --> 00:49:32,880 Vi inkluderte ikke regnestykket bibliotek, men siden det er så vanlig, de har 1037 00:49:32,880 --> 00:49:35,780 skrevet make å alltid inkludere regnestykket bibliotek. 1038 00:49:35,780 --> 00:49:39,050 Og på samme måte, inkluderer dette den CS50 biblioteket. 1039 00:49:39,050 --> 00:49:43,010 >> OK, så hvis vi liste, har vi nå en kjørbar heter test. 1040 00:49:43,010 --> 00:49:45,150 For å utføre det, skriver jeg test. 1041 00:49:45,150 --> 00:49:48,330 Jeg ser at min flyttall, som forventet, er lik 0. 1042 00:49:48,330 --> 00:49:50,890 1043 00:49:50,890 --> 00:49:51,590 Betyr det - 1044 00:49:51,590 --> 00:49:52,060 så - 1045 00:49:52,060 --> 00:49:55,210 >> STUDENT: Så hvis du setter flyte nå, som om du kastet det som float - 1046 00:49:55,210 --> 00:49:56,870 >> JASON Hirschhorn: Cast den en til en dupp? 1047 00:49:56,870 --> 00:49:59,180 >> STUDENT: Nei, kaste hele greia - 1048 00:49:59,180 --> 00:49:59,500 ja. 1049 00:49:59,500 --> 00:50:02,460 Hvis du nettopp gjorde det, ville som gjør det 0,1? 1050 00:50:02,460 --> 00:50:07,170 >> JASON Hirschhorn: OK, så veldig raskt, 1 delt på 10, de er 1051 00:50:07,170 --> 00:50:08,690 heltall som blir delt. 1052 00:50:08,690 --> 00:50:13,580 Så når du dele heltall, er de 0, og du sparer på at 0 i en 1053 00:50:13,580 --> 00:50:17,170 flyter, fordi den er skrå bare heltallsdivisjon. 1054 00:50:17,170 --> 00:50:19,180 Så nå er vi snu noe inn i en flåte. 1055 00:50:19,180 --> 00:50:21,650 >> La oss se hva som skjer. 1056 00:50:21,650 --> 00:50:22,900 Vi vil gjøre testen. 1057 00:50:22,900 --> 00:50:25,870 1058 00:50:25,870 --> 00:50:31,090 Så nå ser vi at det skråstrek var ikke heltall divisjon, ble det flytende 1059 00:50:31,090 --> 00:50:32,640 punkt divisjon. 1060 00:50:32,640 --> 00:50:35,700 Fordi en av sine argumenter hadde blitt kastet til en flåte. 1061 00:50:35,700 --> 00:50:38,380 Så nå var det å si, behandle dette divisjon som vi har å gjøre med 1062 00:50:38,380 --> 00:50:40,140 flytende poeng, ikke med heltall. 1063 00:50:40,140 --> 00:50:42,760 Og så får vi svaret vi forventer. 1064 00:50:42,760 --> 00:50:44,620 >> La oss se hva som skjer - 1065 00:50:44,620 --> 00:50:47,103 oops. 1066 00:50:47,103 --> 00:50:51,646 Hvis jeg ønsket å skrive ut mer desimal flekker, hvordan kunne jeg gjøre det? 1067 00:50:51,646 --> 00:50:55,550 >> STUDENT: Point dot f, eller så mange desimaler som du ønsker. 1068 00:50:55,550 --> 00:51:02,280 1069 00:51:02,280 --> 00:51:04,440 >> JASON Hirschhorn: Så jeg skriver ut 10 desimaler flekker. 1070 00:51:04,440 --> 00:51:06,610 Og vi nå ser at vi får noen rare ting. 1071 00:51:06,610 --> 00:51:09,650 Og det går tilbake til spørsmålet ditt om flyt imprecision. 1072 00:51:09,650 --> 00:51:10,950 Det er rare ting lagret i her. 1073 00:51:10,950 --> 00:51:13,650 1074 00:51:13,650 --> 00:51:15,275 >> OK, gjør at spørsmålet ditt? 1075 00:51:15,275 --> 00:51:18,550 1076 00:51:18,550 --> 00:51:20,200 Hva annet hadde du ønsker å kode raskt? 1077 00:51:20,200 --> 00:51:25,470 >> STUDENT: Jeg ville bare se om ikke, hvis du frigjort noen peker, 1078 00:51:25,470 --> 00:51:30,410 om at pekeren fortsatt hadde lagret i det adressen til hva det hadde vært 1079 00:51:30,410 --> 00:51:32,170 peker til tidligere. 1080 00:51:32,170 --> 00:51:34,100 >> JASON Hirschhorn: OK, så la oss gjøre det. 1081 00:51:34,100 --> 00:51:38,030 Char stjerners ptr, skaper dette en variabel kalt ptr av typen char stjerne. 1082 00:51:38,030 --> 00:51:39,280 Hvordan skriver jeg malloc? 1083 00:51:39,280 --> 00:51:40,550 Alden? 1084 00:51:40,550 --> 00:51:41,800 >> ALDEN: Just malloc. 1085 00:51:41,800 --> 00:51:44,820 1086 00:51:44,820 --> 00:51:51,040 Men da må det være størrelsen på, og i dette tilfellet, tror jeg du hadde 1087 00:51:51,040 --> 00:51:52,465 peke til røye. 1088 00:51:52,465 --> 00:51:54,450 Så det ville være røye. 1089 00:51:54,450 --> 00:51:57,520 >> JASON Hirschhorn: OK, så mer generelt, Inside - 1090 00:51:57,520 --> 00:51:58,770 la oss redigere. 1091 00:51:58,770 --> 00:52:05,100 1092 00:52:05,100 --> 00:52:09,260 Inne malloc, vil du nummeret byte på haugen. 1093 00:52:09,260 --> 00:52:12,320 Vanligvis, hva vi har sett at vi er gjør er vi kommer til malloc 1094 00:52:12,320 --> 00:52:14,940 strenger, for eksempel, eller matriser med heltall. 1095 00:52:14,940 --> 00:52:21,600 Så hvis vi vil ha 10 heltall, eller 10 chars, 10 vil gi oss 10. 1096 00:52:21,600 --> 00:52:24,370 Og så størrelsen på tegn ville gi oss at størrelsen av tegn, som i 1097 00:52:24,370 --> 00:52:25,120 dette tilfellet er en byte. 1098 00:52:25,120 --> 00:52:26,250 Vi får 10 bytes. 1099 00:52:26,250 --> 00:52:28,540 Hvis vi skulle skrive størrelsen på int, som ville gi oss 40 bytes. 1100 00:52:28,540 --> 00:52:31,520 >> Så mer generelt, på innsiden av malloc er antall byte du ønsker. 1101 00:52:31,520 --> 00:52:34,620 I dette tilfellet får vi en byte. 1102 00:52:34,620 --> 00:52:36,900 Som virker som en merkelig bruk av malloc, men for vår 1103 00:52:36,900 --> 00:52:38,470 formål er fornuftig. 1104 00:52:38,470 --> 00:52:40,420 Så det er det. 1105 00:52:40,420 --> 00:52:43,420 >> Vi kommer til å ringe gratis. 1106 00:52:43,420 --> 00:52:47,040 Vi kvitte seg med det, og vi bruker ptr igjen. 1107 00:52:47,040 --> 00:52:48,750 Og hva gjorde du ønsker å sjekke? 1108 00:52:48,750 --> 00:52:50,550 >> STUDENT: Jeg ville bare sjekke om eller ikke var det noe 1109 00:52:50,550 --> 00:52:51,900 på innsiden av den. 1110 00:52:51,900 --> 00:52:53,050 >> JASON Hirschhorn: Så om det pekt på noe? 1111 00:52:53,050 --> 00:52:57,740 >> STUDENT: Ja, akkurat, enten det fortsatt hadde en minneadresse. 1112 00:52:57,740 --> 00:53:02,220 >> JASON Hirschhorn: Så du vil for å sjekke verdien av ptr? 1113 00:53:02,220 --> 00:53:03,470 >> STUDENT: Ja, akkurat. 1114 00:53:03,470 --> 00:53:07,940 1115 00:53:07,940 --> 00:53:10,160 >> JASON Hirschhorn: Hva skriver jeg her hvis jeg ønsker å sjekke verdien av 1116 00:53:10,160 --> 00:53:11,880 point - hva er, Jordan sa, verdien? 1117 00:53:11,880 --> 00:53:13,720 Eller det som er lagret inne i ptr? 1118 00:53:13,720 --> 00:53:14,620 >> STUDENT: En minneadresse. 1119 00:53:14,620 --> 00:53:16,330 >> JASON Hirschhorn: En minneadresse. 1120 00:53:16,330 --> 00:53:20,520 Så hvis jeg skriver akkurat dette, det vil gi meg verdien av ptr. 1121 00:53:20,520 --> 00:53:22,800 Og hvordan kan jeg skrive ut en minneadresse? 1122 00:53:22,800 --> 00:53:26,470 Hva er formatstrengen for en minneadresse? 1123 00:53:26,470 --> 00:53:27,430 >> STUDENT:% p. 1124 00:53:27,430 --> 00:53:28,050 >> JASON Hirschhorn:% p. 1125 00:53:28,050 --> 00:53:29,500 % S er en streng. 1126 00:53:29,500 --> 00:53:30,750 % P for pekeren. 1127 00:53:30,750 --> 00:53:40,820 1128 00:53:40,820 --> 00:53:43,540 Er det riktig? 1129 00:53:43,540 --> 00:53:44,790 Det er riktig. 1130 00:53:44,790 --> 00:53:49,450 1131 00:53:49,450 --> 00:53:51,040 Så ptr lik - 1132 00:53:51,040 --> 00:53:53,350 det fortsatt har noe i det. 1133 00:53:53,350 --> 00:53:56,110 1134 00:53:56,110 --> 00:53:57,645 Dette er trolig en mer interessant spørsmål. 1135 00:53:57,645 --> 00:53:59,198 Hva gjør den linjen gjøre? 1136 00:53:59,198 --> 00:54:00,830 >> STUDENT: Seg feil. 1137 00:54:00,830 --> 00:54:01,310 >> JASON Hirschhorn: Hva? 1138 00:54:01,310 --> 00:54:02,678 >> STUDENT: Jeg tror det SEG feil. 1139 00:54:02,678 --> 00:54:03,574 >> JASON Hirschhorn: Hm? 1140 00:54:03,574 --> 00:54:04,920 >> STUDENT: Jeg tror det vil Seg feil. 1141 00:54:04,920 --> 00:54:08,265 >> JASON Hirschhorn: Så denne linjen av kode, stjerne ptr, hva 1142 00:54:08,265 --> 00:54:10,152 betyr stjernen mener? 1143 00:54:10,152 --> 00:54:11,240 >> STUDENT: Innhold av. 1144 00:54:11,240 --> 00:54:11,560 >> JASON Hirschhorn: Yeah. 1145 00:54:11,560 --> 00:54:13,910 Gå til å få innholdet av. 1146 00:54:13,910 --> 00:54:16,830 Så dette kommer til å gå til minne adressere det og gi meg det. 1147 00:54:16,830 --> 00:54:21,030 Jeg brukte% c akkurat her fordi det er tegn lagret der. 1148 00:54:21,030 --> 00:54:23,390 Så vi kommer til å gå til den adressen vi nettopp har sett - eller det vil trolig være en 1149 00:54:23,390 --> 00:54:25,190 litt annerledes denne gang vi kjører programmet. 1150 00:54:25,190 --> 00:54:28,010 Men vi vil gå til denne adressen som vi vet eksisterer fortsatt 1151 00:54:28,010 --> 00:54:29,260 og se hva som er der. 1152 00:54:29,260 --> 00:54:35,640 1153 00:54:35,640 --> 00:54:37,110 >> Så det ikke SEG feil. 1154 00:54:37,110 --> 00:54:38,970 Det bare ikke gi oss noe. 1155 00:54:38,970 --> 00:54:43,350 Det kan faktisk har gitt oss noe, vi kan bare ikke se det. 1156 00:54:43,350 --> 00:54:45,110 Og det går tilbake til denne ideen - 1157 00:54:45,110 --> 00:54:47,270 og vi ikke kommer til å få for mye inn dette, fordi det er utenfor 1158 00:54:47,270 --> 00:54:48,460 Omfanget av dette kurset. 1159 00:54:48,460 --> 00:54:51,260 Men vi snakket om her, hvis vi gikk utenfor grensene av rekken av 1160 00:54:51,260 --> 00:54:54,890 1, kan vi ikke komme i trøbbel. 1161 00:54:54,890 --> 00:54:58,550 >> Noen ganger, når du bare gå av ved en, du gjør noe galt, og du 1162 00:54:58,550 --> 00:54:59,220 kunne komme i trøbbel. 1163 00:54:59,220 --> 00:55:00,820 Men du trenger ikke alltid komme i trøbbel. 1164 00:55:00,820 --> 00:55:05,170 Det avhenger av hvor mye av en dårlig ting du gjør, du kommer til å komme i trøbbel. 1165 00:55:05,170 --> 00:55:07,790 Som ikke er å si, være slurvete med koden din. 1166 00:55:07,790 --> 00:55:12,080 Men det er å si, vil programmet ikke alltid slutte, selv om du går et sted 1167 00:55:12,080 --> 00:55:14,130 du har ikke lov til å gå. 1168 00:55:14,130 --> 00:55:18,170 >> Et godt eksempel på det er, mye mennesker i deres problem satt tre, som 1169 00:55:18,170 --> 00:55:22,350 var 15, ikke kontrollere grensene for styret. 1170 00:55:22,350 --> 00:55:25,860 Så du så til venstre, så til høyre, så til toppen, så 1171 00:55:25,860 --> 00:55:27,000 til bunnen. 1172 00:55:27,000 --> 00:55:31,540 Men du gjorde ikke sjekke for å se om toppen var faktisk kommer til å være på brettet. 1173 00:55:31,540 --> 00:55:35,220 Og en masse folk som gjorde det, og viste at i arbeidet sitt program 1174 00:55:35,220 --> 00:55:38,960 perfekt, fordi der at styret var lagret i minnet, hvis du gikk en 1175 00:55:38,960 --> 00:55:42,300 over det eller sjekket at minnet adresse, det var ikke noe 1176 00:55:42,300 --> 00:55:44,870 spesielt fryktelig om det, så programmet var ikke 1177 00:55:44,870 --> 00:55:45,970 kommer til å kjefte på deg. 1178 00:55:45,970 --> 00:55:48,870 >> Men vi vil fortsatt ta av poeng hvis du ikke sjekke det, fordi du 1179 00:55:48,870 --> 00:55:50,850 gjorde noe du ikke var ment å gjøre, og du kan ha 1180 00:55:50,850 --> 00:55:51,860 fått i trøbbel. 1181 00:55:51,860 --> 00:55:54,040 Odds er, skjønt, har du sannsynligvis ikke. 1182 00:55:54,040 --> 00:55:57,790 Så dette er å vise at, ja, vi kan fortsatt gå til det. 1183 00:55:57,790 --> 00:55:59,010 Og vi slipper ikke inn vanskeligheter i dette tilfelle. 1184 00:55:59,010 --> 00:56:04,000 Hvis vi prøvde å gjøre lese neste 100 tegn, ville vi 1185 00:56:04,000 --> 00:56:06,000 sannsynligvis komme i trøbbel. 1186 00:56:06,000 --> 00:56:09,400 Og du kan kode lesing de neste 100 tegn hvis du ønsker ved å gjøre noen 1187 00:56:09,400 --> 00:56:10,110 liksom for loop. 1188 00:56:10,110 --> 00:56:10,850 Yeah. 1189 00:56:10,850 --> 00:56:16,250 >> STUDENT: Siden vi ble tildelt som plass en faktisk verdi, ville vi ikke 1190 00:56:16,250 --> 00:56:17,050 faktisk være i stand til å se noe. 1191 00:56:17,050 --> 00:56:21,740 Skal vi prøve det med å sette at lik som C eller noe? 1192 00:56:21,740 --> 00:56:22,640 >> JASON Hirschhorn: Great spørsmål. 1193 00:56:22,640 --> 00:56:25,340 Hvordan kan jeg sette denne verdien - 1194 00:56:25,340 --> 00:56:28,980 hva kodelinje skriver jeg på linje syv til å gjøre det du sa? 1195 00:56:28,980 --> 00:56:34,040 >> STUDENT: Stjerne ptr tilsvarer singel sitat c ende enkelt tilbud. 1196 00:56:34,040 --> 00:56:36,970 >> JASON Hirschhorn: Så det er å sette et tegn, c, på det stedet, 1197 00:56:36,970 --> 00:56:40,200 fordi igjen, at stjerne betyr gå til der. 1198 00:56:40,200 --> 00:56:43,320 Og når det brukes på venstre side av et oppdrag operatør, lik at 1199 00:56:43,320 --> 00:56:47,270 signere, vi kommer ikke til å få det verdi så mye som satt som verdi. 1200 00:56:47,270 --> 00:56:48,520 Nå la oss se hva som skjer. 1201 00:56:48,520 --> 00:56:54,700 1202 00:56:54,700 --> 00:56:56,770 >> Vi satt noe der og det var der. 1203 00:56:56,770 --> 00:56:58,000 Vi kalte gratis. 1204 00:56:58,000 --> 00:57:00,100 Noen ting sannsynligvis skjedd på haugen. 1205 00:57:00,100 --> 00:57:01,890 Så det er ikke der lenger. 1206 00:57:01,890 --> 00:57:07,440 Men igjen, vi ikke får i trøbbel for å gå dit. 1207 00:57:07,440 --> 00:57:10,260 >> Jeg gjør dette ut i kode for å illustrere at mange av disse 1208 00:57:10,260 --> 00:57:12,410 spørsmål som du har, er de virkelig interessant 1209 00:57:12,410 --> 00:57:13,650 svarer en masse tid. 1210 00:57:13,650 --> 00:57:15,260 Og de er virkelig gode spørsmål. 1211 00:57:15,260 --> 00:57:19,010 Og du kan regne dem ut på din egen hvis, for eksempel, 1212 00:57:19,010 --> 00:57:19,990 vi er ikke i seksjonen. 1213 00:57:19,990 --> 00:57:20,940 Yeah. 1214 00:57:20,940 --> 00:57:24,430 >> STUDENT: Fordi du ikke sender pekeren hvor som helst, trenger du å 1215 00:57:24,430 --> 00:57:26,530 bruke malloc? 1216 00:57:26,530 --> 00:57:28,400 >> JASON Hirschhorn: Så dette går tilbake til ditt første spørsmål. 1217 00:57:28,400 --> 00:57:28,620 [? ?] 1218 00:57:28,620 --> 00:57:29,980 Er det bare en lokal variabel? 1219 00:57:29,980 --> 00:57:32,280 Malloc her er ikke så overbevisende. 1220 00:57:32,280 --> 00:57:35,260 Bruken av malloc her ikke er at bevisende fordi det er 1221 00:57:35,260 --> 00:57:36,500 bare en lokal variabel. 1222 00:57:36,500 --> 00:57:40,970 >> STUDENT: Så kan du gjøre røye stjerners ptr tilsvarer hallo? 1223 00:57:40,970 --> 00:57:41,400 >> JASON Hirschhorn: Oh. 1224 00:57:41,400 --> 00:57:43,300 Så vi kommer til å nå komme tilbake til ditt første spørsmål. 1225 00:57:43,300 --> 00:57:46,885 Jeg tror du ikke var fornøyd med mitt svar. 1226 00:57:46,885 --> 00:57:48,220 OK? 1227 00:57:48,220 --> 00:57:49,226 Sånn? 1228 00:57:49,226 --> 00:57:49,682 >> STUDENT: Ja. 1229 00:57:49,682 --> 00:57:50,932 Vent. 1230 00:57:50,932 --> 00:57:54,090 1231 00:57:54,090 --> 00:57:57,850 >> JASON Hirschhorn: Og der har du lyst til å skrive ut? 1232 00:57:57,850 --> 00:58:00,026 Så vi vil skrive ut en streng sånn? 1233 00:58:00,026 --> 00:58:06,380 1234 00:58:06,380 --> 00:58:07,630 >> STUDENT: Interesting. 1235 00:58:07,630 --> 00:58:09,900 1236 00:58:09,900 --> 00:58:14,285 >> JASON Hirschhorn: Så dette sier dette argumentet har form av en karakter. 1237 00:58:14,285 --> 00:58:17,200 1238 00:58:17,200 --> 00:58:18,620 Så dette bør være et tegn. 1239 00:58:18,620 --> 00:58:25,170 1240 00:58:25,170 --> 00:58:26,280 >> STUDENT: Bare tar den første. 1241 00:58:26,280 --> 00:58:28,610 >> JASON Hirschhorn: Så dette er hva jeg sa før. 1242 00:58:28,610 --> 00:58:34,240 Som jeg sa, det er ikke å lagre strengen inni variabel pekeren. 1243 00:58:34,240 --> 00:58:35,120 Det er lagring - 1244 00:58:35,120 --> 00:58:36,350 >> STUDENT: Den første verdien av strengen. 1245 00:58:36,350 --> 00:58:40,810 >> JASON Hirschhorn: Adressen til den første verdien av strengen. 1246 00:58:40,810 --> 00:58:46,940 Hvis vi skulle skrive ut dette, er vi får verdien inne pekeren. 1247 00:58:46,940 --> 00:58:51,005 Og vi får se det er, faktisk, en minneadresse. 1248 00:58:51,005 --> 00:58:53,595 1249 00:58:53,595 --> 00:58:56,440 >> Betyr det fornuftig? 1250 00:58:56,440 --> 00:58:56,940 Unnskyld. 1251 00:58:56,940 --> 00:58:58,996 Vent, betyr det svaret ditt Spørsmålet er imidlertid? 1252 00:58:58,996 --> 00:58:59,790 >> STUDENT: Ja. 1253 00:58:59,790 --> 00:59:05,830 >> JASON Hirschhorn: Dette kodelinje er skape en streng og deretter en annen 1254 00:59:05,830 --> 00:59:09,115 variable peker som peker til at strengen, denne matrisen. 1255 00:59:09,115 --> 00:59:14,320 1256 00:59:14,320 --> 00:59:14,980 Yeah. 1257 00:59:14,980 --> 00:59:19,200 >> STUDENT: Så hvis vi gikk ett minne ta videre, ville vi får h? 1258 00:59:19,200 --> 00:59:21,990 1259 00:59:21,990 --> 00:59:23,150 Er det blitt lagret som en streng? 1260 00:59:23,150 --> 00:59:24,400 >> JASON Hirschhorn: Like, vi gjorde - 1261 00:59:24,400 --> 00:59:28,540 1262 00:59:28,540 --> 00:59:30,790 så dette er verdifullt å gjøre. 1263 00:59:30,790 --> 00:59:33,780 Dette er punkt aritmetikk, som dere har sett før og bør 1264 00:59:33,780 --> 00:59:35,550 relativt komfortabel med. 1265 00:59:35,550 --> 00:59:36,905 Dette er beslektet med å skrive - 1266 00:59:36,905 --> 00:59:41,980 1267 00:59:41,980 --> 00:59:46,350 hvis vi skulle skrive denne linjen med kode, vi har sett matrise notasjon før. 1268 00:59:46,350 --> 00:59:55,900 Dette bør gi oss andre verdi i denne rekke, h. 1269 00:59:55,900 --> 01:00:05,010 >> Hvis vi gjorde dette, bør dette også gi oss den andre verdi i denne matrisen. 1270 01:00:05,010 --> 01:00:08,320 Fordi det kommer ikke til minne adressen til den første, men den 1271 01:00:08,320 --> 01:00:10,530 minneadresse av tingen en over. 1272 01:00:10,530 --> 01:00:14,360 Og deretter stjerneoperatør dereferences at pekeren. 1273 01:00:14,360 --> 01:00:16,940 Og igjen, la oss se. 1274 01:00:16,940 --> 01:00:18,664 Vi får h igjen. 1275 01:00:18,664 --> 01:00:20,980 >> STUDENT: Hva gjør Dereference bety? 1276 01:00:20,980 --> 01:00:23,650 >> JASON Hirschhorn: Dereference er et fancy ord for å gå til. 1277 01:00:23,650 --> 01:00:26,390 Gå til det og få det som er der er å deferanseoperasjon en peker. 1278 01:00:26,390 --> 01:00:28,240 Det er bare et fancy ord for det. 1279 01:00:28,240 --> 01:00:29,986 >> STUDENT: Hvis vi ønsket å skrive ut hele streng, kunne vi 1280 01:00:29,986 --> 01:00:31,930 gjør tegnet pekeren? 1281 01:00:31,930 --> 01:00:33,490 >> JASON Hirschhorn: OK, vi er kommer til å ta en pause her. 1282 01:00:33,490 --> 01:00:35,480 Vi kommer til å ende her. 1283 01:00:35,480 --> 01:00:41,760 Ampersand gir deg adressen til en plassering, så når du gjør tegnet av 1284 01:00:41,760 --> 01:00:44,080 en variabel, det gir deg adressen hvor den variabelen er lagret. 1285 01:00:44,080 --> 01:00:48,580 Ampersand pekeren vil gi deg Adressen ptr hvor ptr er i minnet. 1286 01:00:48,580 --> 01:00:50,140 >> Vi kommer ikke til å gå på med dette eksemplet. 1287 01:00:50,140 --> 01:00:52,640 Du kan regne ut disse ting på egen hånd. 1288 01:00:52,640 --> 01:00:55,740 Men igjen, dette kan også være på grensen en litt utover hva du trenger å vite for 1289 01:00:55,740 --> 01:00:58,000 omfanget av denne mid-term - 1290 01:00:58,000 --> 01:00:59,070 eller denne quizen, heller. 1291 01:00:59,070 --> 01:01:00,270 Unnskyld. 1292 01:01:00,270 --> 01:01:03,770 >> Vi kommer til å gå videre, fordi jeg ville liker å gjøre en koding problem 1293 01:01:03,770 --> 01:01:05,100 før tiden er ute. 1294 01:01:05,100 --> 01:01:09,340 Og vi kommer til å kode det jeg tror er det mest overbevisende av disse 1295 01:01:09,340 --> 01:01:11,020 eksempler, atoi. 1296 01:01:11,020 --> 01:01:14,520 Så dette var et spørsmål om en quiz for to år siden. 1297 01:01:14,520 --> 01:01:17,810 Og jeg har det på brettet her. 1298 01:01:17,810 --> 01:01:20,680 >> Folk ble spurt på quiz - 1299 01:01:20,680 --> 01:01:23,640 de fikk litt mer tesxt i spørsmålet, men jeg eliminert 1300 01:01:23,640 --> 01:01:26,640 tekst fordi det var unødvendig for vårt formål nå. 1301 01:01:26,640 --> 01:01:29,180 Det var bare litt bakgrunns på hva atoi gjorde. 1302 01:01:29,180 --> 01:01:31,425 Men du vet alle og er veldig kjent med atoi. 1303 01:01:31,425 --> 01:01:35,620 >> Jeg foreslår at du kode dette på et ark. 1304 01:01:35,620 --> 01:01:39,310 Jeg foreslår også at du bruker strategi at vi har gått over 1305 01:01:39,310 --> 01:01:41,040 mye i vår seksjon. 1306 01:01:41,040 --> 01:01:44,130 Først, sørg for at du forstår hva atoi gjør. 1307 01:01:44,130 --> 01:01:47,580 Tegn et bilde eller komme opp med noen mentalt bilde av det i hodet ditt. 1308 01:01:47,580 --> 01:01:51,120 Deretter skrive ut pseudo for dette. 1309 01:01:51,120 --> 01:01:53,120 På quiz, hvis alt du får er pseudo, minst du 1310 01:01:53,120 --> 01:01:54,550 sette noe ned. 1311 01:01:54,550 --> 01:02:00,070 Og deretter kartlegge at pseudo på C. Hvis du har en sjekk i din 1312 01:02:00,070 --> 01:02:03,760 pseudo, som sjekker om noe er en, som kart på en hvis 1313 01:02:03,760 --> 01:02:05,750 tilstand og så videre. 1314 01:02:05,750 --> 01:02:07,850 Og til slutt, kode programmet i C. 1315 01:02:07,850 --> 01:02:15,000 >> Så gå tilbake til atoi og ta fem minutter å kode dette på et ark 1316 01:02:15,000 --> 01:02:19,480 papir, som trolig om den hvor mye tid du vil ta på seg en 1317 01:02:19,480 --> 01:02:21,260 quiz til kode atoi. 1318 01:02:21,260 --> 01:02:27,060 Fem til femten minutter, fem til 12, fem til 10 minutter, er om hvor mye 1319 01:02:27,060 --> 01:02:30,150 tid du vil bruke på dette spørsmål i quizen. 1320 01:02:30,150 --> 01:02:31,670 Så ta fem minutter nå, takk. 1321 01:02:31,670 --> 01:02:35,957 Og hvis du har noen spørsmål, ta opp hånden din og jeg skal komme rundt. 1322 01:02:35,957 --> 01:06:39,570 1323 01:06:39,570 --> 01:06:41,066 >> [side samtaler] 1324 01:06:41,066 --> 01:08:35,279 1325 01:08:35,279 --> 01:08:37,580 >> JASON Hirschhorn: OK, så det var fem minutter. 1326 01:08:37,580 --> 01:08:39,880 Det var trolig om hvor mye tid du vil bruke på det på en quiz, 1327 01:08:39,880 --> 01:08:42,120 kanskje den lave enden av den tiden. 1328 01:08:42,120 --> 01:08:44,010 Vi vil oppsummering i en bit. 1329 01:08:44,010 --> 01:08:45,740 La oss starte koding dette. 1330 01:08:45,740 --> 01:08:49,479 Og hvis vi ikke får hele veien gjennom, svarene på dette og dette 1331 01:08:49,479 --> 01:08:54,189 quiz spørsmål er tilgjengelige, igjen, Fall 2011 er når dette spørsmålet 1332 01:08:54,189 --> 01:08:54,913 dukket opp på quiz. 1333 01:08:54,913 --> 01:08:57,830 >> Og det var verdt åtte poeng på quiz da. 1334 01:08:57,830 --> 01:09:01,140 Åtte poeng er på den høye enden av den antall poeng noe er verdt. 1335 01:09:01,140 --> 01:09:04,790 De fleste spørsmålene er i størrelsesorden på 1-6 poeng. 1336 01:09:04,790 --> 01:09:08,500 Så dette er en mer utfordrende spørsmål, for sikker. 1337 01:09:08,500 --> 01:09:09,750 Kan noen få meg i gang? 1338 01:09:09,750 --> 01:09:13,260 1339 01:09:13,260 --> 01:09:15,380 >> Generelt, hva skal vi å ønske å gjøre med dette 1340 01:09:15,380 --> 01:09:17,550 fungere atoi, logisk? 1341 01:09:17,550 --> 01:09:19,569 Hva ønsker vi å gjøre? 1342 01:09:19,569 --> 01:09:22,279 Så vi kommer til å skrive noen pseudo. 1343 01:09:22,279 --> 01:09:24,090 >> STUDENT: Konverter tegn inn heltall. 1344 01:09:24,090 --> 01:09:26,700 >> JASON Hirschhorn: Konverter tegn inn heltall. 1345 01:09:26,700 --> 01:09:27,479 OK. 1346 01:09:27,479 --> 01:09:30,870 Så hvor mange tegn er vi kommer til å trenge å gå gjennom? 1347 01:09:30,870 --> 01:09:32,295 >> STUDENT: Alle av dem. 1348 01:09:32,295 --> 01:09:34,100 >> STUDENT: Alle tegnene i strengen. 1349 01:09:34,100 --> 01:09:35,540 >> JASON Hirschhorn: Alle tegn i strengen. 1350 01:09:35,540 --> 01:09:42,180 Så hvis vi ønsket å gå gjennom hver tegnet i en streng, hva er en ting 1351 01:09:42,180 --> 01:09:44,560 i C har vi sett at har tillatt oss å gå gjennom hver 1352 01:09:44,560 --> 01:09:45,939 tegnet i en streng? 1353 01:09:45,939 --> 01:09:46,819 >> STUDENTER: En for løkke. 1354 01:09:46,819 --> 01:09:48,069 >> JASON Hirschhorn: En for løkke. 1355 01:09:48,069 --> 01:09:52,020 1356 01:09:52,020 --> 01:09:55,330 Så vi kommer til å sløyfe gjennom hver karakter i s. 1357 01:09:55,330 --> 01:10:00,940 >> Så hva skal vi ønsker å gjøre når vi får en bestemt karakter? 1358 01:10:00,940 --> 01:10:02,480 Si at vi får gått en 90. 1359 01:10:02,480 --> 01:10:03,460 Vi får ni. 1360 01:10:03,460 --> 01:10:04,240 Det er et tegn. 1361 01:10:04,240 --> 01:10:07,440 Hva ønsker vi å gjøre med det tegnet 9? 1362 01:10:07,440 --> 01:10:10,082 >> STUDENT: Trekk den fra karakter 0? 1363 01:10:10,082 --> 01:10:11,860 >> STUDENT: Legg 0? 1364 01:10:11,860 --> 01:10:13,350 >> JASON Hirschhorn: Trekk det fra karakter 0? 1365 01:10:13,350 --> 01:10:13,800 >> STUDENT: Ja. 1366 01:10:13,800 --> 01:10:15,573 >> JASON Hirschhorn: Hvorfor gjøre du ønsker å gjøre det? 1367 01:10:15,573 --> 01:10:16,560 >> STUDENT: [uhørbart] 1368 01:10:16,560 --> 01:10:17,010 verdi. 1369 01:10:17,010 --> 01:10:18,380 Dens int verdi. 1370 01:10:18,380 --> 01:10:21,580 >> JASON Hirschhorn: OK, så vi tar den karakter 9, trekker den fra 1371 01:10:21,580 --> 01:10:25,820 karakter 0 for å få en Selve heltall 9. 1372 01:10:25,820 --> 01:10:27,070 Søt. 1373 01:10:27,070 --> 01:10:31,255 1374 01:10:31,255 --> 01:10:37,000 Og hvordan vet du det tegnet 9 minus 0 karakter er 9? 1375 01:10:37,000 --> 01:10:39,222 Hva diagram gjorde du ser på? 1376 01:10:39,222 --> 01:10:43,130 >> STUDENT: Det er logisk ni steder mellom 9 og 0. 1377 01:10:43,130 --> 01:10:44,620 Eller du kan se på ASCII-tabellen. 1378 01:10:44,620 --> 01:10:45,120 >> JASON Hirschhorn: ASCII-tabellen. 1379 01:10:45,120 --> 01:10:46,490 Men ja, du er riktig også. 1380 01:10:46,490 --> 01:10:47,780 Så vi trekker fra 0. 1381 01:10:47,780 --> 01:10:49,010 Så nå har vi heltallet 9. 1382 01:10:49,010 --> 01:10:49,970 Og hva gjør vi ønsker å gjøre med det? 1383 01:10:49,970 --> 01:10:54,970 Hvis vi har 90, er det den første heltall vi har, hva vi ønsker å gjøre? 1384 01:10:54,970 --> 01:10:58,180 >> STUDENT: Jeg hadde lagt i en midlertidig heltall array, så gjør regnestykket til det 1385 01:10:58,180 --> 01:11:02,088 senere å gjøre det til en ende. 1386 01:11:02,088 --> 01:11:03,020 >> JASON Hirschhorn: OK. 1387 01:11:03,020 --> 01:11:06,990 >> STUDENT: Du kan starte i slutten av matrisen og deretter gå videre så 1388 01:11:06,990 --> 01:11:10,350 at hver gang du beveger deg fremover, du multiplisere det med 10. 1389 01:11:10,350 --> 01:11:10,830 >> JASON Hirschhorn: OK. 1390 01:11:10,830 --> 01:11:12,250 Det høres ut som en ganske overbevisende idé. 1391 01:11:12,250 --> 01:11:16,040 Vi kan starte i slutten av vår array, og vi kan bruke strleng. 1392 01:11:16,040 --> 01:11:17,030 Vi kan bruke strleng i her. 1393 01:11:17,030 --> 01:11:18,870 Vi får lengden på strengen. 1394 01:11:18,870 --> 01:11:20,100 Vi starter på slutten. 1395 01:11:20,100 --> 01:11:29,170 Og + den første, vi bare ta det heltall, og kanskje vi skaper som en 1396 01:11:29,170 --> 01:11:32,270 ny heltallsvariabelen opp toppen der vi lagrer alt. 1397 01:11:32,270 --> 01:11:37,340 Så vi sløyfe gjennom hver røye i s fra tilbake til forsiden, trekker vi 0, og 1398 01:11:37,340 --> 01:11:42,790 Da tar det funnet, og avhengig hvor det er, vi multiplisere det 1399 01:11:42,790 --> 01:11:45,860 av en strøm av 10 år. 1400 01:11:45,860 --> 01:11:50,644 Fordi den første, hva gjør vi multiplisere lengst tegnet av? 1401 01:11:50,644 --> 01:11:51,440 >> STUDENT: 10 til 0. 1402 01:11:51,440 --> 01:11:53,170 >> JASON Hirschhorn: 10 til 0. 1403 01:11:53,170 --> 01:11:56,010 Hva gjør vi multipliserer andre lengst tegnet av? 1404 01:11:56,010 --> 01:11:57,450 >> STUDENT: [uhørbart]. 1405 01:11:57,450 --> 01:11:57,960 >> JASON Hirschhorn: Hva? 1406 01:11:57,960 --> 01:11:59,150 >> STUDENT: 10 til en. 1407 01:11:59,150 --> 01:12:00,420 >> JASON Hirschhorn: 10 til en. 1408 01:12:00,420 --> 01:12:03,754 Den tredje-lengst til høyre karakter? 1409 01:12:03,754 --> 01:12:04,580 >> STUDENT: 10 til to. 1410 01:12:04,580 --> 01:12:05,350 >> JASON Hirschhorn: 10 til to. 1411 01:12:05,350 --> 01:12:07,200 >> STUDENT: Beklager, jeg forstår ikke hva vi gjør her. 1412 01:12:07,200 --> 01:12:08,640 >> JASON Hirschhorn: OK, la oss gå tilbake, da. 1413 01:12:08,640 --> 01:12:12,500 Så vi kommer til å få vedtatt i en streng. 1414 01:12:12,500 --> 01:12:14,470 Fordi vi skriver atoi. 1415 01:12:14,470 --> 01:12:15,260 Så vi får gått på en streng. 1416 01:12:15,260 --> 01:12:17,640 Si at vi får bestått i strengen 90. 1417 01:12:17,640 --> 01:12:19,930 >> Det første vi skal gjøre er å sette en ny heltallsvariabelen at vi er 1418 01:12:19,930 --> 01:12:22,150 bare kommer til å skape som vår nye heltall. 1419 01:12:22,150 --> 01:12:24,630 Det er det vi skal for å gå tilbake ved enden. 1420 01:12:24,630 --> 01:12:30,110 Vi trenger å gå gjennom hvert tegn i strengen fordi vi har funnet ut 1421 01:12:30,110 --> 01:12:34,430 at vi må innom hver enkelt og deretter legge det til vår nye heltall. 1422 01:12:34,430 --> 01:12:36,330 >> Men vi kan ikke bare legge det som et tall. 1423 01:12:36,330 --> 01:12:38,270 Vi kan ikke bare ta 9 og legge ni til vår heltall. 1424 01:12:38,270 --> 01:12:40,560 Det avhenger av hvilken plass det er i strengen. 1425 01:12:40,560 --> 01:12:42,960 Vi kommer til å trenge å formere det ved en strøm på 10. 1426 01:12:42,960 --> 01:12:45,580 Fordi det er hvordan basen 10 verk. 1427 01:12:45,580 --> 01:12:49,050 >> Så vi kommer til å få den faktiske karakter, eller selve heltall 1428 01:12:49,050 --> 01:12:53,860 nummer, ved å trekke karakter 0 fra karakter 9 som vi gjorde med 1429 01:12:53,860 --> 01:12:57,560 trekke tegnet kapital A fra hva karakter vi hadde i en av 1430 01:12:57,560 --> 01:12:58,120 disse problemene. 1431 01:12:58,120 --> 01:13:04,190 Så vi får faktisk et tall fra 0 til 9 lagret som et reelt tall, og vi vil 1432 01:13:04,190 --> 01:13:07,590 multiplisere det med en kraft på 10 avhengig på hvor vi er i strengen. 1433 01:13:07,590 --> 01:13:19,430 1434 01:13:19,430 --> 01:13:22,575 Og så kommer vi til å legge den tilbake inn i vårt nye heltall variabel. 1435 01:13:22,575 --> 01:13:32,840 1436 01:13:32,840 --> 01:13:37,890 >> Så hva dette ville se ut ville være - vi vil trekke over her. 1437 01:13:37,890 --> 01:13:40,086 Hvis vi får gått i strengen 90 - 1438 01:13:40,086 --> 01:13:41,336 >> STUDENT: [uhørbart]. 1439 01:13:41,336 --> 01:13:43,190 1440 01:13:43,190 --> 01:13:45,540 >> JASON Hirschhorn: Men atoi tar en streng. 1441 01:13:45,540 --> 01:13:46,350 Så vi kommer til å gå gjennom bruket. 1442 01:13:46,350 --> 01:13:49,900 Vi vil bli passert i 90. 1443 01:13:49,900 --> 01:13:51,540 Vi går fra baksiden til forsiden. 1444 01:13:51,540 --> 01:13:53,920 Vi tar 0. 1445 01:13:53,920 --> 01:13:55,080 >> STUDENT: Jeg beklager. 1446 01:13:55,080 --> 01:13:55,880 Kanskje dette er dumt. 1447 01:13:55,880 --> 01:13:59,440 Hvis vi får gått i en streng, hvorfor er 90 hva vi er 1448 01:13:59,440 --> 01:14:00,260 bli vedtatt i? 1449 01:14:00,260 --> 01:14:03,160 Fordi 90 er et helt tall. 1450 01:14:03,160 --> 01:14:06,820 >> JASON Hirschhorn: Fordi atoi tar en streng og gjør det til heltallet 1451 01:14:06,820 --> 01:14:08,320 representasjon av strengen. 1452 01:14:08,320 --> 01:14:13,650 Men strengen 90 ikke er heltallet 90 eller nummer 90. 1453 01:14:13,650 --> 01:14:17,920 Strengen 90 er en matrise av to eller tre tegn, rettere sagt, 9 1454 01:14:17,920 --> 01:14:22,740 karakter, 0-tegn, og backslash 0 karakter. 1455 01:14:22,740 --> 01:14:26,260 >> Og vi skriver atoi fordi, for eksempel når du tar kommandoen 1456 01:14:26,260 --> 01:14:30,230 argumentet, og den er lagret i argv, er det lagret som en streng. 1457 01:14:30,230 --> 01:14:32,940 Men hvis du ønsker å behandle det som et tall, du trenger for å konvertere den til en 1458 01:14:32,940 --> 01:14:34,700 Selve heltall. 1459 01:14:34,700 --> 01:14:37,210 Som vi gjorde en av våre oppgavesett. 1460 01:14:37,210 --> 01:14:38,800 Som vi gjorde i en rekke av våre oppgavesett. 1461 01:14:38,800 --> 01:14:41,690 Alle som tok et heltall som en kommandolinje argument. 1462 01:14:41,690 --> 01:14:46,490 Så det er derfor vår atoi funksjon tar en streng. 1463 01:14:46,490 --> 01:14:51,910 >> Så igjen, i vårt eksempel her, er vi kommer til å ta den siste. 1464 01:14:51,910 --> 01:14:55,050 Vi kommer til å trekke karakteren 0 fra det, fordi tegnene 0 1465 01:14:55,050 --> 01:14:58,810 trekkes av karakteren 0 gir deg det faktiske tall 0, ifølge 1466 01:14:58,810 --> 01:15:00,950 ASCII-matte som vi gjør. 1467 01:15:00,950 --> 01:15:04,870 >> Fordi bokstaver er representert som annerledes enn deres faktiske - den 1468 01:15:04,870 --> 01:15:08,830 tegn en, for eksempel, små bokstaver en er 97. 1469 01:15:08,830 --> 01:15:10,260 Det er ikke - oops! 1470 01:15:10,260 --> 01:15:13,290 Det er ikke hva du forventer den skal være, 0, f.eks. 1471 01:15:13,290 --> 01:15:16,200 Så du må trekke fra tegnet en å få 0. 1472 01:15:16,200 --> 01:15:18,950 >> Så vi kommer til å gjøre det her for å få den virkelige antall. 1473 01:15:18,950 --> 01:15:22,560 Og så har vi tenkt å multiplisere det med en kraft på 10 avhengig av hvor den 1474 01:15:22,560 --> 01:15:27,030 er i strengen, og deretter ta det og legge det til vår plass holderen 1475 01:15:27,030 --> 01:15:32,520 variabel slik at vi kan komme opp med vår endelige ny heltall. 1476 01:15:32,520 --> 01:15:35,080 Betyr det er fornuftig for alle? 1477 01:15:35,080 --> 01:15:37,730 >> Så vi kommer til å kode dette akkurat nå, fordi vi er 1478 01:15:37,730 --> 01:15:38,830 får liten tid. 1479 01:15:38,830 --> 01:15:40,860 Jeg beklager timingen av det. 1480 01:15:40,860 --> 01:15:44,620 Men dette er hva, forhåpentligvis, ville du være i stand til å gjøre på quiz - på 1481 01:15:44,620 --> 01:15:47,710 minste, får denne pseudo skrevet ut. 1482 01:15:47,710 --> 01:15:50,840 >> Og så, hvis vi skulle skrive pseudo, faktisk, vi kunne gjøre dette 1483 01:15:50,840 --> 01:15:51,490 ganske raskt. 1484 01:15:51,490 --> 01:15:55,230 Hver linje av kommentarene vi vi skrev her oversettes til ca 1485 01:15:55,230 --> 01:15:56,970 en linje av C-kode. 1486 01:15:56,970 --> 01:16:01,780 Erklærte en ny variabel, skriving en løkke, en subtraksjon, noen 1487 01:16:01,780 --> 01:16:07,070 multiplikasjon, og noen oppdrag. 1488 01:16:07,070 --> 01:16:09,020 Vi vil nok også være lurt å skrive en returledning. 1489 01:16:09,020 --> 01:16:12,040 Vi kan også være lurt å sette noen kontroller i her. 1490 01:16:12,040 --> 01:16:12,655 Yeah. 1491 01:16:12,655 --> 01:16:15,720 >> STUDENT: Så kan vi behandle s som selve strengen? 1492 01:16:15,720 --> 01:16:18,730 Fordi jeg vet at det er bare en adresse. 1493 01:16:18,730 --> 01:16:22,090 Ut, hvordan ville du få lengden av strengen blir ført gjennom? 1494 01:16:22,090 --> 01:16:25,310 >> JASON Hirschhorn: Så hvordan gjorde lengden på en streng? 1495 01:16:25,310 --> 01:16:25,830 Strlen. 1496 01:16:25,830 --> 01:16:26,660 >> STUDENT: strlen, ja. 1497 01:16:26,660 --> 01:16:30,550 Men kan du sette s som argumentet for det? 1498 01:16:30,550 --> 01:16:34,620 >> JASON Hirschhorn: Så strlen tar en char stjerne. 1499 01:16:34,620 --> 01:16:38,090 Og det følger at røye stjerne, og det holder telling før det blir til en 1500 01:16:38,090 --> 01:16:41,865 backslash 0. strlen var faktisk en av de andre programmer vi 1501 01:16:41,865 --> 01:16:42,850 skulle kode. 1502 01:16:42,850 --> 01:16:44,560 Det er en annen god en til kode. 1503 01:16:44,560 --> 01:16:47,270 At man er litt lettere, fordi hvis du kommer til å tenke på at 1504 01:16:47,270 --> 01:16:47,830 konseptuelt - 1505 01:16:47,830 --> 01:16:51,620 Jeg bare sa det høyt - strlen følger en peker og holder kommer og 1506 01:16:51,620 --> 01:16:54,210 telle og holde styr før du kommer til en backslash 0. 1507 01:16:54,210 --> 01:16:56,530 >> STUDENT: OK, fikk den. 1508 01:16:56,530 --> 01:17:00,200 >> JASON Hirschhorn: Så best av lykke til på quiz 0 i morgen. 1509 01:17:00,200 --> 01:17:03,170 Hvis du har noen spørsmål, vil jeg være ute etter dette. 1510 01:17:03,170 --> 01:17:05,610 Gjerne send meg. 1511 01:17:05,610 --> 01:17:08,480 Nå ut til din egen TF hvis du er ikke i min seksjon, eller få min 1512 01:17:08,480 --> 01:17:10,005 e-post hvis du ønsker det. 1513 01:17:10,005 --> 01:17:13,140 >> Hvis du ønsker å frik ut og bare sende meg en e-post, en freakout e-post, vil jeg 1514 01:17:13,140 --> 01:17:16,710 sende deg tilbake, som en smiley ansikt, eller, som, en vits eller noe. 1515 01:17:16,710 --> 01:17:18,190 Så gjerne gjøre det også. 1516 01:17:18,190 --> 01:17:20,750 Lykke til igjen, og jeg skal se dere alle neste uke. 1517 01:17:20,750 --> 01:17:23,435