1 00:00:00,000 --> 00:00:06,180 2 00:00:06,180 --> 00:00:07,820 >> JASON Hirschhorn: Välkommen till A5, alla. 3 00:00:07,820 --> 00:00:11,270 Vi har en spännande vecka framför oss, mest för att det finns så många nya 4 00:00:11,270 --> 00:00:12,350 ansikten i det här rummet. 5 00:00:12,350 --> 00:00:12,920 Det är underbart. 6 00:00:12,920 --> 00:00:15,740 Många av er är här av en slump, vilket är ännu bättre. 7 00:00:15,740 --> 00:00:18,220 Så förhoppningsvis du kommer att hålla med oss. 8 00:00:18,220 --> 00:00:20,220 >> Den här veckan ska vi spendera huvuddelen av sektionen 9 00:00:20,220 --> 00:00:21,870 förbereder sig för testet. 10 00:00:21,870 --> 00:00:26,580 Så enligt vår dagordning, ska vi prata lite om resurser för klassen, 11 00:00:26,580 --> 00:00:30,350 utan även för frågesport och sedan, återigen, tillbringar större delen av klassen talar 12 00:00:30,350 --> 00:00:31,390 om frågor. 13 00:00:31,390 --> 00:00:33,900 När vi är klar svara på din frågor, eller om dina frågor 14 00:00:33,900 --> 00:00:39,010 naturligtvis leda oss till någon kodning, jag har exempelproblem från mitten på terminen 15 00:00:39,010 --> 00:00:43,180 förflutna som vi kommer att koda bor i avsnitt tillsammans att också ta upp en annan 16 00:00:43,180 --> 00:00:45,420 bra ämnen att täcka. 17 00:00:45,420 --> 00:00:48,280 >> Så först, eftersom vi har gått igenom för senaste veckorna för att påminna dig 18 00:00:48,280 --> 00:00:51,700 killar, det finns massor av resurser tillgängligt för denna kurs. 19 00:00:51,700 --> 00:00:55,020 Många av dem kommer att vara otroligt hjälpsamma till dig som du fortsätter att 20 00:00:55,020 --> 00:00:57,280 studera för frågesport 0, eftersom Det är tisdag eftermiddag. 21 00:00:57,280 --> 00:00:59,630 Så ni alla har varit studerar för lite. 22 00:00:59,630 --> 00:01:02,640 >> Det finns föreläsningsanteckningar och käll kod som du bör 23 00:01:02,640 --> 00:01:04,050 definitivt kolla in. 24 00:01:04,050 --> 00:01:05,019 Titta på shortsen. 25 00:01:05,019 --> 00:01:07,470 Kolla study.cs50.net. 26 00:01:07,470 --> 00:01:11,770 Och sedan, som anges nedan, ett antal av andra källor. 27 00:01:11,770 --> 00:01:14,020 >> Återigen är frågesport 0 morgon vid 01:00. 28 00:01:14,020 --> 00:01:18,230 Om du inte redan har gjort det, kolla ut Om Quiz 0 dokument på 29 00:01:18,230 --> 00:01:21,370 kursens hemsida för att räkna ut där du tar testet. 30 00:01:21,370 --> 00:01:25,770 Testet börjar kl 01:10 och slutar 70 minuter senare. 31 00:01:25,770 --> 00:01:29,610 Så om du dyker upp efter 01:10, du är kommer att få det många färre minuter 32 00:01:29,610 --> 00:01:30,940 än 70 för att ta testet. 33 00:01:30,940 --> 00:01:33,570 Så se till att du är där i tid. 34 00:01:33,570 --> 00:01:38,690 Om du är en förlängnings student eller har några andra överväganden testa, det 35 00:01:38,690 --> 00:01:40,400 kanske inte på 01:00 i morgon. 36 00:01:40,400 --> 00:01:43,540 Men återigen, kolla om Quiz 0 dokumentera för att se till att du vet när 37 00:01:43,540 --> 00:01:44,760 du tar testet. 38 00:01:44,760 --> 00:01:46,440 Jag skrev 75 minuter upp här. 39 00:01:46,440 --> 00:01:48,580 Jag tror att det är rätt, inte 70. 40 00:01:48,580 --> 00:01:53,420 >> Den omfattar allt material från en vecka 0 till förra veckans föreläsning på onsdag. 41 00:01:53,420 --> 00:01:59,350 Och återigen, för det här testet, per den dokument får du en dubbelsidig och 8 42 00:01:59,350 --> 00:02:03,770 1/2 med 11 pappersark som du får att använda som anteckningar under testet. 43 00:02:03,770 --> 00:02:08,570 Många, om inte de flesta människor, har fann att den enskilt mest användbara sätt 44 00:02:08,570 --> 00:02:11,970 att studera för testet är att göra en studie ark, en 45 00:02:11,970 --> 00:02:13,730 en-sider, av sina egna. 46 00:02:13,730 --> 00:02:17,710 Så titta på retroaktivt om du har sett tidigare sådana. 47 00:02:17,710 --> 00:02:19,960 Nå ut till vänner för att se vad de är att sätta på deras. 48 00:02:19,960 --> 00:02:23,610 >> Men händerna nedåt, det bästa sättet du kan studie är att gå igenom allt och 49 00:02:23,610 --> 00:02:26,530 skära ner det till vad som bör eller ska inte hemma på den papper 50 00:02:26,530 --> 00:02:30,570 papper, eftersom det är bara en riktigt bra sätt för dig att se till att 51 00:02:30,570 --> 00:02:33,620 du går igenom allt och har viss erfarenhet av det. 52 00:02:33,620 --> 00:02:36,690 De flesta människor, finner vi, trots att de ha papperet sitter rätt 53 00:02:36,690 --> 00:02:39,840 bredvid dem på frågesport, inte vända till det, eftersom, återigen, att mycket 54 00:02:39,840 --> 00:02:43,290 processen att gå igenom den information som har hjälpt dem att lära sig det. 55 00:02:43,290 --> 00:02:45,370 >> Är det någon som har några frågor om frågesport 0? 56 00:02:45,370 --> 00:02:50,120 57 00:02:50,120 --> 00:02:51,450 Har alla - 58 00:02:51,450 --> 00:02:53,230 Jag tänker inte göra en handuppräckning. 59 00:02:53,230 --> 00:02:53,550 Aldrig sinne. 60 00:02:53,550 --> 00:02:54,790 Jag tänkte fråga vem började studera. 61 00:02:54,790 --> 00:02:58,360 Men jag vill inte göra dig allt inte höja händerna. 62 00:02:58,360 --> 00:03:01,290 Så som jag sa - ja, AVI, gå vidare. 63 00:03:01,290 --> 00:03:04,205 >> AVI: Vad skulle vara en bra sak för att sätta på en personsökare? 64 00:03:04,205 --> 00:03:05,875 >> STUDENT: Det är upp till dig. 65 00:03:05,875 --> 00:03:08,210 >> JASON Hirschhorn: Du får att använda ditt omdöme. 66 00:03:08,210 --> 00:03:13,220 Användbara saker att sätta på den en-personsökare, Om du är förvirrad om den stora O 67 00:03:13,220 --> 00:03:17,510 runtime av olika typer av sökningar och sorterar, sätta det på det i ett 68 00:03:17,510 --> 00:03:18,760 händig dandy diagrammet. 69 00:03:18,760 --> 00:03:22,250 Detta sätt, om du blir ombedd att på frågesport, behöver du inte försöka siffra 70 00:03:22,250 --> 00:03:23,560 ut eller orsak genom runtime. 71 00:03:23,560 --> 00:03:24,730 Du kan bara kopiera ner det. 72 00:03:24,730 --> 00:03:28,320 Om man tittar på frågesporter förflutna, en hel del gånger, det har gångtid frågor. 73 00:03:28,320 --> 00:03:34,150 Så det skulle vara ett exempel på en bra sak att sätta på en personsökare. 74 00:03:34,150 --> 00:03:37,450 >> Andra bra saker att sätta på, om du är förvirrad om hur man deklarerar en 75 00:03:37,450 --> 00:03:40,570 funktion eller vad de olika delarna av funktionsdeklarationen är, skriver 76 00:03:40,570 --> 00:03:43,400 att på det, en generisk version och då kanske ett exempel. 77 00:03:43,400 --> 00:03:47,290 Om du är förvirrad om pekare, ett diagram över hur pekare arbete är 78 00:03:47,290 --> 00:03:48,660 förmodligen riktigt bra. 79 00:03:48,660 --> 00:03:52,440 Om du är förvirrad om rekursion, en prova rekursiv funktion på det 80 00:03:52,440 --> 00:03:54,980 kan också visa sig vara riktigt bra. 81 00:03:54,980 --> 00:03:57,290 Betyder det att ge dig några idéer? 82 00:03:57,290 --> 00:04:01,820 >> AVI: Du måste förstå hela sammanställningen processen, liksom 83 00:04:01,820 --> 00:04:03,220 hur det hela fungerar? 84 00:04:03,220 --> 00:04:06,620 >> JASON Hirschhorn: Everything som har täckts kunde 85 00:04:06,620 --> 00:04:08,060 dyker upp på testet. 86 00:04:08,060 --> 00:04:08,930 Frågor - 87 00:04:08,930 --> 00:04:11,300 men återigen, kommer vissa saker att vara viktas tyngre än andra. 88 00:04:11,300 --> 00:04:14,330 Vissa saker har kommit upp igen och återigen i klassen, i 89 00:04:14,330 --> 00:04:15,590 föreläsning, och avsnitt. 90 00:04:15,590 --> 00:04:17,220 Andra saker har inte komma upp så ofta. 91 00:04:17,220 --> 00:04:22,900 >> Vi har pratat mycket om # include och -L något och vad de betyder i 92 00:04:22,900 --> 00:04:24,390 kompileringsprocessen. 93 00:04:24,390 --> 00:04:29,120 Vi har pratat mycket om GDB, klänga, de olika flaggor som vi använder när 94 00:04:29,120 --> 00:04:33,100 Vi sammanställer något, och vad make15 exempelvis verkligen 95 00:04:33,100 --> 00:04:34,510 innebär och verkligen gör. 96 00:04:34,510 --> 00:04:38,110 Vi har inte pratar så mycket om varje steg i 97 00:04:38,110 --> 00:04:39,240 kompileringsprocessen. 98 00:04:39,240 --> 00:04:40,410 Vi har fortfarande pratat om det. 99 00:04:40,410 --> 00:04:42,550 Så det är fortfarande något som du bör känna till. 100 00:04:42,550 --> 00:04:44,610 Men återigen, vi kommer inte att vara - 101 00:04:44,610 --> 00:04:49,140 saker som kommer upp oftare i klassen är mer benägna att komma upp mer 102 00:04:49,140 --> 00:04:52,495 ofta och vara mer kraftigt viktas på frågesport. 103 00:04:52,495 --> 00:04:53,280 >> Cool. 104 00:04:53,280 --> 00:04:54,580 Alla andra frågor om quiz 0? 105 00:04:54,580 --> 00:04:57,660 106 00:04:57,660 --> 00:05:00,050 >> OK, så jag satte en lista med ämnen på tavlan. 107 00:05:00,050 --> 00:05:01,550 Jag gick igenom kursplanen. 108 00:05:01,550 --> 00:05:07,340 Jag gick igenom avsnittet översyn från igår kväll och de glider att komma upp 109 00:05:07,340 --> 00:05:13,710 med en icke uttömmande förteckning över ämnen att vi har täckt hittills i CS50 110 00:05:13,710 --> 00:05:16,800 och saker som kanske visas på frågesport. 111 00:05:16,800 --> 00:05:19,900 Så jag tänker inte gå igenom varenda en av dessa. 112 00:05:19,900 --> 00:05:22,370 Det skulle ta mycket mer tid än vad vi har nu. 113 00:05:22,370 --> 00:05:26,880 Men jag lägger upp det här för att förhoppningsvis jogga ditt minne om saker som kan 114 00:05:26,880 --> 00:05:28,420 eller kanske inte så bekant med dig. 115 00:05:28,420 --> 00:05:32,850 >> Och jag skulle älska att tillbringa större delen av avsnitt besvara dina frågor om 116 00:05:32,850 --> 00:05:35,130 dessa ämnen, ämnen som omfattas inte här. 117 00:05:35,130 --> 00:05:36,130 Vi kan skriva pseudokod. 118 00:05:36,130 --> 00:05:40,010 Vi kan skriva riktiga kod att se till att du - 119 00:05:40,010 --> 00:05:44,280 Jag kan besvara din fråga och hjälpa alla i grunden förstå en 120 00:05:44,280 --> 00:05:48,330 många av dessa frågor, så att du kommer att känna förberedda och bekväm att gå in 121 00:05:48,330 --> 00:05:50,150 frågesport imorgon. 122 00:05:50,150 --> 00:05:52,300 Så läs igenom listan. 123 00:05:52,300 --> 00:05:54,780 Du förhoppningsvis har kommit till avsnittet med några frågor också. 124 00:05:54,780 --> 00:05:58,480 När du är redo, räck upp handen och vi kommer att komma igång. 125 00:05:58,480 --> 00:06:01,590 126 00:06:01,590 --> 00:06:05,200 >> Tänk på de frågor du har, det finns inga dumma frågor. 127 00:06:05,200 --> 00:06:06,250 Vi har hört att en hel del. 128 00:06:06,250 --> 00:06:09,490 Och de frågor du har, jag är villig att satsa, många andra människor, både 129 00:06:09,490 --> 00:06:11,740 sitter här och tittar på nätet har också. 130 00:06:11,740 --> 00:06:13,770 Så du kan bara hjälpa människor genom att ställa frågor. 131 00:06:13,770 --> 00:06:15,070 Marcus. 132 00:06:15,070 --> 00:06:18,040 >> MARCUS: Mellan stacken och hög, är det en pre-tilldelade 133 00:06:18,040 --> 00:06:22,880 procentdelen minne som är definierat som detta är för stacken eller för hög? 134 00:06:22,880 --> 00:06:25,010 Eller hur fungerar det egentligen? 135 00:06:25,010 --> 00:06:26,230 >> JASON Hirschhorn: Bra fråga. 136 00:06:26,230 --> 00:06:28,640 Jag kommer att backa spåra lite. 137 00:06:28,640 --> 00:06:30,910 Får alla - 138 00:06:30,910 --> 00:06:31,660 vänligen vara ärliga här. 139 00:06:31,660 --> 00:06:34,130 Jag vet att jag ber dig att höja din handen framför dina kamrater. 140 00:06:34,130 --> 00:06:38,510 Men finns det människor som känner obekväm med stacken och heap 141 00:06:38,510 --> 00:06:42,980 och skulle vilja gå över till att och vad de betyder? 142 00:06:42,980 --> 00:06:43,880 Räck upp handen om - 143 00:06:43,880 --> 00:06:44,420 OK. 144 00:06:44,420 --> 00:06:45,120 Tack. 145 00:06:45,120 --> 00:06:48,420 Så vi kommer att gå över till stacken och högen verkligen snabbt och sedan 146 00:06:48,420 --> 00:06:50,370 flytta in i att besvara din fråga. 147 00:06:50,370 --> 00:06:58,250 >> Så om vi drar ut en låda för att representera minne på datorn, vad är några 148 00:06:58,250 --> 00:07:02,160 saker som går i den här rutan? 149 00:07:02,160 --> 00:07:03,630 Main. 150 00:07:03,630 --> 00:07:04,020 En huvudfunktion. 151 00:07:04,020 --> 00:07:05,890 Vart tar viktigaste vägen? 152 00:07:05,890 --> 00:07:08,090 >> STUDENTEN [OHÖRBAR]. 153 00:07:08,090 --> 00:07:09,390 >> JASON Hirschhorn: Så vi ska sätta huvud här nere. 154 00:07:09,390 --> 00:07:12,180 155 00:07:12,180 --> 00:07:13,430 Vad går i den här rutan? 156 00:07:13,430 --> 00:07:16,000 157 00:07:16,000 --> 00:07:18,140 >> STUDENT: De funktioner som du ringer. 158 00:07:18,140 --> 00:07:19,020 >> JASON Hirschhorn: Funktionerna som vi kallar. 159 00:07:19,020 --> 00:07:20,440 Och vart tar de vägen? 160 00:07:20,440 --> 00:07:21,300 >> STUDENT: i stapeln. 161 00:07:21,300 --> 00:07:22,380 >> JASON Hirschhorn: De gå i stapeln. 162 00:07:22,380 --> 00:07:27,350 Så vi kommer att kalla detta sak här nere i stacken. 163 00:07:27,350 --> 00:07:31,880 Och där uppe, har vi högen. 164 00:07:31,880 --> 00:07:35,450 Så minnet är inte en låda precis som denna. 165 00:07:35,450 --> 00:07:37,330 Men det är faktiskt ganska lika. 166 00:07:37,330 --> 00:07:40,840 Det kommer att bli en hel del lådor över och över, beroende på hur stor din 167 00:07:40,840 --> 00:07:43,730 Datorn är eller hur stort ditt minne är. 168 00:07:43,730 --> 00:07:46,950 >> Vid citat-unquote "botten" är stapeln. 169 00:07:46,950 --> 00:07:50,880 Och det finns flera saker att gå på stacken. 170 00:07:50,880 --> 00:07:53,840 Och de som är beroende av de funktioner du har i din kod. 171 00:07:53,840 --> 00:07:57,780 Du har alltid en funktion i din kod som kallas huvud, så det finns alltid en 172 00:07:57,780 --> 00:08:00,480 avsnitt här nere i stack ägnas åt huvud. 173 00:08:00,480 --> 00:08:03,980 >> Dessa avsnitt i stapeln kallas stackramar. 174 00:08:03,980 --> 00:08:09,580 När du ringer en annan funktion, säger huvud kallar en binär sökfunktion, 175 00:08:09,580 --> 00:08:11,075 vi sätter en annan ram på stacken. 176 00:08:11,075 --> 00:08:13,830 177 00:08:13,830 --> 00:08:17,320 Mer specifikt kommer vi att donera en bit av minnet på vår 178 00:08:17,320 --> 00:08:22,960 dator för att lagra binär sökning lokala variabler och köra det binära 179 00:08:22,960 --> 00:08:24,150 sökkod. 180 00:08:24,150 --> 00:08:26,810 >> Så vi kallar binär sökning. 181 00:08:26,810 --> 00:08:30,440 182 00:08:30,440 --> 00:08:33,340 I denna del av minnet, vi ska att lagra sina lokala variabler. 183 00:08:33,340 --> 00:08:35,270 Vi kommer att lagra sina printf samtal. 184 00:08:35,270 --> 00:08:38,159 Vad som än händer, är denna funktion kommer att lagras där. 185 00:08:38,159 --> 00:08:40,350 Binär sökning kommer att köra. 186 00:08:40,350 --> 00:08:42,210 Det kommer att slutföra exekvering. 187 00:08:42,210 --> 00:08:47,450 Vad är ordet i C som betecknar att en funktion bör 188 00:08:47,450 --> 00:08:49,306 slutföra sin avrättning? 189 00:08:49,306 --> 00:08:50,040 >> STUDENT: Return. 190 00:08:50,040 --> 00:08:50,870 >> JASON Hirschhorn: Tillbaka. 191 00:08:50,870 --> 00:08:53,230 Så när du ser en återgång uttalande, funktions ändarna 192 00:08:53,230 --> 00:08:54,350 när den träffar det. 193 00:08:54,350 --> 00:08:56,740 Så binär sökning kommer att träffa sin återkomst. 194 00:08:56,740 --> 00:09:01,360 Denna del av minnet kommer i huvudsak frigöras. 195 00:09:01,360 --> 00:09:03,510 Och viktigaste kommer att gå tillbaka till avrättning. 196 00:09:03,510 --> 00:09:07,240 Så huvud pausar varhelst var, samtal binär sökning, få lite returvärde, 197 00:09:07,240 --> 00:09:08,700 och fortsätta exekveringen. 198 00:09:08,700 --> 00:09:10,840 Denna stack ram kommer att försvinna. 199 00:09:10,840 --> 00:09:14,810 >> Om vi ​​kallar en rekursiv funktion, vilket är en funktion som kallar sig över 200 00:09:14,810 --> 00:09:18,480 och över, kan vi få - säger vi gjorde binär sökning rekursivt. 201 00:09:18,480 --> 00:09:21,520 Vi kanske blir binär sökning version ett, binär sökning två, binär sökning 202 00:09:21,520 --> 00:09:24,090 tre, binär sökning fyra, binär sökning fem. 203 00:09:24,090 --> 00:09:27,950 Och sedan denna sista binära sökningen fem kommer att drabba basfallet, och stacken 204 00:09:27,950 --> 00:09:31,010 ramar kommer att gå tillbaka och hålla stängning tills vi kommer tillbaka till huvud. 205 00:09:31,010 --> 00:09:32,530 Vi kan gå över rekursion i lite. 206 00:09:32,530 --> 00:09:35,530 Men allt detta är att säga, om du är ringer flera funktioner samtidigt, 207 00:09:35,530 --> 00:09:39,250 blir det flera stack ramar på stacken. 208 00:09:39,250 --> 00:09:42,900 >> Högen, å andra sidan, en ökning här, inte för funktioner, 209 00:09:42,900 --> 00:09:44,380 inte för lokala variabler. 210 00:09:44,380 --> 00:09:48,920 Det är för att dynamiskt allokeras variabler. 211 00:09:48,920 --> 00:09:57,210 Så dessa är variabler som kan initieras i antingen huvud eller en 212 00:09:57,210 --> 00:09:58,640 fungera som huvud samtal. 213 00:09:58,640 --> 00:10:00,790 Var som helst i koden, de kan initieras. 214 00:10:00,790 --> 00:10:04,360 Och för att initiera ett dynamiskt tilldelade variabeln. 215 00:10:04,360 --> 00:10:06,970 Vilken funktion i C använder vi? 216 00:10:06,970 --> 00:10:07,600 >> STUDENTEN Malloc. 217 00:10:07,600 --> 00:10:09,240 >> JASON Hirschhorn: Malloc. 218 00:10:09,240 --> 00:10:10,800 Du ringer malloc. 219 00:10:10,800 --> 00:10:12,260 Du får en plats i minnet. 220 00:10:12,260 --> 00:10:15,020 Och det utrymmet av minnet är på heap-minnet. 221 00:10:15,020 --> 00:10:18,840 Och det utrymmet i minnet stannar där tills du ringa gratis. 222 00:10:18,840 --> 00:10:22,670 >> Så dynamiskt tilldelade variabler i upplag kommer att existera så länge som du 223 00:10:22,670 --> 00:10:25,250 vill att de ska existera, och de kommer inte gå bort tills du uttryckligen 224 00:10:25,250 --> 00:10:26,760 berätta för dem att försvinna. 225 00:10:26,760 --> 00:10:29,670 Du kan skapa dem i en funktion. 226 00:10:29,670 --> 00:10:31,930 Den funktionen stack ram kommer att försvinna. 227 00:10:31,930 --> 00:10:35,490 Men den variabeln fortfarande existerar i högen, tills den är frigjord, 228 00:10:35,490 --> 00:10:39,650 eventuellt av den funktion som kallas binär sökning eller vad som helst. 229 00:10:39,650 --> 00:10:42,580 >> Så de heap variabler stanna där så länge du vill 230 00:10:42,580 --> 00:10:43,490 dem att stanna där. 231 00:10:43,490 --> 00:10:46,090 Och de får sätta här. 232 00:10:46,090 --> 00:10:47,450 Och sedan nästa man får sätta dit. 233 00:10:47,450 --> 00:10:50,210 De håller blir ifyllt, och de stanna där tills du ringa gratis. 234 00:10:50,210 --> 00:10:52,870 >> Och huvudsak högen och stapeln, komma till Marcus fråga, 235 00:10:52,870 --> 00:10:54,500 växa mot varandra. 236 00:10:54,500 --> 00:10:57,730 Och om de stöter på varandra, du har förbrukat allt minne i din 237 00:10:57,730 --> 00:11:01,330 dator, och programmet kommer att sluta eftersom du inte har något mer minne 238 00:11:01,330 --> 00:11:02,420 kvar att använda. 239 00:11:02,420 --> 00:11:07,290 Mellan dem finns det potentiellt andra saker. 240 00:11:07,290 --> 00:11:10,980 Men för ramen för denna kurs, du behöver inte bekymra dig om det. 241 00:11:10,980 --> 00:11:12,020 >> Så det var svaret på din fråga. 242 00:11:12,020 --> 00:11:13,520 BRY DIG INTE OM DET. 243 00:11:13,520 --> 00:11:15,550 Men det var det långa svaret. 244 00:11:15,550 --> 00:11:17,800 Allt du behöver veta är den och stacken kommer - 245 00:11:17,800 --> 00:11:18,900 en börjar vid botten. 246 00:11:18,900 --> 00:11:19,570 Stapeln gör. 247 00:11:19,570 --> 00:11:20,790 Högen är uppe. 248 00:11:20,790 --> 00:11:21,990 De kommer att närma sig varandra. 249 00:11:21,990 --> 00:11:23,110 >> Och om de röra, det är ett problem. 250 00:11:23,110 --> 00:11:24,500 Du fick slut på minne. 251 00:11:24,500 --> 00:11:28,760 Men också, förutom att veta var de är, vad som är lagrad i både 252 00:11:28,760 --> 00:11:30,512 stack och heap. 253 00:11:30,512 --> 00:11:31,410 Curtis. 254 00:11:31,410 --> 00:11:33,570 >> CURTIS: När de kolliderar, är att en stack overflow? 255 00:11:33,570 --> 00:11:35,670 >> JASON Hirschhorn: När de kolliderar, det är inte en stack overflow. 256 00:11:35,670 --> 00:11:38,340 En stack overflow är ett annat område att vi kan gå över om du vill. 257 00:11:38,340 --> 00:11:40,020 OK, vi ska återkomma till det i lite. 258 00:11:40,020 --> 00:11:42,730 >> STUDENTEN Vad är det ord som heter när de träffar varandra, varvid 259 00:11:42,730 --> 00:11:44,450 stapla och högen? 260 00:11:44,450 --> 00:11:46,640 >> JASON Hirschhorn: För nu, oroa dig inte om. 261 00:11:46,640 --> 00:11:47,750 Bara vet - 262 00:11:47,750 --> 00:11:50,530 Jag kommer att svara på den frågan efter lektionen. 263 00:11:50,530 --> 00:11:52,680 Om de stöter på varandra, du sprang ut minne, för det finns inte mer 264 00:11:52,680 --> 00:11:53,330 utrymme där. 265 00:11:53,330 --> 00:11:55,450 >> STUDENT: Förlåt, vad är en seg fel? 266 00:11:55,450 --> 00:11:58,710 >> JASON Hirschhorn: Ett segment fel kan kallas för - 267 00:11:58,710 --> 00:12:02,240 det beror varför seg felet är kallade. 268 00:12:02,240 --> 00:12:06,260 Ibland din stack overflow, det ska säger seg fel som felet. 269 00:12:06,260 --> 00:12:08,180 >> STUDENT: Hur dereferencing en nollvariabel? 270 00:12:08,180 --> 00:12:10,040 Är det en seg fel? 271 00:12:10,040 --> 00:12:11,480 >> JASON Hirschhorn: dereferencing en null-pekare - 272 00:12:11,480 --> 00:12:17,850 OK, så om du har en pekare som du lika med null, pekare, återkallelse, 273 00:12:17,850 --> 00:12:20,270 lagra minnesadresser eftersom deras värden. 274 00:12:20,270 --> 00:12:23,660 Och en null-pekare är i huvudsak lagring 0, den 0: te 275 00:12:23,660 --> 00:12:26,670 itu i den variabeln. 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 Detta 0-te adress i minnet som inte är i vår bild, det är där uppe 278 00:12:35,030 --> 00:12:38,800 någonstans, som är reserverad för datorn. 279 00:12:38,800 --> 00:12:40,130 Vi ska inte röra det. 280 00:12:40,130 --> 00:12:44,680 >> Så när ditt program är att köra, om något försöker att gå till minnet 281 00:12:44,680 --> 00:12:48,990 adress 0, vet den att som är ett tomt värde. 282 00:12:48,990 --> 00:12:50,820 Den vet ingenting borde vara där. 283 00:12:50,820 --> 00:12:53,420 Så om du försöker använda något där och behandla något liknande där eller 284 00:12:53,420 --> 00:12:58,355 försöker gå till den platsen, är du kommer att få en seg fel eller ett fel. 285 00:12:58,355 --> 00:13:00,520 Besvarar det din fråga? 286 00:13:00,520 --> 00:13:03,170 >> Och nu går vi tillbaka att stapla spill. 287 00:13:03,170 --> 00:13:09,560 Saker i högen, eftersom ni har sett förut, i - låt oss dra en nära 288 00:13:09,560 --> 00:13:11,966 upp av en stapel ramen. 289 00:13:11,966 --> 00:13:15,050 Kan alla se det? 290 00:13:15,050 --> 00:13:16,650 Så vi har vår stack ram. 291 00:13:16,650 --> 00:13:23,260 Vi sparar en array som en lokal variabel i denna funktion. 292 00:13:23,260 --> 00:13:29,510 Så säger vår samling har fem platser. 293 00:13:29,510 --> 00:13:33,230 Alla fem av dem som kommer att lagras i denna stack ramen. 294 00:13:33,230 --> 00:13:37,540 >> Om vi ​​börjar skriva bortom gränserna för denna samling - 295 00:13:37,540 --> 00:13:43,990 så om vi börjar skriva in, låt oss säga att det är 0. 296 00:13:43,990 --> 00:13:46,800 Det är de fem indexen av vår array. 297 00:13:46,800 --> 00:13:50,980 Om vi ​​börjar skriva i index 5, vilket vi har inte när vi har en 298 00:13:50,980 --> 00:13:55,900 matris med storlek 5, börjar vi skriva in index 6, 7, 8, 9, kan vi få en stack 299 00:13:55,900 --> 00:13:57,960 Overflow fel. 300 00:13:57,960 --> 00:14:00,510 >> I allmänhet är det inte - 301 00:14:00,510 --> 00:14:04,910 du kommer förmodligen att hamna i trubbel om du går över efter en. 302 00:14:04,910 --> 00:14:08,640 Men i allmänhet, kommer du komma in i mest problem om du går över av mycket 303 00:14:08,640 --> 00:14:12,770 och du går så långt över att du skriver över den returadress i nämnda 304 00:14:12,770 --> 00:14:16,080 funktion, som är belägen vid stapelns botten ramen. 305 00:14:16,080 --> 00:14:16,520 >> Därför att, eller hur? 306 00:14:16,520 --> 00:14:17,670 Du - i - sorry. 307 00:14:17,670 --> 00:14:18,550 Inte "eftersom rätt." 308 00:14:18,550 --> 00:14:20,470 >> I stacken ramen, har du lokala variabler. 309 00:14:20,470 --> 00:14:27,090 Längst ned i bunten Ramen är returadressen. 310 00:14:27,090 --> 00:14:28,790 Det är där den funktion går när det är över. 311 00:14:28,790 --> 00:14:33,750 Och om du skriver över att avkastningen adress, sedan när detta stack ram, 312 00:14:33,750 --> 00:14:36,680 När du går genom stapeln utforma och genomföra varje rad, du 313 00:14:36,680 --> 00:14:40,350 kommer att gå till din nya returadress som skrivs där i stället för den 314 00:14:40,350 --> 00:14:40,910 verkliga en. 315 00:14:40,910 --> 00:14:45,050 Och det är hur vi har sett några säkerhetsöverträdelser 316 00:14:45,050 --> 00:14:46,780 kan hända med datorer. 317 00:14:46,780 --> 00:14:52,760 >> Så stack overflow, kort sagt, är när du skriva över den delen i stapeln 318 00:14:52,760 --> 00:14:55,440 du ska använda, den lokala variabel du ska använda, och 319 00:14:55,440 --> 00:14:58,070 särskilt när du börjar skriva viktiga saker som 320 00:14:58,070 --> 00:14:59,100 returadress. 321 00:14:59,100 --> 00:15:00,090 Och det är där du får ett felmeddelande. 322 00:15:00,090 --> 00:15:03,980 Eller kanske du kan börja även skriva in - 323 00:15:03,980 --> 00:15:05,370 säga binär sökning var precis ovanför huvud. 324 00:15:05,370 --> 00:15:07,790 Om du skrivit över en hel del, som du kunde skriva in i main. 325 00:15:07,790 --> 00:15:10,230 Men i allmänhet, får du ett felmeddelande innan då, eftersom datorn känner 326 00:15:10,230 --> 00:15:12,270 du gör något som du inte bör göra. 327 00:15:12,270 --> 00:15:12,560 Yeah. 328 00:15:12,560 --> 00:15:13,910 >> STUDENT: Vad är skillnaden mellan en stack overflow 329 00:15:13,910 --> 00:15:16,940 och ett buffertspill? 330 00:15:16,940 --> 00:15:19,420 >> JASON Hirschhorn: Buffertspill är en mer generisk typ av 331 00:15:19,420 --> 00:15:20,395 vad jag just beskrivit. 332 00:15:20,395 --> 00:15:22,610 >> STUDENT: Så en stack overflow är en exempel på ett buffertspill. 333 00:15:22,610 --> 00:15:23,420 >> JASON Hirschhorn: Exakt. 334 00:15:23,420 --> 00:15:28,700 Det här är en samling som vi kan tänka på som en buffert, ett utrymme för saker att gå i. 335 00:15:28,700 --> 00:15:30,600 Detta är ett stackbuffertspill. 336 00:15:30,600 --> 00:15:33,210 Vi skulle kunna ha ett heap-buffertspill. 337 00:15:33,210 --> 00:15:36,870 Om det fanns en buffert, som det ofta är en matris högen, och vi 338 00:15:36,870 --> 00:15:40,600 skrivit över dessa gränser, då skulle vi har en heap-buffertspill. 339 00:15:40,600 --> 00:15:44,870 >> Och utanför ramen för denna kurs, de är upptäckt lite annorlunda. 340 00:15:44,870 --> 00:15:48,040 Kompilatorn har speciella sätt att upptäcka varandra. 341 00:15:48,040 --> 00:15:50,660 Men ett buffertspill är en mer allmän typ av vad jag beskrev, 342 00:15:50,660 --> 00:15:54,090 vilket var en stackbuffertspill. 343 00:15:54,090 --> 00:15:56,240 Visste att svara på din fråga? 344 00:15:56,240 --> 00:15:57,910 Söt. 345 00:15:57,910 --> 00:16:01,850 >> Fanns det några andra frågor relaterade till stacken eller högen? 346 00:16:01,850 --> 00:16:04,920 347 00:16:04,920 --> 00:16:05,510 Yeah. 348 00:16:05,510 --> 00:16:08,220 >> STUDENT: Jag vet att du måste fria strängar eftersom de är i högen 349 00:16:08,220 --> 00:16:09,305 och du inte vill att läcka minne. 350 00:16:09,305 --> 00:16:12,240 Men har du att befria globala variabler och sånt? 351 00:16:12,240 --> 00:16:14,335 Eller är de automatiskt befrias? 352 00:16:14,335 --> 00:16:15,700 >> JASON Hirschhorn: Bra fråga. 353 00:16:15,700 --> 00:16:22,340 Så i CS50.H, skapar vi den här grejen för att du ringde en sträng. 354 00:16:22,340 --> 00:16:23,800 En sträng är egentligen vad? 355 00:16:23,800 --> 00:16:24,810 >> STUDENT: Char stjärna. 356 00:16:24,810 --> 00:16:29,180 >> JASON Hirschhorn: En röding stjärna, en pekare för ett tecken, en pekare till 357 00:16:29,180 --> 00:16:30,650 en array av tecken. 358 00:16:30,650 --> 00:16:32,210 Det är vad strängen är. 359 00:16:32,210 --> 00:16:36,050 Så vi måste frigöra den, eftersom getString, som vi använde en hel del - 360 00:16:36,050 --> 00:16:38,370 strängnamn lika getString - 361 00:16:38,370 --> 00:16:43,560 som mallocs för oss lite minne på heap och returnerar en pekare till 362 00:16:43,560 --> 00:16:47,230 första tecknet i det sträng, en röding stjärna. 363 00:16:47,230 --> 00:16:52,760 >> Så skenbart, om du inte har varit skriva fritt på någon av dina strängar 364 00:16:52,760 --> 00:16:55,600 att du har ringt hittills, har du läckt lite minne. 365 00:16:55,600 --> 00:16:57,430 Naturligtvis har vi inte pratat om det, så ingen har kommit i 366 00:16:57,430 --> 00:16:58,520 problem för att göra det. 367 00:16:58,520 --> 00:16:59,980 Men framöver, ja. 368 00:16:59,980 --> 00:17:03,990 När du ringer getString, du mallocing utrymme på högen. 369 00:17:03,990 --> 00:17:07,640 Och om du inte ringer gratis senare att sträng, du har en minnesläcka. 370 00:17:07,640 --> 00:17:09,440 Som svar på din fråga? 371 00:17:09,440 --> 00:17:10,606 >> Ja 372 00:17:10,606 --> 00:17:15,020 >> STUDENT: Så för att göra det, använder vi gratis precis innan retur? 373 00:17:15,020 --> 00:17:18,510 Liksom, inom ramen för, antar jag, om vi säger, liksom, int main, inom 374 00:17:18,510 --> 00:17:24,410 omfattningen av den kod som finns inom de krullparenteser, just innan - 375 00:17:24,410 --> 00:17:26,140 du vet var du skulle brukar sätta avkastning. 376 00:17:26,140 --> 00:17:27,950 Har du lagt fri innan dess? 377 00:17:27,950 --> 00:17:31,000 >> JASON Hirschhorn: Så kan du få gratis var du vill placera gratis. 378 00:17:31,000 --> 00:17:33,810 Eftersom dessa är dynamiskt allokeras variabler, eftersom de kan 379 00:17:33,810 --> 00:17:39,170 lever utanför ramen för en viss funktion, om du ringer malloc i en 380 00:17:39,170 --> 00:17:44,140 separat funktion, till exempel, getString, kan du ringa gratis i main. 381 00:17:44,140 --> 00:17:46,050 Du behöver inte kalla det i den specifika funktionen 382 00:17:46,050 --> 00:17:47,570 där malloc heter. 383 00:17:47,570 --> 00:17:50,340 Men du behöver för att kalla det före huvud avkastning. 384 00:17:50,340 --> 00:17:51,120 >> Och det beror egentligen. 385 00:17:51,120 --> 00:17:54,960 Det beror på varför du malloced att utrymmet i första hand. 386 00:17:54,960 --> 00:17:57,320 Vissa människor kommer att ringa frigöra ganska snabbt. 387 00:17:57,320 --> 00:17:59,220 Vissa människor kommer inte att ringa gratis till I slutet av sitt program. 388 00:17:59,220 --> 00:18:00,660 Och de kommer att gå igenom och fri allt. 389 00:18:00,660 --> 00:18:03,597 Det beror på varför du ringde malloc. 390 00:18:03,597 --> 00:18:11,270 >> STUDENT: Och vad skulle du säga om du ringde användning getString? 391 00:18:11,270 --> 00:18:13,320 Du skulle säga fri vad? 392 00:18:13,320 --> 00:18:20,040 >> JASON Hirschhorn: Så syntaxen gratis är helt enkelt fria, öppna föräldra, nära 393 00:18:20,040 --> 00:18:22,130 föräldra, och namnet på pekaren. 394 00:18:22,130 --> 00:18:26,410 Så om du skriver String namn jämlikar getString, sätta dig namn på här. 395 00:18:26,410 --> 00:18:27,760 Det är namnet på pekaren. 396 00:18:27,760 --> 00:18:30,570 Och den vet att frigöra det minne. 397 00:18:30,570 --> 00:18:33,920 >> STUDENT: Så när det frigör det minnet, pekaren fortfarande pekar på den platsen 398 00:18:33,920 --> 00:18:34,970 i minnet? 399 00:18:34,970 --> 00:18:39,020 Eller är pekaren också töms på den adress som den pekar på. 400 00:18:39,020 --> 00:18:40,290 >> JASON Hirschhorn: Vi borde prova det. 401 00:18:40,290 --> 00:18:41,430 Vi borde koda det. 402 00:18:41,430 --> 00:18:43,880 Låt oss komma tillbaka när vi kommer till kodning, och låt oss koda det. 403 00:18:43,880 --> 00:18:46,000 Och om du vill räkna ut svaret till det, kan du även kod som 404 00:18:46,000 --> 00:18:46,690 under tiden. 405 00:18:46,690 --> 00:18:49,100 Men det är en bra fråga. 406 00:18:49,100 --> 00:18:53,480 >> STUDENT: Är det möjligt att fri något för tidigt? 407 00:18:53,480 --> 00:18:58,530 Så du fortfarande behöver det för ditt program, och du befriade det minnesutrymme? 408 00:18:58,530 --> 00:18:59,200 >> JASON Hirschhorn: Ja. 409 00:18:59,200 --> 00:19:03,020 Det är möjligt, om du fri något och sedan använda den igen, kommer du 410 00:19:03,020 --> 00:19:06,890 stöter på ett fel. 411 00:19:06,890 --> 00:19:10,810 Men det är på dig, eftersom du befriade något och sedan kallade det senare. 412 00:19:10,810 --> 00:19:13,940 Så det var en programmerare misstag. 413 00:19:13,940 --> 00:19:14,780 Men ja. 414 00:19:14,780 --> 00:19:17,760 Du kan skriva det. 415 00:19:17,760 --> 00:19:19,240 >> Några fler frågor om - 416 00:19:19,240 --> 00:19:19,760 Ja. 417 00:19:19,760 --> 00:19:22,820 >> STUDENT: Så om du ska bara befria det i allmänhet innan den 418 00:19:22,820 --> 00:19:25,490 Programmet avslutas, betyder det, om programmet avslutas och du inte befria det, 419 00:19:25,490 --> 00:19:27,580 att minnet allokeras fortfarande? 420 00:19:27,580 --> 00:19:31,330 >> JASON Hirschhorn: Om programmet avslutas och du glömmer att frigöra något, då 421 00:19:31,330 --> 00:19:34,390 att minnet tilldelades hela livslängden på ditt program. 422 00:19:34,390 --> 00:19:37,670 När programmet stängs helt, att minnet inte kommer 423 00:19:37,670 --> 00:19:39,490 att stanna där för evigt. 424 00:19:39,490 --> 00:19:42,080 Datorn är smart nog att veta att när programmet avslutas, det 425 00:19:42,080 --> 00:19:46,440 bör bli av allt minne som var associerat med det programmet. 426 00:19:46,440 --> 00:19:51,240 >> Men det finns verktyg som du kan köra på ett program för att upptäcka om det, när 427 00:19:51,240 --> 00:19:54,720 Programmet är klar, du glömde att frigöra minne. 428 00:19:54,720 --> 00:19:57,960 Och för din nästa problem in där du kommer att använda malloc och använda 429 00:19:57,960 --> 00:20:02,610 pekare, kommer du att köra det här programmera på ditt program för att se om, 430 00:20:02,610 --> 00:20:06,530 när huvud avkastning, hade du några saker som var kvar unfreed. 431 00:20:06,530 --> 00:20:09,130 >> Så de kommer inte att stanna malloced för alltid i din dator. 432 00:20:09,130 --> 00:20:11,720 Det skulle vara slösaktig, eftersom mycket snabbt, datorer 433 00:20:11,720 --> 00:20:12,960 skulle få slut på minne. 434 00:20:12,960 --> 00:20:16,450 Men om de kör till slutet av ditt programmera och de är inte befriade och din 435 00:20:16,450 --> 00:20:20,260 Programmet går ut, det är fortfarande ett problem att detta verktyg kommer att hjälpa dig att möta. 436 00:20:20,260 --> 00:20:21,520 >> STUDENT: Är det Valgrind? 437 00:20:21,520 --> 00:20:22,910 >> JASON Hirschhorn: Det är kallas Valgrind. 438 00:20:22,910 --> 00:20:23,520 Och du kommer att bli - 439 00:20:23,520 --> 00:20:25,780 >> STUDENT: Men vi behöver inte veta att för testet, men? 440 00:20:25,780 --> 00:20:27,600 Jag menar, var det omtalade lite i föreläsning. 441 00:20:27,600 --> 00:20:33,600 >> JASON Hirschhorn: Så Valgrind är namnet på det verktyget. 442 00:20:33,600 --> 00:20:37,180 Att veta vad den gör är nog för frågesport. 443 00:20:37,180 --> 00:20:40,200 Men du har inte använt den ännu på Problemet inställd eftersom vi inte har haft en 444 00:20:40,200 --> 00:20:43,520 Problemet uppsättning som uttryckligen har behandlat med malloc eller du använder malloc. 445 00:20:43,520 --> 00:20:45,330 Så du inte har använt Valgrind ännu. 446 00:20:45,330 --> 00:20:47,760 Men du kommer att använda det förr snarare än senare. 447 00:20:47,760 --> 00:20:48,710 >> STUDENT: Kan du upprepa vad Valgrind är? 448 00:20:48,710 --> 00:20:49,190 >> JASON Hirschhorn: Förlåt? 449 00:20:49,190 --> 00:20:51,240 >> STUDENT: Kan du upprepa vad syftet med Valgring är? 450 00:20:51,240 --> 00:20:53,100 >> JASON Hirschhorn: Valgrind är namnet - 451 00:20:53,100 --> 00:20:59,890 som GDB hjälper dig att felsöka program, Valgrind hjälper dig att räkna ut om 452 00:20:59,890 --> 00:21:03,210 saker har inte befriats när programmet stängs. 453 00:21:03,210 --> 00:21:05,110 Så du kommer att köra det på ditt program. 454 00:21:05,110 --> 00:21:09,230 Och ditt program kommer ut, och det ska säga ditt program som heter malloc här många 455 00:21:09,230 --> 00:21:13,670 tider för detta många byte, och du endast kallade fria här många gånger. 456 00:21:13,670 --> 00:21:16,520 Och så du lämnade dessa många byte utan att bli befriade. 457 00:21:16,520 --> 00:21:18,050 Eller det kommer att säga att du har befriat allt. 458 00:21:18,050 --> 00:21:19,070 Bra jobbat. 459 00:21:19,070 --> 00:21:19,480 >> STUDENT: OK. 460 00:21:19,480 --> 00:21:21,060 Och det kallas 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: En fråga om pekare. 463 00:21:25,970 --> 00:21:30,080 Så säger du har n stjärna x är lika med något. 464 00:21:30,080 --> 00:21:33,330 Det är lika, oavsett vad du lägger det, är att det som sätts på insidan 465 00:21:33,330 --> 00:21:36,120 vad x pekar på, eller pekaren på x? 466 00:21:36,120 --> 00:21:37,690 >> JASON Hirschhorn: Kan du upprepa frågan? 467 00:21:37,690 --> 00:21:39,340 Kan vi dra det när du säger det? 468 00:21:39,340 --> 00:21:42,710 >> STUDENTEN I frågesport, faktiskt, det en som du skickade oss, det var som, röding 469 00:21:42,710 --> 00:21:46,520 stjärniga sanning lika CS50 stenar, eller hur? 470 00:21:46,520 --> 00:21:52,190 Så betyder det att att CS50 stenar är vad sanningen pekar på? 471 00:21:52,190 --> 00:21:55,810 >> JASON Hirschhorn: Så du pratar om en röding stjärna i ett snöre, hur 472 00:21:55,810 --> 00:21:56,460 som fungerar? 473 00:21:56,460 --> 00:21:56,890 Yeah. 474 00:21:56,890 --> 00:21:57,700 OK. 475 00:21:57,700 --> 00:21:59,140 Låt oss dra det här. 476 00:21:59,140 --> 00:22:07,100 >> [SIDE SAMTAL] 477 00:22:07,100 --> 00:22:11,130 >> JASON Hirschhorn: Så denna variabel kommer att vara av typen char stjärna. 478 00:22:11,130 --> 00:22:14,580 Hur stor är en variabel av typen char stjärna? 479 00:22:14,580 --> 00:22:15,510 Hur många byte? 480 00:22:15,510 --> 00:22:16,450 >> STUDENTER: Fyra. 481 00:22:16,450 --> 00:22:18,210 >> JASON Hirschhorn: Det är fyra byte. 482 00:22:18,210 --> 00:22:21,420 Hur många rättigheter är en variabel av typen int stjärna? 483 00:22:21,420 --> 00:22:22,210 >> STUDENTER: Fyra. 484 00:22:22,210 --> 00:22:24,910 >> JASON Hirschhorn: Fyra bitgrupper. 485 00:22:24,910 --> 00:22:28,280 Om det är en pekare, så är det alltid fyra byte, eftersom pekare, deras 486 00:22:28,280 --> 00:22:30,070 värdet är en minnesadress. 487 00:22:30,070 --> 00:22:35,160 Och minnesadresser på CS50 apparaten är fyra byte lång. 488 00:22:35,160 --> 00:22:42,900 Så när vi kallar getString, eller när vi säg, lika stringname, och sedan i 489 00:22:42,900 --> 00:22:46,140 citationstecken sätta en sträng, vi lägger - 490 00:22:46,140 --> 00:22:46,920 Tja, det är lite annorlunda. 491 00:22:46,920 --> 00:22:48,630 Vi ska göra GetString som exempel. 492 00:22:48,630 --> 00:22:52,150 Eller röding stjärna något lika med strängen. 493 00:22:52,150 --> 00:22:54,360 Tyvärr, ge mig exempel att du läser? 494 00:22:54,360 --> 00:22:57,590 >> STUDENT: char stjärna sanning är lika "CS50 rocks" i citationstecken. 495 00:22:57,590 --> 00:23:02,260 >> JASON Hirschhorn: Så denna stjärna, detta Vi kallar den här variabeln x för vår 496 00:23:02,260 --> 00:23:04,060 allmänna ändamål. 497 00:23:04,060 --> 00:23:05,970 Vi har skapat en variabel som heter x. 498 00:23:05,970 --> 00:23:07,610 Det är typ char stjärna. 499 00:23:07,610 --> 00:23:10,950 Det är en pekare till en serie karaktärer. 500 00:23:10,950 --> 00:23:12,200 Så här nere - 501 00:23:12,200 --> 00:23:23,710 502 00:23:23,710 --> 00:23:25,890 >> Så det här är hur detta skulle arbeta i minnet. 503 00:23:25,890 --> 00:23:27,410 Detta skulle lagra en minnesadress. 504 00:23:27,410 --> 00:23:31,770 Det skulle lagra minnesadressen för det första tecknet i arrayen. 505 00:23:31,770 --> 00:23:33,830 Och sedan när du följt pekaren, skulle du 506 00:23:33,830 --> 00:23:35,200 får det första tecknet. 507 00:23:35,200 --> 00:23:38,780 >> Och om du läser det här som en sträng, är datorn smarta 508 00:23:38,780 --> 00:23:42,930 nog att veta, läsa allt det här innan den kommer till en backlash 0. 509 00:23:42,930 --> 00:23:45,530 Men om du läser det ett tecken på en tid, så att du iterera igenom 510 00:23:45,530 --> 00:23:49,910 denna sträng, då kommer du bara läsa en tecken i taget tills du kommer till 511 00:23:49,910 --> 00:23:50,850 snedstreck 0. 512 00:23:50,850 --> 00:23:52,335 Det kan inte svara på din fråga, dock. 513 00:23:52,335 --> 00:23:55,610 >> STUDENT: Ja, men du har inte malloced det utrymmet 514 00:23:55,610 --> 00:23:58,400 ännu för denna pekare. 515 00:23:58,400 --> 00:24:02,510 >> JASON Hirschhorn: Så jag är inte helt säker exakt vad du tittar på, 516 00:24:02,510 --> 00:24:03,640 eftersom jag gjorde inte det frågesport. 517 00:24:03,640 --> 00:24:06,370 Det var tänkt att vara en hjälp resurs från en annan TF. 518 00:24:06,370 --> 00:24:11,380 Om du skapar en sträng på stapla eller som en lokal variabel, kommer den 519 00:24:11,380 --> 00:24:16,920 bara vara matris av laddningar snarare än allmänhet en char stjärna som pekar på 520 00:24:16,920 --> 00:24:18,600 en annan sträng. 521 00:24:18,600 --> 00:24:20,550 Men jag vet inte. 522 00:24:20,550 --> 00:24:25,065 Det skulle kunna vara en pekare till en annan strängen på stacken också. 523 00:24:25,065 --> 00:24:27,240 Yeah. 524 00:24:27,240 --> 00:24:31,116 >> STUDENT: Jag vet att du behöver allokera minne om pekaren är 525 00:24:31,116 --> 00:24:33,360 bli förklarade inuti av en annan funktion. 526 00:24:33,360 --> 00:24:36,740 Behöver du göra samma sak om det är deklareras inuti huvud, 527 00:24:36,740 --> 00:24:39,570 du använder den inne i huvud? 528 00:24:39,570 --> 00:24:43,590 >> JASON Hirschhorn: Så ja. 529 00:24:43,590 --> 00:24:46,670 Du kan deklarera en pekare till någon minnesadress i minnet. 530 00:24:46,670 --> 00:24:51,440 Det kan vara minnesadressen för en lokal variabel, men ofta nog, 531 00:24:51,440 --> 00:24:55,760 människor inte förklara minnesadresser till lokala variabler eftersom de går 532 00:24:55,760 --> 00:24:59,890 bort en gång att funktionen returnerar, vilket är därför vi malloc allmänhet saker. 533 00:24:59,890 --> 00:25:04,630 Men ja, kan du deklarera en pekare till en annan lokal variabel. 534 00:25:04,630 --> 00:25:06,360 Det är bara i allmänhet inte gjort. 535 00:25:06,360 --> 00:25:09,480 Men jag kan ta en titt på det specifik sak efter klass. 536 00:25:09,480 --> 00:25:10,650 Yeah. 537 00:25:10,650 --> 00:25:12,350 >> STUDENT: Jag tror att det är en slags om vad som ställs. 538 00:25:12,350 --> 00:25:16,930 Det verkar konstigt att initialisera en pekare inte som en 539 00:25:16,930 --> 00:25:20,760 adress, men som vad verkar som ett värde. 540 00:25:20,760 --> 00:25:25,970 Det verkar som om CS50 är vad som finns inuti den sak som pekade på och 541 00:25:25,970 --> 00:25:28,820 inte själva adressen, eller hur? 542 00:25:28,820 --> 00:25:30,520 >> JASON Hirschhorn: Så det är inte är fallet, även om. 543 00:25:30,520 --> 00:25:32,470 Det är inte vad som händer. 544 00:25:32,470 --> 00:25:35,910 När du deklarerar en röding stjärna, det är en minnesadress. 545 00:25:35,910 --> 00:25:38,860 Pointers är alla minnesadresser pekar på något annat. 546 00:25:38,860 --> 00:25:41,480 Att något annat skulle vara på stacken, men nästan alltid är på 547 00:25:41,480 --> 00:25:43,440 heap på det sätt vi kommer att se det används. 548 00:25:43,440 --> 00:25:46,860 549 00:25:46,860 --> 00:25:53,500 Men stringname lika dubbel-citat "GetString," kan vi se att vi 550 00:25:53,500 --> 00:25:55,010 kan titta igenom det och koda det. 551 00:25:55,010 --> 00:26:01,190 getString sträng inte sparas i den variabeln, eller vad strängen 552 00:26:01,190 --> 00:26:04,580 Namnet är inte sparas i det variabel, inte för att det är så 553 00:26:04,580 --> 00:26:06,070 pekare fungerar. 554 00:26:06,070 --> 00:26:06,770 Låter det vettigt? 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 Förhoppningsvis var det inte förvirrande för någon. 558 00:26:11,690 --> 00:26:15,732 Men om det var, kan vi titta på det igen i lite, eftersom vi faktiskt kommer 559 00:26:15,732 --> 00:26:19,240 att koda något som förhoppningsvis arbeta med stråkar och hjälpa dig att känna 560 00:26:19,240 --> 00:26:22,170 mer bekväm med dem. 561 00:26:22,170 --> 00:26:24,869 >> Alla andra frågor som rör dessa ämnen eller andra ämnen som 562 00:26:24,869 --> 00:26:26,119 Jag lägger tillbaka upp? 563 00:26:26,119 --> 00:26:32,280 564 00:26:32,280 --> 00:26:34,840 Och - 565 00:26:34,840 --> 00:26:36,310 just nu. 566 00:26:36,310 --> 00:26:37,630 Ja, Alden. 567 00:26:37,630 --> 00:26:39,860 >> ALDEN: Så det här är helt orelaterade, men kan vi gå drygt 568 00:26:39,860 --> 00:26:42,760 riktigt snabbt vad vi behöver veta om skillnaden mellan en 32 och 569 00:26:42,760 --> 00:26:46,345 64-bitars maskin? 570 00:26:46,345 --> 00:26:47,740 >> JASON Hirschhorn: Ja. 571 00:26:47,740 --> 00:26:52,111 Så 32 bitar är hur många byte? 572 00:26:52,111 --> 00:26:53,060 >> ALDEN: Det är fyra byte. 573 00:26:53,060 --> 00:26:54,360 >> JASON Hirschhorn: Det är fyra byte. 574 00:26:54,360 --> 00:26:58,420 Och 64 bitar är hur många byte? 575 00:26:58,420 --> 00:26:59,112 >> STUDENT: Åtta. 576 00:26:59,112 --> 00:27:00,610 >> JASON Hirschhorn: Åtta byte. 577 00:27:00,610 --> 00:27:03,980 Så återigen, är åtta bitar en byte. 578 00:27:03,980 --> 00:27:08,340 Din CS50 apparat är en 32-bitars maskin. 579 00:27:08,340 --> 00:27:13,650 Så minnesadresser är fyra bitgrupper långa. 580 00:27:13,650 --> 00:27:17,460 Det finns 2 till 32 minnesadresser. 581 00:27:17,460 --> 00:27:21,310 0 till 2 till 32 minus ett. 582 00:27:21,310 --> 00:27:27,630 Och jag är inte positiv, men det är förmodligen omfattningen av vad du behöver 583 00:27:27,630 --> 00:27:35,230 vet för ett 32-bitars maskin, det minne adresser är, återigen, fyra byte lång, 584 00:27:35,230 --> 00:27:39,620 och det är det högsta belopp av minnesadresser. 585 00:27:39,620 --> 00:27:41,680 >> Även datatyper - 586 00:27:41,680 --> 00:27:45,020 detta kan vara något som ja det är värt att notera. 587 00:27:45,020 --> 00:27:49,610 Storleken på en datatyp beror på maskinen som du arbetar med. 588 00:27:49,610 --> 00:27:56,760 Så en röding, ett tecken, är hur många byte på vår CS50 apparaten? 589 00:27:56,760 --> 00:27:57,980 En byte. 590 00:27:57,980 --> 00:28:02,310 Och det är faktiskt en byte som väl på en 64-bitars maskin. 591 00:28:02,310 --> 00:28:05,920 >> Och de flesta datatyper är lika många för byte på båda maskinerna. 592 00:28:05,920 --> 00:28:11,620 Men vissa datatyper kommer att vara annorlunda på båda maskinerna. 593 00:28:11,620 --> 00:28:14,590 Så det skulle vara potentiellt enda du behöver veta. 594 00:28:14,590 --> 00:28:16,710 >> Men även det, tror jag, är bortom gränserna - 595 00:28:16,710 --> 00:28:20,990 Jag är nästan säker, om man tittar tillbaka på gamla frågesporter, den säger, antar för 596 00:28:20,990 --> 00:28:24,090 kodning problem du använder en 32-bitars maskin. 597 00:28:24,090 --> 00:28:26,620 598 00:28:26,620 --> 00:28:30,620 Men det finns, att gå med på det i Om du är intresserad, det finns 599 00:28:30,620 --> 00:28:35,920 datatyper som är samma storlek på alla maskiner. 600 00:28:35,920 --> 00:28:42,670 >> Om du har sett något liknande uint32_t, kan du eller kan 601 00:28:42,670 --> 00:28:43,260 har inte sett det. 602 00:28:43,260 --> 00:28:44,290 Det är en datatyp. 603 00:28:44,290 --> 00:28:47,570 Det säger, vara 32 bitar oavsett vilken maskin det är på. 604 00:28:47,570 --> 00:28:50,350 Så när folk skriver bärbara kod, de förmodligen inte kommer att använda ints. 605 00:28:50,350 --> 00:28:53,260 De kommer i stället använda dessa andra data typer som de vet kommer att vara samma 606 00:28:53,260 --> 00:28:54,780 storleken på varje enskild maskin. 607 00:28:54,780 --> 00:28:58,080 608 00:28:58,080 --> 00:28:58,250 Madhu. 609 00:28:58,250 --> 00:29:00,150 >> Madhu: Jag hade en fråga om kompileringsprocessen. 610 00:29:00,150 --> 00:29:04,110 Så om du skriver ett program som använder ett bibliotek som CS50 eller något 611 00:29:04,110 --> 00:29:06,840 så där, jag vet att det biblioteket har att, någon gång, vara 612 00:29:06,840 --> 00:29:08,590 kompileras och länkas in 613 00:29:08,590 --> 00:29:13,380 Men hur mycket av det som händer under sammanställning av ditt program? 614 00:29:13,380 --> 00:29:15,880 Vilken del av det biblioteket process uppstår när du är 615 00:29:15,880 --> 00:29:18,560 sammanställa ett eget program? 616 00:29:18,560 --> 00:29:24,020 >> JASON Hirschhorn: Så låt oss gå över generellt stegen i denna process. 617 00:29:24,020 --> 00:29:26,280 Du skriver ditt. C-fil. 618 00:29:26,280 --> 00:29:33,530 I ditt. C-fil, du # inkludera din header-bibliotek, till exempel, cs50.h. 619 00:29:33,530 --> 00:29:39,480 Vad gör det skarpa inkluderar line gör att ditt program? 620 00:29:39,480 --> 00:29:40,525 Akchar. 621 00:29:40,525 --> 00:29:43,350 >> AKCHAR: Det lägger prototyper av funktionerna från huvudet 622 00:29:43,350 --> 00:29:45,120 filer i biblioteken. 623 00:29:45,120 --> 00:29:45,600 >> JASON Hirschhorn: Exakt. 624 00:29:45,600 --> 00:29:49,870 Det ger dessa funktionsprototyper till din kod. 625 00:29:49,870 --> 00:29:55,230 Så när din kod sammanställs i ett tidigt skede, kompilatorn vet 626 00:29:55,230 --> 00:29:59,250 att dessa funktioner verkligen existerar, och det någonstans de har definierats. 627 00:29:59,250 --> 00:30:02,460 De. H filerna inkluderar inte definitioner för dessa funktioner eller hur 628 00:30:02,460 --> 00:30:03,950 de faktiskt arbetar. 629 00:30:03,950 --> 00:30:07,960 Cs50.h innehåller bara något som säger getString är en äkta vara som 630 00:30:07,960 --> 00:30:09,270 kan hända. 631 00:30:09,270 --> 00:30:14,240 Och standardio.h säger printf är en riktig sak som kan hända. 632 00:30:14,240 --> 00:30:23,190 >> Så din C språket med denna. Header fil blir förvandlas till något 633 00:30:23,190 --> 00:30:27,750 maskinläsbar kod, som så småningom förvandlas till binär 634 00:30:27,750 --> 00:30:30,030 kod, 0 s och 1 s. 635 00:30:30,030 --> 00:30:33,590 Och det är den kod som i slutändan blir avrättade. 636 00:30:33,590 --> 00:30:38,550 Den-l CS50 linjen - till exempel när du skriver klang - 637 00:30:38,550 --> 00:30:41,830 och då inkludera-l CS50, du skriver det i. 638 00:30:41,830 --> 00:30:42,180 Och du ser det. 639 00:30:42,180 --> 00:30:43,890 När du skriver att göra, kommer du se att rada upp här. 640 00:30:43,890 --> 00:30:47,740 Och vi ser att i ett andra när vi koda eller senare när vi koden. 641 00:30:47,740 --> 00:30:50,390 >> Men det-l CS50 linje gör något lite annorlunda än 642 00:30:50,390 --> 00:30:52,440 # include cs50.h. 643 00:30:52,440 --> 00:30:56,300 Vad betyder det-l CS50 linje göra? 644 00:30:56,300 --> 00:30:56,820 Avi? 645 00:30:56,820 --> 00:31:00,310 >> AVI: Jag vill säga att den länkar biblioteket till funktionen 646 00:31:00,310 --> 00:31:02,710 ring, liksom o filer.. 647 00:31:02,710 --> 00:31:08,200 >> JASON Hirschhorn: Så mycket nära, om inte perfekta. 648 00:31:08,200 --> 00:31:16,220 Den-l CS50 tar binär fil och går samman den med din binär fil. 649 00:31:16,220 --> 00:31:21,410 Så cs50.h, det finns ingen mening med att vända cs50.h från C-språk till binära varje 650 00:31:21,410 --> 00:31:23,130 enda gången den används. 651 00:31:23,130 --> 00:31:26,650 Det skulle vara dumt, eftersom det skulle slösa bort en massa tid. 652 00:31:26,650 --> 00:31:30,420 Så det har redan sammanställts och förvandlas till ett körbart. 653 00:31:30,420 --> 00:31:35,430 Och nu kommer det att slås samman med filen i slutet. 654 00:31:35,430 --> 00:31:38,370 Så de 1: or och 0 kommer att gå samman med dina kära 655 00:31:38,370 --> 00:31:39,150 och 0 är i slutet. 656 00:31:39,150 --> 00:31:43,670 Så nu att du faktiskt har den verkliga 1 och 0: att definiera hur getString, 657 00:31:43,670 --> 00:31:47,890 till exempel, fungerar, eller hur printf, till exempel, fungerar. 658 00:31:47,890 --> 00:31:52,750 >> Och för mer information, det finns en korta kompilatorer som Nate ger att 659 00:31:52,750 --> 00:31:55,410 du bör kolla som går igenom dessa steg. 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: Är de alltid i o-filer. när de är i biblioteket form, 663 00:32:01,700 --> 00:32:06,764 redo att slås ihop, kopplas - som de är i binär kod? 664 00:32:06,764 --> 00:32:07,600 >> JASON Hirschhorn: OK. 665 00:32:07,600 --> 00:32:08,420 Vad - 666 00:32:08,420 --> 00:32:11,780 >> STUDENT: Är det alltid fallet för biblioteken när du länkar dem? 667 00:32:11,780 --> 00:32:12,500 >> JASON Hirschhorn: Ja. 668 00:32:12,500 --> 00:32:17,300 Så det finns. S filer, som kommer att maskinkod, som också kommer att vara 669 00:32:17,300 --> 00:32:17,975 kryptiskt för dig. 670 00:32:17,975 --> 00:32:19,410 Du behöver inte oroa dig för dem. 671 00:32:19,410 --> 00:32:24,930 Men i allmänhet, ja, de ska vara. o filer redo att gå. 672 00:32:24,930 --> 00:32:27,170 >> STUDENT: Så när du sänder till ett bibliotek, behöver du bara fartyget 673 00:32:27,170 --> 00:32:28,880 den. h. och. o? 674 00:32:28,880 --> 00:32:32,210 Du behöver inte skicka. C. eller. S.. 675 00:32:32,210 --> 00:32:33,070 >> JASON Hirschhorn: So - 676 00:32:33,070 --> 00:32:36,260 och det är i detta kort och, om så denna information verkar komma en 677 00:32:36,260 --> 00:32:36,700 liten snabbt. 678 00:32:36,700 --> 00:32:39,870 Men den korta på kompilatorer talar om detta också. 679 00:32:39,870 --> 00:32:43,290 När du skickar ett bibliotek, om du skickar den. h, sidhuvudfilen, de 680 00:32:43,290 --> 00:32:46,290 funktionsprototyper och den 1: s och 0 s, det är allt du behöver för att ge. 681 00:32:46,290 --> 00:32:50,640 Du behöver inte ge hur Funktionen fungerar det. c-fil. 682 00:32:50,640 --> 00:32:56,360 Eftersom punkten för abstraktion, eller peka API: er, den punkt vid denna SPL, 683 00:32:56,360 --> 00:32:59,650 Stanford bärbara biblioteket, är det för dig att inte oroa sig för hur nya 684 00:32:59,650 --> 00:33:04,220 GRect fungerar, eller hur flytta verk, eller hur lägger fungerar. 685 00:33:04,220 --> 00:33:06,520 Allt du behöver veta är att add är en funktion som du kan 686 00:33:06,520 --> 00:33:08,880 använda, och det gör det. 687 00:33:08,880 --> 00:33:12,760 Så du egentligen inte behöver veta hur det är skrivet i C. Du behöver bara 688 00:33:12,760 --> 00:33:15,460 vet, här är de funktioner, vad de göra, och här är de 1: or och 0 689 00:33:15,460 --> 00:33:18,870 när du verkligen vill använda dem. 690 00:33:18,870 --> 00:33:19,530 >> Cool. 691 00:33:19,530 --> 00:33:26,980 Några fler frågor om kompilatorer eller andra ämnen på tavlan? 692 00:33:26,980 --> 00:33:30,300 >> STUDENT: Jag har en fråga om genomförande rekursiva funktioner. 693 00:33:30,300 --> 00:33:31,170 En fråga om rekursion. 694 00:33:31,170 --> 00:33:33,030 Jag hade en känsla som skulle komma upp. 695 00:33:33,030 --> 00:33:38,310 Så låt oss snabbt gå igenom rekursion med en specifik 696 00:33:38,310 --> 00:33:40,690 exempelvis en faktoriell funktion. 697 00:33:40,690 --> 00:33:44,920 Eftersom detta är ett exempel som ofta kommer upp eller används 698 00:33:44,920 --> 00:33:46,170 att illustrera 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 fakulteten. 701 00:33:56,410 --> 00:33:59,120 Och vad betyder 4 faktoriell detta? 702 00:33:59,120 --> 00:34:00,696 Vad gör det? 703 00:34:00,696 --> 00:34:02,235 Hur beräknar 4 faktoriell? 704 00:34:02,235 --> 00:34:05,250 705 00:34:05,250 --> 00:34:07,960 4 gånger 3 gånger 2 gånger 1. 706 00:34:07,960 --> 00:34:11,889 >> Så ett annat sätt att skriva 4 faktoriell är att skriva det här. 707 00:34:11,889 --> 00:34:16,780 708 00:34:16,780 --> 00:34:19,022 4 gånger 3 faktoriell. 709 00:34:19,022 --> 00:34:22,080 Eftersom tre faktoriell är 3 gånger 2 gånger 1. 710 00:34:22,080 --> 00:34:27,580 Så 4 gånger 3 fakultet är 4 gånger 3 gånger 2 gånger 1. 711 00:34:27,580 --> 00:34:32,679 Därför fakultet är en stor kandidat för rekursion, eftersom det är 712 00:34:32,679 --> 00:34:36,630 klart att det är något som händer om och om och om igen på en 713 00:34:36,630 --> 00:34:39,820 mindre antal saker tills du kommer till slutet. 714 00:34:39,820 --> 00:34:42,570 När du når 1, är 1 faktoriell 1. 715 00:34:42,570 --> 00:34:43,719 Du kan inte gå mycket längre. 716 00:34:43,719 --> 00:34:47,219 0 faktoriell är också definieras som en. 717 00:34:47,219 --> 00:34:50,679 Så när du kommer till 1 eller 0, du är i slutet, och du kan 718 00:34:50,679 --> 00:34:53,219 börja gå upp igen. 719 00:34:53,219 --> 00:34:59,540 Så om vi ville skriva en rekursiv funktion för att beräkna en faktoriell, 720 00:34:59,540 --> 00:35:02,170 vi kommer att skriva några pseudokod för det nu. 721 00:35:02,170 --> 00:35:03,300 Innan vi skriver att pseudo - 722 00:35:03,300 --> 00:35:05,660 Jag ska ge er ett par minuter att skriva pseudokod eller bara tänka 723 00:35:05,660 --> 00:35:09,600 om det - det finns två saker som var rekursiv funktion behöver. 724 00:35:09,600 --> 00:35:12,530 Vilka är dessa två saker? 725 00:35:12,530 --> 00:35:13,220 >> JACK: Det har att kalla sig. 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 Varsågod. 729 00:35:15,100 --> 00:35:16,640 >> JACK: Det har att kalla sig. 730 00:35:16,640 --> 00:35:19,220 >> JASON Hirschhorn: Så en rekursiv Funktionen kräver ett rekursivt anrop, en 731 00:35:19,220 --> 00:35:20,220 kalla till sig själv. 732 00:35:20,220 --> 00:35:20,770 Det är ett. 733 00:35:20,770 --> 00:35:21,510 Och vad är den andra saken? 734 00:35:21,510 --> 00:35:22,250 >> JACK: Ett basfall. 735 00:35:22,250 --> 00:35:23,780 >> JASON Hirschhorn: Ett basfall. 736 00:35:23,780 --> 00:35:26,940 Ett basfall är, här är när vi slutar. 737 00:35:26,940 --> 00:35:29,510 Så din funktion anropas. 738 00:35:29,510 --> 00:35:31,410 Basen fall kommer först. 739 00:35:31,410 --> 00:35:33,710 Du vill veta om du är i slutet. 740 00:35:33,710 --> 00:35:37,110 Och om du inte är i slutet, du gör din rekursivt anrop. 741 00:35:37,110 --> 00:35:39,880 Och du går igenom den här funktionen igen, kolla din bas fallet igen. 742 00:35:39,880 --> 00:35:42,575 Om du inte är slutet, du gör ett rekursivt anrop, 743 00:35:42,575 --> 00:35:44,130 et cetera, et cetera. 744 00:35:44,130 --> 00:35:47,110 >> Därför rekursiva funktioner alltid behöver dessa grundfall och de 745 00:35:47,110 --> 00:35:48,210 rekursiva anrop. 746 00:35:48,210 --> 00:35:51,280 Om du inte har ett rekursivt anrop, det skulle inte vara en rekursiv funktion. 747 00:35:51,280 --> 00:35:53,210 Om du inte har ett basfall, du skulle gå för evigt och 748 00:35:53,210 --> 00:35:54,780 skulle det inte finnas något slut. 749 00:35:54,780 --> 00:35:57,870 Och basfallet kommer alltid först, eftersom du alltid vill kontrollera 750 00:35:57,870 --> 00:36:00,420 om du är i slutet först. 751 00:36:00,420 --> 00:36:04,770 Så innan vi gör något pseudo, varför behöver du inte ta en minut att tänka på 752 00:36:04,770 --> 00:36:09,360 hur en rekursiv faktor funktion skulle skrivas? 753 00:36:09,360 --> 00:36:23,340 754 00:36:23,340 --> 00:36:26,010 >> Också, så många som du gör, skrift den ut på ett pappersark som är 755 00:36:26,010 --> 00:36:27,960 vad du kommer att behöva göra på frågesport i morgon. 756 00:36:27,960 --> 00:36:32,160 Så antagligen bra att göra Kontrollera koden du skriver 757 00:36:32,160 --> 00:36:34,420 ner på papper - 758 00:36:34,420 --> 00:36:35,160 eller så kan du göra det. 759 00:36:35,160 --> 00:36:36,710 Du vet var semikolon är. 760 00:36:36,710 --> 00:36:37,660 Du kommer ihåg syntaxen. 761 00:36:37,660 --> 00:36:40,400 Eftersom du inte kunna ha en kompilator berätta gjort ett fel. 762 00:36:40,400 --> 00:37:02,356 763 00:37:02,356 --> 00:37:07,240 >> Även i denna riktning, i morgon, när du har kodningsproblem, om du 764 00:37:07,240 --> 00:37:11,490 rusade för tid, eller om du är mycket förvirrad om hur du ska 765 00:37:11,490 --> 00:37:16,030 skriver viss sak i c, det skulle BÖRA dig att skriva pseudokod 766 00:37:16,030 --> 00:37:18,160 eller skriva kommentarer i också. 767 00:37:18,160 --> 00:37:21,940 Eftersom det finns partiell kredit för en Många av frågorna på frågesporten. 768 00:37:21,940 --> 00:37:24,840 Så du kan vara rusade, eller du skulle bara bli förvirrad. 769 00:37:24,840 --> 00:37:28,030 Att skriva in kommentarer eller pseudo-kod är ofta ett sätt som du 770 00:37:28,030 --> 00:37:29,360 kan få del av krediten. 771 00:37:29,360 --> 00:37:31,440 >> Så inte lämna något tomt på frågesport. 772 00:37:31,440 --> 00:37:33,490 Det finns inga straff för sätta saker i. 773 00:37:33,490 --> 00:37:37,650 Faktum är att sätta i pseudo-kod eller kommentarer kommer att hjälpa grader 774 00:37:37,650 --> 00:37:40,410 räkna ut om du verkligen vet vad du pratar om, och kanske utmärkelse 775 00:37:40,410 --> 00:37:42,030 du någon partiell kredit för det. 776 00:37:42,030 --> 00:37:44,510 >> Också i den stilen, skriva klart. 777 00:37:44,510 --> 00:37:47,650 Om vi ​​kan inte riktigt vad du skriver, Vi kommer inte att ringa dig 778 00:37:47,650 --> 00:37:49,900 vid midnatt i morgon figur ut vad du skrev. 779 00:37:49,900 --> 00:37:51,520 Vi ska bara ta bort punkter. 780 00:37:51,520 --> 00:37:56,570 Skriv tydligt så att vi kan höra, eller snarare, vi kan läsa vad du skrev. 781 00:37:56,570 --> 00:38:00,230 >> Och om det står två meningar, inte skriva ett stycke. 782 00:38:00,230 --> 00:38:02,280 Följ instruktionerna. 783 00:38:02,280 --> 00:38:03,500 Skriv tydligt. 784 00:38:03,500 --> 00:38:07,720 Och skriver i dessa kommentarer eller pseudokod för frågor som skulle kunna 785 00:38:07,720 --> 00:38:10,270 utmärkelse partiell kredit. 786 00:38:10,270 --> 00:38:12,520 >> OK, låt oss gå till factorial. 787 00:38:12,520 --> 00:38:15,000 Så vi har en funktion fakulteten. 788 00:38:15,000 --> 00:38:18,400 789 00:38:18,400 --> 00:38:21,550 Om jag skulle faktiskt skriva detta i C, Vad behöver jag för att sätta före namnet 790 00:38:21,550 --> 00:38:22,800 av funktionen? 791 00:38:22,800 --> 00:38:24,880 792 00:38:24,880 --> 00:38:30,060 Typen retur, som i detta fall ger vi det int. 793 00:38:30,060 --> 00:38:35,450 Och sedan innanför klammerparenteserna, är vad går innanför klammerparenteserna för 794 00:38:35,450 --> 00:38:36,850 en funktion? 795 00:38:36,850 --> 00:38:37,950 >> STUDENTER: Argument typ. 796 00:38:37,950 --> 00:38:39,150 >> JASON Hirschhorn: Dess argument. 797 00:38:39,150 --> 00:38:42,680 Så fakultet kommer förmodligen ta ett argument. 798 00:38:42,680 --> 00:38:44,500 Det kommer nog bara ta ett argument. 799 00:38:44,500 --> 00:38:49,450 Och vi säger det tar ett heltal som kallas x. 800 00:38:49,450 --> 00:38:52,770 Och återigen, när du skriver en prototyp av en funktion eller skriva funktionen 801 00:38:52,770 --> 00:38:57,110 i koden innan du definierar det, du skriva datatypen och namnet på 802 00:38:57,110 --> 00:39:01,370 den variabeln för endast den funktionen. 803 00:39:01,370 --> 00:39:06,350 Så du kan skicka några nummer i detta funktion, kommer det att kallas x 804 00:39:06,350 --> 00:39:07,340 internt. 805 00:39:07,340 --> 00:39:08,755 >> Vi har vår fakulteten. 806 00:39:08,755 --> 00:39:12,030 807 00:39:12,030 --> 00:39:15,850 Vi behöver två saker, ett basfall och ett rekursivt anrop. 808 00:39:15,850 --> 00:39:20,900 Vad är basfallet för faktor? 809 00:39:20,900 --> 00:39:24,850 Någon som skrev ut det och vem har inte talat ännu, vad är basen 810 00:39:24,850 --> 00:39:26,100 fall för fakultet? 811 00:39:26,100 --> 00:39:28,400 812 00:39:28,400 --> 00:39:30,930 >> STUDENT: Om n är mindre än 2, returnera 1. 813 00:39:30,930 --> 00:39:33,520 >> JASON Hirschhorn: Om n är mindre än 2, returnera 1. 814 00:39:33,520 --> 00:39:37,216 Jag gillar det, för det tar hand om 0 och 1. 815 00:39:37,216 --> 00:39:45,290 Så vi ska göra x <2, avkastning 1. 816 00:39:45,290 --> 00:39:47,870 Om vi ​​få passerat 0, om vi får passerade 1, denna funktion kommer 817 00:39:47,870 --> 00:39:49,790 omedelbart åter 1. 818 00:39:49,790 --> 00:39:54,020 Om vi ​​få passerat några nummer större än eller lika med 2, kommer vi att 819 00:39:54,020 --> 00:39:55,370 har vår rekursiva anrop. 820 00:39:55,370 --> 00:39:57,855 >> Och så hur ska det gå till? 821 00:39:57,855 --> 00:40:01,070 Kan någon annan som arbetat med detta vem har inte pratat ännu ge mig 822 00:40:01,070 --> 00:40:07,380 rekursivt anrop till denna funktion i pseudokod? 823 00:40:07,380 --> 00:40:10,770 Om vi ​​få passerat i ett tal x och det är större än 2, vilken 824 00:40:10,770 --> 00:40:13,370 vill vi göra? 825 00:40:13,370 --> 00:40:17,930 Vi har också ett exempel skrivet på sida som kan ge dig en ledtråd. 826 00:40:17,930 --> 00:40:20,770 >> STUDENT: Kalla x gånger fakulteten av x minus 1? 827 00:40:20,770 --> 00:40:22,020 >> JASON Hirschhorn: Exakt rätt. 828 00:40:22,020 --> 00:40:24,610 829 00:40:24,610 --> 00:40:37,750 Vi kommer att återvända x gånger fakulteten för x minus 1. 830 00:40:37,750 --> 00:40:41,810 Och det, trots att jag skrev upp, i grund och botten, det du sa på engelska, 831 00:40:41,810 --> 00:40:44,580 denna faktoriell funktion kommer att få kallas igen. 832 00:40:44,580 --> 00:40:46,320 Det kommer att köras på x minus 1. 833 00:40:46,320 --> 00:40:49,320 Det kommer tillbaka med något heltal, och då det kommer att multiplicera dessa två 834 00:40:49,320 --> 00:40:52,050 tillsammans, och detta värde kommer att vara tillbaka till vad som kallas det 835 00:40:52,050 --> 00:40:55,010 faktoriell funktion, vilket kan vara en annan instans av 836 00:40:55,010 --> 00:40:58,420 denna fakulteten. 837 00:40:58,420 --> 00:41:01,360 >> Så det är ett exempel på en rekursiv funktion, en mycket 838 00:41:01,360 --> 00:41:02,530 enkel rekursiv funktion. 839 00:41:02,530 --> 00:41:04,530 Men de flesta av dem kommer att vara så här. 840 00:41:04,530 --> 00:41:11,170 Om du vill ha en bra rekursiv utmaning för frågesport, prova kodning 841 00:41:11,170 --> 00:41:13,230 binär sökning rekursivt. 842 00:41:13,230 --> 00:41:18,950 För om du gjorde binär sökning efter Problemet set tre, gjorde du antagligen det 843 00:41:18,950 --> 00:41:21,730 iterativt i en while-slinga. 844 00:41:21,730 --> 00:41:23,700 >> Men det kan också vara skrivet rekursivt. 845 00:41:23,700 --> 00:41:26,310 Du kommer att behöva skriva en egen separat funktion som tar lite 846 00:41:26,310 --> 00:41:29,020 olika kommandoradsargument - eller inte kommandoradsargument, vissa 847 00:41:29,020 --> 00:41:30,910 olika bara vanliga argument. 848 00:41:30,910 --> 00:41:33,870 Men du kan skriva binär sökning rekursivt också. 849 00:41:33,870 --> 00:41:36,190 >> STUDENT: Så du kunde har också skrivit, istället för x minus 1, du 850 00:41:36,190 --> 00:41:39,502 kunde också skrivit x minus minus, eller du kan ha 851 00:41:39,502 --> 00:41:40,830 skriftlig minus minus x. 852 00:41:40,830 --> 00:41:44,740 Kan du förklara riktigt snabbt varför de skulle vara olika saker, 853 00:41:44,740 --> 00:41:49,510 liksom vad skillnaden är mellan x minus minus och minus minus x? 854 00:41:49,510 --> 00:41:51,320 >> JASON Hirschhorn: Nej, jag är inte kommer att gå in i det. 855 00:41:51,320 --> 00:41:55,500 Men jag kommer att prata med dig om det efter klass. x minus minus minus minus x 856 00:41:55,500 --> 00:41:57,780 dekrementera x med 1. 857 00:41:57,780 --> 00:41:59,090 Men de gör det lite annorlunda. 858 00:41:59,090 --> 00:42:00,340 Men jag vill inte gå in på det. 859 00:42:00,340 --> 00:42:04,330 860 00:42:04,330 --> 00:42:09,090 Övriga frågor om rekursion eller den här funktionen? 861 00:42:09,090 --> 00:42:10,140 Det är egentligen inte ens pseudokod. 862 00:42:10,140 --> 00:42:15,060 Det är i grunden koden i C du skulle skriva om detta. 863 00:42:15,060 --> 00:42:19,393 >> OK, några andra frågor om ämnen här uppe? 864 00:42:19,393 --> 00:42:19,864 Yeah. 865 00:42:19,864 --> 00:42:23,130 >> STUDENT: Jag har en snabb genomgång av flyttal och precision. 866 00:42:23,130 --> 00:42:24,260 >> JASON Hirschhorn: Flytande punkt och precision. 867 00:42:24,260 --> 00:42:26,920 Kan någon verkligen snabbt ge mig en genomgång av 868 00:42:26,920 --> 00:42:28,210 flyttal och precision? 869 00:42:28,210 --> 00:42:30,420 Ni alla var tvungna att göra det för din problem set, så du är allt 870 00:42:30,420 --> 00:42:31,700 bekant med den. 871 00:42:31,700 --> 00:42:35,090 Eller kanske inte alla av er. 872 00:42:35,090 --> 00:42:36,602 Någon? 873 00:42:36,602 --> 00:42:39,530 Ge mig ett började fläck. 874 00:42:39,530 --> 00:42:40,750 Flyttals och precision. 875 00:42:40,750 --> 00:42:42,380 Vad är 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 Ursäkta. 881 00:42:45,680 --> 00:42:51,550 >> VANESSA: Det finns bara ett begränsat antal av tal som kan representeras 882 00:42:51,550 --> 00:42:57,930 eftersom du är på en, i vårt fallet, ett 32-bitars system. 883 00:42:57,930 --> 00:43:03,080 Så du slags måste göra upp några siffror. 884 00:43:03,080 --> 00:43:03,910 >> JASON Hirschhorn: Så det är exakt rätt. 885 00:43:03,910 --> 00:43:08,110 Det finns bara en viss mängd siffror som kan vara representerade. 886 00:43:08,110 --> 00:43:11,770 Om du multiplicerar två mycket stora antal, det kan svämma över den mängd 887 00:43:11,770 --> 00:43:13,950 platser du måste representera ett heltal. 888 00:43:13,950 --> 00:43:17,930 Det är därför vi ibland använder en lång lång istället för en int. 889 00:43:17,930 --> 00:43:19,210 Det har mer utrymmen. 890 00:43:19,210 --> 00:43:21,210 Det kan hålla ett större antal. 891 00:43:21,210 --> 00:43:24,310 >> Flyttal precision har att göra med som, men har också att göra med 892 00:43:24,310 --> 00:43:29,300 faktum att decimaltal är inte alltid representerade. 893 00:43:29,300 --> 00:43:29,540 Ursäkta. 894 00:43:29,540 --> 00:43:31,280 Låt mig uttrycka det tillbaka upp. 895 00:43:31,280 --> 00:43:36,610 Det decimaltal 1.0 är inte alltid representerade som du förväntar dig, 896 00:43:36,610 --> 00:43:40,770 1,000000000. 897 00:43:40,770 --> 00:43:50,360 Det är ibland representeras som 1,000000001 eller 0,999999999. 898 00:43:50,360 --> 00:43:52,780 Det kan vara till och med 89 kastas där någonstans. 899 00:43:52,780 --> 00:43:56,560 Så de decimaltal inte representerade precis som du skulle 900 00:43:56,560 --> 00:43:58,430 förvänta oss att vara representerade. 901 00:43:58,430 --> 00:44:00,010 >> Så i problembild - 902 00:44:00,010 --> 00:44:00,860 var det två? - 903 00:44:00,860 --> 00:44:05,290 Problemet set två, där vi behandlat flyttal, när vi ville 904 00:44:05,290 --> 00:44:08,690 dem att representera exakt vad vi ville dem för att representera, antalet 905 00:44:08,690 --> 00:44:12,860 av pennies, eller antalet cent, vi multiplicera med 100. 906 00:44:12,860 --> 00:44:14,750 Vi rundade dem. 907 00:44:14,750 --> 00:44:18,660 Och då vi avbröt allt bakom decimaltecknet. 908 00:44:18,660 --> 00:44:22,020 Det var för att de skulle faktiskt lika exakt vad vi ville 909 00:44:22,020 --> 00:44:22,410 dem till lika. 910 00:44:22,410 --> 00:44:26,870 >> För när du tar något som är en flyta och förvandla det till en int, du 911 00:44:26,870 --> 00:44:29,860 avskurna allt till höger om decimalkommat. 912 00:44:29,860 --> 00:44:33,900 Eftersom det finns vissa flyttal vaghet, 100.000 kanske 913 00:44:33,900 --> 00:44:37,440 representerade som 99,999999999. 914 00:44:37,440 --> 00:44:40,350 Och om du bara klippa bort allt till rätt på en gång, du kommer att 915 00:44:40,350 --> 00:44:41,600 får fel nummer. 916 00:44:41,600 --> 00:44:44,050 917 00:44:44,050 --> 00:44:44,180 Yeah. 918 00:44:44,180 --> 00:44:45,290 >> STUDENT: Jag hade en fråga om gjutning. 919 00:44:45,290 --> 00:44:47,500 Vilken ordning förekommer det i? 920 00:44:47,500 --> 00:44:54,480 Om du skulle göra float, fästen, 1 uppdelad med 10, det gör 1 delat med 10, 921 00:44:54,480 --> 00:44:58,910 sedan få 0,1, slå sedan den i en flottör? 922 00:44:58,910 --> 00:45:01,470 >> JASON Hirschhorn: Om du gör flyta 1 dividerat med 10 - 923 00:45:01,470 --> 00:45:02,550 >> STUDENT: Ja, och sedan lika - 924 00:45:02,550 --> 00:45:04,240 Tja, skulle det normalt ha det lika i - 925 00:45:04,240 --> 00:45:04,690 Yeah. 926 00:45:04,690 --> 00:45:06,760 Du vill göra det en flottör, eller hur? 927 00:45:06,760 --> 00:45:12,790 >> JASON Hirschhorn: OK, så vi ska använda det för att segue in räkna ut 928 00:45:12,790 --> 00:45:15,390 svaren på dessa frågor genom kodning. 929 00:45:15,390 --> 00:45:18,180 Eftersom du förmodligen har en hel del dessa små frågor, och ett bra sätt 930 00:45:18,180 --> 00:45:19,100 att lösa dem är genom kodning. 931 00:45:19,100 --> 00:45:21,320 Så vi kommer att koda detta just nu, och sedan ska vi gå tillbaka och 932 00:45:21,320 --> 00:45:24,020 koda den fråga du hade. 933 00:45:24,020 --> 00:45:24,950 >> Så den första raden - 934 00:45:24,950 --> 00:45:29,390 Jag borde inte ha skrivit det - vad är det första vi vill göra när vi 935 00:45:29,390 --> 00:45:32,250 öppna upp en ny fil i gedit? 936 00:45:32,250 --> 00:45:34,190 >> STUDENT: Inkludera. 937 00:45:34,190 --> 00:45:35,920 >> JASON Hirschhorn: Ta med vad? 938 00:45:35,920 --> 00:45:37,952 >> STUDENTEN CS50 bibliotek. 939 00:45:37,952 --> 00:45:39,920 >> JASON Hirschhorn: OK. 940 00:45:39,920 --> 00:45:42,590 Vad ska vi med? 941 00:45:42,590 --> 00:45:46,820 Vi ska bara kolla vad som händer när du kastar något på ett flöte. 942 00:45:46,820 --> 00:45:48,605 Men vad behöver vi för att inkludera om vi ska skriva en C-programmet? 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 egentligen inte behöver, för detta program, cs50.h, även om det är 946 00:45:54,880 --> 00:45:55,920 alltid bra att ta med den. 947 00:45:55,920 --> 00:45:58,260 Men vi behöver alltid stdio.h. 948 00:45:58,260 --> 00:45:59,660 >> STUDENT: Vid kodning i C? 949 00:45:59,660 --> 00:46:15,770 >> JASON Hirschhorn: Vid kodning i C. 950 00:46:15,770 --> 00:46:17,090 >> Så jag sparar den som detta. C-fil. 951 00:46:17,090 --> 00:46:18,590 Jag får några trevliga syntaxmarkering. 952 00:46:18,590 --> 00:46:22,890 Jag skrev tomrum inuti huvud. 953 00:46:22,890 --> 00:46:24,792 Vad betyder tomrum detta? 954 00:46:24,792 --> 00:46:26,740 >> STUDENTEN inte vidtar några kommandoradsargument. 955 00:46:26,740 --> 00:46:28,900 >> JASON Hirschhorn: Utgår medel, i detta fall inte huvud inte vidta några 956 00:46:28,900 --> 00:46:29,700 kommandoradsargument. 957 00:46:29,700 --> 00:46:32,720 I andra fall, innebär det att funktionen tar inte kommandoradsargument. 958 00:46:32,720 --> 00:46:36,560 Eller funktionen, om jag skulle skriva ogiltiga main (void), skulle det säga huvud s 959 00:46:36,560 --> 00:46:38,460 inte returnera någonting. 960 00:46:38,460 --> 00:46:39,960 Så tomrum bara betyder ingenting. 961 00:46:39,960 --> 00:46:42,510 Vad skulle jag skriva om jag skulle ta kommandoradsargument? 962 00:46:42,510 --> 00:46:45,250 963 00:46:45,250 --> 00:46:47,150 >> STUDENT: int arc c sträng båge v. 964 00:46:47,150 --> 00:46:49,055 >> JASON Hirschhorn: int argc sträng argv. 965 00:46:49,055 --> 00:46:54,050 966 00:46:54,050 --> 00:46:55,572 Är det rätt? 967 00:46:55,572 --> 00:46:58,720 >> STUDENT: Det är röding stjärna argv parentes. 968 00:46:58,720 --> 00:47:01,730 >> JASON Hirschhorn: Så du kan skriva sträng argv fästen eller röding stjärna argv 969 00:47:01,730 --> 00:47:03,710 konsoler, men du behöver konsolerna. 970 00:47:03,710 --> 00:47:06,290 Eftersom argv är en array strängar, minns. 971 00:47:06,290 --> 00:47:07,360 Det är inte bara en sträng. 972 00:47:07,360 --> 00:47:10,350 Så sträng argv är, här är en sträng som heter argv. 973 00:47:10,350 --> 00:47:13,630 String argv parentes är, här är en array av strängar. 974 00:47:13,630 --> 00:47:17,865 Så int argc sträng argv parentes skulle vara något som jag 975 00:47:17,865 --> 00:47:18,810 skulle förmodligen skriva. 976 00:47:18,810 --> 00:47:23,050 >> Så du vill spara i ett heltal? 977 00:47:23,050 --> 00:47:24,285 >> STUDENT: Ja, heltal. 978 00:47:24,285 --> 00:47:25,840 Eller i ett flöte. 979 00:47:25,840 --> 00:47:26,710 >> JASON Hirschhorn: I en flottör? 980 00:47:26,710 --> 00:47:30,790 Liksom, lika float x 1 delat 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 Hur skriver jag ut en flottör i printf? 984 00:47:42,240 --> 00:47:45,100 985 00:47:45,100 --> 00:47:46,714 Vad? 986 00:47:46,714 --> 00:47:47,560 >> STUDENTEN% f.. 987 00:47:47,560 --> 00:47:48,300 >> JASON Hirschhorn:% f. 988 00:47:48,300 --> 00:47:50,810 Vad är ett heltal? 989 00:47:50,810 --> 00:47:52,110 d eller jag. 990 00:47:52,110 --> 00:47:53,000 Vad är en sträng? 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 Hur får jag en ny rad? 994 00:47:57,550 --> 00:47:58,800 >> STUDENT: omvänt snedstreck n. 995 00:47:58,800 --> 00:48:04,610 996 00:48:04,610 --> 00:48:07,100 >> JASON Hirschhorn: Vad ska jag tillbaka om huvud körs på rätt sätt? 997 00:48:07,100 --> 00:48:08,360 >> STUDENT: 0. 998 00:48:08,360 --> 00:48:09,430 Behöver jag skriva den linjen, men? 999 00:48:09,430 --> 00:48:10,170 >> STUDENT: Nej. 1000 00:48:10,170 --> 00:48:11,513 OK, vi kommer inte att skriva det, då. 1001 00:48:11,513 --> 00:48:16,450 1002 00:48:16,450 --> 00:48:17,190 Kan alla läsa det? 1003 00:48:17,190 --> 00:48:18,485 Det ser lite liten. 1004 00:48:18,485 --> 00:48:20,160 Kan alla se, eller bör Jag gör den större? 1005 00:48:20,160 --> 00:48:23,480 1006 00:48:23,480 --> 00:48:25,100 Jag tror att kameran gör vi det lite större, men. 1007 00:48:25,100 --> 00:48:35,750 1008 00:48:35,750 --> 00:48:38,410 >> JASON Hirschhorn: Om jag vill stänga av denna . C-filen till en körbar, vad 1009 00:48:38,410 --> 00:48:39,260 skriver jag? 1010 00:48:39,260 --> 00:48:41,610 >> STUDENT: Gör testet. 1011 00:48:41,610 --> 00:48:42,080 >> JASON Hirschhorn: Förlåt? 1012 00:48:42,080 --> 00:48:42,790 >> STUDENT: Gör testet. 1013 00:48:42,790 --> 00:48:44,040 >> JASON Hirschhorn: Gör testet. 1014 00:48:44,040 --> 00:48:46,700 1015 00:48:46,700 --> 00:48:48,410 Vi pratade om denna linje tidigare. 1016 00:48:48,410 --> 00:48:49,140 Klang. 1017 00:48:49,140 --> 00:48:51,270 Vad är det klang? 1018 00:48:51,270 --> 00:48:52,200 Namnet på kompilatorn. 1019 00:48:52,200 --> 00:48:53,920 Vad är det här raden? 1020 00:48:53,920 --> 00:48:55,580 >> STUDENT: Ställer upp för användning av GDB. 1021 00:48:55,580 --> 00:48:59,230 >> JASON Hirschhorn: Ställer det upp för användning av GDB. 1022 00:48:59,230 --> 00:49:02,338 Denna linje, vad är det? 1023 00:49:02,338 --> 00:49:03,290 >> STUDENT: Källkod. 1024 00:49:03,290 --> 00:49:06,010 >> JASON Hirschhorn: Det är den källfilen, den. c-fil. 1025 00:49:06,010 --> 00:49:08,150 Vad har dessa två linjer gör? 1026 00:49:08,150 --> 00:49:10,245 Eller dessa två inte linjer. 1027 00:49:10,245 --> 00:49:12,300 >> STUDENT: It namnger den testar. 1028 00:49:12,300 --> 00:49:15,410 >> JASON Hirschhorn: Så streck o säger, namnge den något annorlunda. 1029 00:49:15,410 --> 00:49:16,790 Och här du kallar det testet. 1030 00:49:16,790 --> 00:49:18,900 Om jag inte hade det i, vad skulle det nämna detta? 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 Vad gör detta? 1034 00:49:25,366 --> 00:49:27,670 >> STUDENTEN Länkar mattebiblioteket. 1035 00:49:27,670 --> 00:49:29,550 >> JASON Hirschhorn: Den länkar i mattebiblioteket. 1036 00:49:29,550 --> 00:49:32,880 Vi inkluderade inte mattebiblioteket, men eftersom det är så vanligt, de har 1037 00:49:32,880 --> 00:49:35,780 skrift gör att alltid inkludera mattebiblioteket. 1038 00:49:35,780 --> 00:49:39,050 Och på samma sätt, detta inkluderar den CS50 biblioteket. 1039 00:49:39,050 --> 00:49:43,010 >> OK, så om vi lista, nu har vi en körbar heter test. 1040 00:49:43,010 --> 00:49:45,150 För att köra det, jag skriver prov. 1041 00:49:45,150 --> 00:49:48,330 Jag ser att min flyttal, som väntat, är lika med 0. 1042 00:49:48,330 --> 00:49:50,890 1043 00:49:50,890 --> 00:49:51,590 Gör det - 1044 00:49:51,590 --> 00:49:52,060 så - 1045 00:49:52,060 --> 00:49:55,210 >> STUDENT: Sedan om du sätter flyter nu, som om du kastar det som float - 1046 00:49:55,210 --> 00:49:56,870 >> JASON Hirschhorn: Medverkande den 1 till ett flöte? 1047 00:49:56,870 --> 00:49:59,180 >> STUDENT: Nej, kasta hela saken - 1048 00:49:59,180 --> 00:49:59,500 ja. 1049 00:49:59,500 --> 00:50:02,460 Om du gjorde det, skulle som gör det 0,1? 1050 00:50:02,460 --> 00:50:07,170 >> JASON Hirschhorn: OK, så riktigt snabbt, 1 dividerat med 10, de är 1051 00:50:07,170 --> 00:50:08,690 heltal som delas. 1052 00:50:08,690 --> 00:50:13,580 Så när du delar heltal, de är 0, och du sparar som 0 i en 1053 00:50:13,580 --> 00:50:17,170 flyta, eftersom snedstreck är bara heltalsdivision. 1054 00:50:17,170 --> 00:50:19,180 Så nu vi vänder något in i en flottör. 1055 00:50:19,180 --> 00:50:21,650 >> Låt oss se vad som händer. 1056 00:50:21,650 --> 00:50:22,900 Vi kommer att göra testet. 1057 00:50:22,900 --> 00:50:25,870 1058 00:50:25,870 --> 00:50:31,090 Så nu ser vi att det snedstreck var inte heltalsdivision visade det flytande 1059 00:50:31,090 --> 00:50:32,640 talsdivision. 1060 00:50:32,640 --> 00:50:35,700 Eftersom ett av argumenten hade gjutits till ett flöte. 1061 00:50:35,700 --> 00:50:38,380 Så nu var det sagt, behandla detta uppdelning som vi har att göra med 1062 00:50:38,380 --> 00:50:40,140 flytande punkter, inte med heltal. 1063 00:50:40,140 --> 00:50:42,760 Och så får vi svar som vi förväntar oss. 1064 00:50:42,760 --> 00:50:44,620 >> Låt oss se vad som händer - 1065 00:50:44,620 --> 00:50:47,103 oops. 1066 00:50:47,103 --> 00:50:51,646 Om jag ville skriva ut mer decimal fläckar, hur kunde jag göra det? 1067 00:50:51,646 --> 00:50:55,550 >> STUDENTEN Point prick f, eller så många decimaler som du vill. 1068 00:50:55,550 --> 00:51:02,280 1069 00:51:02,280 --> 00:51:04,440 >> JASON Hirschhorn: Så jag skriver ut 10 decimal fläckar. 1070 00:51:04,440 --> 00:51:06,610 Och vi ser nu att vi får några konstiga saker. 1071 00:51:06,610 --> 00:51:09,650 Och som går tillbaka till din fråga om flyttal vaghet. 1072 00:51:09,650 --> 00:51:10,950 Det finns konstiga saker som lagras i här. 1073 00:51:10,950 --> 00:51:13,650 1074 00:51:13,650 --> 00:51:15,275 >> OK, gör som svar på din fråga? 1075 00:51:15,275 --> 00:51:18,550 1076 00:51:18,550 --> 00:51:20,200 Vad ville du att koda snabbt? 1077 00:51:20,200 --> 00:51:25,470 >> STUDENT: Jag ville bara se om inte, om du frigjort en del pekare, 1078 00:51:25,470 --> 00:51:30,410 oavsett om det pekaren fortfarande hade lagrats i den adressen till vad det hade varit 1079 00:51:30,410 --> 00:51:32,170 pekar på tidigare. 1080 00:51:32,170 --> 00:51:34,100 >> JASON Hirschhorn: OK, så låt oss göra det. 1081 00:51:34,100 --> 00:51:38,030 Char stjärna ptr, skapar detta en variabel kallas ptr av typen char stjärna. 1082 00:51:38,030 --> 00:51:39,280 Hur skriver jag malloc? 1083 00:51:39,280 --> 00:51:40,550 Alden? 1084 00:51:40,550 --> 00:51:41,800 >> ALDEN: Bara malloc. 1085 00:51:41,800 --> 00:51:44,820 1086 00:51:44,820 --> 00:51:51,040 Men då måste det vara storlek, och i det här fallet, jag antar att du skulle 1087 00:51:51,040 --> 00:51:52,465 peka att förkolna. 1088 00:51:52,465 --> 00:51:54,450 Så det skulle vara röding. 1089 00:51:54,450 --> 00:51:57,520 >> JASON Hirschhorn: OK, så mer allmänt, Inside - 1090 00:51:57,520 --> 00:51:58,770 Låt oss redigera. 1091 00:51:58,770 --> 00:52:05,100 1092 00:52:05,100 --> 00:52:09,260 Inne malloc, vill du numret bitgrupper på heap-minnet. 1093 00:52:09,260 --> 00:52:12,320 Generellt, vad vi har sett att vi är gör är att vi kommer att malloc 1094 00:52:12,320 --> 00:52:14,940 strängar, till exempel, eller arrayer av heltal. 1095 00:52:14,940 --> 00:52:21,600 Så om vi vill 10 heltal, eller 10 tecken, 10 kommer att ge oss 10. 1096 00:52:21,600 --> 00:52:24,370 Och sedan storlek på tecken skulle ge oss att storleken på tecken, som i 1097 00:52:24,370 --> 00:52:25,120 detta fall är 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 Om vi ​​skulle skriva storlek på int, som skulle ge oss 40 byte. 1100 00:52:28,540 --> 00:52:31,520 >> Så mer allmänt, insidan av malloc är antalet byte som du vill ha. 1101 00:52:31,520 --> 00:52:34,620 I det här fallet, vi får 1 byte. 1102 00:52:34,620 --> 00:52:36,900 Vilket verkar vara en konstig användning av malloc, men för vår 1103 00:52:36,900 --> 00:52:38,470 syften vettigt. 1104 00:52:38,470 --> 00:52:40,420 Så det är det. 1105 00:52:40,420 --> 00:52:43,420 >> Vi kommer att ringa gratis. 1106 00:52:43,420 --> 00:52:47,040 Vi bli av med det och vi använder ptr igen. 1107 00:52:47,040 --> 00:52:48,750 Och vad ville du kolla? 1108 00:52:48,750 --> 00:52:50,550 >> STUDENT: Jag ville bara kontrollera om eller det var inte något 1109 00:52:50,550 --> 00:52:51,900 inne i den. 1110 00:52:51,900 --> 00:52:53,050 >> JASON Hirschhorn: Så oavsett Det pekade på någonting? 1111 00:52:53,050 --> 00:52:57,740 >> STUDENT: Ja, exakt, oavsett om det fortfarande hade en minnesadress. 1112 00:52:57,740 --> 00:53:02,220 >> JASON Hirschhorn: Så du vill att kontrollera värdet av ptr? 1113 00:53:02,220 --> 00:53:03,470 >> STUDENT: Ja, exakt. 1114 00:53:03,470 --> 00:53:07,940 1115 00:53:07,940 --> 00:53:10,160 >> JASON Hirschhorn: Vad skriver jag här om jag vill kontrollera värdet av 1116 00:53:10,160 --> 00:53:11,880 punkt - vad är, Jordanien sade värdet? 1117 00:53:11,880 --> 00:53:13,720 Eller vad som lagras inuti ptr? 1118 00:53:13,720 --> 00:53:14,620 >> STUDENT: En minnesadress. 1119 00:53:14,620 --> 00:53:16,330 >> JASON Hirschhorn: En minnesadress. 1120 00:53:16,330 --> 00:53:20,520 Så om jag skriver just detta, kommer det ge mig värdet av ptr. 1121 00:53:20,520 --> 00:53:22,800 Och hur jag skriver ut en minnesadress? 1122 00:53:22,800 --> 00:53:26,470 Vad är formatsträngen för en minnesadress? 1123 00:53:26,470 --> 00:53:27,430 >> STUDENTEN% p. 1124 00:53:27,430 --> 00:53:28,050 >> JASON Hirschhorn:% p. 1125 00:53:28,050 --> 00:53:29,500 % S är en sträng. 1126 00:53:29,500 --> 00:53:30,750 % P för pekare. 1127 00:53:30,750 --> 00:53:40,820 1128 00:53:40,820 --> 00:53:43,540 Är det rätt? 1129 00:53:43,540 --> 00:53:44,790 Det är rätt. 1130 00:53:44,790 --> 00:53:49,450 1131 00:53:49,450 --> 00:53:51,040 Så ptr lika - 1132 00:53:51,040 --> 00:53:53,350 det har fortfarande något i det. 1133 00:53:53,350 --> 00:53:56,110 1134 00:53:56,110 --> 00:53:57,645 Detta är förmodligen en mer intressant fråga. 1135 00:53:57,645 --> 00:53:59,198 Vad gör den linjen gör? 1136 00:53:59,198 --> 00:54:00,830 >> STUDENT: Seg fel. 1137 00:54:00,830 --> 00:54:01,310 >> JASON Hirschhorn: Vad? 1138 00:54:01,310 --> 00:54:02,678 >> STUDENT: Jag tror att det seg fel. 1139 00:54:02,678 --> 00:54:03,574 >> JASON Hirschhorn: Hm? 1140 00:54:03,574 --> 00:54:04,920 >> STUDENT: Jag tror att det ska SEG fel. 1141 00:54:04,920 --> 00:54:08,265 >> JASON Hirschhorn: Så här raden av kod, stjärn ptr, vad 1142 00:54:08,265 --> 00:54:10,152 betyder stjärnan detta? 1143 00:54:10,152 --> 00:54:11,240 >> STUDENTEN innehåll. 1144 00:54:11,240 --> 00:54:11,560 >> JASON Hirschhorn: Ja. 1145 00:54:11,560 --> 00:54:13,910 Gå att få innehållet i. 1146 00:54:13,910 --> 00:54:16,830 Så detta kommer att gå till minnet itu med det och ge mig det. 1147 00:54:16,830 --> 00:54:21,030 Jag använde% c just här eftersom det finns tecken som lagras där. 1148 00:54:21,030 --> 00:54:23,390 Så vi kommer att gå till den adressen som vi bara såg - eller det kommer förmodligen att bli en 1149 00:54:23,390 --> 00:54:25,190 lite annorlunda den här När vi kör programmet. 1150 00:54:25,190 --> 00:54:28,010 Men vi kommer att gå till den adressen som vi vet fortfarande existerar 1151 00:54:28,010 --> 00:54:29,260 och se vad som finns där. 1152 00:54:29,260 --> 00:54:35,640 1153 00:54:35,640 --> 00:54:37,110 >> Så det inte SEG fel. 1154 00:54:37,110 --> 00:54:38,970 Det bara inte ge oss någonting. 1155 00:54:38,970 --> 00:54:43,350 Det kanske har faktiskt gett oss något, vi kan bara inte se det. 1156 00:54:43,350 --> 00:54:45,110 Och som går tillbaka till denna idé - 1157 00:54:45,110 --> 00:54:47,270 och vi kommer inte att få för mycket i detta, eftersom det är utanför 1158 00:54:47,270 --> 00:54:48,460 ramen för denna kurs. 1159 00:54:48,460 --> 00:54:51,260 Men vi pratade om här, om vi gick utöver gränserna för matrisen med 1160 00:54:51,260 --> 00:54:54,890 1, vi kanske inte får problem. 1161 00:54:54,890 --> 00:54:58,550 >> Ibland, när du bara gå ut med 1, du gör något fel, och du 1162 00:54:58,550 --> 00:54:59,220 kunde råka illa ut. 1163 00:54:59,220 --> 00:55:00,820 Men du behöver inte alltid hamna i problem. 1164 00:55:00,820 --> 00:55:05,170 Det beror på hur mycket av en dålig sak som du gör, du kommer att få problem. 1165 00:55:05,170 --> 00:55:07,790 Vilket inte är att säga, vara slarvig med din kod. 1166 00:55:07,790 --> 00:55:12,080 Men det är att säga, kommer programmet inte alltid sluta, även om du går någonstans 1167 00:55:12,080 --> 00:55:14,130 du ska inte gå. 1168 00:55:14,130 --> 00:55:18,170 >> Ett bra exempel på det är, en hel del människor i deras problem set 3, som 1169 00:55:18,170 --> 00:55:22,350 var 15, inte kontrollera gränserna för styrelsen. 1170 00:55:22,350 --> 00:55:25,860 Så du tittat till vänster, såg till rätt, såg till toppen, såg 1171 00:55:25,860 --> 00:55:27,000 till botten. 1172 00:55:27,000 --> 00:55:31,540 Men du inte kontrollera om toppen faktiskt kommer att vara på bordet. 1173 00:55:31,540 --> 00:55:35,220 Och en hel del människor som gjorde det och vände det in, arbetade deras program 1174 00:55:35,220 --> 00:55:38,960 perfekt, eftersom de fall styrelsen var lagras i minnet, om du gick en 1175 00:55:38,960 --> 00:55:42,300 ovanför eller kontrollerat att minnet adress, det var inte något 1176 00:55:42,300 --> 00:55:44,870 särskilt hemskt om det, så ditt program var inte 1177 00:55:44,870 --> 00:55:45,970 kommer att skrika på dig. 1178 00:55:45,970 --> 00:55:48,870 >> Men vi skulle ändå ta bort poäng om du inte kontrollera det, eftersom du 1179 00:55:48,870 --> 00:55:50,850 gjorde något du inte var tänkt att göra, och du kan ha 1180 00:55:50,850 --> 00:55:51,860 fått i trubbel. 1181 00:55:51,860 --> 00:55:54,040 Oddsen är, men du gjorde antagligen inte. 1182 00:55:54,040 --> 00:55:57,790 Så det här är att visa att, ja, Vi kan fortfarande gå till den. 1183 00:55:57,790 --> 00:55:59,010 Och vi kommer inte att komma in problem i detta fall. 1184 00:55:59,010 --> 00:56:04,000 Om vi ​​försökte göra läsa nästa 100 tecken, vi skulle 1185 00:56:04,000 --> 00:56:06,000 förmodligen få problem. 1186 00:56:06,000 --> 00:56:09,400 Och du kan koda på nästa 100 tecken om du vill ha genom att göra några 1187 00:56:09,400 --> 00:56:10,110 slags för slinga. 1188 00:56:10,110 --> 00:56:10,850 Yeah. 1189 00:56:10,850 --> 00:56:16,250 >> STUDENT: Eftersom vi blev tilldelade att utrymme ett faktiskt värde, vi skulle inte 1190 00:56:16,250 --> 00:56:17,050 faktiskt kunna se någonting. 1191 00:56:17,050 --> 00:56:21,740 Ska vi prova det med inställningen att motsvarar gillar c eller något? 1192 00:56:21,740 --> 00:56:22,640 >> JASON Hirschhorn: Bra fråga. 1193 00:56:22,640 --> 00:56:25,340 Hur ställer jag in det värdet - 1194 00:56:25,340 --> 00:56:28,980 vilken kodrad skriver jag på linjen sju att göra det du sa? 1195 00:56:28,980 --> 00:56:34,040 >> STUDENTEN Star ptr är lika enkel quote c avslutar enda anbud. 1196 00:56:34,040 --> 00:56:36,970 >> JASON Hirschhorn: Så det är att sätta en karaktär, c, vid den platsen, 1197 00:56:36,970 --> 00:56:40,200 eftersom igen, stjärna som innebär att gå till där. 1198 00:56:40,200 --> 00:56:43,320 Och när den används på den vänstra sidan av en tilldelningsoperator, är lika stor som 1199 00:56:43,320 --> 00:56:47,270 underteckna, vi kommer inte att få det värde så mycket som satt det värdet. 1200 00:56:47,270 --> 00:56:48,520 Nu ska vi se vad som händer. 1201 00:56:48,520 --> 00:56:54,700 1202 00:56:54,700 --> 00:56:56,770 >> Vi lägger något där och det var där. 1203 00:56:56,770 --> 00:56:58,000 Vi kallade fria. 1204 00:56:58,000 --> 00:57:00,100 Vissa grejer förmodligen hänt på heap-minnet. 1205 00:57:00,100 --> 00:57:01,890 Så det är inte där längre. 1206 00:57:01,890 --> 00:57:07,440 Men återigen, vi får inte i trubbel för att gå dit. 1207 00:57:07,440 --> 00:57:10,260 >> Jag gör detta i koden för att illustrera att en hel del av dessa 1208 00:57:10,260 --> 00:57:12,410 frågor som du har, de är riktigt intressant 1209 00:57:12,410 --> 00:57:13,650 svarar på en hel del tid. 1210 00:57:13,650 --> 00:57:15,260 Och de är riktigt bra frågor. 1211 00:57:15,260 --> 00:57:19,010 Och du kan lista ut dem på egen hand om, till exempel, 1212 00:57:19,010 --> 00:57:19,990 vi är inte i avsnittet. 1213 00:57:19,990 --> 00:57:20,940 Yeah. 1214 00:57:20,940 --> 00:57:24,430 >> STUDENT: Eftersom du inte skickar pekaren någonstans, behöver du 1215 00:57:24,430 --> 00:57:26,530 använda malloc? 1216 00:57:26,530 --> 00:57:28,400 >> JASON Hirschhorn: Så här går tillbaka på din första fråga. 1217 00:57:28,400 --> 00:57:28,620 [? ?] 1218 00:57:28,620 --> 00:57:29,980 Är det bara en lokal variabel? 1219 00:57:29,980 --> 00:57:32,280 Malloc här är inte så övertygande. 1220 00:57:32,280 --> 00:57:35,260 Användningen av malloc här är inte som övertygande eftersom det är 1221 00:57:35,260 --> 00:57:36,500 bara en lokal variabel. 1222 00:57:36,500 --> 00:57:40,970 >> STUDENT: Så kan du göra röding stjärniga ptr lika hej? 1223 00:57:40,970 --> 00:57:41,400 >> JASON Hirschhorn: Oh. 1224 00:57:41,400 --> 00:57:43,300 Så ska vi nu få tillbaka på din första fråga. 1225 00:57:43,300 --> 00:57:46,885 Jag tror att du inte var nöjd med mitt svar. 1226 00:57:46,885 --> 00:57:48,220 OK? 1227 00:57:48,220 --> 00:57:49,226 Så? 1228 00:57:49,226 --> 00:57:49,682 >> STUDENT: Ja. 1229 00:57:49,682 --> 00:57:50,932 Vänta. 1230 00:57:50,932 --> 00:57:54,090 1231 00:57:54,090 --> 00:57:57,850 >> JASON Hirschhorn: Och var vill du skriva ut? 1232 00:57:57,850 --> 00:58:00,026 Så vi ska skriva ut en sträng så? 1233 00:58:00,026 --> 00:58:06,380 1234 00:58:06,380 --> 00:58:07,630 >> STUDENT: Intressant. 1235 00:58:07,630 --> 00:58:09,900 1236 00:58:09,900 --> 00:58:14,285 >> JASON Hirschhorn: Så här säger att detta Argumentet har typ av ett tecken. 1237 00:58:14,285 --> 00:58:17,200 1238 00:58:17,200 --> 00:58:18,620 Så det här borde vara ett tecken. 1239 00:58:18,620 --> 00:58:25,170 1240 00:58:25,170 --> 00:58:26,280 >> STUDENTEN tar bara den första. 1241 00:58:26,280 --> 00:58:28,610 >> JASON Hirschhorn: Så här är vad jag sade tidigare. 1242 00:58:28,610 --> 00:58:34,240 Som jag sa, det är inte att lagra sträng inne variabel pekare. 1243 00:58:34,240 --> 00:58:35,120 Det förvaring - 1244 00:58:35,120 --> 00:58:36,350 >> STUDENT: Det första värdet av strängen. 1245 00:58:36,350 --> 00:58:40,810 >> JASON Hirschhorn: Adressen till det första värdet av strängen. 1246 00:58:40,810 --> 00:58:46,940 Om vi ​​skulle skriva ut det här, vi är far värdet inuti pekaren. 1247 00:58:46,940 --> 00:58:51,005 Och vi får se det är, faktiskt, en minnesadress. 1248 00:58:51,005 --> 00:58:53,595 1249 00:58:53,595 --> 00:58:56,440 >> Låter det vettigt? 1250 00:58:56,440 --> 00:58:56,940 Ursäkta. 1251 00:58:56,940 --> 00:58:58,996 Vänta, gör som svar på din fråga, men? 1252 00:58:58,996 --> 00:58:59,790 >> STUDENT: Ja. 1253 00:58:59,790 --> 00:59:05,830 >> JASON Hirschhorn: Denna kodrad är att skapa en sträng och sedan en annan 1254 00:59:05,830 --> 00:59:09,115 variabel pekare som är riktad till den sträng, som matris. 1255 00:59:09,115 --> 00:59:14,320 1256 00:59:14,320 --> 00:59:14,980 Yeah. 1257 00:59:14,980 --> 00:59:19,200 >> STUDENT: Så om vi gick ett minne itu vidare, skulle vi få den h? 1258 00:59:19,200 --> 00:59:21,990 1259 00:59:21,990 --> 00:59:23,150 Har det lagras som en sträng? 1260 00:59:23,150 --> 00:59:24,400 >> JASON Hirschhorn: Precis, gjorde vi - 1261 00:59:24,400 --> 00:59:28,540 1262 00:59:28,540 --> 00:59:30,790 så detta är värdefullt att göra. 1263 00:59:30,790 --> 00:59:33,780 Detta är punkten aritmetik, som ni har sett förut och bör vara 1264 00:59:33,780 --> 00:59:35,550 relativt bekväm med. 1265 00:59:35,550 --> 00:59:36,905 Det är som att skriva - 1266 00:59:36,905 --> 00:59:41,980 1267 00:59:41,980 --> 00:59:46,350 om vi skulle skriva denna rad kod, Vi har sett array notation innan. 1268 00:59:46,350 --> 00:59:55,900 Detta borde ge oss den andra värde i denna array, tim. 1269 00:59:55,900 --> 01:00:05,010 >> Om vi ​​gjorde det, bör detta också ge oss det andra värdet i matrisen. 1270 01:00:05,010 --> 01:00:08,320 Eftersom det kommer inte till minnet adressen för den första, men den 1271 01:00:08,320 --> 01:00:10,530 minnesadress för den sak man över. 1272 01:00:10,530 --> 01:00:14,360 Och då stjärnoperatörs dereferences som pekare. 1273 01:00:14,360 --> 01:00:16,940 Och återigen, låt oss 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: Exakt vad avreferera detta? 1276 01:00:20,980 --> 01:00:23,650 >> JASON Hirschhorn: avreferera är ett finare ord för att gå till. 1277 01:00:23,650 --> 01:00:26,390 Gå till det och få vad som finns där är att dereference en pekare. 1278 01:00:26,390 --> 01:00:28,240 Det är bara ett finare ord för det. 1279 01:00:28,240 --> 01:00:29,986 >> STUDENT: Om vi ​​ville skriva ut hela strängen, kunde vi 1280 01:00:29,986 --> 01:00:31,930 do ampersand pekare? 1281 01:00:31,930 --> 01:00:33,490 >> JASON Hirschhorn: OK, är vi kommer att göra en paus här. 1282 01:00:33,490 --> 01:00:35,480 Vi kommer att sluta här. 1283 01:00:35,480 --> 01:00:41,760 Ampersand ger dig adressen till en plats, så när du gör et-tecken på 1284 01:00:41,760 --> 01:00:44,080 en variabel, det ger dig adress där den variabeln lagras. 1285 01:00:44,080 --> 01:00:48,580 Ampersand pekare ger dig adress ptr där ptr är i minnet. 1286 01:00:48,580 --> 01:00:50,140 >> Vi kommer inte att gå på med detta exempel. 1287 01:00:50,140 --> 01:00:52,640 Du kan räkna ut dessa saker på egen hand. 1288 01:00:52,640 --> 01:00:55,740 Men återigen, det kanske till och med på gränsen en lite längre än vad du behöver veta för 1289 01:00:55,740 --> 01:00:58,000 omfattningen av denna halvtids - 1290 01:00:58,000 --> 01:00:59,070 eller det här testet, snarare. 1291 01:00:59,070 --> 01:01:00,270 Ursäkta. 1292 01:01:00,270 --> 01:01:03,770 >> Vi kommer att gå vidare, för att jag skulle vilja göra en kodning problem 1293 01:01:03,770 --> 01:01:05,100 innan tiden är slut. 1294 01:01:05,100 --> 01:01:09,340 Och vi kommer att koda vad jag tycker är den mest övertygande av dessa 1295 01:01:09,340 --> 01:01:11,020 exemplen atoi. 1296 01:01:11,020 --> 01:01:14,520 Så detta var en fråga om en frågesport två år sedan. 1297 01:01:14,520 --> 01:01:17,810 Och jag har det på tavlan här. 1298 01:01:17,810 --> 01:01:20,680 >> Folk ombads på frågesport - 1299 01:01:20,680 --> 01:01:23,640 de fick lite mer tesxt i frågan, men jag eliminerat 1300 01:01:23,640 --> 01:01:26,640 text för att det var onödigt för våra syften nu. 1301 01:01:26,640 --> 01:01:29,180 Det var bara lite bakgrunds på vad atoi gjorde. 1302 01:01:29,180 --> 01:01:31,425 Men ni alla vet och är mycket bekant med atoi. 1303 01:01:31,425 --> 01:01:35,620 >> Jag föreslår att du koda det här på ett papper. 1304 01:01:35,620 --> 01:01:39,310 Jag föreslår också att du använder den strategi att vi har gått över 1305 01:01:39,310 --> 01:01:41,040 mycket i vår avdelning. 1306 01:01:41,040 --> 01:01:44,130 Kontrollera först att du förstår vad atoi s gör. 1307 01:01:44,130 --> 01:01:47,580 Rita en bild eller komma med några mental bild av det i huvudet. 1308 01:01:47,580 --> 01:01:51,120 Därefter skriva ut pseudokod för detta. 1309 01:01:51,120 --> 01:01:53,120 På frågesport, om allt du får är pseudokod, åtminstone du 1310 01:01:53,120 --> 01:01:54,550 lägga ner något. 1311 01:01:54,550 --> 01:02:00,070 Och sedan mappa den pseudo på C. Om du har en kontroll i ditt 1312 01:02:00,070 --> 01:02:03,760 pseudokod, som kontrollerar om något är 1, kartor som på ett om 1313 01:02:03,760 --> 01:02:05,750 tillstånd och så vidare. 1314 01:02:05,750 --> 01:02:07,850 Och slutligen, koda program i C. 1315 01:02:07,850 --> 01:02:15,000 >> Så gå tillbaka till atoi och ta fem minuter att koda detta på ett ark 1316 01:02:15,000 --> 01:02:19,480 papper, vilket förmodligen om tid du skulle ta på en 1317 01:02:19,480 --> 01:02:21,260 quiz till kod atoi. 1318 01:02:21,260 --> 01:02:27,060 Fem till 15 minuter, fem till 12, fem till 10 minuter, om mängden 1319 01:02:27,060 --> 01:02:30,150 tid du skulle spendera på detta fråga i frågesporten. 1320 01:02:30,150 --> 01:02:31,670 Så ta fem minuter nu, snälla. 1321 01:02:31,670 --> 01:02:35,957 Och om du har några frågor, höja din hand och jag ska komma runt. 1322 01:02:35,957 --> 01:06:39,570 1323 01:06:39,570 --> 01:06:41,066 >> [sidan konversationer] 1324 01:06:41,066 --> 01:08:35,279 1325 01:08:35,279 --> 01:08:37,580 >> JASON Hirschhorn: OK, så det var fem minuter. 1326 01:08:37,580 --> 01:08:39,880 Det var nog ungefär hur mycket tid du skulle spendera på det på en frågesport, 1327 01:08:39,880 --> 01:08:42,120 kanske den lägre delen av den tiden. 1328 01:08:42,120 --> 01:08:44,010 Vi återblick på lite. 1329 01:08:44,010 --> 01:08:45,740 Låt oss börja koda detta. 1330 01:08:45,740 --> 01:08:49,479 Och om vi inte får hela vägen igenom, svaren på det här och det här 1331 01:08:49,479 --> 01:08:54,189 frågesport fråga är tillgängliga, återigen, Hösten 2011 är när denna fråga 1332 01:08:54,189 --> 01:08:54,913 dök upp på testet. 1333 01:08:54,913 --> 01:08:57,830 >> Och det var värt åtta poäng på testet då. 1334 01:08:57,830 --> 01:09:01,140 Åtta poäng är på den övre delen av antal poäng något är värt. 1335 01:09:01,140 --> 01:09:04,790 De flesta frågorna är i intervallet av 1-6 poäng. 1336 01:09:04,790 --> 01:09:08,500 Så det här är en mer utmanande fråga, för säker. 1337 01:09:08,500 --> 01:09:09,750 Kan vem som helst få mig igång? 1338 01:09:09,750 --> 01:09:13,260 1339 01:09:13,260 --> 01:09:15,380 >> Generellt, vad ska vi att vilja göra med detta 1340 01:09:15,380 --> 01:09:17,550 fungera atoi, logiskt? 1341 01:09:17,550 --> 01:09:19,569 Vad vill vi göra? 1342 01:09:19,569 --> 01:09:22,279 Så vi kommer att skriva några pseudokod. 1343 01:09:22,279 --> 01:09:24,090 >> STUDENT: Konvertera tecken in heltal. 1344 01:09:24,090 --> 01:09:26,700 >> JASON Hirschhorn: Konvertera tecken in heltal. 1345 01:09:26,700 --> 01:09:27,479 OK. 1346 01:09:27,479 --> 01:09:30,870 Så hur många tecken är vi kommer att behöva gå igenom? 1347 01:09:30,870 --> 01:09:32,295 >> STUDENT: Alla av dem. 1348 01:09:32,295 --> 01:09:34,100 >> STUDENT: Alla tecken i strängen. 1349 01:09:34,100 --> 01:09:35,540 >> JASON Hirschhorn: Samtliga av tecken i strängen. 1350 01:09:35,540 --> 01:09:42,180 Så om vi ville gå igenom varje tecken i en sträng, det är en sak 1351 01:09:42,180 --> 01:09:44,560 i C som vi har sett som har gjort oss att gå igenom varje 1352 01:09:44,560 --> 01:09:45,939 tecken i en sträng? 1353 01:09:45,939 --> 01:09:46,819 >> STUDENTER: A för slinga. 1354 01:09:46,819 --> 01:09:48,069 >> JASON Hirschhorn: A för slinga. 1355 01:09:48,069 --> 01:09:52,020 1356 01:09:52,020 --> 01:09:55,330 Så vi kommer att slinga genom varje tecken i talet. 1357 01:09:55,330 --> 01:10:00,940 >> Men vad ska vi vilja göra när vi får ett visst tecken? 1358 01:10:00,940 --> 01:10:02,480 Säg att vi blir passerade 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 är ett tecken. 1361 01:10:04,240 --> 01:10:07,440 Vad vill vi göra med tecknet 9? 1362 01:10:07,440 --> 01:10:10,082 >> STUDENT: Subtrahera det från tecken 0? 1363 01:10:10,082 --> 01:10:11,860 >> STUDENT: Lägg 0? 1364 01:10:11,860 --> 01:10:13,350 >> JASON Hirschhorn: Subtrahera det från tecken 0? 1365 01:10:13,350 --> 01:10:13,800 >> STUDENT: Ja. 1366 01:10:13,800 --> 01:10:15,573 >> JASON Hirschhorn: Varför du vill göra det? 1367 01:10:15,573 --> 01:10:16,560 >> STUDENTEN [OHÖRBAR] 1368 01:10:16,560 --> 01:10:17,010 värde. 1369 01:10:17,010 --> 01:10:18,380 Dess int värde. 1370 01:10:18,380 --> 01:10:21,580 >> JASON Hirschhorn: OK, så vi tar det karaktär 9, subtrahera den från 1371 01:10:21,580 --> 01:10:25,820 tecken 0 för att få en faktiska tal 9. 1372 01:10:25,820 --> 01:10:27,070 Söt. 1373 01:10:27,070 --> 01:10:31,255 1374 01:10:31,255 --> 01:10:37,000 Och hur vet du det tecknet 9 minus 0 tecken är 9? 1375 01:10:37,000 --> 01:10:39,222 Vad diagram tittade du på? 1376 01:10:39,222 --> 01:10:43,130 >> STUDENT: Det finns logiskt nio platser mellan 9 och 0. 1377 01:10:43,130 --> 01:10:44,620 Eller så kan du titta på ASCII-tabellen. 1378 01:10:44,620 --> 01:10:45,120 >> JASON Hirschhorn: ASCII tabell. 1379 01:10:45,120 --> 01:10:46,490 Men ja, du är rätt också. 1380 01:10:46,490 --> 01:10:47,780 Så vi subtraherar 0. 1381 01:10:47,780 --> 01:10:49,010 Så nu har vi heltalet 9. 1382 01:10:49,010 --> 01:10:49,970 Och vad vill vi göra med det? 1383 01:10:49,970 --> 01:10:54,970 Om vi ​​har 90, det är den första heltal vi har, vad vi vill göra? 1384 01:10:54,970 --> 01:10:58,180 >> STUDENT: Jag skulle sätta in en tillfällig heltal array, sedan göra matematik till det 1385 01:10:58,180 --> 01:11:02,088 senare för att göra det till slut. 1386 01:11:02,088 --> 01:11:03,020 >> JASON Hirschhorn: OK. 1387 01:11:03,020 --> 01:11:06,990 >> STUDENT: Du kan börja i slutet av arrayen och sedan gå vidare så 1388 01:11:06,990 --> 01:11:10,350 att varje gång du rör dig framåt, du multiplicera 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 låter som ett ganska övertygande idé. 1391 01:11:12,250 --> 01:11:16,040 Vi kan börja i slutet av vår samling, och vi kan använda strleng. 1392 01:11:16,040 --> 01:11:17,030 Vi kan använda strleng in här. 1393 01:11:17,030 --> 01:11:18,870 Vi tar längden på vår sträng. 1394 01:11:18,870 --> 01:11:20,100 Vi börjar i slutet. 1395 01:11:20,100 --> 01:11:29,170 Och + det första, vi bara ta det heltal, och kanske vi skapar som en 1396 01:11:29,170 --> 01:11:32,270 nya heltalsvariabel upp toppen där vi lagrar allt. 1397 01:11:32,270 --> 01:11:37,340 Så vi slinga genom varje röding is från bakfram, subtrahera vi 0, och 1398 01:11:37,340 --> 01:11:42,790 då tar vi det, och beroende på där det är, vi multiplicera det 1399 01:11:42,790 --> 01:11:45,860 med en kraft av 10. 1400 01:11:45,860 --> 01:11:50,644 Eftersom den första, vad gör vi multiplicera tecknet längst till höger efter? 1401 01:11:50,644 --> 01:11:51,440 >> STUDENT: 10 till 0. 1402 01:11:51,440 --> 01:11:53,170 >> JASON Hirschhorn: 10 till 0. 1403 01:11:53,170 --> 01:11:56,010 Vad ska vi multiplicera den andra längst till höger karaktär genom? 1404 01:11:56,010 --> 01:11:57,450 >> STUDENTEN [OHÖRBAR]. 1405 01:11:57,450 --> 01:11:57,960 >> JASON Hirschhorn: Vad? 1406 01:11:57,960 --> 01:11:59,150 >> STUDENT: 10 till 1. 1407 01:11:59,150 --> 01:12:00,420 >> JASON Hirschhorn: 10 till 1. 1408 01:12:00,420 --> 01:12:03,754 Det tredje tecknet längst till höger? 1409 01:12:03,754 --> 01:12:04,580 >> STUDENT: 10 till 2. 1410 01:12:04,580 --> 01:12:05,350 >> JASON Hirschhorn: 10 till 2. 1411 01:12:05,350 --> 01:12:07,200 >> STUDENT: Förlåt, jag förstår inte vad vi gör här. 1412 01:12:07,200 --> 01:12:08,640 >> JASON Hirschhorn: OK, låt oss gå tillbaka, då. 1413 01:12:08,640 --> 01:12:12,500 Så vi kommer att få gått i en sträng. 1414 01:12:12,500 --> 01:12:14,470 Eftersom vi skriver atoi. 1415 01:12:14,470 --> 01:12:15,260 Så vi få passerat i ett snöre. 1416 01:12:15,260 --> 01:12:17,640 Säg att vi blir passerade i strängen 90. 1417 01:12:17,640 --> 01:12:19,930 >> Det första vi ska göra är att ställa en ny heltalsvariabel som vi är 1418 01:12:19,930 --> 01:12:22,150 bara kommer att skapa som vår nya heltal. 1419 01:12:22,150 --> 01:12:24,630 Det är vad vi ska att återvända i slutet. 1420 01:12:24,630 --> 01:12:30,110 Vi måste gå igenom varje tecken i strängen för att vi har fastställt 1421 01:12:30,110 --> 01:12:34,430 att vi måste röra var och en och sedan lägga till det nya heltal. 1422 01:12:34,430 --> 01:12:36,330 >> Men vi kan inte bara lägga till den som ett tal. 1423 01:12:36,330 --> 01:12:38,270 Vi kan inte bara ta 9 och lägg 9 till vår heltal. 1424 01:12:38,270 --> 01:12:40,560 Det beror på vilken plats det är i strängen. 1425 01:12:40,560 --> 01:12:42,960 Vi kommer att behöva multiplicera det med en kraft av 10. 1426 01:12:42,960 --> 01:12:45,580 Därför att det är hur basen 10 verk. 1427 01:12:45,580 --> 01:12:49,050 >> Så vi kommer att få den faktiska karaktär, eller den faktiska tal 1428 01:12:49,050 --> 01:12:53,860 nummer, genom att subtrahera tecken 0 från karaktär 9 som vi gjorde med 1429 01:12:53,860 --> 01:12:57,560 subtrahera teckenkapital A från oavsett karaktär som vi hade i en av 1430 01:12:57,560 --> 01:12:58,120 dessa problem. 1431 01:12:58,120 --> 01:13:04,190 Så vi ska faktiskt få ett nummer från 0 till 9 sparas som ett reellt tal, och vi kommer 1432 01:13:04,190 --> 01:13:07,590 multiplicera det med en kraft av 10 beroende på var vi är i strängen. 1433 01:13:07,590 --> 01:13:19,430 1434 01:13:19,430 --> 01:13:22,575 Och sedan ska vi lägga den tillbaka in i vårt nya heltalsvariabel. 1435 01:13:22,575 --> 01:13:32,840 1436 01:13:32,840 --> 01:13:37,890 >> Så vad detta skulle se ut skulle vara - vi ska dra hit. 1437 01:13:37,890 --> 01:13:40,086 Om vi ​​få passerat i strängen 90 - 1438 01:13:40,086 --> 01:13:41,336 >> STUDENTEN [OHÖRBAR]. 1439 01:13:41,336 --> 01:13:43,190 1440 01:13:43,190 --> 01:13:45,540 >> JASON Hirschhorn: Men atoi tar en sträng. 1441 01:13:45,540 --> 01:13:46,350 Så vi kommer att gå igenom innehavet. 1442 01:13:46,350 --> 01:13:49,900 Vi kommer att få passerat under 90. 1443 01:13:49,900 --> 01:13:51,540 Vi går från baksidan till framsidan. 1444 01:13:51,540 --> 01:13:53,920 Vi tar det 0. 1445 01:13:53,920 --> 01:13:55,080 >> STUDENT: Jag är ledsen. 1446 01:13:55,080 --> 01:13:55,880 Kanske det är dumt. 1447 01:13:55,880 --> 01:13:59,440 Om vi ​​får passeras i en sträng, Varför är 90 vad vi är 1448 01:13:59,440 --> 01:14:00,260 bli passerade i? 1449 01:14:00,260 --> 01:14:03,160 Eftersom 90 är ett heltal. 1450 01:14:03,160 --> 01:14:06,820 >> JASON Hirschhorn: Eftersom atoi tar en sträng och förvandlar den till heltal 1451 01:14:06,820 --> 01:14:08,320 representation av den strängen. 1452 01:14:08,320 --> 01:14:13,650 Men strängen 90 inte är heltalet 90 eller antalet 90. 1453 01:14:13,650 --> 01:14:17,920 Strängen 90 är en uppsättning av två eller tre tecken, snarare, den 9 1454 01:14:17,920 --> 01:14:22,740 karaktär, den 0 tecken, och den omvända sned 0 tecken. 1455 01:14:22,740 --> 01:14:26,260 >> Och vi skriver atoi eftersom till exempel när du tar kommandot 1456 01:14:26,260 --> 01:14:30,230 line argument, och den sparas i argv, det sparas som en sträng. 1457 01:14:30,230 --> 01:14:32,940 Men om du vill behandla det som ett antal, du behöver för att konvertera den till en 1458 01:14:32,940 --> 01:14:34,700 faktiska heltal. 1459 01:14:34,700 --> 01:14:37,210 Vilket vi gjorde en av våra problemsamlingar. 1460 01:14:37,210 --> 01:14:38,800 Som vi gjorde i ett antal av våra problemsamlingar. 1461 01:14:38,800 --> 01:14:41,690 Alla som tog ett heltal som en kommandorad argument. 1462 01:14:41,690 --> 01:14:46,490 Så det är därför vår atoi funktion tar en sträng. 1463 01:14:46,490 --> 01:14:51,910 >> Så återigen, i vårt exempel här, vi är kommer att ta den sista. 1464 01:14:51,910 --> 01:14:55,050 Vi kommer att dra av tecknet 0 från det, eftersom tecknen 0 1465 01:14:55,050 --> 01:14:58,810 subtraheras från tecknet 0 ger dig det faktiska antalet 0, enligt 1466 01:14:58,810 --> 01:15:00,950 ASCII matematik som vi gör. 1467 01:15:00,950 --> 01:15:04,870 >> Eftersom tecken representeras som annorlunda än deras faktiska - det 1468 01:15:04,870 --> 01:15:08,830 personen en, till exempel, gement a är 97. 1469 01:15:08,830 --> 01:15:10,260 Det är inte - oops! 1470 01:15:10,260 --> 01:15:13,290 Det är inte vad du förväntar dig det ska vara, 0, till exempel. 1471 01:15:13,290 --> 01:15:16,200 Så du måste dra av karaktär en att få 0. 1472 01:15:16,200 --> 01:15:18,950 >> Så vi kommer att göra det här för att få det verkliga antalet. 1473 01:15:18,950 --> 01:15:22,560 Och då ska vi multiplicera det med en effekt av 10 beroende på var den 1474 01:15:22,560 --> 01:15:27,030 finns i strängen, och sedan ta det och lägga till det platshållare 1475 01:15:27,030 --> 01:15:32,520 variabel så att vi kan komma med vår sista nya heltal. 1476 01:15:32,520 --> 01:15:35,080 Är det vettigt att alla? 1477 01:15:35,080 --> 01:15:37,730 >> Så vi kommer inte att koda detta just nu, eftersom vi är 1478 01:15:37,730 --> 01:15:38,830 få ont om tid. 1479 01:15:38,830 --> 01:15:40,860 Jag ber om ursäkt för tidpunkten för det. 1480 01:15:40,860 --> 01:15:44,620 Men det är det som, förhoppningsvis, skulle du kunna göra på frågesport - på 1481 01:15:44,620 --> 01:15:47,710 stone få denna pseudo skrivits ut. 1482 01:15:47,710 --> 01:15:50,840 >> Och sedan, om vi skulle skriva pseudokod, faktiskt, kan vi göra det här 1483 01:15:50,840 --> 01:15:51,490 ganska snabbt. 1484 01:15:51,490 --> 01:15:55,230 Varje rad av kommentarer vi att vi skrev här kan översättas till cirka 1485 01:15:55,230 --> 01:15:56,970 en linje av C-kod. 1486 01:15:56,970 --> 01:16:01,780 Deklarera en ny variabel, skrift en ögla, en del subtraktion, en del 1487 01:16:01,780 --> 01:16:07,070 multiplikation, och vissa uppdrag. 1488 01:16:07,070 --> 01:16:09,020 Vi skulle nog också vilja skriva en returledning. 1489 01:16:09,020 --> 01:16:12,040 Vi kanske också vill lägga vissa kontroller i här. 1490 01:16:12,040 --> 01:16:12,655 Yeah. 1491 01:16:12,655 --> 01:16:15,720 >> STUDENT: Så kan vi behandlar s som själva strängen? 1492 01:16:15,720 --> 01:16:18,730 Eftersom jag vet att det är bara en adress. 1493 01:16:18,730 --> 01:16:22,090 Liksom, hur skulle du få längden på strängen som passerade? 1494 01:16:22,090 --> 01:16:25,310 >> JASON Hirschhorn: Så hur gjorde längden av en sträng? 1495 01:16:25,310 --> 01:16:25,830 Strlen. 1496 01:16:25,830 --> 01:16:26,660 >> STUDENTEN strlen, ja. 1497 01:16:26,660 --> 01:16:30,550 Men kan ni sätta er som argument för det? 1498 01:16:30,550 --> 01:16:34,620 >> JASON Hirschhorn: Så strlen tar en char stjärna. 1499 01:16:34,620 --> 01:16:38,090 Och det följer att röding stjärna, och det fortsätter att räkna tills det blir till en 1500 01:16:38,090 --> 01:16:41,865 snedstreck 0. strlen var faktiskt en av de andra program vi 1501 01:16:41,865 --> 01:16:42,850 skulle till kod. 1502 01:16:42,850 --> 01:16:44,560 Det är en annan bra till kod. 1503 01:16:44,560 --> 01:16:47,270 Att man är lite lättare, för om du kommer att tänka på det 1504 01:16:47,270 --> 01:16:47,830 konceptuellt - 1505 01:16:47,830 --> 01:16:51,620 Jag bara sa det högt - strlen följer en pekare och fortsätter att gå och 1506 01:16:51,620 --> 01:16:54,210 räkna och hålla reda tills du når ett omvänt snedstreck 0. 1507 01:16:54,210 --> 01:16:56,530 >> STUDENT: OK, fick det. 1508 01:16:56,530 --> 01:17:00,200 >> JASON Hirschhorn: Så bäst av lycka till på quiz 0 imorgon. 1509 01:17:00,200 --> 01:17:03,170 Om du har några frågor, jag vara ute efter detta. 1510 01:17:03,170 --> 01:17:05,610 Tveka inte att maila mig. 1511 01:17:05,610 --> 01:17:08,480 Nå ut till din egen TF om du är inte i min avdelning, eller få min 1512 01:17:08,480 --> 01:17:10,005 e-post om du vill det. 1513 01:17:10,005 --> 01:17:13,140 >> Om du vill galen och bara skicka mig en e-post, en Freakout e-post, kommer jag 1514 01:17:13,140 --> 01:17:16,710 skicka tillbaka, liksom, en smiley, eller, som, ett skämt eller något. 1515 01:17:16,710 --> 01:17:18,190 Så välkommen att göra det också. 1516 01:17:18,190 --> 01:17:20,750 Lycka till igen, och jag ska se er alla nästa vecka. 1517 01:17:20,750 --> 01:17:23,435