1 00:00:00,000 --> 00:00:03,269 >> [Muziek] 2 00:00:03,269 --> 00:00:05,391 3 00:00:05,391 --> 00:00:06,640 CAMILLE REKHSON: Hallo, iedereen. 4 00:00:06,640 --> 00:00:10,120 Welkom op de CS50 quiz nul beoordeling sessie. 5 00:00:10,120 --> 00:00:10,770 Ik ben Camille. 6 00:00:10,770 --> 00:00:13,140 En ik ga om te gaan over een aantal onderwerpen met u 7 00:00:13,140 --> 00:00:16,890 jongens vandaag de dag om u te helpen voor te bereiden op de quiz. 8 00:00:16,890 --> 00:00:20,840 Dus hier is onze niet-exhaustieve lijst met onderwerpen die u 9 00:00:20,840 --> 00:00:23,210 bekend voor de quiz moeten zijn. 10 00:00:23,210 --> 00:00:25,740 Deze werden direct genomen van de syllabus. 11 00:00:25,740 --> 00:00:26,990 Ik weet dat het lijkt veel. 12 00:00:26,990 --> 00:00:30,870 Maar geloof me, heb je al geleerd deze dingen in de afgelopen weken. 13 00:00:30,870 --> 00:00:33,210 >> Dus we zullen zeker gaan dan veel van deze vandaag. 14 00:00:33,210 --> 00:00:35,825 Maar ook enige tijd in beslag nemen op uw eigen om deze dingen te herzien. 15 00:00:35,825 --> 00:00:38,450 En als je bekend bent met niet wat sommige van deze dingen zijn, 16 00:00:38,450 --> 00:00:42,400 zorg ervoor dat je een van ons vragen. 17 00:00:42,400 --> 00:00:45,985 Ook voor de officiële woord op de quiz, ga naar deze link. 18 00:00:45,985 --> 00:00:48,860 Dit zal alle informatie met welke kamer je nodig hebt om in te gaan, 19 00:00:48,860 --> 00:00:52,960 opgesplitst alfabetisch, en ook een aantal tips over wat materialen 20 00:00:52,960 --> 00:00:56,470 je moet studeren, en wat voor soort quiz vragen die u kunt verwachten. 21 00:00:56,470 --> 00:01:01,090 Dus zorg ervoor om te controleren dat uit. 22 00:01:01,090 --> 00:01:03,810 >> Ook zijn enkele tips voor wanneer je bereiden zich voor op het examen. 23 00:01:03,810 --> 00:01:05,730 Oefen codering op papier. 24 00:01:05,730 --> 00:01:09,280 Ik weet dat je gewend aan het hebben van de IDE cheque voor je fouten voor u, 25 00:01:09,280 --> 00:01:12,280 en it's-- wanneer u typt het op, het is een beetje anders dan het hebben 26 00:01:12,280 --> 00:01:13,113 om dingen uit te schrijven. 27 00:01:13,113 --> 00:01:14,560 Dus de praktijk doen wat codering. 28 00:01:14,560 --> 00:01:17,910 Enkele goede functies om te oefenen doet zijn strlen en atoi, 29 00:01:17,910 --> 00:01:20,450 zien als je zou kunnen schrijven die op uw eigen. 30 00:01:20,450 --> 00:01:21,970 Wees vertrouwd met het probleem sets. 31 00:01:21,970 --> 00:01:24,200 De meeste jaren zijn vragen die betrekking hebben 32 00:01:24,200 --> 00:01:25,700 sommige van de Probleemverzameling materiaal. 33 00:01:25,700 --> 00:01:30,480 Dus zorg ervoor dat u begrijpt hoe aan alle probleem sets te doen. 34 00:01:30,480 --> 00:01:35,240 >> Probeer een aantal van de oude quizzen doen onder de 75 minuten tijdsdruk. 35 00:01:35,240 --> 00:01:37,290 Een groot deel van de quizzen kan soort lang zijn. 36 00:01:37,290 --> 00:01:39,680 Dus het is een goede manier om te geven je enige oefening, 37 00:01:39,680 --> 00:01:41,650 en hoe lang het zal nemen u mee, en hoe je 38 00:01:41,650 --> 00:01:45,360 moet je tijd verdelen om ervoor te zorgen je alles eindigen met het einde. 39 00:01:45,360 --> 00:01:49,690 En ook, een één pagina krijg je, tweezijdige referentie sheet 40 00:01:49,690 --> 00:01:52,962 dat je kunt schrijven wat je wil op te gebruiken tijdens de quiz. 41 00:01:52,962 --> 00:01:54,670 Dus als je het creëren dat, dat is ook 42 00:01:54,670 --> 00:01:57,860 echt een geweldige manier om te studeren, omdat je soort dingen worden herzien 43 00:01:57,860 --> 00:01:59,610 als je het schrijven ervan. 44 00:01:59,610 --> 00:02:05,421 >> Zodat eventuele algemene vragen over de quiz, of hoe het werkt? 45 00:02:05,421 --> 00:02:05,921 Ja. 46 00:02:05,921 --> 00:02:09,167 >> PUBLIEK: Zal ​​dat de lijst van onderwerpen dat je gewoon toonde voor ons beschikbaar te zijn 47 00:02:09,167 --> 00:02:09,820 online? 48 00:02:09,820 --> 00:02:12,736 >> CAMILLE REKHSON: Deze hele slide show zal worden geplaatst op de website. 49 00:02:12,736 --> 00:02:16,040 Ook de video van beoordeling van vandaag sessie zal zijn op de website. 50 00:02:16,040 --> 00:02:19,250 Dus niet te veel zorgen over te maken het schrijven van dingen naar beneden in. 51 00:02:19,250 --> 00:02:20,437 Het zal er allemaal. 52 00:02:20,437 --> 00:02:21,270 Een andere vragen? 53 00:02:21,270 --> 00:02:23,810 54 00:02:23,810 --> 00:02:26,960 OK, dus laten we beginnen. 55 00:02:26,960 --> 00:02:30,860 >> Dus een ding om vertrouwd te raken met zijn is de verschillende gegevenstypes en de grootte 56 00:02:30,860 --> 00:02:32,486 dat ze nemen. 57 00:02:32,486 --> 00:02:35,360 Dit kan ook een groot ding te zijn noteer op uw referentie vel, 58 00:02:35,360 --> 00:02:37,240 gewoon om ervoor dat u herinner me al deze. 59 00:02:37,240 --> 00:02:39,200 Maar-- dus chars zijn 1 byte. 60 00:02:39,200 --> 00:02:40,700 Ints zijn 4 bytes. 61 00:02:40,700 --> 00:02:44,450 Een lange, lange, die in feite meer ruimte voor een geheel getal is 8 bytes. 62 00:02:44,450 --> 00:02:46,560 Een float is 4 bytes. 63 00:02:46,560 --> 00:02:50,620 Een dubbele, die in feite geeft u meer ruimte om een ​​vlotter te slaan, is 8 bytes. 64 00:02:50,620 --> 00:02:54,210 Dan is een pointer 8 bytes. 65 00:02:54,210 --> 00:02:56,270 Heeft u vragen over deze? 66 00:02:56,270 --> 00:03:00,380 67 00:03:00,380 --> 00:03:05,580 >> Dus binaire is een ander onderwerp wij hebben bedekt een beetje dit semester. 68 00:03:05,580 --> 00:03:07,910 Dus laten we doen wat oefenen met het omzetten 69 00:03:07,910 --> 00:03:10,000 tussen de binaire en decimale. 70 00:03:10,000 --> 00:03:13,950 Dus iemand enig idee wat dat de eerste zou zijn? 71 00:03:13,950 --> 00:03:32,840 72 00:03:32,840 --> 00:03:34,860 Iedereen? 73 00:03:34,860 --> 00:03:36,270 Ja, het is 42. 74 00:03:36,270 --> 00:03:39,200 Dus als je nog, elk van de plaatsen in binaire 75 00:03:39,200 --> 00:03:41,860 is in principe net als 2 aan de macht van die plaats. 76 00:03:41,860 --> 00:03:43,750 >> Zodat de eerste plek is 2 tot de macht 0. 77 00:03:43,750 --> 00:03:46,710 En we hebben er 0, dus niets. 78 00:03:46,710 --> 00:03:48,700 De volgende plaats is 2 tot de eerste stroom. 79 00:03:48,700 --> 00:03:51,220 En we hebben een 1 daar, dus dat is eigenlijk een 2. 80 00:03:51,220 --> 00:03:53,642 De volgende plaats is 2 tot de tweede, die 4. 81 00:03:53,642 --> 00:03:54,850 We hebben niets daar. 82 00:03:54,850 --> 00:03:59,390 De volgende plaats over 2 tot de derde, die 8 zijn. 83 00:03:59,390 --> 00:04:02,230 En we hebben er één. 84 00:04:02,230 --> 00:04:03,470 En we blijven gaan. 85 00:04:03,470 --> 00:04:07,720 Dat last-- het meest naar linker is waar we hebben 32. 86 00:04:07,720 --> 00:04:13,437 En ja, we hebben eigenlijk hebben 32 plus 8 plus 2 te krijgen 42. 87 00:04:13,437 --> 00:04:14,020 Nog vragen? 88 00:04:14,020 --> 00:04:15,820 >> PUBLIEK: Wat is het onderschrift voor? 89 00:04:15,820 --> 00:04:17,399 >> CAMILLE REKHSON: Het onderschrift vertelt ons in feite dat het binaire. 90 00:04:17,399 --> 00:04:18,230 Dus er is een 2 daar. 91 00:04:18,230 --> 00:04:20,579 Als er like-- de komende één, of als we het omzetten van decimaal 92 00:04:20,579 --> 00:04:24,350 binaire, er is een 10 toont ons dat Dit nummer is oorspronkelijk in decimalen. 93 00:04:24,350 --> 00:04:25,194 >> Publiek: Dank je wel. 94 00:04:25,194 --> 00:04:26,110 >> CAMILLE REKHSON: Ja. 95 00:04:26,110 --> 00:04:28,790 Andere vragen op die ene? 96 00:04:28,790 --> 00:04:31,110 OK, dus laten we proberen de volgende men dan, decimaal naar binair. 97 00:04:31,110 --> 00:04:35,034 Zodat het nemen van 50 en zetten die in binaire. 98 00:04:35,034 --> 00:04:35,950 Hoe zou je dat doen? 99 00:04:35,950 --> 00:04:44,331 100 00:04:44,331 --> 00:04:45,317 Ja. 101 00:04:45,317 --> 00:04:49,754 >> Publiek: 110.010. 102 00:04:49,754 --> 00:04:50,760 >> CAMILLE REKHSON: Ja. 103 00:04:50,760 --> 00:04:54,410 Dus een-- een gemakkelijke manier om na te denken over omzetten van decimaal naar binair 104 00:04:54,410 --> 00:04:57,950 is to-- het vaak helpt om uit te schrijven wat de verschillende machten van 2 zijn. 105 00:04:57,950 --> 00:05:01,460 En ga er doorheen, en zie ongeacht de hoogste van die 106 00:05:01,460 --> 00:05:05,320 is dat je in kunt zetten om de decimaal getal zonder erover. 107 00:05:05,320 --> 00:05:09,040 >> Dus in dit geval, een van de bevoegdheden van 2 is 32. 108 00:05:09,040 --> 00:05:10,560 Zo gaat in 50 32. 109 00:05:10,560 --> 00:05:14,100 Maar de volgende power up zou zijn 64, die uiteraard niet past in 50. 110 00:05:14,100 --> 00:05:16,343 Dus de hoogste we hebben is het 32. 111 00:05:16,343 --> 00:05:17,343 De volgende omlaag naar 16. 112 00:05:17,343 --> 00:05:20,140 En 32 plus 16 is slechts 48. 113 00:05:20,140 --> 00:05:21,350 Zodat nog steeds past in 50. 114 00:05:21,350 --> 00:05:22,722 Dus hebben we 1 in deze beide. 115 00:05:22,722 --> 00:05:25,180 En dan, als we blijven naar beneden gaat, het enige wat we hoeven vertrokken 116 00:05:25,180 --> 00:05:27,510 2 meer te krijgen 48-50. 117 00:05:27,510 --> 00:05:31,860 Dus dan hebben we een 1 op die positie, en een 0 in de laatste positie. 118 00:05:31,860 --> 00:05:35,371 Omdat er niets in de 2 naar de 0-ste plaats. 119 00:05:35,371 --> 00:05:37,120 Vragen over het omzetten decimaal naar binair? 120 00:05:37,120 --> 00:05:40,830 121 00:05:40,830 --> 00:05:44,100 >> Dus laten we nu proberen te doen sommige binaire toevoeging. 122 00:05:44,100 --> 00:05:47,235 Wat als je die twee optellen? 123 00:05:47,235 --> 00:05:47,735 Ja. 124 00:05:47,735 --> 00:05:51,130 >> Publiek: 11.100. 125 00:05:51,130 --> 00:05:52,110 >> CAMILLE REKHSON: Ja. 126 00:05:52,110 --> 00:05:55,540 Daarbij toevoeging in binaire is vrij veel hetzelfde als doen in decimalen. 127 00:05:55,540 --> 00:05:59,390 Behalve als je twee 1's wezen Opgeteld 1 plus 1 is 2, 128 00:05:59,390 --> 00:06:02,980 maar 2 in binaire 1 is 0. 129 00:06:02,980 --> 00:06:07,090 Dus je moet dragen de 1, en houdt de uitvoering ervan voor die paar kolommen. 130 00:06:07,090 --> 00:06:10,260 En anders dan dat, voeg dan normaal. 131 00:06:10,260 --> 00:06:13,125 Heeft u vragen over dat? 132 00:06:13,125 --> 00:06:13,625 Ja. 133 00:06:13,625 --> 00:06:16,487 >> PUBLIEK: Sorry, wat is de laatste plaats? 134 00:06:16,487 --> 00:06:18,475 Er is zes nummers. 135 00:06:18,475 --> 00:06:23,260 Dus de linkerkolom, welke waarde is het? 136 00:06:23,260 --> 00:06:24,760 CAMILLE REKHSON: Op de onderste? 137 00:06:24,760 --> 00:06:26,340 PUBLIEK: Op de bovenste, voor 50. 138 00:06:26,340 --> 00:06:27,340 CAMILLE REKHSON: Voor 50? 139 00:06:27,340 --> 00:06:29,040 Oh, dus de meest linkse ene is 32. 140 00:06:29,040 --> 00:06:29,760 >> Publiek: 32? 141 00:06:29,760 --> 00:06:36,770 >> CAMILLE REKHSON: Ja, dus het zou zijn 32, 16, vervolgens 8, 4, 2, 1 of 0--. 142 00:06:36,770 --> 00:06:39,380 Nou, het is 2 de nulde, dat is 1. 143 00:06:39,380 --> 00:06:41,110 Ja. 144 00:06:41,110 --> 00:06:43,834 Andere vragen over dit? 145 00:06:43,834 --> 00:06:47,420 OK, dus dan gaan we doen een beetje met hexadecimaal. 146 00:06:47,420 --> 00:06:49,570 Dus dit misschien een iets minder bekend, 147 00:06:49,570 --> 00:06:51,680 omdat ik weet dat we hebben gedaan veel meer met binaire. 148 00:06:51,680 --> 00:06:54,050 Maar echt een goede manier om na te denken over hexadecimale 149 00:06:54,050 --> 00:06:57,540 is te doorbreken een binair getal in 4-bits brokken. 150 00:06:57,540 --> 00:07:00,950 Omdat elk 4 bits van een binaire getal is eigenlijk 151 00:07:00,950 --> 00:07:04,560 één van de hexadecimale getallen. 152 00:07:04,560 --> 00:07:07,420 >> Dus als we dit eerste, We hebben in feite acht 1 is. 153 00:07:07,420 --> 00:07:08,620 Dus die kunnen worden gesplitst up-- 154 00:07:08,620 --> 00:07:09,600 >> Publiek: 255. 155 00:07:09,600 --> 00:07:10,933 >> CAMILLE REKHSON: Zeg dat nog eens. 156 00:07:10,933 --> 00:07:13,772 Publiek: 255 in decimale, of 0xFF in hexadecimaal. 157 00:07:13,772 --> 00:07:14,980 CAMILLE REKHSON: Ja, het is. 158 00:07:14,980 --> 00:07:18,860 Dus, als je splitsen dat tot in twee 4-bits brokken, 159 00:07:18,860 --> 00:07:20,950 We hebben in principe vier reeksen 1. 160 00:07:20,950 --> 00:07:22,880 Dat is de maximum-- principe de maximale 161 00:07:22,880 --> 00:07:24,329 we kunnen krijgen met 4-bits binaire. 162 00:07:24,329 --> 00:07:27,120 En het maximum dat we konden krijgen voor die in hexadecimaal zou zijn F. 163 00:07:27,120 --> 00:07:30,290 Dus zouden we hebben twee F's. 164 00:07:30,290 --> 00:07:31,800 Heeft u vragen over dat? 165 00:07:31,800 --> 00:07:32,490 Ja? 166 00:07:32,490 --> 00:07:35,184 >> PUBLIEK: Kunt u dat herhalen. 167 00:07:35,184 --> 00:07:36,100 CAMILLE REKHSON: Zeker. 168 00:07:36,100 --> 00:07:39,160 Dus elke, in principe, plaats van de hexadecimale is 169 00:07:39,160 --> 00:07:42,570 gelijk aan het 4-bits van een binair. 170 00:07:42,570 --> 00:07:46,830 Dus de makkelijkste manier om dit te doen is het opsplitsen in 4-bits brokken. 171 00:07:46,830 --> 00:07:48,690 Dus in dit geval, hebben we acht 1's. 172 00:07:48,690 --> 00:07:51,010 Dus als we splitsen die in twee 4-bits brokken, 173 00:07:51,010 --> 00:07:54,350 we zouden hebben twee sets van vier 1's. 174 00:07:54,350 --> 00:07:57,181 En elk van deze overeenkomt met F. 175 00:07:57,181 --> 00:07:58,930 Als u denkt dat about-- Ik weet dat onze hersenen 176 00:07:58,930 --> 00:08:00,415 soort bedraad te denken meer door middel van decimaal, 177 00:08:00,415 --> 00:08:01,831 want dat is wat we gewend zijn. 178 00:08:01,831 --> 00:08:06,030 Dus een manier waarop je zou kunnen denken als vier 1 gelijk is aan 15 in decimalen. 179 00:08:06,030 --> 00:08:12,960 En 15 in hexadecimaal is F. Dus dat is een andere manier die je kunt bedenken doorheen. 180 00:08:12,960 --> 00:08:13,459 Ja. 181 00:08:13,459 --> 00:08:14,790 >> PUBLIEK: Wat is het 0x voor? 182 00:08:14,790 --> 00:08:18,240 >> CAMILLE REKHSON: De 0x geeft aan dat het hexadecimaal. 183 00:08:18,240 --> 00:08:21,900 Zodat we alleen dat prefix daar normaal. 184 00:08:21,900 --> 00:08:24,396 Andere vragen over die. 185 00:08:24,396 --> 00:08:27,100 OK, dus laten we proberen te gaan de andere kant op dan. 186 00:08:27,100 --> 00:08:28,712 In dit geval have-- we spijt? 187 00:08:28,712 --> 00:08:29,628 PUBLIEK: [onverstaanbaar]. 188 00:08:29,628 --> 00:08:32,095 189 00:08:32,095 --> 00:08:33,720 CAMILLE REKHSON: We gaan naar binair. 190 00:08:33,720 --> 00:08:36,039 Dus, gaan de andere kant op. 191 00:08:36,039 --> 00:08:42,090 Maar in dit geval hebben we 5 en A. Dus als we denken over dit, 192 00:08:42,090 --> 00:08:46,260 Als elk van de those-- 5 en A zijn zowel gaan naar een 4-bit brok vertegenwoordigen, 193 00:08:46,260 --> 00:08:49,003 hoe zou je zeggen 5 in binaire? 194 00:08:49,003 --> 00:08:51,120 >> Publiek: 0101. 195 00:08:51,120 --> 00:08:53,100 >> CAMILLE REKHSON: Ja, dus dat is de 0101 deel. 196 00:08:53,100 --> 00:08:55,250 En hoe zou je zeggen Een in-- 197 00:08:55,250 --> 00:08:56,910 >> Publiek: 10. 198 00:08:56,910 --> 00:08:58,243 CAMILLE REKHSON: Zeg het-- spijt? 199 00:08:58,243 --> 00:08:58,990 Publiek: 10. 200 00:08:58,990 --> 00:09:02,052 CAMILLE REKHSON: Ja, dus dat is het tweede deel van het. 201 00:09:02,052 --> 00:09:04,010 En dan, als je deze elkaar, dat 202 00:09:04,010 --> 00:09:06,440 hoe krijg je de volledige binary voor de hexadecimale. 203 00:09:06,440 --> 00:09:06,940 Ja? 204 00:09:06,940 --> 00:09:10,620 >> PUBLIEK: Om te weten dat A 1010, moet je onthouden? 205 00:09:10,620 --> 00:09:12,460 Of kunt u like-- 206 00:09:12,460 --> 00:09:14,380 >> CAMILLE REKHSON: Dus als u-- de differe-- zo 207 00:09:14,380 --> 00:09:16,790 wanneer je gaat door binair, eigenlijk binaire 208 00:09:16,790 --> 00:09:20,550 is 0 tot 9 en A door middel van F als zijn 16 dingen. 209 00:09:20,550 --> 00:09:25,420 Als helemaal 0 tot 9-- als u-- 9 en dan A, eigenlijk 210 00:09:25,420 --> 00:09:29,640 als we omgebouwd naar decimaal, A zou zijn 10, B zou zijn als 11. 211 00:09:29,640 --> 00:09:35,616 En als je na te denken over de binary 1010 is 8 en 2, 212 00:09:35,616 --> 00:09:37,990 omdat dat de beide plaatsen die optellen tot 10, die 213 00:09:37,990 --> 00:09:41,820 is precies wat A is gelijk aan. 214 00:09:41,820 --> 00:09:45,114 Dus dat is een soort van een eenvoudig manier om na te denken over. 215 00:09:45,114 --> 00:09:46,405 Andere vragen over hexadecimaal. 216 00:09:46,405 --> 00:09:50,510 217 00:09:50,510 --> 00:09:56,870 >> OK, dus nu gaan we nemen Een blik op bitwise operators. 218 00:09:56,870 --> 00:09:58,882 Dus deze kan zeker komen aan de quiz. 219 00:09:58,882 --> 00:10:00,590 Ik weet dat we niet werkte samen met hen veel. 220 00:10:00,590 --> 00:10:02,756 Maar we gaan gewoon doen een klein overzicht van deze. 221 00:10:02,756 --> 00:10:05,490 Dus hopelijk zullen een beetje meer bekend voorkomen. 222 00:10:05,490 --> 00:10:10,220 Zodat de zes bitwise operators dat we hier hebben opgesomd. 223 00:10:10,220 --> 00:10:13,340 En ze lieten ons te manipuleren individuele bits. 224 00:10:13,340 --> 00:10:16,676 Zodat de operator is een ampersand. 225 00:10:16,676 --> 00:10:18,550 Niet te verwarren met die dubbele ampersand, 226 00:10:18,550 --> 00:10:21,840 dat is de logische en dat laat ons twee dingen te vergelijken. 227 00:10:21,840 --> 00:10:25,860 >> De single en is de manier waarop we kunnen dingen bitsgewijs manipuleren. 228 00:10:25,860 --> 00:10:29,910 Dus dit geeft ons het resultaat van 1 indien beide van de argumenten die we vergelijken 229 00:10:29,910 --> 00:10:32,440 de same-- of 1. 230 00:10:32,440 --> 00:10:39,370 En de verticale balk, OR, geeft ons 1 indien ten minste een van hen is 1. 231 00:10:39,370 --> 00:10:41,460 Dus eigenlijk precies wat de woorden betekenen. 232 00:10:41,460 --> 00:10:46,640 En als de twee bits 1, 1 en 1 geeft ons 1. 233 00:10:46,640 --> 00:10:51,769 Maar met de OR, als het 0 of 1, of 1 of 1, in beide gevallen, 234 00:10:51,769 --> 00:10:53,060 we hebben 1 als een van hen. 235 00:10:53,060 --> 00:10:54,101 Dus dan zouden we een 1 te krijgen. 236 00:10:54,101 --> 00:10:56,320 Publiek: Wat bedoel je dat zegt dat het geeft 1? 237 00:10:56,320 --> 00:10:58,236 >> CAMILLE REKHSON: De resultaat. Soort, zoals jij 238 00:10:58,236 --> 00:11:05,060 would-- als je dat deed 0 en 1, de gevolg van die zou 1-- of 0 zijn 239 00:11:05,060 --> 00:11:08,920 1 en het resultaat van dat zou 0, sorry. 240 00:11:08,920 --> 00:11:12,190 Ja, het was een soort van de Door de expressie. 241 00:11:12,190 --> 00:11:16,520 En dan, dit dakje symbool is de XOR, of exclusieve OR. 242 00:11:16,520 --> 00:11:21,920 Dus dat betekent dat uitsluitend een of precies één van de twee argumenten gelijk aan 1. 243 00:11:21,920 --> 00:11:24,210 En dan zou het je 1. 244 00:11:24,210 --> 00:11:27,370 >> De kleine kronkelende lijn is de NOT operator. 245 00:11:27,370 --> 00:11:31,940 Dus in tegenstelling tot de rest van hen, met toepassing van een paar bits, 246 00:11:31,940 --> 00:11:34,930 de NOT operator duurt slechts een beetje, en zal spiegelen. 247 00:11:34,930 --> 00:11:37,640 Dus als je give-- als je dat doet NIET 0, zou het geven 1. 248 00:11:37,640 --> 00:11:40,248 En als je niet 1, het zou je geeft 0. 249 00:11:40,248 --> 00:11:40,748 Ja? 250 00:11:40,748 --> 00:11:41,150 >> Publiek: Wat is het verschil tussen de OR met één lijn 251 00:11:41,150 --> 00:11:41,983 en de OR met twee? 252 00:11:41,983 --> 00:11:44,430 253 00:11:44,430 --> 00:11:46,930 CAMILLE REKHSON: Dus de OR met twee lijnen de logische OR. 254 00:11:46,930 --> 00:11:52,430 Dus dat is voor het vergelijken twee volledige integers of two-- 255 00:11:52,430 --> 00:11:53,730 te zien als dingen zijn gelijk. 256 00:11:53,730 --> 00:11:58,340 Of zoals het doen van dit is gelijk aan deze, OR dit is gelijk aan dit soort dingen. 257 00:11:58,340 --> 00:12:04,090 Overwegende dat de enige bar OR, is voor het doen van dingen bitwise. 258 00:12:04,090 --> 00:12:04,590 Ja. 259 00:12:04,590 --> 00:12:06,680 >> Publiek: Wat bedoel je met bitsgewijze? 260 00:12:06,680 --> 00:12:10,330 >> CAMILLE REKHSON: Dus bitgewijze werkt direct met de bits in binaire. 261 00:12:10,330 --> 00:12:11,596 >> PUBLIEK: Oh, ik zie. 262 00:12:11,596 --> 00:12:15,000 >> CAMILLE REKHSON: Ja, dus werken met 0 en 1 is. 263 00:12:15,000 --> 00:12:18,310 We zullen een paar voorbeelden van dit te doen na, gewoon dus het is niet te verwarrend. 264 00:12:18,310 --> 00:12:20,970 En dan de laatste twee zijn de linker shift en de rechter shift. 265 00:12:20,970 --> 00:12:23,970 Welke zijn twee minder dan tekens of twee groter dan tekens. 266 00:12:23,970 --> 00:12:26,294 En zij verschoven naar bit het opgegeven aantal plaatsen 267 00:12:26,294 --> 00:12:27,710 dat je het in de richting. 268 00:12:27,710 --> 00:12:29,980 Het zou dus ofwel verschuiven naar links of naar rechts. 269 00:12:29,980 --> 00:12:30,480 Ja? 270 00:12:30,480 --> 00:12:32,470 Publiek: Wat is de syntaxis voor het draaien? 271 00:12:32,470 --> 00:12:33,950 >> CAMILLE REKHSON: We gaan gaan door middel van een voorbeeld in een tweede. 272 00:12:33,950 --> 00:12:35,680 Dus hopelijk, dat zal helpen. 273 00:12:35,680 --> 00:12:41,060 Heeft u vragen over net wat is hier, before-- OK. 274 00:12:41,060 --> 00:12:43,821 Dus gaan door enkele voorbeelden. 275 00:12:43,821 --> 00:12:45,070 Laten we beginnen met de en enen. 276 00:12:45,070 --> 00:12:47,880 Wat zouden we krijgen als we 0 en 1? 277 00:12:47,880 --> 00:12:48,899 >> Publiek: 0. 278 00:12:48,899 --> 00:12:50,690 CAMILLE REKHSON: OK, en als we 1 en 1? 279 00:12:50,690 --> 00:12:51,622 Publiek: 1. 280 00:12:51,622 --> 00:12:54,490 CAMILLE REKHSON: Ja, wat als we deden 0 OF één? 281 00:12:54,490 --> 00:12:55,094 Publiek: 1. 282 00:12:55,094 --> 00:12:56,510 CAMILLE REKHSON: Hoe ongeveer 1 of 1? 283 00:12:56,510 --> 00:12:57,404 Publiek: 1. 284 00:12:57,404 --> 00:13:00,410 CAMILLE REKHSON: OK, hoe over 0 XOR 1? 285 00:13:00,410 --> 00:13:01,380 Publiek: 1. 286 00:13:01,380 --> 00:13:03,120 CAMILLE REKHSON: En 1 XOR 1? 287 00:13:03,120 --> 00:13:03,902 Publiek: 0. 288 00:13:03,902 --> 00:13:05,360 CAMILLE REKHSON: Jullie zijn goed. 289 00:13:05,360 --> 00:13:06,510 Hoe zit het niet 0? 290 00:13:06,510 --> 00:13:07,265 >> Publiek: 1. 291 00:13:07,265 --> 00:13:08,390 CAMILLE REKHSON: En niet 1? 292 00:13:08,390 --> 00:13:09,602 Publiek: 0. 293 00:13:09,602 --> 00:13:12,810 CAMILLE REKHSON: OK, en dan deze laatste één is een beetje een met de verschuiven. 294 00:13:12,810 --> 00:13:18,700 Dus als we aanvankelijk x 8 te zijn, en dan is y x naar links 3, 295 00:13:18,700 --> 00:13:19,760 wat zou dat ons? 296 00:13:19,760 --> 00:13:20,676 >> PUBLIEK: [onverstaanbaar]. 297 00:13:20,676 --> 00:13:22,817 298 00:13:22,817 --> 00:13:24,150 CAMILLE REKHSON: Zeg dat nog eens. 299 00:13:24,150 --> 00:13:26,740 PUBLIEK: [onverstaanbaar]. 300 00:13:26,740 --> 00:13:28,766 CAMILLE REKHSON: Dus, dit eigenlijk geeft ons 64. 301 00:13:28,766 --> 00:13:29,876 PUBLIEK: [onverstaanbaar]. 302 00:13:29,876 --> 00:13:32,250 CAMILLE REKHSON: Dus ik ben gewoon ga dit hier te schrijven op, 303 00:13:32,250 --> 00:13:34,700 dus dit maakt het een beetje verstand. 304 00:13:34,700 --> 00:13:45,120 Als we de 2 0, 2 tot 1, 2 naar 2, 2 tot 3 gaat worden 8. 305 00:13:45,120 --> 00:13:52,380 En als we willen verschuiven 3 meer bits naar links, zou die 2 zijn de 4, 306 00:13:52,380 --> 00:13:57,270 2 de 5 en 2 aan de 6, en 2 tot 6 is het 64. 307 00:13:57,270 --> 00:13:59,920 308 00:13:59,920 --> 00:14:01,110 Is dat zinvol? 309 00:14:01,110 --> 00:14:05,291 310 00:14:05,291 --> 00:14:05,791 Ja. 311 00:14:05,791 --> 00:14:08,725 >> PUBLIEK: Heeft die verschuiving alle 1's en 0's van het binaire getal aan the-- 312 00:14:08,725 --> 00:14:09,600 >> CAMILLE REKHSON: Ja. 313 00:14:09,600 --> 00:14:12,150 314 00:14:12,150 --> 00:14:15,170 En je zult geen zorgen te maken over de quiz over deze negatief. 315 00:14:15,170 --> 00:14:19,510 We zal je niet omgaan met negatieve verschuivingen in any way. 316 00:14:19,510 --> 00:14:24,070 Een andere vragen over dit? 317 00:14:24,070 --> 00:14:24,570 Ja. 318 00:14:24,570 --> 00:14:30,570 >> Publiek: Als het een verschuiving naar rechts, iets is dat iets dat wasn't-- 319 00:14:30,570 --> 00:14:33,220 was oorspronkelijk een deel van het ding 0? 320 00:14:33,220 --> 00:14:37,110 >> CAMILLE REKHSON: Ja, zou je voeg gewoon 0 op in het origineel. 321 00:14:37,110 --> 00:14:38,110 Ja. 322 00:14:38,110 --> 00:14:41,540 >> Publiek: Dus wat is dat 100 naar rechts drie keer? 323 00:14:41,540 --> 00:14:43,290 CAMILLE REKHSON: 100 naar rechts verschoven, 324 00:14:43,290 --> 00:14:46,057 dus dat zou alle nemen 1's en 0's en ze gewoon verschuiven 325 00:14:46,057 --> 00:14:48,515 rechts aantal keren je het te verschuiven naar rechts. 326 00:14:48,515 --> 00:14:50,452 >> PUBLIEK: [onverstaanbaar]? 327 00:14:50,452 --> 00:14:53,160 CAMILLE REKHSON: Nou, 100-- zijn heb je het over 100 in binaire, 328 00:14:53,160 --> 00:14:53,910 of 100 in decimale? 329 00:14:53,910 --> 00:14:55,750 Publiek: Het spijt me, 100 in binaire. 330 00:14:55,750 --> 00:14:58,916 >> CAMILLE REKHSON: 100 in binaire, als je het verschuiven naar de right-- 331 00:14:58,916 --> 00:15:01,040 Als u verschuiving naar rechts eenmaal, zou 10 worden. 332 00:15:01,040 --> 00:15:04,430 Als je het verschuiven naar de juiste tweemaal, zou 001 worden. 333 00:15:04,430 --> 00:15:07,590 En dan als je het verschuiven weer, je soort van verliezen het bit. 334 00:15:07,590 --> 00:15:09,610 Ja, dat is gewoon 0. 335 00:15:09,610 --> 00:15:12,140 Andere vragen over dit? 336 00:15:12,140 --> 00:15:12,835 Ja. 337 00:15:12,835 --> 00:15:14,695 >> Publiek: Dus dan wordt het 000. 338 00:15:14,695 --> 00:15:17,020 >> CAMILLE REKHSON: Ja. 339 00:15:17,020 --> 00:15:22,150 OK, dus laten we gaan door middel van een beetje van ASCII wiskunde. 340 00:15:22,150 --> 00:15:25,120 Dus tekens kan in wezen worden behandeld als integers 341 00:15:25,120 --> 00:15:28,290 op basis van hun ASCII-waarden. 342 00:15:28,290 --> 00:15:35,250 Dus als we zaten int A gelijk aan 65, int B gelijk aan A plus 1, int char C gelijk 343 00:15:35,250 --> 00:15:39,565 D minus 1 en char D gelijk 68, wat zou uit te printen op de bodem? 344 00:15:39,565 --> 00:15:46,150 345 00:15:46,150 --> 00:15:49,720 >> Dus, we printen these-- zegenen u-- we 346 00:15:49,720 --> 00:15:53,520 drukken van deze allemaal uit als CHARS basis van het percentage C. 347 00:15:53,520 --> 00:15:56,320 Dus we eigenlijk printen het karakter waarde van alle vier 348 00:15:56,320 --> 00:15:58,600 van deze variabelen. 349 00:15:58,600 --> 00:16:04,280 Als een hint, 65 is de ASCII-waarde van het kapitaal A. Misschien dat hielp. 350 00:16:04,280 --> 00:16:04,780 Wat? 351 00:16:04,780 --> 00:16:05,530 >> Publiek: ABCD. 352 00:16:05,530 --> 00:16:07,780 >> CAMILLE REKHSON: Ja, dus zou dit precies uit te printen 353 00:16:07,780 --> 00:16:10,290 ABCD omdat we stellen int A gelijk aan de ASCII-waarde van A. 354 00:16:10,290 --> 00:16:13,085 Dus als we printen die als een karakter, we gewoon hoofdletter A, 355 00:16:13,085 --> 00:16:15,540 Een plus 1 zou een hoofdletter B in ASCII zijn. 356 00:16:15,540 --> 00:16:19,260 D min 1 zou een hoofdletter C in ASCII zijn. 357 00:16:19,260 --> 00:16:25,185 En 68 is de ASCII-waarde D. Vragen over ASCII? 358 00:16:25,185 --> 00:16:25,685 Ja. 359 00:16:25,685 --> 00:16:31,370 >> Publiek: Dus, de aanhalingstekens rond Een, doet dat verandering Een van de ASCII? 360 00:16:31,370 --> 00:16:34,456 >> CAMILLE REKHSON: Het uses-- is count-- enkele aanhalingstekens rond de A 361 00:16:34,456 --> 00:16:35,330 maakt het een teken. 362 00:16:35,330 --> 00:16:37,600 En als je te maken hebt met in het aantal form-- 363 00:16:37,600 --> 00:16:40,320 zodat wanneer, zoals in dit geval, is het wordt behandeld als een int-- 364 00:16:40,320 --> 00:16:44,664 dan zou behandelen met het ASCII-waarde. 365 00:16:44,664 --> 00:16:45,164 Ja. 366 00:16:45,164 --> 00:16:50,060 >> Publiek: Heeft u raden we hebben een ASCII verwijzing tafel? 367 00:16:50,060 --> 00:16:51,900 >> CAMILLE REKHSON: Ik denk niet think-- 368 00:16:51,900 --> 00:16:54,720 >> PUBLIEK: Of zou het alleen maar te maken hebben met deze? 369 00:16:54,720 --> 00:16:56,210 >> CAMILLE REKHSON: Ik denk dat we zou het doen met eenvoudige dingen. 370 00:16:56,210 --> 00:16:58,168 Ik denk niet dat het zou kwaad om misschien te schrijven 371 00:16:58,168 --> 00:17:02,653 wat hoofdletter A en kleine letters A zijn, net wat die marges zijn te beginnen met. 372 00:17:02,653 --> 00:17:05,819 Maar ik denk niet dat je nodig hebt om alle te nemen speelt geheel ASCII tafel. 373 00:17:05,819 --> 00:17:06,803 Ja. 374 00:17:06,803 --> 00:17:09,755 >> Publiek: Wat is het verschil tussen zeggen int A en C char, 375 00:17:09,755 --> 00:17:12,720 zoals je aan de top? 376 00:17:12,720 --> 00:17:17,380 >> CAMILLE REKHSON: Dus het is gewoon hoe dat in het geheugen opgeslagen. 377 00:17:17,380 --> 00:17:20,010 Maar je kunt het ook zo behandelen. 378 00:17:20,010 --> 00:17:23,274 Zoals we hier zien, printen doen we de A als een karakter. 379 00:17:23,274 --> 00:17:24,690 Publiek: Dus dat is het zelfde als A? 380 00:17:24,690 --> 00:17:25,606 CAMILLE REKHSON: Ja. 381 00:17:25,606 --> 00:17:28,030 382 00:17:28,030 --> 00:17:29,537 Een andere vragen? 383 00:17:29,537 --> 00:17:32,022 >> Publiek: Dus, procent C zegt het afdrukken van een char? 384 00:17:32,022 --> 00:17:33,016 >> CAMILLE REKHSON: Ja. 385 00:17:33,016 --> 00:17:35,501 >> Publiek: Dus zelfs als A heeft slechts gedefinieerd als een integer, 386 00:17:35,501 --> 00:17:37,569 als we proberen om af te drukken char als 65 het would-- 387 00:17:37,569 --> 00:17:40,110 CAMILLE REKHSON: Het zou gaan om gaat in principe om ASCII grafiek 388 00:17:40,110 --> 00:17:42,990 en krijgt welke karakters in de ASCII grafiek voor die 65. 389 00:17:42,990 --> 00:17:43,840 >> Publiek: Dank je wel. 390 00:17:43,840 --> 00:17:44,756 >> CAMILLE REKHSON: Ja. 391 00:17:44,756 --> 00:17:45,445 Ja? 392 00:17:45,445 --> 00:17:50,620 >> Publiek: Dus als je dat deed% I, I%, % I, I%, zou het gewoon print-- 393 00:17:50,620 --> 00:17:52,620 CAMILLE REKHSON: Ja, als je dat deed alle 4% I's, is het 394 00:17:52,620 --> 00:17:57,170 zou de ASCII uitprinten waarden van alle vier van deze. 395 00:17:57,170 --> 00:17:59,483 Een andere vragen? 396 00:17:59,483 --> 00:18:06,310 OK, dus omvang, in principe is deze helpt ons te bepalen waar 397 00:18:06,310 --> 00:18:08,450 een variabele bestaat in uw programma. 398 00:18:08,450 --> 00:18:11,910 Dus we hebben gesproken over twee verschillende types van scope, globaal en lokaal. 399 00:18:11,910 --> 00:18:14,560 >> Als een variabele globaal wordt scoped, betekent dit dat uw hele programma 400 00:18:14,560 --> 00:18:16,292 toegang tot die variabele. 401 00:18:16,292 --> 00:18:18,000 En als je wereldwijd scope een variabele, je 402 00:18:18,000 --> 00:18:19,510 verklaren voor uw belangrijkste functie. 403 00:18:19,510 --> 00:18:20,830 Dus het is gedaan recht uit de vleermuis. 404 00:18:20,830 --> 00:18:22,950 En dan je hele programma kunt openen. 405 00:18:22,950 --> 00:18:26,070 >> Als het alleen lokaal scoped, dat variabele beperkt is tot een bepaald gebied. 406 00:18:26,070 --> 00:18:29,705 Dus als je verklaart in een lus, alleen dat lus kan openen. 407 00:18:29,705 --> 00:18:31,580 Of als u te verklaren binnen een specifieke functie, 408 00:18:31,580 --> 00:18:34,940 alleen die functie kunt openen. 409 00:18:34,940 --> 00:18:38,265 Vragen over het toepassingsgebied. 410 00:18:38,265 --> 00:18:41,570 >> OK, dus de functie prototyping. 411 00:18:41,570 --> 00:18:45,360 Voornamelijk omdat C, wanneer Het compileert, leest boven naar beneden. 412 00:18:45,360 --> 00:18:48,800 Als u een functie declareren laat in de code, 413 00:18:48,800 --> 00:18:51,670 de compiler niet weet dat die functie bestaat. 414 00:18:51,670 --> 00:18:55,690 Dus wat we gebruiken zijn prototypes, die in feite vertellen de compiler, 415 00:18:55,690 --> 00:18:58,710 Deze functie bestaat, gaat kijken voor het later in de code. 416 00:18:58,710 --> 00:19:00,900 Dus de manier waarop u doen een functie prototype 417 00:19:00,900 --> 00:19:03,020 is precies hoe je begint uit het schrijven van een functie. 418 00:19:03,020 --> 00:19:05,310 U geeft de return type, de naam van de functie, 419 00:19:05,310 --> 00:19:08,930 en dan argumenten dat die functie neemt. 420 00:19:08,930 --> 00:19:13,970 >> Dus, om te kijken naar een snel voorbeeld, in dit onze functie die we hier met behulp van case 421 00:19:13,970 --> 00:19:15,340 is in feite een kubus functie. 422 00:19:15,340 --> 00:19:19,170 Zo nemen in een integer en terugkeer van de kubus die integer. 423 00:19:19,170 --> 00:19:23,190 Omdat we hebben geschreven dat functie onder de belangrijkste functie, 424 00:19:23,190 --> 00:19:26,300 en we willen het gebruiken output van dat-- of we 425 00:19:26,300 --> 00:19:28,630 wil die functie in onze belangrijkste functie, 426 00:19:28,630 --> 00:19:31,980 plaatsen we het prototype weg bovenaan programma. 427 00:19:31,980 --> 00:19:34,460 En toen we noemen het in onze belangrijkste functie, 428 00:19:34,460 --> 00:19:38,800 de compiler weet dat die functie later geschreven, en zal gaan zoeken, 429 00:19:38,800 --> 00:19:40,910 en zal het goed gebruikt. 430 00:19:40,910 --> 00:19:45,190 Vragen over prototyping? 431 00:19:45,190 --> 00:19:45,690 Ja. 432 00:19:45,690 --> 00:19:46,940 >> Publiek: Dus wat is het punt? 433 00:19:46,940 --> 00:19:49,374 434 00:19:49,374 --> 00:19:50,915 Ik heb niet het punt van prototyping krijgen. 435 00:19:50,915 --> 00:19:52,820 Waarom niet gewoon hebben daar beneden? 436 00:19:52,820 --> 00:19:54,903 >> CAMILLE REKHSON: Nou als het is hier beneden, toen 437 00:19:54,903 --> 00:19:57,020 krijg je kubus van lijn x in uw belangrijkste functie, 438 00:19:57,020 --> 00:19:59,495 de compiler zal geen idee hebben dat de kubus functie daadwerkelijk bestaat. 439 00:19:59,495 --> 00:20:01,310 >> Publiek: Kan je niet zet ze gewoon aan de voorkant? 440 00:20:01,310 --> 00:20:02,350 >> CAMILLE REKHSON: Het is betere codering praktijk 441 00:20:02,350 --> 00:20:04,150 om het onder uw belangrijkste functie te zetten. 442 00:20:04,150 --> 00:20:06,350 Dus dat is waarom we zouden doe de prototyping. 443 00:20:06,350 --> 00:20:07,680 Gewoon omdat, als je had veel functies 444 00:20:07,680 --> 00:20:10,180 Het zou wel heel slordig te zijn gelezen door al die functies 445 00:20:10,180 --> 00:20:12,030 voordat je naar vlees van uw programma. 446 00:20:12,030 --> 00:20:13,888 Ja, en je had een q-- 447 00:20:13,888 --> 00:20:16,796 >> Publiek: Dus, is te verklaren variabele aan de top 448 00:20:16,796 --> 00:20:18,795 dus je kunt het openen, maken het een globale variabele? 449 00:20:18,795 --> 00:20:21,119 Dat ongeveer zo waar het te verklaren dat 450 00:20:21,119 --> 00:20:23,660 daarboven, zodat het weet dat het gaat om het later toegang 451 00:20:23,660 --> 00:20:24,762 en je kunt het gebruiken? 452 00:20:24,762 --> 00:20:26,146 >> CAMILLE REKHSON: Ja. 453 00:20:26,146 --> 00:20:26,646 Ja. 454 00:20:26,646 --> 00:20:30,414 >> PUBLIEK: Moet the-- bijkomende functies die u sleutel buiten te creëren 455 00:20:30,414 --> 00:20:31,840 van dit ding, of-- 456 00:20:31,840 --> 00:20:33,760 >> CAMILLE REKHSON: Ja, als je het creëren van andere belangrijke functions-- 457 00:20:33,760 --> 00:20:36,385 zelf de function-- dus als je bent het maken van andere functies, 458 00:20:36,385 --> 00:20:37,555 moeten ze buiten te zijn. 459 00:20:37,555 --> 00:20:38,055 Ja? 460 00:20:38,055 --> 00:20:39,734 >> Publiek: Wat is procent D? 461 00:20:39,734 --> 00:20:42,150 CAMILLE REKHSON: Procent D hetzelfde als percentage I. 462 00:20:42,150 --> 00:20:45,915 Het verwijst naar een integer. 463 00:20:45,915 --> 00:20:47,895 Ja. 464 00:20:47,895 --> 00:20:50,370 >> Publiek: Dus wat is int main doen? 465 00:20:50,370 --> 00:20:51,724 Wat was die leegte? 466 00:20:51,724 --> 00:20:53,890 CAMILLE REKHSON: Void zegt het neemt geen argumenten. 467 00:20:53,890 --> 00:20:55,320 PUBLIEK: [onverstaanbaar]. 468 00:20:55,320 --> 00:20:57,570 CAMILLE REKHSON: Kunt u spreekt een beetje luider, sorry? 469 00:20:57,570 --> 00:21:00,153 Publiek: Ja, sorry, waarom deed je verliest om de eerste, 470 00:21:00,153 --> 00:21:02,297 en dan int input voor de tweede? 471 00:21:02,297 --> 00:21:04,720 472 00:21:04,720 --> 00:21:07,470 CAMILLE REKHSON: Oh, voor de twee different-- voor de belangrijkste functie 473 00:21:07,470 --> 00:21:09,290 versus de kubus functie? 474 00:21:09,290 --> 00:21:13,360 Dus in de belangrijkste functie, we leegte gebruiken omdat er 475 00:21:13,360 --> 00:21:16,870 geen parameters worden genomen. 476 00:21:16,870 --> 00:21:19,425 Overwegende dat in de kubus functie, hebben we een ingang. 477 00:21:19,425 --> 00:21:22,300 Dat is waarom het zegt int, input, want er zijn argumenten dat we 478 00:21:22,300 --> 00:21:24,571 nemen in onze functie uit te voeren. 479 00:21:24,571 --> 00:21:25,070 Ja. 480 00:21:25,070 --> 00:21:27,770 481 00:21:27,770 --> 00:21:30,464 Zijn er vragen? 482 00:21:30,464 --> 00:21:34,520 >> OK, en dan snel floating-point onnauwkeurigheid. 483 00:21:34,520 --> 00:21:37,200 Dus we hebben oneindig veel reële getallen. 484 00:21:37,200 --> 00:21:38,950 Maar er zijn slechts een eindig aantal bits 485 00:21:38,950 --> 00:21:42,880 die we kunnen gebruiken om deze weer te geven getallen en hen te vertegenwoordigen. 486 00:21:42,880 --> 00:21:45,020 Dus dan komen we met een aantal onnauwkeurigheid. 487 00:21:45,020 --> 00:21:49,190 En uw nummers zal niet altijd heel wat 488 00:21:49,190 --> 00:21:51,810 je denkt dat ze zijn wanneer je omgaan met floating-point. 489 00:21:51,810 --> 00:21:53,650 Dit is gewoon iets goed om te weten. 490 00:21:53,650 --> 00:21:56,628 Vragen over dit? 491 00:21:56,628 --> 00:21:59,610 Ja. 492 00:21:59,610 --> 00:22:02,090 >> PUBLIEK: Is dit een verwijzing het idee van bit overflow 493 00:22:02,090 --> 00:22:03,089 dat was in het college? 494 00:22:03,089 --> 00:22:06,080 Was dat iets te scheiden? 495 00:22:06,080 --> 00:22:09,650 >> CAMILLE REKHSON: Ze zijn volledig gescheiden, ja. 496 00:22:09,650 --> 00:22:11,160 OK, geweldig. 497 00:22:11,160 --> 00:22:16,369 498 00:22:16,369 --> 00:22:17,452 Pulak Goyal: Hallo, iedereen. 499 00:22:17,452 --> 00:22:19,872 Mijn naam is Pulak, en ik zal te gaan over pointers. 500 00:22:19,872 --> 00:22:23,260 501 00:22:23,260 --> 00:22:25,720 OK, dus laten we eerst denken over wat geheugen eruit ziet. 502 00:22:25,720 --> 00:22:28,610 Dus zoals je hier kunt zien, we neem geheugen en verdelen we het omhoog 503 00:22:28,610 --> 00:22:30,090 in een bos van blokken. 504 00:22:30,090 --> 00:22:33,150 En we verwijzen naar elkaar blokkeren door een adres, toch? 505 00:22:33,150 --> 00:22:37,196 En heeft iemand nog wat soort notatie gebruiken we om een ​​adres aan te duiden? 506 00:22:37,196 --> 00:22:38,510 >> PUBLIEK: Hexadecimaal, 0X. 507 00:22:38,510 --> 00:22:39,510 >> Pulak Goyal: Hexadecimaal, toch? 508 00:22:39,510 --> 00:22:41,509 Dus de 0X betekent dat we over hexadecimaal. 509 00:22:41,509 --> 00:22:45,740 510 00:22:45,740 --> 00:22:48,360 OK, dus hoe kunnen we creëren pointers? 511 00:22:48,360 --> 00:22:51,960 Dus nemen we het type, we zet het-- voeg een ster aan het, 512 00:22:51,960 --> 00:22:53,760 en dan voegen we de naam van de variabele. 513 00:22:53,760 --> 00:22:59,280 Zodat de voorbeelden die we hebben gezien zijn int ster x, char ster y en z beginnen zweven. 514 00:22:59,280 --> 00:23:01,380 Dus als ik zeg int ster x, kan iemand mij vertellen 515 00:23:01,380 --> 00:23:03,965 wat ik soort van praten over daar? 516 00:23:03,965 --> 00:23:05,710 >> Doelgroep: De locatie van de schijf. 517 00:23:05,710 --> 00:23:06,890 >> Pulak Goyal: Sorry, wat? 518 00:23:06,890 --> 00:23:07,723 Kun je dat herhalen? 519 00:23:07,723 --> 00:23:09,250 Doelgroep: De locatie van de schijf. 520 00:23:09,250 --> 00:23:12,390 >> Pulak Goyal: Dus actually-- dus wat Ik bedoel, is wanneer we hebben int ster x, 521 00:23:12,390 --> 00:23:14,400 we zeggen is het creëren een pointer, en 522 00:23:14,400 --> 00:23:17,130 kan het adres van een op te slaan variabele dat is een int, toch? 523 00:23:17,130 --> 00:23:21,810 Dus met char ster y, we zijn het creëren van een pointer 524 00:23:21,810 --> 00:23:24,220 die kan het adres op te slaan van een variabele dat is een char. 525 00:23:24,220 --> 00:23:26,270 Dus die zinvol zijn voor iedereen? 526 00:23:26,270 --> 00:23:29,600 OK, cool 527 00:23:29,600 --> 00:23:33,450 >> OK, dus met verwijzingen, zijn er twee belangrijke operaties die we kunnen doen. 528 00:23:33,450 --> 00:23:36,630 Er is referencing en Er is dereferentie. 529 00:23:36,630 --> 00:23:37,130 Ja? 530 00:23:37,130 --> 00:23:38,760 >> PUBLIEK: Kunt u gaan een beetje langzamer? 531 00:23:38,760 --> 00:23:39,510 >> Pulak Goyal: Zeker. 532 00:23:39,510 --> 00:23:45,350 Ja, so-- ja, vragen stellen als ik ga samen als u-- als er iets is onduidelijk. 533 00:23:45,350 --> 00:23:47,240 Dus we hebben referencing en dereferentie. 534 00:23:47,240 --> 00:23:51,680 Dus als je wilt het adres te krijgen van een variabele, gebruik dan de ampersand. 535 00:23:51,680 --> 00:23:53,620 Dus laten we zeggen dat ik verklaard int x ergens. 536 00:23:53,620 --> 00:23:57,450 En ik wil het adres van die krijgen en doorgeven in, ik zou ampersand x doen. 537 00:23:57,450 --> 00:24:01,260 En als je wilt het krijgen waarde die aan een pointer, 538 00:24:01,260 --> 00:24:04,670 de dereference gebruiken operator, die een ster. 539 00:24:04,670 --> 00:24:08,570 >> Dus laten we zeggen dat ik had int ster x, en Ik had het wijzen op iets. 540 00:24:08,570 --> 00:24:13,510 Als ik wil de waarde van wat het is te krijgen wijzend naar, zou ik gewoon doen ster x. 541 00:24:13,510 --> 00:24:14,960 Is dat duidelijk? 542 00:24:14,960 --> 00:24:16,390 Heeft u vragen over dat? 543 00:24:16,390 --> 00:24:18,129 Ja. 544 00:24:18,129 --> 00:24:25,275 >> Publiek: Dus in het algemeen, u zal niet in staat te doen op x en ster 545 00:24:25,275 --> 00:24:27,135 x met dezelfde x. 546 00:24:27,135 --> 00:24:28,740 Is dat correct? 547 00:24:28,740 --> 00:24:31,800 Want als x een variabele, dan heb je 548 00:24:31,800 --> 00:24:35,980 te doen op x te krijgen dat het een pointer. 549 00:24:35,980 --> 00:24:40,810 Maar als x is een pointer, dan moet je Star x doen om de variabele te krijgen. 550 00:24:40,810 --> 00:24:43,240 >> Pulak Goyal: Ja, zodat de vraag was over wanneer 551 00:24:43,240 --> 00:24:45,750 gebruiken we een star-- bij je zou de ster te gebruiken, 552 00:24:45,750 --> 00:24:47,470 en als we gebruik maken van de ampersand, en kunnen we 553 00:24:47,470 --> 00:24:49,160 gebruiken met hetzelfde type variabele? 554 00:24:49,160 --> 00:24:51,810 Dus meestal als je, bijvoorbeeld een int x, 555 00:24:51,810 --> 00:24:55,170 zou je meestal gebruik maken van de ampersand aan het adres van dat. 556 00:24:55,170 --> 00:24:58,220 Omdat het niet maken zin om eerbied in x. 557 00:24:58,220 --> 00:25:04,220 Overwegende dat, als we hadden int ster x, zou je met behulp van dereferentie operatie 558 00:25:04,220 --> 00:25:07,910 omdat het geen zin zou maken te gebruiken op x in dat geval. 559 00:25:07,910 --> 00:25:09,582 Is dat zinvol? 560 00:25:09,582 --> 00:25:13,192 >> Publiek: Dus je kan niet en, en vervolgens een pointer? 561 00:25:13,192 --> 00:25:14,900 Pulak Goyal: Dus u technisch, eigenlijk 562 00:25:14,900 --> 00:25:16,870 kan het teken van een pointer te doen. 563 00:25:16,870 --> 00:25:18,984 Maar dat is buiten de toepassingsgebied van deze klasse. 564 00:25:18,984 --> 00:25:21,900 Voor de purpose-- voor uw jongens ' doeleinden, wanneer u pointers, 565 00:25:21,900 --> 00:25:25,191 u wilt de dereference operator de waarde die aan dat. 566 00:25:25,191 --> 00:25:27,380 En als je regelmatig hebt variabelen, zoals een int x, 567 00:25:27,380 --> 00:25:31,410 u wilt de ampersand gebruiken exploitant aan het adres van dat. 568 00:25:31,410 --> 00:25:31,910 OK? 569 00:25:31,910 --> 00:25:35,670 570 00:25:35,670 --> 00:25:38,850 >> OK, dus laten we eens kijken naar pointers en wat er onder de motorkap. 571 00:25:38,850 --> 00:25:42,640 Dus het eerste wat ik deed hier is de aangegeven int x gelijk aan 5. 572 00:25:42,640 --> 00:25:48,460 Het adres van deze variabele is 0x04, en de waarde 5. 573 00:25:48,460 --> 00:25:52,940 Dus laten we zien wat er gebeurt met de volgende regel. 574 00:25:52,940 --> 00:25:55,130 Dus nu verklaren wij een pointer. 575 00:25:55,130 --> 00:26:01,450 Zijn adres is 0x08 en de waarde het adres van x. 576 00:26:01,450 --> 00:26:05,220 Heeft dat zin om iedereen? 577 00:26:05,220 --> 00:26:06,507 Heeft u vragen over dat? 578 00:26:06,507 --> 00:26:09,130 579 00:26:09,130 --> 00:26:13,080 >> OK, en nu laten we zien wat gebeurt met de volgende regel. 580 00:26:13,080 --> 00:26:18,140 Dus met deze volgende regel, hebben we het adres van de kopie zijn 0x10, 581 00:26:18,140 --> 00:26:20,780 en bedraagt ​​5. 582 00:26:20,780 --> 00:26:23,570 Dus de reden waarom we kregen vijf is dat we zeiden, we dereferentie 583 00:26:23,570 --> 00:26:26,740 pointer, die we verklaarde een int ster. 584 00:26:26,740 --> 00:26:35,797 En zo went-- wanneer we dereferentie het, het zei, OK, wat er in de gleuf 0x04. 585 00:26:35,797 --> 00:26:36,630 En het ging om dat. 586 00:26:36,630 --> 00:26:40,785 En wat x een x0-- 0x04, en de waarde 5. 587 00:26:40,785 --> 00:26:41,660 Slaat dat ergens op? 588 00:26:41,660 --> 00:26:42,334 Ja? 589 00:26:42,334 --> 00:26:50,090 >> Publiek: Waarom is het adres van de kopie van slechts 4 bytes boven de x wijzer? 590 00:26:50,090 --> 00:26:52,318 >> Pulak Goyal: Ja, dit is een vergissing on-- 591 00:26:52,318 --> 00:26:55,304 >> CAMILLE REKHSON: Dus ja, herinner Dit is geschreven in hexadecimaal. 592 00:26:55,304 --> 00:26:56,220 Pulak Goyal: Oh, ja. 593 00:26:56,220 --> 00:26:58,615 CAMILLE REKHSON: Dus dit is eigenlijk 8 en 16 594 00:26:58,615 --> 00:27:00,960 omdat we zeiden dat, de wijzer, vergeet niet, 595 00:27:00,960 --> 00:27:05,330 in onze IO gaat 8 bytes lang. 596 00:27:05,330 --> 00:27:06,080 Pulak Goyal: Ja. 597 00:27:06,080 --> 00:27:09,160 598 00:27:09,160 --> 00:27:12,540 Dus gewoon om duidelijk te zijn, pointers zijn 8 bytes lang. 599 00:27:12,540 --> 00:27:14,160 Een int is 4 bytes. 600 00:27:14,160 --> 00:27:18,380 Dus de reden waarom wat sprong van 0x04 naar 0x08 601 00:27:18,380 --> 00:27:20,980 is omdat we moesten doe een sprong van 8 bytes. 602 00:27:20,980 --> 00:27:24,396 En dan voor-- sinds exemplaar is slechts een int, 603 00:27:24,396 --> 00:27:26,020 Het is 4 bytes, die de helft van 8 bytes. 604 00:27:26,020 --> 00:27:29,970 Dus we springen naar 0x10, dat is twee weg van 0x08. 605 00:27:29,970 --> 00:27:33,100 606 00:27:33,100 --> 00:27:34,570 Een andere vragen? 607 00:27:34,570 --> 00:27:36,850 OK, let's-- ja? 608 00:27:36,850 --> 00:27:39,245 >> Publiek: Waarom is niet de waarde van int kopie 609 00:27:39,245 --> 00:27:45,000 gewoon the-- waarom is het 5 in plaats van 0x04? 610 00:27:45,000 --> 00:27:46,270 >> Pulak Goyal: OK, waarom is het 5? 611 00:27:46,270 --> 00:27:51,600 OK, dus als the-- dus laten we eerst denken over dit in termen van soorten. 612 00:27:51,600 --> 00:27:55,600 Dus ik zeg int kopie is gelijk aan pointer ster. 613 00:27:55,600 --> 00:27:57,490 Dus wat is de aard van de pointer? 614 00:27:57,490 --> 00:27:59,310 Het is een int ster. 615 00:27:59,310 --> 00:28:03,850 En toen ik dereferentie dat, het type wordt een int. 616 00:28:03,850 --> 00:28:06,570 Dus wat we verwachten te slaan Hier is eigenlijk een int. 617 00:28:06,570 --> 00:28:07,965 Slaat dat ergens op? 618 00:28:07,965 --> 00:28:09,090 PUBLIEK: Tuurlijk, beetje. 619 00:28:09,090 --> 00:28:11,465 Pulak Goyal: Dus meestal wanneer je denkt in termen van soorten, 620 00:28:11,465 --> 00:28:15,607 het helpt je te begrijpen wat is het type de waarde die daar moet gaan. 621 00:28:15,607 --> 00:28:17,940 Dus je kunt meestal uitsluiten veel van deze veel voorkomende fouten 622 00:28:17,940 --> 00:28:21,790 door te denken in termen van soorten. 623 00:28:21,790 --> 00:28:23,612 Laat me gaan door middel van een beetje meer dia's. 624 00:28:23,612 --> 00:28:26,070 En we kunnen vragen bij krijgen het einde van de sectie aanwijzer. 625 00:28:26,070 --> 00:28:28,910 626 00:28:28,910 --> 00:28:32,290 OK, dus we hebben een buggy programma hier. 627 00:28:32,290 --> 00:28:35,460 En dat doet anyone-- kan iemand vertellen me wat is er mis met dit programma? 628 00:28:35,460 --> 00:28:39,000 629 00:28:39,000 --> 00:28:40,820 Juist, dus wat we verwacht hier te doen 630 00:28:40,820 --> 00:28:44,520 is-- wat we willen doen is neemt de variabele int x 631 00:28:44,520 --> 00:28:48,350 en draai het-- maken het gelijk 5 in plaats van 3 en vervolgens afdrukken dat. 632 00:28:48,350 --> 00:28:49,640 Maar dat gebeurt niet. 633 00:28:49,640 --> 00:28:50,950 Kan iemand mij vertellen waarom? 634 00:28:50,950 --> 00:28:51,934 Ja? 635 00:28:51,934 --> 00:28:54,840 >> Publiek: Als de functie to_five neemt x als het argument, 636 00:28:54,840 --> 00:28:58,130 wordt geen rekening X zelf, maar in plaats daarvan een kopie gemaakt, a, van het. 637 00:28:58,130 --> 00:29:00,115 En het vormt operaties op dat. 638 00:29:00,115 --> 00:29:02,614 Maar vanwege dat je niet veranderen de werkelijke waarde van x. 639 00:29:02,614 --> 00:29:03,970 Omdat je [onverstaanbaar]. 640 00:29:03,970 --> 00:29:07,950 >> Pulak Goyal: Rechts, rechts, dus toen we noemen 641 00:29:07,950 --> 00:29:10,100 de functie to_five, wat we doen is denken, 642 00:29:10,100 --> 00:29:12,550 geef me een kopie van de waarde voor die functie. 643 00:29:12,550 --> 00:29:16,010 Deze functie, dan gaat en het doen van een aantal manipulaties. 644 00:29:16,010 --> 00:29:21,260 Maar zodra het terugkeert, het is nu uit van de omvang van de belangrijkste functie hier. 645 00:29:21,260 --> 00:29:24,750 Zo x stilstaat, in feite, gelijk aan 3, en wij drukken 3. 646 00:29:24,750 --> 00:29:26,445 OK, dus laten we eens kijken hoe dit gebeurt. 647 00:29:26,445 --> 00:29:29,430 648 00:29:29,430 --> 00:29:31,180 >> OK, dus er is niets verklaard. 649 00:29:31,180 --> 00:29:34,490 Dan hier x gelijk aan 3. 650 00:29:34,490 --> 00:29:40,820 En nu is het is-- op positie twee, een nog niet in omvang. 651 00:29:40,820 --> 00:29:46,790 En nu gaan we naar drie plaatsen, waar neemt nu de waarde van 3. 652 00:29:46,790 --> 00:29:49,380 Om vier we nu wijzigen naar een 5. 653 00:29:49,380 --> 00:29:53,290 Maar nu, als we springen terug naar vijf, de print instructie, 654 00:29:53,290 --> 00:29:55,380 een is nu buiten bereik. 655 00:29:55,380 --> 00:29:57,450 En x steeds gelijk aan 3. 656 00:29:57,450 --> 00:29:59,700 Betekent dit zinvol voor iedereen? 657 00:29:59,700 --> 00:30:03,010 OK, dus laten we nu praten over hoe kunnen we pointers gebruiken om dit te bevestigen. 658 00:30:03,010 --> 00:30:06,140 Heeft iemand enig idee hoe we zou dit op te lossen door het gebruik van pointers? 659 00:30:06,140 --> 00:30:08,710 660 00:30:08,710 --> 00:30:11,490 >> PUBLIEK: U neemt in een int ster in plaats van een int voor to_five. 661 00:30:11,490 --> 00:30:12,530 >> Pulak Goyal:? Sorry, je kon spreken 662 00:30:12,530 --> 00:30:15,266 >> PUBLIEK: U neemt in een int ster in plaats van een int voor to_five. 663 00:30:15,266 --> 00:30:16,140 Pulak Goyal: OK, ja. 664 00:30:16,140 --> 00:30:20,250 Dus laten we pass-- plaats van passerende gewoon de waarde, laten doorgeven door verwijzing. 665 00:30:20,250 --> 00:30:21,690 Deze nieuwe functie, toch? 666 00:30:21,690 --> 00:30:25,210 En zo door het passeren van het adres in, we manipulaties kunnen doen op het adres. 667 00:30:25,210 --> 00:30:27,400 En dus zijn we eigenlijk, in feite het veranderen x. 668 00:30:27,400 --> 00:30:30,570 Dus laten we zien hoe dat werkt. 669 00:30:30,570 --> 00:30:32,950 >> OK, dus in dit voorbeeld hebben we opgelost. 670 00:30:32,950 --> 00:30:38,000 We hebben onze handtekening veranderd van to_five te nemen in een int 671 00:30:38,000 --> 00:30:40,540 ster in plaats van alleen een int hier. 672 00:30:40,540 --> 00:30:45,470 Dan zijn we dereference deze een en wijs 5 aan. 673 00:30:45,470 --> 00:30:48,090 En nu dit wil, in feite, print 5. 674 00:30:48,090 --> 00:30:51,960 Dus laten we zien hoe de stappen die hier werken. 675 00:30:51,960 --> 00:30:55,200 >> Dus met de eerste stap, er is nog niets verklaard. 676 00:30:55,200 --> 00:31:00,140 Dus hier, met de tweede stap, we hebben gezegd x gelijk aan 3, 677 00:31:00,140 --> 00:31:03,970 maar is nog steeds buiten bereik. 678 00:31:03,970 --> 00:31:08,100 Nu door de derde lijn, hebben we x is steeds gelijk aan drie. 679 00:31:08,100 --> 00:31:14,150 En nu, wij overgegaan in-- wat opgeslagen in een nu het adres van x. 680 00:31:14,150 --> 00:31:16,760 Heeft dat zin om iedereen, hoe we dat gekregen? 681 00:31:16,760 --> 00:31:21,470 Goed, we hebben de amper-- dat is hoe passeerden we een ampersand x om de functie 682 00:31:21,470 --> 00:31:23,040 to_five. 683 00:31:23,040 --> 00:31:30,330 En dan naar de volgende regel, wat we doen, is dat we een dereference. 684 00:31:30,330 --> 00:31:36,120 >> En door een dereferentie, zijn we in staat de waarde van x te veranderen van 3 tot 5. 685 00:31:36,120 --> 00:31:38,560 Omdat x woont op dat adres 0x12. 686 00:31:38,560 --> 00:31:42,440 687 00:31:42,440 --> 00:31:45,810 En dan, ten slotte, wanneer we weer terug naar de belangrijkste, 688 00:31:45,810 --> 00:31:50,570 hoewel dit een is nu uit scope, we hebben in feite veranderde x. 689 00:31:50,570 --> 00:31:51,570 En het is 5. 690 00:31:51,570 --> 00:31:55,160 Heeft u vragen over dit? 691 00:31:55,160 --> 00:31:56,036 Ja? 692 00:31:56,036 --> 00:31:58,185 >> Publiek: Kunt u mij vertellen wat de ampersand x was? 693 00:31:58,185 --> 00:32:00,004 Ik dacht ampersand was als EN. 694 00:32:00,004 --> 00:32:03,480 695 00:32:03,480 --> 00:32:07,210 >> Pulak Goyal: Ja, dus we maken gebruik van dezelfde symbool voor vele verschillende dingen. 696 00:32:07,210 --> 00:32:11,470 Dus hier, als je have-- in dit geval, als je, 697 00:32:11,470 --> 00:32:19,380 Ik guess-- dus in dit geval, wanneer je te maken hebt met pointers, 698 00:32:19,380 --> 00:32:23,640 wanneer u de ampersand vooraan van een int, een variabele int, of een char, 699 00:32:23,640 --> 00:32:28,609 of een stroom, wat je zegt is, geef mij het adres van deze. 700 00:32:28,609 --> 00:32:31,900 Maar wat je denkt, als anders zou u ampersand gebruikt wordt, laten we zeggen, 701 00:32:31,900 --> 00:32:33,180 in een if-statement. 702 00:32:33,180 --> 00:32:39,256 Je hebt een echte, en sommige variabelen dat evalueren wat Boolean, 703 00:32:39,256 --> 00:32:41,380 en een aantal andere variabelen dat sommige Boolean valideren 704 00:32:41,380 --> 00:32:42,880 en u wilt krijgen en de van. 705 00:32:42,880 --> 00:32:44,552 Dan zou je de ampersand gebruiken. 706 00:32:44,552 --> 00:32:47,510 SPEAKER 1: Ja, dus alleen vandaag, we hebben sprak over drie verschillende toepassingen 707 00:32:47,510 --> 00:32:48,250 van ampersand. 708 00:32:48,250 --> 00:32:51,040 We hebben twee ampersands, dat is wat Pulak net heeft beschreven. 709 00:32:51,040 --> 00:32:53,420 We hebben een ampersand, die is wat Camille beschreven 710 00:32:53,420 --> 00:32:54,897 eerder, één teken. 711 00:32:54,897 --> 00:32:56,685 En dat is voor bitwise AND. 712 00:32:56,685 --> 00:32:59,640 En merk op dat zowel de voorwaardelijke en-- of, sorry, 713 00:32:59,640 --> 00:33:04,180 de logische AND en de bitsgewijze EN, die twee nummers, toch? 714 00:33:04,180 --> 00:33:07,354 Het was iets ampersand ampersand iets, 715 00:33:07,354 --> 00:33:09,350 iets ampersand iets. 716 00:33:09,350 --> 00:33:13,862 Hier, als we gewoon ampersand iets, dat is dereferentie. 717 00:33:13,862 --> 00:33:15,830 >> Pulak Goyal: Ja, grote vraag. 718 00:33:15,830 --> 00:33:16,677 Ja. 719 00:33:16,677 --> 00:33:21,150 >> PUBLIEK: Waarom doet in lijn 5a en een ster geworden N / A? 720 00:33:21,150 --> 00:33:25,520 Waarom doen ze dit niet gewoon een soort behouden dezelfde waarden van de vorige regel? 721 00:33:25,520 --> 00:33:28,000 >> Pulak Goyal: Omdat we hebben de functie verlaten. 722 00:33:28,000 --> 00:33:30,894 En dus wat happens-- dus what-- nu zijn we 723 00:33:30,894 --> 00:33:33,060 buiten het toepassingsgebied van die functie, wat gebeurt er eigenlijk 724 00:33:33,060 --> 00:33:37,770 is deze verwijderd uit het geheugen. 725 00:33:37,770 --> 00:33:38,808 Ja. 726 00:33:38,808 --> 00:33:42,982 >> PUBLIEK: Tussen 3 of 4 sterren een gelijk 5. 727 00:33:42,982 --> 00:33:43,690 Pulak Goyal: Ja. 728 00:33:43,690 --> 00:33:45,575 Publiek: Wat betekent dat precies te duiden? 729 00:33:45,575 --> 00:33:46,950 Pulak Goyal: Wat betekent dat? 730 00:33:46,950 --> 00:33:47,380 Publiek: Ja. 731 00:33:47,380 --> 00:33:49,088 Pulak Goyal: Dus de vraag was, wat is 732 00:33:49,088 --> 00:33:52,300 dat-- wat je online doet als we zeggen, de ster is gelijk aan 5? 733 00:33:52,300 --> 00:33:55,210 Dus vergeet niet de ster van de dereference operator. 734 00:33:55,210 --> 00:33:58,640 Dus wanneer een, in dit geval is een aanwijzer. 735 00:33:58,640 --> 00:34:00,030 Het is een int ster. 736 00:34:00,030 --> 00:34:03,710 Dus toen we dereference een door met behulp van de ster, wat we zeggen 737 00:34:03,710 --> 00:34:11,250 is, naar welke wordt opgeslagen in het adres, opgeslagen in a-- dus take-- dus, 738 00:34:11,250 --> 00:34:13,280 nu, heeft een aantal adres daarin opgeslagen. 739 00:34:13,280 --> 00:34:19,920 Ga naar de plaats waar dat adres punten, en nu veranderen wat dat is tot vijf. 740 00:34:19,920 --> 00:34:20,420 Ja. 741 00:34:20,420 --> 00:34:23,390 >> Publiek: Kunt u zeggen in eenvoudiger bewoordingen? 742 00:34:23,390 --> 00:34:27,360 Verander het adres van een tot 5. 743 00:34:27,360 --> 00:34:31,070 >> Pulak Goyal: We zijn niet veranderen van het adres van een tot 5. 744 00:34:31,070 --> 00:34:36,340 A heeft een aantal adres daarin, dat de adres van de variabele rente. 745 00:34:36,340 --> 00:34:39,570 En dus wat we zeggen als we dereferentie is, 746 00:34:39,570 --> 00:34:42,630 nu willen we change-- we nu referencing 747 00:34:42,630 --> 00:34:45,135 het belang van de variabele direct. 748 00:34:45,135 --> 00:34:48,499 Is dat zinvol? 749 00:34:48,499 --> 00:34:52,280 >> SPEAKER 1: Een andere manier om na te denken ervan wordt gaan-- dus een adres. 750 00:34:52,280 --> 00:34:55,310 De ster zegt naar die aan te pakken en te kijken naar de waarde ervan. 751 00:34:55,310 --> 00:34:58,000 En nu zet de waarde op 5. 752 00:34:58,000 --> 00:35:00,920 Dus het zegt, ga dan naar de adres x, waarvan 753 00:35:00,920 --> 00:35:05,720 gaat worden wat er opgeslagen in een, en verander het naar 5. 754 00:35:05,720 --> 00:35:06,470 Pulak Goyal: Ja? 755 00:35:06,470 --> 00:35:10,817 Publiek: Dus de positie is waar de wijzer gaat, het adres. 756 00:35:10,817 --> 00:35:14,270 Maar de waarde is een toegewezen waarde op basis van het adres. 757 00:35:14,270 --> 00:35:15,020 Pulak Goyal: Ja. 758 00:35:15,020 --> 00:35:18,076 759 00:35:18,076 --> 00:35:19,367 Een andere vragen over dit? 760 00:35:19,367 --> 00:35:22,774 761 00:35:22,774 --> 00:35:23,940 Publiek: Ik heb een vraag. 762 00:35:23,940 --> 00:35:25,664 Pulak Goyal: Ja, sorry. 763 00:35:25,664 --> 00:35:30,324 Publiek: Dus als je zo store-- Als je zegt [onverstaanbaar] a. 764 00:35:30,324 --> 00:35:31,032 Pulak Goyal: Ja. 765 00:35:31,032 --> 00:35:34,448 Publiek: Moet je opslaan van de x met een ampersand? 766 00:35:34,448 --> 00:35:37,376 Waarom kun je niet gewoon zeggen x voordat je int [onverstaanbaar]? 767 00:35:37,376 --> 00:35:40,562 768 00:35:40,562 --> 00:35:41,270 Pulak Goyal: So-- 769 00:35:41,270 --> 00:35:42,090 PUBLIEK: [onverstaanbaar]. 770 00:35:42,090 --> 00:35:43,673 Pulak Goyal: Dus is uw question-- oh. 771 00:35:43,673 --> 00:35:47,160 772 00:35:47,160 --> 00:35:51,300 Dus je vraag is, waarom kan niet we-- om de functie to_five, kan niet waarom we 773 00:35:51,300 --> 00:35:52,590 net voorbij een x, toch? 774 00:35:52,590 --> 00:35:53,570 >> Publiek: Recht. 775 00:35:53,570 --> 00:35:59,570 >> Pulak Goyal: OK, ja, dus dit opnieuw gaat terug naar onze discussie over de verschillende soorten. 776 00:35:59,570 --> 00:36:06,080 Dus de functie to_five is nu verwacht een type int ster. 777 00:36:06,080 --> 00:36:07,660 Dus wat is het type van x? 778 00:36:07,660 --> 00:36:09,800 X is gewoon een int. 779 00:36:09,800 --> 00:36:13,530 Maar wat deze functie verwacht is een int ster. 780 00:36:13,530 --> 00:36:16,910 Verwacht dus een variabele die heeft een adres opgeslagen in het. 781 00:36:16,910 --> 00:36:20,250 Dus dat is hoe u-- de gestelde ampersand, en dus dat is 782 00:36:20,250 --> 00:36:22,560 hoe we pas in de adres, dat is now-- 783 00:36:22,560 --> 00:36:25,120 en interpreteert dat als een int ster, ja. 784 00:36:25,120 --> 00:36:26,700 Grote vraag. 785 00:36:26,700 --> 00:36:29,300 Andere vragen over dit? 786 00:36:29,300 --> 00:36:29,800 OK, cool. 787 00:36:29,800 --> 00:36:32,870 788 00:36:32,870 --> 00:36:37,020 >> OK, dus laten we nu praten over pointer rekenkunde. 789 00:36:37,020 --> 00:36:40,050 Dus hier, optellen en aftrekken i past de aanwijzer 790 00:36:40,050 --> 00:36:43,950 door i keer zo groot het type pointer bytes. 791 00:36:43,950 --> 00:36:46,170 Dus laten we eens kijken hoe dat eruit ziet. 792 00:36:46,170 --> 00:36:49,640 Dus hier hebben we verklaard int x gelijk aan een 5. 793 00:36:49,640 --> 00:36:56,120 En nu gaan we naar een pointer verklaren y, en pas in het adres van x daar. 794 00:36:56,120 --> 00:36:58,910 Dus hebben we dat. 795 00:36:58,910 --> 00:37:01,005 SOx wordt opgeslagen op 0x04. 796 00:37:01,005 --> 00:37:03,960 Nu y gelijk aan die. 797 00:37:03,960 --> 00:37:12,260 En kan iemand mij vertellen wat zij denken er zal gebeuren als we dat doen y plus is gelijk aan 1? 798 00:37:12,260 --> 00:37:19,100 799 00:37:19,100 --> 00:37:19,771 Ja? 800 00:37:19,771 --> 00:37:24,010 >> Publiek: Zal ​​het veranderen naar 0 tijden 0 8? 801 00:37:24,010 --> 00:37:25,342 >> Pulak Goyal: Size en Motortype- 802 00:37:25,342 --> 00:37:27,789 >> PUBLIEK: je beweegt het adres. 803 00:37:27,789 --> 00:37:29,080 Pulak Goyal: Ja, het was-- ja. 804 00:37:29,080 --> 00:37:31,130 Zo waar. 805 00:37:31,130 --> 00:37:33,110 Dus het zal veranderen in 0x08. 806 00:37:33,110 --> 00:37:38,750 En because-- dus zou je dit gebruiken formule 1 keer de grootte van de aanwijzer 807 00:37:38,750 --> 00:37:42,354 en de wijzers zijn van omvang-- 808 00:37:42,354 --> 00:37:44,050 >> [STUDENTEN Murmur] 809 00:37:44,050 --> 00:37:45,190 >> Pulak Goyal: Recht. 810 00:37:45,190 --> 00:37:46,150 >> [STUDENTEN Murmur] 811 00:37:46,150 --> 00:37:49,230 >> SPEAKER 1: Dus het type dat de wijzer to-- 812 00:37:49,230 --> 00:37:51,862 >> Pulak Goyal: Is, ja, ja, dat is 4 bytes. 813 00:37:51,862 --> 00:37:53,930 >> SPEAKER 1: Dus ints zijn 4 bytes. 814 00:37:53,930 --> 00:38:01,260 >> Pulak Goyal: Dus als we a-- had laten zeggen dat we verklaard, denk ik, een char. 815 00:38:01,260 --> 00:38:06,830 Wat zou dus dat-- laten we zeggen dat we hebben char x gelijk aan een of iets dergelijks. 816 00:38:06,830 --> 00:38:14,400 En we hadden het adres van die in 0x04, wat y zou plus is gelijk aan 1 nu doen? 817 00:38:14,400 --> 00:38:14,960 Sorry, wat? 818 00:38:14,960 --> 00:38:16,099 >> Publiek: 0x05. 819 00:38:16,099 --> 00:38:17,140 Pulak Goyal: 0x05, rechts. 820 00:38:17,140 --> 00:38:18,520 Heeft iedereen dat? 821 00:38:18,520 --> 00:38:20,212 OK, en nu laten we zeggen dat het een float. 822 00:38:20,212 --> 00:38:20,962 Wat zou er gebeuren? 823 00:38:20,962 --> 00:38:25,210 824 00:38:25,210 --> 00:38:26,130 Iedereen? 825 00:38:26,130 --> 00:38:28,066 Dus praalwagens zijn hoeveel bytes? 826 00:38:28,066 --> 00:38:28,860 >> Publiek: 4 bytes. 827 00:38:28,860 --> 00:38:29,651 >> Pulak Goyal: Recht. 828 00:38:29,651 --> 00:38:32,661 Dus het zou hetzelfde als dit zijn. 829 00:38:32,661 --> 00:38:33,160 Koel. 830 00:38:33,160 --> 00:38:36,230 831 00:38:36,230 --> 00:38:40,180 OK, nu laten we praten over pointers en arrays. 832 00:38:40,180 --> 00:38:44,210 Dus je zag dit op het previous twee p sets, 833 00:38:44,210 --> 00:38:48,570 waar we zo arrays kunnen treat-- en pointers zijn niet hetzelfde. 834 00:38:48,570 --> 00:38:51,170 Maar we kunnen arrays behandelen als pointers. 835 00:38:51,170 --> 00:38:55,550 Dus hier hebben we deze array Hier, die drie sleuven heeft. 836 00:38:55,550 --> 00:38:57,570 In de eerste slot-- we één, twee en drie. 837 00:38:57,570 --> 00:39:00,930 >> Dus als we-- zodat we kunnen toewijzen dat door te zeggen, we hebben array, 838 00:39:00,930 --> 00:39:02,080 dereference dat. 839 00:39:02,080 --> 00:39:04,579 En toen we dereferentie dat, wat we eigenlijk aan het doen 840 00:39:04,579 --> 00:39:05,910 verwijst naar dezelfde sleuf. 841 00:39:05,910 --> 00:39:09,230 Dus ster-array is gelijk aan 1. 842 00:39:09,230 --> 00:39:11,020 We kon- hoe kon we schrijven dat-- wat 843 00:39:11,020 --> 00:39:13,404 een alternatieve manier kunnen we schrijven dat? 844 00:39:13,404 --> 00:39:14,840 >> PUBLIEK: Array 0 gelijk 1. 845 00:39:14,840 --> 00:39:17,100 >> Pulak Goyal: Precies, doet iedereen dat? 846 00:39:17,100 --> 00:39:18,320 Dus hetzelfde met hier. 847 00:39:18,320 --> 00:39:24,060 Dus toen hebben we scala plus 1, doen-- we zo even-- 848 00:39:24,060 --> 00:39:28,890 onthouden met rekenen dat we net over gesproken, als we dat doen plus 1 849 00:39:28,890 --> 00:39:32,120 of beweeg het over met 4 bytes, rechts. 850 00:39:32,120 --> 00:39:33,170 Heeft iedereen dat? 851 00:39:33,170 --> 00:39:35,753 En die kant, als we dereferentie dat, kunnen we stellen dat voor 2. 852 00:39:35,753 --> 00:39:37,710 En dat is hoe we stellen het volgende blok 2. 853 00:39:37,710 --> 00:39:41,640 En dus een alternatieve manier om te schrijven dat zou ook scala beugel zijn 854 00:39:41,640 --> 00:39:44,436 0 beugel gelijk aan 1. 855 00:39:44,436 --> 00:39:47,070 >> Publiek: Heeft u de haakjes nodig? 856 00:39:47,070 --> 00:39:50,840 >> Pulak Goyal: Ja, omdat je dereferentie de totale hoeveelheid 857 00:39:50,840 --> 00:39:53,460 reeks plus 1. 858 00:39:53,460 --> 00:39:56,829 OK, en hetzelfde voor serie plus 2. 859 00:39:56,829 --> 00:39:57,870 Heeft u vragen over dit? 860 00:39:57,870 --> 00:39:58,369 Ja. 861 00:39:58,369 --> 00:40:01,340 Publiek: Dus array is automatisch ingesteld op 0? 862 00:40:01,340 --> 00:40:03,054 >> Pulak Goyal: Array is-- sorry, wat? 863 00:40:03,054 --> 00:40:03,962 >> Publiek: Array is 0. 864 00:40:03,962 --> 00:40:07,140 Het adres van de array is gewoon 0. 865 00:40:07,140 --> 00:40:10,200 >> Pulak Goyal: Dus de vraag was, is het adres van de array gewoon 0? 866 00:40:10,200 --> 00:40:11,950 Dus, nee, array heeft een aantal adres. 867 00:40:11,950 --> 00:40:14,930 Dus toen we dereferentie het, that's-- zodat je kunt denken about-- 868 00:40:14,930 --> 00:40:18,230 letterlijk als een pointer wijst aan het begin van een array. 869 00:40:18,230 --> 00:40:19,390 Dus dat heeft een aantal adres. 870 00:40:19,390 --> 00:40:20,580 We weten niet wat het is. 871 00:40:20,580 --> 00:40:24,170 Maar toen we dereference, we weten dat het begin van de matrix. 872 00:40:24,170 --> 00:40:25,980 En dus toen we verplaatsen door 1, zijn we gewoon bewegen 873 00:40:25,980 --> 00:40:29,090 ten opzichte wanneer dat adres was. 874 00:40:29,090 --> 00:40:30,480 Een andere vragen? 875 00:40:30,480 --> 00:40:31,419 Ja? 876 00:40:31,419 --> 00:40:35,559 >> Publiek: Dus als je scala beugel plus 1-- 877 00:40:35,559 --> 00:40:37,350 Pulak Goyal: Sorry, Ik-- kon je spreken? 878 00:40:37,350 --> 00:40:41,174 Publiek: Ja, als je dat doet scala beugel [onverstaanbaar]. 879 00:40:41,174 --> 00:40:45,227 Dus dan als je de pointer-- 880 00:40:45,227 --> 00:40:46,810 Pulak Goyal: Sorry, ik kan je niet horen. 881 00:40:46,810 --> 00:40:48,100 Kunt u het nog een keer zeggen? 882 00:40:48,100 --> 00:40:49,470 >> PUBLIEK: Je bent OK. 883 00:40:49,470 --> 00:40:50,870 >> Pulak Goyal: OK, sorry. 884 00:40:50,870 --> 00:40:51,420 OK, cool. 885 00:40:51,420 --> 00:40:52,200 Any-- ja. 886 00:40:52,200 --> 00:40:55,710 Dus als je gaat in de serie beugel 3-- 887 00:40:55,710 --> 00:40:56,570 >> Pulak Goyal: Ja. 888 00:40:56,570 --> 00:40:59,832 >> PUBLIEK: --isn't er-- zou niet Het vier plekken zoals 0, 1, 2 en 3? 889 00:40:59,832 --> 00:41:02,630 Waarom is het niet opstelling 2 int? 890 00:41:02,630 --> 00:41:07,850 >> Pulak Goyal: Nee, dus gewoon de conventie van C is-- toen we verklaren de array, 891 00:41:07,850 --> 00:41:12,010 we-- het aantal dat we daar te zetten is hoeveel slots we willen. 892 00:41:12,010 --> 00:41:16,970 Maar de indices van de array eigenlijk serie 0, serie 1 en serie 2. 893 00:41:16,970 --> 00:41:19,780 Dus het is gewoon de conventie over hoe we verklaren arrays. 894 00:41:19,780 --> 00:41:20,880 Ja, nog andere vragen? 895 00:41:20,880 --> 00:41:21,380 Ja. 896 00:41:21,380 --> 00:41:23,750 Publiek: Dus we zijn nog steeds praten over pointers, toch? 897 00:41:23,750 --> 00:41:24,500 Pulak Goyal: Ja. 898 00:41:24,500 --> 00:41:28,600 Publiek: Kunt u nog steeds doen ster voor matrix 0 is gelijk aan 1? 899 00:41:28,600 --> 00:41:32,870 Pulak Goyal: Nee, nee, so-- OK, dus de vraag was kon 900 00:41:32,870 --> 00:41:37,370 je gewoon ster scala beugel nul, en dat gelijk is aan 1. 901 00:41:37,370 --> 00:41:40,000 Dus, nee, wat we zeggen hier is dat we kunnen think-- 902 00:41:40,000 --> 00:41:42,600 kunnen we arrays behandelen pointers. 903 00:41:42,600 --> 00:41:44,970 Dus we have-- wat we gezegde is hebben we twee manieren 904 00:41:44,970 --> 00:41:47,370 nu verwijzen naar hetzelfde blok. 905 00:41:47,370 --> 00:41:52,270 Dus doing-- als je matrix nul, het type dat nu een int. 906 00:41:52,270 --> 00:41:55,264 En als je de ster te nemen dat, je krijgt een ongeldige zaak. 907 00:41:55,264 --> 00:41:57,680 Dus wat we hier zeggen, is Er zijn twee alternatieve manieren 908 00:41:57,680 --> 00:41:59,100 verwijzen naar hetzelfde blok. 909 00:41:59,100 --> 00:42:01,860 U kunt dit doen scala beugel 0 gelijk is aan 1. 910 00:42:01,860 --> 00:42:06,420 Of u kunt dereferentie doen matrix, en hebben die gelijk is aan 0. 911 00:42:06,420 --> 00:42:08,621 Dus gewoon twee manieren hetzelfde te doen. 912 00:42:08,621 --> 00:42:09,120 Ja. 913 00:42:09,120 --> 00:42:15,270 >> Publiek: Waarom is het niet grootte van int 1 tot to-- voegen 914 00:42:15,270 --> 00:42:17,650 >> Pulak Goyal: Grootte van int 1. 915 00:42:17,650 --> 00:42:19,900 >> Publiek: Want dat is het verplaatsen van een korting. 916 00:42:19,900 --> 00:42:23,620 >> Pulak Goyal: Want dat is alleen de manier waarop C werkt. 917 00:42:23,620 --> 00:42:26,460 Het is gewoon de manier wijzer rekenkunde gedefinieerd. 918 00:42:26,460 --> 00:42:27,854 Het zal de wijzer te nemen. 919 00:42:27,854 --> 00:42:30,020 En dan wat je toevoegen om het, het zal vermenigvuldigen dat 920 00:42:30,020 --> 00:42:34,770 door de grootte van welke de wijzer winkel is, ja. 921 00:42:34,770 --> 00:42:35,480 Ja. 922 00:42:35,480 --> 00:42:39,595 >> Publiek: Dus je zegt dat we kunnen behandelen pointers en arrays hetzelfde, 923 00:42:39,595 --> 00:42:40,720 maar dat ze verschillende. 924 00:42:40,720 --> 00:42:41,950 Dus wat maakt ze anders? 925 00:42:41,950 --> 00:42:45,070 Wat kunnen we niet doen een, maar het andere niet? 926 00:42:45,070 --> 00:42:52,390 >> Pulak Goyal: Voor de toepassing van dit klasse, ik denk it's-- wat doen u-- 927 00:42:52,390 --> 00:42:56,270 >> SPEAKER 1: Dus, we-- OK, dus, voor Bijvoorbeeld, als je geheugen toewijzen 928 00:42:56,270 --> 00:42:59,680 en je hebt een pointer naar een integer, bijvoorbeeld. 929 00:42:59,680 --> 00:43:01,890 Als u geprobeerd om te beginnen doet pointer rekenkunde 930 00:43:01,890 --> 00:43:05,890 en verder gaan dan de hoeveelheid geheugen die u toegewezen, zou je tegenkomen fouten. 931 00:43:05,890 --> 00:43:08,250 We weten met arrays, we zeggen van tevoren, OK, ik 932 00:43:08,250 --> 00:43:11,400 wil dit wezen allocate-- zegt, ik wil toewijzen 933 00:43:11,400 --> 00:43:13,490 genoeg ruimte voor drie getallen. 934 00:43:13,490 --> 00:43:17,820 En nu kunnen we het geheugen behandelen alsof we hebben alle drie van die getallen. 935 00:43:17,820 --> 00:43:19,460 Doet dat soort make sense? 936 00:43:19,460 --> 00:43:22,042 >> Pulak Goyal: Ja. 937 00:43:22,042 --> 00:43:22,542 Ja. 938 00:43:22,542 --> 00:43:24,778 >> Publiek: Dus een ster matrix, dat het toewijzen 1 939 00:43:24,778 --> 00:43:26,657 de 0-index van de array? 940 00:43:26,657 --> 00:43:27,365 Pulak Goyal: Ja. 941 00:43:27,365 --> 00:43:31,160 942 00:43:31,160 --> 00:43:34,439 >> Publiek: Dus, wat is na de komende twee lijnen in termen van the-- I 943 00:43:34,439 --> 00:43:36,980 begrijpen dat je probeert naar pointer rekenkundige hier te gebruiken, 944 00:43:36,980 --> 00:43:39,355 maar nogmaals, ik begrijp het niet wat pointer rekenkunde is. 945 00:43:39,355 --> 00:43:43,869 Zodat de reeks plus 1, je bent zeggen dat je nu bent 946 00:43:43,869 --> 00:43:47,540 gaat te willen om over te praten de eerste index in de array. 947 00:43:47,540 --> 00:43:50,050 >> Pulak Goyal: Recht, en zo de reden dat werkt is array, 948 00:43:50,050 --> 00:43:52,970 Hier kunnen we van denken als een int ster. 949 00:43:52,970 --> 00:43:56,110 En dus toen we wijzer rekenkundige op het, denk aan de formule, waar 950 00:43:56,110 --> 00:43:59,020 we the-- ik denk dat wat het huidige adres, 951 00:43:59,020 --> 00:44:02,100 en toen we voegen 1 om het, we eigenlijk 952 00:44:02,100 --> 00:44:06,620 vermenigvuldig 1 door de grootte van het ding we manipuleren. 953 00:44:06,620 --> 00:44:09,090 Dus in dit geval, de grootte van een int. 954 00:44:09,090 --> 00:44:11,634 En dan gaan we er doorsturen door dat veel. 955 00:44:11,634 --> 00:44:14,419 >> SPEAKER 1: Dus pretenderen Je hebt B-array ster. 956 00:44:14,419 --> 00:44:15,335 Pulak Goyal: OK, ja. 957 00:44:15,335 --> 00:44:16,005 SPEAKER 1: Met je hand. 958 00:44:16,005 --> 00:44:16,505 Ga hier. 959 00:44:16,505 --> 00:44:18,350 Pulak Goyal: Of ik kan gewoon-- ja. 960 00:44:18,350 --> 00:44:23,660 Dus hier-- OK, dus scala aan het beginnen, is gewoon hier. 961 00:44:23,660 --> 00:44:29,155 Dus toen we dereferentie array, waren we alleen over het eerste blok in. 962 00:44:29,155 --> 00:44:36,620 Maar nu wanneer ik reeks plus 1 te doen, dat is-- dat pijl is nu hier. 963 00:44:36,620 --> 00:44:38,250 Is dat zinvol? 964 00:44:38,250 --> 00:44:46,690 Juist, want dit blok omvang int die 4 bytes. 965 00:44:46,690 --> 00:44:53,540 En ja, wat we doen is dat we bewegende die wijzer door 4 bytes voorbij. 966 00:44:53,540 --> 00:44:56,080 Wanneer we rekenen doen op, het zal altijd 967 00:44:56,080 --> 00:44:59,730 verplaatsen in stappen van 4 bytes. 968 00:44:59,730 --> 00:45:01,902 Want dit is als een int ster. 969 00:45:01,902 --> 00:45:04,970 Slaat dat ergens op? 970 00:45:04,970 --> 00:45:05,470 OK. 971 00:45:05,470 --> 00:45:07,770 >> Publiek: Dus de dingen die in de array waren 5 bytes, zouden we het te verplaatsen 5 bytes-- 972 00:45:07,770 --> 00:45:10,853 >> Pulak Goyal: Rechts, dus als we een char ster, zouden we het te verplaatsen met slechts 1 byte. 973 00:45:10,853 --> 00:45:13,670 Dus in het geval van char sterren, het zou gewoon verplaatsen overgenomen door 1. 974 00:45:13,670 --> 00:45:15,420 PUBLIEK: Om het te krijgen naast je een ster nodig. 975 00:45:15,420 --> 00:45:18,099 Pulak Goyal: Ja, ja, doet dat zinvol? 976 00:45:18,099 --> 00:45:19,890 SPEAKER 1: We kunnen chatten over later meer. 977 00:45:19,890 --> 00:45:21,530 Pulak Goyal: Ja, ja, zeker. 978 00:45:21,530 --> 00:45:23,214 OK, cool. 979 00:45:23,214 --> 00:45:24,630 Laten we verder gaan naar de volgende sectie. 980 00:45:24,630 --> 00:45:27,182 981 00:45:27,182 --> 00:45:28,140 SPEAKER 1: Oh, OK cool. 982 00:45:28,140 --> 00:45:29,205 Ja dat ben ik. 983 00:45:29,205 --> 00:45:30,330 Oké, geweldig. 984 00:45:30,330 --> 00:45:35,064 OK, cool, dus nu zijn we op een beetje meer algemene informatie over het geheugen. 985 00:45:35,064 --> 00:45:37,730 Ook ik waardeer het feit dat ze waren vrij snel gaan. 986 00:45:37,730 --> 00:45:40,230 Het is veel materiaal te krijgen door middel van in een uur en een half. 987 00:45:40,230 --> 00:45:42,880 Maar als er sprake is van onderwerpen die u willen meer diepgaande gaan in, 988 00:45:42,880 --> 00:45:44,630 we gaan te hebben kantooruren deze week 989 00:45:44,630 --> 00:45:46,340 waar u kunt chatten met ons een op een. 990 00:45:46,340 --> 00:45:49,240 Of je kan gewoon komen op de beëindigen en zullen we praten over dingen. 991 00:45:49,240 --> 00:45:52,130 En zoals altijd, het gevoel vrij om vragen te stellen. 992 00:45:52,130 --> 00:45:52,695 Geweldig. 993 00:45:52,695 --> 00:45:55,820 Dus hier is ons beeld van het geheugen dat we hebben gezien in collegezaal een miljard keer. 994 00:45:55,820 --> 00:45:58,610 En we weten dat deze stapel groeit vanaf de onderkant 995 00:45:58,610 --> 00:46:00,214 en de hoop groeit naar beneden. 996 00:46:00,214 --> 00:46:03,380 En wat is het verschil tussen de dingen dat we blijven op de hoop en de dingen 997 00:46:03,380 --> 00:46:05,981 dat we blijven op de stapel? 998 00:46:05,981 --> 00:46:07,397 Iemand gooit iets daarbuiten. 999 00:46:07,397 --> 00:46:10,806 1000 00:46:10,806 --> 00:46:11,780 Ja. 1001 00:46:11,780 --> 00:46:14,215 >> Publiek: Is het stapelen voor dingen die alleen zijn 1002 00:46:14,215 --> 00:46:18,095 vergankelijk variabelen die we gewoon verklaren met behulp van bepaalde functies? 1003 00:46:18,095 --> 00:46:19,220 SPEAKER 1: Mooie, ja. 1004 00:46:19,220 --> 00:46:23,007 Dus elke tijd waar, laten we zeggen dat we in een functie, 1005 00:46:23,007 --> 00:46:24,590 en we hebben slechts enkele lokale variabelen. 1006 00:46:24,590 --> 00:46:26,214 Die zullen eindigen op de stapel. 1007 00:46:26,214 --> 00:46:30,020 Als, in plaats daarvan, malloc noemen we en eigenlijk het geheugen toe te wijzen, 1008 00:46:30,020 --> 00:46:32,290 die altijd afkomstig vanuit de heap. 1009 00:46:32,290 --> 00:46:35,100 Dus ja Cool? 1010 00:46:35,100 --> 00:46:38,672 >> En dus niet vergeten dat alle geheugen dat u te wijzen met behulp van malloc, 1011 00:46:38,672 --> 00:46:40,130 dat gaat eindigen op de heap. 1012 00:46:40,130 --> 00:46:42,019 En als je vergeet vrij is, de computer 1013 00:46:42,019 --> 00:46:43,810 niet van plan om te weten dat je klaar bent met het. 1014 00:46:43,810 --> 00:46:45,560 Dus het is gewoon te hangen er in het geheugen. 1015 00:46:45,560 --> 00:46:47,412 En je in wezen bent lekken dat het geheugen. 1016 00:46:47,412 --> 00:46:48,120 Je verliest het. 1017 00:46:48,120 --> 00:46:51,840 Omdat je nooit de computer verteld, hey ik ben klaar met het gebruik ervan, voel je vrij om te gebruiken, 1018 00:46:51,840 --> 00:46:53,632 zet andere dingen zijn er. 1019 00:46:53,632 --> 00:46:54,470 Koel. 1020 00:46:54,470 --> 00:46:55,928 Heeft u vragen daar? 1021 00:46:55,928 --> 00:46:56,428 Ja. 1022 00:46:56,428 --> 00:46:58,808 >> Publiek: Dus wat voor soort geheugen is stapel? 1023 00:46:58,808 --> 00:46:59,974 Niet dynamische voer, gedelegeerd? 1024 00:46:59,974 --> 00:47:01,200 Hoe zou je het noemen? 1025 00:47:01,200 --> 00:47:03,870 >> SPEAKER 1: Tuurlijk, dus je kon denk dat het als lokale variabelen. 1026 00:47:03,870 --> 00:47:10,137 Eigenlijke gesprekken naar functies gaan stapelen. 1027 00:47:10,137 --> 00:47:10,720 Nog iets? 1028 00:47:10,720 --> 00:47:11,220 Ja? 1029 00:47:11,220 --> 00:47:14,627 Publiek: Hoe doe je gratis het geheugen toegevoegd aan the-- 1030 00:47:14,627 --> 00:47:17,710 SPEAKER 1: Tuurlijk, dus als je toewijzen geheugen op de heap, malloc bellen. 1031 00:47:17,710 --> 00:47:20,543 En dus dan dat geeft je weer een pointer sommige adres in het geheugen. 1032 00:47:20,543 --> 00:47:22,630 Dus zeg je dat pointer genoemd, toch? 1033 00:47:22,630 --> 00:47:24,970 Dan moet je gewoon zeggen vrij wijzer. 1034 00:47:24,970 --> 00:47:27,351 En dat bevrijdt het geheugen. 1035 00:47:27,351 --> 00:47:27,850 Koel. 1036 00:47:27,850 --> 00:47:28,660 Andere vragen? 1037 00:47:28,660 --> 00:47:28,880 Ja. 1038 00:47:28,880 --> 00:47:30,838 >> Publiek: Wat doet dynamisch toegewezen betekenen? 1039 00:47:30,838 --> 00:47:32,345 1040 00:47:32,345 --> 00:47:35,381 >> SPEAKER 1: dynamisch toegewezen middelen in de loop van het programma. 1041 00:47:35,381 --> 00:47:37,630 Dus als je malloc bellen het midden van uw programma, 1042 00:47:37,630 --> 00:47:40,510 aan het begin van het programma, er is geen geheugen toegewezen. 1043 00:47:40,510 --> 00:47:42,600 En als de computer stap door die code, 1044 00:47:42,600 --> 00:47:44,280 het gaat om het geheugen toe te wijzen. 1045 00:47:44,280 --> 00:47:46,507 Dus dat is wat we bedoelen met dynamisch. 1046 00:47:46,507 --> 00:47:47,090 Goede vraag. 1047 00:47:47,090 --> 00:47:48,309 Ja? 1048 00:47:48,309 --> 00:47:50,809 Publiek: Als u definieert een array met de vierkante haken, 1049 00:47:50,809 --> 00:47:54,154 doet dat nog steeds [onverstaanbaar]? 1050 00:47:54,154 --> 00:47:55,570 SPEAKER 1: Dat is een goede vraag. 1051 00:47:55,570 --> 00:48:00,320 Ik denk dat als je een array toe te wijzen, het eigenlijk zet het op de stapel. 1052 00:48:00,320 --> 00:48:03,008 Ik ben niet positief over dat, dus me niet citeren. 1053 00:48:03,008 --> 00:48:04,430 >> Luidspreker 2: Ik denk het-- ja Het zet het op de stapel. 1054 00:48:04,430 --> 00:48:05,763 >> SPEAKER 1: Zet het op de stapel. 1055 00:48:05,763 --> 00:48:07,044 OK, cool, bevestigd. 1056 00:48:07,044 --> 00:48:07,710 Andere vragen? 1057 00:48:07,710 --> 00:48:08,030 Ja? 1058 00:48:08,030 --> 00:48:10,946 >> Publiek: Als je malloc delegeren, doet niet automatisch op de computer 1059 00:48:10,946 --> 00:48:12,910 geheugen toewijzen voor variabelen? 1060 00:48:12,910 --> 00:48:14,660 SPEAKER 1: Ja, voor uw lokale variabelen, 1061 00:48:14,660 --> 00:48:16,724 automatisch zet geheugen op de stack. 1062 00:48:16,724 --> 00:48:18,640 Publiek: Dus wat is het punt van het gebruik malloc? 1063 00:48:18,640 --> 00:48:19,840 SPEAKER 1: Wat is het punt van het gebruik malloc? 1064 00:48:19,840 --> 00:48:22,850 Zo zagen we een heleboel voorbeelden, zoals, bijvoorbeeld, met behulp van swap, 1065 00:48:22,850 --> 00:48:25,690 waar we willen de omvang van variabele te zijn wat 1066 00:48:25,690 --> 00:48:27,940 dan alleen de functie oproep. 1067 00:48:27,940 --> 00:48:29,875 En we willen iets dat we rond kunnen passeren 1068 00:48:29,875 --> 00:48:31,750 en dat we toegang uit verschillende plaatsen. 1069 00:48:31,750 --> 00:48:33,791 Dat is waar we zouden willen zet geheugen op de heap. 1070 00:48:33,791 --> 00:48:37,835 Zodat al deze verschillende functies kunt openen. 1071 00:48:37,835 --> 00:48:40,510 >> Publiek: Kun je uitleggen? 1072 00:48:40,510 --> 00:48:44,770 >> SPEAKER 1: Dus een optie is-- zodat de vraag was, kunnen we gewoon allocate-- 1073 00:48:44,770 --> 00:48:47,660 sorry, kunnen we verklaren een globale variabele wezen. 1074 00:48:47,660 --> 00:48:48,560 Dat is een optie. 1075 00:48:48,560 --> 00:48:50,893 Maar veel van die, die hebben de neiging om echt rommelig. 1076 00:48:50,893 --> 00:48:52,847 En we in het algemeen denken van die zo slecht design. 1077 00:48:52,847 --> 00:48:53,821 Ja. 1078 00:48:53,821 --> 00:48:56,580 Cool, nog andere vragen? 1079 00:48:56,580 --> 00:48:57,140 Geweldig. 1080 00:48:57,140 --> 00:48:58,789 OK, bewegen op. 1081 00:48:58,789 --> 00:49:00,580 Dus dit is eigenlijk hoe we het geheugen toewijzen. 1082 00:49:00,580 --> 00:49:02,670 We spraken over een beetje. 1083 00:49:02,670 --> 00:49:04,240 Wij gebruiken deze functie genaamd malloc. 1084 00:49:04,240 --> 00:49:07,850 En je vertellen hoeveel bytes in geheugen, dus hoeveel bytes op de heap, 1085 00:49:07,850 --> 00:49:08,610 jij wil. 1086 00:49:08,610 --> 00:49:13,120 En het gaat om het adres terug te keren, dus een pointer naar een stuk geheugen 1087 00:49:13,120 --> 00:49:14,500 dat is toegewezen voor u. 1088 00:49:14,500 --> 00:49:17,080 Dus het type gaat nietig ster te zijn. 1089 00:49:17,080 --> 00:49:21,310 Het gaat om een ​​pointer te zijn wat je ook beslist om daar in te zetten. 1090 00:49:21,310 --> 00:49:23,530 Elke keer dat je belt malloc, we al gezegd 1091 00:49:23,530 --> 00:49:25,640 je hebt om het te bevrijden, zodat we hebben geen geheugenlekken. 1092 00:49:25,640 --> 00:49:27,170 >> Wat is de andere ding die je absoluut 1093 00:49:27,170 --> 00:49:29,185 moet elke doen keer dat je malloc noemen? 1094 00:49:29,185 --> 00:49:31,210 1095 00:49:31,210 --> 00:49:32,210 Oké, je hebt om het te bevrijden. 1096 00:49:32,210 --> 00:49:34,010 Wat is de andere ding? 1097 00:49:34,010 --> 00:49:35,890 Controleren op null, mooi. 1098 00:49:35,890 --> 00:49:38,850 Dus, ja, het klopt er op het bord. 1099 00:49:38,850 --> 00:49:42,120 Als je zou proberen toe te wijzen geheugen en je hebt geen geheugen links, 1100 00:49:42,120 --> 00:49:44,940 de computer gaat zeggen, Ik heb niets om u te geven. 1101 00:49:44,940 --> 00:49:47,650 En het geeft je terug null. 1102 00:49:47,650 --> 00:49:48,400 Vragen over dat? 1103 00:49:48,400 --> 00:49:49,290 Ja. 1104 00:49:49,290 --> 00:49:52,995 >> Publiek: Waarom zou je ooit wilt verklaren een pointer met een specifiek type 1105 00:49:52,995 --> 00:49:56,329 wanneer leegte ster aankan alle soorten pointer anyways? 1106 00:49:56,329 --> 00:49:57,370 SPEAKER 1: Goede vraag. 1107 00:49:57,370 --> 00:50:00,590 Waarom zouden we zeggen int ster in tegenstelling tot sterren ongeldig 1108 00:50:00,590 --> 00:50:03,740 wanneer leegte ster alles aankan? 1109 00:50:03,740 --> 00:50:06,390 Dus we willen niet ooit expliciet cast pointers. 1110 00:50:06,390 --> 00:50:07,940 Het is gewoon een slechte gewoonte. 1111 00:50:07,940 --> 00:50:11,850 Maar we zullen praten over int sterren net als een begrip van, 1112 00:50:11,850 --> 00:50:14,195 Dit is een pointer naar een integer. 1113 00:50:14,195 --> 00:50:14,850 >> Publiek: OK. 1114 00:50:14,850 --> 00:50:17,558 >> SPEAKER 1: Ja, en het laat je om de waarden in te manipuleren 1115 00:50:17,558 --> 00:50:18,667 als gehele getallen. 1116 00:50:18,667 --> 00:50:20,008 >> PUBLIEK: Oh, OK. 1117 00:50:20,008 --> 00:50:22,250 En generlei ster zou niet laten je dat doen? 1118 00:50:22,250 --> 00:50:25,070 >> SPEAKER 1: Het hangt af van de context Ja, dus maak je geen zorgen 1119 00:50:25,070 --> 00:50:28,460 niet te veel zorgen te maken over het type daar. 1120 00:50:28,460 --> 00:50:32,620 Weet alleen dat, in het algemeen, malloc geeft een pointer naar iets. 1121 00:50:32,620 --> 00:50:33,520 Goede vraag. 1122 00:50:33,520 --> 00:50:37,260 >> Publiek: Waarom denk je vermenigvuldigen het tijden 10? [ONHOORBAAR]. 1123 00:50:37,260 --> 00:50:40,150 >> SPEAKER 1: Tuurlijk, dus ik was gewoon doet willekeurig voorbeeld hier, waar 1124 00:50:40,150 --> 00:50:42,840 Ik wilde genoeg om toe te wijzen kamer 10 integers. 1125 00:50:42,840 --> 00:50:44,320 Gewoon een willekeurige keuze. 1126 00:50:44,320 --> 00:50:45,250 Ja. 1127 00:50:45,250 --> 00:50:45,440 Ja, wat is er? 1128 00:50:45,440 --> 00:50:47,440 >> Publiek: Wat doe je bedoel door te controleren op null? 1129 00:50:47,440 --> 00:50:51,351 Wilt u het controleren wijzer voor null of malloc? 1130 00:50:51,351 --> 00:50:52,350 SPEAKER 1: Ja, precies. 1131 00:50:52,350 --> 00:50:54,599 Dus de vraag is, wat verstaan ​​we onder controle door null? 1132 00:50:54,599 --> 00:50:57,880 We willen to-- wanneer we malloc noemen en we terug een pointer, 1133 00:50:57,880 --> 00:51:01,110 we willen zeggen, is wijzer gelijk aan nul? 1134 00:51:01,110 --> 00:51:02,610 Dus letterlijk PTR. 1135 00:51:02,610 --> 00:51:05,620 PTR is gelijk aan nul. 1136 00:51:05,620 --> 00:51:06,958 Ja. 1137 00:51:06,958 --> 00:51:08,832 Publiek: Dus, was ik soort van me af, als je 1138 00:51:08,832 --> 00:51:14,013 initialiseren van de wijzer in malloc, doet Het wijzen op het begin van malloc? 1139 00:51:14,013 --> 00:51:15,097 Want als het een array-- 1140 00:51:15,097 --> 00:51:16,554 SPEAKER 1: Dat is een grote vraag. 1141 00:51:16,554 --> 00:51:19,200 Ja, als je malloc noemen, de pointer die het-- laten we zeggen, 1142 00:51:19,200 --> 00:51:21,700 dus even wijzen we 10 bytes van het geheugen. 1143 00:51:21,700 --> 00:51:23,830 Dus, het spijt me, genoeg ruimte voor 10 gehele getallen, 1144 00:51:23,830 --> 00:51:28,220 we gaan naar het adres van krijgen dat eerste stuk van het geheugen. 1145 00:51:28,220 --> 00:51:29,880 Dat is een goede vraag. 1146 00:51:29,880 --> 00:51:30,481 Ja. 1147 00:51:30,481 --> 00:51:34,810 >> Doelgroep: Door het toewijzen 10 wijdverbreid integers, 1148 00:51:34,810 --> 00:51:38,177 kon je eigenlijk gebruiken pointer als like-- bijna 1149 00:51:38,177 --> 00:51:39,372 als een array van gehele getallen? 1150 00:51:39,372 --> 00:51:41,830 SPEAKER 1: Ja, zo kan je gebruiken als een array van integers? 1151 00:51:41,830 --> 00:51:45,970 Ja, precies, dit is wat gewoon Pulak toonde u on-- een paar slides geleden 1152 00:51:45,970 --> 00:51:48,680 waar we zeggen, OK, dit is eigenlijk gewoon een soort van-- we 1153 00:51:48,680 --> 00:51:50,805 kunnen denken aan het als een reeks van 10 getallen. 1154 00:51:50,805 --> 00:51:52,222 Het gebeurt gewoon om op de heap. 1155 00:51:52,222 --> 00:51:54,971 Publiek: Maar je kon geen toegang met vierkante haakjesnotering? 1156 00:51:54,971 --> 00:51:58,220 SPEAKER 1: Je kon eigenlijk toegang met vierkante haakjesnotering, ja. 1157 00:51:58,220 --> 00:52:00,221 Je kunt ze behandelen hetzelfde. 1158 00:52:00,221 --> 00:52:00,720 Ja. 1159 00:52:00,720 --> 00:52:02,420 >> PUBLIEK: Waarom zou wijzer ooit nul zijn? 1160 00:52:02,420 --> 00:52:04,170 >> SPEAKER 1: Waarom zou wijzer ooit nul zijn? 1161 00:52:04,170 --> 00:52:06,570 Als je zal gebruik maken van alle het geheugen op de heap. 1162 00:52:06,570 --> 00:52:09,141 Als uw programma up eet, het eten, het eten van het geheugen, 1163 00:52:09,141 --> 00:52:11,890 en er is niets links, dan malloc gaat say-- als je zegt, 1164 00:52:11,890 --> 00:52:14,760 Ik wil nog 100 bytes, het gaat te zeggen, ik heb geen 100 bytes. 1165 00:52:14,760 --> 00:52:15,740 Hier is null. 1166 00:52:15,740 --> 00:52:18,780 Dat betekent, niet ik. 1167 00:52:18,780 --> 00:52:20,516 Ja. 1168 00:52:20,516 --> 00:52:22,830 >> PUBLIEK: In dat geval, null is niets, toch? 1169 00:52:22,830 --> 00:52:24,110 >> SPEAKER 1: Ja, in die geval, null is niets. 1170 00:52:24,110 --> 00:52:24,943 Je hebt geen adres. 1171 00:52:24,943 --> 00:52:28,065 Er is geen geheugen. 1172 00:52:28,065 --> 00:52:31,500 Oké, bewegen op. 1173 00:52:31,500 --> 00:52:34,976 Oké, laten we praten heel snel over buffer overflow. 1174 00:52:34,976 --> 00:52:38,210 Wanneer kunnen we tegenkomen buffer overflow? 1175 00:52:38,210 --> 00:52:42,980 Laten we zeggen dat we hebben we a-- toewijzen van een stuk van het geheugen, 1176 00:52:42,980 --> 00:52:44,720 en we gaan naar de string in te schrijven. 1177 00:52:44,720 --> 00:52:47,240 En we gaan om te zeggen, OK, ik ga om te wijzen 1178 00:52:47,240 --> 00:52:49,320 genoeg ruimte voor zes tekens. 1179 00:52:49,320 --> 00:52:51,680 En ik ga om te vragen de gebruiker voor wat input. 1180 00:52:51,680 --> 00:52:54,470 En de gebruiker ingangen, bijvoorbeeld, hallo. 1181 00:52:54,470 --> 00:52:56,430 En dat past perfect fijn, want we hebben 1182 00:52:56,430 --> 00:53:00,790 ruimte voor alle letters van hello, en de afsluitende null karakter. 1183 00:53:00,790 --> 00:53:02,840 Veel ruimte, geen probleem. 1184 00:53:02,840 --> 00:53:08,010 >> Maar wat als we de kans geven voor een boze gebruiker om ons programma te gebruiken, 1185 00:53:08,010 --> 00:53:13,152 en ze typen in geen zes personages, of niet vijf tekens, maar een miljoen. 1186 00:53:13,152 --> 00:53:15,860 Ze houden het typen en het typen, en typen, wat er gaat gebeuren? 1187 00:53:15,860 --> 00:53:18,220 Wel geven we alleen de computer enough-- of sorry, 1188 00:53:18,220 --> 00:53:23,350 gaven we alleen deze string voldoende ruimte voor 5 tekens. 1189 00:53:23,350 --> 00:53:28,300 Dus, gaan we iets krijgen dit, waar de kwade persoon die 1190 00:53:28,300 --> 00:53:31,750 typen in ingang kan overschrijven de grootte van de buffer, 1191 00:53:31,750 --> 00:53:35,922 en kan eigenlijk voorbij de hoeveelheid dat het oorspronkelijk is toegekend. 1192 00:53:35,922 --> 00:53:38,380 En dan wat u kunt doen, de echt kwaad wat je kunt doen, 1193 00:53:38,380 --> 00:53:40,260 is overschrijven het retouradres. 1194 00:53:40,260 --> 00:53:42,010 Die in feite betekent u kunt soort nemen 1195 00:53:42,010 --> 00:53:45,110 controle van het gedrag van het programma. 1196 00:53:45,110 --> 00:53:47,880 Dus op een zeer hoog niveau buffer overflow is wanneer 1197 00:53:47,880 --> 00:53:49,960 u toe te wijzen een bepaalde hoeveelheid geheugen. 1198 00:53:49,960 --> 00:53:53,060 En dan u-- dit omdat je het nemen van input van de gebruiker of iets 1199 00:53:53,060 --> 00:53:57,190 zoals dat-- je over de grenzen van wat u oorspronkelijk hebt toegewezen 1200 00:53:57,190 --> 00:53:59,955 en start knoeien-up van uw programma. 1201 00:53:59,955 --> 00:54:00,455 Ja? 1202 00:54:00,455 --> 00:54:03,220 >> PUBLIEK: Waarom zou dat niet alleen terug een segmentation fault? 1203 00:54:03,220 --> 00:54:05,594 >> SPEAKER 1: Waarom zou dat niet terug een segmentation fault? 1204 00:54:05,594 --> 00:54:06,570 Het zou. 1205 00:54:06,570 --> 00:54:10,030 Soms is de compiler of tijdens een van uw runtime 1206 00:54:10,030 --> 00:54:11,430 er werkelijk gaande is om te controleren dat. 1207 00:54:11,430 --> 00:54:13,890 Als bepaalde dingen gebeuren, en Dit is een soort van een lager niveau, 1208 00:54:13,890 --> 00:54:15,610 dan moet je weten. 1209 00:54:15,610 --> 00:54:18,820 Maar als je niet het ontwerpen deze systemen goed, 1210 00:54:18,820 --> 00:54:21,170 dan heb je de kans hebt van niet vangen en gewoon 1211 00:54:21,170 --> 00:54:24,844 zodat de computer take-- de kwade persoon om uw computer te besturen. 1212 00:54:24,844 --> 00:54:25,344 Ja. 1213 00:54:25,344 --> 00:54:26,260 >> PUBLIEK: [onverstaanbaar]? 1214 00:54:26,260 --> 00:54:28,934 1215 00:54:28,934 --> 00:54:29,600 SPEAKER 1: Zeker. 1216 00:54:29,600 --> 00:54:33,800 Oh, als ik buffer zeggen, ik bedoel alleen de hoeveelheid geheugen die je hebt toegewezen. 1217 00:54:33,800 --> 00:54:39,090 Dus hier zei ik, oh, hebben we toegewezen zes char-- genoeg ruimte voor zes tekens. 1218 00:54:39,090 --> 00:54:42,880 En ik noem dat mijn buffer waar ik zou kunnen schrijven. 1219 00:54:42,880 --> 00:54:44,390 Ja. 1220 00:54:44,390 --> 00:54:46,791 Andere vragen over dit? 1221 00:54:46,791 --> 00:54:47,290 Ja. 1222 00:54:47,290 --> 00:54:49,150 >> Publiek: Hoe doe je het te stoppen? 1223 00:54:49,150 --> 00:54:50,274 Hoe doe je het te stoppen? 1224 00:54:50,274 --> 00:54:51,440 SPEAKER 1: Awesome vraag. 1225 00:54:51,440 --> 00:54:52,240 Hoe doe je het te stoppen? 1226 00:54:52,240 --> 00:54:54,110 Hoe doe je buffer overflow te voorkomen? 1227 00:54:54,110 --> 00:54:59,160 Ook een manier om het te doen is iets als GetString, waar we voortdurend te verhogen 1228 00:54:59,160 --> 00:55:03,200 de hoeveelheid geheugen die we toewijzen Als de gebruiker voert veel tekst. 1229 00:55:03,200 --> 00:55:07,570 Een ander ding is het, alleen als je wil zes tekens, doe een snelle controle. 1230 00:55:07,570 --> 00:55:11,220 Zeggen alleen ingang zes tekens. 1231 00:55:11,220 --> 00:55:12,444 Ja. 1232 00:55:12,444 --> 00:55:14,360 Dus laten we zeggen dat je werken on-- we gaan 1233 00:55:14,360 --> 00:55:16,985 naar web dingen een beetje later in de course-- maar laten 1234 00:55:16,985 --> 00:55:21,422 zeggen dat je werkt op een formulier, zou je slechts beperken hoeveel kon ingeleverd. 1235 00:55:21,422 --> 00:55:22,378 Ja. 1236 00:55:22,378 --> 00:55:24,768 >> PUBLIEK: GetString trekt geheugen van stapel, toch? 1237 00:55:24,768 --> 00:55:25,444 Gewoon om te verduidelijken? 1238 00:55:25,444 --> 00:55:26,485 SPEAKER 1: Nog een keer? 1239 00:55:26,485 --> 00:55:28,400 PUBLIEK: Doet GetString neem het geheugen van de stapel? 1240 00:55:28,400 --> 00:55:31,210 SPEAKER 1: Ik geloof Getm-- get int neemt het geheugen van de hoop 1241 00:55:31,210 --> 00:55:32,911 omdat het alloc noemt. 1242 00:55:32,911 --> 00:55:33,452 Publiek: Oh. 1243 00:55:33,452 --> 00:55:33,951 OK. 1244 00:55:33,951 --> 00:55:35,750 SPEAKER 1: Ja, malloc en realloc. 1245 00:55:35,750 --> 00:55:37,120 Andere vragen? 1246 00:55:37,120 --> 00:55:37,803 Ja. 1247 00:55:37,803 --> 00:55:40,650 >> Publiek: Dus door het definiëren de grootte van de buffering, 1248 00:55:40,650 --> 00:55:42,733 je iemand uit te voorkomen in staat om code te injecteren 1249 00:55:42,733 --> 00:55:45,700 dat kan schuiven langs de [onverstaanbaar]. 1250 00:55:45,700 --> 00:55:48,130 >> SPEAKER 1: Dus, door het definiëren van de grootte van de buffer, 1251 00:55:48,130 --> 00:55:50,760 u hebt gezegd, OK hier is hoe veel geheugen we kunnen gebruiken. 1252 00:55:50,760 --> 00:55:55,550 Als u de gebruiker toestaan ​​om te schrijven over het, dan zul je in de problemen. 1253 00:55:55,550 --> 00:55:57,930 Zinvol. 1254 00:55:57,930 --> 00:55:59,370 Geweldig. 1255 00:55:59,370 --> 00:56:00,640 Laten we bewegen langs. 1256 00:56:00,640 --> 00:56:02,320 Prima. 1257 00:56:02,320 --> 00:56:06,652 Spreken van fouten, hier zijn enkele algemene foutmeldingen 1258 00:56:06,652 --> 00:56:09,860 die zou hebben getoond terwijl je codering, werken aan uw probleem sets. 1259 00:56:09,860 --> 00:56:12,320 Goede kans dat een van Deze verschijnt op de quiz 1260 00:56:12,320 --> 00:56:15,090 als de afgelopen jaren zijn een indicatie. 1261 00:56:15,090 --> 00:56:17,580 Dus, antwoorden zijn soort hier op het bord. 1262 00:56:17,580 --> 00:56:19,510 Maar gerust wat meer uit te schreeuwen. 1263 00:56:19,510 --> 00:56:21,280 >> Waarom zou een segmentation fault gebeuren? 1264 00:56:21,280 --> 00:56:24,279 Waarom zou je een segmentation fault krijgen als je het runnen van uw programma? 1265 00:56:24,279 --> 00:56:26,760 1266 00:56:26,760 --> 00:56:28,230 >> PUBLIEK: [onverstaanbaar]. 1267 00:56:28,230 --> 00:56:29,500 >> SPEAKER 1: Good. 1268 00:56:29,500 --> 00:56:32,820 Ja, als we proberen om toegang te krijgen geheugen dat niet is aan ons gegeven. 1269 00:56:32,820 --> 00:56:34,610 Als we dereference een null pointer. 1270 00:56:34,610 --> 00:56:38,610 Bijvoorbeeld, als we malloc noemen, en om te controleren of het null, 1271 00:56:38,610 --> 00:56:42,250 en we proberen gewoon gebruiken, de computer gaat ons een segmentation fault geven. 1272 00:56:42,250 --> 00:56:42,750 Goed. 1273 00:56:42,750 --> 00:56:46,680 Hoe zit het met de impliciete verklaring van de functie? 1274 00:56:46,680 --> 00:56:48,589 Wat betekent dat? 1275 00:56:48,589 --> 00:56:51,380 Publiek: Je probeert een gebruiken functie die u niet hebt gedefinieerd. 1276 00:56:51,380 --> 00:56:52,130 SPEAKER 1: Good. 1277 00:56:52,130 --> 00:56:54,504 Je probeert een functie te gebruiken dat je niet hebt gedefinieerd. 1278 00:56:54,504 --> 00:56:56,000 Zodat zou een van twee dingen. 1279 00:56:56,000 --> 00:56:59,320 Misschien was het net als het voorbeeld Camille liet je eerder. 1280 00:56:59,320 --> 00:57:02,330 En heb je een belangrijke functie dat vraagt ​​iets genaamd kubus. 1281 00:57:02,330 --> 00:57:04,371 En laten we zeggen dat je vergeten bent dit prototype te schrijven. 1282 00:57:04,371 --> 00:57:07,540 Je vergat te zeggen, he computer, Ik heb deze functie genaamd kubus. 1283 00:57:07,540 --> 00:57:09,380 Je zult het later te zien. 1284 00:57:09,380 --> 00:57:12,440 Laten we zeggen dat je vergeten bent om het te schrijven prototype, kunt u deze fout krijgt. 1285 00:57:12,440 --> 00:57:14,820 Een ander ding is, laten we zeggen je probeerde te printf gebruiken, 1286 00:57:14,820 --> 00:57:16,880 en vergat te nemen de standaard bibliotheek, 1287 00:57:16,880 --> 00:57:20,240 dan is het gaan zeggen impliciete verklaring van de functie. 1288 00:57:20,240 --> 00:57:22,800 Tenslotte, zwartwerk identifier. 1289 00:57:22,800 --> 00:57:23,300 Ja. 1290 00:57:23,300 --> 00:57:24,841 >> Publiek: Je hebt een probleem scope. 1291 00:57:24,841 --> 00:57:28,728 Zoals misschien je probeert om bel een lokale variabele dat is 1292 00:57:28,728 --> 00:57:30,884 in een ander soort omgeving. 1293 00:57:30,884 --> 00:57:33,550 SPEAKER 1: Grote, dus als je een variabele die niet in omvang, 1294 00:57:33,550 --> 00:57:36,890 en je probeert om het te gebruiken, je gaat in de problemen te komen. 1295 00:57:36,890 --> 00:57:40,960 En juist meer in het algemeen, laten we zeggen je probeert om x te gebruiken, met steeds zeggen int 1296 00:57:40,960 --> 00:57:45,140 x gelijk is aan 5, dan ben je gaat in de problemen. 1297 00:57:45,140 --> 00:57:47,640 Neem me niet kwalijk, vragen over dit? 1298 00:57:47,640 --> 00:57:49,330 Ontzagwekkend, chugging rechts langs. 1299 00:57:49,330 --> 00:57:55,692 >> OK, recursie, waarom might-- laten see-- Ik verloor mijn sch-- oh hier gaan we, 1300 00:57:55,692 --> 00:57:57,400 maar zorg ervoor dat we ruwweg op schema. 1301 00:57:57,400 --> 00:57:59,060 Oké, cool. 1302 00:57:59,060 --> 00:58:03,150 OK, terugkeer, het algemene idee van recursie, een recursieve functie 1303 00:58:03,150 --> 00:58:05,380 is een functie die zichzelf noemt. 1304 00:58:05,380 --> 00:58:08,170 OK, dus dat is wat ik verstaan ​​door een programma-concept 1305 00:58:08,170 --> 00:58:11,130 waarbij een functie noemt zichzelf. 1306 00:58:11,130 --> 00:58:16,210 Wat some-- wat is een zou zijn goede reden om recursie te gebruiken? 1307 00:58:16,210 --> 00:58:17,550 Wanneer het misschien nuttig? 1308 00:58:17,550 --> 00:58:20,926 Of wat een programma dat echt leent zich voor recursie? 1309 00:58:20,926 --> 00:58:22,330 >> Publiek: Binary zoeken. 1310 00:58:22,330 --> 00:58:25,500 >> SPEAKER 1: Binaire zoekopdracht leent zich recursie, 1311 00:58:25,500 --> 00:58:29,060 omdat je dit probleem dat u kan breken in kleinere stukken, 1312 00:58:29,060 --> 00:58:32,330 en continu uit te voeren hetzelfde algoritme op. 1313 00:58:32,330 --> 00:58:37,790 Dit leidt tot in veel gevallen meer elegante code die is nauwkeuriger. 1314 00:58:37,790 --> 00:58:40,500 We zijn gewoon het voorbeeld van binaire zoeken. 1315 00:58:40,500 --> 00:58:43,100 Een ander voorbeeld is het samenvoegen soort. 1316 00:58:43,100 --> 00:58:45,920 Soms, als je denkt aan een algoritme, zoals faculteit, 1317 00:58:45,920 --> 00:58:47,410 het voelt gewoon recursieve, toch? 1318 00:58:47,410 --> 00:58:52,440 Omdat we weten dat de faculteit van 5 een factoriële 4 maal 5. 1319 00:58:52,440 --> 00:58:56,080 En dus als je het opzetten van een probleem op die manier, het voelt gewoon recursieve. 1320 00:58:56,080 --> 00:58:58,530 Dus dat zou een geweldige manier om het te schrijven. 1321 00:58:58,530 --> 00:58:59,425 Vragen? 1322 00:58:59,425 --> 00:59:00,395 Ja. 1323 00:59:00,395 --> 00:59:01,850 >> Publiek: Wat is een base case? 1324 00:59:01,850 --> 00:59:02,770 >> SPEAKER 1: Oh wat is een base case? 1325 00:59:02,770 --> 00:59:04,680 Ik zei, vergeet niet een base case te nemen. 1326 00:59:04,680 --> 00:59:07,690 Laten we zeggen dat we het schrijven een faculteit-functie, 1327 00:59:07,690 --> 00:59:09,620 en we waren faculteit van 5 doen. 1328 00:59:09,620 --> 00:59:12,352 En we weten van een faculteit van 5 is 5 keer per faculteit van 4, 1329 00:59:12,352 --> 00:59:13,310 blah, blah, blah, blah. 1330 00:59:13,310 --> 00:59:14,360 Hoe weten we wanneer te stoppen? 1331 00:59:14,360 --> 00:59:16,276 Hoe weten we dat we eigenlijk hebben een aantal? 1332 00:59:16,276 --> 00:59:20,180 Want als we bleef roepen faculteit, dan zouden we nooit een antwoord te krijgen, toch? 1333 00:59:20,180 --> 00:59:24,470 Dus als we weten hoe stop in het voorbeeld faculteit. 1334 00:59:24,470 --> 00:59:25,460 Iedereen, ja. 1335 00:59:25,460 --> 00:59:27,764 >> Publiek: Wanneer de 1 faculteit is 1. 1336 00:59:27,764 --> 00:59:28,430 SPEAKER 1: Good. 1337 00:59:28,430 --> 00:59:29,530 Dus we weten. 1338 00:59:29,530 --> 00:59:33,400 Wij kunnen voor lief nemen dat 1 factorial gelijk aan 1. 1339 00:59:33,400 --> 00:59:36,570 Dus als we bij het punt waar we roepen faculteit op 1, 1340 00:59:36,570 --> 00:59:38,050 gewoon doorgaan en terugkeren 1. 1341 00:59:38,050 --> 00:59:39,180 En dat is uw base case. 1342 00:59:39,180 --> 00:59:45,040 Omdat we weten dat we een keer geraakt dat, en we altijd zal raken dat, zullen we never-- 1343 00:59:45,040 --> 00:59:48,800 zullen we niet gewoon blijven altijd gaan. 1344 00:59:48,800 --> 00:59:50,700 Andere vragen over recursie? 1345 00:59:50,700 --> 00:59:51,630 Ja. 1346 00:59:51,630 --> 00:59:54,420 >> Publiek: Dus als je terugkeert 1, het is gewoon automatisch 1347 00:59:54,420 --> 00:59:56,290 zal het programma te stoppen, toch? 1348 00:59:56,290 --> 00:59:59,390 >> SPEAKER 1: Ja, dus als je noemen return 1, if-- laten we zeggen, 1349 00:59:59,390 --> 01:00:04,480 laten we zeggen faculteit van 2 gesprekken faculteit van 1, faculteit van 1 1350 01:00:04,480 --> 01:00:06,120 zal gewoon hand terug 1. 1351 01:00:06,120 --> 01:00:12,790 En nu faculteit van 2 zal zeggen: OK, 2 keer 1 is 2, en terug te keren dat antwoord. 1352 01:00:12,790 --> 01:00:14,260 Ja. 1353 01:00:14,260 --> 01:00:16,710 >> Publiek: Hebben we te maken over de reikwijdte in recursie 1354 01:00:16,710 --> 01:00:20,150 als je in een algoritme? 1355 01:00:20,150 --> 01:00:21,880 >> SPEAKER 1: Ah, ja. 1356 01:00:21,880 --> 01:00:25,060 Ja, heb je te maken over scope in het kader van recursie. 1357 01:00:25,060 --> 01:00:29,820 Dus alleen de variabelen gedefinieerd in die run van de functie 1358 01:00:29,820 --> 01:00:32,170 zullen nuttig zijn. 1359 01:00:32,170 --> 01:00:33,792 Ja, goede vraag. 1360 01:00:33,792 --> 01:00:35,250 Oké, laten we blijven bewegen langs. 1361 01:00:35,250 --> 01:00:37,320 Want we hebben een heleboel materiaal door te komen. 1362 01:00:37,320 --> 01:00:41,080 Maar zoals ik al zei, voel je vrij om te raken up kantooruren, of ons na het feit. 1363 01:00:41,080 --> 01:00:42,850 >> Dit is gewoon een heel snelle glijbaan. 1364 01:00:42,850 --> 01:00:45,150 We hebben veel geleerd over zoekopdrachten en soorten. 1365 01:00:45,150 --> 01:00:47,400 Alstublieft alstublieft alstublieft, deze secties zijn online, 1366 01:00:47,400 --> 01:00:51,240 Ik geloof in cs50.net/quizzes. 1367 01:00:51,240 --> 01:00:53,762 Dus ga nemen deze grafiek en zet het op je beoordeling vel, 1368 01:00:53,762 --> 01:00:55,470 want er zullen een vraag over dit. 1369 01:00:55,470 --> 01:00:56,682 Gelieve snap het niet verkeerd. 1370 01:00:56,682 --> 01:00:58,390 Gewoon heel snel, Wat betekent deze grafiek, 1371 01:00:58,390 --> 01:01:04,370 is het over grote o, waarvan we weten de bovengrens van de algoritmen te 1372 01:01:04,370 --> 01:01:05,150 looptijd. 1373 01:01:05,150 --> 01:01:08,080 En we hebben omega, die gaan de ondergrens te zijn 1374 01:01:08,080 --> 01:01:10,290 een runtime algoritmen. 1375 01:01:10,290 --> 01:01:10,840 OK? 1376 01:01:10,840 --> 01:01:12,480 >> PUBLIEK: [onverstaanbaar]. 1377 01:01:12,480 --> 01:01:12,800 >> SPEAKER 1: Ja, wat is het laatste wat? 1378 01:01:12,800 --> 01:01:13,380 Wat is theta? 1379 01:01:13,380 --> 01:01:16,850 Het is als we-- we alleen maar schelen in deze klasse in het geval 1380 01:01:16,850 --> 01:01:19,381 waar onze bovengrens en onze ondergrens hetzelfde. 1381 01:01:19,381 --> 01:01:22,005 Ja, dat is de enige keer dat het is zal komen in deze klasse. 1382 01:01:22,005 --> 01:01:23,320 OK, ik ga om door te gaan. 1383 01:01:23,320 --> 01:01:26,490 Als u de foto niet genomen, Ik beloof deze zullen online zijn. 1384 01:01:26,490 --> 01:01:28,220 >> OK, geweldige, structuren. 1385 01:01:28,220 --> 01:01:29,810 Waarom zouden we willen structuren? 1386 01:01:29,810 --> 01:01:34,110 Wat is een handig reden we zouden willen structuren. 1387 01:01:34,110 --> 01:01:36,277 Iemand roepen iets uit. 1388 01:01:36,277 --> 01:01:38,110 Nou laten we eens kijken naar de Bijvoorbeeld op het bord. 1389 01:01:38,110 --> 01:01:41,090 Laten we zeggen dat we te maken hebben met al deze studenten. 1390 01:01:41,090 --> 01:01:44,900 Als we maken een programma voor CS50, zijn er net als 800 mensen. 1391 01:01:44,900 --> 01:01:47,890 We moeten write-- we gaan moeten veel informatie verwerken 1392 01:01:47,890 --> 01:01:49,020 over studenten. 1393 01:01:49,020 --> 01:01:50,990 Het zou mooi zijn als zijn we konden soort groep 1394 01:01:50,990 --> 01:01:54,460 dit-- alle informatie die heeft te maken met een bepaalde leerling 1395 01:01:54,460 --> 01:01:56,027 in één gegevenstype. 1396 01:01:56,027 --> 01:01:58,360 Maar we weten dat er geen gegevens typt genoemd, Student, toch? 1397 01:01:58,360 --> 01:02:01,890 We hebben een integer, we hebben een vlotter, hebben we een koord of een char ster, 1398 01:02:01,890 --> 01:02:03,920 maar we hebben niet een student. 1399 01:02:03,920 --> 01:02:08,680 >> Dus we kunnen doen is eigenlijk soort definiëren onze eigen structuur, noem het student, 1400 01:02:08,680 --> 01:02:12,440 en we kunnen sommige associëren verschillende gebieden met die structuur. 1401 01:02:12,440 --> 01:02:14,410 Dus in dit geval, laten we zeggen dat we een student. 1402 01:02:14,410 --> 01:02:17,350 En de dingen die we de zorg over de student ID-nummer 1403 01:02:17,350 --> 01:02:19,500 en de naam van de student. 1404 01:02:19,500 --> 01:02:24,175 En nu kunnen we dit ID associëren en deze naam met een bepaalde leerling. 1405 01:02:24,175 --> 01:02:25,300 Dus laten we zien een aantal voorbeelden. 1406 01:02:25,300 --> 01:02:28,860 1407 01:02:28,860 --> 01:02:33,490 >> OK, dus hier zeg ik, OK, laten we zeggen dat we willen een student te maken. 1408 01:02:33,490 --> 01:02:35,050 Ik noem hem student 1. 1409 01:02:35,050 --> 01:02:38,850 En zijn ID-nummer in dit geval, kunnen we toegang 1410 01:02:38,850 --> 01:02:45,200 door gewoon te doen van de naam van de student dot het veld we willen openen. 1411 01:02:45,200 --> 01:02:49,110 Dus dit gaat gewoon student 1 punt ID, en we stellen dat gelijk is aan 1. 1412 01:02:49,110 --> 01:02:52,300 Want vergeet niet, zeiden we dat ID gaat om een ​​integer zijn. 1413 01:02:52,300 --> 01:02:56,540 En heel evenzo, kunnen we zeggen, dit Naam student gaat Davin zijn, 1414 01:02:56,540 --> 01:02:57,760 bijvoorbeeld. 1415 01:02:57,760 --> 01:03:01,420 Dus we kunnen alleen maar toegang tot het veld van een structuur met behulp van deze stip. 1416 01:03:01,420 --> 01:03:03,098 Vragen over dat? 1417 01:03:03,098 --> 01:03:03,598 Ja. 1418 01:03:03,598 --> 01:03:05,582 >> PUBLIEK: Is er een manier om uw variabelen te beschermen? 1419 01:03:05,582 --> 01:03:08,560 Is er een manier om variabelen te beschermen van wordt extern bereikbaar? 1420 01:03:08,560 --> 01:03:10,726 >> SPEAKER 1: Is er toch om uw variabelen te beschermen 1421 01:03:10,726 --> 01:03:12,680 van wordt extern bereikbaar? 1422 01:03:12,680 --> 01:03:13,750 Niet in het kader van CS50. 1423 01:03:13,750 --> 01:03:16,680 1424 01:03:16,680 --> 01:03:17,977 Andere vragen? 1425 01:03:17,977 --> 01:03:18,476 Ja. 1426 01:03:18,476 --> 01:03:18,942 >> Publiek: Wat is typedef struct? 1427 01:03:18,942 --> 01:03:20,192 Wat betekent elk onderdeel betekenen? 1428 01:03:20,192 --> 01:03:22,937 1429 01:03:22,937 --> 01:03:24,520 SPEAKER 1: Ah, wat is typedef struct? 1430 01:03:24,520 --> 01:03:26,240 Wat doet elke component gemiddelde van deze man? 1431 01:03:26,240 --> 01:03:26,850 >> Publiek: Ja. 1432 01:03:26,850 --> 01:03:27,683 >> SPEAKER 1: OK, cool. 1433 01:03:27,683 --> 01:03:31,200 Dus dit zegt, hey computer, I wil een nieuwe structuur te creëren. 1434 01:03:31,200 --> 01:03:34,970 En ik ga naar een definitie te definiëren voor het, zodat ik het kon gebruiken 1435 01:03:34,970 --> 01:03:37,520 alsof het een soort mijn hele programma. 1436 01:03:37,520 --> 01:03:39,300 OK, dus ik wil een structuur definiëren. 1437 01:03:39,300 --> 01:03:41,650 En ik ga nu te zijn kunnen gebruiken als een type. 1438 01:03:41,650 --> 01:03:43,400 En zijn naam is student. 1439 01:03:43,400 --> 01:03:45,730 En hier zijn de velden. 1440 01:03:45,730 --> 01:03:48,130 >> Publiek: Dus is dat typedef struct [onverstaanbaar]? 1441 01:03:48,130 --> 01:03:50,592 1442 01:03:50,592 --> 01:03:53,800 SPEAKER 1: Als u wilt in staat zijn om Gebruik deze structuur in uw programma, 1443 01:03:53,800 --> 01:03:57,910 en in de meeste gevallen in CS50 we doen, moeten we zeggen dat het type Def. 1444 01:03:57,910 --> 01:04:01,190 En dat maakt het mogelijk om het gebruik van dezelfde manier die we gebruiken, zoals int of float. 1445 01:04:01,190 --> 01:04:04,168 De computer zal altijd weet wat het is. 1446 01:04:04,168 --> 01:04:04,668 Ja. 1447 01:04:04,668 --> 01:04:06,560 >> Publiek: Kunnen we schrijven dit in de header-bestand? 1448 01:04:06,560 --> 01:04:07,060 >> SPEAKER 1: Oh, sorry. 1449 01:04:07,060 --> 01:04:08,600 Doen we schrijven dit in de header-bestand? 1450 01:04:08,600 --> 01:04:11,410 Je zou kunnen schrijven dit aan de bovenkant van uw programma, aan de bovenkant van uw c programma. 1451 01:04:11,410 --> 01:04:13,010 Ja, dat zou het meest worden redelijke plek voor het. 1452 01:04:13,010 --> 01:04:13,509 Daarginds. 1453 01:04:13,509 --> 01:04:15,704 PUBLIEK: Zelfde vraag, dus voordat de belangrijkste? 1454 01:04:15,704 --> 01:04:18,870 SPEAKER 1: Juist, dit moet je ergens dat iedereen het kan openen. 1455 01:04:18,870 --> 01:04:20,612 Dus voordat belangrijkste in jouw geval, ja. 1456 01:04:20,612 --> 01:04:23,820 PUBLIEK: Is er een verschil tussen zetten student aan de bovenkant en aan de onderkant? 1457 01:04:23,820 --> 01:04:25,810 SPEAKER 1: Ah, is er een verschil tussen zetten student 1458 01:04:25,810 --> 01:04:26,840 op de top of op de bodem? 1459 01:04:26,840 --> 01:04:29,650 Let-- redden die vraag, en als we in gelinkte lijsten, 1460 01:04:29,650 --> 01:04:31,020 we zullen zien dat, OK? 1461 01:04:31,020 --> 01:04:32,750 Dus vasthouden aan dat één seconde. 1462 01:04:32,750 --> 01:04:37,080 Het laatste wat ik wil noemen, is in plaats van een structuur, 1463 01:04:37,080 --> 01:04:41,180 We hebben een pointer naar een structuur, kunnen we onze notatie veranderen 1464 01:04:41,180 --> 01:04:42,480 een beetje mooier. 1465 01:04:42,480 --> 01:04:45,810 >> We kunnen zeggen, laten we zeggen dat we hebben een pointer naar een student in plaats van alleen 1466 01:04:45,810 --> 01:04:47,040 een student. 1467 01:04:47,040 --> 01:04:52,460 Als we willen toegang tot een gebied, in plaats van te doen, goed gaan dereferentie de pointer, 1468 01:04:52,460 --> 01:04:54,100 en dan toegang tot het veld. 1469 01:04:54,100 --> 01:04:57,310 Deze notatie ziet er een beetje rommelig met de ster in dit punt. 1470 01:04:57,310 --> 01:05:00,790 Helemaal correct, maar een soort van schonere manier om het te doen, 1471 01:05:00,790 --> 01:05:03,280 is gewoon om aanwijzer naam zeggen. 1472 01:05:03,280 --> 01:05:11,460 En dat eigenlijk combineert dereferentie en de toegang in een mooi symbool. 1473 01:05:11,460 --> 01:05:12,470 Vragen over dat? 1474 01:05:12,470 --> 01:05:13,760 >> PUBLIEK: Zeg enkel dat nog een keer. 1475 01:05:13,760 --> 01:05:14,480 >> SPEAKER 1: Zeg dat nog een keer. 1476 01:05:14,480 --> 01:05:16,021 >> Publiek: Precies wat je net zei. 1477 01:05:16,021 --> 01:05:17,870 SPEAKER 1: Tuurlijk, precies wat ik net zei. 1478 01:05:17,870 --> 01:05:21,580 Als we een pointer naar een student in plaats van de student zelf, 1479 01:05:21,580 --> 01:05:25,410 we can-- een manier die we kunnen toegang krijgen tot de veld om dereferentie, en dan 1480 01:05:25,410 --> 01:05:27,110 toegang naam. 1481 01:05:27,110 --> 01:05:29,040 Een andere, leukere manier we kan doen, dat is gewoon 1482 01:05:29,040 --> 01:05:33,550 een beetje van de syntactische suiker, is gewoon om aanwijzer naam doen. 1483 01:05:33,550 --> 01:05:38,190 En dat gaat de maaidorser dereferentie en de ontsluiting. 1484 01:05:38,190 --> 01:05:40,400 Yeah, pretty cool. 1485 01:05:40,400 --> 01:05:41,260 Prima. 1486 01:05:41,260 --> 01:05:44,390 >> Dus laten we praten over de andere vraag. 1487 01:05:44,390 --> 01:05:46,520 Laten we direct naar nodes, die we gaan gebruiken 1488 01:05:46,520 --> 01:05:49,120 in gekoppelde lijsten in slechts een seconde. 1489 01:05:49,120 --> 01:05:53,580 Dus hier, zult u merken dat er is het woord knooppunt zowel aan de onderkant, 1490 01:05:53,580 --> 01:05:55,160 en op de top. 1491 01:05:55,160 --> 01:05:59,040 Vroeger, toen we het definiëren student, we hadden net student op de bodem. 1492 01:05:59,040 --> 01:06:00,470 We hadden geen student op de top. 1493 01:06:00,470 --> 01:06:01,902 Iedereen weet waarom dat zou kunnen zijn? 1494 01:06:01,902 --> 01:06:02,860 Wat is het verschil? 1495 01:06:02,860 --> 01:06:03,360 Ja. 1496 01:06:03,360 --> 01:06:06,212 Publiek: Dus u knooppunt gebruiken is de definitie van knooppunt 1497 01:06:06,212 --> 01:06:08,254 dus het is een recursieve ding? 1498 01:06:08,254 --> 01:06:08,920 SPEAKER 1: Good. 1499 01:06:08,920 --> 01:06:13,230 Ja, onze nodes moeten we moeten pointer naar andere knooppunten. 1500 01:06:13,230 --> 01:06:17,640 Dus omdat we gebruik maken van dit type voordat het daadwerkelijk is gedefinieerd, 1501 01:06:17,640 --> 01:06:20,613 we moeten het aan de top gewoon zodat het weet wat het is. 1502 01:06:20,613 --> 01:06:22,446 Publiek: Dus we nog steeds moet het op de bodem? 1503 01:06:22,446 --> 01:06:23,338 SPEAKER 1: Ja. 1504 01:06:23,338 --> 01:06:24,754 Publiek: Dus altijd aan de onderkant. 1505 01:06:24,754 --> 01:06:26,090 SPEAKER 1: Altijd aan de onderkant. 1506 01:06:26,090 --> 01:06:29,410 Dus alles van jou zal hebben onderaan. 1507 01:06:29,410 --> 01:06:30,720 Een andere vragen? 1508 01:06:30,720 --> 01:06:33,511 Oké, dus laten we eigenlijk praten over gelinkte lijsten heel snel. 1509 01:06:33,511 --> 01:06:36,510 Dus gelinkte lijsten zijn-- we ze gebruiken in plaats van arrays in sommige gevallen, 1510 01:06:36,510 --> 01:06:40,030 omdat we weten dat arrays zijn een vaste lengte, terwijl gelinkte lijsten 1511 01:06:40,030 --> 01:06:42,670 we kunnen groeien en krimpen als we willen. 1512 01:06:42,670 --> 01:06:45,790 Dit is dus een voorbeeld van wat een gelinkte lijst eruit zou kunnen zien. 1513 01:06:45,790 --> 01:06:48,590 Wat we nodig hebben om te zien is de kop van de lijst. 1514 01:06:48,590 --> 01:06:50,330 Dus waar de lijst begint. 1515 01:06:50,330 --> 01:06:53,010 En dan knooppunt hij, elke volgende knooppunt is 1516 01:06:53,010 --> 01:06:55,880 belast info waar het volgende knooppunt. 1517 01:06:55,880 --> 01:07:00,950 Dus in dit geval, het knooppunt dat 1 opslaat is verantwoordelijk voor het weten wanneer 3 is. 1518 01:07:00,950 --> 01:07:04,540 De persoon die 3 slaat is verantwoordelijk voor het te weten waar 9 is. 1519 01:07:04,540 --> 01:07:06,230 En 9 heeft niemand anders te wijzen. 1520 01:07:06,230 --> 01:07:08,750 Het is het einde van de lijst, zo zegt het enkel null. 1521 01:07:08,750 --> 01:07:09,250 OK? 1522 01:07:09,250 --> 01:07:10,530 >> Publiek: Wat is het punt van dit? 1523 01:07:10,530 --> 01:07:11,480 >> SPEAKER 1: Wat is het punt van dit? 1524 01:07:11,480 --> 01:07:12,105 >> Publiek: Ja. 1525 01:07:12,105 --> 01:07:15,390 SPEAKER 1: Want, laten we zeggen dat we een aantal data. 1526 01:07:15,390 --> 01:07:18,480 En we weten niet precies hoe veel gegevens willen we van tevoren. 1527 01:07:18,480 --> 01:07:22,479 Dus met een array, laten we zeggen, waar we willen de mensen te tellen in de eerste rij. 1528 01:07:22,479 --> 01:07:24,020 De kans is groot dat het niet gaat veranderen. 1529 01:07:24,020 --> 01:07:28,120 We kunnen alleen maar zeggen, OK, ik wil een array van grootte van zes. 1530 01:07:28,120 --> 01:07:30,120 Maar als we iets willen dat gaat veranderen. 1531 01:07:30,120 --> 01:07:32,900 >> Bijvoorbeeld, laten we zeggen dat ik probeerde te houden van de studenten te houden 1532 01:07:32,900 --> 01:07:35,330 zoals ze in de kamer komen voor de herziening sessie. 1533 01:07:35,330 --> 01:07:38,420 Ik heb geen idee hoeveel van jullie mensen zullen opdagen. 1534 01:07:38,420 --> 01:07:43,094 Dus ik zou willen een datastructuur dat ik kan uitzetten en krimpen. 1535 01:07:43,094 --> 01:07:45,510 Want misschien iemand zal vertrekken, misschien iemand zal komen. 1536 01:07:45,510 --> 01:07:48,386 En dus op elk moment, we kunt toevoegen of verwijderen knooppunten. 1537 01:07:48,386 --> 01:07:49,771 Koele, grote vraag. 1538 01:07:49,771 --> 01:07:50,270 Ja. 1539 01:07:50,270 --> 01:07:52,311 >> Publiek: Als u kunt gebruiken iets als GetString 1540 01:07:52,311 --> 01:07:55,750 dat houdt laat je meer gegevens je het nodig hebt, waarom heb je dit ook nodig? 1541 01:07:55,750 --> 01:07:57,625 >> SPEAKER 1: Waarom zou je gebruik gelinkte lijst bij 1542 01:07:57,625 --> 01:07:59,440 kun je zoiets als GetString gebruiken? 1543 01:07:59,440 --> 01:08:01,640 Dat is een goede vraag. 1544 01:08:01,640 --> 01:08:04,240 Vergeet niet dat een van Get-- de ondergang van GetString 1545 01:08:04,240 --> 01:08:06,750 is dat we niet een zeer deed goede baan te bevrijden dat het geheugen, 1546 01:08:06,750 --> 01:08:09,320 en we een heleboel geïntroduceerd geheugenlekken in uw programma? 1547 01:08:09,320 --> 01:08:15,037 Je zou het een statisch nemen sized array en blijven groeien het. 1548 01:08:15,037 --> 01:08:16,870 Maar je zou moeten vinden nieuwe plaatsen in het geheugen. 1549 01:08:16,870 --> 01:08:18,359 Het zou gewoon een veel overhead zijn. 1550 01:08:18,359 --> 01:08:21,050 >> Een van de leuke dingen over gekoppelde lijsten tegenover arrays is arrays 1551 01:08:21,050 --> 01:08:22,830 allemaal op dezelfde locatie in het geheugen. 1552 01:08:22,830 --> 01:08:25,540 Het moet continu beschouwd delen van het geheugen. 1553 01:08:25,540 --> 01:08:29,920 Overwegende dat gelinkte lijsten, 2 en 3 mei zijn geheel op verschillende locaties. 1554 01:08:29,920 --> 01:08:31,880 Als 2 is hier, en 3 is hier. 1555 01:08:31,880 --> 01:08:34,421 Zolang zij een pointer met elkaar, het is prima. 1556 01:08:34,421 --> 01:08:35,830 We weten dat we ze kunnen vinden. 1557 01:08:35,830 --> 01:08:37,084 Vraag daar? 1558 01:08:37,084 --> 01:08:40,563 >> Publiek: GetString is een functie in de CS50 bibliotheek, toch? 1559 01:08:40,563 --> 01:08:42,060 Het bestaat niet in echte programma. 1560 01:08:42,060 --> 01:08:42,851 >> SPEAKER 1: Correct. 1561 01:08:42,851 --> 01:08:44,130 Juist, dat is de andere zaak. 1562 01:08:44,130 --> 01:08:47,210 GetString bestaat niet buiten de context van de CS50. 1563 01:08:47,210 --> 01:08:47,710 Ja. 1564 01:08:47,710 --> 01:08:54,556 >> Publiek: Dus doet het feit dat twee kon echt ver uit elkaar liggen, 1565 01:08:54,556 --> 01:08:59,859 doet die invloed hebben op de efficiëntie van de de toegang tot de elementen op de lijst? 1566 01:08:59,859 --> 01:09:01,359 SPEAKER 1: Dat is een grote vraag. 1567 01:09:01,359 --> 01:09:04,278 De vraag was, doet het effect de efficiëntie van toegang 1568 01:09:04,278 --> 01:09:05,819 deze elementen in de lijst. 1569 01:09:05,819 --> 01:09:06,930 Eigenlijk ja. 1570 01:09:06,930 --> 01:09:09,569 Omdat we weten if-- laten zeggen dat we willen openen 1571 01:09:09,569 --> 01:09:14,520 het tweede element van de array, we weten kunnen we gewoon doen scala beugel 1, recht. 1572 01:09:14,520 --> 01:09:16,630 Het gaat altijd om worden dezelfde locatie. 1573 01:09:16,630 --> 01:09:20,720 Maar als we willen dat 3 te krijgen, We kunnen niet zomaar zeggen, ga je dat 3. 1574 01:09:20,720 --> 01:09:24,009 We moeten zeggen, OK, beginnen bij het begin van de lijst, 1575 01:09:24,009 --> 01:09:26,050 en nu zijn we eigenlijk te lopen door tot we 1576 01:09:26,050 --> 01:09:28,149 vinden het nummer zijn we geïnteresseerd in. 1577 01:09:28,149 --> 01:09:30,790 >> Dus in dit geval we zeggen, OK Dit is het eerste cijfer. 1578 01:09:30,790 --> 01:09:32,207 Dus in wezen, dat is index 0. 1579 01:09:32,207 --> 01:09:33,790 Nu moeten we het tweede nummer te vinden. 1580 01:09:33,790 --> 01:09:34,740 Dat is de index 1. 1581 01:09:34,740 --> 01:09:39,180 Dus dat is eigenlijk gaat to-- net toegang, gaat N tijd in beslag nemen. 1582 01:09:39,180 --> 01:09:42,027 Koele, grote oude N. Yeah. 1583 01:09:42,027 --> 01:09:43,903 >> Publiek: Wat zijn elk van de lijsten? 1584 01:09:43,903 --> 01:09:45,401 Zijn zij elk arrays, of wat? 1585 01:09:45,401 --> 01:09:46,859 SPEAKER 1: Dat is een grote vraag. 1586 01:09:46,859 --> 01:09:48,950 Welke elke structuren die ik heb getekend? 1587 01:09:48,950 --> 01:09:51,649 Ze zijn nodes. 1588 01:09:51,649 --> 01:09:53,720 Dus elk van deze kleine structuur twee delen. 1589 01:09:53,720 --> 01:09:55,264 Het heeft een integer die het bezit. 1590 01:09:55,264 --> 01:09:57,180 Dat is de feitelijke gegevens dat het vasthouden. 1591 01:09:57,180 --> 01:09:58,770 Dat is het soort van nuttig onderdeel. 1592 01:09:58,770 --> 01:10:00,820 En dit is wat maakt het een gelinkte lijst, 1593 01:10:00,820 --> 01:10:03,690 het heeft een pointer naar de volgende knoop. 1594 01:10:03,690 --> 01:10:05,260 Geweldige vraag. 1595 01:10:05,260 --> 01:10:11,320 Oké, dus laten we eens kijken erg snel kijken naar enkele voorbeelden van wat 1596 01:10:11,320 --> 01:10:12,820 we zouden kunnen doen met gekoppelde lijsten. 1597 01:10:12,820 --> 01:10:16,920 >> Dus een zeer snelle voorbeeld is, stel dat we willen een onderzoek doen. 1598 01:10:16,920 --> 01:10:20,240 Wat voor soort onderzoek niet kunnen we doen op verbonden lijsten? 1599 01:10:20,240 --> 01:10:21,150 >> Publiek: Binary. 1600 01:10:21,150 --> 01:10:21,900 >> SPEAKER 1: Binary. 1601 01:10:21,900 --> 01:10:23,408 Waarom kunnen we niet gebruiken binary search? 1602 01:10:23,408 --> 01:10:25,181 >> PUBLIEK: [onverstaanbaar]. 1603 01:10:25,181 --> 01:10:28,180 SPEAKER 1: Recht, omdat met binaire search, moesten we vertrouwen op het feit 1604 01:10:28,180 --> 01:10:31,300 dat we konden gewoon springen in de rij op elk moment. 1605 01:10:31,300 --> 01:10:33,420 We kunnen alleen maar zeggen, ga het middelste element. 1606 01:10:33,420 --> 01:10:35,550 Met hier, zoals we al zeiden een beetje eerder, 1607 01:10:35,550 --> 01:10:37,270 We kunnen niet zomaar springen het middelste element. 1608 01:10:37,270 --> 01:10:38,978 Om eventuele vinden element, we eigenlijk 1609 01:10:38,978 --> 01:10:40,780 hoeft te lopen door onze hele lijst. 1610 01:10:40,780 --> 01:10:43,910 >> Dus als we wilden om een ​​zoekopdracht te doen, de beste wat we kunnen doen is gewoon een lineair zoeken. 1611 01:10:43,910 --> 01:10:45,910 We beginnen bij het hoofd, we check-- laten we zeggen dat we 1612 01:10:45,910 --> 01:10:47,790 op zoek naar 9-- beginnen we aan het hoofd. 1613 01:10:47,790 --> 01:10:49,200 We zeggen, dit is 9? 1614 01:10:49,200 --> 01:10:49,710 Nee. 1615 01:10:49,710 --> 01:10:50,430 Is dit 9? 1616 01:10:50,430 --> 01:10:50,930 Nee. 1617 01:10:50,930 --> 01:10:51,620 Is dit 9? 1618 01:10:51,620 --> 01:10:53,730 Ja, we vonden het. 1619 01:10:53,730 --> 01:10:56,350 OK, dat is alles. 1620 01:10:56,350 --> 01:10:57,940 Hier is een klein beetje van de pseudo-code. 1621 01:10:57,940 --> 01:11:01,420 Ik ga dit voor u te verlaten jongens over te churn op uw eigen, 1622 01:11:01,420 --> 01:11:04,370 gewoon omdat we bijna een beetje kort op tijd. 1623 01:11:04,370 --> 01:11:05,610 >> Laten we praten over inbrengen. 1624 01:11:05,610 --> 01:11:08,644 We zagen een echt cool demo van dit in het college waar we zeiden: 1625 01:11:08,644 --> 01:11:11,560 Oké, we hebben dit verband overzicht waar iedereen wijst naar elkaar, 1626 01:11:11,560 --> 01:11:13,400 en iemand komt op het podium. 1627 01:11:13,400 --> 01:11:17,050 Hoe doen we dat in te voegen persoon in onze gelinkte lijst? 1628 01:11:17,050 --> 01:11:20,150 Nou, een verkeerde manier te doen, die is dat ik denk dat wat we voor het eerst zag, 1629 01:11:20,150 --> 01:11:22,740 wanneer de persoon voorzijde automatisch 1630 01:11:22,740 --> 01:11:25,270 wees naar de nieuwe persoon. 1631 01:11:25,270 --> 01:11:29,057 En dan hebben we soort van verlaten de tweede helft van de lijst, toch? 1632 01:11:29,057 --> 01:11:31,390 Omdat we niet weten waar het in het geheugen meer. 1633 01:11:31,390 --> 01:11:34,750 Dus om heel voorzichtig te zijn over de volgorde waarin we voegen dingen. 1634 01:11:34,750 --> 01:11:37,860 >> Dus hier, laten we zeggen dat we willen zet 1 op de voorkant van onze lijst. 1635 01:11:37,860 --> 01:11:42,190 Ten eerste, we hebben 1 punt aan de tweede element-- of het element 1636 01:11:42,190 --> 01:11:44,170 dat bestaat uit 1. 1637 01:11:44,170 --> 01:11:47,210 Dus, we dat doen, dus we zijn niet gaan naar de tweede helft te verliezen. 1638 01:11:47,210 --> 01:11:51,020 En nu kunnen we het hoofd punt moeten 1. 1639 01:11:51,020 --> 01:11:52,930 Dus nogmaals, dit is gewoon als super hoog niveau. 1640 01:11:52,930 --> 01:11:55,290 Dit is hoe we een knoop zou voegen. 1641 01:11:55,290 --> 01:11:57,337 We hebben een heleboel pseudo-code hier-- sorry, 1642 01:11:57,337 --> 01:11:59,170 Ik weet niet waarom ik ben noemen het pseudo-code. 1643 01:11:59,170 --> 01:12:00,350 Het eigenlijke code. 1644 01:12:00,350 --> 01:12:02,570 U kunt gaan check it out later. 1645 01:12:02,570 --> 01:12:04,870 >> Oké, laten we heel quickly-- meer vragen 1646 01:12:04,870 --> 01:12:07,120 op gelinkte lijsten voordat ik verplaatsen naar een paar andere gegevens 1647 01:12:07,120 --> 01:12:08,450 structuren in de laatste 10 minuten. 1648 01:12:08,450 --> 01:12:10,340 >> Publiek: Moeten we nu hoe te schrijven op een test? 1649 01:12:10,340 --> 01:12:11,040 >> SPEAKER 1: Moeten we weten hoe to-- 1650 01:12:11,040 --> 01:12:12,030 >> Publiek: Schrijf het op een test. 1651 01:12:12,030 --> 01:12:14,071 >> SPEAKER 1: We moeten to-- je moet bereid zijn 1652 01:12:14,071 --> 01:12:18,870 om te schrijven, invoegen, verwijderen en zoek gekoppelde lijsten op de test. 1653 01:12:18,870 --> 01:12:21,480 Dat is iets dat we zou verwachten dat je te doen. 1654 01:12:21,480 --> 01:12:22,750 Ga gewoon overheen. 1655 01:12:22,750 --> 01:12:26,460 Als u vragen heeft over de code, schiet je TF een e-mail, 1656 01:12:26,460 --> 01:12:27,750 kom naar de kantooruren. 1657 01:12:27,750 --> 01:12:30,041 Er is nog steeds veel tijd om te studeren, geen zorgen te maken. 1658 01:12:30,041 --> 01:12:32,290 Oké, welke de andere vragen over gelinkte lijsten? 1659 01:12:32,290 --> 01:12:32,986 Ja. 1660 01:12:32,986 --> 01:12:37,360 >> Publiek: Dus als je geen gebruik maken van de aanwijzer naar de ene rechts 1661 01:12:37,360 --> 01:12:41,308 voordat u de aanwijzer voor gebruik de een aan de linkerkant, dat is 1662 01:12:41,308 --> 01:12:43,211 het equivalent schrappen alles, toch? 1663 01:12:43,211 --> 01:12:43,877 SPEAKER 1: Ja. 1664 01:12:43,877 --> 01:12:44,820 PUBLIEK: [onverstaanbaar]. 1665 01:12:44,820 --> 01:12:47,570 SPEAKER 1: Juist, omdat we niet kunnen get it, het is eigenlijk nog erger. 1666 01:12:47,570 --> 01:12:50,690 Want niet alleen weten we niet waar het is, kunnen we niet langer te gebruiken, 1667 01:12:50,690 --> 01:12:53,580 maar we've-- we niet vrijmaken dat het geheugen niet meer. 1668 01:12:53,580 --> 01:12:58,570 Dus het is gewoon opknoping rond en niet nuttig zijn omdat we niet kunnen vinden. 1669 01:12:58,570 --> 01:12:59,580 Ja, koel vraag. 1670 01:12:59,580 --> 01:13:01,280 >> Oké, laten we praten over stacks. 1671 01:13:01,280 --> 01:13:03,230 We zagen stapels zeer snel. 1672 01:13:03,230 --> 01:13:06,280 Ze zijn voor het eerst in de laatste out datastructuren. 1673 01:13:06,280 --> 01:13:10,664 Dus we denken aan de stapels in Annenberg trays waar we stapelen dingen bovenop. 1674 01:13:10,664 --> 01:13:12,580 En als je gaat komen halen een dienblad, je bent 1675 01:13:12,580 --> 01:13:15,870 altijd naar de ene op de te nemen top, dat is de meest recently-- 1676 01:13:15,870 --> 01:13:18,840 dat is het ding dat we het meest onlangs boven op de stapel. 1677 01:13:18,840 --> 01:13:22,680 Dus je kunt soort denken van dit soort visueel als je denkt van stacks. 1678 01:13:22,680 --> 01:13:26,010 En dan hebben we iets popped van de bovenkant van de stapel. 1679 01:13:26,010 --> 01:13:29,850 >> Als we zijn-- oh, en de woorden die we gebruiken wanneer we praten over deze gegevens 1680 01:13:29,850 --> 01:13:32,680 structuren gewoonlijk, als we zet iets op de stapel, 1681 01:13:32,680 --> 01:13:34,550 we zeggen dat we duwen op de stapel. 1682 01:13:34,550 --> 01:13:38,450 En als we iets te nemen uit de stapel, we zeggen dat we knallen uit de stapel. 1683 01:13:38,450 --> 01:13:41,470 Als je gaat te implementeren een stack-- die ik zeker 1684 01:13:41,470 --> 01:13:44,840 raden u out-- proberen je gaat te willen om bij te houden, 1685 01:13:44,840 --> 01:13:46,669 laten we zeggen dat je met behulp van een array. 1686 01:13:46,669 --> 01:13:48,960 Ik weet dat in het college hebben we gesproken over het gebruik van beide arrays 1687 01:13:48,960 --> 01:13:51,120 of verbonden lijsten een stack te implementeren. 1688 01:13:51,120 --> 01:13:53,490 Als u gebruik maakt van een array, moet je keep-- 1689 01:13:53,490 --> 01:13:56,750 excuus mij-- we nodig hebben om bij te houden de grootte en capaciteit. 1690 01:13:56,750 --> 01:14:00,820 Dus het maximumaantal dat onze stack kan houden. 1691 01:14:00,820 --> 01:14:03,240 Vragen over stapels? 1692 01:14:03,240 --> 01:14:05,657 >> Publiek: Wat is het verschil tussen de omvang en capaciteit? 1693 01:14:05,657 --> 01:14:08,573 SPEAKER 1: Het verschil tussen omvang en capaciteit, geweldige vraag. 1694 01:14:08,573 --> 01:14:10,330 Dus laten we zeggen dat we met behulp van een matrix, en we 1695 01:14:10,330 --> 01:14:13,340 toewijzen voldoende ruimte voor 10 gehele getallen. 1696 01:14:13,340 --> 01:14:15,050 En we beginnen op te vullen die up. 1697 01:14:15,050 --> 01:14:17,330 En duwen we dingen op, en we knallen er op los. 1698 01:14:17,330 --> 01:14:21,060 Wij willen houden van de maximale te houden getal we kunnen houden, dat is de capaciteit. 1699 01:14:21,060 --> 01:14:24,790 En we willen houden van de te houden huidige aantal die we hebben, dat is de grootte. 1700 01:14:24,790 --> 01:14:26,530 Goede vraag. 1701 01:14:26,530 --> 01:14:28,720 Iets anders op stapels? 1702 01:14:28,720 --> 01:14:31,260 Oké, laten we praten over verrassing, wachtrijen. 1703 01:14:31,260 --> 01:14:37,034 >> In tegenstelling tot de stacks, die voor het eerst in de laatste out, deze zijn first in, first out. 1704 01:14:37,034 --> 01:14:38,450 Dus dit is like-- denken aan een lijn. 1705 01:14:38,450 --> 01:14:41,530 Denk aan de rij bij de Apple Winkel om wat product te krijgen. 1706 01:14:41,530 --> 01:14:44,540 En de eerste persoon in de rij moet de eerste persoon die geholpen. 1707 01:14:44,540 --> 01:14:48,270 Dus eerst ding dat geduwd is dit het eerste ding dat is geknald. 1708 01:14:48,270 --> 01:14:49,460 Koel? 1709 01:14:49,460 --> 01:14:52,890 Zeer similarly-- oh, de woorden die we gebruiken in plaats van push en pop-- 1710 01:14:52,890 --> 01:14:55,060 die ik zojuist gebruikt, Ik ben sorry-- is dat we zeggen: 1711 01:14:55,060 --> 01:14:58,170 als we om iets in de wachtrij, zeggen we enqueued het. 1712 01:14:58,170 --> 01:15:00,795 Als we nemen iets uit de wachtrij, zeggen we dat we dequeued. 1713 01:15:00,795 --> 01:15:01,950 Het. 1714 01:15:01,950 --> 01:15:05,454 Ik kan het uitspreken van die verkeerd, maar je krijgt het idee. 1715 01:15:05,454 --> 01:15:08,370 En dan weer, net als stacks, als we de tenuitvoerlegging van deze als array, 1716 01:15:08,370 --> 01:15:12,350 we nodig hebben om bij te houden van de te houden grootte, het vermogen, en het hoofd. 1717 01:15:12,350 --> 01:15:13,570 Wat bedoel ik door het hoofd? 1718 01:15:13,570 --> 01:15:15,278 Waarom hebben we moeten blijven spoor van het hoofd? 1719 01:15:15,278 --> 01:15:18,549 1720 01:15:18,549 --> 01:15:21,685 >> Publiek: Want dat is waar het begin van de lijst is. 1721 01:15:21,685 --> 01:15:24,810 SPEAKER 1: Ja, in principe is het hoofd waarbij het begin van onze wachtrij. 1722 01:15:24,810 --> 01:15:29,460 Omdat we weten, in tegenstelling tot de stacks, which-- Ik ga proberen om dit way-- gezicht 1723 01:15:29,460 --> 01:15:33,570 we weten dat het altijd gaat om krimpen deze manier en groeien op deze manier. 1724 01:15:33,570 --> 01:15:37,840 Wachtrijen, mensen komen op het einde en vertrekken vanaf het begin, 1725 01:15:37,840 --> 01:15:40,620 dus we moeten houden waar de start. 1726 01:15:40,620 --> 01:15:43,540 Dat is wat ik bedoel met dat we nodig hebben om bijhouden waar het hoofd is. 1727 01:15:43,540 --> 01:15:45,190 Koel? 1728 01:15:45,190 --> 01:15:46,440 Prima. 1729 01:15:46,440 --> 01:15:49,250 Acht minuten, paar meer onderwerpen, kunnen we het doen. 1730 01:15:49,250 --> 01:15:51,240 >> Oké, hash tafel. 1731 01:15:51,240 --> 01:15:53,095 We spraken kort over hash tabellen. 1732 01:15:53,095 --> 01:15:55,720 Voor de quiz, moet je gewoon ze te begrijpen op een hoog niveau. 1733 01:15:55,720 --> 01:15:58,330 Het basisidee is dat je deze gegevens. 1734 01:15:58,330 --> 01:16:02,570 En we willen om toegang te krijgen in de tijd dat sneller dan iets als een gekoppelde 1735 01:16:02,570 --> 01:16:03,070 lijst. 1736 01:16:03,070 --> 01:16:05,290 Omdat we zeiden, als we zoeken via een gekoppelde lijst, 1737 01:16:05,290 --> 01:16:06,248 dat N tijd kon nemen. 1738 01:16:06,248 --> 01:16:08,810 Zelfs toegang kan nemen N keer in een gekoppelde lijst. 1739 01:16:08,810 --> 01:16:12,930 Hash tabellen geven ons een manier dat we kunnen sneller toegang tot de dingen, en nog veel meer 1740 01:16:12,930 --> 01:16:16,970 snel zoeken naar dingen, zonder met de beperkingen van een array 1741 01:16:16,970 --> 01:16:19,030 waar we vaste grootte. 1742 01:16:19,030 --> 01:16:23,950 >> Dus we denken van een datastructuur, waar, waar we het in de datastructuur 1743 01:16:23,950 --> 01:16:26,620 afhankelijk is van dit magische hash-functie. 1744 01:16:26,620 --> 01:16:30,630 Dus in dit geval, de magische hash functie is gewoon een woord, 1745 01:16:30,630 --> 01:16:34,027 het controleren van wat de eerste letter is, en dan gewoon sorteren het alfabet. 1746 01:16:34,027 --> 01:16:36,110 Dus hebben we in wezen zet ze in verschillende bakken. 1747 01:16:36,110 --> 01:16:39,510 Als we zien banaan, zeggen we: Oké, laten we in de B-emmer. 1748 01:16:39,510 --> 01:16:41,820 Wanneer we zien dat Apple, laten zet het in de A-emmer. 1749 01:16:41,820 --> 01:16:44,744 Als we zagen abrikoos, laten we zet in de A-emmer. 1750 01:16:44,744 --> 01:16:45,600 OK? 1751 01:16:45,600 --> 01:16:51,090 >> Dus stel ik waren op zoek voor-- I weet niet, wat is een ander fruit? 1752 01:16:51,090 --> 01:16:52,920 Stel dat ik was op zoek naar oranje. 1753 01:16:52,920 --> 01:16:55,340 Waar moet ik op letten? 1754 01:16:55,340 --> 01:16:56,420 In de O emmer. 1755 01:16:56,420 --> 01:17:01,450 Ja, er is maar één plaats dat oranje zou kunnen zijn, OK? 1756 01:17:01,450 --> 01:17:05,370 Dus ik al eerder zei wat er gebeurt if-- goed ik al eerder zei, 1757 01:17:05,370 --> 01:17:10,030 laten we zeggen dat we zetten abrikoos in-- maar ik echt te pakken van het feit dat, oh nee, 1758 01:17:10,030 --> 01:17:14,990 als ik bessen in te zetten, is het gaan strijd zijn met banaan. 1759 01:17:14,990 --> 01:17:20,160 Waar we het als er al iets in onze tafel? 1760 01:17:20,160 --> 01:17:22,760 Nou, we hebben een paar opties. 1761 01:17:22,760 --> 01:17:26,160 >> Optie nummer één is lineair probing, die in feite betekent, 1762 01:17:26,160 --> 01:17:28,690 laten we zeggen dat ik wil proberen zet bessen, en ik zie, oh nee, 1763 01:17:28,690 --> 01:17:31,170 bananen er al, Ik zeg OK, laat 1764 01:17:31,170 --> 01:17:33,810 me kijken naar de volgende beschikbare plek. 1765 01:17:33,810 --> 01:17:36,744 Dus ik loop naar beneden, zeg ik, oh, er is niets in de D emmer. 1766 01:17:36,744 --> 01:17:39,410 Ik kan niet echt denken van een fruit die beginnen met de letter D, 1767 01:17:39,410 --> 01:17:41,620 dus ik ga gewoon bessen daar zetten. 1768 01:17:41,620 --> 01:17:42,650 Durian. 1769 01:17:42,650 --> 01:17:44,590 OK, dus omdat er niets daar nog, 1770 01:17:44,590 --> 01:17:47,020 Ik kan net zo goed gewoon gebruik maken van die plek. 1771 01:17:47,020 --> 01:17:48,805 Wat is het nadeel van die? 1772 01:17:48,805 --> 01:17:49,300 >> Publiek: Het is niet in orde. 1773 01:17:49,300 --> 01:17:50,008 >> SPEAKER 1: Sorry? 1774 01:17:50,008 --> 01:17:51,280 Publiek: Het is niet in orde. 1775 01:17:51,280 --> 01:17:53,113 >> SPEAKER 1: Het is out-- rechts, kunnen we eindigen 1776 01:17:53,113 --> 01:17:56,380 met dingen die niet in-- opgeslagen in emmers op de manier 1777 01:17:56,380 --> 01:17:57,790 dat wij verwachten dat ze zijn. 1778 01:17:57,790 --> 01:18:00,670 Dus als we waren op zoek voor bessen, voordat we zeiden: 1779 01:18:00,670 --> 01:18:02,000 oh we kunnen kijken in een emmer. 1780 01:18:02,000 --> 01:18:03,650 Dit zou slechts één bak. 1781 01:18:03,650 --> 01:18:07,380 Maar nu, echt, het zou kunnen zijn in de emmers, toch? 1782 01:18:07,380 --> 01:18:10,400 >> OK, hier is een andere optie, aparte chaining-- 1783 01:18:10,400 --> 01:18:16,630 dat is het idee dat we gaan een beetje later in P set 5 gebruiken. 1784 01:18:16,630 --> 01:18:19,340 Liever dan gewoon een ruimte in elke emmer, 1785 01:18:19,340 --> 01:18:23,610 waarom doen we niet elke emmer is een verwijzing naar een gekoppelde lijst? 1786 01:18:23,610 --> 01:18:28,570 Indien wij zeggen, OK, is er een emmer voor alles dat begint met A. 1787 01:18:28,570 --> 01:18:31,990 En er is gewoon om een ​​gekoppelde lijst van vruchten die beginnen met A. 1788 01:18:31,990 --> 01:18:36,240 Dus als we een nieuwe fruit, laten we zeggen we get-- we avocado, hebben we appel, 1789 01:18:36,240 --> 01:18:39,530 laten we zeggen dat we abrikoos, hoe zouden we in de lijst? 1790 01:18:39,530 --> 01:18:43,330 Nou we zouden gaan emmer 0, en we zouden plaatst u gewoon in onze vond lijst 1791 01:18:43,330 --> 01:18:45,320 simpel als dat. 1792 01:18:45,320 --> 01:18:47,160 >> Nu ik blijf zeggen emmer. 1793 01:18:47,160 --> 01:18:49,470 We kunnen dit implementeren in een aantal manieren. 1794 01:18:49,470 --> 01:18:52,040 Een typische manier waarop dit soort foto doet vermoeden, 1795 01:18:52,040 --> 01:18:55,580 is misschien met een reeks van verwijzingen naar gelinkte lijsten. 1796 01:18:55,580 --> 01:18:58,174 Dat is een manier we kunnen implementeren van een hash tabel. 1797 01:18:58,174 --> 01:19:01,090 Publiek: Wilt u een ander nodig lijst omdat banaan en bessen uit zijn 1798 01:19:01,090 --> 01:19:01,591 van de orde? 1799 01:19:01,591 --> 01:19:03,298 SPEAKER 1: Wilt u need-- ah, zou je 1800 01:19:03,298 --> 01:19:06,310 een andere lijst omdat banaan nodig en bessen zijn niet in orde? 1801 01:19:06,310 --> 01:19:09,880 In dit geval onze hashfunctie, die ons vertelt waar te dingen te zetten 1802 01:19:09,880 --> 01:19:11,647 zich niet bekommert om de tweede letter. 1803 01:19:11,647 --> 01:19:14,730 Het maakt niet schelen alphabetizing, Het geeft alleen over de eerste letter. 1804 01:19:14,730 --> 01:19:15,672 Vraag? 1805 01:19:15,672 --> 01:19:18,947 >> Publiek: Wat is de definitie van die functie, en hoe ziet het eruit? 1806 01:19:18,947 --> 01:19:19,780 SPEAKER 1: Ah, goed. 1807 01:19:19,780 --> 01:19:22,450 OK, dus we hoeven niet te te veel zorgen voor deze quiz. 1808 01:19:22,450 --> 01:19:23,700 Dus ik heb niet in de dia's. 1809 01:19:23,700 --> 01:19:26,320 We gaan worden ingevoerd om het voor P ingesteld 5. 1810 01:19:26,320 --> 01:19:31,520 Maar in principe, het zegt, krijgt een nieuw element, waar moet ik het zeggen? 1811 01:19:31,520 --> 01:19:35,450 Of, laten we zeggen dat ik ben op zoek naar een element, waarbij het misschien? 1812 01:19:35,450 --> 01:19:37,860 Ja, grote vraag. 1813 01:19:37,860 --> 01:19:40,870 >> OK, heel snel, bomen en probeert. 1814 01:19:40,870 --> 01:19:44,779 Dus een boom is gewoon een soort georganiseerde datastructuur. 1815 01:19:44,779 --> 01:19:47,820 En we gaan een heleboel foto's te zien dat zal deze super duidelijk maken. 1816 01:19:47,820 --> 01:19:51,180 En een trie, die we zagen in de klas, is een heel bijzondere soort boom 1817 01:19:51,180 --> 01:19:53,440 die in wezen werkt als een multi-level hash tafel. 1818 01:19:53,440 --> 01:19:54,390 Het is super cool. 1819 01:19:54,390 --> 01:19:56,030 We gaan om het te zien in slechts een seconde. 1820 01:19:56,030 --> 01:19:57,821 Oké, dus laten we praten over bomen als eerste. 1821 01:19:57,821 --> 01:20:01,040 Dus dit is echt typisch voorbeeld van een boom, waar we enkele hiërarchie. 1822 01:20:01,040 --> 01:20:03,220 Je ziet dat men bij de top, toch? 1823 01:20:03,220 --> 01:20:06,190 En ik kan zeggen dat de top omdat er duidelijk een bestelling omdat we 1824 01:20:06,190 --> 01:20:08,260 hebben deze pijlen naar beneden. 1825 01:20:08,260 --> 01:20:11,740 Zodat het ding boven, Ik noem dat de root node. 1826 01:20:11,740 --> 01:20:13,080 Dus een is de root node. 1827 01:20:13,080 --> 01:20:17,330 En wat aan de onderkant, die niets hebben komende uit hen, 1828 01:20:17,330 --> 01:20:18,783 Ik zeg dit zijn de leaf nodes. 1829 01:20:18,783 --> 01:20:22,730 Dus 8,9 5, 6, 7, OK. 1830 01:20:22,730 --> 01:20:27,740 En meestal de terminologie we kan zeggen is, 1 is 3's ouder. 1831 01:20:27,740 --> 01:20:30,740 Dus het is het ding dat komt niveau boven het, en wijst op het. 1832 01:20:30,740 --> 01:20:32,710 En 3 is 1 kind. 1833 01:20:32,710 --> 01:20:34,505 Het is het ding dat 1 punten. 1834 01:20:34,505 --> 01:20:35,005 Vraag? 1835 01:20:35,005 --> 01:20:36,414 >> PUBLIEK: Kunt u terug te gaan naar de vorige dia, alstublieft? 1836 01:20:36,414 --> 01:20:37,388 >> SPEAKER 1: Kan ik terug te gaan naar de vorige dia? 1837 01:20:37,388 --> 01:20:37,888 Tuurlijk. 1838 01:20:37,888 --> 01:20:40,640 1839 01:20:40,640 --> 01:20:41,390 Vragen over dit? 1840 01:20:41,390 --> 01:20:42,764 Of je wilde om naar te kijken? 1841 01:20:42,764 --> 01:20:44,650 Publiek: Ik heb gewoon niet doorheen. 1842 01:20:44,650 --> 01:20:47,100 >> SPEAKER 1: OK, cool, ja. 1843 01:20:47,100 --> 01:20:49,846 Deze zullen alle online zijn dus niet zorgen te maken over het krijgen van elk woord. 1844 01:20:49,846 --> 01:20:51,720 En in het belang van tijd, ik ga om te gaan. 1845 01:20:51,720 --> 01:20:53,270 Is dat goed? 1846 01:20:53,270 --> 01:20:53,790 Geweldig. 1847 01:20:53,790 --> 01:20:55,720 OK, cool. 1848 01:20:55,720 --> 01:20:57,790 Dus laten we praten over een zeer specifieke kind-- 1849 01:20:57,790 --> 01:20:59,710 dus we hebben deze algemene structuur van de bomen, 1850 01:20:59,710 --> 01:21:02,876 dat is gewoon iets dat ons in staat stelt van de soort rang dingen hiërarchisch. 1851 01:21:02,876 --> 01:21:06,000 1852 01:21:06,000 --> 01:21:11,110 >> Binaire bomen zijn dingen waar elke knooppunt hooguit twee kinderen. 1853 01:21:11,110 --> 01:21:11,690 OK? 1854 01:21:11,690 --> 01:21:14,560 En ik zei: OK, dus dat lijkt aan deze beschrijving past. 1855 01:21:14,560 --> 01:21:16,830 Ik zei knooppunt, niet een binaire zoekboom. 1856 01:21:16,830 --> 01:21:19,720 Wat is een binaire zoekboom? 1857 01:21:19,720 --> 01:21:20,440 Het is opgelost. 1858 01:21:20,440 --> 01:21:22,890 Zodat u weet dat er in een binaire zoekboom, 1859 01:21:22,890 --> 01:21:26,580 alles aan de tree-- alles naar links knooppunten kleiner, 1860 01:21:26,580 --> 01:21:28,830 en alles aan de knooppunten rechts is groter. 1861 01:21:28,830 --> 01:21:30,620 Dus dit is niet een binaire zoekboom. 1862 01:21:30,620 --> 01:21:32,770 Dit is gewoon een binaire boom. 1863 01:21:32,770 --> 01:21:35,910 Dus we hebben grote categorie bomen, iets kleiner categorie 1864 01:21:35,910 --> 01:21:40,106 van binaire bomen, zoeken op a-- binary search bomen. 1865 01:21:40,106 --> 01:21:41,540 Koel? 1866 01:21:41,540 --> 01:21:44,410 Prima. 1867 01:21:44,410 --> 01:21:47,380 >> En nu, de meeste plezier van alles, we hebben onze pogingen. 1868 01:21:47,380 --> 01:21:49,500 Jullie zag dit beeld in college? 1869 01:21:49,500 --> 01:21:51,790 Ja, zou het super vertrouwd kijken. 1870 01:21:51,790 --> 01:21:54,252 Laten we eens kijken hoe we misschien deze daadwerkelijk uit te voeren. 1871 01:21:54,252 --> 01:21:56,210 Of eigenlijk, laten we eens kijken, betekent dat zelfs komen? 1872 01:21:56,210 --> 01:21:56,731 Nee. 1873 01:21:56,731 --> 01:21:59,480 Oké, we hebben niet eens te zorgen over dat lage niveau spul. 1874 01:21:59,480 --> 01:22:02,320 We zullen genoeg tijd om vervolgens te pakken P ingesteld 5. 1875 01:22:02,320 --> 01:22:05,780 Maar voor nu, gewoon erg hoog niveau, we weten dat dit is wat het lijkt. 1876 01:22:05,780 --> 01:22:08,530 We beschreef het als een soort van een multi-level hash table 1877 01:22:08,530 --> 01:22:12,264 where-- wat doet deze winkel? 1878 01:22:12,264 --> 01:22:14,430 Dit slaat namen wetenschappers dat we kunnen eigenlijk 1879 01:22:14,430 --> 01:22:20,690 zoeken door gewoon een soort van na de verschillende hash tabellen neer, oké? 1880 01:22:20,690 --> 01:22:24,730 >> En het doel daarvan is, in theorie, ze zorgen voor een constante tijd opzoeken. 1881 01:22:24,730 --> 01:22:29,630 Dus als ik wil om te controleren dat, bijvoorbeeld, die is someone-- 1882 01:22:29,630 --> 01:22:33,410 Mandel dat in deze trie, kon ik heel snel 1883 01:22:33,410 --> 01:22:36,260 in linear-- spijt me, in constante tijd, uitzoeken 1884 01:22:36,260 --> 01:22:39,010 ongeacht of het in de Trie. 1885 01:22:39,010 --> 01:22:41,500 Maar een oplichter, is kijken hoe groot deze is. 1886 01:22:41,500 --> 01:22:44,120 We zijn niet eens dat het opslaan veel data en het is enorm. 1887 01:22:44,120 --> 01:22:47,950 Dus een groot nadeel is dat het gebruikt een grote hoeveelheid geheugen. 1888 01:22:47,950 --> 01:22:48,746 Ja. 1889 01:22:48,746 --> 01:22:50,610 >> Publiek: Waarom heeft het te bieden constante tijd, precies? 1890 01:22:50,610 --> 01:22:51,376 >> SPEAKER 1: Nog een keer? 1891 01:22:51,376 --> 01:22:53,360 >> Publiek: Wat is de intuïtie want waarom biedt het constante tijd? 1892 01:22:53,360 --> 01:22:54,610 >> SPEAKER 1: Goede vraag. 1893 01:22:54,610 --> 01:22:56,030 Waarom is het zorgen voor een constante tijd? 1894 01:22:56,030 --> 01:22:59,280 Dus wat we kunnen doen is, laten we zeggen dat we op zoek bent naar Mandel. 1895 01:22:59,280 --> 01:23:02,830 We weten dat we willen beginnen in het eerste niveau bij M. 1896 01:23:02,830 --> 01:23:06,890 We weten dat we willen volgen om E. So Dat is een stap, twee stappen, toch? 1897 01:23:06,890 --> 01:23:10,710 We volgen het naar N. volgen we het naar D. We volgen het naar E. volgen we het naar L. 1898 01:23:10,710 --> 01:23:15,100 En dan de volgende ding we controleren says-- deze delta zegt Ja, dat is 1899 01:23:15,100 --> 01:23:15,990 in onze tafel. 1900 01:23:15,990 --> 01:23:16,880 Dat is een woord. 1901 01:23:16,880 --> 01:23:19,900 Dat is een geldige inschrijving in onze trie. 1902 01:23:19,900 --> 01:23:22,450 Dus je zegt, OK, dat duurde zeven stappen. 1903 01:23:22,450 --> 01:23:27,200 Maar als we toegevoegd als een ontelbaar meer wetenschap deze gegevensstructuur, 1904 01:23:27,200 --> 01:23:29,470 we zouden niets hebben om te controleren een ontelbaar meer dingen. 1905 01:23:29,470 --> 01:23:33,580 We alleen ooit zal moeten nemen zeven stappen, de lengte van de persoon 1906 01:23:33,580 --> 01:23:35,260 naam. 1907 01:23:35,260 --> 01:23:39,350 >> Dus, we willen denken runtime als, veronderstel 1908 01:23:39,350 --> 01:23:42,340 verhogen we de grootte van onze datastructuur, hoeveel langer 1909 01:23:42,340 --> 01:23:44,580 gaat het duren? 1910 01:23:44,580 --> 01:23:47,372 In dit geval, als we voegen een bos meer wetenschappers, het maakt niet uit. 1911 01:23:47,372 --> 01:23:49,413 Het is nog steeds te nemen dezelfde hoeveelheid tijd. 1912 01:23:49,413 --> 01:23:50,350 Het is een constante tijd. 1913 01:23:50,350 --> 01:23:50,850 Ja. 1914 01:23:50,850 --> 01:23:53,557 >> Publiek: Hoe weet je niet scannen over de andere nummers? 1915 01:23:53,557 --> 01:23:54,932 SPEAKER 1: Hoe weet ik hoe to-- 1916 01:23:54,932 --> 01:23:58,236 PUBLIEK: Net als hoe weet je je gaat rechtstreeks van M tot E en geen M A? 1917 01:23:58,236 --> 01:23:59,069 SPEAKER 1: Oh, zeker. 1918 01:23:59,069 --> 01:24:01,620 Omdat ik wist dat ik was op zoek naar het woord Mandel, 1919 01:24:01,620 --> 01:24:04,195 en ik weet gewoon dat het M-E. Dus dat-- ja, ga je gang. 1920 01:24:04,195 --> 01:24:06,528 Publiek: Zou je niet hebt kijken naar de andere letters 1921 01:24:06,528 --> 01:24:07,870 in de overige [onhoorbaar] 1922 01:24:07,870 --> 01:24:10,020 >> SPEAKER 1: Ah, zou ik niet hebben om te kijken naar the-- OK, geweldig. 1923 01:24:10,020 --> 01:24:10,790 Dit is een grote vraag. 1924 01:24:10,790 --> 01:24:12,170 Het hangt ervan af hoe we implementeren. 1925 01:24:12,170 --> 01:24:15,350 Als we implementeren als gewoon als een reeks arrays 1926 01:24:15,350 --> 01:24:18,100 waarvan we weten dat E altijd op positie 0, 1927 01:24:18,100 --> 01:24:21,270 Ik weet het niet, wat nummer index is. 1928 01:24:21,270 --> 01:24:24,901 Ja, we kunnen gewoon constant tijd, doen, doen, doen, doen. 1929 01:24:24,901 --> 01:24:25,400 Koel. 1930 01:24:25,400 --> 01:24:27,556 Vraag daar? 1931 01:24:27,556 --> 01:24:30,927 >> PUBLIEK: Is constante tijd hetzelfde als real-time? 1932 01:24:30,927 --> 01:24:33,260 SPEAKER 1: Is constante tijd hetzelfde is real-time? 1933 01:24:33,260 --> 01:24:34,799 Ik ben niet echt zeker real time is. 1934 01:24:34,799 --> 01:24:36,965 PUBLIEK: Net als de tijd dat letterlijk vordert tweede 1935 01:24:36,965 --> 01:24:40,150 door tweede in tegenstelling tot zijn een onafhankelijke variabele. 1936 01:24:40,150 --> 01:24:42,960 >> SPEAKER 1: Oh, ja, je kan denken van het op die manier. 1937 01:24:42,960 --> 01:24:46,240 Met andere woorden, het is niet afhankelijk de omvang van de datastructuur. 1938 01:24:46,240 --> 01:24:48,310 Dat is een manier om te denken. 1939 01:24:48,310 --> 01:24:50,510 Een andere vragen? 1940 01:24:50,510 --> 01:24:53,120 Misschien in de eerste keer in geschiedenis, hebben we op tijd klaar. 1941 01:24:53,120 --> 01:24:57,080 Als u vragen hebt, voel vrij om te komen ons vragen, gaat u naar sectie, 1942 01:24:57,080 --> 01:25:00,190 praten met uw TF, kantoor uren zijn 08:00 en 08:30 1943 01:25:00,190 --> 01:25:03,985 tot 11.00 uur op maandag en dinsdag, dus het is een beetje anders tijd, 1944 01:25:03,985 --> 01:25:05,110 dus zorg ervoor dat je dat mee. 1945 01:25:05,110 --> 01:25:06,048 Ja. 1946 01:25:06,048 --> 01:25:08,673 >> Publiek: Moeten we weten dingen zoals command line argumenten, 1947 01:25:08,673 --> 01:25:10,360 ls dash, dash wat dan ook? 1948 01:25:10,360 --> 01:25:11,840 >> SPEAKER 1: Command line argumenten, en Linux-commando's, 1949 01:25:11,840 --> 01:25:13,010 ja, moet je die kent. 1950 01:25:13,010 --> 01:25:18,234 Very-- het is net als het soort level stuff we behandeld in paragraaf 0, 1951 01:25:18,234 --> 01:25:19,400 zo ver als Linux-commando's go. 1952 01:25:19,400 --> 01:25:20,942 >> Publiek: Zijn de uren in Annenberg? 1953 01:25:20,942 --> 01:25:23,525 SPEAKER 1: Office uren, ik ben niet helemaal zeker waar ze zijn. 1954 01:25:23,525 --> 01:25:25,980 Maar je kunt het website, en het zal u vertellen. 1955 01:25:25,980 --> 01:25:27,499