1 00:00:00,000 --> 00:00:02,670 >> [TEMA MUSIK] 2 00:00:02,670 --> 00:00:11,834 3 00:00:11,834 --> 00:00:13,365 >> TALARE 1: Hej, alla. 4 00:00:13,365 --> 00:00:14,365 Välkommen tillbaka till avsnitt. 5 00:00:14,365 --> 00:00:15,700 6 00:00:15,700 --> 00:00:18,700 Härlig dag out-- varför, jag är säker, det finns bara fyra av er här 7 00:00:18,700 --> 00:00:21,180 och inte vår vanliga förpackningen. 8 00:00:21,180 --> 00:00:22,670 Jag har varit sjuk i helgen. 9 00:00:22,670 --> 00:00:24,294 Så jag har inte Starburst för er. 10 00:00:24,294 --> 00:00:26,400 Och jag kan börja hosta fruktansvärt hela denna. 11 00:00:26,400 --> 00:00:27,790 Så bara bära med mig. 12 00:00:27,790 --> 00:00:30,624 Jag ska verkligen försöka och ta sig igenom denna första, 13 00:00:30,624 --> 00:00:32,290 Men innan jag har en hostattack. 14 00:00:32,290 --> 00:00:33,410 15 00:00:33,410 --> 00:00:37,390 Men bara att vara lätt på mig lite bit-- det är allt jag begär. 16 00:00:37,390 --> 00:00:39,370 17 00:00:39,370 --> 00:00:44,289 >> Så vår agenda för today-- bara en reminder-- din frågesport är nästa vecka. 18 00:00:44,289 --> 00:00:46,830 Jag sa ju att det här förra veckan så det skulle inte fånga dig utanför vakt. 19 00:00:46,830 --> 00:00:47,954 Så jag påminna dig igen. 20 00:00:47,954 --> 00:00:49,180 Nästa veckas din frågesport. 21 00:00:49,180 --> 00:00:52,730 Därför nästa veckas avsnitt kommer att vara mycket mer 22 00:00:52,730 --> 00:00:55,180 of-- Jag ska försöka och arbeta i någon recension. 23 00:00:55,180 --> 00:00:58,130 Så om ni kunde hjälpa mig genom att skicka mig 24 00:00:58,130 --> 00:01:00,990 saker som du är bekväm med, att du är orolig, 25 00:01:00,990 --> 00:01:03,530 ämnen som du skulle vilja för mig att täcka, det skulle vara bra. 26 00:01:03,530 --> 00:01:05,740 Så jag kan försöka arbeta dem in i vårt avsnitt nästa vecka 27 00:01:05,740 --> 00:01:11,540 eller skicka dig extra material eller prep att du inte kan få någon annanstans. 28 00:01:11,540 --> 00:01:12,150 >> Yeah! 29 00:01:12,150 --> 00:01:13,520 Fler människor kommer! 30 00:01:13,520 --> 00:01:17,320 Jag tänkte, gjorde jag det dåligt förra vecka, att ingen vill komma tillbaka? 31 00:01:17,320 --> 00:01:18,065 Jag är rädd. 32 00:01:18,065 --> 00:01:18,892 33 00:01:18,892 --> 00:01:21,100 Så de andra tre saker att vi kommer att gå över 34 00:01:21,100 --> 00:01:24,850 är omdirigering, fil-I / O, och då pekare och dynamiskt minne. 35 00:01:24,850 --> 00:01:29,160 Jag är säker på att du är alla super upphetsad om pointers-- allas favorit ämne, 36 00:01:29,160 --> 00:01:31,310 så enkelt att förstå. 37 00:01:31,310 --> 00:01:33,130 Jag är säker på att ni alla fick det, eller hur? 38 00:01:33,130 --> 00:01:39,510 >> Så det viktigaste först, redirection-- Detta är i grunden bara ett sätt 39 00:01:39,510 --> 00:01:42,920 att kontrollera hur du matar saker i ditt program, 40 00:01:42,920 --> 00:01:44,606 hur du matar ut saker från ditt program. 41 00:01:44,606 --> 00:01:46,980 De viktigaste sätten att ni har att interagera med det 42 00:01:46,980 --> 00:01:51,650 är bara genom vanlig ut med din print screen här. 43 00:01:51,650 --> 00:01:55,940 Men det finns sätt att pipe-- som vi ser här 44 00:01:55,940 --> 00:01:58,980 är en av våra words-- slag av röret att information 45 00:01:58,980 --> 00:02:02,850 eller att uppgifter i en fil från en fil. 46 00:02:02,850 --> 00:02:05,820 Det är bara olika sätt att få saker i ditt program 47 00:02:05,820 --> 00:02:10,681 och ut ur ditt program, i stället för bara skriva ut dem till den här skärmen 48 00:02:10,681 --> 00:02:12,430 eller att skriva in saker från kommandoraden. 49 00:02:12,430 --> 00:02:13,760 50 00:02:13,760 --> 00:02:18,030 >> Så första är liten större än cirkumflex. 51 00:02:18,030 --> 00:02:22,085 Så output-- det bara skriver ut resultatet till en fil istället för din skärm. 52 00:02:22,085 --> 00:02:23,620 53 00:02:23,620 --> 00:02:29,500 Så om du hade något som skrivs ut "Hej världen!" till skärmen, 54 00:02:29,500 --> 00:02:32,400 om du lägger den i stället att output.text, att 55 00:02:32,400 --> 00:02:35,220 skapar denna fil som heter output.text. 56 00:02:35,220 --> 00:02:38,550 Och när du öppnar det, det ska säger "Hej världen!" där. 57 00:02:38,550 --> 00:02:41,410 Detta kan vara super bra om du har massor av fel 58 00:02:41,410 --> 00:02:43,430 faktiskt, som vi ser i detta en. 59 00:02:43,430 --> 00:02:46,810 Om du gör två cirkumflex, det ska skriva ut felmeddelanden. 60 00:02:46,810 --> 00:02:52,090 >> Så om du har problem med kompilering, den har en hel del fel 61 00:02:52,090 --> 00:02:56,770 och du att fastna i att försöka för att bläddra igenom i din kommandorad 62 00:02:56,770 --> 00:02:59,110 genom alla dem, kan du bara skriva ut dem till en fil, 63 00:02:59,110 --> 00:03:02,130 öppna upp den filen så att du kan bläddra igenom dem lättare. 64 00:03:02,130 --> 00:03:05,160 Jag använde faktiskt att en mycket när jag debugging 65 00:03:05,160 --> 00:03:07,970 mina 181 psets för maskininlärning. 66 00:03:07,970 --> 00:03:10,000 Så det kan vara super bra senare. 67 00:03:10,000 --> 00:03:18,370 Det är också bra om du har ett program som kanske genererar ett bibliotek 68 00:03:18,370 --> 00:03:20,430 eller generera lite set av strängar, och du 69 00:03:20,430 --> 00:03:22,846 måste kunna se att det genererar dem ordentligt. 70 00:03:22,846 --> 00:03:23,860 71 00:03:23,860 --> 00:03:25,160 Detta är sättet att göra det. 72 00:03:25,160 --> 00:03:28,280 >> Så om du skriver ut dem till en fil, som du lättare kan undersöka dem, eller hur? 73 00:03:28,280 --> 00:03:30,930 Versus försöka rulla via kommandoraden. 74 00:03:30,930 --> 00:03:32,740 75 00:03:32,740 --> 00:03:35,820 Och så en sak att notera är att med bara större 76 00:03:35,820 --> 00:03:40,090 än cirkumflex, om du skriver till en fil som redan exists-- 77 00:03:40,090 --> 00:03:44,990 så som om vi körde det första tid, sätter vi den till output.text, 78 00:03:44,990 --> 00:03:49,970 och sedan hade vi ett andra program som tryckt detta som program två 79 00:03:49,970 --> 00:03:54,250 och gjorde en mer än till output.text, det kommer att skriva över that-- så 80 00:03:54,250 --> 00:03:56,715 skriva över det som var någonsin i filen till att börja med. 81 00:03:56,715 --> 00:03:57,720 82 00:03:57,720 --> 00:04:00,750 >> Så om du vill lägga till till en fil, som vi ser här, 83 00:04:00,750 --> 00:04:04,779 du bara göra två större än tecken. 84 00:04:04,779 --> 00:04:05,820 Och det kommer att lägga till den. 85 00:04:05,820 --> 00:04:06,750 Det kommer inte att skriva över den. 86 00:04:06,750 --> 00:04:09,770 Så om du behöver för att köra flera program och typ av hålla 87 00:04:09,770 --> 00:04:13,170 reda på vad alla av dem är återvänder till dig i en fil, 88 00:04:13,170 --> 00:04:14,190 det är ett sätt att göra det. 89 00:04:14,190 --> 00:04:17,231 Om du inte bryr dig vad som finns i filen och det är tillåtet att skrivas över, 90 00:04:17,231 --> 00:04:19,204 Du kan bara använda en enda större än. 91 00:04:19,204 --> 00:04:20,600 Betyder det vettigt för alla? 92 00:04:20,600 --> 00:04:23,205 93 00:04:23,205 --> 00:04:31,140 >> PUBLIK: Liksom dot slash hej större än produktionen dot text, som två gånger, 94 00:04:31,140 --> 00:04:34,030 det ska bara bara visa på utgång dot text en andra time-- 95 00:04:34,030 --> 00:04:34,810 >> TALARE 1: Rätt. 96 00:04:34,810 --> 00:04:40,450 Så det skulle i princip bara helt skriva vad var det till att börja med. 97 00:04:40,450 --> 00:04:44,260 Om denna fil här, output.text redan 98 00:04:44,260 --> 00:04:48,230 finns, i princip vad du kallar det igen med en enda större 99 00:04:48,230 --> 00:04:51,920 än du bara kan tänka på det så som det ersatte filen. 100 00:04:51,920 --> 00:04:54,824 Som när du sparar ett Word dokument och du behöver spara som, 101 00:04:54,824 --> 00:04:57,365 och du behåller samma namn, och det helt skriver över det-- 102 00:04:57,365 --> 00:04:58,680 Detta är samma typ av sak. 103 00:04:58,680 --> 00:05:00,380 104 00:05:00,380 --> 00:05:03,550 Någon som har några frågor om bara mata till en fil? 105 00:05:03,550 --> 00:05:05,051 106 00:05:05,051 --> 00:05:05,550 Grymt. 107 00:05:05,550 --> 00:05:11,440 >> Så uppenbarligen, om du vända arrow riktning, kan det göra input. 108 00:05:11,440 --> 00:05:13,090 109 00:05:13,090 --> 00:05:19,960 Så när ni hade som Caesar eller Visioneer 110 00:05:19,960 --> 00:05:23,195 och du var tvungen att ingångs något, du hade en Kommandoradsargumentet 111 00:05:23,195 --> 00:05:24,960 som faktiskt ingång den. 112 00:05:24,960 --> 00:05:27,410 Detta är ett annat sätt att göra det. 113 00:05:27,410 --> 00:05:30,520 Så istället för att vänta för en kommandotolk, 114 00:05:30,520 --> 00:05:33,800 som när du bad om din meddelande i Caesar eller Visioneer, 115 00:05:33,800 --> 00:05:36,490 om du hade en textfil som hade ditt meddelande, 116 00:05:36,490 --> 00:05:38,280 du bara kunde skriva in det i det. 117 00:05:38,280 --> 00:05:44,930 >> Så om detta var som pricken snedstreck Caesar 3 mindre än pilen mata in text, som 118 00:05:44,930 --> 00:05:47,240 är ditt budskap, att skulle springa fint. 119 00:05:47,240 --> 00:05:51,310 120 00:05:51,310 --> 00:05:54,020 När Caesar programmet faktiskt bad om input från användaren, 121 00:05:54,020 --> 00:05:57,360 Det skulle redan ha det eftersom du har skrivit i den här filen. 122 00:05:57,360 --> 00:05:58,830 Det är bara ett annat sätt. 123 00:05:58,830 --> 00:06:02,445 Bara en omvänd av output-- bara ingång för dina data. 124 00:06:02,445 --> 00:06:04,570 125 00:06:04,570 --> 00:06:06,680 >> Och så den sista är röret. 126 00:06:06,680 --> 00:06:07,780 Så den här är ganska coolt. 127 00:06:07,780 --> 00:06:09,890 Eftersom det gör att du kan ta utsignalen från en 128 00:06:09,890 --> 00:06:13,695 program och uttrycka det som ingång till ett annat program. 129 00:06:13,695 --> 00:06:15,250 130 00:06:15,250 --> 00:06:18,630 Jag vet inte om någon av er spelat med dechiffrera 131 00:06:18,630 --> 00:06:20,590 att CS50 kan ha gett dig, men det skulle 132 00:06:20,590 --> 00:06:27,380 gör att du kan ta lite prov fil, skriva in det i din kryptering, 133 00:06:27,380 --> 00:06:30,350 och sedan därifrån skriver det i din dekryptering 134 00:06:30,350 --> 00:06:32,470 att se till att det blev lika. 135 00:06:32,470 --> 00:06:34,050 Så det är ungefär som trevägs slinga. 136 00:06:34,050 --> 00:06:38,400 137 00:06:38,400 --> 00:06:39,423 Gå för det. 138 00:06:39,423 --> 00:06:41,785 >> PUBLIK: Om ett program har flera ingångar, 139 00:06:41,785 --> 00:06:47,646 finns det något sätt att berätta det vilken ingång att använda textfilen eller utgången för? 140 00:06:47,646 --> 00:06:49,325 >> TALARE 1: Det har flera ingångar. 141 00:06:49,325 --> 00:06:52,190 142 00:06:52,190 --> 00:07:00,430 Oavsett in din input-- när det är ber om ingång som första gången, det är 143 00:07:00,430 --> 00:07:03,240 kommer att anta, tror jag, det är går till rör i hela filen. 144 00:07:03,240 --> 00:07:03,979 145 00:07:03,979 --> 00:07:07,145 Så om du har flera ingångar, du kommer att rörsystem i flera filer. 146 00:07:07,145 --> 00:07:08,190 147 00:07:08,190 --> 00:07:12,390 Så om du frågar efter meddelanden tre gånger i koden, 148 00:07:12,390 --> 00:07:15,230 du kommer att vara att sätta i tre olika filer. 149 00:07:15,230 --> 00:07:15,980 Och det blir galet. 150 00:07:15,980 --> 00:07:18,188 Och du ska inte behöva oroa sig just nu. 151 00:07:18,188 --> 00:07:19,150 Men det är tanken. 152 00:07:19,150 --> 00:07:20,680 153 00:07:20,680 --> 00:07:26,822 >> Så ja, är röret bara produktionen av ett Programmet använder inmatas i den andra. 154 00:07:26,822 --> 00:07:27,665 Alla bra där? 155 00:07:27,665 --> 00:07:28,565 156 00:07:28,565 --> 00:07:29,065 Cool. 157 00:07:29,065 --> 00:07:30,170 158 00:07:30,170 --> 00:07:30,932 OK. 159 00:07:30,932 --> 00:07:32,890 Du har förmodligen inte kommer att ha göra för mycket med den. 160 00:07:32,890 --> 00:07:35,670 Men du bör förstå hur du kan använda denna. 161 00:07:35,670 --> 00:07:38,910 Och det finns några fall som du kanske vill använda den. 162 00:07:38,910 --> 00:07:44,590 >> Så fil I / O-- jag vet vad du är saying-- vi är vana vid att läsa från 163 00:07:44,590 --> 00:07:50,500 och skriva till vår skärm där, vilket är standard i och standard ut. 164 00:07:50,500 --> 00:07:54,370 Och det är vad ni har gör sedan början av klassen här. 165 00:07:54,370 --> 00:07:58,220 Men du kan också läsa och skriva filer, vilket är fil I / O-- så filen input, 166 00:07:58,220 --> 00:07:59,850 utgången är allt det står för. 167 00:07:59,850 --> 00:08:00,930 168 00:08:00,930 --> 00:08:04,360 Så detta innebär i princip att du kan lagra dina data nu. 169 00:08:04,360 --> 00:08:08,460 >> När du bara skriva ut det till skärmen, det är i princip borta, eller hur? 170 00:08:08,460 --> 00:08:12,507 Så fort du gör "Hej världen "och kör" Hello world " 171 00:08:12,507 --> 00:08:14,090 den skriver "Hello world" på skärmen. 172 00:08:14,090 --> 00:08:16,370 Men du kan inte riktigt göra något med det därifrån. 173 00:08:16,370 --> 00:08:18,950 Om du lagrar i en text fil, sedan plötsligt 174 00:08:18,950 --> 00:08:22,789 du har denna information som du är tillåtet att manipulera eller sätta den i en fil, 175 00:08:22,789 --> 00:08:24,080 eller sätta den i ett program senare. 176 00:08:24,080 --> 00:08:26,370 177 00:08:26,370 --> 00:08:29,290 En av orsakerna varför vi gör detta är bara 178 00:08:29,290 --> 00:08:31,560 som ett sätt att lagra data för senare användning. 179 00:08:31,560 --> 00:08:34,790 180 00:08:34,790 --> 00:08:37,279 >> Jag har ett par steg här bara gå igenom standard 181 00:08:37,279 --> 00:08:39,450 I / O. I steg ett, du måste skapa en referens 182 00:08:39,450 --> 00:08:43,480 till filen med alla caps FIL stjärn fil. 183 00:08:43,480 --> 00:08:45,740 Så som skapar en pekare till en fil. 184 00:08:45,740 --> 00:08:48,080 185 00:08:48,080 --> 00:08:49,650 Så då du vill öppna den. 186 00:08:49,650 --> 00:08:52,940 Och du säger, bokstavligen, bara filen motsvarar fopen. 187 00:08:52,940 --> 00:08:57,400 Och detta kommer att returnera en pekaren till filen som du just öppnat. 188 00:08:57,400 --> 00:08:59,610 189 00:08:59,610 --> 00:09:01,460 Jag såg ett par av er killarna på kontorstid. 190 00:09:01,460 --> 00:09:07,400 >> Men en av de saker är remember-- pekare 191 00:09:07,400 --> 00:09:10,409 kan vara någon adress eller null, eller hur? 192 00:09:10,409 --> 00:09:12,700 Om vi ​​någonsin har ett fall där något kan returnera null, 193 00:09:12,700 --> 00:09:14,990 Vad har vi att göra innan vi någonsin använda den? 194 00:09:14,990 --> 00:09:16,220 195 00:09:16,220 --> 00:09:19,000 Vi måste kontrollera om Det är null eller inte, eller hur? 196 00:09:19,000 --> 00:09:23,600 Eftersom en del av er kanske har haft frågan om vad objektet 197 00:09:23,600 --> 00:09:26,110 höll på att återlämnas i utbrytning var null. 198 00:09:26,110 --> 00:09:28,170 Du försökte utföra någon funktion på den. 199 00:09:28,170 --> 00:09:29,770 Och din dator sajt kritiseras. 200 00:09:29,770 --> 00:09:30,725 Rätt? 201 00:09:30,725 --> 00:09:33,640 Jag slår vad om ett par av er kan ha haft den frågan. 202 00:09:33,640 --> 00:09:38,890 >> Så med fopen, kommer fopen antingen returnera en pekare till filen, 203 00:09:38,890 --> 00:09:41,200 eller om något går fel, det kommer att returnera null. 204 00:09:41,200 --> 00:09:45,980 Så du alltid måste kontrollera att det inte har återvänt null 205 00:09:45,980 --> 00:09:47,880 innan du försöker göra något annat. 206 00:09:47,880 --> 00:09:49,110 207 00:09:49,110 --> 00:09:51,974 Detta är som en vanlig paradigm att du kommer att behöva här. 208 00:09:51,974 --> 00:09:54,390 Om det någonsin en chans att något kunde återvända null, 209 00:09:54,390 --> 00:09:56,590 kontrollera att det inte innan du fortsätter. 210 00:09:56,590 --> 00:09:58,911 Annars, du kommer att få fina site fel. 211 00:09:58,911 --> 00:10:00,410 Och ingen tycker om att ta itu med dem. 212 00:10:00,410 --> 00:10:03,180 213 00:10:03,180 --> 00:10:06,410 >> Så som vi ser här, det första argumentet är bara sökvägen till filen. 214 00:10:06,410 --> 00:10:09,380 Om det inte finns den filen, det kommer att skapa den filen. 215 00:10:09,380 --> 00:10:10,713 Och det kommer bara att bli tomt. 216 00:10:10,713 --> 00:10:10,789 217 00:10:10,789 --> 00:10:13,080 Och sedan det andra argumentet är det läge som du vill ha. 218 00:10:13,080 --> 00:10:14,610 Vill vi läsa från den här filen? 219 00:10:14,610 --> 00:10:15,560 Vill du skriva av det? 220 00:10:15,560 --> 00:10:16,476 Vill du lägga till? 221 00:10:16,476 --> 00:10:17,600 222 00:10:17,600 --> 00:10:20,670 Så egentligen vad jag just said-- om filen inte finns 223 00:10:20,670 --> 00:10:23,400 och du försöker läsa från det, det kommer att kasta ett fel. 224 00:10:23,400 --> 00:10:26,890 Om filen name-- vilja om file.text finns inte ännu 225 00:10:26,890 --> 00:10:29,250 och du vill skriva till det, kommer det att skapa 226 00:10:29,250 --> 00:10:33,110 en tom fil som heter file.text för dig. 227 00:10:33,110 --> 00:10:36,612 Och om du vill lägga till, du bör göra samma sak. 228 00:10:36,612 --> 00:10:38,081 Är det vettigt? 229 00:10:38,081 --> 00:10:40,580 Om du försöker läsa från en fil som inte finns ännu, 230 00:10:40,580 --> 00:10:41,590 det ska kasta ett fel. 231 00:10:41,590 --> 00:10:44,340 Annars kommer det att skapa filen för du gör vad du vill det. 232 00:10:44,340 --> 00:10:45,970 233 00:10:45,970 --> 00:10:46,470 Cool. 234 00:10:46,470 --> 00:10:47,510 235 00:10:47,510 --> 00:10:48,880 Nu kan vi läsa från filen. 236 00:10:48,880 --> 00:10:52,570 Och detta är bara typ att gå genom de olika funktionerna 237 00:10:52,570 --> 00:10:58,980 att vi har för fil-I / O. Detta kommer vara nödvändigt i denna veckas pset, 238 00:10:58,980 --> 00:11:00,505 om jag minns rätt. 239 00:11:00,505 --> 00:11:02,880 Ja, det absolut kommer att bli nödvändigt i denna veckas pset. 240 00:11:02,880 --> 00:11:04,260 241 00:11:04,260 --> 00:11:07,010 Så fgetc returnerar nästa tecken. 242 00:11:07,010 --> 00:11:08,350 243 00:11:08,350 --> 00:11:10,300 fgets bara returnerar en textrad. 244 00:11:10,300 --> 00:11:11,790 245 00:11:11,790 --> 00:11:14,610 Den återgår allt upp till en ny linje, och det kommer att bryta. 246 00:11:14,610 --> 00:11:15,950 247 00:11:15,950 --> 00:11:18,700 Så fread läser en viss antal byte och placerar dem 248 00:11:18,700 --> 00:11:20,700 i en matris, som är något du kan 249 00:11:20,700 --> 00:11:25,485 vill göra med re-size-- kan vara användbart. 250 00:11:25,485 --> 00:11:26,550 251 00:11:26,550 --> 00:11:29,290 >> Hur många människor har läst den pset spec, förresten? 252 00:11:29,290 --> 00:11:30,980 253 00:11:30,980 --> 00:11:32,261 OK. 254 00:11:32,261 --> 00:11:32,760 [OHÖRBAR] 255 00:11:32,760 --> 00:11:35,380 256 00:11:35,380 --> 00:11:36,580 >> TALARE 1: OK. 257 00:11:36,580 --> 00:11:37,530 Okej. 258 00:11:37,530 --> 00:11:41,940 Definitivt läsa that-- det är en rolig pset. 259 00:11:41,940 --> 00:11:51,320 Du får återställa ett raderat minne card-- riktigt spännande när det fungerar. 260 00:11:51,320 --> 00:11:54,100 Men definitivt, börja läsa det. 261 00:11:54,100 --> 00:11:56,280 Kom och prata med mig om du har frågor om det. 262 00:11:56,280 --> 00:11:59,290 >> OK, så som jag sade, fread läser ett visst antal bitgrupper. 263 00:11:59,290 --> 00:12:01,340 264 00:12:01,340 --> 00:12:03,590 Det är några godtyckligt antal att du kommer att ställa. 265 00:12:03,590 --> 00:12:05,990 266 00:12:05,990 --> 00:12:08,260 Och sedan fseek bara flyttar till en viss position. 267 00:12:08,260 --> 00:12:11,150 Så kanske du inte bryr dig om de nästa 10 bytes. 268 00:12:11,150 --> 00:12:12,880 Du vill bara att hoppa framåt. 269 00:12:12,880 --> 00:12:14,030 Du bryr dig inte om dem. 270 00:12:14,030 --> 00:12:16,280 Du vill läsa början vid byte 11. 271 00:12:16,280 --> 00:12:18,252 fseek tillåter dig att göra det. 272 00:12:18,252 --> 00:12:20,710 Så det gör att du kan vara selektiv om vad du läser. 273 00:12:20,710 --> 00:12:25,880 Eftersom fgetc, fgets och fread läs- från en viss plats i filen. 274 00:12:25,880 --> 00:12:27,260 275 00:12:27,260 --> 00:12:35,090 >> Ett sätt att tänka på detta är om detta är vår fil, när du öppnar den, 276 00:12:35,090 --> 00:12:41,140 du har denna position i filen som startar i början. 277 00:12:41,140 --> 00:12:45,040 När du ringer fgetc, fgetf eller fread, 278 00:12:45,040 --> 00:12:48,875 det kommer att börja från denna position markör. 279 00:12:48,875 --> 00:12:51,340 280 00:12:51,340 --> 00:12:55,245 Låt oss säga att du bara vill läsa denna bit av minnet här. 281 00:12:55,245 --> 00:12:56,300 282 00:12:56,300 --> 00:12:57,960 Du kan inte bara ringa. 283 00:12:57,960 --> 00:13:02,430 Du måste söka hit och sedan läsa däri 284 00:13:02,430 --> 00:13:06,540 eller läsa, får, eller getc, beroende på vad du vill. 285 00:13:06,540 --> 00:13:09,310 Så söker bara gör att du kan hoppa över delar av minnet. 286 00:13:09,310 --> 00:13:11,590 Och det är det enda sätt kan du hoppa över saker 287 00:13:11,590 --> 00:13:14,012 utan att läsa dem i din buffert. 288 00:13:14,012 --> 00:13:15,470 Betyder det vettigt för alla? 289 00:13:15,470 --> 00:13:21,110 290 00:13:21,110 --> 00:13:24,780 >> Uppenbarligen finns det en massa parallell här-- 291 00:13:24,780 --> 00:13:27,780 vår produktion, eller ingångs omdirigering, du har läst och skriva. 292 00:13:27,780 --> 00:13:31,800 Så fputc bara skriver en tecknet i filen. 293 00:13:31,800 --> 00:13:33,655 fputs skriver en linje. 294 00:13:33,655 --> 00:13:35,030 295 00:13:35,030 --> 00:13:37,420 Fprintf skriver ut en formaterad utdata. 296 00:13:37,420 --> 00:13:41,190 Så om du har flikar, eller utrymme, eller whatnot. 297 00:13:41,190 --> 00:13:44,180 Och sedan skriver fwrite några array med byte i en fil. 298 00:13:44,180 --> 00:13:48,860 Så detta är på samma sätt fwrite och fread är analoga 299 00:13:48,860 --> 00:13:57,550 opposites-- fgets, fputs, och sedan fputc och fgetc-- massor 300 00:13:57,550 --> 00:14:00,710 av galna, snabba saker. 301 00:14:00,710 --> 00:14:05,300 >> Bara typ av hålla detta handy-- du kommer att ha olika tider 302 00:14:05,300 --> 00:14:08,680 där kanske du bara vill ett tecken i taget. 303 00:14:08,680 --> 00:14:09,890 Kanske du vill ha en hel linje. 304 00:14:09,890 --> 00:14:14,320 Med din ordlista pset-- som är i två psets, 305 00:14:14,320 --> 00:14:19,690 Jag tror, ​​att vi ger dig en helhet dictionary i ett textformat 306 00:14:19,690 --> 00:14:22,252 som har varje ord åtskilda av en linje. 307 00:14:22,252 --> 00:14:24,210 Så om du ville läsa i ett ord i taget, 308 00:14:24,210 --> 00:14:31,769 Vad kan du använda om du läser och de är alla åtskilda på nya linjer, 309 00:14:31,769 --> 00:14:33,310 och du bara vill ha ett ord i taget? 310 00:14:33,310 --> 00:14:35,320 311 00:14:35,320 --> 00:14:36,040 >> Målgrupp: fgets 312 00:14:36,040 --> 00:14:36,748 >> TALARE 1: Rätt. 313 00:14:36,748 --> 00:14:39,960 Fgets-- eftersom som returnerar allt som är på en rad. 314 00:14:39,960 --> 00:14:42,750 Och om varje ord är dess egen linje, kan vi använda fgets. 315 00:14:42,750 --> 00:14:44,511 316 00:14:44,511 --> 00:14:45,010 Cool. 317 00:14:45,010 --> 00:14:47,290 Betyder det vettigt, alla? 318 00:14:47,290 --> 00:14:48,020 Cool? 319 00:14:48,020 --> 00:14:50,020 Ja, vi kommer att komma till det roliga med pekare 320 00:14:50,020 --> 00:14:51,728 mycket snart, där man får göra lite matte. 321 00:14:51,728 --> 00:14:52,776 Och det ska vara bra. 322 00:14:52,776 --> 00:14:55,690 323 00:14:55,690 --> 00:14:57,740 >> Senaste step-- stänger din fil. 324 00:14:57,740 --> 00:15:01,090 Med så många saker här, en av våra paradigm 325 00:15:01,090 --> 00:15:03,550 är om den kan återgå null, kontrollera null. 326 00:15:03,550 --> 00:15:06,160 Om du öppnar något, du är bäst att stänga den. 327 00:15:06,160 --> 00:15:10,419 OK, så du inte är klar förrän du är gjort om du inte har stängt det. 328 00:15:10,419 --> 00:15:12,585 Ungefär som det är inte över tills feta damen sjunger. 329 00:15:12,585 --> 00:15:14,130 Det är som att stänga filen. 330 00:15:14,130 --> 00:15:16,860 331 00:15:16,860 --> 00:15:19,190 Som det står här, bara upprepa, alltid 332 00:15:19,190 --> 00:15:21,750 öppna filen innan du är läser eller skriver till den. 333 00:15:21,750 --> 00:15:24,450 Och alltid stänga den om du har öppnat den. 334 00:15:24,450 --> 00:15:25,460 Okej? 335 00:15:25,460 --> 00:15:25,960 Cool. 336 00:15:25,960 --> 00:15:26,835 >> Så här är ett exempel. 337 00:15:26,835 --> 00:15:29,250 338 00:15:29,250 --> 00:15:34,330 Så tiny-- jag vet inte om du killar kan se att mycket väl. 339 00:15:34,330 --> 00:15:36,805 Om bara vi kunde öka ljusstyrkan på något sätt. 340 00:15:36,805 --> 00:15:40,430 341 00:15:40,430 --> 00:15:45,030 Låt mig faktiskt göra det om jag kan. 342 00:15:45,030 --> 00:15:48,020 343 00:15:48,020 --> 00:15:51,470 OK, ni kan inte riktigt se det alls, kan du? 344 00:15:51,470 --> 00:15:52,905 OK, vi kommer att göra det, då. 345 00:15:52,905 --> 00:16:35,094 346 00:16:35,094 --> 00:16:35,594 [OHÖRBAR] 347 00:16:35,594 --> 00:16:56,670 348 00:16:56,670 --> 00:16:58,605 >> Jag antar att det är mycket bättre att se. 349 00:16:58,605 --> 00:17:17,330 350 00:17:17,330 --> 00:17:19,455 Kan någon se var min mus gick är frågan? 351 00:17:19,455 --> 00:17:22,837 Ah, där det är-- vad kämpar! 352 00:17:22,837 --> 00:17:48,910 353 00:17:48,910 --> 00:17:49,520 >> OK. 354 00:17:49,520 --> 00:17:53,845 Egentligen bör ni ha snäll av en idé om vad detta gör. 355 00:17:53,845 --> 00:17:56,740 356 00:17:56,740 --> 00:17:57,600 Det är inte perfekt. 357 00:17:57,600 --> 00:17:58,851 358 00:17:58,851 --> 00:18:02,425 Men jag vill hellre förklara det än att spendera mer tid på att försöka formatera det ordentligt. 359 00:18:02,425 --> 00:18:03,610 360 00:18:03,610 --> 00:18:07,280 I grund och botten, som ni ser här, vi börjar med filen öppen. 361 00:18:07,280 --> 00:18:09,620 Och vi har några databasfilen som vi är 362 00:18:09,620 --> 00:18:12,300 öppning som säger att det är våra elever. 363 00:18:12,300 --> 00:18:14,020 Och vi kommer att skriva till den. 364 00:18:14,020 --> 00:18:15,060 365 00:18:15,060 --> 00:18:17,720 Så naturligtvis, returnera null. 366 00:18:17,720 --> 00:18:19,650 Så vi måste kontrollera null. 367 00:18:19,650 --> 00:18:22,930 Och sedan om det inte är null, vi går igenom. 368 00:18:22,930 --> 00:18:25,660 Och som du ser, vi är looping igenom här. 369 00:18:25,660 --> 00:18:26,960 Det finns studenter. 370 00:18:26,960 --> 00:18:30,520 Studenter är hash definieras som tre. 371 00:18:30,520 --> 00:18:34,060 Och det vi gör är att vi är tryckning till filen, eller hur? 372 00:18:34,060 --> 00:18:36,975 Så vad ska vi skriva ut till vår fil? 373 00:18:36,975 --> 00:18:47,040 374 00:18:47,040 --> 00:18:48,906 >> PUBLIK: Poängen som finns i arrayen? 375 00:18:48,906 --> 00:18:49,680 >> TALARE 1: Ja. 376 00:18:49,680 --> 00:18:50,980 Poängen som finns i den array-- exakt. 377 00:18:50,980 --> 00:18:53,050 Så vi öppnar detta databasfilen, vilket 378 00:18:53,050 --> 00:18:56,040 Jag antar är något slags av betyg databas. 379 00:18:56,040 --> 00:19:01,100 Och vi bara skriva ut betyg för varje elev till den filen. 380 00:19:01,100 --> 00:19:02,140 Cool? 381 00:19:02,140 --> 00:19:02,640 Bra. 382 00:19:02,640 --> 00:19:03,811 383 00:19:03,811 --> 00:19:04,310 Grymt. 384 00:19:04,310 --> 00:19:05,100 OK. 385 00:19:05,100 --> 00:19:06,950 Låt oss gå tillbaka att-- 386 00:19:06,950 --> 00:19:08,646 >> PUBLIK: Jag har en snabb fråga. 387 00:19:08,646 --> 00:19:11,570 Är det printf inte i loopen? 388 00:19:11,570 --> 00:19:12,870 Det är bara i om slingan? 389 00:19:12,870 --> 00:19:14,370 TALARE 1: Nej, det är i loopen. 390 00:19:14,370 --> 00:19:16,150 391 00:19:16,150 --> 00:19:18,810 Jag kan inte se min mus väldigt bra här uppe. 392 00:19:18,810 --> 00:19:21,359 Så jag kämpar för att format som korrekt. 393 00:19:21,359 --> 00:19:22,525 Detta fäste ska vara borta. 394 00:19:22,525 --> 00:19:23,610 395 00:19:23,610 --> 00:19:25,130 Det borde vara här nere. 396 00:19:25,130 --> 00:19:26,605 Detta är vad som finns i din for-loop. 397 00:19:26,605 --> 00:20:10,680 398 00:20:10,680 --> 00:20:11,180 Där. 399 00:20:11,180 --> 00:20:12,160 Nu är det ganska. 400 00:20:12,160 --> 00:20:16,720 Så det är så det ska be-- utom för det sista fäste som jag ogillade. 401 00:20:16,720 --> 00:20:17,220 OK. 402 00:20:17,220 --> 00:20:19,491 Betyder det vettigt för alla? 403 00:20:19,491 --> 00:20:19,990 OK. 404 00:20:19,990 --> 00:20:23,750 Vi kommer att gå vidare till nästa sak then-- 405 00:20:23,750 --> 00:20:26,180 som, faktiskt, du kommer att behöva se koden. 406 00:20:26,180 --> 00:20:28,370 Så jag ska bara kopiera det över just nu. 407 00:20:28,370 --> 00:20:31,500 408 00:20:31,500 --> 00:20:32,000 OK. 409 00:20:32,000 --> 00:20:35,110 Så jag ska visa er denna kod. 410 00:20:35,110 --> 00:20:38,240 Och jag vill att du ska försöka siffra reda på vad det är tänkt att göra. 411 00:20:38,240 --> 00:20:49,740 412 00:20:49,740 --> 00:20:52,480 >> Så med tanke that-- ta en minut eller så. 413 00:20:52,480 --> 00:20:54,440 Försöka lista ut vad som händer här. 414 00:20:54,440 --> 00:21:58,840 415 00:21:58,840 --> 00:21:59,570 >> Några idéer? 416 00:21:59,570 --> 00:22:08,180 417 00:22:08,180 --> 00:22:12,470 >> Vi vet att vi har minst två argument i kommandoraden, eller hur? 418 00:22:12,470 --> 00:22:16,270 Jag antar varav en kommer att vara att [OHÖRBAR] i vårt program är 419 00:22:16,270 --> 00:22:17,530 och sedan något annat. 420 00:22:17,530 --> 00:22:19,980 För om [OHÖRBAR] är mindre än två, vi skrika på dem. 421 00:22:19,980 --> 00:22:21,140 Rätt? 422 00:22:21,140 --> 00:22:25,300 Och från användning, ser det ut som det kommer att bli någon form av fil. 423 00:22:25,300 --> 00:22:26,260 Vi är alla överens om det? 424 00:22:26,260 --> 00:22:29,110 425 00:22:29,110 --> 00:22:31,570 Så nu, vad är slingan med? 426 00:22:31,570 --> 00:22:32,570 Hur är det att gå igenom? 427 00:22:32,570 --> 00:22:35,000 428 00:22:35,000 --> 00:22:36,449 >> PUBLIK: Alla filer. 429 00:22:36,449 --> 00:22:37,240 TALARE 1: Exakt. 430 00:22:37,240 --> 00:22:39,650 Det kommer igenom alla filer som Prisjakt ingång där. 431 00:22:39,650 --> 00:22:40,720 432 00:22:40,720 --> 00:22:46,040 Så för varje fil, det är öppnar upp några sträng där. 433 00:22:46,040 --> 00:22:47,560 Det öppnar upp den filen. 434 00:22:47,560 --> 00:22:48,060 Rätt? 435 00:22:48,060 --> 00:22:49,140 436 00:22:49,140 --> 00:22:52,380 Och det är att läsa från den. 437 00:22:52,380 --> 00:22:53,420 438 00:22:53,420 --> 00:22:55,540 Naturligtvis kontrollera om det är null. 439 00:22:55,540 --> 00:22:57,220 Och då är det att skriva ut. 440 00:22:57,220 --> 00:23:01,460 Om det är null, det är bara att berätta att det inte är en fil som existerar. 441 00:23:01,460 --> 00:23:04,290 Eftersom minns, med Läs vår fil måste finnas. 442 00:23:04,290 --> 00:23:04,810 Rätt? 443 00:23:04,810 --> 00:23:06,870 Med skriv och append, du kan komma undan med det. 444 00:23:06,870 --> 00:23:08,970 Men med läsning, har vårt fil att existera. 445 00:23:08,970 --> 00:23:10,430 446 00:23:10,430 --> 00:23:13,330 >> Och sedan om det existerar, Vad gör vi här? 447 00:23:13,330 --> 00:23:14,810 448 00:23:14,810 --> 00:23:15,780 Låt oss bara börja här. 449 00:23:15,780 --> 00:23:18,815 Vad är detta do-- denna första tecknet. 450 00:23:18,815 --> 00:23:20,960 451 00:23:20,960 --> 00:23:21,790 Vad gör den? 452 00:23:21,790 --> 00:23:24,100 Han får ett tecken, eller hur? 453 00:23:24,100 --> 00:23:25,400 Så vad är detta gör? 454 00:23:25,400 --> 00:23:26,775 Det börjar bli det första tecknet. 455 00:23:26,775 --> 00:23:28,860 456 00:23:28,860 --> 00:23:30,200 Någon som vet EOF? 457 00:23:30,200 --> 00:23:31,170 >> PUBLIK: Slut på filen? 458 00:23:31,170 --> 00:23:32,680 >> SPEAKER 1: Slut på exakt file--. 459 00:23:32,680 --> 00:23:35,310 Så det kommer att gå igenom hela filen, eller hur? 460 00:23:35,310 --> 00:23:36,710 461 00:23:36,710 --> 00:23:40,780 Och då det kommer att uppdateras med få varje efterföljande tecken. 462 00:23:40,780 --> 00:23:41,565 Rätt? 463 00:23:41,565 --> 00:23:43,636 Och vad gör den? 464 00:23:43,636 --> 00:23:44,760 PUBLIK: Att sätta det in-- 465 00:23:44,760 --> 00:23:46,741 466 00:23:46,741 --> 00:23:49,170 >> TALARE 1: putchar utskrifter till din skärmsläckare. 467 00:23:49,170 --> 00:23:50,867 468 00:23:50,867 --> 00:23:51,950 [OHÖRBAR] tecknet. 469 00:23:51,950 --> 00:23:54,300 Och sedan när det [OHÖRBAR] Detta kommer att avsluta ärendet. 470 00:23:54,300 --> 00:23:57,370 >> PUBLIK: Har du inte behöver en [? annat? ?] 471 00:23:57,370 --> 00:23:59,005 >> TALARE 1: Inte nödvändigtvis. 472 00:23:59,005 --> 00:24:01,480 Jag menar, det är typ av underförstått i detta. 473 00:24:01,480 --> 00:24:06,780 Eftersom detta tillbaka, men så länge detta inte fånga denna, du är bra. 474 00:24:06,780 --> 00:24:07,940 475 00:24:07,940 --> 00:24:10,250 Jag menar det är nog bra träna på att göra en annan. 476 00:24:10,250 --> 00:24:15,755 Men ett annat är inte alltid nödvändigt särskilt 477 00:24:15,755 --> 00:24:17,610 om du har något som en återgång, vilket 478 00:24:17,610 --> 00:24:20,640 betyder att i detta fall, om den fångar det, är ditt program kommer att sluta 479 00:24:20,640 --> 00:24:21,850 och det kommer aldrig komma till denna. 480 00:24:21,850 --> 00:24:23,030 481 00:24:23,030 --> 00:24:29,190 Det är mer för det fall du är inte nödvändigtvis returnera något. 482 00:24:29,190 --> 00:24:31,370 För om detta inte var vänder något, 483 00:24:31,370 --> 00:24:34,430 Det skulle innebära att om detta vore sant, resten av detta skulle fortfarande köra. 484 00:24:34,430 --> 00:24:36,138 Och i så fall, du skulle ha en falsk. 485 00:24:36,138 --> 00:24:38,240 Om det är att återvända, och ditt programmets slut, 486 00:24:38,240 --> 00:24:41,960 ett annat är inte nödvändigt alla tiden, beroende på sammanhanget. 487 00:24:41,960 --> 00:24:43,084 488 00:24:43,084 --> 00:24:44,375 Jacob, har du en fråga? 489 00:24:44,375 --> 00:24:46,100 PUBLIK: Ja. 490 00:24:46,100 --> 00:24:49,300 Det gör fgetc få nästa tecken? 491 00:24:49,300 --> 00:24:50,734 Hur ökar karaktär? 492 00:24:50,734 --> 00:24:51,400 TALARE 1: Ja. 493 00:24:51,400 --> 00:24:52,774 Så fgetc blir nästa tecken. 494 00:24:52,774 --> 00:24:54,140 495 00:24:54,140 --> 00:24:56,866 Du kan tänka på det som C ++ i en mening. 496 00:24:56,866 --> 00:24:58,350 >> PUBLIK: Så vad var EOF? 497 00:24:58,350 --> 00:25:00,877 >> TALARE 1: EOF är slutet av filen. 498 00:25:00,877 --> 00:25:03,960 Det är bara en markör som gör att du vet att du är i slutet av din fil. 499 00:25:03,960 --> 00:25:06,742 Så detta kommer att skriva ut med din vanliga ut. 500 00:25:06,742 --> 00:25:08,950 Och då det kommer att stänga filen när det är gjort. 501 00:25:08,950 --> 00:25:10,700 Och sedan ska vi gå till nästa fil, eller hur? 502 00:25:10,700 --> 00:25:12,660 Så totalt, vad gör det här programmet göra? 503 00:25:12,660 --> 00:25:15,402 504 00:25:15,402 --> 00:25:16,090 >> [OHÖRBAR] 505 00:25:16,090 --> 00:25:16,900 >> TALARE 1: Ja. 506 00:25:16,900 --> 00:25:18,770 Den skriver bara ut allt där. 507 00:25:18,770 --> 00:25:23,270 Så om ni någonsin har använt CAT och sedan namnet på någon file-- 508 00:25:23,270 --> 00:25:26,240 Jag vet inte om någon av er har någonsin gjort det på din terminal. 509 00:25:26,240 --> 00:25:29,630 Men om du någonsin använder kommando CAT-- C-A-T-- 510 00:25:29,630 --> 00:25:31,880 och sedan vad fil du har there-- det 511 00:25:31,880 --> 00:25:37,260 skriver ut det till din terminal, vilket kan vara super praktiskt för vissa saker. 512 00:25:37,260 --> 00:25:38,746 Jag använder det mycket. 513 00:25:38,746 --> 00:25:40,120 Betyder det vettigt för alla? 514 00:25:40,120 --> 00:25:41,480 515 00:25:41,480 --> 00:25:42,100 Cool? 516 00:25:42,100 --> 00:25:46,530 >> OK så din uppgift now-- antingen genom själv eller med människor runt dig-- 517 00:25:46,530 --> 00:25:54,930 är att bara skriva ett enkelt program som kommer att bara skriva "Hej världen!" 518 00:25:54,930 --> 00:25:56,255 ut till en fil. 519 00:25:56,255 --> 00:26:00,215 >> [OHÖRBAR] 520 00:26:00,215 --> 00:26:56,210 521 00:26:56,210 --> 00:26:57,040 >> [OHÖRBAR] 522 00:26:57,040 --> 00:26:59,248 >> TALARE 1: Jag var som gjorde Jag gör som dåligt förra veckan? 523 00:26:59,248 --> 00:27:00,201 524 00:27:00,201 --> 00:27:01,492 Jag trodde inte att det var så illa. 525 00:27:01,492 --> 00:27:02,479 526 00:27:02,479 --> 00:27:03,520 Jag är glad att du är här. 527 00:27:03,520 --> 00:27:04,655 Det gör mig verkligen glad. 528 00:27:04,655 --> 00:27:07,565 529 00:27:07,565 --> 00:27:10,160 Jag är en tjej på enkla nöjen. 530 00:27:10,160 --> 00:27:11,688 Jag gillar bara när min avdelning deltar. 531 00:27:11,688 --> 00:27:13,830 532 00:27:13,830 --> 00:27:18,270 Så jag bara få detta började för ni så att vi kan koda ihop. 533 00:27:18,270 --> 00:27:22,290 Jag gillar inte att sätta någon på plats om du inte vill vara. 534 00:27:22,290 --> 00:27:26,486 535 00:27:26,486 --> 00:27:30,086 >> PUBLIK: För frågesport, göra vi måste skriva ett program? 536 00:27:30,086 --> 00:27:33,260 >> TALARE 1: Du kan bli ombedd att skriva enkla program för hand. 537 00:27:33,260 --> 00:27:35,940 538 00:27:35,940 --> 00:27:36,590 Japp. 539 00:27:36,590 --> 00:27:38,510 >> PUBLIK: Testet är nästa vecka, eller hur? 540 00:27:38,510 --> 00:27:40,108 >> SPEAKER 1: Testet är nästa onsdag. 541 00:27:40,108 --> 00:27:40,855 542 00:27:40,855 --> 00:27:43,730 Det innebär att det finns en härlig [? CSE?] gradering parti efteråt, vilket 543 00:27:43,730 --> 00:27:50,390 innebär att du får dina poäng tillbaka som night-- vid vilken tidpunkt? 544 00:27:50,390 --> 00:27:50,890 Vem vet? 545 00:27:50,890 --> 00:27:51,973 Men det kommer att bli den natten. 546 00:27:51,973 --> 00:28:02,020 547 00:28:02,020 --> 00:28:02,855 >> Okej. 548 00:28:02,855 --> 00:28:04,250 Hur vill vi att starta denna? 549 00:28:04,250 --> 00:28:07,964 550 00:28:07,964 --> 00:28:09,630 Jag ska ge er en hint-- börjar med detta. 551 00:28:09,630 --> 00:28:11,455 >> PUBLIK: Du måste öppna en fil. 552 00:28:11,455 --> 00:28:12,250 >> TALARE 1: Ja. 553 00:28:12,250 --> 00:28:14,060 Så vad du vill kalla det här? 554 00:28:14,060 --> 00:28:16,150 Vill du bara vill kalla det "file"? 555 00:28:16,150 --> 00:28:17,480 Låt oss göra det enkelt. 556 00:28:17,480 --> 00:28:26,752 Så fopen-- vad är vår utgångstest kommer att bli? 557 00:28:26,752 --> 00:28:36,130 Kalla det "Hej." 558 00:28:36,130 --> 00:28:37,810 Och vad är vårt läge? 559 00:28:37,810 --> 00:28:39,764 560 00:28:39,764 --> 00:28:41,055 Vad gör vi till den här filen? 561 00:28:41,055 --> 00:28:42,676 562 00:28:42,676 --> 00:28:43,500 >> PUBLIK: Läs. 563 00:28:43,500 --> 00:28:44,401 564 00:28:44,401 --> 00:28:44,900 Skriva. 565 00:28:44,900 --> 00:28:46,191 TALARE 1: Vi skriver till den. 566 00:28:46,191 --> 00:28:47,360 567 00:28:47,360 --> 00:28:47,860 Lovely. 568 00:28:47,860 --> 00:28:50,330 569 00:28:50,330 --> 00:28:52,860 OK, så vi har den här filen nu. 570 00:28:52,860 --> 00:28:54,920 571 00:28:54,920 --> 00:28:56,212 Vad behöver vi göra? 572 00:28:56,212 --> 00:28:57,420 PUBLIK: Kontrollera om det är null. 573 00:28:57,420 --> 00:28:59,820 TALARE 1: Kontrollera om det är null-- exakt. 574 00:28:59,820 --> 00:29:01,980 Det är vad jag vill höra. 575 00:29:01,980 --> 00:29:05,930 Det borde vara automatisk, särskilt ganska mycket från denna punkt på. 576 00:29:05,930 --> 00:29:07,530 577 00:29:07,530 --> 00:29:10,950 Om du börjar segfaulting, du förmodligen inte kontrollera null någonstans. 578 00:29:10,950 --> 00:29:12,480 Nio gånger av tio, det är kommer att vara din fel. 579 00:29:12,480 --> 00:29:15,400 Så om du bara kunde få i vana, alltid kontrollera om det är null, 580 00:29:15,400 --> 00:29:18,150 ditt liv kommer att bli trevlig och easy-- eller lättare. 581 00:29:18,150 --> 00:29:19,480 >> Så kolla för att se om det är null. 582 00:29:19,480 --> 00:29:21,200 583 00:29:21,200 --> 00:29:24,820 Så om det inte är null, vilket är vad bang lika 584 00:29:24,820 --> 00:29:26,784 means-- inte null-- det är giltigt. 585 00:29:26,784 --> 00:29:27,700 Vad vill vi göra? 586 00:29:27,700 --> 00:29:29,750 587 00:29:29,750 --> 00:29:31,570 Vi vill bara skriva ut till den filen, eller hur? 588 00:29:31,570 --> 00:29:32,923 Så vad ska vi använda? 589 00:29:32,923 --> 00:29:34,092 >> PUBLIK: fprintf 590 00:29:34,092 --> 00:29:36,800 >> SPEAKER 1: Fprintf-- lovely. 591 00:29:36,800 --> 00:29:38,150 592 00:29:38,150 --> 00:29:44,000 Och fprintf tar två arguments-- där det kommer och vad vi vill skriva ut. 593 00:29:44,000 --> 00:29:45,820 Så vad är den första? 594 00:29:45,820 --> 00:29:46,570 Var är det? 595 00:29:46,570 --> 00:29:47,490 >> PUBLIK: Fil. 596 00:29:47,490 --> 00:29:48,785 >> TALARE 1: Det kommer att lämna. 597 00:29:48,785 --> 00:29:49,784 598 00:29:49,784 --> 00:29:50,950 Och vad vill vi trycka? 599 00:29:50,950 --> 00:29:52,900 600 00:29:52,900 --> 00:29:58,065 "Hej världen!" 601 00:29:58,065 --> 00:29:58,565 Okej. 602 00:29:58,565 --> 00:30:03,670 Vi har en sista thing-- en annan stor paradigm här. 603 00:30:03,670 --> 00:30:04,479 604 00:30:04,479 --> 00:30:05,145 PUBLIK: Stäng. 605 00:30:05,145 --> 00:30:05,853 SPEAKER 1: Stäng. 606 00:30:05,853 --> 00:30:09,990 607 00:30:09,990 --> 00:30:10,540 Där du går. 608 00:30:10,540 --> 00:30:13,384 >> PUBLIK: Är detta händer om filen är null? 609 00:30:13,384 --> 00:30:15,050 TALARE 1: Nej, det är om det inte är null. 610 00:30:15,050 --> 00:30:16,881 Publik: O, om det är inte-- OK. 611 00:30:16,881 --> 00:30:21,728 612 00:30:21,728 --> 00:30:25,410 För fopen och därefter två argument som går inne, 613 00:30:25,410 --> 00:30:27,655 vad innebär det första argumentet menar igen? 614 00:30:27,655 --> 00:30:30,392 >> SPEAKER 1: Argumentet är precis som namnet på den fil 615 00:30:30,392 --> 00:30:31,350 som du vill åka till. 616 00:30:31,350 --> 00:30:36,020 Så efter detta går, skulle du har någon fil som heter "Hej" 617 00:30:36,020 --> 00:30:38,320 som hade "Hej världen" i den. 618 00:30:38,320 --> 00:30:38,820 Det är allt. 619 00:30:38,820 --> 00:30:39,500 Bara namnet. 620 00:30:39,500 --> 00:30:42,685 621 00:30:42,685 --> 00:30:48,650 >> PUBLIK: Och eftersom det är att skriva, det fil behöver inte redan finns. 622 00:30:48,650 --> 00:30:49,675 Är det vad du säger? 623 00:30:49,675 --> 00:30:50,410 >> TALARE 1: Rätt. 624 00:30:50,410 --> 00:30:50,910 Exakt. 625 00:30:50,910 --> 00:30:53,110 626 00:30:53,110 --> 00:30:55,839 Om "Hello" som en fil finns inte ännu, det är 627 00:30:55,839 --> 00:30:58,380 kommer att skapa en fil som heter Hej "och skriva till det för dig. 628 00:30:58,380 --> 00:30:59,631 629 00:30:59,631 --> 00:31:03,610 >> PUBLIK: När du säger programmet skrev till filen, 630 00:31:03,610 --> 00:31:08,075 varför skriver du "file" i stället för namnet på filen och fprintf-- 631 00:31:08,075 --> 00:31:13,600 >> TALARE 1: Eftersom i detta fall, vi har att stora FILE-- alla i caps-- stjärna, 632 00:31:13,600 --> 00:31:14,260 fil. 633 00:31:14,260 --> 00:31:17,370 Så det är en pekare till filen att du pratar om. 634 00:31:17,370 --> 00:31:19,930 Detta är det sätt som vi bara hänvisa till den. 635 00:31:19,930 --> 00:31:24,850 Så i detta fall, du kan tänka file-- aha, 636 00:31:24,850 --> 00:31:31,271 Vi kan använda this-- filen här hänför sig till öppnandet av "Hej" 637 00:31:31,271 --> 00:31:32,145 och låta den skriver. 638 00:31:32,145 --> 00:31:34,728 >> PUBLIK: Kan vi sätta ett "Hej" istället [? på bara?] f-fil? 639 00:31:34,728 --> 00:31:40,160 TALARE 1: Nej, eftersom "Hej" måste vara öppen och skrivbar. 640 00:31:40,160 --> 00:31:41,820 641 00:31:41,820 --> 00:31:45,980 Arkiv här är som en designator som säger OK, vi 642 00:31:45,980 --> 00:31:49,190 har denna file-- hello-- att vi tittar på. 643 00:31:49,190 --> 00:31:50,680 Det har öppnats. 644 00:31:50,680 --> 00:31:52,140 Och vi kommer att skriva till den. 645 00:31:52,140 --> 00:31:55,130 Om du bara använder "Hej", som är inkapslad i den. 646 00:31:55,130 --> 00:31:56,846 Så det kommer att flippa ut. 647 00:31:56,846 --> 00:31:58,590 648 00:31:58,590 --> 00:32:00,300 Jag menar, du kunde ha döpt den. 649 00:32:00,300 --> 00:32:03,960 Du kunde ha gjort fil, stjärna, "Hej", är lika stor som. 650 00:32:03,960 --> 00:32:07,840 Men hela poängen är att du behöver en fil stjärna pekare för 651 00:32:07,840 --> 00:32:09,281 för att kunna använda dessa funktioner. 652 00:32:09,281 --> 00:32:11,280 PUBLIK: Kan du göra fil, stjärna, fil, "Hello" 653 00:32:11,280 --> 00:32:13,113 eller har du att sätta fil stjärna, fil genom det? 654 00:32:13,113 --> 00:32:16,330 SPEAKER 1: Du kunde gör fil, stjärna, "Hej." 655 00:32:16,330 --> 00:32:19,790 Du kan ändra detta till vilket namn du vill. 656 00:32:19,790 --> 00:32:22,114 Det är helt godtyckligt vad det heter. 657 00:32:22,114 --> 00:32:23,179 658 00:32:23,179 --> 00:32:24,220 Du kan kalla den vad som helst. 659 00:32:24,220 --> 00:32:25,501 660 00:32:25,501 --> 00:32:28,020 Namnge den flygande spaghetti, om du ville. 661 00:32:28,020 --> 00:32:29,690 >> PUBLIK: Vad är "w" inom citationstecken för? 662 00:32:29,690 --> 00:32:31,540 >> SPEAKER 1: "w" är bara läget. 663 00:32:31,540 --> 00:32:33,170 Så vi skriver till denna fil. 664 00:32:33,170 --> 00:32:34,410 665 00:32:34,410 --> 00:32:35,320 Alla bra? 666 00:32:35,320 --> 00:32:36,227 Klar? 667 00:32:36,227 --> 00:32:36,981 Ja. 668 00:32:36,981 --> 00:32:40,365 >> PUBLIK: Så när det skriver detta fil, var har då finner vi den filen? 669 00:32:40,365 --> 00:32:43,820 >> TALARE 1: Det ska vara i samma katalog som du är just nu i. 670 00:32:43,820 --> 00:32:45,650 671 00:32:45,650 --> 00:32:48,880 Om du är i pset tre och du kör den här, i din pset 672 00:32:48,880 --> 00:32:52,600 tre mappen kommer att vara denna fil som heter "Hello." 673 00:32:52,600 --> 00:32:53,160 Cool? 674 00:32:53,160 --> 00:32:53,757 Alla bra? 675 00:32:53,757 --> 00:32:55,840 Jag tycker du är allt få det, vilket är bra. 676 00:32:55,840 --> 00:32:57,290 677 00:32:57,290 --> 00:32:57,790 OK. 678 00:32:57,790 --> 00:33:05,960 Så tillbaka till min slide show-- Jag älskar när saker och ting fungerar. 679 00:33:05,960 --> 00:33:08,674 OK, pointers-- Är ni glada? 680 00:33:08,674 --> 00:33:09,465 Pointers är stora. 681 00:33:09,465 --> 00:33:11,581 682 00:33:11,581 --> 00:33:13,580 De tar en liten bit att svepa huvudet runt. 683 00:33:13,580 --> 00:33:15,288 Detta är mitt andra år undervisnings pekare. 684 00:33:15,288 --> 00:33:16,850 Och jag tror att jag äntligen fick det. 685 00:33:16,850 --> 00:33:18,650 Så om du kämpar, det är OK. 686 00:33:18,650 --> 00:33:19,940 687 00:33:19,940 --> 00:33:24,070 Som jag sade tidigare, rita bilder hjälper mycket med saker i CS, 688 00:33:24,070 --> 00:33:27,400 lika mycket som jag tror att människor tenderar att tänka åh, vi är vid en dator. 689 00:33:27,400 --> 00:33:28,399 Vi bör bara kod. 690 00:33:28,399 --> 00:33:30,190 No-- rita bilder kommer verkligen att hjälpa dig. 691 00:33:30,190 --> 00:33:32,773 Och jag uppmuntrar dig verkligen till utnyttja din kindergartner sida 692 00:33:32,773 --> 00:33:35,010 och ta fram kritor eller markörer och oavgjort. 693 00:33:35,010 --> 00:33:36,110 Eftersom det kommer att hjälpa dig. 694 00:33:36,110 --> 00:33:39,380 Och om du ser mig på kontorstid, jag kommer att bära omkring på högar av papper 695 00:33:39,380 --> 00:33:41,580 med pennor rita ut saker. 696 00:33:41,580 --> 00:33:44,370 >> Så särskilt med pointers-- rita bilder. 697 00:33:44,370 --> 00:33:47,970 Och jag är säker på att vi faktiskt kommer att att dra några bilder här också. 698 00:33:47,970 --> 00:33:51,270 >> Så ni alla fick se Binky, denna coola claymation sak. 699 00:33:51,270 --> 00:33:54,720 Och vi tycker det är väldigt roligt när han exploderar i ett gäng bitar. 700 00:33:54,720 --> 00:33:56,280 701 00:33:56,280 --> 00:33:57,755 Det är lite komisk lättnad för klassen. 702 00:33:57,755 --> 00:34:02,140 703 00:34:02,140 --> 00:34:05,900 C [OHÖRBAR] denna stora förmåga att kunna kontrollera minne. 704 00:34:05,900 --> 00:34:10,090 Och det är en av de saker som verkligen gör det så kraftfullt språk. 705 00:34:10,090 --> 00:34:13,469 Men med stor makt kommer stort ansvar. 706 00:34:13,469 --> 00:34:16,230 Och galna saker kan hända Om du inte är försiktig. 707 00:34:16,230 --> 00:34:18,560 Så när du använder pekare, du vill göra 708 00:34:18,560 --> 00:34:21,440 säker på att du verkligen förstår exakt vad du gör. 709 00:34:21,440 --> 00:34:25,530 Förhoppningsvis nästa lite tid kommer att hjälpa dig verkligen förstå 710 00:34:25,530 --> 00:34:27,850 pekare, hur man använder dem, och hur man manipulerar dem. 711 00:34:27,850 --> 00:34:29,170 712 00:34:29,170 --> 00:34:33,460 >> Så memory-- Jag är säker på att vi har sett detta diagram innan. 713 00:34:33,460 --> 00:34:38,540 Så det här är bara en enkel skiss över hur det kan lagras minnet. 714 00:34:38,540 --> 00:34:43,145 Så du i princip har dessa stora matriser av ett byte block 715 00:34:43,145 --> 00:34:46,000 är vad vi har här-- svag inkrement efter ett varje gång. 716 00:34:46,000 --> 00:34:51,810 Detta är i hex [OHÖRBAR] så åttabitarsblock. 717 00:34:51,810 --> 00:34:55,510 Och varje block är associerad med några hexadecimal adress. 718 00:34:55,510 --> 00:34:58,750 Så om du någonsin se 0x, det är bara notating 719 00:34:58,750 --> 00:35:00,670 att det är en hexadecimal adress. 720 00:35:00,670 --> 00:35:03,970 Du kan anta detta innebär viss adress i minnet. 721 00:35:03,970 --> 00:35:06,935 Vi pratar om minnesadresser när du ser hexadecimal. 722 00:35:06,935 --> 00:35:10,420 723 00:35:10,420 --> 00:35:14,630 >> Vi har ints är variabler, flottörer är variabler som lagrar. 724 00:35:14,630 --> 00:35:16,260 Så ints butiks ints. 725 00:35:16,260 --> 00:35:17,430 Flyter butiken flyter. 726 00:35:17,430 --> 00:35:20,260 Så vi har även referenser att lagra minnesadresser. 727 00:35:20,260 --> 00:35:21,660 Det är en slags kartläggning. 728 00:35:21,660 --> 00:35:24,240 Pointers är uteslutande för minnesadresser. 729 00:35:24,240 --> 00:35:25,780 730 00:35:25,780 --> 00:35:27,292 Så det är som din typ där. 731 00:35:27,292 --> 00:35:29,550 732 00:35:29,550 --> 00:35:34,470 Apparaten är 32-bit, vilket innebär att ditt minne adress är fyra byte. 733 00:35:34,470 --> 00:35:37,830 Så någon pekare som du har kommer också att vara fyra byte. 734 00:35:37,830 --> 00:35:43,200 Annars om det är fyra byte, minnet är fyra byte. 735 00:35:43,200 --> 00:35:44,790 Pekare ringsminnet. 736 00:35:44,790 --> 00:35:46,430 Därför är de fyra byte. 737 00:35:46,430 --> 00:35:48,460 Cool-- vill bara förstärka det. 738 00:35:48,460 --> 00:35:50,120 739 00:35:50,120 --> 00:35:52,220 >> Du bör få denna serie nu. 740 00:35:52,220 --> 00:35:55,040 Jag vet inte hur många av er är xkcd fans, men jag älskar xkcd. 741 00:35:55,040 --> 00:35:55,780 Det är bra. 742 00:35:55,780 --> 00:35:57,290 743 00:35:57,290 --> 00:35:57,790 >> Okej. 744 00:35:57,790 --> 00:36:01,640 Så skapar pointers-- som sagt, det är ganska mycket precis som allt annat. 745 00:36:01,640 --> 00:36:02,930 Du har en typ. 746 00:36:02,930 --> 00:36:04,050 Du har ett namn. 747 00:36:04,050 --> 00:36:04,810 Rätt? 748 00:36:04,810 --> 00:36:10,410 Det är vad vi har där. [? Hex?] Stjärna betyder att det är en pekare, 749 00:36:10,410 --> 00:36:12,250 och sedan vad du vill kalla det. 750 00:36:12,250 --> 00:36:15,770 Så den typ representerar vad du kan lagra. 751 00:36:15,770 --> 00:36:16,850 752 00:36:16,850 --> 00:36:17,990 Okej? 753 00:36:17,990 --> 00:36:24,350 På samma sätt som om vi gör ints, Vi vet att vi lagrar en int där. 754 00:36:24,350 --> 00:36:25,990 755 00:36:25,990 --> 00:36:30,280 Med en pekare, det rymmer en minnesadress. 756 00:36:30,280 --> 00:36:34,240 Men vad det betyder är that-- här är där en ritning kommer att komma till hands. 757 00:36:34,240 --> 00:36:36,170 758 00:36:36,170 --> 00:36:45,980 Så i detta fall har vi några value-- låt oss säga fyra. 759 00:36:45,980 --> 00:36:49,306 Fyra är på adress ett. 760 00:36:49,306 --> 00:36:49,805 OK? 761 00:36:49,805 --> 00:36:51,550 762 00:36:51,550 --> 00:36:56,170 >> Denna första en här betyder att det är en pekare 2x. 763 00:36:56,170 --> 00:36:56,740 Rätt? 764 00:36:56,740 --> 00:36:57,628 Det är en del pekare x. 765 00:36:57,628 --> 00:36:58,852 766 00:36:58,852 --> 00:37:00,940 x kan vara något, vad som helst. 767 00:37:00,940 --> 00:37:01,960 768 00:37:01,960 --> 00:37:05,130 Oavsett x är-- säga x är fyra. 769 00:37:05,130 --> 00:37:07,280 Det kommer att lagra minnesadress här. 770 00:37:07,280 --> 00:37:12,260 Så int, stjärna, är x-- här någon annan slits i memory-- 771 00:37:12,260 --> 00:37:13,590 som vet vad detta är. 772 00:37:13,590 --> 00:37:15,430 Men det kommer att lagra en adress här. 773 00:37:15,430 --> 00:37:27,040 Så detta skulle vara like-- i detta fall, Oavsett, 774 00:37:27,040 --> 00:37:32,630 lagras vid 0x1-- oavsett lagras på den adress som vår pekare håller, 775 00:37:32,630 --> 00:37:35,280 måste matcha upp med vad vi har utsetts. 776 00:37:35,280 --> 00:37:40,330 Så vid 0x1, i det här fallet, är detta x. 777 00:37:40,330 --> 00:37:42,500 778 00:37:42,500 --> 00:37:49,340 Detta kan alltid bara vara en int medan vi använder detta. 779 00:37:49,340 --> 00:37:52,950 >> Likaså om vi har annan 1y, oavsett 780 00:37:52,950 --> 00:37:59,130 adress sparas med en y har att vara en char-- samma sak med z. 781 00:37:59,130 --> 00:38:05,840 På samma sätt, när du försöka göra intx lika 0.4, 782 00:38:05,840 --> 00:38:09,275 det kommer att skrika på dig och vara som ingen, du sa att du ville ha en int. 783 00:38:09,275 --> 00:38:10,525 Detta är tänkt att vara en int. 784 00:38:10,525 --> 00:38:11,900 Sluta försöka göra det till en flottör. 785 00:38:11,900 --> 00:38:14,150 >> Så låt det vara vad de vill vara. 786 00:38:14,150 --> 00:38:15,159 787 00:38:15,159 --> 00:38:16,200 Låt saker vara sig själva. 788 00:38:16,200 --> 00:38:19,380 789 00:38:19,380 --> 00:38:23,450 Så stora grej är bara oavsett vilken typ av pekare 790 00:38:23,450 --> 00:38:26,101 det är, det är den enda man kan lagra där. 791 00:38:26,101 --> 00:38:26,600 OK? 792 00:38:26,600 --> 00:38:27,910 793 00:38:27,910 --> 00:38:31,160 Med övning, som med förra veckan, allt 794 00:38:31,160 --> 00:38:32,817 verkar verkligen slags abstrakt. 795 00:38:32,817 --> 00:38:34,150 Vi kommer att göra lite övning. 796 00:38:34,150 --> 00:38:36,760 Det borde vara bättre. 797 00:38:36,760 --> 00:38:44,580 >> Så referera och dereferencing-- det är verkligen viktigt att få dessa raka. 798 00:38:44,580 --> 00:38:46,630 Jag har fortfarande att uppdatera då och då. 799 00:38:46,630 --> 00:38:48,450 Och jag gillar vänta, vilken vill jag ha? 800 00:38:48,450 --> 00:38:56,080 Så et-tecknet faktiskt kommer att ge Du referens- eller adress. 801 00:38:56,080 --> 00:39:00,100 Så det returnerar adressen i minne varav rörlig lagras. 802 00:39:00,100 --> 00:39:01,170 803 00:39:01,170 --> 00:39:07,020 Så det kommer att faktiskt komma tillbaka till dig en hexadecimal, medan Återgång det 804 00:39:07,020 --> 00:39:10,641 faktiskt kommer att ge dig de data som lagras där. 805 00:39:10,641 --> 00:39:11,140 OK? 806 00:39:11,140 --> 00:39:12,680 807 00:39:12,680 --> 00:39:16,060 Så vi kommer att titta på ett exempel riktigt snabbt, eller egentligen upp bredvid. 808 00:39:16,060 --> 00:39:18,050 809 00:39:18,050 --> 00:39:19,150 >> OK. 810 00:39:19,150 --> 00:39:21,790 Så vi måste tänka riktigt noga på detta. 811 00:39:21,790 --> 00:39:23,860 Så här har vi något heltal x. 812 00:39:23,860 --> 00:39:26,485 Jag ska försöka dra denna ut till det bästa av min förmåga. 813 00:39:26,485 --> 00:39:30,230 814 00:39:30,230 --> 00:39:32,410 Så vi kommer att ha denna slot x. 815 00:39:32,410 --> 00:39:35,850 816 00:39:35,850 --> 00:39:37,315 Och det är att lagra fem. 817 00:39:37,315 --> 00:39:38,640 818 00:39:38,640 --> 00:39:40,090 Dess adress är 0x4. 819 00:39:40,090 --> 00:39:41,920 820 00:39:41,920 --> 00:39:43,160 Cool? 821 00:39:43,160 --> 00:39:44,100 Alla bra. 822 00:39:44,100 --> 00:39:45,470 >> Så nu har vi denna pekare. 823 00:39:45,470 --> 00:39:46,916 824 00:39:46,916 --> 00:39:47,990 Det var här borta. 825 00:39:47,990 --> 00:39:52,130 826 00:39:52,130 --> 00:39:57,560 Och et-tecknet ger oss adressen till något. 827 00:39:57,560 --> 00:40:00,780 Så i det här fallet, det är adressen till x. 828 00:40:00,780 --> 00:40:01,875 Vad är adressen för x? 829 00:40:01,875 --> 00:40:05,660 830 00:40:05,660 --> 00:40:12,590 04-- och detta pekaren är på 0x08. 831 00:40:12,590 --> 00:40:14,490 832 00:40:14,490 --> 00:40:14,990 Cool? 833 00:40:14,990 --> 00:40:16,570 834 00:40:16,570 --> 00:40:21,570 Så du kan tänka på detta pekare, 04, bara pekar hit. 835 00:40:21,570 --> 00:40:22,840 836 00:40:22,840 --> 00:40:25,740 Och de kallas pekare för som vi får mer in i detta, 837 00:40:25,740 --> 00:40:28,450 du kommer att se att peka på saker. 838 00:40:28,450 --> 00:40:31,470 Och ett kvarter som pekar på en annan blocket kommer att göra mycket mer känsla. 839 00:40:31,470 --> 00:40:32,760 840 00:40:32,760 --> 00:40:33,890 Så här är två. 841 00:40:33,890 --> 00:40:38,230 Och sedan har vi några exemplaret, som är what-- 0x0c. 842 00:40:38,230 --> 00:40:41,290 843 00:40:41,290 --> 00:40:43,420 Och det kommer att dereference vår pekare. 844 00:40:43,420 --> 00:40:46,790 >> Så vad det säger är OK, här är vår pekare. 845 00:40:46,790 --> 00:40:53,090 Värdet lagrar är 0x04, och vad det säger är att gå till den här adressen 846 00:40:53,090 --> 00:40:54,300 och berätta vad som finns i den. 847 00:40:54,300 --> 00:40:55,520 848 00:40:55,520 --> 00:40:57,710 Så det är ett effektivt sätt vad denna pil gör. 849 00:40:57,710 --> 00:40:58,750 850 00:40:58,750 --> 00:41:01,280 Du kan tänka på detta som din stjärna. 851 00:41:01,280 --> 00:41:05,410 Så OK, när vi gör stjärnan, betyder det att följa. 852 00:41:05,410 --> 00:41:06,810 Gå till denna adress. 853 00:41:06,810 --> 00:41:11,430 Och det är i princip bara efter denna pilen till denna minnes bit. 854 00:41:11,430 --> 00:41:15,380 Och ge oss vad som finns i den, vilket är 5. 855 00:41:15,380 --> 00:41:18,840 Det är därför som vårt exemplar är lika med 5. 856 00:41:18,840 --> 00:41:20,120 Är det vettigt? 857 00:41:20,120 --> 00:41:22,769 Finns det någon som behöver mig för att gå igenom det igen, eller långsammare? 858 00:41:22,769 --> 00:41:24,560 Du vill att jag ska gå igenom det en gång till? 859 00:41:24,560 --> 00:41:25,060 OK. 860 00:41:25,060 --> 00:41:27,549 861 00:41:27,549 --> 00:41:28,840 Vi kommer att rita om den igen. 862 00:41:28,840 --> 00:41:31,930 863 00:41:31,930 --> 00:41:37,205 När vi börjar, vi är alla överens om att vi har viss del av minnet som är en variabel 864 00:41:37,205 --> 00:41:40,890 x som vi satt lika med 5. 865 00:41:40,890 --> 00:41:42,910 Vi kontrollerar inte om det är i minnet. 866 00:41:42,910 --> 00:41:45,520 Så denna plats är bara godtyckligt tilldelad. 867 00:41:45,520 --> 00:41:47,770 868 00:41:47,770 --> 00:41:48,731 Bra där? 869 00:41:48,731 --> 00:41:49,230 OK. 870 00:41:49,230 --> 00:41:50,420 871 00:41:50,420 --> 00:41:53,330 Sedan initierar vi en pekare till en int. 872 00:41:53,330 --> 00:41:56,900 Det är därför det är tillåtet att peka på x eftersom vi har en int här. 873 00:41:56,900 --> 00:42:00,840 Vi har en annan bit av minnet eftersom denna pekare 874 00:42:00,840 --> 00:42:03,485 är en variabel precis som allt annat. 875 00:42:03,485 --> 00:42:06,615 Det är godtyckligt tilldelad lite utrymme i minnet. 876 00:42:06,615 --> 00:42:07,630 877 00:42:07,630 --> 00:42:10,830 Och vad det lagrar är adressen för x. 878 00:42:10,830 --> 00:42:13,200 Ampersand innebär adress x. 879 00:42:13,200 --> 00:42:14,575 Så vad är adressen till x? 880 00:42:14,575 --> 00:42:19,179 881 00:42:19,179 --> 00:42:20,614 >> PUBLIK: Det är zero-- 882 00:42:20,614 --> 00:42:21,280 TALARE 1: 0x04. 883 00:42:21,280 --> 00:42:24,350 884 00:42:24,350 --> 00:42:25,940 Så then-- sista. 885 00:42:25,940 --> 00:42:30,650 Vi har en del copy-- igen bara en annan variabel. 886 00:42:30,650 --> 00:42:32,520 Så låt oss ge någon godtycklig plats. 887 00:42:32,520 --> 00:42:35,260 888 00:42:35,260 --> 00:42:38,080 Och vi avreferera vår pekare. 889 00:42:38,080 --> 00:42:42,490 Stjärnan betyder gå till adress som lagras i min pekare. 890 00:42:42,490 --> 00:42:44,480 Säg mig vad som finns där. 891 00:42:44,480 --> 00:42:47,290 Så adressen lagrad I vår pekaren är 0x04. 892 00:42:47,290 --> 00:42:49,070 893 00:42:49,070 --> 00:42:51,310 Så vi går till den adressen. 894 00:42:51,310 --> 00:42:52,402 895 00:42:52,402 --> 00:42:54,590 Det pekar på den adressen. 896 00:42:54,590 --> 00:42:57,481 Vad finns inuti detta minnesblock? 897 00:42:57,481 --> 00:42:57,980 Det är en fem. 898 00:42:57,980 --> 00:42:59,210 899 00:42:59,210 --> 00:43:01,650 Så det är vad vi tilldelar vårt exemplar. 900 00:43:01,650 --> 00:43:03,430 901 00:43:03,430 --> 00:43:04,860 Alla bra? 902 00:43:04,860 --> 00:43:05,360 Cool. 903 00:43:05,360 --> 00:43:07,010 904 00:43:07,010 --> 00:43:08,330 Igen-- bilder. 905 00:43:08,330 --> 00:43:19,750 906 00:43:19,750 --> 00:43:25,200 >> Så spåra värden här-- Jag är kommer att låta er tänka på detta. 907 00:43:25,200 --> 00:43:26,550 908 00:43:26,550 --> 00:43:27,750 Vi kan dra en annan bild. 909 00:43:27,750 --> 00:43:31,260 Men jag vill att du ska försöka anledning genom detta på egen hand under en minut. 910 00:43:31,260 --> 00:44:01,430 911 00:44:01,430 --> 00:44:04,149 >> Eftersom de inte gav oss ett exempel adress, 912 00:44:04,149 --> 00:44:06,940 Jag kommer bara att göra-tecken x-- vilket bör hjälpa till att driva den hem. 913 00:44:06,940 --> 00:44:07,950 Ampersand innebär adress. 914 00:44:07,950 --> 00:44:09,540 915 00:44:09,540 --> 00:44:12,360 >> Så i den första, alla gå med den första raden. 916 00:44:12,360 --> 00:44:15,690 Några x-apparatens five-- vissa slumpmässig slits i minnet. 917 00:44:15,690 --> 00:44:17,660 918 00:44:17,660 --> 00:44:23,200 Int stjärniga pekaren är lika till adressen för x, eller hur? 919 00:44:23,200 --> 00:44:28,180 Int stjärna pekare skapar detta block, kallar det pekaren, 920 00:44:28,180 --> 00:44:30,650 och tilldelar den till adress x. 921 00:44:30,650 --> 00:44:32,750 922 00:44:32,750 --> 00:44:34,230 Jag är fruktansvärt på et-tecken. 923 00:44:34,230 --> 00:44:36,460 924 00:44:36,460 --> 00:44:40,550 >> Nu vad vi gör är att vi säger OK, dereference vår pekare. 925 00:44:40,550 --> 00:44:42,760 Så vi går OK, vad som finns i vår pekare? 926 00:44:42,760 --> 00:44:44,820 Det är et-tecken x. 927 00:44:44,820 --> 00:44:49,400 Gå till et-x och omfördela det. 928 00:44:49,400 --> 00:44:51,620 929 00:44:51,620 --> 00:44:57,480 >> Så nu är et-x kommer att bli 35. 930 00:44:57,480 --> 00:45:01,540 931 00:45:01,540 --> 00:45:05,174 Så i princip, när du är Namnåtergång, går du på OK. 932 00:45:05,174 --> 00:45:07,090 Du kommer att kunna dra bilder som denna. 933 00:45:07,090 --> 00:45:09,423 Du kommer att kunna dra dina pilar över var det är. 934 00:45:09,423 --> 00:45:16,030 Så gå till denna plats i minnet och antingen ge mig detta värde tillbaka eller ändra det. 935 00:45:16,030 --> 00:45:21,620 I det här fallet, eftersom vi är på detta värde, vi koppla den till vara 35. 936 00:45:21,620 --> 00:45:24,700 Medan det i det sista en, om du märker, vi 937 00:45:24,700 --> 00:45:27,680 var att tilldela det var här till något annat. 938 00:45:27,680 --> 00:45:30,450 939 00:45:30,450 --> 00:45:32,245 >> Så de har denna enorma bord. 940 00:45:32,245 --> 00:45:35,000 941 00:45:35,000 --> 00:45:36,890 Det är inte så illa. 942 00:45:36,890 --> 00:45:37,970 Ni jobbar på det. 943 00:45:37,970 --> 00:45:39,640 Jag kommer att dra ut på tavlan. 944 00:45:39,640 --> 00:45:41,306 Vi kommer att fylla ut det tillsammans, okej? 945 00:45:41,306 --> 00:45:42,290 946 00:45:42,290 --> 00:45:45,530 Så ta några papper, grab en partner, börja arbeta. 947 00:45:45,530 --> 00:45:53,897 948 00:45:53,897 --> 00:45:55,605 Jag kommer att få en större bit av krita. 949 00:45:55,605 --> 00:45:56,624 950 00:45:56,624 --> 00:45:58,150 Eftersom det kommer att bli en hel del. 951 00:45:58,150 --> 00:45:59,410 952 00:45:59,410 --> 00:45:59,910 OK. 953 00:45:59,910 --> 00:48:08,567 954 00:48:08,567 --> 00:48:09,150 PROFESSOR: OK. 955 00:48:09,150 --> 00:48:11,599 956 00:48:11,599 --> 00:48:12,890 Låt oss börja med den första raden. 957 00:48:12,890 --> 00:48:14,070 958 00:48:14,070 --> 00:48:16,970 Vi ska börja där, då ni kan kanske gå igenom lite mer. 959 00:48:16,970 --> 00:48:17,870 OK. 960 00:48:17,870 --> 00:48:19,810 en lika b gånger c så vad är en? 961 00:48:19,810 --> 00:48:21,420 962 00:48:21,420 --> 00:48:23,260 Det är inte en kuggfråga, jag lovar. 963 00:48:23,260 --> 00:48:24,440 >> STUDENT: 4 gånger 5. 964 00:48:24,440 --> 00:48:25,420 >> PROFESSOR: 4 gånger 5. 965 00:48:25,420 --> 00:48:25,920 20. 966 00:48:25,920 --> 00:48:26,730 Så vad är b? 967 00:48:26,730 --> 00:48:27,921 968 00:48:27,921 --> 00:48:28,420 STUDENTEN 4. 969 00:48:28,420 --> 00:48:30,204 970 00:48:30,204 --> 00:48:31,043 >> Professor: och C? 971 00:48:31,043 --> 00:48:31,542 STUDENTEN 5. 972 00:48:31,542 --> 00:48:32,083 PROFESSOR: 5. 973 00:48:32,083 --> 00:48:35,960 Och då detta bara kommer att vara ampersand en, et-tecken b, 974 00:48:35,960 --> 00:48:38,575 ampersand c, eller hur? 975 00:48:38,575 --> 00:48:39,728 976 00:48:39,728 --> 00:48:40,596 Inte illa. 977 00:48:40,596 --> 00:48:42,081 Det är enkelt nog. 978 00:48:42,081 --> 00:48:42,580 OK. 979 00:48:42,580 --> 00:48:44,300 Så nästa. 980 00:48:44,300 --> 00:48:48,725 A är lika med en gånger c, i det fall någon var obekant med det. 981 00:48:48,725 --> 00:48:49,812 982 00:48:49,812 --> 00:48:53,300 Är alla känner med tiden lika? 983 00:48:53,300 --> 00:49:00,105 OK, means-- allt detta är förkortning för en lika med en gånger c. 984 00:49:00,105 --> 00:49:04,840 Du kan också göra det med division, med tillsats, med subtraktion. 985 00:49:04,840 --> 00:49:12,130 Du kan göra en jämlikar, eller ett plus lika c innebär en lika ett plus c, ett minus lika 986 00:49:12,130 --> 00:49:15,190 c skulle vara en lika med ett minus c. 987 00:49:15,190 --> 00:49:16,690 Det är bara syntaktisk socker. 988 00:49:16,690 --> 00:49:19,380 989 00:49:19,380 --> 00:49:24,140 >> Så i det här fallet är en som är lika med a gånger c skulle ge oss vad? 990 00:49:24,140 --> 00:49:25,910 991 00:49:25,910 --> 00:49:28,186 Återigen, inte en kuggfråga. 992 00:49:28,186 --> 00:49:28,965 >> STUDENTEN 100. 993 00:49:28,965 --> 00:49:29,300 >> Professor: 100. 994 00:49:29,300 --> 00:49:30,383 Gör allt annat förändras? 995 00:49:30,383 --> 00:49:31,790 996 00:49:31,790 --> 00:49:32,290 Nej. 997 00:49:32,290 --> 00:49:37,380 998 00:49:37,380 --> 00:49:39,850 Kanske kommer jag äntligen få bättre på mina et-tecken. 999 00:49:39,850 --> 00:49:42,047 >> STUDENT: OK, sorry, hur fick du 100? 1000 00:49:42,047 --> 00:49:42,630 PROFESSOR: OK. 1001 00:49:42,630 --> 00:49:46,594 Så ett är lika med ett gånger c, så en gånger c. 1002 00:49:46,594 --> 00:49:48,510 STUDENT: Åh, du använder en för previous-- 1003 00:49:48,510 --> 00:49:49,135 PROFESSOR: Ja. 1004 00:49:49,135 --> 00:49:51,450 Så här är våra senaste värderingar. 1005 00:49:51,450 --> 00:49:53,990 Det är vad du bör vara att använda när vi går ner, OK. 1006 00:49:53,990 --> 00:49:57,290 1007 00:49:57,290 --> 00:50:01,520 Så, b det enda förändras, eller hur? 1008 00:50:01,520 --> 00:50:02,910 Så låt oss fylla i allt annat. 1009 00:50:02,910 --> 00:50:09,110 1010 00:50:09,110 --> 00:50:11,330 B. Vad b kommer att bli? 1011 00:50:11,330 --> 00:50:13,020 1012 00:50:13,020 --> 00:50:14,140 Att vara eller inte vara. 1013 00:50:14,140 --> 00:50:18,680 1014 00:50:18,680 --> 00:50:20,240 Så vad är detta gör? 1015 00:50:20,240 --> 00:50:21,605 Vad är stjärnan pa med? 1016 00:50:21,605 --> 00:50:23,280 1017 00:50:23,280 --> 00:50:25,350 >> STUDENT: Kod till platsen för pa. 1018 00:50:25,350 --> 00:50:26,390 1019 00:50:26,390 --> 00:50:27,480 >> STUDENT: Nej, inte riktigt. 1020 00:50:27,480 --> 00:50:29,470 Så det här är en d referens. 1021 00:50:29,470 --> 00:50:31,580 >> STUDENTEN Så b är handed värde pa. 1022 00:50:31,580 --> 00:50:37,340 >> PROFESSOR: Ja, så pa är adressen till en, eller hur? 1023 00:50:37,340 --> 00:50:42,430 Så det säger gå till där a är lagras och ge den det värdet. 1024 00:50:42,430 --> 00:50:43,884 Så vad är b? 1025 00:50:43,884 --> 00:50:44,425 STUDENTEN 100. 1026 00:50:44,425 --> 00:50:46,534 Professor: 100. 1027 00:50:46,534 --> 00:50:47,450 Perfect. 1028 00:50:47,450 --> 00:50:49,879 OK, så pc är vad som förändras. 1029 00:50:49,879 --> 00:50:51,170 Allt annat förblir densamma. 1030 00:50:51,170 --> 00:50:57,160 1031 00:50:57,160 --> 00:50:58,620 Vad pc kommer att bli? 1032 00:50:58,620 --> 00:51:00,770 1033 00:51:00,770 --> 00:51:01,580 Enkel uppdrag. 1034 00:51:01,580 --> 00:51:03,520 1035 00:51:03,520 --> 00:51:05,990 Pc är lika med pa, och vad är pa? 1036 00:51:05,990 --> 00:51:07,049 >> STUDENT: Ampersand a. 1037 00:51:07,049 --> 00:51:07,840 PROFESSOR: Perfect. 1038 00:51:07,840 --> 00:51:09,490 1039 00:51:09,490 --> 00:51:10,740 Nu vi får intressant. 1040 00:51:10,740 --> 00:51:12,310 1041 00:51:12,310 --> 00:51:15,230 OK, låt oss bryta denna nedåt. 1042 00:51:15,230 --> 00:51:21,110 Först, vad är b gånger c, eftersom det är den enkla delen av det här, eller hur? 1043 00:51:21,110 --> 00:51:22,360 B gånger c är-- 1044 00:51:22,360 --> 00:51:23,320 >> STUDENTEN 500. 1045 00:51:23,320 --> 00:51:28,880 >> PROFESSOR: Ja, så vad detta gör, 1046 00:51:28,880 --> 00:51:33,705 Om det är stjärn pb, vad förändras? 1047 00:51:33,705 --> 00:51:35,320 1048 00:51:35,320 --> 00:51:37,242 >> STUDENT: Vad är i the-- 1049 00:51:37,242 --> 00:51:38,200 PROFESSOR: Vad är ib? 1050 00:51:38,200 --> 00:51:41,340 STUDENTEN Vad finns i rymden att pb pekar på. 1051 00:51:41,340 --> 00:51:43,406 PROFESSOR: Och pb pekar att-- 1052 00:51:43,406 --> 00:51:43,905 STUDENTEN B. 1053 00:51:43,905 --> 00:51:46,740 Professor: B. Så den enda ting förändras är b, höger. 1054 00:51:46,740 --> 00:51:50,800 Så b gånger c, 500. 1055 00:51:50,800 --> 00:51:52,367 Så det är vad förändras nu. 1056 00:51:52,367 --> 00:51:59,091 1057 00:51:59,091 --> 00:51:59,590 Cool. 1058 00:51:59,590 --> 00:52:00,340 1059 00:52:00,340 --> 00:52:00,840 Lovely. 1060 00:52:00,840 --> 00:52:01,905 Ni gör bra. 1061 00:52:01,905 --> 00:52:03,650 1062 00:52:03,650 --> 00:52:06,740 Okej, att bryta denna nedåt. 1063 00:52:06,740 --> 00:52:08,050 1064 00:52:08,050 --> 00:52:09,630 C förändras, eller hur? 1065 00:52:09,630 --> 00:52:11,530 Så vi kan fylla i allt annat. 1066 00:52:11,530 --> 00:52:12,540 1067 00:52:12,540 --> 00:52:13,205 Låt oss se. 1068 00:52:13,205 --> 00:52:19,125 1069 00:52:19,125 --> 00:52:19,625 OK. 1070 00:52:19,625 --> 00:52:21,420 1071 00:52:21,420 --> 00:52:24,740 Vi vet att c kommer att bli det produkten av två tal, eller hur? 1072 00:52:24,740 --> 00:52:26,290 1073 00:52:26,290 --> 00:52:27,980 Vilka två siffror, men? 1074 00:52:27,980 --> 00:52:28,970 >> STUDENT: A och c? 1075 00:52:28,970 --> 00:52:31,930 >> PROFESSOR: Så en är rätt för den första. 1076 00:52:31,930 --> 00:52:34,385 Så vi dagarna refererar p av en, eller hur? 1077 00:52:34,385 --> 00:52:35,390 1078 00:52:35,390 --> 00:52:42,870 P av en pekar på en, så vi vet att Detta kommer att bli 100 gånger vad? 1079 00:52:42,870 --> 00:52:46,232 Gånger vad gör pc peka på? 1080 00:52:46,232 --> 00:52:47,410 1081 00:52:47,410 --> 00:52:48,740 Pekar på en. 1082 00:52:48,740 --> 00:52:55,038 Så 100 gånger 100 är 10.000. 1083 00:52:55,038 --> 00:52:56,170 Är det vettigt? 1084 00:52:56,170 --> 00:52:57,640 1085 00:52:57,640 --> 00:52:58,200 Cool. 1086 00:52:58,200 --> 00:53:00,500 Upploppet, grabbar, sista raden. 1087 00:53:00,500 --> 00:53:01,190 OK. 1088 00:53:01,190 --> 00:53:02,160 Vad har ändrats här? 1089 00:53:02,160 --> 00:53:05,640 1090 00:53:05,640 --> 00:53:06,935 >> STUDENTEN A. 1091 00:53:06,935 --> 00:53:09,435 PROFESSOR: A. Perfekt, så allt annat kan förbli densamma. 1092 00:53:09,435 --> 00:53:16,210 1093 00:53:16,210 --> 00:53:16,710 OK. 1094 00:53:16,710 --> 00:53:17,970 Och vad är en? 1095 00:53:17,970 --> 00:53:23,610 1096 00:53:23,610 --> 00:53:26,060 Så det är en gånger vad? 1097 00:53:26,060 --> 00:53:27,120 Detta är stjärnan pb. 1098 00:53:27,120 --> 00:53:29,750 1099 00:53:29,750 --> 00:53:34,490 Så stjärna pb betyder här är pb, pb punkter till b. 1100 00:53:34,490 --> 00:53:35,370 >> STUDENTEN 500. 1101 00:53:35,370 --> 00:53:36,230 >> Professor: 500. 1102 00:53:36,230 --> 00:53:39,236 Så vi har 500 gånger 100. 1103 00:53:39,236 --> 00:53:41,758 Det är 50.000. 1104 00:53:41,758 --> 00:53:43,216 Puh! 1105 00:53:43,216 --> 00:53:45,646 Titta på det. 1106 00:53:45,646 --> 00:53:47,982 >> STUDENT: Varför har vi i & c för last-- 1107 00:53:47,982 --> 00:53:48,690 PROFESSOR: Förlåt. 1108 00:53:48,690 --> 00:53:50,080 STUDENT: Åh, OK. 1109 00:53:50,080 --> 00:53:51,600 PROFESSOR: Min dåliga. 1110 00:53:51,600 --> 00:53:52,890 Massor av skrivande. 1111 00:53:52,890 --> 00:53:53,917 1112 00:53:53,917 --> 00:53:54,500 Alla bra? 1113 00:53:54,500 --> 00:53:55,630 1114 00:53:55,630 --> 00:53:56,660 Inte så illa, eller hur? 1115 00:53:56,660 --> 00:53:58,490 Tar bara lite tag att arbeta sig igenom. 1116 00:53:58,490 --> 00:54:01,080 Om man bryter ner det, förstå vad varje del 1117 00:54:01,080 --> 00:54:03,197 hänvisar att-- som med allt det, 1118 00:54:03,197 --> 00:54:05,780 yes-- bryta ner det till den lilla problem och sedan rekombinerar, 1119 00:54:05,780 --> 00:54:07,345 och du kan göra några fantastiska saker. 1120 00:54:07,345 --> 00:54:08,970 Det finns svaren, men vi gjorde det. 1121 00:54:08,970 --> 00:54:10,324 1122 00:54:10,324 --> 00:54:11,115 Pointer aritmetik. 1123 00:54:11,115 --> 00:54:13,961 1124 00:54:13,961 --> 00:54:14,460 Ah. 1125 00:54:14,460 --> 00:54:15,510 Mina händer är alla kalkhaltig. 1126 00:54:15,510 --> 00:54:17,970 Så att lägga till eller dra ifrån int justerar pekaren 1127 00:54:17,970 --> 00:54:21,890 av storleken på den typ av pekare. 1128 00:54:21,890 --> 00:54:22,940 1129 00:54:22,940 --> 00:54:28,390 Kom ihåg hur alla typer har en annan storlek? 1130 00:54:28,390 --> 00:54:34,890 Så som en dubbel eller en lång lång säga åtta och int är fyra men röding är en. 1131 00:54:34,890 --> 00:54:38,360 >> Så vad du vill göra är-- en sak att komma ihåg 1132 00:54:38,360 --> 00:54:44,080 är bara det att hur mycket din pekarvärde faktiskt förändras 1133 00:54:44,080 --> 00:54:46,550 kommer att bero på den typ av pekare är det. 1134 00:54:46,550 --> 00:54:50,820 1135 00:54:50,820 --> 00:54:51,820 Alla bra med detta? 1136 00:54:51,820 --> 00:54:52,760 Kan jag radera det? 1137 00:54:52,760 --> 00:54:53,440 Vi är bra? 1138 00:54:53,440 --> 00:54:53,940 Grymt. 1139 00:54:53,940 --> 00:55:01,020 1140 00:55:01,020 --> 00:55:07,501 >> Så om vi har några pekare that-- detta kommer att be-- jag är 1141 00:55:07,501 --> 00:55:08,834 kommer att göra det till en int pekare. 1142 00:55:08,834 --> 00:55:10,610 1143 00:55:10,610 --> 00:55:12,760 Den lagrar detta. 1144 00:55:12,760 --> 00:55:14,210 1145 00:55:14,210 --> 00:55:20,170 Om du skulle säga pekare plus ett, vad det kommer att göra 1146 00:55:20,170 --> 00:55:23,420 är att det kommer att uppdatera det av storleken på en int 1147 00:55:23,420 --> 00:55:25,950 eftersom det är det typ av pekare är det. 1148 00:55:25,950 --> 00:55:28,260 >> Med C, är allt mycket strikt och reglerad. 1149 00:55:28,260 --> 00:55:29,440 1150 00:55:29,440 --> 00:55:35,260 Den int pekare kommer att uppdatera med hur mycket utrymme en int skulle ta. 1151 00:55:35,260 --> 00:55:36,260 En int är fyra byte. 1152 00:55:36,260 --> 00:55:37,650 1153 00:55:37,650 --> 00:55:39,060 >> Så vad skulle det bli? 1154 00:55:39,060 --> 00:55:40,876 1155 00:55:40,876 --> 00:55:44,390 Du bara lägger till fyra på detta. 1156 00:55:44,390 --> 00:55:50,040 Nu pekaren skulle be-- OK. 1157 00:55:50,040 --> 00:55:51,820 1158 00:55:51,820 --> 00:55:55,380 >> Så om det var en röding och vi gjorde pekare plus en, vad skulle det vara nu? 1159 00:55:55,380 --> 00:56:00,300 1160 00:56:00,300 --> 00:56:03,330 Om det started-- låtsas vi started-- just nu är det 0x08. 1161 00:56:03,330 --> 00:56:04,850 1162 00:56:04,850 --> 00:56:10,850 Låt oss nu säga att detta var en char pekare, och vi lagt till en. 1163 00:56:10,850 --> 00:56:11,850 Vad skulle det ändra till? 1164 00:56:11,850 --> 00:56:14,989 1165 00:56:14,989 --> 00:56:16,030 Hur många byte är en röding? 1166 00:56:16,030 --> 00:56:16,680 >> PUBLIK: One. 1167 00:56:16,680 --> 00:56:17,304 >> TALARE 1: One. 1168 00:56:17,304 --> 00:56:18,309 PUBLIK: Så 0x09. 1169 00:56:18,309 --> 00:56:19,600 TALARE 1: Så det skulle vara nio. 1170 00:56:19,600 --> 00:56:22,571 1171 00:56:22,571 --> 00:56:23,820 Så bara något att minnas. 1172 00:56:23,820 --> 00:56:28,340 Just när du lägger till en, det är inte lägga till en om inte det är en röding. 1173 00:56:28,340 --> 00:56:34,190 Det är att lägga hur många bytes den typ som den är, 1174 00:56:34,190 --> 00:56:36,960 vilket är anledningen till att vi har denna ekvation här uppe. 1175 00:56:36,960 --> 00:56:40,190 Så det är int gånger storleken av den typ av pekare. 1176 00:56:40,190 --> 00:56:42,850 1177 00:56:42,850 --> 00:56:44,730 >> Så vi har exemplet här. 1178 00:56:44,730 --> 00:56:47,250 1179 00:56:47,250 --> 00:56:54,430 y tilldelades till det värdet, 0x4, när vi gjorde y plus lika med ett. 1180 00:56:54,430 --> 00:56:56,830 Vad betyder det, vad är i x, ändras inte. 1181 00:56:56,830 --> 00:56:58,610 Vad innebär förändring är vad som finns i y. 1182 00:56:58,610 --> 00:57:04,980 Adressen lagras i y uppdateras av fyra eftersom det finns fyra byte i en int 1183 00:57:04,980 --> 00:57:06,097 och det är en int pekare. 1184 00:57:06,097 --> 00:57:07,290 1185 00:57:07,290 --> 00:57:07,790 >> Okej. 1186 00:57:07,790 --> 00:57:09,123 Så nu har vi en annan övning. 1187 00:57:09,123 --> 00:57:11,140 1188 00:57:11,140 --> 00:57:13,500 Så frågan är vad som kommer att skrivas ut. 1189 00:57:13,500 --> 00:57:36,710 1190 00:57:36,710 --> 00:57:37,650 Några idéer? 1191 00:57:37,650 --> 00:57:41,690 1192 00:57:41,690 --> 00:57:43,699 >> AUDIENCE: Antalet tecken i glad katt? 1193 00:57:43,699 --> 00:57:44,490 TALARE 1: Exakt. 1194 00:57:44,490 --> 00:57:45,531 Så gillar med din sträng. 1195 00:57:45,531 --> 00:57:47,302 1196 00:57:47,302 --> 00:57:48,260 Kan alla få det? 1197 00:57:48,260 --> 00:57:49,509 Vill vi gå igenom det? 1198 00:57:49,509 --> 00:57:50,300 1199 00:57:50,300 --> 00:57:52,010 >> Ja, OK. 1200 00:57:52,010 --> 00:57:57,385 Så vad vi har här-- jag såhär så mycket mer. 1201 00:57:57,385 --> 00:57:59,340 Jag behöver inte [OHÖRBAR] löjligt. 1202 00:57:59,340 --> 00:58:01,690 >> Så vi har vår sträng här, glad katt. 1203 00:58:01,690 --> 00:58:02,950 Lovely. 1204 00:58:02,950 --> 00:58:05,080 Vi har några räknare som vi hålla reda på. 1205 00:58:05,080 --> 00:58:11,430 Så vi har några char * pekare som bara sätts lika med str. 1206 00:58:11,430 --> 00:58:14,320 Vad detta gör är att det är tilldela några pekare 1207 00:58:14,320 --> 00:58:16,380 till början av din sträng. 1208 00:58:16,380 --> 00:58:19,840 För jag är säker på, eftersom det nämndes i föreläsning, 1209 00:58:19,840 --> 00:58:22,290 vi har gett er här datatyp som kallas sträng. 1210 00:58:22,290 --> 00:58:29,070 >> Men egentligen strängar är bara en array of-- liknande char *. 1211 00:58:29,070 --> 00:58:32,330 Det är en pekare till en massa tecken som är angränsande i minnet. 1212 00:58:32,330 --> 00:58:33,680 1213 00:58:33,680 --> 00:58:36,280 Så det här bara ställer den lika med varje sträng är 1214 00:58:36,280 --> 00:58:38,980 identifieras med hjälp av där sin första tecknet är. 1215 00:58:38,980 --> 00:58:42,710 Så det här är bara att sätta någon gång lika med början av strängen. 1216 00:58:42,710 --> 00:58:44,130 Alla bra där? 1217 00:58:44,130 --> 00:58:44,960 Cool. 1218 00:58:44,960 --> 00:58:49,840 >> Så detta är Återgång vår pekare. 1219 00:58:49,840 --> 00:58:53,760 Så det är faktiskt kommer att ge oss lite värde här, 1220 00:58:53,760 --> 00:58:55,610 I vår sträng som vi pratar om. 1221 00:58:55,610 --> 00:58:58,342 Och vi säger så länge det är inte null terminator. 1222 00:58:58,342 --> 00:59:00,550 Så fortsätt tills du får till slutet av strängen. 1223 00:59:00,550 --> 00:59:02,180 1224 00:59:02,180 --> 00:59:04,190 Uppdatera din pekare med ett. 1225 00:59:04,190 --> 00:59:09,250 Så r, kommer det faktiskt att uppdatera med en varje gång eftersom det är en röding, 1226 00:59:09,250 --> 00:59:09,820 char *. 1227 00:59:09,820 --> 00:59:10,930 1228 00:59:10,930 --> 00:59:12,340 >> Så det kommer att gå igenom. 1229 00:59:12,340 --> 00:59:13,290 Det kommer att uppdateras. 1230 00:59:13,290 --> 00:59:16,705 Så den första gången detta körs, det kommer att vara här på h. 1231 00:59:16,705 --> 00:59:17,590 Det kommer att uppdateras. 1232 00:59:17,590 --> 00:59:18,185 >> Det blir en a. 1233 00:59:18,185 --> 00:59:21,310 Det blir en p, y, och så vidare och så vidare. 1234 00:59:21,310 --> 00:59:22,300 Vi kommer att uppdatera räknaren. 1235 00:59:22,300 --> 00:59:26,160 När den når slutet, det bara skriver hur långt det har blivit. 1236 00:59:26,160 --> 00:59:27,550 1237 00:59:27,550 --> 00:59:28,050 Ja. 1238 00:59:28,050 --> 00:59:31,475 >> PUBLIK: Så det räknas utrymmet som en, eller hur? 1239 00:59:31,475 --> 00:59:31,974 OK. 1240 00:59:31,974 --> 00:59:34,294 1241 00:59:34,294 --> 00:59:35,222 >> TALARE 1: Tänk så. 1242 00:59:35,222 --> 00:59:36,830 Är det en question-- 1243 00:59:36,830 --> 00:59:37,746 >> PUBLIK: [OHÖRBAR]. 1244 00:59:37,746 --> 00:59:37,968 1245 00:59:37,968 --> 00:59:38,884 >> TALARE 1: Inga bekymmer. 1246 00:59:38,884 --> 00:59:39,720 1247 00:59:39,720 --> 00:59:42,736 Detta gör jag det. 1248 00:59:42,736 --> 00:59:47,710 Okej, så en sak jag förstå är att med en array, 1249 00:59:47,710 --> 00:59:51,736 Du kan också behandla det som en pekaren eftersom arrayer är bara 1250 00:59:51,736 --> 00:59:52,860 kontinuerliga fläckar av minnet. 1251 00:59:52,860 --> 00:59:53,970 1252 00:59:53,970 --> 00:59:56,380 >> Så du kan behandla det på samma sätt. 1253 00:59:56,380 --> 00:59:59,000 Du kan manipulera dem med pekare, också. 1254 00:59:59,000 --> 01:00:04,770 Så istället för att göra, i detta fall den analoga sak 1255 01:00:04,770 --> 01:00:07,490 vore array 0 är lika med 1. 1256 01:00:07,490 --> 01:00:08,760 1257 01:00:08,760 --> 01:00:15,210 >> Men på samma sätt som en sträng bestäms 1258 01:00:15,210 --> 01:00:18,740 vid början av där sin första tecknet är, 1259 01:00:18,740 --> 01:00:22,270 en array bestäms genom där dess första elementet är. 1260 01:00:22,270 --> 01:00:25,120 För vi vet, vi är garanterad, dessa som 1261 01:00:25,120 --> 01:00:27,985 kommer att vara kontinuerlig minnesblock. 1262 01:00:27,985 --> 01:00:29,360 Det är vad tillåter oss att göra detta. 1263 01:00:29,360 --> 01:00:31,193 Vi vet att de är kontinuerlig minnesblock. 1264 01:00:31,193 --> 01:00:32,230 1265 01:00:32,230 --> 01:00:36,500 >> Så i detta fall, genom att Återgång bara array, som berättar, 1266 01:00:36,500 --> 01:00:40,800 OK, gå till början av matrisen, som är här. 1267 01:00:40,800 --> 01:00:42,640 Så du kan ställa in den lika med ett. 1268 01:00:42,640 --> 01:00:48,610 Och i detta fall, oavsett din array typ är, när du uppdaterar den med en, 1269 01:00:48,610 --> 01:00:50,830 det är precis som att uppdatera det till nästa index. 1270 01:00:50,830 --> 01:00:52,760 1271 01:00:52,760 --> 01:00:56,360 Du kan göra det eftersom du vet vad som finns i din samling. 1272 01:00:56,360 --> 01:00:59,770 Så det vet hur mycket uppdatera din pekare med, 1273 01:00:59,770 --> 01:01:02,925 vilken adress för att uppdatera den till så att du är på nästa lucka. 1274 01:01:02,925 --> 01:01:04,740 1275 01:01:04,740 --> 01:01:09,400 >> Så det här är bara ett annat sätt att skriva array 0 är lika med 1, 1276 01:01:09,400 --> 01:01:15,114 array 1 är lika med 2, array fästet 2 är lika med 3. 1277 01:01:15,114 --> 01:01:16,780 Det är bara ett annat sätt att tänka på det. 1278 01:01:16,780 --> 01:01:19,600 Eftersom de är kontinuerliga block i minnet, 1279 01:01:19,600 --> 01:01:21,830 du kan hänvisa till dem heller genom arrayen notation-- 1280 01:01:21,830 --> 01:01:24,390 som jag personligen hitta easier-- men kanske 1281 01:01:24,390 --> 01:01:27,347 du behöver för att manipulera det strikt av minnesadresser. 1282 01:01:27,347 --> 01:01:28,930 Och detta är det sätt som du skulle göra det. 1283 01:01:28,930 --> 01:01:30,630 1284 01:01:30,630 --> 01:01:32,630 Typ av mer av som en cool sak du kan göra 1285 01:01:32,630 --> 01:01:35,213 kontra kanske inte något du är faktiskt går att genomföra. 1286 01:01:35,213 --> 01:01:36,960 1287 01:01:36,960 --> 01:01:38,630 >> Jag använder det i 61. 1288 01:01:38,630 --> 01:01:41,710 Ni behöver antagligen inte att oroa sig för mycket. 1289 01:01:41,710 --> 01:01:43,693 Men om du är intresserad, ta 61 nästa år. 1290 01:01:43,693 --> 01:01:45,269 1291 01:01:45,269 --> 01:01:46,560 Vi är i upploppet killarna. 1292 01:01:46,560 --> 01:01:47,510 Jag vet, det är länge. 1293 01:01:47,510 --> 01:01:50,570 1294 01:01:50,570 --> 01:01:58,880 Dynamiskt minne Allocation-- så vi vet att en 1295 01:01:58,880 --> 01:02:01,790 av saker när vi pratade under vår första avsnittet tillsammans, 1296 01:02:01,790 --> 01:02:04,560 vi tittade på en swap funktion där det var 1297 01:02:04,560 --> 01:02:08,010 utanför vår huvuduppgift. 1298 01:02:08,010 --> 01:02:14,370 Och vi passerar på dessa värden som effektivt var kopior. 1299 01:02:14,370 --> 01:02:20,570 >> Och när swap klar exekvera, bara lämnade det en stack. 1300 01:02:20,570 --> 01:02:22,830 Kom ihåg att vi har en stack ram för swap. 1301 01:02:22,830 --> 01:02:26,070 Det lämnar och dem värden lämnar med det. 1302 01:02:26,070 --> 01:02:27,050 Och de var borta. 1303 01:02:27,050 --> 01:02:28,615 Vi kunde inte göra något med dem och vi var ledsna 1304 01:02:28,615 --> 01:02:29,989 eftersom vi inte kan byta våra värderingar. 1305 01:02:29,989 --> 01:02:31,070 1306 01:02:31,070 --> 01:02:36,560 >> Men med C, som jag nämnde, du har en hel del makt över minnet. 1307 01:02:36,560 --> 01:02:43,310 Så vad du kan göra är att du kan fördela saker på högen här 1308 01:02:43,310 --> 01:02:46,830 som kommer att stanna där tills du berätta något annat. 1309 01:02:46,830 --> 01:02:48,280 >> De är som snälla barn. 1310 01:02:48,280 --> 01:02:49,150 De stannar där. 1311 01:02:49,150 --> 01:02:50,270 De vill inte lämna. 1312 01:02:50,270 --> 01:02:52,750 De kommer att stanna där tills du är liknande, OK, du kan gå bort. 1313 01:02:52,750 --> 01:02:55,920 >> Medan saker på stacken, who-- de är som busiga barn. 1314 01:02:55,920 --> 01:02:59,160 De kommer bara springa iväg när du vill att vara där och sedan är de borta. 1315 01:02:59,160 --> 01:03:00,160 Du kan inte få tillbaka dem. 1316 01:03:00,160 --> 01:03:01,350 1317 01:03:01,350 --> 01:03:07,187 >> Så högen är-- vi ska prata om malloc och gratis, vilket 1318 01:03:07,187 --> 01:03:08,895 Jag är säker på att ni hört talas om i föreläsning. 1319 01:03:08,895 --> 01:03:10,270 1320 01:03:10,270 --> 01:03:14,210 Och det är i grunden ett sätt att ha mycket beständiga data. 1321 01:03:14,210 --> 01:03:18,920 Så du kan hålla data runt så länge du vill. 1322 01:03:18,920 --> 01:03:19,546 Mhm. 1323 01:03:19,546 --> 01:03:21,475 >> PUBLIK: Kan du definiera heap och stack? 1324 01:03:21,475 --> 01:03:24,030 Är de tycker om ställen att sätta saker och ting? 1325 01:03:24,030 --> 01:03:26,630 >> TALARE 1: Så de är princip bara-- de är 1326 01:03:26,630 --> 01:03:29,530 hur vi hänvisar bara till minnet. 1327 01:03:29,530 --> 01:03:37,300 Så hög är bara platser där minne allokeras dynamiskt, 1328 01:03:37,300 --> 01:03:40,960 medan stapeln hänvisar mer att stapla ramar 1329 01:03:40,960 --> 01:03:45,950 som är mer centrala för funktioner som faktiskt körs. 1330 01:03:45,950 --> 01:03:47,200 Du behöver verkligen inte kontroll. 1331 01:03:47,200 --> 01:03:50,690 >> Den stora skillnaden, har du kontroll över högen om du vill. 1332 01:03:50,690 --> 01:03:52,710 Du har mindre kontroll över stapeln. 1333 01:03:52,710 --> 01:03:55,030 Stapeln beror på funktioner som är igång, 1334 01:03:55,030 --> 01:03:58,320 och i vilken ordning de är kör, och hur saker och ting tillbaka. 1335 01:03:58,320 --> 01:04:01,290 Medan med högen, som vi får se, man kan säga, 1336 01:04:01,290 --> 01:04:06,639 OK, jag vill att detta värde är runt tills jag säger något annat. 1337 01:04:06,639 --> 01:04:08,180 Du får inte bli av med den. 1338 01:04:08,180 --> 01:04:09,300 Du är inte tillåtet att åsidosätta den. 1339 01:04:09,300 --> 01:04:11,675 Du kommer att hålla det runt så länge som jag säger. 1340 01:04:11,675 --> 01:04:15,780 Du får vara chef i högen, medan stack-- kanske om du 1341 01:04:15,780 --> 01:04:18,080 som finagle ditt sätt Du kan vara chef. 1342 01:04:18,080 --> 01:04:19,340 Men inte riktigt. 1343 01:04:19,340 --> 01:04:20,480 1344 01:04:20,480 --> 01:04:22,070 Och det är egentligen bara minnet. 1345 01:04:22,070 --> 01:04:24,260 Det är bara olika sätt att hänvisa till minnet. 1346 01:04:24,260 --> 01:04:25,800 1347 01:04:25,800 --> 01:04:26,400 >> Cool. 1348 01:04:26,400 --> 01:04:28,630 Så med det, hur man kontrollera ditt minne. 1349 01:04:28,630 --> 01:04:32,070 Det är med malloc, vilket du kommer att få använda. 1350 01:04:32,070 --> 01:04:37,100 Så det är bara kort för minnesallokering. 1351 01:04:37,100 --> 01:04:38,459 Det är allt det är. 1352 01:04:38,459 --> 01:04:41,250 Det finns en massa andra coola funktioner som har alloc i slutet, 1353 01:04:41,250 --> 01:04:42,750 och de står för olika saker. 1354 01:04:42,750 --> 01:04:43,550 1355 01:04:43,550 --> 01:04:49,050 >> Så när du behöver lagring som behöver att överleva din nuvarande funktion så 1356 01:04:49,050 --> 01:04:51,010 att när din nuvarande Funktionen springer iväg, 1357 01:04:51,010 --> 01:04:55,774 du fortfarande har data som du fick av det, vill du använda malloc. 1358 01:04:55,774 --> 01:04:57,190 Det kommer initiera den på högen. 1359 01:04:57,190 --> 01:05:00,140 Och som jag sa och hålla sade du ska hålla det där 1360 01:05:00,140 --> 01:05:03,050 tills du berättar det något annat, som är det viktiga här. 1361 01:05:03,050 --> 01:05:08,450 >> Så en sak att lägga märke till, och det är oftast riktigt viktigt, 1362 01:05:08,450 --> 01:05:13,620 är att detta sizeof är super användbart att använda 1363 01:05:13,620 --> 01:05:16,440 eftersom beroende på vilken typ av maskin du kör, 1364 01:05:16,440 --> 01:05:22,470 den kan ha varierande mängder minne som krävs. 1365 01:05:22,470 --> 01:05:26,870 Så du alltid vill använda storlek så att du inte är maskinberoende, 1366 01:05:26,870 --> 01:05:30,300 så att din kod kommer köras på alla datorer. 1367 01:05:30,300 --> 01:05:32,360 >> Och det är bara en del för att skriva bra kod. 1368 01:05:32,360 --> 01:05:34,610 Om det fungerar på en maskin, men inte någon av de andra, 1369 01:05:34,610 --> 01:05:36,440 Hur användbar var ditt program? 1370 01:05:36,440 --> 01:05:38,420 Så du alltid vill se till och använda sizeof. 1371 01:05:38,420 --> 01:05:41,306 >> PUBLIK: Så är det som storlek av 10 inches [ohörbart]? 1372 01:05:41,306 --> 01:05:43,698 >> TALARE 1: Detta är storleken på 10 ints. 1373 01:05:43,698 --> 01:05:44,197 ja. 1374 01:05:44,197 --> 01:05:45,360 1375 01:05:45,360 --> 01:05:48,830 Så storleken av ints återgår Hur mycket ska man int ta. 1376 01:05:48,830 --> 01:05:51,530 Eller storleken på röding, hur mycket kostar en röding ta. 1377 01:05:51,530 --> 01:05:54,150 Och sedan hur många block av detta vill du ha? 1378 01:05:54,150 --> 01:05:57,590 >> Så i detta fall, vi vill ha något att vi kan lagra 10 ints till. 1379 01:05:57,590 --> 01:06:00,240 Och det kommer att fungera oavsett av maskin, vilket är coolt. 1380 01:06:00,240 --> 01:06:01,720 1381 01:06:01,720 --> 01:06:04,846 Så hur många bytes kommer som faktiskt ge dig? 1382 01:06:04,846 --> 01:06:06,190 Snabb matematik. 1383 01:06:06,190 --> 01:06:06,787 >> PUBLIK: 40. 1384 01:06:06,787 --> 01:06:07,370 TALARE 1: 40. 1385 01:06:07,370 --> 01:06:07,869 Exakt. 1386 01:06:07,869 --> 01:06:09,520 1387 01:06:09,520 --> 01:06:12,030 Så en annan stor sak. 1388 01:06:12,030 --> 01:06:14,840 Pointer eller malloc kan returnera null. 1389 01:06:14,840 --> 01:06:17,910 >> Så återigen, alltid kontrollera att se om det återvände null 1390 01:06:17,910 --> 01:06:19,620 innan du försöker göra något med det. 1391 01:06:19,620 --> 01:06:23,430 1392 01:06:23,430 --> 01:06:27,350 Om du försöker och dereference denna pekare nu, 1393 01:06:27,350 --> 01:06:29,720 det bara kommer att segfault eftersom du gick och försökte 1394 01:06:29,720 --> 01:06:31,730 röra null när du inte ska ha. 1395 01:06:31,730 --> 01:06:34,000 Så alltid kontrollera null. 1396 01:06:34,000 --> 01:06:36,075 Återigen, kan allt du gör. 1397 01:06:36,075 --> 01:06:38,300 1398 01:06:38,300 --> 01:06:39,720 >> Det kan returnera null. 1399 01:06:39,720 --> 01:06:42,740 Det kommer att returnera null om du är antingen slut på utrymme, eller av någon anledning 1400 01:06:42,740 --> 01:06:44,350 den sprang in i en del av minnet bugg. 1401 01:06:44,350 --> 01:06:45,890 1402 01:06:45,890 --> 01:06:47,510 Det ibland bara returnerar null. 1403 01:06:47,510 --> 01:06:48,990 Så är det bara att kontrollera det. 1404 01:06:48,990 --> 01:06:51,050 Det är allt det här glid säger. 1405 01:06:51,050 --> 01:06:53,366 1406 01:06:53,366 --> 01:06:55,240 Och vad vi har här är en uppmaning att befria. 1407 01:06:55,240 --> 01:07:00,550 Så på samma sätt som om du öppna en fil som du måste stänga en fil, 1408 01:07:00,550 --> 01:07:04,340 om du malloc minne, du måste du frigöra det minne. 1409 01:07:04,340 --> 01:07:06,530 Och ni kommer att få att göra riktigt coola grejer. 1410 01:07:06,530 --> 01:07:09,624 >> Och det finns ett program som du kan köra till se om du någonsin läcker minne. 1411 01:07:09,624 --> 01:07:11,040 Men du vill inte läcka minne. 1412 01:07:11,040 --> 01:07:11,820 Det är verkligen illa. 1413 01:07:11,820 --> 01:07:13,191 1414 01:07:13,191 --> 01:07:15,020 Bara röra upp saker. 1415 01:07:15,020 --> 01:07:20,939 >> Det är illa att göra precis som programmering klokt för design effektivitet. 1416 01:07:20,939 --> 01:07:22,980 Men det är också bara typ för dåligt för din dator. 1417 01:07:22,980 --> 01:07:26,780 Så bara gratis saker när du malloc dem. 1418 01:07:26,780 --> 01:07:28,190 1419 01:07:28,190 --> 01:07:30,210 >> Ni ser symmetrier här. 1420 01:07:30,210 --> 01:07:31,180 Super enkel. 1421 01:07:31,180 --> 01:07:33,010 Bara gratis och sedan oavsett pekaren, 1422 01:07:33,010 --> 01:07:34,843 oavsett namn pekaren är, och det 1423 01:07:34,843 --> 01:07:36,710 tar hand om att befria det åt dig. 1424 01:07:36,710 --> 01:07:38,200 1425 01:07:38,200 --> 01:07:38,700 Cool. 1426 01:07:38,700 --> 01:07:40,410 1427 01:07:40,410 --> 01:07:42,530 >> Sedan har vi det här. 1428 01:07:42,530 --> 01:07:44,770 Så vi ska bara gå igenom det här programmet. 1429 01:07:44,770 --> 01:07:46,560 Och då ni är klar. 1430 01:07:46,560 --> 01:07:50,240 >> Så [OHÖRBAR] bara main. 1431 01:07:50,240 --> 01:07:51,690 Så vi har en del int * pekare. 1432 01:07:51,690 --> 01:07:53,648 Så vi har en pekare det kommer att hålla ints. 1433 01:07:53,648 --> 01:07:54,500 1434 01:07:54,500 --> 01:07:56,170 Och hur många ints kommer det att hålla? 1435 01:07:56,170 --> 01:07:57,400 1436 01:07:57,400 --> 01:07:58,170 Bara en. 1437 01:07:58,170 --> 01:07:59,400 1438 01:07:59,400 --> 01:08:01,100 Storlek på en int. 1439 01:08:01,100 --> 01:08:03,900 >> Vi kontrollerar om Pekaren är null eftersom det 1440 01:08:03,900 --> 01:08:06,130 är, vi vill säga inte göra någonting. 1441 01:08:06,130 --> 01:08:07,065 Det är illa. 1442 01:08:07,065 --> 01:08:08,130 1443 01:08:08,130 --> 01:08:12,130 Så vi skriva något fel ur minne, oftast återgå 1, 1444 01:08:12,130 --> 01:08:14,260 som ni är vana vid. 1445 01:08:14,260 --> 01:08:17,390 >> Och så har vi här, vi dereference vår pekare. 1446 01:08:17,390 --> 01:08:22,840 Så det betyder att vi kommer att lagra något på den plats som ges till oss. 1447 01:08:22,840 --> 01:08:24,350 1448 01:08:24,350 --> 01:08:30,830 Int * pekare eller malloc returnerar adress där det avsatt här 1449 01:08:30,830 --> 01:08:31,750 minne för dig. 1450 01:08:31,750 --> 01:08:32,830 1451 01:08:32,830 --> 01:08:34,800 Så det är i princip ger dig like-- om du 1452 01:08:34,800 --> 01:08:38,149 tänka på ett gäng hus i en stadsdel 1453 01:08:38,149 --> 01:08:40,640 som du vill lägga dina möbler i, malloc 1454 01:08:40,640 --> 01:08:43,850 är som OK, du får att gå till hus tre. 1455 01:08:43,850 --> 01:08:45,800 Och det ger dig adress hus tre. 1456 01:08:45,800 --> 01:08:48,775 >> Så här just nu, detta Pekaren lagrar en adress, 1457 01:08:48,775 --> 01:08:50,149 lagrar adressen till ditt hus. 1458 01:08:50,149 --> 01:08:51,470 1459 01:08:51,470 --> 01:08:54,640 * PTR medel, OK, jag är hemma hos mig. 1460 01:08:54,640 --> 01:08:55,326 Cool. 1461 01:08:55,326 --> 01:08:56,580 Jag behöver få lite heltal. 1462 01:08:56,580 --> 01:08:59,229 >> Så du frågar efter någon för att ge dig möbler nu. 1463 01:08:59,229 --> 01:09:00,430 Så du får lite int. 1464 01:09:00,430 --> 01:09:05,100 Och det sätter den i pekaren vart det pekar på. 1465 01:09:05,100 --> 01:09:08,670 >> Och då är det bara utskrifter ut, in dig vart. 1466 01:09:08,670 --> 01:09:11,060 Och återigen, referensen. 1467 01:09:11,060 --> 01:09:15,649 Så det här är som att du gick till denna adress och du såg vad som fanns där. 1468 01:09:15,649 --> 01:09:17,120 1469 01:09:17,120 --> 01:09:17,630 Cool? 1470 01:09:17,630 --> 01:09:20,174 >> Och sedan naturligtvis vi befria vårt pekare. 1471 01:09:20,174 --> 01:09:21,590 Glöm inte att befria pekaren. 1472 01:09:21,590 --> 01:09:22,933 Glöm inte att kontrollera för null. 1473 01:09:22,933 --> 01:09:24,349 Glöm inte att befria pekaren. 1474 01:09:24,349 --> 01:09:27,270 Du har två saker som du minns från detta, eller att du bör komma ihåg. 1475 01:09:27,270 --> 01:09:27,770 Ja. 1476 01:09:27,770 --> 01:09:31,590 PUBLIK: [OHÖRBAR] grejer så där, char * s. 1477 01:09:31,590 --> 01:09:33,760 Hur kommer det sig att vi aldrig befria dem? 1478 01:09:33,760 --> 01:09:34,529 >> TALARE 1: Hm? 1479 01:09:34,529 --> 01:09:36,450 >> PUBLIK: Är de som strängar? 1480 01:09:36,450 --> 01:09:39,160 Du sa strängar är precis som char * s, eller hur? 1481 01:09:39,160 --> 01:09:41,200 Så varför inte vi befria strängar? 1482 01:09:41,200 --> 01:09:43,204 >> SPEAKER 1: Du bara gratis om du mallocing. 1483 01:09:43,204 --> 01:09:44,620 PUBLIK: Åh, om du mallocing. 1484 01:09:44,620 --> 01:09:47,399 SPEAKER 1: Så malloc och fri är två saker 1485 01:09:47,399 --> 01:09:49,000 att du alltid ska ha tillsammans. 1486 01:09:49,000 --> 01:09:51,630 f öppna, f nära, två saker du bör ha tillsammans. 1487 01:09:51,630 --> 01:09:54,471 I båda dessa fall kontrollera null. 1488 01:09:54,471 --> 01:09:54,971 Ja. 1489 01:09:54,971 --> 01:09:57,130 >> PUBLIK: Så fria är bara tillåter något annat 1490 01:09:57,130 --> 01:09:59,690 som skall lagras där efter detta program har använt den? 1491 01:09:59,690 --> 01:10:01,946 >> TALARE 1: Det är bara att säga, OK, jag är klar med det här. 1492 01:10:01,946 --> 01:10:03,320 Du behöver inte hålla det runt. 1493 01:10:03,320 --> 01:10:05,340 1494 01:10:05,340 --> 01:10:08,190 Annars datorn kommer precis som försöka hålla den där. 1495 01:10:08,190 --> 01:10:10,910 Och sedan can't-- det körs till minnesproblem senare. 1496 01:10:10,910 --> 01:10:13,660 Du vill alltid att befria det eftersom det talar om datorn, OK, jag är 1497 01:10:13,660 --> 01:10:15,190 gjort med denna plats i minnet. 1498 01:10:15,190 --> 01:10:17,190 Du kan ha det tillbaka för mig att använda senare. 1499 01:10:17,190 --> 01:10:19,250 1500 01:10:19,250 --> 01:10:20,500 Cool? 1501 01:10:20,500 --> 01:10:21,320 Ja. 1502 01:10:21,320 --> 01:10:26,950 >> PUBLIK: Så vi använde% d bara eftersom en dubbel som kommer tillbaka, 1503 01:10:26,950 --> 01:10:28,330 eller varför är-- [OHÖRBAR]. 1504 01:10:28,330 --> 01:10:30,170 1505 01:10:30,170 --> 01:10:31,620 >> PUBLIK: Kan man använda% i? 1506 01:10:31,620 --> 01:10:32,760 >> TALARE 1: Du kan använda% i. 1507 01:10:32,760 --> 01:10:35,052 1508 01:10:35,052 --> 01:10:36,135 Alla sista minuten frågor? 1509 01:10:36,135 --> 01:10:38,310 1510 01:10:38,310 --> 01:10:38,985 Varsågod. 1511 01:10:38,985 --> 01:10:40,610 PUBLIK: Jag har bara en snabb fråga. 1512 01:10:40,610 --> 01:10:50,200 Så ptr variabel, that's-- liknande, med int * PTR = malloc, 1513 01:10:50,200 --> 01:10:54,142 det är bara att säga att det är pekar på en plats i memory-- 1514 01:10:54,142 --> 01:10:55,600 SPEAKER 1: Vill du [OHÖRBAR]? 1515 01:10:55,600 --> 01:10:58,050 PUBLIK: --that är storlek of-- nej, det är OK. 1516 01:10:58,050 --> 01:11:01,292 Men det är bara att peka på en plats i minne som är precis som fyra byte. 1517 01:11:01,292 --> 01:11:02,000 TALARE 1: Rätt. 1518 01:11:02,000 --> 01:11:03,030 1519 01:11:03,030 --> 01:11:07,070 Så malloc storleken på int säger, OK, jag ska gå avrinning, 1520 01:11:07,070 --> 01:11:08,780 hitta fyra byte minne för dig. 1521 01:11:08,780 --> 01:11:10,700 När det konstateras att fyra byte av minne, det 1522 01:11:10,700 --> 01:11:14,030 ger du säkerhets adressen av där det börjar, 1523 01:11:14,030 --> 01:11:16,160 och det är vad som lagras i pekare eller PTR. 1524 01:11:16,160 --> 01:11:17,510 1525 01:11:17,510 --> 01:11:18,010 Bra. 1526 01:11:18,010 --> 01:11:18,742 1527 01:11:18,742 --> 01:11:21,700 Ni ser mindre förvirrade än de flesta människor när jag talar om pekare, 1528 01:11:21,700 --> 01:11:23,670 så jag känner mig ganska bra just nu. 1529 01:11:23,670 --> 01:11:24,520 >> Okej. 1530 01:11:24,520 --> 01:11:27,960 Som alltid bör ni ha alla fått dina pset2 betyg nu. 1531 01:11:27,960 --> 01:11:32,769 Jag vet att det har förekommit en del wonky saker där det står, formel inte giltigt 1532 01:11:32,769 --> 01:11:33,310 eller något. 1533 01:11:33,310 --> 01:11:36,166 Om du får det, alla dina betyg är giltiga på min sida. 1534 01:11:36,166 --> 01:11:38,040 Så jag kan skicka dig skärmdumpar av dina betyg. 1535 01:11:38,040 --> 01:11:39,011 1536 01:11:39,011 --> 01:11:41,760 Bara låt mig veta och om du är missa några betyg eller något 1537 01:11:41,760 --> 01:11:43,060 verkar inte vettigt. 1538 01:11:43,060 --> 01:11:43,720 Kom till mig. 1539 01:11:43,720 --> 01:11:44,830 1540 01:11:44,830 --> 01:11:48,830 >> Jag har varit super stolt över dig killar redan, så fortsätt med det. 1541 01:11:48,830 --> 01:11:50,640 Och ha en bra resten av din vecka. 1542 01:11:50,640 --> 01:11:53,440 Jag är säker på att jag får se några av dig på kontorstid. 1543 01:11:53,440 --> 01:11:55,414