1 00:00:00,000 --> 00:00:03,944 >> [Musik spiller] 2 00:00:03,944 --> 00:00:10,732 3 00:00:10,732 --> 00:00:11,690 DAVID MALAN: Okay. 4 00:00:11,690 --> 00:00:14,674 Dette er CS50, og dette er slutningen af ​​uge 2. 5 00:00:14,674 --> 00:00:16,840 Jeg er så ked af jeg ikke kunne være der med jer alle i dag, 6 00:00:16,840 --> 00:00:18,300 men du er i meget gode hænder. 7 00:00:18,300 --> 00:00:21,710 Tillad mig at introducere CS50 egen Rob Bowden. 8 00:00:21,710 --> 00:00:29,106 9 00:00:29,106 --> 00:00:31,730 ROB BOWDEN: Og selvfølgelig, så vi er nødt til at gøre grin med det faktum, 10 00:00:31,730 --> 00:00:36,820 at han har sendt os en vertikal video og vise dette. 11 00:00:36,820 --> 00:00:38,320 >> [VIDEO PLAYBACK] 12 00:00:38,320 --> 00:00:39,820 >> [Musik spiller] 13 00:00:39,820 --> 00:00:42,350 >> [FOOTSTEPS] 14 00:00:42,350 --> 00:00:44,730 >> -Denne Video ikke nødt til at se på denne måde. 15 00:00:44,730 --> 00:00:46,570 Det kunne have været forhindret. 16 00:00:46,570 --> 00:00:49,070 Sig nej til lodrette videoer. 17 00:00:49,070 --> 00:00:53,310 >> -Lodret Videoer ske, når du Hold dit kamera den forkerte vej. 18 00:00:53,310 --> 00:00:55,880 Din video vil ende med at ligne lort. 19 00:00:55,880 --> 00:00:57,650 >> - [GRUNT] 20 00:00:57,650 --> 00:01:02,240 >> -Der Er flere og flere mennesker afhængige at gøre vertikale videoer hver dag. 21 00:01:02,240 --> 00:01:06,240 Det er ikke revne eller ingenting, men det er stadig virkelig dårlig. 22 00:01:06,240 --> 00:01:10,410 Der er to forskellige slags mennesker, der er ramt af VVS. 23 00:01:10,410 --> 00:01:14,160 Den første gruppe behandler videoer, de skyder ligesom billeder. 24 00:01:14,160 --> 00:01:15,850 De behøver ikke betyde nogen skade. 25 00:01:15,850 --> 00:01:19,180 De bare ikke forstå, at mens du kan slå et billede, 26 00:01:19,180 --> 00:01:20,880 du kan ikke rigtig vende en video. 27 00:01:20,880 --> 00:01:21,880 >> [CRASH] 28 00:01:21,880 --> 00:01:23,460 >> - [MONKEY SOUNDS] 29 00:01:23,460 --> 00:01:27,540 >> -Den Anden gruppe er folk som ikke giver et [BLEEP]. 30 00:01:27,540 --> 00:01:31,090 >> -Lodret Video Syndrome er farligt. 31 00:01:31,090 --> 00:01:34,120 Levende billeder har altid været vandret. 32 00:01:34,120 --> 00:01:35,990 Fjernsynet er vandret. 33 00:01:35,990 --> 00:01:38,380 Computerskærme er vandret. 34 00:01:38,380 --> 00:01:41,580 Folks øjne er vandret. 35 00:01:41,580 --> 00:01:45,170 Vi er ikke bygget til at se lodrette videoer. 36 00:01:45,170 --> 00:01:47,600 >> -Jeg Elsker lodrette videoer. 37 00:01:47,600 --> 00:01:50,410 >> -Nobody Bekymrer sig om dig. 38 00:01:50,410 --> 00:01:53,340 >> -Hvis Dette problem er ikke gøres noget, du også 39 00:01:53,340 --> 00:01:57,650 vil begynde at vise fire videoer på én gang blot for at spare båndbredde. 40 00:01:57,650 --> 00:02:02,400 >> -Letterboxed Lodrette videoer ville være på størrelse med et frimærke. 41 00:02:02,400 --> 00:02:04,920 >> -Og Det vil sprede overalt. 42 00:02:04,920 --> 00:02:07,670 Film skærme har altid været vandret. 43 00:02:07,670 --> 00:02:11,200 Hvis lodrette videoer bliver accepterede, biografer 44 00:02:11,200 --> 00:02:13,930 skal være høj og tynd. 45 00:02:13,930 --> 00:02:17,710 >> -Og Alle biografer ville nødt til at få revet ned og genopbygget. 46 00:02:17,710 --> 00:02:22,090 Og ved den tid, de blev genopbygget, Mila Kunis ville være gammel og grim. 47 00:02:22,090 --> 00:02:24,342 >> -Birds Vil gå ned i dem og dø. 48 00:02:24,342 --> 00:02:26,530 >> -Vi Alle få stive halse fra at se op. 49 00:02:26,530 --> 00:02:29,800 >> -Og Ingen vil sidde i den forreste række nogensinde igen. 50 00:02:29,800 --> 00:02:37,170 >> -George Lucas vil re-release stjerne Krige igen-- skinny udgave. 51 00:02:37,170 --> 00:02:41,860 >> -Jeg Var aldrig rigtig i stand til at fortælle den historie, som jeg ønskede at fortælle. 52 00:02:41,860 --> 00:02:46,030 Dette var en stor chance for mig at eksperimentere med en ny teknologi. 53 00:02:46,030 --> 00:02:48,150 >> -Du Et ryk. 54 00:02:48,150 --> 00:02:54,430 >> -Hver Gang en mobil enhed der bruges til at optage video, fristelsen er der. 55 00:02:54,430 --> 00:02:56,370 Bare sige nej. 56 00:02:56,370 --> 00:03:00,116 Sig nej til George Lucas. 57 00:03:00,116 --> 00:03:04,062 Sig nej til gamle Mila Kunis. 58 00:03:04,062 --> 00:03:06,600 Sig nej til lodrette videoer. 59 00:03:06,600 --> 00:03:12,511 >> -Og Hvis du ser nogen gøre det, siger, "du er ikke at skyde denne ret dummy!" 60 00:03:12,511 --> 00:03:15,433 >> [Musik spiller] 61 00:03:15,433 --> 00:03:18,842 62 00:03:18,842 --> 00:03:19,830 >> [END AFSPIL] 63 00:03:19,830 --> 00:03:23,702 >> [Applaus] 64 00:03:23,702 --> 00:03:27,598 >> [AUDIO OUT] 65 00:03:27,598 --> 00:03:44,041 66 00:03:44,041 --> 00:03:45,790 ROB BOWDEN: --simple form for kryptografi, 67 00:03:45,790 --> 00:03:49,500 som er dybest set kryptering og dekryptering af hemmelige meddelelser. 68 00:03:49,500 --> 00:03:52,590 Så her har vi en meget simpel stykke legetøj. 69 00:03:52,590 --> 00:03:56,900 Og ideen er den ydre ring roterer omkring den indre ring. 70 00:03:56,900 --> 00:04:01,610 Og du kan se, måske hvis jeg zoome i, at-- det er svært at se. 71 00:04:01,610 --> 00:04:05,090 Men ligesom antallet 1-- godt, det flyttet. 72 00:04:05,090 --> 00:04:09,120 >> Tallet 1 kort til brevet X, nummer 2 kort til brevet 73 00:04:09,120 --> 00:04:11,630 J. utroligt svært ikke at springe frem. 74 00:04:11,630 --> 00:04:16,100 Brev 2 kort til J. Nummer 3 kort til D. Så 75 00:04:16,100 --> 00:04:20,140 med denne ring, du kan give nogen en besked 1, 2, 3. 76 00:04:20,140 --> 00:04:22,624 Af en eller anden grund du ønsker at fortælle dem XJD. 77 00:04:22,624 --> 00:04:24,540 Men du kan give dem nogle budskab af tal, 78 00:04:24,540 --> 00:04:28,460 og så længe de har denne ring, de kan dekryptere hvad du prøver at sige. 79 00:04:28,460 --> 00:04:32,510 >> Så du kan have set dette særligt eksempel på kryptografi 80 00:04:32,510 --> 00:04:36,640 før, hvis omkring juletiden du har set A Christmas Story. 81 00:04:36,640 --> 00:04:38,520 Hvis du aldrig har set det før, så bare 82 00:04:38,520 --> 00:04:41,060 tænde TBS ved bogstaveligt enhver tid juleaften, 83 00:04:41,060 --> 00:04:44,510 fordi de bare vise det tilbage til tilbage til tilbage til tilbage til tilbage hele dagen. 84 00:04:44,510 --> 00:04:46,744 Og den relevante video er dette. 85 00:04:46,744 --> 00:04:47,410 [VIDEO PLAYBACK] 86 00:04:47,410 --> 00:04:50,020 -Vær Det kendt for alle og enhver at Ralph Parker er hermed 87 00:04:50,020 --> 00:04:52,850 udnævnes til medlem af Den Lille Orphan Annie Secret Circle 88 00:04:52,850 --> 00:04:56,490 og har ret til alle de æresbevisninger og fordele forekommende dertil. 89 00:04:56,490 --> 00:04:59,010 Signeret Lille Orphan Annie. 90 00:04:59,010 --> 00:05:03,120 Medunderskrives Pierre Andre med blæk! 91 00:05:03,120 --> 00:05:07,460 Honors og fordele allerede i en alder af ni! 92 00:05:07,460 --> 00:05:12,530 >> [YELLING fra radio] 93 00:05:12,530 --> 00:05:13,030 -Kom nu. 94 00:05:13,030 --> 00:05:14,000 Lad os komme videre med det. 95 00:05:14,000 --> 00:05:18,274 Jeg behøver ikke alt det jazz om smuglere og pirater. 96 00:05:18,274 --> 00:05:20,440 Lyt i morgen aften med den afsluttende eventyr 97 00:05:20,440 --> 00:05:22,540 af Black Pirate Ship. 98 00:05:22,540 --> 00:05:25,460 Nu er det tid til Annies hemmelig besked 99 00:05:25,460 --> 00:05:28,620 for dig medlemmer af Secret Circle. 100 00:05:28,620 --> 00:05:32,370 Husk børn, kun medlemmer af Annies Secret Circle 101 00:05:32,370 --> 00:05:34,880 kan afkode Annies hemmelig besked. 102 00:05:34,880 --> 00:05:39,100 Husk, er Annie afhængig af dig. 103 00:05:39,100 --> 00:05:41,660 Sæt dine ben til B2. 104 00:05:41,660 --> 00:05:43,960 Her er budskabet. 105 00:05:43,960 --> 00:05:44,680 12. 106 00:05:44,680 --> 00:05:45,180 11. 107 00:05:45,180 --> 00:05:45,679 2. 108 00:05:45,679 --> 00:05:48,110 -Jeg Er i min første hemmeligt møde. 109 00:05:48,110 --> 00:05:49,030 >> -25. 110 00:05:49,030 --> 00:05:49,834 14.. 111 00:05:49,834 --> 00:05:51,040 11. 112 00:05:51,040 --> 00:05:51,854 18. 113 00:05:51,854 --> 00:05:52,670 16. 114 00:05:52,670 --> 00:05:54,570 >> -OH, Pierre er i stor stemme i aften. 115 00:05:54,570 --> 00:05:57,490 Jeg kunne fortælle, at aftenens budskab var virkelig vigtigt. 116 00:05:57,490 --> 00:05:57,990 -3. 117 00:05:57,990 --> 00:06:00,080 25.. 118 00:06:00,080 --> 00:06:01,580 Det er en besked fra Annie selv. 119 00:06:01,580 --> 00:06:02,880 Husk, ikke fortælle nogen. 120 00:06:02,880 --> 00:06:07,840 121 00:06:07,840 --> 00:06:11,130 >> -fem Sekunder senere, jeg er i den eneste rum i huset, hvor en dreng på ni 122 00:06:11,130 --> 00:06:15,830 kunne sidde i fred og afkode. 123 00:06:15,830 --> 00:06:16,620 Aha! 124 00:06:16,620 --> 00:06:17,340 B! 125 00:06:17,340 --> 00:06:20,210 Jeg gik til den næste. 126 00:06:20,210 --> 00:06:23,300 E. Det første ord er "være". 127 00:06:23,300 --> 00:06:25,880 S. Det kom nemmere nu. 128 00:06:25,880 --> 00:06:28,400 U. 25. 129 00:06:28,400 --> 00:06:30,528 Det er R. 130 00:06:30,528 --> 00:06:31,278 -Kom På, Ralphie! 131 00:06:31,278 --> 00:06:31,861 Jeg mĺ gå! 132 00:06:31,861 --> 00:06:33,182 -Jeg Være helt ned, Ma! 133 00:06:33,182 --> 00:06:36,038 Gee Whiz. 134 00:06:36,038 --> 00:06:42,840 T. O. "Sørg for at" - være sikker på hvad? 135 00:06:42,840 --> 00:06:44,770 Hvad var lille Orphan Annie prøver at sige? 136 00:06:44,770 --> 00:06:46,381 Vær sikker på at hvad? 137 00:06:46,381 --> 00:06:47,825 >> -Randy Har fået til at gå! 138 00:06:47,825 --> 00:06:48,866 Vil du venligst komme ud? 139 00:06:48,866 --> 00:06:49,783 >> -Alle Ret, mor! 140 00:06:49,783 --> 00:06:51,786 Jeg kommer lige ud! 141 00:06:51,786 --> 00:06:53,606 Jeg var ved at blive tættere nu. 142 00:06:53,606 --> 00:06:55,550 Spændingen var forfærdeligt. 143 00:06:55,550 --> 00:06:57,050 Hvad var det? 144 00:06:57,050 --> 00:06:59,905 Den skæbne af planeten kan hænge i balance! 145 00:06:59,905 --> 00:07:01,736 >> -Ralphie, Randys fik at gå! 146 00:07:01,736 --> 00:07:05,680 >> -Jeg Være lige ud, for skriger højt! 147 00:07:05,680 --> 00:07:07,170 Er der næsten! 148 00:07:07,170 --> 00:07:08,150 Mine fingre fløj. 149 00:07:08,150 --> 00:07:09,980 Mit sind var en stål fælde. 150 00:07:09,980 --> 00:07:11,496 Hver pore vibrerede. 151 00:07:11,496 --> 00:07:13,268 Det var næsten klar! 152 00:07:13,268 --> 00:07:13,767 Ja. 153 00:07:13,767 --> 00:07:14,609 Ja. 154 00:07:14,609 --> 00:07:15,108 Ja. 155 00:07:15,108 --> 00:07:16,449 Ja. 156 00:07:16,449 --> 00:07:20,240 Vær sikker på at drikke din Ovaltine. 157 00:07:20,240 --> 00:07:20,740 Ovaltine? 158 00:07:20,740 --> 00:07:26,687 159 00:07:26,687 --> 00:07:27,520 En mærkværdige kommercielle? 160 00:07:27,520 --> 00:07:32,040 161 00:07:32,040 --> 00:07:34,920 Søn af en tæve. 162 00:07:34,920 --> 00:07:35,890 >> [END AFSPIL] 163 00:07:35,890 --> 00:07:39,650 >> ROB BOWDEN: Så det er sådan Ovaltine vedrører kryptering. 164 00:07:39,650 --> 00:07:42,290 Dybest set CS50 netop annonceret Ovaltine, så vi kunne 165 00:07:42,290 --> 00:07:44,400 være en mærkværdige reklame for Ovaltine. 166 00:07:44,400 --> 00:07:44,900 Okay. 167 00:07:44,900 --> 00:07:47,120 Så nu faktiske datalogi. 168 00:07:47,120 --> 00:07:50,670 Husk på mandag vi slap dykning dybere ind strenge. 169 00:07:50,670 --> 00:07:52,820 Så vi havde at gøre med strengen "Zamyla." 170 00:07:52,820 --> 00:07:55,130 Og vi var anerkende det faktum, at vi kan behandle 171 00:07:55,130 --> 00:07:57,510 "Zamyla" som en sekvens af tegn. 172 00:07:57,510 --> 00:07:59,740 Og husk, at vi har lært beslaget notation. 173 00:07:59,740 --> 00:08:01,995 Så hvis dette blev opbevaret i en streng "s" og derefter 174 00:08:01,995 --> 00:08:05,860 hvis vi sagde s beslag 0, der ville angiver hovedstaden Z. bogstav 175 00:08:05,860 --> 00:08:09,790 Og hvis vi sagde s beslag 1, at ville indikere den første små bogstaver a, 176 00:08:09,790 --> 00:08:14,220 og så videre op til s beslag 5, hvilket indikerer den sidste a. 177 00:08:14,220 --> 00:08:17,090 >> Husk nu, at det Længden af ​​denne streng er 6, 178 00:08:17,090 --> 00:08:23,220 men indeksene i strengen er 0 til 5, Z gennem denne vare. 179 00:08:23,220 --> 00:08:28,650 Så det nu passer ind i et større billede af computerens hukommelse, din RAM. 180 00:08:28,650 --> 00:08:32,020 Så sted det program, du kører din computer 181 00:08:32,020 --> 00:08:34,780 skal huske Zamyla et sted i hukommelsen. 182 00:08:34,780 --> 00:08:36,029 Så kan jeg have en frivillig? 183 00:08:36,029 --> 00:08:38,840 184 00:08:38,840 --> 00:08:40,181 Ja tak. 185 00:08:40,181 --> 00:08:50,120 186 00:08:50,120 --> 00:08:51,500 Og hvad er dit navn? 187 00:08:51,500 --> 00:08:52,410 >> DEAN: Dean. 188 00:08:52,410 --> 00:08:53,550 >> ROB BOWDEN: Dean? 189 00:08:53,550 --> 00:08:54,910 Rart at møde dig, Dean. 190 00:08:54,910 --> 00:08:58,240 Så kom herover, og vi vil have du tegner 191 00:08:58,240 --> 00:09:00,740 på vores dejlig fiks indretning af hukommelse. 192 00:09:00,740 --> 00:09:05,950 Nu vil jeg gerne tænke på hukommelsen som en lang strimmel af bytes, 193 00:09:05,950 --> 00:09:11,090 men bare for visning vi får bare venstre til højre, top til bund. 194 00:09:11,090 --> 00:09:11,590 OK? 195 00:09:11,590 --> 00:09:22,030 >> Så jeg har tænkt mig at vise en program-- Getstrings.c. 196 00:09:22,030 --> 00:09:25,760 Og så alt dette program er gør anmoder fire strygere 197 00:09:25,760 --> 00:09:28,830 fra brugeren med GetString og derefter udskrivning 198 00:09:28,830 --> 00:09:30,950 hvad det så første streng indtastet var. 199 00:09:30,950 --> 00:09:32,840 Vi ignorerer to gennem fire. 200 00:09:32,840 --> 00:09:33,610 OK. 201 00:09:33,610 --> 00:09:38,210 Så herovre nu-- når Jeg første anmodning S1. 202 00:09:38,210 --> 00:09:39,740 Så du er på computeren. 203 00:09:39,740 --> 00:09:41,680 Og du gennemfører getString. 204 00:09:41,680 --> 00:09:46,710 Så du anmode om en snor fra mig, og jeg siger, OK, Dean. 205 00:09:46,710 --> 00:09:47,900 Giv strengen "Dean". 206 00:09:47,900 --> 00:09:50,300 >> Så et eller andet sted i hukommelsen, du nødt til at huske "Dean". 207 00:09:50,300 --> 00:09:52,160 Så skriv det i hukommelsen eller andet sted. 208 00:09:52,160 --> 00:09:58,270 209 00:09:58,270 --> 00:09:59,210 Perfekt. 210 00:09:59,210 --> 00:09:59,880 OK. 211 00:09:59,880 --> 00:10:01,740 Så nu har vi S2. 212 00:10:01,740 --> 00:10:03,869 Og S2 bliver en anmodning til getString. 213 00:10:03,869 --> 00:10:05,160 Så jeg har tænkt mig at indtaste en streng. 214 00:10:05,160 --> 00:10:08,720 Jeg har tænkt mig at skrive "Hannah". 215 00:10:08,720 --> 00:10:10,586 Så indtaste "Hannah" et sted i hukommelsen. 216 00:10:10,586 --> 00:10:18,860 217 00:10:18,860 --> 00:10:19,360 Ja. 218 00:10:19,360 --> 00:10:23,000 A-H. 219 00:10:23,000 --> 00:10:25,550 >> OK, så nu s3. 220 00:10:25,550 --> 00:10:28,380 Og det vil være en anden anmode om at getString. 221 00:10:28,380 --> 00:10:37,020 Og så nu indtaste "Maria". 222 00:10:37,020 --> 00:10:37,520 Okay. 223 00:10:37,520 --> 00:10:40,980 Og så er der en sidste anmodning til getString, S4. 224 00:10:40,980 --> 00:10:42,580 Så ved jeg ikke. 225 00:10:42,580 --> 00:10:45,640 Hvad med vi gå med antidisestablishmentarianism. 226 00:10:45,640 --> 00:10:49,460 Så indtast det i hukommelsen. 227 00:10:49,460 --> 00:10:50,400 Ja. 228 00:10:50,400 --> 00:10:53,970 Så bare gøre "Rob". 229 00:10:53,970 --> 00:10:54,560 >> OK. 230 00:10:54,560 --> 00:10:58,410 Så nu explain-- hvorfor gjorde du lader disse rum? 231 00:10:58,410 --> 00:11:01,340 Hvorfor har du denne tomt plads her, her, og her? 232 00:11:01,340 --> 00:11:05,170 233 00:11:05,170 --> 00:11:05,670 Ja. 234 00:11:05,670 --> 00:11:09,450 Så bemærke, når jeg går at udskrive s1-- så hvis vi 235 00:11:09,450 --> 00:11:11,890 havde "Hannah" kører lige op ved siden af ​​"Dean", 236 00:11:11,890 --> 00:11:14,360 hvordan kan vi vide, når strengen "Dean" slutter? 237 00:11:14,360 --> 00:11:19,470 Så udskriver strengen S1 kan have netop trykt "DeanHannahMariaRob" 238 00:11:19,470 --> 00:11:22,720 hvis det ikke har nogen anelse af, når "Dean" faktisk afsluttes. 239 00:11:22,720 --> 00:11:23,240 >> Okay. 240 00:11:23,240 --> 00:11:27,650 Så i hukommelsen den måde, vi faktisk repræsenterer denne ende af en snor 241 00:11:27,650 --> 00:11:29,940 er med backslash nul. 242 00:11:29,940 --> 00:11:32,620 Så dette rum er præcis, hvad vi ønskede. 243 00:11:32,620 --> 00:11:34,040 Det bør være en omvendt skråstreg nul. 244 00:11:34,040 --> 00:11:37,690 Dette vil være en omvendt skråstreg nul, og dette vil være en omvendt skråstreg nul. 245 00:11:37,690 --> 00:11:41,585 Og du kan have en fabelagtig præmie for at være en perfekt frivillig. 246 00:11:41,585 --> 00:11:44,910 247 00:11:44,910 --> 00:11:45,860 Tag en stress bold! 248 00:11:45,860 --> 00:11:49,040 249 00:11:49,040 --> 00:11:49,700 >> OK. 250 00:11:49,700 --> 00:11:54,420 Så denne karakter omvendt skråstreg nul er hvordan vi angive slutningen af ​​en streng. 251 00:11:54,420 --> 00:11:57,120 Det er hvordan når et givent program ønsker at udskrive en streng, 252 00:11:57,120 --> 00:11:59,760 Det er how-- husker vi lært den strlen funktionen i sidste uge? 253 00:11:59,760 --> 00:12:00,940 String længde? 254 00:12:00,940 --> 00:12:03,770 Det er, hvordan strengen længde er i stand til at bestemme, hvor længe en streng er. 255 00:12:03,770 --> 00:12:05,810 Det bare holder iteration over tegn 256 00:12:05,810 --> 00:12:08,217 indtil den finder det backslash nul tegn. 257 00:12:08,217 --> 00:12:11,050 Så det vigtige ting at indse om backslash nultegnet 258 00:12:11,050 --> 00:12:14,950 er det er repræsenteret af alle nuller i bits. 259 00:12:14,950 --> 00:12:18,980 Så opdager, at dette er særskilt fra nultegnet. 260 00:12:18,980 --> 00:12:23,010 Så nul tegn, hvis du kan huske i eksemplet, at han gav i slutningen 261 00:12:23,010 --> 00:12:27,360 af foredrag hvor karakterer kort at-- ligesom kapital A maps til 65. 262 00:12:27,360 --> 00:12:29,130 Små bogstaver et kort til 97. 263 00:12:29,130 --> 00:12:30,890 Små bogstaver b ville være 98. 264 00:12:30,890 --> 00:12:35,220 Så antallet 0 kortene at-- jeg ikke kender fra toppen af ​​mit hoved. 265 00:12:35,220 --> 00:12:36,400 44 eller 45. 266 00:12:36,400 --> 00:12:37,890 Et eller andet sted i denne region. 267 00:12:37,890 --> 00:12:40,850 >> Så tegnet 0 er en faktiske antal. 268 00:12:40,850 --> 00:12:44,350 Men backslash nul kort til alle nul bit. 269 00:12:44,350 --> 00:12:46,380 Så der er en forskel mellem backslash nul, 270 00:12:46,380 --> 00:12:48,450 som vi vil kalde null terminator. 271 00:12:48,450 --> 00:12:53,210 Der er en forskel mellem backslash nul og karakteren nul. 272 00:12:53,210 --> 00:12:54,350 >> Okay. 273 00:12:54,350 --> 00:12:57,520 Så taler lidt mere om strenge. 274 00:12:57,520 --> 00:13:01,470 Så vi ser her er det sådan det ville blive lagt ud i hukommelsen. 275 00:13:01,470 --> 00:13:07,940 Så denne idé om strenge som en sekvens af characters-- så den officielle computer 276 00:13:07,940 --> 00:13:10,750 sciency betegnelse for sekvens er et array. 277 00:13:10,750 --> 00:13:13,790 Så vi ville kalde en streng et array af tegn. 278 00:13:13,790 --> 00:13:17,770 Og der er faktisk andre data typer, som vi kan gøre arrays ud af. 279 00:13:17,770 --> 00:13:19,975 >> Så for at motivere dette, se på et eksempel. 280 00:13:19,975 --> 00:13:22,810 281 00:13:22,810 --> 00:13:29,812 Vi vil kalde det ages0.c jeg vil kopiere og indsætte vores skabelon. 282 00:13:29,812 --> 00:13:32,470 283 00:13:32,470 --> 00:13:33,410 OK. 284 00:13:33,410 --> 00:13:39,378 Så i dette program, hvad vi ønsker, er at få fat i en alder 285 00:13:39,378 --> 00:13:45,160 af tre studerende på kurset. 286 00:13:45,160 --> 00:13:49,240 Så vi kender den int age-- og nu vil jeg sige 0. 287 00:13:49,240 --> 00:13:53,140 Så du måske ønsker at sige alder1, men til formål, vi vil se meget snart, 288 00:13:53,140 --> 00:13:57,187 Jeg vil sige int age0 lig GetInt. 289 00:13:57,187 --> 00:13:59,270 Så den samme kald til GetInt at vi har brugt I 290 00:13:59,270 --> 00:14:01,561 ikke tilfældigvis være at spørge siger: "giv mig en alder." 291 00:14:01,561 --> 00:14:03,120 Men bare anmoder om det. 292 00:14:03,120 --> 00:14:06,510 >> Og alder1 lig GetInt. 293 00:14:06,510 --> 00:14:09,600 Og int Alder2 lig GetInt. 294 00:14:09,600 --> 00:14:14,070 Så igen, tre elever, men i sidste ende de variable indeks 295 00:14:14,070 --> 00:14:16,890 er age0 gennem Alder2. 296 00:14:16,890 --> 00:14:17,550 OK. 297 00:14:17,550 --> 00:14:23,960 Så dette program vil gøre, hvad Vi vil med age0, alder1, og Alder2, 298 00:14:23,960 --> 00:14:27,670 men dette program i sidste instans arbejder for tre studerende. 299 00:14:27,670 --> 00:14:28,380 >> OK. 300 00:14:28,380 --> 00:14:32,110 Så nu, hvad hvis jeg ønsker fire studerende? 301 00:14:32,110 --> 00:14:36,000 Tja, jeg har tænkt mig at gå tilbage ind i min kode, ændre kommentaren, 302 00:14:36,000 --> 00:14:39,840 og nu har vi en int alder3 lig GetInt. 303 00:14:39,840 --> 00:14:40,610 OK. 304 00:14:40,610 --> 00:14:43,660 Så der ser problemet her? 305 00:14:43,660 --> 00:14:47,310 Hvad er problemet med denne form for opsætning? 306 00:14:47,310 --> 00:14:47,810 Ja. 307 00:14:47,810 --> 00:14:53,110 308 00:14:53,110 --> 00:14:53,610 Ja. 309 00:14:53,610 --> 00:14:56,360 Så vi er ved at oprette et variabel for hver elev. 310 00:14:56,360 --> 00:15:00,140 Nu, virker, men der i sidste ende, hvis jeg nu 311 00:15:00,140 --> 00:15:06,500 sige, "Jeg ønsker at få fat i en alder af otte studerende eller 16 elever 312 00:15:06,500 --> 00:15:11,340 eller dog mange studerende af de hundredvis af studerende i CS50 313 00:15:11,340 --> 00:15:16,750 eller de tusindvis af studerende på campus eller de milliarder af mennesker i verden? 314 00:15:16,750 --> 00:15:19,130 Så i sidste ende er det ikke bæredygtigt. 315 00:15:19,130 --> 00:15:21,990 Hver gang du ser dig selv kopiering og indsætte koden som denne, 316 00:15:21,990 --> 00:15:25,050 bør du generelt føler at der er en bedre måde. 317 00:15:25,050 --> 00:15:31,290 >> Så dette er, hvor vi indfører et array erklæring. 318 00:15:31,290 --> 00:15:34,564 Så når du erklærer et array, dette er, hvad den generelle format 319 00:15:34,564 --> 00:15:35,480 kommer til at se ud. 320 00:15:35,480 --> 00:15:36,664 Vi kommer til at sige typen. 321 00:15:36,664 --> 00:15:38,830 og så vil vi giver navnet på denne array, 322 00:15:38,830 --> 00:15:41,150 ligesom vi definere en given variabel. 323 00:15:41,150 --> 00:15:43,980 Og så endelig vi bruger dette beslag notation igen 324 00:15:43,980 --> 00:15:47,480 men i en anden sammenhæng end hvordan vi bruger det tidligere. 325 00:15:47,480 --> 00:15:51,860 >> Så her det ligner en normal variabel erklæring om, at vi har set. 326 00:15:51,860 --> 00:15:54,890 Så vi har set int x semikolon før. 327 00:15:54,890 --> 00:16:00,020 Nå nu kan vi se noget ligesom int x konsoller 5. 328 00:16:00,020 --> 00:16:04,020 Og sætte denne idé ind i det GetInt program, som vi have-- 329 00:16:04,020 --> 00:16:08,850 så vi kan implementere dette på samme måde. 330 00:16:08,850 --> 00:16:13,630 >> Lad os sige i CS er vi tilbøjelige til at bruge n er antallet af noget. 331 00:16:13,630 --> 00:16:16,150 Så her vil vi gemme fire elever. 332 00:16:16,150 --> 00:16:25,960 Og nu kan vi sige int alder beslag n- ikke helt få det yet-- 333 00:16:25,960 --> 00:16:32,210 at erklære et array af fire elever. 334 00:16:32,210 --> 00:16:38,050 Så hvordan det vil se ud i hukommelse vil svare til dette. 335 00:16:38,050 --> 00:16:39,570 Ryd dette. 336 00:16:39,570 --> 00:16:46,606 Og vi kommer til at have et sted i memory-- Jeg vil sætte dette op der. 337 00:16:46,606 --> 00:16:52,690 338 00:16:52,690 --> 00:16:53,808 >> Så et sted i hukommelsen. 339 00:16:53,808 --> 00:16:58,760 340 00:16:58,760 --> 00:16:59,727 En to tre fire. 341 00:16:59,727 --> 00:17:03,383 342 00:17:03,383 --> 00:17:09,849 Vi har fire heltal i træk for denne række af fire tal. 343 00:17:09,849 --> 00:17:13,820 Så i øjeblikket, hvad der er størrelse på et af disse felter? 344 00:17:13,820 --> 00:17:17,190 345 00:17:17,190 --> 00:17:17,690 Ja. 346 00:17:17,690 --> 00:17:18,390 Det er fire bytes. 347 00:17:18,390 --> 00:17:19,690 Det er 32 bit. 348 00:17:19,690 --> 00:17:22,310 Så nu er det anderledes fra arrayet, at vi 349 00:17:22,310 --> 00:17:24,020 så tidligere, den vifte af tegn. 350 00:17:24,020 --> 00:17:28,540 I en streng hver kasse var kun én byte, fordi et tegn er kun én byte. 351 00:17:28,540 --> 00:17:32,170 Men med et array af heltal, hver boksen skal være fire bytes med henblik på 352 00:17:32,170 --> 00:17:34,060 at passe en hel heltal. 353 00:17:34,060 --> 00:17:37,197 Så dette er hvad et array af fire ints ville se ud. 354 00:17:37,197 --> 00:17:40,510 355 00:17:40,510 --> 00:17:43,870 >> Og så tilbage til kode. 356 00:17:43,870 --> 00:17:47,460 Nu vil vi faktisk butik heltal i den opstilling. 357 00:17:47,460 --> 00:17:53,470 Så nu er det en meget, meget, meget fælles mønster, der vil på et tidspunkt 358 00:17:53,470 --> 00:17:54,680 bliver muskel hukommelse. 359 00:17:54,680 --> 00:17:56,710 Så int i er lig med 0. 360 00:17:56,710 --> 00:17:57,940 I mindre end n. 361 00:17:57,940 --> 00:18:01,850 jeg plus plus. 362 00:18:01,850 --> 00:18:05,790 Aldersgruppe jeg lig GetInt. 363 00:18:05,790 --> 00:18:15,100 >> Så denne for-løkke, dette format, Du bør få meget vant til. 364 00:18:15,100 --> 00:18:20,010 Så dette er generelt, hvordan vi vil gentage over næsten enhver opstilling. 365 00:18:20,010 --> 00:18:23,690 Bemærk nu denne slags forklarer, hvorfor fra begyndelsen 366 00:18:23,690 --> 00:18:29,870 vi havde ikke efter sløjfer går til int I er lig med 1, i mindre end eller lig med 10. 367 00:18:29,870 --> 00:18:34,200 Begrundelsen er, at startende fra nul gør dette arbejde godt sammen med arrays. 368 00:18:34,200 --> 00:18:36,270 Så arrays er nul indekseret. 369 00:18:36,270 --> 00:18:40,360 Hvis dette array er længden 4, indeksene er 0 til 3. 370 00:18:40,360 --> 00:18:42,880 >> Så gennem den første iteration af denne for-løkke 371 00:18:42,880 --> 00:18:49,930 Vi kommer til at sætte alder beslag 0 svarer til et opkald til GetInt. 372 00:18:49,930 --> 00:18:52,440 Så uanset hvad jeg tilfældigvis at komme ind på tastaturet. 373 00:18:52,440 --> 00:18:56,970 I den anden aflevering, vi er indstilling alder1 lig med GetInt. 374 00:18:56,970 --> 00:18:58,230 Tredje aflevering, Alder2. 375 00:18:58,230 --> 00:18:59,880 Afsluttende pass alder3. 376 00:18:59,880 --> 00:19:05,750 Så hvis i det første gennemløb af løkken Jeg indtaster nummer 4 på tastaturet, 377 00:19:05,750 --> 00:19:07,740 så vil vi indsætte en 4 her. 378 00:19:07,740 --> 00:19:11,470 Hvis på den anden pass jeg indtaste 50, vil vi sætte en 50 her. 379 00:19:11,470 --> 00:19:15,180 På den tredje pass jeg måske Indtast negative 1, negative 1, 380 00:19:15,180 --> 00:19:21,810 og så endelig, hvis jeg indtaster 0-- og nu huske, at dette var indeks tre. 381 00:19:21,810 --> 00:19:25,350 >> Efter at vi loop tilbage, jeg er vil blive forøget til 4. 382 00:19:25,350 --> 00:19:27,770 Jeg er ikke længere mindre end n, hvilket er 4. 383 00:19:27,770 --> 00:19:29,840 Og vi bryder ud af løkken. 384 00:19:29,840 --> 00:19:32,578 Så hvad ville være galt med dette? 385 00:19:32,578 --> 00:19:38,140 386 00:19:38,140 --> 00:19:38,729 [Uhørligt]? 387 00:19:38,729 --> 00:19:39,604 PUBLIKUM: [uhørligt] 388 00:19:39,604 --> 00:19:45,880 389 00:19:45,880 --> 00:19:46,400 >> Ja. 390 00:19:46,400 --> 00:19:51,550 Så array har kun fire steder, hvilket betyder som indeks 0 til 3. 391 00:19:51,550 --> 00:19:55,630 Så hvis dette var tilfældet, ville jeg tage på værdien 4 på et tidspunkt. 392 00:19:55,630 --> 00:20:00,910 aldersgruppe, 4 vil sætte uanset hvad der sker for at være herovre 393 00:20:00,910 --> 00:20:02,920 til, hvad jeg har at sige, indtaste 6. 394 00:20:02,920 --> 00:20:05,010 Det vil være at sætte denne til 6. 395 00:20:05,010 --> 00:20:06,560 >> Men vi ved ikke, hvad der er herovre. 396 00:20:06,560 --> 00:20:08,836 Dette er ikke hukommelse at vi havde adgang til. 397 00:20:08,836 --> 00:20:10,710 Så hvis du kan huske fra den foregående forelæsning, 398 00:20:10,710 --> 00:20:14,350 han udskrivning ud værdier Zamyla og på et tidspunkt han ramte denne segmentering 399 00:20:14,350 --> 00:20:17,990 fejl. Så du vil sandsynligvis være at se mange segmentering fejl som dig 400 00:20:17,990 --> 00:20:20,530 gennemføre nogle af de problemområder sæt. 401 00:20:20,530 --> 00:20:24,950 Men dette er en af ​​de måder, hvorpå du kan støde på en segmentering 402 00:20:24,950 --> 00:20:28,540 fejl, når du begynder at få adgang hukommelse på måder, du ikke bør være. 403 00:20:28,540 --> 00:20:34,117 Så vi havde ikke adgang til denne placering, og det er en fejl. 404 00:20:34,117 --> 00:20:37,760 405 00:20:37,760 --> 00:20:40,190 >> Så dette er bedre. 406 00:20:40,190 --> 00:20:45,820 Nu er der stadig en lille problem med denne kode. 407 00:20:45,820 --> 00:20:50,720 Og det er dybest set, at vi er stadig fast på fire studerende. 408 00:20:50,720 --> 00:20:52,940 Nu, hvis jeg vil bruge otte studerende, OK. 409 00:20:52,940 --> 00:20:54,350 Det er ikke så stor en aftale. 410 00:20:54,350 --> 00:20:58,120 Jeg kan gå i, ændre kommentere og ændre n. 411 00:20:58,120 --> 00:20:59,760 Nu er dette vil arbejde med otte elever. 412 00:20:59,760 --> 00:21:02,190 Hvis jeg kompilere denne og køre dette, vil det vise mig-- 413 00:21:02,190 --> 00:21:07,870 den vil anmode heltal til otte studerende og det vil bare arbejde. 414 00:21:07,870 --> 00:21:11,850 Men det er mindre end ideel til at nødt til at rekompilere programmet hver eneste gang 415 00:21:11,850 --> 00:21:15,960 Jeg ønsker at ændre antallet af studerende at jeg ønsker at indtaste aldre for. 416 00:21:15,960 --> 00:21:22,990 >> Så den endelige forbedring dette, da vi vil se her-- er vi 417 00:21:22,990 --> 00:21:26,177 kommer til at anmode om antallet af personer. 418 00:21:26,177 --> 00:21:28,010 Her har vi en række af folk i værelserne 419 00:21:28,010 --> 00:21:29,880 eller eventuelle aldre af mennesker i lokalet. 420 00:21:29,880 --> 00:21:33,300 Men vi kommer til at anmode om antallet af personer i rummet fra brugeren. 421 00:21:33,300 --> 00:21:36,171 Så dette er nøjagtig den samme gør-mens løkke, som vi har set før. 422 00:21:36,171 --> 00:21:37,920 Det er præcis de samme gør-while-løkke, som du 423 00:21:37,920 --> 00:21:40,050 kan gennemføre på problemet sæt. 424 00:21:40,050 --> 00:21:43,102 Så længe de er ind i et n mindre end 1, 425 00:21:43,102 --> 00:21:45,310 så der er nødt til at være på mindst én person i rummet. 426 00:21:45,310 --> 00:21:47,407 Så længe de er ind i et n mindre end 1, 427 00:21:47,407 --> 00:21:48,990 så vi kommer til at holde stille igen. 428 00:21:48,990 --> 00:21:50,906 Indtast tallet af mennesker i lokalet. 429 00:21:50,906 --> 00:21:53,550 Nu når vi har det antal af mennesker i room-- 430 00:21:53,550 --> 00:21:58,020 så jeg kunne komme ind, at der ikke er 200 mennesker i dette rum. 431 00:21:58,020 --> 00:22:05,480 Så hernede vi vil komme og erklære en vifte af størrelse 200. 432 00:22:05,480 --> 00:22:10,220 Vi erklære array, der er stor nok til at holde 200 aldre. 433 00:22:10,220 --> 00:22:15,370 Kommer ned, er det for-løkken at du vil få meget brugt til. 434 00:22:15,370 --> 00:22:19,490 Så iteration i dette array, at tildele hver placering 435 00:22:19,490 --> 00:22:23,020 i den opstilling er et heltal, og så i sidste ende her er vi 436 00:22:23,020 --> 00:22:28,340 blot at få et eksempel på iteration i den opstilling, for ikke at tildele værdier, 437 00:22:28,340 --> 00:22:30,150 men for at få adgang til værdier. 438 00:22:30,150 --> 00:22:33,810 >> Så over her ser vi, at vi siger, et år fra nu, 439 00:22:33,810 --> 00:22:40,470 person,% vil jeg være% Jeg år, hvor det første% i er jeg plus 1. 440 00:22:40,470 --> 00:22:43,010 Så jeg er dette indeks variabel. 441 00:22:43,010 --> 00:22:49,420 Og den anden% Jeg vil være den lagret i alderen matrix plus 1. 442 00:22:49,420 --> 00:22:54,217 Så dette plus 1 er bare fordi vi er saying-- dette plus 1, aldre jeg plus 1. 443 00:22:54,217 --> 00:22:57,050 Dette plus 1 er bare fordi vi er siger, et år fra nu den person, 444 00:22:57,050 --> 00:22:58,280 bliver denne gamle. 445 00:22:58,280 --> 00:23:01,080 >> Så hvorfor er dette jeg plus 1? 446 00:23:01,080 --> 00:23:04,064 Derfor har vi en plus 1 er der? 447 00:23:04,064 --> 00:23:04,564 Ja. 448 00:23:04,564 --> 00:23:07,410 449 00:23:07,410 --> 00:23:07,930 Ja. 450 00:23:07,930 --> 00:23:10,510 Så husk arrays nul indekseret. 451 00:23:10,510 --> 00:23:14,840 Så hvis vi udskriver det ud for nogen til bare læse outputtet, 452 00:23:14,840 --> 00:23:19,380 så sandsynligvis de ønsker at se noget Ligesom person én, person, nummer et, 453 00:23:19,380 --> 00:23:21,160 vil være 20 år. 454 00:23:21,160 --> 00:23:23,570 Person nummer to vil være 15 år gammel. 455 00:23:23,570 --> 00:23:27,420 De vil hellere ikke se personen tallet nul er 15 år gammel. 456 00:23:27,420 --> 00:23:36,460 >> Så kompilere dette, og bare se, hvad det ser like-- Opret noget plads. 457 00:23:36,460 --> 00:23:43,560 Foretag aldre kompilerer. 458 00:23:43,560 --> 00:23:45,080 Løb aldre. 459 00:23:45,080 --> 00:23:46,580 Vi ser antallet af personer i lokalet. 460 00:23:46,580 --> 00:23:48,850 Så jeg vil sige, der er tre personer i værelset. 461 00:23:48,850 --> 00:23:54,000 Age of persons nummer et, lad os sige 15, 20, 25. 462 00:23:54,000 --> 00:23:59,680 Og nu vil jeg sige et år fra nu vil de være 16, 21, 26. 463 00:23:59,680 --> 00:24:02,900 Lad os se, at dette fungerer med en n, der ikke er lig med 3. 464 00:24:02,900 --> 00:24:07,940 Så hvis jeg siger antal mennesker er 5, en, to, tre, to, en, et år fra nu 465 00:24:07,940 --> 00:24:11,170 de vil være to, tre, fire, tre, to år. 466 00:24:11,170 --> 00:24:16,500 Så jeg kunne lige så let har n være 10.000. 467 00:24:16,500 --> 00:24:21,270 Nu vil jeg sidde her i temmelig et stykke ind aldre, men det virker. 468 00:24:21,270 --> 00:24:26,000 >> Så nu i hukommelsen et sted vi har en bred vifte af størrelse 10.000, 469 00:24:26,000 --> 00:24:28,830 så i sidste ende 40.000 byte, fordi der er 470 00:24:28,830 --> 00:24:31,222 fire bytes for hver af disse tal. 471 00:24:31,222 --> 00:24:33,180 Så der er en bred vifte af størrelse 10.000, hvor vi kan 472 00:24:33,180 --> 00:24:36,201 lagre i alderen disse 10.000 mennesker. 473 00:24:36,201 --> 00:24:36,700 Okay. 474 00:24:36,700 --> 00:24:40,070 Spørgsmål om noget af dette? 475 00:24:40,070 --> 00:24:41,892 Ja. 476 00:24:41,892 --> 00:24:43,350 Hvad hvis du gav et negativt tal? 477 00:24:43,350 --> 00:24:44,870 Lad os se hvad der sker. 478 00:24:44,870 --> 00:24:49,320 Så i dette særlige case-- nummer af mennesker i lokalet, negativ. 479 00:24:49,320 --> 00:24:52,580 Den afviste det, fordi heroppe vi tilfældigvis 480 00:24:52,580 --> 00:24:57,180 at håndtering, at hvis n er mindre end en vi vil spørge igen. 481 00:24:57,180 --> 00:25:01,780 Hvis du forsøger at erklære en vifte af negativ størrelse, 482 00:25:01,780 --> 00:25:03,950 det generelt ikke virker. 483 00:25:03,950 --> 00:25:05,570 >> Så lad os prøve. 484 00:25:05,570 --> 00:25:08,000 Lad os se bort uanset værdi, de input til n 485 00:25:08,000 --> 00:25:10,571 og bare sige int aldre negativ. 486 00:25:10,571 --> 00:25:12,410 Lad os se, om det selv kompilerer. 487 00:25:12,410 --> 00:25:14,100 Jeg er ikke sikker. 488 00:25:14,100 --> 00:25:14,920 Nej. 489 00:25:14,920 --> 00:25:18,280 Så aldre er erklæret som en array med en negativ størrelse. 490 00:25:18,280 --> 00:25:22,540 Så upfront det genkender et array kan ikke være af negativ størrelse og forkaster det. 491 00:25:22,540 --> 00:25:26,840 Nu, hvis vi ikke håndterer Dette gør-mens loop korrekt, 492 00:25:26,840 --> 00:25:28,810 hvis vi ikke var kontrol hvis n er mindre end 1-- 493 00:25:28,810 --> 00:25:32,690 Lad os sige, at vi bare afse dette overhovedet 494 00:25:32,690 --> 00:25:35,940 og i stedet vi bare snuppe et heltal. 495 00:25:35,940 --> 00:25:40,710 Ligegyldigt hvad det heltal er, vi erklærer en vifte af denne størrelse. 496 00:25:40,710 --> 00:25:44,250 >> Så compileren ikke kan eventuelt klager nu. 497 00:25:44,250 --> 00:25:48,780 Hvis jeg kompilere denne-- så det kan ikke klage, 498 00:25:48,780 --> 00:25:51,480 fordi det kan ikke vide, at jeg er kommer til at indtaste et negativt tal, 499 00:25:51,480 --> 00:25:52,550 som kan være ugyldige. 500 00:25:52,550 --> 00:25:54,633 For alle den kender, jeg kunne Indtast et positivt tal, 501 00:25:54,633 --> 00:25:56,000 hvilket er helt gyldig. 502 00:25:56,000 --> 00:26:01,090 Så jeg forestiller mig, hvis jeg indtaster negativ 1 mennesker i lokalet, segmentering fejl. 503 00:26:01,090 --> 00:26:06,040 >> Så ok. 504 00:26:06,040 --> 00:26:13,160 Så lad os tilføje dette tilbage bare holde det, hvad det oprindeligt var. 505 00:26:13,160 --> 00:26:15,640 Så gør aldre. 506 00:26:15,640 --> 00:26:18,120 Nu, hvis jeg ønsker at prøve en negativ age-- så lad os 507 00:26:18,120 --> 00:26:19,710 sige, at der er fem personer i værelset. 508 00:26:19,710 --> 00:26:23,180 Age of persons nummer et er negativ 4, person, tre 509 00:26:23,180 --> 00:26:26,500 er nul, person, three-- OK. 510 00:26:26,500 --> 00:26:29,850 Så her, et år fra nu, personnummeret vil være negativ 3 år. 511 00:26:29,850 --> 00:26:32,830 Så sandsynligvis ikke giver mening. 512 00:26:32,830 --> 00:26:37,220 Men det er bare fordi at kigge på den kode alle vi laver 513 00:26:37,220 --> 00:26:40,260 anmoder GetInt. 514 00:26:40,260 --> 00:26:44,110 >> Nu, hvis vi havde haft den GetPositiveInt funktion 515 00:26:44,110 --> 00:26:49,690 eller vi havde simpelthen gjort dette slags samme, mens løkken dernede, 516 00:26:49,690 --> 00:26:52,340 så ville det virke helt fint. 517 00:26:52,340 --> 00:26:54,200 Men i dette særlige tilfælde, gør vi bare ikke 518 00:26:54,200 --> 00:26:57,772 tilfældigvis håndtere negative værdier. 519 00:26:57,772 --> 00:26:59,147 Andre spørgsmål om arrays? 520 00:26:59,147 --> 00:27:02,290 521 00:27:02,290 --> 00:27:03,250 OK. 522 00:27:03,250 --> 00:27:09,380 >> Så vi har nu set arrays. 523 00:27:09,380 --> 00:27:12,500 Og vi kommer til at bruge dette for kommandolinje-argumenter. 524 00:27:12,500 --> 00:27:14,680 Så i problemer sæt to-- Jeg kender mange af jer 525 00:27:14,680 --> 00:27:18,040 kan stadig arbejder på problemet sæt en, men problemet sæt to kommer op. 526 00:27:18,040 --> 00:27:22,260 I sæt problem to, er du nødt til skal gøre med strygere, arrays, 527 00:27:22,260 --> 00:27:23,950 og kommandolinje-argumenter. 528 00:27:23,950 --> 00:27:26,270 >> Så hvad er kommandolinjeargumenter? 529 00:27:26,270 --> 00:27:29,570 Nu kan du se hernede et lille teaser til præcis, hvad der er 530 00:27:29,570 --> 00:27:30,950 kommer til at ske. 531 00:27:30,950 --> 00:27:32,950 Vi ser int main, inc argc, string argv parentes. 532 00:27:32,950 --> 00:27:34,560 533 00:27:34,560 --> 00:27:38,130 Så først lad os prøve at tolke hvad, der forsøger at sige. 534 00:27:38,130 --> 00:27:40,800 Nu, OK. 535 00:27:40,800 --> 00:27:44,637 >> Så på kommandolinjen skal du være at vænne sig til nogle af disse kommandoer 536 00:27:44,637 --> 00:27:48,580 nu, og du har sikkert kørt cd i terminalen før. 537 00:27:48,580 --> 00:27:52,100 Så hvis vi siger cd pset1, du ved, at der skulle 538 00:27:52,100 --> 00:27:55,050 være at ændre i pset1 mappe. 539 00:27:55,050 --> 00:27:59,120 >> Nu mærke til, at du aldrig har skrevet et program som dette før. 540 00:27:59,120 --> 00:28:03,120 Hvert program, som du har skrevet, du ville køre, siger, dot skråstreg Mario, 541 00:28:03,120 --> 00:28:06,779 dot skråstreg grådige, og så er det måske bede dig om input. 542 00:28:06,779 --> 00:28:08,570 Nu, det er ikke hvad skift mappe gør. 543 00:28:08,570 --> 00:28:12,770 Når du kører cd, betyder det ikke så sige, hvilken mappe vil du cd ind? 544 00:28:12,770 --> 00:28:17,200 I stedet kan du bare sige, cd pset1, og det bare går ind i pset1 mappe. 545 00:28:17,200 --> 00:28:20,430 >> Så på samme måde vi har andre eksempler. 546 00:28:20,430 --> 00:28:21,540 gøre hej. 547 00:28:21,540 --> 00:28:25,760 Når du kører gøre, betyder det ikke så sige, hvilket program vil du gerne gøre? 548 00:28:25,760 --> 00:28:29,620 Du skal bare sige, på det kommandolinjen gøre hej. 549 00:28:29,620 --> 00:28:31,060 >> Move er et andet eksempel. 550 00:28:31,060 --> 00:28:34,840 Denne ene vi flytter mario.c fil op en mappe. 551 00:28:34,840 --> 00:28:38,060 Så nu ved vi med dette eksempel Vi er virkelig passerer to argumenter. 552 00:28:38,060 --> 00:28:42,090 Der er mario.c som det første argument, og dot prik er det andet argument. 553 00:28:42,090 --> 00:28:46,140 Og så når du kører gøre, du se, at virkelig lang kommando line-- 554 00:28:46,140 --> 00:28:50,580 der virkelig lang kommando trykt på kommandolinjen. 555 00:28:50,580 --> 00:28:53,590 Så længe command-- dette er blot en kort del af det, 556 00:28:53,590 --> 00:28:56,090 men nu har vi tre kommandolinjeargumenter. 557 00:28:56,090 --> 00:28:59,750 Dot Dash nul, hej, og hello.c. 558 00:28:59,750 --> 00:29:03,497 >> Så dette er kommando-linje argumenter, argumenter 559 00:29:03,497 --> 00:29:05,580 at du passerer på kommandolinjen, så det 560 00:29:05,580 --> 00:29:08,680 behøver ikke at blive bedt når du kører programmet. 561 00:29:08,680 --> 00:29:13,090 Det ville være frustrerende, hvis når du kørte clang det sagde, "OK, 562 00:29:13,090 --> 00:29:15,630 som program-- som fil du kompilere? 563 00:29:15,630 --> 00:29:17,010 Hello.c. 564 00:29:17,010 --> 00:29:19,440 Hvilke flag ville du gerne indtaste? Dash o. 565 00:29:19,440 --> 00:29:21,190 Hvad kunne du tænke dig filen skal hedde? 566 00:29:21,190 --> 00:29:21,690 hej. 567 00:29:21,690 --> 00:29:25,290 Nej, du bare køre klang dash o hej hello.c. 568 00:29:25,290 --> 00:29:28,820 >> Så ser tilbage på dette. 569 00:29:28,820 --> 00:29:32,920 Nu argc-- argc er argument tæller. 570 00:29:32,920 --> 00:29:36,620 Det er antallet af kommandolinjen argumenter indtastes på kommandolinjen. 571 00:29:36,620 --> 00:29:39,720 Nå, argv-- teknisk v står for vektor, 572 00:29:39,720 --> 00:29:41,460 som dybest set betyder array. 573 00:29:41,460 --> 00:29:42,680 Men du kan ignorere det. 574 00:29:42,680 --> 00:29:47,540 Argv-- vi har snor argv, så streng argv parentes. 575 00:29:47,540 --> 00:29:50,150 Så dette er en anden form for beslag du ikke har set før. 576 00:29:50,150 --> 00:29:52,300 Så vi har set beslag notation, når vi har sagt, 577 00:29:52,300 --> 00:29:53,970 lignende, string s lig Zamyla. 578 00:29:53,970 --> 00:29:56,910 s beslag 0 adgang tegnet Z. 579 00:29:56,910 --> 00:30:00,720 >> Vi har også set konsoller når vi sagde int aldre beslag 5. 580 00:30:00,720 --> 00:30:03,160 Det erklærede en vifte af størrelse 5. 581 00:30:03,160 --> 00:30:06,280 Så her er en version af beslag vi ikke har set før. 582 00:30:06,280 --> 00:30:09,630 Så denne slags snor argv som ville være helt fortrolig 583 00:30:09,630 --> 00:30:12,050 at det bare ville være en streng. 584 00:30:12,050 --> 00:30:14,520 Nu parenteser angiver at dette er et array. 585 00:30:14,520 --> 00:30:19,920 Så snor argv beslag midler at argv er en vifte af strenge. 586 00:30:19,920 --> 00:30:22,540 Nu teknisk en streng er en vifte af tegn. 587 00:30:22,540 --> 00:30:26,400 Så det er nu et array af en vifte af tegn. 588 00:30:26,400 --> 00:30:31,490 Men det er meget lettere at tænke over dette som blot et array af strenge. 589 00:30:31,490 --> 00:30:34,900 >> Så hvorfor kan beslagene være tom? 590 00:30:34,900 --> 00:30:38,170 Ligesom, hvorfor kan ikke sige, vi, beslag 5, beslag n? 591 00:30:38,170 --> 00:30:40,700 592 00:30:40,700 --> 00:30:41,200 Ja. 593 00:30:41,200 --> 00:30:43,731 594 00:30:43,731 --> 00:30:44,230 Ja. 595 00:30:44,230 --> 00:30:46,396 Vi ved ikke, hvor mange indgange der vil være. 596 00:30:46,396 --> 00:30:53,560 Så hvis vi ser på den klang eksempel Vi siger clang streg o hej hello.c. 597 00:30:53,560 --> 00:30:56,710 I dette særlige tilfælde, der sker at være tre kommandolinje-argumenter. 598 00:30:56,710 --> 00:31:00,522 Og så brackets-- vi vil se i en anden det ikke ville være tre. 599 00:31:00,522 --> 00:31:01,730 Det teknisk ville være fire. 600 00:31:01,730 --> 00:31:04,030 Men beslagene, vi ville sige, at der er tre. 601 00:31:04,030 --> 00:31:08,220 Men nu, hvis vi kiggede på farten mario.c dot dot, beslagene 602 00:31:08,220 --> 00:31:09,760 vi ønsker at sætte to i dem. 603 00:31:09,760 --> 00:31:12,884 >> Og der er en masse kommandoer, har et variabelt antal kommandolinjen 604 00:31:12,884 --> 00:31:13,620 argumenter. 605 00:31:13,620 --> 00:31:17,430 Hvad denne version af beslag notation angiver 606 00:31:17,430 --> 00:31:20,820 er, at argv er en vifte af strenge. 607 00:31:20,820 --> 00:31:24,360 Men vi ved ikke, hvor mange strenge er i den opstilling. 608 00:31:24,360 --> 00:31:27,090 Og hvordan kan vi så vide, hvordan mange strenge er i array? 609 00:31:27,090 --> 00:31:28,870 Det er hele pointen argc. 610 00:31:28,870 --> 00:31:32,300 argc fortæller os, hvor længe argv er. 611 00:31:32,300 --> 00:31:36,500 >> Så den sidste ting at huske på sind er, at teknisk, 612 00:31:36,500 --> 00:31:40,820 tæller kommandoen sig som en af de kommandolinjeargumenter. 613 00:31:40,820 --> 00:31:45,330 Så cd pset1, der er to kommandolinjeargumenter. 614 00:31:45,330 --> 00:31:50,260 Programmet i sig selv, cd, og derefter den faktiske argument del af det, pset1. 615 00:31:50,260 --> 00:31:54,490 Ethvert program, som du har skrevet indtil nu har haft en kommando-linje argument-- prik 616 00:31:54,490 --> 00:31:55,320 skråstreg Mario. 617 00:31:55,320 --> 00:31:57,350 Det er den eneste kommandolinjen argument. 618 00:31:57,350 --> 00:32:00,900 >> Så nu ser på klang dash o hej hello.c. 619 00:32:00,900 --> 00:32:01,905 Så hvad er argc? 620 00:32:01,905 --> 00:32:05,260 621 00:32:05,260 --> 00:32:06,080 4. 622 00:32:06,080 --> 00:32:08,140 Så argc er 4. 623 00:32:08,140 --> 00:32:12,140 Klang, så argv beslag 0 er klang. 624 00:32:12,140 --> 00:32:15,630 argv beslag 1 er bindestreg 0. 625 00:32:15,630 --> 00:32:21,870 argv beslag 2 er hej, og argv beslag 3 er hello.c. 626 00:32:21,870 --> 00:32:26,813 Ok, så spørgsmål om dette, og så vil vi se på nogle programmatiske eksempler. 627 00:32:26,813 --> 00:32:29,460 628 00:32:29,460 --> 00:32:30,480 >> OK. 629 00:32:30,480 --> 00:32:36,260 Så vi vil tage et kig på hello3.c. 630 00:32:36,260 --> 00:32:41,890 Så dette bør være bekendt fra et af de første eksempler c 631 00:32:41,890 --> 00:32:45,800 vi havde, hvor vi bare ville sige, hej verden, men nu er det mere generelt. 632 00:32:45,800 --> 00:32:52,300 Så her vi siger goddag % s backslash n argv beslag 1. 633 00:32:52,300 --> 00:32:57,440 Notice-- så indtil dette punkt, det er hvad min skabelonfil har lignede. 634 00:32:57,440 --> 00:33:01,800 Jeg havde int main (void), og så ville jeg gøre noget i den vigtigste funktion. 635 00:33:01,800 --> 00:33:05,100 Nu i stedet, når vi begynder at behandle med kommandolinjeargumenter, 636 00:33:05,100 --> 00:33:07,890 vi nødt til at angive et anden form for vigtigste. 637 00:33:07,890 --> 00:33:11,930 >> Så se på hello3 igen, det vigtigste er at gå 638 00:33:11,930 --> 00:33:15,990 at tage to argumenter nu-- int argc, antallet af kommandolinjeargumenter, 639 00:33:15,990 --> 00:33:20,970 og snor argv parentes, er det faktiske strygere indtastes på kommandolinjen. 640 00:33:20,970 --> 00:33:26,560 Så jeg har tænkt mig at ændre det skabelon til at afspejle dette. 641 00:33:26,560 --> 00:33:29,060 Nu når du skriver et program, hvis du ikke gør 642 00:33:29,060 --> 00:33:33,720 nødt til at tage nogen kommando-line argumenter, så bare bruge int main (void). 643 00:33:33,720 --> 00:33:37,070 Men nu når du skriver kommando-line argument programmer, som 644 00:33:37,070 --> 00:33:40,350 du kommer til at gøre for problemet sæt to-- så nu, at du kører 645 00:33:40,350 --> 00:33:42,630 programmer, der skal tage kommandolinjeargumenter, 646 00:33:42,630 --> 00:33:45,250 du skal have vigtigste af denne formular. 647 00:33:45,250 --> 00:33:51,290 >> Så her-- dette er den store forbrug af kommando-linje argument. 648 00:33:51,290 --> 00:33:54,100 Så udskrivning argv 1. 649 00:33:54,100 --> 00:33:59,180 OK, så lad os kompilere og køre dette program. 650 00:33:59,180 --> 00:34:02,440 Gøre hello3. 651 00:34:02,440 --> 00:34:03,570 Kompilerer. 652 00:34:03,570 --> 00:34:06,870 Dot skråstreg hello3. 653 00:34:06,870 --> 00:34:08,920 Og lad os sige, "Rob". 654 00:34:08,920 --> 00:34:10,760 Hej Rob. 655 00:34:10,760 --> 00:34:14,940 Hvis jeg siger, "goddag Maria," hello Maria. 656 00:34:14,940 --> 00:34:15,719 Hej Maria. 657 00:34:15,719 --> 00:34:18,639 Hannah stadig siger, "goddag Maria ", fordi jeg ikke er 658 00:34:18,639 --> 00:34:21,340 gør noget med vores argv 2. 659 00:34:21,340 --> 00:34:22,590 Argv 2 nu ville være "Hannah". 660 00:34:22,590 --> 00:34:25,030 Argc ville være 3. 661 00:34:25,030 --> 00:34:27,735 Hvad hvis jeg gjorde det? 662 00:34:27,735 --> 00:34:31,980 663 00:34:31,980 --> 00:34:34,679 Så hej null. 664 00:34:34,679 --> 00:34:38,760 >> Han kort berørt det faktum at teknisk, getString 665 00:34:38,760 --> 00:34:42,429 kunne vende tilbage null, men vi får en meget mere i, hvad null rent faktisk er. 666 00:34:42,429 --> 00:34:47,449 Men tag det som et spørgsmål om at der ikke er generelt dårlige. 667 00:34:47,449 --> 00:34:50,179 Vi gjorde noget galt, hvis det er udskrivning "Hej null". 668 00:34:50,179 --> 00:34:52,179 Og årsagen til at vi gjorde noget galt is-- godt, 669 00:34:52,179 --> 00:34:56,179 da jeg kørte dot skråstreg hello3, argc var 1. 670 00:34:56,179 --> 00:34:59,680 Så det betyder længden af ​​argv var 1. 671 00:34:59,680 --> 00:35:05,110 Hvis et array har længden 1, den eneste gyldige indeks er nul. 672 00:35:05,110 --> 00:35:08,550 Og så her argv 1 er uden for intervallet i denne matrix. 673 00:35:08,550 --> 00:35:13,410 Det var magen til før, da jeg forsøgte at lagre 6 uden for enden af ​​grupperingen. 674 00:35:13,410 --> 00:35:18,100 Så jeg forsøger at få adgang noget uden for argv tæller, 675 00:35:18,100 --> 00:35:21,340 og vi får nul. 676 00:35:21,340 --> 00:35:24,360 >> Så en bedre version af dette en forbedring, 677 00:35:24,360 --> 00:35:27,010 udtrykkeligt tjekker argc. 678 00:35:27,010 --> 00:35:33,580 Så hvis argc lig med 2, der betyder, at vi kørte noget lignende dot skråstreg hello3 Rob. 679 00:35:33,580 --> 00:35:36,840 Og det vil udskrive "Hello Rob." 680 00:35:36,840 --> 00:35:39,850 Hvis argc er ikke lig 2, så det bare at gå 681 00:35:39,850 --> 00:35:42,560 at ignorere, hvad du lægger ved kommandolinjen argument 682 00:35:42,560 --> 00:35:43,960 som kommandolinje-argumenter. 683 00:35:43,960 --> 00:35:47,168 Eller hvis du ikke har bragt nogen overhovedet, er det bare at ignorere det og bare sige, 684 00:35:47,168 --> 00:35:47,960 "Hej dig." 685 00:35:47,960 --> 00:35:51,490 >> Så kompilering dette. 686 00:35:51,490 --> 00:35:54,500 Gøre hello4. 687 00:35:54,500 --> 00:35:56,790 Og kører hello4. 688 00:35:56,790 --> 00:36:00,010 Løb det på denne måde, hvad der skal udskrives? 689 00:36:00,010 --> 00:36:01,330 "Hej dig." 690 00:36:01,330 --> 00:36:02,810 Hej dig. 691 00:36:02,810 --> 00:36:05,870 Hvad med hello4 Rob? 692 00:36:05,870 --> 00:36:06,950 "Hej Rob." 693 00:36:06,950 --> 00:36:10,580 Og endelig, hej Rob Maria er bare "hej Du" igen, 694 00:36:10,580 --> 00:36:13,677 fordi du ikke rigtig komme ind noget, som det forventede. 695 00:36:13,677 --> 00:36:15,510 Du har indtastet flere navne end det kunne håndtere, 696 00:36:15,510 --> 00:36:19,500 så det bare misligholdt til det hej du adfærd. 697 00:36:19,500 --> 00:36:23,040 Så spørgsmål om dette? 698 00:36:23,040 --> 00:36:26,290 Eller kommandolinjeargumenter? 699 00:36:26,290 --> 00:36:28,690 >> OK, så tage et kig på en par flere eksempler på brug af 700 00:36:28,690 --> 00:36:34,230 kommando-linje arguments-- først vi har argv streg 1 prik c. 701 00:36:34,230 --> 00:36:38,510 Så kommentarerne give væk, hvad dette program bør gøre. 702 00:36:38,510 --> 00:36:42,460 Men bemærke nu-- dette for løkke, dette svarer til nøjagtige mønster 703 00:36:42,460 --> 00:36:43,390 Jeg sagde før. 704 00:36:43,390 --> 00:36:46,240 Vi har lige tilfældigvis hjælp argc stedet for n. 705 00:36:46,240 --> 00:36:48,880 Nu argc er virkelig n. 706 00:36:48,880 --> 00:36:51,260 Det er længden af ​​argv array. 707 00:36:51,260 --> 00:36:59,600 Så er iteration over argv vifte printf-ing hver argv værdi. 708 00:36:59,600 --> 00:37:04,730 >> Så hvis jeg gør dette. 709 00:37:04,730 --> 00:37:08,232 Gøre argv 1. 710 00:37:08,232 --> 00:37:09,940 Det kompilerer. 711 00:37:09,940 --> 00:37:11,620 Dot skråstreg argv 1. 712 00:37:11,620 --> 00:37:15,530 Bare kører dette, udskrifter dot skråstreg argv 1 713 00:37:15,530 --> 00:37:18,500 da det var den eneste kommandolinjen argument-- navnet programmet. 714 00:37:18,500 --> 00:37:22,080 Der vil altid være least-- argc kan ikke være mindre end én, 715 00:37:22,080 --> 00:37:25,910 da der vil altid mindst være programnavnet at køre. 716 00:37:25,910 --> 00:37:32,040 Så argv 1 Rob udskriver argv 1 og derefter på den nye linje "Rob". 717 00:37:32,040 --> 00:37:36,350 >> Så i den første iteration af denne sløjfe, i er 0. 718 00:37:36,350 --> 00:37:39,090 Argv 0 er navnet programmet. 719 00:37:39,090 --> 00:37:40,010 Dot skråstreg argv 1. 720 00:37:40,010 --> 00:37:43,770 Og så argv 1 er min første kommando-linje argument, som er Rob. 721 00:37:43,770 --> 00:37:45,920 På dette tidspunkt, er vi lig argc. 722 00:37:45,920 --> 00:37:48,210 Vi bryde ud af løkken, og vi er færdig. 723 00:37:48,210 --> 00:37:53,940 Så dette vil arbejde for en vilkårlig Antallet af kommandolinje-argumenter. 724 00:37:53,940 --> 00:37:58,550 Læg mærke til den udskriver argv 0, argv 1, argv 2, argv 3, argv 4. 725 00:37:58,550 --> 00:38:00,150 Og der er ingen argv 5. 726 00:38:00,150 --> 00:38:01,460 argc er lig med 5. 727 00:38:01,460 --> 00:38:06,960 Så på argc-- på jeg er lig 5, vi bryde ud af løkken. 728 00:38:06,960 --> 00:38:07,950 OK. 729 00:38:07,950 --> 00:38:11,315 Så spørgsmål om, at før vi se på en mere komplekst eksempel? 730 00:38:11,315 --> 00:38:14,190 731 00:38:14,190 --> 00:38:16,860 >> Så argv 2. 732 00:38:16,860 --> 00:38:17,830 Okay. 733 00:38:17,830 --> 00:38:20,610 Så vi er stadig udskriver de kommandolinjeargumenter. 734 00:38:20,610 --> 00:38:23,170 Men nu opdager vi har en indlejret for løkke. 735 00:38:23,170 --> 00:38:24,670 Så hvad er det gør? 736 00:38:24,670 --> 00:38:28,430 Så det første loop gør præcis, hvad det gjorde før. 737 00:38:28,430 --> 00:38:30,950 Vi er stadig looping løbet hver kommando-linje argument, 738 00:38:30,950 --> 00:38:34,260 men nu er denne anden loop-- vi har også set noget lignende før. 739 00:38:34,260 --> 00:38:38,600 Da han blev iteration løbet Zamyla udskrive Z-A-M-Y-L-A. 740 00:38:38,600 --> 00:38:44,816 Så denne anden sløjfe for int j lig 0, n er strlen af ​​argv beslag i. 741 00:38:44,816 --> 00:38:49,170 >> Så lad os først tænke til-- lad os gå igennem. 742 00:38:49,170 --> 00:38:53,560 Lad os tænke, hvad computeren ville gøre, hvis jeg kørte dette program som bare dot 743 00:38:53,560 --> 00:38:56,030 skråstreg argv Dash 2. 744 00:38:56,030 --> 00:39:03,590 Så hvis jeg kørte denne kode, så argc vil være lig med 1. 745 00:39:03,590 --> 00:39:07,050 Og snor argv-- der kun vil være en indekset i argv, 746 00:39:07,050 --> 00:39:12,370 og det kommer til at være lig med dot skråstreg argv 2-- programmets navn. 747 00:39:12,370 --> 00:39:19,170 >> OK, så nu jeg er lig 0, jeg mindre end 1, jeg plus plus for int j lig 0, 748 00:39:19,170 --> 00:39:23,880 n er strlen af ​​argv beslag 0, så i den første iteration af denne løkke. argv 749 00:39:23,880 --> 00:39:27,250 beslag 0 er dot skråstreg argv 2. 750 00:39:27,250 --> 00:39:29,320 Så hvad er længden af ​​denne streng? 751 00:39:29,320 --> 00:39:32,480 Nå, dot skråstreg A-R-G-V Dash 2. 752 00:39:32,480 --> 00:39:35,020 Så strlen af ​​dette vil være 8. 753 00:39:35,020 --> 00:39:37,500 Så j lig 0, n er lig med 8. 754 00:39:37,500 --> 00:39:39,530 Så længe j er mindre end 8, j ++. 755 00:39:39,530 --> 00:39:44,080 Og med at vi kommer til at være udskrivning af et enkelt tegn, som 756 00:39:44,080 --> 00:39:47,350 er argv beslag jeg beslag j. 757 00:39:47,350 --> 00:39:49,826 >> Så den eneste i er nul. 758 00:39:49,826 --> 00:39:51,700 Vi har stadig kun har én kommando-linje argument. 759 00:39:51,700 --> 00:39:53,890 I den første iteration af for-løkken, vi er 760 00:39:53,890 --> 00:39:56,950 vil være udskrivning argv beslag 0 0 beslag. 761 00:39:56,950 --> 00:39:58,325 Og så j kommer til at forøge. 762 00:39:58,325 --> 00:40:01,650 Og vi kommer til at udskrive argv beslag 0 konsol 1. 763 00:40:01,650 --> 00:40:04,150 Og så argv beslag 0 beslag 2. 764 00:40:04,150 --> 00:40:09,030 >> Så dette er vores første møde flerdimensionale arrays. 765 00:40:09,030 --> 00:40:12,770 Husk tidligere, at jeg sagde at argv er teknisk 766 00:40:12,770 --> 00:40:15,950 et array af arrays af tegn. 767 00:40:15,950 --> 00:40:24,360 Så her hvis jeg sagde noget lignende string s lig argv beslag i, 768 00:40:24,360 --> 00:40:29,590 og så sagde jeg, s beslag j, dette ville udføre de samme ting. 769 00:40:29,590 --> 00:40:31,960 Nu du har set s beslag j før. 770 00:40:31,960 --> 00:40:36,680 Det er bare at få adgang til j-te karakter af denne streng. 771 00:40:36,680 --> 00:40:48,010 Så med dette, får vi den j-te karakter i'te argv. 772 00:40:48,010 --> 00:40:51,450 >> Så hvad skal dette i sidste ende output? 773 00:40:51,450 --> 00:40:53,210 Gøre argv 2. 774 00:40:53,210 --> 00:40:54,730 Det kompilerer. 775 00:40:54,730 --> 00:40:56,340 Dot skråstreg argv 2. 776 00:40:56,340 --> 00:41:03,790 "Rob Maria Hannah," og give os lidt plads. 777 00:41:03,790 --> 00:41:07,050 Så vi kan se, at dette er udsende prik på sin egen linje og skråstreg 778 00:41:07,050 --> 00:41:08,920 på sin egen linje og en på sin egen linje. 779 00:41:08,920 --> 00:41:11,260 Det er at udskrive hver individuel karakter 780 00:41:11,260 --> 00:41:12,950 af hver kommando-linje argument. 781 00:41:12,950 --> 00:41:15,960 Og så i mellem dem, på grund af denne nye linje 782 00:41:15,960 --> 00:41:19,380 vi udskriver hernede, i mellem dem det vil udskrive en ny linje. 783 00:41:19,380 --> 00:41:24,540 >> Så dette ligner forudgående argv bindestreg 1, 784 00:41:24,540 --> 00:41:26,459 der udskrives hver kommando-linje argument, 785 00:41:26,459 --> 00:41:28,500 men nu er vi udskriver de kommandolinjeargumenter 786 00:41:28,500 --> 00:41:31,950 og derefter gennem hver iteration karakter af hver enkelt kommando-line argument 787 00:41:31,950 --> 00:41:35,400 at få denne udgang. 788 00:41:35,400 --> 00:41:36,870 OK? 789 00:41:36,870 --> 00:41:40,570 Så spørgsmål om dette? 790 00:41:40,570 --> 00:41:45,130 >> Én ting at bemærke, er, at kommando-linje arguments-- 791 00:41:45,130 --> 00:41:49,990 så de er adskilt af mellemrum, som du ville naturligvis forvente, at være. 792 00:41:49,990 --> 00:41:53,050 Så en streng kan have mellemrum i det. 793 00:41:53,050 --> 00:41:57,380 Det er ikke super vigtigt, men hvis jeg ønskede den tredje kommandolinjen argument 794 00:41:57,380 --> 00:42:01,226 at have en plads i det, så jeg kunne sige noget som dette. 795 00:42:01,226 --> 00:42:04,470 796 00:42:04,470 --> 00:42:05,550 OK? 797 00:42:05,550 --> 00:42:12,190 Så det nu stadig kun har tre kommando-linje arguments-- godt 4. 798 00:42:12,190 --> 00:42:17,620 Dot skråstreg argv bindestreg 2, Rob, Maria og Hannah Bloomberg. 799 00:42:17,620 --> 00:42:18,320 OK. 800 00:42:18,320 --> 00:42:19,310 Spørgsmål til dette? 801 00:42:19,310 --> 00:42:22,700 802 00:42:22,700 --> 00:42:24,894 >> Der er ikke noget særligt om rummet karakter. 803 00:42:24,894 --> 00:42:27,810 Det sker blot at være at kommando-linje behandler mellemrumstegnet 804 00:42:27,810 --> 00:42:29,226 hvordan du adskille hvert argument. 805 00:42:29,226 --> 00:42:32,048 806 00:42:32,048 --> 00:42:33,000 Okay. 807 00:42:33,000 --> 00:42:39,950 Så Problem sæt to-- du kommer til at være 808 00:42:39,950 --> 00:42:43,240 kigge på hemmelig-nøgle kryptografi. 809 00:42:43,240 --> 00:42:47,700 Så ligner dette eksempel vi så fra A Christmas Story, 810 00:42:47,700 --> 00:42:52,840 du kommer til at være at gennemføre nogle algoritmer, der, givet en besked, 811 00:42:52,840 --> 00:42:55,560 du kommer til at være i stand til at kryptere den besked 812 00:42:55,560 --> 00:42:58,730 at kun en person med at hemmelige nøgle, med denne dekoder ring, 813 00:42:58,730 --> 00:43:01,090 skal kunne dekryptere. 814 00:43:01,090 --> 00:43:04,839 >> Så det er den standard udgave. 815 00:43:04,839 --> 00:43:07,130 Du kommer til at være at gennemføre to forskellige versioner. 816 00:43:07,130 --> 00:43:09,620 Hvis du tilfældigvis til at tage et kig ved hacker Edition nu, 817 00:43:09,620 --> 00:43:12,600 vi vil give du en streng som denne, 818 00:43:12,600 --> 00:43:15,240 som repræsenterer et krypteret password. 819 00:43:15,240 --> 00:43:19,990 Så dit mål er at finde ud af hvad den dekrypterede password er. 820 00:43:19,990 --> 00:43:26,950 Nu er dette er faktisk hvordan adgangskoder lagres i en masse computere, 821 00:43:26,950 --> 00:43:31,290 og det bare gemmer dette tilfældig streng af tegn. 822 00:43:31,290 --> 00:43:34,440 Du er nødt til at regne ud, hvordan du får fra denne tilfældige streng af tegn 823 00:43:34,440 --> 00:43:36,140 til, hvad den oprindelige adgangskode var. 824 00:43:36,140 --> 00:43:39,060 825 00:43:39,060 --> 00:43:43,290 >> Og endelig, efter denne problem sæt, bør du 826 00:43:43,290 --> 00:43:46,100 være i stand til at forstå, hvad det betyder. 827 00:43:46,100 --> 00:43:51,650 Så du vil lære at dekryptere denne form for tilfældig streng. 828 00:43:51,650 --> 00:43:56,390 Tilsvarende, hvis du husker fra uge 0, du måske har set denne webadresse. 829 00:43:56,390 --> 00:44:00,210 Og du bør være i stand til dekryptere dette i sidste ende. 830 00:44:00,210 --> 00:44:04,810 Du vil måske ikke være glad, når du dekryptere den og klik på linket. 831 00:44:04,810 --> 00:44:05,700 Okay. 832 00:44:05,700 --> 00:44:06,591 Det er det for i dag. 833 00:44:06,591 --> 00:44:12,095 Så se dig i næste uge! 834 00:44:12,095 --> 00:44:18,315 >> [ELEKTRONISK musik spiller] 835 00:44:18,315 --> 00:47:15,619