1 00:00:07,420 --> 00:00:08,160 [Powered by Google Translate] DAVID J. Malan: Okay. 2 00:00:08,160 --> 00:00:11,170 Det er CS50, og det er i slutningen af ​​uge to. 3 00:00:11,170 --> 00:00:14,650 Hvis du forventer at være sultne omkring dette tidspunkt i morgen, ved, at vi skal 4 00:00:14,650 --> 00:00:18,920 at indkalde som en lille gruppe i morgen, torsdag, 01:15. 5 00:00:18,920 --> 00:00:21,460 Der er denne URL her, hvis du gerne vil RSVP. 6 00:00:21,460 --> 00:00:25,270 Rummet er begrænset, så tilgiv, hvis formularen er fyldt op med den tid, du 7 00:00:25,270 --> 00:00:26,680 udfylde denne. 8 00:00:26,680 --> 00:00:29,400 En anden URL selvom det kunne være af interesse er dette. 9 00:00:29,400 --> 00:00:32,409 >> Så i næsten en måneds tid, er naturligvis vil blive stillet til rådighed 10 00:00:32,409 --> 00:00:36,090 desto mere bredt via EDX, via hvilken folk på internettet vil være 11 00:00:36,090 --> 00:00:39,580 i stand til at følge med, deltage i kurset ganske aktivt, i virkeligheden. 12 00:00:39,580 --> 00:00:43,070 De vil være ved hjælp af CS50 Appliance og CS50 Diskuter og de fleste af 13 00:00:43,070 --> 00:00:45,840 forskellige software-værktøjer, som vi allerede har brugt dette semester. 14 00:00:45,840 --> 00:00:49,030 Og en af ​​de initiativer, vi gerne vil tage på som et eksperiment i år 15 00:00:49,030 --> 00:00:53,120 er at se, hvor meget indhold, vi kan oversætte til andre talt og 16 00:00:53,120 --> 00:00:54,110 skriftsprog. 17 00:00:54,110 --> 00:00:58,000 Så hvis du kan have en interesse i at deltage i dette projekt, hvor 18 00:00:58,000 --> 00:01:02,090 vil vi give engelsk udskrifter og undertekster for kursets 19 00:01:02,090 --> 00:01:05,190 foredrag og shorts og seminarer og sektioner og lignende - 20 00:01:05,190 --> 00:01:08,700 hvis du taler flydende eller skrive flydende et andet sprog, ville vi 21 00:01:08,700 --> 00:01:12,240 elsker at engagere dig i dette projekt, hvor du tager på en eller flere af de 22 00:01:12,240 --> 00:01:15,340 videoer, omsætte dem til et sprog, du kender ganske godt. 23 00:01:15,340 --> 00:01:19,050 For at give dig en fornemmelse af grænsefladen, der er denne web-baserede brugergrænseflade 24 00:01:19,050 --> 00:01:22,330 at vi kommer til at bruge, som vil skabe væsentlige en UI som denne. 25 00:01:22,330 --> 00:01:24,520 Dette blev mig lære noget Halloween siden. 26 00:01:24,520 --> 00:01:27,710 Og på den højre side er der i sort siden af ​​disse tidsstempler, 27 00:01:27,710 --> 00:01:31,300 kan du se de forskellige ting, der kom ud af min mund den dag. 28 00:01:31,300 --> 00:01:34,660 Og så under det, vil du være i stand til at oversætte til et andet sprog. 29 00:01:34,660 --> 00:01:37,840 Præcis hvad den kortlægning er mellem, i dette tilfælde, engelsk 30 00:01:37,840 --> 00:01:38,660 og, siger, spansk. 31 00:01:38,660 --> 00:01:40,480 Så det er faktisk en meget brugervenligt værktøj. 32 00:01:40,480 --> 00:01:43,690 Du kan spole tilbage og hurtig fremad meget let med tastaturgenveje. 33 00:01:43,690 --> 00:01:46,710 Så hvis du gerne vil deltage i dette forsøg, og få dine ord 34 00:01:46,710 --> 00:01:50,730 set og læst af potentielt tusindvis af folk derude, behøver du velkommen 35 00:01:50,730 --> 00:01:51,960 gratis at deltage. 36 00:01:51,960 --> 00:01:56,940 >> Nu et ord om den killing fra mandag, så vi har sendt en alt 37 00:01:56,940 --> 00:01:58,120 skræmmende besked. 38 00:01:58,120 --> 00:02:02,130 Gør klar over, at som kontortid foreslå og som sektioner antyder, at 39 00:02:02,130 --> 00:02:05,110 design af kurset er meget at have de studerende at samarbejde og 40 00:02:05,110 --> 00:02:09,250 taler til arbejde gennem problematiske sæt og problemer sammen. 41 00:02:09,250 --> 00:02:13,630 Og virkelig linjen bare kommer ned til, igen, det arbejde, du i sidste ende 42 00:02:13,630 --> 00:02:16,420 skal indsende skal være din egen. 43 00:02:16,420 --> 00:02:19,080 Og så er det helt ærligt - i kontortiden, er det helt normal - 44 00:02:19,080 --> 00:02:21,560 Det er helt kunne forventes, selv - at chatte med nogle 45 00:02:21,560 --> 00:02:22,370 venner ved siden af ​​dig. 46 00:02:22,370 --> 00:02:25,240 Hvis han eller hun kæmper med nogle emne, og du er ligesom, oh, godt lade 47 00:02:25,240 --> 00:02:27,750 mig give dig et glimt af nogle linje kode, jeg skrev. 48 00:02:27,750 --> 00:02:28,290 Det er fint. 49 00:02:28,290 --> 00:02:28,700 Det sker. 50 00:02:28,700 --> 00:02:31,580 Og det er meget befordrende, tror jeg, med processen med læring. 51 00:02:31,580 --> 00:02:35,270 Hvor linien, igen bliver krydset er, når hovedet er slags vippes over 52 00:02:35,270 --> 00:02:38,800 her i alt for mange sekunder eller minutter for at virkelig at få netop 53 00:02:38,800 --> 00:02:41,250 været en Unblocking mulighed til din ven. 54 00:02:41,250 --> 00:02:43,870 Og helt sikkert, når tingene bliver udvekslet via e-mail og Dropbox og 55 00:02:43,870 --> 00:02:45,350 lignende, der også er linjen. 56 00:02:45,350 --> 00:02:48,940 Så med alle midler, føler sig trygge og føler sig tilskyndet til at chatte med venner 57 00:02:48,940 --> 00:02:51,270 og klassekammerater om psets og meget mere. 58 00:02:51,270 --> 00:02:54,680 Og bare indse, at hvad du i sidste ende indsende virkelig bør være 59 00:02:54,680 --> 00:02:57,780 produkt af din skabelse og ikke en anden. 60 00:02:57,780 --> 00:03:01,010 >> Så i samme ånd af nuttede skabninger, kan du 61 00:03:01,010 --> 00:03:02,820 kender denne fyr her. 62 00:03:02,820 --> 00:03:06,180 Så dette er en forfærdelig teatralsk film fra år siden. 63 00:03:06,180 --> 00:03:08,680 Nogen her set Spaceballs? 64 00:03:08,680 --> 00:03:09,120 Ok. 65 00:03:09,120 --> 00:03:10,220 Så et godt nummer her. 66 00:03:10,220 --> 00:03:13,840 Så det er vores vidunderligt akademisk måde at indføre i dag i sidste ende 67 00:03:13,840 --> 00:03:15,130 begrebet kryptografi. 68 00:03:15,130 --> 00:03:19,010 Og så en af ​​de domæne specifikke problemer for Pset 2, der vil komme 69 00:03:19,010 --> 00:03:22,770 ud sent i morgen aften, er at dykke ned i en verden af ​​kryptering, hvilket 70 00:03:22,770 --> 00:03:26,380 er kunsten at kryptere eller forvanske oplysninger. 71 00:03:26,380 --> 00:03:30,160 Og det i sidste ende drejer sig om verden i sikkerhed. 72 00:03:30,160 --> 00:03:34,440 >> Nu sikkerhed for de fleste os kommer i form af temmelig verdslige mekanismer. 73 00:03:34,440 --> 00:03:36,920 Vi har alle brugernavne og adgangskoder. 74 00:03:36,920 --> 00:03:41,350 Og alle af os har meget dårlige brugernavne og adgangskoder, mest sandsynlige. 75 00:03:41,350 --> 00:03:45,250 Hvis din adgangskode er den samme på flere websteder, det er nok ikke 76 00:03:45,250 --> 00:03:47,920 den bedste idé, som vi vil diskutere i retning semesters afslutning. 77 00:03:47,920 --> 00:03:51,680 Hvis din adgangskode er skrevet på en gul seddel - ingen joke - på din 78 00:03:51,680 --> 00:03:55,130 monitor, der også er ikke nødvendigvis det bedste design, men en ganske almindelig 79 00:03:55,130 --> 00:03:56,140 fænomen. 80 00:03:56,140 --> 00:04:00,420 Og hvis du ikke bruger kryptografi til at kryptere dine adgangskoder, er de 81 00:04:00,420 --> 00:04:01,610 særligt sårbare. 82 00:04:01,610 --> 00:04:04,670 Så hvis du tror, ​​du er super dygtig ved at have en skjult Word 83 00:04:04,670 --> 00:04:07,740 dokumentere et sted på din harddisk, der har alle dine passwords, men 84 00:04:07,740 --> 00:04:10,550 det er i en mappe, som ingen kommer til at se i, at også ikke er et meget 85 00:04:10,550 --> 00:04:11,540 sikker mekanisme. 86 00:04:11,540 --> 00:04:15,100 Og hvad så Pset 2 vil indføre, er denne kunst af kryptografi og 87 00:04:15,100 --> 00:04:18,300 scrambling oplysninger, således at ting som passwords er 88 00:04:18,300 --> 00:04:19,500 desto mere sikker. 89 00:04:19,500 --> 00:04:24,500 For at motivere denne meget virkelige verden problem med en meget ikke-real-verden 90 00:04:24,500 --> 00:04:28,740 scenarie, lad mig introducere dig til en af ​​vores foretrukne klip her fra dette 91 00:04:28,740 --> 00:04:29,895 film, Spaceballs. 92 00:04:29,895 --> 00:04:30,565 >> [VIDEO PLAYBACK] 93 00:04:30,565 --> 00:04:32,995 -Hjelm, du djævel, hvad sker der? 94 00:04:32,995 --> 00:04:34,730 Hvad laver du til min datter? 95 00:04:34,730 --> 00:04:38,960 -Lad mig introducere den strålende unge plastikkirurg, Dr. Philip 96 00:04:38,960 --> 00:04:43,290 Schlotkin, den største næse job mand i hele 97 00:04:43,290 --> 00:04:45,526 univers og Beverly Hills. 98 00:04:45,526 --> 00:04:46,450 -Deres Højhed. 99 00:04:46,450 --> 00:04:47,380 -Næse job? 100 00:04:47,380 --> 00:04:48,035 Jeg forstår det ikke. 101 00:04:48,035 --> 00:04:49,480 Hun har allerede haft en næse job. 102 00:04:49,480 --> 00:04:51,490 Det var en sød 16 til stede. 103 00:04:51,490 --> 00:04:53,090 -Nej, det er ikke hvad du tror. 104 00:04:53,090 --> 00:04:55,150 Det er meget, meget værre. 105 00:04:55,150 --> 00:04:59,860 Hvis du ikke giver mig den kombination til luft skjold, Dr. Schlotkin vil 106 00:04:59,860 --> 00:05:04,135 give din datter tilbage sit gamle næse. 107 00:05:04,135 --> 00:05:05,385 -Nej! 108 00:05:08,202 --> 00:05:10,186 Hvor fik du den? 109 00:05:10,186 --> 00:05:11,178 -Okay. 110 00:05:11,178 --> 00:05:11,674 Jeg vil fortælle. 111 00:05:11,674 --> 00:05:12,666 Jeg vil fortælle. 112 00:05:12,666 --> 00:05:14,154 -Nej, far, nej. 113 00:05:14,154 --> 00:05:15,150 Du må ikke. 114 00:05:15,150 --> 00:05:16,460 -Du er ret, min kære. 115 00:05:16,460 --> 00:05:18,450 Jeg kommer til at savne din nye næse. 116 00:05:18,450 --> 00:05:21,550 Men jeg vil ikke fortælle dem kombinationen uanset hvad. 117 00:05:21,550 --> 00:05:23,100 -Meget godt. 118 00:05:23,100 --> 00:05:25,510 Dr. Schlotkin, gør dit værste. 119 00:05:25,510 --> 00:05:26,760 -Min fornøjelse. 120 00:05:30,560 --> 00:05:31,180 -Nej! 121 00:05:31,180 --> 00:05:33,450 Vent, vent. 122 00:05:33,450 --> 00:05:34,770 Jeg vil fortælle. 123 00:05:34,770 --> 00:05:36,400 Jeg vil fortælle. 124 00:05:36,400 --> 00:05:38,630 -Jeg vidste, at det ville virke. 125 00:05:38,630 --> 00:05:42,040 Okay, giv den til mig. 126 00:05:42,040 --> 00:05:46,890 -Kombinationen er én. 127 00:05:46,890 --> 00:05:47,290 -One. 128 00:05:47,290 --> 00:05:48,183 -One. 129 00:05:48,183 --> 00:05:48,950 -Two. 130 00:05:48,950 --> 00:05:49,370 -Two. 131 00:05:49,370 --> 00:05:50,450 -Two. 132 00:05:50,450 --> 00:05:50,715 -Tre 133 00:05:50,715 --> 00:05:51,380 -Tre. 134 00:05:51,380 --> 00:05:52,390 -Tre. 135 00:05:52,390 --> 00:05:53,200 -Four. 136 00:05:53,200 --> 00:05:53,720 -Four. 137 00:05:53,720 --> 00:05:55,830 -Four. 138 00:05:55,830 --> 00:05:56,580 -Five 139 00:05:56,580 --> 00:05:57,120 -Five. 140 00:05:57,120 --> 00:05:58,560 -Five. 141 00:05:58,560 --> 00:06:03,770 -Så kombinationen er én, to, tre, fire, fem. 142 00:06:03,770 --> 00:06:06,745 Det er den dummeste kombination jeg nogensinde har hørt i mit liv. 143 00:06:06,745 --> 00:06:09,290 Det er den slags ting en idiot ville have på hans bagage. 144 00:06:09,290 --> 00:06:11,540 -Tak, Deres Højhed. 145 00:06:11,540 --> 00:06:12,940 -Hvad gjorde du? 146 00:06:12,940 --> 00:06:14,230 -Jeg slukkede væggen. 147 00:06:14,230 --> 00:06:14,630 -Nej, du gjorde ikke. 148 00:06:14,630 --> 00:06:15,430 Du slukket hele filmen. 149 00:06:15,430 --> 00:06:16,722 -Jeg må have trykket på den forkerte knap. 150 00:06:16,722 --> 00:06:18,078 -Nå, sætte den på igen. 151 00:06:18,078 --> 00:06:18,805 Sæt filmen igen. 152 00:06:18,805 --> 00:06:19,080 -Ja, sir. 153 00:06:19,080 --> 00:06:19,270 Ja, sir. 154 00:06:19,270 --> 00:06:19,830 -Lad os gå, Erna. 155 00:06:19,830 --> 00:06:20,270 Kom, Gretchen. 156 00:06:20,270 --> 00:06:22,850 Selvfølgelig du kender jeg stadig nødt til at fakturere dig for dette. 157 00:06:27,400 --> 00:06:28,325 -Jamen, virkede det? 158 00:06:28,325 --> 00:06:29,550 Hvor er porten? 159 00:06:29,550 --> 00:06:29,910 -Det virkede, sir. 160 00:06:29,910 --> 00:06:30,770 Vi har kombinationen. 161 00:06:30,770 --> 00:06:31,390 -Godt. 162 00:06:31,390 --> 00:06:35,630 Nu kan vi tage hver sidste pust af frisk luft fra planeten Druidia. 163 00:06:35,630 --> 00:06:36,550 Hvad er kombinationen? 164 00:06:36,550 --> 00:06:38,805 -En, to, tre, fire, fem. 165 00:06:38,805 --> 00:06:40,610 -En, to, tre, fire, fem? 166 00:06:40,610 --> 00:06:41,070 -Ja. 167 00:06:41,070 --> 00:06:41,760 -Det er forbløffende. 168 00:06:41,760 --> 00:06:45,200 Jeg har fået den samme kombination på min bagage. 169 00:06:45,200 --> 00:06:47,800 Forbered Spaceball 1 for øjeblikkelig afgang. 170 00:06:47,800 --> 00:06:48,536 -Ja, sir. 171 00:06:48,536 --> 00:06:52,350 -Og ændre kombinationen på min bagage. 172 00:06:52,350 --> 00:06:53,250 -Av! 173 00:06:53,250 --> 00:06:55,020 [END VIDEO PLAYBACK] 174 00:06:55,020 --> 00:06:57,470 >> DAVID J. Malan: An amazing film, du skulle nu alle se. 175 00:07:00,600 --> 00:07:06,540 Så sammenhæng her er, at med usikre data kommer en mulighed for at 176 00:07:06,540 --> 00:07:07,790 kryptere den, og scramble det. 177 00:07:07,790 --> 00:07:11,060 Og så dette for eksempel er et eksempel på en krypteret meddelelse. 178 00:07:11,060 --> 00:07:12,980 Dette faktisk siger noget på engelsk. 179 00:07:12,980 --> 00:07:14,750 Men det er tydeligvis ikke helt indlysende. 180 00:07:14,750 --> 00:07:17,360 Og vi kommer hele vejen rundt i dag for at drille hinanden, hvad denne hemmelighed 181 00:07:17,360 --> 00:07:18,380 budskab her er. 182 00:07:18,380 --> 00:07:22,370 Men i den virkelige verden af ​​computere, går tingene ikke engang ligne de måske 183 00:07:22,370 --> 00:07:23,440 være engelske sætninger. 184 00:07:23,440 --> 00:07:27,500 For eksempel er det, hvad du kan finde på en standard Linux eller Mac eller 185 00:07:27,500 --> 00:07:32,080 UNIX-computer i en fil, der var engang kaldet password-filen. 186 00:07:32,080 --> 00:07:34,170 I dag er det blevet flyttet til andre steder. 187 00:07:34,170 --> 00:07:38,660 Men hvis man ser på det rigtige sted på et system, vil du se ikke kun din 188 00:07:38,660 --> 00:07:41,430 brugernavn eller for andre mennesker på systemet, men du vil se et 189 00:07:41,430 --> 00:07:43,410 krypteret version af deres adgangskode. 190 00:07:43,410 --> 00:07:47,800 Faktisk ordet crypt der tyder på, at følgende ting er krypteret. 191 00:07:47,800 --> 00:07:52,030 Og denne serie af tilsyneladende tilfældige bogstaver og tegn og tal, og 192 00:07:52,030 --> 00:07:56,370 osv. kan dekrypteres kun ved generelt at kende nogle hemmelige - 193 00:07:56,370 --> 00:07:58,600 et hemmeligt ord, et hemmeligt nummer. 194 00:07:58,600 --> 00:08:02,760 Og så endda til kunsten at kryptografi sidste ende koges ned stole på nogle 195 00:08:02,760 --> 00:08:05,700 sortere og vide noget som en anden ikke gør. 196 00:08:05,700 --> 00:08:10,010 Vi vil udforske dette i en lidt mere detaljeret i dag og i Pset at komme. 197 00:08:10,010 --> 00:08:11,860 >> Og nu et ord om bestået / ikke bestået. 198 00:08:11,860 --> 00:08:15,250 Så specielt, har som nogle af jer dykket ned Pset 1, apparatet, og 199 00:08:15,250 --> 00:08:18,390 en meget ny verden for dig selv, indså, at frustrationer og 200 00:08:18,390 --> 00:08:21,340 forvirring og bare tekniske problemer kan forventes. 201 00:08:21,340 --> 00:08:24,410 Især med den første Pset, hvor der er bare så meget nyt, bare komme 202 00:08:24,410 --> 00:08:28,830 fortrolig med ls og cd og alle disse mystiske kommandoer i et nyt miljø. 203 00:08:28,830 --> 00:08:32,679 Og det er adskilt fra det faktiske materiale og programmering selv. 204 00:08:32,679 --> 00:08:35,960 Så indser også, at der er helt sikkert kontortid, der findes som 205 00:08:35,960 --> 00:08:36,770 støttestrukturen. 206 00:08:36,770 --> 00:08:38,620 Sektioner begynder den kommende søndag. 207 00:08:38,620 --> 00:08:41,990 Men vigtigst af alt, hvis du føler bare, at dette ikke er 208 00:08:41,990 --> 00:08:44,420 verden for dig, indse, at det virkelig bare tage tid. 209 00:08:44,420 --> 00:08:47,520 Og var det ikke for denne mulighed år siden for mig at tage en klasse 210 00:08:47,520 --> 00:08:50,840 bestået / ikke bestået, ærligt, jeg aldrig ville have endog sat foden i klasseværelset. 211 00:08:50,840 --> 00:08:53,520 Og du kan ændre dette indtil, siger, den femte mandag i kurset. 212 00:08:53,520 --> 00:08:57,110 Så hvis du er på kanten nu, indse, at i stedet for hovedet ind i en anden 213 00:08:57,110 --> 00:09:01,000 farvande helt, må du bestemt overveje bare skift til bestået / ikke bestået. 214 00:09:01,000 --> 00:09:03,750 Igen, der er ikke virkelig denne kultur her på Harvard for at tage tingene 215 00:09:03,750 --> 00:09:08,080 bestået / ikke bestået, da alle virkelig ønsker at opnå eller endnu bedre end. 216 00:09:08,080 --> 00:09:11,470 Men helt ærligt, det er en vidunderlig måde at forsøge noget ud, som måske ikke 217 00:09:11,470 --> 00:09:13,110 være velkendt for dig. 218 00:09:13,110 --> 00:09:17,090 Og du vil ende med at gøre i de fleste tilfælde ganske fine, måske 219 00:09:17,090 --> 00:09:18,040 meget til din overraskelse. 220 00:09:18,040 --> 00:09:20,850 Og endnu mere konkret, hvad jeg tror bestået / ikke bestået generelt gør, 221 00:09:20,850 --> 00:09:23,350 især som du måske har oplevet med Pset 0, hvis du har lagt 222 00:09:23,350 --> 00:09:27,200 i 10 timer, 15 timer, 25 timer i nogle Pset - og du bare banging 223 00:09:27,200 --> 00:09:28,180 dit hoved mod væggen, 224 00:09:28,180 --> 00:09:29,850 og det bliver super sent på aftenen, 225 00:09:29,850 --> 00:09:31,880 men du har taget Pset ligesom 90% af den måde, 226 00:09:31,880 --> 00:09:33,780 du ved, du kan bare ikke finde ud af én ting - 227 00:09:33,780 --> 00:09:36,830 bestået / ikke bestået virkelig tager brodden af ​​en klasse som denne, hvor du kan sortere 228 00:09:36,830 --> 00:09:39,150 af lykkeligt sige okay, jeg ved, det er ikke perfekt. 229 00:09:39,150 --> 00:09:40,470 Men jeg arbejdede min røv ud på denne. 230 00:09:40,470 --> 00:09:42,410 Jeg er temmelig tilfreds med, hvor det endte. 231 00:09:42,410 --> 00:09:44,780 Og det vil opfylde forventningerne til bestået / ikke bestået. 232 00:09:44,780 --> 00:09:46,850 Så du skal holde det i tankerne. 233 00:09:46,850 --> 00:09:47,140 >> Ok. 234 00:09:47,140 --> 00:09:50,980 Så dem af jer der har kæmpet for at bruge Harvard University Wi-Fi vide 235 00:09:50,980 --> 00:09:54,780 at der er en CS50 SSID, en Wi-Fi-forbindelse flyder rundt, at du 236 00:09:54,780 --> 00:09:56,520 måske have bedre held til. 237 00:09:56,520 --> 00:09:59,430 Det er lidt ironisk, at adgangskoden til dette - hvis du gerne vil prøve 238 00:09:59,430 --> 00:10:03,080 tilslutning til dette for bedre hastigheder og lad os vide, hvis det er ikke noget bedre - 239 00:10:03,080 --> 00:10:09,240 er en, to, tre, fire, fem, hele vejen op til otte fordi otte er 240 00:10:09,240 --> 00:10:10,270 mere sikker end fem. 241 00:10:10,270 --> 00:10:15,520 Så hvis du har brug for Wi-Fi-adgangskode, oprette forbindelse til CS50 trådløst her. 242 00:10:15,520 --> 00:10:16,950 En, to, tre, fire, fem, seks, syv, otte. 243 00:10:16,950 --> 00:10:20,440 Og post på CS50 Diskuter hvis du stadig har intermitterende forbindelsesproblemer, 244 00:10:20,440 --> 00:10:24,880 og vi vil lade de beføjelser, der skal vide for dette rum. 245 00:10:24,880 --> 00:10:25,180 >> Ok. 246 00:10:25,180 --> 00:10:30,350 Så en hurtig teaser, især for dem af jer der er fan drenge eller piger 247 00:10:30,350 --> 00:10:31,900 af alle ting Apple. 248 00:10:31,900 --> 00:10:37,566 Hvad jeg gravet op fra et par år tilbage var denne fil her, ilock.c, bare for at 249 00:10:37,566 --> 00:10:40,930 slags gøre mere konkret og mere kompleks nogle af de mere grundlæggende C 250 00:10:40,930 --> 00:10:42,350 programmer, vi har skrevet. 251 00:10:42,350 --> 00:10:44,360 Så jeg åbnede denne fil, ilock.c. 252 00:10:44,360 --> 00:10:46,830 Det er til rådighed på foredrag side for i dag. 253 00:10:46,830 --> 00:10:49,470 På venstre side kan du se en lang liste over funktioner. 254 00:10:49,470 --> 00:10:51,860 Så fyr, der skrev dette skrev en masse funktioner, 255 00:10:51,860 --> 00:10:53,290 mere end blot main. 256 00:10:53,290 --> 00:10:55,490 Han brugte en hel masse biblioteker her. 257 00:10:55,490 --> 00:11:00,450 Og hvis vi starter rulle gennem, hvad det egentlig er, er det meget 258 00:11:00,450 --> 00:11:04,670 Først tror jeg, knæk for den oprindelige iPhone. 259 00:11:04,670 --> 00:11:08,000 Når du ønskede at jailbreake den originale iPhone, hvilket betyder untether 260 00:11:08,000 --> 00:11:11,800 det fra AT & T og faktisk installere speciel software på den og gøre ting 261 00:11:11,800 --> 00:11:13,510 at Apple ikke vil have folk til at gøre - 262 00:11:13,510 --> 00:11:17,020 godt, nogen tog sig tid til at finde ud af præcis, hvordan de kunne udnytte 263 00:11:17,020 --> 00:11:20,880 software fejl, fejl, bugs, i Apples software. 264 00:11:20,880 --> 00:11:22,650 Og således blev født ilock.c. 265 00:11:22,650 --> 00:11:26,670 At hvis du har kompileret den på en computer og installeret det på en iPhone, der 266 00:11:26,670 --> 00:11:29,810 blev sluttet til din computer via fx en USB-kabel, ville det give dig 267 00:11:29,810 --> 00:11:33,360 administrative eller root-rettigheder på din iPhone og lade dig gøre temmelig meget 268 00:11:33,360 --> 00:11:34,170 hvad du vil. 269 00:11:34,170 --> 00:11:36,740 >> Og så der har været denne fascinerende kat og mus spil mellem Apple og 270 00:11:36,740 --> 00:11:39,920 resten af ​​verden, navnlig da de, ligesom mange virksomheder, så prøv at låse 271 00:11:39,920 --> 00:11:43,220 deres ting ned, så du kan kun gøre med det hvad de har til hensigt. 272 00:11:43,220 --> 00:11:46,620 Men takket være folk som dette og deres forståelse af lav-niveau 273 00:11:46,620 --> 00:11:50,580 detaljer og, i dette tilfælde, programmering C og en masse af de velkendte konstruktioner 274 00:11:50,580 --> 00:11:54,630 at vi er begyndt at spille med, er du i stand til virkelig udnytter 275 00:11:54,630 --> 00:11:59,050 hardware på en måde, du kan se passer og ikke nødvendigvis nogle virksomhedsenhed. 276 00:11:59,050 --> 00:12:01,360 Så for eksempel, har jeg ingen idé om, hvad alt dette gør. 277 00:12:01,360 --> 00:12:03,220 Men GetVersion lyder temmelig ligetil. 278 00:12:03,220 --> 00:12:05,480 Og det ser ud til det er en funktion, som denne person skrev. 279 00:12:05,480 --> 00:12:09,240 Tag en slags heltal som argument, ikke vender tilbage noget, men 280 00:12:09,240 --> 00:12:13,080 ser ud til at sløjfe med en for-løkke her, og en hvis betingelse, hvis betingelse, 281 00:12:13,080 --> 00:12:15,620 bryde, og på en måde relaterer til versionsnumre. 282 00:12:15,620 --> 00:12:16,700 Hvis vi rulle ned - 283 00:12:16,700 --> 00:12:19,570 selv om en masse af disse søgeord der vil være nye, og der er en 284 00:12:19,570 --> 00:12:22,590 hel masse funktioner i her vi har aldrig set og måske ikke altid se over 285 00:12:22,590 --> 00:12:23,830 løbet af semesteret - 286 00:12:23,830 --> 00:12:27,150 ved slutningen af ​​dagen, følger det af de samme regler og logik, at vi har været 287 00:12:27,150 --> 00:12:28,760 leger med hidtil. 288 00:12:28,760 --> 00:12:34,220 Så dette er alt for gammel til at knække din iPhone 3s eller 4s eller snart 5s, i disse dage, 289 00:12:34,220 --> 00:12:37,320 men ved, at det hele er meget afledt af denne verden, at vi har 290 00:12:37,320 --> 00:12:38,430 dykket ned. 291 00:12:38,430 --> 00:12:41,900 >> Så lad os tage et kig på en lidt mere simpelt eksempel. 292 00:12:41,900 --> 00:12:46,100 Denne ene, bare for at få varmes op med nogle syntaks og også nogle andre data 293 00:12:46,100 --> 00:12:49,240 type, som vi har talt om, men har ikke rigtig set i C. Så det er en 294 00:12:49,240 --> 00:12:51,680 fil kaldet positive1.c. 295 00:12:51,680 --> 00:12:55,120 Og pr bemærkningerne øverst, det bare kræver, at en bruger giver en 296 00:12:55,120 --> 00:12:55,960 positivt tal. 297 00:12:55,960 --> 00:12:59,530 Så det er et eksempel på en gør-while-løkke, hvilket er rart for bruger-interactive 298 00:12:59,530 --> 00:13:01,980 programmer, hvor du har brug for at fortælle brugeren at gøre noget. 299 00:13:01,980 --> 00:13:05,190 Og hvis de ikke samarbejder, du råber ad dem eller afvise deres input. 300 00:13:05,190 --> 00:13:11,610 Sag i punkt, jeg kommer til at gøre linjer 19 gennem 24, så længe brugeren har 301 00:13:11,610 --> 00:13:14,310 ikke givet mig et positivt tal. 302 00:13:14,310 --> 00:13:20,400 Nu er denne detalje her på linie 18, hvorfor jeg erklærer n over hele denne 303 00:13:20,400 --> 00:13:24,490 looping konstrukt i modsætning til lige ved siden af ​​linie 22, hvor jeg 304 00:13:24,490 --> 00:13:26,880 faktisk pleje at få n? 305 00:13:26,880 --> 00:13:27,330 Ja? 306 00:13:27,330 --> 00:13:27,780 [Uhørlig] 307 00:13:27,780 --> 00:13:29,040 >> DAVID J. Malan: Yeah, så spørgsmålet om anvendelsesområde. 308 00:13:29,040 --> 00:13:30,850 Og i lægmands sigt Hvilke muligheder henvise til? 309 00:13:34,690 --> 00:13:36,610 Ja? 310 00:13:36,610 --> 00:13:37,860 [Uhørlig] 311 00:13:40,040 --> 00:13:41,105 DAVID J. Malan: Kan du tale lidt højere? 312 00:13:41,105 --> 00:13:43,450 SPEAKER 1: Hvor du kan få adgang til en bestemt variabel. 313 00:13:43,450 --> 00:13:45,170 DAVID J. Malan: Perfect. 314 00:13:45,170 --> 00:13:47,360 Hvor du kan få adgang til en bestemt variabel. 315 00:13:47,360 --> 00:13:50,400 Og generelt, den tommelfingerregel hidtil har været, at rækkevidden af ​​visse 316 00:13:50,400 --> 00:13:55,860 variabel er defineret af de seneste krøllede parenteser, som du har set. 317 00:13:55,860 --> 00:14:02,010 Og så i dette tilfælde, hvis jeg gjorde fejlen at erklære n on line 22, 318 00:14:02,010 --> 00:14:03,010 denne linje ville arbejde. 319 00:14:03,010 --> 00:14:10,990 Jeg ville få en int, og jeg ville sætte det ind i den variable n i linie 22. 320 00:14:10,990 --> 00:14:16,900 Men hvilken linje kode vil nu have nogen idé om, hvad jeg taler om? 321 00:14:16,900 --> 00:14:22,650 Så 25, og det viser sig 24, så godt, fordi i dette tilfælde, det falder udenfor 322 00:14:22,650 --> 00:14:23,610 af tuborg-klammerne. 323 00:14:23,610 --> 00:14:27,280 Så bare en lille smule af et irritationsmoment, men meget let løses ved blot at erklære 324 00:14:27,280 --> 00:14:30,140 den variable uden for funktionen selv. 325 00:14:30,140 --> 00:14:32,600 >> Nu må vi se senere i dag, kan du gå et skridt videre. 326 00:14:32,600 --> 00:14:34,860 Og du kan endda få lidt doven - 327 00:14:34,860 --> 00:14:37,320 og det er ikke at blive anbefalet, i almindelighed - 328 00:14:37,320 --> 00:14:42,260 men du kan endda få doven og sætte en variabel globalt, så at sige, ikke 329 00:14:42,260 --> 00:14:46,670 indersiden af ​​en funktion, der ikke inde i en sløjfe, men i selve filen, uden 330 00:14:46,670 --> 00:14:49,600 af alle de funktioner, du har skrevet, som jeg gjorde her på linie 15. 331 00:14:49,600 --> 00:14:51,160 Men det er generelt ildeset. 332 00:14:51,160 --> 00:14:55,680 Men indse dette er en løsning til tider til andre problemer, som vi vil 333 00:14:55,680 --> 00:14:56,620 sidste ende se. 334 00:14:56,620 --> 00:14:58,130 Så for nu vil vi overlade det sådan her. 335 00:14:58,130 --> 00:15:01,030 Men lad os se om vi kan omskrive dette bare for at begynde at udtrykke os selv et 336 00:15:01,030 --> 00:15:01,990 lidt anderledes. 337 00:15:01,990 --> 00:15:05,330 >> Så dette program, bare for at være klar, er positive1. 338 00:15:05,330 --> 00:15:11,810 Lad mig gå videre her og i min terminalvindue gøre positive1, Enter. 339 00:15:11,810 --> 00:15:12,740 Kompilerer, okay. 340 00:15:12,740 --> 00:15:14,910 Jeg har tænkt mig at køre positive1, trykke Enter. 341 00:15:14,910 --> 00:15:16,820 Jeg forlanger, at du giver mig et positivt heltal. 342 00:15:16,820 --> 00:15:18,260 Jeg vil sige -1. 343 00:15:18,260 --> 00:15:18,910 Det virkede ikke. 344 00:15:18,910 --> 00:15:22,150 0, 99, der synes at arbejde. 345 00:15:22,150 --> 00:15:23,570 Måske ikke den mest strenge test. 346 00:15:23,570 --> 00:15:26,480 Men i det mindste er det en nice tilregnelighed kontrollere, at vi er på rette spor. 347 00:15:26,480 --> 00:15:29,240 Så nu lad mig gå videre og åbne version to af dette. 348 00:15:29,240 --> 00:15:32,500 Og hvad er anderledes allerede? 349 00:15:32,500 --> 00:15:35,140 Det gennemfører det samme. 350 00:15:35,140 --> 00:15:40,660 Men hvad der springer ud som klart anderledes denne gang? 351 00:15:40,660 --> 00:15:42,560 Ja, så denne bool i grønt. 352 00:15:42,560 --> 00:15:45,980 Gedit har fremhævet i grøn dette søgeord er kendt som bool, 353 00:15:45,980 --> 00:15:47,000 hvilket er en datatype. 354 00:15:47,000 --> 00:15:51,080 Det kommer ikke indbygget i alle versioner af C. Du er nødt til at indeholde en 355 00:15:51,080 --> 00:15:52,010 specifikke bibliotek. 356 00:15:52,010 --> 00:15:54,770 I vores tilfælde medtaget jeg CS50 biblioteket, så vi 357 00:15:54,770 --> 00:15:56,460 har adgang til bool. 358 00:15:56,460 --> 00:15:59,810 Men i linie 18, synes vi at have en boolesk værdi her kaldet taknemmelige. 359 00:15:59,810 --> 00:16:01,040 Så jeg kunne have kaldt det noget. 360 00:16:01,040 --> 00:16:04,500 Men jeg kaldte det taknemmelig bare at slags formidle nogle semantiske betydning. 361 00:16:04,500 --> 00:16:07,930 Så i første omgang på linie 18, jeg er åbenbart ikke taknemmelig, fordi 362 00:16:07,930 --> 00:16:12,150 Boolesk værdi taknemmelig er initialiseret til false på linje 18. 363 00:16:12,150 --> 00:16:16,890 Og så synes hvad jeg har gjort her i linjerne 21 til 23 er jeg lige har 364 00:16:16,890 --> 00:16:18,610 slags omskrevet min logik. 365 00:16:18,610 --> 00:16:21,020 Så ingen funktionelt anderledes. 366 00:16:21,020 --> 00:16:26,940 Men i linie 22 nu, jeg kontrollere, om int brugeren har givet, er større end 367 00:16:26,940 --> 00:16:31,120 0, så jeg simpelthen ændre værdien af ​​taknemmelige for sand. 368 00:16:31,120 --> 00:16:32,290 Og hvorfor gør jeg det? 369 00:16:32,290 --> 00:16:35,600 Fordi der i linje 25, tilsyneladende, jeg skal tjekke en betingelse. 370 00:16:35,600 --> 00:16:39,380 Gør denne løkke, mens taknemmelig er falsk. 371 00:16:39,380 --> 00:16:43,610 >> Så jeg foreslår dette som et alternativ til version en, fordi det er mindst en 372 00:16:43,610 --> 00:16:45,130 lidt mere intuitiv, måske. 373 00:16:45,130 --> 00:16:46,900 Det er lidt mere jordforbindelse på engelsk. 374 00:16:46,900 --> 00:16:51,710 Så skal du gøre følgende, mens du ikke er taknemmelig eller mens taknemmelig er falsk. 375 00:16:51,710 --> 00:16:55,890 Og denne gang også, jeg åbenbart er ligeglad med at huske, hvad brugeren har indtastet 376 00:16:55,890 --> 00:16:57,730 i, fordi bekendtgørelsen er der ingen variable n.. 377 00:16:57,730 --> 00:16:58,650 Så faktisk, jeg - 378 00:16:58,650 --> 00:17:00,080 en lille hvid løgn der. 379 00:17:00,080 --> 00:17:02,770 Funktionelt, at programmet er en smule anderledes, når vi kommer til bunds i 380 00:17:02,770 --> 00:17:04,819 det, fordi jeg ikke huske, hvad n er. 381 00:17:04,819 --> 00:17:09,579 Men jeg ønskede at vise, også her, at selvom vi har set GetInt og 382 00:17:09,579 --> 00:17:13,920 GetString anvendes på højre side af et lighedstegn hidtil, således at 383 00:17:13,920 --> 00:17:17,160 vi husker den værdi, teknisk, det er ikke strengt nødvendigt. 384 00:17:17,160 --> 00:17:20,950 Hvis du af en eller anden grund, du bare ligeglad for at gemme værdien, du bare vil 385 00:17:20,950 --> 00:17:25,710 at kontrollere værdien, bemærke, at vi bare kan skrive dette som GetInt åben 386 00:17:25,710 --> 00:17:27,000 paren tæt parentes. 387 00:17:27,000 --> 00:17:30,460 Denne funktion vil returnere en værdi, som vi har sagt. 388 00:17:30,460 --> 00:17:32,010 Det kommer til at give dig tilbage en int. 389 00:17:32,010 --> 00:17:36,450 Og så hvis du mentalt tænker på at dette sker, når jeg skriver i 99, GetInt 390 00:17:36,450 --> 00:17:38,160 returnerer tallet 99. 391 00:17:38,160 --> 00:17:41,330 Og så begrebsmæssigt, det er som om min kode var faktisk dette. 392 00:17:41,330 --> 00:17:45,880 Så hvis 99 faktisk er større end 0, så taknemmelige bliver sand. 393 00:17:45,880 --> 00:17:50,420 Så linje 25 indser ooh, vi gjort, fordi jeg nu taknemmelig. 394 00:17:50,420 --> 00:17:54,590 Og i linje 26, vi simpelthen sige, tak for den positive heltal, hvad det 395 00:17:54,590 --> 00:17:55,710 tilfældigvis. 396 00:17:55,710 --> 00:17:58,900 >> Nu lad os gøre lidt syntaktisk sukker her, så at sige. 397 00:17:58,900 --> 00:18:02,990 Lad os se om vi kan rydde op i denne linje 25 med denne tredje og sidste varians 398 00:18:02,990 --> 00:18:04,640 i positive3. 399 00:18:04,640 --> 00:18:08,250 Så mærke den eneste forskel nu er, hvad linje kode? 400 00:18:11,930 --> 00:18:13,260 Yeah, så 25. 401 00:18:13,260 --> 00:18:15,520 Og vi har ikke rigtig set dette trick endnu. 402 00:18:15,520 --> 00:18:19,510 Men vi kunne se det udråbstegn på mandag, som angiver hvad? 403 00:18:19,510 --> 00:18:20,970 Så ikke, eller negation. 404 00:18:20,970 --> 00:18:23,460 Så tag en boolesk værdi og vende sin værdi. 405 00:18:23,460 --> 00:18:24,390 Sand bliver falsk. 406 00:18:24,390 --> 00:18:25,500 False bliver sand. 407 00:18:25,500 --> 00:18:28,910 Så det, jeg ville foreslå, er endda lidt mere intuitiv af en måde at 408 00:18:28,910 --> 00:18:32,200 skrive kode, fordi jeg stadig initialisere taknemmelig for falsk. 409 00:18:32,200 --> 00:18:33,530 Jeg stadig gøre følgende. 410 00:18:33,530 --> 00:18:35,700 Jeg satte taknemmelig for sand, når den tid kommer. 411 00:18:35,700 --> 00:18:40,690 Men nu kan du virkelig bare oversætte denne kode verbalt venstre mod højre, 412 00:18:40,690 --> 00:18:42,550 mens ikke taknemmelige. 413 00:18:42,550 --> 00:18:46,170 Fordi bang, eller udråbstegn, betegner begrebet ikke, så mens 414 00:18:46,170 --> 00:18:47,010 ikke taknemmelige. 415 00:18:47,010 --> 00:18:49,740 >> Så igen har vi ikke har indført nye koncepter i sig selv. 416 00:18:49,740 --> 00:18:53,230 Vi har talt om Booleans tilbage, når vi spillede med Scratch. 417 00:18:53,230 --> 00:18:55,690 Men indser nu kan vi bare begynde at skrive vores kode i 418 00:18:55,690 --> 00:18:56,550 mange forskellige måder. 419 00:18:56,550 --> 00:19:00,010 Så specielt i pset1, hvis du er slags kæmper for at finde ud af vejen til 420 00:19:00,010 --> 00:19:03,400 skrive nogle program, er du heldig odds, fordi der vil være nogen 421 00:19:03,400 --> 00:19:05,780 antal løsninger, som du kan ske på. 422 00:19:05,780 --> 00:19:09,850 For eksempel er det kun tre for selv den simpleste af programmer. 423 00:19:09,850 --> 00:19:10,180 Ok. 424 00:19:10,180 --> 00:19:13,860 Og nu husker på mandag, vi efterlod på denne note med returværdier. 425 00:19:13,860 --> 00:19:18,280 Så for første gang, skrev vi et program, som ikke bare har main, 426 00:19:18,280 --> 00:19:22,240 det har også sin egen brugerdefinerede funktion, som jeg skrev her. 427 00:19:22,240 --> 00:19:26,640 Så i linje 31 til 34, har jeg implementeret en terning funktion. 428 00:19:26,640 --> 00:19:27,800 Det er ikke kompliceret. 429 00:19:27,800 --> 00:19:29,830 Det er bare en gange en gange en, i dette tilfælde. 430 00:19:29,830 --> 00:19:34,920 Men hvad der er vigtigt om det er, at jeg tager input i form af en og 431 00:19:34,920 --> 00:19:38,910 Jeg vender tilbage output i form af en gange en gange en. 432 00:19:38,910 --> 00:19:43,940 >> Så nu har jeg mulighed for, ligesom jeg vant til med printf alene, at kalde 433 00:19:43,940 --> 00:19:47,120 denne funktion ved at kalde terningen funktionen. 434 00:19:47,120 --> 00:19:49,470 Og terningen funktion har nogle input. 435 00:19:49,470 --> 00:19:52,030 Og terningen returnerer funktionen nogle output. 436 00:19:52,030 --> 00:19:56,660 Og så derimod printf bare gjorde noget. 437 00:19:56,660 --> 00:19:59,490 Den vendte ikke tilbage noget, som vi holdt af - selvom, som en 438 00:19:59,490 --> 00:20:00,820 til side, det gør returnere en værdi. 439 00:20:00,820 --> 00:20:02,650 Du skal bare generelt ignorere det. 440 00:20:02,650 --> 00:20:04,000 Printf bare gjorde noget. 441 00:20:04,000 --> 00:20:06,220 Det havde en bivirkning af udskrivning til skærmen. 442 00:20:06,220 --> 00:20:09,480 Derimod her har vi terningen funktion, som 443 00:20:09,480 --> 00:20:11,400 faktisk returnerer noget. 444 00:20:11,400 --> 00:20:12,960 >> Så dette er generelt - 445 00:20:12,960 --> 00:20:15,260 For dem bekendt med dette, er det en forholdsvis simpel idé. 446 00:20:15,260 --> 00:20:18,460 Men for dem mindre fortrolige med denne idé om at passere i inputs og få 447 00:20:18,460 --> 00:20:21,700 tilbage udgange, lad os prøve bare noget super simpelt. 448 00:20:21,700 --> 00:20:25,180 Er der nogen behagelig kommer op på scenen kortvarigt? 449 00:20:25,180 --> 00:20:27,460 Du skal være fortrolig med et kamera på dig, så godt. 450 00:20:27,460 --> 00:20:27,640 Yeah. 451 00:20:27,640 --> 00:20:28,610 Okay, hvad er dit navn? 452 00:20:28,610 --> 00:20:29,020 KEN: Ken. 453 00:20:29,020 --> 00:20:29,420 DAVID J. Malan: Ken. 454 00:20:29,420 --> 00:20:29,810 Okay, Ken. 455 00:20:29,810 --> 00:20:31,060 Kom nu op. 456 00:20:31,060 --> 00:20:34,660 Så Ken kommer til at være en funktion af sorterer her. 457 00:20:34,660 --> 00:20:35,760 Og lad os gå videre og gøre det. 458 00:20:35,760 --> 00:20:38,790 Lad os få lidt fancy. 459 00:20:38,790 --> 00:20:39,770 Hyggeligt at møde dig. 460 00:20:39,770 --> 00:20:41,010 Velkommen til centrum. 461 00:20:41,010 --> 00:20:41,980 Ok. 462 00:20:41,980 --> 00:20:45,590 Lad os slå denne knap her. 463 00:20:45,590 --> 00:20:46,420 Ok. 464 00:20:46,420 --> 00:20:49,490 Så her har du en moderne tavle. 465 00:20:49,490 --> 00:20:53,050 Og hvad jeg er, er den vigtigste funktion, for eksempel. 466 00:20:53,050 --> 00:20:55,990 Og jeg har ikke en iPad i hånden. 467 00:20:55,990 --> 00:20:59,000 Jeg kan ikke rigtig huske, hvordan man - ja, faktisk kan ikke sige. 468 00:20:59,000 --> 00:21:02,200 Jeg har ikke rigtig god håndskrift. 469 00:21:02,200 --> 00:21:05,260 Og så derfor vil jeg have dig til at udskrive noget på skærmen for mig. 470 00:21:05,260 --> 00:21:07,470 >> Så jeg er det vigtigste program. 471 00:21:07,470 --> 00:21:15,060 Og jeg vil have du siger dette ved at skrive det i min kylling scratch og 472 00:21:15,060 --> 00:21:16,600 derefter passerer dig en indgang. 473 00:21:16,600 --> 00:21:20,000 Så som fjollet men denne øvelse er, begrebet funktioner og kalde en 474 00:21:20,000 --> 00:21:22,260 funktion og returnerer en funktion virkelig kan koges ned til denne. 475 00:21:22,260 --> 00:21:23,120 Jeg er main. 476 00:21:23,120 --> 00:21:26,270 Jeg har netop skrevet printf ("noget") på skærmen. 477 00:21:26,270 --> 00:21:27,470 Jeg kører dette program. 478 00:21:27,470 --> 00:21:30,900 Og så snart printf bliver kaldt, det tager ét argument - eller en parameter, 479 00:21:30,900 --> 00:21:31,660 undertiden - 480 00:21:31,660 --> 00:21:32,780 mellem anførselstegn. 481 00:21:32,780 --> 00:21:33,960 Her er det argument. 482 00:21:33,960 --> 00:21:35,740 Jeg passerer det til Ken. 483 00:21:35,740 --> 00:21:39,390 Nu er han en sort boks skrevet nogle flere år siden, at der tilsyneladende 484 00:21:39,390 --> 00:21:41,070 kun ved, hvordan man udskriver ting på skærmen. 485 00:21:41,070 --> 00:21:42,320 >> Så udføre. 486 00:21:48,842 --> 00:21:49,900 Det er ikke dårligt. 487 00:21:49,900 --> 00:21:50,890 Så meget god. 488 00:21:50,890 --> 00:21:52,900 Så nu Ken sker fuldbyrdende. 489 00:21:52,900 --> 00:21:55,810 Har han brug for at give mig noget tilbage? 490 00:21:55,810 --> 00:21:57,240 Så ikke, at vi har set hidtil. 491 00:21:57,240 --> 00:21:59,230 Heller ikke printf faktisk returnerer et tal. 492 00:21:59,230 --> 00:22:01,640 Men vi vil ignorere, at for nu, fordi vi aldrig har brugt det. 493 00:22:01,640 --> 00:22:03,400 Så det er det for Ken. 494 00:22:03,400 --> 00:22:06,650 Og så nu main kommer tilbage til at udføre - 495 00:22:06,650 --> 00:22:09,630 main overtager kontrol af programmet igen, fordi denne linje kode, 496 00:22:09,630 --> 00:22:11,010 printf, sker fuldbyrdende. 497 00:22:11,010 --> 00:22:13,890 Og vi går om vores måde fuldbyrdende uanset hvilke andre linjer er der. 498 00:22:13,890 --> 00:22:14,130 >> Ok. 499 00:22:14,130 --> 00:22:17,080 Så lad os nu prøve en lidt anderledes eksempel. 500 00:22:17,080 --> 00:22:22,430 Og denne gang her, lad os først rydde skærmen her. 501 00:22:22,430 --> 00:22:24,670 Og denne gang vil vi gøre det Cubing funktion. 502 00:22:24,670 --> 00:22:27,350 Men denne gang, jeg forventer et output værdi. 503 00:22:27,350 --> 00:22:28,630 Så lad os gå videre og gøre det. 504 00:22:28,630 --> 00:22:35,680 Så nu har jeg en linje kode, der siger x = cube (x). 505 00:22:35,680 --> 00:22:36,930 Så faktisk let's - 506 00:22:41,450 --> 00:22:43,940 den linje kode, tilbagekaldelse, ser sådan her ud. 507 00:22:43,940 --> 00:22:45,960 x = cube (x). 508 00:22:45,960 --> 00:22:48,100 Så hvordan vil dette arbejde? 509 00:22:48,100 --> 00:22:50,820 Så lad os gå videre og give dig en hvid skærm igen. 510 00:22:50,820 --> 00:22:55,000 Og jeg vil skrive nu ned værdien af ​​x, der på dette tidspunkt i 511 00:22:55,000 --> 00:23:01,080 tid sker for at være, lad os sige, 2, for at holde det enkelt. 512 00:23:01,080 --> 00:23:04,890 Så jeg har skrevet ned på et stykke papir værdien af ​​2, 513 00:23:04,890 --> 00:23:06,100 som er min værdi x. 514 00:23:06,100 --> 00:23:08,250 Jeg afleverer det til Ken. 515 00:23:08,250 --> 00:23:09,200 KEN: Og jeg bare skrive svaret? 516 00:23:09,200 --> 00:23:12,660 DAVID J. Malan: Ja, lad os bare skrive svaret. 517 00:23:12,660 --> 00:23:13,030 Okay. 518 00:23:13,030 --> 00:23:16,280 Og nu skal han returnere mig noget. 519 00:23:16,280 --> 00:23:17,560 Så - 520 00:23:17,560 --> 00:23:18,170 perfect. 521 00:23:18,170 --> 00:23:18,840 Rart Segue. 522 00:23:18,840 --> 00:23:21,970 >> Så nu han rækker mig tilbage værdi på 8, i dette tilfælde. 523 00:23:21,970 --> 00:23:23,220 Og hvad skal jeg gøre med det? 524 00:23:23,220 --> 00:23:26,130 Tja, faktisk, lad os se. 525 00:23:26,130 --> 00:23:26,640 Få denne ret. 526 00:23:26,640 --> 00:23:27,880 Hvad skal jeg gøre med det? 527 00:23:27,880 --> 00:23:31,900 Nu jeg har tænkt mig at tage denne værdi og faktisk gemme det i de 528 00:23:31,900 --> 00:23:33,400 samme bit i hukommelsen. 529 00:23:33,400 --> 00:23:35,030 Men læg mærke til, jeg er lidt kæmper her. 530 00:23:35,030 --> 00:23:38,280 Jeg er lidt forvirret, fordi hvor skal jeg faktisk skrive værdien af ​​x? 531 00:23:38,280 --> 00:23:41,840 For hvad jeg lige har gjort er fysisk hånd Ken et stykke papir 532 00:23:41,840 --> 00:23:44,400 der havde værdien 2, som var x. 533 00:23:44,400 --> 00:23:46,300 Og ja, det er netop, hvad der sker. 534 00:23:46,300 --> 00:23:50,100 Så det viser sig, at når du kalder en funktion, og du passerer på et argument 535 00:23:50,100 --> 00:23:54,130 gerne "hej verden", eller du passere i et argument som 2, generelt, er du 536 00:23:54,130 --> 00:23:56,720 passerer i en kopi af dette argument. 537 00:23:56,720 --> 00:24:01,020 Og så lige som jeg skrev ned tallet 2 her og rakte det til Ken, det skal 538 00:24:01,020 --> 00:24:04,760 betyder, at jeg stadig har en kopi af værdien 2 eller andet sted. 539 00:24:04,760 --> 00:24:08,140 Fordi ja, nu hvor jeg har fået tilbage værdien 8, jeg er nødt til at gå tilbage i 540 00:24:08,140 --> 00:24:12,010 RAM og faktisk skrive ned 8 hvor jeg engang havde et 2-tal. 541 00:24:12,010 --> 00:24:15,720 >> Så visuelt huske denne forestilling om at passere i bogstaveligste forstand 542 00:24:15,720 --> 00:24:16,730 en kopi af værdien. 543 00:24:16,730 --> 00:24:19,570 Ken gør hans ting, rækker mig tilbage noget - i dette tilfælde, 544 00:24:19,570 --> 00:24:20,820 en værdi som 8. 545 00:24:20,820 --> 00:24:22,660 Og så er jeg nødt til at gøre noget med denne værdi, hvis jeg 546 00:24:22,660 --> 00:24:24,880 ønsker at holde den rundt. 547 00:24:24,880 --> 00:24:29,470 Så alt dette vil være alt for velkendte inden længe. 548 00:24:29,470 --> 00:24:33,082 Tak så meget for denne demo her, Ken. 549 00:24:33,082 --> 00:24:34,820 Ok. 550 00:24:34,820 --> 00:24:36,720 Meget godt klaret. 551 00:24:36,720 --> 00:24:40,610 Så lad os se, hvordan det i sidste ende relaterer til nogle af funktion 552 00:24:40,610 --> 00:24:42,270 ringer, at vi har gjort her. 553 00:24:42,270 --> 00:24:47,610 Så lad mig gå videre og bringe os tilbage til Cubing eksempel her. 554 00:24:47,610 --> 00:24:53,080 Og bemærke, at hvis vi ønsker at rent faktisk begynder at tage dette yderligere, vil vi 555 00:24:53,080 --> 00:24:57,050 at være opmærksomme på, at antallet x, der bliver vedtaget i 556 00:24:57,050 --> 00:25:01,390 her er forskelligt fra det, der rent faktisk ledes ind i funktionen. 557 00:25:01,390 --> 00:25:03,940 Så igen, dette forbi eksemplar kommer til at blive helt 558 00:25:03,940 --> 00:25:05,620 germane på bare et øjeblik. 559 00:25:05,620 --> 00:25:09,320 >> Så lad os tage et kig på noget, der ikke helt virker rigtigt endnu. 560 00:25:09,320 --> 00:25:11,790 Jeg har tænkt mig at gå videre og åbne en tredje buggy eksempel, som 561 00:25:11,790 --> 00:25:13,560 er behæftet med naturen. 562 00:25:13,560 --> 00:25:18,070 Og det hedder buggy3, og det gennemfører en swapping-funktion. 563 00:25:18,070 --> 00:25:23,500 Så her har vi en hovedfunktion, der har x og y vilkårligt initialiseres til 564 00:25:23,500 --> 00:25:24,720 1 og 2, henholdsvis. 565 00:25:24,720 --> 00:25:27,590 Vi kunne bruge GetInt, men vi skal bare have en simpel øvelse. 566 00:25:27,590 --> 00:25:29,680 Så det er hard-coded som 1 og 2. 567 00:25:29,680 --> 00:25:35,330 I linierne 21 og 22, tilsyneladende vi udskrive x og y, én pr linje. 568 00:25:35,330 --> 00:25:39,620 Så på linie 23, hævder jeg, jeg swapping disse værdier, prik, prik, prik. 569 00:25:39,620 --> 00:25:43,030 Jeg åbenbart kalder en funktion i linje 24 kaldes swap 570 00:25:43,030 --> 00:25:44,000 der tager to argumenter. 571 00:25:44,000 --> 00:25:46,430 Det er helt legit for funktioner til at tage to argumenter. 572 00:25:46,430 --> 00:25:48,220 Vi har set printf gøre det allerede. 573 00:25:48,220 --> 00:25:50,370 Så swap tilsyneladende tager x og y. 574 00:25:50,370 --> 00:25:53,010 Og som navnet antyder, vil jeg håbe, at det kommer til at 575 00:25:53,010 --> 00:25:54,320 bytte disse to værdier. 576 00:25:54,320 --> 00:25:57,560 Så da jeg hævder på linie 25, byttes. 577 00:25:57,560 --> 00:26:01,570 Og gengiver x og y den antagelse, at 578 00:26:01,570 --> 00:26:02,830 de har faktisk blevet byttet. 579 00:26:02,830 --> 00:26:04,370 Men hvis jeg rent faktisk køre dette program - 580 00:26:04,370 --> 00:26:06,060 lad mig åbne et terminalvindue. 581 00:26:06,060 --> 00:26:07,750 Lad mig gøre buggy3. 582 00:26:07,750 --> 00:26:09,970 Som navnet antyder, er dette ikke kommer til at ende godt. 583 00:26:09,970 --> 00:26:14,690 Fordi når jeg trykker på Enter, bemærke, at x er 1. 584 00:26:14,690 --> 00:26:15,720 y er 2. 585 00:26:15,720 --> 00:26:19,160 Og dog ved afslutningen af ​​programmet, er de stadig i virkeligheden det samme. 586 00:26:19,160 --> 00:26:22,760 >> Så baseret på påvisning lige nu med Ken, hvad der faktisk foregår? 587 00:26:22,760 --> 00:26:24,660 Nå, lad os dykke ned i denne swap-funktion. 588 00:26:24,660 --> 00:26:25,800 Det er super kort. 589 00:26:25,800 --> 00:26:28,020 Det er kun et par linjer kode lang. 590 00:26:28,020 --> 00:26:32,810 Men hvad er det grundlæggende problem er baseret på den enkle historie fortalt 591 00:26:32,810 --> 00:26:34,270 herop med Ken? 592 00:26:34,270 --> 00:26:36,115 Hvorfor er swap brudt? 593 00:26:36,115 --> 00:26:37,365 [Uhørlig] 594 00:26:39,840 --> 00:26:40,460 Præcis. 595 00:26:40,460 --> 00:26:43,610 Så vi er lagring til en kopi, ikke variablen selv. 596 00:26:43,610 --> 00:26:46,810 Med andre ord tilsyneladende swap tager to argumenter, en int. 597 00:26:46,810 --> 00:26:49,370 Og det er vilkårligt kaldes a og b. 598 00:26:49,370 --> 00:26:54,430 Og heroppe, har jeg passeret i x og y, som er henholdsvis 1 og 2. 599 00:26:54,430 --> 00:26:56,580 Men jeg er ikke bogstaveligt passerer i x. 600 00:26:56,580 --> 00:26:58,410 Jeg er ikke bogstaveligt passerer i y. 601 00:26:58,410 --> 00:27:01,230 Jeg passerer en kopi af x og en kopi af y. 602 00:27:01,230 --> 00:27:05,180 Det er ligesom næsten som om du har kopieret og indsat i bytte de værdier, 603 00:27:05,180 --> 00:27:07,440 du ønsker det faktisk manipulere. 604 00:27:07,440 --> 00:27:11,970 Så hvis det er tilfældet, da jeg, det program, start fuldbyrdende 605 00:27:11,970 --> 00:27:14,140 linie 35, derefter 36 - 606 00:27:14,140 --> 00:27:17,740 når jeg kommer til linie 37, på dette tidspunkt i historien, hvad er værdien af ​​et? 607 00:27:20,740 --> 00:27:24,850 På dette tidspunkt i historien, linie 37, hvad er værdien af ​​et på dette punkt? 608 00:27:24,850 --> 00:27:25,980 Så det skal bare være 1. 609 00:27:25,980 --> 00:27:26,170 Right? 610 00:27:26,170 --> 00:27:29,100 Fordi x blev vedtaget i som første argument. 611 00:27:29,100 --> 00:27:33,150 Og denne funktion bare vilkårligt kalder sin første argument, en. 612 00:27:33,150 --> 00:27:35,130 Tilsvarende er y, det andet argument. 613 00:27:35,130 --> 00:27:37,930 Og det er bare vilkårligt at kalde det andet argument b.. 614 00:27:37,930 --> 00:27:40,510 >> Nu er denne dikotomi er faktisk temmelig simpelt forklaret. 615 00:27:40,510 --> 00:27:40,880 Tænk over det. 616 00:27:40,880 --> 00:27:42,980 Ingen af ​​os har mødt den person, der skrev printf. 617 00:27:42,980 --> 00:27:49,880 Så sikkert, han eller hun har ingen idé om, hvad vores variable 30 år senere går 618 00:27:49,880 --> 00:27:50,710 at blive kaldt. 619 00:27:50,710 --> 00:27:55,110 Så der skal være en sondring mellem, hvad du kalder variabler i 620 00:27:55,110 --> 00:27:59,960 funktioner, du skriver, og hvad du kalder variable i funktioner, du er 621 00:27:59,960 --> 00:28:01,770 kalder op eller bruger. 622 00:28:01,770 --> 00:28:05,120 Så med andre ord, har jeg skrevet mine variabler som x og y. 623 00:28:05,120 --> 00:28:08,060 Men hvis en anden havde skrevet swap-funktion, han eller hun helt sikkert 624 00:28:08,060 --> 00:28:10,480 ville ikke vide hvad mine variabler vil blive kaldt. 625 00:28:10,480 --> 00:28:13,850 Så indse, at det er derfor, du har denne dobbelthed af navne. 626 00:28:13,850 --> 00:28:16,800 Teknisk set kan jeg gøre dette ved en tilfældighed. 627 00:28:16,800 --> 00:28:19,750 Men de vil stadig blive væltet ind som kopier. 628 00:28:19,750 --> 00:28:22,940 Det ville bare være en ren tilfældighed æstetisk hvis den person, som skrev 629 00:28:22,940 --> 00:28:25,590 swap havde brugt de samme navne. 630 00:28:25,590 --> 00:28:25,930 >> Ok. 631 00:28:25,930 --> 00:28:29,010 Så på dette punkt i historien, linje 37, en er 1. 632 00:28:29,010 --> 00:28:30,410 b er 2. 633 00:28:30,410 --> 00:28:32,040 Og nu vil jeg gå videre til at bytte dem. 634 00:28:32,040 --> 00:28:34,730 Jamen først og fremmest, lad mig faktisk gøre dette meget mere simpelt. 635 00:28:34,730 --> 00:28:36,500 Jeg ved ikke, hvad disse tre linjer kode lavede. 636 00:28:36,500 --> 00:28:37,370 Lad mig bare gøre det. 637 00:28:37,370 --> 00:28:38,850 b får. 638 00:28:38,850 --> 00:28:40,170 a får b. 639 00:28:40,170 --> 00:28:41,450 Udført. 640 00:28:41,450 --> 00:28:43,540 Hvorfor er denne brudt, logisk? 641 00:28:46,980 --> 00:28:48,590 Det er lidt af den intuitive ting, right? 642 00:28:48,590 --> 00:28:50,640 Så en bliver til b.. 643 00:28:50,640 --> 00:28:52,450 Og B bliver en. 644 00:28:52,450 --> 00:28:55,410 Men problemet er, at så snart linien 37 udfører, hvad er det 645 00:28:55,410 --> 00:28:58,170 Værdien af ​​a og b? 646 00:28:58,170 --> 00:28:59,070 Det samme, 1. 647 00:28:59,070 --> 00:29:03,460 Fordi du har clobbered, så at sige, har du ændret b svare til et. 648 00:29:03,460 --> 00:29:06,000 Så når linje 37 er udført, det er fantastisk. 649 00:29:06,000 --> 00:29:09,940 Du har nu to kopier af nummer 1 indersiden af ​​denne funktion. 650 00:29:09,940 --> 00:29:14,720 Så når du siger på linje 38, en får b, godt, du slags skruet. 651 00:29:14,720 --> 00:29:17,370 Fordi du bare tildele 1 til 1. 652 00:29:17,370 --> 00:29:20,400 Du har lidt tabt den værdi, du plejet om. 653 00:29:20,400 --> 00:29:22,910 >> Så i den oprindelige version af dette, mærke til, hvad jeg gjorde. 654 00:29:22,910 --> 00:29:26,620 Jeg stedet havde en tredje linje kode, der lignede dette. 655 00:29:26,620 --> 00:29:29,910 Jeg erklærer en midlertidig variabel - TMP er et meget almindeligt navn 656 00:29:29,910 --> 00:29:31,240 for en midlertidig variabel. 657 00:29:31,240 --> 00:29:34,280 Det er en int fordi den skal matche, hvad jeg ønsker at lave en kopi af. 658 00:29:34,280 --> 00:29:39,720 Jeg gemmer en kopi af en inderside tmp. Så når linje 37 er udført, 659 00:29:39,720 --> 00:29:41,390 værdien af ​​a er - 660 00:29:41,390 --> 00:29:42,970 hurtig tilregnelighed check - 661 00:29:42,970 --> 00:29:43,460 1. 662 00:29:43,460 --> 00:29:45,780 Værdien af ​​b er 2. 663 00:29:45,780 --> 00:29:48,470 Og værdien af ​​TMP er også 1. 664 00:29:48,470 --> 00:29:51,470 Så nu jeg udfører linje 38. 665 00:29:51,470 --> 00:29:57,180 Så når linje 38 udfører, en antager værdien af ​​b. 666 00:29:57,180 --> 00:29:58,510 Og b var 2. 667 00:29:58,510 --> 00:30:00,500 Så a er nu 2. 668 00:30:00,500 --> 00:30:03,110 Så på dette punkt i historien, en er 2, b er 2, 669 00:30:03,110 --> 00:30:05,130 og tmp er 1. 670 00:30:05,130 --> 00:30:09,330 Så nu logisk, kan vi bare plop tmp værdi i b.. 671 00:30:09,330 --> 00:30:10,690 Og vi er færdige. 672 00:30:10,690 --> 00:30:12,170 >> Så vi har løst dette problem. 673 00:30:12,170 --> 00:30:16,040 Desværre, når jeg kører dette program i denne form, betyder det faktisk ikke bytte 674 00:30:16,040 --> 00:30:17,700 nogen værdier. 675 00:30:17,700 --> 00:30:18,950 Men for at være klar, hvorfor? 676 00:30:23,420 --> 00:30:26,310 Jeg fast den logiske problem fra blot et øjeblik siden. 677 00:30:26,310 --> 00:30:31,150 Men igen, hvis jeg køre dette program, x og y er uændret ved udgangen af 678 00:30:31,150 --> 00:30:33,834 programmets gennemførelse. 679 00:30:33,834 --> 00:30:34,760 [Uhørlig] 680 00:30:34,760 --> 00:30:36,030 DAVID J. Malan: Så vi har ikke returneret noget. 681 00:30:36,030 --> 00:30:36,960 Så det er sandt. 682 00:30:36,960 --> 00:30:39,880 Men det viser sig, at der er lidt af et problem her, fordi hidtil, den 683 00:30:39,880 --> 00:30:42,460 eneste, vi har været i stand til at vende tilbage, er én ting. 684 00:30:42,460 --> 00:30:46,540 Og det er en begrænsning af C. Du kan kun returnere virkelig en værdi, 685 00:30:46,540 --> 00:30:48,970 i hvilket tilfælde, jeg slags fast her 686 00:30:48,970 --> 00:30:51,805 fordi jeg kunne returnere den nye værdi af x eller jeg kunne returnere 687 00:30:51,805 --> 00:30:53,160 ny værdi af y. 688 00:30:53,160 --> 00:30:54,330 Men jeg vil begge tilbage. 689 00:30:54,330 --> 00:30:58,010 Så tilbage er ikke den enkle løsning her. 690 00:30:58,010 --> 00:30:59,770 Men problemet fundamentalt er hvorfor? 691 00:30:59,770 --> 00:31:03,270 Hvad har vi egentlig byttes? 692 00:31:03,270 --> 00:31:04,010 a og b. 693 00:31:04,010 --> 00:31:07,670 Men a og b er kopier af x og y, hvilket betyder, at vi bare gjorde alt dette 694 00:31:07,670 --> 00:31:10,080 arbejde - vi lige brugt som tre minutter taler om swap 695 00:31:10,080 --> 00:31:11,680 funktion og alle disse tre variabler. 696 00:31:11,680 --> 00:31:15,090 Og det er fantastisk, helt korrekt i isolation. 697 00:31:15,090 --> 00:31:20,230 Men a og b anvendelsesområde kun er i disse linjer her. 698 00:31:20,230 --> 00:31:24,130 Så ligesom en for-løkke, hvis du erklærer et heltal i inde i for 699 00:31:24,130 --> 00:31:27,400 loop - på samme måde, hvis du erklære a og b inde i en funktion, 700 00:31:27,400 --> 00:31:30,550 du har skrevet, de er kun gyldige indersiden af ​​denne funktion. 701 00:31:30,550 --> 00:31:35,020 Hvilket betyder så snart swap sker fuldbyrdende og vi går fra linie 24 til 702 00:31:35,020 --> 00:31:38,380 linie 25, x og y er ikke ændret overhovedet. 703 00:31:38,380 --> 00:31:42,580 Du har lige spildt en hel masse tid bytte kopier af variabler. 704 00:31:42,580 --> 00:31:46,490 >> Så viser det sig, at løsningen på dette faktisk ikke indlysende. 705 00:31:46,490 --> 00:31:49,210 Det er ikke helt nok til at returnere værdier, fordi vi kan 706 00:31:49,210 --> 00:31:50,320 kun returnere én værdi. 707 00:31:50,320 --> 00:31:53,370 Og jeg virkelig ønsker at bytte både x og y på samme tid. 708 00:31:53,370 --> 00:31:55,020 Så vi vil vende tilbage til dette. 709 00:31:55,020 --> 00:31:58,770 Men for nu, indser, at det basalt set stammer fra det faktum 710 00:31:58,770 --> 00:32:00,660 at a og b er kopier. 711 00:32:00,660 --> 00:32:03,450 Og de er i deres egen rækkevidde. 712 00:32:03,450 --> 00:32:04,980 Nå, lad os prøve at løse dette på en eller anden måde. 713 00:32:04,980 --> 00:32:09,200 Lad mig faktisk rulle tilbage her og åbne op, lad os sige, en fjerde variant 714 00:32:09,200 --> 00:32:11,170 heraf. buggy4 715 00:32:11,170 --> 00:32:13,230 Og hvad med denne? 716 00:32:13,230 --> 00:32:16,690 Dette er en lignende, men enklere problem at se på, før vi tager et stik på 717 00:32:16,690 --> 00:32:17,530 løse den. 718 00:32:17,530 --> 00:32:19,440 Dette program kaldes tilvækst. 719 00:32:19,440 --> 00:32:24,320 Og det tilsyneladende initialiserer en x heltal til 1 på linje 18. 720 00:32:24,320 --> 00:32:25,950 Jeg så hævder x er 1. 721 00:32:25,950 --> 00:32:28,020 Jeg så hævder forøgelse, prik, prik, prik. 722 00:32:28,020 --> 00:32:29,460 Jeg så ring tilvækst. 723 00:32:29,460 --> 00:32:33,480 Men så i linjerne 22 og 23, jeg hævder, at det er blevet forøget. 724 00:32:33,480 --> 00:32:37,780 Jeg hævder x er nu, hvad det er, 2 formentlig. 725 00:32:37,780 --> 00:32:39,770 >> Men dette program er buggy. 726 00:32:39,770 --> 00:32:41,020 Hvad er problemet? 727 00:32:43,450 --> 00:32:44,418 Ja? 728 00:32:44,418 --> 00:32:45,668 [Uhørlig] 729 00:32:49,260 --> 00:32:49,850 DAVID J. Malan: Præcis. 730 00:32:49,850 --> 00:32:52,430 Så x er blevet erklæret naturligvis på linje 18. 731 00:32:52,430 --> 00:32:54,410 Det er inde i de vigtigste s krøllede parenteser. 732 00:32:54,410 --> 00:32:58,470 Så det enkle svar her er, at, ja, x eksisterer her. 733 00:32:58,470 --> 00:33:01,510 Det findes ikke på linje 32. 734 00:33:01,510 --> 00:33:03,710 Så dette program rent faktisk vil ikke engang kompilere. 735 00:33:03,710 --> 00:33:07,910 Den compiler, når jeg prøve at oversætte denne kode, vil yell på mig 736 00:33:07,910 --> 00:33:13,190 om nogle kaldenavn eller noget i den retning. 737 00:33:13,190 --> 00:33:13,870 Faktisk, lad os prøve. 738 00:33:13,870 --> 00:33:15,235 Det er at gøre buggy4. 739 00:33:17,780 --> 00:33:18,190 Der er det. 740 00:33:18,190 --> 00:33:22,030 Anvendelse af sort identifikator x på linje 32. 741 00:33:22,030 --> 00:33:25,700 Og faktisk, lad os være mere eksplicit her i dag, så det er nyttigt i 742 00:33:25,700 --> 00:33:27,140 kontortid og hjemme. 743 00:33:27,140 --> 00:33:29,000 Bemærk, at det er lidt kryptisk skrevet. 744 00:33:29,000 --> 00:33:31,560 Men det faktum, at Dunk har råbte på os, siger 745 00:33:31,560 --> 00:33:36,970 buggy4.c: 32:5, er faktisk nyttigt. 746 00:33:36,970 --> 00:33:41,970 Det betyder, at fejlen er på linje 32 ved tegnposition fem. 747 00:33:41,970 --> 00:33:44,670 Så en, to, tre, fire, fem. 748 00:33:44,670 --> 00:33:46,640 Det er i virkeligheden, når problemet er. 749 00:33:46,640 --> 00:33:49,710 Og også at huske på kontortiden og derhjemme, jeg er heldig her. 750 00:33:49,710 --> 00:33:50,740 Jeg har en fejl. 751 00:33:50,740 --> 00:33:52,660 Det kommer til at være relativt let at rette. 752 00:33:52,660 --> 00:33:56,220 Men hvis du får en hel skærm fuld af overvældende fejlmeddelelser, igen, 753 00:33:56,220 --> 00:33:59,240 indse, at den nederste man bare kunne være symptomatisk for 754 00:33:59,240 --> 00:34:00,320 de øverste dem. 755 00:34:00,320 --> 00:34:03,560 Så altid jage ned dine fejl ovenfra og ned. 756 00:34:03,560 --> 00:34:06,720 Fordi der bare kunne være en daisy-chain effekt, der tyder på dig 757 00:34:06,720 --> 00:34:09,030 har måde flere problemer, end du rent faktisk gør. 758 00:34:09,030 --> 00:34:14,989 >> Så hvordan kan vi løse dette, hvis mit mål er at forøge x? 759 00:34:14,989 --> 00:34:15,370 Hvad er det? 760 00:34:15,370 --> 00:34:15,620 Okay. 761 00:34:15,620 --> 00:34:16,679 Så vi kan gøre x global. 762 00:34:16,679 --> 00:34:18,860 Lad os tage den genvej, jeg advarede om tidligere. 763 00:34:18,860 --> 00:34:20,550 Men heck, vi bare brug for et hurtigt fix. 764 00:34:20,550 --> 00:34:23,949 Så lad os bare sige int x heroppe. 765 00:34:23,949 --> 00:34:25,600 Det gør x global. 766 00:34:25,600 --> 00:34:28,460 Så nu main har adgang til det. 767 00:34:28,460 --> 00:34:31,780 Og tilvækst har adgang til det. 768 00:34:31,780 --> 00:34:33,860 Og så lad mig gå videre og kompilere dette nu. 769 00:34:33,860 --> 00:34:36,330 Gør buggy4, Enter. 770 00:34:36,330 --> 00:34:37,440 Synes at kompilere nu. 771 00:34:37,440 --> 00:34:40,949 Lad os løbe buggy4, og det ser ud til rent faktisk at arbejde. 772 00:34:40,949 --> 00:34:42,780 Nu dette er en af ​​disse ting - 773 00:34:42,780 --> 00:34:45,870 gør som jeg siger, ikke som jeg gør, som jeg netop har gjort her. 774 00:34:45,870 --> 00:34:49,239 Fordi der i almindelighed, vil vore programmer vil få meget mere interessant og 775 00:34:49,239 --> 00:34:50,440 meget længere end dette. 776 00:34:50,440 --> 00:34:53,199 Og hvis din løsning på livets problemer er bare ah, sætte alle 777 00:34:53,199 --> 00:34:57,550 variabler i toppen af ​​din fil, meget hurtigt gøre programmer får 778 00:34:57,550 --> 00:34:59,700 forfærdelig vanskelige at håndtere. 779 00:34:59,700 --> 00:35:02,050 Det bliver sværere at udtænke nye variabelnavne. 780 00:35:02,050 --> 00:35:05,240 Det bliver sværere at forstå, hvad variabel der gør hvad. 781 00:35:05,240 --> 00:35:08,250 >> Og så generelt, er det ikke en god løsning. 782 00:35:08,250 --> 00:35:09,780 Så lad os gøre det bedre. 783 00:35:09,780 --> 00:35:11,920 Vi ønsker ikke at bruge en global variabel her. 784 00:35:11,920 --> 00:35:14,050 Jeg ønsker at forøge x. 785 00:35:14,050 --> 00:35:16,050 Så jeg kunne selvfølgelig - 786 00:35:16,050 --> 00:35:18,450 ved slutningen af ​​dagen, er det sådan en fjollet historie, fordi vi bare gøre det. 787 00:35:18,450 --> 00:35:22,050 Men hvis jeg ikke vidste om, at operatør, eller jeg fik ikke lov til 788 00:35:22,050 --> 00:35:27,700 ændre det i main selv, hvordan kunne jeg ellers gennemfører Ken herovre, dette 789 00:35:27,700 --> 00:35:31,450 tid ikke terning, men at inkrementere? 790 00:35:31,450 --> 00:35:32,700 Hvordan ændrer jeg denne ting her? 791 00:35:32,700 --> 00:35:33,025 Yeah. 792 00:35:33,025 --> 00:35:34,275 [Uhørlig] 793 00:35:37,430 --> 00:35:38,000 DAVID J. Malan: Okay, godt. 794 00:35:38,000 --> 00:35:40,490 Så hvorfor ikke jeg passere i x? 795 00:35:40,490 --> 00:35:44,390 Og så i stedet returnere det, hvorfor kan jeg ikke bare gøre gengæld x + 1? 796 00:35:44,390 --> 00:35:46,370 Nu, et par flere ting nødt til at ændre her. 797 00:35:46,370 --> 00:35:47,530 Jeg er på rette spor. 798 00:35:47,530 --> 00:35:48,910 Hvad skal jeg ellers nødt til at trimme? 799 00:35:48,910 --> 00:35:49,470 En anden. 800 00:35:49,470 --> 00:35:49,882 Ja? 801 00:35:49,882 --> 00:35:51,530 [Uhørlig] 802 00:35:51,530 --> 00:35:53,520 DAVID J. Malan: Jeg er nødt til at ændre returtypen af ​​tilvækst 803 00:35:53,520 --> 00:35:54,590 fordi det ikke er ugyldig. 804 00:35:54,590 --> 00:35:56,650 Void betyder intet der bliver returneret. 805 00:35:56,650 --> 00:35:57,600 Men det er klart, nu er det. 806 00:35:57,600 --> 00:36:01,280 Så dette forhold skal ændres til int at være i overensstemmelse med, hvad 807 00:36:01,280 --> 00:36:02,580 Jeg er faktisk vender tilbage. 808 00:36:02,580 --> 00:36:04,580 >> Nu noget andet, er stadig buggy her. 809 00:36:04,580 --> 00:36:04,982 Ja? 810 00:36:04,982 --> 00:36:06,590 [Uhørlig] 811 00:36:06,590 --> 00:36:07,630 DAVID J. Malan: Så jeg har brug for at forøge x? 812 00:36:07,630 --> 00:36:10,336 [Uhørlig] 813 00:36:10,336 --> 00:36:11,880 DAVID J. Malan: Ah, så jeg er nødt til at passere x. 814 00:36:11,880 --> 00:36:13,300 Så jeg er nødt til at gøre det her. 815 00:36:17,590 --> 00:36:19,690 Så prototypen, er jeg nødt til ændre dette op her. 816 00:36:19,690 --> 00:36:21,290 Så det skal være en int. 817 00:36:21,290 --> 00:36:22,820 Dette skal blive - 818 00:36:22,820 --> 00:36:23,670 hmm. 819 00:36:23,670 --> 00:36:24,710 Jeg har faktisk en fejl hernede. 820 00:36:24,710 --> 00:36:25,780 Lad os løse dette ene først. 821 00:36:25,780 --> 00:36:27,990 Hvad skal det egentlig være? 822 00:36:27,990 --> 00:36:29,330 Så det er nødt til at være en int noget. 823 00:36:29,330 --> 00:36:30,340 Det kunne være x. 824 00:36:30,340 --> 00:36:33,120 Men helt ærligt, hvis du begynder at kalde alle dine variabler x, det vil få 825 00:36:33,120 --> 00:36:35,250 mindre og mindre tydelig der er hvad. 826 00:36:35,250 --> 00:36:38,210 Så lad os bare vilkårligt vælge en anden navngivningskonvention for min 827 00:36:38,210 --> 00:36:40,220 hjælpefunktioner, de funktioner jeg skriver. 828 00:36:40,220 --> 00:36:41,100 Vi kalder det en. 829 00:36:41,100 --> 00:36:44,500 Eller vi kunne kalde det - lad os kalde det even_number at være endnu mere eksplicit. 830 00:36:44,500 --> 00:36:47,610 Så da jeg er nødt til at vende tilbage uanset antallet er plus 1. 831 00:36:47,610 --> 00:36:49,720 Og nu jeg er nødt til at ændre en anden ting op her og en 832 00:36:49,720 --> 00:36:50,700 andre ting heroppe. 833 00:36:50,700 --> 00:36:54,150 Hvad skal jeg ændre på linie 21 først? 834 00:36:54,150 --> 00:36:55,390 Jeg er nødt til at tildele den til x. 835 00:36:55,390 --> 00:36:57,480 Så jeg kan ikke bare ringe tilvækst x. 836 00:36:57,480 --> 00:37:01,000 Jeg har brug for at huske svaret ved at ændre værdien af ​​x på 837 00:37:01,000 --> 00:37:02,020 venstre side. 838 00:37:02,020 --> 00:37:04,930 Og selv om x er nu på venstre og højre, det er helt fint, fordi 839 00:37:04,930 --> 00:37:08,370 højre side bliver udført først derefter bliver plopped i den venstre 840 00:37:08,370 --> 00:37:10,240 hånd ting, x i dette tilfælde. 841 00:37:10,240 --> 00:37:11,900 Og så endelig, det er en nem løsning nu. 842 00:37:11,900 --> 00:37:15,080 Det skal bare matche, hvad der er dernede. 843 00:37:15,080 --> 00:37:17,120 Int tal. 844 00:37:17,120 --> 00:37:17,320 >> Ok. 845 00:37:17,320 --> 00:37:20,290 Så en hel masse ændringer for en virkelig dum funktion. 846 00:37:20,290 --> 00:37:24,250 Men repræsentant for ting, som vi i stigende grad vil få lyst til at gøre. 847 00:37:24,250 --> 00:37:25,490 Så gør buggy4. 848 00:37:25,490 --> 00:37:26,485 Jeg har skruet op et eller andet sted. 849 00:37:26,485 --> 00:37:27,520 Åh min Gud. 850 00:37:27,520 --> 00:37:29,660 Fem fejl i, ligesom, en seks-line program. 851 00:37:29,660 --> 00:37:36,500 Så hvad er der galt på linie 18, 5 tegn? 852 00:37:36,500 --> 00:37:36,970 Ok. 853 00:37:36,970 --> 00:37:39,330 Så jeg er nødt til at erklære denne int. 854 00:37:39,330 --> 00:37:39,630 Ok. 855 00:37:39,630 --> 00:37:41,790 Så lad os se, en hel bunke af andre fejl. 856 00:37:41,790 --> 00:37:42,230 Oh my god. 857 00:37:42,230 --> 00:37:43,880 19, 18, 21. 858 00:37:43,880 --> 00:37:46,020 Men igen, lad os bare rydde skærmen - 859 00:37:46,020 --> 00:37:48,660 Kontrol L her - og re-run Dunk. 860 00:37:48,660 --> 00:37:51,340 Så fem problemer er faktisk bare, at én. 861 00:37:51,340 --> 00:37:53,500 Så lad os nu køre buggy4, Enter. 862 00:37:53,500 --> 00:37:54,150 Puha. 863 00:37:54,150 --> 00:37:57,434 x er blevet inkrementeret korrekt. 864 00:37:57,434 --> 00:37:58,420 >> Ok. 865 00:37:58,420 --> 00:38:01,700 Eventuelle spørgsmål om, hvordan man inkrementere numre? 866 00:38:01,700 --> 00:38:02,896 Ja? 867 00:38:02,896 --> 00:38:06,864 SPEAKER 2: Hvorfor er det, at du bare kan ændre x til nummer i den variable 868 00:38:06,864 --> 00:38:08,860 navngive og det vil vide, hvad du mener? 869 00:38:08,860 --> 00:38:09,600 DAVID J. Malan: Godt spørgsmål. 870 00:38:09,600 --> 00:38:13,130 Hvordan er det at jeg bare kan ændre x til nummer og programmet vil vide 871 00:38:13,130 --> 00:38:13,990 straks? 872 00:38:13,990 --> 00:38:16,120 Så igen, tænk på det som denne abstraktion. 873 00:38:16,120 --> 00:38:20,110 Så hvis jeg er hoved-og Ken er trinvis, helt ærligt, jeg er ligeglad 874 00:38:20,110 --> 00:38:21,540 hvad Ken kalder sin iPad. 875 00:38:21,540 --> 00:38:25,350 Jeg er ligeglad med, hvad han kalder noget, der har at gøre med hans gennemførelsen 876 00:38:25,350 --> 00:38:26,550 af denne funktion. 877 00:38:26,550 --> 00:38:32,130 Så dette er en implementering detalje, at jeg, main, ikke gøre 878 00:38:32,130 --> 00:38:33,010 nødt til at bekymre sig om. 879 00:38:33,010 --> 00:38:37,440 Og så blot at ændre det konsekvent inde i funktionen, nummer her 880 00:38:37,440 --> 00:38:41,340 og nummer her, er alt det tager så længe jeg kompilere. 881 00:38:41,340 --> 00:38:43,820 Det er lidt ligesom hvis du tænker over - mange af os, dem af jer med førerens 882 00:38:43,820 --> 00:38:46,590 licenser, der har kørt, eller hvis du selv har kørt i en bil - 883 00:38:46,590 --> 00:38:50,710 de fleste af os har ingen idé om, hvordan en bil fungerer under motorhjelmen. 884 00:38:50,710 --> 00:38:54,710 Og bogstaveligt, hvis du åbner op hætten, de fleste af os - inklusive mig selv - 885 00:38:54,710 --> 00:38:56,580 vil ikke rigtig ved, hvad vi ser på. 886 00:38:56,580 --> 00:38:58,850 Lidt ligesom du måske føle med ting som dette lige nu. 887 00:38:58,850 --> 00:39:01,380 Men vi behøver ikke virkelig nødt til at bekymre sig, hvordan bilen fungerer. 888 00:39:01,380 --> 00:39:05,000 Vi behøver ikke at bekymre sig, hvad alle stængerne og stemplerne og kabler inde i 889 00:39:05,000 --> 00:39:07,700 bilen rent faktisk gør. 890 00:39:07,700 --> 00:39:11,360 >> Så noget lignende hvad du kalder stemplet er ligegyldigt 891 00:39:11,360 --> 00:39:11,920 her i dette tilfælde. 892 00:39:11,920 --> 00:39:12,490 Samme idé. 893 00:39:12,490 --> 00:39:12,670 Ja? 894 00:39:12,670 --> 00:39:13,920 [Uhørlig] 895 00:39:25,250 --> 00:39:29,530 DAVID J. Malan: Hvis der var flere anvendelser af den variable xa øjeblik siden, 896 00:39:29,530 --> 00:39:32,220 dig, programmør, skulle ændre dem overalt. 897 00:39:32,220 --> 00:39:35,230 Eller du kunne bogstaveligt talt gøre Filer, Menu, og derefter Find / Erstat, 898 00:39:35,230 --> 00:39:36,270 noget lignende. 899 00:39:36,270 --> 00:39:40,110 Men du er nødt til at foretage disse ændringer selv. 900 00:39:40,110 --> 00:39:41,200 Du er nødt til at være konsekvente. 901 00:39:41,200 --> 00:39:42,450 [Uhørlig] 902 00:39:47,200 --> 00:39:48,960 DAVID J. Malan: En særlig rækkefølge som her? 903 00:39:48,960 --> 00:39:52,660 Hvis dette var int andet nummer? 904 00:39:52,660 --> 00:39:52,940 Yeah. 905 00:39:52,940 --> 00:39:56,430 Så rækkefølge betyder noget, når du kalder funktionen. 906 00:39:56,430 --> 00:40:00,350 Så hvis jeg kaldte tilvækst her med noget komma noget, 907 00:40:00,350 --> 00:40:01,400 der er en direkte kortlægning. 908 00:40:01,400 --> 00:40:04,490 Den første variabel, hvad det nu hedder, er lavet en kopi af den første 909 00:40:04,490 --> 00:40:05,480 argument herovre. 910 00:40:05,480 --> 00:40:07,280 Beklager, bør dette ikke være en parentes. 911 00:40:07,280 --> 00:40:09,300 Det andet argument linjer op med den anden. 912 00:40:09,300 --> 00:40:11,220 >> Så orden, ja, spørgsmål. 913 00:40:11,220 --> 00:40:11,490 Ok. 914 00:40:11,490 --> 00:40:13,360 Undskyld jeg tog en lang måde at komme dertil. 915 00:40:13,360 --> 00:40:14,610 Andre spørgsmål? 916 00:40:16,460 --> 00:40:16,850 Ok. 917 00:40:16,850 --> 00:40:20,300 Så lad os se om vi ikke kan male et billede af, hvad der rent faktisk sker 918 00:40:20,300 --> 00:40:22,160 her under hætten, så at sige. 919 00:40:22,160 --> 00:40:26,310 Så dette er et rektangel, der kan repræsentere computerens hukommelse. 920 00:40:26,310 --> 00:40:31,240 Så selvom du ikke har nogen idé om, hvordan hukommelsen virker, eller hvordan RAM værker, i det mindste 921 00:40:31,240 --> 00:40:33,590 antage, at du har klaser af det i disse dage. 922 00:40:33,590 --> 00:40:34,740 Du har megabyte det. 923 00:40:34,740 --> 00:40:35,760 Du har gigabytes af det. 924 00:40:35,760 --> 00:40:40,690 Og vi ved fra uge nul, at en byte er bare hvad? 925 00:40:40,690 --> 00:40:41,280 8 bit. 926 00:40:41,280 --> 00:40:42,730 Højre, så 8 nuller og ettaller. 927 00:40:42,730 --> 00:40:46,300 Så hvis din computer har en koncert RAM, to gigabyte RAM i disse dage, har du en 928 00:40:46,300 --> 00:40:54,450 milliard eller 2 milliarder byte hukommelse, eller omkring 8 milliarder eller 16 milliarder 929 00:40:54,450 --> 00:40:56,560 bits, indersiden af ​​din computer. 930 00:40:56,560 --> 00:40:59,710 Nu i modsætning til den lille Woolly Willy eksempel er det ikke magnetiske partikler 931 00:40:59,710 --> 00:41:00,560 typisk længere. 932 00:41:00,560 --> 00:41:04,470 Stigende grad i bærbare computere i det mindste, er det solid state-drev, SSD'er, at 933 00:41:04,470 --> 00:41:05,560 netop har ingen bevægelige dele. 934 00:41:05,560 --> 00:41:06,710 Det hele er elektronisk. 935 00:41:06,710 --> 00:41:08,070 Det er alle baseret elektricitet. 936 00:41:08,070 --> 00:41:12,360 Så mener dog, af dette rektangel som blot repræsenterer en eller to 937 00:41:12,360 --> 00:41:13,930 gigabyte hukommelse, du har. 938 00:41:13,930 --> 00:41:15,500 >> Så det er en luns af hukommelse. 939 00:41:15,500 --> 00:41:20,460 Nu verden datalogi har slags partitioneret off bidder af 940 00:41:20,460 --> 00:41:22,570 hukommelse til at gøre forskellige ting. 941 00:41:22,570 --> 00:41:25,930 Altså for eksempel, hvis dette er computerens RAM - som foreslået af 942 00:41:25,930 --> 00:41:30,400 rektangel der - viser sig, at ved konvention, i toppen af ​​din RAM, så 943 00:41:30,400 --> 00:41:33,170 at tale, er generelt hvad der kaldes en tekst segment. 944 00:41:33,170 --> 00:41:35,910 Det er de nuller og ettaller, som du har kompileret. 945 00:41:35,910 --> 00:41:39,040 Så når vi har kigget under hætten på, hvad a.out er, alle 946 00:41:39,040 --> 00:41:40,360 de nuller og ettaller - 947 00:41:40,360 --> 00:41:44,000 når du kører et program, er disse nuller og ettaller indlæst fra harddisken 948 00:41:44,000 --> 00:41:46,290 drev i noget, der hedder RAM. 949 00:41:46,290 --> 00:41:48,950 Og i RAM, de er sat øverst. 950 00:41:48,950 --> 00:41:50,330 Nu i mellemtiden, har du andre ting. 951 00:41:50,330 --> 00:41:53,060 Klargjorte data, uden startværdi data. 952 00:41:53,060 --> 00:41:56,440 Disse to skår hukommelse refererer til globale variabler, som 953 00:41:56,440 --> 00:41:57,530 du ikke bruger ofte. 954 00:41:57,530 --> 00:42:00,630 Men nogle gange, hvis du gør det, de ender op der. 955 00:42:00,630 --> 00:42:01,620 Så er der nogle andre ting. 956 00:42:01,620 --> 00:42:04,130 Miljøvariabler, som vi ikke vil bruge meget tid på. 957 00:42:04,130 --> 00:42:06,120 Men så to vigtige ting, der vil komme tilbage i hele denne 958 00:42:06,120 --> 00:42:08,130 semester, stakken og bunke. 959 00:42:08,130 --> 00:42:12,280 >> Så de fleste af computerens hukommelse er reserveret, når du kører et program for 960 00:42:12,280 --> 00:42:14,880 noget, der hedder stakken og noget, der hedder den bunke. 961 00:42:14,880 --> 00:42:16,940 Og vi vil ikke tale om den bunke i dag, men vi vil 962 00:42:16,940 --> 00:42:18,180 taler om stakken. 963 00:42:18,180 --> 00:42:22,910 Og stakken er beregnet til at fremmane det visuelle ligesom den spisesal 964 00:42:22,910 --> 00:42:26,120 måltid bakker i Mather House, eller hvor du tilfældigvis, hvor 965 00:42:26,120 --> 00:42:27,810 spisesal personale rense dem hver dag. 966 00:42:27,810 --> 00:42:30,180 De stak dem op fra gulvet på op. 967 00:42:30,180 --> 00:42:33,800 Og på samme måde i hukommelsen, er der denne tanken om at sætte noget på en 968 00:42:33,800 --> 00:42:36,740 stable, sætte noget på en stak, sætte noget på en stak. 969 00:42:36,740 --> 00:42:38,000 Og hvad mener vi med det? 970 00:42:38,000 --> 00:42:41,430 Nå, lad os zoome ind på netop den nederste halvdel af dette billede, computerens 971 00:42:41,430 --> 00:42:43,990 RAM, at foreslå følgende. 972 00:42:43,990 --> 00:42:48,300 Det viser sig, at når du kører et program som a.out eller hej, uanset 973 00:42:48,300 --> 00:42:49,920 programmet er, at du har skrevet, 974 00:42:49,920 --> 00:42:53,030 igen, er disse nuller og ettaller indlæst fra din harddisk - som er 975 00:42:53,030 --> 00:42:56,190 langtidsopbevaring, forbliver der, selv når du trække i stikket - 976 00:42:56,190 --> 00:42:57,220 indlæst i RAM. 977 00:42:57,220 --> 00:42:59,020 RAM er hurtigere end harddiske. 978 00:42:59,020 --> 00:43:00,700 Det er mindre end harddiske. 979 00:43:00,700 --> 00:43:03,490 Men det er, hvor programmer leve mens du kører dem. 980 00:43:03,490 --> 00:43:06,380 >> Så du dobbeltklikke på et program på en Mac eller en PC - det er indlæst fra 981 00:43:06,380 --> 00:43:07,750 harddisk i RAM. 982 00:43:07,750 --> 00:43:11,760 Så snart den er indlæst i RAM, de nuller og ettaller gå på den måde toppen, 983 00:43:11,760 --> 00:43:13,130 såkaldte tekstsegment. 984 00:43:13,130 --> 00:43:17,040 Men så så snart dit program faktisk begynder at løbe, det vigtigste 985 00:43:17,040 --> 00:43:18,140 funktion kaldes. 986 00:43:18,140 --> 00:43:21,070 Og vigtigste, som vi har set, har ofte lokale variabler. 987 00:43:21,070 --> 00:43:24,560 Og det har int'er og strygere og specialtegn og lignende. 988 00:43:24,560 --> 00:43:28,300 Så hvis dit program, som du har skrevet, eller det program, du har 989 00:43:28,300 --> 00:43:33,680 dobbeltklikket brugt nogle variabler inde i main, de ender på 990 00:43:33,680 --> 00:43:37,020 bunden af ​​din stak af hukommelse, så at sige. 991 00:43:37,020 --> 00:43:39,160 Nu mere konkret, hvad det egentlig? 992 00:43:39,160 --> 00:43:44,080 Det betyder blot, at hvis vi skulle nummerere de ting - 993 00:43:44,080 --> 00:43:49,380 hvis vi skulle til at nummerere bytes RAM i din computer, bemærke, at 994 00:43:49,380 --> 00:43:51,650 dette kan være byte tal nul. 995 00:43:51,650 --> 00:43:56,130 Dette kan være byte nummer et, to, tre, fire, fem, seks, alle 996 00:43:56,130 --> 00:43:57,290 vejen op til at kunne lide - 997 00:43:57,290 --> 00:44:01,520 2 mia være helt oppe i toppen. 998 00:44:01,520 --> 00:44:05,960 Så med andre ord, når vi taler om RAM eller hukommelse i form af bytes, det 999 00:44:05,960 --> 00:44:09,680 betyder blot, at nogen har besluttet, hvad der skal nummerere hver enkelt af 1000 00:44:09,680 --> 00:44:11,110 disse bidder af hukommelsen. 1001 00:44:11,110 --> 00:44:16,950 >> Så når du har brug for 32 bit for en int, eller du har brug for 8 bit for en char, hvor 1002 00:44:16,950 --> 00:44:18,320 ender de i hukommelsen? 1003 00:44:18,320 --> 00:44:20,650 Nå begrebsmæssigt, de bare ender nederst i dette 1004 00:44:20,650 --> 00:44:21,780 ting kaldet stakken. 1005 00:44:21,780 --> 00:44:25,670 Men hvad er interessant nu, er, når main kalder en funktion. 1006 00:44:25,670 --> 00:44:28,830 Antag en funktion kaldet foo, bare et vilkårligt navn. 1007 00:44:28,830 --> 00:44:32,480 Hvad sker er main er i bunden af ​​denne stak af hukommelse. 1008 00:44:32,480 --> 00:44:35,630 Foo nu er sat på toppen af ​​main i hukommelsen. 1009 00:44:35,630 --> 00:44:40,020 Så eventuelle lokale variable at foo har ender slags konceptuelt over 1010 00:44:40,020 --> 00:44:40,770 dem i main. 1011 00:44:40,770 --> 00:44:46,920 Hvis Foo kalder en anden funktion kaldet bar, disse variabler ender her. 1012 00:44:46,920 --> 00:44:49,790 Hvis bar kalder noget andet, her, her, her. 1013 00:44:49,790 --> 00:44:53,900 Så hvad er interessant ved at køre et program er, at du kalder funktioner, 1014 00:44:53,900 --> 00:44:57,720 og da disse funktioner kalde funktioner, og som disse funktioner kalde funktioner, 1015 00:44:57,720 --> 00:45:00,980 du opbygger denne stak af funktioner i hukommelsen. 1016 00:45:00,980 --> 00:45:06,740 Og kun en gang En funktion returnerer du begynde at få at hukommelsen tilbage. 1017 00:45:06,740 --> 00:45:11,190 Så en af ​​de nemmeste måder at løbe tør for hukommelse i et edb-program er at 1018 00:45:11,190 --> 00:45:14,170 skrive funktioner, der aldrig vender tilbage. 1019 00:45:14,170 --> 00:45:16,650 >> Så for eksempel, lad os vise så meget med en 1020 00:45:16,650 --> 00:45:18,460 forsætligt buggy program. 1021 00:45:18,460 --> 00:45:24,690 Lad mig gå videre og gøre # include , int main (void). 1022 00:45:24,690 --> 00:45:31,270 Og jeg har tænkt mig at gøre, mens (2> 1), som sandsynligvis ikke nogensinde 1023 00:45:31,270 --> 00:45:33,370 ændre på os. 1024 00:45:33,370 --> 00:45:37,720 Og lad mig gå videre nu, og gøre printf. 1025 00:45:37,720 --> 00:45:39,950 Faktisk er der kommer til at være mindre visuelt interessant. 1026 00:45:39,950 --> 00:45:40,460 Lad os gøre det. 1027 00:45:40,460 --> 00:45:44,840 For int (i = 0; i> 0). 1028 00:45:44,840 --> 00:45:49,740 Lad os gøre denne fejl, i + +. 1029 00:45:49,740 --> 00:45:51,150 Og lad os ikke printf her. 1030 00:45:51,150 --> 00:45:52,550 Lad os praktisere, hvad jeg prædikede. 1031 00:45:52,550 --> 00:45:54,090 Lad os få en metode her. 1032 00:45:54,090 --> 00:46:00,860 Void kor, og vi vil sige int i. 1033 00:46:00,860 --> 00:46:02,295 Og så vil jeg sige, printf - 1034 00:46:04,871 --> 00:46:06,790 oh, lad os gøre det mere interessant. 1035 00:46:06,790 --> 00:46:08,350 Lad os faktisk ikke udskrive noget som helst. 1036 00:46:08,350 --> 00:46:10,530 Lad os bare gøre det. 1037 00:46:10,530 --> 00:46:11,780 Kor (i). 1038 00:46:16,630 --> 00:46:17,000 >> Ok. 1039 00:46:17,000 --> 00:46:20,040 Så dette er buggy, fordi hvorfor? 1040 00:46:20,040 --> 00:46:22,850 Jeg gør dette som jeg går, fordi programmet ikke rent faktisk gør noget 1041 00:46:22,850 --> 00:46:23,420 af interesse. 1042 00:46:23,420 --> 00:46:24,670 Men det er ikke målet. 1043 00:46:24,670 --> 00:46:30,440 Målet er at skrive et program, hvis vigtigste funktion gør hvad, tilsyneladende? 1044 00:46:30,440 --> 00:46:31,370 Ring til sig selv. 1045 00:46:31,370 --> 00:46:32,600 Og faktisk har vi ikke brug for løkken. 1046 00:46:32,600 --> 00:46:36,070 Lad os selv forenkle dette bare for ikke at tabe af syne virkelig 1047 00:46:36,070 --> 00:46:37,310 fundamental fejl. 1048 00:46:37,310 --> 00:46:39,200 Vigtigste opkald kor til at synge nogle kor. 1049 00:46:39,200 --> 00:46:41,760 Så gjorde jeg noget dumt, og jeg havde kor opkald kor, fordi jeg antog 1050 00:46:41,760 --> 00:46:43,550 en anden ville gennemføre det måske. 1051 00:46:43,550 --> 00:46:45,960 Og nu er dette ikke kommer til at kompilere endnu. 1052 00:46:45,960 --> 00:46:48,340 Jeg skal gøre hvad? 1053 00:46:48,340 --> 00:46:49,700 Jeg har brug for prototypen, huske. 1054 00:46:49,700 --> 00:46:55,520 Så jeg er nødt til at have op her void kor (int i);. 1055 00:46:55,520 --> 00:46:57,470 >> Så nu, hvis jeg går ned her - 1056 00:46:57,470 --> 00:46:59,030 faktisk, lad os bruge den større vindue. 1057 00:46:59,030 --> 00:47:01,670 Lad os gå videre og gøre kor. 1058 00:47:01,670 --> 00:47:06,000 Lad os gå videre og gøre kor. 1059 00:47:06,000 --> 00:47:08,302 Brug af uidentificeret spilfører i. 1060 00:47:08,302 --> 00:47:09,860 Åh, det var dumt. 1061 00:47:09,860 --> 00:47:11,020 Vi har ikke brug for argumentet. 1062 00:47:11,020 --> 00:47:13,680 Lad os bare gøre det. 1063 00:47:13,680 --> 00:47:14,550 Ønske vi havde startet på denne måde. 1064 00:47:14,550 --> 00:47:16,160 Det ville have været et meget lettere program til at skrive. 1065 00:47:16,160 --> 00:47:20,100 Så der. 1066 00:47:20,100 --> 00:47:23,870 Lad os nu gå over til min terminal vindue, re-run Dunk. 1067 00:47:23,870 --> 00:47:26,900 Og her er vi gå. 1068 00:47:26,900 --> 00:47:28,020 Det var virkelig hurtig. 1069 00:47:28,020 --> 00:47:30,690 Hvad der rent faktisk skete, selvom? 1070 00:47:30,690 --> 00:47:33,430 Nå, nu vil jeg tilføje print linje, så vi kan se. 1071 00:47:33,430 --> 00:47:41,330 Så lad mig sige printf, lad os sige, jeg er herinde. 1072 00:47:41,330 --> 00:47:43,470 Okay, ingen variabler, vil vi overlade det sådan. 1073 00:47:43,470 --> 00:47:44,860 Lad mig igen køre gøre. 1074 00:47:44,860 --> 00:47:47,940 Lad mig omvalg kor. 1075 00:47:47,940 --> 00:47:51,235 Og kom nu. 1076 00:47:53,880 --> 00:47:55,130 Hold ud. 1077 00:47:57,630 --> 00:47:59,750 Som en sidebemærkning, hvorfor har det ikke styrtede ned endnu? 1078 00:47:59,750 --> 00:48:02,050 Segmenteringen fejl skete super hurtigt før. 1079 00:48:02,050 --> 00:48:04,250 [Uhørlig] 1080 00:48:04,250 --> 00:48:04,830 DAVID J. Malan: Præcis. 1081 00:48:04,830 --> 00:48:06,350 Så det tager tid at udskrive. 1082 00:48:06,350 --> 00:48:08,370 Det tager bare mere arbejde på computerens side. 1083 00:48:08,370 --> 00:48:09,550 Og der er det. 1084 00:48:09,550 --> 00:48:10,620 Segmentering fejl. 1085 00:48:10,620 --> 00:48:12,140 >> Så opdager, hvor hurtigt programmer til at køre. 1086 00:48:12,140 --> 00:48:14,110 Hvis du ikke udskriver noget, super hurtigt. 1087 00:48:14,110 --> 00:48:18,100 Men vi har stadig denne segmentering skyld, fordi hvad der foregik? 1088 00:48:18,100 --> 00:48:21,310 Tja, hvis du tænker over, hvordan din computers hukommelse er lagt ud, er dette 1089 00:48:21,310 --> 00:48:22,890 sker for at være main. 1090 00:48:22,890 --> 00:48:23,800 Men her - 1091 00:48:23,800 --> 00:48:28,670 lad os bare kalde dette kor, og lad os kalde dette kor. 1092 00:48:28,670 --> 00:48:33,420 Og nu, hvis jeg gør mine æstetik højre, er dette bare for at sige kor, 1093 00:48:33,420 --> 00:48:38,060 kor, kor, kor, kor, kor, kor, ad nauseum. 1094 00:48:38,060 --> 00:48:39,920 Og til sidst, hvad der skal ske? 1095 00:48:39,920 --> 00:48:46,690 Hvis det store billede bogstaveligt er dette, hvad der lige sker konceptuelt? 1096 00:48:46,690 --> 00:48:48,320 Stakken overskridelser heapen. 1097 00:48:48,320 --> 00:48:52,400 Eller værre, du bare overrendt alt, herunder tekst-segmentet, som er 1098 00:48:52,400 --> 00:48:54,530 de nuller og ettaller, der repræsenterer dit program. 1099 00:48:54,530 --> 00:48:56,690 Kort sagt, er det bare super, super dårlig. 1100 00:48:56,690 --> 00:48:56,860 Right? 1101 00:48:56,860 --> 00:48:58,620 Dit program har spiraled ud af kontrol. 1102 00:48:58,620 --> 00:49:02,840 Du bruger måde mere hukommelse end du havde tænkt dig alle på grund af en dum 1103 00:49:02,840 --> 00:49:03,920 fejl i dette tilfælde. 1104 00:49:03,920 --> 00:49:08,160 Eller i dette tilfælde, at kalde en meget bevidst gjort funktion selv. 1105 00:49:08,160 --> 00:49:09,210 Nu er det er ikke alle dårlige. 1106 00:49:09,210 --> 00:49:12,540 Funktioner, der kaldte sig faktisk har stor magt 1107 00:49:12,540 --> 00:49:13,700 når du bruger det korrekt. 1108 00:49:13,700 --> 00:49:15,650 Jeg har ikke brugt det korrekt her. 1109 00:49:15,650 --> 00:49:16,940 >> Så dette er ikke alle dårlige. 1110 00:49:16,940 --> 00:49:20,620 Men det faktum, at jeg faktisk aldrig stoppe med at kalde mig selv er en fundamental 1111 00:49:20,620 --> 00:49:23,050 svaghed her i dette program. 1112 00:49:23,050 --> 00:49:25,090 Så hvor skal vi hen med alt dette? 1113 00:49:25,090 --> 00:49:26,230 Nå, hvad der virkelig sker? 1114 00:49:26,230 --> 00:49:30,010 Når jeg kalder tilvækst funktionen, ligesom vi gjorde i disse eksempler, 1115 00:49:30,010 --> 00:49:33,290 Jeg har en værdi som 1, at jeg passerer i. 1116 00:49:33,290 --> 00:49:35,820 Jeg passere i en kopi af nummer et. 1117 00:49:35,820 --> 00:49:37,080 Så sker der følgende. 1118 00:49:37,080 --> 00:49:40,390 Så lad os gå ind i tilvækst eksempel. 1119 00:49:40,390 --> 00:49:44,230 Og denne fyr lige herovre. 1120 00:49:44,230 --> 00:49:46,800 Så her er hvad der rent faktisk sker. 1121 00:49:46,800 --> 00:49:50,770 Når jeg kaldes tilvækst, og jeg går i x, billedligt hvad er 1122 00:49:50,770 --> 00:49:53,660 foregår her, er dette - 1123 00:49:53,660 --> 00:50:00,240 hvis jeg har værdien 1 gemmes her, og jeg rent faktisk kalder tilvækst, som 1124 00:50:00,240 --> 00:50:02,680 kaldes nu kor - 1125 00:50:02,680 --> 00:50:04,010 Ja, der kaster mig ud her. 1126 00:50:04,010 --> 00:50:06,750 Så lad os kalde denne tilvækst. 1127 00:50:06,750 --> 00:50:09,420 Og vi ved ikke, hvad det næste funktion kommer til at være. 1128 00:50:09,420 --> 00:50:14,270 Så hvad der rent faktisk sker, er her et eller andet sted i main, jeg har en luns af 1129 00:50:14,270 --> 00:50:16,670 hukommelse, der lagrer tallet 1. 1130 00:50:16,670 --> 00:50:19,730 Når jeg kalder tilvækst, jeg bruger en anden bid af hukommelse, men nu har jeg 1131 00:50:19,730 --> 00:50:20,840 have kopi af 1. 1132 00:50:20,840 --> 00:50:25,480 Når jeg tilvækst denne værdi, det bliver 2 - forfærdeligt skrevet på 1133 00:50:25,480 --> 00:50:26,420 skærm her. 1134 00:50:26,420 --> 00:50:30,550 Men så, hvad der sker, så snart tilvækst vender tilbage? 1135 00:50:30,550 --> 00:50:34,610 Denne hukommelse bare bliver givet tilbage til operativsystemet, hvilket betyder alle 1136 00:50:34,610 --> 00:50:37,470 du har gjort, er noget nyttigt. 1137 00:50:37,470 --> 00:50:43,460 Den ene, der var indeholdt oprindeligt i main er stadig faktisk er der. 1138 00:50:43,460 --> 00:50:44,650 >> Så hvor skal vi hen med dette? 1139 00:50:44,650 --> 00:50:49,400 Tja, det viser sig, at i hukommelsen du har denne ryg mod ryg sekvens af 1140 00:50:49,400 --> 00:50:50,940 bytes som du kan sætte ting i. 1141 00:50:50,940 --> 00:50:53,760 Og det viser sig, at vi allerede har set noget, der indebærer, at der 1142 00:50:53,760 --> 00:50:55,100 tingene tilbage til back to back to back. 1143 00:50:55,100 --> 00:51:00,170 Hvad er en streng, der er baseret på uge en og nu uge to? 1144 00:51:00,170 --> 00:51:01,840 Så det er bare en samling af tegn. 1145 00:51:01,840 --> 00:51:05,290 Så det viser sig, ligesom du kan sætte tal i hukommelsen, på samme måde kan du 1146 00:51:05,290 --> 00:51:06,900 sætte tegn i hukommelsen. 1147 00:51:06,900 --> 00:51:09,810 Og når vi begynder at sætte tegn i hukommelsen tilbage til tilbage til tilbage til 1148 00:51:09,810 --> 00:51:12,800 tilbage, viser det sig, at bruge den enkleste af ting som en for-løkke eller 1149 00:51:12,800 --> 00:51:14,510 en while-løkke, kan vi gentage - 1150 00:51:14,510 --> 00:51:17,130 fra venstre til højre over de tegn i en streng - 1151 00:51:17,130 --> 00:51:20,720 og begynder at massere dem ind i forskellige karakterer helt. 1152 00:51:20,720 --> 00:51:25,550 A kan blive B. B kunne blive C. Så i sidste ende, kan vi tage en 1153 00:51:25,550 --> 00:51:28,830 Engelsk sætning, der rent faktisk giver mening og konvertere hver af disse 1154 00:51:28,830 --> 00:51:32,440 breve én ad gangen ved at gå gennem vores computers hukommelse overladt til 1155 00:51:32,440 --> 00:51:34,300 ret til faktisk at kryptere. 1156 00:51:34,300 --> 00:51:36,590 >> Så lad os tage vores fem minutters pause her, og når vi kommer tilbage, vil vi 1157 00:51:36,590 --> 00:51:39,060 starte denne proces med scrambling information. 1158 00:51:41,640 --> 00:51:43,180 >> Ok. 1159 00:51:43,180 --> 00:51:48,440 Så før vi dykke i nogle krypto og disse ting kaldes arrays, lad mig 1160 00:51:48,440 --> 00:51:51,610 pause for eventuelle spørgsmål, fordi jeg føler, at jeg virkelig slags rodede nogle af 1161 00:51:51,610 --> 00:51:52,230 disse emner. 1162 00:51:52,230 --> 00:51:53,940 Så lad os løse nu, hvis vi kan. 1163 00:51:53,940 --> 00:51:56,480 Så vi netop talt om returværdier. 1164 00:51:56,480 --> 00:51:58,630 Vi talte om argumenter. 1165 00:51:58,630 --> 00:52:02,330 Og vi talte om dette begreb, som vi vil vende tilbage til i de kommende uger 1166 00:52:02,330 --> 00:52:07,140 komme, for at betragte hukommelse som en hel bunke af disse stablede 1167 00:52:07,140 --> 00:52:08,540 bakker, så at sige. 1168 00:52:08,540 --> 00:52:13,460 Fra bunden af ​​op, at sådan hver bakke, der bliver sat på stakken repræsenterer 1169 00:52:13,460 --> 00:52:15,160 en funktion, der er ved at blive kaldt. 1170 00:52:17,970 --> 00:52:20,300 Eventuelle spørgsmål? 1171 00:52:20,300 --> 00:52:22,890 Så hvad med - lad mig prøve at stille et spørgsmål. 1172 00:52:22,890 --> 00:52:25,520 Jeg holder ødelægge det, men nu det er - you've alle set drengens ansigt. 1173 00:52:25,520 --> 00:52:27,020 Så vi vil komme tilbage til. 1174 00:52:27,020 --> 00:52:29,700 >> Så lad mig stille et spørgsmål her. 1175 00:52:29,700 --> 00:52:34,810 Lad mig forenkle denne tilbage til hvad den var før nogle af vores tidligere Q & A. 1176 00:52:34,810 --> 00:52:41,730 Og det faktum, at tilvækst har åben parentes, int antal, lukket 1177 00:52:41,730 --> 00:52:42,260 parentes. 1178 00:52:42,260 --> 00:52:46,370 Hvad betyder int tal repræsenterer? 1179 00:52:46,370 --> 00:52:47,250 [Uhørlig] 1180 00:52:47,250 --> 00:52:47,870 DAVID J. Malan: Et argument. 1181 00:52:47,870 --> 00:52:50,732 Okay, men hvad er et argument? 1182 00:52:50,732 --> 00:52:51,620 [Uhørlig] 1183 00:52:51,620 --> 00:52:52,500 DAVID J. Malan: Undskyld, hvad er det? 1184 00:52:52,500 --> 00:52:53,150 SPEAKER 3: Noget du passerer i. 1185 00:52:53,150 --> 00:52:53,570 DAVID J. Malan: Okay. 1186 00:52:53,570 --> 00:52:54,780 Så noget som du passerer i. 1187 00:52:54,780 --> 00:52:56,560 Og mere generelt, det er bare input. 1188 00:52:56,560 --> 00:52:59,860 Hvis du skriver en funktion, og at funktionens formål i livet er at gøre 1189 00:52:59,860 --> 00:53:03,290 noget lidt anderledes, hver gang du bruger det, så er den eneste måde, hvorpå 1190 00:53:03,290 --> 00:53:07,710 at det skal ske ville virkelig synes at være at forsyne den med input, så det 1191 00:53:07,710 --> 00:53:10,180 kan gøre noget anderledes med det input hver gang. 1192 00:53:10,180 --> 00:53:13,590 >> Så du er nødt til at angive to ting, når en funktion tager input. 1193 00:53:13,590 --> 00:53:17,240 Du skal angive det navn, du ønsker at give til denne indgang, rent for 1194 00:53:17,240 --> 00:53:20,790 din egen bekvemmelighed, så du kan henvise til det i den funktion, du 1195 00:53:20,790 --> 00:53:23,610 selv skriver, som jeg gjorde her på linje 32. 1196 00:53:23,610 --> 00:53:27,840 Men du også nødt til at specificere sin type, fordi C er et programmeringssprog 1197 00:53:27,840 --> 00:53:28,840 der bare kræver 1198 00:53:28,840 --> 00:53:31,810 at hvis du ønsker en variabel, du nødt til at fortælle computeren, hvad 1199 00:53:31,810 --> 00:53:32,790 datatype det er, 1200 00:53:32,790 --> 00:53:35,540 i vid udstrækning, således at den ved hvor mange bit til 1201 00:53:35,540 --> 00:53:37,230 tildele for den pågældende variabel. 1202 00:53:37,230 --> 00:53:38,600 Fordi det kunne være seks - 1203 00:53:38,600 --> 00:53:39,990 ked, vil det ikke være seks. 1204 00:53:39,990 --> 00:53:41,050 Det kan være 16. 1205 00:53:41,050 --> 00:53:41,630 Det kan være 8. 1206 00:53:41,630 --> 00:53:44,410 Det kan være 32, endog 64. 1207 00:53:44,410 --> 00:53:45,820 Men computeren skal vide. 1208 00:53:45,820 --> 00:53:49,110 Nu int på den venstre side repræsenterer, hvad der derimod? 1209 00:53:52,825 --> 00:53:53,780 [Uhørlig] 1210 00:53:53,780 --> 00:53:54,570 DAVID J. Malan: Hvad er det? 1211 00:53:54,570 --> 00:53:55,390 [Uhørlig] 1212 00:53:55,390 --> 00:53:57,920 David J. Malan: Typen af ​​funktionen og, mere specifikt 1213 00:53:57,920 --> 00:53:59,755 type af sin produktion. 1214 00:53:59,755 --> 00:54:00,220 Right. 1215 00:54:00,220 --> 00:54:04,220 Så mens ting i parentes repræsenterer sit input, om nogen, den 1216 00:54:04,220 --> 00:54:06,640 ting til venstre repræsenterer dens output. 1217 00:54:06,640 --> 00:54:10,560 Og i dette tilfælde, tilvækst tilsyneladende returnerer en int. 1218 00:54:10,560 --> 00:54:14,590 Og så int er en tilbagevenden type af denne funktion. 1219 00:54:14,590 --> 00:54:16,090 >> Hvad betyder det at vende tilbage? 1220 00:54:16,090 --> 00:54:19,810 Bogstaveligt, du bruger søgeordet afkast. 1221 00:54:19,810 --> 00:54:24,640 Og så hvis det, du vender tilbage til højre for søgeordet er en 1222 00:54:24,640 --> 00:54:28,340 heltal, så er det faktisk overensstemmelse med, hvad vi har lovet. 1223 00:54:28,340 --> 00:54:31,110 Du kunne ikke gøre noget som dette - 1224 00:54:31,110 --> 00:54:32,280 hej, verden - 1225 00:54:32,280 --> 00:54:33,500 fordi det er en streng. 1226 00:54:33,500 --> 00:54:35,440 Det er naturligvis ikke et heltal. 1227 00:54:35,440 --> 00:54:40,450 Så kort sagt, at byrden er virkelig på os, programmøren, at være specifik som 1228 00:54:40,450 --> 00:54:44,730 til, hvad vi vender tilbage og derefter faktisk gå om tilbagesendelse. 1229 00:54:44,730 --> 00:54:49,030 Og så for at gøre en smule mere klar sammenhæng - 1230 00:54:49,030 --> 00:54:50,080 Der er han igen. 1231 00:54:50,080 --> 00:54:51,060 Konteksten - 1232 00:54:51,060 --> 00:54:52,830 store overraskelse kommer på bare et øjeblik. 1233 00:54:52,830 --> 00:54:57,720 Konteksten her nu, er, at computerens hukommelse er, igen, en 1234 00:54:57,720 --> 00:54:59,070 gigabyte, to gigabyte, uanset hvad. 1235 00:54:59,070 --> 00:54:59,630 Måske er det mere. 1236 00:54:59,630 --> 00:55:00,540 Måske er det mindre. 1237 00:55:00,540 --> 00:55:03,750 Men computeren ser den som havende forskellige sektioner. 1238 00:55:03,750 --> 00:55:04,860 Noget går dernede. 1239 00:55:04,860 --> 00:55:06,020 Noget andet går deroppe. 1240 00:55:06,020 --> 00:55:07,540 Forskellige ting går i midten. 1241 00:55:07,540 --> 00:55:09,300 Og i dag, vi bare begynde at fortælle denne historie. 1242 00:55:09,300 --> 00:55:11,130 >> Men vi vil vende tilbage til denne over tid. 1243 00:55:11,130 --> 00:55:15,000 For nu, er det eneste stykke af hukommelse vi virkelig bekymrer sig om tekstsegment 1244 00:55:15,000 --> 00:55:17,160 fordi der kun repræsenterer nuller og ettaller 1245 00:55:17,160 --> 00:55:18,460 at Dunk har udsendt. 1246 00:55:18,460 --> 00:55:21,570 Så når du kører en kommando på tastaturet ligesom a.out, eller du dobbelt 1247 00:55:21,570 --> 00:55:25,350 klikke på et ikon på Mac OS eller Windows, er dit program indlæst fra harddisken 1248 00:55:25,350 --> 00:55:26,930 drive i RAM. 1249 00:55:26,930 --> 00:55:30,850 Og det er plopped øverst på computerens RAM, så at sige. 1250 00:55:30,850 --> 00:55:35,470 Nu mellemtiden, som dit program starter, og main bliver kaldt i 1251 00:55:35,470 --> 00:55:39,240 program, du skrev, eller det program Microsoft eller Apple skrev, at nogen af ​​den 1252 00:55:39,240 --> 00:55:42,930 lokale variable ender dernede på bunden af ​​computerens hukommelse. 1253 00:55:42,930 --> 00:55:46,490 Men hvis main kalder en anden funktion, som selv har variabler eller 1254 00:55:46,490 --> 00:55:48,340 argumenter, de ender over det. 1255 00:55:48,340 --> 00:55:50,670 Og hvis denne funktion kalder noget, de ender op over det, 1256 00:55:50,670 --> 00:55:51,840 oven over den,. ovenover 1257 00:55:51,840 --> 00:55:56,100 Og kun en gang om funktion er gjort udførelse gør stablen af ​​bakker, så 1258 00:55:56,100 --> 00:55:58,320 tale, begynder at blive lavere og lavere. 1259 00:55:58,320 --> 00:56:03,370 Og det er det da, i en nøddeskal, forklarer hvorfor, når du ringer terning - 1260 00:56:03,370 --> 00:56:04,660 eller du ringer interval - 1261 00:56:04,660 --> 00:56:06,490 du passerer i en kopi af værdien. 1262 00:56:06,490 --> 00:56:09,840 Og hvad det betyder billedligt er, at du bogstaveligt talt er ved at skrive det 1263 00:56:09,840 --> 00:56:14,540 nummer 1 i en anden del af hukommelsen, ændring, at 1-2, i tilfælde af 1264 00:56:14,540 --> 00:56:15,360 tilvækst - 1265 00:56:15,360 --> 00:56:17,450 eller et 8, i tilfælde af kuben - 1266 00:56:17,450 --> 00:56:21,450 og derefter smide det hukommelse væk, så snart tilvækst eller kuben 1267 00:56:21,450 --> 00:56:23,410 returnerer funktionen. 1268 00:56:23,410 --> 00:56:24,267 >> Spørgsmål. 1269 00:56:24,267 --> 00:56:25,517 [Uhørlig] 1270 00:56:28,090 --> 00:56:29,970 DAVID J. Malan: Hvor - globale variable gemmes i, hvad der er 1271 00:56:29,970 --> 00:56:32,960 øjeblikket hedder de initialiserede data eller startværdi data. 1272 00:56:32,960 --> 00:56:35,900 Forskellen er, hvis du har en global variabel, og du tildeler det 1273 00:56:35,900 --> 00:56:39,530 straks en værdi med lighedstegnet, det ender i toppen der. 1274 00:56:39,530 --> 00:56:43,390 Og hvis du bare siger int x semikolon uden nogen værdi, det ender lidt op 1275 00:56:43,390 --> 00:56:46,670 lavere i RAM simpelthen ved konvention. 1276 00:56:46,670 --> 00:56:49,308 Andre spørgsmål. 1277 00:56:49,308 --> 00:56:49,750 Ok. 1278 00:56:49,750 --> 00:56:53,040 >> Så dette billede vil komme tilbage, når vi får mere kraftfulde med hvad vi kan gøre 1279 00:56:53,040 --> 00:56:53,830 med computeren. 1280 00:56:53,830 --> 00:56:58,790 Men for nu, lad os få en kort intro til kryptografi, en særlig form for 1281 00:56:58,790 --> 00:57:01,910 kryptografi, som ikke løse alle verdens problemer, men løser 1282 00:57:01,910 --> 00:57:02,480 nogle af dem. 1283 00:57:02,480 --> 00:57:06,090 I dette tilfælde her har vi noget, der hedder hemmelig nøgle-kryptering. 1284 00:57:06,090 --> 00:57:10,430 Og hemmelig nøgle kryptografi, som navnet antyder, stammer dets sikkerhed 1285 00:57:10,430 --> 00:57:11,330 fra en hemmelighed. 1286 00:57:11,330 --> 00:57:14,720 Altså for eksempel, hvis du er tilbage i folkeskolen og du passerer en 1287 00:57:14,720 --> 00:57:18,040 lille hemmelige kærlighedserklæring til den dreng eller pige, du knusning på - hvis du 1288 00:57:18,040 --> 00:57:20,820 ønskede at videregive det gennem publikum, har du sandsynligvis ikke ville skrive 1289 00:57:20,820 --> 00:57:24,120 sådan en note på engelsk eller hvad dit modersmål er, men snarere, du 1290 00:57:24,120 --> 00:57:25,800 kan kryptere det. 1291 00:57:25,800 --> 00:57:27,820 Eller du kan bare sende dem en sms i disse dage. 1292 00:57:27,820 --> 00:57:30,310 Men du kan faktisk give dem en note i hele klasseværelset. 1293 00:57:30,310 --> 00:57:33,820 Og for at gøre det sikkert på en sådan måde, at dine venner og læreren 1294 00:57:33,820 --> 00:57:36,820 ved ikke, hvad du skriver, kan du komme op med en forholdsvis enkel 1295 00:57:36,820 --> 00:57:37,800 algoritme - 1296 00:57:37,800 --> 00:57:39,290 ung selvom du måske - 1297 00:57:39,290 --> 00:57:40,780 til bare forvrænge ordene. 1298 00:57:40,780 --> 00:57:44,390 Så i stedet for at skrive A, kan du skrive B. I stedet for B, kan du skrive 1299 00:57:44,390 --> 00:57:46,670 C. I stedet for C, kan du skrive D, og ​​så videre. 1300 00:57:46,670 --> 00:57:50,020 Eller du kan komme op med en mere sofistikeret oversættelse af breve 1301 00:57:50,020 --> 00:57:51,300 til forskellige bogstaver. 1302 00:57:51,300 --> 00:57:55,440 Men fangsten er dreng eller pige, til hvem du sender denne note skal 1303 00:57:55,440 --> 00:57:56,850 vide noget. 1304 00:57:56,850 --> 00:57:59,620 Hvilket er hvad, naturligvis? 1305 00:57:59,620 --> 00:58:01,400 Ligesom, hvad din hemmelighed er. 1306 00:58:01,400 --> 00:58:04,620 Ligesom, hvad er det mapping mellem As og Bs og Cs og Ds? 1307 00:58:04,620 --> 00:58:08,780 Er det blot at tilføje en, så at sige, til hver af de bogstaver, at gå fra 1308 00:58:08,780 --> 00:58:09,730 A til B, B til C? 1309 00:58:09,730 --> 00:58:11,350 Er det mere kompliceret end det? 1310 00:58:11,350 --> 00:58:16,450 Så du og din knuse er nødt til at have denne hemmelige informationer. 1311 00:58:16,450 --> 00:58:18,170 Men der er lidt af en catch-22 her. 1312 00:58:18,170 --> 00:58:20,760 Hvis det er allerførste gang du sender denne kærlighed brev gennem 1313 00:58:20,760 --> 00:58:25,590 klasse, er, hvordan den dreng eller pige vil vide, hvad hemmeligheden selv er? 1314 00:58:25,590 --> 00:58:28,450 Så hemmelig nøgle krypto løser ikke alle problemer i verden. 1315 00:58:28,450 --> 00:58:30,490 Og der er faktisk et forhold, som vi vil komme tilbage til mod 1316 00:58:30,490 --> 00:58:31,370 semesters afslutning. 1317 00:58:31,370 --> 00:58:35,970 >> Ligeledes har ingen af ​​os sandsynligvis nogensinde sendt en - 1318 00:58:35,970 --> 00:58:39,453 Heller ikke de fleste af os ikke kender nogen, der virker, for eksempel på 1319 00:58:39,453 --> 00:58:40,300 Amazon.com. 1320 00:58:40,300 --> 00:58:43,130 Og alligevel har mange af os nok købt ting på Amazon.com. 1321 00:58:43,130 --> 00:58:45,670 Og vi har lært at antage, at disse e-handel 1322 00:58:45,670 --> 00:58:47,060 transaktioner er sikre. 1323 00:58:47,060 --> 00:58:47,210 Right? 1324 00:58:47,210 --> 00:58:49,310 Den URL sandsynligvis siger https. 1325 00:58:49,310 --> 00:58:51,590 Der er måske en fjollet lille hængelås-ikonet eller andet sted. 1326 00:58:51,590 --> 00:58:54,680 Der er en slags kryptering sikrer dine kreditkortoplysninger 1327 00:58:54,680 --> 00:58:56,980 mellem dig og Amazon.com. 1328 00:58:56,980 --> 00:59:00,410 Og dog, hvis kryptografi indebærer at kende nogle hemmelige, og alligevel har jeg ikke 1329 00:59:00,410 --> 00:59:03,330 kender nogen hos Amazon, og jeg har bestemt ikke arrangeret nogen form for 1330 00:59:03,330 --> 00:59:07,350 hemmelighed med nogen på Amazon, er, hvordan min computer eller min browser at gøre dette? 1331 00:59:07,350 --> 00:59:10,100 Nå, viser sig at der er andre typer af kryptografi i alt, der løser 1332 00:59:10,100 --> 00:59:10,740 dette problem. 1333 00:59:10,740 --> 00:59:13,610 Men i dag vil vi fokusere på den enkel, hvor du kan arrangere i 1334 00:59:13,610 --> 00:59:18,480 videre til kende nogle hemmelige, ligesom plus 1 eller nogle mapping mellem As og Bs. 1335 00:59:18,480 --> 00:59:20,710 >> Og processen for kryptografi generelt indebærer dette. 1336 00:59:20,710 --> 00:59:23,550 Du har nogle almindelig tekst, der er afbildet her til venstre. 1337 00:59:23,550 --> 00:59:26,260 Du kører det gennem en form for algoritme eller procedure 1338 00:59:26,260 --> 00:59:27,670 for at kryptere den. 1339 00:59:27,670 --> 00:59:31,390 Måske det er bare A bliver B, B bliver C. Og så ender man med 1340 00:59:31,390 --> 00:59:32,260 Cipher tekst. 1341 00:59:32,260 --> 00:59:36,450 I mellemtiden, når din knuse modtager den hemmelige note, han eller hun har til så 1342 00:59:36,450 --> 00:59:39,950 dekryptere den ved generelt at vende en sådan algoritme så for at få 1343 00:59:39,950 --> 00:59:41,640 bakke almindelig tekst. 1344 00:59:41,640 --> 00:59:43,860 Nu er der fysiske inkarnationer af denne. 1345 00:59:43,860 --> 00:59:46,720 For eksempel er det en lille hemmelighed dekoder ring. 1346 00:59:46,720 --> 00:59:50,060 Og det er en ring i den forstand, at der er to skiver her. 1347 00:59:50,060 --> 00:59:53,630 På ydersiden periferi af det her, er der Bogstaverne A til Z, 1348 00:59:53,630 --> 00:59:55,110 selvom de er i tilfældig rækkefølge. 1349 00:59:55,110 --> 00:59:58,410 Og på indersiden, er der faktisk nogle numre, således at med dette 1350 00:59:58,410 --> 01:00:02,940 ring, kan du slags vende udefra, men ikke inde for at line op 1351 01:00:02,940 --> 01:00:04,110 tal med bogstaver. 1352 01:00:04,110 --> 01:00:08,290 Og i det klip, du er ved at se - nogle som du måske har set 24/7 1353 01:00:08,290 --> 01:00:11,120 omkring julen fra en film kaldet A Christmas Story. 1354 01:00:11,120 --> 01:00:16,050 Du vil se, at lille Ralphie var så ivrig efter at finde ud af hvad lille forældreløse 1355 01:00:16,050 --> 01:00:19,810 Annies hemmelige budskab var ham, der var blevet meddelt, tror jeg, i 1356 01:00:19,810 --> 01:00:22,810 dannelse af numeriske meddelelser på en seriel boks. 1357 01:00:22,810 --> 01:00:26,760 Og du var nødt til at samle alle de små kort, der fulgte 1358 01:00:26,760 --> 01:00:27,480 i korn boksen. 1359 01:00:27,480 --> 01:00:28,320 Du havde at maile dem i. 1360 01:00:28,320 --> 01:00:31,060 Du havde at komme tilbage den hemmelige dekoder ring, så du endelig kan regne 1361 01:00:31,060 --> 01:00:34,190 ud af, hvad den kortlægning er mellem bogstaver og tal, 1362 01:00:34,190 --> 01:00:35,420 eller bogstaver og bogstaver. 1363 01:00:35,420 --> 01:00:39,790 Så jeg giver dig denne korte klip fra A Christmas Story at motivere Pset 2 og 1364 01:00:39,790 --> 01:00:42,340 vores diskussion, i et øjeblik af arrays. 1365 01:00:42,340 --> 01:00:43,773 Så her har vi Ralphie. 1366 01:00:43,773 --> 01:00:44,126 >> [VIDEO PLAYBACK] 1367 01:00:44,126 --> 01:00:47,470 -Være det kendt at alle og enhver, at Ralph Parker hermed er udnævnt til en 1368 01:00:47,470 --> 01:00:50,690 medlem af Little Orphan Annie Secret Circle og er berettiget til alle 1369 01:00:50,690 --> 01:00:53,500 den hæder og fordele forekommer dertil. 1370 01:00:53,500 --> 01:00:56,040 -Signed, Little Orphan Annie. 1371 01:00:56,040 --> 01:00:58,730 Kontrasigneret, Pierre Andre! 1372 01:00:58,730 --> 01:01:00,150 I blæk! 1373 01:01:00,150 --> 01:01:02,910 Honors og fordele, der allerede i en alder af ni. 1374 01:01:09,970 --> 01:01:10,730 Kom, lad os komme videre med det. 1375 01:01:10,730 --> 01:01:15,000 Jeg har ikke brug for alt det jazz om smuglere og pirater. 1376 01:01:15,000 --> 01:01:17,624 -Lyt morgen aften for den afsluttende eventyr af The Black 1377 01:01:17,624 --> 01:01:19,710 Pirate Ship. 1378 01:01:19,710 --> 01:01:23,380 Nu er det tid til Annie hemmelige budskab til jer medlemmer 1379 01:01:23,380 --> 01:01:25,670 af Secret Circle. 1380 01:01:25,670 --> 01:01:30,260 Husk, børn, kan kun medlemmer af Annie Secret Circle afkode 1381 01:01:30,260 --> 01:01:31,660 Annies hemmelige besked. 1382 01:01:31,660 --> 01:01:36,230 Husk, at Annie afhængig af dig. 1383 01:01:36,230 --> 01:01:38,720 Sæt dine ben til B2. 1384 01:01:38,720 --> 01:01:41,040 Her er budskabet. 1385 01:01:41,040 --> 01:01:42,470 12, 11 - 1386 01:01:42,470 --> 01:01:46,000 -Jeg er i min første hemmelige møde. 1387 01:01:46,000 --> 01:01:49,440 -14, 11, 18, 16 - 1388 01:01:49,440 --> 01:01:51,700 -Pierre var i stor stemme i aften. 1389 01:01:51,700 --> 01:01:54,890 Jeg kunne fortælle, at aftenens budskab var virkelig vigtigt. 1390 01:01:54,890 --> 01:01:56,750 -3, 25. 1391 01:01:56,750 --> 01:01:58,590 Det er en besked fra Annie selv. 1392 01:01:58,590 --> 01:01:59,840 Husk, du ikke sige det til nogen. 1393 01:02:04,570 --> 01:02:08,750 -90 Sekunder senere, er jeg på den eneste plads i huset, hvor en dreng på ni 1394 01:02:08,750 --> 01:02:12,980 kunne sidde i fred og afkode. 1395 01:02:12,980 --> 01:02:17,130 Aha, gik B. I den næste. 1396 01:02:17,130 --> 01:02:20,330 E. Det første ord er være. 1397 01:02:20,330 --> 01:02:22,670 S. Det kom lettere nu. 1398 01:02:22,670 --> 01:02:24,590 U. 1399 01:02:24,590 --> 01:02:26,510 -Oh, kom nu, Ralphie. 1400 01:02:26,510 --> 01:02:28,430 Jeg fik at gå. 1401 01:02:28,430 --> 01:02:30,350 -Jeg er helt ned, ma. 1402 01:02:30,350 --> 01:02:33,720 -Gee guru. 1403 01:02:33,720 --> 01:02:38,270 -T, O. Vær sikker på at. 1404 01:02:38,270 --> 01:02:40,000 Vær sikker på at hvad? 1405 01:02:40,000 --> 01:02:42,105 Hvad var Little Orphan Annie prøver at sige? 1406 01:02:42,105 --> 01:02:43,095 Vær sikker på at hvad? 1407 01:02:43,095 --> 01:02:43,590 -Ralphie! 1408 01:02:43,590 --> 01:02:44,580 Randy har fået til at gå. 1409 01:02:44,580 --> 01:02:45,570 Vil du venligst komme ud? 1410 01:02:45,570 --> 01:02:46,560 -Okay, ma. 1411 01:02:46,560 --> 01:02:48,540 Jeg kommer lige ud. 1412 01:02:48,540 --> 01:02:50,580 -Jeg var ved at blive tættere nu. 1413 01:02:50,580 --> 01:02:52,550 Spændingen var forfærdeligt. 1414 01:02:52,550 --> 01:02:53,355 Hvad var det? 1415 01:02:53,355 --> 01:02:56,315 Den planetens skæbne kan hænge i balance. 1416 01:02:56,315 --> 01:02:56,790 -Ralphie! 1417 01:02:56,790 --> 01:02:59,165 Randy er nødt til at gå. 1418 01:02:59,165 --> 01:03:02,310 -Jeg er lige ud, for skriger højt. 1419 01:03:02,310 --> 01:03:04,000 -Gee, der næsten. 1420 01:03:04,000 --> 01:03:05,180 Mine fingre fløj. 1421 01:03:05,180 --> 01:03:07,150 Mit sind var en stål fælde. 1422 01:03:07,150 --> 01:03:08,790 Hver pore vibrerede. 1423 01:03:08,790 --> 01:03:10,040 Det var næsten klar. 1424 01:03:10,040 --> 01:03:13,400 Ja, ja, ja, ja. 1425 01:03:13,400 --> 01:03:18,960 -Sørg for at drikke din Ovaltine. 1426 01:03:18,960 --> 01:03:20,210 Ovaltine? 1427 01:03:24,010 --> 01:03:25,260 En crummy kommerciel? 1428 01:03:28,200 --> 01:03:29,640 Søn af en kælling. 1429 01:03:29,640 --> 01:03:33,340 [END VIDEO PLAYBACK] 1430 01:03:33,340 --> 01:03:36,040 >> DAVID J. Malan: Så der har vi kryptografi. 1431 01:03:36,040 --> 01:03:39,670 Så hvordan i en computer kan vi gå om gennemførelsen eller 1432 01:03:39,670 --> 01:03:40,950 repræsenterer ting som dette? 1433 01:03:40,950 --> 01:03:44,430 Tja, vi har brug for en måde at udtrykke os selv lidt mere fleksibelt end 1434 01:03:44,430 --> 01:03:46,420 vores variabler hidtil har tilladt. 1435 01:03:46,420 --> 01:03:47,370 Vi har haft int'er. 1436 01:03:47,370 --> 01:03:48,380 Vi har haft tegn. 1437 01:03:48,380 --> 01:03:50,790 Vi har haft flåd og doubler og et par andre. 1438 01:03:50,790 --> 01:03:55,050 Men de er enkelte stykker hukommelse, der ikke rigtig tillader os at 1439 01:03:55,050 --> 01:03:58,010 udtrykke ting som ord og sætninger og sætninger. 1440 01:03:58,010 --> 01:04:00,200 Faktisk har vi kaldt sådanne ting strenge. 1441 01:04:00,200 --> 01:04:03,650 Men vi lovede, at dette er egentlig bare en forenkling i CS50 1442 01:04:03,650 --> 01:04:07,020 bibliotek, at vi har til hensigt at skrælle tilbage. 1443 01:04:07,020 --> 01:04:08,970 >> Og så lad os begynde at gøre det her. 1444 01:04:08,970 --> 01:04:11,130 Lad mig gå videre og åbne en fil - 1445 01:04:11,130 --> 01:04:13,770 alle disse filer findes som sædvanlig online - 1446 01:04:13,770 --> 01:04:19,120 kaldet array.c at løse et problem relateret til strenge, men det giver et 1447 01:04:19,120 --> 01:04:23,040 Billedet her af, hvordan vi kan bruge noget, der hedder et array. 1448 01:04:23,040 --> 01:04:25,530 Et array er en datatype. 1449 01:04:25,530 --> 01:04:31,320 Det er en type variabel, slags, der har flere mindre datatyper 1450 01:04:31,320 --> 01:04:34,150 indersiden af ​​det tilbage til back to back to back. 1451 01:04:34,150 --> 01:04:37,700 Altså for eksempel, hvis vi ønsker at skrive et lille program, der giver dig din 1452 01:04:37,700 --> 01:04:42,110 quiz gennemsnittet for et kursus som 50, der har to quizzer, du kunne meget nemt 1453 01:04:42,110 --> 01:04:45,170 skrive dette program - baseret endda på nogle af sidste uges materiale - 1454 01:04:45,170 --> 01:04:47,770 ved hjælp af GetInt og et par variabler. 1455 01:04:47,770 --> 01:04:51,920 Int quiz1, int quiz2, og det er temmelig ligetil. 1456 01:04:51,920 --> 01:04:55,930 Det er måske 10, 20 linjer kode, max, at gennemføre et program, der anmoder 1457 01:04:55,930 --> 01:05:01,170 bruger for to quiz scorer og derefter beregner deres gennemsnit ved at tilføje dem 1458 01:05:01,170 --> 01:05:03,850 sammen, dividere med to, og derefter trykning af resultaterne. 1459 01:05:03,850 --> 01:05:06,380 Vi kunne sandsynligvis gøre det temmelig let nu efter 1460 01:05:06,380 --> 01:05:07,510 et bestemt antal minutter. 1461 01:05:07,510 --> 01:05:11,005 >> Men problemet er at antage, at 50 havde tre quizzer eller fire. 1462 01:05:11,005 --> 01:05:13,510 Antag, at du ønskede at bruge det samme program for en klasse, der havde 1463 01:05:13,510 --> 01:05:14,850 ugentlig quizzer. 1464 01:05:14,850 --> 01:05:16,610 Tænk en klasse, der har ugentlig quizzer. 1465 01:05:16,610 --> 01:05:20,610 Hvis der er ligesom 16 eller deromkring uger i et semester, nu du har 16 variable - 1466 01:05:20,610 --> 01:05:24,270 int quiz1, int quiz2, int quiz3, int quiz4. 1467 01:05:24,270 --> 01:05:27,560 Så snart du begynder at se denne redundans, det kopiere og indsætte 1468 01:05:27,560 --> 01:05:31,390 af kode, bør den begynde at gøre dig ønske der var en bedre måde. 1469 01:05:31,390 --> 01:05:33,930 Og heldigvis, på grund af arrays, er der. 1470 01:05:33,930 --> 01:05:34,980 Så lad os gøre det. 1471 01:05:34,980 --> 01:05:38,430 Først, lad mig introducere en meget simpel ting, som vi ikke har brugt hidtil, 1472 01:05:38,430 --> 01:05:40,140 men du vil se det lejlighedsvis i kode. 1473 01:05:40,140 --> 01:05:42,360 Dette er, hvad der generelt kaldes en konstant. 1474 01:05:42,360 --> 01:05:45,790 Så det er en konstant i den forstand, at denne værdi aldrig ændrer. 1475 01:05:45,790 --> 01:05:49,210 Den menneskelige konvention, når du opretter en konstant er at bruge al kapital 1476 01:05:49,210 --> 01:05:51,940 breve, bare så det virkelig skiller sig ud i din kode. 1477 01:05:51,940 --> 01:05:55,960 Og det særlige søgeord, du bruger i C # define. 1478 01:05:55,960 --> 01:06:00,250 Så hvis du siger # define, så en plads, så det ord, du vil bruge til 1479 01:06:00,250 --> 01:06:03,260 den konstante navn, hvorefter værdien af ​​konstanten. 1480 01:06:03,260 --> 01:06:06,180 Så varsel, er dette anderledes i at tildele noget til en variabel. 1481 01:06:06,180 --> 01:06:07,020 Der er ingen lighedstegn. 1482 01:06:07,020 --> 01:06:08,240 Der er ingen semikolon. 1483 01:06:08,240 --> 01:06:11,410 Dette er hvad der normalt betegnes som en præprocessor direktiv, men mere på 1484 01:06:11,410 --> 01:06:12,210 at en anden gang. 1485 01:06:12,210 --> 01:06:18,540 >> For nu, skaber dette en uforanderlig kaldet værdi quizzer hvis faktiske 1486 01:06:18,540 --> 01:06:19,940 numeriske værdi er 2. 1487 01:06:19,940 --> 01:06:24,020 Så uanset hvor du ser quizzer, quizzer, quizzer hele denne fil, det er 1488 01:06:24,020 --> 01:06:25,410 kun tallet 2.. 1489 01:06:25,410 --> 01:06:28,100 Nu, hvis jeg ser på main nu, lad os se hvordan det virker. 1490 01:06:28,100 --> 01:06:29,500 I første omgang ser det lidt kryptisk. 1491 01:06:29,500 --> 01:06:31,340 Men det er alt ting fra uge ét. 1492 01:06:31,340 --> 01:06:32,710 Spørg brugeren om kvaliteter. 1493 01:06:32,710 --> 01:06:33,630 Hvordan gør vi det? 1494 01:06:33,630 --> 01:06:35,470 Tja, på linje 22 - 1495 01:06:35,470 --> 01:06:37,210 Dette er virkelig den saftige del - 1496 01:06:37,210 --> 01:06:40,960 Jeg erklærer en svømmer, men ikke bare en enkelt svømmer. 1497 01:06:40,960 --> 01:06:44,620 Jeg erklærer, snarere en matrix af kommeværdier. 1498 01:06:44,620 --> 01:06:49,100 Denne variabel vil blive kaldt kvaliteter, som antydet her. 1499 01:06:49,100 --> 01:06:53,080 Men det eneste stykke ny syntaks så er disse firkantede parenteser, det faktum 1500 01:06:53,080 --> 01:06:59,350 at jeg har sagt float kvaliteter og derefter åbne beslag og derefter et nummer. 1501 01:06:59,350 --> 01:07:02,460 Varsel, hvis dette er en konstant, det er bare ligesom vi gjorde dette. 1502 01:07:02,460 --> 01:07:06,890 Det betyder, hey computer, giv mig to flydere, og lad os i fællesskab kalde 1503 01:07:06,890 --> 01:07:08,220 dem karakterer. 1504 01:07:08,220 --> 01:07:11,920 Dette er i modsætning til en meget mere langsommelig proces som denne. 1505 01:07:11,920 --> 01:07:15,850 Float Grade1, flyder grade2, og så videre. 1506 01:07:15,850 --> 01:07:20,010 Så et array giver os mulighed for at gennemføre denne idé, men langt mindre messily, i 1507 01:07:20,010 --> 01:07:24,630 sådan måde, at man kan skrive en linje kode i stedet for fx 16 for en 16 1508 01:07:24,630 --> 01:07:25,740 uge semester. 1509 01:07:25,740 --> 01:07:29,950 Så jeg havde ikke lyst til hard-kode 2, fordi hvis du tænker over det nu 1510 01:07:29,950 --> 01:07:34,160 logisk - vel næste år CS50 ændringer til 3 quizzer i stedet. 1511 01:07:34,160 --> 01:07:35,510 Og jeg havde det nummer 2 her. 1512 01:07:35,510 --> 01:07:36,600 Jeg havde nummer 2 her. 1513 01:07:36,600 --> 01:07:37,580 Jeg havde nummer 2 her. 1514 01:07:37,580 --> 01:07:38,560 Jeg havde nummer 2 her. 1515 01:07:38,560 --> 01:07:43,180 Det bliver meget trættende og meget let at skrue op og ved et uheld ændre 1516 01:07:43,180 --> 01:07:47,690 én værdi til 3 og gå glip af en anden værdi af 2. 1517 01:07:47,690 --> 01:07:52,460 Så jeg har tænkt mig at i stedet abstrakt dette væk og bruge denne konstante at, da dens 1518 01:07:52,460 --> 01:07:54,120 navnet antyder, aldrig ændrer sig. 1519 01:07:54,120 --> 01:07:57,710 Og nu, uanset om vi har forskellige quizzer i år eller næste, jeg 1520 01:07:57,710 --> 01:08:01,210 bare nødt til at ændre det på ét sted, op her på toppen. 1521 01:08:01,210 --> 01:08:02,720 >> Så det er alt konstant er. 1522 01:08:02,720 --> 01:08:08,680 I mellemtiden er den nye begrebsmæssige træk er, at i et array. 1523 01:08:08,680 --> 01:08:14,660 Så de firkantede parenteser giver mig så mange flåd og lader mig kollektivt 1524 01:08:14,660 --> 01:08:16,630 kalder dem kvaliteter her. 1525 01:08:16,630 --> 01:08:17,990 Så lad os nu se, hvad jeg har tænkt mig at gøre. 1526 01:08:17,990 --> 01:08:20,359 Her i ledningen 24 er begyndelsen på en for-løkke. 1527 01:08:20,359 --> 01:08:22,260 Dette er virkelig ikke noget fancy. 1528 01:08:22,260 --> 01:08:25,060 Det er bare med quizzer i stedet for en hård-kodet nummer. 1529 01:08:25,060 --> 01:08:27,790 Men der er ikke noget intellektuelt anderledes der fra sidste uge. 1530 01:08:27,790 --> 01:08:29,040 Dette er blot printf. 1531 01:08:29,040 --> 01:08:35,490 Så printf ("quiz nummer% d af% d"), fordi jeg bare ønsker at udskrive give mig quiz 1532 01:08:35,490 --> 01:08:38,050 nummer et af to og derefter to af to. 1533 01:08:38,050 --> 01:08:39,850 Så dette er et rent æstetisk ting. 1534 01:08:39,850 --> 01:08:42,500 Men det interessante del nu er på linje 27. 1535 01:08:42,500 --> 01:08:48,310 For at udfylde en af ​​de to pladsholdere med flydende komma 1536 01:08:48,310 --> 01:08:51,029 værdi, du igen bruge kantede parenteser. 1537 01:08:51,029 --> 01:08:55,620 I dette tilfælde, jeg bruger i, fordi det for-løkke er begyndt med i lig 1538 01:08:55,620 --> 01:08:57,560 hvilken værdi, tilsyneladende? 1539 01:08:57,560 --> 01:08:58,279 0. 1540 01:08:58,279 --> 01:09:01,350 >> Så på den første iteration af dette loop, er det som om jeg 1541 01:09:01,350 --> 01:09:02,689 skrev dette i kode. 1542 01:09:02,689 --> 01:09:05,580 Men på den anden iteration af dette loop, er det som om jeg 1543 01:09:05,580 --> 01:09:07,750 skrev dette i min kode. 1544 01:09:07,750 --> 01:09:10,750 Men det faktum, at jeg bruger en variabel er perfekt, fordi, som navnet 1545 01:09:10,750 --> 01:09:14,300 antyder, er det varierende sin værdi på hver iteration. 1546 01:09:14,300 --> 01:09:17,370 Så jeg fylder dette array ét sted ad gangen. 1547 01:09:17,370 --> 01:09:18,910 Hvad betyder dette array ud? 1548 01:09:18,910 --> 01:09:21,430 Nå, grunden til at jeg trak denne super enkle rektangel på skærmen her 1549 01:09:21,430 --> 01:09:23,350 før var af denne grund. 1550 01:09:23,350 --> 01:09:27,279 Et array er bare en bid af hukommelse, efterfulgt af en anden bid af hukommelse, 1551 01:09:27,279 --> 01:09:30,109 efterfulgt af et andet stykke af hukommelsen, og så videre. 1552 01:09:30,109 --> 01:09:35,260 Så hvis min array er af størrelse 2, i dette tilfælde her, alt jeg ville gøre ved 1553 01:09:35,260 --> 01:09:37,590 skrive i min quiz scoringer, ligesom her. 1554 01:09:37,590 --> 01:09:39,430 Jeg fik 100 på denne ene. 1555 01:09:39,430 --> 01:09:42,020 Og så fik jeg en 99 på denne ene. 1556 01:09:42,020 --> 01:09:46,040 Så denne hukommelse måske ikke engang blive brugt, fordi jeg kun har bedt 1557 01:09:46,040 --> 01:09:48,689 computer til en bred vifte af størrelse 2. 1558 01:09:48,689 --> 01:09:50,180 Disse pladser er der stadig. 1559 01:09:50,180 --> 01:09:50,340 Right? 1560 01:09:50,340 --> 01:09:52,500 Du har stadig to gigabyte RAM, selvom du kun 1561 01:09:52,500 --> 01:09:53,979 beder om to flydere. 1562 01:09:53,979 --> 01:09:58,710 Så ideen bag arrays er, at computeren bare tager en bid af hukommelse 1563 01:09:58,710 --> 01:10:03,230 og derefter fordeler mindre stykker tilbage til back to back to back. 1564 01:10:03,230 --> 01:10:04,740 Og så det er alt et array er. 1565 01:10:04,740 --> 01:10:09,080 Det er en sammenhængende klump hukommelse, inden i, som du kan sætte ting. 1566 01:10:09,080 --> 01:10:12,400 >> Nu dette sker for derefter gøre bare nogle kedelige aritmetik. 1567 01:10:12,400 --> 01:10:16,170 Hvis jeg rulle ned her, det er her, jeg så gentage over opstillingen. 1568 01:10:16,170 --> 01:10:19,410 Jeg kommer op med summen af ​​alle værdierne i arrayet. 1569 01:10:19,410 --> 01:10:22,390 Og så bruger jeg funktionen round her til faktisk at gøre det 1570 01:10:22,390 --> 01:10:23,940 opsummere divideret med quizzer. 1571 01:10:23,940 --> 01:10:27,450 Men lad mig bølge min hånd på det som en slags nok aritmetik for nu. 1572 01:10:27,450 --> 01:10:30,010 Men alt, hvad der gør for mig i sidste ende er at beregne et gennemsnit. 1573 01:10:30,010 --> 01:10:33,640 Så første quiz plus sekunder quiz, divideret med 2, og derefter udskrive 1574 01:10:33,640 --> 01:10:34,700 det ud som en int. 1575 01:10:34,700 --> 01:10:39,030 >> Men lad os nu overgang til en anden eksempel kaldet streng1, 1576 01:10:39,030 --> 01:10:42,370 der tegner et lignende billede, men ved hjælp af strenge. 1577 01:10:42,370 --> 01:10:45,550 Lad mig gå videre og forenkle dette for bare et øjeblik. 1578 01:10:45,550 --> 01:10:48,340 Og tilgive indrykningen for nu. 1579 01:10:48,340 --> 01:10:52,280 Bemærk i linje 19 i dette eksempel, får jeg en streng fra brugeren. 1580 01:10:52,280 --> 01:10:55,780 Men bemærk hvad jeg næste gør i linjerne 22 og fremefter. 1581 01:10:55,780 --> 01:11:00,260 Jeg er faktisk iteration fra i op til - og det er et nyt trick - 1582 01:11:00,260 --> 01:11:02,730 strlen, streng længde. 1583 01:11:02,730 --> 01:11:07,010 Dette er en funktion, der kommer med C, hvis du give det en streng, det fortæller 1584 01:11:07,010 --> 01:11:08,950 dig, hvor mange tegn er i denne streng. 1585 01:11:08,950 --> 01:11:09,440 Det er alt. 1586 01:11:09,440 --> 01:11:12,520 Det faktum, at det er strlen stedet for streng længde er bare fordi det er 1587 01:11:12,520 --> 01:11:13,040 mere kortfattet. 1588 01:11:13,040 --> 01:11:17,100 30 år siden, folk kunne lide at skrive ting som kortfattet som muligt. 1589 01:11:17,100 --> 01:11:19,080 Så vi har holdt denne konvention her. 1590 01:11:19,080 --> 01:11:21,730 i + + betyder blot forøge i i hver iteration. 1591 01:11:21,730 --> 01:11:24,310 Og nu bemærke dette, som er virkelig interessant. 1592 01:11:24,310 --> 01:11:28,730 Så i linje 24, jeg siger computer, giv mig et tegn, otte 1593 01:11:28,730 --> 01:11:30,770 bits, og kalder det c. 1594 01:11:30,770 --> 01:11:35,370 Men hvad er dette på højre side siger? 1595 01:11:35,370 --> 01:11:38,150 På engelsk, hvad det repræsenterer? 1596 01:11:38,150 --> 01:11:40,070 [Uhørlig] 1597 01:11:40,070 --> 01:11:40,490 DAVID J. Malan: Præcis. 1598 01:11:40,490 --> 01:11:42,390 Giv mig det første tegn i sættet. 1599 01:11:42,390 --> 01:11:45,400 Eller mere generelt, giv mig det i'te tegn i array. 1600 01:11:45,400 --> 01:11:48,230 Og indse det er vigtigt nu, at som dataloger, vi er faktisk 1601 01:11:48,230 --> 01:11:49,330 at tælle fra 0. 1602 01:11:49,330 --> 01:11:51,290 Du har ikke diskretion nu at begynde at gøre dette. 1603 01:11:51,290 --> 01:11:54,580 Nu har du til at opføre sig i overensstemmelse med computerens forventninger og 1604 01:11:54,580 --> 01:11:58,010 tælle fra nul, fordi [0] vil være den første 1605 01:11:58,010 --> 01:11:59,670 tegn i en streng. 1606 01:11:59,670 --> 01:12:01,320 [1] vil være det andet. 1607 01:12:01,320 --> 01:12:03,610 [2] vil være den tredje og så videre. 1608 01:12:03,610 --> 01:12:08,840 Så dette program, hvis jeg kompilere det - det er, igen, streng1. 1609 01:12:08,840 --> 01:12:11,040 >> Så gør streng1. 1610 01:12:11,040 --> 01:12:16,730 Og nu løber jeg streng1 i min terminal vindue. 1611 01:12:16,730 --> 01:12:19,180 Det venter på input, så jeg har tænkt mig at skrive i, siger, David. 1612 01:12:19,180 --> 01:12:20,080 Enter. 1613 01:12:20,080 --> 01:12:23,350 Og nu er det udskriver DAVID alle på forskellige linjer, fordi 1614 01:12:23,350 --> 01:12:24,430 mærke til, hvad jeg laver. 1615 01:12:24,430 --> 01:12:27,510 Jeg udskriver et tegn ad gangen. 1616 01:12:27,510 --> 01:12:29,100 Nu vil vi ikke gå i detaljer i dag om dette. 1617 01:12:29,100 --> 01:12:31,610 Men jeg slettet et øjeblik siden denne kontrol her. 1618 01:12:31,610 --> 01:12:36,310 Det viser sig, at hvis brugeren er uartig, kontradiktion, eller bare 1619 01:12:36,310 --> 01:12:41,780 forvirret, kan du faktisk undgå at give en streng af en vis længde. 1620 01:12:41,780 --> 01:12:43,640 Hvis du rammer en forkert tast på tastaturet, kan du give 1621 01:12:43,640 --> 01:12:44,390 ingen snor på alle. 1622 01:12:44,390 --> 01:12:47,790 Eller hvis du er skadeligt, kan du prøve at indsætte en gigabyte værd af en 1623 01:12:47,790 --> 01:12:49,380 essay at fylde denne streng. 1624 01:12:49,380 --> 01:12:52,060 Og hvis computeren løber tør for hukommelse, viser det sig, at vi skal 1625 01:12:52,060 --> 01:12:54,310 at komme tilbage denne særlige værdi kaldet null. 1626 01:12:54,310 --> 01:12:57,550 Så for nu, ved bare at der er denne særlige værdi kaldet null, at 1627 01:12:57,550 --> 01:13:01,000 vil give os mulighed for at kontrollere, når vi er ude af hukommelsen, blandt andre ting. 1628 01:13:01,000 --> 01:13:07,330 >> Men hvis jeg åbner nu streng2, bemærke en forskel her. 1629 01:13:07,330 --> 01:13:09,760 Bemærke en forskel her med streng2. 1630 01:13:09,760 --> 01:13:13,260 Med streng2, er dette for-løkke lidt anderledes. 1631 01:13:13,260 --> 01:13:16,350 Lad mig slette de nuller, så vi kan tale om dem en anden gang. 1632 01:13:16,350 --> 01:13:18,460 Men hvad er anderledes ved for-løkken denne gang? 1633 01:13:21,580 --> 01:13:23,160 Og jeg kan gå tilbage til det foregående eksempel. 1634 01:13:23,160 --> 01:13:24,800 Så det er version to. 1635 01:13:24,800 --> 01:13:27,020 Dette er version et. 1636 01:13:27,020 --> 01:13:31,935 En, to, en to. 1637 01:13:35,030 --> 01:13:38,240 Så strlen opkaldet er hvor? 1638 01:13:38,240 --> 01:13:40,420 Det er i den første del af for-løkken. 1639 01:13:40,420 --> 01:13:43,060 Nogen tanker om, hvorfor jeg gør det? 1640 01:13:43,060 --> 01:13:43,690 Yeah. 1641 01:13:43,690 --> 01:13:46,010 [Uhørlig] 1642 01:13:46,010 --> 01:13:47,630 DAVID J. Malan: Så vi ikke kalde funktionen hver eneste gang. 1643 01:13:47,630 --> 01:13:48,040 Præcis. 1644 01:13:48,040 --> 01:13:50,350 Genopkald fra efter sløjfer, at de er super enkel, når du slags 1645 01:13:50,350 --> 01:13:52,180 forstå, at det er initialiseringen, at 1646 01:13:52,180 --> 01:13:53,330 tilstand, og opdateringen. 1647 01:13:53,330 --> 01:13:55,430 Problemet er, at betingelsen sker på hver 1648 01:13:55,430 --> 01:13:56,600 iteration af løkken. 1649 01:13:56,600 --> 01:13:59,930 Og så i dette eksempel her, er hvad dårligt om det faktum, 1650 01:13:59,930 --> 01:14:03,500 at dette er min tilstand? 1651 01:14:03,500 --> 01:14:05,920 Du ringer strlen igen og igen og igen. 1652 01:14:05,920 --> 01:14:08,990 Men når jeg har indtastet i DAVID, længden af ​​strengen er fem. 1653 01:14:08,990 --> 01:14:11,560 Og det kommer ikke til at ændre sig på hver iteration af løkken, fordi 1654 01:14:11,560 --> 01:14:15,560 streng er stadig D-A-V-I-D. Så dette er en antydning af, hvad der kommer til at blive en 1655 01:14:15,560 --> 01:14:19,650 stadig vigtigere idé kendt som en design beslutning, hvor - bare ikke 1656 01:14:19,650 --> 01:14:21,640 gøre computeren gøre unødvendigt arbejde. 1657 01:14:21,640 --> 01:14:25,630 >> Nu blot som en forsmag på Pset 2, Pset 2 i standardudgaven er 1658 01:14:25,630 --> 01:14:28,850 kommer til at udfordre dig til rent faktisk at gennemføre nogle flere ciphers, nogle 1659 01:14:28,850 --> 01:14:32,650 Antallet af krypteringsalgoritmer, så du både kan kryptere og dekryptere 1660 01:14:32,650 --> 01:14:35,530 hemmelige beskeder, meget gerne den ene Ralphie der afkodes. 1661 01:14:35,530 --> 01:14:38,720 I hacker udgave af Pset 2, vi kommer til at gå lidt videre. 1662 01:14:38,720 --> 01:14:42,010 Vi kommer til at hånd du en fil fra et egentligt edb-system, der indeholder en 1663 01:14:42,010 --> 01:14:45,690 hel masse brugernavne og faktiske krypterede passwords, og udfordringen 1664 01:14:45,690 --> 01:14:49,110 for hacker-udgave vil være at knække disse passwords og figur 1665 01:14:49,110 --> 01:14:53,060 ud af, hvad kryptering eller hvad hemmelighed blev brugt til rent faktisk at 1666 01:14:53,060 --> 01:14:55,080 generere disse adgangskoder. 1667 01:14:55,080 --> 01:14:58,360 Og vi vil gøre dette ved hjælp af en ny funktion her af C, at jeg vil give 1668 01:14:58,360 --> 01:15:02,200 du bare en demo af, kendt som kommandolinjeargumenter. 1669 01:15:02,200 --> 01:15:05,930 >> Så det viser sig, som nogle af jer måske har set i afsnit eller i lærebøger, 1670 01:15:05,930 --> 01:15:09,850 main ikke altid behøver at være ugyldig i parentes. 1671 01:15:09,850 --> 01:15:14,060 Det viser sig, at main også kan skrives på denne måde, med to argumenter, 1672 01:15:14,060 --> 01:15:19,690 argc og argv, hvor argc er antallet af ord, du skriver efter 1673 01:15:19,690 --> 01:15:21,940 programmets navn på din kommandolinje. 1674 01:15:21,940 --> 01:15:24,550 Og argv er de faktiske ord. 1675 01:15:24,550 --> 01:15:29,470 Og da de firkantede parenteser dér antyder, argv er tilsyneladende et array. 1676 01:15:29,470 --> 01:15:33,720 Det kommer til at være en streng efter en streng efter en streng i hukommelsen. 1677 01:15:33,720 --> 01:15:36,170 Så det vi vil være i stand til at gøre, begyndende med Pset 2, 1678 01:15:36,170 --> 01:15:37,310 noget som dette. 1679 01:15:37,310 --> 01:15:42,450 Hvis jeg laver argv1, som er et eksempel, vi vil vende tilbage til på mandag, og kør 1680 01:15:42,450 --> 01:15:45,180 det, bemærke, at det ikke synes at gøre noget endnu. 1681 01:15:45,180 --> 01:15:47,050 Det bare udskriver sit eget navn. 1682 01:15:47,050 --> 01:15:53,220 Men hvis jeg siger farvel klasse, meddelelse om, at dette program tilsyneladende gentager 1683 01:15:53,220 --> 01:15:57,030 over hver af de ord, der blev skrevet ved prompten. 1684 01:15:57,030 --> 01:16:02,050 Og de måder, som vi vil få adgang til ord, som brugeren har 1685 01:16:02,050 --> 01:16:06,780 indtastes ved prompten er ved at ændre main, der starter i denne weekend, fra int 1686 01:16:06,780 --> 01:16:10,710 main (void) til int main (argc, argv). 1687 01:16:10,710 --> 01:16:13,700 Og dermed vil blive født kommandolinjeargumenter. 1688 01:16:13,700 --> 01:16:17,210 Og når du får virkelig sofistikeret på dette, vil du være i stand til at skrive 1689 01:16:17,210 --> 01:16:21,370 virkelig trippy programmer, som denne her, som går ud over 1690 01:16:21,370 --> 01:16:25,520 nogle af de funktioner, vi har gjort hidtil, men alle ganske kraftige. 1691 01:16:25,520 --> 01:16:27,330 >> Så vi vil forlade dette med dette på skærmen. 1692 01:16:27,330 --> 01:16:29,160 Og vi vil se dig på mandag.