1 00:00:00,000 --> 00:00:03,269 >> [Musik spiller] 2 00:00:03,269 --> 00:00:05,391 3 00:00:05,391 --> 00:00:06,640 CAMILLE REKHSON: Hej, alle. 4 00:00:06,640 --> 00:00:10,120 Velkommen til CS50 quiz nul gennemgang session. 5 00:00:10,120 --> 00:00:10,770 Jeg er Camille. 6 00:00:10,770 --> 00:00:13,140 Og jeg har tænkt mig at gå over nogle emner med dig 7 00:00:13,140 --> 00:00:16,890 fyre dag til at hjælpe dig forberede sig til quizzen. 8 00:00:16,890 --> 00:00:20,840 Så her er vores ikke udtømmende liste over emner, du 9 00:00:20,840 --> 00:00:23,210 bør være bekendt med for quizzen. 10 00:00:23,210 --> 00:00:25,740 Disse blev taget direkte fra pensum. 11 00:00:25,740 --> 00:00:26,990 Jeg ved, det virker som en masse. 12 00:00:26,990 --> 00:00:30,870 Men tro mig, har du lært alle disse ting i de sidste par uger. 13 00:00:30,870 --> 00:00:33,210 >> Så vi vil helt sikkert gå over en masse af disse i dag. 14 00:00:33,210 --> 00:00:35,825 Men også tage lidt tid på din egne til at gennemgå disse ting. 15 00:00:35,825 --> 00:00:38,450 Og hvis du ikke var bekendt med hvad nogle af disse ting er, 16 00:00:38,450 --> 00:00:42,400 Sørg for du bede en af ​​os. 17 00:00:42,400 --> 00:00:45,985 Også for den officielle ord på quizzen, gå til dette link. 18 00:00:45,985 --> 00:00:48,860 Dette vil have alle de oplysninger, med hvilken plads du har brug for at gå i, 19 00:00:48,860 --> 00:00:52,960 delt op alfabetisk og også nogle tips om hvilke materialer 20 00:00:52,960 --> 00:00:56,470 du skal studere, og hvad slags af quiz spørgsmål, du kan forvente. 21 00:00:56,470 --> 00:01:01,090 Så sørg for at tjekke det ud. 22 00:01:01,090 --> 00:01:03,810 >> Også nogle tips til, når du er ved at forberede til eksamen. 23 00:01:03,810 --> 00:01:05,730 Øv kodning på papir. 24 00:01:05,730 --> 00:01:09,280 Jeg ved, du har vænnet sig til at have IDE check for dine fejl for dig, 25 00:01:09,280 --> 00:01:12,280 og it's-- når du skriver det op, det er lidt anderledes end at have 26 00:01:12,280 --> 00:01:13,113 at skrive tingene ud. 27 00:01:13,113 --> 00:01:14,560 Så øve gøre nogle kodning. 28 00:01:14,560 --> 00:01:17,910 Nogle gode funktioner til at praktisere gør er strlen og atoi, 29 00:01:17,910 --> 00:01:20,450 se, om du kunne skrive dem ud på egen hånd. 30 00:01:20,450 --> 00:01:21,970 Være bekendt med problemet sæt. 31 00:01:21,970 --> 00:01:24,200 De fleste år der er spørgsmål, der relaterer 32 00:01:24,200 --> 00:01:25,700 til nogle af problemet indstillet materiale. 33 00:01:25,700 --> 00:01:30,480 Så sørg for at du forstår hvordan man gør alle problemområderne sæt. 34 00:01:30,480 --> 00:01:35,240 >> Prøve at gøre nogle af de gamle quizzer under det 75. minut tidspresset. 35 00:01:35,240 --> 00:01:37,290 En masse af de quizzer kan være slags lang. 36 00:01:37,290 --> 00:01:39,680 Så det er en god måde at give dig selv nogle praksis, 37 00:01:39,680 --> 00:01:41,650 og hvor lang tid det vil tage dig, og hvordan du 38 00:01:41,650 --> 00:01:45,360 bør opdele din tid til at sørge for, du er færdig med alt ved udgangen. 39 00:01:45,360 --> 00:01:49,690 Og også, får du en én side, tosidet henvisning ark 40 00:01:49,690 --> 00:01:52,962 at du kan skrive hvad du ønsker på at bruge under quizzen. 41 00:01:52,962 --> 00:01:54,670 Så når du opretter at, det er også 42 00:01:54,670 --> 00:01:57,860 virkelig god måde at studere, fordi vil du slags gennemgå tingene 43 00:01:57,860 --> 00:01:59,610 som du skriver det. 44 00:01:59,610 --> 00:02:05,421 >> Så enhver generelle spørgsmål om quizzen, eller hvordan det fungerer? 45 00:02:05,421 --> 00:02:05,921 Ja. 46 00:02:05,921 --> 00:02:09,167 >> PUBLIKUM: Vil denne liste over emner at du bare viste være tilgængelige for os 47 00:02:09,167 --> 00:02:09,820 online? 48 00:02:09,820 --> 00:02:12,736 >> CAMILLE REKHSON: Denne hele dias show vil blive indsendt til hjemmesiden. 49 00:02:12,736 --> 00:02:16,040 Også den video af dagens gennemgang session vil være på hjemmesiden. 50 00:02:16,040 --> 00:02:19,250 Så du skal ikke bekymre dig for meget om skrive tingene ned overalt. 51 00:02:19,250 --> 00:02:20,437 Det vil alle være der. 52 00:02:20,437 --> 00:02:21,270 Andre spørgsmål? 53 00:02:21,270 --> 00:02:23,810 54 00:02:23,810 --> 00:02:26,960 OK, så lad os komme i gang. 55 00:02:26,960 --> 00:02:30,860 >> Så én ting at være bekendt med, er de forskellige datatyper og størrelse 56 00:02:30,860 --> 00:02:32,486 at de tager på. 57 00:02:32,486 --> 00:02:35,360 Det kan også være en stor ting at skrive ned på din reference ark, 58 00:02:35,360 --> 00:02:37,240 bare for at sikre dig huske alle disse. 59 00:02:37,240 --> 00:02:39,200 Men-- så chars er 1 byte. 60 00:02:39,200 --> 00:02:40,700 Ints er 4 byte. 61 00:02:40,700 --> 00:02:44,450 En lang, lang, som er dybest set mere plads til et helt tal, er 8 bytes. 62 00:02:44,450 --> 00:02:46,560 En flyder er 4 bytes. 63 00:02:46,560 --> 00:02:50,620 En dobbelt, som dybest set giver dig mere plads til at gemme en flyder, er 8 bytes. 64 00:02:50,620 --> 00:02:54,210 Og så en pointer er også 8 bytes. 65 00:02:54,210 --> 00:02:56,270 Eventuelle spørgsmål om disse? 66 00:02:56,270 --> 00:03:00,380 67 00:03:00,380 --> 00:03:05,580 >> Så binære er et andet emne, vi har dækkede en lille smule i dette semester. 68 00:03:05,580 --> 00:03:07,910 Så lad os gøre noget øve med at konvertere 69 00:03:07,910 --> 00:03:10,000 mellem binær og decimal. 70 00:03:10,000 --> 00:03:13,950 Så nogen der har nogen idé om, hvad at første man ville være? 71 00:03:13,950 --> 00:03:32,840 72 00:03:32,840 --> 00:03:34,860 Nogen? 73 00:03:34,860 --> 00:03:36,270 Ja, det er 42. 74 00:03:36,270 --> 00:03:39,200 Så hvis du kan huske, hver af steder i binær 75 00:03:39,200 --> 00:03:41,860 er dybest set ligesom 2 til det sted magt. 76 00:03:41,860 --> 00:03:43,750 >> Således at første stedet er 2 til 0 magt. 77 00:03:43,750 --> 00:03:46,710 Og vi har 0 der, så intet der. 78 00:03:46,710 --> 00:03:48,700 Det næste sted er 2 til den første strøm. 79 00:03:48,700 --> 00:03:51,220 Og vi har en 1 der, så det er dybest set en 2. 80 00:03:51,220 --> 00:03:53,642 Det næste sted er 2 til den anden, hvilket er 4. 81 00:03:53,642 --> 00:03:54,850 Vi har ikke noget der. 82 00:03:54,850 --> 00:03:59,390 Det næste sted over er 2 til den tredje, som ville være 8. 83 00:03:59,390 --> 00:04:02,230 Og vi har en der. 84 00:04:02,230 --> 00:04:03,470 Og vi holde ud. 85 00:04:03,470 --> 00:04:07,720 Det last-- længst til venstre en er, hvor vi har 32. 86 00:04:07,720 --> 00:04:13,437 Og så, vi dybest set har 32 plus 8 plus 2 for at få 42. 87 00:04:13,437 --> 00:04:14,020 Nogen spørgsmål? 88 00:04:14,020 --> 00:04:15,820 >> PUBLIKUM: Hvad er den sænket til? 89 00:04:15,820 --> 00:04:17,399 >> CAMILLE REKHSON: Den sænket dybest set fortæller os det er binær. 90 00:04:17,399 --> 00:04:18,230 Så der er en 2 der. 91 00:04:18,230 --> 00:04:20,579 Hvis der var like-- i den næste en, eller når vi konvertere decimal 92 00:04:20,579 --> 00:04:24,350 til binær, er der en 10 viser os, at dette antal er oprindeligt i decimal. 93 00:04:24,350 --> 00:04:25,194 >> PUBLIKUM: Tak. 94 00:04:25,194 --> 00:04:26,110 >> CAMILLE REKHSON: Ja. 95 00:04:26,110 --> 00:04:28,790 Andre spørgsmål om, at én? 96 00:04:28,790 --> 00:04:31,110 OK, så lad os prøve det næste man så, decimal til binær. 97 00:04:31,110 --> 00:04:35,034 Så tager 50 og lægge det i binær. 98 00:04:35,034 --> 00:04:35,950 Hvordan ville du gøre det? 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 >> PUBLIKUM: 110.010. 102 00:04:49,754 --> 00:04:50,760 >> CAMILLE REKHSON: Ja. 103 00:04:50,760 --> 00:04:54,410 Så en-- en nem måde at tænke på konvertering fra decimal til binær 104 00:04:54,410 --> 00:04:57,950 er at-- det ofte er med til at skrive hvad de forskellige kræfter 2 er. 105 00:04:57,950 --> 00:05:01,460 Og derefter gå igennem det, og se uanset den højeste en af ​​dem 106 00:05:01,460 --> 00:05:05,320 er, at du kan sætte ind på decimaltal uden at gå over den. 107 00:05:05,320 --> 00:05:09,040 >> Så i dette tilfælde er en af beføjelser 2 er 32. 108 00:05:09,040 --> 00:05:10,560 Så 32 går i 50. 109 00:05:10,560 --> 00:05:14,100 Men den næste opstart vil være 64, hvilket naturligvis ikke passer ind i 50. 110 00:05:14,100 --> 00:05:16,343 Så den højeste vi har, er den 32. 111 00:05:16,343 --> 00:05:17,343 Den næste ned til 16. 112 00:05:17,343 --> 00:05:20,140 Og 32 plus 16 er kun 48. 113 00:05:20,140 --> 00:05:21,350 Så der stadig passer ind 50. 114 00:05:21,350 --> 00:05:22,722 Så vi har 1'er i både af dem. 115 00:05:22,722 --> 00:05:25,180 Og derefter, hvis vi holde gå ned, det eneste, vi behøver venstre 116 00:05:25,180 --> 00:05:27,510 er 2 mere for at få 48-50. 117 00:05:27,510 --> 00:05:31,860 Så har vi en 1 i denne stilling, og et 0 i den sidste position. 118 00:05:31,860 --> 00:05:35,371 Fordi der er ikke noget i 2 til 0-pladsen. 119 00:05:35,371 --> 00:05:37,120 Spørgsmål om konvertering decimal til binær? 120 00:05:37,120 --> 00:05:40,830 121 00:05:40,830 --> 00:05:44,100 >> Så lad os nu prøve at gøre nogle binær addition. 122 00:05:44,100 --> 00:05:47,235 Hvordan når du tilføje dem to op? 123 00:05:47,235 --> 00:05:47,735 Ja. 124 00:05:47,735 --> 00:05:51,130 >> Publikum: 11100. 125 00:05:51,130 --> 00:05:52,110 >> CAMILLE REKHSON: Ja. 126 00:05:52,110 --> 00:05:55,540 Så gør tilføjelse i binær er temmelig meget det samme som at gøre det i decimal. 127 00:05:55,540 --> 00:05:59,390 Undtagen hvis du har to 1 væsen adderes, 1 plus 1 er 2, 128 00:05:59,390 --> 00:06:02,980 men 2 i binær er 1 0. 129 00:06:02,980 --> 00:06:07,090 Så du er nødt til at bære en, og holde transporterer det til de par kolonner. 130 00:06:07,090 --> 00:06:10,260 Og bortset fra, blot tilføje normalt. 131 00:06:10,260 --> 00:06:13,125 Eventuelle spørgsmål om det? 132 00:06:13,125 --> 00:06:13,625 Ja. 133 00:06:13,625 --> 00:06:16,487 >> PUBLIKUM: Beklager, hvad er det sidste sted? 134 00:06:16,487 --> 00:06:18,475 Der er seks numre. 135 00:06:18,475 --> 00:06:23,260 Så kolonnen længst til venstre, hvilken værdi er det? 136 00:06:23,260 --> 00:06:24,760 CAMILLE REKHSON: På denne nederste? 137 00:06:24,760 --> 00:06:26,340 PUBLIKUM: På den øverste, for 50. 138 00:06:26,340 --> 00:06:27,340 CAMILLE REKHSON: For 50? 139 00:06:27,340 --> 00:06:29,040 Åh, så den yderste venstre ene er 32. 140 00:06:29,040 --> 00:06:29,760 >> PUBLIKUM: 32? 141 00:06:29,760 --> 00:06:36,770 >> CAMILLE REKHSON: Ja, så det ville være 32, 16, derefter 8, 4, 2, 0-- eller 1. 142 00:06:36,770 --> 00:06:39,380 Tja, det er 2 nulte, som er 1. 143 00:06:39,380 --> 00:06:41,110 Ja. 144 00:06:41,110 --> 00:06:43,834 Andre spørgsmål om dette? 145 00:06:43,834 --> 00:06:47,420 OK, så da vi kommer til at gøre en lille smule med hexadecimal. 146 00:06:47,420 --> 00:06:49,570 Så det kan være en lille smule mindre velkendte, 147 00:06:49,570 --> 00:06:51,680 fordi jeg ved, vi har gjort meget mere med binær. 148 00:06:51,680 --> 00:06:54,050 Men en rigtig god måde at tænke over hexadecimal 149 00:06:54,050 --> 00:06:57,540 er at bryde op en binær nummer i 4 bit bidder. 150 00:06:57,540 --> 00:07:00,950 Fordi hver 4 bits af en binære tal er stort set 151 00:07:00,950 --> 00:07:04,560 en af ​​de hexadecimale tal. 152 00:07:04,560 --> 00:07:07,420 >> Så hvis vi har denne første, Vi har dybest set otte 1 s. 153 00:07:07,420 --> 00:07:08,620 Så dem kan opdeles up-- 154 00:07:08,620 --> 00:07:09,600 >> PUBLIKUM: 255. 155 00:07:09,600 --> 00:07:10,933 >> CAMILLE REKHSON: Sig det igen. 156 00:07:10,933 --> 00:07:13,772 PUBLIKUM: 255 i decimal, eller 0xFF i hexadecimal. 157 00:07:13,772 --> 00:07:14,980 CAMILLE REKHSON: Ja, det er. 158 00:07:14,980 --> 00:07:18,860 Så hvis du opdele at op i to 4-bit bidder, 159 00:07:18,860 --> 00:07:20,950 vi dybest set har fire sæt af 1. 160 00:07:20,950 --> 00:07:22,880 Hvilket er det maximum-- dybest set den maksimale 161 00:07:22,880 --> 00:07:24,329 vi kan få med 4-bits i binær. 162 00:07:24,329 --> 00:07:27,120 Og den maksimale vi kunne få for der i hexadecimal ville være en F. 163 00:07:27,120 --> 00:07:30,290 Så ville vi have to F'er. 164 00:07:30,290 --> 00:07:31,800 Eventuelle spørgsmål om det? 165 00:07:31,800 --> 00:07:32,490 Ja? 166 00:07:32,490 --> 00:07:35,184 >> PUBLIKUM: Kan du gentage det. 167 00:07:35,184 --> 00:07:36,100 CAMILLE REKHSON: Selvfølgelig. 168 00:07:36,100 --> 00:07:39,160 Så hver, dybest set, sted hexadecimal er 169 00:07:39,160 --> 00:07:42,570 svarende til de 4-bits binært. 170 00:07:42,570 --> 00:07:46,830 Så den nemmeste måde at gøre dette er at bryde det op i 4-bit bidder. 171 00:07:46,830 --> 00:07:48,690 Så i dette tilfælde, har vi otte 1 s. 172 00:07:48,690 --> 00:07:51,010 Så hvis vi opdele dem i to 4-bit bidder, 173 00:07:51,010 --> 00:07:54,350 vi ville have to sæt af fire 1'ere. 174 00:07:54,350 --> 00:07:57,181 Og hver en af ​​dem svarer til F. 175 00:07:57,181 --> 00:07:58,930 Hvis du tror, ​​om-- Jeg kender vores hjerner er 176 00:07:58,930 --> 00:08:00,415 slags kablet til at tænke mere gennem decimal, 177 00:08:00,415 --> 00:08:01,831 fordi det er hvad vi er vant til. 178 00:08:01,831 --> 00:08:06,030 Så en måde, du kunne tænke på det som de fire 1s er lig med 15 i decimal. 179 00:08:06,030 --> 00:08:12,960 Og 15 i hexadecimal er F. Så det er en anden måde kan du tænke igennem det. 180 00:08:12,960 --> 00:08:13,459 Ja. 181 00:08:13,459 --> 00:08:14,790 >> PUBLIKUM: Hvad er 0x efter? 182 00:08:14,790 --> 00:08:18,240 >> CAMILLE REKHSON: The 0x angiver, at det er hexadecimal. 183 00:08:18,240 --> 00:08:21,900 Så vi bare sætte det præfiks der normalt. 184 00:08:21,900 --> 00:08:24,396 Andre spørgsmål om det. 185 00:08:24,396 --> 00:08:27,100 OK, så lad os prøve at gå den anden vej derefter. 186 00:08:27,100 --> 00:08:28,712 I dette tilfælde have-- vi ked af? 187 00:08:28,712 --> 00:08:29,628 PUBLIKUM: [uhørligt]. 188 00:08:29,628 --> 00:08:32,095 189 00:08:32,095 --> 00:08:33,720 CAMILLE REKHSON: Vi kommer til at binær. 190 00:08:33,720 --> 00:08:36,039 Så går den anden vej. 191 00:08:36,039 --> 00:08:42,090 Men i dette tilfælde, har vi 5 og A. Så hvis vi tænker over det, 192 00:08:42,090 --> 00:08:46,260 Hvis hver af those-- 5 og A er både kommer til at repræsentere en 4-bit chunk, 193 00:08:46,260 --> 00:08:49,003 hvordan ville du sige 5 i binær? 194 00:08:49,003 --> 00:08:51,120 >> PUBLIKUM: 0101. 195 00:08:51,120 --> 00:08:53,100 >> CAMILLE REKHSON: Ja, så det er den 0101 del. 196 00:08:53,100 --> 00:08:55,250 Og så hvordan ville du sige en in-- 197 00:08:55,250 --> 00:08:56,910 >> PUBLIKUM: 10. 198 00:08:56,910 --> 00:08:58,243 CAMILLE REKHSON: Sig det-- undskyld? 199 00:08:58,243 --> 00:08:58,990 PUBLIKUM: 10. 200 00:08:58,990 --> 00:09:02,052 CAMILLE REKHSON: Ja, så det er den anden del af det. 201 00:09:02,052 --> 00:09:04,010 Og så, hvis du lægger de to sammen, det er 202 00:09:04,010 --> 00:09:06,440 hvordan du får det fulde binær til hexadecimal. 203 00:09:06,440 --> 00:09:06,940 Ja? 204 00:09:06,940 --> 00:09:10,620 >> PUBLIKUM: At vide, at A er 1010, har du til at huske det? 205 00:09:10,620 --> 00:09:12,460 Eller kan du like-- 206 00:09:12,460 --> 00:09:14,380 >> CAMILLE REKHSON: Så hvis du-- den differe-- så 207 00:09:14,380 --> 00:09:16,790 når du går igennem binære, dybest set binære 208 00:09:16,790 --> 00:09:20,550 har 0 til 9 og derefter A gennem F som dens 16 ting. 209 00:09:20,550 --> 00:09:25,420 Så hvis hele vejen til 0, hvis 9-- du-- 9 og derefter A, dybest set 210 00:09:25,420 --> 00:09:29,640 hvis vi omdannede den til decimal, A ville være som 10, ville B være som 11. 211 00:09:29,640 --> 00:09:35,616 Og hvis du tænker over det binær 1010 er 8 og 2, 212 00:09:35,616 --> 00:09:37,990 fordi de er de to steder at tilføje op til 10, hvilket 213 00:09:37,990 --> 00:09:41,820 er præcis, hvad A svarer til. 214 00:09:41,820 --> 00:09:45,114 Så det er sådan en nem måde at tænke på det. 215 00:09:45,114 --> 00:09:46,405 Andre spørgsmål om hexadecimal. 216 00:09:46,405 --> 00:09:50,510 217 00:09:50,510 --> 00:09:56,870 >> OK, så nu vil vi tage et kig på bitvise operatører. 218 00:09:56,870 --> 00:09:58,882 Så disse kan helt sikkert kommer op på quizzen. 219 00:09:58,882 --> 00:10:00,590 Jeg ved, at vi ikke har arbejdet med dem en masse. 220 00:10:00,590 --> 00:10:02,756 Men vi er bare at gøre en lille gennemgang af disse. 221 00:10:02,756 --> 00:10:05,490 Så forhåbentlig disse vil være en lidt mere velkendt for dig. 222 00:10:05,490 --> 00:10:10,220 Så de seks bitvise operatører at vi har, er vist her. 223 00:10:10,220 --> 00:10:13,340 Og de Lad os manipulere enkelte bits. 224 00:10:13,340 --> 00:10:16,676 Så AND operator er en enkelt-tegn. 225 00:10:16,676 --> 00:10:18,550 Du må ikke forveksle det med dobbelt-tegn, 226 00:10:18,550 --> 00:10:21,840 som er den logiske og at lader os sammenligne to ting. 227 00:10:21,840 --> 00:10:25,860 >> Det indre og det er, hvordan vi kan manipulere tingene bitvis. 228 00:10:25,860 --> 00:10:29,910 Så dette giver os resultatet af 1, hvis begge af de argumenter, som vi sammenligner 229 00:10:29,910 --> 00:10:32,440 er same-- eller er 1. 230 00:10:32,440 --> 00:10:39,370 Og den lodrette linje, OR, vil give US 1, hvis mindst en af ​​dem er 1. 231 00:10:39,370 --> 00:10:41,460 Så dybest set præcis hvad ordene indebære. 232 00:10:41,460 --> 00:10:46,640 OG, hvis de to bits er 1, 1 og 1 giver os 1. 233 00:10:46,640 --> 00:10:51,769 Men med OR, hvis det er 0 eller 1, eller 1 eller 1, i begge tilfælde, 234 00:10:51,769 --> 00:10:53,060 Vi har 1 som er en af ​​dem. 235 00:10:53,060 --> 00:10:54,101 Så ville vi få en 1. 236 00:10:54,101 --> 00:10:56,320 PUBLIKUM: Hvad mener du at det siger, det giver 1? 237 00:10:56,320 --> 00:10:58,236 >> CAMILLE REKHSON: Den resultat. Slags, ligesom du 238 00:10:58,236 --> 00:11:05,060 would-- hvis du gjorde 0 og 1, det Resultatet af denne vil være 1-- eller 0 239 00:11:05,060 --> 00:11:08,920 og 1 med resultatet af det ville være 0, ked af det. 240 00:11:08,920 --> 00:11:12,190 Ja, det var slags af resultatet af udtrykket. 241 00:11:12,190 --> 00:11:16,520 Og så denne indsætningstegn symbol er XOR eller eksklusive OR. 242 00:11:16,520 --> 00:11:21,920 Så det betyder udelukkende et eller præcis en af ​​de to argumenter er lig med 1. 243 00:11:21,920 --> 00:11:24,210 Og så ville det give dig en. 244 00:11:24,210 --> 00:11:27,370 >> Den lille bølgelinien er IKKE operatør. 245 00:11:27,370 --> 00:11:31,940 Så i modsætning til resten af ​​dem, der opererer på et par af bits, 246 00:11:31,940 --> 00:11:34,930 NOT operatøren tager kun én bit, og vil vende det. 247 00:11:34,930 --> 00:11:37,640 Så hvis du give-- hvis du gør IKKE 0, ville det give dig en. 248 00:11:37,640 --> 00:11:40,248 Og hvis du ikke 1, det ville give dig 0. 249 00:11:40,248 --> 00:11:40,748 Ja? 250 00:11:40,748 --> 00:11:41,150 >> PUBLIKUM: Hvad er forskellen mellem OR med en linje 251 00:11:41,150 --> 00:11:41,983 og OR med to? 252 00:11:41,983 --> 00:11:44,430 253 00:11:44,430 --> 00:11:46,930 CAMILLE REKHSON: Så OR med to linjer er den logiske OR. 254 00:11:46,930 --> 00:11:52,430 Så det er til at sammenligne to fulde heltal eller to-- 255 00:11:52,430 --> 00:11:53,730 at se, om tingene er lige. 256 00:11:53,730 --> 00:11:58,340 Eller lyst til at gøre dette er lig med det, ELLER det er lig med denne type ting. 257 00:11:58,340 --> 00:12:04,090 Hvorimod enkelt bar eller, er for at gøre tingene bitvise. 258 00:12:04,090 --> 00:12:04,590 Ja. 259 00:12:04,590 --> 00:12:06,680 >> PUBLIKUM: Hvad mener du med bitvise? 260 00:12:06,680 --> 00:12:10,330 >> CAMILLE REKHSON: Så bitvise arbejder direkte med de bits i binær. 261 00:12:10,330 --> 00:12:11,596 >> PUBLIKUM: Åh, jeg ser. 262 00:12:11,596 --> 00:12:15,000 >> CAMILLE REKHSON: Ja, så arbejde med 0'er og 1'er. 263 00:12:15,000 --> 00:12:18,310 Vi vil gøre et par eksempler på denne efter, bare så det ikke er for forvirrende. 264 00:12:18,310 --> 00:12:20,970 Og så de sidste to er venstre skift og retten skift. 265 00:12:20,970 --> 00:12:23,970 Hvilket er dybest set to mindre end tegn eller to større end tegn. 266 00:12:23,970 --> 00:12:26,294 Og de flyttet til lidt det angivne antal steder 267 00:12:26,294 --> 00:12:27,710 at du giver det i den retning. 268 00:12:27,710 --> 00:12:29,980 Så det ville enten flytte det til venstre eller til højre. 269 00:12:29,980 --> 00:12:30,480 Ja? 270 00:12:30,480 --> 00:12:32,470 PUBLIKUM: Hvad er syntaksen for at køre? 271 00:12:32,470 --> 00:12:33,950 >> CAMILLE REKHSON: Vi kommer til at gå gennem et eksempel på et sekund. 272 00:12:33,950 --> 00:12:35,680 Så forhåbentlig vil det hjælpe. 273 00:12:35,680 --> 00:12:41,060 Eventuelle spørgsmål om bare hvad der er op her, before-- OK. 274 00:12:41,060 --> 00:12:43,821 Så gå gennem nogle eksempler. 275 00:12:43,821 --> 00:12:45,070 Lad os starte med den og ettaller. 276 00:12:45,070 --> 00:12:47,880 Hvad ville vi få, hvis vi gjorde 0 og 1? 277 00:12:47,880 --> 00:12:48,899 >> PUBLIKUM: 0. 278 00:12:48,899 --> 00:12:50,690 CAMILLE REKHSON: OK, og hvis vi gjorde 1 og 1? 279 00:12:50,690 --> 00:12:51,622 PUBLIKUM: 1. 280 00:12:51,622 --> 00:12:54,490 CAMILLE REKHSON: Ja, hvad hvis vi gjorde 0 eller en? 281 00:12:54,490 --> 00:12:55,094 PUBLIKUM: 1. 282 00:12:55,094 --> 00:12:56,510 CAMILLE REKHSON: Hvad med 1 eller 1? 283 00:12:56,510 --> 00:12:57,404 PUBLIKUM: 1. 284 00:12:57,404 --> 00:13:00,410 CAMILLE REKHSON: OK, hvad med 0 XOR 1? 285 00:13:00,410 --> 00:13:01,380 PUBLIKUM: 1. 286 00:13:01,380 --> 00:13:03,120 CAMILLE REKHSON: Og 1 XOR 1? 287 00:13:03,120 --> 00:13:03,902 PUBLIKUM: 0. 288 00:13:03,902 --> 00:13:05,360 CAMILLE REKHSON: Du fyre er gode. 289 00:13:05,360 --> 00:13:06,510 Hvad med IKKE 0? 290 00:13:06,510 --> 00:13:07,265 >> PUBLIKUM: 1. 291 00:13:07,265 --> 00:13:08,390 CAMILLE REKHSON: Og IKKE 1? 292 00:13:08,390 --> 00:13:09,602 PUBLIKUM: 0. 293 00:13:09,602 --> 00:13:12,810 CAMILLE REKHSON: OK, og så er denne sidste man er en lille en med gearskift. 294 00:13:12,810 --> 00:13:18,700 Så hvis vi oprindeligt sat x for at være 8, og er Y x forskudt mod venstre 3, 295 00:13:18,700 --> 00:13:19,760 hvad ville det give os? 296 00:13:19,760 --> 00:13:20,676 >> PUBLIKUM: [uhørligt]. 297 00:13:20,676 --> 00:13:22,817 298 00:13:22,817 --> 00:13:24,150 CAMILLE REKHSON: Sig det igen. 299 00:13:24,150 --> 00:13:26,740 PUBLIKUM: [uhørligt]. 300 00:13:26,740 --> 00:13:28,766 CAMILLE REKHSON: Så denne faktisk giver os 64. 301 00:13:28,766 --> 00:13:29,876 PUBLIKUM: [uhørligt]. 302 00:13:29,876 --> 00:13:32,250 CAMILLE REKHSON: Så jeg er bare kommer til at skrive dette op her, 303 00:13:32,250 --> 00:13:34,700 så det gør en lille smule fornuft. 304 00:13:34,700 --> 00:13:45,120 Hvis vi har 2 til 0, 2 til 1, 2 til 2, 2 til 3 vil være 8. 305 00:13:45,120 --> 00:13:52,380 Og hvis vi ønsker at flytte det 3 flere bits til venstre, vil det være 2 til 4, 306 00:13:52,380 --> 00:13:57,270 2 til 5, og 2 til 6, og 2 til 6 er 64. 307 00:13:57,270 --> 00:13:59,920 308 00:13:59,920 --> 00:14:01,110 Betyder det giver mening? 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 >> Publikum: Betyder det skift alle 1s og 0 s af det binære tal til-- 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 Og du behøver ikke at bekymre sig om den quiz om disse er negativ. 315 00:14:15,170 --> 00:14:19,510 Vi vil ikke gøre dig med at håndtere negative forskydninger på nogen måde. 316 00:14:19,510 --> 00:14:24,070 Andre spørgsmål om dette? 317 00:14:24,070 --> 00:14:24,570 Ja. 318 00:14:24,570 --> 00:14:30,570 >> PUBLIKUM: Hvis det er at flytte til højre, er noget, wasn't-- noget, 319 00:14:30,570 --> 00:14:33,220 var ikke oprindeligt en del af de ting 0? 320 00:14:33,220 --> 00:14:37,110 >> CAMILLE REKHSON: Yeah, ville du blot tilføje 0 s på i originalen. 321 00:14:37,110 --> 00:14:38,110 Ja. 322 00:14:38,110 --> 00:14:41,540 >> PUBLIKUM: Så hvad er det 100 forskudt til højre tre gange? 323 00:14:41,540 --> 00:14:43,290 CAMILLE REKHSON: 100 forskudt til højre, 324 00:14:43,290 --> 00:14:46,057 så ville tage alle de 1 s og 0'er og bare flytte dem 325 00:14:46,057 --> 00:14:48,515 til højre så mange gange som du det at skifte til højre. 326 00:14:48,515 --> 00:14:50,452 >> PUBLIKUM: [uhørligt]? 327 00:14:50,452 --> 00:14:53,160 CAMILLE REKHSON: Nå, 100-- er taler du om 100 i binær, 328 00:14:53,160 --> 00:14:53,910 eller 100 i decimal? 329 00:14:53,910 --> 00:14:55,750 PUBLIKUM: Jeg er ked af, 100 i binær. 330 00:14:55,750 --> 00:14:58,916 >> CAMILLE REKHSON: 100 i binær, hvis du skifter den til den right-- 331 00:14:58,916 --> 00:15:01,040 hvis du skifter til højre én gang, ville det blive 10. 332 00:15:01,040 --> 00:15:04,430 Hvis du skifter den til højre to gange, ville det blive 001. 333 00:15:04,430 --> 00:15:07,590 Og derefter, hvis du skifter det igen, du slags miste bit. 334 00:15:07,590 --> 00:15:09,610 Ja, det er bare 0. 335 00:15:09,610 --> 00:15:12,140 Andre spørgsmål om dette? 336 00:15:12,140 --> 00:15:12,835 Ja. 337 00:15:12,835 --> 00:15:14,695 >> PUBLIKUM: Så bliver det 000. 338 00:15:14,695 --> 00:15:17,020 >> CAMILLE REKHSON: Ja. 339 00:15:17,020 --> 00:15:22,150 OK, så lad os gå gennem en lille smule af ASCII-matematik. 340 00:15:22,150 --> 00:15:25,120 Så tegn kan hovedsagelig behandles som heltal 341 00:15:25,120 --> 00:15:28,290 baseret på deres ASCII-værdier. 342 00:15:28,290 --> 00:15:35,250 Så hvis vi sad int A er lig 65, int B lig A plus 1, int char C lig 343 00:15:35,250 --> 00:15:39,565 D minus 1, og char D er lig med 68, hvad ville udskrive nederst? 344 00:15:39,565 --> 00:15:46,150 345 00:15:46,150 --> 00:15:49,720 >> Så vi udskriver these-- velsigne du-- vi er 346 00:15:49,720 --> 00:15:53,520 udskrive dem alle ud som forkuller baseret på procent C. 347 00:15:53,520 --> 00:15:56,320 Så vi dybest set udskrive tegnet værdien af ​​alle fire 348 00:15:56,320 --> 00:15:58,600 af disse variabler. 349 00:15:58,600 --> 00:16:04,280 Som et tip, 65 er ASCII-værdi kapitalens A. Måske hjalp. 350 00:16:04,280 --> 00:16:04,780 Hvad? 351 00:16:04,780 --> 00:16:05,530 >> PUBLIKUM: ABCD. 352 00:16:05,530 --> 00:16:07,780 >> CAMILLE REKHSON: Ja, så dette ville udskrive præcis 353 00:16:07,780 --> 00:16:10,290 ABCD fordi vi sat int A svarende til ASCII værdien af ​​A. 354 00:16:10,290 --> 00:16:13,085 Så hvis vi udskriver det ud som en karakter, vi bare få kapital A, 355 00:16:13,085 --> 00:16:15,540 En plus 1 ville være en kapital B i ASCII. 356 00:16:15,540 --> 00:16:19,260 D minus 1 ville være en kapital C i ASCII. 357 00:16:19,260 --> 00:16:25,185 Og 68 er ASCII-værdi af D. Spørgsmål om ASCII? 358 00:16:25,185 --> 00:16:25,685 Ja. 359 00:16:25,685 --> 00:16:31,370 >> PUBLIKUM: Så anførselstegn omkring A, gør denne ændring A til ASCII? 360 00:16:31,370 --> 00:16:34,456 >> CAMILLE REKHSON: Det uses-- det count-- enkelte anførselstegn omkring A 361 00:16:34,456 --> 00:16:35,330 gør det et tegn. 362 00:16:35,330 --> 00:16:37,600 Og hvis du har at gøre med det i antallet form-- 363 00:16:37,600 --> 00:16:40,320 så når, som i dette tilfælde er det behandles som en int-- 364 00:16:40,320 --> 00:16:44,664 så ville det behandle med det er ASCII-værdi. 365 00:16:44,664 --> 00:16:45,164 Ja. 366 00:16:45,164 --> 00:16:50,060 >> PUBLIKUM: Har du anbefale, at vi har en ASCII henvisning bordet? 367 00:16:50,060 --> 00:16:51,900 >> CAMILLE REKHSON: Jeg kan ikke tror-- 368 00:16:51,900 --> 00:16:54,720 >> PUBLIKUM: Eller ville det kun beskæftige sig med disse? 369 00:16:54,720 --> 00:16:56,210 >> CAMILLE REKHSON: Jeg tror, ​​vi ville gøre det med nemme ting. 370 00:16:56,210 --> 00:16:58,168 Jeg tror ikke, det ville ondt at skrive ned måske 371 00:16:58,168 --> 00:17:02,653 hvad kapital A og små bogstaver A er, bare hvad disse intervaller startende med. 372 00:17:02,653 --> 00:17:05,819 Men jeg tror ikke, du behøver at tage alle plads til at sætte en hel ASCII tabel. 373 00:17:05,819 --> 00:17:06,803 Ja. 374 00:17:06,803 --> 00:17:09,755 >> PUBLIKUM: Hvad er forskellen mellem sige int A og char C, 375 00:17:09,755 --> 00:17:12,720 som du gør på toppen? 376 00:17:12,720 --> 00:17:17,380 >> CAMILLE REKHSON: Så det er bare hvordan der er gemt i hukommelsen. 377 00:17:17,380 --> 00:17:20,010 Men du kan behandle det enten måde. 378 00:17:20,010 --> 00:17:23,274 Ligesom vi ser her, vi gør print ud A som et tegn. 379 00:17:23,274 --> 00:17:24,690 PUBLIKUM: Så det er det samme som en? 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 Andre spørgsmål? 383 00:17:29,537 --> 00:17:32,022 >> PUBLIKUM: Så procent C siger udskrive en char? 384 00:17:32,022 --> 00:17:33,016 >> CAMILLE REKHSON: Ja. 385 00:17:33,016 --> 00:17:35,501 >> PUBLIKUM: Så selv om A har kun blevet defineret som et heltal, 386 00:17:35,501 --> 00:17:37,569 hvis vi forsøger at udskrive en char som 65, det would-- 387 00:17:37,569 --> 00:17:40,110 CAMILLE REKHSON: Det ville gå til dybest set går til ASCII diagram 388 00:17:40,110 --> 00:17:42,990 og får uanset tegn i ASCII diagram for at 65. 389 00:17:42,990 --> 00:17:43,840 >> PUBLIKUM: Tak. 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 >> PUBLIKUM: Så hvis du gjorde% I,% I, % I,% Jeg, ville det bare print-- 393 00:17:50,620 --> 00:17:52,620 CAMILLE REKHSON: Ja, hvis du gjorde alt 4% Jeg er, det 394 00:17:52,620 --> 00:17:57,170 ville udskrive ASCII værdier af alle fire af disse. 395 00:17:57,170 --> 00:17:59,483 Andre spørgsmål? 396 00:17:59,483 --> 00:18:06,310 OK, så rækkevidde, dybest set dette hjælper os med at afgøre, hvor 397 00:18:06,310 --> 00:18:08,450 en variabel eksisterer i dit program. 398 00:18:08,450 --> 00:18:11,910 Så vi har talt om to forskellige typer af omfang, globale og lokale. 399 00:18:11,910 --> 00:18:14,560 >> Hvis en variabel globalt er virkefelt, det betyder hele dit program 400 00:18:14,560 --> 00:18:16,292 har adgang til denne variabel. 401 00:18:16,292 --> 00:18:18,000 Og hvis du globalt omfang en variabel, du 402 00:18:18,000 --> 00:18:19,510 erklære den før din vigtigste funktion. 403 00:18:19,510 --> 00:18:20,830 Så det er gjort ret off the bat. 404 00:18:20,830 --> 00:18:22,950 Og så hele din program kan få adgang til det. 405 00:18:22,950 --> 00:18:26,070 >> Hvis det er kun lokalt virkefelt, at variabel begrænset til en bestemt region. 406 00:18:26,070 --> 00:18:29,705 Så hvis du erklærer i en for-løkke, kun, at for løkke kan få adgang til den. 407 00:18:29,705 --> 00:18:31,580 Eller hvis du erklærer inden en bestemt funktion, 408 00:18:31,580 --> 00:18:34,940 kun denne funktion kan få adgang til den. 409 00:18:34,940 --> 00:18:38,265 Spørgsmål om omfanget. 410 00:18:38,265 --> 00:18:41,570 >> OK, så funktionen prototyping. 411 00:18:41,570 --> 00:18:45,360 Dybest set fordi C, når det samler, læser oppefra og ned. 412 00:18:45,360 --> 00:18:48,800 Hvis du erklærer en funktion sent i din kode, 413 00:18:48,800 --> 00:18:51,670 compileren ikke ved der eksisterer denne funktion. 414 00:18:51,670 --> 00:18:55,690 Så hvad vi bruger, er prototyper, som dybest set fortælle compiler, 415 00:18:55,690 --> 00:18:58,710 denne funktion findes, gå se for det senere i koden. 416 00:18:58,710 --> 00:19:00,900 Så den måde, som du gør en funktion prototype 417 00:19:00,900 --> 00:19:03,020 er præcis, hvordan du starter off skrive en funktion. 418 00:19:03,020 --> 00:19:05,310 Du giver tilbagevenden type, navnet på den funktion, 419 00:19:05,310 --> 00:19:08,930 og derefter nogen argumenter at denne funktion tager. 420 00:19:08,930 --> 00:19:13,970 >> Så for at se på et hurtigt eksempel, i dette og små vores funktion, som vi bruger her 421 00:19:13,970 --> 00:19:15,340 er dybest set en terning funktion. 422 00:19:15,340 --> 00:19:19,170 Så tager i et heltal og returnering tredje potens af denne heltal. 423 00:19:19,170 --> 00:19:23,190 Så fordi vi har skrevet, at funktionen nedenfor hovedfunktion, 424 00:19:23,190 --> 00:19:26,300 og vi ønsker at bruge produktion af at-- eller vi 425 00:19:26,300 --> 00:19:28,630 vil denne funktion i vores hovedfunktion, 426 00:19:28,630 --> 00:19:31,980 vi sætter sin prototype måde på toppen af ​​vores program. 427 00:19:31,980 --> 00:19:34,460 Og så når vi kalder det i vores hovedfunktion, 428 00:19:34,460 --> 00:19:38,800 compileren ved, at denne funktion er skrevet senere, og vil gå kigge efter det, 429 00:19:38,800 --> 00:19:40,910 og vil bruge det ordentligt. 430 00:19:40,910 --> 00:19:45,190 Spørgsmål om prototyping? 431 00:19:45,190 --> 00:19:45,690 Ja. 432 00:19:45,690 --> 00:19:46,940 >> PUBLIKUM: Så hvad er pointen? 433 00:19:46,940 --> 00:19:49,374 434 00:19:49,374 --> 00:19:50,915 Jeg får ikke det punkt prototyper. 435 00:19:50,915 --> 00:19:52,820 Hvorfor ikke bare have det dernede? 436 00:19:52,820 --> 00:19:54,903 >> CAMILLE REKHSON: Tja, hvis det er hernede, så når 437 00:19:54,903 --> 00:19:57,020 du kommer til linje terning xi din vigtigste funktion, 438 00:19:57,020 --> 00:19:59,495 compileren vil ikke have nogen idé om, at terningen funktionen rent faktisk eksisterer. 439 00:19:59,495 --> 00:20:01,310 >> PUBLIKUM: Kunne du ikke bare sætte det foran? 440 00:20:01,310 --> 00:20:02,350 >> CAMILLE REKHSON: Det er bedre kodning praksis 441 00:20:02,350 --> 00:20:04,150 at sætte det under din vigtigste funktion. 442 00:20:04,150 --> 00:20:06,350 Så det er derfor, vi ville gøre prototyping. 443 00:20:06,350 --> 00:20:07,680 Bare fordi, hvis du havde en masse funktioner, 444 00:20:07,680 --> 00:20:10,180 det ville være virkelig rodet at læse alle disse funktioner 445 00:20:10,180 --> 00:20:12,030 før du kommer til kød af dit program. 446 00:20:12,030 --> 00:20:13,888 Ja, og du havde en q-- 447 00:20:13,888 --> 00:20:16,796 >> PUBLIKUM: Så er erklære din variabel op i toppen 448 00:20:16,796 --> 00:20:18,795 så du kan få adgang til det, gøre det til en global variabel? 449 00:20:18,795 --> 00:20:21,119 Er det ligner dette hvor det at erklære det 450 00:20:21,119 --> 00:20:23,660 deroppe, så det ved, at det kommer til at få adgang til det senere 451 00:20:23,660 --> 00:20:24,762 og du kan bruge det? 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 >> PUBLIKUM: Skal til-- yderligere funktioner du oprette nøglen udenfor 455 00:20:30,414 --> 00:20:31,840 af denne ting, eller-- 456 00:20:31,840 --> 00:20:33,760 >> CAMILLE REKHSON: Ja, hvis du er skabe andre functions-- vigtigste 457 00:20:33,760 --> 00:20:36,385 i sig selv er function-- så hvis du opretter andre funktioner, 458 00:20:36,385 --> 00:20:37,555 de skal være uden. 459 00:20:37,555 --> 00:20:38,055 Ja? 460 00:20:38,055 --> 00:20:39,734 >> PUBLIKUM: Hvad er procent D? 461 00:20:39,734 --> 00:20:42,150 CAMILLE REKHSON: Procent D er det samme som procent I. 462 00:20:42,150 --> 00:20:45,915 Det refererer til et heltal. 463 00:20:45,915 --> 00:20:47,895 Ja. 464 00:20:47,895 --> 00:20:50,370 >> PUBLIKUM: Så hvad er int main gør? 465 00:20:50,370 --> 00:20:51,724 Hvad var det tomrum? 466 00:20:51,724 --> 00:20:53,890 CAMILLE REKHSON: Void siger det tager under ingen argumenter. 467 00:20:53,890 --> 00:20:55,320 PUBLIKUM: [uhørligt]. 468 00:20:55,320 --> 00:20:57,570 CAMILLE REKHSON: Kan du taler lidt højere, undskyld? 469 00:20:57,570 --> 00:21:00,153 PUBLIKUM: Ja, undskyld, hvorfor gjorde du lægger ugyldig for det første, 470 00:21:00,153 --> 00:21:02,297 og derefter int input til den anden? 471 00:21:02,297 --> 00:21:04,720 472 00:21:04,720 --> 00:21:07,470 CAMILLE REKHSON: Åh, for de to different-- for de vigtigste funktion 473 00:21:07,470 --> 00:21:09,290 versus terningen funktion? 474 00:21:09,290 --> 00:21:13,360 Så i hovedfunktion, vi bruger ugyldig, fordi der 475 00:21:13,360 --> 00:21:16,870 er nogen parametre bliver taget i. 476 00:21:16,870 --> 00:21:19,425 Mens det i terningen funktion, har vi en indgang. 477 00:21:19,425 --> 00:21:22,300 Det er derfor, det siger int, input, fordi der er argumenter, som vi er 478 00:21:22,300 --> 00:21:24,571 tager i at køre vores funktion. 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 Er der spørgsmål? 482 00:21:30,464 --> 00:21:34,520 >> OK, og derefter hurtigt floating-point unøjagtighed. 483 00:21:34,520 --> 00:21:37,200 Så vi har uendeligt mange reelle tal. 484 00:21:37,200 --> 00:21:38,950 Men der er kun et endeligt antal bits 485 00:21:38,950 --> 00:21:42,880 at vi kan bruge til at vise dem, numre, og repræsentere dem. 486 00:21:42,880 --> 00:21:45,020 Så vi ender med nogle upræcise. 487 00:21:45,020 --> 00:21:49,190 Og dine tal vil ikke altid være helt præcis, hvad 488 00:21:49,190 --> 00:21:51,810 du tror, ​​de er, når du er beskæftiger sig med floating-point. 489 00:21:51,810 --> 00:21:53,650 Det er bare noget godt at vide. 490 00:21:53,650 --> 00:21:56,628 Spørgsmål til dette? 491 00:21:56,628 --> 00:21:59,610 Ja. 492 00:21:59,610 --> 00:22:02,090 >> PUBLIKUM: Er det at henvise til ideen om bit overløb 493 00:22:02,090 --> 00:22:03,089 der var i foredraget? 494 00:22:03,089 --> 00:22:06,080 Var det noget adskilt? 495 00:22:06,080 --> 00:22:09,650 >> CAMILLE REKHSON: De er helt adskilt, ja. 496 00:22:09,650 --> 00:22:11,160 OK, stor. 497 00:22:11,160 --> 00:22:16,369 498 00:22:16,369 --> 00:22:17,452 Pulak Goyal: Hej, alle. 499 00:22:17,452 --> 00:22:19,872 Mit navn er Pulak, og jeg vil være at gå over pointere. 500 00:22:19,872 --> 00:22:23,260 501 00:22:23,260 --> 00:22:25,720 OK, så lad os først tænker om, hvad hukommelse ser ud. 502 00:22:25,720 --> 00:22:28,610 Så som du kan se her, vi tage hukommelse, og vi deler det op 503 00:22:28,610 --> 00:22:30,090 ind i en flok af blokke. 504 00:22:30,090 --> 00:22:33,150 Og vi referere hver blokere af en adresse, ikke? 505 00:22:33,150 --> 00:22:37,196 Og er der nogen huske, hvad type notation vi bruger til at betegne en adresse? 506 00:22:37,196 --> 00:22:38,510 >> PUBLIKUM: Hexadecimal, 0X. 507 00:22:38,510 --> 00:22:39,510 >> Pulak Goyal: Hexadecimal, ikke? 508 00:22:39,510 --> 00:22:41,509 Så 0X betyder, at vi er taler om hexadecimal. 509 00:22:41,509 --> 00:22:45,740 510 00:22:45,740 --> 00:22:48,360 OK, så hvordan gør vi skaber pointers? 511 00:22:48,360 --> 00:22:51,960 Så vi tager den type, vi sætte det-- tilføje en stjerne til det, 512 00:22:51,960 --> 00:22:53,760 og så tilføjer vi variabelnavnet. 513 00:22:53,760 --> 00:22:59,280 Så de eksempler, vi har set er int stjerne x, char stjerne y og flyde begynder z. 514 00:22:59,280 --> 00:23:01,380 Så når jeg siger int stjerne x, kan nogen fortælle mig 515 00:23:01,380 --> 00:23:03,965 hvad jeg slags taler om der? 516 00:23:03,965 --> 00:23:05,710 >> PUBLIKUM: Placeringen af ​​disken. 517 00:23:05,710 --> 00:23:06,890 >> Pulak Goyal: Beklager, hvad? 518 00:23:06,890 --> 00:23:07,723 Kan du gentage det? 519 00:23:07,723 --> 00:23:09,250 PUBLIKUM: Placeringen af ​​disken. 520 00:23:09,250 --> 00:23:12,390 >> Pulak Goyal: Så actually-- så hvad Jeg mente, er, når vi har int stjerne x, 521 00:23:12,390 --> 00:23:14,400 vi siger er at skabe en pointer, og det 522 00:23:14,400 --> 00:23:17,130 kan gemme adressen på en variabel, der er en int, ikke? 523 00:23:17,130 --> 00:23:21,810 Så med char stjerne y, Vi er ved at oprette en pegepind 524 00:23:21,810 --> 00:23:24,220 der kan gemme adressen af en variabel, der er en char. 525 00:23:24,220 --> 00:23:26,270 Så det giver mening for alle? 526 00:23:26,270 --> 00:23:29,600 OK, køligt 527 00:23:29,600 --> 00:23:33,450 >> OK, så med pointere, der er to vigtige operationer, vi kan gøre. 528 00:23:33,450 --> 00:23:36,630 Der er henvisninger, og der har dereferere. 529 00:23:36,630 --> 00:23:37,130 Ja? 530 00:23:37,130 --> 00:23:38,760 >> PUBLIKUM: Kunne du går en lille smule langsommere? 531 00:23:38,760 --> 00:23:39,510 >> Pulak Goyal: Selvfølgelig. 532 00:23:39,510 --> 00:23:45,350 Ja, so-- Ja, stille spørgsmål, som jeg går sammen hvis du-- hvis noget er uklart. 533 00:23:45,350 --> 00:23:47,240 Så vi har henvisninger og dereferere. 534 00:23:47,240 --> 00:23:51,680 Så når du ønsker at få adressen af en variabel, derefter bruge tegnet. 535 00:23:51,680 --> 00:23:53,620 Så lad os sige, at jeg erklærede int x et eller andet sted. 536 00:23:53,620 --> 00:23:57,450 Og jeg ønsker at få adressen på det og videregive det i, jeg ville gøre tegnet x. 537 00:23:57,450 --> 00:24:01,260 Og når du ønsker at få den værdi tilknyttet en pegepind, 538 00:24:01,260 --> 00:24:04,670 du bruger dereference operatør, der er en stjerne. 539 00:24:04,670 --> 00:24:08,570 >> Så lad os sige, jeg havde int stjerne x, og Jeg havde det peger på noget. 540 00:24:08,570 --> 00:24:13,510 Hvis jeg ønsker at få værdien af, hvad det er peger på, ville jeg bare gøre stjerne x. 541 00:24:13,510 --> 00:24:14,960 Er det klart? 542 00:24:14,960 --> 00:24:16,390 Eventuelle spørgsmål om det? 543 00:24:16,390 --> 00:24:18,129 Ja. 544 00:24:18,129 --> 00:24:25,275 >> PUBLIKUM: Så generelt, du vil ikke være i stand til at gøre ved x og stjerne 545 00:24:25,275 --> 00:24:27,135 x med samme x. 546 00:24:27,135 --> 00:24:28,740 Er det korrekt? 547 00:24:28,740 --> 00:24:31,800 For hvis x er et variabel, så har du 548 00:24:31,800 --> 00:24:35,980 at gøre på x for at få, at det er en pointer. 549 00:24:35,980 --> 00:24:40,810 Men hvis x er en pointer, så er du nødt at gøre stjerne x for at få variablen. 550 00:24:40,810 --> 00:24:43,240 >> Pulak Goyal: Ja, så det Spørgsmålet var om, hvornår 551 00:24:43,240 --> 00:24:45,750 bruger vi en star-- når ville du bruge stjernen, 552 00:24:45,750 --> 00:24:47,470 og når vi bruger tegnet, og kan vi 553 00:24:47,470 --> 00:24:49,160 bruge det med den samme type variabel? 554 00:24:49,160 --> 00:24:51,810 Så normalt hvis du har, for eksempel en int x, 555 00:24:51,810 --> 00:24:55,170 du vil for det meste skal bruge tegnet for at få adressen på det. 556 00:24:55,170 --> 00:24:58,220 Fordi det gør ikke mening at ærbødighed ind på x. 557 00:24:58,220 --> 00:25:04,220 Henviser til, at hvis vi havde int stjerne x, du ville bruge dereference drift 558 00:25:04,220 --> 00:25:07,910 fordi det ville give nogen mening til brug ved x i denne sag. 559 00:25:07,910 --> 00:25:09,582 Betyder det giver mening? 560 00:25:09,582 --> 00:25:13,192 >> PUBLIKUM: Så du kan ikke og og derefter en pointer? 561 00:25:13,192 --> 00:25:14,900 Pulak Goyal: Så du teknisk, faktisk 562 00:25:14,900 --> 00:25:16,870 kan gøre tegnet af en pegepind. 563 00:25:16,870 --> 00:25:18,984 Men det er ude af anvendelsesområdet for denne klasse. 564 00:25:18,984 --> 00:25:21,900 For purpose-- til dine gutter ' formål, når du har pejlemærker, 565 00:25:21,900 --> 00:25:25,191 du ønsker at bruge dereference operatøren at få værdien forbundet med det. 566 00:25:25,191 --> 00:25:27,380 Og når du har regelmæssig variabler, som en int x, 567 00:25:27,380 --> 00:25:31,410 du ønsker at bruge tegnet operatøren for at få adressen på det. 568 00:25:31,410 --> 00:25:31,910 OKAY? 569 00:25:31,910 --> 00:25:35,670 570 00:25:35,670 --> 00:25:38,850 >> OK, så lad os se på pegepinde og hvad der sker under kølerhjelmen. 571 00:25:38,850 --> 00:25:42,640 Så det første jeg gjorde her er den angivne int x er lig med 5. 572 00:25:42,640 --> 00:25:48,460 Adressen på denne variabel er 0x04, og værdien er 5. 573 00:25:48,460 --> 00:25:52,940 Så lad os se hvad der sker med den næste linje. 574 00:25:52,940 --> 00:25:55,130 Så nu er vi erklære en pointer. 575 00:25:55,130 --> 00:26:01,450 Dens adresse er 0x08, og dens værdi er adressen på x. 576 00:26:01,450 --> 00:26:05,220 Giver det mening for alle? 577 00:26:05,220 --> 00:26:06,507 Eventuelle spørgsmål om det? 578 00:26:06,507 --> 00:26:09,130 579 00:26:09,130 --> 00:26:13,080 >> OK, og lad os nu se, hvad sker med den næste linje. 580 00:26:13,080 --> 00:26:18,140 Så med dette næste linje, vi har adressen på kopien være 0x10, 581 00:26:18,140 --> 00:26:20,780 og dens værdi er 5. 582 00:26:20,780 --> 00:26:23,570 Så årsagen til at vi fik fem er vi sagde, vi dereference 583 00:26:23,570 --> 00:26:26,740 pointer, som vi erklærede en int stjerne. 584 00:26:26,740 --> 00:26:35,797 Og så det went-- når vi dereference det, det sagde, OK, hvad der er i slidsen 0x04. 585 00:26:35,797 --> 00:26:36,630 Og det gik til det. 586 00:26:36,630 --> 00:26:40,785 Og hvad x er et x0-- 0x04, og værdien er 5. 587 00:26:40,785 --> 00:26:41,660 Giver det mening? 588 00:26:41,660 --> 00:26:42,334 Ja? 589 00:26:42,334 --> 00:26:50,090 >> PUBLIKUM: Hvorfor er kopien adresse kun 4 bytes over x pointer? 590 00:26:50,090 --> 00:26:52,318 >> Pulak Goyal: Ja, det er en fejl on-- 591 00:26:52,318 --> 00:26:55,304 >> CAMILLE REKHSON: Så, ja, husk dette er skrevet i hexadecimal. 592 00:26:55,304 --> 00:26:56,220 Pulak Goyal: Oh, yeah. 593 00:26:56,220 --> 00:26:58,615 CAMILLE REKHSON: Så det er faktisk 8 og derefter 16 594 00:26:58,615 --> 00:27:00,960 fordi vi er sagt, markøren, huske, 595 00:27:00,960 --> 00:27:05,330 i vores IDE bliver 8 byte 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 Så bare for at være klar, pointere er 8 byte. 599 00:27:12,540 --> 00:27:14,160 En int er 4 byte. 600 00:27:14,160 --> 00:27:18,380 Så grunden, hvad sprang fra 0x04 til 0x08 601 00:27:18,380 --> 00:27:20,980 er, fordi vi var nødt til at gøre et spring på 8 bytes. 602 00:27:20,980 --> 00:27:24,396 Og så for-- siden kopi er blot en int, 603 00:27:24,396 --> 00:27:26,020 det er 4 bytes, hvilket er halvdelen af ​​8 bytes. 604 00:27:26,020 --> 00:27:29,970 Så vi bare springe til 0x10, hvilket er to væk fra 0x08. 605 00:27:29,970 --> 00:27:33,100 606 00:27:33,100 --> 00:27:34,570 Andre spørgsmål? 607 00:27:34,570 --> 00:27:36,850 OK, let's-- ja? 608 00:27:36,850 --> 00:27:39,245 >> PUBLIKUM: Hvorfor er der ikke værdien af ​​int kopi 609 00:27:39,245 --> 00:27:45,000 bare til-- hvorfor er det 5 i stedet for 0x04? 610 00:27:45,000 --> 00:27:46,270 >> Pulak Goyal: OK, hvorfor er det 5? 611 00:27:46,270 --> 00:27:51,600 OK, så når til-- så lad os først tænke over dette i form af typer. 612 00:27:51,600 --> 00:27:55,600 Så jeg siger int kopi er lig med pointer stjerne. 613 00:27:55,600 --> 00:27:57,490 Så hvad er den type pointer? 614 00:27:57,490 --> 00:27:59,310 Det er en int stjerne. 615 00:27:59,310 --> 00:28:03,850 Og når jeg dereference det, typen bliver en int. 616 00:28:03,850 --> 00:28:06,570 Så det, vi forventer at gemme her er faktisk en int. 617 00:28:06,570 --> 00:28:07,965 Giver det mening? 618 00:28:07,965 --> 00:28:09,090 PUBLIKUM: Sure, lille smule. 619 00:28:09,090 --> 00:28:11,465 Pulak Goyal: Så normalt når du tænker i typer, 620 00:28:11,465 --> 00:28:15,607 det hjælper dig med at forstå, hvad der er den type den værdi, der skal derned. 621 00:28:15,607 --> 00:28:17,940 Så du kan som regel udelukke en masse af disse almindelige fejl 622 00:28:17,940 --> 00:28:21,790 ved at tænke i form af typer. 623 00:28:21,790 --> 00:28:23,612 Lad mig gå igennem lidt flere dias. 624 00:28:23,612 --> 00:28:26,070 Og vi kan få spørgsmål på enden af ​​markøren sektion. 625 00:28:26,070 --> 00:28:28,910 626 00:28:28,910 --> 00:28:32,290 OK, så vi har en fejlbehæftet program her. 627 00:28:32,290 --> 00:28:35,460 Og det gør anyone-- kan nogen fortælle mig, hvad er der galt med dette program? 628 00:28:35,460 --> 00:28:39,000 629 00:28:39,000 --> 00:28:40,820 Ret, så hvad vi er forventer at gøre her 630 00:28:40,820 --> 00:28:44,520 is-- hvad vi ønsker at gøre er at tage den variable int x 631 00:28:44,520 --> 00:28:48,350 og drej det-- gør det lige 5 i stedet for 3, og derefter udskrive det. 632 00:28:48,350 --> 00:28:49,640 Men det er ikke sker. 633 00:28:49,640 --> 00:28:50,950 Kan nogen fortælle mig hvorfor? 634 00:28:50,950 --> 00:28:51,934 Ja? 635 00:28:51,934 --> 00:28:54,840 >> PUBLIKUM: Når funktionen to_five tager x som det er argumentet, 636 00:28:54,840 --> 00:28:58,130 det tager ikke x sig selv, men stedet opretter en kopi, a, af det. 637 00:28:58,130 --> 00:29:00,115 Og det danner operationer på det. 638 00:29:00,115 --> 00:29:02,614 Men på grund af det, du ikke ændre den faktiske værdi af x. 639 00:29:02,614 --> 00:29:03,970 Da du er [uhørligt]. 640 00:29:03,970 --> 00:29:07,950 >> Pulak Goyal: Right, højre, så når vi kalder 641 00:29:07,950 --> 00:29:10,100 funktionen to_five, hvad vi laver tænker, 642 00:29:10,100 --> 00:29:12,550 give mig en kopi af værdi som funktion. 643 00:29:12,550 --> 00:29:16,010 Denne funktion, så vil og laver nogle manipulationer. 644 00:29:16,010 --> 00:29:21,260 Men når det vender tilbage, er det nu ud af omfanget af den vigtigste funktion her. 645 00:29:21,260 --> 00:29:24,750 Og så x er stadig i virkeligheden, lig med 3, og vi udskriver 3. 646 00:29:24,750 --> 00:29:26,445 OK, så lad os se, hvordan det sker. 647 00:29:26,445 --> 00:29:29,430 648 00:29:29,430 --> 00:29:31,180 >> OK, så der er ikke noget erklæret. 649 00:29:31,180 --> 00:29:34,490 Derefter her, x er lig med 3. 650 00:29:34,490 --> 00:29:40,820 Og nu er det is-- ved position to, en er stadig ikke i omfang. 651 00:29:40,820 --> 00:29:46,790 Og nu går vi til position tre, hvor en nu antager en værdi af 3. 652 00:29:46,790 --> 00:29:49,380 Hos fire, vi nu ændre en til 5. 653 00:29:49,380 --> 00:29:53,290 Men nu, da vi hopper tilbage til fem, som er print redegørelse, 654 00:29:53,290 --> 00:29:55,380 a er nu ude af rækkevidde. 655 00:29:55,380 --> 00:29:57,450 Og x er stadig lig med 3. 656 00:29:57,450 --> 00:29:59,700 Betyder det mening at alle? 657 00:29:59,700 --> 00:30:03,010 OK, så lad os nu tale om, hvordan vi kan bruge pegepinde til at løse dette. 658 00:30:03,010 --> 00:30:06,140 Er der nogen der har nogen ideer, hvordan vi kunne løse dette ved hjælp pointers? 659 00:30:06,140 --> 00:30:08,710 660 00:30:08,710 --> 00:30:11,490 >> PUBLIKUM: Du tager på en int stjerne i stedet for en int til to_five. 661 00:30:11,490 --> 00:30:12,530 >> Pulak Goyal: Beklager, kunne du sige op? 662 00:30:12,530 --> 00:30:15,266 >> PUBLIKUM: Du tager på en int stjerne i stedet for en int til to_five. 663 00:30:15,266 --> 00:30:16,140 Pulak Goyal: OK, ja. 664 00:30:16,140 --> 00:30:20,250 Så lad os pass-- stedet for passerer bare værdien, lad os give det som reference. 665 00:30:20,250 --> 00:30:21,690 Denne nye funktion, ikke? 666 00:30:21,690 --> 00:30:25,210 Og så ved at lede adressen i, vi kan gøre manipulationer på adressen. 667 00:30:25,210 --> 00:30:27,400 Og så er vi faktisk, faktisk ændrer x. 668 00:30:27,400 --> 00:30:30,570 Så lad os se, hvordan det fungerer. 669 00:30:30,570 --> 00:30:32,950 >> OK, så i dette eksempel vi fast det. 670 00:30:32,950 --> 00:30:38,000 Vi har ændret vores underskrift af to_five at tage i en int 671 00:30:38,000 --> 00:30:40,540 stjerne i stedet for bare en int her. 672 00:30:40,540 --> 00:30:45,470 Så vi dereference dette a og tildele 5 til det. 673 00:30:45,470 --> 00:30:48,090 Og nu er denne vilje, i virkeligheden, udskrive 5. 674 00:30:48,090 --> 00:30:51,960 Så lad os se, hvordan de trin arbejde her. 675 00:30:51,960 --> 00:30:55,200 >> Så med det første skridt, der er ikke noget erklæret endnu. 676 00:30:55,200 --> 00:31:00,140 Så her, med det andet trin, Vi har sagt x er lig med 3, 677 00:31:00,140 --> 00:31:03,970 men en er stadig uden for rækkevidde. 678 00:31:03,970 --> 00:31:08,100 Nu ved den tredje linje, vi har x er stadig lig med tre. 679 00:31:08,100 --> 00:31:14,150 Og nu har vi passeret in--, hvad der er opbevares i en nu adressen på x. 680 00:31:14,150 --> 00:31:16,760 Giver det mening at alle, hvordan vi fik det? 681 00:31:16,760 --> 00:31:21,470 Ret, har vi den amper-- det er sådan Vi passerede en tegnet x til funktionen 682 00:31:21,470 --> 00:31:23,040 to_five. 683 00:31:23,040 --> 00:31:30,330 Og så til den næste linje, hvad vi gør, er vi dereference en. 684 00:31:30,330 --> 00:31:36,120 >> Og ved dereferere en, vi er i stand at ændre værdien af ​​x 3-5. 685 00:31:36,120 --> 00:31:38,560 Fordi x bor på denne adresse 0x12. 686 00:31:38,560 --> 00:31:42,440 687 00:31:42,440 --> 00:31:45,810 Og så, endelig, når vi vende tilbage til main, 688 00:31:45,810 --> 00:31:50,570 Selv om dette er en nu ude af omfang, vi har, i virkeligheden, skiftede x. 689 00:31:50,570 --> 00:31:51,570 Og det er 5. 690 00:31:51,570 --> 00:31:55,160 Eventuelle spørgsmål til denne? 691 00:31:55,160 --> 00:31:56,036 Ja? 692 00:31:56,036 --> 00:31:58,185 >> PUBLIKUM: Kan du fortælle mig hvad tegnet x var? 693 00:31:58,185 --> 00:32:00,004 Jeg troede tegnet var ligesom OG. 694 00:32:00,004 --> 00:32:03,480 695 00:32:03,480 --> 00:32:07,210 >> Pulak Goyal: Ja, så vi bruger den samme symbol for mange forskellige ting. 696 00:32:07,210 --> 00:32:11,470 Så her, når du have-- i dette tilfælde, når du har, 697 00:32:11,470 --> 00:32:19,380 Jeg guess-- så i dette tilfælde, når du har at gøre med pointere, 698 00:32:19,380 --> 00:32:23,640 når du sætter tegnet foran af en int, en variabel int eller en char, 699 00:32:23,640 --> 00:32:28,609 eller et flow, hvad du siger er, giv mig adressen på dette. 700 00:32:28,609 --> 00:32:31,900 Men hvad du tænker på, når ellers du ville bruge tegnet er, lad os sige, 701 00:32:31,900 --> 00:32:33,180 i en if-sætning. 702 00:32:33,180 --> 00:32:39,256 Du har en ægte, og nogle variabler at evaluere til nogle Boolean, 703 00:32:39,256 --> 00:32:41,380 og nogle andre variabler at validere nogle Boolean 704 00:32:41,380 --> 00:32:42,880 og du ønsker at få den, og af det. 705 00:32:42,880 --> 00:32:44,552 Så du ville bruge tegnet. 706 00:32:44,552 --> 00:32:47,510 SPEAKER 1: Ja, så bare i dag, vi har talte om tre forskellige anvendelser 707 00:32:47,510 --> 00:32:48,250 af tegnet. 708 00:32:48,250 --> 00:32:51,040 Vi har to-tegn, som er hvad Pulak har netop beskrevet. 709 00:32:51,040 --> 00:32:53,420 Vi har en ét-tegn, som er det beskrevet Camille 710 00:32:53,420 --> 00:32:54,897 tidligere, hvilket er en tegnet. 711 00:32:54,897 --> 00:32:56,685 Og det er til bitvise OG. 712 00:32:56,685 --> 00:32:59,640 Og læg mærke til, at både betinget og-- eller, undskyld, 713 00:32:59,640 --> 00:33:04,180 den logiske AND og den bitvise OG, har disse to tal, ikke? 714 00:33:04,180 --> 00:33:07,354 Det var noget Ampersand tegnet noget, 715 00:33:07,354 --> 00:33:09,350 noget tegnet noget. 716 00:33:09,350 --> 00:33:13,862 Her, hvor vi bare har tegnet noget, der er dereferere. 717 00:33:13,862 --> 00:33:15,830 >> Pulak Goyal: Ja, godt spørgsmål. 718 00:33:15,830 --> 00:33:16,677 Ja. 719 00:33:16,677 --> 00:33:21,150 >> PUBLIKUM: Hvorfor i tråd 5a og stjerne en bliver N / A? 720 00:33:21,150 --> 00:33:25,520 Hvorfor gør de ikke bare slags bevarer samme værdier fra den tidligere linje? 721 00:33:25,520 --> 00:33:28,000 >> Pulak Goyal: Fordi vi har forladt funktion. 722 00:33:28,000 --> 00:33:30,894 Og hvad så happens-- så hvad-- nu er vi 723 00:33:30,894 --> 00:33:33,060 ud af rækkevidden af ​​denne funktion, hvad der sker faktisk 724 00:33:33,060 --> 00:33:37,770 er der fjernes fra hukommelsen. 725 00:33:37,770 --> 00:33:38,808 Ja. 726 00:33:38,808 --> 00:33:42,982 >> PUBLIKUM: Mellem 3 eller 4 stjernet en lig 5. 727 00:33:42,982 --> 00:33:43,690 Pulak Goyal: Ja. 728 00:33:43,690 --> 00:33:45,575 PUBLIKUM: Hvad betyder det præcist betegne? 729 00:33:45,575 --> 00:33:46,950 Pulak Goyal: Hvad betyder det? 730 00:33:46,950 --> 00:33:47,380 Publikum: Ja. 731 00:33:47,380 --> 00:33:49,088 Pulak Goyal: Så Spørgsmålet var, hvad der er 732 00:33:49,088 --> 00:33:52,300 at-- hvad laver du online når vi siger, stjerne er lig med 5? 733 00:33:52,300 --> 00:33:55,210 Så husk stjernen den dereference operatør. 734 00:33:55,210 --> 00:33:58,640 Så når en, i dette tilfælde er en pointer. 735 00:33:58,640 --> 00:34:00,030 Det er en int stjerne. 736 00:34:00,030 --> 00:34:03,710 Så når vi dereference en af ved hjælp af stjerne, hvad vi siger 737 00:34:03,710 --> 00:34:11,250 er, gå til det, der er lagret på adresse, lagres i en-- så take-- så en, 738 00:34:11,250 --> 00:34:13,280 lige nu, har nogle adresse er lagret i den. 739 00:34:13,280 --> 00:34:19,920 Gå til hvor denne adresse peger på, og nu ændre hvad det så er til fem. 740 00:34:19,920 --> 00:34:20,420 Ja. 741 00:34:20,420 --> 00:34:23,390 >> PUBLIKUM: Kan du sige det mere enkelt? 742 00:34:23,390 --> 00:34:27,360 Ændre adressen på en til 5. 743 00:34:27,360 --> 00:34:31,070 >> Pulak Goyal: Vi er ikke ændre adressen på en til 5. 744 00:34:31,070 --> 00:34:36,340 A har nogle adresse i det, som er adresse af den variable af interesse. 745 00:34:36,340 --> 00:34:39,570 Og så hvad vi siger når vi dereference er, 746 00:34:39,570 --> 00:34:42,630 nu vil vi change-- vi nu refererer 747 00:34:42,630 --> 00:34:45,135 variablen interesse direkte. 748 00:34:45,135 --> 00:34:48,499 Betyder det giver mening? 749 00:34:48,499 --> 00:34:52,280 >> SPEAKER 1: En anden måde at tænke af det go-- så en er en adresse. 750 00:34:52,280 --> 00:34:55,310 Stjernen siger gå til den pågældende behandle og se på dens værdi. 751 00:34:55,310 --> 00:34:58,000 Og nu sætte værdien til 5. 752 00:34:58,000 --> 00:35:00,920 Så det siger, skal du gå til adresse x, som 753 00:35:00,920 --> 00:35:05,720 vil være, hvad der er gemt i en, og ændre det til 5. 754 00:35:05,720 --> 00:35:06,470 Pulak Goyal: Ja? 755 00:35:06,470 --> 00:35:10,817 PUBLIKUM: Så stillingen er, hvor markøren går, adressen. 756 00:35:10,817 --> 00:35:14,270 Men værdien er en tildelt værdi baseret på adressen. 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 Andre spørgsmål om dette? 760 00:35:19,367 --> 00:35:22,774 761 00:35:22,774 --> 00:35:23,940 PUBLIKUM: Jeg har et spørgsmål. 762 00:35:23,940 --> 00:35:25,664 Pulak Goyal: Ja, undskyld. 763 00:35:25,664 --> 00:35:30,324 PUBLIKUM: Så når du store-- så Hvis du siger [uhørlig] a. 764 00:35:30,324 --> 00:35:31,032 Pulak Goyal: Ja. 765 00:35:31,032 --> 00:35:34,448 PUBLIKUM: Har du nødt til at Opbevar x med et og-tegn? 766 00:35:34,448 --> 00:35:37,376 Hvorfor kan du ikke bare sige x før din int [uhørligt]? 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 PUBLIKUM: [uhørligt]. 770 00:35:42,090 --> 00:35:43,673 Pulak Goyal: Så er din question-- åh. 771 00:35:43,673 --> 00:35:47,160 772 00:35:47,160 --> 00:35:51,300 Så dit spørgsmål er, hvorfor kan ikke we-- til funktionen to_five, kan hvorfor ikke vi 773 00:35:51,300 --> 00:35:52,590 bare bestå en x, right? 774 00:35:52,590 --> 00:35:53,570 >> PUBLIKUM: Right. 775 00:35:53,570 --> 00:35:59,570 >> Pulak Goyal: OK, ja, så dette igen går tilbage til vores diskussion om typer. 776 00:35:59,570 --> 00:36:06,080 Så funktionen to_five nu forventer en type int stjerne. 777 00:36:06,080 --> 00:36:07,660 Så hvad er den type x? 778 00:36:07,660 --> 00:36:09,800 X er blot en int. 779 00:36:09,800 --> 00:36:13,530 Men hvad denne funktion forventer er en int stjerne. 780 00:36:13,530 --> 00:36:16,910 Så det forventer en variabel, har en adresse er lagret i den. 781 00:36:16,910 --> 00:36:20,250 Så det er sådan du-- sætte tegnet, og så det er 782 00:36:20,250 --> 00:36:22,560 hvordan vi passere i adresse, som er nu-- 783 00:36:22,560 --> 00:36:25,120 og der fortolker, at som en int stjerne, ja. 784 00:36:25,120 --> 00:36:26,700 Store spørgsmål. 785 00:36:26,700 --> 00:36:29,300 Andre spørgsmål om dette? 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, så lad os nu snakke om pointer aritmetik. 789 00:36:37,020 --> 00:36:40,050 Så her, tilføje og fratrække Jeg justerer markøren 790 00:36:40,050 --> 00:36:43,950 ved I gange større avanceret pointer bytes. 791 00:36:43,950 --> 00:36:46,170 Så lad os se på, hvordan det ser ud. 792 00:36:46,170 --> 00:36:49,640 Så her har vi erklæret int x er lig med en 5. 793 00:36:49,640 --> 00:36:56,120 Og nu vil vi til at erklære en pointer y, og videregive adressen x der. 794 00:36:56,120 --> 00:36:58,910 Så vi har det. 795 00:36:58,910 --> 00:37:01,005 SOx opbevares ved 0x04. 796 00:37:01,005 --> 00:37:03,960 Så nu y er lig med den. 797 00:37:03,960 --> 00:37:12,260 Og kan nogen fortælle mig, hvad de mener vil ske, når vi gør y plus lig med 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 >> PUBLIKUM: Vil det ændre til 0 gange 0 8? 801 00:37:24,010 --> 00:37:25,342 >> Pulak Goyal: Størrelse, og Motortype- 802 00:37:25,342 --> 00:37:27,789 >> PUBLIKUM: Du flytter adresse. 803 00:37:27,789 --> 00:37:29,080 Pulak Goyal: Ja det was-- ja. 804 00:37:29,080 --> 00:37:31,130 So-- højre. 805 00:37:31,130 --> 00:37:33,110 Så det vil skifte til 0x08. 806 00:37:33,110 --> 00:37:38,750 Og because-- så du ville bruge denne formel 1 gange størrelsen af ​​markøren 807 00:37:38,750 --> 00:37:42,354 og pejlemærker er af size-- 808 00:37:42,354 --> 00:37:44,050 >> [STUDERENDE mumlen] 809 00:37:44,050 --> 00:37:45,190 >> Pulak Goyal: Right. 810 00:37:45,190 --> 00:37:46,150 >> [STUDERENDE mumlen] 811 00:37:46,150 --> 00:37:49,230 >> SPEAKER 1: Så den type, markøren punkter at-- 812 00:37:49,230 --> 00:37:51,862 >> Pulak Goyal: Er, yeah, Ja, det er 4 byte. 813 00:37:51,862 --> 00:37:53,930 >> SPEAKER 1: Så ints er 4 byte. 814 00:37:53,930 --> 00:38:01,260 >> Pulak Goyal: Så hvis vi en-- havde lad os siger vi erklærede, jeg gætte, en char. 815 00:38:01,260 --> 00:38:06,830 Hvad ville der at-- så lad os sige, at vi har char x svarende til en eller noget. 816 00:38:06,830 --> 00:38:14,400 Og vi havde adressen på, at der på 0x04, hvad ville y plus lig med 1 gøre nu? 817 00:38:14,400 --> 00:38:14,960 Undskyld hvad? 818 00:38:14,960 --> 00:38:16,099 >> PUBLIKUM: 0x05. 819 00:38:16,099 --> 00:38:17,140 Pulak Goyal: 0x05, højre. 820 00:38:17,140 --> 00:38:18,520 Er alle se det? 821 00:38:18,520 --> 00:38:20,212 OK, og lad os nu sige, det er en float. 822 00:38:20,212 --> 00:38:20,962 Hvad ville der ske? 823 00:38:20,962 --> 00:38:25,210 824 00:38:25,210 --> 00:38:26,130 Nogen? 825 00:38:26,130 --> 00:38:28,066 Så flåd er, hvor mange bytes? 826 00:38:28,066 --> 00:38:28,860 >> PUBLIKUM: 4 byte. 827 00:38:28,860 --> 00:38:29,651 >> Pulak Goyal: Right. 828 00:38:29,651 --> 00:38:32,661 Så det ville være det samme som dette. 829 00:38:32,661 --> 00:38:33,160 Afkøle. 830 00:38:33,160 --> 00:38:36,230 831 00:38:36,230 --> 00:38:40,180 OK, og nu lad os tale om pointere og arrays. 832 00:38:40,180 --> 00:38:44,210 Så du så dette på to foregående p-apparater, 833 00:38:44,210 --> 00:38:48,570 hvor vi kan treat-- så arrays og pointere er ikke det samme. 834 00:38:48,570 --> 00:38:51,170 Men vi kan behandle arrays som pejlemærker. 835 00:38:51,170 --> 00:38:55,550 Så her har vi dette array her, som har tre pladser. 836 00:38:55,550 --> 00:38:57,570 I den første slot-- vi har en, to og tre. 837 00:38:57,570 --> 00:39:00,930 >> Så hvis we-- så vi kan tildele at ved at sige, vi har array, 838 00:39:00,930 --> 00:39:02,080 dereference det. 839 00:39:02,080 --> 00:39:04,579 Og så når vi dereference at, hvad vi rent faktisk gør 840 00:39:04,579 --> 00:39:05,910 refererer til samme slot. 841 00:39:05,910 --> 00:39:09,230 Så stjerne matrix er lig med 1. 842 00:39:09,230 --> 00:39:11,020 Vi could- hvordan kunne vi skriver at--, hvad der er 843 00:39:11,020 --> 00:39:13,404 en alternativ måde, vi kunne skrive det? 844 00:39:13,404 --> 00:39:14,840 >> PUBLIKUM: Array 0 lig med 1. 845 00:39:14,840 --> 00:39:17,100 >> Pulak Goyal: Præcis, gør alle se det? 846 00:39:17,100 --> 00:39:18,320 Så samme med her. 847 00:39:18,320 --> 00:39:24,060 Så når vi har vifte plus 1, vi do-- så even-- 848 00:39:24,060 --> 00:39:28,890 Husk med aritmetiske, at vi lige talt om, når vi gør plus 1 849 00:39:28,890 --> 00:39:32,120 eller flytte den over ved 4 byte, til højre. 850 00:39:32,120 --> 00:39:33,170 Er alle se det? 851 00:39:33,170 --> 00:39:35,753 Og den side, når vi dereference det, kan vi sætte det til 2. 852 00:39:35,753 --> 00:39:37,710 Og det er, hvordan vi sætter den næste blok til 2. 853 00:39:37,710 --> 00:39:41,640 Og så en alternativ måde at skrive det ville også være vifte beslag 854 00:39:41,640 --> 00:39:44,436 0 beslag er lig med 1. 855 00:39:44,436 --> 00:39:47,070 >> PUBLIKUM: Har du brug for parenteserne? 856 00:39:47,070 --> 00:39:50,840 >> Pulak Goyal: Ja, fordi du er dereferere hele mængden 857 00:39:50,840 --> 00:39:53,460 matrix plus 1. 858 00:39:53,460 --> 00:39:56,829 OK, og samme ting for matrix plus 2. 859 00:39:56,829 --> 00:39:57,870 Eventuelle spørgsmål til denne? 860 00:39:57,870 --> 00:39:58,369 Ja. 861 00:39:58,369 --> 00:40:01,340 PUBLIKUM: Så array er indstilles automatisk ved 0? 862 00:40:01,340 --> 00:40:03,054 >> Pulak Goyal: Array is-- ked af det, hvad? 863 00:40:03,054 --> 00:40:03,962 >> PUBLIKUM: Array er 0. 864 00:40:03,962 --> 00:40:07,140 Adressen på array er blot 0. 865 00:40:07,140 --> 00:40:10,200 >> Pulak Goyal: Så spørgsmålet var, er adressen på matrix bare 0? 866 00:40:10,200 --> 00:40:11,950 Så nej, matrix har nogle adresse. 867 00:40:11,950 --> 00:40:14,930 Så når vi dereference det, that's-- så du kan tænke om-- 868 00:40:14,930 --> 00:40:18,230 bogstaveligt talt som en pegepind, der peger til begyndelsen af ​​et array. 869 00:40:18,230 --> 00:40:19,390 Så der har nogle adresse. 870 00:40:19,390 --> 00:40:20,580 Vi ved ikke, hvad det er. 871 00:40:20,580 --> 00:40:24,170 Men når vi dereference det, vi kender det er begyndelsen af ​​grupperingen. 872 00:40:24,170 --> 00:40:25,980 Og så når vi bevæger os fra 1, vi bare flytter 873 00:40:25,980 --> 00:40:29,090 i forhold til, hvor denne adresse var. 874 00:40:29,090 --> 00:40:30,480 Andre spørgsmål? 875 00:40:30,480 --> 00:40:31,419 Ja? 876 00:40:31,419 --> 00:40:35,559 >> PUBLIKUM: Så hvis du gør vifte beslag plus 1-- 877 00:40:35,559 --> 00:40:37,350 Pulak Goyal: Beklager, Jeg-- kan du sige op? 878 00:40:37,350 --> 00:40:41,174 PUBLIKUM: Ja, hvis du gør vifte beslag [uhørligt]. 879 00:40:41,174 --> 00:40:45,227 Så hvis du sætter pointer-- 880 00:40:45,227 --> 00:40:46,810 Pulak Goyal: Beklager, jeg kan ikke høre dig. 881 00:40:46,810 --> 00:40:48,100 Kan du sige det en gang til? 882 00:40:48,100 --> 00:40:49,470 >> PUBLIKUM: Du er OK. 883 00:40:49,470 --> 00:40:50,870 >> Pulak Goyal: OK, undskyld. 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 Så når du går i vifte beslag 3-- 887 00:40:55,710 --> 00:40:56,570 >> Pulak Goyal: Ja. 888 00:40:56,570 --> 00:40:59,832 >> PUBLIKUM: --isn't there-- ville ikke det være fire steder som 0, 1, 2, og 3? 889 00:40:59,832 --> 00:41:02,630 Hvorfor er det ikke int vifte 2? 890 00:41:02,630 --> 00:41:07,850 >> Pulak Goyal: Nej, så bare konventionen C is--, når vi erklærer array, 891 00:41:07,850 --> 00:41:12,010 we-- nummeret vi sætter der er, hvor mange slots, vi ønsker. 892 00:41:12,010 --> 00:41:16,970 Men indeksene i array er faktisk matrix 0, 1 matrix og matrix 2. 893 00:41:16,970 --> 00:41:19,780 Så det er bare konventionen om, hvordan vi erklære arrays. 894 00:41:19,780 --> 00:41:20,880 Ja, alle andre spørgsmål? 895 00:41:20,880 --> 00:41:21,380 Ja. 896 00:41:21,380 --> 00:41:23,750 PUBLIKUM: Så vi er stadig taler om pointere, ikke? 897 00:41:23,750 --> 00:41:24,500 Pulak Goyal: Ja. 898 00:41:24,500 --> 00:41:28,600 PUBLIKUM: Kan du stadig gøre stjerne for opstilling 0 er lig med 1? 899 00:41:28,600 --> 00:41:32,870 Pulak Goyal: Nej, nej, so-- OK, så spørgsmålet var kunne 900 00:41:32,870 --> 00:41:37,370 du bare gøre stjerne vifte beslag nul, og så sige, at lig med 1. 901 00:41:37,370 --> 00:41:40,000 Så nej, hvad vi siger her er, at vi kan tror-- 902 00:41:40,000 --> 00:41:42,600 Vi kan behandle arrays som pejlemærker. 903 00:41:42,600 --> 00:41:44,970 Så vi have-- hvad vi er siger, er at vi har to måder 904 00:41:44,970 --> 00:41:47,370 nu referere til den samme blok. 905 00:41:47,370 --> 00:41:52,270 Så doing-- hvis du har vifte nul, den type, der nu er en int. 906 00:41:52,270 --> 00:41:55,264 Og hvis du tager den stjerne, der, du får en ugyldig ting. 907 00:41:55,264 --> 00:41:57,680 Så hvad vi siger her, er Der er to alternative måder 908 00:41:57,680 --> 00:41:59,100 at henvise til den samme blok. 909 00:41:59,100 --> 00:42:01,860 Du kan enten gøre vifte beslag 0 er lig med 1. 910 00:42:01,860 --> 00:42:06,420 Eller du kan gøre dereference array, og har denne lig med 0. 911 00:42:06,420 --> 00:42:08,621 Så bare to måder gøre det samme. 912 00:42:08,621 --> 00:42:09,120 Ja. 913 00:42:09,120 --> 00:42:15,270 >> PUBLIKUM: Hvorfor er det ikke størrelsen af ​​int 1 for at tilføje at-- 914 00:42:15,270 --> 00:42:17,650 >> Pulak Goyal: Størrelse af int 1. 915 00:42:17,650 --> 00:42:19,900 >> PUBLIKUM: Fordi det er at flytte en off. 916 00:42:19,900 --> 00:42:23,620 >> Pulak Goyal: Fordi det er bare den måde C fungerer. 917 00:42:23,620 --> 00:42:26,460 Det er bare den måde pointer aritmetiske defineres. 918 00:42:26,460 --> 00:42:27,854 Det vil tage markøren. 919 00:42:27,854 --> 00:42:30,020 Og så uanset hvad du tilføje til det, vil det mangedoble at 920 00:42:30,020 --> 00:42:34,770 af størrelsen af ​​enhver markøren butik er, ja. 921 00:42:34,770 --> 00:42:35,480 Ja. 922 00:42:35,480 --> 00:42:39,595 >> PUBLIKUM: Så du siger, at vi kan behandle pointere og arrays den samme, 923 00:42:39,595 --> 00:42:40,720 men at de er forskellige. 924 00:42:40,720 --> 00:42:41,950 Så hvad gør dem anderledes? 925 00:42:41,950 --> 00:42:45,070 Hvad kan vi ikke gøre med én, men ikke den anden? 926 00:42:45,070 --> 00:42:52,390 >> Pulak Goyal: Med henblik på dette klasse, jeg tror it's-- hvad gør du-- 927 00:42:52,390 --> 00:42:56,270 >> SPEAKER 1: Så we-- OK, så, for eksempel, hvis du allokere hukommelse 928 00:42:56,270 --> 00:42:59,680 og du har en pointer til et helt tal, f.eks. 929 00:42:59,680 --> 00:43:01,890 Hvis du har forsøgt at starte gør pointer aritmetik 930 00:43:01,890 --> 00:43:05,890 og gå ud over den mængde hukommelse, der du tildelt, ville du løbe ind i fejl. 931 00:43:05,890 --> 00:43:08,250 Vi ved med arrays, vi sige før tid, OK, jeg 932 00:43:08,250 --> 00:43:11,400 vil allocate-- dette væsentlige siger, jeg ønsker at tildele 933 00:43:11,400 --> 00:43:13,490 nok plads til tre heltal. 934 00:43:13,490 --> 00:43:17,820 Og så nu kan vi behandler hukommelse, som om vi har alle tre af disse tal. 935 00:43:17,820 --> 00:43:19,460 Er den slags mening? 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 >> PUBLIKUM: Så en stjerne array, er, at tildele 1 939 00:43:24,778 --> 00:43:26,657 til 0 indeks 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 >> PUBLIKUM: Så hvad er efter næste to linjer i form af til-- I 943 00:43:34,439 --> 00:43:36,980 forstå, at du prøver at bruge pointer aritmetiske her, 944 00:43:36,980 --> 00:43:39,355 men igen, jeg ikke forstår hvad pointer aritmetik er. 945 00:43:39,355 --> 00:43:43,869 Så array plus 1, er du at sige, at du er nu 946 00:43:43,869 --> 00:43:47,540 lyst til at tale om den første indeks i array. 947 00:43:47,540 --> 00:43:50,050 >> Pulak Goyal: Right, og så Grunden der virker, er array, 948 00:43:50,050 --> 00:43:52,970 her, kan vi tænke på som en int stjerne. 949 00:43:52,970 --> 00:43:56,110 Og så når vi pointer aritmetik på det, husker formlen hvor 950 00:43:56,110 --> 00:43:59,020 vi tager til-- jeg gætte, hvad den aktuelle adresse er, 951 00:43:59,020 --> 00:44:02,100 og derefter når vi tilføjer 1 til det, vi faktisk 952 00:44:02,100 --> 00:44:06,620 formere 1 af størrelsen af de ting, vi manipulere. 953 00:44:06,620 --> 00:44:09,090 Så i dette tilfælde er størrelsen af ​​en int. 954 00:44:09,090 --> 00:44:11,634 Og så har vi flytte det sende denne meget. 955 00:44:11,634 --> 00:44:14,419 >> SPEAKER 1: Så foregive du har b-array stjerne. 956 00:44:14,419 --> 00:44:15,335 Pulak Goyal: OK, ja. 957 00:44:15,335 --> 00:44:16,005 SPEAKER 1: Med din hånd. 958 00:44:16,005 --> 00:44:16,505 Gå her. 959 00:44:16,505 --> 00:44:18,350 Pulak Goyal: Eller jeg kan bare-- ja. 960 00:44:18,350 --> 00:44:23,660 Så her-- OK, så matrix på begynder, er bare lige her. 961 00:44:23,660 --> 00:44:29,155 Så når vi dereference array, var vi lige henvisning til den første blok her. 962 00:44:29,155 --> 00:44:36,620 Men nu når jeg gør matrix plus 1, at is-- at pilen nu er lige her. 963 00:44:36,620 --> 00:44:38,250 Betyder det giver mening? 964 00:44:38,250 --> 00:44:46,690 Ret, fordi denne blok er størrelse int, som er 4 bytes. 965 00:44:46,690 --> 00:44:53,540 Og så, hvad vi laver, er vi er flytte, at pointer med 4 byte derover. 966 00:44:53,540 --> 00:44:56,080 Når vi regne på det, vil det altid 967 00:44:56,080 --> 00:44:59,730 flytte det i trin på 4 byte. 968 00:44:59,730 --> 00:45:01,902 Fordi dette er ligesom en int stjerne. 969 00:45:01,902 --> 00:45:04,970 Giver det mening? 970 00:45:04,970 --> 00:45:05,470 OKAY. 971 00:45:05,470 --> 00:45:07,770 >> PUBLIKUM: Så de ting i array var 5 bytes, ville vi flytte den 5 bytes-- 972 00:45:07,770 --> 00:45:10,853 >> Pulak Goyal: Right, så hvis vi havde en char stjerne, ville vi flytte det ved kun 1 byte. 973 00:45:10,853 --> 00:45:13,670 Så i tilfælde af char stjerner, det ville bare være at flytte den over med 1. 974 00:45:13,670 --> 00:45:15,420 PUBLIKUM: For at få den næste du bruge en stjerne. 975 00:45:15,420 --> 00:45:18,099 Pulak Goyal: Ja, ja, gør det giver mening? 976 00:45:18,099 --> 00:45:19,890 SPEAKER 1: Vi kan chatte om det mere senere. 977 00:45:19,890 --> 00:45:21,530 Pulak Goyal: Ja, ja, helt sikkert. 978 00:45:21,530 --> 00:45:23,214 OK, cool. 979 00:45:23,214 --> 00:45:24,630 Lad os gå videre til næste afsnit. 980 00:45:24,630 --> 00:45:27,182 981 00:45:27,182 --> 00:45:28,140 SPEAKER 1: Åh, OK cool. 982 00:45:28,140 --> 00:45:29,205 Ja, det er mig. 983 00:45:29,205 --> 00:45:30,330 Okay, awesome. 984 00:45:30,330 --> 00:45:35,064 OK, cool, så nu er vi på en lille smule mere generelle oplysninger om hukommelse. 985 00:45:35,064 --> 00:45:37,730 Også, jeg sætter pris på det faktum, at de var på vej temmelig hurtigt. 986 00:45:37,730 --> 00:45:40,230 Det er en masse materiale til at få igennem en time og en halv. 987 00:45:40,230 --> 00:45:42,880 Men hvis der er nogen emner, du ønsker at gå mere i dybden i, 988 00:45:42,880 --> 00:45:44,630 vi kommer til at have kontortid denne uge 989 00:45:44,630 --> 00:45:46,340 hvor du kan chatte med os en på én. 990 00:45:46,340 --> 00:45:49,240 Eller du kan bare komme op på den ende og vi vil snakke om ting. 991 00:45:49,240 --> 00:45:52,130 Og som altid, føler fri til at stille spørgsmål. 992 00:45:52,130 --> 00:45:52,695 Awesome. 993 00:45:52,695 --> 00:45:55,820 Så her er vores billede af hukommelse, vi har set i forelæsning en milliard gange. 994 00:45:55,820 --> 00:45:58,610 Og vi ved, at denne stak vokser op fra bunden 995 00:45:58,610 --> 00:46:00,214 og den bunke vokser ned. 996 00:46:00,214 --> 00:46:03,380 Og hvad er forskellen mellem ting at vi holder på bunke og ting 997 00:46:03,380 --> 00:46:05,981 at vi holder på stakken? 998 00:46:05,981 --> 00:46:07,397 Nogen smide noget derude. 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 >> PUBLIKUM: Er det stable for ting, der er lige 1002 00:46:14,215 --> 00:46:18,095 impermanent variabler, som vi er bare erklære hjælp af bestemte funktioner? 1003 00:46:18,095 --> 00:46:19,220 SPEAKER 1: Smuk, ja. 1004 00:46:19,220 --> 00:46:23,007 Så enhver tid, hvor, lad os siger vi er i en funktion, 1005 00:46:23,007 --> 00:46:24,590 og vi bare have nogle lokale variabler. 1006 00:46:24,590 --> 00:46:26,214 De kommer til at ende på stakken. 1007 00:46:26,214 --> 00:46:30,020 Hvis der i stedet, vi kalder malloc og faktisk allokere hukommelse, 1008 00:46:30,020 --> 00:46:32,290 der altid kommer fra den bunke. 1009 00:46:32,290 --> 00:46:35,100 Så, ja Cool? 1010 00:46:35,100 --> 00:46:38,672 >> Og så husk, at enhver hukommelse at du allokerer bruge malloc, 1011 00:46:38,672 --> 00:46:40,130 der kommer til at ende op på bunke. 1012 00:46:40,130 --> 00:46:42,019 Og hvis du glemmer at gratis det, computerens 1013 00:46:42,019 --> 00:46:43,810 ikke kommer til at vide, at du er færdig med det. 1014 00:46:43,810 --> 00:46:45,560 Så det er bare at gå til hænge derude i hukommelsen. 1015 00:46:45,560 --> 00:46:47,412 Og du er hovedsagelig lækker at hukommelsen. 1016 00:46:47,412 --> 00:46:48,120 Du mister den. 1017 00:46:48,120 --> 00:46:51,840 Fordi du aldrig fortalt computeren, hey jeg færdig med at bruge det, er du velkommen til at bruge, 1018 00:46:51,840 --> 00:46:53,632 sætte andre ting der. 1019 00:46:53,632 --> 00:46:54,470 Afkøle. 1020 00:46:54,470 --> 00:46:55,928 Eventuelle spørgsmål der? 1021 00:46:55,928 --> 00:46:56,428 Ja. 1022 00:46:56,428 --> 00:46:58,808 >> PUBLIKUM: Så hvad slags hukommelse er stakken? 1023 00:46:58,808 --> 00:46:59,974 Ikke dynamisk foder, delegeret? 1024 00:46:59,974 --> 00:47:01,200 Hvad ville du kalde det? 1025 00:47:01,200 --> 00:47:03,870 >> SPEAKER 1: Sure, så du kunne tænke på det som lokale variable. 1026 00:47:03,870 --> 00:47:10,137 Faktiske opkald til funktioner kommer til at stable op. 1027 00:47:10,137 --> 00:47:10,720 Ellers andet? 1028 00:47:10,720 --> 00:47:11,220 Ja? 1029 00:47:11,220 --> 00:47:14,627 PUBLIKUM: Hvordan har du fri den hukommelse, du har tilføjet til-- 1030 00:47:14,627 --> 00:47:17,710 SPEAKER 1: Sure, så når du allokere hukommelse på bunke, ringe til dig malloc. 1031 00:47:17,710 --> 00:47:20,543 Og så så, der giver dig tilbage en pointer til nogle adresse i hukommelsen. 1032 00:47:20,543 --> 00:47:22,630 Så siger du kaldte denne pointer, ikke? 1033 00:47:22,630 --> 00:47:24,970 Derefter skal du bare sige fri pointer. 1034 00:47:24,970 --> 00:47:27,351 Og der frigør hukommelsen. 1035 00:47:27,351 --> 00:47:27,850 Afkøle. 1036 00:47:27,850 --> 00:47:28,660 Andre spørgsmål? 1037 00:47:28,660 --> 00:47:28,880 Ja. 1038 00:47:28,880 --> 00:47:30,838 >> PUBLIKUM: Hvad betyder dynamisk tildelt betyde? 1039 00:47:30,838 --> 00:47:32,345 1040 00:47:32,345 --> 00:47:35,381 >> SPEAKER 1: Dynamisk tildelt betyder, i løbet af dit program. 1041 00:47:35,381 --> 00:47:37,630 Så når du kalder malloc i midten af ​​dit program, 1042 00:47:37,630 --> 00:47:40,510 ved begyndelsen af ​​programmet, der er ingen hukommelse allokeret. 1043 00:47:40,510 --> 00:47:42,600 Og da computeren gå gennem denne kode, 1044 00:47:42,600 --> 00:47:44,280 det kommer til at allokere hukommelsen. 1045 00:47:44,280 --> 00:47:46,507 Så det er hvad vi mener med dynamisk. 1046 00:47:46,507 --> 00:47:47,090 Godt spørgsmål. 1047 00:47:47,090 --> 00:47:48,309 Ja? 1048 00:47:48,309 --> 00:47:50,809 PUBLIKUM: Når du definerer en array med de firkantede parenteser, 1049 00:47:50,809 --> 00:47:54,154 gør det stadig [uhørligt]? 1050 00:47:54,154 --> 00:47:55,570 SPEAKER 1: Det er et godt spørgsmål. 1051 00:47:55,570 --> 00:48:00,320 Jeg tror, ​​når du allokere et array, det faktisk placerer det på stakken. 1052 00:48:00,320 --> 00:48:03,008 Jeg er ikke positivt om det, så du ikke citere mig. 1053 00:48:03,008 --> 00:48:04,430 >> SPEAKER 2: Jeg tror det-- ja det sætter det på stakken. 1054 00:48:04,430 --> 00:48:05,763 >> SPEAKER 1: Sætter det på stakken. 1055 00:48:05,763 --> 00:48:07,044 OK, cool, bekræftet. 1056 00:48:07,044 --> 00:48:07,710 Andre spørgsmål? 1057 00:48:07,710 --> 00:48:08,030 Ja? 1058 00:48:08,030 --> 00:48:10,946 >> PUBLIKUM: Når du uddelegere malloc, ikke den automatisk computeren 1059 00:48:10,946 --> 00:48:12,910 allokere hukommelse til dine variabler? 1060 00:48:12,910 --> 00:48:14,660 SPEAKER 1: Ja, for din lokale variabler, 1061 00:48:14,660 --> 00:48:16,724 det automatisk sætter hukommelse på stakken. 1062 00:48:16,724 --> 00:48:18,640 PUBLIKUM: Så hvad er Pointen ved at bruge malloc? 1063 00:48:18,640 --> 00:48:19,840 SPEAKER 1: Hvad er det Pointen ved at bruge malloc? 1064 00:48:19,840 --> 00:48:22,850 Så vi så en flok af eksempler, lignende, for eksempel ved anvendelse swap, 1065 00:48:22,850 --> 00:48:25,690 hvor vi ønsker omfanget af variablen at være noget 1066 00:48:25,690 --> 00:48:27,940 ud over blot dens funktion opkald. 1067 00:48:27,940 --> 00:48:29,875 Og vi vil have noget at vi kan passere omkring 1068 00:48:29,875 --> 00:48:31,750 og at vi kan få adgang til fra forskellige steder. 1069 00:48:31,750 --> 00:48:33,791 Det er der vi gerne vil sætte hukommelse på bunke. 1070 00:48:33,791 --> 00:48:37,835 Således at alle disse forskellige funktioner kan få adgang til det. 1071 00:48:37,835 --> 00:48:40,510 >> PUBLIKUM: Kan du lige forklare det? 1072 00:48:40,510 --> 00:48:44,770 >> SPEAKER 1: Så en mulighed is-- så Spørgsmålet var, kan vi bare allocate-- 1073 00:48:44,770 --> 00:48:47,660 undskyld, kan vi erklære en global variabel, i det væsentlige. 1074 00:48:47,660 --> 00:48:48,560 Det er en mulighed. 1075 00:48:48,560 --> 00:48:50,893 Men med en masse af dem, der en tendens til at få virkelig rodet. 1076 00:48:50,893 --> 00:48:52,847 Og vi generelt tror af, at så dårligt design. 1077 00:48:52,847 --> 00:48:53,821 Ja. 1078 00:48:53,821 --> 00:48:56,580 Cool, alle andre spørgsmål? 1079 00:48:56,580 --> 00:48:57,140 Awesome. 1080 00:48:57,140 --> 00:48:58,789 OK, vi går videre. 1081 00:48:58,789 --> 00:49:00,580 Så det er faktisk hvordan vi allokere hukommelse. 1082 00:49:00,580 --> 00:49:02,670 Vi talte om det en lille smule. 1083 00:49:02,670 --> 00:49:04,240 Vi bruger denne funktion kaldet malloc. 1084 00:49:04,240 --> 00:49:07,850 Og du fortæller det, hvor mange bytes i hukommelse, så hvor mange bytes på bunke, 1085 00:49:07,850 --> 00:49:08,610 du vil have. 1086 00:49:08,610 --> 00:49:13,120 Og det kommer til at returnere adressen, så en pegepind til et stykke hukommelse 1087 00:49:13,120 --> 00:49:14,500 at det er afsat til dig. 1088 00:49:14,500 --> 00:49:17,080 Så den type vil være ugyldig stjerne. 1089 00:49:17,080 --> 00:49:21,310 Det kommer til at være en pegepind til uanset hvad du beslutter at sætte i der. 1090 00:49:21,310 --> 00:49:23,530 Hver gang du kalder malloc, vi allerede sagt 1091 00:49:23,530 --> 00:49:25,640 du nødt til at frigøre det, så vi har ikke memory leaks. 1092 00:49:25,640 --> 00:49:27,170 >> Hvad er den anden ting at du absolut 1093 00:49:27,170 --> 00:49:29,185 nødt til at gøre hver eneste gang du kalder malloc? 1094 00:49:29,185 --> 00:49:31,210 1095 00:49:31,210 --> 00:49:32,210 OK, er du nødt til at frigøre det. 1096 00:49:32,210 --> 00:49:34,010 Hvad er den anden ting? 1097 00:49:34,010 --> 00:49:35,890 Check for null, smukke. 1098 00:49:35,890 --> 00:49:38,850 Så, ja, det er rigtigt der op på tavlen. 1099 00:49:38,850 --> 00:49:42,120 Hvis du vil forsøge at afsætte hukommelse, og du har ingen hukommelse tilbage, 1100 00:49:42,120 --> 00:49:44,940 computeren vil sige, Jeg har intet at give dig. 1101 00:49:44,940 --> 00:49:47,650 Og det giver dig tilbage null. 1102 00:49:47,650 --> 00:49:48,400 Spørgsmål om det? 1103 00:49:48,400 --> 00:49:49,290 Ja. 1104 00:49:49,290 --> 00:49:52,995 >> PUBLIKUM: Hvorfor ville du nogensinde vil erklære en pointer med en specifik type 1105 00:49:52,995 --> 00:49:56,329 når ugyldig stjerne kan håndtere alle pointer typer anyways? 1106 00:49:56,329 --> 00:49:57,370 SPEAKER 1: Godt spørgsmål. 1107 00:49:57,370 --> 00:50:00,590 Hvorfor skulle vi sige int stjerne i modsætning til at annullere stjerne 1108 00:50:00,590 --> 00:50:03,740 når tomrum stjerne kan klare alt? 1109 00:50:03,740 --> 00:50:06,390 Så vi ønsker ikke at nogensinde udtrykkeligt kastet pointere. 1110 00:50:06,390 --> 00:50:07,940 Det er bare dårlig praksis. 1111 00:50:07,940 --> 00:50:11,850 Men vi vil tale om int stjerner ligesom en forståelse af, 1112 00:50:11,850 --> 00:50:14,195 dette er en pegepind til et heltal. 1113 00:50:14,195 --> 00:50:14,850 >> PUBLIKUM: OK. 1114 00:50:14,850 --> 00:50:17,558 >> SPEAKER 1: Ja, og det giver mulighed for at manipulere værdierne i det 1115 00:50:17,558 --> 00:50:18,667 som heltal. 1116 00:50:18,667 --> 00:50:20,008 >> PUBLIKUM: Åh, OK. 1117 00:50:20,008 --> 00:50:22,250 Og ugyldig stjerne ville ikke lade dig gøre det? 1118 00:50:22,250 --> 00:50:25,070 >> SPEAKER 1: Det afhænger af kontekst Yeah, så du skal ikke bekymre dig 1119 00:50:25,070 --> 00:50:28,460 du ikke bekymre dig for meget om den type der. 1120 00:50:28,460 --> 00:50:32,620 Bare vide, at i almindelighed malloc returnerer en pointer til noget. 1121 00:50:32,620 --> 00:50:33,520 Godt spørgsmål. 1122 00:50:33,520 --> 00:50:37,260 >> PUBLIKUM: Hvorfor formere det gange 10? [Uhørligt]. 1123 00:50:37,260 --> 00:50:40,150 >> SPEAKER 1: Sure, så jeg var bare gør tilfældige eksempel her, hvor 1124 00:50:40,150 --> 00:50:42,840 Jeg ønskede at afsætte nok plads til at lagre 10 heltal. 1125 00:50:42,840 --> 00:50:44,320 Bare et tilfældigt valg. 1126 00:50:44,320 --> 00:50:45,250 Ja. 1127 00:50:45,250 --> 00:50:45,440 Ja, hvad sker der? 1128 00:50:45,440 --> 00:50:47,440 >> PUBLIKUM: Hvad gør du mener med kontrol for null? 1129 00:50:47,440 --> 00:50:51,351 Har du lyst til at kontrollere pointer til null eller malloc? 1130 00:50:51,351 --> 00:50:52,350 SPEAKER 1: Ja, præcis. 1131 00:50:52,350 --> 00:50:54,599 Så var spørgsmålet, hvad mener vi med skak af null? 1132 00:50:54,599 --> 00:50:57,880 Vi ønsker at-- når som helst vi kalder malloc og vi er vendt tilbage en pegepind, 1133 00:50:57,880 --> 00:51:01,110 vi ønsker at sige, er pointer svarende til null? 1134 00:51:01,110 --> 00:51:02,610 Så bogstaveligt PTR. 1135 00:51:02,610 --> 00:51:05,620 Er PTR svarende til null. 1136 00:51:05,620 --> 00:51:06,958 Ja. 1137 00:51:06,958 --> 00:51:08,832 PUBLIKUM: Så jeg var venlig af undrende, hvis du 1138 00:51:08,832 --> 00:51:14,013 initialisere markøren i malloc, gør det peger på begyndelsen af ​​malloc? 1139 00:51:14,013 --> 00:51:15,097 For hvis det er en array-- 1140 00:51:15,097 --> 00:51:16,554 SPEAKER 1: Det er et godt spørgsmål. 1141 00:51:16,554 --> 00:51:19,200 Ja, hvis du ringer malloc, den pointer, som det-- lad os sige, 1142 00:51:19,200 --> 00:51:21,700 så her vi afsætte 10 bytes af hukommelse. 1143 00:51:21,700 --> 00:51:23,830 Så jeg er ked af, nok plads til 10 heltal, 1144 00:51:23,830 --> 00:51:28,220 vi kommer til at få adressen på den første stykke af hukommelsen. 1145 00:51:28,220 --> 00:51:29,880 Det er et godt spørgsmål. 1146 00:51:29,880 --> 00:51:30,481 Ja. 1147 00:51:30,481 --> 00:51:34,810 >> PUBLIKUM: Ved at tildele 10 udbredte heltal, 1148 00:51:34,810 --> 00:51:38,177 kunne du faktisk bruge det pointer som like-- næsten 1149 00:51:38,177 --> 00:51:39,372 som en matrix af tal? 1150 00:51:39,372 --> 00:51:41,830 SPEAKER 1: Ja, så kan du bruge det som et array af heltal? 1151 00:51:41,830 --> 00:51:45,970 Ja, netop, det er hvad Pulak bare viste dig on-- et par glider siden, 1152 00:51:45,970 --> 00:51:48,680 hvor vi siger, OK, det er virkelig lige slags of-- vi 1153 00:51:48,680 --> 00:51:50,805 kan tænke på det som en array af 10 heltal. 1154 00:51:50,805 --> 00:51:52,222 Det sker bare for at være på den bunke. 1155 00:51:52,222 --> 00:51:54,971 PUBLIKUM: Men du ikke kunne få adgang til det med firkantede beslag notation? 1156 00:51:54,971 --> 00:51:58,220 SPEAKER 1: Du faktisk kunne få adgang til det med firkantede beslag notation, ja. 1157 00:51:58,220 --> 00:52:00,221 Du kan behandle dem ens. 1158 00:52:00,221 --> 00:52:00,720 Ja. 1159 00:52:00,720 --> 00:52:02,420 >> PUBLIKUM: Hvorfor skulle Pointer nogensinde blive nul? 1160 00:52:02,420 --> 00:52:04,170 >> SPEAKER 1: Hvorfor skulle Pointer nogensinde blive nul? 1161 00:52:04,170 --> 00:52:06,570 Hvis du vil bruge op alle hukommelsen på din bunke. 1162 00:52:06,570 --> 00:52:09,141 Hvis dit program er at spise op, spise op, spise op hukommelse, 1163 00:52:09,141 --> 00:52:11,890 og der er intet venstre, derefter malloc kommer til at say-- hvis du siger, 1164 00:52:11,890 --> 00:52:14,760 Jeg vil have 100 flere bytes, går det at sige, jeg ikke har 100 bytes. 1165 00:52:14,760 --> 00:52:15,740 Her er null. 1166 00:52:15,740 --> 00:52:18,780 Det betyder, jeg fejlede. 1167 00:52:18,780 --> 00:52:20,516 Ja. 1168 00:52:20,516 --> 00:52:22,830 >> PUBLIKUM: I det tilfælde, null er intet, ikke? 1169 00:52:22,830 --> 00:52:24,110 >> SPEAKER 1: Ja, i det tilfælde, null intet. 1170 00:52:24,110 --> 00:52:24,943 Du har ingen adresse. 1171 00:52:24,943 --> 00:52:28,065 Der er ingen hukommelse. 1172 00:52:28,065 --> 00:52:31,500 Okay, vi går videre. 1173 00:52:31,500 --> 00:52:34,976 OK, lad os tale virkelig hurtigt om buffer overflow. 1174 00:52:34,976 --> 00:52:38,210 Hvornår kan vi støder buffer overflow? 1175 00:52:38,210 --> 00:52:42,980 Lad os sige, at vi har en-- vi allokere en luns af hukommelse, 1176 00:52:42,980 --> 00:52:44,720 og vi kommer til at skrive strengen i. 1177 00:52:44,720 --> 00:52:47,240 Og vi kommer til at sige, OK, jeg har tænkt mig at tildele 1178 00:52:47,240 --> 00:52:49,320 nok plads til seks tegn. 1179 00:52:49,320 --> 00:52:51,680 Og jeg har tænkt mig at spørge brugeren for nogle input. 1180 00:52:51,680 --> 00:52:54,470 Og brugeren input, for eksempel, hej. 1181 00:52:54,470 --> 00:52:56,430 Og det passer perfekt fint, fordi vi har 1182 00:52:56,430 --> 00:53:00,790 plads til alle tegn i goddag, og null afsluttende karakter. 1183 00:53:00,790 --> 00:53:02,840 Masser af plads, ikke noget problem. 1184 00:53:02,840 --> 00:53:08,010 >> Men hvad nu hvis vi giver mulighed for en ond bruger til at bruge vores program, 1185 00:53:08,010 --> 00:53:13,152 og de skriver i ikke seks tegn, eller ikke fem tegn, men en million. 1186 00:53:13,152 --> 00:53:15,860 De holder skrive, og skrive, og skrive, hvad der kommer til at ske? 1187 00:53:15,860 --> 00:53:18,220 Godt vi kun give computer enough-- eller ked af det, 1188 00:53:18,220 --> 00:53:23,350 vi kun gav denne streng plads til 5 tegn. 1189 00:53:23,350 --> 00:53:28,300 Så vi kommer til at få noget som dette, hvor den onde person, der er 1190 00:53:28,300 --> 00:53:31,750 skrive i indgang kan overskrive størrelsen af ​​bufferen, 1191 00:53:31,750 --> 00:53:35,922 og kan gå faktisk forbi mængden at det oprindeligt er tildelt. 1192 00:53:35,922 --> 00:53:38,380 Og så hvad du kan gøre, det virkelig ondt ting du kan gøre, 1193 00:53:38,380 --> 00:53:40,260 er overskrive den returadresse. 1194 00:53:40,260 --> 00:53:42,010 Som dybest set betyder du kan slags tage 1195 00:53:42,010 --> 00:53:45,110 styring af adfærd af programmet. 1196 00:53:45,110 --> 00:53:47,880 Så på et meget højt niveau buffer overflow er, når 1197 00:53:47,880 --> 00:53:49,960 du afsætte en vis mængde af hukommelse. 1198 00:53:49,960 --> 00:53:53,060 Og så du-- dette, fordi du er tager brugerinput eller noget 1199 00:53:53,060 --> 00:53:57,190 ligesom at-- du går over grænserne af, hvad du oprindeligt har tildelt 1200 00:53:57,190 --> 00:53:59,955 og begynde at rode op dit program. 1201 00:53:59,955 --> 00:54:00,455 Ja? 1202 00:54:00,455 --> 00:54:03,220 >> PUBLIKUM: Hvorfor skulle det ikke bare returnere en segmentering fejl? 1203 00:54:03,220 --> 00:54:05,594 >> SPEAKER 1: Hvorfor skulle det ikke returnere en segmentering fejl? 1204 00:54:05,594 --> 00:54:06,570 Det kunne. 1205 00:54:06,570 --> 00:54:10,030 Undertiden compiler eller under en af ​​din runtime 1206 00:54:10,030 --> 00:54:11,430 er faktisk kommer til at kontrollere, at. 1207 00:54:11,430 --> 00:54:13,890 Hvis visse ting sker, og dette er slags lavere niveau, 1208 00:54:13,890 --> 00:54:15,610 så er du nødt til at vide. 1209 00:54:15,610 --> 00:54:18,820 Men hvis du ikke designe disse systemer korrekt, 1210 00:54:18,820 --> 00:54:21,170 så har du chancen af ikke at fange det og bare 1211 00:54:21,170 --> 00:54:24,844 lade computeren take-- den onde person til at styre computeren. 1212 00:54:24,844 --> 00:54:25,344 Ja. 1213 00:54:25,344 --> 00:54:26,260 >> PUBLIKUM: [uhørligt]? 1214 00:54:26,260 --> 00:54:28,934 1215 00:54:28,934 --> 00:54:29,600 SPEAKER 1: Sure. 1216 00:54:29,600 --> 00:54:33,800 Åh, når jeg siger buffer, jeg bare betyde mængde hukommelse, som du har tildelt. 1217 00:54:33,800 --> 00:54:39,090 Så her sagde jeg, åh, vi har afsat seks char-- nok plads til seks tegn. 1218 00:54:39,090 --> 00:54:42,880 Og jeg bare kalde, at min buffer hvor jeg kunne skrive oplysninger. 1219 00:54:42,880 --> 00:54:44,390 Ja. 1220 00:54:44,390 --> 00:54:46,791 Andre spørgsmål om dette? 1221 00:54:46,791 --> 00:54:47,290 Ja. 1222 00:54:47,290 --> 00:54:49,150 >> PUBLIKUM: Hvordan stoppe det? 1223 00:54:49,150 --> 00:54:50,274 Hvordan du stopper den? 1224 00:54:50,274 --> 00:54:51,440 SPEAKER 1: Awesome spørgsmål. 1225 00:54:51,440 --> 00:54:52,240 Hvordan du stopper den? 1226 00:54:52,240 --> 00:54:54,110 Hvordan forhindrer man buffer overflow? 1227 00:54:54,110 --> 00:54:59,160 Nå én måde at gøre det er noget lignende GetString, hvor vi hele tiden stige 1228 00:54:59,160 --> 00:55:03,200 den mængde hukommelse, som vi afsætter hvis brugeren indtaster en masse tekst. 1229 00:55:03,200 --> 00:55:07,570 En anden ting er, hvis du kun ønsker seks tegn, gør en hurtig kontrol. 1230 00:55:07,570 --> 00:55:11,220 Sig kun indgang seks tegn. 1231 00:55:11,220 --> 00:55:12,444 Ja. 1232 00:55:12,444 --> 00:55:14,360 Så lad os sige, du var arbejder on-- vi vil 1233 00:55:14,360 --> 00:55:16,985 at gå til web kram en lille smule senere i course-- men lad os 1234 00:55:16,985 --> 00:55:21,422 siger du arbejder på en formular, ville du bare begrænse, hvor meget kunne afleveres. 1235 00:55:21,422 --> 00:55:22,378 Ja. 1236 00:55:22,378 --> 00:55:24,768 >> PUBLIKUM: getString trækker hukommelse fra stakken, ikke? 1237 00:55:24,768 --> 00:55:25,444 Bare for at afklare? 1238 00:55:25,444 --> 00:55:26,485 SPEAKER 1: Et mere tid? 1239 00:55:26,485 --> 00:55:28,400 PUBLIKUM: Er getString tage hukommelse fra stakken? 1240 00:55:28,400 --> 00:55:31,210 SPEAKER 1: Jeg tror Getm-- get int tager hukommelse fra den bunke 1241 00:55:31,210 --> 00:55:32,911 fordi det kalder Alloc. 1242 00:55:32,911 --> 00:55:33,452 PUBLIKUM: Oh. 1243 00:55:33,452 --> 00:55:33,951 OKAY. 1244 00:55:33,951 --> 00:55:35,750 SPEAKER 1: Ja, malloc og realloc. 1245 00:55:35,750 --> 00:55:37,120 Andre spørgsmål? 1246 00:55:37,120 --> 00:55:37,803 Ja. 1247 00:55:37,803 --> 00:55:40,650 >> PUBLIKUM: Så ved at definere størrelsen af ​​buffering, 1248 00:55:40,650 --> 00:55:42,733 du forhindre en person fra at kunne injicere kode 1249 00:55:42,733 --> 00:55:45,700 der kan glide forbi [uhørligt]. 1250 00:55:45,700 --> 00:55:48,130 >> SPEAKER 1: Så ved at definere størrelsen af ​​bufferen, 1251 00:55:48,130 --> 00:55:50,760 du har sagt, OK her er hvordan meget hukommelse, vi kan bruge. 1252 00:55:50,760 --> 00:55:55,550 Hvis du tillader brugeren at skrive over det, så du kommer til at løbe ind i problemer. 1253 00:55:55,550 --> 00:55:57,930 Give mening. 1254 00:55:57,930 --> 00:55:59,370 Awesome. 1255 00:55:59,370 --> 00:56:00,640 Lad os flytte sammen. 1256 00:56:00,640 --> 00:56:02,320 Okay. 1257 00:56:02,320 --> 00:56:06,652 Apropos fejl, her er nogle fælles fejlmeddelelser 1258 00:56:06,652 --> 00:56:09,860 som kunne have vist op, mens du var kodning, der arbejder på dit problem sæt. 1259 00:56:09,860 --> 00:56:12,320 God chance, at en af disse dukker op på quizzen 1260 00:56:12,320 --> 00:56:15,090 hvis seneste år er nogen indikation. 1261 00:56:15,090 --> 00:56:17,580 Så svar er slags heroppe på brættet. 1262 00:56:17,580 --> 00:56:19,510 Men velkommen til at råbe nogle flere. 1263 00:56:19,510 --> 00:56:21,280 >> Hvorfor kan en segmentering fejl ske? 1264 00:56:21,280 --> 00:56:24,279 Hvorfor kan du få en segmentering fejl når du kører dit program? 1265 00:56:24,279 --> 00:56:26,760 1266 00:56:26,760 --> 00:56:28,230 >> PUBLIKUM: [uhørligt]. 1267 00:56:28,230 --> 00:56:29,500 >> SPEAKER 1: God. 1268 00:56:29,500 --> 00:56:32,820 Ja, hvis vi forsøger at få adgang hukommelse, der er ikke givet til os. 1269 00:56:32,820 --> 00:56:34,610 Hvis vi dereference en null-pointer. 1270 00:56:34,610 --> 00:56:38,610 For eksempel, hvis vi kalder malloc, og glemmer at tjekke, om det er null, 1271 00:56:38,610 --> 00:56:42,250 og vi bare prøve at bruge det, computerens kommer til at give os en segmentering fejl. 1272 00:56:42,250 --> 00:56:42,750 God. 1273 00:56:42,750 --> 00:56:46,680 Hvad med implicit erklæring om funktion? 1274 00:56:46,680 --> 00:56:48,589 Hvad betyder det? 1275 00:56:48,589 --> 00:56:51,380 PUBLIKUM: Du forsøger at bruge en funktion, som du ikke har defineret. 1276 00:56:51,380 --> 00:56:52,130 SPEAKER 1: God. 1277 00:56:52,130 --> 00:56:54,504 Du forsøger at bruge en funktion at du ikke har defineret. 1278 00:56:54,504 --> 00:56:56,000 Så der kunne være en af ​​to ting. 1279 00:56:56,000 --> 00:56:59,320 Måske var det ligesom det eksempel Camille viste dig tidligere. 1280 00:56:59,320 --> 00:57:02,330 Og du har en hovedfunktion der kalder noget, der hedder terning. 1281 00:57:02,330 --> 00:57:04,371 Og lad os sige, du har glemt at skrive denne prototype. 1282 00:57:04,371 --> 00:57:07,540 Du glemte at sige, hey computer, Jeg har denne funktion kaldet terning. 1283 00:57:07,540 --> 00:57:09,380 Du vil se den senere. 1284 00:57:09,380 --> 00:57:12,440 Lad os sige, du har glemt at skrive prototype, kan du få denne fejl. 1285 00:57:12,440 --> 00:57:14,820 En anden ting er, lad os sige du forsøgte at bruge printf, 1286 00:57:14,820 --> 00:57:16,880 og glemte at omfatte standard bibliotek, 1287 00:57:16,880 --> 00:57:20,240 så det kommer til at sige implicitte erklæring om funktion. 1288 00:57:20,240 --> 00:57:22,800 Og sidst, men ikke mindst, sort identifikator. 1289 00:57:22,800 --> 00:57:23,300 Ja. 1290 00:57:23,300 --> 00:57:24,841 >> PUBLIKUM: Du har et problem omfang. 1291 00:57:24,841 --> 00:57:28,728 Ligesom måske du forsøger at kalder en lokal variabel, der er 1292 00:57:28,728 --> 00:57:30,884 i en anden slags område. 1293 00:57:30,884 --> 00:57:33,550 SPEAKER 1: Stor, så hvis du har en variabel, der ikke er i omfang, 1294 00:57:33,550 --> 00:57:36,890 og du forsøger at bruge det, du kommer til at komme i problemer. 1295 00:57:36,890 --> 00:57:40,960 Og bare mere generelt, lad os sige du forsøger at bruge x, med nogensinde at sige int 1296 00:57:40,960 --> 00:57:45,140 x er lig med 5, så er du kommer til at løbe ind i problemer. 1297 00:57:45,140 --> 00:57:47,640 Undskyld mig, spørgsmål om dette? 1298 00:57:47,640 --> 00:57:49,330 Awesome, chugging højre ad. 1299 00:57:49,330 --> 00:57:55,692 >> OK, rekursion, hvorfor might-- lad os see-- Jeg mistede min sch-- åh her vi går, 1300 00:57:55,692 --> 00:57:57,400 bare sikre, at vi er nogenlunde efter planen. 1301 00:57:57,400 --> 00:57:59,060 Okay, cool. 1302 00:57:59,060 --> 00:58:03,150 OK, rekursion, den generelle idé rekursion, en rekursiv funktion 1303 00:58:03,150 --> 00:58:05,380 er en funktion, der kalder sig selv. 1304 00:58:05,380 --> 00:58:08,170 OK, så det er hvad jeg mener med et program koncept 1305 00:58:08,170 --> 00:58:11,130 hvorved en funktion kalder sig. 1306 00:58:11,130 --> 00:58:16,210 Hvad ville være some-- hvad er en god grund til at bruge rekursion? 1307 00:58:16,210 --> 00:58:17,550 Hvornår kan det være nyttigt? 1308 00:58:17,550 --> 00:58:20,926 Eller hvad et program, der virkelig egner sig til rekursion? 1309 00:58:20,926 --> 00:58:22,330 >> PUBLIKUM: Binær søgning. 1310 00:58:22,330 --> 00:58:25,500 >> SPEAKER 1: Binær søgning egner sig til rekursion, 1311 00:58:25,500 --> 00:58:29,060 fordi du har dette problem, som du kan nedbryde i mindre stykker, 1312 00:58:29,060 --> 00:58:32,330 og kontinuerligt udføre Den samme algoritme på det. 1313 00:58:32,330 --> 00:58:37,790 Dette fører til, i mange tilfælde mere elegante kode, der er mere præcis. 1314 00:58:37,790 --> 00:58:40,500 Vi har lige er et eksempel af binær søgning. 1315 00:58:40,500 --> 00:58:43,100 Et andet eksempel er mergesort. 1316 00:58:43,100 --> 00:58:45,920 Nogle gange, når du tænker på en algoritme, som fakultet, 1317 00:58:45,920 --> 00:58:47,410 det bare føles rekursive, ikke? 1318 00:58:47,410 --> 00:58:52,440 Fordi vi ved, at fakultet af 5 er en faktorielt 4 gange 5. 1319 00:58:52,440 --> 00:58:56,080 Og så når du opretter et problem den måde, det bare føles rekursiv. 1320 00:58:56,080 --> 00:58:58,530 Så det ville være en fantastisk måde at skrive det. 1321 00:58:58,530 --> 00:58:59,425 Spørgsmål? 1322 00:58:59,425 --> 00:59:00,395 Ja. 1323 00:59:00,395 --> 00:59:01,850 >> PUBLIKUM: Hvad er en base case? 1324 00:59:01,850 --> 00:59:02,770 >> SPEAKER 1: Åh hvad er en base case? 1325 00:59:02,770 --> 00:59:04,680 Jeg sagde, glem ikke at inkludere en base case. 1326 00:59:04,680 --> 00:59:07,690 Lad os sige, at vi skrev en faktoriel funktion, 1327 00:59:07,690 --> 00:59:09,620 og vi lavede fakultet af 5. 1328 00:59:09,620 --> 00:59:12,352 Og vi ved et fakultet af 5 er 5 gange om fakultet af 4, 1329 00:59:12,352 --> 00:59:13,310 bla, bla, bla, bla. 1330 00:59:13,310 --> 00:59:14,360 Hvordan kan vi vide, hvornår de skal stoppe? 1331 00:59:14,360 --> 00:59:16,276 Hvordan kan vi vide, at vi faktisk har en række? 1332 00:59:16,276 --> 00:59:20,180 For hvis vi holdt ringer fakultet, så vi ville aldrig få et svar, ikke? 1333 00:59:20,180 --> 00:59:24,470 Så når vi ved, hvordan man stoppe i eksemplet faktoriel. 1334 00:59:24,470 --> 00:59:25,460 Enhver, ja. 1335 00:59:25,460 --> 00:59:27,764 >> PUBLIKUM: Når 1 fakultet er 1. 1336 00:59:27,764 --> 00:59:28,430 SPEAKER 1: God. 1337 00:59:28,430 --> 00:59:29,530 Så vi kender. 1338 00:59:29,530 --> 00:59:33,400 Vi kan tage for givet, at 1 faktoriel er lig med 1. 1339 00:59:33,400 --> 00:59:36,570 Så hvis vi kommer til det punkt, hvor Vi kalder fakultet den 1., 1340 00:59:36,570 --> 00:59:38,050 bare gå videre og vende tilbage 1. 1341 00:59:38,050 --> 00:59:39,180 Og det er din base tilfældet. 1342 00:59:39,180 --> 00:59:45,040 Fordi vi ved, når vi skud afsted, og vi altid vil ramme det, vil vi never-- 1343 00:59:45,040 --> 00:59:48,800 Vi vil ikke bare holde ud for evigt. 1344 00:59:48,800 --> 00:59:50,700 Alle andre spørgsmål om rekursion? 1345 00:59:50,700 --> 00:59:51,630 Ja. 1346 00:59:51,630 --> 00:59:54,420 >> PUBLIKUM: Så når du vender tilbage 1, det bare automatisk 1347 00:59:54,420 --> 00:59:56,290 vil stoppe programmet, ikke? 1348 00:59:56,290 --> 00:59:59,390 >> SPEAKER 1: Ja, så når du ringe afkast 1, if-- lad os sige, 1349 00:59:59,390 --> 01:00:04,480 lad os sige fakultet af 2 opkald fakultet af 1, fakultet af 1 1350 01:00:04,480 --> 01:00:06,120 vil bare hånd tilbage 1. 1351 01:00:06,120 --> 01:00:12,790 Og nu fakultet af 2 vil sige OK, 2 gange 1 er 2, og returnere det svar. 1352 01:00:12,790 --> 01:00:14,260 Ja. 1353 01:00:14,260 --> 01:00:16,710 >> PUBLIKUM: Har vi behøver at bekymre dig om omfanget i rekursion 1354 01:00:16,710 --> 01:00:20,150 når du går ind i en algoritme? 1355 01:00:20,150 --> 01:00:21,880 >> SPEAKER 1: Åh, ja. 1356 01:00:21,880 --> 01:00:25,060 Ja, du behøver at bekymre dig om anvendelsesområde i forbindelse med rekursion. 1357 01:00:25,060 --> 01:00:29,820 Så kun de variabler defineres i dette løb af funktionen 1358 01:00:29,820 --> 01:00:32,170 vil være nyttig. 1359 01:00:32,170 --> 01:00:33,792 Ja godt spørgsmål. 1360 01:00:33,792 --> 01:00:35,250 Okay, lad os holde bevæger sig langs. 1361 01:00:35,250 --> 01:00:37,320 Fordi vi har en masse materiale til at komme igennem. 1362 01:00:37,320 --> 01:00:41,080 Men som jeg sagde, er du velkommen til at slå op kontortid, eller os efter den kendsgerning. 1363 01:00:41,080 --> 01:00:42,850 >> Dette er blot en virkelig hurtig dias. 1364 01:00:42,850 --> 01:00:45,150 Vi lærte en masse om søgninger og sorterer. 1365 01:00:45,150 --> 01:00:47,400 Venligst, venligst, venligst, disse afsnit er online, 1366 01:00:47,400 --> 01:00:51,240 Jeg tror på cs50.net/quizzes. 1367 01:00:51,240 --> 01:00:53,762 Så gå tage dette skema og sætte det på din bedømmelse ark, 1368 01:00:53,762 --> 01:00:55,470 fordi der vil være et spørgsmål om dette. 1369 01:00:55,470 --> 01:00:56,682 Venligst ikke får det galt. 1370 01:00:56,682 --> 01:00:58,390 Lige meget hurtigt, hvad dette diagram betyder, 1371 01:00:58,390 --> 01:01:04,370 er den taler om store o, som vi kender at være den øverste grænse for en algoritmer 1372 01:01:04,370 --> 01:01:05,150 Løbe tid. 1373 01:01:05,150 --> 01:01:08,080 Og vi har omega, som er kommer til at være den nedre grænse 1374 01:01:08,080 --> 01:01:10,290 af algoritmer runtime. 1375 01:01:10,290 --> 01:01:10,840 OKAY? 1376 01:01:10,840 --> 01:01:12,480 >> PUBLIKUM: [uhørligt]. 1377 01:01:12,480 --> 01:01:12,800 >> SPEAKER 1: Ja, hvad er det sidste? 1378 01:01:12,800 --> 01:01:13,380 Hvad er theta? 1379 01:01:13,380 --> 01:01:16,850 Det er, hvis we-- vi kun kommer til at bekymrer sig om i denne klasse i tilfælde 1380 01:01:16,850 --> 01:01:19,381 hvor vores øvre grænse og vores nedre grænse er de samme. 1381 01:01:19,381 --> 01:01:22,005 Ja, det er den eneste gang, det er kommer til at komme op i denne klasse. 1382 01:01:22,005 --> 01:01:23,320 OK, jeg har tænkt mig at holde ud. 1383 01:01:23,320 --> 01:01:26,490 Hvis du ikke har taget dit billede, Jeg lover disse vil være online. 1384 01:01:26,490 --> 01:01:28,220 >> OK, awesome, structs. 1385 01:01:28,220 --> 01:01:29,810 Hvorfor kan vi ønsker structs? 1386 01:01:29,810 --> 01:01:34,110 Hvad er en nyttig grund Vi vil måske structs. 1387 01:01:34,110 --> 01:01:36,277 Nogen råber noget ud. 1388 01:01:36,277 --> 01:01:38,110 Jamen lad os se på det eksempel på brættet. 1389 01:01:38,110 --> 01:01:41,090 Lad os sige, at vi har at gøre med alle disse studerende. 1390 01:01:41,090 --> 01:01:44,900 Hvis vi laver et program for CS50, er der ligesom 800 mennesker. 1391 01:01:44,900 --> 01:01:47,890 Vi er nødt til at write-- vi kommer til at nødt til at håndtere en masse oplysninger 1392 01:01:47,890 --> 01:01:49,020 om de studerende. 1393 01:01:49,020 --> 01:01:50,990 Det ville være rart, hvis vi kunne slags gruppe 1394 01:01:50,990 --> 01:01:54,460 denne-- alle de oplysninger, som har at gøre med en bestemt elev 1395 01:01:54,460 --> 01:01:56,027 i én datatype. 1396 01:01:56,027 --> 01:01:58,360 Men vi ved, der er ingen data skriv kaldes, Student, ikke? 1397 01:01:58,360 --> 01:02:01,890 Vi har et heltal, har vi en float, vi har en streng, eller en char stjerne, 1398 01:02:01,890 --> 01:02:03,920 men vi har ikke, en studerende. 1399 01:02:03,920 --> 01:02:08,680 >> Så vi kan gøre er faktisk slags definere vores egen struktur, kalder det studerende, 1400 01:02:08,680 --> 01:02:12,440 og vi kan knytte nogle forskellige områder med at struct. 1401 01:02:12,440 --> 01:02:14,410 Så i dette tilfælde, lad os siger vi har en studerende. 1402 01:02:14,410 --> 01:02:17,350 Og de ting, vi holder af om, er den studerende id-nummer 1403 01:02:17,350 --> 01:02:19,500 og den studerendes navn. 1404 01:02:19,500 --> 01:02:24,175 Og nu kan vi forbinder denne ID og dette navn med en given elev. 1405 01:02:24,175 --> 01:02:25,300 Så lad os se nogle eksempler. 1406 01:02:25,300 --> 01:02:28,860 1407 01:02:28,860 --> 01:02:33,490 >> OK, så her siger jeg, OK, lad os siger, at vi ønsker at gøre en elev. 1408 01:02:33,490 --> 01:02:35,050 Jeg kalder ham studerende 1. 1409 01:02:35,050 --> 01:02:38,850 Og hans ID-nummer, i dette tilfælde kan vi få adgang 1410 01:02:38,850 --> 01:02:45,200 ved blot at gøre navnet på den studerende dot feltet, vi vil have adgang til. 1411 01:02:45,200 --> 01:02:49,110 Så dette vil bare være studerende 1 dot-id, og vi satte det lig med 1. 1412 01:02:49,110 --> 01:02:52,300 Fordi huske, vi sagde, at ID vil være et heltal. 1413 01:02:52,300 --> 01:02:56,540 Og meget på samme måde, kan vi sige, det studerendes navn bliver Davin, 1414 01:02:56,540 --> 01:02:57,760 for eksempel. 1415 01:02:57,760 --> 01:03:01,420 Så kan vi bare få adgang til feltet af en struct ved hjælp af denne prik. 1416 01:03:01,420 --> 01:03:03,098 Spørgsmål om det? 1417 01:03:03,098 --> 01:03:03,598 Ja. 1418 01:03:03,598 --> 01:03:05,582 >> PUBLIKUM: Er der nogen måde at beskytte dine variabler? 1419 01:03:05,582 --> 01:03:08,560 Er der nogen måde at beskytte variabler bliver eksternt adgang? 1420 01:03:08,560 --> 01:03:10,726 >> SPEAKER 1: Er der alligevel at beskytte dine variabler 1421 01:03:10,726 --> 01:03:12,680 bliver eksternt adgang? 1422 01:03:12,680 --> 01:03:13,750 Ikke i omfanget af CS50. 1423 01:03:13,750 --> 01:03:16,680 1424 01:03:16,680 --> 01:03:17,977 Andre spørgsmål? 1425 01:03:17,977 --> 01:03:18,476 Ja. 1426 01:03:18,476 --> 01:03:18,942 >> PUBLIKUM: Hvad er typedef struct? 1427 01:03:18,942 --> 01:03:20,192 Hvad betyder hver komponent betyde? 1428 01:03:20,192 --> 01:03:22,937 1429 01:03:22,937 --> 01:03:24,520 SPEAKER 1: Ah, hvad er typedef struct? 1430 01:03:24,520 --> 01:03:26,240 Hvad betyder hver komponent betyder i denne fyr? 1431 01:03:26,240 --> 01:03:26,850 >> Publikum: Ja. 1432 01:03:26,850 --> 01:03:27,683 >> SPEAKER 1: OK, cool. 1433 01:03:27,683 --> 01:03:31,200 Så dette siger, hey computer, jeg ønsker at oprette en ny struktur. 1434 01:03:31,200 --> 01:03:34,970 Og jeg har tænkt mig at definere en definition for det, sådan at jeg kunne bruge det 1435 01:03:34,970 --> 01:03:37,520 som om det var en type hele mit program. 1436 01:03:37,520 --> 01:03:39,300 OK, så jeg ønsker at definere en struktur. 1437 01:03:39,300 --> 01:03:41,650 Og jeg vil nu være i stand til at bruge det som en type. 1438 01:03:41,650 --> 01:03:43,400 Og dens navn er elev. 1439 01:03:43,400 --> 01:03:45,730 Og her er dens marker. 1440 01:03:45,730 --> 01:03:48,130 >> PUBLIKUM: Så er, at typedef struct [uhørligt]? 1441 01:03:48,130 --> 01:03:50,592 1442 01:03:50,592 --> 01:03:53,800 SPEAKER 1: Hvis du ønsker at være i stand til bruge denne struct hele dit program, 1443 01:03:53,800 --> 01:03:57,910 og i de fleste tilfælde i CS50 vi gør det, må vi sige typen Def. 1444 01:03:57,910 --> 01:04:01,190 Og det gør det muligt at bruge det samme måde, som vi bruger som int eller flyde. 1445 01:04:01,190 --> 01:04:04,168 Computeren vil altid ved, hvad det er. 1446 01:04:04,168 --> 01:04:04,668 Ja. 1447 01:04:04,668 --> 01:04:06,560 >> PUBLIKUM: Kan vi skriver dette i header fil? 1448 01:04:06,560 --> 01:04:07,060 >> SPEAKER 1: Åh, undskyld. 1449 01:04:07,060 --> 01:04:08,600 Har vi skriver dette i header fil? 1450 01:04:08,600 --> 01:04:11,410 Du kunne skrive dette i toppen af ​​din program, i toppen af ​​dit C-program. 1451 01:04:11,410 --> 01:04:13,010 Ja, det ville være det mest rimelig sted for det. 1452 01:04:13,010 --> 01:04:13,509 Tilbage dertil. 1453 01:04:13,509 --> 01:04:15,704 PUBLIKUM: Samme spørgsmål, så før main? 1454 01:04:15,704 --> 01:04:18,870 SPEAKER 1: Right, du har brug for dette for at være et eller andet sted, at alle kan få adgang til den. 1455 01:04:18,870 --> 01:04:20,612 Så før vigtigste i dit tilfælde, ja. 1456 01:04:20,612 --> 01:04:23,820 PUBLIKUM: Er der en forskel mellem sætte studerende på toppen og i bunden? 1457 01:04:23,820 --> 01:04:25,810 SPEAKER 1: Ah, er der en Forskellen mellem at sætte studerende 1458 01:04:25,810 --> 01:04:26,840 på toppen eller i bunden? 1459 01:04:26,840 --> 01:04:29,650 Let-- redde dette spørgsmål, og når vi kommer til hægtede lister, 1460 01:04:29,650 --> 01:04:31,020 Vi vil se, at, OK? 1461 01:04:31,020 --> 01:04:32,750 Så holde på, at der for et sekund. 1462 01:04:32,750 --> 01:04:37,080 Det sidste, jeg vil nævne her, er i stedet for at have en struktur, 1463 01:04:37,080 --> 01:04:41,180 vi har en pointer til en struktur, vi kan ændre vores notation 1464 01:04:41,180 --> 01:04:42,480 at være lidt pænere. 1465 01:04:42,480 --> 01:04:45,810 >> Vi kan sige, lad os sige vi har en pointer til en studerende snarere end blot 1466 01:04:45,810 --> 01:04:47,040 en studerende. 1467 01:04:47,040 --> 01:04:52,460 Hvis vi vil have adgang til et felt, i stedet for laver, godt gå dereference markøren, 1468 01:04:52,460 --> 01:04:54,100 og derefter få adgang feltnavnet. 1469 01:04:54,100 --> 01:04:57,310 Denne notation ser lidt rodet med stjernen i denne prik. 1470 01:04:57,310 --> 01:05:00,790 Helt korrekt, men en slags af renere måde at gøre det, 1471 01:05:00,790 --> 01:05:03,280 er blot at sige pointer pil navn. 1472 01:05:03,280 --> 01:05:11,460 Og som faktisk kombinerer dereferere og adgang i en smukt symbol. 1473 01:05:11,460 --> 01:05:12,470 Spørgsmål om det? 1474 01:05:12,470 --> 01:05:13,760 >> PUBLIKUM: Bare sige, at en mere tid. 1475 01:05:13,760 --> 01:05:14,480 >> SPEAKER 1: Sig, at endnu en gang. 1476 01:05:14,480 --> 01:05:16,021 >> PUBLIKUM: Præcis hvad du lige sagde. 1477 01:05:16,021 --> 01:05:17,870 SPEAKER 1: Sure, præcis hvad jeg lige sagde. 1478 01:05:17,870 --> 01:05:21,580 Hvis vi har en pointer til en studerende snarere end den studerende selv, 1479 01:05:21,580 --> 01:05:25,410 vi can-- en måde, at vi kan få adgang til område er at dereference det, og derefter 1480 01:05:25,410 --> 01:05:27,110 adgang navn. 1481 01:05:27,110 --> 01:05:29,040 En anden, pænere måde, vi kan gøre det, som er lige 1482 01:05:29,040 --> 01:05:33,550 en lille smule af syntaktisk sukker, er bare at gøre pointer pil navn. 1483 01:05:33,550 --> 01:05:38,190 Og der vil kombinere dereferere og have adgang. 1484 01:05:38,190 --> 01:05:40,400 Ja, temmelig cool. 1485 01:05:40,400 --> 01:05:41,260 Okay. 1486 01:05:41,260 --> 01:05:44,390 >> Så lad os tale om det andet spørgsmål. 1487 01:05:44,390 --> 01:05:46,520 Lad os springe til knudepunkter, som vi kommer til at bruge 1488 01:05:46,520 --> 01:05:49,120 i forbundet lister i bare et sekund. 1489 01:05:49,120 --> 01:05:53,580 Så her, vil du bemærke, at der ikke er ordet node både på bunden, 1490 01:05:53,580 --> 01:05:55,160 og på toppen. 1491 01:05:55,160 --> 01:05:59,040 Før, da vi definere studerende, vi lige haft studerende på bunden. 1492 01:05:59,040 --> 01:06:00,470 Vi havde ikke studerende på toppen. 1493 01:06:00,470 --> 01:06:01,902 Enhver ved, hvorfor der kan være? 1494 01:06:01,902 --> 01:06:02,860 Hvad forskellen er? 1495 01:06:02,860 --> 01:06:03,360 Ja. 1496 01:06:03,360 --> 01:06:06,212 PUBLIKUM: Så du bruger node er definitionen af ​​knudepunktet, 1497 01:06:06,212 --> 01:06:08,254 så det er en rekursiv ting? 1498 01:06:08,254 --> 01:06:08,920 SPEAKER 1: God. 1499 01:06:08,920 --> 01:06:13,230 Ja, vi har brug for vores noder til har pointer til andre knudepunkter. 1500 01:06:13,230 --> 01:06:17,640 Så da vi bruger denne type før det er faktisk defineret, 1501 01:06:17,640 --> 01:06:20,613 vi nødt til at sætte det øverst bare så det ved, hvad det er. 1502 01:06:20,613 --> 01:06:22,446 PUBLIKUM: Så vi stadig har brug for det i bunden? 1503 01:06:22,446 --> 01:06:23,338 SPEAKER 1: Ja. 1504 01:06:23,338 --> 01:06:24,754 PUBLIKUM: Så altid i bunden. 1505 01:06:24,754 --> 01:06:26,090 SPEAKER 1: Altid i bunden. 1506 01:06:26,090 --> 01:06:29,410 Så alle jeres vilje har det på bunden. 1507 01:06:29,410 --> 01:06:30,720 Andre spørgsmål? 1508 01:06:30,720 --> 01:06:33,511 Okay, så lader faktisk taler om forbundne lister virkelig hurtigt. 1509 01:06:33,511 --> 01:06:36,510 Så hægtede lister are-- vi bruger dem i stedet for arrays i nogle tilfælde, 1510 01:06:36,510 --> 01:06:40,030 fordi vi ved, at arrays er fast længde, mens hægtede lister 1511 01:06:40,030 --> 01:06:42,670 vi kan vokse og skrumpe som vi ønsker. 1512 01:06:42,670 --> 01:06:45,790 Så dette er et eksempel på, hvad en linket liste kunne se ud. 1513 01:06:45,790 --> 01:06:48,590 Hvad vi har brug for at se, er lederen af ​​listen. 1514 01:06:48,590 --> 01:06:50,330 Så hvor listen begynder. 1515 01:06:50,330 --> 01:06:53,010 Og så knudepunkt han, hver efterfølgende node, er 1516 01:06:53,010 --> 01:06:55,880 ansvarlig for at kende hvor det næste knudepunkt er. 1517 01:06:55,880 --> 01:07:00,950 Så i dette tilfælde, det knudepunkt, der gemmer 1 er ansvarlig for at vide, hvor 3 er. 1518 01:07:00,950 --> 01:07:04,540 Den person, der gemmer 3 ansvarlig for at vide, hvor 9 er. 1519 01:07:04,540 --> 01:07:06,230 Og 9 har ingen andre til at pege på. 1520 01:07:06,230 --> 01:07:08,750 Det er i slutningen af ​​listen, så det bare siger null. 1521 01:07:08,750 --> 01:07:09,250 OKAY? 1522 01:07:09,250 --> 01:07:10,530 >> PUBLIKUM: Hvad er meningen med dette? 1523 01:07:10,530 --> 01:07:11,480 >> SPEAKER 1: Hvad er meningen med det her? 1524 01:07:11,480 --> 01:07:12,105 >> Publikum: Ja. 1525 01:07:12,105 --> 01:07:15,390 SPEAKER 1: Fordi, lad os sige, at vi har nogle data. 1526 01:07:15,390 --> 01:07:18,480 Og vi ved ikke præcis, hvordan mange data, vi ønsker i forvejen. 1527 01:07:18,480 --> 01:07:22,479 Så med et array, lad os sige, hvor vi vil tælle personer i første række. 1528 01:07:22,479 --> 01:07:24,020 Chancerne er det ikke kommer til at ændre sig. 1529 01:07:24,020 --> 01:07:28,120 Vi kan bare sige, OK, jeg ønsker en bred vifte af størrelse seks. 1530 01:07:28,120 --> 01:07:30,120 Men hvis vi vil have noget der kommer til at ændre sig. 1531 01:07:30,120 --> 01:07:32,900 >> For eksempel, lad os sige, jeg prøvede at holde styr på de studerende 1532 01:07:32,900 --> 01:07:35,330 som de kommer ind i lokalet til revisionen session. 1533 01:07:35,330 --> 01:07:38,420 Jeg har ingen idé om, hvor mange af jer folk vil dukke op. 1534 01:07:38,420 --> 01:07:43,094 Så jeg måske ønsker en datastruktur at jeg kan udvide og krympe. 1535 01:07:43,094 --> 01:07:45,510 Fordi måske nogen vil forlade, måske nogen vil komme. 1536 01:07:45,510 --> 01:07:48,386 Og så til enhver tid, vi kan tilføje eller fjerne noder. 1537 01:07:48,386 --> 01:07:49,771 Cool, store spørgsmål. 1538 01:07:49,771 --> 01:07:50,270 Ja. 1539 01:07:50,270 --> 01:07:52,311 >> PUBLIKUM: Hvis du kan bruge noget som getString 1540 01:07:52,311 --> 01:07:55,750 der holder lade du får flere data som du har brug for det, hvorfor har du brug for dette også? 1541 01:07:55,750 --> 01:07:57,625 >> SPEAKER 1: Hvorfor skulle du bruger linket liste, når 1542 01:07:57,625 --> 01:07:59,440 du kan bruge noget getString? 1543 01:07:59,440 --> 01:08:01,640 Det er et godt spørgsmål. 1544 01:08:01,640 --> 01:08:04,240 Husk, at Get-- en af downfalls af getString 1545 01:08:04,240 --> 01:08:06,750 er, at vi ikke gjorde en meget godt stykke arbejde med at frigøre den hukommelse, 1546 01:08:06,750 --> 01:08:09,320 og vi indførte en flok memory leaks i dit program? 1547 01:08:09,320 --> 01:08:15,037 Du kan tage det en statisk størrelse array og holde voksende det. 1548 01:08:15,037 --> 01:08:16,870 Men du er nødt til at finde nye steder i hukommelsen. 1549 01:08:16,870 --> 01:08:18,359 Det ville bare være en masse overhead. 1550 01:08:18,359 --> 01:08:21,050 >> En af de gode ting om forbundet lister i modsætning til arrays, er arrays 1551 01:08:21,050 --> 01:08:22,830 er alle i den samme placering i hukommelsen. 1552 01:08:22,830 --> 01:08:25,540 Det skal være kontinuerlig bidder af hukommelse. 1553 01:08:25,540 --> 01:08:29,920 Ud fra følgende betragtninger hægtede lister, 2 og 3 kan være helt forskellige steder. 1554 01:08:29,920 --> 01:08:31,880 Ligesom 2 er herovre, og 3 er herovre. 1555 01:08:31,880 --> 01:08:34,421 Og så længe de har en pointer til hinanden, er det fint. 1556 01:08:34,421 --> 01:08:35,830 Vi ved, vi kan finde dem. 1557 01:08:35,830 --> 01:08:37,084 Spørgsmål derovre? 1558 01:08:37,084 --> 01:08:40,563 >> PUBLIKUM: getString er en funktion i CS50 biblioteket, ikke? 1559 01:08:40,563 --> 01:08:42,060 Det findes ikke i reelle programmer. 1560 01:08:42,060 --> 01:08:42,851 >> SPEAKER 1: Korrekt. 1561 01:08:42,851 --> 01:08:44,130 Ret, det er den anden ting. 1562 01:08:44,130 --> 01:08:47,210 GetString eksisterer ikke uden for rammerne af CS50. 1563 01:08:47,210 --> 01:08:47,710 Ja. 1564 01:08:47,710 --> 01:08:54,556 >> PUBLIKUM: Så gør det faktum, at to kunne være virkelig langt fra hinanden, 1565 01:08:54,556 --> 01:08:59,859 gør, at virkningen effektivitet adgang til elementer på listen? 1566 01:08:59,859 --> 01:09:01,359 SPEAKER 1: Det er et godt spørgsmål. 1567 01:09:01,359 --> 01:09:04,278 Spørgsmålet var, gør det indvirkning effektiviteten af ​​adgang 1568 01:09:04,278 --> 01:09:05,819 disse forskellige elementer på listen. 1569 01:09:05,819 --> 01:09:06,930 Faktisk, ja. 1570 01:09:06,930 --> 01:09:09,569 Fordi vi ved if-- lad os siger, at vi vil have adgang til 1571 01:09:09,569 --> 01:09:14,520 Det andet element i arrayet, vi kender vi kan bare gøre vifte beslag 1, højre. 1572 01:09:14,520 --> 01:09:16,630 Det er altid at gå til være den samme placering. 1573 01:09:16,630 --> 01:09:20,720 Men hvis vi ønsker at komme til at 3, Vi kan ikke bare sige, gå få at 3. 1574 01:09:20,720 --> 01:09:24,009 Vi er nødt til at sige, OK, starter ved begyndelsen af ​​listen, 1575 01:09:24,009 --> 01:09:26,050 og nu vi faktisk har til at gå igennem, indtil vi 1576 01:09:26,050 --> 01:09:28,149 finde nummeret, vi er interesseret i. 1577 01:09:28,149 --> 01:09:30,790 >> Så i dette tilfælde siger vi, OK dette er det første nummer. 1578 01:09:30,790 --> 01:09:32,207 Så det væsentlige, det er indeks 0. 1579 01:09:32,207 --> 01:09:33,790 Nu er vi nødt til at finde det andet tal. 1580 01:09:33,790 --> 01:09:34,740 Det er indeks 1. 1581 01:09:34,740 --> 01:09:39,180 Så der er faktisk går at-- bare adgang, vil tage N tid. 1582 01:09:39,180 --> 01:09:42,027 Cool, store gamle N. Ja. 1583 01:09:42,027 --> 01:09:43,903 >> PUBLIKUM: Hvad er hver af listerne? 1584 01:09:43,903 --> 01:09:45,401 Er de hver arrays, eller hvad? 1585 01:09:45,401 --> 01:09:46,859 SPEAKER 1: Det er et godt spørgsmål. 1586 01:09:46,859 --> 01:09:48,950 Hvilke hver af de strukturer, som jeg har trukket? 1587 01:09:48,950 --> 01:09:51,649 De er knudepunkter. 1588 01:09:51,649 --> 01:09:53,720 Så hver af disse små struktur har to dele. 1589 01:09:53,720 --> 01:09:55,264 Det har et heltal, der holder. 1590 01:09:55,264 --> 01:09:57,180 Det er de faktiske data at det er at holde fast. 1591 01:09:57,180 --> 01:09:58,770 Det er den form for nyttig del. 1592 01:09:58,770 --> 01:10:00,820 Og dette er hvad gør det til en sammenkædet liste, 1593 01:10:00,820 --> 01:10:03,690 det har en pointer til det næste knudepunkt. 1594 01:10:03,690 --> 01:10:05,260 Awesome spørgsmål. 1595 01:10:05,260 --> 01:10:11,320 Okay, så lad os se meget hurtigt se på nogle eksempler på, hvad 1596 01:10:11,320 --> 01:10:12,820 vi kan gøre med hægtede lister. 1597 01:10:12,820 --> 01:10:16,920 >> Så en meget hurtig eksempel er, formoder, at vi ønsker at gøre en søgning. 1598 01:10:16,920 --> 01:10:20,240 Hvilken slags søgning ikke kan vi gør på hægtede lister? 1599 01:10:20,240 --> 01:10:21,150 >> PUBLIKUM: Binary. 1600 01:10:21,150 --> 01:10:21,900 >> SPEAKER 1: Binary. 1601 01:10:21,900 --> 01:10:23,408 Hvorfor kan vi ikke bruge binær søgning? 1602 01:10:23,408 --> 01:10:25,181 >> PUBLIKUM: [uhørligt]. 1603 01:10:25,181 --> 01:10:28,180 SPEAKER 1: Right, fordi med binær søgning, havde vi til at stole på, 1604 01:10:28,180 --> 01:10:31,300 at vi bare kunne springe i arrayet på noget tidspunkt. 1605 01:10:31,300 --> 01:10:33,420 Vi kunne bare sige, gå til midten element. 1606 01:10:33,420 --> 01:10:35,550 Med her, som vi sagde lidt tidligere, 1607 01:10:35,550 --> 01:10:37,270 Vi kan ikke bare springe til den midterste element. 1608 01:10:37,270 --> 01:10:38,978 For at finde nogen element, vi faktisk 1609 01:10:38,978 --> 01:10:40,780 skal gå gennem hele vores liste. 1610 01:10:40,780 --> 01:10:43,910 >> Så hvis vi ønskede at gøre en søgning, den bedste, vi kan gøre, er blot en lineær søgning. 1611 01:10:43,910 --> 01:10:45,910 Vi starter i spidsen, vi check-- lad os sige vi er 1612 01:10:45,910 --> 01:10:47,790 søger 9-- vi starter i spidsen. 1613 01:10:47,790 --> 01:10:49,200 Vi siger, er det 9? 1614 01:10:49,200 --> 01:10:49,710 Ingen. 1615 01:10:49,710 --> 01:10:50,430 Er det 9? 1616 01:10:50,430 --> 01:10:50,930 Ingen. 1617 01:10:50,930 --> 01:10:51,620 Er det 9? 1618 01:10:51,620 --> 01:10:53,730 Ja, vi fandt det. 1619 01:10:53,730 --> 01:10:56,350 OK, det er alt det. 1620 01:10:56,350 --> 01:10:57,940 Her er en lille smule af pseudo-kode. 1621 01:10:57,940 --> 01:11:01,420 Jeg har tænkt mig at forlade dette for dig fyre at kværne over på egen hånd, 1622 01:11:01,420 --> 01:11:04,370 bare fordi vi kører en lille smule kort på tid. 1623 01:11:04,370 --> 01:11:05,610 >> Kan tale om indsættelse. 1624 01:11:05,610 --> 01:11:08,644 Vi så en virkelig cool demo af dette i foredrag, hvor vi sagde, 1625 01:11:08,644 --> 01:11:11,560 OK, har vi denne linkede liste, hvor alles peger på hinanden, 1626 01:11:11,560 --> 01:11:13,400 og nogen kommer op på scenen. 1627 01:11:13,400 --> 01:11:17,050 Hvordan kan vi indsætter, at person, ind i vores linkede liste? 1628 01:11:17,050 --> 01:11:20,150 Nå, til en forkert måde at gøre, som er Jeg tror, ​​hvad vi så først, 1629 01:11:20,150 --> 01:11:22,740 er, når personen i fronten automatisk 1630 01:11:22,740 --> 01:11:25,270 pegede på ny person. 1631 01:11:25,270 --> 01:11:29,057 Og så vi slags opgivet anden halvdel af listen, ikke? 1632 01:11:29,057 --> 01:11:31,390 Fordi vi ved ikke, hvor det er i hukommelsen længere. 1633 01:11:31,390 --> 01:11:34,750 Så for at være meget forsigtige med rækkefølge, som vi indsætter ting. 1634 01:11:34,750 --> 01:11:37,860 >> Så her, lad os sige, vi ønsker at sætte 1 på forsiden af ​​vores liste. 1635 01:11:37,860 --> 01:11:42,190 Først har vi 1 point på andet element-- eller elementet 1636 01:11:42,190 --> 01:11:44,170 der indeholder 1. 1637 01:11:44,170 --> 01:11:47,210 Så vi gør det, bare så vi ikke kommer til at miste den anden halvdel. 1638 01:11:47,210 --> 01:11:51,020 Og nu, kan vi have hoved punkt til 1. 1639 01:11:51,020 --> 01:11:52,930 Så igen, det er bare gerne Super højt niveau. 1640 01:11:52,930 --> 01:11:55,290 Dette er, hvordan vi ville indsætte en node. 1641 01:11:55,290 --> 01:11:57,337 Vi har en masse pseudo-kode her-- ked af det, 1642 01:11:57,337 --> 01:11:59,170 Jeg ved ikke, hvorfor jeg er kalde det pseudo-kode. 1643 01:11:59,170 --> 01:12:00,350 Det er faktisk kode. 1644 01:12:00,350 --> 01:12:02,570 Du kan gå tjekke det ud senere. 1645 01:12:02,570 --> 01:12:04,870 >> Okay, lad os meget quickly-- flere spørgsmål 1646 01:12:04,870 --> 01:12:07,120 om hægtede lister før jeg flytte til et par andre data 1647 01:12:07,120 --> 01:12:08,450 strukturer i vores sidste 10 minutter. 1648 01:12:08,450 --> 01:12:10,340 >> PUBLIKUM: Har vi brug for nu hvordan man skriver det på en test? 1649 01:12:10,340 --> 01:12:11,040 >> SPEAKER 1: Har vi brug for at vide, hvordan at-- 1650 01:12:11,040 --> 01:12:12,030 >> PUBLIKUM: Skriv det på en prøve. 1651 01:12:12,030 --> 01:12:14,071 >> SPEAKER 1: Vi har brug for at-- du bør være forberedt 1652 01:12:14,071 --> 01:12:18,870 at skrive, indsætte, fjerne, og søge efter forbundne lister på testen. 1653 01:12:18,870 --> 01:12:21,480 Det er noget, vi kunne forvente dig at gøre. 1654 01:12:21,480 --> 01:12:22,750 Bare gå over den. 1655 01:12:22,750 --> 01:12:26,460 Hvis du har nogen spørgsmål om kode, skyde din TF en e-mail, 1656 01:12:26,460 --> 01:12:27,750 komme til kontortid. 1657 01:12:27,750 --> 01:12:30,041 Der er stadig masser af tid at studere, ikke at bekymre dig. 1658 01:12:30,041 --> 01:12:32,290 Okay, nogen den anden spørgsmål om hægtede lister? 1659 01:12:32,290 --> 01:12:32,986 Ja. 1660 01:12:32,986 --> 01:12:37,360 >> PUBLIKUM: Så hvis du ikke bruger den pointer for at gå til den til højre 1661 01:12:37,360 --> 01:12:41,308 før du bruger markøren til den ene til venstre, der er 1662 01:12:41,308 --> 01:12:43,211 svarende til sletning alting, ikke? 1663 01:12:43,211 --> 01:12:43,877 SPEAKER 1: Ja. 1664 01:12:43,877 --> 01:12:44,820 PUBLIKUM: [uhørligt]. 1665 01:12:44,820 --> 01:12:47,570 SPEAKER 1: Right, da vi ikke kan få det, det er faktisk endnu værre. 1666 01:12:47,570 --> 01:12:50,690 Fordi ikke kun kender vi ikke hvor det er, kan vi ikke længere bruge det, 1667 01:12:50,690 --> 01:12:53,580 men we've-- vi er ikke frigør at hukommelsen længere. 1668 01:12:53,580 --> 01:12:58,570 Så det er bare hænge rundt og ikke være nyttigt, fordi vi ikke kan finde den. 1669 01:12:58,570 --> 01:12:59,580 Ja, køligt spørgsmål. 1670 01:12:59,580 --> 01:13:01,280 >> Okay, lad os tale om stakke. 1671 01:13:01,280 --> 01:13:03,230 Vi så stakke meget hurtigt. 1672 01:13:03,230 --> 01:13:06,280 De er først i sidste ud datastrukturer. 1673 01:13:06,280 --> 01:13:10,664 Så vi tænker på stakkene i Annenberg af bakker, hvor vi stak ting på toppen. 1674 01:13:10,664 --> 01:13:12,580 Og hvis du kommer til at kommer få en bakke, er du 1675 01:13:12,580 --> 01:13:15,870 altid kommer til at tage den på top, som er den mest recently-- 1676 01:13:15,870 --> 01:13:18,840 hvilket er det, som vi mest for nylig sat på toppen af ​​stakken. 1677 01:13:18,840 --> 01:13:22,680 Så du kan slags tænker på denne form for visuel, når du tænker på stakke. 1678 01:13:22,680 --> 01:13:26,010 Og så har vi dukkede noget fra toppen af ​​stakken. 1679 01:13:26,010 --> 01:13:29,850 >> Hvis vi are-- Åh, og de ord, vi bruge, når vi taler om disse data 1680 01:13:29,850 --> 01:13:32,680 strukturer er normalt, hvis vi sætte noget på stakken, 1681 01:13:32,680 --> 01:13:34,550 vi siger, vi skubber det på stakken. 1682 01:13:34,550 --> 01:13:38,450 Og hvis vi tager noget fra stakken, vi siger vi er popping ud stakken. 1683 01:13:38,450 --> 01:13:41,470 Hvis du kommer til at gennemføre en stack-- som jeg helt sikkert 1684 01:13:41,470 --> 01:13:44,840 anbefaler at du prøver out-- du er vil ønsker at holde styr på, 1685 01:13:44,840 --> 01:13:46,669 lad os sige, du bruger et array. 1686 01:13:46,669 --> 01:13:48,960 Jeg ved i foredrag vi talte om brug både arrays 1687 01:13:48,960 --> 01:13:51,120 eller er knyttet lister til at gennemføre en stak. 1688 01:13:51,120 --> 01:13:53,490 Hvis du bruger en array, du har brug for at keep-- 1689 01:13:53,490 --> 01:13:56,750 undskyldning mig-- vi nødt til at holde styr størrelse og kapacitet. 1690 01:13:56,750 --> 01:14:00,820 Så det maksimale antal at vores stak kan holde. 1691 01:14:00,820 --> 01:14:03,240 Spørgsmål om stakke? 1692 01:14:03,240 --> 01:14:05,657 >> PUBLIKUM: Hvad er forskellen mellem størrelse og kapacitet? 1693 01:14:05,657 --> 01:14:08,573 SPEAKER 1: Forskellen mellem størrelse og kapacitet, awesome spørgsmål. 1694 01:14:08,573 --> 01:14:10,330 Så lad os sige, vi er ved hjælp af et array, og vi 1695 01:14:10,330 --> 01:14:13,340 allokere nok plads til 10 heltal. 1696 01:14:13,340 --> 01:14:15,050 Og vi begynder at fylde det op. 1697 01:14:15,050 --> 01:14:17,330 Og vi skubbe ting på, og vi pop ting ud. 1698 01:14:17,330 --> 01:14:21,060 Vi ønsker at holde styr på den maksimale nummer, vi kan holde, det er kapacitet. 1699 01:14:21,060 --> 01:14:24,790 Og vi ønsker at holde styr på nuværende antal, vi har, det er størrelse. 1700 01:14:24,790 --> 01:14:26,530 Godt spørgsmål. 1701 01:14:26,530 --> 01:14:28,720 Noget andet på stakke? 1702 01:14:28,720 --> 01:14:31,260 Okay, lad os tale om overraskelse, køer. 1703 01:14:31,260 --> 01:14:37,034 >> I modsætning stakke, der først i sidste ud, er disse først ind, først ud. 1704 01:14:37,034 --> 01:14:38,450 Så dette er like-- tænke på en linje. 1705 01:14:38,450 --> 01:14:41,530 Tænk på foring op på Apple Store for at få uanset produkt. 1706 01:14:41,530 --> 01:14:44,540 Og den første person på linje bør være den første person, der har hjulpet. 1707 01:14:44,540 --> 01:14:48,270 Så første ting, der er skubbet er dette den første ting, der er poppet. 1708 01:14:48,270 --> 01:14:49,460 Afkøle? 1709 01:14:49,460 --> 01:14:52,890 Meget similarly-- oh, de ord, vi bruge i stedet for skub og pop-- 1710 01:14:52,890 --> 01:14:55,060 som jeg netop brugt, Jeg er sorry-- er vi siger, 1711 01:14:55,060 --> 01:14:58,170 hvis vi putter noget ind køen, siger vi kø det. 1712 01:14:58,170 --> 01:15:00,795 Hvis vi tager noget ud af køen, siger vi, at vi dequeued. 1713 01:15:00,795 --> 01:15:01,950 Det. 1714 01:15:01,950 --> 01:15:05,454 Jeg kan udtale dem forkert, men du får den idé. 1715 01:15:05,454 --> 01:15:08,370 Og så igen, ligesom stakke, hvis vi gennemføre dette som array, 1716 01:15:08,370 --> 01:15:12,350 vi nødt til at holde styr på størrelse, kapacitet, og hovedet. 1717 01:15:12,350 --> 01:15:13,570 Hvad mener jeg med hovedet? 1718 01:15:13,570 --> 01:15:15,278 Hvorfor har vi brug for at holde styr på hovedet? 1719 01:15:15,278 --> 01:15:18,549 1720 01:15:18,549 --> 01:15:21,685 >> PUBLIKUM: Fordi det er der, hvor begyndelsen af ​​din liste er. 1721 01:15:21,685 --> 01:15:24,810 SPEAKER 1: Ja, dybest set hovedet er hvor begyndelsen af ​​vores køen er. 1722 01:15:24,810 --> 01:15:29,460 Fordi vi ved, i modsætning stakke, which-- Jeg har tænkt mig at forsøge at klare denne way-- 1723 01:15:29,460 --> 01:15:33,570 vi ved, at det altid kommer til at skrumpe denne måde og vokse på denne måde. 1724 01:15:33,570 --> 01:15:37,840 Køer, folk kommer på enden og orlov fra begyndelsen, 1725 01:15:37,840 --> 01:15:40,620 så vi er nødt til at holde styr hvor starten er. 1726 01:15:40,620 --> 01:15:43,540 Det er, hvad jeg mener med at vi er nødt til at holde styr på, hvor hovedet er. 1727 01:15:43,540 --> 01:15:45,190 Afkøle? 1728 01:15:45,190 --> 01:15:46,440 Okay. 1729 01:15:46,440 --> 01:15:49,250 Otte minutter par flere emner, kan vi gøre det. 1730 01:15:49,250 --> 01:15:51,240 >> Okay, hash tabellen. 1731 01:15:51,240 --> 01:15:53,095 Vi talte meget kort om hash tabeller. 1732 01:15:53,095 --> 01:15:55,720 For quizzen, skal du blot forstå dem på et højt niveau. 1733 01:15:55,720 --> 01:15:58,330 Den grundlæggende idé er, at du har disse data. 1734 01:15:58,330 --> 01:16:02,570 Og vi ønsker at få adgang til det i tide, der er hurtigere end noget som en forbundet 1735 01:16:02,570 --> 01:16:03,070 liste. 1736 01:16:03,070 --> 01:16:05,290 Fordi vi sagde, hvis vi var søge gennem en sammenkædet liste, 1737 01:16:05,290 --> 01:16:06,248 at kunne tage N tid. 1738 01:16:06,248 --> 01:16:08,810 Selv adgang kan tage N gang i en sammenkædet liste. 1739 01:16:08,810 --> 01:16:12,930 Hash tabeller giver os en måde, som vi kan hurtigere adgang til ting, og mere 1740 01:16:12,930 --> 01:16:16,970 hurtigt søge efter ting, uden har de begrænsninger af et array 1741 01:16:16,970 --> 01:16:19,030 hvor vi har fast størrelse. 1742 01:16:19,030 --> 01:16:23,950 >> Så vi tænker på en datastruktur, hvor, hvor vi sætte det i datastrukturen 1743 01:16:23,950 --> 01:16:26,620 er afhængig af dette magiske hash-funktionen. 1744 01:16:26,620 --> 01:16:30,630 Så i dette tilfælde, den magiske hash funktion er bare at tage et ord, 1745 01:16:30,630 --> 01:16:34,027 at kontrollere, hvad det første brev er, og så bare sortere det alfabetisk. 1746 01:16:34,027 --> 01:16:36,110 Så vi hovedsagelig sætte dem i forskellige skovle. 1747 01:16:36,110 --> 01:16:39,510 Når vi ser banan, siger vi, OK, lad os sætte i B spand. 1748 01:16:39,510 --> 01:16:41,820 Når vi ser Apple, lad os sætte det i en spand. 1749 01:16:41,820 --> 01:16:44,744 Hvis vi så abrikos, lad os sat i en spand. 1750 01:16:44,744 --> 01:16:45,600 OKAY? 1751 01:16:45,600 --> 01:16:51,090 >> Så formoder jeg ledte for-- jeg ved ikke, hvad der er en anden frugt? 1752 01:16:51,090 --> 01:16:52,920 Antag jeg var på udkig efter orange. 1753 01:16:52,920 --> 01:16:55,340 Hvor skal jeg kigge? 1754 01:16:55,340 --> 01:16:56,420 I O spanden. 1755 01:16:56,420 --> 01:17:01,450 Ja, der er kun ét sted at orange måtte være, OK? 1756 01:17:01,450 --> 01:17:05,370 Så jeg sagde tidligere, hvad der sker if-- godt jeg sagde tidligere, 1757 01:17:05,370 --> 01:17:10,030 lad os sige vi sætter abrikos in--, men jeg virkelig fat det faktum, at, åh nej, 1758 01:17:10,030 --> 01:17:14,990 hvis jeg skulle sætte bær i, det er kommer til at være i strid med banan. 1759 01:17:14,990 --> 01:17:20,160 Hvor vi sætter det, hvis der er allerede noget i vores bord? 1760 01:17:20,160 --> 01:17:22,760 Tja, vi har et par muligheder. 1761 01:17:22,760 --> 01:17:26,160 >> Mulighed nummer et er lineær sondering, hvilket grundlæggende betyder, 1762 01:17:26,160 --> 01:17:28,690 lad os sige, at jeg vil forsøge at sætte bær, og jeg ser, åh nej, 1763 01:17:28,690 --> 01:17:31,170 bananer der allerede, Jeg bare sige OK, lad 1764 01:17:31,170 --> 01:17:33,810 mig kigge efter den næste tilgængelige stedet. 1765 01:17:33,810 --> 01:17:36,744 Så jeg gå ned, siger jeg, åh, der er ikke noget i D spand. 1766 01:17:36,744 --> 01:17:39,410 Jeg kan ikke rigtig tænke på eventuelle frugter som starter med bogstavet D, 1767 01:17:39,410 --> 01:17:41,620 så jeg bare vil sætte bær derinde. 1768 01:17:41,620 --> 01:17:42,650 Durian. 1769 01:17:42,650 --> 01:17:44,590 OK, så da der er intet derinde endnu, 1770 01:17:44,590 --> 01:17:47,020 Jeg kan lige så godt bare bruge at stedet. 1771 01:17:47,020 --> 01:17:48,805 Hvad er ulempen ved det? 1772 01:17:48,805 --> 01:17:49,300 >> PUBLIKUM: Det er ude af drift. 1773 01:17:49,300 --> 01:17:50,008 >> SPEAKER 1: Beklager? 1774 01:17:50,008 --> 01:17:51,280 PUBLIKUM: Det er ude af drift. 1775 01:17:51,280 --> 01:17:53,113 >> SPEAKER 1: Det er out-- ret, vi kan ende 1776 01:17:53,113 --> 01:17:56,380 med ting, der ikke in-- lagres i spande i den måde, 1777 01:17:56,380 --> 01:17:57,790 at vi forventer dem til at være. 1778 01:17:57,790 --> 01:18:00,670 Så hvis vi søger for bær, inden vi sagde, 1779 01:18:00,670 --> 01:18:02,000 Åh kan vi se i en spand. 1780 01:18:02,000 --> 01:18:03,650 Det kunne kun være i en spand. 1781 01:18:03,650 --> 01:18:07,380 Men nu, virkelig, det kunne være i alle de spande, ikke? 1782 01:18:07,380 --> 01:18:10,400 >> OK, her er en anden mulighed, separat chaining-- 1783 01:18:10,400 --> 01:18:16,630 som er den idé, at vi skal hen til at bruge en lille smule senere i P sæt 5. 1784 01:18:16,630 --> 01:18:19,340 Snarere end blot har en plads i hver spand, 1785 01:18:19,340 --> 01:18:23,610 hvorfor vi ikke har hver spand være en pegepind til en linket liste? 1786 01:18:23,610 --> 01:18:28,570 Hvor vi siger, OK, der er en spand for alt, hvad der starter med A. 1787 01:18:28,570 --> 01:18:31,990 Og der er bare kommer til at være en sammenkædet Liste over frugter, der starter med A. 1788 01:18:31,990 --> 01:18:36,240 Så hvis vi får en ny frugt, lad os sige Vi get-- vi avocado, vi har æble, 1789 01:18:36,240 --> 01:18:39,530 lad os sige vi får abrikos, hvordan ville vi sætte på listen? 1790 01:18:39,530 --> 01:18:43,330 Nå vi ville gå til PDF Bucket 0, og vi ville bare indsætte det i vores ønsket liste, 1791 01:18:43,330 --> 01:18:45,320 så simpelt er det. 1792 01:18:45,320 --> 01:18:47,160 >> Nu holder jeg sige spand. 1793 01:18:47,160 --> 01:18:49,470 Vi kunne gennemføre denne på en række måder. 1794 01:18:49,470 --> 01:18:52,040 Et typisk måde, at dette slags billede antyder, 1795 01:18:52,040 --> 01:18:55,580 er måske have en bred vifte af pegepinde til hægtede lister. 1796 01:18:55,580 --> 01:18:58,174 Det er en måde, vi kan gennemføre en hash tabel. 1797 01:18:58,174 --> 01:19:01,090 PUBLIKUM: Vil du brug for en anden liste, fordi banan og bær er ude 1798 01:19:01,090 --> 01:19:01,591 af orden? 1799 01:19:01,591 --> 01:19:03,298 SPEAKER 1: Ville du need-- ah, ville du 1800 01:19:03,298 --> 01:19:06,310 brug for en anden liste, fordi banan og bær er i uorden? 1801 01:19:06,310 --> 01:19:09,880 I dette tilfælde vores hash-funktionen, som fortæller os, hvor at sætte ting 1802 01:19:09,880 --> 01:19:11,647 ikke bekymrer sig om det andet bogstav. 1803 01:19:11,647 --> 01:19:14,730 Det behøver ikke bekymre sig om alphabetizing, den kun bekymrer sig om det første bogstav. 1804 01:19:14,730 --> 01:19:15,672 Spørgsmål? 1805 01:19:15,672 --> 01:19:18,947 >> PUBLIKUM: Hvad er definitionen af ​​dette funktion, og hvordan ser den ud? 1806 01:19:18,947 --> 01:19:19,780 SPEAKER 1: Ah, godt. 1807 01:19:19,780 --> 01:19:22,450 OK, så behøver vi ikke at bekymre sig for meget for denne quiz. 1808 01:19:22,450 --> 01:19:23,700 Så jeg ikke sætte i dias. 1809 01:19:23,700 --> 01:19:26,320 Vi kommer til at blive indført til det for P sæt 5. 1810 01:19:26,320 --> 01:19:31,520 Men dybest set, det siger, givet en nyt element, hvor skal jeg sætte det? 1811 01:19:31,520 --> 01:19:35,450 Eller, lad os sige, jeg leder efter et element, hvor kan det være? 1812 01:19:35,450 --> 01:19:37,860 Ja, godt spørgsmål. 1813 01:19:37,860 --> 01:19:40,870 >> OK, meget hurtigt, træer og forsøger. 1814 01:19:40,870 --> 01:19:44,779 Så et træ er lige nogen art organiserede datastruktur. 1815 01:19:44,779 --> 01:19:47,820 Og vi kommer til at se en masse billeder der vil gøre denne super klart. 1816 01:19:47,820 --> 01:19:51,180 Og en trie, som vi så i klassen, er en meget speciel form for træ 1817 01:19:51,180 --> 01:19:53,440 at stort set fungerer som en multi-niveau hash tabellen. 1818 01:19:53,440 --> 01:19:54,390 Det er super cool. 1819 01:19:54,390 --> 01:19:56,030 Vi kommer til at se det i bare et sekund. 1820 01:19:56,030 --> 01:19:57,821 Okay, så lad os taler om træer først. 1821 01:19:57,821 --> 01:20:01,040 Så det er virkelig typisk eksempel på et træ, hvor vi har nogle hierarki. 1822 01:20:01,040 --> 01:20:03,220 Du se, at man er på helt i top, ikke? 1823 01:20:03,220 --> 01:20:06,190 Og jeg kan sige top, fordi der er klart en bestilling, fordi vi 1824 01:20:06,190 --> 01:20:08,260 har disse pile at gå ned. 1825 01:20:08,260 --> 01:20:11,740 Så det, de ting i toppen, Jeg kalder, at roden node. 1826 01:20:11,740 --> 01:20:13,080 Så man er roden node. 1827 01:20:13,080 --> 01:20:17,330 Og de ting i bunden, som har noget der kommer fra dem, 1828 01:20:17,330 --> 01:20:18,783 Jeg siger det er disse blade noder. 1829 01:20:18,783 --> 01:20:22,730 Så 8,9 5, 6, 7, OK. 1830 01:20:22,730 --> 01:20:27,740 Og som regel den terminologi, vi kan sige, er, 1 er 3 overordnede. 1831 01:20:27,740 --> 01:20:30,740 Så det er den ting, der kommer et niveau over det, og peger på det. 1832 01:20:30,740 --> 01:20:32,710 Og 3 er 1 barn. 1833 01:20:32,710 --> 01:20:34,505 Det er de ting, der 1 point til. 1834 01:20:34,505 --> 01:20:35,005 Spørgsmål? 1835 01:20:35,005 --> 01:20:36,414 >> PUBLIKUM: Kan du gå tilbage til den forrige dias, tak? 1836 01:20:36,414 --> 01:20:37,388 >> SPEAKER 1: Kan jeg gå tilbage til det forrige dias? 1837 01:20:37,388 --> 01:20:37,888 Jo da. 1838 01:20:37,888 --> 01:20:40,640 1839 01:20:40,640 --> 01:20:41,390 Spørgsmål til dette? 1840 01:20:41,390 --> 01:20:42,764 Eller du blot ønskede at se på det? 1841 01:20:42,764 --> 01:20:44,650 PUBLIKUM: Jeg vidste bare ikke komme igennem det. 1842 01:20:44,650 --> 01:20:47,100 >> SPEAKER 1: OK, cool, ja. 1843 01:20:47,100 --> 01:20:49,846 Disse vil alle være online, så gør ikke bekymre sig om at få hvert ord. 1844 01:20:49,846 --> 01:20:51,720 Og af hensyn til tid, jeg har tænkt mig at gå. 1845 01:20:51,720 --> 01:20:53,270 Er det i orden? 1846 01:20:53,270 --> 01:20:53,790 Awesome. 1847 01:20:53,790 --> 01:20:55,720 OK, cool. 1848 01:20:55,720 --> 01:20:57,790 Så lad os tale om en meget specifikke kind-- 1849 01:20:57,790 --> 01:20:59,710 så vi har disse generelle struktur træer, 1850 01:20:59,710 --> 01:21:02,876 som er lige noget, der giver os mulighed for at slags rang ting hierarkisk. 1851 01:21:02,876 --> 01:21:06,000 1852 01:21:06,000 --> 01:21:11,110 >> Binære træer er ting, hvor hver knude har højst to børn. 1853 01:21:11,110 --> 01:21:11,690 OKAY? 1854 01:21:11,690 --> 01:21:14,560 Og jeg sagde: OK, så der synes til at passe denne beskrivelse. 1855 01:21:14,560 --> 01:21:16,830 I knudepunktet, ikke en binær søgning træ. 1856 01:21:16,830 --> 01:21:19,720 Hvad er en binær søgning træ? 1857 01:21:19,720 --> 01:21:20,440 Det er sorteret. 1858 01:21:20,440 --> 01:21:22,890 Så du ved, at der i en binær søgning træ, 1859 01:21:22,890 --> 01:21:26,580 alt til tree-- alt til knudepunkterne venstre er mindre, 1860 01:21:26,580 --> 01:21:28,830 og alt til knudepunkter højre er større. 1861 01:21:28,830 --> 01:21:30,620 Så dette er ikke en binær søgning træ. 1862 01:21:30,620 --> 01:21:32,770 Dette er blot et binært træ. 1863 01:21:32,770 --> 01:21:35,910 Så vi har store kategori af træer, lidt mindre kategori 1864 01:21:35,910 --> 01:21:40,106 af binære træer, søgning ved en-- binære søgning træer. 1865 01:21:40,106 --> 01:21:41,540 Afkøle? 1866 01:21:41,540 --> 01:21:44,410 Okay. 1867 01:21:44,410 --> 01:21:47,380 >> Og nu, mest sjov af alt, vi har vores forsøg. 1868 01:21:47,380 --> 01:21:49,500 Du fyre så dette billede i forelæsning? 1869 01:21:49,500 --> 01:21:51,790 Ja, skal det se super bekendt. 1870 01:21:51,790 --> 01:21:54,252 Lad os se på hvordan vi kan rent faktisk at gennemføre dette. 1871 01:21:54,252 --> 01:21:56,210 Eller faktisk, lad os se, betyder, at selv komme op? 1872 01:21:56,210 --> 01:21:56,731 Nope. 1873 01:21:56,731 --> 01:21:59,480 Okay, har vi ikke engang at bekymre dig om det lave niveau kram. 1874 01:21:59,480 --> 01:22:02,320 Vi vil have masser af tid at behandle derefter P sæt 5. 1875 01:22:02,320 --> 01:22:05,780 Men for nu, bare meget højt niveau, vi ved, at dette er, hvad det ser ud. 1876 01:22:05,780 --> 01:22:08,530 Vi beskrev det som en slags en multi-niveau hashtabel 1877 01:22:08,530 --> 01:22:12,264 where-- hvad betyder denne butik? 1878 01:22:12,264 --> 01:22:14,430 Dette lagrer navne videnskabsfolk, som vi kan faktisk 1879 01:22:14,430 --> 01:22:20,690 kigge efter ved blot slags efter forskellige hash tabeller ned, okay? 1880 01:22:20,690 --> 01:22:24,730 >> Og formålet med dette er, i teorien, de giver konstant tid se op. 1881 01:22:24,730 --> 01:22:29,630 Så hvis jeg ønsker at kontrollere, at, for eksempel, hvem der er someone-- 1882 01:22:29,630 --> 01:22:33,410 at Mandel er i denne Trie, kunne jeg meget hurtigt 1883 01:22:33,410 --> 01:22:36,260 i linear-- Jeg er ked af, i konstant tid, finde ud af 1884 01:22:36,260 --> 01:22:39,010 uanset om det er i trie. 1885 01:22:39,010 --> 01:22:41,500 Men en con, er at se på, hvor stor denne er. 1886 01:22:41,500 --> 01:22:44,120 Vi er ikke engang lagring, at mange data, og det er enorme. 1887 01:22:44,120 --> 01:22:47,950 Så en stor con er, at det bruger en stor mængde hukommelse. 1888 01:22:47,950 --> 01:22:48,746 Ja. 1889 01:22:48,746 --> 01:22:50,610 >> PUBLIKUM: Hvorfor skal det give konstant tid, præcis? 1890 01:22:50,610 --> 01:22:51,376 >> SPEAKER 1: Et mere tid? 1891 01:22:51,376 --> 01:22:53,360 >> PUBLIKUM: Hvad er intuition for hvorfor det giver konstant tid? 1892 01:22:53,360 --> 01:22:54,610 >> SPEAKER 1: Excellent spørgsmål. 1893 01:22:54,610 --> 01:22:56,030 Hvorfor det giver konstant tid? 1894 01:22:56,030 --> 01:22:59,280 Så det, vi kan gøre, er, lad os siger, vi leder efter Mandel. 1895 01:22:59,280 --> 01:23:02,830 Vi ved, at vi ønsker at starte i første niveau ved M. 1896 01:23:02,830 --> 01:23:06,890 Vi ved, at vi ønsker at følge det til E. So det er at tage et skridt, to skridt, ikke? 1897 01:23:06,890 --> 01:23:10,710 Vi følger det til N. Vi følger den til D. Vi følger det til E. Vi følger det til L. 1898 01:23:10,710 --> 01:23:15,100 Og derefter den næste ting, vi kontrollerer says-- denne delta siger Ja, det er 1899 01:23:15,100 --> 01:23:15,990 i vores tabel. 1900 01:23:15,990 --> 01:23:16,880 Det er et ord. 1901 01:23:16,880 --> 01:23:19,900 Det er en gyldig post i vores trie. 1902 01:23:19,900 --> 01:23:22,450 Så du siger, OK, der tog syv trin. 1903 01:23:22,450 --> 01:23:27,200 Men hvis vi tilføjet som en zillion mere forskere til denne datastruktur, 1904 01:23:27,200 --> 01:23:29,470 Vi ville ikke have at kontrollere en zillion flere ting. 1905 01:23:29,470 --> 01:23:33,580 Vi kun nogensinde nødt til at tage syv trin, længden af ​​personens 1906 01:23:33,580 --> 01:23:35,260 navn. 1907 01:23:35,260 --> 01:23:39,350 >> Så vi vil gerne tro af runtime som, formoder 1908 01:23:39,350 --> 01:23:42,340 vi øge størrelsen på vores datastruktur, hvor meget længere 1909 01:23:42,340 --> 01:23:44,580 er det vil tage? 1910 01:23:44,580 --> 01:23:47,372 I dette tilfælde, hvis vi tilføjer en flok flere forskere, er det ligegyldigt. 1911 01:23:47,372 --> 01:23:49,413 Det er stadig kommer til at tage den samme mængde tid. 1912 01:23:49,413 --> 01:23:50,350 Det er konstant tid. 1913 01:23:50,350 --> 01:23:50,850 Ja. 1914 01:23:50,850 --> 01:23:53,557 >> PUBLIKUM: Hvordan kan du ikke kender at scanne over de andre numre? 1915 01:23:53,557 --> 01:23:54,932 SPEAKER 1: Hvordan kan jeg vide, hvordan at-- 1916 01:23:54,932 --> 01:23:58,236 PUBLIKUM: Ligesom hvordan kan du vide, at du går lige fra M til E og ikke til M til A? 1917 01:23:58,236 --> 01:23:59,069 SPEAKER 1: Åh, sikker. 1918 01:23:59,069 --> 01:24:01,620 Fordi jeg vidste jeg var leder efter ordet Mandel, 1919 01:24:01,620 --> 01:24:04,195 og jeg bare ved, det er M-E. Så at-- ja, gå videre. 1920 01:24:04,195 --> 01:24:06,528 PUBLIKUM: Ville du har at se på de andre bogstaver 1921 01:24:06,528 --> 01:24:07,870 i resten af ​​[højttalersystemet]? 1922 01:24:07,870 --> 01:24:10,020 >> SPEAKER 1: Ah, ville jeg ikke have at se på til-- OK, stor. 1923 01:24:10,020 --> 01:24:10,790 Det er et stort spørgsmål. 1924 01:24:10,790 --> 01:24:12,170 Det afhænger af, hvordan vi gennemfører den. 1925 01:24:12,170 --> 01:24:15,350 Hvis vi gennemfører det som bare som en række arrays 1926 01:24:15,350 --> 01:24:18,100 hvor vi ved, at E er altid i position 0, 1927 01:24:18,100 --> 01:24:21,270 Jeg ved ikke, hvad nummer indeks er på. 1928 01:24:21,270 --> 01:24:24,901 Ja, vi kan bare gøre konstant tid, gør, gør, gør, gør. 1929 01:24:24,901 --> 01:24:25,400 Afkøle. 1930 01:24:25,400 --> 01:24:27,556 Spørgsmål derovre? 1931 01:24:27,556 --> 01:24:30,927 >> PUBLIKUM: Er konstant tid det samme som realtid? 1932 01:24:30,927 --> 01:24:33,260 SPEAKER 1: Er konstant tid det samme er realtid? 1933 01:24:33,260 --> 01:24:34,799 Jeg er ikke rigtig sikker realtid er. 1934 01:24:34,799 --> 01:24:36,965 PUBLIKUM: Ligesom tid, bogstaveligt skrider anden 1935 01:24:36,965 --> 01:24:40,150 sekund modsætning til at være en uafhængig variabel. 1936 01:24:40,150 --> 01:24:42,960 >> SPEAKER 1: Ja, du kan tænke på det på den måde. 1937 01:24:42,960 --> 01:24:46,240 Med andre ord, det er ikke afhængig på størrelsen af ​​datastrukturen. 1938 01:24:46,240 --> 01:24:48,310 Det er en måde at tænke på det. 1939 01:24:48,310 --> 01:24:50,510 Andre spørgsmål? 1940 01:24:50,510 --> 01:24:53,120 Måske i første gang i historie, vi færdige til tiden. 1941 01:24:53,120 --> 01:24:57,080 Hvis du har spørgsmål, er du velkommen fri til at komme spørge os, gå til afsnittet, 1942 01:24:57,080 --> 01:25:00,190 tale med din TF'er, kontor åbningstider er 08:00 og 08:30 1943 01:25:00,190 --> 01:25:03,985 til 11:00 mandag og tirsdag, så det er en lille smule anderledes tid, 1944 01:25:03,985 --> 01:25:05,110 så sørg for at notere det. 1945 01:25:05,110 --> 01:25:06,048 Ja. 1946 01:25:06,048 --> 01:25:08,673 >> PUBLIKUM: Har vi brug for at vide ting som kommandolinjeargumenter, 1947 01:25:08,673 --> 01:25:10,360 dash ls, Dash hvad? 1948 01:25:10,360 --> 01:25:11,840 >> SPEAKER 1: Kommando linje argumenter, og Linux-kommandoer, 1949 01:25:11,840 --> 01:25:13,010 ja, du behøver at vide dem. 1950 01:25:13,010 --> 01:25:18,234 Very-- det er ligesom den slags niveau ting, vi dækket i afsnit 0, 1951 01:25:18,234 --> 01:25:19,400 så vidt Linux kommandoer go. 1952 01:25:19,400 --> 01:25:20,942 >> PUBLIKUM: Er de timer i Annenberg? 1953 01:25:20,942 --> 01:25:23,525 SPEAKER 1: Kontortid, jeg er ikke helt sikker på, hvor de er. 1954 01:25:23,525 --> 01:25:25,980 Men du kan kontrollere hjemmeside, og det vil fortælle dig. 1955 01:25:25,980 --> 01:25:27,499