1 00:00:00,000 --> 00:00:00,960 2 00:00:00,960 --> 00:00:03,360 >> [Musikken afspilles] 3 00:00:03,360 --> 00:00:11,050 4 00:00:11,050 --> 00:00:12,065 >> Davin: Okay, gutter. 5 00:00:12,065 --> 00:00:13,642 6 00:00:13,642 --> 00:00:15,350 Så dette er gennemgangen for den første quiz. 7 00:00:15,350 --> 00:00:17,751 Er alle klar til quiz på onsdag? 8 00:00:17,751 --> 00:00:18,292 ALLISON: Woo! 9 00:00:18,292 --> 00:00:18,743 STUDENT: Woo! 10 00:00:18,743 --> 00:00:19,242 Davin: Ja. 11 00:00:19,242 --> 00:00:19,920 ALLISON: Yeah! 12 00:00:19,920 --> 00:00:20,920 Davin: Den fyr er klar. 13 00:00:20,920 --> 00:00:22,200 Denne fyr, to hænder, nice. 14 00:00:22,200 --> 00:00:23,234 15 00:00:23,234 --> 00:00:25,900 Så quiz gennemgang i dag, går det til at være omkring en time og en halv. 16 00:00:25,900 --> 00:00:27,940 Vi kommer til at gå over alle de store begreber, du bør vide for quizzen. 17 00:00:27,940 --> 00:00:31,434 Vi kommer til at gå over nogle kodning af hånd eksempler, som på hver quiz. 18 00:00:31,434 --> 00:00:34,350 Og hvis du har spørgsmål, er du velkommen at hæve din hånd og alt 19 00:00:34,350 --> 00:00:34,945 som. 20 00:00:34,945 --> 00:00:36,695 Well, logistik omkring quizzen er online. 21 00:00:36,695 --> 00:00:38,450 Så vi kommer til at opdele folk op i forskellige rum. 22 00:00:38,450 --> 00:00:39,491 Det er baseret på deres navn. 23 00:00:39,491 --> 00:00:43,630 Så hvis du har spørgsmål om, hvor at gå eller om, hvad materialet er, ligesom, 24 00:00:43,630 --> 00:00:46,810 den officielle ord på, hvad der foregår at være på den quiz, tjekke online. 25 00:00:46,810 --> 00:00:48,420 Og det er alt ajour. 26 00:00:48,420 --> 00:00:51,280 Så hvis der er nogen spørgsmål til begynde med, vi kommer til at starte. 27 00:00:51,280 --> 00:00:52,790 28 00:00:52,790 --> 00:00:53,710 Og her er Allison. 29 00:00:53,710 --> 00:00:56,060 30 00:00:56,060 --> 00:00:57,000 >> [Klapper] 31 00:00:57,000 --> 00:00:59,300 >> ALLISON: OK, tak, Rob. 32 00:00:59,300 --> 00:01:00,280 Sætter pris på det. 33 00:01:00,280 --> 00:01:01,350 34 00:01:01,350 --> 00:01:03,050 Davin skulle have vendt til dette. 35 00:01:03,050 --> 00:01:07,240 Det er den ikke-udtømmende liste over emner, som altid, som Davin lige sagde. 36 00:01:07,240 --> 00:01:10,860 Se dokumentationen online om quiz nul. 37 00:01:10,860 --> 00:01:13,680 Men dette er temmelig much-- det er på pensum 38 00:01:13,680 --> 00:01:15,550 er alt, hvad vi har gået over hidtil. 39 00:01:15,550 --> 00:01:18,290 Alt her er fair spil, samt noget andet 40 00:01:18,290 --> 00:01:21,380 der kan have været nævnt i foredraget. 41 00:01:21,380 --> 00:01:25,070 >> Min sektion, her, er bare en masse gennemgang. 42 00:01:25,070 --> 00:01:27,775 Der er et par øvelser At du fyre kan arbejde på. 43 00:01:27,775 --> 00:01:30,650 Men for det meste, vi virkelig ønsker at komme til Davin med de kode 44 00:01:30,650 --> 00:01:31,710 ved hånden øvelser. 45 00:01:31,710 --> 00:01:33,940 >> Så jeg vil til at flyve gennem dette. 46 00:01:33,940 --> 00:01:36,330 Hvis du har spørgsmål, stoppe mig. 47 00:01:36,330 --> 00:01:37,270 Løft din hånd. 48 00:01:37,270 --> 00:01:39,250 Jeg lover jeg vil sandsynligvis se dig. 49 00:01:39,250 --> 00:01:41,042 Hvis ikke, bare vinke den rundt. 50 00:01:41,042 --> 00:01:42,250 Jeg har tænkt mig at tale hurtigt. 51 00:01:42,250 --> 00:01:43,950 Jeg håber, at alle er OK med det. 52 00:01:43,950 --> 00:01:48,020 >> OK, særligt ord, Davin tydeligvis glemte at bladre gennem disse dias. 53 00:01:48,020 --> 00:01:51,880 [Griner] Du er i problemer, mand. 54 00:01:51,880 --> 00:01:55,770 Så tips til quiz nul, øve kodning på papir. 55 00:01:55,770 --> 00:01:58,950 Du fyre kommer til at få nogle øve med det nu med Davin, 56 00:01:58,950 --> 00:02:00,655 så vil du ikke være helt af dig selv. 57 00:02:00,655 --> 00:02:03,030 Jeg tror, ​​vi er faktisk i gang gennem disse to funktioner. 58 00:02:03,030 --> 00:02:04,500 Så vil du være godt forberedt der. 59 00:02:04,500 --> 00:02:05,958 >> Være fortrolig med dit problem sæt. 60 00:02:05,958 --> 00:02:08,150 Der har været spørgsmål på tidligere quizzer 61 00:02:08,150 --> 00:02:12,680 der vil bede dig, for eksempel, til at kode op noget meget ligner Mario. 62 00:02:12,680 --> 00:02:15,060 Så bliver meget fortrolig med Deres problem sæt, samt 63 00:02:15,060 --> 00:02:17,827 som de spørgsmål, beder vi dig i begyndelsen på formularen 64 00:02:17,827 --> 00:02:19,660 at du udfylder, vil tjene dig meget godt. 65 00:02:19,660 --> 00:02:20,940 66 00:02:20,940 --> 00:02:23,380 >> Har en tidligere quiz under tidspresset. 67 00:02:23,380 --> 00:02:25,430 Disse quizzer er lange. 68 00:02:25,430 --> 00:02:26,850 Tiden går virkelig hurtigt. 69 00:02:26,850 --> 00:02:30,480 Og ofte, behøver du ikke klar over, hvordan hurtigt det går indtil du rent faktisk 70 00:02:30,480 --> 00:02:32,180 sætte dig selv under disse begrænsninger. 71 00:02:32,180 --> 00:02:36,500 Så hvis du kan bare skære ud, du ved, 75 minutter enten i aften eller i morgen 72 00:02:36,500 --> 00:02:41,020 at tage en af ​​disse quizzer under det, vil du være i langt bedre form. 73 00:02:41,020 --> 00:02:43,060 >> Og også skabe din reference ark. 74 00:02:43,060 --> 00:02:45,290 Husk, du får en side foran og bagpå 75 00:02:45,290 --> 00:02:47,040 som reference for din quiz på onsdag. 76 00:02:47,040 --> 00:02:49,074 Oprettelse af det er en fantastisk måde at studere. 77 00:02:49,074 --> 00:02:51,990 Alt, hvad der du har problemer med du ønsker at inkludere på der. 78 00:02:51,990 --> 00:02:55,627 Alt, hvad der dine TF'er har været, ligesom, det er virkelig vigtigt. 79 00:02:55,627 --> 00:02:57,960 Du skal vide dette, er måske ting, du har på der 80 00:02:57,960 --> 00:02:59,931 hvis du ikke har dem i hukommelsen. 81 00:02:59,931 --> 00:03:02,680 Selv hvis du kender dem virkelig godt, nogle gange at have det på, at der 82 00:03:02,680 --> 00:03:07,030 er bare form for komfort for dig, som jeg kender quizzer er stressende. 83 00:03:07,030 --> 00:03:09,260 Så nogen trøst får du kan hjælpe. 84 00:03:09,260 --> 00:03:13,072 Okay, også få søvn og spise og kan lide de normale ting 85 00:03:13,072 --> 00:03:14,280 at vi fortæller jer for quizzer. 86 00:03:14,280 --> 00:03:16,320 87 00:03:16,320 --> 00:03:18,890 >> Så starter ud let, datatyper og størrelser. 88 00:03:18,890 --> 00:03:22,720 Som jeg sagde, er det bare at gå at mig at smide en masse ting 89 00:03:22,720 --> 00:03:24,320 op her, at du bør vide. 90 00:03:24,320 --> 00:03:27,600 Så vi har vores chars der er én byte, int'er 91 00:03:27,600 --> 00:03:30,390 der er fire bytes, lang lang, hvilket er otte bytes. 92 00:03:30,390 --> 00:03:33,280 Dybest set, det er bare dig ønsker at holde større heltal. 93 00:03:33,280 --> 00:03:35,490 Flydere, som er fire, doubler, som er otte. 94 00:03:35,490 --> 00:03:38,150 Igen giver bare dig mere plads til dine flåd. 95 00:03:38,150 --> 00:03:41,290 Og skriv derefter stjerne, så enhver pointer på en 32-bit maskine, 96 00:03:41,290 --> 00:03:44,650 som er alle du fyre skal at vide, er fire bytes. 97 00:03:44,650 --> 00:03:46,542 >> Så alt i alt bør du kender, måske ting 98 00:03:46,542 --> 00:03:48,250 du ønsker at have på din reference ark. 99 00:03:48,250 --> 00:03:50,350 100 00:03:50,350 --> 00:03:53,520 OK, binær konvertering til binær, konvertering 101 00:03:53,520 --> 00:03:56,860 til hexadecimal, frem og tilbage, alle ting, du bør vide. 102 00:03:56,860 --> 00:03:59,480 Så fra binær til decimal. 103 00:03:59,480 --> 00:04:03,309 Du fyre ønsker at tage en hurtig minut og forsøge at finde ud hver af disse 104 00:04:03,309 --> 00:04:04,600 og så fortælle mig, hvad de er? 105 00:04:04,600 --> 00:04:06,500 106 00:04:06,500 --> 00:04:10,240 >> Jeg har også slik i min taske, så alle der besvarer får slik, ved den måde. 107 00:04:10,240 --> 00:04:13,560 108 00:04:13,560 --> 00:04:14,480 Og jeg har masser af det. 109 00:04:14,480 --> 00:04:15,760 110 00:04:15,760 --> 00:04:16,870 Lad mig få fat i dette. 111 00:04:16,870 --> 00:04:18,480 Jeg har tænkt mig at give denne til Gabe. 112 00:04:18,480 --> 00:04:21,829 Så du kan uddele slik til hvem er rart og samarbejdsvillig. 113 00:04:21,829 --> 00:04:23,490 >> OK, så jeg en hånd der i ryggen. 114 00:04:23,490 --> 00:04:26,418 115 00:04:26,418 --> 00:04:28,370 >> STUDENT: Ja, den første er 42. 116 00:04:28,370 --> 00:04:30,280 >> ALLISON: Ja, første er 42, korrekt. 117 00:04:30,280 --> 00:04:31,163 118 00:04:31,163 --> 00:04:32,038 STUDENT: [uhørligt]. 119 00:04:32,038 --> 00:04:34,810 [Latter] 120 00:04:34,810 --> 00:04:37,030 ALLISON: Second én, der tilbage i gul? 121 00:04:37,030 --> 00:04:38,910 STUDENT: 110010. 122 00:04:38,910 --> 00:04:43,410 ALLISON: Korrekt, og dette sidste, hernede på bunden? 123 00:04:43,410 --> 00:04:44,570 Også, ja, kender du? 124 00:04:44,570 --> 00:04:45,550 Bare smide slik. 125 00:04:45,550 --> 00:04:46,483 Hvordan omkring slik for alle? 126 00:04:46,483 --> 00:04:47,510 >> STUDENT: [uhørligt], når vi er færdig. 127 00:04:47,510 --> 00:04:48,051 >> ALLISON: Shh. 128 00:04:48,051 --> 00:04:49,380 129 00:04:49,380 --> 00:04:50,910 Og så den sidste. 130 00:04:50,910 --> 00:04:52,000 Hvem ønsker at svare? 131 00:04:52,000 --> 00:04:52,744 Lige der. 132 00:04:52,744 --> 00:04:54,480 >> STUDENT: 11100. 133 00:04:54,480 --> 00:04:56,820 >> ALLISON: 11100, se på det. 134 00:04:56,820 --> 00:04:58,790 Tillykke, stort stykke arbejde, alle sammen. 135 00:04:58,790 --> 00:05:03,370 OK, alle slags forstå processen for at gøre dette? 136 00:05:03,370 --> 00:05:08,700 Du har, går fra binær til decimal den måde, jeg har tendens til at gøre det, er at skrive ud 137 00:05:08,700 --> 00:05:09,920 beføjelser 2. 138 00:05:09,920 --> 00:05:18,350 Så jeg siger, OK, 0 gange 2-0, så der er 0, 1 gange 2 til den første, 139 00:05:18,350 --> 00:05:21,400 er 2 går frem på den måde. 140 00:05:21,400 --> 00:05:25,790 Er der nogen der vil have mig til eksplicit gå gennem et eksempel på binær? 141 00:05:25,790 --> 00:05:26,840 142 00:05:26,840 --> 00:05:28,140 OK, cool. 143 00:05:28,140 --> 00:05:30,390 >> Decimal til binær er meget ens. 144 00:05:30,390 --> 00:05:31,550 145 00:05:31,550 --> 00:05:33,630 Jeg har tendens til at skrive ud beføjelser 2. 146 00:05:33,630 --> 00:05:38,660 Start med en, der er den største, men ikke gå forbi decimal 147 00:05:38,660 --> 00:05:39,710 at du leder efter. 148 00:05:39,710 --> 00:05:42,870 Og så slags arbejde din vej baglæns addere ting som nødvendigt. 149 00:05:42,870 --> 00:05:45,200 >> Og derefter med Derudover er det ligesom normal tilsætning. 150 00:05:45,200 --> 00:05:51,110 Hvis du nogensinde får det tilfælde, hvor du er tilføje to 1s, det naturligvis bliver 2. 151 00:05:51,110 --> 00:05:56,875 2 i binær er nu 1 0, så du har brug for at bære din 1 ind i den næste kolonne. 152 00:05:56,875 --> 00:05:57,375 Cool. 153 00:05:57,375 --> 00:05:59,220 154 00:05:59,220 --> 00:06:03,240 >> Hexadecimal, kan dette være noget der er lidt mindre velkendt. 155 00:06:03,240 --> 00:06:06,600 Så som Rob lige fortalte mig forhånd, hans trick for dette 156 00:06:06,600 --> 00:06:10,210 er bare at splitte det op i fire byte bidder, OK? 157 00:06:10,210 --> 00:06:11,050 Bits, beklager. 158 00:06:11,050 --> 00:06:11,720 See? 159 00:06:11,720 --> 00:06:12,220 Tak Rob. 160 00:06:12,220 --> 00:06:15,874 Det er derfor, du er her. [NOISE] OK, så vi bare bryde det op 161 00:06:15,874 --> 00:06:16,790 i fire bits bidder. 162 00:06:16,790 --> 00:06:21,570 Så med binære filer til hexadecimal, vi ser på de første 4, 163 00:06:21,570 --> 00:06:25,573 som er, hvis vi har fire 1s i en række, hvilket nummer betyder det symboliserer? 164 00:06:25,573 --> 00:06:26,540 >> STUDENT: F. 165 00:06:26,540 --> 00:06:32,751 >> ALLISON: Så i dette tilfælde, hvad er 11111111 eller-- ja? 166 00:06:32,751 --> 00:06:33,250 STUDENT: FF. 167 00:06:33,250 --> 00:06:34,600 ALLISON: Perfekt, FF. 168 00:06:34,600 --> 00:06:36,900 Så stor, slik for dig. 169 00:06:36,900 --> 00:06:41,100 Nu, for hvordan hexadecimal til binær, vi bare tænke på den slags i bakgear. 170 00:06:41,100 --> 00:06:46,420 For hvert tal eller bogstav, der vi har i vores hexadecimal, 171 00:06:46,420 --> 00:06:53,930 blot konvertere det til sine fire bit [Griner] til dets fire bit konvertering. 172 00:06:53,930 --> 00:06:58,696 Så 5, i dette tilfælde, hvad er 5, hvis vi repræsenterer det med fire bit? 173 00:06:58,696 --> 00:06:59,608 >> STUDENT: 010? 174 00:06:59,608 --> 00:07:00,520 Mm-hm. 175 00:07:00,520 --> 00:07:03,605 Og derefter A, som er faktisk 10, ville være? 176 00:07:03,605 --> 00:07:06,230 177 00:07:06,230 --> 00:07:08,040 1010. 178 00:07:08,040 --> 00:07:09,670 Så vi har det her. 179 00:07:09,670 --> 00:07:13,990 Så konvertering mellem hexadecimal og binær er faktisk ikke så slemt. 180 00:07:13,990 --> 00:07:16,565 Hvis man ser på det i fire bit bidder, bliver gyldne. 181 00:07:16,565 --> 00:07:18,330 182 00:07:18,330 --> 00:07:19,300 Everyone-- ja? 183 00:07:19,300 --> 00:07:21,903 >> ROB: Dette er fjollet, men jeg altid huske 184 00:07:21,903 --> 00:07:23,500 A, da A er meningen at være 10. 185 00:07:23,500 --> 00:07:26,230 Og binær er bare 10 10, so-- 186 00:07:26,230 --> 00:07:27,310 >> ALLISON: Ah, der vi gå. 187 00:07:27,310 --> 00:07:28,615 >> ROB: Hey. 188 00:07:28,615 --> 00:07:30,020 >> ALLISON: Hey, slik til Rob. 189 00:07:30,020 --> 00:07:31,707 190 00:07:31,707 --> 00:07:33,290 Der er ikke-chokolade ting derinde. 191 00:07:33,290 --> 00:07:34,180 Så du kan have nogle. 192 00:07:34,180 --> 00:07:35,790 193 00:07:35,790 --> 00:07:36,760 Så ASCII matematik. 194 00:07:36,760 --> 00:07:38,206 195 00:07:38,206 --> 00:07:38,705 Opfører sig. 196 00:07:38,705 --> 00:07:40,630 197 00:07:40,630 --> 00:07:44,720 Så ASCII matematik, som du fyre sandsynligvis godt huske 198 00:07:44,720 --> 00:07:48,480 p sæt 2 med Visioneer og Caesar, du gjorde en masse af dette. 199 00:07:48,480 --> 00:07:49,610 200 00:07:49,610 --> 00:07:51,980 Husk, at tegnene er fundamentalt bare tal. 201 00:07:51,980 --> 00:07:54,780 Så vi kan lave matematik med dem, ligesom vi gør matematik med int'er. 202 00:07:54,780 --> 00:07:58,090 >> Så vi har bare en lille smule simpel ting her. 203 00:07:58,090 --> 00:08:00,940 Vi har nogle i A, som er initialiseres til 65. 204 00:08:00,940 --> 00:08:07,440 Og B svarende til ASCII værdien af ​​A plus 1, char C svarende til D minus 1, 205 00:08:07,440 --> 00:08:09,060 og char D lig med 68. 206 00:08:09,060 --> 00:08:13,130 Så vi kommer til at udskrive alle dem, som vi ser her. 207 00:08:13,130 --> 00:08:15,650 Og kan nogen fortælle mig hvad det vil udskrive? 208 00:08:15,650 --> 00:08:17,335 209 00:08:17,335 --> 00:08:18,210 STUDENT: [uhørligt]. 210 00:08:18,210 --> 00:08:20,540 ALLISON: Præcis, så én ting at bemærke er 211 00:08:20,540 --> 00:08:22,900 at vi udskriver ud tegn hver gang, her. 212 00:08:22,900 --> 00:08:28,290 Vi udpegning selvom A og B er ints når vi erklærede dem ovenfor. 213 00:08:28,290 --> 00:08:32,870 Vi udskriver dem som tegn ved procent C og vores printf erklæring, 214 00:08:32,870 --> 00:08:34,610 så de vil alle udskrive som tegn. 215 00:08:34,610 --> 00:08:40,730 Og selvfølgelig ASCII værdien 65 vilje udskrives som A. ASCII værdien af ​​A plus 1 216 00:08:40,730 --> 00:08:43,669 ville være 66, hvilket ville stolt til B. Så i virkeligheden, vi 217 00:08:43,669 --> 00:08:49,107 få A B C D Alle godt der? 218 00:08:49,107 --> 00:08:49,690 Eventuelle spørgsmål? 219 00:08:49,690 --> 00:08:50,721 220 00:08:50,721 --> 00:08:51,220 Awesome. 221 00:08:51,220 --> 00:08:52,500 222 00:08:52,500 --> 00:08:53,455 >> OK, omfang. 223 00:08:53,455 --> 00:08:55,090 224 00:08:55,090 --> 00:08:59,950 Så rækkevidde er naturligvis en meget vigtige ting at forstå, her. 225 00:08:59,950 --> 00:09:03,250 En masse af jer, hvis I har kompilering fejl, 226 00:09:03,250 --> 00:09:06,085 og det siger du ikke har adgang til nogle variable, 227 00:09:06,085 --> 00:09:08,540 er det sandsynligvis fordi du defineret det i en løkke 228 00:09:08,540 --> 00:09:12,210 og derefter forsøgte at få adgang til det ud af det, eller visa versa. 229 00:09:12,210 --> 00:09:16,410 >> Så rækkevidde på sin kerne, det blot bestemmer, hvor 230 00:09:16,410 --> 00:09:20,800 vi sige en variabel findes, hvor vi kan ændre det, hvor vi kan få adgang til det. 231 00:09:20,800 --> 00:09:24,550 Det er bare lidt at sige disse er de eneste steder, hvor du har adgang 232 00:09:24,550 --> 00:09:26,060 til denne variabel. 233 00:09:26,060 --> 00:09:30,080 >> Så de to anvendelsesområder, som vi taler om under klasse er globalt og lokalt. 234 00:09:30,080 --> 00:09:35,080 Så globale variabler vi taler om når du definerer dem over main. 235 00:09:35,080 --> 00:09:38,390 Det betyder, at hele din program har adgang til det, 236 00:09:38,390 --> 00:09:42,090 og det eksisterer, så længe som programmet kører, OK? 237 00:09:42,090 --> 00:09:45,100 Lokalt betyder, at det er mere begrænset til et område. 238 00:09:45,100 --> 00:09:50,520 Så når du har specifikke funktioner ligesom swap, vi taler altid om. 239 00:09:50,520 --> 00:09:54,380 Vi taler altid om swap med A og B. A og B findes i denne funktion. 240 00:09:54,380 --> 00:09:55,690 De findes ikke andre steder. 241 00:09:55,690 --> 00:09:56,860 242 00:09:56,860 --> 00:10:00,610 >> Samt, når du har, hvis erklæringer eller efter sløjfer. 243 00:10:00,610 --> 00:10:04,670 Når vi for eksempel i en for-løkke, vi har int jeg lig 0. 244 00:10:04,670 --> 00:10:06,630 Vi har nogle tilstand, og vi opdatere den. 245 00:10:06,630 --> 00:10:10,270 I eksisterer kun inden for seler i denne for-løkke. 246 00:10:10,270 --> 00:10:13,270 Hvis du forsøger at få adgang til det andre steder, din compiler ville råbe på dig. 247 00:10:13,270 --> 00:10:14,560 Det ville være ligesom, hvad er du prøver at gøre? 248 00:10:14,560 --> 00:10:15,400 Dette findes ikke. 249 00:10:15,400 --> 00:10:16,644 250 00:10:16,644 --> 00:10:18,435 Så det er de to forskellige typer af rækkevidde. 251 00:10:18,435 --> 00:10:19,486 252 00:10:19,486 --> 00:10:20,860 Giver det mening for alle? 253 00:10:20,860 --> 00:10:23,870 254 00:10:23,870 --> 00:10:27,890 >> Så for eksempel her, det er blot nogle enkle program. 255 00:10:27,890 --> 00:10:29,120 256 00:10:29,120 --> 00:10:32,890 Hvad tror du fyre tror er kommer til at ske på hvert punkt 257 00:10:32,890 --> 00:10:34,210 at vi forsøger at udskrive? 258 00:10:34,210 --> 00:10:40,150 Så denne ene her, hvad der kommer til at ske? 259 00:10:40,150 --> 00:10:43,047 260 00:10:43,047 --> 00:10:44,255 STUDENT: Det vil udskrive tre. 261 00:10:44,255 --> 00:10:44,880 ALLISON: Right. 262 00:10:44,880 --> 00:10:45,930 Det vil tre udskrive. 263 00:10:45,930 --> 00:10:47,272 Hvad med her? 264 00:10:47,272 --> 00:10:48,230 STUDENT: Det vil ikke fungere. 265 00:10:48,230 --> 00:10:48,910 ALLISON: Det vil ikke fungere. 266 00:10:48,910 --> 00:10:50,290 Du er ude af rækkevidde, right? 267 00:10:50,290 --> 00:10:55,160 Lokal variabel ikke findes uden for disse seler, okay? 268 00:10:55,160 --> 00:10:56,462 Og hvad så om her? 269 00:10:56,462 --> 00:10:57,850 >> STUDENT: [uhørligt]. 270 00:10:57,850 --> 00:10:59,210 >> ALLISON: Hvad? 271 00:10:59,210 --> 00:10:59,900 Rob, gå. 272 00:10:59,900 --> 00:11:00,854 >> ROB: Jeg har lige sagt. 273 00:11:00,854 --> 00:11:04,200 Globale variabler bør være global understreg variabel. 274 00:11:04,200 --> 00:11:05,660 >> ALLISON: Ak ja, undskyld. 275 00:11:05,660 --> 00:11:06,200 Tak, Rob. 276 00:11:06,200 --> 00:11:07,480 277 00:11:07,480 --> 00:11:10,170 Robs ligesom vores bopæl compiler. 278 00:11:10,170 --> 00:11:12,684 Han vil bare råbe på os, når vi har brug for det. [Griner] Ja, det 279 00:11:12,684 --> 00:11:14,225 bør være global understregning variabel. 280 00:11:14,225 --> 00:11:15,760 281 00:11:15,760 --> 00:11:18,430 Så under forudsætning af, at der var global understreg 282 00:11:18,430 --> 00:11:20,260 variabel, hvad der kommer til at ske her? 283 00:11:20,260 --> 00:11:21,260 STUDENT: Det vil fungere. 284 00:11:21,260 --> 00:11:22,093 ALLISON: Det vil virke. 285 00:11:22,093 --> 00:11:24,655 Så det vil printe, så bare et meget simpelt eksempel. 286 00:11:24,655 --> 00:11:27,650 287 00:11:27,650 --> 00:11:29,870 OK, prototyper. 288 00:11:29,870 --> 00:11:33,680 Så selvfølgelig, vi virkelig understrege for jer 289 00:11:33,680 --> 00:11:36,460 at gøre funktioner, hvis det give mening i dine programmer. 290 00:11:36,460 --> 00:11:38,460 Men selvfølgelig, når du lave dine egne funktioner, 291 00:11:38,460 --> 00:11:40,930 typisk vil du definere dem efter main. 292 00:11:40,930 --> 00:11:42,430 Og du vil forsøge at ringe til dem i main. 293 00:11:42,430 --> 00:11:46,030 Og hvis du ikke bruger en prototype, din compiler vil råbe på dig. 294 00:11:46,030 --> 00:11:49,590 >> Prototype er dybest set bare fortælle din compiler 295 00:11:49,590 --> 00:11:52,400 at jeg har denne funktion under main. 296 00:11:52,400 --> 00:11:54,970 Jeg har tænkt mig at kalde det, før jeg definere det. 297 00:11:54,970 --> 00:11:56,360 Bare holde på. 298 00:11:56,360 --> 00:12:00,660 Jeg lover, at det er defineret, og du vil have alt det, du har brug for. 299 00:12:00,660 --> 00:12:05,900 >> Så den måde, vi gør det er bare dit afkast type din funktion navn, dit input 300 00:12:05,900 --> 00:12:06,400 listen. 301 00:12:06,400 --> 00:12:09,760 Det er dybest set den første linje af din funktion erklæring. 302 00:12:09,760 --> 00:12:11,510 Det er virkelig alt, hvad det er. 303 00:12:11,510 --> 00:12:14,440 Men dette er blot en generelle form for format. 304 00:12:14,440 --> 00:12:17,220 >> Så i vores eksempel her, som du fyre bør 305 00:12:17,220 --> 00:12:19,700 har set i afsnit på et tidspunkt, har vi 306 00:12:19,700 --> 00:12:23,220 nogle int kube, tager nogle int af input. 307 00:12:23,220 --> 00:12:25,870 Og vi har vores vigtigste funktion, hvilket kræver terning. 308 00:12:25,870 --> 00:12:28,670 Og terning er defineret efter den kendsgerning. 309 00:12:28,670 --> 00:12:34,450 >> Så hvis vi ikke har int terning input i toppen, når vi kaldes terning 310 00:12:34,450 --> 00:12:36,620 inden vigtigste, vores compiler ville blive vred på os. 311 00:12:36,620 --> 00:12:38,890 Det ville være ligesom, hvad taler du om? 312 00:12:38,890 --> 00:12:40,360 Cube findes ikke. 313 00:12:40,360 --> 00:12:41,910 Jeg ved ikke, hvad du beder om. 314 00:12:41,910 --> 00:12:43,490 Og jeg bare stop. 315 00:12:43,490 --> 00:12:47,330 >> Men fordi vi gjorde vores prototype øverst, har vi sagt, 316 00:12:47,330 --> 00:12:49,800 du ved, når du ser terning, skal du ikke bekymre dig om det. 317 00:12:49,800 --> 00:12:51,990 Jeg lover det er defineret senere. 318 00:12:51,990 --> 00:12:53,750 Og det vil lade dig gøre hvad du vil. 319 00:12:53,750 --> 00:12:57,750 Så hvis du nogensinde har en funktion der er erklæret efter du kalder det 320 00:12:57,750 --> 00:13:00,570 for første gang, skal du har det prototype på toppen. 321 00:13:00,570 --> 00:13:01,640 322 00:13:01,640 --> 00:13:02,720 >> Ja? 323 00:13:02,720 --> 00:13:04,412 >> ROB: Det er kvadreret, ikke cubing. 324 00:13:04,412 --> 00:13:05,855 >> ALLISON: Åh min Gud. 325 00:13:05,855 --> 00:13:09,435 Jeg har ikke have-- Gabe, tænkte jeg du var vores korrekturlæser. 326 00:13:09,435 --> 00:13:10,740 327 00:13:10,740 --> 00:13:12,760 OK gutter, bære over med mig, her. 328 00:13:12,760 --> 00:13:14,440 Jeg håber, at alle er ved at blive ideen. 329 00:13:14,440 --> 00:13:15,560 330 00:13:15,560 --> 00:13:20,380 OK, så det bør have hugget, ikke kubik. 331 00:13:20,380 --> 00:13:22,700 Men ideen forbliver den samme. 332 00:13:22,700 --> 00:13:23,702 333 00:13:23,702 --> 00:13:26,660 Enhver funktion, som vi kalder efter det faktum, bør have en prototype. 334 00:13:26,660 --> 00:13:27,730 335 00:13:27,730 --> 00:13:28,970 Alle godt med det? 336 00:13:28,970 --> 00:13:30,730 337 00:13:30,730 --> 00:13:32,310 Enhver anden slåfejl? 338 00:13:32,310 --> 00:13:32,810 OK. 339 00:13:32,810 --> 00:13:34,730 340 00:13:34,730 --> 00:13:36,230 Eventuelle stavefejl her, før vi starter, Rob? 341 00:13:36,230 --> 00:13:37,356 342 00:13:37,356 --> 00:13:42,380 [Griner] OK, så structs. 343 00:13:42,380 --> 00:13:45,040 Dybest set, structs giver dig at oprette din egen datatype. 344 00:13:45,040 --> 00:13:49,264 Så meget som en int eller en char eller en float, det er bare en anden type. 345 00:13:49,264 --> 00:13:51,680 Jeg kan lide at tænke på det som, ligesom, oprette din egen datatype. 346 00:13:51,680 --> 00:13:53,740 Så det giver dig mulighed for at gøre det. 347 00:13:53,740 --> 00:13:56,160 Og det besidder forskellige typer af data. 348 00:13:56,160 --> 00:14:01,030 >> Så hvis du husker, i et array, vi kan kun holde ting af lignende type. 349 00:14:01,030 --> 00:14:04,660 Structs tillade os at holde multiple ting af forskellige typer. 350 00:14:04,660 --> 00:14:08,944 Så i dette tilfælde her, vi har en struct kaldet Student, 351 00:14:08,944 --> 00:14:10,650 nævnes her nederst. 352 00:14:10,650 --> 00:14:13,540 Og vi har nogle int id og nogle string navn. 353 00:14:13,540 --> 00:14:14,620 354 00:14:14,620 --> 00:14:17,300 Så dette er blot en anden datatype. 355 00:14:17,300 --> 00:14:18,950 Vi har nu en datatype kaldet Student. 356 00:14:18,950 --> 00:14:20,330 357 00:14:20,330 --> 00:14:24,750 >> Så fordi vi kan tænke på det som blot endnu datatype, 358 00:14:24,750 --> 00:14:27,760 vi kan erklære variabler som vi ville enhver anden. 359 00:14:27,760 --> 00:14:32,680 Så i stedet for bare at have, ligesom en int student, vi bare have en elev, 360 00:14:32,680 --> 00:14:33,390 studerende 1. 361 00:14:33,390 --> 00:14:33,560 Åh, se. 362 00:14:33,560 --> 00:14:34,059 Det er Rob. 363 00:14:34,059 --> 00:14:35,750 364 00:14:35,750 --> 00:14:38,880 Så her er vi erklære en struct eller en variabel 365 00:14:38,880 --> 00:14:40,940 kaldet student 1 af typen studerende. 366 00:14:40,940 --> 00:14:45,370 Så det kommer til at have id og navn forbundet med den. 367 00:14:45,370 --> 00:14:48,430 >> Og den måde, vi få adgang til disse elementer i vores struct 368 00:14:48,430 --> 00:14:50,100 er med dot operatør, her. 369 00:14:50,100 --> 00:14:51,910 370 00:14:51,910 --> 00:14:54,660 Så i dette tilfælde, vi erklærede nogle studerende 1. 371 00:14:54,660 --> 00:14:57,080 Vi tildelt ID til at være 1. 372 00:14:57,080 --> 00:14:58,840 Og vi tildelt navnet til at være Rob. 373 00:14:58,840 --> 00:15:03,010 374 00:15:03,010 --> 00:15:04,960 OK, alle godt med det? 375 00:15:04,960 --> 00:15:06,787 Brug det bare like-- ja? 376 00:15:06,787 --> 00:15:09,530 >> STUDENT: Ja, typedef-- når har vi brug for at bruge typedef? 377 00:15:09,530 --> 00:15:13,190 >> ALLISON: Så typedef bare siger at-- Rob, du 378 00:15:13,190 --> 00:15:16,990 kan korrigere mig om dette, hvis jeg er wrong-- men typedef er bare faktisk erklære 379 00:15:16,990 --> 00:15:19,330 det som en type, som du kan bruge, right? 380 00:15:19,330 --> 00:15:22,550 >> ROB: Ja, det er dybest set, så det er bare at skabe 381 00:15:22,550 --> 00:15:24,215 et alias, eller et kaldenavn for en type. 382 00:15:24,215 --> 00:15:25,590 Så du kan skrive, at [uhørligt]. 383 00:15:25,590 --> 00:15:27,140 384 00:15:27,140 --> 00:15:30,350 Så [uhørligt] findes, og nu skal vi bare have 385 00:15:30,350 --> 00:15:32,090 [Uhørligt] betyder nøjagtig det samme. 386 00:15:32,090 --> 00:15:37,210 Og så her, vi har skrevet, tror jeg, nogle struct type 2 [uhørligt]. 387 00:15:37,210 --> 00:15:40,680 Så det er bare et kaldenavn for en given type. 388 00:15:40,680 --> 00:15:44,344 >> STUDENT: String [uhørligt] bibliotek blev skrevet op ligesom char stjerne. 389 00:15:44,344 --> 00:15:51,380 390 00:15:51,380 --> 00:15:54,390 >> ALLISON: Til vores formål her, hvis du erklære en struct, 391 00:15:54,390 --> 00:15:55,600 bare gøre typedef struct. 392 00:15:55,600 --> 00:15:57,680 393 00:15:57,680 --> 00:16:04,490 OK, så på forhånd, er dette bare en normal variabel her. 394 00:16:04,490 --> 00:16:06,390 Vi adgang til det med en prik. 395 00:16:06,390 --> 00:16:08,580 hvis vi har en pointer til en struct, kan vi faktisk 396 00:16:08,580 --> 00:16:10,700 bruge en pil, som er temmelig cool. 397 00:16:10,700 --> 00:16:17,130 >> Så i dette tilfælde, har vi en pointer til en elev 1, der er af typen studerende. 398 00:16:17,130 --> 00:16:19,020 Husk, med din pointer konstruktion, 399 00:16:19,020 --> 00:16:23,710 du ønsker uanset skrive dit pointer peger på at være i begyndelsen. 400 00:16:23,710 --> 00:16:25,960 Så vi har nogle studerende 1, her. 401 00:16:25,960 --> 00:16:27,370 402 00:16:27,370 --> 00:16:31,050 Og da denne elev 1 er nu en spids, 403 00:16:31,050 --> 00:16:36,520 vi kan faktisk gå student 1 arrow navn i stedet for dot, fordi det er en pointer, 404 00:16:36,520 --> 00:16:37,640 og tildele Rob. 405 00:16:37,640 --> 00:16:40,720 Og nu, hvis vi ønsker at ændre Rob til Davin, 406 00:16:40,720 --> 00:16:43,570 Dette er blot viser dig en anden måde at gøre det. 407 00:16:43,570 --> 00:16:48,850 >> Så i stedet for at bruge pilen, du kan also-- Jeg vil afslutte dette og derefter 408 00:16:48,850 --> 00:16:52,860 tage at question-- du kunne også gøre henvisningen studerende 1. 409 00:16:52,860 --> 00:16:56,170 Det siger ligesom gå til hvad der er på student 1, som 410 00:16:56,170 --> 00:16:58,840 ville være vores studerende struct. 411 00:16:58,840 --> 00:17:03,910 Adgang til det med en prik og elementet som du ønsker, og derefter overflytte det. 412 00:17:03,910 --> 00:17:05,326 Der var et spørgsmål. 413 00:17:05,326 --> 00:17:08,034 STUDENT: Ja, så hvordan kommer du har at bruge [uhørligt], når du er 414 00:17:08,034 --> 00:17:10,367 gør student stjerne uden [Uhørligt] elev? 415 00:17:10,367 --> 00:17:12,200 ALLISON: Fordi dette skaber en pointer. 416 00:17:12,200 --> 00:17:13,616 ROB: Vi kommer til at tale om det. 417 00:17:13,616 --> 00:17:16,119 ALLISON: Vi kommer til at tale om det senere i gennemgangen. 418 00:17:16,119 --> 00:17:17,660 Så bare holde på den tanke. 419 00:17:17,660 --> 00:17:20,560 Hvis det stadig generer dig på ende, kommer tale med en af ​​os. 420 00:17:20,560 --> 00:17:23,380 >> Så disse gør præcis det samme. 421 00:17:23,380 --> 00:17:25,579 Vi er lige vise jer to forskellige måder at gøre det. 422 00:17:25,579 --> 00:17:29,470 Elev 1 er nu en pegepind, så du kan få adgang til Name element 423 00:17:29,470 --> 00:17:30,960 i struct med en pil. 424 00:17:30,960 --> 00:17:36,440 Eller du kan dereference markøren, og derefter få adgang til det, som du normalt ville. 425 00:17:36,440 --> 00:17:38,430 Er det fornuftigt at hver enkelt? 426 00:17:38,430 --> 00:17:39,480 427 00:17:39,480 --> 00:17:43,890 Hvis hele pointer tingene lidt forvirrende, vil Gabe tale om det, 428 00:17:43,890 --> 00:17:45,740 og så måske dette vil give mere mening. 429 00:17:45,740 --> 00:17:46,240 Ja? 430 00:17:46,240 --> 00:17:48,387 >> STUDENT: Ja, så hvordan er denne forskellig fra? 431 00:17:48,387 --> 00:17:49,470 ALLISON: Den tidligere ene? 432 00:17:49,470 --> 00:17:52,330 Så eleven 1 i dette sagen er ikke en pegepind. 433 00:17:52,330 --> 00:17:54,380 Det er bare din faktiske struct. 434 00:17:54,380 --> 00:17:55,400 >> STUDENT: OK. 435 00:17:55,400 --> 00:17:57,645 >> ALLISON: denne ene er en pointer til en struct. 436 00:17:57,645 --> 00:17:58,910 437 00:17:58,910 --> 00:18:02,060 >> STUDENT: OK, men gør den slags ender med at arbejde det samme [uhørligt]. 438 00:18:02,060 --> 00:18:03,310 >> ALLISON: Det effektivt fungerer på samme. 439 00:18:03,310 --> 00:18:04,560 Din syntaks er bare anderledes. 440 00:18:04,560 --> 00:18:05,185 STUDENT: OK. 441 00:18:05,185 --> 00:18:07,600 >> ALLISON: Ja, de er i virkeligheden det samme. 442 00:18:07,600 --> 00:18:11,321 Det er bare afhængig af kontekst, kan du ene over den anden. 443 00:18:11,321 --> 00:18:11,820 Ja? 444 00:18:11,820 --> 00:18:13,956 >> STUDENT: Når du gør henvisninger til 1-- 445 00:18:13,956 --> 00:18:14,580 ALLISON: Mm-hm? 446 00:18:14,580 --> 00:18:16,880 STUDENT: Hvorfor gør du har parentes? 447 00:18:16,880 --> 00:18:19,575 ALLISON: Fordi student 1 er markøren. 448 00:18:19,575 --> 00:18:22,200 Så du skal sørge for, at du er bare dereferere markøren. 449 00:18:22,200 --> 00:18:23,380 >> STUDENT: OK. 450 00:18:23,380 --> 00:18:26,700 >> ALLISON: Så i dette tilfælde her, parenteserne omkring det 451 00:18:26,700 --> 00:18:29,875 betyder, at du dereferere studerende 1. 452 00:18:29,875 --> 00:18:35,390 Så du vil, hvor studerende 1 point, hvilket er din struct. 453 00:18:35,390 --> 00:18:38,010 Så nu kan du tænke af det som struct, 454 00:18:38,010 --> 00:18:39,785 så vi kan bruge vores normale dot drift. 455 00:18:39,785 --> 00:18:42,752 456 00:18:42,752 --> 00:18:43,585 Andre spørgsmål? 457 00:18:43,585 --> 00:18:45,840 458 00:18:45,840 --> 00:18:48,120 Cool, awesome. 459 00:18:48,120 --> 00:18:51,359 >> Så sidste ting, tror jeg er min sidste slide, woo! 460 00:18:51,359 --> 00:18:52,775 OK, så floating point unøjagtighed. 461 00:18:52,775 --> 00:18:54,090 462 00:18:54,090 --> 00:18:56,820 Vi talte kort om dette under foredraget. 463 00:18:56,820 --> 00:19:00,030 Dybest set har vi uendeligt mange reelle tal. 464 00:19:00,030 --> 00:19:02,237 Og hvis nogen af ​​jer elsker matematik, der er 465 00:19:02,237 --> 00:19:03,570 alle mulige fede ting med os. 466 00:19:03,570 --> 00:19:05,010 467 00:19:05,010 --> 00:19:07,190 >> Men der er uendeligt mange reelle tal. 468 00:19:07,190 --> 00:19:09,850 Men de er kun begrænset mange bits, vi har. 469 00:19:09,850 --> 00:19:13,240 Så du vil altid har unøjagtighed, er alt. 470 00:19:13,240 --> 00:19:16,269 Og det er det er bare sådan som noget, du bør vide. 471 00:19:16,269 --> 00:19:19,060 At ligesom vi kan spørge dig, hvorfor gør floating point Unøjagtighed eksisterer? 472 00:19:19,060 --> 00:19:20,004 473 00:19:20,004 --> 00:19:21,420 Så bare noget, du bør vide. 474 00:19:21,420 --> 00:19:23,770 Og med det, jeg vender det til pegepinde. 475 00:19:23,770 --> 00:19:27,720 476 00:19:27,720 --> 00:19:28,520 >> Binky: Hej, gutter. 477 00:19:28,520 --> 00:19:29,616 Mit navn er Binky. 478 00:19:29,616 --> 00:19:30,990 Jeg har tænkt mig at tale om pointere. 479 00:19:30,990 --> 00:19:33,247 480 00:19:33,247 --> 00:19:35,830 Yeah, så pointers er faktisk min favorit del i dette kursus. 481 00:19:35,830 --> 00:19:39,740 Så bare for at gøre det klart, hvad Allison talte om her, så grunden 482 00:19:39,740 --> 00:19:43,810 why-- den eneste forskel her, den store forskel var den måde 483 00:19:43,810 --> 00:19:44,760 vi erklærer ting. 484 00:19:44,760 --> 00:19:47,560 Så studerende stjerne betyder er en pointer til en elev. 485 00:19:47,560 --> 00:19:52,960 Hvorimod dias før, studerende er en faktiske struct, ligesom en egentlig studerende, 486 00:19:52,960 --> 00:19:54,400 indeholder nogen af ​​disse ting. 487 00:19:54,400 --> 00:19:57,050 >> Og grunden til at vi ønsker at-- ja, Davin? 488 00:19:57,050 --> 00:19:58,630 >> Davin: Hvad betyder pilen betyde? 489 00:19:58,630 --> 00:20:04,240 >> Binky: Pilen midler nøjagtigt det samme som dette. 490 00:20:04,240 --> 00:20:06,150 Så du behøver ikke virkelig har brug for pilen. 491 00:20:06,150 --> 00:20:11,060 Ligesom, hvis du kun program i C, kan du bare bruge dette. 492 00:20:11,060 --> 00:20:12,850 Undskyld, jeg gør ikke, hvad det er. 493 00:20:12,850 --> 00:20:14,920 Du kan bare bruge denne syntaks. 494 00:20:14,920 --> 00:20:17,430 >> Men nogle mennesker, når de designe C, 495 00:20:17,430 --> 00:20:19,870 de regnede med, at folk anvendt denne syntaks så meget, 496 00:20:19,870 --> 00:20:23,970 at de vil kunne lide lige kommet op med en syntaks struktur for det. 497 00:20:23,970 --> 00:20:26,820 Og dette fandt sted i i form af denne pil. 498 00:20:26,820 --> 00:20:29,210 Og det er virkelig rart, fordi det symboliserer noget 499 00:20:29,210 --> 00:20:33,670 ligesom vi faktisk efter denne pil, denne pointer, 500 00:20:33,670 --> 00:20:35,300 mod noget plads i hukommelsen. 501 00:20:35,300 --> 00:20:40,410 Og når vi får der, vi ønsker at se til navnet på den pågældende elev, 502 00:20:40,410 --> 00:20:42,150 hvis det giver mening. 503 00:20:42,150 --> 00:20:43,000 OK? 504 00:20:43,000 --> 00:20:44,290 >> Så dette er nøjagtig det samme. 505 00:20:44,290 --> 00:20:46,310 Det er præcis det samme som dette. 506 00:20:46,310 --> 00:20:48,130 De bliver kompileret nøjagtig det samme, OK? 507 00:20:48,130 --> 00:20:50,100 508 00:20:50,100 --> 00:20:55,580 Og grunden her hvorfor vi malloc noget, er fordi der i dette tilfælde, 509 00:20:55,580 --> 00:20:59,120 vores variabel er faktisk blot en pointer variabel. 510 00:20:59,120 --> 00:21:02,900 Så vi kun har nogle plads i hukommelse, der er i besiddelse af en pointer. 511 00:21:02,900 --> 00:21:06,570 Vi har ikke rigtig har nogen plads der holder den faktiske struct. 512 00:21:06,570 --> 00:21:08,660 >> Så dette skal gøres i to trin. 513 00:21:08,660 --> 00:21:11,545 Vi er nødt til at skabe den hukommelse at sætte struct i. 514 00:21:11,545 --> 00:21:14,445 Og vi er nødt til at skabe den hukommelse til at sætte markøren i. 515 00:21:14,445 --> 00:21:16,570 Så de er dybest set to forskellige variabler, her. 516 00:21:16,570 --> 00:21:19,730 En af dem er af typen studerende, bortset fra at det ikke rigtig har et navn. 517 00:21:19,730 --> 00:21:21,900 Og den anden er af typen studerende stjerne. 518 00:21:21,900 --> 00:21:24,900 Og så student 1 point der, hvis det giver mening. 519 00:21:24,900 --> 00:21:25,871 520 00:21:25,871 --> 00:21:26,370 OK? 521 00:21:26,370 --> 00:21:28,160 522 00:21:28,160 --> 00:21:31,860 >> Så grunden til, at vi bruger pejlemærker er fordi alt 523 00:21:31,860 --> 00:21:35,510 i en computer, hver variabel i en computer har to ting. 524 00:21:35,510 --> 00:21:36,580 Det har sin værdi. 525 00:21:36,580 --> 00:21:38,420 Og det har sin adresse. 526 00:21:38,420 --> 00:21:41,390 Og en god måde at konceptualisere dette er der er 527 00:21:41,390 --> 00:21:44,230 mange problemer, når du prøv at bruge funktioner. 528 00:21:44,230 --> 00:21:47,200 Og vi vil forsøge at se på en af ​​dem. 529 00:21:47,200 --> 00:21:50,370 Nemlig, det kommer til at tænke på hukommelsen som kasser. 530 00:21:50,370 --> 00:21:52,810 >> Du har altid tænkt på variabler når du siger na lig 5. 531 00:21:52,810 --> 00:21:54,430 Du tror at sætte 5 ind i en kasse. 532 00:21:54,430 --> 00:21:55,520 533 00:21:55,520 --> 00:22:00,030 Så hvad nu hvis du ønsker at videregive at int i en funktion? 534 00:22:00,030 --> 00:22:03,230 Du skal bare pass-- jeg ikke know-- x i en funktion. 535 00:22:03,230 --> 00:22:06,090 Men hvad der sker, er normalt som mennesker, du 536 00:22:06,090 --> 00:22:09,050 ville tænke noget som jeg er at føre boksen til en person. 537 00:22:09,050 --> 00:22:12,070 Og det gør ikke rigtig ske i computere. 538 00:22:12,070 --> 00:22:17,770 Hvad der sker, er du kopierer værdien af boksen til den person æske. 539 00:22:17,770 --> 00:22:22,440 >> Så hvad jeg prøver at sige er, at hvis du har en function-- sorry-- her, 540 00:22:22,440 --> 00:22:27,700 hvis vi har en funktion som til fem op der, hvis du forsøger at passere en variabel, 541 00:22:27,700 --> 00:22:29,450 det bare at gå til at kopiere. 542 00:22:29,450 --> 00:22:35,771 Hvis en initialiseringsmenu nx lig med 3, går det at kopiere denne værdi op til variablen a 543 00:22:35,771 --> 00:22:36,270 deroppe. 544 00:22:36,270 --> 00:22:37,005 545 00:22:37,005 --> 00:22:39,630 OK, og dette er slags grunden hvorfor vi ønsker at bruge pointere. 546 00:22:39,630 --> 00:22:42,550 Fordi i stedet for giver blot værdien, 547 00:22:42,550 --> 00:22:44,850 i stedet for blot passerer bare værdien til en funktion, 548 00:22:44,850 --> 00:22:46,530 vi ønsker at passere ved reference. 549 00:22:46,530 --> 00:22:50,630 Hvad vi kalder pasning af henvisning er venlig give boksen til funktion, 550 00:22:50,630 --> 00:22:53,890 så funktionen kan også ændre værdierne i denne boks. 551 00:22:53,890 --> 00:22:57,280 >> OK, så bare nogle grundlæggende pointer ting er at skabe pegepinde, 552 00:22:57,280 --> 00:23:00,300 du bare erklære det en type, og du sætte en stjerne lige efter det. 553 00:23:00,300 --> 00:23:02,307 Og typen er lige hvad du peger på. 554 00:23:02,307 --> 00:23:04,390 Så hvis det er en int stjerne, du peger på en int. 555 00:23:04,390 --> 00:23:05,940 Hvis det er en char stjerne, du peger på et diagram. 556 00:23:05,940 --> 00:23:07,790 Og hvis det er en student stjerne, du peger på en elev. 557 00:23:07,790 --> 00:23:08,770 OK? 558 00:23:08,770 --> 00:23:10,510 >> Og de er alle 4 bytes lange. 559 00:23:10,510 --> 00:23:13,010 Fordi denne variabel det faktisk ikke 560 00:23:13,010 --> 00:23:15,380 nødt til at holde en char, en int, eller en studerende. 561 00:23:15,380 --> 00:23:16,890 Det behøver kun at holde en adresse. 562 00:23:16,890 --> 00:23:21,390 Det er derfor, de er alle 4 bytes længe i en normal 32-bit maskine. 563 00:23:21,390 --> 00:23:21,890 OK? 564 00:23:21,890 --> 00:23:25,600 Så her, x er en variabel, der peger til en int. y peger på en char. z punkter 565 00:23:25,600 --> 00:23:26,580 til en svømmer. 566 00:23:26,580 --> 00:23:27,480 Eventuelle spørgsmål her? 567 00:23:27,480 --> 00:23:29,841 568 00:23:29,841 --> 00:23:30,340 Cool. 569 00:23:30,340 --> 00:23:32,550 Og der er to forskellige symboler de har 570 00:23:32,550 --> 00:23:34,341 at huske på, når kommer til markøren. 571 00:23:34,341 --> 00:23:36,540 Så refererer og dereferere er de store. 572 00:23:36,540 --> 00:23:38,100 573 00:23:38,100 --> 00:23:41,602 Så tegnet af variabelnavn giver dig? 574 00:23:41,602 --> 00:23:42,310 STUDENT: Adresse. 575 00:23:42,310 --> 00:23:43,380 Binky: Adresse. 576 00:23:43,380 --> 00:23:47,330 Så hvis du erklærer int a lig med 5, og derefter tegnet 577 00:23:47,330 --> 00:23:49,214 af en vil give dig adressen. 578 00:23:49,214 --> 00:23:51,130 Og du kan faktisk prøve at printe og se 579 00:23:51,130 --> 00:23:54,640 hvilken adresse i hukommelsen din variabel har. 580 00:23:54,640 --> 00:23:57,380 Og så dereferencing-- så var henvisninger, 581 00:23:57,380 --> 00:24:00,380 få address-- dereferere er det stik modsatte. 582 00:24:00,380 --> 00:24:04,120 OK, ligesom tider er modsatte af en division, 583 00:24:04,120 --> 00:24:06,060 stjerne er det modsatte af tegnet. 584 00:24:06,060 --> 00:24:09,710 Så dereferere midler derned. 585 00:24:09,710 --> 00:24:14,280 Så hvis du giver star-- jeg ikke know-- 50, der er 586 00:24:14,280 --> 00:24:20,320 vil forsøge at gå til adresse nummer 50 indersiden af ​​din computer. 587 00:24:20,320 --> 00:24:22,840 OK, og hvorfor ser vi at de er modsætninger? 588 00:24:22,840 --> 00:24:27,320 For hvad sker der, hvis du gør noget lignende stjerne Ampersand en? 589 00:24:27,320 --> 00:24:28,470 590 00:24:28,470 --> 00:24:33,460 Nå, tegnet en giver dig adressen af en variabel, adressen på en. 591 00:24:33,460 --> 00:24:35,830 Men stjerne betyder derned. 592 00:24:35,830 --> 00:24:38,930 >> Så hvad sker der, hvis du gå til adressen på en? 593 00:24:38,930 --> 00:24:40,400 Du skal bare komme til en, right? 594 00:24:40,400 --> 00:24:41,410 595 00:24:41,410 --> 00:24:43,600 Så gå til adressen på a er det samme som en. 596 00:24:43,600 --> 00:24:47,580 Det er derfor, de er som regel henvist til same-- dette 597 00:24:47,580 --> 00:24:50,480 og dette omtales som modsatte aktører. 598 00:24:50,480 --> 00:24:50,980 OK? 599 00:24:50,980 --> 00:24:52,780 600 00:24:52,780 --> 00:24:53,790 Så cool. 601 00:24:53,790 --> 00:24:57,240 >> Under hætten, for eksempel, hvis vi erklære int x lig 5, 602 00:24:57,240 --> 00:24:58,040 vi har en variabel. 603 00:24:58,040 --> 00:25:00,790 Og husk, at jeg sagde hver variable-- og dette er en god ting 604 00:25:00,790 --> 00:25:03,820 at holde mind-- det har to forskellige ting forbundet med. 605 00:25:03,820 --> 00:25:06,460 Det har en behandlet, og en værdi. 606 00:25:06,460 --> 00:25:07,140 OK? 607 00:25:07,140 --> 00:25:09,180 >> Så værdien i dette tilfælde er 5. 608 00:25:09,180 --> 00:25:12,140 Og adressen is-- lad os sige, jeg er lave noget up-- det er 0x04. 609 00:25:12,140 --> 00:25:13,180 610 00:25:13,180 --> 00:25:17,200 Og den eneste grund til, at vi normalt repræsenterer adresser i hexadecimal 611 00:25:17,200 --> 00:25:19,770 er én, fordi det er ligesom god. 612 00:25:19,770 --> 00:25:21,600 Det går godt med binær. 613 00:25:21,600 --> 00:25:23,500 Det er nemt at konvertere til og fra binær. 614 00:25:23,500 --> 00:25:26,890 Og det ikke bliver for store, hvis du har en meget stor antal. 615 00:25:26,890 --> 00:25:29,990 Så vi kan lide at bruge hexadecimal i trykning adresser. 616 00:25:29,990 --> 00:25:31,890 Men jeg kunne repræsentere dette som et heltal. 617 00:25:31,890 --> 00:25:32,750 Det er fint. 618 00:25:32,750 --> 00:25:35,450 >> Og så det har en adresse 4 og en værdi på 5. 619 00:25:35,450 --> 00:25:38,080 Og så sagde jeg int stjerne pointer. 620 00:25:38,080 --> 00:25:40,070 Så dette er en anden type, varsel. 621 00:25:40,070 --> 00:25:43,220 Int stjerne pointer lig adressen af ​​x. 622 00:25:43,220 --> 00:25:46,425 Så, hvad der vil være værdien af ​​PTR? 623 00:25:46,425 --> 00:25:47,710 624 00:25:47,710 --> 00:25:51,600 Det kommer til at være den adresse x, hernede. 625 00:25:51,600 --> 00:25:54,190 OK, så værdien kommer til at være den samme som adressen. 626 00:25:54,190 --> 00:25:56,130 Det er den opgave betjene jeg laver. 627 00:25:56,130 --> 00:25:59,380 Og så PTR vil have sin egen adresse, som viser sig, 628 00:25:59,380 --> 00:26:02,050 i dette tilfælde 8, OK? 629 00:26:02,050 --> 00:26:03,850 630 00:26:03,850 --> 00:26:05,900 >> Og så vil jeg oprette en ny heltal kopi. 631 00:26:05,900 --> 00:26:08,790 Og jeg siger int kopi lig derned. 632 00:26:08,790 --> 00:26:11,140 Så gå til hvad PTR peger på. 633 00:26:11,140 --> 00:26:13,940 Nå, hvad denne PTR have? 634 00:26:13,940 --> 00:26:14,740 PTR har 0x04. 635 00:26:14,740 --> 00:26:16,060 636 00:26:16,060 --> 00:26:18,400 Hvad sker der, hvis jeg forsøger at gå der? 637 00:26:18,400 --> 00:26:23,650 Jeg vil finde den fyr, der har adresse x og som har adresse 4. 638 00:26:23,650 --> 00:26:25,970 Og hvem har fat fire er x. 639 00:26:25,970 --> 00:26:26,950 Giver det mening? 640 00:26:26,950 --> 00:26:28,295 641 00:26:28,295 --> 00:26:28,795 Ja? 642 00:26:28,795 --> 00:26:32,060 >> STUDENT: I ​​dette tilfælde er markøren i en stak? 643 00:26:32,060 --> 00:26:36,024 >> Binky: I dette tilfælde, it's-- godt spørgsmål. 644 00:26:36,024 --> 00:26:38,690 Jeg har ikke rigtig tænke over dette når du foretager op disse adresser. 645 00:26:38,690 --> 00:26:42,570 Men hvis dette er, ligesom alle disse er lokale variable, 646 00:26:42,570 --> 00:26:46,372 så er X kommer til at leve in-- alt kommer til at leve i stakken. 647 00:26:46,372 --> 00:26:48,330 Så alt går at pege at stable. 648 00:26:48,330 --> 00:26:49,360 649 00:26:49,360 --> 00:26:52,700 Du skal kun komme til bunke når du begynder at bruge malloc, right? 650 00:26:52,700 --> 00:26:59,430 >> Så hvis du husker stakken er hver gang du kalder en funktion i dit program, 651 00:26:59,430 --> 00:27:02,800 lignende, vigtigste for eksempel, eller en hvilken som helst anden funktion, ligesom printf. 652 00:27:02,800 --> 00:27:06,334 Alle de lokale variable er kommer til at blive sat i en stabel ramme. 653 00:27:06,334 --> 00:27:08,500 Og de kommer til at få som stablet op i stakken. 654 00:27:08,500 --> 00:27:09,930 Det er, hvad der kaldes en stak. 655 00:27:09,930 --> 00:27:12,200 Og alle de lokale variable kommer til at være der. 656 00:27:12,200 --> 00:27:14,940 Og heap-- og vi vil at tale mere om dette later-- 657 00:27:14,940 --> 00:27:19,050 den bunke er hvor alle dynamisk allokeret hukommelse liv. 658 00:27:19,050 --> 00:27:20,270 Cool? 659 00:27:20,270 --> 00:27:21,680 >> Vi gå til dette dias. 660 00:27:21,680 --> 00:27:22,800 Ja? 661 00:27:22,800 --> 00:27:25,490 >> STUDENT: Hvorfor er ikke int kopi returnering 0x04? 662 00:27:25,490 --> 00:27:27,870 663 00:27:27,870 --> 00:27:30,066 >> Binky: Hvorfor er ikke int kopi returnering 0x04? 664 00:27:30,066 --> 00:27:32,450 >> STUDENT: Hvorfor er det ikke [uhørligt]? 665 00:27:32,450 --> 00:27:35,530 >> Binky: For hvad er en værdi af PTR? 666 00:27:35,530 --> 00:27:37,394 667 00:27:37,394 --> 00:27:38,370 >> STUDENT: 0x04. 668 00:27:38,370 --> 00:27:38,960 >> Binky: 0x04. 669 00:27:38,960 --> 00:27:40,910 Hvad sker der, hvis du går til 0x04? 670 00:27:40,910 --> 00:27:41,620 Hvad får du? 671 00:27:41,620 --> 00:27:42,371 >> STUDENT: Åh, OK. 672 00:27:42,371 --> 00:27:42,995 Binky: Du ser? 673 00:27:42,995 --> 00:27:43,536 STUDENT: Ja. 674 00:27:43,536 --> 00:27:44,890 Binky: Så du får 5. 675 00:27:44,890 --> 00:27:49,170 Så kopi vil have 5, hvis det giver mening. 676 00:27:49,170 --> 00:27:49,809 Ja? 677 00:27:49,809 --> 00:27:52,803 >> STUDENT: Kunne vi have fået 5 i værdi feltet [uhørligt] 678 00:27:52,803 --> 00:27:55,300 hvis vi sætter int kopierer [uhørligt]. 679 00:27:55,300 --> 00:27:56,710 >> Binky: Int-- vi ville, ja. 680 00:27:56,710 --> 00:27:59,080 Det ville have gjort temmelig de samme ting. 681 00:27:59,080 --> 00:28:02,080 Men på denne måde, kan vi passere adresse til funktioner. 682 00:28:02,080 --> 00:28:05,050 Og det er det cool ting vi kommer til at gøre lige nu. 683 00:28:05,050 --> 00:28:06,770 684 00:28:06,770 --> 00:28:13,090 >> Så denne form for motion altid kommer op on-- meget normalt kommer op på quizzer. 685 00:28:13,090 --> 00:28:15,870 Så det er virkelig godt at forsøge at gøre den slags ting selv. 686 00:28:15,870 --> 00:28:21,210 Så prøv at holde styr på, hvad adressen er og vil værdierne af de variable 687 00:28:21,210 --> 00:28:22,620 er i hvert punkt. 688 00:28:22,620 --> 00:28:24,370 Så det er præcis hvad vi skal gøre. 689 00:28:24,370 --> 00:28:26,988 Her har vi trin et, to, tre, fire, fem. 690 00:28:26,988 --> 00:28:30,530 En, to, tre, fire, fem. 691 00:28:30,530 --> 00:28:33,330 Og vi kommer til at holde styr af værdierne af x og a. 692 00:28:33,330 --> 00:28:34,650 693 00:28:34,650 --> 00:28:40,530 >> Så hvad det gør, hvis dette er et buggy kode, vi forsøger at gøre til fem. 694 00:28:40,530 --> 00:28:43,610 Så vi forsøger at få i en variabel og ændre værdien til 5. 695 00:28:43,610 --> 00:28:44,630 696 00:28:44,630 --> 00:28:49,900 Og husk min analogi for at have en Box og rakte boksen til nogen? 697 00:28:49,900 --> 00:28:51,515 Så main har denne boks kaldet x. 698 00:28:51,515 --> 00:28:52,570 699 00:28:52,570 --> 00:28:54,170 Og det indeholder værdien 3. 700 00:28:54,170 --> 00:28:55,230 701 00:28:55,230 --> 00:28:57,455 Og jeg forsøger at aflevere dette felt for til fem. 702 00:28:57,455 --> 00:28:58,560 703 00:28:58,560 --> 00:29:01,510 >> Og jeg vil gerne fem til at ændre værdien af ​​denne boks til 5. 704 00:29:01,510 --> 00:29:03,080 705 00:29:03,080 --> 00:29:05,120 Og så vil jeg bare udskrive værdien af ​​x. 706 00:29:05,120 --> 00:29:06,475 707 00:29:06,475 --> 00:29:08,850 Dette er, hvad min function-- dette er, hvad jeg forsøger at gøre. 708 00:29:08,850 --> 00:29:12,450 Jeg forsøger bare at opdatere værdien af ​​x til 5. 709 00:29:12,450 --> 00:29:13,512 710 00:29:13,512 --> 00:29:14,970 Er det klart, hvad funktionen gør? 711 00:29:14,970 --> 00:29:16,210 712 00:29:16,210 --> 00:29:21,440 >> OK, så hvad vil være den værdierne af x og en ret her, 713 00:29:21,440 --> 00:29:27,734 den første linje, lige før den første line-- Jeg vil say-- af programmet? 714 00:29:27,734 --> 00:29:28,940 >> STUDENT: Sandsynligvis skrald. 715 00:29:28,940 --> 00:29:30,023 >> Binky: Just skrald stuff. 716 00:29:30,023 --> 00:29:32,590 Så jeg bare sætte N / A. Så vi ikke rigtig kender. 717 00:29:32,590 --> 00:29:37,400 Ligesom, gør en ikke engang eksisterer endnu, fordi vi ikke har kaldt til fem. 718 00:29:37,400 --> 00:29:38,980 Int a er ikke erklæret. 719 00:29:38,980 --> 00:29:40,030 720 00:29:40,030 --> 00:29:42,920 Og x vil eksistere her, men vi har ikke rigtig 721 00:29:42,920 --> 00:29:45,370 tildelt nogen værdi til det, så OK? 722 00:29:45,370 --> 00:29:46,570 723 00:29:46,570 --> 00:29:52,340 >> Og så, hvad der vil være den værdier af x og en i nummer to? 724 00:29:52,340 --> 00:29:54,530 725 00:29:54,530 --> 00:29:55,410 >> STUDENT: [uhørligt]. 726 00:29:55,410 --> 00:29:57,540 >> Binky: Så x vil være 3. 727 00:29:57,540 --> 00:29:59,650 Det er nemt, fordi vi tildele 3 til det. 728 00:29:59,650 --> 00:30:03,500 Og en endnu ikke eksisterer fordi en blot bor i til fem. 729 00:30:03,500 --> 00:30:05,800 Så jeg har tænkt mig at have 3 og ingenting. 730 00:30:05,800 --> 00:30:08,590 eller lignende skrald, uanset, egentlig ikke defineret. 731 00:30:08,590 --> 00:30:11,640 732 00:30:11,640 --> 00:30:13,140 Og nu, det er det vigtige linje. 733 00:30:13,140 --> 00:30:14,931 Her vil vi faktisk kalde til fem. 734 00:30:14,931 --> 00:30:17,140 735 00:30:17,140 --> 00:30:18,680 Og huske, hvad jeg sagde. 736 00:30:18,680 --> 00:30:20,240 Vi har aldrig passere i kassen. 737 00:30:20,240 --> 00:30:23,110 Vi skal bare kopiere værdien af boksen til en anden kasse. 738 00:30:23,110 --> 00:30:27,000 Det er alle computere har, kopiere ting fra ét sted til et andet. 739 00:30:27,000 --> 00:30:33,550 >> Så til fem, hvad det faktisk gør er den kopierer værdien af ​​x til en. 740 00:30:33,550 --> 00:30:35,130 Så, hvad der vil være her? 741 00:30:35,130 --> 00:30:36,210 Værdierne af x og a. 742 00:30:36,210 --> 00:30:38,670 743 00:30:38,670 --> 00:30:43,360 3 og 3, vil vi bare kopiere det over fra x til en. 744 00:30:43,360 --> 00:30:44,710 745 00:30:44,710 --> 00:30:45,320 Cool. 746 00:30:45,320 --> 00:30:46,140 >> Nu er vi her. 747 00:30:46,140 --> 00:30:47,610 748 00:30:47,610 --> 00:30:49,430 Og nu vil vi at opdatere et lig 5. 749 00:30:49,430 --> 00:30:50,900 750 00:30:50,900 --> 00:30:53,070 Hvad kommer til at ske på linje fire? 751 00:30:53,070 --> 00:30:55,120 752 00:30:55,120 --> 00:30:56,010 >> STUDENT: [uhørligt]. 753 00:30:56,010 --> 00:30:59,685 >> Binky: a bliver opdateret, men x ikke bliver opdateret. 754 00:30:59,685 --> 00:31:02,050 755 00:31:02,050 --> 00:31:05,250 Fordi x stadig bor i main, det er en helt anden blok af hukommelse. 756 00:31:05,250 --> 00:31:06,970 Det er en anden variabel. 757 00:31:06,970 --> 00:31:07,900 a er en anden variabel. 758 00:31:07,900 --> 00:31:10,000 De tilfældigvis har den samme værdi, fordi jeg 759 00:31:10,000 --> 00:31:13,980 kopieret over værdien af ​​x til en. 760 00:31:13,980 --> 00:31:20,070 Men nu når jeg gør et lig 5, det ikke rigtig påvirke x på nogen måde. 761 00:31:20,070 --> 00:31:21,450 Dette er den tricky del. 762 00:31:21,450 --> 00:31:23,380 Giver det mening for alle? 763 00:31:23,380 --> 00:31:24,093 Ja? 764 00:31:24,093 --> 00:31:25,717 STUDENT: Endnu et spørgsmål, har du 3. 765 00:31:25,717 --> 00:31:27,741 Hvorfor er en already-- åh, nej, det er 3. 766 00:31:27,741 --> 00:31:28,490 Beklager, pyt. 767 00:31:28,490 --> 00:31:29,310 Jeg læste 5. 768 00:31:29,310 --> 00:31:30,415 >> Binky: Ja, 3, 3. 769 00:31:30,415 --> 00:31:31,540 >> STUDENT: [uhørligt], ja. 770 00:31:31,540 --> 00:31:35,290 Binky: Og så skal vi tildele 5 til en, men ikke virkelig ændre x. 771 00:31:35,290 --> 00:31:36,369 Godt? 772 00:31:36,369 --> 00:31:36,910 STUDENT: Ja. 773 00:31:36,910 --> 00:31:37,410 Binky: Ja? 774 00:31:37,410 --> 00:31:42,330 Kan du forklare igen hvordan a bliver kopieret [uhørligt]? 775 00:31:42,330 --> 00:31:48,480 >> Binky: OK, så når du ringer til fem af x, og denne linje af kode. 776 00:31:48,480 --> 00:31:50,100 777 00:31:50,100 --> 00:31:52,340 til fem af x, hvad er x? 778 00:31:52,340 --> 00:31:55,160 779 00:31:55,160 --> 00:31:58,340 x er kun 3 på dette tidspunkt, right? 780 00:31:58,340 --> 00:32:03,320 Så du kan bare tænke på at sætte en 3 i her og glemme alt om x. 781 00:32:03,320 --> 00:32:04,410 Bare sætte en 3 her. 782 00:32:04,410 --> 00:32:10,880 Ligesom, vi kommer til at kopiere over værdi af x til int a, der er deroppe. 783 00:32:10,880 --> 00:32:12,310 784 00:32:12,310 --> 00:32:13,630 OK? 785 00:32:13,630 --> 00:32:14,780 >> Så værdien af ​​x er 3. 786 00:32:14,780 --> 00:32:17,680 Vi kommer til at kopiere 3 over til en. 787 00:32:17,680 --> 00:32:20,040 Og alt dette andet blok af hukommelse, denne anden variabel 788 00:32:20,040 --> 00:32:22,640 kaldes en skal 3, samt. 789 00:32:22,640 --> 00:32:23,580 Giver det mening? 790 00:32:23,580 --> 00:32:24,780 791 00:32:24,780 --> 00:32:25,794 Ja? 792 00:32:25,794 --> 00:32:31,008 >> STUDENT: Hvis du giver til fem ligesom have det som heltal x i stedet for en, 793 00:32:31,008 --> 00:32:32,910 ville det ordne alt? 794 00:32:32,910 --> 00:32:36,290 >> Binky: Hvis det er en integer-- nej, der ikke ville ordne alt. 795 00:32:36,290 --> 00:32:37,590 Så det er et meget godt spørgsmål. 796 00:32:37,590 --> 00:32:40,480 Det er virkelig ligegyldigt hvad du kalder disse variabler. 797 00:32:40,480 --> 00:32:44,510 Igen vil det være et spørgsmål om anvendelsesområdet, fordi de ikke er det samme x. 798 00:32:44,510 --> 00:32:46,526 De er fuldstændigt forskellige rum i hukommelsen. 799 00:32:46,526 --> 00:32:47,400 STUDENT: [uhørligt]. 800 00:32:47,400 --> 00:32:49,020 Binky: Så det gør ikke rigtig ligegyldigt hvad du kalder dem. 801 00:32:49,020 --> 00:32:50,480 Det betyder ikke fastsætte ting, OK? 802 00:32:50,480 --> 00:32:53,390 803 00:32:53,390 --> 00:32:54,430 Flere spørgsmål? 804 00:32:54,430 --> 00:32:55,762 Ja? 805 00:32:55,762 --> 00:32:58,498 >> STUDENT: Hvordan er det tilbage til nummer fem [uhørligt]? 806 00:32:58,498 --> 00:32:59,661 807 00:32:59,661 --> 00:33:01,160 Binky: OK, har vi ikke gjort det endnu. 808 00:33:01,160 --> 00:33:03,432 Lad os gå til nummer fem, da. 809 00:33:03,432 --> 00:33:04,650 >> STUDENT: [uhørligt]? 810 00:33:04,650 --> 00:33:05,565 >> Binky: Hvad? 811 00:33:05,565 --> 00:33:08,179 >> STUDENT: Har du et afkast på alle? 812 00:33:08,179 --> 00:33:09,970 Binky: Vi har ikke et afkast, ikke af main. 813 00:33:09,970 --> 00:33:12,940 Men vigtigste returnerer 0 automatisk Hvis du ikke returnerer noget. 814 00:33:12,940 --> 00:33:14,400 815 00:33:14,400 --> 00:33:15,188 Ja? 816 00:33:15,188 --> 00:33:22,658 >> STUDENT: Kan du gøre main-- eller kan du gøre til fem tilbagevenden a? 817 00:33:22,658 --> 00:33:24,170 818 00:33:24,170 --> 00:33:27,990 >> Binky: Vi kunne have til fem returnere en, ja. 819 00:33:27,990 --> 00:33:32,527 Men så ville vi nødt til at tildele x er det afkast værdi til fem, 820 00:33:32,527 --> 00:33:34,360 hvilket ville være en smule andet program. 821 00:33:34,360 --> 00:33:35,440 Det ville fungere. 822 00:33:35,440 --> 00:33:38,730 Men hvad vi ønsker at gøre, er, hvad der er kaldet ændre noget på plads. 823 00:33:38,730 --> 00:33:41,690 Så vi ønsker rent faktisk at ændre den kasse og ikke bekymre sig 824 00:33:41,690 --> 00:33:44,390 om at skulle vende tilbage værdier eller noget. 825 00:33:44,390 --> 00:33:44,890 OK? 826 00:33:44,890 --> 00:33:46,490 827 00:33:46,490 --> 00:33:50,150 >> Det er ligesom swap-funktion David viste i foredrag, medmindre jeg 828 00:33:50,150 --> 00:33:51,740 kun beskæftiger sig med én variabel. 829 00:33:51,740 --> 00:33:55,960 Og han brugte to, så int a og b og derefter midlertidig variabel og whatnot. 830 00:33:55,960 --> 00:33:57,020 OK? 831 00:33:57,020 --> 00:33:58,070 Så hvad er den sidste linje? 832 00:33:58,070 --> 00:34:04,400 Efter at fem afkast, er det blot en kommer til at gå væk. 833 00:34:04,400 --> 00:34:06,120 834 00:34:06,120 --> 00:34:10,179 Vi vil ikke have en længere, og kun x vil stadig leve på. 835 00:34:10,179 --> 00:34:12,130 >> Og gæt hvad? x ikke ændre sin værdi, 836 00:34:12,130 --> 00:34:15,520 trods alt, fordi vi er kun at ændre værdien af ​​a. 837 00:34:15,520 --> 00:34:17,370 Det er derfor x var 3 i hele. 838 00:34:17,370 --> 00:34:17,870 OK? 839 00:34:17,870 --> 00:34:20,195 840 00:34:20,195 --> 00:34:21,130 Godt. 841 00:34:21,130 --> 00:34:23,560 Så dette program ikke opnå, hvad vi ønskede. 842 00:34:23,560 --> 00:34:24,760 Lad os ordne det. 843 00:34:24,760 --> 00:34:27,440 >> Og fix program er ved hjælp af pointere. 844 00:34:27,440 --> 00:34:32,300 Hvad vi gør, er at vi har tre linjer, der er forskellige. 845 00:34:32,300 --> 00:34:34,020 De første er vi ikke passerer x. 846 00:34:34,020 --> 00:34:35,535 Vi passerer adressen på x. 847 00:34:35,535 --> 00:34:37,330 848 00:34:37,330 --> 00:34:40,876 Så i stedet for at kopiere mere end værdien af ​​feltet 849 00:34:40,876 --> 00:34:42,500 Jeg er stadig kommer til at kopiere over noget. 850 00:34:42,500 --> 00:34:45,380 Men jeg kopierer løbet adressen af ​​kassen. 851 00:34:45,380 --> 00:34:48,780 >> Så hvis jeg passerer adressen på den boksen til til fem, derefter til fem 852 00:34:48,780 --> 00:34:51,560 vil være i stand til at finde, at der i hukommelse og ændre dens værdi. 853 00:34:51,560 --> 00:34:53,980 854 00:34:53,980 --> 00:34:59,580 >> Så og så deroppe, jeg har at en ikke er en int længere. 855 00:34:59,580 --> 00:35:00,882 a er en int stjerne. 856 00:35:00,882 --> 00:35:02,090 Det er en pointer til et heltal. 857 00:35:02,090 --> 00:35:03,790 858 00:35:03,790 --> 00:35:07,310 Og så, da jeg passerer den adresse her, og så hvad jeg gør 859 00:35:07,310 --> 00:35:10,530 er ikke lig med 5, fordi en holder en adresse. 860 00:35:10,530 --> 00:35:16,710 Så hvad jeg ønsker at gøre, er at gå der og opdatere indholdet af denne adresse 861 00:35:16,710 --> 00:35:18,305 med 5. 862 00:35:18,305 --> 00:35:21,130 >> OK, så lad os gå igennem alle linier én efter én. 863 00:35:21,130 --> 00:35:22,410 864 00:35:22,410 --> 00:35:26,024 Så når jeg starter her, jeg stadig har N / A, N / A, N / A 865 00:35:26,024 --> 00:35:28,440 for alt i den første linje, fordi jeg har ikke rigtig 866 00:35:28,440 --> 00:35:29,390 erklæret ting endnu. 867 00:35:29,390 --> 00:35:30,980 868 00:35:30,980 --> 00:35:35,110 Og derefter linje to, jeg har x lig med 3. 869 00:35:35,110 --> 00:35:38,020 En int stjerne a ikke eksisterer, samme som før. 870 00:35:38,020 --> 00:35:39,160 871 00:35:39,160 --> 00:35:40,640 >> Nu bliver det interessant. 872 00:35:40,640 --> 00:35:42,300 Så jeg har tænkt mig at passere. 873 00:35:42,300 --> 00:35:45,720 Og lad os antage, at adressen af x er 12 i hexadecimal. 874 00:35:45,720 --> 00:35:46,880 875 00:35:46,880 --> 00:35:48,420 Lad os bare antage dette. 876 00:35:48,420 --> 00:35:49,221 Jeg gjorde det op. 877 00:35:49,221 --> 00:35:51,680 878 00:35:51,680 --> 00:35:53,500 Så hvad skal jeg passerer her er en til fem. 879 00:35:53,500 --> 00:35:54,460 Jeg passerer 12. 880 00:35:54,460 --> 00:35:56,390 881 00:35:56,390 --> 00:35:58,610 >> Så hvad værdi betyder en have? 882 00:35:58,610 --> 00:36:04,785 883 00:36:04,785 --> 00:36:06,210 >> STUDENT: [uhørligt]. 884 00:36:06,210 --> 00:36:06,950 >> Binky: Beklager? 885 00:36:06,950 --> 00:36:08,145 >> STUDENT: [uhørligt]. 886 00:36:08,145 --> 00:36:10,520 Binky: Ja, ligesom, at lad os antage, at vi er her, nu. 887 00:36:10,520 --> 00:36:11,540 888 00:36:11,540 --> 00:36:12,040 Jeg spørger. 889 00:36:12,040 --> 00:36:12,915 >> STUDENT: [uhørligt]. 890 00:36:12,915 --> 00:36:13,590 891 00:36:13,590 --> 00:36:14,890 >> Binky: Det er blevet igangsat. 892 00:36:14,890 --> 00:36:15,860 >> STUDENT: [uhørligt]. 893 00:36:15,860 --> 00:36:17,985 Binky: Fordi vi passeret noget til funktionen. 894 00:36:17,985 --> 00:36:19,431 895 00:36:19,431 --> 00:36:19,930 Ja? 896 00:36:19,930 --> 00:36:20,899 >> STUDENT: Adresse af x. 897 00:36:20,899 --> 00:36:22,690 Binky: Det kommer til at har adressen af ​​x. 898 00:36:22,690 --> 00:36:25,800 Og adressen på x er 12, godt. 899 00:36:25,800 --> 00:36:30,990 Så x vil være 3, fordi vi har ikke rigtig ændret sig x endnu. 900 00:36:30,990 --> 00:36:36,700 Og så en vil være 0x12, så adressen på x, fordi det er 901 00:36:36,700 --> 00:36:38,840 hvad vi videre til til fem. 902 00:36:38,840 --> 00:36:40,940 >> Og hvad sker der så hvis vi forsøger at gå der? 903 00:36:40,940 --> 00:36:42,145 Hvad skal vi finde? 904 00:36:42,145 --> 00:36:47,120 Så hvis du prøver at udskrive stjerne en, vi kommer til at følge denne adresse 905 00:36:47,120 --> 00:36:48,620 og få værdien inde. 906 00:36:48,620 --> 00:36:50,470 Og værdien er lige den samme værdi som x 907 00:36:50,470 --> 00:36:53,980 har fordi det er den adresse x, som vil være 3. 908 00:36:53,980 --> 00:36:55,440 909 00:36:55,440 --> 00:36:56,930 Er vi gode? 910 00:36:56,930 --> 00:36:59,990 >> OK, og så nu, vi faktisk derned. 911 00:36:59,990 --> 00:37:05,510 Og vi opdaterer uanset er i denne adresse 12. 912 00:37:05,510 --> 00:37:07,390 Vi gør det 5. 913 00:37:07,390 --> 00:37:10,560 Så nu både x- og stjerne a er 5. 914 00:37:10,560 --> 00:37:13,170 915 00:37:13,170 --> 00:37:13,680 >> Hvorfor er det? 916 00:37:13,680 --> 00:37:17,070 Fordi adressen på x er 12. 917 00:37:17,070 --> 00:37:20,920 Og a har også 12 som sin værdi. 918 00:37:20,920 --> 00:37:23,780 Så hvis vi følger 12, er vi bare at finde x. 919 00:37:23,780 --> 00:37:27,400 Så uanset hvad vi gør med stjerne en kommer til at ske 920 00:37:27,400 --> 00:37:30,790 til x, fordi en indeholder adressen af ​​x. 921 00:37:30,790 --> 00:37:31,918 922 00:37:31,918 --> 00:37:32,418 OK? 923 00:37:32,418 --> 00:37:34,090 924 00:37:34,090 --> 00:37:37,750 >> Og det er ligesom kernen i fix. 925 00:37:37,750 --> 00:37:41,500 Så nu er vi i stand til, fra til fem, faktisk 926 00:37:41,500 --> 00:37:43,840 access memory, der levede i main. 927 00:37:43,840 --> 00:37:47,980 Så denne hukommelse ikke lever i til fem, som før, denne adresse 12. 928 00:37:47,980 --> 00:37:50,980 Og vi var i stand til at gå der og ændre værdien til 5. 929 00:37:50,980 --> 00:37:53,990 >> Og så når vi vender tilbage, vi glemme alt om en. 930 00:37:53,990 --> 00:37:55,720 Vi glemmer stjerne a. 931 00:37:55,720 --> 00:37:57,020 Og x er stadig fem. 932 00:37:57,020 --> 00:37:58,327 933 00:37:58,327 --> 00:38:00,160 Så hvis du ønsker at gennemføre en swap-funktion, 934 00:38:00,160 --> 00:38:05,010 ville du bare gøre præcis de samme ting, medmindre du har brug for at int stjerner her, 935 00:38:05,010 --> 00:38:06,140 og så videre og så videre. 936 00:38:06,140 --> 00:38:06,976 OK? 937 00:38:06,976 --> 00:38:07,475 Er vi gode? 938 00:38:07,475 --> 00:38:09,860 939 00:38:09,860 --> 00:38:10,610 Cool. 940 00:38:10,610 --> 00:38:12,410 >> Så pointer aritmetik. 941 00:38:12,410 --> 00:38:13,960 Dette er en smule vanskelige emne. 942 00:38:13,960 --> 00:38:16,554 Så det viser sig, at pointers er blot heltal. 943 00:38:16,554 --> 00:38:17,970 Du kan tænke på dem som heltal. 944 00:38:17,970 --> 00:38:21,080 Fordi i hukommelsen, du har ligesom hukommelse adresse nul, en, to, tre, 945 00:38:21,080 --> 00:38:21,900 fire, fem. 946 00:38:21,900 --> 00:38:23,900 Så vi kan opsummere hukommelse adresser. 947 00:38:23,900 --> 00:38:27,230 >> Og det er normalt, hvad du gør, når du er i og array, for eksempel. 948 00:38:27,230 --> 00:38:30,540 Et array er ligesom en sammenhængende blok af hukommelse, af partier af tegn, 949 00:38:30,540 --> 00:38:31,840 for eksempel masser af int'er. 950 00:38:31,840 --> 00:38:34,420 Så hvis du ønsker at gå til anden int eller tredje int, 951 00:38:34,420 --> 00:38:37,830 du kan bare opsummere noget til den første adresse, og du vil komme dertil. 952 00:38:37,830 --> 00:38:39,620 Så dette er virkelig nyttigt for. 953 00:38:39,620 --> 00:38:41,850 >> Og de ting til at holde i tankerne, er imidlertid 954 00:38:41,850 --> 00:38:45,140 at det ikke er ligesom normal aritmetik i den forstand, 955 00:38:45,140 --> 00:38:50,304 at hvis du beskæftiger sig med, siger, en int stjerne, og du tilføje 1 til det, 956 00:38:50,304 --> 00:38:52,220 så du ikke kommer at tilføje 1 til den adresse, 957 00:38:52,220 --> 00:38:53,950 du vil tilføje 4 til adressen. 958 00:38:53,950 --> 00:38:55,030 959 00:38:55,030 --> 00:38:56,670 Fordi en int er 4 byte. 960 00:38:56,670 --> 00:38:57,720 961 00:38:57,720 --> 00:38:59,540 >> Så dette er ligesom gå på et array. 962 00:38:59,540 --> 00:39:05,260 Hvis vi har en bred vifte af partier af int'er og så vi forsøger at gå til den anden, 963 00:39:05,260 --> 00:39:08,790 Det er dybest set bare summen af adresse på den første plus 1. 964 00:39:08,790 --> 00:39:10,040 965 00:39:10,040 --> 00:39:13,425 Men der vil ikke være-- bare lad os sige at adressen på den første er 4. 966 00:39:13,425 --> 00:39:14,560 967 00:39:14,560 --> 00:39:16,250 Her, i dette tilfælde. 968 00:39:16,250 --> 00:39:19,780 969 00:39:19,780 --> 00:39:22,850 Og hvis vi opsummere, så dette er, hvad der sker. 970 00:39:22,850 --> 00:39:23,530 Vi har en int. 971 00:39:23,530 --> 00:39:25,640 Int x lig 5. 972 00:39:25,640 --> 00:39:26,950 X har en værdi på 5. 973 00:39:26,950 --> 00:39:31,240 Og vi initialisere denne pointer, int y int stjerne y lig adressen på x. 974 00:39:31,240 --> 00:39:33,660 >> Lad os antage, at adressen på x er 4. 975 00:39:33,660 --> 00:39:36,960 Hvad kommer til at ske nu, hvis jeg sum tilføje 1 til y? 976 00:39:36,960 --> 00:39:39,110 977 00:39:39,110 --> 00:39:44,790 Det kommer til at faktisk sum 4 i stedet for blot en. 978 00:39:44,790 --> 00:39:50,920 Så jeg tilføje et 1, men det faktisk tilsat 4, fordi computerens smart. 979 00:39:50,920 --> 00:39:55,275 Så det kommer til at faktisk tilføje ved I tider størrelsen af ​​den type af markøren. 980 00:39:55,275 --> 00:39:56,340 981 00:39:56,340 --> 00:39:56,840 OK? 982 00:39:56,840 --> 00:39:58,030 983 00:39:58,030 --> 00:40:02,440 >> Så hvis det var en char, for eksempel, Hvis dette var en char stjerne y, 984 00:40:02,440 --> 00:40:07,141 og hvis vi tilsat 1 så ville være 5, fordi char er 1 byte lang. 985 00:40:07,141 --> 00:40:07,640 Godt? 986 00:40:07,640 --> 00:40:10,560 987 00:40:10,560 --> 00:40:13,190 >> Og endelig fik vi til pointere og arrays. 988 00:40:13,190 --> 00:40:16,451 Det viser sig, at hver gang du har at gøre med et array, 989 00:40:16,451 --> 00:40:18,075 du faktisk beskæftiger sig med en pegepind. 990 00:40:18,075 --> 00:40:19,720 991 00:40:19,720 --> 00:40:24,777 Den meget flot begrebsmæssige grund til dette er, at arrays er meget store. 992 00:40:24,777 --> 00:40:27,360 Så husk, at jeg sagde, at hver gang du passerer ting omkring, 993 00:40:27,360 --> 00:40:29,097 du kopiere alt. 994 00:40:29,097 --> 00:40:31,180 Så hvis du har et array det er virkelig, virkelig stor, 995 00:40:31,180 --> 00:40:32,990 du virkelig ikke ønsker at kopiere alt hver gang 996 00:40:32,990 --> 00:40:35,710 du passerer den rundt til en anden funktion, fordi det er bare 997 00:40:35,710 --> 00:40:37,190 massive mængder af arbejde. 998 00:40:37,190 --> 00:40:39,710 Så hvad du skal gøre er bare fortid adressen på den første byte. 999 00:40:39,710 --> 00:40:40,969 1000 00:40:40,969 --> 00:40:44,010 Og så funktionen vil have adgang til alle elementer i det array. 1001 00:40:44,010 --> 00:40:48,670 Så du har bestået array ved dens adresse, så adressen på den første byte. 1002 00:40:48,670 --> 00:40:53,010 >> Så hvis vi erklærer int matrix 3, her, vi kender 1003 00:40:53,010 --> 00:40:57,470 hvordan man kan få adgang til den første element ved hjælp af beslag notation. 1004 00:40:57,470 --> 00:41:02,410 Hvis du kan huske beslaget notation, matrix beslag 0 er lig med 1. 1005 00:41:02,410 --> 00:41:06,330 Nå, ville det være præcis den samme som bare gå der og sætte 1. 1006 00:41:06,330 --> 00:41:07,370 1007 00:41:07,370 --> 00:41:09,110 OK, er nøjagtig det samme. 1008 00:41:09,110 --> 00:41:13,010 Så beslaget notation her vil være den samme som denne linje. 1009 00:41:13,010 --> 00:41:18,600 >> Og gæt hvad beslaget notation for opstilling beslag 1 vil være? 1010 00:41:18,600 --> 00:41:20,440 Det vil bare være det samme som dette. 1011 00:41:20,440 --> 00:41:22,500 Så tilføje en til array. 1012 00:41:22,500 --> 00:41:24,370 Flyt en sammen i hukommelsen. 1013 00:41:24,370 --> 00:41:26,310 Derned, og sætte en 2. 1014 00:41:26,310 --> 00:41:28,050 1015 00:41:28,050 --> 00:41:28,579 OK? 1016 00:41:28,579 --> 00:41:29,870 Og denne linje er den samme ting. 1017 00:41:29,870 --> 00:41:34,860 Vi ønsker at gå til den tredje kasse, så matrix plus 2. 1018 00:41:34,860 --> 00:41:37,465 Derned, og sætte en 3. 1019 00:41:37,465 --> 00:41:39,340 Så i hukommelsen, hvad er kommer til at ske, er vi er 1020 00:41:39,340 --> 00:41:44,400 vil have 1, 2 og 3 som tre elementer i dette array. 1021 00:41:44,400 --> 00:41:46,970 >> Vi kunne have gjort dette ved hjælp vores velkendte beslag notation. 1022 00:41:46,970 --> 00:41:49,410 Jeg vil bare have jer til at vide at de er de samme ting. 1023 00:41:49,410 --> 00:41:50,530 1024 00:41:50,530 --> 00:41:53,010 OK, spørgsmål om dette? 1025 00:41:53,010 --> 00:41:56,115 1026 00:41:56,115 --> 00:41:56,615 Nice. 1027 00:41:56,615 --> 00:41:57,990 1028 00:41:57,990 --> 00:41:59,880 Nu, jeg har tænkt mig at aflevere det over til Hannah, 1029 00:41:59,880 --> 00:42:00,330 >> HANNAH: Yay, Yee-haw. 1030 00:42:00,330 --> 00:42:02,246 >> Binky: At tale om hukommelse og artiklen stuff. 1031 00:42:02,246 --> 00:42:06,554 [Applaus] 1032 00:42:06,554 --> 00:42:10,150 >> HANNAH: Hej, cool, så vi er kommer til at snakke lidt mere 1033 00:42:10,150 --> 00:42:13,090 om hukommelse, som vi bare adresseres via pointere. 1034 00:42:13,090 --> 00:42:16,060 Så der er to vigtigste dele af hukommelse, som vi er interesseret med. 1035 00:42:16,060 --> 00:42:18,830 Vi har stakken, der vokser op i bunden, og bunke, som 1036 00:42:18,830 --> 00:42:20,600 går ned fra toppen. 1037 00:42:20,600 --> 00:42:24,690 Og stablen vil holde alle vores instansvariabler. 1038 00:42:24,690 --> 00:42:28,860 Så hver opkald til en funktion får sin egen lille ramme på stakken. 1039 00:42:28,860 --> 00:42:32,160 Så da Gabe nævnte tidligere, hvis vi kalder funktionen igen og igen, 1040 00:42:32,160 --> 00:42:34,180 vi kommer til at stable ting op på stakken. 1041 00:42:34,180 --> 00:42:35,220 1042 00:42:35,220 --> 00:42:38,570 >> Og på samme måde, den bunke, som begynder ved toppen 1043 00:42:38,570 --> 00:42:42,660 kommer til at holde alt hukommelse at vi dynamisk tildeles. 1044 00:42:42,660 --> 00:42:45,110 Og så vi dynamisk allokere hukommelse, 1045 00:42:45,110 --> 00:42:47,580 dette vil komme ned mod bunden. 1046 00:42:47,580 --> 00:42:51,340 Par ting at være opmærksom på, når vi bruger stakken og den bunke, 1047 00:42:51,340 --> 00:42:55,200 med stakken, hvis vi har for many-- lad os say-- rekursive kald, 1048 00:42:55,200 --> 00:42:58,392 og vi kalder en funktion igen, og igen og igen og igen, 1049 00:42:58,392 --> 00:43:00,350 og det er at stable op, stabling op, stabling op. 1050 00:43:00,350 --> 00:43:01,570 Og det kommer til at gå ned i den bunke. 1051 00:43:01,570 --> 00:43:03,040 Vi kommer til at løbe tør for hukommelse. 1052 00:43:03,040 --> 00:43:05,100 Det kommer til at forårsage en problem for computeren. 1053 00:43:05,100 --> 00:43:06,770 Og det hedder stakken overløb. 1054 00:43:06,770 --> 00:43:09,728 Så det er helt sikkert noget, du bør være opmærksom på og forsøge at undgå. 1055 00:43:09,728 --> 00:43:10,228 1056 00:43:10,228 --> 00:43:14,050 Og den bunke, nødt til at huske ikke at uheld siver hukommelse. 1057 00:43:14,050 --> 00:43:17,950 Hver gang du bruger malloc, ikke glemmer at frigøre denne hukommelse. 1058 00:43:17,950 --> 00:43:20,040 Ellers vil det bare være på den bunke spildt, 1059 00:43:20,040 --> 00:43:23,230 og computeren vil ikke vide, at Det er gratis at bruge denne hukommelse. 1060 00:43:23,230 --> 00:43:25,810 Så dem er et par ting at være meget forsigtig med, når 1061 00:43:25,810 --> 00:43:28,580 du har at gøre med stakken og den bunke. 1062 00:43:28,580 --> 00:43:30,412 Eventuelle spørgsmål med dette? 1063 00:43:30,412 --> 00:43:31,304 Awesome. 1064 00:43:31,304 --> 00:43:31,900 >> OK, cool. 1065 00:43:31,900 --> 00:43:32,940 1066 00:43:32,940 --> 00:43:36,810 Så denne type har den samme idé som stack overflow, hvor 1067 00:43:36,810 --> 00:43:39,850 vi går ud over grænserne for, hvad hukommelse 1068 00:43:39,850 --> 00:43:41,960 er vi formodes at være i stand til at bruge. 1069 00:43:41,960 --> 00:43:45,077 Så tage, for eksempel en buffer, eller du kunne bare tænke på det som et array. 1070 00:43:45,077 --> 00:43:47,660 Og vi sagde, OK, vil vi skabe denne nice little array. 1071 00:43:47,660 --> 00:43:49,140 Det kommer til at være en streng. 1072 00:43:49,140 --> 00:43:50,630 Eller det vil gemme tegn. 1073 00:43:50,630 --> 00:43:51,720 Og det bare at gå at sige hej. 1074 00:43:51,720 --> 00:43:52,678 Og det er ubestemt. 1075 00:43:52,678 --> 00:43:53,990 Det er det. 1076 00:43:53,990 --> 00:43:58,240 >> Men hvis jeg var nogen onde og ønskede at gøre noget dårligt med dette array, hvad 1077 00:43:58,240 --> 00:44:02,310 Jeg kunne gøre, er at forsøge at skrive forbi enden af ​​strengen. 1078 00:44:02,310 --> 00:44:04,490 Og som du kan se, hvis Jeg skriver langt nok, 1079 00:44:04,490 --> 00:44:06,980 Jeg kan faktisk påvirke afsenderadressen. 1080 00:44:06,980 --> 00:44:09,530 Og hvis jeg begynder at påvirke afsenderadressen, 1081 00:44:09,530 --> 00:44:11,730 Jeg indflydelse på, hvordan programmet rent faktisk kører. 1082 00:44:11,730 --> 00:44:15,900 Og i stedet for at vende tilbage, du ved, en lykkelig streng som hej, jeg 1083 00:44:15,900 --> 00:44:19,460 kunne gøre noget dårligt, ligesom at gå til et andet sted på din computer, stadig 1084 00:44:19,460 --> 00:44:22,146 hukommelse, ændre det, hvad jeg ønsker at gøre. 1085 00:44:22,146 --> 00:44:25,020 Så det er, hvad dette ville se ud er, hvis jeg bare slags fyldte det op 1086 00:44:25,020 --> 00:44:27,400 med tilfældig skrald værdi, i dette tilfælde blot en. 1087 00:44:27,400 --> 00:44:30,490 Og da jeg faktisk fik til hukommelsen adresse, 1088 00:44:30,490 --> 00:44:33,740 Jeg begyndte at fylde det med noget der gjorde, hvad jeg ønskede at gøre. 1089 00:44:33,740 --> 00:44:34,952 1090 00:44:34,952 --> 00:44:36,410 Eventuelle spørgsmål med buffer overflow? 1091 00:44:36,410 --> 00:44:38,450 1092 00:44:38,450 --> 00:44:40,730 Awesome, flyvende ret gennem denne stuff. 1093 00:44:40,730 --> 00:44:43,530 >> OK, så vi snakkede en masse om pointer med Gabe. 1094 00:44:43,530 --> 00:44:45,790 Hvordan får vi rent faktisk får en pointer? 1095 00:44:45,790 --> 00:44:48,070 Hvordan får vi en adresse i hukommelsen? 1096 00:44:48,070 --> 00:44:51,040 Nå, kan vi bruge denne nice funktionskald malloc, som 1097 00:44:51,040 --> 00:44:53,370 kommer til at få et lille stykke af hukommelse, 1098 00:44:53,370 --> 00:44:55,480 specifikt i bunke, som vi diskuterede, 1099 00:44:55,480 --> 00:44:59,780 og det kommer til at give dig tilbage en pointer til den pågældende adresse i hukommelsen. 1100 00:44:59,780 --> 00:45:01,950 Og argumentet om, at vi nødt til at give til malloc 1101 00:45:01,950 --> 00:45:04,280 er, hvor meget plads i hukommelsen, vi ønsker. 1102 00:45:04,280 --> 00:45:06,100 >> Så du kan se størrelsen i byte. 1103 00:45:06,100 --> 00:45:08,670 Lad os sige, for eksempel, eller faktisk, i dette eksempel, 1104 00:45:08,670 --> 00:45:12,040 vi afsætter nok plads til 10 heltal. 1105 00:45:12,040 --> 00:45:15,640 Så sandsynligvis, hvad vi vil have at sætte her er en matrix af 10 heltal. 1106 00:45:15,640 --> 00:45:19,641 Så vi giver den størrelse ints, som vi lærte var, hvor mange bytes? 1107 00:45:19,641 --> 00:45:20,140 STUDENT: 4. 1108 00:45:20,140 --> 00:45:22,920 HANNAH: 4, smuk, og vi ønsker 10 af dem i en række, 1109 00:45:22,920 --> 00:45:28,050 så vi har plads nok til at gemme alle 10 heltal, i dette tilfælde. 1110 00:45:28,050 --> 00:45:31,290 Noget super vigtigt, enhver tid du kalder malloc, 1111 00:45:31,290 --> 00:45:32,880 du er nødt til at tjekke for null. 1112 00:45:32,880 --> 00:45:37,310 Hvis du ikke tjekke for null, godt, malloc, hvis den løber tør for plads 1113 00:45:37,310 --> 00:45:40,400 og kan ikke længere give dig nogen mere hukommelse, vil den vende tilbage null. 1114 00:45:40,400 --> 00:45:42,060 1115 00:45:42,060 --> 00:45:45,630 Så hvis du ikke kontrollere, malloc kan returnere null. 1116 00:45:45,630 --> 00:45:51,265 Og derefter, hvis vi forsøger at dereference en null pointer, 1117 00:45:51,265 --> 00:45:54,960 vi kommer til at få en segmentering fejl, som vi vil tale om lige nu. 1118 00:45:54,960 --> 00:45:56,150 1119 00:45:56,150 --> 00:45:56,650 Awesome. 1120 00:45:56,650 --> 00:45:58,300 >> OK, spørgsmål med malloc? 1121 00:45:58,300 --> 00:46:00,044 1122 00:46:00,044 --> 00:46:00,544 Ja? 1123 00:46:00,544 --> 00:46:05,460 >> STUDENT: Er tjekker null [Uhørligt] ikke gøre det på den quiz? 1124 00:46:05,460 --> 00:46:08,100 >> HANNAH: Sure, var spørgsmålet betyder det matter-- på quizzen, 1125 00:46:08,100 --> 00:46:10,420 vil du få point fra, hvis behøver du ikke tjekke for null? 1126 00:46:10,420 --> 00:46:12,794 Ja, du vil få point fra hvis du ikke tjekke for null. 1127 00:46:12,794 --> 00:46:16,030 Hver gang du kalder malloc, både på quiz og dine psets og i det virkelige liv, 1128 00:46:16,030 --> 00:46:17,155 du er nødt til at tjekke for null. 1129 00:46:17,155 --> 00:46:18,330 Godt spørgsmål. 1130 00:46:18,330 --> 00:46:19,689 >> GABE: Hvad hvis jeg ikke slippe? 1131 00:46:19,689 --> 00:46:21,730 HANNAH: Gabe ønsker at vide hvad hvis vi ikke gør fri. 1132 00:46:21,730 --> 00:46:25,030 Så vil vi have en hukommelseslækage i vores bunke. 1133 00:46:25,030 --> 00:46:26,140 Andre spørgsmål? 1134 00:46:26,140 --> 00:46:27,550 Ja? 1135 00:46:27,550 --> 00:46:30,120 >> STUDENT: Kan du-- gå over buffer overflow virkelig hurtig igen? 1136 00:46:30,120 --> 00:46:30,530 >> HANNAH: Selvfølgelig. 1137 00:46:30,530 --> 00:46:33,071 Spørgsmålet var, kan vi gå over buffer overflow virkelig hurtig. 1138 00:46:33,071 --> 00:46:35,050 Lad os gå tilbage til de dias. 1139 00:46:35,050 --> 00:46:37,430 Så en buffer, kan du bare Tænk på det som et array, right? 1140 00:46:37,430 --> 00:46:39,360 Du har noget plads i hukommelsen. 1141 00:46:39,360 --> 00:46:43,580 Og når vi først skabe vores array, vi ved arrays har faste størrelse, 1142 00:46:43,580 --> 00:46:45,470 eller vores buffer har en fast størrelse. 1143 00:46:45,470 --> 00:46:51,360 >> Så lad os sige i denne sag, har vi netop plads nok til at skrive strengen hej. 1144 00:46:51,360 --> 00:46:57,340 Hvis vi går forbi den bundne, hvis vi går forbi hvad vores matrix vi sagde, at det kunne holde, 1145 00:46:57,340 --> 00:46:59,780 vi kunne faktisk begynde skriftligt i hukommelsen 1146 00:46:59,780 --> 00:47:01,780 at computeren ikke vil have os til at skrive ind. 1147 00:47:01,780 --> 00:47:02,810 1148 00:47:02,810 --> 00:47:05,580 Og specielt hvis vi rammer noget som afkastet 1149 00:47:05,580 --> 00:47:08,700 adresse på den funktion, som, som enhver anden del af hukommelsen, 1150 00:47:08,700 --> 00:47:11,420 er bare et eller andet sted i din computer, kan du faktisk 1151 00:47:11,420 --> 00:47:14,080 ændre det og begynder at gøre onde ting. 1152 00:47:14,080 --> 00:47:15,272 Besvare dit spørgsmål? 1153 00:47:15,272 --> 00:47:16,230 Awesome, noget andet? 1154 00:47:16,230 --> 00:47:17,466 Ja? 1155 00:47:17,466 --> 00:47:21,948 >> STUDENT: Så stak [uhørligt], du sagde gå fra bunden går op. 1156 00:47:21,948 --> 00:47:25,434 Inden stack rækkevidde, gør hukommelsen gå fra lignende, 1157 00:47:25,434 --> 00:47:27,230 top down vedrørende hver pause? 1158 00:47:27,230 --> 00:47:28,646 1159 00:47:28,646 --> 00:47:32,100 >> HANNAH: Hvordan du-- udskyde til Rob på denne ene. 1160 00:47:32,100 --> 00:47:35,370 1161 00:47:35,370 --> 00:47:38,213 >> ROB: Den vil vokse i samme retning som stablen vokser. 1162 00:47:38,213 --> 00:47:38,712 HANNAH: OK. 1163 00:47:38,712 --> 00:47:40,967 ROB: Så jeg bliver forvirret. 1164 00:47:40,967 --> 00:47:42,331 Dette vil være abstraktion. 1165 00:47:42,331 --> 00:47:42,831 HANNAH: OK. 1166 00:47:42,831 --> 00:47:44,000 ROB: Dette er korrekt. 1167 00:47:44,000 --> 00:47:49,420 Så hvis stakken vokser op, og derefter generally-- det 1168 00:47:49,420 --> 00:47:52,380 behøver ikke at være sådan. men du kan erklære int x. 1169 00:47:52,380 --> 00:47:54,120 Så du erklærer int y. 1170 00:47:54,120 --> 00:47:57,300 Derefter int x vil generelt være lavere på stakken end int y. 1171 00:47:57,300 --> 00:47:59,300 Men det er bare en kendsgerning. 1172 00:47:59,300 --> 00:48:02,410 Det er ikke ligesom en vigtig frø ting. 1173 00:48:02,410 --> 00:48:06,800 >> ROB: Så spørgsmålet var igen bare hvad der sker hver ramme opbygges. 1174 00:48:06,800 --> 00:48:08,960 Så hver funktion får en lille stykke af stablen. 1175 00:48:08,960 --> 00:48:13,030 Og som du gå op inden for denne lille stykke, inden for denne ramme, 1176 00:48:13,030 --> 00:48:16,710 vil vi sige, at variabler inden for denne ramme også flytte op. 1177 00:48:16,710 --> 00:48:17,473 Spørgsmål? 1178 00:48:17,473 --> 00:48:18,688 >> ROB: Bare for at være på mic. 1179 00:48:18,688 --> 00:48:19,396 HANNAH: Oh, yeah. 1180 00:48:19,396 --> 00:48:20,440 ROB: Jeg vil tale ind i dig. 1181 00:48:20,440 --> 00:48:21,410 HANNAH: Oh, yeah, OK. 1182 00:48:21,410 --> 00:48:24,150 ROB: Undtagelsen er for arrays og structs, 1183 00:48:24,150 --> 00:48:27,470 hvor arrays, en lavere indeks i arrayet, 1184 00:48:27,470 --> 00:48:29,930 og i structs ved højere felt i structs 1185 00:48:29,930 --> 00:48:35,040 er garanteret at være ved lavere adresser end en senere værdi i array. 1186 00:48:35,040 --> 00:48:36,720 Så dem er garanteret. 1187 00:48:36,720 --> 00:48:40,310 Men nogen særlige variabler i, ligesom int x og y int i en funktion, 1188 00:48:40,310 --> 00:48:43,030 der er ingen nødvendig sammenhæng mellem deres adresser. 1189 00:48:43,030 --> 00:48:44,882 1190 00:48:44,882 --> 00:48:46,340 HANNAH: Et andet spørgsmål herovre? 1191 00:48:46,340 --> 00:48:51,620 STUDENT: Så i buffer flow, kun buffer overflow 1192 00:48:51,620 --> 00:48:54,980 kun skete, da du har, ligesom, tildeles 1193 00:48:54,980 --> 00:49:01,056 en mængde af et array der så er større? 1194 00:49:01,056 --> 00:49:03,230 Ligesom, kan du? 1195 00:49:03,230 --> 00:49:05,435 Så hvis du beder om noget fra user-- 1196 00:49:05,435 --> 00:49:06,018 >> HANNAH: Mm-hm. 1197 00:49:06,018 --> 00:49:08,600 STUDENT: Kan de med magt give dig noget tilbage 1198 00:49:08,600 --> 00:49:11,777 der er større end hvad du har afsat til dem? 1199 00:49:11,777 --> 00:49:13,610 HANNAH: Sure, så Spørgsmålet var dybest set, 1200 00:49:13,610 --> 00:49:16,217 kan brugeren give dig mere end du beder om? 1201 00:49:16,217 --> 00:49:16,800 STUDENT: Ja. 1202 00:49:16,800 --> 00:49:18,480 HANNAH: Nå, du kunne forhindre brugeren fra at gøre det. 1203 00:49:18,480 --> 00:49:21,350 Du kunne specifikt sige ikke give mig mere end x antal af bytes 1204 00:49:21,350 --> 00:49:24,330 Jeg har kun givet dig plads til x antal af bytes, x antal tegn. 1205 00:49:24,330 --> 00:49:25,700 Så det er noget, du ønsker at forhindre. 1206 00:49:25,700 --> 00:49:26,199 Ja? 1207 00:49:26,199 --> 00:49:30,270 Hvad er forskellen mellem stak overflow og buffer overflow? 1208 00:49:30,270 --> 00:49:32,140 >> HANNAH: OK, så stakken overflow-- åh, hvad 1209 00:49:32,140 --> 00:49:34,790 er forskellen mellem stakken overløb og buffer overflow? 1210 00:49:34,790 --> 00:49:37,581 Så vi ønsker at tænke på stakoverløb sker, når vi er faktisk 1211 00:49:37,581 --> 00:49:39,530 stabling op disse funktionstaster opkald. 1212 00:49:39,530 --> 00:49:42,991 Lad os sige du har en rekursiv funktion, fordi vi ved, at hver gang du 1213 00:49:42,991 --> 00:49:45,240 kalder en funktion, er det får sin egen ramme på stakken. 1214 00:49:45,240 --> 00:49:47,950 >> Så vi stak for højt op, og så vi begynder at flyde over. 1215 00:49:47,950 --> 00:49:50,530 Og vi bruger for meget hukommelse og Vi har ikke nogen steder forladt. 1216 00:49:50,530 --> 00:49:51,590 Vi får denne fejl. 1217 00:49:51,590 --> 00:49:53,930 >> Buffer overflow er inden for et program. 1218 00:49:53,930 --> 00:49:57,180 Vi vil måske ikke nødvendigvis har løbe tør for hukommelse på samme måde 1219 00:49:57,180 --> 00:50:00,080 at vi kunne, hvis vi stabling op, så mange funktionskald, 1220 00:50:00,080 --> 00:50:04,540 men vi skriver forbi hukommelsen at vi ved, vi kan bruge. 1221 00:50:04,540 --> 00:50:06,170 Og det giver os mulighed for at gøre onde ting. 1222 00:50:06,170 --> 00:50:08,060 1223 00:50:08,060 --> 00:50:08,560 Ja? 1224 00:50:08,560 --> 00:50:10,950 >> ROB: Ja, du måske ønsker bare gentage dette, 1225 00:50:10,950 --> 00:50:12,699 men du kan også tænke af en stak overflow 1226 00:50:12,699 --> 00:50:15,374 som som en bestemt type af buffer overflow. 1227 00:50:15,374 --> 00:50:17,665 Eller du bare tænke på din stable så en rigtig stor buffer. 1228 00:50:17,665 --> 00:50:20,724 Så når du overløb du stak, det er lidt ligesom en buffer overflow. 1229 00:50:20,724 --> 00:50:23,390 Men en stak overflow er bare en specifikke udtryk anvendes, når stakken 1230 00:50:23,390 --> 00:50:24,310 selv overflow. 1231 00:50:24,310 --> 00:50:27,500 >> HANNAH: Right, så at gentag for den video, 1232 00:50:27,500 --> 00:50:31,756 det du kan tænke på stack overflow som en bestemt type af buffer overflow. 1233 00:50:31,756 --> 00:50:33,040 Cool? 1234 00:50:33,040 --> 00:50:34,562 Flere spørgsmål før vi går på? 1235 00:50:34,562 --> 00:50:35,380 1236 00:50:35,380 --> 00:50:35,880 Awesome. 1237 00:50:35,880 --> 00:50:37,130 1238 00:50:37,130 --> 00:50:39,727 >> OK, cool, så lad os tale om nogle almindelige fejlmeddelelser. 1239 00:50:39,727 --> 00:50:42,060 Dette er noget, der har vist op på flere quizzer, 1240 00:50:42,060 --> 00:50:44,740 så noget, der er værd tage et andet kig på. 1241 00:50:44,740 --> 00:50:46,860 Jeg er sikker på du er stødt på i det mindste nogle af disse 1242 00:50:46,860 --> 00:50:48,690 som du laver dit problem sæt. 1243 00:50:48,690 --> 00:50:50,980 Så sørg for at du kan tale om dem på quizzen. 1244 00:50:50,980 --> 00:50:52,990 >> Så den første er en segmentering fejl. 1245 00:50:52,990 --> 00:50:55,250 Og det er helst vi forsøger at få adgang hukommelse 1246 00:50:55,250 --> 00:50:57,130 at vi ikke får lov til at få adgang. 1247 00:50:57,130 --> 00:51:00,280 Så du migh har set denne, for eksempel i breakout. 1248 00:51:00,280 --> 00:51:03,390 Hvis afsløre kollision returnere null, og så er du 1249 00:51:03,390 --> 00:51:05,500 forsøgt at gøre noget med nulværdi, 1250 00:51:05,500 --> 00:51:08,147 computeren ville give du en segmentering fejl. 1251 00:51:08,147 --> 00:51:10,730 Så en, en vigtig ting at gøre for at forsøge at undgå denne 1252 00:51:10,730 --> 00:51:12,000 er altid at tjekke for null. 1253 00:51:12,000 --> 00:51:13,300 1254 00:51:13,300 --> 00:51:16,180 >> Du har måske også set underforstået erklæring af funktionen. 1255 00:51:16,180 --> 00:51:18,370 Så dette er hvad der sker når Allison viste dig 1256 00:51:18,370 --> 00:51:20,150 hvordan vi laver en prototype, right? 1257 00:51:20,150 --> 00:51:23,440 Så lad os sige, at vi har nogle funktion, som vi definerer. 1258 00:51:23,440 --> 00:51:24,440 Lad os sige terning. 1259 00:51:24,440 --> 00:51:27,120 Og der går i bunden af vores funktion, under main. 1260 00:51:27,120 --> 00:51:35,205 >> Hvis vi glemmer at fortælle computeren om terning, når main forsøger at ringe terning, 1261 00:51:35,205 --> 00:51:36,830 computeren vil være ligesom, åh min gosh. 1262 00:51:36,830 --> 00:51:38,300 Jeg har ingen idé om, hvad det betyder. 1263 00:51:38,300 --> 00:51:39,760 Jeg ved ikke, hvad de skal gøre, her. 1264 00:51:39,760 --> 00:51:41,594 Så prototypen siger fortvivl ikke. 1265 00:51:41,594 --> 00:51:42,510 Jeg har tænkt mig at fortælle dig. 1266 00:51:42,510 --> 00:51:43,132 >> Det vil komme. 1267 00:51:43,132 --> 00:51:43,840 Må ikke råbe på mig. 1268 00:51:43,840 --> 00:51:46,697 Må ikke give mig en implicit erklæring af funktionen. 1269 00:51:46,697 --> 00:51:49,280 Så hvis du får denne fejl, den ene ting du vil ønsker at gøre 1270 00:51:49,280 --> 00:51:50,821 er at sikre du har din prototype. 1271 00:51:50,821 --> 00:51:52,320 1272 00:51:52,320 --> 00:51:53,230 OK? 1273 00:51:53,230 --> 00:51:55,680 >> Og sidst men ikke mindst, sort identifikator 1274 00:51:55,680 --> 00:52:00,570 er væsentlige, når du forsøger at bruge en variabel, du ikke har erklæret. 1275 00:52:00,570 --> 00:52:03,449 Så pludselig du begynder siger ligesom n plus plus. 1276 00:52:03,449 --> 00:52:04,740 Og computeren siger, hvad der er n? 1277 00:52:04,740 --> 00:52:06,660 Du har aldrig fortalt mig n var en ting. 1278 00:52:06,660 --> 00:52:10,930 >> Så en ting du skal sørge for du gjorde, er at fortælle computeren, hvad n er. 1279 00:52:10,930 --> 00:52:13,320 Så for eksempel kan n være et heltal. 1280 00:52:13,320 --> 00:52:14,999 Og så vil du undgå denne fejl. 1281 00:52:14,999 --> 00:52:16,290 Eventuelle spørgsmål om almindelige fejl? 1282 00:52:16,290 --> 00:52:17,260 Ja? 1283 00:52:17,260 --> 00:52:19,344 >> STUDENT: Til den implicitte erklæring af funktionen, 1284 00:52:19,344 --> 00:52:22,343 kunne det også være, at du udeladt en af bibliotekerne du skulle 1285 00:52:22,343 --> 00:52:24,400 omfatte, snarere end prototype? 1286 00:52:24,400 --> 00:52:26,359 >> HANNAH: Right, så Spørgsmålet var, kunne du 1287 00:52:26,359 --> 00:52:28,650 også får denne fejl, hvis du glemte at inkludere et bibliotek. 1288 00:52:28,650 --> 00:52:29,085 >> STUDENT: Ja. 1289 00:52:29,085 --> 00:52:30,876 >> HANNAH: Absolut, fordi på samme måde 1290 00:52:30,876 --> 00:52:33,540 at vi ønsker at sætte vores prototyper før den vigtigste funktion, 1291 00:52:33,540 --> 00:52:37,717 hvis vi har et bibliotek, er dem, der går i det væsentlige omfatter prototyper, 1292 00:52:37,717 --> 00:52:39,425 omfatter definitionerne af funktionerne. 1293 00:52:39,425 --> 00:52:40,585 Store spørgsmål. 1294 00:52:40,585 --> 00:52:43,230 >> STUDENT: For en segmentering skyld, ville det også 1295 00:52:43,230 --> 00:52:47,350 ske, hvis vi, ligesom, forsøgte at få adgang til en variabel, 1296 00:52:47,350 --> 00:52:51,947 lignende, i en anden [uhørligt] end det blev erklæret i? 1297 00:52:51,947 --> 00:52:54,030 HANNAH: Sure, så ville vi få en segmentering fejl 1298 00:52:54,030 --> 00:52:56,270 hvis vi forsøgte at få adgang til et variabel uden for rækkevidde? 1299 00:52:56,270 --> 00:52:57,104 Var det et spørgsmål? 1300 00:52:57,104 --> 00:52:57,645 STUDENT: Ja. 1301 00:52:57,645 --> 00:52:58,430 HANNAH: Beautiful. 1302 00:52:58,430 --> 00:53:01,840 Så sandsynligvis, er du nødt til at få en sort identifikator fejl i stedet. 1303 00:53:01,840 --> 00:53:04,006 Så det er bare at sige Jeg ved ikke, hvad det er. 1304 00:53:04,006 --> 00:53:04,920 1305 00:53:04,920 --> 00:53:05,920 Cool, noget andet? 1306 00:53:05,920 --> 00:53:07,744 1307 00:53:07,744 --> 00:53:08,980 Ja, OK, smukke. 1308 00:53:08,980 --> 00:53:10,330 1309 00:53:10,330 --> 00:53:12,400 >> Alt righty, så rekursion. 1310 00:53:12,400 --> 00:53:15,160 Så jeg nævnt et par gange at vi kan få en stak overflow 1311 00:53:15,160 --> 00:53:17,919 fordi vi kalder vores rekursiv funktion så mange gange. 1312 00:53:17,919 --> 00:53:20,210 Vi får alle disse stakken rammer, bla, bla, bla. 1313 00:53:20,210 --> 00:53:22,420 Hvad selv er en rekursiv funktion? 1314 00:53:22,420 --> 00:53:25,680 Tja, en rekursiv funktion er enhver funktion, der kalder sig selv. 1315 00:53:25,680 --> 00:53:26,820 1316 00:53:26,820 --> 00:53:30,160 >> Nogle ting at være opmærksom på, når du gennemfører rekursiv funktion, 1317 00:53:30,160 --> 00:53:31,940 glem ikke at inkludere en base case. 1318 00:53:31,940 --> 00:53:34,010 En base case er den punkt, hvor vi ender. 1319 00:53:34,010 --> 00:53:38,740 Så for eksempel, hvis vi kodning, Siger, Fibonacci rekursivt, 1320 00:53:38,740 --> 00:53:43,210 Vi ønsker at sikre, at når vi får til 0 eller første Fibonacci nummer, 1321 00:53:43,210 --> 00:53:46,220 disse to tal har disse tilfælde fordi dem er ikke afhængige 1322 00:53:46,220 --> 00:53:47,700 på ting, der kom før. 1323 00:53:47,700 --> 00:53:48,990 Dem har deres egne værdier. 1324 00:53:48,990 --> 00:53:51,270 1325 00:53:51,270 --> 00:53:55,320 >> Nogle fordele til rekursion, hvilket er en spørgsmål, vi har set på tidligere quizzer. 1326 00:53:55,320 --> 00:53:57,930 De kan føre til mere kortfattet, elegant kode. 1327 00:53:57,930 --> 00:54:00,510 Og en masse funktioner, en masse forskellige algoritmer, 1328 00:54:00,510 --> 00:54:02,350 faktisk egner sig til rekursion. 1329 00:54:02,350 --> 00:54:05,510 Deres definition kunne være rekursiv i sig selv. 1330 00:54:05,510 --> 00:54:06,980 Så Fibonacci er én. 1331 00:54:06,980 --> 00:54:07,860 Fakultet er ét. 1332 00:54:07,860 --> 00:54:10,480 Mergesort sige en-- alle ting, som du kan se på. 1333 00:54:10,480 --> 00:54:12,650 1334 00:54:12,650 --> 00:54:13,460 OK, nogen spørgsmål? 1335 00:54:13,460 --> 00:54:13,960 Ja? 1336 00:54:13,960 --> 00:54:15,644 1337 00:54:15,644 --> 00:54:19,612 >> STUDENT: Er et hjørne sag ligner en base case? 1338 00:54:19,612 --> 00:54:22,590 Eller er det for nogle andre slags [uhørligt]? 1339 00:54:22,590 --> 00:54:25,170 >> HANNAH: Sure, så en hjørne tilfælde er any-- så 1340 00:54:25,170 --> 00:54:27,580 er hjørne tilfælde det samme som base case? 1341 00:54:27,580 --> 00:54:32,825 Et hjørne sag er noget, din kode kan opføre sig lidt anderledes. 1342 00:54:32,825 --> 00:54:34,450 1343 00:54:34,450 --> 00:54:38,610 Basisscenariet er slags relaterede, i at de er ligesom særlige tilfælde 1344 00:54:38,610 --> 00:54:40,240 at du ønsker at se på. 1345 00:54:40,240 --> 00:54:43,240 Men ideen om en base case er, at du vil have din rekursiv funktion 1346 00:54:43,240 --> 00:54:44,870 at stoppe på et tidspunkt. 1347 00:54:44,870 --> 00:54:46,490 Det kan ikke holde kalder sig for evigt. 1348 00:54:46,490 --> 00:54:47,781 Det er nødvendigt at stoppe på et tidspunkt. 1349 00:54:47,781 --> 00:54:49,340 1350 00:54:49,340 --> 00:54:53,460 >> ROB: Ja, ofte din base sager kunne være eksempler på hjørne baser. 1351 00:54:53,460 --> 00:54:55,876 >> HANNAH: Right, cool, noget? 1352 00:54:55,876 --> 00:54:58,732 >> STUDENT: Kan du forklare baserer en lille smule mere? 1353 00:54:58,732 --> 00:55:01,600 Jeg forstår ikke helt, [Uhørligt] base-tilfælde. 1354 00:55:01,600 --> 00:55:02,676 >> HANNAH: Af uædle tilfælde? 1355 00:55:02,676 --> 00:55:03,140 >> STUDENT: Base tilfælde, ja. 1356 00:55:03,140 --> 00:55:03,770 >> HANNAH: Oh yeah, helt sikkert. 1357 00:55:03,770 --> 00:55:04,270 Lad os se. 1358 00:55:04,270 --> 00:55:05,480 Må vi har kridt herovre? 1359 00:55:05,480 --> 00:55:06,690 1360 00:55:06,690 --> 00:55:07,320 Ja, det gør vi. 1361 00:55:07,320 --> 00:55:09,530 OK, så virkelig hurtigt, vil jeg forsøger at skrive stor nok 1362 00:55:09,530 --> 00:55:11,320 så du kan se på skærmen. 1363 00:55:11,320 --> 00:55:13,490 Lad os tale om, virkelig hurtigt, Fibonacci. 1364 00:55:13,490 --> 00:55:15,550 Så jeg vil give dig Fibonacci sekvensen. 1365 00:55:15,550 --> 00:55:17,090 Du kan se op på definitionen. 1366 00:55:17,090 --> 00:55:26,050 >> Væsentlige hvert nummer i sekvensen er summen af ​​de to foregående tal. 1367 00:55:26,050 --> 00:55:29,720 OK, så den måde, at jeg netop beskrevne Fibonacci, 1368 00:55:29,720 --> 00:55:31,530 du kunne høre rekursion, right? 1369 00:55:31,530 --> 00:55:35,280 Da jeg sagde hvert nummer er den summen af ​​de to foregående tal, 1370 00:55:35,280 --> 00:55:36,420 vi kunne sige OK. 1371 00:55:36,420 --> 00:55:38,570 Nå, det n'te Fibonacci number-- så lad os 1372 00:55:38,570 --> 00:55:42,260 siger, at vi har denne funktion kaldet fib-- fib af n 1373 00:55:42,260 --> 00:55:48,260 vil være lig med fib af n minus 1 plus-- sorry, 1374 00:55:48,260 --> 00:55:51,240 vi går videre til næste linje løbet her-- fib af n minus 2. 1375 00:55:51,240 --> 00:55:52,790 1376 00:55:52,790 --> 00:55:56,790 >> OK, så dette virker fantastisk, hvis du er ser på, for eksempel nul, en, 1377 00:55:56,790 --> 00:55:59,410 to, tre, fire, femte Fibonacci nummer, 1378 00:55:59,410 --> 00:56:03,561 hvor man kan sige, at 5 er lig med 2 plus 3. 1379 00:56:03,561 --> 00:56:05,060 Men hvad nu, hvis du er i starten? 1380 00:56:05,060 --> 00:56:07,184 Hvad hvis du bare rammer disse to første værdier? 1381 00:56:07,184 --> 00:56:08,470 1382 00:56:08,470 --> 00:56:11,330 >> For at få denne 1, kan du ikke siger tilføje de to foregående, 1383 00:56:11,330 --> 00:56:13,930 fordi at nul og-- jeg ikke kender. 1384 00:56:13,930 --> 00:56:15,390 Så på et tidspunkt, er vi nødt til at stoppe. 1385 00:56:15,390 --> 00:56:21,250 På et tidspunkt er vi nødt til at sige, at disse to bare har deres egne definitioner. 1386 00:56:21,250 --> 00:56:23,890 0 Fibonacci-tal er 0. 1387 00:56:23,890 --> 00:56:26,115 Og første Fibonacci nummer 1. 1388 00:56:26,115 --> 00:56:34,120 >> Så den måde, jeg kunne kode det, jeg ville sige, hvis n er mindre end to, 1389 00:56:34,120 --> 00:56:35,130 så bare returnere n. 1390 00:56:35,130 --> 00:56:36,494 Og det ville være min base case. 1391 00:56:36,494 --> 00:56:38,660 Det er, hvordan jeg kender til at stoppe med en rekursiv funktion. 1392 00:56:38,660 --> 00:56:40,640 1393 00:56:40,640 --> 00:56:41,410 Er det klart? 1394 00:56:41,410 --> 00:56:41,940 Awesome. 1395 00:56:41,940 --> 00:56:43,260 Noget andet på rekursion? 1396 00:56:43,260 --> 00:56:44,890 1397 00:56:44,890 --> 00:56:45,930 Beautiful. 1398 00:56:45,930 --> 00:56:48,750 >> Lad os hurtigt snakke om Søg og sortere køre tider. 1399 00:56:48,750 --> 00:56:52,660 Og så vil jeg give Davin nogle tid til at tale om kodning eksempler. 1400 00:56:52,660 --> 00:56:56,490 Så her er de vigtigste søgning og slags, som du bør vide om. 1401 00:56:56,490 --> 00:56:59,500 Guarantee-- Jeg kan ikke garantere, fordi jeg ikke har set quiz-- 1402 00:56:59,500 --> 00:57:01,940 men dette kommer op quiz efter quiz efter op. 1403 00:57:01,940 --> 00:57:04,050 Så helt sikkert bruge dette skema. 1404 00:57:04,050 --> 00:57:05,682 Ligesom, tage dette skema. 1405 00:57:05,682 --> 00:57:06,890 Sætte det på din snyde ark. 1406 00:57:06,890 --> 00:57:07,931 Du vil være en glad person. 1407 00:57:07,931 --> 00:57:09,010 1408 00:57:09,010 --> 00:57:12,590 >> Dette fortæller os Kør tidspunkter af hver af den slags og søgealgoritmer. 1409 00:57:12,590 --> 00:57:14,020 1410 00:57:14,020 --> 00:57:18,850 Så lineær søgning, kan du se run tid, og samme med binær søgning. 1411 00:57:18,850 --> 00:57:21,490 Gå over, hvad disse algoritmer gøre den generelle idé. 1412 00:57:21,490 --> 00:57:24,220 Kig på nogle pseudokode, hvis ikke selve koden. 1413 00:57:24,220 --> 00:57:25,610 1414 00:57:25,610 --> 00:57:30,380 >> Du vil se, at Boblesortering har en øvre bundet i de værste tilfælde af n potens. 1415 00:57:30,380 --> 00:57:31,490 1416 00:57:31,490 --> 00:57:34,680 Så hvis vores matrix var helt bagud før vi ønskede at sortere det, 1417 00:57:34,680 --> 00:57:37,090 ville vi sige, at det er vil tage n kvadratiske trin. 1418 00:57:37,090 --> 00:57:38,160 1419 00:57:38,160 --> 00:57:41,730 Men i bedste fald, så nedre grænse for den bedste sag 1420 00:57:41,730 --> 00:57:44,300 vil være, hvis det er allerede perfekt sorteret. 1421 00:57:44,300 --> 00:57:46,671 Så alt, hvad vi skal gøre, er kontrollere, at det er sorteret. 1422 00:57:46,671 --> 00:57:47,921 Er der et spørgsmål herovre? 1423 00:57:47,921 --> 00:57:49,805 >> STUDENT: Hvornår ville du ønsker at bruge slags? 1424 00:57:49,805 --> 00:57:50,747 Den slags. 1425 00:57:50,747 --> 00:57:52,160 Jeg er bare nysgerrig. 1426 00:57:52,160 --> 00:57:53,510 >> HANNAH: Hvornår vil du ønsker at bruge udvælgelse slags? 1427 00:57:53,510 --> 00:57:54,010 Denne ene? 1428 00:57:54,010 --> 00:57:55,705 Den ene, der er n kvadreret i begge tilfælde? 1429 00:57:55,705 --> 00:57:56,860 >> STUDENT: [uhørligt]. 1430 00:57:56,860 --> 00:57:58,151 >> HANNAH: Så det er meget anderledes. 1431 00:57:58,151 --> 00:58:00,760 Hvis du har specifikke krav til dit program, 1432 00:58:00,760 --> 00:58:04,887 ligesom ting som hvis vi lige har sagt gennemføre en search-- sorry-- 1433 00:58:04,887 --> 00:58:06,720 gennemføre en slags, vil du sandsynligvis ønsker at gå 1434 00:58:06,720 --> 00:58:09,950 for en af ​​dem, har et bedste tilfælde af n, 1435 00:58:09,950 --> 00:58:12,410 eller en nedre grænse i bedste fald n. 1436 00:58:12,410 --> 00:58:14,790 Men der kan være visse ting som f.eks, 1437 00:58:14,790 --> 00:58:16,767 swaps er virkelig dyrt for en eller anden grund. 1438 00:58:16,767 --> 00:58:18,850 Så du ønsker at gøre boble sortere, fordi du 1439 00:58:18,850 --> 00:58:20,641 nødt til at gøre så mange swaps, ting som. 1440 00:58:20,641 --> 00:58:21,710 1441 00:58:21,710 --> 00:58:23,098 Enhver other-- ja? 1442 00:58:23,098 --> 00:58:25,488 >> STUDENT: Ville det være [uhørligt] at sige, at [uhørligt]? 1443 00:58:25,488 --> 00:58:30,077 1444 00:58:30,077 --> 00:58:31,910 HANNAH: Det er én ting der vil fortælle dig 1445 00:58:31,910 --> 00:58:33,670 hvis du kigger på implementeringen. 1446 00:58:33,670 --> 00:58:35,850 Den måde, jeg ville faktisk tænke over, hvorfor det er n 1447 00:58:35,850 --> 00:58:40,840 squared er, at vi er nødt til at køre gennem vores vifte af længde n, 1448 00:58:40,840 --> 00:58:42,765 hver gang gør på de fleste, n swaps. 1449 00:58:42,765 --> 00:58:43,980 1450 00:58:43,980 --> 00:58:46,220 Og vi er nødt til at gøre denne proces n gange. 1451 00:58:46,220 --> 00:58:51,130 >> Så når du nødt til at gøre på de fleste, n swaps og for n løber gennem array, 1452 00:58:51,130 --> 00:58:52,380 Der kommer til at være n potens. 1453 00:58:52,380 --> 00:58:55,480 Men ja, dette vil blive afsløret gennem denne dobbelte for loop, 1454 00:58:55,480 --> 00:58:59,428 som spørgsmålet asked-- eller indlejret for løkke, skulle jeg sige. 1455 00:58:59,428 --> 00:59:00,890 OK? 1456 00:59:00,890 --> 00:59:03,375 >> Og derefter flette sortere, som er den hurtigste slags vi nu, 1457 00:59:03,375 --> 00:59:07,560 eller at vi har dækket i CS50, ved, at den vigtigste algoritme er 1458 00:59:07,560 --> 00:59:10,150 denne idé om at bryde ind i sorterede stykker og derefter 1459 00:59:10,150 --> 00:59:11,980 fusionerende sammen disse sorterede bits. 1460 00:59:11,980 --> 00:59:14,170 Og får os log n log n. 1461 00:59:14,170 --> 00:59:17,110 Eventuelle spørgsmål vedrørende søgninger og slags, før jeg give det videre? 1462 00:59:17,110 --> 00:59:19,840 1463 00:59:19,840 --> 00:59:21,040 Lad os se. 1464 00:59:21,040 --> 00:59:21,800 >> Åh, der er knyttet lister. 1465 00:59:21,800 --> 00:59:23,210 Undskyld, jeg har endnu et emne. 1466 00:59:23,210 --> 00:59:25,000 OK, awesome, hægtede lister. 1467 00:59:25,000 --> 00:59:27,900 Problem med arrays, de har en fast størrelse. 1468 00:59:27,900 --> 00:59:30,634 Så hvis du ikke ved, hvor stor dit input vil være, 1469 00:59:30,634 --> 00:59:32,050 du ikke ønsker at oprette et array. 1470 00:59:32,050 --> 00:59:34,080 Fordi hvis vi skaber en array, der er for lille, 1471 00:59:34,080 --> 00:59:35,930 vi kan løbe ind i buffer overflow. 1472 00:59:35,930 --> 00:59:38,890 >> Så i stedet, kunne vi gøre noget med hægtede lister, som 1473 00:59:38,890 --> 00:59:44,280 tillader os at have en dynamisk størrelse datastruktur 1474 00:59:44,280 --> 00:59:48,970 der vil tillade os at gemme en mere fleksibel mængde data. 1475 00:59:48,970 --> 00:59:54,030 Så i hvert knudepunkt i vores linkede liste, vi har to stykker. 1476 00:59:54,030 --> 00:59:56,820 Vi har den faktiske værdi, som den gemmer. 1477 00:59:56,820 --> 00:59:59,530 Så det er lige den ting du ville se i array, for eksempel. 1478 00:59:59,530 --> 01:00:04,600 Og så har vi også holde styr på en pointer til den næste ting i hukommelsen. 1479 01:00:04,600 --> 01:00:06,430 >> I modsætning til arrays, som vi ved alle at gå 1480 01:00:06,430 --> 01:00:10,890 at være-- array elementer er alle én efter den anden i memory-- forbundet 1481 01:00:10,890 --> 01:00:13,300 lister kunne være hvor som helst i hukommelsen. 1482 01:00:13,300 --> 01:00:14,590 De er tilfældige placeringer. 1483 01:00:14,590 --> 01:00:16,410 Så hvis vi skulle faktisk gå finde dem, vi 1484 01:00:16,410 --> 01:00:19,770 nødt til at holde styr på næste ting i vores liste. 1485 01:00:19,770 --> 01:00:22,840 >> Og derefter for at vide hvor denne liste som helhed, 1486 01:00:22,840 --> 01:00:26,276 alt, hvad vi nødt til at holde styr på, er den første element i vores linkede liste. 1487 01:00:26,276 --> 01:00:27,900 Og der vil tillade os at følge igennem. 1488 01:00:27,900 --> 01:00:31,020 1489 01:00:31,020 --> 01:00:33,070 >> Så dette er, hvordan du kan definere en tilstand. 1490 01:00:33,070 --> 01:00:36,160 Dette er en stor mulighed at drage fordel af structs. 1491 01:00:36,160 --> 01:00:39,660 Fordi du har denne idé, ja, for en given knude, jeg har to stykker. 1492 01:00:39,660 --> 01:00:41,770 Jeg har den faktiske værdi i sig selv. 1493 01:00:41,770 --> 01:00:45,610 Og så har jeg en pegepind til næste element i den linkede liste. 1494 01:00:45,610 --> 01:00:49,150 Så du kan se, har vi et heltal n, som vil være den faktiske værdi, 1495 01:00:49,150 --> 01:00:53,150 og derefter en pegepind til en knude, kaldet næste. 1496 01:00:53,150 --> 01:00:56,431 Så det kommer til at være den næste element i vores linkede liste. 1497 01:00:56,431 --> 01:00:56,972 STUDENT: Ja? 1498 01:00:56,972 --> 01:01:01,920 Har du nødt til at angive, at stjernen er som en struct? 1499 01:01:01,920 --> 01:01:05,620 >> HANNAH: Ja, så da dette er næsten som en slags, 1500 01:01:05,620 --> 01:01:07,980 det virker som en rekursiv definition, at vi 1501 01:01:07,980 --> 01:01:12,080 brug for at vide, hvad en node er inde til at finde en node. 1502 01:01:12,080 --> 01:01:14,450 Da det faktisk ikke vide, hvad en node er fuldstændig 1503 01:01:14,450 --> 01:01:17,283 indtil vi kommer til slutningen af ​​denne-- og efter dette kan vi bare kalde det 1504 01:01:17,283 --> 01:01:21,935 en node-- indersiden af ​​denne definition, vi nødt til at kalde det en struct node. 1505 01:01:21,935 --> 01:01:22,560 Store spørgsmål. 1506 01:01:22,560 --> 01:01:23,580 1507 01:01:23,580 --> 01:01:25,214 Noget andet? 1508 01:01:25,214 --> 01:01:26,198 Ja? 1509 01:01:26,198 --> 01:01:29,150 >> STUDENT: Hvorfor gør vi nødt til at sige node to gange? 1510 01:01:29,150 --> 01:01:33,578 Fordi da vi var i [uhørligt] havde vi blot at gøre det i semikolon, 1511 01:01:33,578 --> 01:01:37,352 men nu er vi nødt til at finde, at struct node? [Uhørligt]. 1512 01:01:37,352 --> 01:01:39,060 HANNAH: Så tror jeg i det sidste eksempel, 1513 01:01:39,060 --> 01:01:42,110 vi var blot at skabe når du ønskede at bruge en studerende efter det, du 1514 01:01:42,110 --> 01:01:46,430 måtte bruge struct node-- Jeg sorry-- struct elev. 1515 01:01:46,430 --> 01:01:51,575 Dette tillod os at, efter den kendsgerning, bare brug node tilføje en ny type, hovedsagelig. 1516 01:01:51,575 --> 01:01:53,324 1517 01:01:53,324 --> 01:01:53,990 Det mening? 1518 01:01:53,990 --> 01:01:54,984 1519 01:01:54,984 --> 01:01:57,150 Så vi er nødt til at gå tilbage og se på koden før. 1520 01:01:57,150 --> 01:01:59,025 Men jeg vil gætte på, at vi ikke bruge typedef. 1521 01:01:59,025 --> 01:02:02,050 Og vi stillede spørgsmålet, hvorfor har vi brug for at bruge typedef? 1522 01:02:02,050 --> 01:02:05,540 Typedef giver os mulighed for at undgå ord struct i begyndelsen. 1523 01:02:05,540 --> 01:02:06,221 Ja? 1524 01:02:06,221 --> 01:02:08,095 STUDENT: Hvilken slags spørgsmål ville komme op 1525 01:02:08,095 --> 01:02:10,400 i form i form af noder og hægtede lister? 1526 01:02:10,400 --> 01:02:15,110 >> HANNAH: Så én ting er, vi kunne sige, hvordan kan du søge gennem et sammenkædet liste? 1527 01:02:15,110 --> 01:02:16,930 OK, fordi det er en lidt mere kompliceret 1528 01:02:16,930 --> 01:02:18,520 end hvis vi søger gennem et array. 1529 01:02:18,520 --> 01:02:21,472 Vi kan bare se på element nul, element én, element to, bla, bla, 1530 01:02:21,472 --> 01:02:21,972 bla. 1531 01:02:21,972 --> 01:02:22,629 1532 01:02:22,629 --> 01:02:24,420 Hvis vi ønsker at søge gennem en sammenkædet liste, 1533 01:02:24,420 --> 01:02:27,229 ville vi faktisk nødt til at følge denne lille labyrint af pointere. 1534 01:02:27,229 --> 01:02:29,270 Så lad os faktisk gå gennem dette virkelig hurtigt. 1535 01:02:29,270 --> 01:02:30,460 1536 01:02:30,460 --> 01:02:32,860 Hvad vi kunne gøre i bestille at-- lad os sige, at vi 1537 01:02:32,860 --> 01:02:35,430 bare ønsker at gentage gennem vores helt forbundet liste. 1538 01:02:35,430 --> 01:02:37,450 Vi ville starte på hovedet. 1539 01:02:37,450 --> 01:02:39,890 Og så for at flytte til det næste element, 1540 01:02:39,890 --> 01:02:43,680 i stedet for bare at inkrementere med en ligesom vi måske i at gå gennem et array, 1541 01:02:43,680 --> 01:02:45,720 vi faktisk kommer til at følge den næste pointer, 1542 01:02:45,720 --> 01:02:48,360 så vi kan finde, hvor i hukommelse næste element er. 1543 01:02:48,360 --> 01:02:49,357 1544 01:02:49,357 --> 01:02:51,690 Så jeg ved, det er ikke nok at tage alt dette i lige nu, 1545 01:02:51,690 --> 01:02:52,650 men du har disse dias. 1546 01:02:52,650 --> 01:02:54,730 Så du kan gå igennem dette lidt langsommere. 1547 01:02:54,730 --> 01:02:56,890 Men det væsentlige, hvad vi ønsker at gøre er at følge disse pejlemærker 1548 01:02:56,890 --> 01:02:58,550 gennem hele den linkede liste. 1549 01:02:58,550 --> 01:03:00,258 Så det er et spørgsmål du måske blive spurgt. 1550 01:03:00,258 --> 01:03:01,920 1551 01:03:01,920 --> 01:03:03,980 >> Noget at bemærke med indsættelse, lad os sige 1552 01:03:03,980 --> 01:03:07,925 vi ønskede at sætte et nyt element på forsiden af ​​vores linkede liste. 1553 01:03:07,925 --> 01:03:10,800 Vi er nødt til at være meget forsigtige om den rækkefølge, som vi 1554 01:03:10,800 --> 01:03:12,760 omfordelt pointerne. 1555 01:03:12,760 --> 01:03:15,230 Fordi lad os sige, jeg lige har sagt OK. 1556 01:03:15,230 --> 01:03:18,930 Gør hoved punkt til dette nye element. 1557 01:03:18,930 --> 01:03:23,550 Bare gøre det pege på 1 Så vi har væsentlige tabt resten af ​​vores liste, 1558 01:03:23,550 --> 01:03:25,860 fordi jeg ikke kan huske hvor 2 liv. 1559 01:03:25,860 --> 01:03:27,730 >> Så vi er nødt til at gøre i en meget bestemt rækkefølge. 1560 01:03:27,730 --> 01:03:31,500 Først, vi gøre den nye element peger på hovedet. 1561 01:03:31,500 --> 01:03:33,970 Og så har vi gøre hovedet peger på det nye element. 1562 01:03:33,970 --> 01:03:38,455 Så lad os se, hvad der ligner med arrows-- ligesom det. 1563 01:03:38,455 --> 01:03:42,080 Så du først have den nye element punkt til den gamle hoved. 1564 01:03:42,080 --> 01:03:45,990 Og nu har vi hovedet pege på den nye første element. 1565 01:03:45,990 --> 01:03:47,187 Eventuelle spørgsmål med dette? 1566 01:03:47,187 --> 01:03:49,870 1567 01:03:49,870 --> 01:03:54,350 >> OK her er nogle kode igen, noget at se på et lidt senere. 1568 01:03:54,350 --> 01:03:58,630 Og nu vil jeg slå den over til Davin for GDB og en lille smule af praksis 1569 01:03:58,630 --> 01:03:59,480 kodning på papir. 1570 01:03:59,480 --> 01:04:00,597 1571 01:04:00,597 --> 01:04:01,096 Beautiful. 1572 01:04:01,096 --> 01:04:01,810 >> ROB: Og Rob. 1573 01:04:01,810 --> 01:04:02,360 >> HANNAH: Åh, Davin og Rob. 1574 01:04:02,360 --> 01:04:03,055 Jeg er ked af. 1575 01:04:03,055 --> 01:04:03,596 >> STUDENT: Woo! 1576 01:04:03,596 --> 01:04:08,140 1577 01:04:08,140 --> 01:04:09,110 >> ROB: Tak. 1578 01:04:09,110 --> 01:04:11,209 >> Davin: Ønsker du at sige alt virkelig hurtig? 1579 01:04:11,209 --> 01:04:11,875 ROB: Ja, ja. 1580 01:04:11,875 --> 01:04:12,845 Davin: Når jeg op. 1581 01:04:12,845 --> 01:04:16,240 1582 01:04:16,240 --> 01:04:19,520 OK, mens Rob sætter mikrofon på, så hvad er GDB? 1583 01:04:19,520 --> 01:04:23,945 Alle bør have set GDB i klasse og også ved kontortid. 1584 01:04:23,945 --> 01:04:25,070 Og du skal bruge den. 1585 01:04:25,070 --> 01:04:25,750 Så hvad er GDB? 1586 01:04:25,750 --> 01:04:28,030 1587 01:04:28,030 --> 01:04:28,850 Anybody? 1588 01:04:28,850 --> 01:04:29,540 >> STUDENT: Det er en debugger. 1589 01:04:29,540 --> 01:04:30,250 >> Davin: Det er en debugger. 1590 01:04:30,250 --> 01:04:31,624 Og hvad betyder det tillader dig at gøre? 1591 01:04:31,624 --> 01:04:33,064 Ligesom, hvorfor vi gerne GDB? 1592 01:04:33,064 --> 01:04:34,480 STUDENT: At bremse program ned. 1593 01:04:34,480 --> 01:04:36,740 Davin: Right, så du kan gå gennem det som en menneskelig tempo. 1594 01:04:36,740 --> 01:04:38,490 Og så hvad er nogle kommandoer du kan gøre? 1595 01:04:38,490 --> 01:04:40,407 Nå, pause er sandsynligvis din favorit kommando. 1596 01:04:40,407 --> 01:04:43,240 Fordi der lader dig bryde program og faktisk gå gennem det 1597 01:04:43,240 --> 01:04:44,280 linje for linje. 1598 01:04:44,280 --> 01:04:46,500 >> Run giver dig mulighed for at køre den. 1599 01:04:46,500 --> 01:04:48,210 Dernæst ligesom stepping igennem. 1600 01:04:48,210 --> 01:04:49,820 Hvad er mellem næste og skridt? 1601 01:04:49,820 --> 01:04:52,190 1602 01:04:52,190 --> 01:04:53,190 Vent, sige højt. 1603 01:04:53,190 --> 01:04:54,060 Det var korrekte. 1604 01:04:54,060 --> 01:04:55,280 >> STUDENT: [uhørligt]. 1605 01:04:55,280 --> 01:04:56,190 >> Davin: Ja, awesome. 1606 01:04:56,190 --> 01:04:59,210 Så ligesom, næste og trin, hvis you're-- lad os sige du har en funktion, du 1607 01:04:59,210 --> 01:04:59,950 definere. 1608 01:04:59,950 --> 01:05:03,350 Lad os sige nogle i din primære funktion, og du bare trykke næste, næste, 1609 01:05:03,350 --> 01:05:03,850 næste. 1610 01:05:03,850 --> 01:05:05,910 Du faktisk kommer til at udføre denne funktion, 1611 01:05:05,910 --> 01:05:07,285 men du kommer til at springe over den. 1612 01:05:07,285 --> 01:05:09,711 Hvis du rammer skridt, eller s eller hvad, er du 1613 01:05:09,711 --> 01:05:11,460 vil faktisk hoppe ind i denne funktion, 1614 01:05:11,460 --> 01:05:14,110 og derefter kan du slå næste at se de forskellige opkald 1615 01:05:14,110 --> 01:05:16,170 indenfor den pågældende funktion. 1616 01:05:16,170 --> 01:05:16,670 Ja? 1617 01:05:16,670 --> 01:05:18,670 >> STUDENT: Er der en måde at hoppe, ligesom, bakke ud? 1618 01:05:18,670 --> 01:05:20,750 Davin: Finish, yeah, slut af med at springe dig ud. 1619 01:05:20,750 --> 01:05:22,570 Så det kommer til at afslutte det funktion, og så er du 1620 01:05:22,570 --> 01:05:24,153 vil være tilbage i main, for eksempel. 1621 01:05:24,153 --> 01:05:25,250 1622 01:05:25,250 --> 01:05:27,370 Print vil printe det ud én gang. 1623 01:05:27,370 --> 01:05:29,381 Noget jeg altid bruger, er display. 1624 01:05:29,381 --> 01:05:31,880 Display vil printe det ud konstant hele enkeltheder 1625 01:05:31,880 --> 01:05:32,470 af dit program. 1626 01:05:32,470 --> 01:05:33,810 >> For eksempel, hvis du er i en for-løkke, og man 1627 01:05:33,810 --> 01:05:37,018 ønsker at se, hvordan noget er under forandring, og du ikke ønsker at, ligesom, konstant 1628 01:05:37,018 --> 01:05:38,940 gøre ligesom print, print, print, display 1629 01:05:38,940 --> 01:05:43,230 vil vise, at variablen kontinuerligt, hver gang du trykker på Næste. 1630 01:05:43,230 --> 01:05:44,310 Og fortsætte. 1631 01:05:44,310 --> 01:05:45,905 Så GBD, det er GDB. 1632 01:05:45,905 --> 01:05:47,160 1633 01:05:47,160 --> 01:05:49,180 >> STUDENT: Hvad er den ene hvor du [uhørligt]? 1634 01:05:49,180 --> 01:05:50,150 1635 01:05:50,150 --> 01:05:50,900 Davin: Hvad er det? 1636 01:05:50,900 --> 01:05:52,310 1637 01:05:52,310 --> 01:05:54,390 >> STUDENT: Hvad er til-- de lokale variable. 1638 01:05:54,390 --> 01:05:55,364 1639 01:05:55,364 --> 01:05:57,780 ROB: Der er noget faktisk ligesom lokalbefolkningen eller noget. 1640 01:05:57,780 --> 01:05:58,140 Jeg can't-- 1641 01:05:58,140 --> 01:05:59,930 >> Davin: Det kan være noget lignende, ja. 1642 01:05:59,930 --> 01:06:00,830 >> HANNAH: I de lokale? 1643 01:06:00,830 --> 01:06:01,510 >> Davin: Det er det. 1644 01:06:01,510 --> 01:06:02,134 Det er den ene. 1645 01:06:02,134 --> 01:06:03,040 ROB: Beautiful. 1646 01:06:03,040 --> 01:06:04,030 >> Davin: Ja. 1647 01:06:04,030 --> 01:06:06,010 >> STUDENT: Hvad betyder fortsætte gøre? 1648 01:06:06,010 --> 01:06:08,010 >> Davin: Det continues-- så det er bare vil fortsætte dine programmer. 1649 01:06:08,010 --> 01:06:09,843 Så hvis du bryde og slå fortsætte, går det 1650 01:06:09,843 --> 01:06:13,119 at bare køre dette program indtil det rammer at pause igen. 1651 01:06:13,119 --> 01:06:14,910 Så for eksempel, hvis du brød i en funktion, 1652 01:06:14,910 --> 01:06:16,720 og du kommer til at gøre lignende for sløjfe eller noget lignende, 1653 01:06:16,720 --> 01:06:19,869 og du rammer fortsætte, det vil fortsætte og gå tilbage til pause. 1654 01:06:19,869 --> 01:06:22,660 Eller der er ingen pause, det kommer til at fortsætte og afslutte programmet. 1655 01:06:22,660 --> 01:06:25,000 >> ROB: Så bare gerne køre stop på det allerførste breakpoint 1656 01:06:25,000 --> 01:06:27,010 du rammer, hvis du så hit fortsætte, vil det holde 1657 01:06:27,010 --> 01:06:28,070 går, indtil det er det næste breakpoint. 1658 01:06:28,070 --> 01:06:30,111 Og derefter fortsætte vil gå til næste breakpoint. 1659 01:06:30,111 --> 01:06:31,264 1660 01:06:31,264 --> 01:06:32,680 Davin: Eventuelle andre spørgsmål om GDB? 1661 01:06:32,680 --> 01:06:33,577 1662 01:06:33,577 --> 01:06:35,410 Så jeg tror i fortiden, vi har bedt dig om, hvad 1663 01:06:35,410 --> 01:06:37,690 GDB er og give et eksempel på nogle ting, du 1664 01:06:37,690 --> 01:06:40,770 kan gøre med GDB, så Real Simple, men ja. 1665 01:06:40,770 --> 01:06:42,280 Der kan du gå. 1666 01:06:42,280 --> 01:06:43,250 Og knuder? 1667 01:06:43,250 --> 01:06:49,571 >> ROB: Ja, så hvilken retning var det? 1668 01:06:49,571 --> 01:06:50,851 1669 01:06:50,851 --> 01:06:51,726 STUDENT: Det var det. 1670 01:06:51,726 --> 01:06:52,160 Davin: Vent. 1671 01:06:52,160 --> 01:06:52,270 ROB: Denne fyr? 1672 01:06:52,270 --> 01:06:52,936 Davin: At man. 1673 01:06:52,936 --> 01:06:54,660 ROB: Denne fyr, åh, jeg var ikke klar. 1674 01:06:54,660 --> 01:06:56,940 Så vi ikke var klar om hvad til-- jeg ikke 1675 01:06:56,940 --> 01:06:58,680 vide, hvem det was-- men spørgsmålet. 1676 01:06:58,680 --> 01:07:01,180 Vi ved ikke præcis, hvad du spurgte om det, så bare 1677 01:07:01,180 --> 01:07:04,800 at afklare noget. 1678 01:07:04,800 --> 01:07:07,750 Så det første, som jeg sagde før, typedef du altid bruger bare 1679 01:07:07,750 --> 01:07:09,305 oprette et kaldenavn for en type. 1680 01:07:09,305 --> 01:07:13,420 Så lige her, kaldenavn vi er skaber, er for denne type struct node. 1681 01:07:13,420 --> 01:07:18,070 >> Så først, ignorerer denne node i typedef, så denne struct node krøllet 1682 01:07:18,070 --> 01:07:21,060 afstive ned til næste krøllet tandbøjle er struct node type. 1683 01:07:21,060 --> 01:07:23,470 Og vi er nødt til at node deroppe, fordi vi 1684 01:07:23,470 --> 01:07:25,190 nødt til at referere node her. 1685 01:07:25,190 --> 01:07:29,380 Så med denne form for rekursive struct, du nødt til at give denne konstruere et navn, 1686 01:07:29,380 --> 01:07:31,340 ellers ikke kunne du sige struct node i her. 1687 01:07:31,340 --> 01:07:33,340 Hvor der før med studerende da vi blev indtastet, tror jeg, 1688 01:07:33,340 --> 01:07:35,423 vi behøvede ikke at sige student deroppe, fordi vi 1689 01:07:35,423 --> 01:07:40,370 behøvede ikke at sige struct studerende inde i struct selv. 1690 01:07:40,370 --> 01:07:43,730 Så det er den rekursive at tvinger os til at sige node der. 1691 01:07:43,730 --> 01:07:46,610 >> Denne node er blot navnet er vi giver knudepunkt for typedef. 1692 01:07:46,610 --> 01:07:48,520 Således at knuden er ikke den samme som node. 1693 01:07:48,520 --> 01:07:51,567 Men denne struct knudepunkt er samme som struct node. 1694 01:07:51,567 --> 01:07:54,150 Davin: Så når du ringer, lignende, node i din primære funktion, 1695 01:07:54,150 --> 01:07:55,350 du ikke kommer til nødt til at sige struct node. 1696 01:07:55,350 --> 01:07:58,360 Du kan bare sige node, fordi knudepunkt er en different-- er dybest set 1697 01:07:58,360 --> 01:07:59,440 du siger, OK. 1698 01:07:59,440 --> 01:08:01,490 I stedet for at skulle ringe struct node i min kode, 1699 01:08:01,490 --> 01:08:04,050 Jeg ønsker blot at omdøbe det som knudepunkt for at gøre det lettere. 1700 01:08:04,050 --> 01:08:06,800 >> ROB: Hvis du altid bruge typedef, så dette 1701 01:08:06,800 --> 01:08:11,240 er det eneste sted, du vil have at erklære en variabel med struct node 1702 01:08:11,240 --> 01:08:11,740 stjerne, ja. 1703 01:08:11,740 --> 01:08:14,650 1704 01:08:14,650 --> 01:08:20,801 >> Davin: OK, så den sidste del er svært at undervise because-- 1705 01:08:20,801 --> 01:08:22,185 1706 01:08:22,185 --> 01:08:22,685 ROB: Hvad? 1707 01:08:22,685 --> 01:08:24,098 1708 01:08:24,098 --> 01:08:25,649 >> Davin: Fordi det er kodning på papir. 1709 01:08:25,649 --> 01:08:28,689 Så hvert år har vi kode på papir spørgsmål. 1710 01:08:28,689 --> 01:08:32,510 Så jeg tror, ​​sidste år, 12 ud af 80 point var kode på papir. 1711 01:08:32,510 --> 01:08:36,720 År før, at 10 ud af 80, år før, at 20 ud af 100, 1712 01:08:36,720 --> 01:08:37,939 så en hel del af disse. 1713 01:08:37,939 --> 01:08:40,970 Så du bliver nødt til at være i stand til til at kode disse funktioner i hånden. 1714 01:08:40,970 --> 01:08:45,340 >> Så jeg regnede med at vi kunne gå gennem en par af dem, og se, hvordan folk gør, 1715 01:08:45,340 --> 01:08:47,340 slags gåtur gennem dem langsomt med mennesker. 1716 01:08:47,340 --> 01:08:48,790 1717 01:08:48,790 --> 01:08:52,420 Så generelt strlen og atoi har været meget populære. 1718 01:08:52,420 --> 01:08:55,670 Sidste år, jeg tror, ​​vi havde GetPositiveInt og RandomInt. 1719 01:08:55,670 --> 01:08:58,591 Men pow, så magt, også en positiv også. 1720 01:08:58,591 --> 01:09:00,965 Lad os bare gå gennem måske en eller to af disse sammen. 1721 01:09:00,965 --> 01:09:02,510 1722 01:09:02,510 --> 01:09:03,729 Hvad gør folk ønsker at se? 1723 01:09:03,729 --> 01:09:05,037 1724 01:09:05,037 --> 01:09:05,767 >> STUDENT: Atoi. 1725 01:09:05,767 --> 01:09:06,350 STUDENT: Ja. 1726 01:09:06,350 --> 01:09:06,859 Davin: Atoi? 1727 01:09:06,859 --> 01:09:07,800 STUDENT: [uhørligt]. 1728 01:09:07,800 --> 01:09:09,682 Davin: OK, jeg har tænkt mig at gøre det på tavlen. 1729 01:09:09,682 --> 01:09:11,765 Har du har en præference hvis jeg gør det her eller der? 1730 01:09:11,765 --> 01:09:13,580 1731 01:09:13,580 --> 01:09:14,550 Der, siger Gabe der. 1732 01:09:14,550 --> 01:09:16,729 1733 01:09:16,729 --> 01:09:19,580 >> ROB: Og dette er generelle tanker disse koder spørgsmål. 1734 01:09:19,580 --> 01:09:21,705 Prøv at skrive noget. 1735 01:09:21,705 --> 01:09:22,580 Må ikke lade det stå tomt. 1736 01:09:22,580 --> 01:09:23,080 >> Davin: Ja. 1737 01:09:23,080 --> 01:09:25,520 ROB: Hvis du kan få den returtype korrekt, 1738 01:09:25,520 --> 01:09:27,090 eller måske vi kunne give det til dig, men hvis du kan, ligesom, 1739 01:09:27,090 --> 01:09:30,256 skrive den generelle funktion signatur, Hvis du kan få basen sager korrekt, 1740 01:09:30,256 --> 01:09:32,244 eller et hjørne tilfælde, eller huske afkrydsningsfeltet for null, 1741 01:09:32,244 --> 01:09:34,160 så længe du har nogle ting, så måske vi 1742 01:09:34,160 --> 01:09:35,880 kan give dig et par peger på problemet. 1743 01:09:35,880 --> 01:09:36,810 Må ikke bare lade det stå tomt. 1744 01:09:36,810 --> 01:09:38,560 >> Davin: Ja, og hvis du er bare helt 1745 01:09:38,560 --> 01:09:40,580 snuble på, hvordan man faktisk bliver til kode. 1746 01:09:40,580 --> 01:09:43,140 Hvis du skriver pseudokode, det er temmelig godt. 1747 01:09:43,140 --> 01:09:46,390 Så det er ligesom, det er en seks point spørgsmål, og du skriver den korrekte pseudokode, 1748 01:09:46,390 --> 01:09:47,858 du får mindst to punkter. 1749 01:09:47,858 --> 01:09:49,149 Så du skal ikke bare lade dem stå tomme. 1750 01:09:49,149 --> 01:09:50,279 Prøv at sætte noget. 1751 01:09:50,279 --> 01:09:51,770 >> ROB: Det skal være den korrekt pseudokode, selvom. 1752 01:09:51,770 --> 01:09:52,270 >> Davin: Ja. 1753 01:09:52,270 --> 01:09:55,381 ROB: Så vi er generelt mindre lempelig med bugs i pseudokode. 1754 01:09:55,381 --> 01:09:57,130 Davin: OK, så du fyre ønskede at se atoi. 1755 01:09:57,130 --> 01:09:58,480 1756 01:09:58,480 --> 01:10:02,820 OK, så bare really-- så hvad du vil gøre 1757 01:10:02,820 --> 01:10:04,969 er du kommer til at være givet en slags nummer. 1758 01:10:04,969 --> 01:10:07,010 Men dette antal er ikke kommer til at være en int, right? 1759 01:10:07,010 --> 01:10:08,574 Hvad det kommer til at være? 1760 01:10:08,574 --> 01:10:09,480 >> STUDENT: [uhørligt]. 1761 01:10:09,480 --> 01:10:11,146 >> Davin: Det kommer til at være en streng, right? 1762 01:10:11,146 --> 01:10:13,160 Så hvis du fik a string-- lad os say-- 1763 01:10:13,160 --> 01:10:15,228 >> ROB: Skal jeg trække en redaktør? 1764 01:10:15,228 --> 01:10:16,200 Jeg kan trække up-- 1765 01:10:16,200 --> 01:10:16,800 >> Davin: Åh, du ønsker at gøre det on-- 1766 01:10:16,800 --> 01:10:17,420 >> ROB: Ville du foretrække bestyrelsen? 1767 01:10:17,420 --> 01:10:18,800 >> Davin: Hvad vil du gøre? 1768 01:10:18,800 --> 01:10:19,900 Jeg mener, du ønsker at gøre det i hånden? 1769 01:10:19,900 --> 01:10:21,460 Eller har du lyst til at gøre det ved computer? 1770 01:10:21,460 --> 01:10:22,180 >> ROB: Gør det med hånden. 1771 01:10:22,180 --> 01:10:22,805 >> Davin: [griner] 1772 01:10:22,805 --> 01:10:23,950 ROB: Gør det med hånden. 1773 01:10:23,950 --> 01:10:25,469 >> Davin: OK, så det kommer til at være atoi. 1774 01:10:25,469 --> 01:10:27,760 Så hvad er det-- Jeg mener, vi får sandsynligvis give dette til dig. 1775 01:10:27,760 --> 01:10:29,106 Men hvad det kommer til at vende tilbage? 1776 01:10:29,106 --> 01:10:29,452 >> STUDENT: Int. 1777 01:10:29,452 --> 01:10:31,076 >> Davin: Det kommer til at vende tilbage int, right? 1778 01:10:31,076 --> 01:10:33,772 So-- Jeg ønsker ikke at gøre det der. 1779 01:10:33,772 --> 01:10:34,510 Jeg vil gøre det her. 1780 01:10:34,510 --> 01:10:36,596 >> ROB: Du kan trække det ned og tryk derefter på den. 1781 01:10:36,596 --> 01:10:38,500 1782 01:10:38,500 --> 01:10:40,385 >> Davin: ja. 1783 01:10:40,385 --> 01:10:43,880 [Griner] Spil forandring. 1784 01:10:43,880 --> 01:10:50,950 OK, så det kommer til at være int atoi, og hvad det kommer til at tage? 1785 01:10:50,950 --> 01:10:52,180 1786 01:10:52,180 --> 01:10:57,780 En char stjerne, så bare en snor, stjerne s, som. 1787 01:10:57,780 --> 01:10:59,240 >> ROB: Nice stjerne, nice. 1788 01:10:59,240 --> 01:11:02,582 1789 01:11:02,582 --> 01:11:04,040 Davin: Det er måske ikke være der, OK. 1790 01:11:04,040 --> 01:11:04,540 ROB: Ja. 1791 01:11:04,540 --> 01:11:06,670 Davin: OK, så den første ting du ønsker at do-- jeg 1792 01:11:06,670 --> 01:11:08,490 ved ikke, hvis nogen kiggede i praksis solutions-- 1793 01:11:08,490 --> 01:11:10,150 men hvad du vil ønsker at gøre, er at du er 1794 01:11:10,150 --> 01:11:11,570 lyst til at have en løkke, fordi du er 1795 01:11:11,570 --> 01:11:14,100 lyst til rent faktisk gå gennem denne streng. 1796 01:11:14,100 --> 01:11:18,880 Så helpful-- så lad os sige vi skal til en for-løkke, 1797 01:11:18,880 --> 01:11:22,270 og vi kommer til at gå gennem hvert element af strengen. 1798 01:11:22,270 --> 01:11:23,470 Hvor længe er det? 1799 01:11:23,470 --> 01:11:26,464 Hvor mange gange skal vi at gentage, at der til loop? 1800 01:11:26,464 --> 01:11:27,130 STUDENT: Sterln? 1801 01:11:27,130 --> 01:11:27,963 Davin: Sterln, ja. 1802 01:11:27,963 --> 01:11:29,350 1803 01:11:29,350 --> 01:11:41,294 Så lad os sige int længde er lig sterln s. 1804 01:11:41,294 --> 01:11:44,240 1805 01:11:44,240 --> 01:11:48,740 Og bare nysgerrig, hvorfor er det altid venlig bedre at gøre dette uden for loops? 1806 01:11:48,740 --> 01:11:52,277 Ligesom, hvorfor er det bedre at kalde denne funktion uden for en løkke? 1807 01:11:52,277 --> 01:11:53,360 Bare en hurtig sanity check? 1808 01:11:53,360 --> 01:11:55,810 1809 01:11:55,810 --> 01:11:56,311 Ja? 1810 01:11:56,311 --> 01:11:58,268 STUDENT: Så du ikke gøre er nødt til at holde kontrol det. 1811 01:11:58,268 --> 01:11:59,400 Du kan bare [uhørligt]. 1812 01:11:59,400 --> 01:12:01,560 >> Davin: Præcis, så ja, præcis, hvad hun sagde. 1813 01:12:01,560 --> 01:12:03,101 Så vi behøver ikke at holde øje med det. 1814 01:12:03,101 --> 01:12:05,690 Så for eksempel, hvis jeg ringer denne funktion inde i et loop, 1815 01:12:05,690 --> 01:12:08,050 så jeg har tænkt mig at holde kræver denne funktion flere gange. 1816 01:12:08,050 --> 01:12:10,080 Og det kommer til at falde effektiviteten af ​​dit program. 1817 01:12:10,080 --> 01:12:12,370 Så det er altid nyttigt at erklære den udenfor. 1818 01:12:12,370 --> 01:12:14,370 >> ROB: Det er sagt, på nogle af disse problemer, 1819 01:12:14,370 --> 01:12:17,940 temmelig meget, så længe du får en arbejder løsning, får du fuld kredit. 1820 01:12:17,940 --> 01:12:20,820 Så du skal ikke bekymre dig, hvis dit design er absolut forfærdelige. 1821 01:12:20,820 --> 01:12:22,120 1822 01:12:22,120 --> 01:12:25,230 Det kan gøre os forstyrret læse din kode. 1823 01:12:25,230 --> 01:12:28,160 Men så længe det fungerer, du får de point. 1824 01:12:28,160 --> 01:12:29,302 >> Davin: Ja. 1825 01:12:29,302 --> 01:12:31,260 OK, så så jeg har tænkt mig at erklære nogle variabel. 1826 01:12:31,260 --> 01:12:33,900 Det er bare vil kalde int sum. 1827 01:12:33,900 --> 01:12:37,031 Og jeg har tænkt mig at sætte denne lig med nul, som. 1828 01:12:37,031 --> 01:12:38,780 Og det er bare at gå at være en pladsholder. 1829 01:12:38,780 --> 01:12:40,960 Så det kommer til at være hvad jeg har tænkt mig at vende tilbage. 1830 01:12:40,960 --> 01:12:43,730 Så jeg har tænkt mig at i sidste ende returnere summen af ​​dette program. 1831 01:12:43,730 --> 01:12:44,980 Så jeg har disse to variabler. 1832 01:12:44,980 --> 01:12:45,563 Jeg har længde. 1833 01:12:45,563 --> 01:12:46,500 Jeg har sum. 1834 01:12:46,500 --> 01:12:48,290 Og lad os nu hoppe ind i vores streng. 1835 01:12:48,290 --> 01:12:49,510 >> Så lad os få vores for-løkke. 1836 01:12:49,510 --> 01:13:06,520 Så fire int I lig 0 w, mens Jeg er mindre end længden jeg plus plus. 1837 01:13:06,520 --> 01:13:07,150 Og nu-- 1838 01:13:07,150 --> 01:13:10,920 1839 01:13:10,920 --> 01:13:11,420 ROB: Nice. 1840 01:13:11,420 --> 01:13:14,030 Davin: OK, og nu her kommer kødet af vores kode. 1841 01:13:14,030 --> 01:13:17,380 Så du kan faktisk gøre dette dybest set på én linje. 1842 01:13:17,380 --> 01:13:20,702 Så nogen har en idé af, hvad vi vil gøre næste? 1843 01:13:20,702 --> 01:13:23,680 1844 01:13:23,680 --> 01:13:25,380 OK, så det er OK. 1845 01:13:25,380 --> 01:13:35,860 Så vi gør for at sige sum equals-- lad mig scoot denne over-- sum 1846 01:13:35,860 --> 01:13:50,010 lig sum gange 10 plus-- vi er kommer til at tage s I minus én 1847 01:13:50,010 --> 01:13:54,787 citat 0 et citat gjort, ligesom det. 1848 01:13:54,787 --> 01:13:55,620 ROB: Meget intuitiv. 1849 01:13:55,620 --> 01:13:56,980 1850 01:13:56,980 --> 01:13:57,880 >> Davin: Knuste det. 1851 01:13:57,880 --> 01:14:01,438 OK, så someone-- jeg fik det, jeg fik det. 1852 01:14:01,438 --> 01:14:03,680 1853 01:14:03,680 --> 01:14:06,960 OK, så det er helt klart på vej op. 1854 01:14:06,960 --> 01:14:08,320 1855 01:14:08,320 --> 01:14:09,450 Hvad betyder dette? 1856 01:14:09,450 --> 01:14:12,120 Så Er der nogen vide, hvad det betyder? 1857 01:14:12,120 --> 01:14:13,826 Kan alle se det? 1858 01:14:13,826 --> 01:14:16,088 Nej, ingen kan se dette, OK. 1859 01:14:16,088 --> 01:14:17,390 1860 01:14:17,390 --> 01:14:18,340 Jeg har tænkt mig at-- 1861 01:14:18,340 --> 01:14:20,506 >> ROB: Jeg har tænkt mig at skrive formel bare lige her. 1862 01:14:20,506 --> 01:14:23,140 Davin: OK, Rob kommer til at gøre det på computeren, som er sjovt. 1863 01:14:23,140 --> 01:14:26,889 1864 01:14:26,889 --> 01:14:27,514 ROB: Åh min Gud. 1865 01:14:27,514 --> 01:14:34,340 1866 01:14:34,340 --> 01:14:35,010 Eller jeg vil ikke. 1867 01:14:35,010 --> 01:14:36,288 1868 01:14:36,288 --> 01:14:36,954 Davin: Stand by. 1869 01:14:36,954 --> 01:14:42,300 1870 01:14:42,300 --> 01:14:44,260 STUDENT: Jeg har et spørgsmål. 1871 01:14:44,260 --> 01:14:45,348 Davin: Ja, helt sikkert. 1872 01:14:45,348 --> 01:14:46,223 STUDENT: [uhørligt]? 1873 01:14:46,223 --> 01:14:52,529 1874 01:14:52,529 --> 01:14:54,570 Davin: OK, så det faktisk, lignende, blot i almindelighed, 1875 01:14:54,570 --> 01:14:56,710 hvis du skulle sætte, ligesom, i denne erklæring int 1876 01:14:56,710 --> 01:14:59,770 I lig 0 komma længde lig sterln, at-- 1877 01:14:59,770 --> 01:15:01,200 >> STUDENT: [uhørligt]. 1878 01:15:01,200 --> 01:15:03,585 >> Davin: Det er fint, fordi at-- 1879 01:15:03,585 --> 01:15:05,543 STUDENT: Hvorfor ville du selv nødt til at bruge længde? 1880 01:15:05,543 --> 01:15:08,620 Hvorfor kunne vi ikke bare [uhørligt] sterln s, ligesom hele tiden [uhørligt]? 1881 01:15:08,620 --> 01:15:09,460 >> Davin: Du mener lige her? 1882 01:15:09,460 --> 01:15:10,001 >> STUDENT: Ja. 1883 01:15:10,001 --> 01:15:12,630 Davin: Fordi hver gang for loop kørsler, 1884 01:15:12,630 --> 01:15:14,295 det kommer til at vurdere denne betingelse. 1885 01:15:14,295 --> 01:15:14,920 STUDENT: Right. 1886 01:15:14,920 --> 01:15:16,836 Davin: Og hvis du har sterln der, så er det 1887 01:15:16,836 --> 01:15:19,510 nødt til at faktisk kalde denne funktion hver eneste gang. 1888 01:15:19,510 --> 01:15:21,090 Så i stedet for bare sammenligne det med en int, 1889 01:15:21,090 --> 01:15:23,548 du kommer til at kalde en funktion og derefter sammenligne den 1890 01:15:23,548 --> 01:15:24,510 til returværdien. 1891 01:15:24,510 --> 01:15:25,860 Yeah, så det er bare, ja. 1892 01:15:25,860 --> 01:15:28,860 1893 01:15:28,860 --> 01:15:30,770 >> Nice, OK, så nu alle kan se det. 1894 01:15:30,770 --> 01:15:33,400 Hvad does-- dette er ligesom, det er det. 1895 01:15:33,400 --> 01:15:34,580 Dette er den marmelade, lige her. 1896 01:15:34,580 --> 01:15:37,030 1897 01:15:37,030 --> 01:15:37,930 Hvad betyder det? 1898 01:15:37,930 --> 01:15:39,250 1899 01:15:39,250 --> 01:15:39,970 Hvad laver jeg? 1900 01:15:39,970 --> 01:15:41,890 1901 01:15:41,890 --> 01:15:42,880 Ja, en idé? 1902 01:15:42,880 --> 01:15:43,482 Ja? 1903 01:15:43,482 --> 01:15:45,692 >> STUDENT: Nå, så når du indtaster et array, 1904 01:15:45,692 --> 01:15:47,525 du kommer til at gå fra venstre mod højre, 1905 01:15:47,525 --> 01:15:51,786 så du kommer til at gå i decimal nede fra [uhørligt]. 1906 01:15:51,786 --> 01:15:52,410 Davin: Præcis. 1907 01:15:52,410 --> 01:15:55,063 STUDENT: Så hver enkelt du er nødt til at formere sig 1908 01:15:55,063 --> 01:15:59,490 hvad du så som værdien af ​​den int ved den tid, du kommer til at flytte, at over én. 1909 01:15:59,490 --> 01:16:01,590 >> Davin: Perfekt, perfekt, så for eksempel, lad os 1910 01:16:01,590 --> 01:16:05,376 siger jeg gav dig-- jeg vil skrive herovre. 1911 01:16:05,376 --> 01:16:06,480 Nej, jeg er ikke. 1912 01:16:06,480 --> 01:16:08,640 Jeg har tænkt mig at skrive her. 1913 01:16:08,640 --> 01:16:12,080 Lad os sige, at jeg gav dig 76, right? 1914 01:16:12,080 --> 01:16:13,380 Lad os sige, at jeg giver dig 76. 1915 01:16:13,380 --> 01:16:15,360 Det er en streng til at begynde med, OK? 1916 01:16:15,360 --> 01:16:16,840 >> Så længde er hvad? 1917 01:16:16,840 --> 01:16:18,060 1918 01:16:18,060 --> 01:16:19,060 2, right? 1919 01:16:19,060 --> 01:16:20,290 Sum er 0. 1920 01:16:20,290 --> 01:16:21,600 Så hopper vi i vores for-løkke. 1921 01:16:21,600 --> 01:16:24,187 OK, den første iteration af dette, hvad det kommer til at være? 1922 01:16:24,187 --> 01:16:25,270 Det kommer til at være summen er 0. 1923 01:16:25,270 --> 01:16:27,180 Så opsummere gange 10 0. 1924 01:16:27,180 --> 01:16:28,500 Det er meningsløst. 1925 01:16:28,500 --> 01:16:29,880 Så hvad betyder dette gøre? 1926 01:16:29,880 --> 01:16:30,845 1927 01:16:30,845 --> 01:16:31,720 STUDENT: [uhørligt]. 1928 01:16:31,720 --> 01:16:33,110 1929 01:16:33,110 --> 01:16:37,430 >> Davin: Det kommer til at dreje det karakter i et heltal, right? 1930 01:16:37,430 --> 01:16:42,160 Det er lidt ligesom med din problem set-- denne light-- 1931 01:16:42,160 --> 01:16:44,170 det er lidt ligesom med problem indstillet til Visioneer. 1932 01:16:44,170 --> 01:16:45,980 Du beskæftiger sig med ASCII-værdier. 1933 01:16:45,980 --> 01:16:48,520 Så hvis jeg giver dig, ligesom, en syv, men det er et tegn, 1934 01:16:48,520 --> 01:16:50,965 og du ønsker at vide, OK, hvad ciffer er det? 1935 01:16:50,965 --> 01:16:53,540 1936 01:16:53,540 --> 01:16:54,910 Ja, du kunne, ja. 1937 01:16:54,910 --> 01:16:55,900 Så hvad ciffer er det? 1938 01:16:55,900 --> 01:16:59,550 Du kunne trække 0 fra det, men du nødt til at trække 0, tegnet. 1939 01:16:59,550 --> 01:17:01,425 >> Og hvor nogle mennesker bliver udløst op, de er 1940 01:17:01,425 --> 01:17:04,260 ligesom, OK, godt, jeg er nødt til at kende ASCII værdier for denne quiz? 1941 01:17:04,260 --> 01:17:06,218 Nej, du absolut ikke brug for at kende ASCII 1942 01:17:06,218 --> 01:17:09,520 værdier for, ligesom, små bogstaver a, store bogstaver A, nul. 1943 01:17:09,520 --> 01:17:12,060 >> ROB: Der er ingen grund til at nogensinde sætte dette på snyde ark. 1944 01:17:12,060 --> 01:17:14,226 >> Davin: do Bestemt ikke spilde din plads med dette. 1945 01:17:14,226 --> 01:17:18,090 Du kan literally-- bare i stedet sige 48, ligesom højre op 1946 01:17:18,090 --> 01:17:24,630 der, som svarer til sige en, en apostrof, 1947 01:17:24,630 --> 01:17:27,680 lignende, nøjagtig det samme. 1948 01:17:27,680 --> 01:17:34,106 >> ROB: Man kunne næsten tro af det som if-- Gud, jeg har brug for min, 1949 01:17:34,106 --> 01:17:37,490 oops-- du kunne næsten tænke på det som hvis vi har sådan noget hash 1950 01:17:37,490 --> 01:17:39,755 definere 0. 48. 1951 01:17:39,755 --> 01:17:41,320 1952 01:17:41,320 --> 01:17:42,030 Det vil ikke fungere. 1953 01:17:42,030 --> 01:17:45,502 Men tænk på det som enkelt citat 0 enkelt tilbud, og for alle tegn. 1954 01:17:45,502 --> 01:17:47,960 Tænk på det som en konstant, repræsenterer det ASCII værdi. 1955 01:17:47,960 --> 01:17:49,080 >> Davin: Ja. 1956 01:17:49,080 --> 01:17:52,820 OK, så den første gang igennem, så med 76-- så den første gang igennem, 1957 01:17:52,820 --> 01:17:57,260 det er bare tegn 7 minus tegnet 0, 1958 01:17:57,260 --> 01:18:00,420 og de er syv integers-- godt, de 1959 01:18:00,420 --> 01:18:04,030 er syv rum væk fra hinanden anden på ASCII diagram eller whatever. 1960 01:18:04,030 --> 01:18:06,770 Så det kommer til at returnere en int 7. 1961 01:18:06,770 --> 01:18:08,720 Så nu, sum er lig med 7. 1962 01:18:08,720 --> 01:18:10,830 >> OK, ja, lad os hoppe i dette for loop igen. 1963 01:18:10,830 --> 01:18:13,010 OK, nu er det beløb gange 10. 1964 01:18:13,010 --> 01:18:15,800 Så du er effektivt flytte 7 til venstre. 1965 01:18:15,800 --> 01:18:17,542 Giver det mening? 1966 01:18:17,542 --> 01:18:19,250 Du er effektivt flytte den til venstre. 1967 01:18:19,250 --> 01:18:21,790 >> Og så skal du add-- dette vil være 6 minus 0. 1968 01:18:21,790 --> 01:18:22,650 Det er 6. 1969 01:18:22,650 --> 01:18:24,752 Så det kommer til at være 70 plus 6. 1970 01:18:24,752 --> 01:18:25,996 76, det er dit nummer. 1971 01:18:25,996 --> 01:18:28,370 Så uanset hvad nummer Jeg gav dig, det er langsomt bare 1972 01:18:28,370 --> 01:18:31,610 kommer til at flytte større værdier til venstre, 1 faktor 10 1973 01:18:31,610 --> 01:18:35,525 hver gang i for-løkken, og tilføj derefter som nødvendigt. 1974 01:18:35,525 --> 01:18:37,350 1975 01:18:37,350 --> 01:18:37,865 >> I ryggen? 1976 01:18:37,865 --> 01:18:40,240 STUDENT: Vi har ikke at gøre enhver kontrol i programmet? 1977 01:18:40,240 --> 01:18:41,580 1978 01:18:41,580 --> 01:18:44,302 >> ROB: Så så langt som at kontrollere går til programmet, 1979 01:18:44,302 --> 01:18:46,510 vi ville fortælle dig temmelig meget, hvad du har brug for at kontrollere. 1980 01:18:46,510 --> 01:18:48,670 Hvis vi ikke fortælle dig noget, så generelt 1981 01:18:48,670 --> 01:18:50,320 antage, at du er nødt til at kontrollere de fleste ting. 1982 01:18:50,320 --> 01:18:54,772 Ligesom du måske, bare for at være sikker, du bør nok tjekke hey, er s null? 1983 01:18:54,772 --> 01:18:56,230 Så jeg har ingen idé om, hvad de skal vende tilbage. 1984 01:18:56,230 --> 01:18:58,814 Men vi vil fortælle dig denne slags ting. 1985 01:18:58,814 --> 01:18:59,480 0, ved jeg ikke. 1986 01:18:59,480 --> 01:19:02,786 >> Davin: Og hvorfor skulle du ønsker at kontrollere igen, hvis s er lig nul? 1987 01:19:02,786 --> 01:19:03,660 STUDENT: [uhørligt]. 1988 01:19:03,660 --> 01:19:04,880 Davin: På grund af char stjerne. 1989 01:19:04,880 --> 01:19:05,510 Det er en pointer. 1990 01:19:05,510 --> 01:19:09,240 Så en helt acceptabel erklæring, jeg kunne sige, OK, 1991 01:19:09,240 --> 01:19:11,917 s er lig nul, fordi det kunne være en pegepind til null. 1992 01:19:11,917 --> 01:19:14,250 Så når du har pointers i din vej i som dette, 1993 01:19:14,250 --> 01:19:15,420 bør du nok tjekke. 1994 01:19:15,420 --> 01:19:18,461 Fordi hvis du ikke kontrollere, og så du derefter gå ind i din for-løkke, 1995 01:19:18,461 --> 01:19:20,100 og du doing-- scoot ned. 1996 01:19:20,100 --> 01:19:21,980 1997 01:19:21,980 --> 01:19:22,920 Scoot ned. 1998 01:19:22,920 --> 01:19:23,860 >> ROB: Beklager, det er det. 1999 01:19:23,860 --> 01:19:25,860 >> Davin: Og så, ligesom, hvis det er nul, og så er du 2000 01:19:25,860 --> 01:19:28,267 gøre dette, hvad fejl vil du få? 2001 01:19:28,267 --> 01:19:29,850 STUDENT: Du vil få et sæt fejl. 2002 01:19:29,850 --> 01:19:31,250 Davin: Du kommer til at sætte fejl, højre, fordi du er 2003 01:19:31,250 --> 01:19:32,616 forsøger at indekset i null. 2004 01:19:32,616 --> 01:19:35,240 Så du vil forsøge at indeksere i hukommelsen, som du ikke ejer. 2005 01:19:35,240 --> 01:19:39,550 Så dette, hvis det er nul, og du gør dette, vil du cyklus. 2006 01:19:39,550 --> 01:19:43,656 >> ROB: Jeg tror også på den eksamen, hvor vi stillede dette spørgsmål, vi fortælle dig 2007 01:19:43,656 --> 01:19:45,655 at du bare kan antage Det er et positivt tal. 2008 01:19:45,655 --> 01:19:48,270 Fordi atoi også forventes at håndtere negative tal, 2009 01:19:48,270 --> 01:19:49,686 så du ville have til særtilfælde. 2010 01:19:49,686 --> 01:19:53,080 Hey, er det første tegn en bindestreg, i hvilket tilfælde, OK, 2011 01:19:53,080 --> 01:19:54,839 nu er det en negativt heltal. 2012 01:19:54,839 --> 01:19:56,380 Vi vil fortælle dig den slags ting. 2013 01:19:56,380 --> 01:19:58,005 Vi vil fortælle dig, hvad du har brug for at håndtere. 2014 01:19:58,005 --> 01:19:59,310 Davin: Ja. 2015 01:19:59,310 --> 01:20:02,530 Så jeg er sikker på, at nogle mennesker måske have-- Hvis du begyndte at kigge på gamle eksamen, 2016 01:20:02,530 --> 01:20:03,900 du har set sterln. 2017 01:20:03,900 --> 01:20:05,120 Det er en populær en. 2018 01:20:05,120 --> 01:20:09,790 Og jeg tror i sterln, skulle du gøre denne kontrol for null, tilbagevenden 2019 01:20:09,790 --> 01:20:10,950 0 eller noget lignende. 2020 01:20:10,950 --> 01:20:11,940 Ligesom, du havde til at tjekke for null. 2021 01:20:11,940 --> 01:20:14,230 Og hvis du ikke gjorde det, at var peger ud på quizzen. 2022 01:20:14,230 --> 01:20:16,750 2023 01:20:16,750 --> 01:20:19,500 Så alligevel gør alle føler OK med atoi? 2024 01:20:19,500 --> 01:20:21,112 2025 01:20:21,112 --> 01:20:22,820 Er der nogen ønsker at gå over dele igen? 2026 01:20:22,820 --> 01:20:23,815 2027 01:20:23,815 --> 01:20:25,565 ROB: Oh yeah, tror jeg vi også fortælle dig, at du 2028 01:20:25,565 --> 01:20:28,565 kan antage, at alt is-- det de er faktisk indtaste et nummer, 2029 01:20:28,565 --> 01:20:32,821 at du ikke behøver at bekymre sig om, lignende, breve er i strengen, så. 2030 01:20:32,821 --> 01:20:33,320 Davin: Ja. 2031 01:20:33,320 --> 01:20:33,922 Ja? 2032 01:20:33,922 --> 01:20:35,713 STUDENT: Kan du gå over en gang mere, når 2033 01:20:35,713 --> 01:20:37,860 du bruger dobbelt citat og enkelt citat? 2034 01:20:37,860 --> 01:20:41,290 >> Davin: Sure, så dobbelt anførselstegn, meget simpelthen, er dobbelte anførselstegn er strenge. 2035 01:20:41,290 --> 01:20:43,370 Så hvis du dobbelt citat noget, det er en streng. 2036 01:20:43,370 --> 01:20:48,270 Så, ligesom, hvis jeg havde denne 0 herovre, og jeg gjorde det, det er en streng. 2037 01:20:48,270 --> 01:20:50,060 Det er ikke længere et tegn. 2038 01:20:50,060 --> 01:20:54,816 Så jeg kan ikke finde denne værdi på min ASCII diagram, fordi det er en streng, ja. 2039 01:20:54,816 --> 01:20:57,770 2040 01:20:57,770 --> 01:20:59,480 >> OK, alle andre spørgsmål? 2041 01:20:59,480 --> 01:21:00,405 Ja? 2042 01:21:00,405 --> 01:21:02,345 >> STUDENT: Så du har allerede besvaret dette, 2043 01:21:02,345 --> 01:21:05,255 men ligesom, når vi er faktisk skriver dette på quizzen, 2044 01:21:05,255 --> 01:21:08,165 vil du have os til at skrive med skråstreger nuller [uhørligt]? 2045 01:21:08,165 --> 01:21:11,041 2046 01:21:11,041 --> 01:21:11,540 Davin: Nej. 2047 01:21:11,540 --> 01:21:13,800 Spørgsmålet var, bør du sætte en skråstreg igennem nullerne 2048 01:21:13,800 --> 01:21:14,890 at angive, om de er nuller? 2049 01:21:14,890 --> 01:21:15,890 Nej, vi finder ud af det. 2050 01:21:15,890 --> 01:21:16,940 2051 01:21:16,940 --> 01:21:19,530 Ja, tak, de er gode. 2052 01:21:19,530 --> 01:21:20,860 OK, noget andet? 2053 01:21:20,860 --> 01:21:25,060 Er der nogen ønsker at-- så jeg tror vi har kørt en lille smule over tid. 2054 01:21:25,060 --> 01:21:27,305 Ønsker du at se en anden, eller? 2055 01:21:27,305 --> 01:21:28,096 STUDENT: RandomInt. 2056 01:21:28,096 --> 01:21:29,230 2057 01:21:29,230 --> 01:21:30,750 >> Davin: RandomInt, OK, nøjagtigt. 2058 01:21:30,750 --> 01:21:32,975 Så lad os gøre RandomInt. 2059 01:21:32,975 --> 01:21:34,395 2060 01:21:34,395 --> 01:21:35,270 Jeg vil gøre det herovre. 2061 01:21:35,270 --> 01:21:36,770 2062 01:21:36,770 --> 01:21:39,210 Så RandomInt er faktisk meget enklere. 2063 01:21:39,210 --> 01:21:43,578 Jeg tror atoi er sandsynligvis den sværeste ene at vi har bedt i de foregående år. 2064 01:21:43,578 --> 01:21:44,453 STUDENT: [uhørligt]. 2065 01:21:44,453 --> 01:21:46,660 2066 01:21:46,660 --> 01:21:47,161 >> Davin: Hvad? 2067 01:21:47,161 --> 01:21:49,493 ROB: Jeg ser, om det er sådan af synlig fra herovre. 2068 01:21:49,493 --> 01:21:50,040 Davin: Er det? 2069 01:21:50,040 --> 01:21:52,500 ROB: Jeg tror ikke, det er going-- jeg tror det kommer til at køre ud til højre. 2070 01:21:52,500 --> 01:21:53,791 Davin: OK, så jeg vil gøre denne ene. 2071 01:21:53,791 --> 01:21:56,250 Og så skal du bare sætte det på skærmen. 2072 01:21:56,250 --> 01:21:57,150 >> ROB: Okay. 2073 01:21:57,150 --> 01:21:58,190 >> Davin: Du ønsker at være min skriftklog? 2074 01:21:58,190 --> 01:21:58,600 >> ROB: Ja. 2075 01:21:58,600 --> 01:21:59,100 >> Davin: Nice. 2076 01:21:59,100 --> 01:22:01,210 2077 01:22:01,210 --> 01:22:02,727 OK, jeg kan slette det? 2078 01:22:02,727 --> 01:22:04,188 >> STUDENT: Ja. 2079 01:22:04,188 --> 01:22:05,162 >> Davin: Det er så hårdt. 2080 01:22:05,162 --> 01:22:10,032 2081 01:22:10,032 --> 01:22:12,062 (Sang) Du laver hvad du laver. 2082 01:22:12,062 --> 01:22:14,454 Og gør, hvad du ikke skal gøre. 2083 01:22:14,454 --> 01:22:14,954 Ok. 2084 01:22:14,954 --> 01:22:19,790 2085 01:22:19,790 --> 01:22:22,930 >> OK, hvis jeg husker rigtigt, om quizzen den RandomInt var ligesom, 2086 01:22:22,930 --> 01:22:26,190 OK, jeg har tænkt mig at give dig to tal, som en a og b. 2087 01:22:26,190 --> 01:22:30,380 Og jeg vil have dig til at give mig en RandomInt mellem disse numre. 2088 01:22:30,380 --> 01:22:33,440 Så RandomInt går at tage to numbers-- 2089 01:22:33,440 --> 01:22:41,690 så RandomInt-- og det er vil returnere en int. 2090 01:22:41,690 --> 01:22:42,930 >> Så hvad er returværdien? 2091 01:22:42,930 --> 01:22:44,151 Jeg har lige fortalt dig. 2092 01:22:44,151 --> 01:22:44,650 Int, right? 2093 01:22:44,650 --> 01:22:46,400 2094 01:22:46,400 --> 01:22:49,260 Ligesom dette, og så er det kommer til at tage to int'er. 2095 01:22:49,260 --> 01:22:56,301 Så det kommer til at tage int a og int b, som. 2096 01:22:56,301 --> 01:22:58,217 Så hvad RandomInt er kommer til at gøre, er at det går 2097 01:22:58,217 --> 01:23:02,440 til at returnere nogle tilfældige værdi mellem disse to værdier. 2098 01:23:02,440 --> 01:23:05,140 Så det kommer til at være større end en mindre end b. 2099 01:23:05,140 --> 01:23:09,020 Så jeg tror, ​​du kan sikkert antage, at a er den mindste af de to værdier. 2100 01:23:09,020 --> 01:23:12,210 Så hvis vi har at gøre med tilfældighed, hvilken funktion 2101 01:23:12,210 --> 01:23:14,825 Vi har set, at giver os tilfældige ting? 2102 01:23:14,825 --> 01:23:15,450 STUDENT: Drand. 2103 01:23:15,450 --> 01:23:16,506 Davin: Drand, nøjagtigt. 2104 01:23:16,506 --> 01:23:18,630 Så du vil sandsynligvis ønsker at bruge din drand. 2105 01:23:18,630 --> 01:23:19,940 2106 01:23:19,940 --> 01:23:29,160 Så du kan sige int tilfældig, og vi vil bare sige det er lig 0 lige nu. 2107 01:23:29,160 --> 01:23:30,170 2108 01:23:30,170 --> 01:23:38,690 Og de er, vi kommer til at sige, OK, tilfældige ligemænd drand 48. 2109 01:23:38,690 --> 01:23:39,747 2110 01:23:39,747 --> 01:23:40,830 Og hvad betyder dette tilbage? 2111 01:23:40,830 --> 01:23:43,742 Hvad betyder denne funktion giver dig? 2112 01:23:43,742 --> 01:23:45,610 >> STUDENT: Mellem 0 og 1. 2113 01:23:45,610 --> 01:23:47,870 >> Davin: Ja, mellem 0 og 1. 2114 01:23:47,870 --> 01:23:48,890 Så det kommer til at være-- 2115 01:23:48,890 --> 01:23:51,070 >> ROB: Og det is-- jeg tror vi ville fortælle dig dette. 2116 01:23:51,070 --> 01:23:52,670 Ligesom, kan du bruge drand 48. 2117 01:23:52,670 --> 01:23:54,350 Du kan kontrollere dette på fortiden eksamen. 2118 01:23:54,350 --> 01:23:56,720 Men vi ville nok sige dig kan bruge drand 48, som 2119 01:23:56,720 --> 01:23:58,790 returnerer en float mellem 0 og 1. 2120 01:23:58,790 --> 01:24:00,830 >> Davin: Ja, ja, jeg er temmelig sikker på eksamen 2121 01:24:00,830 --> 01:24:03,860 det siger du nok ønsker at bruge drand, ja. 2122 01:24:03,860 --> 01:24:07,041 Så det kommer til at vende tilbage vis værdi mellem 0 og 1. 2123 01:24:07,041 --> 01:24:08,790 Og så hvad er du lyst til at gøre? 2124 01:24:08,790 --> 01:24:16,360 Nå, du ønsker at formere by-- vent, jeg tror, ​​det er ligesom det, undskyld. 2125 01:24:16,360 --> 01:24:18,018 Jeg vil bare gøre dette. 2126 01:24:18,018 --> 01:24:19,410 Jeg ved det ikke. 2127 01:24:19,410 --> 01:24:22,240 >> Så b minus en. 2128 01:24:22,240 --> 01:24:23,310 2129 01:24:23,310 --> 01:24:24,490 Så hvorfor b minus en? 2130 01:24:24,490 --> 01:24:26,110 2131 01:24:26,110 --> 01:24:30,490 Så lad os sige drand giver dig tilbage en int-- OK, vil jeg bare gøre resten, 2132 01:24:30,490 --> 01:24:33,380 så plus en. 2133 01:24:33,380 --> 01:24:36,130 Så hvad does-- y er b minus en. 2134 01:24:36,130 --> 01:24:40,670 Så lad os sige, at drand giver dig tilbage den maksimale værdi det eventuelt kunne 2135 01:24:40,670 --> 01:24:41,410 give dig. 2136 01:24:41,410 --> 01:24:42,409 Hvad er det kommer til at være? 2137 01:24:42,409 --> 01:24:43,010 STUDENT: 1. 2138 01:24:43,010 --> 01:24:44,430 >> Davin: 1, right? 2139 01:24:44,430 --> 01:24:47,880 Så hvis dette er 1, og du er multiplikation med b minus en, 2140 01:24:47,880 --> 01:24:50,110 godt, det er bare Forskellen mellem minus A. 2141 01:24:50,110 --> 01:24:52,870 Og hvis du så tilføje, at tilbage på en, det er hvad? 2142 01:24:52,870 --> 01:24:54,290 2143 01:24:54,290 --> 01:24:55,180 Det er dybest set b. 2144 01:24:55,180 --> 01:24:56,435 2145 01:24:56,435 --> 01:24:57,310 Giver det mening? 2146 01:24:57,310 --> 01:24:57,851 >> STUDENT: Ja. 2147 01:24:57,851 --> 01:24:59,480 2148 01:24:59,480 --> 01:25:02,170 >> Davin: Så hvis dette er den maksimale værdsætter det eventuelt kunne være, 2149 01:25:02,170 --> 01:25:03,175 det kommer til at være 1. 2150 01:25:03,175 --> 01:25:04,122 2151 01:25:04,122 --> 01:25:06,330 Og så er det bare forskellen mellem de to. 2152 01:25:06,330 --> 01:25:11,410 Tilføj på en, så dette er vil vende tilbage tilfældig. 2153 01:25:11,410 --> 01:25:15,000 2154 01:25:15,000 --> 01:25:18,620 Og i hjørnet tilfælde af, at drand giver dig tilbage 1, 2155 01:25:18,620 --> 01:25:20,970 tilfældig vil bare være effektivt være b. 2156 01:25:20,970 --> 01:25:22,700 Men det er den maksimale det kan være. 2157 01:25:22,700 --> 01:25:27,420 Så hvis det kommer til at være mindre end det, så lad os sige, at dens ligesom 0,9, 2158 01:25:27,420 --> 01:25:31,080 så derefter 0,9 gange B minus en vil være mindre 2159 01:25:31,080 --> 01:25:33,230 end forskellen mellem b minus en. 2160 01:25:33,230 --> 01:25:35,830 >> Og så hvis du tilføjer, at på en, så denne værdi er 2161 01:25:35,830 --> 01:25:38,986 vil være større end en, fordi du tilføjer noget på det, 2162 01:25:38,986 --> 01:25:40,360 men det vil være mindre end b. 2163 01:25:40,360 --> 01:25:41,430 2164 01:25:41,430 --> 01:25:44,420 Så du kommer til at få en tilfældig nummer, fordi du ringer drand. 2165 01:25:44,420 --> 01:25:48,000 Og det rand, at tilfældige tal er kommer til at være et sted i mellem et 2166 01:25:48,000 --> 01:25:49,342 b. 2167 01:25:49,342 --> 01:25:50,780 Giver det mening? 2168 01:25:50,780 --> 01:25:52,990 >> ROB: Bare for at sætte det i konkrete tal, så 2169 01:25:52,990 --> 01:25:55,450 Lad os sige at vi vil vælge en tilfældigt tal mellem 7 og 10. 2170 01:25:55,450 --> 01:25:56,960 Så B minus en er vores sortiment. 2171 01:25:56,960 --> 01:26:00,150 Så der er et udvalg af tre numre, vi ønsker at vælge fra. 2172 01:26:00,150 --> 01:26:03,290 Og derefter gange at mellem 0 og 1 1, 2173 01:26:03,290 --> 01:26:07,430 hvis der derefter giver os some-- lad os sige det giver os 1.5. 2174 01:26:07,430 --> 01:26:10,670 >> Derefter 1.5, vi ønsker at gå fra 7 til 10. 2175 01:26:10,670 --> 01:26:14,470 Så 1.5 plus 7 bringer os tilbage i vores 7 til 10 rækkevidde. 2176 01:26:14,470 --> 01:26:17,580 Og så er vi opbevare det inde i et helt tal, så det afkortet ned til 8. 2177 01:26:17,580 --> 01:26:18,790 Og så har vi bare returnere det. 2178 01:26:18,790 --> 01:26:21,310 Så B minus en er vores sortiment. 2179 01:26:21,310 --> 01:26:25,770 en skifter det op i numrene at vi ønsker inden for dette område. 2180 01:26:25,770 --> 01:26:30,540 Så mellem 7 og 10, og så vi kan vende tilbage, hvad vi ender med. 2181 01:26:30,540 --> 01:26:32,684 >> Davin: Yeah, nice. 2182 01:26:32,684 --> 01:26:34,470 >> ROB: Tak. 2183 01:26:34,470 --> 01:26:35,628 >> Davin: Ja, hvad sker der? 2184 01:26:35,628 --> 01:26:39,746 >> STUDENT: Skal vi køre det til nogen form for ASCII fejl, når we're-- hvis drand er 2185 01:26:39,746 --> 01:26:40,996 returnerer en float [uhørligt]. 2186 01:26:40,996 --> 01:26:42,470 2187 01:26:42,470 --> 01:26:45,360 >> ROB: Så ligesom Rob sagde, fordi tilfældig er ikke en int, 2188 01:26:45,360 --> 01:26:47,080 så drand vil være en float. 2189 01:26:47,080 --> 01:26:48,470 Så og så ganger ud. 2190 01:26:48,470 --> 01:26:50,507 Og du kan få nogle slags float numre. 2191 01:26:50,507 --> 01:26:51,840 Og så det kommer til at afkorte. 2192 01:26:51,840 --> 01:26:52,339 >> STUDENT: OK. 2193 01:26:52,339 --> 01:26:53,019 Davin: Ja. 2194 01:26:53,019 --> 01:26:56,060 ROB: Og hvis compiler skulle advare dig om, ligesom, tab af præcision, 2195 01:26:56,060 --> 01:26:58,986 bare smidt en int i der, og så er det godt. 2196 01:26:58,986 --> 01:27:00,398 2197 01:27:00,398 --> 01:27:00,898 Davin: Ja? 2198 01:27:00,898 --> 01:27:02,332 2199 01:27:02,332 --> 01:27:04,722 >> STUDENT: Ville det have den samme sandsynlighed for at få, 2200 01:27:04,722 --> 01:27:06,156 lignende, b eller en [uhørligt]? 2201 01:27:06,156 --> 01:27:08,080 2202 01:27:08,080 --> 01:27:10,980 >> ROB: Så is-- Jeg er faktisk wondering-- er RandomInt nu troede 2203 01:27:10,980 --> 01:27:14,362 at være et nummer fra et til mindre end b? 2204 01:27:14,362 --> 01:27:16,820 Ligesom, hvis det er mellem 7 og 10, hvad er mulighederne? 2205 01:27:16,820 --> 01:27:18,454 7, 8 og 9, eller 7, 8, 9, 10? 2206 01:27:18,454 --> 01:27:19,120 Davin: Jeg glemmer. 2207 01:27:19,120 --> 01:27:19,880 På problemet set-- 2208 01:27:19,880 --> 01:27:20,570 >> ROB: Jeg tror, ​​det er 7, 8, 9. 2209 01:27:20,570 --> 01:27:22,785 >> Davin: Det specifikt siger éns inkluderende og ens eksklusiv. 2210 01:27:22,785 --> 01:27:23,110 >> ROB: Ja. 2211 01:27:23,110 --> 01:27:23,670 >> Davin: Men jeg don't-- jeg not-- 2212 01:27:23,670 --> 01:27:25,878 >> ROB: Så jeg tror, ​​disse er ikke medtaget, i hvilket tilfælde, 2213 01:27:25,878 --> 01:27:28,152 der er en lige sandsynligheden for 7, 8 og 9. 2214 01:27:28,152 --> 01:27:29,360 Der er ingen sandsynlighed på 10. 2215 01:27:29,360 --> 01:27:31,770 2216 01:27:31,770 --> 01:27:32,270 Davin: Ja? 2217 01:27:32,270 --> 01:27:33,395 STUDENT: Jeg har et spørgsmål. 2218 01:27:33,395 --> 01:27:38,090 Vi ønsker at definere en funktion returnerer ikke en værdi, men et array. 2219 01:27:38,090 --> 01:27:41,020 Så hvad ville være syntaks efter at vende tilbage? 2220 01:27:41,020 --> 01:27:44,604 >> Davin: OK, så du derefter would-- efter hjemkomst? 2221 01:27:44,604 --> 01:27:47,020 Så lad os sige du havde erklæret et array eller andet sted deroppe. 2222 01:27:47,020 --> 01:27:49,708 Så du ville bare tilbage navn array. 2223 01:27:49,708 --> 01:27:50,676 >> STUDENT: OK, tak. 2224 01:27:50,676 --> 01:27:51,718 Så skal du bare vende tilbage med en-- 2225 01:27:51,718 --> 01:27:52,759 Davin: Åh vent, så ked af det. 2226 01:27:52,759 --> 01:27:54,620 Spørgsmålet var, hvordan kommer du tilbage et array. 2227 01:27:54,620 --> 01:27:56,170 >> ROB: Selv om det ikke kunne være et array erklæres 2228 01:27:56,170 --> 01:27:57,260 på stakken eller noget lignende. 2229 01:27:57,260 --> 01:27:59,510 Det skulle være noget malloced, fordi malloc 2230 01:27:59,510 --> 01:28:01,610 er, hvordan du får omkring automatisk allokering af hukommelse. 2231 01:28:01,610 --> 01:28:02,109 >> Davin: Ja. 2232 01:28:02,109 --> 01:28:03,433 2233 01:28:03,433 --> 01:28:04,933 ROB: Hvordan du får omkring lokal rækkevidde. 2234 01:28:04,933 --> 01:28:09,670 2235 01:28:09,670 --> 01:28:11,550 >> Davin: Men du ville bare returnere sin name-- 2236 01:28:11,550 --> 01:28:17,890 >> STUDENT: [uhørligt] det er ikke en værdi, for eksempel to tal, så 2237 01:28:17,890 --> 01:28:18,390 [Uhørligt]. 2238 01:28:18,390 --> 01:28:19,590 >> Davin: Du kan ikke vende tilbage flere numre. 2239 01:28:19,590 --> 01:28:20,850 Du kan ikke, ligesom, return-- 2240 01:28:20,850 --> 01:28:23,630 >> STUDENT: Jeg talte om at vende tilbage et array eller noget lignende. 2241 01:28:23,630 --> 01:28:26,050 >> Davin: Ja, så spørgsmålet er kan jeg returnere flere værdier. 2242 01:28:26,050 --> 01:28:27,460 Du kan ikke returnere flere værdier. 2243 01:28:27,460 --> 01:28:30,270 Du kan ikke, ligesom, returnere en så returnere b eller noget lignende. 2244 01:28:30,270 --> 01:28:32,710 Fordi efter du vender tilbage, du tilbage ud af funktionen. 2245 01:28:32,710 --> 01:28:35,790 Og så funktionen er færdig, og ligesom Rob sagde, er på stakken. 2246 01:28:35,790 --> 01:28:38,260 >> Så alt, at hukommelsen bliver bare tilbage til computeren. 2247 01:28:38,260 --> 01:28:40,025 Alt bliver glemt, dybest set. 2248 01:28:40,025 --> 01:28:41,480 2249 01:28:41,480 --> 01:28:44,430 Så hvis du ønsker at vende tilbage flere værdier, er du nødt til at returnere et array, 2250 01:28:44,430 --> 01:28:45,971 Og den måde du gør det er mallocing. 2251 01:28:45,971 --> 01:28:48,780 Og så ville du returnere x som. 2252 01:28:48,780 --> 01:28:50,280 Dybest set, du bare returnere navnet. 2253 01:28:50,280 --> 01:28:51,620 Og når du vender tilbage noget som dette, er du 2254 01:28:51,620 --> 01:28:53,200 faktisk ikke returnere værdi. 2255 01:28:53,200 --> 01:28:55,430 >> Så lad os sige du har gemt værdierne i et array. 2256 01:28:55,430 --> 01:28:57,910 Du er faktisk ikke returnere disse værdier. 2257 01:28:57,910 --> 01:29:01,515 Ligesom, hvis jeg vendte tilbage en int, jeg er virkelig returnere kopier af værdierne. 2258 01:29:01,515 --> 01:29:02,017 2259 01:29:02,017 --> 01:29:03,850 Men hvis jeg skulle vende tilbage noget som dette, 2260 01:29:03,850 --> 01:29:06,450 Jeg tilbage en reference til disse værdier. 2261 01:29:06,450 --> 01:29:09,090 Så jeg vender tilbage, dybest set, en lageradresse til værdierne. 2262 01:29:09,090 --> 01:29:10,079 Giver det mening? 2263 01:29:10,079 --> 01:29:10,620 STUDENT: Ja. 2264 01:29:10,620 --> 01:29:11,120 Davin: Nice. 2265 01:29:11,120 --> 01:29:12,760 2266 01:29:12,760 --> 01:29:13,410 Ja? 2267 01:29:13,410 --> 01:29:15,430 >> STUDENT: Når du er hjælp drand herovre, 2268 01:29:15,430 --> 01:29:17,660 har du nødt til at sætte srand før det? 2269 01:29:17,660 --> 01:29:20,320 >> Davin: Nej, nej, jeg tror det ikke. 2270 01:29:20,320 --> 01:29:23,040 >> ROB: Ja, så har du at sige noget om srand? 2271 01:29:23,040 --> 01:29:26,900 Standarden af ​​jer aldrig sige srand overhovedet er at bare gøre srand nul. 2272 01:29:26,900 --> 01:29:29,350 Så drand på sin egen vilje arbejde. 2273 01:29:29,350 --> 01:29:33,759 Og det vil automatisk frø med den aktuelle tid, er, hvad det bruger. 2274 01:29:33,759 --> 01:29:35,175 2275 01:29:35,175 --> 01:29:35,675 Davin: Ja? 2276 01:29:35,675 --> 01:29:40,950 STUDENT: Har du [uhørligt] med tallene? 2277 01:29:40,950 --> 01:29:42,570 Davin: Ja, du kan. 2278 01:29:42,570 --> 01:29:46,770 STUDENT: Så du kunne sige, ligesom, 4 gange 2. 2279 01:29:46,770 --> 01:29:50,280 Sagen er den, du kan ikke påtage sig så en int er fire bytes. 2280 01:29:50,280 --> 01:29:51,020 Den only-- 2281 01:29:51,020 --> 01:29:53,830 >> Davin: Jeg mener, for quizzen du kan. 2282 01:29:53,830 --> 01:29:54,830 [Griner] 2283 01:29:54,830 --> 01:29:55,780 >> ROB: Mm, nej. 2284 01:29:55,780 --> 01:29:56,780 Davin: Ja, ja du kan. 2285 01:29:56,780 --> 01:30:00,197 Hvis de spørger dig, hvor stor en int er, du kan ikke være, ligesom, fire eller otte. 2286 01:30:00,197 --> 01:30:02,030 ROB: Åh, så hvis Spørgsmålet er specifikt 2287 01:30:02,030 --> 01:30:04,857 lignende, hvis det er en kodende problem, du skal sige størrelse af int. 2288 01:30:04,857 --> 01:30:06,690 Hvis det er en tabel, eller det siger, hvor mange bytes, 2289 01:30:06,690 --> 01:30:08,808 du skal ikke udfylde størrelse int'er. 2290 01:30:08,808 --> 01:30:11,278 >> STUDERENDE: [griner] 2291 01:30:11,278 --> 01:30:18,210 2292 01:30:18,210 --> 01:30:20,580 >> Davin: Right, så hvorfor er størrelse int vigtigt her? 2293 01:30:20,580 --> 01:30:23,085 Så ligesom, hvis vi skal til 32-bit processor eller noget lignende, 2294 01:30:23,085 --> 01:30:24,300 så det kommer til at være fire bytes. 2295 01:30:24,300 --> 01:30:26,342 Men på nogle af de nyere stuff, kunne det være hvad? 2296 01:30:26,342 --> 01:30:27,383 Det kunne være otte, right? 2297 01:30:27,383 --> 01:30:30,550 Så denne-- hvis du bare svært kode fire, så på nogle maskiner, vil det fungere. 2298 01:30:30,550 --> 01:30:32,180 Nogle maskiner, vil det ikke fungere. 2299 01:30:32,180 --> 01:30:35,270 Men hvis den quiz vi er ligesom hvor stor er en int? 2300 01:30:35,270 --> 01:30:35,770 Sætte fire. 2301 01:30:35,770 --> 01:30:38,710 2302 01:30:38,710 --> 01:30:39,210 ROB: Right. 2303 01:30:39,210 --> 01:30:39,790 Davin: Ja? 2304 01:30:39,790 --> 01:30:43,192 STUDENT: Så fordi vi erklære [Uhørlig] inde i en funktion, 2305 01:30:43,192 --> 01:30:45,622 bør vi sætte 3 inde denne funktion? 2306 01:30:45,622 --> 01:30:46,907 Eller kan vi bruge det udenfor? 2307 01:30:46,907 --> 01:30:48,740 Davin: Du kan bruge det uden for denne funktion. 2308 01:30:48,740 --> 01:30:49,890 Så han beder om gratis. 2309 01:30:49,890 --> 01:30:51,700 >> STUDENT: miste overblikket hvor [uhørligt]. 2310 01:30:51,700 --> 01:30:54,720 >> ROB: Åh, er det gratis ikke happen-- der er en del af magien i malloc 2311 01:30:54,720 --> 01:30:57,220 er, at du ikke er begrænset til lokale rækkevidde. 2312 01:30:57,220 --> 01:31:00,700 Du har fuld kontrol over hvor længe dine variabler bor. 2313 01:31:00,700 --> 01:31:05,380 Så vi kalder malloc her, det måske være en helt separat funktion. 2314 01:31:05,380 --> 01:31:08,670 Det kan være 10 timer senere at vi endelig ringe gratis. 2315 01:31:08,670 --> 01:31:11,764 >> Davin: Altså for eksempel, ligesom et par uger fra nu, når du endelig 2316 01:31:11,764 --> 01:31:13,680 gøre din ordbog speller psets, du vil 2317 01:31:13,680 --> 01:31:16,410 at have en funktion, som skaber tonsvis af knudepunkter. 2318 01:31:16,410 --> 01:31:18,630 Så du mallocing tons af knudepunkter i denne funktion. 2319 01:31:18,630 --> 01:31:20,670 Og senere i en separat funktion, er du 2320 01:31:20,670 --> 01:31:22,440 lyst til at befri alle de noder. 2321 01:31:22,440 --> 01:31:25,740 Så du kan bogstavelig talt lige gå til frigøre en pointer, så en hukommelse adresse 2322 01:31:25,740 --> 01:31:26,684 til, hvad du malloced. 2323 01:31:26,684 --> 01:31:27,600 Og det vil være fint. 2324 01:31:27,600 --> 01:31:29,725 Du behøver ikke at befri, lignende, i samme funktion. 2325 01:31:29,725 --> 01:31:30,449 Ja? 2326 01:31:30,449 --> 01:31:36,197 >> STUDENT: Så en malloc variabel [uhørligt] udenfor? 2327 01:31:36,197 --> 01:31:37,384 Er det hvad du siger? 2328 01:31:37,384 --> 01:31:38,300 Davin: Vent, sige det? 2329 01:31:38,300 --> 01:31:38,800 Undskyld. 2330 01:31:38,800 --> 01:31:42,300 >> STUDENT: Hvis en malloc variabel kan være fri overalt i koden, 2331 01:31:42,300 --> 01:31:44,800 så de kan tilgås overalt i koden? 2332 01:31:44,800 --> 01:31:45,800 Kan du holde dem lokalt? 2333 01:31:45,800 --> 01:31:47,880 >> Davin: Åh, spurgte hun, lignende, variable, like-- 2334 01:31:47,880 --> 01:31:51,300 2335 01:31:51,300 --> 01:31:55,510 >> ROB: Så du stadig nødt til at have en form for henvisning 2336 01:31:55,510 --> 01:31:57,220 til malloc blok af hukommelse. 2337 01:31:57,220 --> 01:31:58,540 Så her, vi vender tilbage x. 2338 01:31:58,540 --> 01:31:59,040 STUDENT: Oh. 2339 01:31:59,040 --> 01:32:01,920 ROB: Hvis vi ikke returnerede x her, og det var bare ugyldig 2340 01:32:01,920 --> 01:32:04,550 så ville vi ikke have adgang til markøren, der blev malloced, 2341 01:32:04,550 --> 01:32:05,920 og det er lækket hukommelse. 2342 01:32:05,920 --> 01:32:06,690 >> STUDENT: OK. 2343 01:32:06,690 --> 01:32:10,010 >> Davin: Så ligesom, lad os sige, at du har dette, ligesom, lige her. 2344 01:32:10,010 --> 01:32:10,510 ROB: Nej. 2345 01:32:10,510 --> 01:32:13,430 Davin: I min vigtigste funktion, kan jeg ikke bare kalde denne x og være ligesom, OK, 2346 01:32:13,430 --> 01:32:14,645 i denne funktion, jeg gjorde det. 2347 01:32:14,645 --> 01:32:14,960 >> ROB: Right. 2348 01:32:14,960 --> 01:32:17,790 >> Davin: Så jeg har tænkt mig at ringe til x, lignende, hoved- eller noget lignende. 2349 01:32:17,790 --> 01:32:18,540 Du kan ikke gøre det. 2350 01:32:18,540 --> 01:32:19,600 Du kommer til at returnere noget. 2351 01:32:19,600 --> 01:32:21,000 Men hvad vil du vende tilbage? 2352 01:32:21,000 --> 01:32:22,130 Du kommer til at returnere en hukommelse adresse. 2353 01:32:22,130 --> 01:32:25,130 Og fordi du returnerer en hukommelse adresse, der kan tilgås andetsteds. 2354 01:32:25,130 --> 01:32:27,262 2355 01:32:27,262 --> 01:32:28,255 Flere spørgsmål? 2356 01:32:28,255 --> 01:32:28,755 Ja? 2357 01:32:28,755 --> 01:32:31,213 >> STUDENT: Er ovennævnte funktion være check på [uhørligt]? 2358 01:32:31,213 --> 01:32:33,270 2359 01:32:33,270 --> 01:32:35,005 >> Davin: Hvorfor behøver jeg ikke at gøre det? 2360 01:32:35,005 --> 01:32:35,880 STUDENT: [uhørligt]. 2361 01:32:35,880 --> 01:32:37,755 Davin: Fordi du er ikke mallocing noget. 2362 01:32:37,755 --> 01:32:39,640 Så det er not-- ja, det er ikke kan lide en streng s. 2363 01:32:39,640 --> 01:32:41,160 Det er en pointer sted. 2364 01:32:41,160 --> 01:32:42,951 Disse er blot værdier. 2365 01:32:42,951 --> 01:32:43,450 STUDENT: OK. 2366 01:32:43,450 --> 01:32:43,949 Davin: Ja. 2367 01:32:43,949 --> 01:32:47,600 2368 01:32:47,600 --> 01:32:48,470 Noget andet? 2369 01:32:48,470 --> 01:32:48,970 ROB: Yep? 2370 01:32:48,970 --> 01:32:50,386 STUDENT: Men når du [uhørligt]? 2371 01:32:50,386 --> 01:32:55,050 2372 01:32:55,050 --> 01:32:58,690 >> ROB: Så for at frigøre hukommelse, ville vi sige her. 2373 01:32:58,690 --> 01:33:01,350 Så x er vores pointer til blokken hukommelse. 2374 01:33:01,350 --> 01:33:02,845 Vi gratis at pointer. 2375 01:33:02,845 --> 01:33:04,470 Og vi ville ikke nødvendigvis gøre det her. 2376 01:33:04,470 --> 01:33:05,390 Vi kan gøre det overalt. 2377 01:33:05,390 --> 01:33:10,400 Men du kun ringe gratis på noget der malloc afkast. 2378 01:33:10,400 --> 01:33:12,940 Så malloc, her, returneres hvad der bliver gemt i x. 2379 01:33:12,940 --> 01:33:14,802 Så vi kan ringe gratis på x. 2380 01:33:14,802 --> 01:33:18,730 2381 01:33:18,730 --> 01:33:20,556 Eventuelle sidste spørgsmål? 2382 01:33:20,556 --> 01:33:21,701 >> Davin: Eventuelle sidste spørgsmål? 2383 01:33:21,701 --> 01:33:22,200 Ja? 2384 01:33:22,200 --> 01:33:25,152 >> STUDENT: Beklager, kan du igen forklare hvorfor du vil frigøre derinde? 2385 01:33:25,152 --> 01:33:26,630 Hvorfor [uhørligt]? 2386 01:33:26,630 --> 01:33:27,774 >> Davin: For her? 2387 01:33:27,774 --> 01:33:29,109 >> STUDENT: Ja, som lige efter. 2388 01:33:29,109 --> 01:33:30,900 Davin: Du har sikkert ønsker ikke en gratis her. 2389 01:33:30,900 --> 01:33:31,630 ROB: Du vil sandsynligvis ikke. 2390 01:33:31,630 --> 01:33:33,060 Davin: Ja, at dette ville gøre noget. 2391 01:33:33,060 --> 01:33:35,220 Dette vil, ligesom, skabe hukommelse, gøre ting for det, 2392 01:33:35,220 --> 01:33:37,390 og derefter straks glemme alt om det, ja. 2393 01:33:37,390 --> 01:33:39,850 >> ROB: Men vi kan gøre, ligesom, i her for nogle grund. 2394 01:33:39,850 --> 01:33:43,902 Vi kan sige int stjerne y lig tilbagevenden array. 2395 01:33:43,902 --> 01:33:47,900 Har nogle ting med y, måske udskrive indholdet. 2396 01:33:47,900 --> 01:33:49,350 Og så, endelig, vi er færdige. 2397 01:33:49,350 --> 01:33:50,626 Vi kan gratis å. 2398 01:33:50,626 --> 01:33:51,501 STUDENT: [uhørligt]. 2399 01:33:51,501 --> 01:33:57,839 2400 01:33:57,839 --> 01:33:59,005 Davin: Skal jeg rulle ned? 2401 01:33:59,005 --> 01:34:00,445 Tak. 2402 01:34:00,445 --> 01:34:00,945 ROB: Nice. 2403 01:34:00,945 --> 01:34:02,400 2404 01:34:02,400 --> 01:34:03,646 >> Davin: OK, det er det. 2405 01:34:03,646 --> 01:34:04,520 ROB: Okay, godt. 2406 01:34:04,520 --> 01:34:05,070 Held og lykke. 2407 01:34:05,070 --> 01:34:06,800 >> Davin: Hvis du har spørgsmål, email os. 2408 01:34:06,800 --> 01:34:08,670 Held og lykke. 2409 01:34:08,670 --> 01:34:10,283