1 00:00:00,000 --> 00:00:06,180 2 00:00:06,180 --> 00:00:07,820 >> JASON HIRSCHHORN: Welcome til A5, alle sammen. 3 00:00:07,820 --> 00:00:11,270 Vi har en spændende uge foran os, hovedsagelig fordi der er så mange nye 4 00:00:11,270 --> 00:00:12,350 står i dette rum. 5 00:00:12,350 --> 00:00:12,920 Det er vidunderligt. 6 00:00:12,920 --> 00:00:15,740 En masse af jer er her ved et uheld, der er endnu bedre. 7 00:00:15,740 --> 00:00:18,220 Så forhåbentlig vil du holde slutter sig til os. 8 00:00:18,220 --> 00:00:20,220 >> I denne uge vil vi bruge hovedparten af ​​afsnittet 9 00:00:20,220 --> 00:00:21,870 forberedelse til quizzen. 10 00:00:21,870 --> 00:00:26,580 Så ifølge vores dagsorden, vi kommer til at tale lidt om ressourcer til klassen, 11 00:00:26,580 --> 00:00:30,350 men også for quiz, og derefter igen, tilbringer størstedelen af ​​klassen taler 12 00:00:30,350 --> 00:00:31,390 om spørgsmål. 13 00:00:31,390 --> 00:00:33,900 Når vi er færdig besvare dit spørgsmål, eller hvis dine spørgsmål 14 00:00:33,900 --> 00:00:39,010 naturligt føre os til nogle kodning, jeg har problemer med eksempler fra midterms 15 00:00:39,010 --> 00:00:43,180 fortiden, at vi vil kode direkte i afsnittet sammen, der også opdrage nogle andre 16 00:00:43,180 --> 00:00:45,420 gode emner til at dække. 17 00:00:45,420 --> 00:00:48,280 >> Så det første, som vi har gået igennem for sidste par uger for at minde dig 18 00:00:48,280 --> 00:00:51,700 gutter, der er et væld af ressourcer til rådighed for dette kursus. 19 00:00:51,700 --> 00:00:55,020 Mange af dem vil være utrolig nyttigt til dig, som du fortsætter med at 20 00:00:55,020 --> 00:00:57,280 studere for quiz 0, fordi Det er tirsdag eftermiddag. 21 00:00:57,280 --> 00:00:59,630 Så alle jer har været studerer for lidt. 22 00:00:59,630 --> 00:01:02,640 >> Der er noter og kilde kode, som du bør 23 00:01:02,640 --> 00:01:04,050 helt sikkert tjekke ud. 24 00:01:04,050 --> 00:01:05,019 Se shorts. 25 00:01:05,019 --> 00:01:07,470 Tjek study.cs50.net. 26 00:01:07,470 --> 00:01:11,770 Og så, anført nedenfor, en række af andre ressourcer. 27 00:01:11,770 --> 00:01:14,020 >> Igen, quiz 0 er i morgen klokken 1. 28 00:01:14,020 --> 00:01:18,230 Hvis du ikke allerede har gjort det, så tjek ud Om Quiz 0 dokument på 29 00:01:18,230 --> 00:01:21,370 kursets hjemmeside for at finde ud af hvor du tager quizzen. 30 00:01:21,370 --> 00:01:25,770 Quizzen starter kl 01:10 og slutter 70 minutter senere. 31 00:01:25,770 --> 00:01:29,610 Så hvis du dukker op efter 01:10, er du kommer til at få, at mange færre minutter 32 00:01:29,610 --> 00:01:30,940 70 for at tage quizzen. 33 00:01:30,940 --> 00:01:33,570 Så sørg for at du er der til tiden. 34 00:01:33,570 --> 00:01:38,690 Hvis du er en udvidelse studerende eller har nogle andre test overvejelser, det 35 00:01:38,690 --> 00:01:40,400 måske ikke være klokken 1 i morgen. 36 00:01:40,400 --> 00:01:43,540 Men igen, skal du kontrollere Om Quiz 0 dokumentere at sikre, at du ved, hvornår 37 00:01:43,540 --> 00:01:44,760 du tager quizzen. 38 00:01:44,760 --> 00:01:46,440 Jeg skrev 75 minutter op her. 39 00:01:46,440 --> 00:01:48,580 Jeg tror, ​​det er rigtigt, ikke 70 år. 40 00:01:48,580 --> 00:01:53,420 >> Den dækker alt materiale fra en uge 0 til sidste uges forelæsning på onsdag. 41 00:01:53,420 --> 00:01:59,350 Og igen, for denne quiz, pr der dokument, får du en to-sidet og 8 42 00:01:59,350 --> 00:02:03,770 1/2 med 11 ark papir, som du får at bruge som noter under quizzen. 43 00:02:03,770 --> 00:02:08,570 Mange mennesker, hvis ikke de fleste mennesker, har fandt, at den mest nyttige måde 44 00:02:08,570 --> 00:02:11,970 at studere for quizzen er at foretage en undersøgelse ark, en 45 00:02:11,970 --> 00:02:13,730 en-Sider, af deres egne. 46 00:02:13,730 --> 00:02:17,710 Så se på tidligere dem, hvis du har set tidligere. 47 00:02:17,710 --> 00:02:19,960 Nå ud til venner for at se, hvad de putter på deres. 48 00:02:19,960 --> 00:02:23,610 >> Men hands-down, den bedste måde, du kan undersøgelse er at gå igennem alt og 49 00:02:23,610 --> 00:02:26,530 skære det ned til hvad der bør eller ikke hører hjemme på det ark 50 00:02:26,530 --> 00:02:30,570 papir, fordi det er bare en rigtig nyttige måde for dig at sørge 51 00:02:30,570 --> 00:02:33,620 du går igennem alt og have et vist kendskab til det. 52 00:02:33,620 --> 00:02:36,690 De fleste mennesker, finder vi, selvom de har papirarket sidder lige 53 00:02:36,690 --> 00:02:39,840 ved siden af ​​dem på quizzen, ikke vende til det, fordi igen, at meget 54 00:02:39,840 --> 00:02:43,290 proces for at gå gennem information har hjulpet dem med at lære det. 55 00:02:43,290 --> 00:02:45,370 >> Er der nogen har nogen spørgsmå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 tænkt mig at lave en håndsoprækning. 59 00:02:53,230 --> 00:02:53,550 Det gør ikke noget. 60 00:02:53,550 --> 00:02:54,790 Jeg skulle til at spørge, hvem begyndte at studere. 61 00:02:54,790 --> 00:02:58,360 Men jeg ønsker ikke at gøre dig alle ikke hæve dine hænder. 62 00:02:58,360 --> 00:03:01,290 Så som jeg sagde - ja, AVI, gå videre. 63 00:03:01,290 --> 00:03:04,205 >> AVI: Hvad ville være en nyttig ting at sætte på den ene-pager? 64 00:03:04,205 --> 00:03:05,875 >> STUDENT: Det er op til dig. 65 00:03:05,875 --> 00:03:08,210 >> JASON HIRSCHHORN: Du får at bruge din dømmekraft. 66 00:03:08,210 --> 00:03:13,220 Nyttige ting at sætte på den ene-pager, Hvis du er forvirret over det store O 67 00:03:13,220 --> 00:03:17,510 runtime forskellige typer af søgninger og sorterer, sætte det på der i en 68 00:03:17,510 --> 00:03:18,760 handy dandy diagram. 69 00:03:18,760 --> 00:03:22,250 Denne måde, hvis du bliver bedt om, at der på quiz, behøver du ikke at forsøge og figur 70 00:03:22,250 --> 00:03:23,560 den ud eller årsag gennem 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 man ser på quizzer fortid, en masse tider, er der badetid spørgsmål. 73 00:03:28,320 --> 00:03:34,150 Så det ville være et eksempel på en god ting at sætte på din one-pager. 74 00:03:34,150 --> 00:03:37,450 >> Andre gode ting at sætte på, hvis du er forvirret over, hvordan at erklære en 75 00:03:37,450 --> 00:03:40,570 funktion eller hvad de forskellige dele af funktionen erklæringen er, skriver 76 00:03:40,570 --> 00:03:43,400 der på der, en generisk version og så måske et eksempel. 77 00:03:43,400 --> 00:03:47,290 Hvis du er forvirret over pegepinde, et diagram over, hvordan pointers arbejde er 78 00:03:47,290 --> 00:03:48,660 sandsynligvis virkelig nyttige. 79 00:03:48,660 --> 00:03:52,440 Hvis du er forvirret om rekursion, en prøve rekursiv funktion på der 80 00:03:52,440 --> 00:03:54,980 kan også vise sig at være virkelig nyttige. 81 00:03:54,980 --> 00:03:57,290 Betyder det give dig nogle ideer? 82 00:03:57,290 --> 00:04:01,820 >> AVI: Du er nødt til at forstå Hele kompilering proces, ligesom 83 00:04:01,820 --> 00:04:03,220 hvordan det hele fungerer? 84 00:04:03,220 --> 00:04:06,620 >> JASON HIRSCHHORN: Everything der er blevet dækket kunne 85 00:04:06,620 --> 00:04:08,060 dukke op på quizzen. 86 00:04:08,060 --> 00:04:08,930 Spørgsmål - 87 00:04:08,930 --> 00:04:11,300 men igen, vil nogle ting være vægtet tungt end andre. 88 00:04:11,300 --> 00:04:14,330 Nogle ting er kommet op igen og igen i klassen, i 89 00:04:14,330 --> 00:04:15,590 foredrag, og afsnit. 90 00:04:15,590 --> 00:04:17,220 Andre ting ikke har komme op så ofte. 91 00:04:17,220 --> 00:04:22,900 >> Vi har talt meget om # include og -L noget, og hvad de betyder i 92 00:04:22,900 --> 00:04:24,390 udarbejdelse processen. 93 00:04:24,390 --> 00:04:29,120 Vi har talt meget om GDB, klamre, de forskellige flag, som vi bruger, når 94 00:04:29,120 --> 00:04:33,100 vi kompilere noget, og hvad make15 f.eks virkelig 95 00:04:33,100 --> 00:04:34,510 betyder og virkelig gør. 96 00:04:34,510 --> 00:04:38,110 Vi har ikke taler så meget om hvert enkelt skridt i 97 00:04:38,110 --> 00:04:39,240 udarbejdelse processen. 98 00:04:39,240 --> 00:04:40,410 Vi har stadig talt om det. 99 00:04:40,410 --> 00:04:42,550 Så det er stadig noget, du bør være bekendt med. 100 00:04:42,550 --> 00:04:44,610 Men igen, vi ikke kommer til at være - 101 00:04:44,610 --> 00:04:49,140 ting, der kommer op oftere i klassen er mere tilbøjelige til at komme mere 102 00:04:49,140 --> 00:04:52,495 ofte og være mere kraftigt vægtet på quizzen. 103 00:04:52,495 --> 00:04:53,280 >> Fedt. 104 00:04:53,280 --> 00:04:54,580 Eventuelle andre spørgsmå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 sætte en liste over emner på tavlen. 107 00:05:00,050 --> 00:05:01,550 Jeg gik igennem pensum. 108 00:05:01,550 --> 00:05:07,340 Jeg gik gennem gennemgang sektion fra i går aftes, og de slides til at komme op 109 00:05:07,340 --> 00:05:13,710 med en ikke-udtømmende liste over emner at vi har dækket så langt i CS50 110 00:05:13,710 --> 00:05:16,800 og ting, der kan vises på quizzen. 111 00:05:16,800 --> 00:05:19,900 Så jeg har ikke tænkt mig at gå igennem hver enkelt af disse. 112 00:05:19,900 --> 00:05:22,370 Det ville tage meget mere tid, end vi har nu. 113 00:05:22,370 --> 00:05:26,880 Men jeg sætter dette op her til forhåbentlig jog din hukommelse med hensyn til ting, der kan 114 00:05:26,880 --> 00:05:28,420 eller måske ikke være så fortrolig med dig. 115 00:05:28,420 --> 00:05:32,850 >> Og jeg ville elske at tilbringe størstedelen af sektion besvare dine spørgsmål om 116 00:05:32,850 --> 00:05:35,130 Disse emner, emner som er ikke omfattet her. 117 00:05:35,130 --> 00:05:36,130 Vi kan skrive pseudokode. 118 00:05:36,130 --> 00:05:40,010 Vi kan skrive rigtig kode at sikre, at du - 119 00:05:40,010 --> 00:05:44,280 Jeg kan besvare dit spørgsmål og hjælpe alle fundamentalt forstå en 120 00:05:44,280 --> 00:05:48,330 masse af disse emner, så du vil føle forberedt og behagelig at gå ind 121 00:05:48,330 --> 00:05:50,150 quizzen i morgen. 122 00:05:50,150 --> 00:05:52,300 Så læse over listen. 123 00:05:52,300 --> 00:05:54,780 Du forhåbentlig er kommet til sektion med nogle spørgsmål så godt. 124 00:05:54,780 --> 00:05:58,480 Når du er klar, hæve din hånd 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 på, de spørgsmål, du har, der er ingen dumme spørgsmål. 127 00:06:05,200 --> 00:06:06,250 Vi har hørt, at en masse. 128 00:06:06,250 --> 00:06:09,490 Og de spørgsmål, du har, er jeg villig at satse, mange andre mennesker både 129 00:06:09,490 --> 00:06:11,740 sidder her og ser online har så godt. 130 00:06:11,740 --> 00:06:13,770 Så du kan kun hjælpe folk ved at stille spørgsmål. 131 00:06:13,770 --> 00:06:15,070 Marcus. 132 00:06:15,070 --> 00:06:18,040 >> MARCUS: Mellem stakken og bunke, der er en forudallokerede 133 00:06:18,040 --> 00:06:22,880 procentdel af hukommelsen, der er defineret som dette er for stakken eller til bunke? 134 00:06:22,880 --> 00:06:25,010 Eller hvordan fungerer det helt nøjagtigt? 135 00:06:25,010 --> 00:06:26,230 >> JASON HIRSCHHORN: Great spørgsmål. 136 00:06:26,230 --> 00:06:28,640 Jeg har tænkt mig at bakke spore en lille smule. 137 00:06:28,640 --> 00:06:30,910 Er alle - 138 00:06:30,910 --> 00:06:31,660 skal du være ærlig her. 139 00:06:31,660 --> 00:06:34,130 Jeg ved, jeg beder dig om at hæve din hånd foran dine kammerater. 140 00:06:34,130 --> 00:06:38,510 Men er der mennesker, der føler utilpas med stakken og bunke 141 00:06:38,510 --> 00:06:42,980 og vil gerne gå over at og hvad de betyder? 142 00:06:42,980 --> 00:06:43,880 Løft din hånd, hvis - 143 00:06:43,880 --> 00:06:44,420 OK. 144 00:06:44,420 --> 00:06:45,120 Tak. 145 00:06:45,120 --> 00:06:48,420 Så vi kommer til at gå over stakken og den bunke virkelig hurtigt, og derefter 146 00:06:48,420 --> 00:06:50,370 flytte ind besvare dit spørgsmål. 147 00:06:50,370 --> 00:06:58,250 >> Så hvis vi trækker ud af en boks til at repræsentere hukommelse på din computer, hvad er nogle 148 00:06:58,250 --> 00:07:02,160 ting, der går i denne boks? 149 00:07:02,160 --> 00:07:03,630 Main. 150 00:07:03,630 --> 00:07:04,020 En hovedfunktion. 151 00:07:04,020 --> 00:07:05,890 Hvor bliver main hen? 152 00:07:05,890 --> 00:07:08,090 >> STUDENT: [uhørligt]. 153 00:07:08,090 --> 00:07:09,390 >> JASON HIRSCHHORN: Så vi vil sætte vigtigste hernede. 154 00:07:09,390 --> 00:07:12,180 155 00:07:12,180 --> 00:07:13,430 Hvad går i denne boks? 156 00:07:13,430 --> 00:07:16,000 157 00:07:16,000 --> 00:07:18,140 >> STUDENT: De funktioner, som du kalder. 158 00:07:18,140 --> 00:07:19,020 >> JASON Hirschhorn: Funktionerne som vi kalder. 159 00:07:19,020 --> 00:07:20,440 Og hvor skal de hen? 160 00:07:20,440 --> 00:07:21,300 >> STUDENT: I ​​stakken. 161 00:07:21,300 --> 00:07:22,380 >> JASON HIRSCHHORN: De gå i stakken. 162 00:07:22,380 --> 00:07:27,350 Så vi vil kalde denne ting hernede stakken. 163 00:07:27,350 --> 00:07:31,880 Og op toppen, har vi den bunke. 164 00:07:31,880 --> 00:07:35,450 Så hukommelse er ikke en boks ligesom denne. 165 00:07:35,450 --> 00:07:37,330 Men det er faktisk temmelig ens. 166 00:07:37,330 --> 00:07:40,840 Det kommer til at være en masse kasser over og over, afhængigt af hvor stor din 167 00:07:40,840 --> 00:07:43,730 computer er, eller hvor stor din hukommelse er. 168 00:07:43,730 --> 00:07:46,950 >> På citat-citat slut "bunden" er stakken. 169 00:07:46,950 --> 00:07:50,880 Og der er flere ting der går på stakken. 170 00:07:50,880 --> 00:07:53,840 Og de er afhængige af de funktioner du har i din kode. 171 00:07:53,840 --> 00:07:57,780 Du har altid en funktion i dit kode kaldet main, så der er altid en 172 00:07:57,780 --> 00:08:00,480 afsnittet ned her i stak afsat til main. 173 00:08:00,480 --> 00:08:03,980 >> Disse afsnit i stakken kaldes stakrammer. 174 00:08:03,980 --> 00:08:09,580 Når du ringer til en anden funktion, siger main kalder en binær søgefunktion, 175 00:08:09,580 --> 00:08:11,075 vi sætter en anden ramme på stakken. 176 00:08:11,075 --> 00:08:13,830 177 00:08:13,830 --> 00:08:17,320 Mere specifikt vil vi donere en luns af hukommelse på vores 178 00:08:17,320 --> 00:08:22,960 computer for at lagre binær søgning lokale variabler og til at køre den binære 179 00:08:22,960 --> 00:08:24,150 søgekoden. 180 00:08:24,150 --> 00:08:26,810 >> Så vi kalder binær søgning. 181 00:08:26,810 --> 00:08:30,440 182 00:08:30,440 --> 00:08:33,340 I denne luns af hukommelse, vi kommer til at gemme sine lokale variable. 183 00:08:33,340 --> 00:08:35,270 Vi kommer til at gemme sine printf opkald. 184 00:08:35,270 --> 00:08:38,159 Uanset hvad der sker, at funktionen er skal oplagres lige der. 185 00:08:38,159 --> 00:08:40,350 Binær søgning vil udføre. 186 00:08:40,350 --> 00:08:42,210 Det kommer til at fuldføre udførelse. 187 00:08:42,210 --> 00:08:47,450 Hvad er det ord i C, der betyder at en funktion skal 188 00:08:47,450 --> 00:08:49,306 færdiggøre sin henrettelse? 189 00:08:49,306 --> 00:08:50,040 >> STUDENT: Retur. 190 00:08:50,040 --> 00:08:50,870 >> JASON HIRSCHHORN: Tilbage. 191 00:08:50,870 --> 00:08:53,230 Så når du ser en tilbagevenden erklæring, funktionen ender 192 00:08:53,230 --> 00:08:54,350 når den rammer det. 193 00:08:54,350 --> 00:08:56,740 Så binær søgning vil ramme dets tilbagevenden. 194 00:08:56,740 --> 00:09:01,360 Denne del af hukommelsen vil hovedsageligt frigøres. 195 00:09:01,360 --> 00:09:03,510 Og vigtigste vil gå tilbage til henrettelse. 196 00:09:03,510 --> 00:09:07,240 Så main vil holde pause, hvor var, kald binær søgning, få nogle returværdi, 197 00:09:07,240 --> 00:09:08,700 og fortsætte udførelse. 198 00:09:08,700 --> 00:09:10,840 Denne stakrammen vil gå væk. 199 00:09:10,840 --> 00:09:14,810 >> Hvis vi kalder en rekursiv funktion, som er en funktion, der kalder sig selv over 200 00:09:14,810 --> 00:09:18,480 og over, kunne vi få - siger vi gjorde binær søgning rekursivt. 201 00:09:18,480 --> 00:09:21,520 Vi kan få binær søgning versionen én, binær søgning to, binær søgning 202 00:09:21,520 --> 00:09:24,090 tre, binær søgning fire, binær søgning fem. 203 00:09:24,090 --> 00:09:27,950 Og så er denne sidste binær søgning fem vil ramme basisscenariet, og stakken 204 00:09:27,950 --> 00:09:31,010 rammer, vil gå tilbage og holde lukning indtil vi kommer tilbage til main. 205 00:09:31,010 --> 00:09:32,530 Vi kan gå over rekursion i en bit. 206 00:09:32,530 --> 00:09:35,530 Men alt dette er at sige, hvis du er ringer flere funktioner på et tidspunkt, 207 00:09:35,530 --> 00:09:39,250 der vil være flere stak rammer på stakken. 208 00:09:39,250 --> 00:09:42,900 >> Dyngen, på den anden side op her, er ikke for funktioner, 209 00:09:42,900 --> 00:09:44,380 ikke for lokale variabler. 210 00:09:44,380 --> 00:09:48,920 Det er til dynamisk allokeret variabler. 211 00:09:48,920 --> 00:09:57,210 Så disse er variabler, der kan være initialiseret i enten hoved-eller en 212 00:09:57,210 --> 00:09:58,640 funktion, vigtigste opkald. 213 00:09:58,640 --> 00:10:00,790 Overalt i din kode, de kan initialiseres. 214 00:10:00,790 --> 00:10:04,360 Og for at initialisere en dynamisk tildelt variabel. 215 00:10:04,360 --> 00:10:06,970 Hvilken funktion i C bruger 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 kalder malloc. 219 00:10:10,800 --> 00:10:12,260 Du får en plads på hukommelse. 220 00:10:12,260 --> 00:10:15,020 Og at rummet hukommelse er på den bunke. 221 00:10:15,020 --> 00:10:18,840 Og at rummet hukommelse forbliver der, indtil du ringe gratis. 222 00:10:18,840 --> 00:10:22,670 >> Så dynamisk tildelte variabler i bunke vil eksistere, så længe du 223 00:10:22,670 --> 00:10:25,250 vil have dem til at eksistere, og de vil ikke gå væk, indtil du udtrykkeligt 224 00:10:25,250 --> 00:10:26,760 fortælle dem at gå væk. 225 00:10:26,760 --> 00:10:29,670 Du kan oprette dem i én funktion. 226 00:10:29,670 --> 00:10:31,930 Denne funktion stak rammen vil gå væk. 227 00:10:31,930 --> 00:10:35,490 Men denne variabel vil stadig eksistere i dyngen, indtil det er frigjort, 228 00:10:35,490 --> 00:10:39,650 potentielt af den funktion, der kaldes binær søgning eller hvad. 229 00:10:39,650 --> 00:10:42,580 >> Så dem bunke variabler bo der så længe du ønsker 230 00:10:42,580 --> 00:10:43,490 dem til at blive der. 231 00:10:43,490 --> 00:10:46,090 Og de får sat her. 232 00:10:46,090 --> 00:10:47,450 Og så den næste bliver lagt der. 233 00:10:47,450 --> 00:10:50,210 De holder få fyldt på, og de blive der, indtil du ringe gratis. 234 00:10:50,210 --> 00:10:52,870 >> Og væsentlige den bunke og stakken, komme til Marcus spørgsmål, 235 00:10:52,870 --> 00:10:54,500 vokse op mod hinanden. 236 00:10:54,500 --> 00:10:57,730 Og hvis de løber ind i hinanden, har du opbrugt hele hukommelsen i din 237 00:10:57,730 --> 00:11:01,330 computer, og dit program vil holde op fordi du ikke har nogen mere hukommelse 238 00:11:01,330 --> 00:11:02,420 venstre for at bruge. 239 00:11:02,420 --> 00:11:07,290 Mellem dem, der er potentielt andre ting. 240 00:11:07,290 --> 00:11:10,980 Men for omfanget af dette kursus, du behøver ikke at bekymre dig om det. 241 00:11:10,980 --> 00:11:12,020 >> Så det var svaret på dit spørgsmål. 242 00:11:12,020 --> 00:11:13,520 Det skal du ikke tænke på. 243 00:11:13,520 --> 00:11:15,550 Men det var den lange svar. 244 00:11:15,550 --> 00:11:17,800 Alt du behøver at vide er bunke og stakken vil - 245 00:11:17,800 --> 00:11:18,900 starter på bunden. 246 00:11:18,900 --> 00:11:19,570 Stakken gør. 247 00:11:19,570 --> 00:11:20,790 Den bunke er deroppe. 248 00:11:20,790 --> 00:11:21,990 De vil komme tættere på hinanden. 249 00:11:21,990 --> 00:11:23,110 >> Og hvis de rører, det er et problem. 250 00:11:23,110 --> 00:11:24,500 Du løb tør for hukommelse. 251 00:11:24,500 --> 00:11:28,760 Men også, i tillæg til at vide, hvor de, der er gemt i både 252 00:11:28,760 --> 00:11:30,512 stable og bunke. 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 stak overflow? 255 00:11:33,570 --> 00:11:35,670 >> JASON HIRSCHHORN: Når de kolliderer, det er ikke en stak overflow. 256 00:11:35,670 --> 00:11:38,340 En stak overflow er et andet område at vi kan gå over, hvis du ønsker det. 257 00:11:38,340 --> 00:11:40,020 OK, vi vil vende tilbage til om lidt. 258 00:11:40,020 --> 00:11:42,730 >> STUDENT: Hvad er det ord, kaldet når de rammer hinanden, at 259 00:11:42,730 --> 00:11:44,450 stable og den bunke? 260 00:11:44,450 --> 00:11:46,640 >> JASON HIRSCHHORN: For nu, ikke bekymre dig om. 261 00:11:46,640 --> 00:11:47,750 Bare vide - 262 00:11:47,750 --> 00:11:50,530 Jeg vil besvare dette spørgsmål efter klasse. 263 00:11:50,530 --> 00:11:52,680 Hvis de løber ind i hinanden, du løb tør af hukommelse, fordi der er ikke mere 264 00:11:52,680 --> 00:11:53,330 plads der. 265 00:11:53,330 --> 00:11:55,450 >> STUDENT: Undskyld, hvad er et seg skyld? 266 00:11:55,450 --> 00:11:58,710 >> JASON HIRSCHHORN: Et segment fejl kan kaldes for - 267 00:11:58,710 --> 00:12:02,240 det afhænger hvorfor seg fejlen hedder. 268 00:12:02,240 --> 00:12:06,260 Nogle gange, din stack overflow, vil det siger seg fejl som fejlen. 269 00:12:06,260 --> 00:12:08,180 >> STUDENT: Hvad dereferere en null variabel? 270 00:12:08,180 --> 00:12:10,040 Er det en seg skyld? 271 00:12:10,040 --> 00:12:11,480 >> JASON HIRSCHHORN: dereferere en null pointer - 272 00:12:11,480 --> 00:12:17,850 OK, så hvis du har en pegepind, som du sættes lig med null, pegepinde, tilbagekaldelse, 273 00:12:17,850 --> 00:12:20,270 gemme hukommelse adresser som deres værdier. 274 00:12:20,270 --> 00:12:23,660 Og en null-pointer er hovedsagelig lagring 0, 0-th 275 00:12:23,660 --> 00:12:26,670 fat i denne variabel. 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 hukommelsen, der er ikke i vores billede, der er deroppe 278 00:12:35,030 --> 00:12:38,800 et eller andet sted, er det forbeholdt for computeren. 279 00:12:38,800 --> 00:12:40,130 Vi er ikke tilladt at røre ved den. 280 00:12:40,130 --> 00:12:44,680 >> Så når dit program er fuldbyrdende, hvis noget forsøger at gå i hukommelsen 281 00:12:44,680 --> 00:12:48,990 adresse 0, det ved, at der er en tom værdi. 282 00:12:48,990 --> 00:12:50,820 Den kender intet bør være der. 283 00:12:50,820 --> 00:12:53,420 Så hvis du prøver og bruge noget der og behandle noget der eller 284 00:12:53,420 --> 00:12:58,355 forsøger at gå til denne placering, du er kommer til at få en seg fejl eller en fejl. 285 00:12:58,355 --> 00:13:00,520 Besvarer det dit spørgsmål? 286 00:13:00,520 --> 00:13:03,170 >> Og nu vil vi gå tilbage at stable overløb. 287 00:13:03,170 --> 00:13:09,560 Ting i stakken, som du fyre har set før, i - lad os tegne et tæt 288 00:13:09,560 --> 00:13:11,966 op af en stak ramme. 289 00:13:11,966 --> 00:13:15,050 Kan alle se det? 290 00:13:15,050 --> 00:13:16,650 Så vi har vores stack ramme. 291 00:13:16,650 --> 00:13:23,260 Vi gemmer et array i som en lokal variabel i denne funktion. 292 00:13:23,260 --> 00:13:29,510 Så siger vores udvalg har fem pletter. 293 00:13:29,510 --> 00:13:33,230 Alle fem af dem vil blive gemt i denne stakramme. 294 00:13:33,230 --> 00:13:37,540 >> Hvis vi begynder at skrive ud over det rammerne af dette array - 295 00:13:37,540 --> 00:13:43,990 så hvis vi begynder at skrive ind, lad os sige, det er 0. 296 00:13:43,990 --> 00:13:46,800 De er de fem indekser vores array. 297 00:13:46,800 --> 00:13:50,980 Hvis vi begynder at skrive i indeks 5, som vi ikke har, når vi har en 298 00:13:50,980 --> 00:13:55,900 vifte af størrelse 5, begynder vi at skrive ind i indeks 6, 7, 8, 9, kan vi få en Stack 299 00:13:55,900 --> 00:13:57,960 Overflow fejl. 300 00:13:57,960 --> 00:14:00,510 >> Generelt er det ikke - 301 00:14:00,510 --> 00:14:04,910 vil du sandsynligvis komme i problemer hvis du går over efter en. 302 00:14:04,910 --> 00:14:08,640 Men generelt vil du komme ind i de fleste problemer, hvis du går over af en masse 303 00:14:08,640 --> 00:14:12,770 og du gå så langt over det du skriver over afkastet adressen på 304 00:14:12,770 --> 00:14:16,080 funktion, som er placeret på bunden af ​​stakken rammen. 305 00:14:16,080 --> 00:14:16,520 >> Fordi, right? 306 00:14:16,520 --> 00:14:17,670 Du - i - undskyld. 307 00:14:17,670 --> 00:14:18,550 Ikke ", fordi ret." 308 00:14:18,550 --> 00:14:20,470 >> I stakrammen, har du din lokale variabler. 309 00:14:20,470 --> 00:14:27,090 I selve bunden af ​​stakken rammen er afsenderadressen. 310 00:14:27,090 --> 00:14:28,790 Det er, hvor funktionen går, når det er overstået. 311 00:14:28,790 --> 00:14:33,750 Og hvis du overskriver at afkastet adresse, så når denne stakrammen, 312 00:14:33,750 --> 00:14:36,680 når du går gennem stakken indramme og gennemførelse af hver enkelt linie, er du 313 00:14:36,680 --> 00:14:40,350 kommer til at gå til din nye returadresse der er skrevet der i stedet for 314 00:14:40,350 --> 00:14:40,910 faktiske én. 315 00:14:40,910 --> 00:14:45,050 Og det er, hvordan vi har set visse sikkerhedsmæssige 316 00:14:45,050 --> 00:14:46,780 kan ske med computere. 317 00:14:46,780 --> 00:14:52,760 >> Så stak overflow, kort sagt, er, når du overskrive del i stakken 318 00:14:52,760 --> 00:14:55,440 du skulle bruge, den lokale variabel, du skulle bruge, og 319 00:14:55,440 --> 00:14:58,070 især når du begynder at overskrive vigtige ting som 320 00:14:58,070 --> 00:14:59,100 returnere adresse. 321 00:14:59,100 --> 00:15:00,090 Og det er, hvor du får en fejl. 322 00:15:00,090 --> 00:15:03,980 Eller måske endda du kunne starte selv skriver ind i - 323 00:15:03,980 --> 00:15:05,370 sige binær søgning var lige over main. 324 00:15:05,370 --> 00:15:07,790 Hvis du har overskrevet en masse, du kunne skrive ind i main. 325 00:15:07,790 --> 00:15:10,230 Men generelt, får du en fejl før derefter, fordi computeren ved 326 00:15:10,230 --> 00:15:12,270 du laver noget, du ikke bør gøre. 327 00:15:12,270 --> 00:15:12,560 Ja. 328 00:15:12,560 --> 00:15:13,910 >> STUDENT: Hvad er forskellen mellem en stak 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 mere generisk type 331 00:15:19,420 --> 00:15:20,395 hvad jeg lige har beskrevet. 332 00:15:20,395 --> 00:15:22,610 >> STUDENT: Så en stack overflow er en eksempel på en buffer overflow. 333 00:15:22,610 --> 00:15:23,420 >> JASON HIRSCHHORN: Præcis. 334 00:15:23,420 --> 00:15:28,700 Dette er en matrix, vi kan tænke på som en buffer, et rum for ting at gå i. 335 00:15:28,700 --> 00:15:30,600 Dette er et bufferoverløb i stakken. 336 00:15:30,600 --> 00:15:33,210 Vi kunne have en stakbufferoverløb. 337 00:15:33,210 --> 00:15:36,870 Hvis der var en buffer, hvor der ofte er en matrix bunke, og vi 338 00:15:36,870 --> 00:15:40,600 overskrevet disse grænser, så ville vi har et stakbufferoverløb. 339 00:15:40,600 --> 00:15:44,870 >> Og uden for rammerne af dette kursus, de er opdaget en smule anderledes. 340 00:15:44,870 --> 00:15:48,040 Compileren har særlig afsløring af hver. 341 00:15:48,040 --> 00:15:50,660 Men en buffer overflow er en mere generisk type hvad jeg beskrev, 342 00:15:50,660 --> 00:15:54,090 der var en stak buffer overflow. 343 00:15:54,090 --> 00:15:56,240 Fik at besvare dit spørgsmål? 344 00:15:56,240 --> 00:15:57,910 Sød. 345 00:15:57,910 --> 00:16:01,850 >> Var der andre spørgsmål i forbindelse til stakken eller bunke? 346 00:16:01,850 --> 00:16:04,920 347 00:16:04,920 --> 00:16:05,510 Ja. 348 00:16:05,510 --> 00:16:08,220 >> STUDENT: Jeg ved, du har til frie strenge fordi de er i den bunke 349 00:16:08,220 --> 00:16:09,305 og du ikke ønsker at lække hukommelse. 350 00:16:09,305 --> 00:16:12,240 Men har du til at befri globale variabler og den slags? 351 00:16:12,240 --> 00:16:14,335 Eller bliver de automatisk befriet? 352 00:16:14,335 --> 00:16:15,700 >> JASON HIRSCHHORN: Godt spørgsmål. 353 00:16:15,700 --> 00:16:22,340 Så i CS50.H, skaber vi denne ting for du kaldte en streng. 354 00:16:22,340 --> 00:16:23,800 En streng er virkelig, hvad? 355 00:16:23,800 --> 00:16:24,810 >> STUDENT: Char stjerne. 356 00:16:24,810 --> 00:16:29,180 >> JASON HIRSCHHORN: En char stjerne, en pegepind til en karakter, en pointer til 357 00:16:29,180 --> 00:16:30,650 et array af tegn. 358 00:16:30,650 --> 00:16:32,210 Det er, hvad strengen er. 359 00:16:32,210 --> 00:16:36,050 Så vi har brug for at frigøre det, fordi getString, som vi har brugt en masse - 360 00:16:36,050 --> 00:16:38,370 string name lig getString - 361 00:16:38,370 --> 00:16:43,560 der malloc'erers for os nogle hukommelse på bunke og derefter returnerer en pointer til 362 00:16:43,560 --> 00:16:47,230 første tegn på, at streng, en char stjerne. 363 00:16:47,230 --> 00:16:52,760 >> Så angiveligt, hvis du ikke har været skrive gratis på nogen af ​​dine strenge 364 00:16:52,760 --> 00:16:55,600 at du har kaldt hidtil, har du været utætte noget hukommelse. 365 00:16:55,600 --> 00:16:57,430 Selvfølgelig har vi ikke talt om det, så ingen har fået i 366 00:16:57,430 --> 00:16:58,520 problemer for at gøre det. 367 00:16:58,520 --> 00:16:59,980 Men fremadrettet, ja. 368 00:16:59,980 --> 00:17:03,990 Når du ringer getString, er du mallocing noget plads på den bunke. 369 00:17:03,990 --> 00:17:07,640 Og hvis du ikke ringe gratis senere, at streng, har du en hukommelsesfejl. 370 00:17:07,640 --> 00:17:09,440 At besvare dit spørgsmål? 371 00:17:09,440 --> 00:17:10,606 >> Ja 372 00:17:10,606 --> 00:17:15,020 >> STUDENT: Så for at gøre det, bruger vi gratis lige før gengæld? 373 00:17:15,020 --> 00:17:18,510 Ligesom inden for rammerne af, jeg gætte, hvis vi siger, ligesom, int main, inden 374 00:17:18,510 --> 00:17:24,410 omfanget af den kode, der er inden for de krøllede parenteser, lige før - 375 00:17:24,410 --> 00:17:26,140 du ved, hvor du gerne plejer at lægge tilbage. 376 00:17:26,140 --> 00:17:27,950 Har du sætte fri, før det? 377 00:17:27,950 --> 00:17:31,000 >> JASON HIRSCHHORN: Så du kan sætte fri hvor du ønsker at sætte fri. 378 00:17:31,000 --> 00:17:33,810 Fordi disse er dynamisk allokeret variabler, fordi de kan 379 00:17:33,810 --> 00:17:39,170 bor uden for rammerne af en bestemt funktion, hvis du kalder malloc i en 380 00:17:39,170 --> 00:17:44,140 separat funktion, for eksempel, getString, kan du ringe gratis i main. 381 00:17:44,140 --> 00:17:46,050 Du behøver ikke at kalde det i den specifikke funktion 382 00:17:46,050 --> 00:17:47,570 hvor malloc hedder. 383 00:17:47,570 --> 00:17:50,340 Men du behøver at kalde det før hovedmåltiderne afkast. 384 00:17:50,340 --> 00:17:51,120 >> Og det er virkelig afhængig. 385 00:17:51,120 --> 00:17:54,960 Det afhænger af, hvorfor du malloced at plads i første omgang. 386 00:17:54,960 --> 00:17:57,320 Nogle mennesker vil kalde frigøre temmelig hurtigt. 387 00:17:57,320 --> 00:17:59,220 Nogle mennesker vil ikke kalde frie indtil slutningen af ​​deres program. 388 00:17:59,220 --> 00:18:00,660 Og de vil gå igennem og frie alt. 389 00:18:00,660 --> 00:18:03,597 Det afhænger af, hvorfor du kaldte malloc. 390 00:18:03,597 --> 00:18:11,270 >> STUDENT: Og hvad ville du sige hvis du kaldte brug getString? 391 00:18:11,270 --> 00:18:13,320 Du vil sige fri hvad? 392 00:18:13,320 --> 00:18:20,040 >> JASON HIRSCHHORN: Så syntaksen for fri er simpelthen gratis, open paren tæt 393 00:18:20,040 --> 00:18:22,130 paren, og navnet på markøren. 394 00:18:22,130 --> 00:18:26,410 Så hvis du skriver string name ligemænd getString, du sætte navn på her. 395 00:18:26,410 --> 00:18:27,760 Det er navnet på markøren. 396 00:18:27,760 --> 00:18:30,570 Og det ved at frigøre denne hukommelse. 397 00:18:30,570 --> 00:18:33,920 >> STUDENT: Så når det frigør at hukommelsen, markøren peger fortsat på dette sted 398 00:18:33,920 --> 00:18:34,970 i hukommelsen? 399 00:18:34,970 --> 00:18:39,020 Eller er markøren også tømt for den adresse, den peger på. 400 00:18:39,020 --> 00:18:40,290 >> JASON HIRSCHHORN: Vi skal prøve det. 401 00:18:40,290 --> 00:18:41,430 Vi bør kode,. 402 00:18:41,430 --> 00:18:43,880 Lad os komme tilbage, når vi kommer til kodning, og lad os kode,. 403 00:18:43,880 --> 00:18:46,000 Og hvis du ønsker at finde ud af svaret til det, kan du også kode, 404 00:18:46,000 --> 00:18:46,690 i mellemtiden. 405 00:18:46,690 --> 00:18:49,100 Men det er et godt spørgsmål. 406 00:18:49,100 --> 00:18:53,480 >> STUDENT: Er det muligt at gratis noget for tidligt? 407 00:18:53,480 --> 00:18:58,530 Så du stadig har brug for det for dit program, og du befriede at hukommelsen plads? 408 00:18:58,530 --> 00:18:59,200 >> JASON HIRSCHHORN: Ja. 409 00:18:59,200 --> 00:19:03,020 Det er muligt, hvis du gratis noget og så skal du bruge den igen, vil du 410 00:19:03,020 --> 00:19:06,890 løber ind i en fejl. 411 00:19:06,890 --> 00:19:10,810 Men det er på dig, fordi du befriet noget, og så kaldte det senere. 412 00:19:10,810 --> 00:19:13,940 Så det var en programmør fejltagelse. 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 >> Har du flere spørgsmå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 er meningen at bare frigøre den i almindelighed før 418 00:19:22,820 --> 00:19:25,490 programmet slutter, betyder det, hvis Programmet slutter, og du behøver ikke slippe det, 419 00:19:25,490 --> 00:19:27,580 at hukommelsen er stadig fordelt? 420 00:19:27,580 --> 00:19:31,330 >> JASON HIRSCHHORN: Hvis dit program slutter og du glemmer at frigøre noget, så 421 00:19:31,330 --> 00:19:34,390 at hukommelsen blev tildelt hele levetiden af ​​dit program. 422 00:19:34,390 --> 00:19:37,670 Når dit program lukkes fuldstændigt, at hukommelsen ikke vil 423 00:19:37,670 --> 00:19:39,490 at blive der for evigt. 424 00:19:39,490 --> 00:19:42,080 Computeren er smart nok til at vide at når programmet lukker det 425 00:19:42,080 --> 00:19:46,440 skal slippe af med al den hukommelse, var forbundet med det pågældende program. 426 00:19:46,440 --> 00:19:51,240 >> Men der er værktøjer, du kan køre om et program til at opdage, om, hvornår den 427 00:19:51,240 --> 00:19:54,720 program er færdig, du har glemt for at frigøre hukommelse. 428 00:19:54,720 --> 00:19:57,960 Og til din næste problem sæt hvor du skal bruge malloc og bruge 429 00:19:57,960 --> 00:20:02,610 pegepinde, vil du køre dette programmere på dit program for at se om, 430 00:20:02,610 --> 00:20:06,530 når de vigtigste afkast, du havde nogle ting, der blev efterladt unfreed. 431 00:20:06,530 --> 00:20:09,130 >> Så de kommer ikke til at bo malloced evigt i din computer. 432 00:20:09,130 --> 00:20:11,720 Det ville være uøkonomisk, fordi meget hurtigt, computere 433 00:20:11,720 --> 00:20:12,960 ville løbe tør for hukommelse. 434 00:20:12,960 --> 00:20:16,450 Men hvis de kører indtil udgangen af ​​din programmere og de er ikke frigivet og din 435 00:20:16,450 --> 00:20:20,260 Programmet afsluttes, det er stadig et problem at dette værktøj vil hjælpe dig med at 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 kaldet 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 behøver ikke at kende at for quiz, selv? 440 00:20:25,780 --> 00:20:27,600 Jeg mener, det blev talt om en lille smule i foredraget. 441 00:20:27,600 --> 00:20:33,600 >> JASON HIRSCHHORN: So Valgrind er navnet på dette værktøj. 442 00:20:33,600 --> 00:20:37,180 At vide, hvad det gør, er nok til quizzen. 443 00:20:37,180 --> 00:20:40,200 Men du har ikke brugt det endnu på din problem indstillet, fordi vi ikke har haft en 444 00:20:40,200 --> 00:20:43,520 problem sæt, der har udtrykkeligt behandlet med malloc eller du bruge malloc. 445 00:20:43,520 --> 00:20:45,330 Så du har ikke brugt Valgrind endnu. 446 00:20:45,330 --> 00:20:47,760 Men du vil bruge det før snarere end senere. 447 00:20:47,760 --> 00:20:48,710 >> STUDENT: Kan du gentage hvad Valgrind er? 448 00:20:48,710 --> 00:20:49,190 >> JASON HIRSCHHORN: Undskyld? 449 00:20:49,190 --> 00:20:51,240 >> STUDENT: Kan du gentage det formålet 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 Ligesom GDB hjælper dig med debug dit program, Valgrind hjælper dig med at finde ud af, om 452 00:20:59,890 --> 00:21:03,210 tingene er ikke blevet løsladt når dit program lukker. 453 00:21:03,210 --> 00:21:05,110 Så du køre det på dit program. 454 00:21:05,110 --> 00:21:09,230 Og dit program færdiggøres, og det vil sige Deres program kaldet malloc dette mange 455 00:21:09,230 --> 00:21:13,670 tider for så mange bytes, og du kun kaldes gratis dette mange gange. 456 00:21:13,670 --> 00:21:16,520 Og så du forlod disse mange bytes uden at blive frigjort. 457 00:21:16,520 --> 00:21:18,050 Eller det vil sige, du har befriet alt. 458 00:21:18,050 --> 00:21:19,070 Godt arbejde. 459 00:21:19,070 --> 00:21:19,480 >> STUDENT: OK. 460 00:21:19,480 --> 00:21:21,060 Og det hedder 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ørgsmål om pointers. 463 00:21:25,970 --> 00:21:30,080 Så siger du har n stjerne x lig noget. 464 00:21:30,080 --> 00:21:33,330 Det svarer, uanset hvad du putter der, er, at hvad der bliver sat ind 465 00:21:33,330 --> 00:21:36,120 hvad x peger på, eller markøren af ​​x? 466 00:21:36,120 --> 00:21:37,690 >> JASON HIRSCHHORN: Kan du gentage spørgsmålet? 467 00:21:37,690 --> 00:21:39,340 Kan vi trække det, mens du siger det? 468 00:21:39,340 --> 00:21:42,710 >> STUDENT: I ​​quizzen, faktisk, det en du har sendt os, det var ligesom, char 469 00:21:42,710 --> 00:21:46,520 stjerne sandhed lig CS50 klipper, right? 470 00:21:46,520 --> 00:21:52,190 Så betyder det, at denne CS50 rocks er, hvad sandheden peger på? 471 00:21:52,190 --> 00:21:55,810 >> JASON HIRSCHHORN: Så du taler om en char stjerne i en streng, hvordan 472 00:21:55,810 --> 00:21:56,460 der virker? 473 00:21:56,460 --> 00:21:56,890 Ja. 474 00:21:56,890 --> 00:21:57,700 OK. 475 00:21:57,700 --> 00:21:59,140 Lad os trække det herovre. 476 00:21:59,140 --> 00:22:07,100 >> [SIDE SAMTALE] 477 00:22:07,100 --> 00:22:11,130 >> JASON HIRSCHHORN: Så denne variabel kommer til at være af typen char stjerne. 478 00:22:11,130 --> 00:22:14,580 Hvor stor er en variabel af typen char stjerne? 479 00:22:14,580 --> 00:22:15,510 Hvor mange bytes? 480 00:22:15,510 --> 00:22:16,450 >> STUDERENDE: fire. 481 00:22:16,450 --> 00:22:18,210 >> JASON HIRSCHHORN: Det er fire bytes. 482 00:22:18,210 --> 00:22:21,420 Hvor mange rettigheder er en variabel af typen int stjerne? 483 00:22:21,420 --> 00:22:22,210 >> STUDERENDE: fire. 484 00:22:22,210 --> 00:22:24,910 >> JASON HIRSCHHORN: Fire byte. 485 00:22:24,910 --> 00:22:28,280 Hvis det er en pegepind, så er det altid fire bytes, da pegepinde, deres 486 00:22:28,280 --> 00:22:30,070 værdi er en hukommelse adresse. 487 00:22:30,070 --> 00:22:35,160 Og hukommelse adresser på CS50 Apparatet er fire bytes lange. 488 00:22:35,160 --> 00:22:42,900 Så når vi kalder getString, eller når vi siger, strengNavn lig, og derefter i 489 00:22:42,900 --> 00:22:46,140 anførselstegn sætte en snor, vi sætter - 490 00:22:46,140 --> 00:22:46,920 godt, det er lidt anderledes. 491 00:22:46,920 --> 00:22:48,630 Vi vil gøre getString som eksempel. 492 00:22:48,630 --> 00:22:52,150 Eller char stjerne noget lig strengen. 493 00:22:52,150 --> 00:22:54,360 Beklager, giv mig et eksempel at du læser? 494 00:22:54,360 --> 00:22:57,590 >> STUDENT: char stjerne sandhed lig "CS50 rocks" i anførselstegn. 495 00:22:57,590 --> 00:23:02,260 >> JASON HIRSCHHORN: Så denne stjerne, dette vi vil kalde denne variabel x for vores 496 00:23:02,260 --> 00:23:04,060 generiske formål. 497 00:23:04,060 --> 00:23:05,970 Vi har oprettet en variabel kaldet 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 pointer til en række tegn. 500 00:23:10,950 --> 00:23:12,200 Så hernede - 501 00:23:12,200 --> 00:23:23,710 502 00:23:23,710 --> 00:23:25,890 >> Så dette er, hvordan dette ville arbejde i hukommelsen. 503 00:23:25,890 --> 00:23:27,410 Dette ville lagre en hukommelse adresse. 504 00:23:27,410 --> 00:23:31,770 Det ville gemme lageradresse for det første tegn i array. 505 00:23:31,770 --> 00:23:33,830 Og så når du har fulgt markøren, ville du 506 00:23:33,830 --> 00:23:35,200 få det første tegn. 507 00:23:35,200 --> 00:23:38,780 >> Og hvis du læser dette ting som en streng, din computer er smart 508 00:23:38,780 --> 00:23:42,930 nok til at vide, at læse det hele indtil det bliver til en modreaktion 0. 509 00:23:42,930 --> 00:23:45,530 Men hvis du læser det et tegn på gangen, så du iteration gennem 510 00:23:45,530 --> 00:23:49,910 denne streng, så vil du bare læse en tegn ad gangen, indtil du kommer til 511 00:23:49,910 --> 00:23:50,850 backslash 0. 512 00:23:50,850 --> 00:23:52,335 Det er måske ikke besvare dit spørgsmål, selv om. 513 00:23:52,335 --> 00:23:55,610 >> STUDENT: Ja, men du ikke har malloced at rummet 514 00:23:55,610 --> 00:23:58,400 men for denne pegepind. 515 00:23:58,400 --> 00:24:02,510 >> JASON HIRSCHHORN: Så jeg er ikke helt sikker præcis, hvad du kigger på, 516 00:24:02,510 --> 00:24:03,640 fordi jeg ikke gøre denne quiz. 517 00:24:03,640 --> 00:24:06,370 Det skulle være et nyttigt ressource fra en anden TF. 518 00:24:06,370 --> 00:24:11,380 Hvis du opretter en streng på stakke eller som en lokal variabel, vil det 519 00:24:11,380 --> 00:24:16,920 bare være vifte af afgifter snarere end generelt en char stjerne peger på 520 00:24:16,920 --> 00:24:18,600 en anden streng. 521 00:24:18,600 --> 00:24:20,550 Men jeg ved det ikke. 522 00:24:20,550 --> 00:24:25,065 Det kunne være en pegepind til en anden streng på stakken samt. 523 00:24:25,065 --> 00:24:27,240 Ja. 524 00:24:27,240 --> 00:24:31,116 >> STUDENT: Jeg ved, at du har brug for at allokere hukommelse, hvis markøren er 525 00:24:31,116 --> 00:24:33,360 blive erklæret inde en anden funktion. 526 00:24:33,360 --> 00:24:36,740 Har du brug for at gøre det samme, hvis det er blive erklæret inde i hoved, 527 00:24:36,740 --> 00:24:39,570 du bruger det inde i hoved? 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 pointer til enhver hukommelse adresse i hukommelsen. 530 00:24:46,670 --> 00:24:51,440 Det kan være lageradresse for en lokal variabel, men oftentimes, 531 00:24:51,440 --> 00:24:55,760 folk ikke erklære hukommelse adresser til de lokale variable, fordi de går 532 00:24:55,760 --> 00:24:59,890 væk, når denne funktion returnerer, som Derfor er vi generelt malloc ting. 533 00:24:59,890 --> 00:25:04,630 Men ja, du kunne erklære en pegepind til en anden 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 tage et kig på det specifik ting efter klasse. 536 00:25:09,480 --> 00:25:10,650 Ja. 537 00:25:10,650 --> 00:25:12,350 >> STUDENT: Jeg tror, ​​det er en slags af, hvad der bliver spurgt. 538 00:25:12,350 --> 00:25:16,930 Det synes mærkeligt at initialisering en pointer ikke som en 539 00:25:16,930 --> 00:25:20,760 adresse, men som det virker som en værdi. 540 00:25:20,760 --> 00:25:25,970 Det ser ud som det CS50 er, hvad der er indeni de ting der pegede på, og 541 00:25:25,970 --> 00:25:28,820 ikke den faktiske adresse, right? 542 00:25:28,820 --> 00:25:30,520 >> JASON HIRSCHHORN: Så det er ikke tilfældet, selv om. 543 00:25:30,520 --> 00:25:32,470 Det er ikke hvad der sker. 544 00:25:32,470 --> 00:25:35,910 Når du erklærer en char stjerne, det er en hukommelse adresse. 545 00:25:35,910 --> 00:25:38,860 Pointers er alle hukommelse adresser peger på noget andet. 546 00:25:38,860 --> 00:25:41,480 At noget andet kan være på stakken, men næsten altid er på 547 00:25:41,480 --> 00:25:43,440 bunke på den måde, vi vil se det brugt. 548 00:25:43,440 --> 00:25:46,860 549 00:25:46,860 --> 00:25:53,500 Men strengNavn lig anførselstegn "GetString," vi kan se, at vi 550 00:25:53,500 --> 00:25:55,010 kan se gennem det og kode det. 551 00:25:55,010 --> 00:26:01,190 getString streng bliver ikke gemt i denne variabel, eller hvad strengen 552 00:26:01,190 --> 00:26:04,580 navn ikke bliver gemt i denne variabel, fordi det er ikke sådan 553 00:26:04,580 --> 00:26:06,070 pointere virker. 554 00:26:06,070 --> 00:26:06,770 Giver det mening? 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åbentlig, det var ikke forvirrende for nogen. 558 00:26:11,690 --> 00:26:15,732 Men hvis det var, kan vi se på det igen i en smule, fordi vi faktisk kommer 559 00:26:15,732 --> 00:26:19,240 at kode noget, som forhåbentlig vil arbejde med strygere og hjælpe dig til at føle 560 00:26:19,240 --> 00:26:22,170 mere komfortabel med dem. 561 00:26:22,170 --> 00:26:24,869 >> Alle andre spørgsmål i forbindelse med disse emner eller andre emner, 562 00:26:24,869 --> 00:26:26,119 Jeg vil sætte op igen? 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 lige nu. 566 00:26:36,310 --> 00:26:37,630 Ja, Alden. 567 00:26:37,630 --> 00:26:39,860 >> ALDEN: Så det er helt uafhængige, men kan vi bare gå over 568 00:26:39,860 --> 00:26:42,760 virkelig hurtigt, hvad vi behøver at vide om forskellen mellem en 32 og 569 00:26:42,760 --> 00:26:46,345 64-bit maskine? 570 00:26:46,345 --> 00:26:47,740 >> JASON HIRSCHHORN: Ja. 571 00:26:47,740 --> 00:26:52,111 Så 32 bit er, hvor mange bytes? 572 00:26:52,111 --> 00:26:53,060 >> ALDEN: Det er fire bytes. 573 00:26:53,060 --> 00:26:54,360 >> JASON HIRSCHHORN: Det er fire bytes. 574 00:26:54,360 --> 00:26:58,420 Og 64 bit er, hvor mange bytes? 575 00:26:58,420 --> 00:26:59,112 >> STUDENT: Otte. 576 00:26:59,112 --> 00:27:00,610 >> JASON HIRSCHHORN: Otte byte. 577 00:27:00,610 --> 00:27:03,980 Så igen, otte bits er én byte. 578 00:27:03,980 --> 00:27:08,340 Din CS50 apparatet en 32-bit maskine. 579 00:27:08,340 --> 00:27:13,650 Så hukommelse adresser er fire bytes lange. 580 00:27:13,650 --> 00:27:17,460 Der er 2 til 32 hukommelse adresser. 581 00:27:17,460 --> 00:27:21,310 0 til 2 til 32 minus 1. 582 00:27:21,310 --> 00:27:27,630 Og jeg er ikke positivt, men det er sandsynligvis rammerne af, hvad du har brug for 583 00:27:27,630 --> 00:27:35,230 kender til en 32-bit maskine, at hukommelsen adresser er igen fire bytes langt, 584 00:27:35,230 --> 00:27:39,620 og det er det maksimale beløb, af hukommelse adresser. 585 00:27:39,620 --> 00:27:41,680 >> Også datatyper - 586 00:27:41,680 --> 00:27:45,020 dette kan være noget så godt det er værd at bemærke. 587 00:27:45,020 --> 00:27:49,610 Størrelsen af ​​en datatype afhænger den maskine, du arbejder med. 588 00:27:49,610 --> 00:27:56,760 Så en char, en enkelt karakter, er, hvordan mange bytes på vores CS50 apparat? 589 00:27:56,760 --> 00:27:57,980 Én byte. 590 00:27:57,980 --> 00:28:02,310 Og det er faktisk en byte som brønd på en 64-bit maskine. 591 00:28:02,310 --> 00:28:05,920 >> Og de fleste datatyper er det samme antal af bytes på begge maskiner. 592 00:28:05,920 --> 00:28:11,620 Men nogle datatyper vil være anderledes på begge maskiner. 593 00:28:11,620 --> 00:28:14,590 Så det ville være potentielt eneste, du behøver at vide. 594 00:28:14,590 --> 00:28:16,710 >> Men selv det, tror jeg, er ud over grænserne - 595 00:28:16,710 --> 00:28:20,990 Jeg er næsten positivt, hvis man ser tilbage på gamle quizzer, det siger, påtage sig 596 00:28:20,990 --> 00:28:24,090 kodning problemer, du bruger en 32-bit maskine. 597 00:28:24,090 --> 00:28:26,620 598 00:28:26,620 --> 00:28:30,620 Men der er, til at gå sammen med, at der i hvis du er interesseret, er der 599 00:28:30,620 --> 00:28:35,920 datatyper, der er de samme størrelse på alle maskiner. 600 00:28:35,920 --> 00:28:42,670 >> Hvis du har set noget lignende uint32_t, måske eller måske du 601 00:28:42,670 --> 00:28:43,260 ikke har set det. 602 00:28:43,260 --> 00:28:44,290 Det er en datatype. 603 00:28:44,290 --> 00:28:47,570 Det siger, være 32 bit, uanset hvilken maskine det er tændt. 604 00:28:47,570 --> 00:28:50,350 Så når folk skriver bærbare kode, de sandsynligvis ikke vil bruge ints. 605 00:28:50,350 --> 00:28:53,260 De vil i stedet bruge disse andre data typer, som de ved, vil være den samme 606 00:28:53,260 --> 00:28:54,780 størrelse på hver enkelt maskine. 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 havde et spørgsmål om udarbejdelse processen. 610 00:29:00,150 --> 00:29:04,110 Så hvis du skriver et program, der bruger et bibliotek ligesom CS50 eller noget 611 00:29:04,110 --> 00:29:06,840 gerne, at jeg ved, at biblioteket skal på et tidspunkt være 612 00:29:06,840 --> 00:29:08,590 kompileret og sammenkædet i. 613 00:29:08,590 --> 00:29:13,380 Men hvor meget af det sker i løbet af udarbejdelse af dit program? 614 00:29:13,380 --> 00:29:15,880 Hvilken del af dette bibliotek proces opstår, når du er 615 00:29:15,880 --> 00:29:18,560 kompilere dit eget program? 616 00:29:18,560 --> 00:29:24,020 >> JASON HIRSCHHORN: Så lad os gå over generelt de trin i denne proces. 617 00:29:24,020 --> 00:29:26,280 Du skriver din. C-fil. 618 00:29:26,280 --> 00:29:33,530 I din. C-fil, du # include din header biblioteker, for eksempel, cs50.h. 619 00:29:33,530 --> 00:29:39,480 Hvad gør det skarpe omfatte linje gøre for dit program? 620 00:29:39,480 --> 00:29:40,525 Akchar. 621 00:29:40,525 --> 00:29:43,350 >> AKCHAR: Det tilføjer prototyper af funktionerne fra header 622 00:29:43,350 --> 00:29:45,120 filer i bibliotekerne. 623 00:29:45,120 --> 00:29:45,600 >> JASON HIRSCHHORN: Præcis. 624 00:29:45,600 --> 00:29:49,870 Det tilføjer disse funktions prototyper til din kode. 625 00:29:49,870 --> 00:29:55,230 Så når din kode bliver kompileret i de tidlige stadier, oversætteren kender 626 00:29:55,230 --> 00:29:59,250 at disse funktioner virkelig eksisterer, og at et sted de er blevet defineret. 627 00:29:59,250 --> 00:30:02,460 De. H filerne omfatter ikke definitioner for disse funktioner, eller hvordan 628 00:30:02,460 --> 00:30:03,950 de rent faktisk arbejder. 629 00:30:03,950 --> 00:30:07,960 Cs50.h bare indeholder noget, der siger getString er en reel ting, 630 00:30:07,960 --> 00:30:09,270 kan ske. 631 00:30:09,270 --> 00:30:14,240 Og standardio.h siger printf er en ægte ting, der kan ske. 632 00:30:14,240 --> 00:30:23,190 >> Så din C-sprog med dette. Header fil bliver forvandlet til nogle 633 00:30:23,190 --> 00:30:27,750 maskinlæsbare kode, som til sidst bliver forvandlet til binær 634 00:30:27,750 --> 00:30:30,030 kode, 0 s og 1 s. 635 00:30:30,030 --> 00:30:33,590 Og det er den kode, der i sidste ende bliver henrettet. 636 00:30:33,590 --> 00:30:38,550 -L CS50 line - for eksempel, når du skriver Dunk - 637 00:30:38,550 --> 00:30:41,830 og så skal du medtage-l CS50, du skriver det i. 638 00:30:41,830 --> 00:30:42,180 Og du kan se, at. 639 00:30:42,180 --> 00:30:43,890 Når du skriver at gøre, vil du se, at line op her. 640 00:30:43,890 --> 00:30:47,740 Og vi vil se, at i et sekund, når vi kode eller senere, når vi kode. 641 00:30:47,740 --> 00:30:50,390 >> Men der-l CS50 linje gør noget en smule anderledes end 642 00:30:50,390 --> 00:30:52,440 # include cs50.h. 643 00:30:52,440 --> 00:30:56,300 Hvad betyder det-l CS50 linje gøre? 644 00:30:56,300 --> 00:30:56,820 Avi? 645 00:30:56,820 --> 00:31:00,310 >> AVI: Jeg vil gerne sige, at det forbinder biblioteket til funktionen 646 00:31:00,310 --> 00:31:02,710 ringe, ligesom. o filer. 647 00:31:02,710 --> 00:31:08,200 >> JASON HIRSCHHORN: Så meget tæt på, hvis ikke spot-on. 648 00:31:08,200 --> 00:31:16,220 The-l CS50 tager den binære fil og fusionerer det med din binære fil. 649 00:31:16,220 --> 00:31:21,410 Så cs50.h, er der ingen mening i at vende cs50.h fra C-sprog til binær hver 650 00:31:21,410 --> 00:31:23,130 eneste gang det bliver brugt. 651 00:31:23,130 --> 00:31:26,650 Det ville være dumt, fordi det ville spilde en masse tid. 652 00:31:26,650 --> 00:31:30,420 Så det er allerede blevet udarbejdet og forvandlet til en eksekverbar. 653 00:31:30,420 --> 00:31:35,430 Og nu er det kommer til at blive lagt sammen med din fil i slutningen. 654 00:31:35,430 --> 00:31:38,370 Så de 1 og 0'er går at fusionere med dine dem 655 00:31:38,370 --> 00:31:39,150 og 0'er i slutningen. 656 00:31:39,150 --> 00:31:43,670 Så nu har du faktisk har den faktiske 1 og 0'er, der definerer, hvordan getString, 657 00:31:43,670 --> 00:31:47,890 for eksempel virker, eller hvordan printf, for eksempel virker. 658 00:31:47,890 --> 00:31:52,750 >> Og for mere information, er der en korte compilere, der Nate giver at 659 00:31:52,750 --> 00:31:55,410 bør du tjekke, der går gennem disse trin. 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 altid i o-filer. når de er i biblioteket form 663 00:32:01,700 --> 00:32:06,764 klar til at blive lagt sammen, forbundet - ligesom de er i den binære kode? 664 00:32:06,764 --> 00:32:07,600 >> JASON HIRSCHHORN: OK. 665 00:32:07,600 --> 00:32:08,420 Hvad - 666 00:32:08,420 --> 00:32:11,780 >> STUDENT: Er det altid tilfældet for bibliotekerne, når du linker dem? 667 00:32:11,780 --> 00:32:12,500 >> JASON HIRSCHHORN: Ja. 668 00:32:12,500 --> 00:32:17,300 Så der er. S filer, som vil være maskinkode, hvilket også vil være 669 00:32:17,300 --> 00:32:17,975 kryptisk for dig. 670 00:32:17,975 --> 00:32:19,410 Du behøver ikke at bekymre sig om dem. 671 00:32:19,410 --> 00:32:24,930 Men generelt, ja, de vil være i. o filer klar til at gå. 672 00:32:24,930 --> 00:32:27,170 >> STUDENT: Så når du sender til et bibliotek, behøver du kun sende 673 00:32:27,170 --> 00:32:28,880 den. h og. o? 674 00:32:28,880 --> 00:32:32,210 Du behøver ikke sende den. C eller den. Sek. 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 så godt, hvis denne information synes at komme et 677 00:32:36,260 --> 00:32:36,700 lidt hurtigt. 678 00:32:36,700 --> 00:32:39,870 Men det korte af compilere taler om det så godt. 679 00:32:39,870 --> 00:32:43,290 Når du sender et bibliotek, hvis du sender den. h, header fil, der 680 00:32:43,290 --> 00:32:46,290 funktion prototyper og 1 s og 0'er, det er alt hvad du behøver at give. 681 00:32:46,290 --> 00:32:50,640 Du behøver ikke at give, hvordan Funktionen virker, den. c-fil. 682 00:32:50,640 --> 00:32:56,360 Fordi indvindingsstedet eller pege API'er, det punkt, denne SPL, 683 00:32:56,360 --> 00:32:59,650 Stanford bærbare bibliotek, det er for du ikke at bekymre dig om, hvordan nye 684 00:32:59,650 --> 00:33:04,220 GRect virker, eller hvordan flytte værker, eller hvordan tilføjer værker. 685 00:33:04,220 --> 00:33:06,520 Alt du behøver at vide er, at add er en funktion, som du kan 686 00:33:06,520 --> 00:33:08,880 bruge, og det gør dette. 687 00:33:08,880 --> 00:33:12,760 Så du virkelig behøver ikke at vide, hvordan det er skrevet i C. Du skal blot 688 00:33:12,760 --> 00:33:15,460 vide, her er de funktioner, hvad de gøre, og her er de 1 og 0'er 689 00:33:15,460 --> 00:33:18,870 når du virkelig ønsker at bruge dem. 690 00:33:18,870 --> 00:33:19,530 >> Fedt. 691 00:33:19,530 --> 00:33:26,980 Har du flere spørgsmål om compilere eller andre emner på bordet? 692 00:33:26,980 --> 00:33:30,300 >> STUDENT: Jeg har et spørgsmål om gennemførelse af rekursive funktioner. 693 00:33:30,300 --> 00:33:31,170 Et spørgsmål om rekursion. 694 00:33:31,170 --> 00:33:33,030 Jeg havde en fornemmelse af, at ville komme op. 695 00:33:33,030 --> 00:33:38,310 Så lad os hurtigt gå igennem rekursion med en specifik 696 00:33:38,310 --> 00:33:40,690 eksempel en faktoriel funktion. 697 00:33:40,690 --> 00:33:44,920 Da dette er et eksempel, ofte kommer op eller bruges 698 00:33:44,920 --> 00:33:46,170 at illustrere rekursion. 699 00:33:46,170 --> 00:33:52,390 700 00:33:52,390 --> 00:33:56,410 >> Så "4!" læses som 4 fakultet. 701 00:33:56,410 --> 00:33:59,120 Og hvad betyder 4 factorial betyde? 702 00:33:59,120 --> 00:34:00,696 Hvad betyder det så? 703 00:34:00,696 --> 00:34:02,235 Hvordan beregner man 4 factorial? 704 00:34:02,235 --> 00:34:05,250 705 00:34:05,250 --> 00:34:07,960 4 gange 3 gange 2 gange 1. 706 00:34:07,960 --> 00:34:11,889 >> Så en anden måde at skrive 4 faktoriel er at skrive dette. 707 00:34:11,889 --> 00:34:16,780 708 00:34:16,780 --> 00:34:19,022 4 gange 3 fakultet. 709 00:34:19,022 --> 00:34:22,080 Fordi 3 factorial er 3 gange 2 gange 1. 710 00:34:22,080 --> 00:34:27,580 Så 4 gange 3 factorial er 4 gange 3 gange 2 gange 1. 711 00:34:27,580 --> 00:34:32,679 Dette er grunden til fakultet er en stor kandidat til rekursion, fordi det er 712 00:34:32,679 --> 00:34:36,630 klart, at der er noget, sker igen og igen og igen på en 713 00:34:36,630 --> 00:34:39,820 mindre antal ting, indtil du når til slutningen. 714 00:34:39,820 --> 00:34:42,570 Når du når 1, 1 fakultet er 1.. 715 00:34:42,570 --> 00:34:43,719 Du kan ikke gå meget længere. 716 00:34:43,719 --> 00:34:47,219 0 factorial er også defineret som 1. 717 00:34:47,219 --> 00:34:50,679 Så når du kommer til 1 eller 0, er du i slutningen, og du kan 718 00:34:50,679 --> 00:34:53,219 begynder at gå op igen. 719 00:34:53,219 --> 00:34:59,540 Så hvis vi ønskede at skrive en rekursiv funktion til at beregne en faktorielt, 720 00:34:59,540 --> 00:35:02,170 vi kommer til at skrive nogle pseudokode til nu. 721 00:35:02,170 --> 00:35:03,300 Før vi skriver, at pseudokode - 722 00:35:03,300 --> 00:35:05,660 Jeg vil give jer et par minutter at skrive pseudo-kode eller bare tænke 723 00:35:05,660 --> 00:35:09,600 om det - der er to ting hver rekursiv funktion behov. 724 00:35:09,600 --> 00:35:12,530 Hvad er de to ting? 725 00:35:12,530 --> 00:35:13,220 >> JACK: Det har at kalde sig selv. 726 00:35:13,220 --> 00:35:13,680 >> JASON HIRSCHHORN: Noah? 727 00:35:13,680 --> 00:35:14,460 Åh, Jack. 728 00:35:14,460 --> 00:35:15,100 Værsgo. 729 00:35:15,100 --> 00:35:16,640 >> JACK: Det har at kalde sig selv. 730 00:35:16,640 --> 00:35:19,220 >> JASON HIRSCHHORN: Så en rekursiv funktion kræver en rekursivt kald, en 731 00:35:19,220 --> 00:35:20,220 kalde til sig selv. 732 00:35:20,220 --> 00:35:20,770 Det er en. 733 00:35:20,770 --> 00:35:21,510 Og hvad er den anden ting? 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 funktion bliver kaldt. 738 00:35:29,510 --> 00:35:31,410 Basen sag kommer først. 739 00:35:31,410 --> 00:35:33,710 Du vil gerne vide, hvis du er i slutningen. 740 00:35:33,710 --> 00:35:37,110 Og hvis du ikke er i slutningen, du gøre din rekursivt kald. 741 00:35:37,110 --> 00:35:39,880 Og du går gennem denne funktion igen, tjek din base case igen. 742 00:35:39,880 --> 00:35:42,575 Hvis du ikke er slutningen, du laver en anden rekursivt kald, 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 funktioner altid brug for disse base-sager og de 745 00:35:47,110 --> 00:35:48,210 rekursive kald. 746 00:35:48,210 --> 00:35:51,280 Hvis du ikke har et rekursivt kald, det ville ikke være en rekursiv funktion. 747 00:35:51,280 --> 00:35:53,210 Hvis du ikke har en base case, ville du gå for evigt og 748 00:35:53,210 --> 00:35:54,780 der ville være nogen slutning. 749 00:35:54,780 --> 00:35:57,870 Og grundscenariet altid kommer først, fordi du altid vil kontrollere 750 00:35:57,870 --> 00:36:00,420 hvis du er i slutningen først. 751 00:36:00,420 --> 00:36:04,770 Så før vi gør noget pseudokode, hvorfor tager du ikke et øjeblik til at tænke over 752 00:36:04,770 --> 00:36:09,360 hvordan en rekursiv faktoriel funktion ville blive skrevet? 753 00:36:09,360 --> 00:36:23,340 754 00:36:23,340 --> 00:36:26,010 >> Også så mange som du gør, skrivning det ud på et ark papir 755 00:36:26,010 --> 00:36:27,960 hvad du nødt til at gøre på quizzen i morgen. 756 00:36:27,960 --> 00:36:32,160 Så nok en god ide at gøre sikker på koden du skriver 757 00:36:32,160 --> 00:36:34,420 ned på papiret - 758 00:36:34,420 --> 00:36:35,160 eller du kan gøre det. 759 00:36:35,160 --> 00:36:36,710 Du ved, hvor de semikoloner 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 at have en compiler fortælle du har lavet en fejl. 762 00:36:40,400 --> 00:37:02,356 763 00:37:02,356 --> 00:37:07,240 >> Også langs disse linjer, i morgen, når du har kodning problemer, hvis du 764 00:37:07,240 --> 00:37:11,490 er skyndte til tiden, eller hvis du er meget forvirret, hvordan du skulle 765 00:37:11,490 --> 00:37:16,030 skrive bestemt ting i C, det ville behoove dig at skrive pseudo-kode 766 00:37:16,030 --> 00:37:18,160 eller skrive kommentarer på så godt. 767 00:37:18,160 --> 00:37:21,940 Fordi der er en delvis kredit for en masse af spørgsmålene på quizzen. 768 00:37:21,940 --> 00:37:24,840 Så du kan være forhastet, eller du måske bare blive forvirret. 769 00:37:24,840 --> 00:37:28,030 Skrivning i kommentarer eller pseudo-kode er ofte måder, du 770 00:37:28,030 --> 00:37:29,360 kan få delvis kredit. 771 00:37:29,360 --> 00:37:31,440 >> Så du skal ikke efterlade noget blank på quizzen. 772 00:37:31,440 --> 00:37:33,490 Der er ingen sanktioner for lægge ting i. 773 00:37:33,490 --> 00:37:37,650 I virkeligheden, i færd med pseudo-kode eller kommentarer vil hjælpe grader 774 00:37:37,650 --> 00:37:40,410 regne ud, hvis du rent faktisk ved, hvad du taler om, og måske pris 775 00:37:40,410 --> 00:37:42,030 dig nogle delvis kredit for. 776 00:37:42,030 --> 00:37:44,510 >> Også langs disse linjer, skrive klart. 777 00:37:44,510 --> 00:37:47,650 Hvis vi kan ikke rigtig, hvad du skriver, Vi kommer ikke til at ringe til dig 778 00:37:47,650 --> 00:37:49,900 ved midnat i morgen til figur ud af, hvad du skrev. 779 00:37:49,900 --> 00:37:51,520 Vi vil bare tage off point. 780 00:37:51,520 --> 00:37:56,570 Skriv tydeligt, så vi kan høre, eller rettere, Vi kan læse, hvad du skrev. 781 00:37:56,570 --> 00:38:00,230 >> Og hvis det siger to sætninger, ikke skrive et afsnit. 782 00:38:00,230 --> 00:38:02,280 Følg instruktionerne. 783 00:38:02,280 --> 00:38:03,500 Skriv tydeligt. 784 00:38:03,500 --> 00:38:07,720 Og skrive i disse bemærkninger eller pseudokode for spørgsmål, der kunne 785 00:38:07,720 --> 00:38:10,270 tildele delvis kredit. 786 00:38:10,270 --> 00:38:12,520 >> OK, lad os gå til faktoriel. 787 00:38:12,520 --> 00:38:15,000 Så vi har en funktion faktorielt. 788 00:38:15,000 --> 00:38:18,400 789 00:38:18,400 --> 00:38:21,550 Hvis jeg skulle faktisk skrive dette i C, hvad skal jeg bruge til at sætte før navnet 790 00:38:21,550 --> 00:38:22,800 af funktionen? 791 00:38:22,800 --> 00:38:24,880 792 00:38:24,880 --> 00:38:30,060 Returtypen, som i denne tilfælde, vil vi give det int. 793 00:38:30,060 --> 00:38:35,450 Og så inde i de krøllede parenteser, er hvad der foregår inde i de krøllede parenteser for 794 00:38:35,450 --> 00:38:36,850 en funktion? 795 00:38:36,850 --> 00:38:37,950 >> STUDERENDE: 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å factorial vil sandsynligvis tage et argument. 798 00:38:42,680 --> 00:38:44,500 Det vil formentlig kun tage ét argument. 799 00:38:44,500 --> 00:38:49,450 Og vi vil sige det vil tage et heltal kaldet x. 800 00:38:49,450 --> 00:38:52,770 Og igen, når du skriver prototypen på en funktion eller skrive den funktion 801 00:38:52,770 --> 00:38:57,110 i din kode, før at definere det, du skrive datatype og navnet på 802 00:38:57,110 --> 00:39:01,370 denne variabel for kun denne funktion. 803 00:39:01,370 --> 00:39:06,350 Så du kan videregive nogle tal ind i denne funktion, vil det blive omtalt som x 804 00:39:06,350 --> 00:39:07,340 internt. 805 00:39:07,340 --> 00:39:08,755 >> Vi har vores fakultet funktion. 806 00:39:08,755 --> 00:39:12,030 807 00:39:12,030 --> 00:39:15,850 Vi har brug for to ting, en base case og et rekursivt kald. 808 00:39:15,850 --> 00:39:20,900 Hvad er grundlaget tilfældet for fakultet? 809 00:39:20,900 --> 00:39:24,850 Nogen der skrev det ud, og hvem der ikke har talt endnu, hvad er base 810 00:39:24,850 --> 00:39:26,100 tilfældet for factorial? 811 00:39:26,100 --> 00:39:28,400 812 00:39:28,400 --> 00:39:30,930 >> STUDENT: Hvis n er mindre end 2, returnere 1. 813 00:39:30,930 --> 00:39:33,520 >> JASON HIRSCHHORN: Hvis n mindre end 2, returnere 1. 814 00:39:33,520 --> 00:39:37,216 Jeg kan godt lide det, fordi det tager sig af 0 og 1. 815 00:39:37,216 --> 00:39:45,290 Så vi vil gøre x <2, returnere 1. 816 00:39:45,290 --> 00:39:47,870 Hvis vi bliver passeret 0, hvis vi får passeret 1, denne funktion vil 817 00:39:47,870 --> 00:39:49,790 straks returnere 1. 818 00:39:49,790 --> 00:39:54,020 Hvis vi bliver passeret nogle tal større end eller lig med 2, vi kommer til at 819 00:39:54,020 --> 00:39:55,370 har vores rekursivt kald. 820 00:39:55,370 --> 00:39:57,855 >> Og så hvordan er det at gå på arbejde? 821 00:39:57,855 --> 00:40:01,070 Kan nogen andre, der har arbejdet på dette der har ikke talt endnu give mig 822 00:40:01,070 --> 00:40:07,380 rekursivt kald til denne funktion i pseudokode? 823 00:40:07,380 --> 00:40:10,770 Hvis vi bliver passeret i en række x og det er større end 2, hvad 824 00:40:10,770 --> 00:40:13,370 ønsker vi at gøre? 825 00:40:13,370 --> 00:40:17,930 Vi har også et eksempel skrevet på side, der kan give dig et hint. 826 00:40:17,930 --> 00:40:20,770 >> STUDENT: Call x gange den fakultet af x minus 1? 827 00:40:20,770 --> 00:40:22,020 >> JASON HIRSCHHORN: Præcis højre. 828 00:40:22,020 --> 00:40:24,610 829 00:40:24,610 --> 00:40:37,750 Vi vil vende tilbage x gange fakultet af x minus 1. 830 00:40:37,750 --> 00:40:41,810 Og det selvom jeg skrev op, dybest set, hvad du sagde på engelsk, 831 00:40:41,810 --> 00:40:44,580 dette fakultet funktion vil blive kaldt igen. 832 00:40:44,580 --> 00:40:46,320 Det vil udføre på x minus 1. 833 00:40:46,320 --> 00:40:49,320 Det vil vende tilbage med nogle tal, og så det vil multiplicere disse to 834 00:40:49,320 --> 00:40:52,050 sammen, og denne værdi vil blive vendte tilbage til uanset kaldte dette 835 00:40:52,050 --> 00:40:55,010 faktordesign funktion, hvilket kan være en anden instans af 836 00:40:55,010 --> 00:40:58,420 denne faktoriel funktion. 837 00:40:58,420 --> 00:41:01,360 >> Så det er et eksempel på en rekursiv funktion, en meget 838 00:41:01,360 --> 00:41:02,530 simpel rekursiv funktion. 839 00:41:02,530 --> 00:41:04,530 Men de fleste af dem vil være sådan. 840 00:41:04,530 --> 00:41:11,170 Hvis du gerne vil have en god rekursiv udfordring for quiz, prøv kodning 841 00:41:11,170 --> 00:41:13,230 binær søgning rekursivt. 842 00:41:13,230 --> 00:41:18,950 Fordi hvis du gjorde binær søgning efter Problemet sæt tre, har du sandsynligvis gjorde det 843 00:41:18,950 --> 00:41:21,730 iterativt i en while-løkke. 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 vil få brug for at skrive din egen separat funktion, der tager nogle 846 00:41:26,310 --> 00:41:29,020 forskellige kommandolinje-argumenter - eller ikke kommandolinje-argumenter, hvoraf nogle 847 00:41:29,020 --> 00:41:30,910 forskellige bare regulære argumenter. 848 00:41:30,910 --> 00:41:33,870 Men du kunne skrive binær søgning rekursivt som godt. 849 00:41:33,870 --> 00:41:36,190 >> STUDENT: Så du kunne også have skrevet, i stedet for x minus 1, du 850 00:41:36,190 --> 00:41:39,502 kunne også have skrevet x minus minus, eller du kan have 851 00:41:39,502 --> 00:41:40,830 skriftlig minus minus x. 852 00:41:40,830 --> 00:41:44,740 Kan du lige forklare virkelig hurtigt, hvorfor de ville være forskellige ting, 853 00:41:44,740 --> 00:41:49,510 ligesom hvad forskellen er mellem x minus minus og minus minus x? 854 00:41:49,510 --> 00:41:51,320 >> JASON HIRSCHHORN: Nej, jeg er ikke kommer til at gå ind. 855 00:41:51,320 --> 00:41:55,500 Men jeg vil tale med dig om det efter klasse. x minus minus, minus minus x 856 00:41:55,500 --> 00:41:57,780 formindske x med 1. 857 00:41:57,780 --> 00:41:59,090 Men de gør det en smule anderledes. 858 00:41:59,090 --> 00:42:00,340 Men jeg ønsker ikke at gå ind i det. 859 00:42:00,340 --> 00:42:04,330 860 00:42:04,330 --> 00:42:09,090 Andre spørgsmål om rekursion eller denne funktion? 861 00:42:09,090 --> 00:42:10,140 Det er ikke virkelig selv pseudokode. 862 00:42:10,140 --> 00:42:15,060 Det er dybest set koden i C Du ville skrive for dette. 863 00:42:15,060 --> 00:42:19,393 >> OK, andre spørgsmål om emner heroppe? 864 00:42:19,393 --> 00:42:19,864 Ja. 865 00:42:19,864 --> 00:42:23,130 >> STUDENT: Jeg har en hurtig gennemgang af floating point og præcision. 866 00:42:23,130 --> 00:42:24,260 >> JASON HIRSCHHORN: Flydende punkt og præcision. 867 00:42:24,260 --> 00:42:26,920 Kan nogen virkelig hurtigt give mig en gennemgang af 868 00:42:26,920 --> 00:42:28,210 floating point og præcision? 869 00:42:28,210 --> 00:42:30,420 Du havde alle til at gøre dette til din problem indstillet, så du er alle 870 00:42:30,420 --> 00:42:31,700 fortrolig med det. 871 00:42:31,700 --> 00:42:35,090 Eller måske ikke alle. 872 00:42:35,090 --> 00:42:36,602 Nogen? 873 00:42:36,602 --> 00:42:39,530 Giv mig en påbegyndt stedet. 874 00:42:39,530 --> 00:42:40,750 Floating point og præcision. 875 00:42:40,750 --> 00:42:42,380 Hvad 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 Undskyld. 881 00:42:45,680 --> 00:42:51,550 >> VANESSA: Der er kun et begrænset antal af tal, der kan være repræsenteret 882 00:42:51,550 --> 00:42:57,930 fordi du er på en, i vores tilfælde et 32-bit system. 883 00:42:57,930 --> 00:43:03,080 Så du slags nødt til at gøre op nogle numre. 884 00:43:03,080 --> 00:43:03,910 >> JASON HIRSCHHORN: Så det er helt rigtigt. 885 00:43:03,910 --> 00:43:08,110 Der er kun en vis mængde af numre, som kan være repræsenteret. 886 00:43:08,110 --> 00:43:11,770 Hvis du ganger to meget store tal, det kan løbe beløb 887 00:43:11,770 --> 00:43:13,950 af rum du har til at repræsentere et heltal. 888 00:43:13,950 --> 00:43:17,930 Det er derfor, vi bruger nogle gange en lang lang i stedet for en int. 889 00:43:17,930 --> 00:43:19,210 Det har flere rum. 890 00:43:19,210 --> 00:43:21,210 Der kan holde et større antal. 891 00:43:21,210 --> 00:43:24,310 >> Floating point præcision har at gøre med det, men også har at gøre med 892 00:43:24,310 --> 00:43:29,300 kendsgerning, at decimaltal er ikke altid repræsenteret. 893 00:43:29,300 --> 00:43:29,540 Undskyld. 894 00:43:29,540 --> 00:43:31,280 Lad mig sige dette op igen. 895 00:43:31,280 --> 00:43:36,610 Det decimaltal 1.0 er ikke altid repræsenteret ligesom du ville forvente, 896 00:43:36,610 --> 00:43:40,770 1,000 millioner. 897 00:43:40,770 --> 00:43:50,360 Det er undertiden repræsenteret 1,000000001 eller 0,999999999. 898 00:43:50,360 --> 00:43:52,780 Det kan være endnu 89 kastes derinde et sted. 899 00:43:52,780 --> 00:43:56,560 Så disse decimaltal er ikke repræsenteret præcis som du ville 900 00:43:56,560 --> 00:43:58,430 forventer, at være repræsenteret. 901 00:43:58,430 --> 00:44:00,010 >> Så i problem sæt - 902 00:44:00,010 --> 00:44:00,860 var det to? - 903 00:44:00,860 --> 00:44:05,290 problem indstille to, hvor vi behandlet floating point tal, når vi ønskede 904 00:44:05,290 --> 00:44:08,690 dem til at repræsentere præcis hvad vi ønskede til at repræsentere antallet 905 00:44:08,690 --> 00:44:12,860 af øre, eller antallet af cents, vi ganger dem med 100. 906 00:44:12,860 --> 00:44:14,750 Vi afrundet dem. 907 00:44:14,750 --> 00:44:18,660 Og så har vi afskåret alt bag kommaet. 908 00:44:18,660 --> 00:44:22,020 Det var for at sikre, at de ville faktisk lige præcis hvad vi ønskede 909 00:44:22,020 --> 00:44:22,410 dem til lige. 910 00:44:22,410 --> 00:44:26,870 >> Fordi når du tager noget, der er en flyde og gøre det til en int, du 911 00:44:26,870 --> 00:44:29,860 afbrød alt til højre for kommaet. 912 00:44:29,860 --> 00:44:33,900 Fordi der er nogle floating point unøjagtighed, 100.000 måske 913 00:44:33,900 --> 00:44:37,440 repræsenteret 99,999999999. 914 00:44:37,440 --> 00:44:40,350 Og hvis du bare afbrød alt for at højre med det samme, er du nødt til 915 00:44:40,350 --> 00:44:41,600 få det forkerte nummer. 916 00:44:41,600 --> 00:44:44,050 917 00:44:44,050 --> 00:44:44,180 Ja. 918 00:44:44,180 --> 00:44:45,290 >> STUDENT: Jeg havde et spørgsmål om støbning. 919 00:44:45,290 --> 00:44:47,500 Hvilken rækkefølge forekommer det i? 920 00:44:47,500 --> 00:44:54,480 Hvis du ville gøre float, beslag, 1 divideret med 10, gør den 1 divideret med 10, 921 00:44:54,480 --> 00:44:58,910 derefter få 0,1, drej derefter det i en float? 922 00:44:58,910 --> 00:45:01,470 >> JASON HIRSCHHORN: Hvis du gør flyde 1 divideret med 10 - 923 00:45:01,470 --> 00:45:02,550 >> STUDENT: Ja, og så lig - 924 00:45:02,550 --> 00:45:04,240 godt, det normalt ville have det samme i - 925 00:45:04,240 --> 00:45:04,690 Ja. 926 00:45:04,690 --> 00:45:06,760 Du ønsker at gøre det til en float, right? 927 00:45:06,760 --> 00:45:12,790 >> JASON HIRSCHHORN: OK, så vi kommer til at bruge til at Overgang til at regne ud, 928 00:45:12,790 --> 00:45:15,390 svarene på disse spørgsmål ved kodning. 929 00:45:15,390 --> 00:45:18,180 Fordi du sandsynligvis har en masse disse minutter spørgsmål, og en god måde 930 00:45:18,180 --> 00:45:19,100 at løse dem er gennem kodning. 931 00:45:19,100 --> 00:45:21,320 Så vi kommer til at kode dette lige nu, og så vil vi gå tilbage og 932 00:45:21,320 --> 00:45:24,020 kode det spørgsmål, du havde. 933 00:45:24,020 --> 00:45:24,950 >> Så den første linje - 934 00:45:24,950 --> 00:45:29,390 Jeg skulle ikke have skrevet det - hvad er den første ting, vi ønsker at gøre, når vi 935 00:45:29,390 --> 00:45:32,250 åbne en ny fil i gedit? 936 00:45:32,250 --> 00:45:34,190 >> STUDENT: Medtag. 937 00:45:34,190 --> 00:45:35,920 >> JASON HIRSCHHORN: Medtag hvad? 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 Hvad skulle man ellers indeholde? 941 00:45:42,590 --> 00:45:46,820 Vi vil bare se, hvad der sker når du kaster noget til en float. 942 00:45:46,820 --> 00:45:48,605 Men hvad skal vi medtage, hvis vi er kommer til at 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 brug for dette program cs50.h, selv om det er 946 00:45:54,880 --> 00:45:55,920 altid nyttigt at medtage det. 947 00:45:55,920 --> 00:45:58,260 Men vi har altid brug for stdio.h. 948 00:45:58,260 --> 00:45:59,660 >> STUDENT: Ved kodning i C? 949 00:45:59,660 --> 00:46:15,770 >> JASON HIRSCHHORN: Når kodning i C. 950 00:46:15,770 --> 00:46:17,090 >> Så jeg gemme det som dette. C fil. 951 00:46:17,090 --> 00:46:18,590 Jeg får nogle gode syntaksfremhævning. 952 00:46:18,590 --> 00:46:22,890 Jeg skrev tomrum indeni main. 953 00:46:22,890 --> 00:46:24,792 Hvad betyder ugyldig betyde? 954 00:46:24,792 --> 00:46:26,740 >> STUDENT: Tager ikke nogen kommandolinje-argumenter. 955 00:46:26,740 --> 00:46:28,900 >> JASON Hirschhorn: bortfalder midler, i dette tilfælde har hoved ikke tage nogen 956 00:46:28,900 --> 00:46:29,700 kommandolinje-argumenter. 957 00:46:29,700 --> 00:46:32,720 I andre tilfælde betyder det, at funktionen tager ikke kommandolinje-argumenter. 958 00:46:32,720 --> 00:46:36,560 Eller funktionen, hvis jeg skulle skrive ugyldig main (void), der ville sige Mains 959 00:46:36,560 --> 00:46:38,460 ikke vender tilbage noget. 960 00:46:38,460 --> 00:46:39,960 Så ugyldig betyder bare ingenting. 961 00:46:39,960 --> 00:46:42,510 Hvad ville jeg skrive, hvis jeg skulle tage kommandolinje-argumenter? 962 00:46:42,510 --> 00:46:45,250 963 00:46:45,250 --> 00:46:47,150 >> STUDENT: int bue c streng bue v. 964 00:46:47,150 --> 00:46:49,055 >> JASON HIRSCHHORN: int argc snor argv. 965 00:46:49,055 --> 00:46:54,050 966 00:46:54,050 --> 00:46:55,572 Er det rigtigt? 967 00:46:55,572 --> 00:46:58,720 >> STUDENT: Det er char stjerne argv parentes. 968 00:46:58,720 --> 00:47:01,730 >> JASON HIRSCHHORN: Så man kan skrive snor argv bøjler eller char stjerne argv 969 00:47:01,730 --> 00:47:03,710 parentes, men du har brug for de kantede parenteser. 970 00:47:03,710 --> 00:47:06,290 Fordi argv er et array af strenge, huske. 971 00:47:06,290 --> 00:47:07,360 Det er ikke bare en streng. 972 00:47:07,360 --> 00:47:10,350 Så snor argv er, her er én streng kaldet argv. 973 00:47:10,350 --> 00:47:13,630 String argv parentes er, her er en vifte af strenge. 974 00:47:13,630 --> 00:47:17,865 Så int argc snor argv parentes ville være noget, jeg 975 00:47:17,865 --> 00:47:18,810 sandsynligvis ville skrive. 976 00:47:18,810 --> 00:47:23,050 >> Så du ønskede at spare i et heltal? 977 00:47:23,050 --> 00:47:24,285 >> STUDENT: Ja, heltal. 978 00:47:24,285 --> 00:47:25,840 Eller i en float. 979 00:47:25,840 --> 00:47:26,710 >> JASON HIRSCHHORN: I en float? 980 00:47:26,710 --> 00:47:30,790 Ligesom, float x er lig med 1 divideret med 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 udskrive en float i printf? 984 00:47:42,240 --> 00:47:45,100 985 00:47:45,100 --> 00:47:46,714 Hvad? 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 Hvad er et heltal? 989 00:47:50,810 --> 00:47:52,110 d eller jeg. 990 00:47:52,110 --> 00:47:53,000 Hvad 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: Backslash n.. 995 00:47:58,800 --> 00:48:04,610 996 00:48:04,610 --> 00:48:07,100 >> JASON HIRSCHHORN: Hvad skal jeg vende tilbage hvis hoved kører korrekt? 997 00:48:07,100 --> 00:48:08,360 >> STUDENT: 0. 998 00:48:08,360 --> 00:48:09,430 Behøver jeg at skrive denne linje, selv? 999 00:48:09,430 --> 00:48:10,170 >> STUDENT: Nej. 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 Kan alle læse det? 1003 00:48:17,190 --> 00:48:18,485 Det ser en smule mindre. 1004 00:48:18,485 --> 00:48:20,160 Kan alle se, eller skal Jeg gør 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 gøre det lidt større, selv om. 1007 00:48:25,100 --> 00:48:35,750 1008 00:48:35,750 --> 00:48:38,410 >> JASON HIRSCHHORN: Hvis jeg ønsker at vende denne . C fil i en eksekverbar fil, hvad 1009 00:48:38,410 --> 00:48:39,260 skriver jeg? 1010 00:48:39,260 --> 00:48:41,610 >> STUDENT: Foretag test. 1011 00:48:41,610 --> 00:48:42,080 >> JASON HIRSCHHORN: Undskyld? 1012 00:48:42,080 --> 00:48:42,790 >> STUDENT: Foretag test. 1013 00:48:42,790 --> 00:48:44,040 >> JASON HIRSCHHORN: Foretag test. 1014 00:48:44,040 --> 00:48:46,700 1015 00:48:46,700 --> 00:48:48,410 Vi talte om denne linje tidligere. 1016 00:48:48,410 --> 00:48:49,140 Klang. 1017 00:48:49,140 --> 00:48:51,270 Hvad er clang? 1018 00:48:51,270 --> 00:48:52,200 Navnet på compiler. 1019 00:48:52,200 --> 00:48:53,920 Hvad er denne linje? 1020 00:48:53,920 --> 00:48:55,580 >> STUDENT: Indstiller det op for brug af GDB. 1021 00:48:55,580 --> 00:48:59,230 >> JASON Hirschhorn: Indstiller det op til brug af GDB. 1022 00:48:59,230 --> 00:49:02,338 Denne linje, hvad er det? 1023 00:49:02,338 --> 00:49:03,290 >> STUDENT: Kildekode. 1024 00:49:03,290 --> 00:49:06,010 >> JASON HIRSCHHORN: Det er source fil,. c-fil. 1025 00:49:06,010 --> 00:49:08,150 Hvad har disse to linjer gøre? 1026 00:49:08,150 --> 00:49:10,245 Eller disse to ikke linjer. 1027 00:49:10,245 --> 00:49:12,300 >> STUDENT: It navne det teste. 1028 00:49:12,300 --> 00:49:15,410 >> JASON HIRSCHHORN: Så instrumentbrættet o siger, navngive det noget anderledes. 1029 00:49:15,410 --> 00:49:16,790 Og her kalder det test. 1030 00:49:16,790 --> 00:49:18,900 Hvis jeg ikke have det i, hvad ville det kalde denne? 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 Hvad betyder det så? 1034 00:49:25,366 --> 00:49:27,670 >> STUDENT: Links math biblioteket. 1035 00:49:27,670 --> 00:49:29,550 >> JASON HIRSCHHORN: Den forbinder i matematik biblioteket. 1036 00:49:29,550 --> 00:49:32,880 Vi inkluderede ikke math biblioteket, men da der er så fælles, at de har 1037 00:49:32,880 --> 00:49:35,780 skriftlig syge altid omfatte math biblioteket. 1038 00:49:35,780 --> 00:49:39,050 Og ligeledes, dette inkluderer Den CS50 biblioteket. 1039 00:49:39,050 --> 00:49:43,010 >> OK, så hvis vi en liste, har vi nu en eksekverbar kaldet test. 1040 00:49:43,010 --> 00:49:45,150 For at udføre det, jeg skriver test. 1041 00:49:45,150 --> 00:49:48,330 Jeg kan se, at min floating point, som forventet, lig 0. 1042 00:49:48,330 --> 00:49:50,890 1043 00:49:50,890 --> 00:49:51,590 Betyder det - 1044 00:49:51,590 --> 00:49:52,060 så - 1045 00:49:52,060 --> 00:49:55,210 >> STUDENT: Så hvis du lægger flyde nu ligesom du kaste den som float - 1046 00:49:55,210 --> 00:49:56,870 >> JASON HIRSCHHORN: Slå 1 til en svømmer? 1047 00:49:56,870 --> 00:49:59,180 >> STUDENT: Nej, kaste den fulde ting - 1048 00:49:59,180 --> 00:49:59,500 ja. 1049 00:49:59,500 --> 00:50:02,460 Hvis du lige gjorde det, ville der gør det 0,1? 1050 00:50:02,460 --> 00:50:07,170 >> JASON HIRSCHHORN: OK, så virkelig hurtigt, 1 divideret med 10, der er 1051 00:50:07,170 --> 00:50:08,690 heltal, der spaltes. 1052 00:50:08,690 --> 00:50:13,580 Så når du opdele heltal, de er 0, og du gemmer at 0 i en 1053 00:50:13,580 --> 00:50:17,170 flyde, fordi skråstregen er bare heltal division. 1054 00:50:17,170 --> 00:50:19,180 Så nu er vi dreje noget i en float. 1055 00:50:19,180 --> 00:50:21,650 >> Lad os se hvad der sker. 1056 00:50:21,650 --> 00:50:22,900 Vi klarer testen. 1057 00:50:22,900 --> 00:50:25,870 1058 00:50:25,870 --> 00:50:31,090 Så nu ser vi, at der slash ikke var integer division, blev det flydende 1059 00:50:31,090 --> 00:50:32,640 punkt division. 1060 00:50:32,640 --> 00:50:35,700 Fordi en af ​​sine argumenter var blevet kastet til en float. 1061 00:50:35,700 --> 00:50:38,380 Så nu er det sagde, behandle denne division, som vi har at gøre med 1062 00:50:38,380 --> 00:50:40,140 flydende punkter, ikke med tal. 1063 00:50:40,140 --> 00:50:42,760 Og så får vi det svar, vi forventer. 1064 00:50:42,760 --> 00:50:44,620 >> Lad os se hvad der sker - 1065 00:50:44,620 --> 00:50:47,103 oops. 1066 00:50:47,103 --> 00:50:51,646 Hvis jeg ønskede at udskrive mere decimal spots, hvordan kunne jeg gøre det? 1067 00:50:51,646 --> 00:50:55,550 >> STUDENT: Punkt dot f, eller så mange decimaler, 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 udskriver 10 decimaler pletter. 1070 00:51:04,440 --> 00:51:06,610 Og vi ser nu, vi får nogle underlige ting. 1071 00:51:06,610 --> 00:51:09,650 Og der går tilbage til dit spørgsmål om floating point unøjagtighed. 1072 00:51:09,650 --> 00:51:10,950 Der er underlige ting gemt i her. 1073 00:51:10,950 --> 00:51:13,650 1074 00:51:13,650 --> 00:51:15,275 >> OK, betyder det besvare dit spørgsmål? 1075 00:51:15,275 --> 00:51:18,550 1076 00:51:18,550 --> 00:51:20,200 Hvad sagde du ønsker at kode hurtigt? 1077 00:51:20,200 --> 00:51:25,470 >> STUDENT: Jeg ville bare se, om ikke, hvis du frigjort nogle pointer, 1078 00:51:25,470 --> 00:51:30,410 om at markøren stadig var lagret i den adressen på hvad den havde været 1079 00:51:30,410 --> 00:51:32,170 peger på tidligere. 1080 00:51:32,170 --> 00:51:34,100 >> JASON HIRSCHHORN: OK, så lad os gøre det. 1081 00:51:34,100 --> 00:51:38,030 Char stjerne ptr, dette skaber en variabel kaldet ptr af 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 så skal det være størrelse, og i dette tilfælde, tror jeg du ville 1087 00:51:51,040 --> 00:51:52,465 pege til char. 1088 00:51:52,465 --> 00:51:54,450 Så det ville være char. 1089 00:51:54,450 --> 00:51:57,520 >> JASON HIRSCHHORN: OK, så mere generisk, Inside - 1090 00:51:57,520 --> 00:51:58,770 lad os redigere. 1091 00:51:58,770 --> 00:52:05,100 1092 00:52:05,100 --> 00:52:09,260 Inde malloc, du ønsker nummeret af bytes på den bunke. 1093 00:52:09,260 --> 00:52:12,320 Generelt, hvad vi har set, at vi er gør er, at vi kommer til at allokere 1094 00:52:12,320 --> 00:52:14,940 strenge, for eksempel, eller arrays af heltal. 1095 00:52:14,940 --> 00:52:21,600 Så hvis vi ønsker 10 heltal eller 10 chars, 10 vil give os 10. 1096 00:52:21,600 --> 00:52:24,370 Og derefter størrelse tegn ville give os, at størrelsen af ​​tegn, som i 1097 00:52:24,370 --> 00:52:25,120 dette tilfælde er 1 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ørrelse int, der ville give os 40 byte. 1100 00:52:28,540 --> 00:52:31,520 >> Så mere generisk, indersiden af ​​malloc er antallet af bytes, du ønsker. 1101 00:52:31,520 --> 00:52:34,620 I dette tilfælde, vi får 1 byte. 1102 00:52:34,620 --> 00:52:36,900 Hvilket virker som en underlig brug af malloc, men for vores 1103 00:52:36,900 --> 00:52:38,470 formål giver mening. 1104 00:52:38,470 --> 00:52:40,420 Så der er der. 1105 00:52:40,420 --> 00:52:43,420 >> Vi kommer til at ringe gratis. 1106 00:52:43,420 --> 00:52:47,040 Vi slippe af med det, og vi bruger ptr igen. 1107 00:52:47,040 --> 00:52:48,750 Og hvad gjorde du ønsker at kontrollere? 1108 00:52:48,750 --> 00:52:50,550 >> STUDENT: Jeg ville bare se, om eller der var ikke noget 1109 00:52:50,550 --> 00:52:51,900 inde i den. 1110 00:52:51,900 --> 00:52:53,050 >> JASON HIRSCHHORN: Så uanset om det pegede på noget? 1111 00:52:53,050 --> 00:52:57,740 >> STUDENT: Ja, præcis, hvad enten det stadig havde en hukommelse adresse. 1112 00:52:57,740 --> 00:53:02,220 >> JASON HIRSCHHORN: Så du vil at kontrollere værdien af ​​ptr? 1113 00:53:02,220 --> 00:53:03,470 >> STUDENT: Ja, præcis. 1114 00:53:03,470 --> 00:53:07,940 1115 00:53:07,940 --> 00:53:10,160 >> JASON HIRSCHHORN: Hvad skriver jeg her hvis jeg ønsker at kontrollere værdien af ​​det 1116 00:53:10,160 --> 00:53:11,880 punkt - hvad er, Jordan sagt, værdi? 1117 00:53:11,880 --> 00:53:13,720 Eller hvad der er gemt inde i ptr? 1118 00:53:13,720 --> 00:53:14,620 >> STUDENT: En hukommelse adresse. 1119 00:53:14,620 --> 00:53:16,330 >> JASON HIRSCHHORN: En hukommelse adresse. 1120 00:53:16,330 --> 00:53:20,520 Så hvis jeg skriver netop dette, vil det give mig værdien af ​​ptr. 1121 00:53:20,520 --> 00:53:22,800 Og hvordan kan jeg udskrive en memory-adresse? 1122 00:53:22,800 --> 00:53:26,470 Hvad er format strengen efter en hukommelse adresse? 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 pointer. 1127 00:53:30,750 --> 00:53:40,820 1128 00:53:40,820 --> 00:53:43,540 Er det rigtigt? 1129 00:53:43,540 --> 00:53:44,790 Det er rigtigt. 1130 00:53:44,790 --> 00:53:49,450 1131 00:53:49,450 --> 00:53:51,040 Så ptr lig - 1132 00:53:51,040 --> 00:53:53,350 det stadig har noget i det. 1133 00:53:53,350 --> 00:53:56,110 1134 00:53:56,110 --> 00:53:57,645 Dette er sandsynligvis en mere interessant spørgsmål. 1135 00:53:57,645 --> 00:53:59,198 Hvad betyder denne linje gøre? 1136 00:53:59,198 --> 00:54:00,830 >> STUDENT: Seg fejl. 1137 00:54:00,830 --> 00:54:01,310 >> JASON HIRSCHHORN: Hvad? 1138 00:54:01,310 --> 00:54:02,678 >> STUDENT: Jeg tror det seg fejl. 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 fejl. 1141 00:54:04,920 --> 00:54:08,265 >> JASON HIRSCHHORN: Så denne linie kode, stjerne PTR, hvad 1142 00:54:08,265 --> 00:54:10,152 betyder stjernen betyder? 1143 00:54:10,152 --> 00:54:11,240 >> STUDENT: Indhold af. 1144 00:54:11,240 --> 00:54:11,560 >> JASON HIRSCHHORN: Ja. 1145 00:54:11,560 --> 00:54:13,910 Gå for at få indholdet af. 1146 00:54:13,910 --> 00:54:16,830 Så dette kommer til at gå til hukommelsen tage fat der, og give mig det. 1147 00:54:16,830 --> 00:54:21,030 Jeg brugte% c lige her, fordi der er tegn gemt der. 1148 00:54:21,030 --> 00:54:23,390 Så vi kommer til at gå til denne adresse vi lige så - eller det vil sandsynligvis være en 1149 00:54:23,390 --> 00:54:25,190 lidt anderledes denne gang vi køre programmet. 1150 00:54:25,190 --> 00:54:28,010 Men vi vil gå til denne adresse som vi ved eksisterer stadig 1151 00:54:28,010 --> 00:54:29,260 og se, hvad der er. 1152 00:54:29,260 --> 00:54:35,640 1153 00:54:35,640 --> 00:54:37,110 >> Så det ikke seg fejl. 1154 00:54:37,110 --> 00:54:38,970 Det bare ikke give os noget. 1155 00:54:38,970 --> 00:54:43,350 Det kunne faktisk har givet os noget, vi kan bare ikke se det. 1156 00:54:43,350 --> 00:54:45,110 Og der går tilbage til denne idé - 1157 00:54:45,110 --> 00:54:47,270 og vi kommer ikke til at komme for meget ind dette, fordi det er uden for 1158 00:54:47,270 --> 00:54:48,460 omfanget af dette kursus. 1159 00:54:48,460 --> 00:54:51,260 Men vi talte om lige her, hvis vi gik ud over grænserne for den vifte af 1160 00:54:51,260 --> 00:54:54,890 1, kan vi ikke komme i problemer. 1161 00:54:54,890 --> 00:54:58,550 >> Nogle gange, når du bare gå ud med 1, du laver noget forkert, og du 1162 00:54:58,550 --> 00:54:59,220 kunne komme i problemer. 1163 00:54:59,220 --> 00:55:00,820 Men du behøver ikke altid komme i problemer. 1164 00:55:00,820 --> 00:55:05,170 Det afhænger af, hvor meget af en dårlig ting, du gør, er du nødt til at komme i problemer. 1165 00:55:05,170 --> 00:55:07,790 Hvilket er ikke til at sige, være sjusket med din kode. 1166 00:55:07,790 --> 00:55:12,080 Men det vil sige, at programmet ikke vil altid holde op, selv hvis du går et eller andet sted 1167 00:55:12,080 --> 00:55:14,130 du er ikke meningen at gå. 1168 00:55:14,130 --> 00:55:18,170 >> Et godt eksempel på dette er en masse mennesker i deres problem sæt 3, som 1169 00:55:18,170 --> 00:55:22,350 var 15, ikke kontrollere grænserne for bestyrelsen. 1170 00:55:22,350 --> 00:55:25,860 Så du kiggede til venstre, så til den højre, så til toppen, så 1171 00:55:25,860 --> 00:55:27,000 til bunden. 1172 00:55:27,000 --> 00:55:31,540 Men du ikke kontrollere, om toppen var faktisk kommer til at være på tavlen. 1173 00:55:31,540 --> 00:55:35,220 Og en masse mennesker, der gjorde det, og vendte det i deres program arbejdede 1174 00:55:35,220 --> 00:55:38,960 perfekt, fordi hvor det bord var gemt i hukommelsen, hvis du gik en 1175 00:55:38,960 --> 00:55:42,300 over det eller kontrolleret, at hukommelsen adresse, der var ikke noget 1176 00:55:42,300 --> 00:55:44,870 især forfærdeligt om det, så dit program ikke var 1177 00:55:44,870 --> 00:55:45,970 kommer til at råbe på dig. 1178 00:55:45,970 --> 00:55:48,870 >> Men vi vil stadig tage off point, hvis du ikke kontrollere det, fordi du 1179 00:55:48,870 --> 00:55:50,850 gjorde noget du ikke var formodes at gøre, og du kan have 1180 00:55:50,850 --> 00:55:51,860 fået i problemer. 1181 00:55:51,860 --> 00:55:54,040 Odds er, selvom du sandsynligvis ikke. 1182 00:55:54,040 --> 00:55:57,790 Så dette er at vise, at, ja, kan vi stadig gå til det. 1183 00:55:57,790 --> 00:55:59,010 Og vi får ikke i problemer i denne sag. 1184 00:55:59,010 --> 00:56:04,000 Hvis vi forsøgte at gøre læse næste 100 tegn, ville vi 1185 00:56:04,000 --> 00:56:06,000 sandsynligvis komme i problemer. 1186 00:56:06,000 --> 00:56:09,400 Og du kan kode læse den næste 100 tegn, hvis du ønsker ved at gøre nogle 1187 00:56:09,400 --> 00:56:10,110 slags for loop. 1188 00:56:10,110 --> 00:56:10,850 Ja. 1189 00:56:10,850 --> 00:56:16,250 >> STUDENT: Da vi blev tildelt, at plads en faktisk værdi, ville vi ikke 1190 00:56:16,250 --> 00:56:17,050 faktisk være i stand til at se noget. 1191 00:56:17,050 --> 00:56:21,740 Skal vi prøve det med indstilling, lig gerne c eller noget? 1192 00:56:21,740 --> 00:56:22,640 >> JASON HIRSCHHORN: Great spørgsmål. 1193 00:56:22,640 --> 00:56:25,340 Hvordan indstiller jeg at værdien - 1194 00:56:25,340 --> 00:56:28,980 hvad linje kode skriver jeg på linje syv til at gøre, hvad du sagde? 1195 00:56:28,980 --> 00:56:34,040 >> STUDENT: Stjerne PTR lig single citat c Enden enkelt tilbud. 1196 00:56:34,040 --> 00:56:36,970 >> JASON HIRSCHHORN: Så det er at sætte en karakter, c, på det sted, 1197 00:56:36,970 --> 00:56:40,200 fordi igen, at stjerne betyder gå til der. 1198 00:56:40,200 --> 00:56:43,320 Og når de bruges på den venstre side af en opgave operatør, der er lig 1199 00:56:43,320 --> 00:56:47,270 underskrive, vi kommer ikke til at få det værdi, så meget som fastsat denne værdi. 1200 00:56:47,270 --> 00:56:48,520 Lad os nu se hvad der sker. 1201 00:56:48,520 --> 00:56:54,700 1202 00:56:54,700 --> 00:56:56,770 >> Vi sætter noget der og det var der. 1203 00:56:56,770 --> 00:56:58,000 Vi kaldte gratis. 1204 00:56:58,000 --> 00:57:00,100 Nogle ting sikkert sket på den bunke. 1205 00:57:00,100 --> 00:57:01,890 Så det er ikke der længere. 1206 00:57:01,890 --> 00:57:07,440 Men igen, vi ikke får i problemer for at gå der. 1207 00:57:07,440 --> 00:57:10,260 >> Jeg gør det ud i kode til at illustrere at en masse af disse 1208 00:57:10,260 --> 00:57:12,410 spørgsmål, du har, de er virkelig interessant 1209 00:57:12,410 --> 00:57:13,650 besvarer en masse tid. 1210 00:57:13,650 --> 00:57:15,260 Og de er rigtig gode spørgsmål. 1211 00:57:15,260 --> 00:57:19,010 Og du kan regne dem ud på din egen, hvis, for eksempel, 1212 00:57:19,010 --> 00:57:19,990 vi er ikke i afsnit. 1213 00:57:19,990 --> 00:57:20,940 Ja. 1214 00:57:20,940 --> 00:57:24,430 >> STUDENT: Fordi du ikke sender markøren et tilfældigt sted, har du brug for 1215 00:57:24,430 --> 00:57:26,530 bruge malloc? 1216 00:57:26,530 --> 00:57:28,400 >> JASON HIRSCHHORN: Så det går tilbage til din oprindelige spørgsmå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 Anvendelsen af ​​allokere her ikke der overbevisende, 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 gøre char stjerne ptr lig hej? 1223 00:57:40,970 --> 00:57:41,400 >> JASON HIRSCHHORN: Oh. 1224 00:57:41,400 --> 00:57:43,300 Så vi vil nu komme tilbage til din oprindelige spørgsmål. 1225 00:57:43,300 --> 00:57:46,885 Jeg tror, ​​du ikke var tilfreds med mit svar. 1226 00:57:46,885 --> 00:57:48,220 OK? 1227 00:57:48,220 --> 00:57:49,226 Ligesom det? 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 hvor ønsker du at udskrive? 1232 00:57:57,850 --> 00:58:00,026 Så vi vil udskrive en streng som det? 1233 00:58:00,026 --> 00:58:06,380 1234 00:58:06,380 --> 00:58:07,630 >> STUDENT: Interessant. 1235 00:58:07,630 --> 00:58:09,900 1236 00:58:09,900 --> 00:58:14,285 >> JASON HIRSCHHORN: Så det siger dette argument har den type af en karakter. 1237 00:58:14,285 --> 00:58:17,200 1238 00:58:17,200 --> 00:58:18,620 Så det 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 tager den første. 1241 00:58:26,280 --> 00:58:28,610 >> JASON HIRSCHHORN: Så dette er, hvad jeg sagde før. 1242 00:58:28,610 --> 00:58:34,240 Som jeg sagde, det er ikke at opbevare streng inde variabel pointer. 1243 00:58:34,240 --> 00:58:35,120 Det er opbevaring - 1244 00:58:35,120 --> 00:58:36,350 >> STUDENT: Den første værdi af strengen. 1245 00:58:36,350 --> 00:58:40,810 >> JASON HIRSCHHORN: Adressen på den første værdi af strengen. 1246 00:58:40,810 --> 00:58:46,940 Hvis vi skulle udskrive denne, er vi får værdien inde pointer. 1247 00:58:46,940 --> 00:58:51,005 Og vi vil se det er, ja, en hukommelse adresse. 1248 00:58:51,005 --> 00:58:53,595 1249 00:58:53,595 --> 00:58:56,440 >> Giver det mening? 1250 00:58:56,440 --> 00:58:56,940 Undskyld. 1251 00:58:56,940 --> 00:58:58,996 Vent, betyder det besvare dit Spørgsmålet er dog? 1252 00:58:58,996 --> 00:58:59,790 >> STUDENT: Ja. 1253 00:58:59,790 --> 00:59:05,830 >> JASON HIRSCHHORN: Denne linje kode er skabe en streng, og derefter en anden 1254 00:59:05,830 --> 00:59:09,115 variabel pointer, der peger denne streng, at array. 1255 00:59:09,115 --> 00:59:14,320 1256 00:59:14,320 --> 00:59:14,980 Ja. 1257 00:59:14,980 --> 00:59:19,200 >> STUDENT: Så hvis vi gik én hukommelse behandle yderligere, ville vi få den h? 1258 00:59:19,200 --> 00:59:21,990 1259 00:59:21,990 --> 00:59:23,150 Er det blevet gemt som en streng? 1260 00:59:23,150 --> 00:59:24,400 >> JASON HIRSCHHORN: Ligesom vi gjorde - 1261 00:59:24,400 --> 00:59:28,540 1262 00:59:28,540 --> 00:59:30,790 så det er værdifuldt at gøre. 1263 00:59:30,790 --> 00:59:33,780 Dette er point aritmetik, som du fyre har set før, og bør være 1264 00:59:33,780 --> 00:59:35,550 forholdsvis komfortabel med. 1265 00:59:35,550 --> 00:59:36,905 Det er beslægtet med at skrive - 1266 00:59:36,905 --> 00:59:41,980 1267 00:59:41,980 --> 00:59:46,350 hvis vi skulle til at skrive denne linje kode, vi har set matrix notation før. 1268 00:59:46,350 --> 00:59:55,900 Dette bør give os den anden værdi i dette array, h. 1269 00:59:55,900 --> 01:00:05,010 >> Hvis vi gjorde dette, bør dette også give os den anden værdi i denne matrix. 1270 01:00:05,010 --> 01:00:08,320 Fordi det kommer ikke til hukommelsen adressen på den første ting, men 1271 01:00:08,320 --> 01:00:10,530 hukommelse adressen på ting ene over. 1272 01:00:10,530 --> 01:00:14,360 Og så stjerne operatør dereferences at pointer. 1273 01:00:14,360 --> 01:00:16,940 Og igen, lad os se. 1274 01:00:16,940 --> 01:00:18,664 Vi får h igen. 1275 01:00:18,664 --> 01:00:20,980 >> STUDENT: Hvad præcist gør dereference betyde? 1276 01:00:20,980 --> 01:00:23,650 >> JASON HIRSCHHORN: Dereference er et fancy ord for at gå til. 1277 01:00:23,650 --> 01:00:26,390 Gå til, og få hvad er der er at dereference en pegepind. 1278 01:00:26,390 --> 01:00:28,240 Det er bare et smart ord for det. 1279 01:00:28,240 --> 01:00:29,986 >> STUDENT: Hvis vi ønskede at udskrive hele strengen, kunne vi 1280 01:00:29,986 --> 01:00:31,930 gøre ampersand pointer? 1281 01:00:31,930 --> 01:00:33,490 >> JASON HIRSCHHORN: OK, vi er kommer til at holde pause her. 1282 01:00:33,490 --> 01:00:35,480 Vi kommer til at ende her. 1283 01:00:35,480 --> 01:00:41,760 Ampersand giver dig adressen på en placering, så når du gør tegnet af 1284 01:00:41,760 --> 01:00:44,080 en variabel, det giver dig adressen hvor denne variabel er gemt. 1285 01:00:44,080 --> 01:00:48,580 Ampersand pointer vil give dig den adresse ptr hvor PTR er i hukommelsen. 1286 01:00:48,580 --> 01:00:50,140 >> Vi kommer ikke til at gå på med dette eksempel. 1287 01:00:50,140 --> 01:00:52,640 Du kan finde ud af disse ting på egen hånd. 1288 01:00:52,640 --> 01:00:55,740 Men igen, dette kan endda grænsende en lidt ud over, hvad du behøver at vide for 1289 01:00:55,740 --> 01:00:58,000 anvendelsesområdet for denne midtvejsevaluering - 1290 01:00:58,000 --> 01:00:59,070 eller denne quiz, snarere. 1291 01:00:59,070 --> 01:01:00,270 Undskyld. 1292 01:01:00,270 --> 01:01:03,770 >> Vi kommer til at bevæge sig på, fordi jeg ville gerne gøre en kodning problem 1293 01:01:03,770 --> 01:01:05,100 før tiden er gået. 1294 01:01:05,100 --> 01:01:09,340 Og vi kommer til at kode, hvad jeg tror er den mest overbevisende af disse 1295 01:01:09,340 --> 01:01:11,020 eksempler atoi. 1296 01:01:11,020 --> 01:01:14,520 Så det var et spørgsmål om en quiz to år siden. 1297 01:01:14,520 --> 01:01:17,810 Og jeg har det på tavlen her. 1298 01:01:17,810 --> 01:01:20,680 >> Folk blev bedt om quizzen - 1299 01:01:20,680 --> 01:01:23,640 de fik lidt mere tesxt i spørgsmålet, men jeg elimineret 1300 01:01:23,640 --> 01:01:26,640 tekst, fordi det var unødvendigt til vores formål nu. 1301 01:01:26,640 --> 01:01:29,180 Det var blot nogle baggrundsoplysninger på hvilke atoi gjorde. 1302 01:01:29,180 --> 01:01:31,425 Men du kender alle og er meget bekendt med atoi. 1303 01:01:31,425 --> 01:01:35,620 >> Jeg foreslår du kode dette på et ark papir. 1304 01:01:35,620 --> 01:01:39,310 Jeg foreslår også at du bruger den strategi at vi har gået over 1305 01:01:39,310 --> 01:01:41,040 en masse i vores sektion. 1306 01:01:41,040 --> 01:01:44,130 Først skal du sørge for at forstå hvad atoi laver. 1307 01:01:44,130 --> 01:01:47,580 Tegn et billede eller komme med nogle mentale billede af det i dit hoved. 1308 01:01:47,580 --> 01:01:51,120 Dernæst skrive pseudokode for dette. 1309 01:01:51,120 --> 01:01:53,120 På quiz, hvis alle får du er pseudokode, i det mindste du 1310 01:01:53,120 --> 01:01:54,550 sætte noget ned. 1311 01:01:54,550 --> 01:02:00,070 Og så kort, at pseudokode på C. Hvis du har en check i dit 1312 01:02:00,070 --> 01:02:03,760 pseudokode, ligesom kontrollere, om noget er 1, der kort 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 endelig, at kode programmet i C. 1315 01:02:07,850 --> 01:02:15,000 >> Så gå tilbage til atoi og tage fem minutter at kode dette på et ark 1316 01:02:15,000 --> 01:02:19,480 papir, der er sandsynligvis om den mængden af ​​tid, du ville tage på 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 15 minutter, fem til 12, fem til 10 minutter er om mængden af 1319 01:02:27,060 --> 01:02:30,150 tid, du ville bruge på denne spørgsmål i quizzen. 1320 01:02:30,150 --> 01:02:31,670 Så tage fem minutter nu, tak. 1321 01:02:31,670 --> 01:02:35,957 Og hvis du har spørgsmål, hæve din hånd og jeg kommer 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å der var fem minutter. 1326 01:08:37,580 --> 01:08:39,880 Det var nok om mængden af tid, du ville bruge på at der på en quiz, 1327 01:08:39,880 --> 01:08:42,120 måske den lave ende af den tid. 1328 01:08:42,120 --> 01:08:44,010 Vi vil opsummere i en bit. 1329 01:08:44,010 --> 01:08:45,740 Lad os starte kodning dette. 1330 01:08:45,740 --> 01:08:49,479 Og hvis vi ikke får hele vejen igennem, svarene på dette og dette 1331 01:08:49,479 --> 01:08:54,189 quiz spørgsmål er til rådighed igen, Efterår 2011 er, når dette spørgsmål 1332 01:08:54,189 --> 01:08:54,913 optrådte på quizzen. 1333 01:08:54,913 --> 01:08:57,830 >> Og det var værd otte point på quizzen dengang. 1334 01:08:57,830 --> 01:09:01,140 Otte point er på den høje ende af antal point er noget værd. 1335 01:09:01,140 --> 01:09:04,790 De fleste spørgsmål er i intervallet med et til seks punkter. 1336 01:09:04,790 --> 01:09:08,500 Så dette er en mere udfordrende spørgsmål, for sikker. 1337 01:09:08,500 --> 01:09:09,750 Kan nogen få mig i gang? 1338 01:09:09,750 --> 01:09:13,260 1339 01:09:13,260 --> 01:09:15,380 >> Generelt hvad skal vi ønsker at gøre med dette 1340 01:09:15,380 --> 01:09:17,550 fungere atoi, logisk? 1341 01:09:17,550 --> 01:09:19,569 Hvad ønsker vi at gøre? 1342 01:09:19,569 --> 01:09:22,279 Så vi kommer til at skrive nogle pseudokode. 1343 01:09:22,279 --> 01:09:24,090 >> STUDENT: Konverter tegn i heltal. 1344 01:09:24,090 --> 01:09:26,700 >> JASON HIRSCHHORN: Konverter tegn i heltal. 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 vil få brug for at gå igennem? 1347 01:09:30,870 --> 01:09:32,295 >> STUDENT: Alle af dem. 1348 01:09:32,295 --> 01:09:34,100 >> STUDENT: Alle tegn 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 ønskede at gå igennem hver karakter i en streng, hvad der er en ting 1351 01:09:42,180 --> 01:09:44,560 i C, vi har set, som har tilladt os til at gå igennem hver 1352 01:09:44,560 --> 01:09:45,939 tegn i en streng? 1353 01:09:45,939 --> 01:09:46,819 >> STUDERENDE: A for løkke. 1354 01:09:46,819 --> 01:09:48,069 >> JASON HIRSCHHORN: A 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 at sløjfe gennem hvert tegn i sek. 1357 01:09:55,330 --> 01:10:00,940 >> Så hvad skal vi ønsker at gøre når vi får en bestemt karakter? 1358 01:10:00,940 --> 01:10:02,480 Sig vi får passeret en 90. 1359 01:10:02,480 --> 01:10:03,460 Vi får 9.. 1360 01:10:03,460 --> 01:10:04,240 Det er et tegn. 1361 01:10:04,240 --> 01:10:07,440 Hvad ønsker vi at gøre med denne karakter 9? 1362 01:10:07,440 --> 01:10:10,082 >> STUDENT: Træk det fra tegn 0? 1363 01:10:10,082 --> 01:10:11,860 >> STUDENT: Tilføj 0? 1364 01:10:11,860 --> 01:10:13,350 >> JASON HIRSCHHORN: Træk 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 du ønsker at gøre det? 1367 01:10:15,573 --> 01:10:16,560 >> STUDENT: [uhørligt] 1368 01:10:16,560 --> 01:10:17,010 værdi. 1369 01:10:17,010 --> 01:10:18,380 Dens int værdi. 1370 01:10:18,380 --> 01:10:21,580 >> JASON HIRSCHHORN: OK, så vi tager den karakter 9, trække det fra 1371 01:10:21,580 --> 01:10:25,820 karakter 0 for at få en faktiske tal 9. 1372 01:10:25,820 --> 01:10:27,070 Sød. 1373 01:10:27,070 --> 01:10:31,255 1374 01:10:31,255 --> 01:10:37,000 Og hvordan kan du vide, at tegn 9 minus 0 tegn er 9? 1375 01:10:37,000 --> 01:10:39,222 Hvad diagram har du se på? 1376 01:10:39,222 --> 01:10:43,130 >> STUDENT: Der er logisk ni steder mellem 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 korrekte samt. 1380 01:10:46,490 --> 01:10:47,780 Så vi trækker 0. 1381 01:10:47,780 --> 01:10:49,010 Så nu har vi heltal 9. 1382 01:10:49,010 --> 01:10:49,970 Og hvad ønsker vi at gøre med det? 1383 01:10:49,970 --> 01:10:54,970 Hvis vi har 90, det er den første heltal Vi har, hvad vi ønsker at gøre? 1384 01:10:54,970 --> 01:10:58,180 >> STUDENT: Jeg ville sætte i en midlertidig heltal array, så gør matematik til det 1385 01:10:58,180 --> 01:11:02,088 senere at gø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 slutningen af array og derefter bevæge sig fremad, så 1388 01:11:06,990 --> 01:11:10,350 at hver gang du bevæger dig fremad, du ganger 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 lyder som en temmelig overbevisende idé. 1391 01:11:12,250 --> 01:11:16,040 Vi kan starte i slutningen af ​​vores array, og vi kan bruge strleng. 1392 01:11:16,040 --> 01:11:17,030 Vi kan bruge strleng her. 1393 01:11:17,030 --> 01:11:18,870 Vi får længden af ​​vores streng. 1394 01:11:18,870 --> 01:11:20,100 Vi starter i slutningen. 1395 01:11:20,100 --> 01:11:29,170 Og + det første, vi bare tage det tal, og måske vi skaber som en 1396 01:11:29,170 --> 01:11:32,270 ny heltalsvariabel op toppen, hvor vi opbevaring af alt. 1397 01:11:32,270 --> 01:11:37,340 Så vi sløjfe gennem hver char i s fra tilbage til fronten, vi trækker 0, og 1398 01:11:37,340 --> 01:11:42,790 så tager vi det, og afhængig af hvor det er, vi ganger det 1399 01:11:42,790 --> 01:11:45,860 ved en effekt på 10. 1400 01:11:45,860 --> 01:11:50,644 Fordi den første, hvad gør vi formere længst til højre karakter ved? 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 Hvad gør vi ganger det andet længst til højre karakter ved? 1404 01:11:56,010 --> 01:11:57,450 >> STUDENT: [uhørligt]. 1405 01:11:57,450 --> 01:11:57,960 >> JASON HIRSCHHORN: Hvad? 1406 01:11:57,960 --> 01:11:59,150 >> STUDENT: 10 til 1. 1407 01:11:59,150 --> 01:12:00,420 >> JASON HIRSCHHORN: 10 til 1. 1408 01:12:00,420 --> 01:12:03,754 Den tredje længst karakter? 1409 01:12:03,754 --> 01:12:04,580 >> STUDENT: 10 til 2. 1410 01:12:04,580 --> 01:12:05,350 >> JASON HIRSCHHORN: 10 til 2. 1411 01:12:05,350 --> 01:12:07,200 >> STUDENT: Undskyld, jeg ikke forstår hvad vi laver her. 1412 01:12:07,200 --> 01:12:08,640 >> JASON HIRSCHHORN: OK, lad os gå tilbage, så. 1413 01:12:08,640 --> 01:12:12,500 Så vi kommer til at få bestået 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 vedtaget i en streng. 1416 01:12:15,260 --> 01:12:17,640 Sig vi får passeret i strengen 90. 1417 01:12:17,640 --> 01:12:19,930 >> Den første ting, vi vil gøre er at sætte en ny heltalsvariabel, at vi er 1418 01:12:19,930 --> 01:12:22,150 bare kommer til at skabe som vores nye heltal. 1419 01:12:22,150 --> 01:12:24,630 Det er, hvad vi vil at vende tilbage i slutningen. 1420 01:12:24,630 --> 01:12:30,110 Vi er nødt til at gå igennem alle tegn i strengen, fordi vi har bestemt 1421 01:12:30,110 --> 01:12:34,430 at vi er nødt til at røre ved hver enkelt og derefter føje den til vores nye heltal. 1422 01:12:34,430 --> 01:12:36,330 >> Men vi kan ikke bare tilføje det som et tal. 1423 01:12:36,330 --> 01:12:38,270 Vi kan ikke bare tage 9 og add 9 til vores heltal. 1424 01:12:38,270 --> 01:12:40,560 Det afhænger af hvad sted det er i strengen. 1425 01:12:40,560 --> 01:12:42,960 Vi får brug for at formere sig det ved en effekt på 10. 1426 01:12:42,960 --> 01:12:45,580 Fordi det er, hvordan basen 10 værker. 1427 01:12:45,580 --> 01:12:49,050 >> Så vi kommer til at få den faktiske karakter eller den faktiske tal 1428 01:12:49,050 --> 01:12:53,860 nummer, ved at trække karakter 0 fra karakter 9 ligesom vi gjorde med 1429 01:12:53,860 --> 01:12:57,560 fratrække karakter kapital A fra uanset karakter, vi havde i en af 1430 01:12:57,560 --> 01:12:58,120 disse problemer. 1431 01:12:58,120 --> 01:13:04,190 Så vi vil faktisk få et tal fra 0 til 9 gemmes som et reelt tal, og vi vil 1432 01:13:04,190 --> 01:13:07,590 formere den ved en effekt på 10 afhængigt om, 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å vil vi tilføje den tilbage ind i vores nye heltalsvariabel. 1435 01:13:22,575 --> 01:13:32,840 1436 01:13:32,840 --> 01:13:37,890 >> Så hvad det ville se ud ville være - vi vil trække herovre. 1437 01:13:37,890 --> 01:13:40,086 Hvis vi bliver passeret i strengen 90 - 1438 01:13:40,086 --> 01:13:41,336 >> STUDENT: [uhørligt]. 1439 01:13:41,336 --> 01:13:43,190 1440 01:13:43,190 --> 01:13:45,540 >> JASON HIRSCHHORN: Men atoi tager en streng. 1441 01:13:45,540 --> 01:13:46,350 Så vi kommer til at gå igennem bedriften. 1442 01:13:46,350 --> 01:13:49,900 Vi vil blive passeret i 90. 1443 01:13:49,900 --> 01:13:51,540 Vi går fra bagsiden til fronten. 1444 01:13:51,540 --> 01:13:53,920 Vi tager 0. 1445 01:13:53,920 --> 01:13:55,080 >> STUDENT: Undskyld. 1446 01:13:55,080 --> 01:13:55,880 Måske er det dumt. 1447 01:13:55,880 --> 01:13:59,440 Hvis vi får passeret i en streng, hvorfor er 90, hvad vi 1448 01:13:59,440 --> 01:14:00,260 at få vedtaget i? 1449 01:14:00,260 --> 01:14:03,160 Fordi 90 er et heltal. 1450 01:14:03,160 --> 01:14:06,820 >> JASON HIRSCHHORN: Fordi atoi tager en snor og forvandler det til heltal 1451 01:14:06,820 --> 01:14:08,320 repræsentation af denne streng. 1452 01:14:08,320 --> 01:14:13,650 Men strengen 90 ikke er heltal 90 eller nummer 90. 1453 01:14:13,650 --> 01:14:17,920 Snoren 90 er en vifte af to eller tre tegn, snarere den 9. 1454 01:14:17,920 --> 01:14:22,740 karakter, 0 tegn, og backslash 0 tegn. 1455 01:14:22,740 --> 01:14:26,260 >> Og vi skriver atoi, fordi for eksempel, når du tager kommandoen 1456 01:14:26,260 --> 01:14:30,230 line argument, og det er gemt i argv, er det gemt som en streng. 1457 01:14:30,230 --> 01:14:32,940 Men hvis du ønsker at behandle det som et tal, du nødt til at konvertere den til en 1458 01:14:32,940 --> 01:14:34,700 faktiske heltal. 1459 01:14:34,700 --> 01:14:37,210 Som vi gjorde en af ​​vores problem sæt. 1460 01:14:37,210 --> 01:14:38,800 Som vi gjorde i en række af vores problem sæt. 1461 01:14:38,800 --> 01:14:41,690 Alle, der tog et heltal som en kommandolinje argument. 1462 01:14:41,690 --> 01:14:46,490 Så det er derfor vores atoi funktion tager en streng. 1463 01:14:46,490 --> 01:14:51,910 >> Så igen, i vores eksempel her, er vi kommer til at tage den sidste. 1464 01:14:51,910 --> 01:14:55,050 Vi kommer til at trække det tegn 0 fra det, fordi de tegn, 0 1465 01:14:55,050 --> 01:14:58,810 trækkes af tegnet 0 giver dig det faktiske antal 0, ifølge 1466 01:14:58,810 --> 01:15:00,950 ASCII matematik, som vi gør. 1467 01:15:00,950 --> 01:15:04,870 >> Fordi tegn repræsenteret anderledes end deres faktiske - den 1468 01:15:04,870 --> 01:15:08,830 karakter en, for eksempel, små bogstaver a er 97. 1469 01:15:08,830 --> 01:15:10,260 Det er ikke - Ups! 1470 01:15:10,260 --> 01:15:13,290 Det er ikke hvad du ville forvente det skal være, 0, for eksempel. 1471 01:15:13,290 --> 01:15:16,200 Så du er nødt til at trække det karakter en at få 0. 1472 01:15:16,200 --> 01:15:18,950 >> Så vi kommer til at gøre det her at få det faktiske antal. 1473 01:15:18,950 --> 01:15:22,560 Og så skal vi til at formere den ved en effekt på 10 afhængigt af hvor det 1474 01:15:22,560 --> 01:15:27,030 er i strengen, og derefter tage det og føje det til vores sted indehaver 1475 01:15:27,030 --> 01:15:32,520 variabel, så vi kan komme op med vores endelige ny heltal. 1476 01:15:32,520 --> 01:15:35,080 Betyder det giver mening for alle? 1477 01:15:35,080 --> 01:15:37,730 >> Så vi kommer ikke til at kode dette lige nu, fordi vi er 1478 01:15:37,730 --> 01:15:38,830 få på kort tid. 1479 01:15:38,830 --> 01:15:40,860 Jeg undskylder for timingen af ​​det. 1480 01:15:40,860 --> 01:15:44,620 Men dette er hvad, forhåbentlig, ville du være i stand til at gøre på quizzen - på det 1481 01:15:44,620 --> 01:15:47,710 mindste få dette pseudokode skrevet ud. 1482 01:15:47,710 --> 01:15:50,840 >> Og så, hvis vi skulle til at skrive pseudokode, faktisk kunne vi gøre dette 1483 01:15:50,840 --> 01:15:51,490 temmelig hurtigt. 1484 01:15:51,490 --> 01:15:55,230 Hver linje af kommentarer, vi skrev vi her kan oversættes til omkring 1485 01:15:55,230 --> 01:15:56,970 en linje C-kode. 1486 01:15:56,970 --> 01:16:01,780 Erklære en ny variabel, skrivning en løkke, nogle subtraktion, nogle 1487 01:16:01,780 --> 01:16:07,070 multiplikation, og nogle opgave. 1488 01:16:07,070 --> 01:16:09,020 Vi vil sikkert også gerne skrive en returledning. 1489 01:16:09,020 --> 01:16:12,040 Vi kunne også ønsker at sætte nogle kontroller her. 1490 01:16:12,040 --> 01:16:12,655 Ja. 1491 01:16:12,655 --> 01:16:15,720 >> STUDENT: Så vi kan behandle s som faktiske strengen? 1492 01:16:15,720 --> 01:16:18,730 Fordi jeg ved, det er bare en adresse. 1493 01:16:18,730 --> 01:16:22,090 Ligesom, hvordan ville du få længden af strengen bliver passeret? 1494 01:16:22,090 --> 01:16:25,310 >> JASON HIRSCHHORN: Så hvordan gjorde længden af ​​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 sætte s som den argument for det? 1498 01:16:30,550 --> 01:16:34,620 >> JASON HIRSCHHORN: So strlen tager en char stjerne. 1499 01:16:34,620 --> 01:16:38,090 Og det følger, at char stjerne, og det holder optælling indtil det bliver til en 1500 01:16:38,090 --> 01:16:41,865 backslash 0. strlen var faktisk en af ​​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 anden god en til kode. 1503 01:16:44,560 --> 01:16:47,270 At man er en smule lettere, fordi hvis du kommer til at tænke over det 1504 01:16:47,270 --> 01:16:47,830 konceptuelt - 1505 01:16:47,830 --> 01:16:51,620 Jeg sagde bare det højt - strlen følger en pegepind og holder går og 1506 01:16:51,620 --> 01:16:54,210 tælle og holde styr indtil du kommer til en omvendt skråstreg 0. 1507 01:16:54,210 --> 01:16:56,530 >> STUDENT: OK, fik det. 1508 01:16:56,530 --> 01:17:00,200 >> JASON HIRSCHHORN: So bedste held på quiz 0 morgen. 1509 01:17:00,200 --> 01:17:03,170 Hvis du har spørgsmål, vil jeg være udenfor efter dette. 1510 01:17:03,170 --> 01:17:05,610 Du er velkommen til at kontakte mig. 1511 01:17:05,610 --> 01:17:08,480 Nå ud til din egen TF, hvis du er ikke i min afdeling, eller få min 1512 01:17:08,480 --> 01:17:10,005 e-mail, hvis du ønsker det. 1513 01:17:10,005 --> 01:17:13,140 >> Hvis du ønsker at flipper ud, og bare sende mig en e-mail, en Freakout email, vil jeg 1514 01:17:13,140 --> 01:17:16,710 sende dig tilbage, ligesom, en smilende ansigt, eller lignende, en vittighed eller noget. 1515 01:17:16,710 --> 01:17:18,190 Så velkommen til at gøre det så godt. 1516 01:17:18,190 --> 01:17:20,750 Held og lykke igen, og jeg vil se dig alle næste uge. 1517 01:17:20,750 --> 01:17:23,435