1 00:00:00,000 --> 00:00:02,270 [Powered by Google Translate] [2. hét, folytatás] 2 00:00:02,270 --> 00:00:04,220 [David J. Malan, Harvard University] 3 00:00:04,220 --> 00:00:06,880 [Ez CS50. - CS50.TV] 4 00:00:06,880 --> 00:00:10,990 Rendben van. Ez CS50, és ez a vége a 2. héten. 5 00:00:10,990 --> 00:00:14,410 Ha azt várod, hogy éhes ez idő tájt holnap, 6 00:00:14,410 --> 00:00:18,620 tudom, hogy fogunk összehívni, mint egy kis csoport holnap, csütörtökön, 13:15. 7 00:00:18,620 --> 00:00:21,360 Van egy URL-t ide, ha szeretné RSVP. 8 00:00:21,360 --> 00:00:26,740 Tér korlátozott, ezért kérlek bocsáss meg, ha az űrlap töltötte fel az időt, töltse ki ezt. 9 00:00:26,740 --> 00:00:29,300 Egy másik URL azonban, hogy érdekes lehet ez. 10 00:00:29,300 --> 00:00:32,369 Alig egy hónap múlva, a tanfolyam lesz bocsátani 11 00:00:32,369 --> 00:00:36,890 annál is inkább, nagyjából keresztül EDX, amelyen keresztül emberek az interneten lesz képes követni mentén, 12 00:00:36,890 --> 00:00:39,380 vegyenek részt a tanfolyam elég aktívan, sőt. 13 00:00:39,380 --> 00:00:42,270 Fogják használni a gép és a CS50 CS50 Fórum 14 00:00:42,270 --> 00:00:45,490 és a legtöbb a különböző szoftver eszközök, hogy mi már használ ebben a félévben. 15 00:00:45,490 --> 00:00:48,710 És az egyik kezdeményezések szeretnénk vállalni, mint egy kísérlet ebben az évben 16 00:00:48,710 --> 00:00:51,930 is, hogy lásd, mennyi tartalom tudunk fordítani 17 00:00:51,930 --> 00:00:53,960 más beszélt és írott nyelv. 18 00:00:53,960 --> 00:00:57,500 Tehát, ha lehet, hogy érdekeltek a projektben résztvevő 19 00:00:57,500 --> 00:01:02,270 amellyel mi fog angol nyelvű átirata és a feliratok a tanfolyam előadásait 20 00:01:02,270 --> 00:01:05,450 és rövidnadrág és szemináriumok és szakaszok és hasonlók, 21 00:01:05,450 --> 00:01:08,200 ha beszél folyékonyan, vagy írjon folyékonyan egy másik nyelven, 22 00:01:08,200 --> 00:01:12,290 mi szívesen részt Önnek ebben a projektben, amelynek során az előírtnál egy vagy több, a videók, 23 00:01:12,290 --> 00:01:15,200 fordítani őket egy nyelvet tudsz elég jól. 24 00:01:15,200 --> 00:01:18,700 >> Ahhoz, hogy te egyfajta a felület, itt van ez a web-alapú felhasználói felület 25 00:01:18,700 --> 00:01:22,090 hogy mi fog használni, hogy létre fog hozni lényegében egy UI, mint ez. 26 00:01:22,090 --> 00:01:24,290 Ezt nekem tanítás néhány Halloween napja, 27 00:01:24,290 --> 00:01:27,390 és a jobb oldalon van a fekete mellett e időbélyegeket, 28 00:01:27,390 --> 00:01:31,210 látni fogja a különböző dolgokat, hogy jött ki a számat, hogy a nap, 29 00:01:31,210 --> 00:01:34,850 majd alatta leszel képes lefordítani más nyelven 30 00:01:34,850 --> 00:01:38,690 pontosan mi a leképezés között, ebben az esetben, az angol és, mondjuk, spanyol. 31 00:01:38,690 --> 00:01:40,440 Tehát ez valójában egy nagyon felhasználóbarát eszköz. 32 00:01:40,440 --> 00:01:43,370 Akkor hátra és előre-nagyon könnyen a billentyűparancsokat. 33 00:01:43,370 --> 00:01:47,490 Tehát, ha azt szeretné, hogy vegyen részt ebben a kísérletben, és a szavakat látható és olvasható 34 00:01:47,490 --> 00:01:51,850 az esetleg ezer emberek odakinn, kérjük ne habozzon részt. 35 00:01:51,850 --> 00:01:54,350 Egy szó, ami a kiscicát hétfő. 36 00:01:54,350 --> 00:02:00,350 Nehogy küldtünk túlságosan ijesztő üzenet ezt észre, hogy mivel munkaidőn sugallják 37 00:02:00,350 --> 00:02:03,300 és szakaszok arra utalnak, a design a tanfolyam nagyon 38 00:02:03,300 --> 00:02:07,360 hogy a diákok együttműködő és beszélt a munka a probléma készletek 39 00:02:07,360 --> 00:02:11,260 és a problémák együtt, és tényleg csak a vonal jön le, hogy, 40 00:02:11,260 --> 00:02:16,010 ismét a munkát, amit végül be kell tenni a saját. 41 00:02:16,010 --> 00:02:18,860 És őszintén, a munkaidőn ez teljesen normális, 42 00:02:18,860 --> 00:02:22,240 ez teljesen várható még, hogy beszélgetni néhány ismerősként melletted. 43 00:02:22,240 --> 00:02:24,370 >> Ha ő küzd néhány téma, és te, mint 44 00:02:24,370 --> 00:02:27,940 "Oh, nos, hadd adjak egy pillantást néhány sort, hogy én írtam, hogy" jól van, 45 00:02:27,940 --> 00:02:31,250 ez megtörténik, és ez nagyon kedvező, azt hiszem, a tanulási folyamat. 46 00:02:31,250 --> 00:02:36,750 Amennyiben a sor kerül át, amikor a fej a fajta döntve ide a túl sok másodperc 47 00:02:36,750 --> 00:02:41,160 vagy perc, hogy tényleg, hogy csak volt egy feloldási lehetőség a barátod, 48 00:02:41,160 --> 00:02:44,160 és természetesen, amikor a dolgok cserélt e-mailben és Dropbox és hasonlók, 49 00:02:44,160 --> 00:02:45,640 is ott van a vonalban. 50 00:02:45,640 --> 00:02:48,620 Szóval minden eszközzel érzik magukat, és úgy érzik, ösztönözni kell beszélgetni a barátokkal 51 00:02:48,620 --> 00:02:52,810 és osztálytársai mintegy psets és egyre csak észre, hogy amit végül kattintson 52 00:02:52,810 --> 00:02:57,340 tényleg olyan termék, a teremtés, és nem valaki más. 53 00:02:57,340 --> 00:03:00,490 És így az egyik terület-specifikus problémák pset2, 54 00:03:00,490 --> 00:03:04,740 ami ki fog jönni késő holnap este, hogy belevetik magukat a világ a kriptográfia, 55 00:03:04,740 --> 00:03:08,970 amely a művészet titkosítására vagy kódolási információkat, 56 00:03:08,970 --> 00:03:12,600 és ez végül kapcsolódik a világ biztonságát. 57 00:03:12,600 --> 00:03:16,560 Most, a biztonság a legtöbben formájában érkezik a meglehetősen világi mechanizmusok. 58 00:03:16,560 --> 00:03:19,050 Mindannyiunk felhasználónevek és jelszavak, 59 00:03:19,050 --> 00:03:23,450 és mindannyiunknak nagyon rossz felhasználónevek és jelszavak, valószínűleg. 60 00:03:23,450 --> 00:03:28,240 >> Ha a jelszó megegyezik több webhelyen, ez talán nem a legjobb ötlet, 61 00:03:28,240 --> 00:03:30,070 ahogy megbeszéljük felé félév végén. 62 00:03:30,070 --> 00:03:34,720 Ha a jelszó van írva egy ragadós jegyzet - nem vicc - a monitoron, 63 00:03:34,720 --> 00:03:38,350 ez is, nem feltétlenül a legjobb design, de elég gyakori jelenség. 64 00:03:38,350 --> 00:03:42,470 És ha nem használ titkosítást titkosítja a jelszavakat, 65 00:03:42,470 --> 00:03:44,210 ők különösen veszélyeztetettek. 66 00:03:44,210 --> 00:03:47,270 Tehát, ha azt hiszed, hogy szuper okos azáltal, hogy egy rejtett Word-dokumentum 67 00:03:47,270 --> 00:03:49,910 valahol a merevlemezen, hogy az összes a jelszavakat 68 00:03:49,910 --> 00:03:53,670 de ez egy mappába, hogy senki nem fog nézni, ez is nem egy nagyon biztonságos mechanizmus. 69 00:03:53,670 --> 00:03:56,990 És mi pset2 fog bevezetni ez a művészet a kriptográfia 70 00:03:56,990 --> 00:04:02,010 és kódolási információt, hogy a dolgok, mint például jelszavak annál biztonságosabb. 71 00:04:02,010 --> 00:04:05,790 A kontextus itt az, hogy a bizonytalan adatokkal 72 00:04:05,790 --> 00:04:07,930 jön a lehetőséget, hogy titkosítja, és összekeveri azt. 73 00:04:07,930 --> 00:04:11,470 És így ez, például, egy példa a titkosított üzenet. 74 00:04:11,470 --> 00:04:14,700 Ez tényleg mond valamit angolul, de ez nyilvánvalóan nem teljesen nyilvánvaló. 75 00:04:14,700 --> 00:04:18,279 És mi jön teljes kört ma ugratni kívül, amit ez titkos üzenetet itt. 76 00:04:18,279 --> 00:04:23,490 De a valóságban a számítógépek, a dolgok nem is néz ki, mint esetleg az angol kifejezéseket. 77 00:04:23,490 --> 00:04:28,430 Például, ez az, amit lehet, hogy talál egy szabványos Linux vagy Mac vagy UNIX számítógép 78 00:04:28,430 --> 00:04:32,070 egy aktában volt egyszer régen az úgynevezett jelszó fájl. 79 00:04:32,070 --> 00:04:34,200 >> Manapság ez már költözött más helyeken. 80 00:04:34,200 --> 00:04:39,210 De ha megnézi a megfelelő helyre a rendszer, akkor látni nem csak a felhasználónevét 81 00:04:39,210 --> 00:04:43,400 vagy hogy más emberek a rendszer, de meglátja, titkosított változata a jelszó. 82 00:04:43,400 --> 00:04:47,980 Valóban, a szó kripta ott azt javasolja, hogy a következő cucc titkosított, 83 00:04:47,980 --> 00:04:52,680 és ez a sorozat látszólag véletlenszerű betűk és karakterek és számok, és így tovább 84 00:04:52,680 --> 00:04:56,480 lehet visszafejteni csak általánosságban ismeretében valami titkos - 85 00:04:56,480 --> 00:04:58,840 egy titkos szót, egy titkos szám - 86 00:04:58,840 --> 00:05:03,160 és így valóban a művészet kriptográfia végső soron attól függ, hogy bízik valamilyen 87 00:05:03,160 --> 00:05:05,650 és annak tudatában, amit valaki más nem. 88 00:05:05,650 --> 00:05:10,090 Így fogjuk felfedezni ezt egy kicsit részletesebben ma és a Pset jönni. 89 00:05:10,090 --> 00:05:12,200 És most egy szó a pass / fail. 90 00:05:12,200 --> 00:05:15,360 Különösen, mint néhány már lebukott pset1, a készülék, 91 00:05:15,360 --> 00:05:19,080 , és egy teljesen új világot magadnak, rájönnek, hogy frusztrációt és zavart 92 00:05:19,080 --> 00:05:21,700 és csak technikai nehézségek nagyon várható, 93 00:05:21,700 --> 00:05:24,180 különösen az első Pset, ahol csak annyi az új, 94 00:05:24,180 --> 00:05:27,730 csak arra, hogy ismerik a ls, CD és mindezek misztikus parancsokat 95 00:05:27,730 --> 00:05:33,050 és egy új környezet, és ez független a tényleges anyagi és programozás is. 96 00:05:33,050 --> 00:05:36,940 Tehát észre azt is, hogy vannak biztosan munkaidőn, hogy létezik egy támogatási struktúra. 97 00:05:36,940 --> 00:05:38,880 >> Szakasza kezdődik a jövő vasárnap. 98 00:05:38,880 --> 00:05:42,960 De ami a legfontosabb, ha érzel most, hogy nem ez a világ van, 99 00:05:42,960 --> 00:05:44,710 észre, hogy ez tényleg nem csak időt vesz igénybe. 100 00:05:44,710 --> 00:05:48,600 És ha nem lettek volna ezt a lehetőséget évvel ezelőtt engem vesz egy osztály / nem felelt meg, 101 00:05:48,600 --> 00:05:50,990 őszintén, soha nem lett volna, még a lábát az osztályteremben. 102 00:05:50,990 --> 00:05:53,690 És tudod változtatni ezt-ig, mondjuk, az ötödik hétfőn persze, 103 00:05:53,690 --> 00:05:58,280 így ha a szélén most észre, hogy ahelyett, hogy fejét valami más vizeken teljesen, 104 00:05:58,280 --> 00:06:01,260 nem biztos, csak úgy változik át / nem felelt meg. 105 00:06:01,260 --> 00:06:04,570 Ismét ott nem igazán ez a kultúra itt Harvard figyelembe dolgok megfelelt / nem 106 00:06:04,570 --> 00:06:08,670 hiszen mindenki nagyon szeretne elérni, vagy túl is, 107 00:06:08,670 --> 00:06:11,130 de őszintén szólva, ez egy csodálatos módon próbál valamit 108 00:06:11,130 --> 00:06:16,720 hogy esetleg nem ismerős neked, és akkor a végén csinál, a legtöbb esetben meglehetősen finom, 109 00:06:16,720 --> 00:06:18,210 Talán sok a meglepetés. 110 00:06:18,210 --> 00:06:20,980 És Konkrétabban, mit gondolok megfelelt / nem felelt általában nem, 111 00:06:20,980 --> 00:06:22,940 különösen azért, mert lehet, hogy tapasztalt pset0, 112 00:06:22,940 --> 00:06:26,560 ha tesz, 10 óra, 15 óra, 25 óra a néhány Pset 113 00:06:26,560 --> 00:06:29,920 és te csak beverte a fejét a falnak, és ez egyre szuper késő este 114 00:06:29,920 --> 00:06:33,950 de már megtette a Pset 90%-át az utat, és nem tudod kitalálni egy dolog, 115 00:06:33,950 --> 00:06:36,520 megfelelt / nem igazán úgy élét egy osztály, mint ez, 116 00:06:36,520 --> 00:06:39,100 ahol egyfajta boldogan mondja: "Oké, tudom, hogy nem tökéletes, 117 00:06:39,100 --> 00:06:42,350 de én dolgoztam a seggem ebben, vagyok boldog, ha végül " 118 00:06:42,350 --> 00:06:44,850 és amelyek megfelelnek a vonatkozó várakozások / nem felelt meg. 119 00:06:44,850 --> 00:06:47,540 Szóval, hogy tartsa szem előtt. Rendben van. 120 00:06:47,540 --> 00:06:50,520 >> Tehát azok, akik küzdöttek, hogy használja a Harvard Egyetem Wi-Fi, 121 00:06:50,520 --> 00:06:54,780 tudja, hogy van egy CS50 SSID, a Wi-Fi kapcsolat, lebeg 122 00:06:54,780 --> 00:06:56,490 hogy lehet, hogy jobb szerencse. 123 00:06:56,490 --> 00:07:00,130 Ez egy kicsit ironikus, hogy a jelszó az, ha azt szeretné, hogy próbáljon meg csatlakozni az e 124 00:07:00,130 --> 00:07:08,350 a jobb sebesség -, és tudassa velünk, ez nem jobb - 12345, egészen akár 8 125 00:07:08,350 --> 00:07:10,910 mert a 8 sokkal biztonságosabb, mint 5. 126 00:07:10,910 --> 00:07:16,910 Tehát, ha szükség van a Wi-Fi jelszavát, csatlakoztassa a CS50 vezeték nélküli itt, 12345678, 127 00:07:16,910 --> 00:07:20,380 és post CS50 Beszéljétek ha még időszakos kapcsolódási problémák, 128 00:07:20,380 --> 00:07:25,420 és mi hagyja, hogy a hatalom lehet tudni, ezen a helyen. Rendben van. 129 00:07:25,420 --> 00:07:32,230 Tehát egy gyors teaser, különösen azok számára, akik rajongó fiú vagy lány minden dolgok Apple. 130 00:07:32,230 --> 00:07:37,460 Amit kiásták a néhány évvel ezelőtt volt, ezt a fájlt itt, iUnlock.c, 131 00:07:37,460 --> 00:07:39,930 csak ilyen, hogy több konkrét és bonyolultabb 132 00:07:39,930 --> 00:07:42,560 Néhány a több alap C programok voltunk írásban. 133 00:07:42,560 --> 00:07:46,910 Szóval nyitni ezt a fájlt, iUnlock.c. Ez elérhető a Lectures oldalon ma. 134 00:07:46,910 --> 00:07:49,810 A bal oldalon látható egy hosszú listát a funkciók. 135 00:07:49,810 --> 00:07:53,230 Szóval a fickó, aki írta ezt írta egy csomó funkciók, több, mint fő. 136 00:07:53,230 --> 00:07:57,340 Valaha egy csomó könyvtárak itt, és ha elkezdünk lapozást, 137 00:07:57,340 --> 00:08:04,890 mi ez tulajdonképpen a legelső, azt hiszem, repedés az eredeti iPhone. 138 00:08:04,890 --> 00:08:09,830 >> Ha akarta jailbreak az eredeti iPhone, ami azt jelenti, untether hogy az AT & T 139 00:08:09,830 --> 00:08:13,710 és ténylegesen telepíteni speciális szoftver, és a dolgok, hogy az Apple nem akarta az embereket, 140 00:08:13,710 --> 00:08:18,480 valaki volt az ideje, hogy kitaláljuk, hogy pontosan hogyan tudnák kihasználni szoftver hibák, 141 00:08:18,480 --> 00:08:22,690 hibák, bugok, az Apple szoftver, és így született meg iUnlock.c-- 142 00:08:22,690 --> 00:08:26,760 hogy ha össze azt a számítógépet, és telepítettem rá egy iPhone 143 00:08:26,760 --> 00:08:29,430 hogy az csatlakoztatva volt a számítógéphez, mondjuk, egy USB kábelt, 144 00:08:29,430 --> 00:08:32,450 ez ad közigazgatási vagy root jogosultságokkal az iPhone 145 00:08:32,450 --> 00:08:34,620 és hagyja, hogy te elég sok, amit akarsz. 146 00:08:34,620 --> 00:08:36,400 És így volt ez a csodálatos macska-egér játék 147 00:08:36,400 --> 00:08:39,340 között az Apple és a világ többi része, különösen azok, mint sok vállalat, 148 00:08:39,340 --> 00:08:43,350 próbálja lezárni a dolgot le úgy, hogy csak akkor lehet vele csinálni, amit kívánt. 149 00:08:43,350 --> 00:08:47,360 De hála az emberek, mint ez, és a megértése alacsony szintű adatai - 150 00:08:47,360 --> 00:08:50,830 és ebben az esetben a C programozás - és egy csomó ismerős konstrukciók 151 00:08:50,830 --> 00:08:55,280 hogy már elkezdett játszani, meg tudja-e valóban kihasználhatják a hardver 152 00:08:55,280 --> 00:08:59,250 olyan módon, ahogy jónak látod, és nem feltétlenül egyes vállalati egység. 153 00:08:59,250 --> 00:09:01,600 Így például, fogalmam sincs, mi ez csinál, 154 00:09:01,600 --> 00:09:03,580 de GetVersion hangzik elég egyértelmű, 155 00:09:03,580 --> 00:09:05,710 és úgy néz ki, mint ez a funkció, hogy ez a személy írta. 156 00:09:05,710 --> 00:09:09,250 Beletelik valami egész, mint egy érvet, nem ad vissza semmit, 157 00:09:09,250 --> 00:09:13,710 de úgy tűnik, hogy egy hurok a hurok itt és ha a feltétel, ha a feltétel törés, 158 00:09:13,710 --> 00:09:16,770 és valahogy kapcsolódik verziószámok ha lapozzunk lefelé, 159 00:09:16,770 --> 00:09:19,650 bár sok ilyen kulcsszavak lesznek új. 160 00:09:19,650 --> 00:09:22,590 És van egy csomó funkció van itt még sosem láttam, és talán soha nem lát 161 00:09:22,590 --> 00:09:24,350 során a félév. 162 00:09:24,350 --> 00:09:29,160 >> Végén a nap, ebből az következik, ugyanazokat a szabályokat és logikát, hogy mi már játszott eddig. 163 00:09:29,160 --> 00:09:34,340 Szóval ez túl öreg ahhoz, hogy kiváló az iPhone 3s vagy 4s vagy hamarosan 5s ezekben a napokban, 164 00:09:34,340 --> 00:09:38,830 de tudjuk, hogy ez mind nagyon származik a világ, hogy már lebukott. 165 00:09:38,830 --> 00:09:42,280 Vessünk egy pillantást egy kicsit több egyszerű példát: 166 00:09:42,280 --> 00:09:46,260 ezt, csak azért, hogy felmelegedett néhány szintaktikai és még néhány más adattípust 167 00:09:46,260 --> 00:09:48,910 hogy már beszéltünk, de még nem igazán látott C. 168 00:09:48,910 --> 00:09:53,670 Ez a fájl neve positive1.c, és a per a megjegyzéseket a tetején, 169 00:09:53,670 --> 00:09:56,070 ez csak azt követeli, hogy a felhasználó egy pozitív szám. 170 00:09:56,070 --> 00:09:59,910 Szóval ez egy példa a do-while ciklus, ami szép és jó a felhasználó interaktív programok 171 00:09:59,910 --> 00:10:02,070 ahol meg kell mondani a felhasználónak, hogy tegyen valamit, 172 00:10:02,070 --> 00:10:05,530 és ha nem működik együtt te kiabálsz, vagy elutasítja a bemenet. 173 00:10:05,530 --> 00:10:10,480 Case pont: fogok csinálni sorok 19 keresztül 24 174 00:10:10,480 --> 00:10:14,620 amíg a felhasználó nem adott nekem egy pozitív szám. 175 00:10:14,620 --> 00:10:21,340 Ez a részlet itt a 18 vezetéken, miért kijelentem n fent ez az egész loop konstrukcióval 176 00:10:21,340 --> 00:10:26,870 szemben közvetlenül a 22 vonal, ahol tényleg érdekel, hogy n? Igen. 177 00:10:26,870 --> 00:10:29,330 [Hallgató] kör. >> Igen, ezt a kérdést a hatályát. 178 00:10:29,330 --> 00:10:31,770 És a laikus szempontból, mit hatálya utal? 179 00:10:34,880 --> 00:10:41,560 Igen. >> [Hallhatatlan tanulói válasz] >> Tudsz beszélni egy kicsit hangosabban? 180 00:10:41,560 --> 00:10:45,440 [Hallgató] Hol lehet hozzáférni a változó. >> Tökéletes. 181 00:10:45,440 --> 00:10:47,610 Ha el tudja érni egy adott változó. 182 00:10:47,610 --> 00:10:50,990 És általában, a ökölszabály eddig az volt, hogy a körét egyes változó 183 00:10:50,990 --> 00:10:56,140 határozza meg a legutóbbi kapcsos zárójelek, amit látott. 184 00:10:56,140 --> 00:11:03,070 >> És ebben az esetben, ha elkövette azt a hibát nyilvánító n on-line 22, hogy a vonal fog működni. 185 00:11:03,070 --> 00:11:10,840 Szeretnék kap egy int, és azt helyezze be, hogy az n változó sorban 22, 186 00:11:10,840 --> 00:11:17,060 de kódsor hogy most fogalmam sincs, miről beszélsz? >> [Hallgató] 25. 187 00:11:17,060 --> 00:11:23,840 [Malan] 25, és kiderült, hogy 24 is, mert ebben az esetben ez kívül esik a kapcsos zárójelek. 188 00:11:23,840 --> 00:11:28,550 Szóval, csak egy kicsit kellemetlen, de nagyon könnyen megoldható egyszerűen nyilvánító változó 189 00:11:28,550 --> 00:11:30,700 kívül a funkciót is. 190 00:11:30,700 --> 00:11:32,760 Meglátjuk később ma is egy lépéssel tovább 191 00:11:32,760 --> 00:11:34,940 és akkor még egy kicsit lusta. 192 00:11:34,940 --> 00:11:39,660 És ez nem ajánlott az általános, de akkor még csak lusta 193 00:11:39,660 --> 00:11:44,150 és tedd egy változó világban, hogy úgy mondjam, nem egy függvényen belül, nem pedig belülről egy hurok, 194 00:11:44,150 --> 00:11:49,800 de a fájl maga kívül az összes funkciót, amit írt, mint én itt a 15. sor. 195 00:11:49,800 --> 00:11:55,220 Ezt általában elítélik, azonban, hogy ez egy megoldás időnként más problémákra, 196 00:11:55,220 --> 00:11:56,910 mivel mi végül látni. 197 00:11:56,910 --> 00:11:59,500 Tehát most elmegyünk, mint ez, de lássuk, tudjuk átírni ezt 198 00:11:59,500 --> 00:12:02,360 Csak kezdeni kifejező magunkat egy kicsit másképp. 199 00:12:02,360 --> 00:12:05,550 Ez a program, csak hogy világos legyen, nem positive1. 200 00:12:05,550 --> 00:12:11,980 Hadd menjek előre, itt és a terminál ablakban győződjön positive1, Enter. 201 00:12:11,980 --> 00:12:15,080 Fordít rendben. Megyek futni positive1, nyomd meg az Entert. 202 00:12:15,080 --> 00:12:19,250 Követelem, hogy adjon nekem egy pozitív egész szám. Azt mondom -1. Ez nem működik. 203 00:12:19,250 --> 00:12:22,340 0, 99. Ez úgy tűnik, hogy működik. 204 00:12:22,340 --> 00:12:25,310 Lehet, hogy nem a legszigorúbb vizsgálatot, de legalább ez egy jó józanság ellenőrzést 205 00:12:25,310 --> 00:12:27,100 hogy mi vagyunk a helyes úton halad. 206 00:12:27,100 --> 00:12:29,570 >> És most hadd menjek előre, és nyissa ki 2-es verziója e, 207 00:12:29,570 --> 00:12:32,800 és mi a különbség már? 208 00:12:32,800 --> 00:12:39,030 Hajtja végre ugyanazt a dolgot, de mi ugrott ki, mint egyértelműen különbözik ebben az időben? 209 00:12:40,790 --> 00:12:47,090 Ez bool zöld. Ez a zöld színnel, a kulcsszó nevei bool, ami egy adattípust. 210 00:12:47,090 --> 00:12:50,510 Ez nem jön beépített valamennyi változatának C. 211 00:12:50,510 --> 00:12:52,650 Be kell, hogy egy speciális könyvtár. 212 00:12:52,650 --> 00:12:56,460 A mi esetünkben azt tartalmazza a CS50 könyvtárban, hogy mi férhetnek hozzá bool. 213 00:12:56,460 --> 00:12:59,860 De a 18 vezetéken, akkor úgy tűnik, hogy egy logikai érték van az úgynevezett hálás. 214 00:12:59,860 --> 00:13:02,190 Tudtam volna nevezte ezt semmit, de én nevezte hálás 215 00:13:02,190 --> 00:13:04,750 csak azért, hogy a fajta közvetíteni néhány szemantikai jelentését. 216 00:13:04,750 --> 00:13:07,700 Így kezdetben on line 18 vagyok nyilvánvalóan nem hálás 217 00:13:07,700 --> 00:13:12,230 mert a Logikai érték hálás inicializálódik false sorban 18. 218 00:13:12,230 --> 00:13:16,500 És akkor úgy tűnik, hogy mit tettem itt sorok 21-től 23 219 00:13:16,500 --> 00:13:19,200 A Már csak ilyen újraírt én logika. 220 00:13:19,200 --> 00:13:26,100 Tehát nem funkcionálisan eltérő, de a 22 vezetéken most ellenőrizze, hogy a int a felhasználó által biztosított 221 00:13:26,100 --> 00:13:31,360 nagyobb, mint 0, akkor egyszerűen módosítsa az értéket a hálás igaz. 222 00:13:31,360 --> 00:13:35,590 És miért ne tenném? Mivel a sorban 25, látszólag megyek, hogy ellenőrizze a feltételt. 223 00:13:35,590 --> 00:13:39,760 Ehhez hurok miközben hálás hamis. 224 00:13:39,760 --> 00:13:42,960 Szóval javasolta ezt alternatívájaként 1-es verzió 225 00:13:42,960 --> 00:13:47,050 mert ez legalább egy kicsit intuitív talán ez egy kicsit földelt angolul. 226 00:13:47,050 --> 00:13:51,980 Szóval tegye a következőket, miközben te nem hálás, vagy pedig hálás hamis. 227 00:13:51,980 --> 00:13:56,220 És ezúttal is úgy tűnik, nem érdekel, emlékezni, amit a felhasználó beírt 228 00:13:56,220 --> 00:14:00,050 mert a nyilatkozat nincs változó n, így valójában, egy kis fehér hazugság van. 229 00:14:00,050 --> 00:14:03,290 >> Funkcionálisan a program egy kicsit más, ha eljutunk a végére 230 00:14:03,290 --> 00:14:04,960 mert én nem emlékszem, mi n. 231 00:14:04,960 --> 00:14:09,120 De azt akartam bizonyítani, itt is, hogy bár láttuk getInt 232 00:14:09,120 --> 00:14:13,780 és getString használ a jobb oldali egyenlőségjel eddig 233 00:14:13,780 --> 00:14:17,310 annak érdekében, hogy emlékszünk az érték, technikailag, ez nem feltétlenül szükséges. 234 00:14:17,310 --> 00:14:20,290 Ha bármilyen okból, csak nem érdekel, hogy mentse az érték, 235 00:14:20,290 --> 00:14:25,540 csak azt, hogy ellenőrizze az értéket, észre, hogy egyszerűen írni ezt getInt, 236 00:14:25,540 --> 00:14:27,320 nyílt paren, közeli paren. 237 00:14:27,320 --> 00:14:30,570 Ez a funkció megy vissza értéket, ahogy már mondtam. 238 00:14:30,570 --> 00:14:32,220 Ez lesz, hogy ismét egy int. 239 00:14:32,220 --> 00:14:34,460 És így, ha úgy gondolja, szellemileg ezen történik, 240 00:14:34,460 --> 00:14:38,190 amikor azt írja, 99, getInt visszaadja a szám 99, 241 00:14:38,190 --> 00:14:41,840 és így fogalmilag, ez mintha a kód valójában ezt. 242 00:14:41,840 --> 00:14:45,950 Tehát, ha 99 valóban nagyobb, mint 0, akkor hálás lesz igaz, 243 00:14:45,950 --> 00:14:50,810 majd 25 vezetéken rájön ó, készen vagyunk, mert én vagyok most hálás, 244 00:14:50,810 --> 00:14:53,970 és a 26 vezetéken, egyszerűen azt mondja: "Thanks for the pozitív egész!" 245 00:14:53,970 --> 00:14:55,960 bármi is történt, hogy legyen. 246 00:14:55,960 --> 00:14:59,140 Most csináljuk enyhe szintaktikai cukor van, hogy úgy mondjam. 247 00:14:59,140 --> 00:15:04,670 Lássuk, ha tudjuk megtisztítani ebben a sorban a 25. A harmadik és egyben utolsó variáns positive3. 248 00:15:04,670 --> 00:15:13,600 >> Figyeljük meg az egyetlen különbség az, hogy milyen kódsort? >> [Hallgató] 25. >> [Malan] Igen, 25. 249 00:15:13,600 --> 00:15:17,680 És most már nem is láttam ezt a trükköt csak még, de nem látja a felkiáltójel hétfőn, 250 00:15:17,680 --> 00:15:21,070 ami azt jelzi, mi? >> [Hallgató] Nem. >> Nem vagy tagadása. 251 00:15:21,070 --> 00:15:23,510 Tehát hogy egy logikai érték, és fordítsa az értékét. 252 00:15:23,510 --> 00:15:25,810 Igaz lesz hamis, hamis lesz igaz. 253 00:15:25,810 --> 00:15:30,420 Szóval, azt javaslom, még egy kicsit intuitív módon, az írás a kód 254 00:15:30,420 --> 00:15:33,430 mert még mindig inicializálni hálás hamis, még mindig végezze el az alábbi, 255 00:15:33,430 --> 00:15:36,010 Én meg hálás igaz, ha eljön az ideje, 256 00:15:36,010 --> 00:15:40,880 de most már tényleg csak lefordítani ezt a kódot szóban balról jobbra, 257 00:15:40,880 --> 00:15:45,630 while (! hálás), mert a durranó vagy felkiáltójel jelöli fogalma nem 258 00:15:45,630 --> 00:15:47,580 így amíg nem hálás. 259 00:15:47,580 --> 00:15:49,900 Tehát újra, még nem vezetett be új fogalmakat per se. 260 00:15:49,900 --> 00:15:53,730 Beszéltünk Logikai vissza, amikor mi játszottunk Scratch, 261 00:15:53,730 --> 00:15:56,720 de észre most már csak kezdje el írni a kódot a számos különböző módon. 262 00:15:56,720 --> 00:16:01,060 Így különösen a pset1 ha valami küzd, hogy kitaláljuk, az utat, hogy írjon néhány program, 263 00:16:01,060 --> 00:16:04,340 esély te vagy a szerencse, mert nem lehet tetszőleges számú megoldás 264 00:16:04,340 --> 00:16:06,110 hogy történhet rajta. 265 00:16:06,110 --> 00:16:10,500 Például, ez mindössze 3 még a legegyszerűbb program. Rendben van. 266 00:16:10,500 --> 00:16:14,200 És most felidézni hétfőn elindultunk ezzel tudomásul visszatérési értékeket. 267 00:16:14,200 --> 00:16:18,450 Így a legelső alkalom, hogy írt egy programot, amely nem csak azt fő; 268 00:16:18,450 --> 00:16:22,550 is megvan a saját egyedi funkció, hogy én írtam ide. 269 00:16:22,550 --> 00:16:26,810 Így sor 31 keresztül 34 I megadtam egy kocka funkciót. 270 00:16:26,810 --> 00:16:30,240 Ez nem bonyolult. Ez csak egy * a * a jelen ügyben. 271 00:16:30,240 --> 00:16:34,750 De mi a fontos benne, hogy elviszem input formájában 272 00:16:34,750 --> 00:16:39,180 és én vissza kimeneten a formájában, a * a * a. 273 00:16:39,180 --> 00:16:43,560 Szóval most megvan a képessége, ugyanúgy, mint régen a prinf egyedül, 274 00:16:43,560 --> 00:16:47,240 hívni ezt a funkciót hívja a kocka funkciót. 275 00:16:47,240 --> 00:16:51,970 >> És a kocka függvény némi bemenet, és a kocka függvény valamilyen kimenetet. 276 00:16:51,970 --> 00:16:56,960 Ezzel szemben printf csináltál valamit. 277 00:16:56,960 --> 00:17:00,840 Ez nem adott vissza semmit, hogy mi törődött, bár mint egy félre ez nem ad vissza értéket; 278 00:17:00,840 --> 00:17:03,110 csak általában figyelmen kívül hagyja. 279 00:17:03,110 --> 00:17:06,510 Printf csináltam valamit. Ez volt a mellékhatása nyomtatás a képernyőn. 280 00:17:06,510 --> 00:17:11,770 Ezzel szemben itt van a kocka funkció, amely tulajdonképpen visszatér valamit. 281 00:17:11,770 --> 00:17:15,520 Így azok ismerik ezt, ez egy meglehetősen egyszerű ötlet. 282 00:17:15,520 --> 00:17:19,640 De azok számára, kevésbé ismerik ezt az ötletet az elhaladó be-és kimenetek, hogy újra, 283 00:17:19,640 --> 00:17:21,950 próbáljuk csak valami szuper egyszerű. 284 00:17:21,950 --> 00:17:25,490 Van valaki kényelmes jön a színpadra röviden? 285 00:17:25,490 --> 00:17:28,040 Van, hogy kényelmes a kamera akkor is. Igen? Oké. 286 00:17:28,040 --> 00:17:31,240 Mi a neve? >> [Hallgató] Ken. >> Ken. Rendben van. Ken, gyere fel. 287 00:17:31,240 --> 00:17:35,050 Ken lesz függvénye a fajta itt. 288 00:17:35,050 --> 00:17:38,720 Menjünk előre, és ezt. Menjünk egy kicsit díszes. 289 00:17:38,720 --> 00:17:42,260 Örülök, hogy megismerhetem. Üdvözöljük a középpontban. Rendben van. 290 00:17:42,260 --> 00:17:46,640 Nézzük meg ezt a gombot nyomja meg itt. Rendben van. 291 00:17:46,640 --> 00:17:49,820 Tehát itt van egy modern palatábla, 292 00:17:49,820 --> 00:17:53,470 és mi vagyok, az a fő funkciója, például 293 00:17:53,470 --> 00:17:56,460 és én nem egy iPad a kezemben. 294 00:17:56,460 --> 00:17:59,710 >> Nem igazán emlékszem, hogyan kell - Nos, nem tudok mondani. 295 00:17:59,710 --> 00:18:02,480 Nem igazán jó kézírás, 296 00:18:02,480 --> 00:18:05,520 így tehát azt akarom, hogy nyomtatni valamit a képernyőn nekem. 297 00:18:05,520 --> 00:18:12,040 Én volt a fő program, és megyek, hogy mondod ezt 298 00:18:12,040 --> 00:18:16,720 írásban, hogy az én csirke semmiből, majd tompított neked egy bemenet. 299 00:18:16,720 --> 00:18:20,400 Szóval buta bár ez a gyakorlat, a fogalom a funkciók és a hívás funkció 300 00:18:20,400 --> 00:18:22,400 és a visszatérő függvény tényleg csapódik le, hogy ezt. 301 00:18:22,400 --> 00:18:26,260 I am Main, az imént írt printf, idézet-unquote valamit a képernyőn, 302 00:18:26,260 --> 00:18:29,110 Én fut a program, és amint lesz printf nevezik, 303 00:18:29,110 --> 00:18:32,880 vesz egy argumentummal vagy egy paraméter néha dupla idézőjelek közé. 304 00:18:32,880 --> 00:18:35,880 Itt van ez az érvelés. Én beengedné Ken. 305 00:18:35,880 --> 00:18:39,020 Ő egy fekete doboz írásbeli néhány néhány évvel ezelőtt 306 00:18:39,020 --> 00:18:41,510 hogy úgy tűnik, csak tudja, hogyan kell nyomtatni a dolgokat a képernyőn. 307 00:18:41,510 --> 00:18:43,150 Szóval végre. 308 00:18:49,280 --> 00:18:51,280 Ez nem rossz. Nagyon jó. 309 00:18:51,280 --> 00:18:55,510 Tehát most Ken történik végrehajtó. Vajon kell, hogy adja nekem valamit vissza? 310 00:18:55,510 --> 00:18:57,470 Nem láttunk eddig. 311 00:18:57,470 --> 00:19:00,460 Ismét printf jelent valójában vissza a szám, de fogunk figyelmen kívül hagyni, hogy a most 312 00:19:00,460 --> 00:19:03,470 mert sosem használta. Szóval ez azt Ken. 313 00:19:03,470 --> 00:19:08,580 És most fő veszi át az irányítást a programot újra 314 00:19:08,580 --> 00:19:11,060 mert ez a kódsor, printf, kész végrehajtó. 315 00:19:11,060 --> 00:19:14,050 És megyünk mi módon végrehajtó bármely más vonalak vannak. 316 00:19:14,050 --> 00:19:17,320 Tehát most próbáljunk egy kicsit más példát. 317 00:19:17,320 --> 00:19:24,940 Ezúttal itt nézzük először törölje a képernyőt, és ez alkalommal mi intézzük a kocka funkció 318 00:19:24,940 --> 00:19:27,080 de ez alkalommal, azt várom a kimeneti érték. 319 00:19:27,080 --> 00:19:29,180 >> Akkor menjünk előre, és ezt. 320 00:19:29,180 --> 00:19:35,790 Most van egy sor kódot, hogy azt mondja x jelentkeznek kocka x. 321 00:19:41,370 --> 00:19:46,370 A kódsor, visszahívás, így néz ki: x = cube (x); 322 00:19:46,370 --> 00:19:50,930 Hogy fog ez működni? Menjünk előre, és kapsz egy fehér képernyő újra. 323 00:19:50,930 --> 00:19:54,070 Fogok írni, most az x értékét, 324 00:19:54,070 --> 00:20:01,400 ami ebben a pillanatban történik, hogy, mondjuk, 2, hogy ez egyszerű. 325 00:20:01,400 --> 00:20:06,150 Írtam le egy darab papírra értéke 2, ami az én értéke x. 326 00:20:06,150 --> 00:20:10,920 Adom, hogy Ken. >> És én csak annyit írj a válasz? >> Igen, nézzük csak írni a választ. 327 00:20:12,760 --> 00:20:18,940 Oké. És most vissza kell térnie nekem valamit. Tökéletes. Szép Segue. 328 00:20:18,940 --> 00:20:23,120 Tehát most átadja vissza az értéke 8 ebben az esetben, és mit tegyek vele? 329 00:20:23,120 --> 00:20:28,250 Valójában - lássuk, hogy ezt a jogot. Mit fogok csinálni vele? 330 00:20:28,250 --> 00:20:33,440 Most fogom venni ezt az értéket, és valójában tárolja ugyanezen bitek a memóriában. 331 00:20:33,440 --> 00:20:35,170 De észre, én vagyok a fajta küzd itt. 332 00:20:35,170 --> 00:20:38,210 Én egy kicsit zavaros, mert ha tudom valójában írni az x értékét, 333 00:20:38,210 --> 00:20:43,150 mert amit épp most tett fizikailag kéz Ken egy darab papírt, hogy már a 2 értéket, 334 00:20:43,150 --> 00:20:46,590 amely x, és valóban, pontosan ez az, ami történt. 335 00:20:46,590 --> 00:20:50,210 Így kiderül, hogy mikor hívja a funkciót és adja át egy érv 336 00:20:50,210 --> 00:20:53,290 mint a hello, világ vagy át egy érv, mint a 2, 337 00:20:53,290 --> 00:20:57,110 általában, te halad egy példányát ezt az érvelést. 338 00:20:57,110 --> 00:21:00,730 És ahogy írtam le a 2-es szám van, és átnyújtotta Ken, 339 00:21:00,730 --> 00:21:04,720 azt kell jelentenie, hogy még mindig van egy példánya a 2 értéket valahol 340 00:21:04,720 --> 00:21:08,890 mert valóban, most, hogy kaptam vissza az érték 8, azt kell, hogy menjen vissza a RAM-ban 341 00:21:08,890 --> 00:21:12,130 és ténylegesen írd le 8, ahol egyszer volt a 2-es szám. 342 00:21:12,130 --> 00:21:16,950 Szóval vizuálisan, emlékezz erre fogalma halad, szó szerint, egy példányát az értéket. 343 00:21:16,950 --> 00:21:20,780 >> Ken teszi a dolgát, a kezek vissza valamit - ebben az esetben az érték, mint a 8 - 344 00:21:20,780 --> 00:21:24,980 majd tennem kell valamit, ez az érték, ha szeretném megtartani körül. 345 00:21:24,980 --> 00:21:29,650 Szóval mindez vissza fog térni, hogy túlságosan is ismerős előtt hosszú. 346 00:21:29,650 --> 00:21:34,920 Nagyon köszönöm, hogy erre a demo itt, Ken. [Taps] 347 00:21:34,920 --> 00:21:36,920 Nagyon jól sikerült. 348 00:21:36,920 --> 00:21:42,690 Lássuk, hogyan lehet, hogy végül kapcsolódik néhány függvény hív, hogy mi már itt. 349 00:21:42,690 --> 00:21:47,910 Hadd menjek előre, és visz minket vissza a kocka példának. 350 00:21:47,910 --> 00:21:53,300 Figyeljük meg, hogy ha azt akarjuk, hogy valóban elkezdené szedni ezt a további 351 00:21:53,300 --> 00:21:57,570 megyünk kell szem előtt azt a tényt, hogy az x szám, ami a kiszabott itt 352 00:21:57,570 --> 00:22:01,530 más, mint amit ez ténylegesen átadott a funkciót. 353 00:22:01,530 --> 00:22:05,880 Szóval ez megint át a példányt fog válni meglehetősen valaminek megfelelő egy pillanat. 354 00:22:05,880 --> 00:22:09,580 Vessünk egy pillantást a valamit, ami nem egészen helyes működése még. 355 00:22:09,580 --> 00:22:13,250 Én megyek előre, és nyissa 1/3 buggy például, amely hibás, a természet, 356 00:22:13,250 --> 00:22:18,550 , és ez az úgynevezett buggy3 és végrehajtja a csere funkciót. 357 00:22:18,550 --> 00:22:25,110 Itt van egy fő funkciója, amely x és y önkényesen inicializálódik az 1. és 2., illetve. 358 00:22:25,110 --> 00:22:27,700 Jól jönne getInt, de csak kell egy egyszerű gyakorlat, 359 00:22:27,700 --> 00:22:30,170 így nehéz kódolt az 1 és 2. 360 00:22:30,170 --> 00:22:35,340 Sorokban 21. és 22., mi látszólag kinyomtatja x és y, 1. soronként. 361 00:22:35,340 --> 00:22:39,720 Aztán a 23, azt állítják, én csere ezeket az értékeket, pont, pont, pont. 362 00:22:39,720 --> 00:22:44,170 Úgy tűnik, hívja a funkciót a 24 vezetéken úgynevezett swap-vevő 2 érveket. 363 00:22:44,170 --> 00:22:48,300 Ez teljesen legális a funkciókat, hogy 2 érveket. Láttuk printf csináld már. 364 00:22:48,300 --> 00:22:51,830 >> Szóval csere látszólag úgy x és y, és ahogy a neve is sugallja, 365 00:22:51,830 --> 00:22:54,670 Remélem, hogy ez fog cserélni ezeket a 2 értékeket. 366 00:22:54,670 --> 00:23:00,090 Így aztán azt állítják on line 25 "Megcserélvelehetőség!" és én újranyomtatása x és y 367 00:23:00,090 --> 00:23:03,070 feltételezve, hogy ők már valóban cserélték. 368 00:23:03,070 --> 00:23:06,080 De ha tényleg futtatni ezt a programot - hadd nyit egy terminál ablakot, 369 00:23:06,080 --> 00:23:09,860 hadd buggy3 - ahogy a neve is sugallja, ez nem lesz jó vége 370 00:23:09,860 --> 00:23:15,770 mert amikor Enter, észreveheti, hogy x 1, y 2, 371 00:23:15,770 --> 00:23:19,420 és mégis, az a program végén, még mindig, valójában, az ugyanaz. 372 00:23:19,420 --> 00:23:22,960 Tehát alapuló demonstrációs most Ken, mi folyik itt valójában? 373 00:23:22,960 --> 00:23:28,710 Nézzük belevetik magukat a csere funkciót. Ez szuper rövid. Ez csak néhány sornyi kódot hosszú. 374 00:23:28,710 --> 00:23:34,520 De mi az alapvető probléma alapuló egyszerű történetet mondta ki itt Ken? 375 00:23:34,520 --> 00:23:36,670 Miért csere törve? 376 00:23:36,670 --> 00:23:39,660 [Hallgató] Te tárolására egy másolatot, nem a változó. 377 00:23:39,660 --> 00:23:43,980 Pontosan. Mi tárolni egy példányt, nem a változó magát. 378 00:23:43,980 --> 00:23:47,170 Más szóval, a csere nyilván úgy 2 érvek, int, 379 00:23:47,170 --> 00:23:49,370 és ez önkényesen hívják a és b, 380 00:23:49,370 --> 00:23:54,420 és fel itt, amit átadott x és y, amelyek rendre 1 és 2, 381 00:23:54,420 --> 00:23:58,770 de én nem szó szerint halad x, én nem szó szerint halad y, 382 00:23:58,770 --> 00:24:01,450 Én halad egy példányát x és y egy példányát. 383 00:24:01,450 --> 00:24:04,510 Ez majdnem olyan, mintha te illesztenie swap- 384 00:24:04,510 --> 00:24:07,810 az értékeket, amelyeket szeretné, hogy valóban manipulálni. 385 00:24:07,810 --> 00:24:14,480 Tehát, ha ez a helyzet, amikor a program kezdete végrehajtó 35 egyenes, majd 36, 386 00:24:14,480 --> 00:24:18,650 amikor megkapom a vonal 37, ezen a ponton a történet, mi az értéke? 387 00:24:21,040 --> 00:24:25,050 Ezen a ponton a történet, 37. sor, mi az értéke ezen a ponton? >> [Hallgató] 1. 388 00:24:25,050 --> 00:24:29,280 [Malan] Meg kell csak 1, van, mert x-ben született az első érv, 389 00:24:29,280 --> 00:24:33,080 és ez a funkció csak önkényesen hívja az első argumentum a. 390 00:24:33,080 --> 00:24:38,200 Hasonlóképpen Y A második érv, és ez csak önkényesen hívja a második érvet b. 391 00:24:38,200 --> 00:24:40,990 >> Ez a kettősség tulajdonképpen meglehetősen egyszerűen magyarázta. Gondolj bele. 392 00:24:40,990 --> 00:24:43,320 Egyikünk sem találkozott az a személy, aki ezt írta printf, 393 00:24:43,320 --> 00:24:50,770 így biztosan, ő nem tudja, mi a változók 30 évvel később lesznek hívják. 394 00:24:50,770 --> 00:24:56,650 Tehát ott kell, hogy legyen a különbséget, amit úgy hívnak változókat függvények írsz 395 00:24:56,650 --> 00:25:02,080 és az, amit úgy hívnak változókat függvények hívsz vagy használ. 396 00:25:02,080 --> 00:25:05,340 Más szóval, írtam változókat az x és y, 397 00:25:05,340 --> 00:25:08,890 de ha valaki más írt a csere funkciót, ő biztosan nem tudja 398 00:25:08,890 --> 00:25:10,690 mi a változók fognak hívják, 399 00:25:10,690 --> 00:25:13,830 így észre, hogy ez miért van ez a kettősség a neveket. 400 00:25:13,830 --> 00:25:16,750 Technikailag tehettem ezt véletlen, 401 00:25:16,750 --> 00:25:20,080 de akkor is telt el, mint példányban. 402 00:25:20,080 --> 00:25:23,650 Ez csak egy tiszta véletlen esztétikailag ha ez a személy, aki írta csere 403 00:25:23,650 --> 00:25:26,150 használta ugyanazt a nevet. 404 00:25:26,150 --> 00:25:32,370 Tehát ezen a ponton a történet, 37. sor, a 1, b 2, és most folytassa cserélni őket. 405 00:25:32,370 --> 00:25:34,900 Először is, hadd ténylegesen ezt sokkal egyszerűbben. 406 00:25:34,900 --> 00:25:36,690 Én nem tudom, mi a 3 sornyi kódot csinál. 407 00:25:36,690 --> 00:25:41,210 Hadd tegye a következőket: b = a, a = b; tenni. 408 00:25:41,210 --> 00:25:44,690 Miért van ez törött, logikusan? 409 00:25:46,490 --> 00:25:48,900 Ez a fajta az intuitív dolog, igaz? 410 00:25:48,900 --> 00:25:52,560 Így egy nek az b és b válik, 411 00:25:52,560 --> 00:25:57,730 de a probléma az, hogy amint a 37. sor végrehajtja, mi az értéke a és b? 412 00:25:57,730 --> 00:26:03,410 Ugyanaz, 1, azért van, mert ütközés, hogy úgy mondjam, már megváltoztatta b, hogy megegyezzen a. 413 00:26:03,410 --> 00:26:08,890 Tehát, ha 37. sor teljesítette, ez remek, most már 2 példányban az 1-es szám 414 00:26:08,890 --> 00:26:13,350 belül ezt a funkciót, így aztán amikor azt mondod, sorban 38 a = b, 415 00:26:13,350 --> 00:26:17,640 te milyen csavaros, mert csak most rendel 1-1. 416 00:26:17,640 --> 00:26:20,580 Már a fajta elvesztette értéket törődött. 417 00:26:20,580 --> 00:26:23,220 Tehát az eredeti változata, észre amit tettem. 418 00:26:23,220 --> 00:26:26,850 Én inkább volt egy harmadik sor kódot úgy nézett ki, mint ez. 419 00:26:26,850 --> 00:26:28,580 Kijelentem, ideiglenes változót. 420 00:26:28,580 --> 00:26:32,170 >> Tmp egy nagyon gyakori név egy átmeneti változó, és ez egy int 421 00:26:32,170 --> 00:26:34,580 mert, hogy megfeleljen, amit szeretnénk, hogy egy másolatot. 422 00:26:34,580 --> 00:26:39,770 Tárolom másolata belsejében tmp, tehát egyszer sor 37 hajtott végre, 423 00:26:39,770 --> 00:26:45,860 az értéke is - gyors józanság check - 1, értéke b 2, 424 00:26:45,860 --> 00:26:48,970 értéke és a tmp is 1. 425 00:26:48,970 --> 00:26:52,060 Szóval most végre sor 38. 426 00:26:52,060 --> 00:27:00,540 Miután a 38 végrehajt egy veszi értékének b. És B 2, így a most 2. 427 00:27:00,540 --> 00:27:05,210 Tehát ezen a pontján a történet, a értéke 2, b értéke 2, és a TMP jelentése 1, 428 00:27:05,210 --> 00:27:11,060 így most logikusan, tudjuk csak puff tmp értéke a b és készen vagyunk. 429 00:27:11,060 --> 00:27:12,800 Így már megoldotta ezt a problémát. 430 00:27:12,800 --> 00:27:17,720 Sajnos, amikor fut a program ebben a formában, akkor valójában nem cserélni semmilyen értékeket. 431 00:27:17,720 --> 00:27:20,100 De egyértelmű, miért? 432 00:27:23,660 --> 00:27:26,450 Én rögzíteni a logikai probléma, csak egy perccel ezelőtt, 433 00:27:26,450 --> 00:27:31,020 de a lényeg, ha futtatni ezt a programot, az x és y változatlan marad 434 00:27:31,020 --> 00:27:33,310 végére a program végrehajtását. 435 00:27:33,310 --> 00:27:37,220 [Hallhatatlan diák megjegyzése] >> Mi már nem tért vissza semmit annak érdekében, hogy ez igaz. 436 00:27:37,220 --> 00:27:39,670 De kiderült, hogy van egy kis probléma itt, mert eddig, 437 00:27:39,670 --> 00:27:44,170 az egyetlen dolog, amit sikerült visszatérni az egy dolog, és ez a korlátozás a C. 438 00:27:44,170 --> 00:27:49,070 Egyszerre csak vissza igazán egy értéket, mely esetben én vagyok a fajta itt ragadtunk 439 00:27:49,070 --> 00:27:53,310 mert tudtam vissza az új érték az x, illetve tudtam vissza az új érték az y, 440 00:27:53,310 --> 00:27:55,190 de azt akarom, mindkettő vissza. 441 00:27:55,190 --> 00:27:58,650 Tehát visszatérve nem az egyszerű megoldás van. 442 00:27:58,650 --> 00:28:01,710 De a probléma alapvetően az oka? Mit értünk tulajdonképpen elcserélték? 443 00:28:01,710 --> 00:28:04,190 [Diák] a és b. >> A és b. 444 00:28:04,190 --> 00:28:08,230 De a és b másolatai x és y, ami azt jelenti, hogy csak tette mind ennek a munkának, 445 00:28:08,230 --> 00:28:11,650 mi csak töltött 3 perc alatt, beszél a swap funkciót, és mind a 3 ezeket a változókat, 446 00:28:11,650 --> 00:28:15,420 és ez nagyszerű, tökéletesen helyes elszigetelten, 447 00:28:15,420 --> 00:28:20,740 de a és b hatáskörét egyetlen nyelven ezeket a sorokat itt. 448 00:28:20,740 --> 00:28:24,790 >> Szóval, mint egy for ciklus, ha kijelentem integer i belül a hurok, 449 00:28:24,790 --> 00:28:28,760 hasonlóképpen, ha nyilvánításáról és b belsejében olyan funkció, amit írt, 450 00:28:28,760 --> 00:28:33,320 ők csak akkor érvényes belül ezt a funkciót, ami azt jelenti, amint csere történik végrehajtó 451 00:28:33,320 --> 00:28:38,470 és mi megy a 24 vezetéken a 25 vezetéken, X és Y jelentése nem változott. 452 00:28:38,470 --> 00:28:42,790 Te csak elpazarolt egy csomó időt cseréje példányban változók. 453 00:28:42,790 --> 00:28:47,010 Így kiderül, hogy a megoldást, ez valójában nem nyilvánvaló. 454 00:28:47,010 --> 00:28:50,670 Ez nem teljesen elegendő visszatérni értékeket, mert csak akkor tudjuk vissza 1 érték, 455 00:28:50,670 --> 00:28:53,470 és én tényleg szeretnék cserélni mind x és y ugyanabban az időben, 456 00:28:53,470 --> 00:28:55,210 úgyhogy kell majd még visszatérünk erre. 457 00:28:55,210 --> 00:29:01,020 De most észre, hogy a kérdés alapvetően abból a tényből ered, hogy az a és b másolatok 458 00:29:01,020 --> 00:29:03,630 és ezek a saját körét. 459 00:29:03,630 --> 00:29:05,050 Próbáljuk meg megoldani ezt valamilyen módon. 460 00:29:05,050 --> 00:29:11,250 Hadd ténylegesen lépjünk vissza, és nyissa fel, mondjuk, a negyedik változatot e, buggy4. 461 00:29:11,250 --> 00:29:13,370 Mi a helyzet ezzel? 462 00:29:13,370 --> 00:29:17,810 Ez egy hasonló, de egyszerűbb probléma, hogy nézd meg, mielőtt veszünk egy stab a megoldására. 463 00:29:17,810 --> 00:29:24,190 Ez a program az úgynevezett növedék, és ez nyilvánvalóan inicializálja az x értéke 1-et a 18 vezetéken. 464 00:29:24,190 --> 00:29:28,150 Aztán azt állítják, x 1, Aztán azt állítják: "Inkrementálás ..." 465 00:29:28,150 --> 00:29:33,730 Én majd hívja növekmény, de aztán a vonalak 22 és 23, azt állítják, ez már eggyel, 466 00:29:33,730 --> 00:29:40,220 Azt állítják, x ma bármi is az - 2, feltehetőleg - de ez a program hibás. 467 00:29:40,220 --> 00:29:42,610 Mi a baj? 468 00:29:43,440 --> 00:29:50,160 Igen. >> [Hallhatatlan tanulói válasz] >> Pontosan. 469 00:29:50,160 --> 00:29:52,490 Tehát x nyilvánították, nyilvánvalóan on line 18. 470 00:29:52,490 --> 00:29:54,700 Ez a belső fontosabb a kapcsos zárójeleket. 471 00:29:54,700 --> 00:29:58,440 Tehát az egyszerű válasz az, hogy míg x létezik itt, 472 00:29:58,440 --> 00:30:03,930 nem létezik a 32 vezetéken, így ez a program valójában nem is összeállít. 473 00:30:03,930 --> 00:30:07,940 A fordító, amikor megpróbálom összeállításakor ezt a kódot fog kiabálni velem 474 00:30:07,940 --> 00:30:14,100 néhány be nem jelentett azonosítója vagy valami ebben az értelemben. Tény, hogy próbáljuk meg. 475 00:30:14,100 --> 00:30:18,470 Ez teszi buggy4. Ott van. 476 00:30:18,470 --> 00:30:22,110 A be nem jelentett azonosító "x" sorban 32. 477 00:30:22,110 --> 00:30:25,580 És valóban, legyünk kifejezettebben ma itt, hogy ez hasznos 478 00:30:25,580 --> 00:30:27,580 A nyitvatartási és otthon. 479 00:30:27,580 --> 00:30:29,300 >> Figyelje meg, hogy ez egy kicsit rejtélyesen írva. 480 00:30:29,300 --> 00:30:37,270 De az a tény, hogy a csengés már kiabált nekünk, mondván buggy4.c: 32:5, valóban hasznos. 481 00:30:37,270 --> 00:30:42,050 Ez azt jelenti, hogy a hiba a vonalon a 32 karakter 5-helyzetben. 482 00:30:42,050 --> 00:30:46,700 Így 1, 2, 3, 4, 5. Ez, ugyanis, ahol a probléma. 483 00:30:46,700 --> 00:30:49,790 És azt is, is tartsa szem előtt, a munkaidőn és otthoni Szerencsés vagyok itt. 484 00:30:49,790 --> 00:30:52,990 Van egy hibát. Ez lesz viszonylag könnyen kijavítani. 485 00:30:52,990 --> 00:30:55,990 De ha egy egész képernyő teljes elsöprő hibaüzenetek, 486 00:30:55,990 --> 00:31:00,330 again észre, hogy a legalsó lehetne csak tüneti a legfelső 1. 487 00:31:00,330 --> 00:31:03,450 Tehát mindig üldözőbe le a hibákat fentről lefelé 488 00:31:03,450 --> 00:31:05,820 mert lehet, hogy csak egy lánc hatása 489 00:31:05,820 --> 00:31:09,240 mely arra utal, van sokkal több problémát, mint amennyit ténylegesen. 490 00:31:09,240 --> 00:31:15,150 Szóval, hogyan tudnánk kijavítani ezt, ha a cél az, hogy növelni x? >> [Hallgató] Make x globális. 491 00:31:15,150 --> 00:31:17,060 Oké, tudjuk, hogy x globális. 492 00:31:17,060 --> 00:31:20,480 Vegyük a parancsikont, hogy figyelmeztetett korábban, de a fene, akkor csak kell egy gyors fix, 493 00:31:20,480 --> 00:31:25,730 így mondjuk int x itt. Ez teszi x globális. 494 00:31:25,730 --> 00:31:31,800 Tehát most fő fér hozzá, és növekmény férhet hozzá, 495 00:31:31,800 --> 00:31:34,110 és ezért hadd menjen előre, és fordítsd ezt most. 496 00:31:34,110 --> 00:31:37,630 Győződjön buggy4, Enter. Úgy tűnik összeállításához most. 497 00:31:37,630 --> 00:31:41,230 Fussunk buggy4. És úgy tűnik, hogy valóban működik. 498 00:31:41,230 --> 00:31:45,150 Ez egy ilyen dolog, hogy ez tedd, amit mondok, és nem, mint én, 499 00:31:45,150 --> 00:31:47,010 ahogy már most kész van, mert általában 500 00:31:47,010 --> 00:31:50,440 a programokat fog kapni sokkal érdekesebb, és sokkal hosszabb, mint ez, 501 00:31:50,440 --> 00:31:56,390 és ha a megoldás az élet problémák csak fel az összes változót, a tetején a fájl, 502 00:31:56,390 --> 00:31:59,690 nagyon gyorsan nem kap programok horrifically nehéz kezelni. 503 00:31:59,690 --> 00:32:02,190 Egyre nehezebb kitalálni új változó nevét, 504 00:32:02,190 --> 00:32:05,240 egyre nehezebb megérteni, hogy mit változó mit csinál, 505 00:32:05,240 --> 00:32:08,460 és így általában, ez nem egy jó megoldás. 506 00:32:08,460 --> 00:32:10,030 Szóval ezt jobban. 507 00:32:10,030 --> 00:32:12,160 Nem akarjuk, hogy egy globális változót itt. 508 00:32:12,160 --> 00:32:16,240 >> Én szeretnék növelni x, úgyhogy tudtam nyilvánvalóan - 509 00:32:16,240 --> 00:32:18,670 a végén a nap, ez a fajta egy buta történet, mert mi csak ezt - 510 00:32:18,670 --> 00:32:24,450 de ha nem tudtam arról, hogy ez az üzemeltető vagy én nem engedélyezték, hogy változtassa meg a fő önmagában 511 00:32:24,450 --> 00:32:30,730 hogy mást tudnék végre Ken ide, ezúttal nem a kocka, hanem növelni? 512 00:32:31,380 --> 00:32:33,190 Hogyan módosítható ez a dolog itt? Igen. 513 00:32:33,190 --> 00:32:38,480 [Hallgató] Pass x-ben, majd vissza [hallhatatlan] >> Oké, jó. 514 00:32:38,480 --> 00:32:41,900 Akkor miért nem azt át x-ben, majd pedig vissza, 515 00:32:41,900 --> 00:32:44,870 miért nem én csak vissza x + 1. 516 00:32:44,870 --> 00:32:47,710 Még egy pár dolgot meg kell változtatni itt. Én vagyok a jó úton halad. 517 00:32:47,710 --> 00:32:49,770 Mit kell tennem, hogy csípés? Valaki más. Igen. 518 00:32:49,770 --> 00:32:51,740 [Hallhatatlan hallgatói válasz] 519 00:32:51,740 --> 00:32:54,730 Meg kell változtatni a visszatérési típus increment mert nem érvényteleníti. 520 00:32:54,730 --> 00:32:57,780 Void úton semmit sem vissza, de nyilvánvalóan most is az, 521 00:32:57,780 --> 00:32:59,830 így ezt meg kell változtatnia, hogy - >> [hallgató] int. 522 00:32:59,830 --> 00:33:02,740 int hogy konzisztens legyen az bármilyen Én tényleg visszatér. 523 00:33:02,740 --> 00:33:05,180 Most valami mást még hibás itt van. Igen. 524 00:33:05,180 --> 00:33:08,400 [Hallhatatlan diák válasza] >> [Malan] Szóval kell növelni x? 525 00:33:08,400 --> 00:33:12,080 [Hallhatatlan diák válasza] >> [Malan] Ah, ezért kell átadni x. 526 00:33:12,080 --> 00:33:16,660 Szóval kell, hogy ezt itt. >> [Hallhatatlan hallgató comment] 527 00:33:16,660 --> 00:33:20,050 [Malan] Szóval a prototípus, meg kell változtatni ezt itt. 528 00:33:20,050 --> 00:33:22,930 Tehát ez kell válnia int, ennek vált - 529 00:33:22,930 --> 00:33:25,620 hmm, én valójában egy bug idelent. Nézzük erősít ez egy első. 530 00:33:25,620 --> 00:33:29,590 Mi ez valójában? Úgy van, hogy egy int valamit. 531 00:33:29,590 --> 00:33:32,700 Lehet, x, de őszintén szólva, ha elkezdesz hívja az összes változó x, 532 00:33:32,700 --> 00:33:35,390 ez lesz, hogy egyre kevésbé világos, hogy melyik melyik. 533 00:33:35,390 --> 00:33:39,560 >> Szóval csak önkényesen válasszon másik elnevezési az én segítő funkciók, 534 00:33:39,560 --> 00:33:41,940 funkciók írok. Hívjuk, hogy egy, vagy tudnánk nevezni - 535 00:33:41,940 --> 00:33:45,010 Hívjuk meg a számot még világosabbá tegye. 536 00:33:45,010 --> 00:33:47,560 Így aztán vissza kell térni számától függetlenül plusz 1, 537 00:33:47,560 --> 00:33:50,740 és most meg kell változtatnunk 1 másik dolog ide, és egy másik dolog itt. 538 00:33:50,740 --> 00:33:54,350 Mit kell változtatni jarat: 21 az első? >> [Hallhatatlan tanulói válasz] 539 00:33:54,350 --> 00:33:57,610 [Malan] El kell rendelni, hogy x. Nem tudok csak hívja növedék (x). 540 00:33:57,610 --> 00:34:01,960 Meg kell emlékezni a választ módosításával az x értéke a bal oldali. 541 00:34:01,960 --> 00:34:04,680 És bár x most a bal és a jobb, ez teljesen rendben 542 00:34:04,680 --> 00:34:08,860 mert a jobb oldalon lesz végre először, majd lehuppant lesz a bal oldali dolog - 543 00:34:08,860 --> 00:34:10,600 x ebben az esetben. 544 00:34:10,600 --> 00:34:12,159 És végül, ez egy egyszerű fix most. 545 00:34:12,159 --> 00:34:17,230 Ez csak a meccsek, mi lent, int szám. 546 00:34:17,230 --> 00:34:20,570 Szóval egy csomó változás egy igazán hülye függvény 547 00:34:20,570 --> 00:34:24,420 de reprezentatív dolog, hogy mi inkább szeretnénk csinálni. 548 00:34:24,420 --> 00:34:27,090 Tehát, hogy buggy4. Már elcsesztem valahol. 549 00:34:27,090 --> 00:34:30,139 Ó, Istenem. Öt hibák egy 6-soros program. 550 00:34:30,139 --> 00:34:35,690 Szóval, mi a baj a 18. sor, karakter 5? 551 00:34:35,690 --> 00:34:39,610 Szóval ezt bejelenteni, int. 552 00:34:39,610 --> 00:34:41,920 Lássuk. Van egy csomó egyéb hibákat. 553 00:34:41,920 --> 00:34:47,010 Ó, Istenem - 19, 18, 21 -, de újra, nézzük csak törölje a képernyőt, Control L itt, 554 00:34:47,010 --> 00:34:49,380 és futtassa újra csenget. 555 00:34:49,380 --> 00:34:51,340 Tehát 5 probléma valójában csak, hogy 1. 556 00:34:51,340 --> 00:34:57,520 Tehát most fussunk buggy4, Enter. Hú, x lett eggyel helyesen. 557 00:34:57,520 --> 00:35:02,720 Rendben van. Van még kérdése, hogy hogyan növekmény számok? Igen. 558 00:35:02,720 --> 00:35:09,870 [Hallhatatlan hallgatói kérdésre] >> Jó kérdés. 559 00:35:09,870 --> 00:35:14,220 Hogy van az, hogy én is csak megváltoztatni x számra, és a program azonnal tudni? 560 00:35:14,220 --> 00:35:16,200 >> Ismét, gondolni rá, mint e absztrakció. 561 00:35:16,200 --> 00:35:21,600 Szóval, ha én vagyok a fő-és Ken növedék, őszintén szólva, nem érdekel, mit Ken hívja a iPad. 562 00:35:21,600 --> 00:35:26,570 Nem érdekel, amit ő semmit, hogy köze van az ő végrehajtásával ezt a funkciót. 563 00:35:26,570 --> 00:35:33,340 Ez egy végrehajtási részlet, hogy én, a fő, nem kell törődni. 564 00:35:33,340 --> 00:35:38,250 És így egyszerűen csak a változó következetesen belsejében a funkció - szám itt és szám itt - 565 00:35:38,250 --> 00:35:40,960 már kész is van, amíg én újrafordítani. 566 00:35:40,960 --> 00:35:44,180 Ez a fajta, mint ha belegondolsz sokan közülünk, azok, a vezető engedélyek 567 00:35:44,180 --> 00:35:46,770 akik hajtott, vagy ha már akár hajtott egy autó, 568 00:35:46,770 --> 00:35:50,950 legtöbbünknek fogalma sincs, hogyan működik egy autó a motorháztető alatt. 569 00:35:50,950 --> 00:35:54,970 És szó szerint, ha megnyitja a motorháztető, a legtöbben - magamat is beleértve - 570 00:35:54,970 --> 00:35:56,940 nem fognak igazán tudom, mit keresünk, 571 00:35:56,940 --> 00:35:59,220 olyan, mint lehet, hogy úgy érzi, a dolgok, mint ez most. 572 00:35:59,220 --> 00:36:01,480 De nem igazán érdekel, hogy hogyan kell az autó működik, 573 00:36:01,480 --> 00:36:05,970 nem kell, hogy érdekel, mit az összes botok és dugattyúk és kábelek belsejében az autó 574 00:36:05,970 --> 00:36:08,160 ténylegesen csinál. 575 00:36:08,160 --> 00:36:12,770 Szóval, valami hasonlót, amit úgy hívnak a dugattyú nem számít, itt ebben az esetben. Same ötlet. 576 00:36:12,770 --> 00:36:25,300 Igen. >> [Hallhatatlan hallgató a kérdéshez] 577 00:36:25,300 --> 00:36:29,180 Ha több felhasználását a változó xa pillanat ezelőtt, 578 00:36:29,180 --> 00:36:32,150 te, a programozó, kellene megváltoztatni őket mindenhol. 579 00:36:32,150 --> 00:36:36,600 Vagy tudnál csinálni szó Fájl menü, majd a Keresés, cserélje ki - valami ilyesmi - 580 00:36:36,600 --> 00:36:39,170 de akkor kell majd, hogy ezeket a változtatásokat magad. 581 00:36:39,170 --> 00:36:47,450 Meg kell lennie. >> [Hallgató] Ha több változó [hallható] 582 00:36:47,450 --> 00:36:53,100 Egy adott sorrendben, mint itt, ha ez int egy másik számot? >> [Hallgató] Correct. 583 00:36:53,100 --> 00:36:56,590 [Malan] Igen. Rendelési számít, ha a funkció meghívása. 584 00:36:56,590 --> 00:37:00,050 >> Tehát, ha én hívó növekmény itt valami vesszővel valamit, 585 00:37:00,050 --> 00:37:01,680 van egy közvetlen leképezés. 586 00:37:01,680 --> 00:37:05,690 Az első változó, bármi is hívják, készül egy példányát az első érv ide. 587 00:37:05,690 --> 00:37:07,760 Bocsánat. Ez nem lehet a zárójelet. 588 00:37:07,760 --> 00:37:11,490 A második érv egy vonalban áll a második. Így annak érdekében, igen, számít. Rendben van. 589 00:37:11,490 --> 00:37:17,020 Bocsánat. Vettem a hosszú utat, hogy ott. Egyéb kérdés? Rendben van. 590 00:37:17,020 --> 00:37:20,610 Tehát lássuk, ha nem tudjuk festeni a képet, hogy mi folyik itt valójában 591 00:37:20,610 --> 00:37:23,090 a motorháztető alatt, hogy úgy mondjam. 592 00:37:23,090 --> 00:37:26,640 Ez egy téglalap, amely képviseli a számítógép memóriájában. 593 00:37:26,640 --> 00:37:30,970 Akkor is, ha fogalma sincs, hogyan működik a memória, vagy hogyan RAM működik, 594 00:37:30,970 --> 00:37:33,940 legalábbis feltételezzük, hogy van csokor is ezekben a napokban. 595 00:37:33,940 --> 00:37:36,280 Van megabájt, akkor megvan gigabyte azt, 596 00:37:36,280 --> 00:37:40,870 és tudjuk, hogy egy hét 0 byte éppen mi? >> [Hallgató] 8 bit. 597 00:37:40,870 --> 00:37:42,950 8 bit, ugye? Szóval 8 nullákat és 1. 598 00:37:42,950 --> 00:37:45,880 Tehát ha a számítógép rendelkezik koncert a RAM, 2 giga RAM ezekben a napokban, 599 00:37:45,880 --> 00:37:55,030 Van egy milliárd vagy 2 milliárd bájt memóriát vagy durván 8000000000 vagy 16 milliárd bit 600 00:37:55,030 --> 00:37:56,890 belül a számítógépet. 601 00:37:56,890 --> 00:38:00,590 Ellentétben a kis Wooly Willy például, ez nem mágneses részecskéket általában többé. 602 00:38:00,590 --> 00:38:04,450 Egyre több - a laptopok legalábbis - ez a szilárdtest-meghajtók, SSD, 603 00:38:04,450 --> 00:38:08,580 hogy csak nincs mozgó alkatrész. Ez mind elektronikus. Ez az összes villamosenergia-alapú. 604 00:38:08,580 --> 00:38:14,060 Tehát úgy gondolja, ennek a téglalapnak, mint csak képviselő 1 vagy 2 gigabájt memória van. 605 00:38:14,060 --> 00:38:16,020 >> Szóval ez egy darab memória. 606 00:38:16,020 --> 00:38:19,830 A világ számítógép-tudomány egyfajta megosztjuk off 607 00:38:19,830 --> 00:38:22,950 darabokat memória különböző dolgokat. 608 00:38:22,950 --> 00:38:27,190 Például, ha ez a számítógép RAM, amint azt a téglalap van, 609 00:38:27,190 --> 00:38:31,130 kiderül, hogy a konvenció, a tetején a RAM, hogy úgy mondjam, 610 00:38:31,130 --> 00:38:33,660 általában az úgynevezett szöveges szegmensben. 611 00:38:33,660 --> 00:38:36,740 Ezek a 0s és 1s, hogy már össze. 612 00:38:36,740 --> 00:38:39,020 Tehát amikor mi már megnézték a motorháztető alatt milyen a.out van, 613 00:38:39,020 --> 00:38:41,980 Mindezen 0s és 1s, amikor fut a program, 614 00:38:41,980 --> 00:38:46,290 e 0s és 1s töltik a merevlemezről valami úgynevezett RAM, 615 00:38:46,290 --> 00:38:49,320 és a RAM ők helyezze a tetején. 616 00:38:49,320 --> 00:38:52,770 Közben, ha van más dolog: initialize adatok inicializálása adatok. 617 00:38:52,770 --> 00:38:57,510 A 2 rend memória, nézze meg a globális változók, melyeket a nem gyakran használt 618 00:38:57,510 --> 00:39:00,760 de néha, ha nem, akkor a végén ott is. 619 00:39:00,760 --> 00:39:04,260 Aztán ott van egy másik dolog: környezeti változók, amelyet nem töltenek sok időt, 620 00:39:04,260 --> 00:39:06,860 de majd a 2 fontos dolog, hogy vissza fog térni az egész félévben, 621 00:39:06,860 --> 00:39:08,550 stack és a heap. 622 00:39:08,550 --> 00:39:12,210 Tehát a legtöbb számítógép memóriájában van fenntartva, ha fut a program 623 00:39:12,210 --> 00:39:15,370 valamit úgynevezett stack és valami úgynevezett kupac. 624 00:39:15,370 --> 00:39:18,840 Nem fogunk beszélni a halom ma, de fogunk beszélni a köteget. 625 00:39:18,840 --> 00:39:24,600 A verem hivatott megidézni a vizuális az étkező étkezés tálcák Mather House 626 00:39:24,600 --> 00:39:28,110 vagy bárhol megtörténhet, hogy ha az ebédlőben staff tisztítsa meg őket minden nap, 627 00:39:28,110 --> 00:39:30,180 ők verem őket fel emeleten fel, 628 00:39:30,180 --> 00:39:34,550 és hasonlóan, a memóriában van, ez az ötlet hozatala valamit a verem, 629 00:39:34,550 --> 00:39:36,860 üzembe valamit a stack, amivel valamit a verem. 630 00:39:36,860 --> 00:39:38,240 És mit is jelent ez? 631 00:39:38,240 --> 00:39:41,860 >> Nézzük nagyítani kell a csak az alsó fele ezt a képet, a számítógép RAM, 632 00:39:41,860 --> 00:39:44,330 tegyen javaslatot a következő. 633 00:39:44,330 --> 00:39:48,170 Kiderült, hogy amikor fut a program, mint a a.out vagy hello - 634 00:39:48,170 --> 00:39:50,100 függetlenül a program, hogy írtál - 635 00:39:50,100 --> 00:39:54,020 Ismét azok 0s és 1s töltik a merevlemezről, ami a hosszú távú tárolás, 636 00:39:54,020 --> 00:39:57,230 ott marad akkor is, ha húzza ki a dugót, betöltött RAM. 637 00:39:57,230 --> 00:40:00,610 RAM gyorsabb, mint a merevlemez - ez kisebb, mint a merevlemezek - 638 00:40:00,610 --> 00:40:03,300 de ha programokat élnek, miközben futsz őket. 639 00:40:03,300 --> 00:40:08,230 Szóval duplán kattintva a program a Mac vagy PC, ez betöltődik a merevlemezről a RAM-ba. 640 00:40:08,230 --> 00:40:11,520 Amint meg van töltve a RAM-ba, a 0s és 1s tovább az út tetején, 641 00:40:11,520 --> 00:40:16,610 az úgynevezett text részes, de aztán, amint a program valóban elindul, 642 00:40:16,610 --> 00:40:21,360 a fő funkciója hívják, és fontosabb, mint láttuk, gyakran lokális változók, 643 00:40:21,360 --> 00:40:24,870 és azt ints és vonósokra, valamint karakter és hasonlók. 644 00:40:24,870 --> 00:40:29,180 Tehát, ha a program, hogy már megírt, vagy a program, hogy már dupla kattintással 645 00:40:29,180 --> 00:40:32,970 használt bizonyos változók belsejében main, 646 00:40:32,970 --> 00:40:37,240 a végén alján a verem a memória, hogy úgy mondjam. 647 00:40:37,240 --> 00:40:39,410 Pontosabban, mit jelent ez valójában? 648 00:40:39,410 --> 00:40:48,450 Ez csak azt jelenti, hogy ha megyünk száma a byte RAM a számítógép, 649 00:40:48,450 --> 00:40:55,750 észre, hogy ez lehet bájt szám 0, akkor ez lehet bájt szám 1, 2, 3, 4, 5, 6, 650 00:40:55,750 --> 00:41:01,480 egészen 2 milliárd lenne egészen ott a tetején. 651 00:41:01,480 --> 00:41:05,880 Más szóval, amikor arról beszélünk, RAM memória szempontjából bájt, 652 00:41:05,880 --> 00:41:11,500 ez csak azt jelenti, hogy valaki úgy döntött, hogy mit kell számozni minden egyes ilyen darabokat memória. 653 00:41:11,500 --> 00:41:16,650 Tehát, ha szüksége van 32 bites egy int vagy meg kell 8 bit egy karakter, 654 00:41:16,650 --> 00:41:18,840 hol a végén a memória? 655 00:41:18,840 --> 00:41:22,350 >> Fogalmi, csak a végén alján ez a dolog az úgynevezett stack. 656 00:41:22,350 --> 00:41:25,870 De mi az érdekes most, amikor fő meghív egy függvényt - 657 00:41:25,870 --> 00:41:28,750 Tegyük fel a nevezett funkció ize, csak egy tetszőleges nevet - 658 00:41:28,750 --> 00:41:32,330 mi történik, legfontosabb alján van ennek verem a memória; 659 00:41:32,330 --> 00:41:35,680 ize most kerül a tetején a fő memóriában. 660 00:41:35,680 --> 00:41:40,990 Tehát a helyi változók foo még a végén valami fogalmilag fenti e a fő. 661 00:41:40,990 --> 00:41:47,070 Ha foo felhívja másik funkció nevű bárban, azokat a változókat végül itt. 662 00:41:47,070 --> 00:41:50,120 Ha bar felhívja valami mást, itt, itt, itt. 663 00:41:50,120 --> 00:41:53,830 Szóval, mi érdekes fut egy program, hogy ha szükséges funkciók 664 00:41:53,830 --> 00:41:57,750 és mivel ezeket a funkciókat szükséges funkciókat és ezeket a funkciókat szükséges funkciókat, 665 00:41:57,750 --> 00:42:01,470 építesz ezt stack funkciók a memóriában. 666 00:42:01,470 --> 00:42:06,890 És csak egyszer egy függvény mit kezdeni, hogy a memória vissza. 667 00:42:06,890 --> 00:42:10,860 Tehát az egyik legegyszerűbb módja, hogy elfogy a memória a számítógépi program 668 00:42:10,860 --> 00:42:14,360 hogy írjon funkciók soha nem térhet vissza. 669 00:42:14,360 --> 00:42:18,900 Így például, most bizonyítani annyira egy szándékosan hibás program. 670 00:42:18,900 --> 00:42:22,230 Hadd menjek előre, és nem # include , 671 00:42:22,230 --> 00:42:25,000 int main (void), 672 00:42:25,000 --> 00:42:32,940 és én fogom csinálni, miközben (2> 1), ami valószínűleg soha nem fog megváltozni minket, 673 00:42:32,940 --> 00:42:37,560 és hadd menjen előre, és most nem printf. 674 00:42:37,560 --> 00:42:40,700 Igazából, ez lesz kevésbé vizuálisan érdekes. Csináljuk ezt. 675 00:42:40,700 --> 00:42:50,240 Az int i = 0; i> 0 - tegyük ezt a hibát - i + +. 676 00:42:50,240 --> 00:42:52,720 És ne printf itt. Nézzük gyakorlatban mit prédikált. 677 00:42:52,720 --> 00:43:00,190 Vessünk egy módszer van, üres kórus, és mi mondjuk int i, 678 00:43:00,190 --> 00:43:06,830 majd fogok mondani printf - nem, tegyük ezt sokkal érdekesebb. 679 00:43:06,830 --> 00:43:15,790 Nézzük valójában nem nyomtat semmit. Nézzük csak ezt: kórus (i). 680 00:43:15,790 --> 00:43:20,390 Rendben van. Szóval ez hibás, mert miért? 681 00:43:20,390 --> 00:43:23,380 Én találtam ki, ahogy megy, mert a program valójában nem csinál semmit érdekes. 682 00:43:23,380 --> 00:43:25,320 >> De nem ez a cél. 683 00:43:25,320 --> 00:43:29,630 A cél az, hogy írjon egy programot, amelynek fő funkciója mit csinál, úgy tűnik? 684 00:43:30,720 --> 00:43:32,860 Hívjon magát. És valóban, nem kell a hurok. 685 00:43:32,860 --> 00:43:37,200 Nézzük még egyszerűsítése csak azért, hogy ne veszítsük szem elől, hogy valóban az alapvető hiba. 686 00:43:37,200 --> 00:43:39,640 Main felhívja kórus énekelni néhány kórus, 687 00:43:39,640 --> 00:43:41,440 aztán csináltam valami hülyeséget, és volt kórus hívás kórus 688 00:43:41,440 --> 00:43:43,760 azért, mert feltételezhető, hogy valaki fogja végrehajtása talán, 689 00:43:43,760 --> 00:43:47,210 és most ez nem fog fordítani még. Azt kell, hogy mit csináljon? 690 00:43:47,210 --> 00:43:49,970 Szükségem van a prototípus, emlékszem. 691 00:43:49,970 --> 00:43:56,110 Szóval kell, hogy ide void kórus (int i); 692 00:43:56,110 --> 00:43:59,210 Tehát most ha elmegyek ide - valójában, hadd használja a nagyobb ablakban. 693 00:43:59,210 --> 00:44:01,980 Menjünk előre, és hogy a kórus. 694 00:44:01,980 --> 00:44:06,490 Menjünk előre, és hogy a kórus. 695 00:44:06,490 --> 00:44:08,370 A be nem jelentett azonosító i. 696 00:44:08,370 --> 00:44:12,500 Ó, ez hülyeség volt. Nem kell az érvet. Nézzük csak ezt. 697 00:44:12,500 --> 00:44:16,370 Bárcsak kezdte így. Nem lett volna sokkal könnyebb programot írni. 698 00:44:16,370 --> 00:44:25,590 Tessék. Most menjünk át a terminál ablak, futtassa újra csenget, és most itt vagyunk. 699 00:44:25,590 --> 00:44:28,460 Ez nagyon gyors. 700 00:44:28,460 --> 00:44:31,150 Mi valójában csak történt, igaz? 701 00:44:31,150 --> 00:44:33,730 Nos, most fogok hozzá a nyomtatási sort, így látjuk. 702 00:44:33,730 --> 00:44:43,490 Hadd mondjam printf ("itt vagyok") - nem változó. Majd hagyja így. 703 00:44:43,490 --> 00:44:47,480 Hadd futtassa újra tenni. Hadd hajtsa végre ismét a kórus. 704 00:44:47,480 --> 00:44:57,380 És ... gyerünk. Folytasd. 705 00:44:57,380 --> 00:44:59,930 Mint félretéve, miért nem zuhant még? 706 00:44:59,930 --> 00:45:02,080 A szegmentációs hiba történt szupergyors előtt. 707 00:45:02,080 --> 00:45:06,570 [Hallhatatlan diák válasza] >> Pontosan. Szóval ez időt vesz igénybe a nyomtatás, ugye? 708 00:45:06,570 --> 00:45:08,610 Ez csak úgy több munkát a számítógép részét. 709 00:45:08,610 --> 00:45:10,620 És itt van: Segmentation fault. 710 00:45:10,620 --> 00:45:12,340 >> Szóval észre, hogy milyen gyorsan programok futtatása. 711 00:45:12,340 --> 00:45:14,130 Ha nem nyomtat semmit, szuper gyors. 712 00:45:14,130 --> 00:45:18,770 De még mindig van ez a szegmens hiba, mert mi történik? 713 00:45:18,770 --> 00:45:21,210 Ha úgy gondolja, arról, hogy a számítógép memóriája megállapított, 714 00:45:21,210 --> 00:45:28,740 ez történetesen fő, de itt hívjuk csak ezt a kórus, és hívjuk ezt a kórus. 715 00:45:28,740 --> 00:45:34,550 És most, ha én azon vagyok, esztétika van, ez csak fog mondani kórus, kórus, kórus, 716 00:45:34,550 --> 00:45:40,550 kórus, kórus, kórus, kórus, hirdetés nauseum, és végül, mi fog történni? 717 00:45:40,550 --> 00:45:45,630 Ha a nagy kép, szó, ez, ami most történik, fogalmilag? 718 00:45:46,520 --> 00:45:48,630 A stack túllépése a kupac. 719 00:45:48,630 --> 00:45:51,940 Vagy, ami még rosszabb, csak túllépését mindent, beleértve a szöveget szegmens, 720 00:45:51,940 --> 00:45:54,590 amely a 0-ák és 1-esek, hogy képviselje a program. 721 00:45:54,590 --> 00:45:57,080 Röviden, ez csak szuper, szuper rossz. 722 00:45:57,080 --> 00:45:58,830 A program nőttek ki az ellenőrzés alól. 723 00:45:58,830 --> 00:46:01,220 Te így több memóriát használ, mint amennyit tervezett 724 00:46:01,220 --> 00:46:03,960 azért, mert az egy buta hiba ebben az esetben, 725 00:46:03,960 --> 00:46:08,040 vagy ebben az esetben egy nagyon szándékosan végzett funkció nevezte magát. 726 00:46:08,040 --> 00:46:09,500 Nos, ez még nem minden rossz. 727 00:46:09,500 --> 00:46:13,800 Funkciók nevezik magukat valóban nagy ereje, ha használják azt. 728 00:46:13,800 --> 00:46:15,800 Én nem használtam helyesen ide. 729 00:46:15,800 --> 00:46:19,780 Szóval ez nem olyan rossz, de az a tény, hogy én valójában sosem hagyja abba hív magam 730 00:46:19,780 --> 00:46:23,520 alapvető gyengesége itt a program. 731 00:46:23,520 --> 00:46:26,400 Szóval, hová megyünk mindezt? Mi történik valójában? 732 00:46:26,400 --> 00:46:30,340 Amikor hívom a növekmény mûködnek csinálunk e példák, 733 00:46:30,340 --> 00:46:33,420 Nekem van egy érték, mint 1, hogy átadom be 734 00:46:33,420 --> 00:46:37,570 Én át egy példányt a 1-es szám, így a következő történik. 735 00:46:37,570 --> 00:46:44,240 Menjünk be a növekmény példa, ez a srác itt van. 736 00:46:44,240 --> 00:46:46,870 Itt van, mi történik valójában. 737 00:46:46,870 --> 00:46:53,400 Amikor hívom növekedésnél és átadom az x, piktogramokat ábrázoló, mi folyik itt ez. 738 00:46:53,400 --> 00:46:59,520 >> Ha van az értéke 1 tárolják itt, és én tényleg hívni növedék, 739 00:46:59,520 --> 00:47:04,330 amely most hívott kórus - az iPad dobott le engem ide. 740 00:47:04,330 --> 00:47:09,760 Nevezzük ezt a növekményt, és nem tudjuk, hogy mi ez a következő funkció lesz. 741 00:47:09,760 --> 00:47:14,840 Szóval, mi is történik itt van valahol a fő van egy darab memória 742 00:47:14,840 --> 00:47:17,000 amely tárolja az 1-es szám. 743 00:47:17,000 --> 00:47:19,380 Amikor hívom növedék, én egy másik darabja a memóriát, 744 00:47:19,380 --> 00:47:21,230 de most már a másolatot az 1. 745 00:47:21,230 --> 00:47:26,660 Amikor növeljük ezt az értéket, ez lesz 2, 746 00:47:26,660 --> 00:47:30,560 de akkor mi történik, amint a növekedés visszatér? 747 00:47:30,560 --> 00:47:33,630 Ez a memória csak gets adta vissza az operációs rendszert, 748 00:47:33,630 --> 00:47:37,450 ami azt jelenti, az összes tettél semmi hasznos. 749 00:47:37,450 --> 00:47:43,120 Az 1, amelyet eredetileg szereplő fő továbbra is ténylegesen ott van. 750 00:47:43,120 --> 00:47:44,890 Szóval, hová megyünk ezzel? 751 00:47:44,890 --> 00:47:49,770 Kiderül, hogy a memóriában van ez a back-to-back bájtok sorozata 752 00:47:49,770 --> 00:47:53,050 hogy nem tud cucc, és kiderül, hogy már láttuk valami 753 00:47:53,050 --> 00:47:55,390 amely magában foglalja üzembe dolgok háttal hátra hátra. 754 00:47:55,390 --> 00:47:59,860 Mi egy string alapján hét 1 hét 2, és most? 755 00:48:00,020 --> 00:48:01,980 Ez csak egy gyűjtemény a karakter. 756 00:48:01,980 --> 00:48:04,310 Így kiderült, hogy ahogy akkor tegye számokat a memóriában, 757 00:48:04,310 --> 00:48:06,990 Hasonlóan nem teszel karaktereket a memóriában. 758 00:48:06,990 --> 00:48:10,530 És amint kezdjük üzembe karakterek a memóriában háttal a háttal, 759 00:48:10,530 --> 00:48:13,620 kiderül, hogy a legegyszerűbb dolgok, mint a for ciklus vagy while ciklus, 760 00:48:13,620 --> 00:48:17,170 tudunk ismételget balról jobbra az egy karakterlánc karaktereinek 761 00:48:17,170 --> 00:48:20,600 és meg kell kezdeni masszírozó azokat különböző karakterek összesen - 762 00:48:20,600 --> 00:48:23,370 Egy válhat b, b válhat c - 763 00:48:23,370 --> 00:48:27,780 annak érdekében, hogy végül mi is egy angol mondat, hogy valóban van értelme 764 00:48:27,780 --> 00:48:30,310 és megtérít minden egyes ilyen leveleket egyesével 765 00:48:30,310 --> 00:48:34,400 a séta a számítógép memóriájában balról jobbra, hogy ténylegesen titkosítja. 766 00:48:34,400 --> 00:48:35,810 Akkor nézzük az öt perces szünet van, 767 00:48:35,810 --> 00:48:40,730 és amikor visszajön, akkor kezdjük ezt a folyamatot kódolási információ. 768 00:48:42,020 --> 00:48:43,520 >> Rendben van. 769 00:48:43,520 --> 00:48:48,070 Mielőtt belevetik magukat néhány crypto és ezek a dolgok néven tömbök, 770 00:48:48,070 --> 00:48:51,470 hadd szünetet bármilyen kérdése, mert úgy érzem, hogy tényleg ilyen zavaros 771 00:48:51,470 --> 00:48:54,080 néhány ilyen téma. Szóval erősít most, ha tudunk. 772 00:48:54,080 --> 00:48:58,700 Mi csak beszélgettünk visszatérési értékeit, beszélgettünk érveket, 773 00:48:58,700 --> 00:49:03,250 és megbeszéltük ezt a fogalmat, amit mi jön vissza az az elkövetkezendő hetek során, 774 00:49:03,250 --> 00:49:08,720 megtekintését memória egy csomó ilyen halmozott tálcák, hogy úgy mondjam, 775 00:49:08,720 --> 00:49:12,660 alulról akár úgy, hogy minden egyes tálcára, hogy lesz fektetni a stack 776 00:49:12,660 --> 00:49:16,530 jelentése függvény, ami jelenleg hívják. 777 00:49:17,900 --> 00:49:20,260 Van még kérdése? 778 00:49:20,260 --> 00:49:22,640 Hadd tegyek fel egy kérdést itt. 779 00:49:22,640 --> 00:49:27,890 Hadd egyszerűsíteni ezt vissza, hogy milyen volt, mielőtt néhány korábbi Q & A. 780 00:49:27,890 --> 00:49:35,570 Az a tény, hogy a növekmény már nyitott zárójelet, int szám, zárt zárójel - 781 00:49:35,570 --> 00:49:39,110 mit jelent int szám képvisel? 782 00:49:39,110 --> 00:49:42,790 [Hallgató] Egy érv. >> Egy érv. Oké. De mi ez az érvelés? 783 00:49:42,790 --> 00:49:46,370 [Hallhatatlan diák válasza] >> Mi ez? >> [Hallgató] Valami, amit át be 784 00:49:46,370 --> 00:49:49,940 Oké, tehát valami, amit át be És általában, ez csak a bemenet. 785 00:49:49,940 --> 00:49:52,450 Ha írtak funkcióhoz, és ez a funkció célja az életben 786 00:49:52,450 --> 00:49:55,770 az, hogy nem valami egy kicsit más minden alkalommal, amikor használja, 787 00:49:55,770 --> 00:50:00,110 akkor az egyetlen módja, hogy ez megtörténjen tényleg úgy tűnik, hogy biztosítsa számára input 788 00:50:00,110 --> 00:50:03,510 annak érdekében, hogy meg tudja csinálni valami mást, hogy a bemeneti minden egyes alkalommal. 789 00:50:03,510 --> 00:50:06,650 >> Szóval, meg kell adnia két dolog, ha egy függvény bemenet. 790 00:50:06,650 --> 00:50:09,590 Meg kell adni a kívánt nevet adni, hogy a bemeneti 791 00:50:09,590 --> 00:50:12,700 pusztán csak a mi kedvünkért, így hivatkoznak rá 792 00:50:12,700 --> 00:50:16,540 a funkció, hogy te magad írunk, ahogy én tettem itt sorban 32. 793 00:50:16,540 --> 00:50:20,800 De azt is meg kell határozni a típus, mert a C programozási nyelv 794 00:50:20,800 --> 00:50:25,940 hogy csak megköveteli, hogy ha egy változó, meg kell mondanod a számítógép milyen adattípus van, 795 00:50:25,940 --> 00:50:30,200 nagy részben úgy, hogy tudja, hogy hány bitet kell kiosztani, hogy a változó 796 00:50:30,200 --> 00:50:33,020 mert lehet, hogy 6 - Sajnálom, nem lesz 6. 797 00:50:33,020 --> 00:50:37,080 Ez lehet 16, akkor a 8, akkor is 32, akár 64, 798 00:50:37,080 --> 00:50:39,130 de a számítógép tudnia kell. 799 00:50:39,130 --> 00:50:43,180 Most, a int a bal oldali képviseli azt, amit ezzel szemben? 800 00:50:46,350 --> 00:50:48,850 [Hallhatatlan diák válasza] >> Mi ez? >> [Hallgató] Type of funkció. 801 00:50:48,850 --> 00:50:53,610 A típus A függvény és, még pontosabban a típusát termelését. Rendben. 802 00:50:53,610 --> 00:50:57,380 Így mivel a dolog zárójelben jelentése a bemenet, ha vannak ilyenek, 803 00:50:57,380 --> 00:50:59,660 a dolog, hogy a bal oldali képviseli kimenet. 804 00:50:59,660 --> 00:51:03,530 És ebben az esetben a növekmény látszólag ad vissza int, 805 00:51:03,530 --> 00:51:07,690 és így int a visszatérési típus ezt a funkciót. 806 00:51:07,690 --> 00:51:09,340 Mit jelent az, hogy vissza? 807 00:51:09,340 --> 00:51:15,090 Szó szerint, akkor használja a kulcsszó hazatérését és akkor, ha amit vissza 808 00:51:15,090 --> 00:51:18,600 jobbra a kulcsszó egész szám, 809 00:51:18,600 --> 00:51:21,660 akkor ez valóban megfelel amit ígért. 810 00:51:21,660 --> 00:51:26,410 Te nem tehetett ilyet - hello, world - mert ez egy string. 811 00:51:26,410 --> 00:51:28,860 >> Nyilvánvaló, hogy nem egy egész szám. 812 00:51:28,860 --> 00:51:33,140 Tehát röviden, a teher valóban minket, a programozó, hogy egyedi 813 00:51:33,140 --> 00:51:37,770 hogy amit mi vissza, és aztán tényleg megy a visszaküldésével. 814 00:51:37,770 --> 00:51:43,440 A kontextus itt most az, hogy a számítógép memóriájában egy gigabyte, 2 gigabájt - 815 00:51:43,440 --> 00:51:45,920 bármi - talán több, talán kevesebb, 816 00:51:45,920 --> 00:51:49,050 de a számítógép látja azt, hogy különböző szakaszok. 817 00:51:49,050 --> 00:51:51,200 Valami megy le oda, valami más megy fel ott, 818 00:51:51,200 --> 00:51:54,290 különböző cucc megy a közepén, és ma már csak kezdeni mondja a történetet, 819 00:51:54,290 --> 00:51:56,340 de majd jön vissza erre az idő múlásával. 820 00:51:56,340 --> 00:51:59,980 Jelenleg az egyetlen darab memória tényleg érdekel a szöveg szegmens 821 00:51:59,980 --> 00:52:03,360 mert csak képviseli a 0s és 1s hogy csenget a kimeneten. 822 00:52:03,360 --> 00:52:06,050 Tehát, ha egy parancs futtatható a billentyűzetet, mint a.out 823 00:52:06,050 --> 00:52:09,110 vagy kattintson duplán egy ikonra Mac OS vagy a Windows, 824 00:52:09,110 --> 00:52:11,880 a program betöltődik a merevlemezről a RAM-ba 825 00:52:11,880 --> 00:52:16,330 és ez lehuppant a tetején a számítógép RAM, hogy úgy mondjam. 826 00:52:16,330 --> 00:52:20,450 Mindeközben, ahogy a program elindul és fontosabb lesz az úgynevezett 827 00:52:20,450 --> 00:52:23,640 A program, amit írt, vagy a program a Microsoft vagy az Apple írta: 828 00:52:23,640 --> 00:52:27,860 bármely helyi változók a végén ott az alján a számítógép memóriájában. 829 00:52:27,860 --> 00:52:33,230 De ha felhívja fő egyéb funkció maga változók, illetve érvelés végül fölé. 830 00:52:33,230 --> 00:52:36,680 És ha ezt a funkciót hívja valamit, a végén fölött, fölötte, fölötte. 831 00:52:36,680 --> 00:52:41,460 >> És csak ha egy funkciót történik végrehajtó jelent a köteg tálcák, hogy úgy mondjam, 832 00:52:41,460 --> 00:52:43,240 kezdenek lejjebb és lejjebb. 833 00:52:43,240 --> 00:52:48,250 És ez az, amit akkor, dióhéjban, megmagyarázza, hogy miért, amikor telefonál kocka 834 00:52:48,250 --> 00:52:51,550 vagy hívja növekmény, akkor halad egy példányát az értéket. 835 00:52:51,550 --> 00:52:55,520 És hogy ez mit jelent piktogramokat ábrázoló, hogy te szó szerint írni a 1-es szám 836 00:52:55,520 --> 00:53:00,460 egy másik részén memória, a változó, amely 1-2-ben az esetben, növekmény 837 00:53:00,460 --> 00:53:04,820 vagy egy 8 esetén kocka és azután, hogy a memória dob el 838 00:53:04,820 --> 00:53:09,140 amint a növekedés vagy a kocka függvény. Kérdés. 839 00:53:09,140 --> 00:53:12,900 [Hallgató] Hol globális változók tárolják? 840 00:53:12,900 --> 00:53:18,100 A globális változók tárolják mi jelenleg úgynevezett inicializált adatok vagy inicializált adat, 841 00:53:18,100 --> 00:53:21,920 A különbség az, hogy ha van egy globális változó, és rendeljen hozzá azonnal értéket 842 00:53:21,920 --> 00:53:24,640 az egyenlőségjel, azt végül a tetején van, 843 00:53:24,640 --> 00:53:29,200 és ha csak annyit int x; nélküli érték, végül kissé alacsonyabb a RAM-ban 844 00:53:29,200 --> 00:53:31,710 egyszerűen egyezmény. 845 00:53:31,710 --> 00:53:34,940 Egyéb kérdés? Rendben van. 846 00:53:34,940 --> 00:53:37,340 Tehát ez a kép jön vissza, mint mi, hogy több erős 847 00:53:37,340 --> 00:53:39,170 , amit tehetünk a számítógéppel, 848 00:53:39,170 --> 00:53:42,720 de most, vessünk egy rövid intro a kriptográfia, 849 00:53:42,720 --> 00:53:46,080 egy adott típusú titkosítás ez nem oldja meg a világ összes problémáit 850 00:53:46,080 --> 00:53:47,720 de nem oldja meg néhányat. 851 00:53:47,720 --> 00:53:51,700 Ebben az esetben itt van egy úgynevezett titkos kulcsú titkosítás. 852 00:53:51,700 --> 00:53:56,410 Secret-kulcsú, mint a neve is sugallja, származik a biztonsági egy titkos. 853 00:53:56,410 --> 00:54:00,690 >> Például, ha te vissza az iskolában, és arra halad egy kis titkos szerelmes levelet 854 00:54:00,690 --> 00:54:04,850 A fiú vagy lány voltál zúzás be, ha akarta átadni, hogy vegye figyelembe a közönséget, 855 00:54:04,850 --> 00:54:08,380 akkor valószínűleg nem írna ilyen megjegyzést angol vagy bármilyen az Ön anyanyelve. 856 00:54:08,380 --> 00:54:13,340 Sőt, lehet, hogy titkosítani, vagy talán csak küldj nekik egy szöveges üzenetet ezekben a napokban. 857 00:54:13,340 --> 00:54:15,460 De lehet, hogy tényleg át őket egy megjegyzés az egész osztályteremben. 858 00:54:15,460 --> 00:54:18,700 És, hogy ezt biztonságosan oly módon, hogy a barátok és a tanár 859 00:54:18,700 --> 00:54:22,650 Nem tudom, mit írsz, lehet, hogy jön egy viszonylag egyszerű algoritmus, 860 00:54:22,650 --> 00:54:25,920 fiatal, bár lehet, hogy, hogy csak összekeveri a szavakat. 861 00:54:25,920 --> 00:54:28,130 Tehát ahelyett, hogy írása lehet írni b, 862 00:54:28,130 --> 00:54:30,220 ahelyett, b lehet írni c, 863 00:54:30,220 --> 00:54:32,140 ahelyett, hogy c írhat d, és így tovább. 864 00:54:32,140 --> 00:54:34,360 Vagy tudnál jönni egy kifinomultabb fordítási 865 00:54:34,360 --> 00:54:36,720 levelek különböző leveleket. 866 00:54:36,720 --> 00:54:39,740 De a fogás a fiú vagy lány, akire te küldése e feljegyzés 867 00:54:39,740 --> 00:54:45,020 tudnia kell valamit, ami pedig nyilvánvalóan? >> [Hallgató] Amit a küldést. 868 00:54:45,020 --> 00:54:49,720 Mi a titka, mint mi, hogy a leképezés közötti és a b és a c-és d's. 869 00:54:49,720 --> 00:54:54,650 Vajon csak, hogy 1 az egyes betűk megy a-b, a b c? 870 00:54:54,650 --> 00:54:56,670 Ez bonyolultabb, mint ez? 871 00:54:56,670 --> 00:55:01,540 >> Szóval, te és a törje szükségük van e titkos információt, 872 00:55:01,540 --> 00:55:03,190 de van egyfajta 22-es csapdája van. 873 00:55:03,190 --> 00:55:06,830 Ha ez az első alkalom, amit küldése szerelmes levél az osztály, 874 00:55:06,830 --> 00:55:10,720 hogyan van az, hogy fiú vagy lány lesz tudni, hogy mi a titok, még van? 875 00:55:10,720 --> 00:55:13,930 Szóval titkos kulcs crypto nem oldja meg a világ összes problémáit, 876 00:55:13,930 --> 00:55:16,320 és van valójában egy kapcsolatot, hogy itt mi jön vissza felé félév végén. 877 00:55:16,320 --> 00:55:25,110 Hasonlóképpen nem a legtöbben nem tudják, hogy valaki, hogy működik, például az Amazon.com, 878 00:55:25,110 --> 00:55:28,190 és még sokan valószínűleg vásárolt cuccot Amazon.com, 879 00:55:28,190 --> 00:55:31,990 és mi már tanítottak, hogy azt feltételezik, hogy ezeket az e-kereskedelmi tranzakciók biztonságos. 880 00:55:31,990 --> 00:55:36,470 Az URL https valószínűleg azt mondja, van talán egy hülye kis lakat ikon valahol, 881 00:55:36,470 --> 00:55:39,930 van valamiféle titkosítás biztosítására a hitelkártya adatait 882 00:55:39,930 --> 00:55:42,160 közted és az Amazon.com. 883 00:55:42,160 --> 00:55:45,430 És mégis, ha a titkosítás magában tudni valami titkos 884 00:55:45,430 --> 00:55:48,620 és még nem tudom, bárki az Amazon-on, és én már biztosan nem rendezett semmiféle titkos 885 00:55:48,620 --> 00:55:52,710 valaki az Amazon, hogy van a számítógép, vagy a böngésző csinálja ezt? 886 00:55:52,710 --> 00:55:55,720 Kiderült, hogy van más típusú titkosítás teljesen, hogy megoldja ezt a problémát. 887 00:55:55,720 --> 00:55:57,670 De ma, akkor összpontosítani egyszerű 888 00:55:57,670 --> 00:56:00,290 ahol meg lehet rendezni előre tudni, hogy valami titkos 889 00:56:00,290 --> 00:56:03,760 mint a +1 vagy valami leképezés között a és b a. 890 00:56:03,760 --> 00:56:05,840 És a folyamat a kriptográfia általában magában foglalja ezt. 891 00:56:05,840 --> 00:56:08,620 Van néhány egyszerű szöveg, látható itt a bal oldalon, 892 00:56:08,620 --> 00:56:12,930 futtatja át valamilyen algoritmus vagy eljárás titkosítás - 893 00:56:12,930 --> 00:56:15,100 lehet, hogy csak egy lesz b, b válik c - 894 00:56:15,100 --> 00:56:17,490 és akkor a végén a rejtjelezett. 895 00:56:17,490 --> 00:56:20,380 Közben, ha a szív megkapja ezt a titkot, vegye figyelembe, 896 00:56:20,380 --> 00:56:24,200 ő kell majd dekódolni azt általában tolató hogy algoritmus 897 00:56:24,200 --> 00:56:27,190 annak érdekében, hogy újra a sima szöveget. 898 00:56:27,190 --> 00:56:28,960 Vannak fizikai inkarnációja ezt. 899 00:56:28,960 --> 00:56:31,680 >> Például, ez egy kis titok dekóder gyűrű, 900 00:56:31,680 --> 00:56:35,110 és ez egy gyűrű abban az értelemben, hogy van két tárcsázza itt. 901 00:56:35,110 --> 00:56:38,490 A külső kerülete ez a dolog, van betűk A-tól Z-ig, 902 00:56:38,490 --> 00:56:40,340 bár ők véletlenszerű sorrendben, 903 00:56:40,340 --> 00:56:42,880 , valamint a belső, van valójában néhány számot 904 00:56:42,880 --> 00:56:46,620 oly módon, hogy ezzel a gyűrűvel lehet ilyen kör a külső, de a belső 905 00:56:46,620 --> 00:56:49,140 annak érdekében, hogy sorban számok betűk. 906 00:56:49,140 --> 00:56:53,020 Akár egy film nevű A Christmas Story, látni fogod, hogy a kis Ralphie 907 00:56:53,020 --> 00:56:58,000 annyira lelkes, hogy kitaláljuk, mit Kis Árva Annie titkos üzenete az volt, hogy ő 908 00:56:58,000 --> 00:57:02,570 hogy közölték, azt hiszem, abban a formában a numerikus üzenetek a gabona doboz 909 00:57:02,570 --> 00:57:07,220 és meg kellett felhalmozódnak az apró kártyák jött a gabona mezőbe, 910 00:57:07,220 --> 00:57:09,770 meg kellett postázni őket, meg kellett, hogy újra a titkos dekódoló gyűrű 911 00:57:09,770 --> 00:57:13,910 így végre kitalálni, hogy mi a leképezés között Betűk és számok 912 00:57:13,910 --> 00:57:15,550 vagy betűk és levelek. 913 00:57:15,550 --> 00:57:19,520 Hogy a számítógép tudunk járni végrehajtó vagy képviselő dolgok, mint ez? 914 00:57:19,520 --> 00:57:22,560 Szükségünk van egy módja expresszáló magunkat egy kicsit rugalmasabban 915 00:57:22,560 --> 00:57:25,080 mint a változó eddig tették. 916 00:57:25,080 --> 00:57:29,000 Már volt ints, megvolt karakter, megvolt úszók és kétágyas és néhány más, 917 00:57:29,000 --> 00:57:34,200 de ezek egyedi darab memória nem igazán teszi lehetővé számunkra, hogy kifejezzék a dolgokat 918 00:57:34,200 --> 00:57:36,440 mint a szavak és a mondatok és kifejezések. 919 00:57:36,440 --> 00:57:38,630 Sőt, most már az úgynevezett ilyen dolgokat húrok, 920 00:57:38,630 --> 00:57:42,660 de ígérjük, hogy ez tényleg csak egy egyszerűsítés CS50 könyvtárban 921 00:57:42,660 --> 00:57:45,540 hogy mi kívánó héjúak vissza. 922 00:57:45,540 --> 00:57:47,500 És így kezdjük erre itt. 923 00:57:47,500 --> 00:57:49,840 Hadd menjek előre, és megnyitja a fájlt - 924 00:57:49,840 --> 00:57:54,100 az összes ilyen fájlok, mint rendesen, online - úgynevezett array.c 925 00:57:54,100 --> 00:57:58,960 megoldani a problémát független strings, de fest egy képet ide 926 00:57:58,960 --> 00:58:01,520 , hogy hogyan lehet használni egy úgynevezett egy tömb. 927 00:58:01,520 --> 00:58:04,050 >> Egy tömb adattípust. 928 00:58:04,050 --> 00:58:10,730 Ez egy változó típusa a fajta, amely több kisebb adattípusok belsejébe 929 00:58:10,730 --> 00:58:12,680 háttal hátra hátra. 930 00:58:12,680 --> 00:58:16,980 Így például, ha azt akartuk, hogy írjon egy kis programot, amely megadja a kvíz átlagos 931 00:58:16,980 --> 00:58:19,780 egy tanfolyam, mint a 50, hogy a 2 kvízek, 932 00:58:19,780 --> 00:58:23,450 akkor nagyon könnyen levelet e program alapján még néhány múlt heti anyaga 933 00:58:23,450 --> 00:58:28,830 segítségével getInt és egy pár változók: int quiz1, int quiz2. 934 00:58:28,830 --> 00:58:30,550 És ez elég egyértelmű. 935 00:58:30,550 --> 00:58:33,500 Ez talán 10, 20 sornyi kódot max programjának végrehajtása 936 00:58:33,500 --> 00:58:38,940 arra kéri a felhasználót, 2 kvíz csoportok, majd kiszámítja az átlagos 937 00:58:38,940 --> 00:58:42,020 hozzáadásával őket, elosztjuk 2-vel, majd a nyomtatás az eredményeket. 938 00:58:42,020 --> 00:58:46,400 Mi valószínűleg csinálni elég könnyen jelenleg után néhány percek számát. 939 00:58:46,400 --> 00:58:49,450 De a probléma az, hogy tegyük fel, hogy 50 volt 3 vagy 4 vetélkedők. 940 00:58:49,450 --> 00:58:52,830 Tegyük fel, hogy akarta, hogy ugyanazt a programot egy osztály, hogy már a héten vetélkedők. 941 00:58:52,830 --> 00:58:55,100 Gondolj egy osztály, amely a heti vetélkedők. 942 00:58:55,100 --> 00:58:58,840 Ha van 16 vagy olyan hét a félév, most már 16 változó: 943 00:58:58,840 --> 00:59:03,030 int quiz1, int quiz2, int quiz3, int quiz4. 944 00:59:03,030 --> 00:59:06,870 Amint elkezdi látni ezt a redundancia, a másolás és beillesztés a kódot, 945 00:59:06,870 --> 00:59:09,810 meg kell kezdeni, hogy szeretne volt egy jobb út. 946 00:59:09,810 --> 00:59:13,610 És szerencsére, mert a tömbök van. Akkor csináljuk. 947 00:59:13,610 --> 00:59:16,700 Először is, hadd mutassam be egy nagyon egyszerű dolog, hogy már nem használt eddig, 948 00:59:16,700 --> 00:59:18,820 de látni fogod, hogy esetenként kódot. 949 00:59:18,820 --> 00:59:21,270 >> Ez az, ami általában úgynevezett állandó. 950 00:59:21,270 --> 00:59:24,410 Tehát ez egy állandó abban az értelemben, hogy ez az érték nem változik. 951 00:59:24,410 --> 00:59:26,450 Az emberi egyezmény létrehozása során állandó 952 00:59:26,450 --> 00:59:30,420 az, hogy az összes nagybetűvel csak azért, hogy valóban kiemelkedik a kódot, 953 00:59:30,420 --> 00:59:34,270 és a speciális kulcsszó, hogy használja a C # define. 954 00:59:34,270 --> 00:59:39,970 Tehát mondjuk # define, majd egy szóközt, majd a kívánt szó használni a konstans nevét 955 00:59:39,970 --> 00:59:41,730 , majd az értékét a konstans. 956 00:59:41,730 --> 00:59:44,710 Figyeljük meg ez eltér hozzárendelése valamit egy változót. 957 00:59:44,710 --> 00:59:46,430 Nincs egyenlőségjel, nincs pontosvessző. 958 00:59:46,430 --> 00:59:49,140 Ez az, amit az általánosan ismert, mint egy előfeldolgozó irányelv, 959 00:59:49,140 --> 00:59:50,840 hanem inkább az, hogy egy másik időben. 960 00:59:50,840 --> 00:59:56,350 Most, ez létrehoz egy változatlan érték nevű kvízjátékok 961 00:59:56,350 --> 00:59:58,290 amelynek tényleges numerikus értéke 2 lehet. 962 00:59:58,290 --> 01:00:02,180 Így bárhol látod kvízjátékok, vetélkedők, kvízjátékok során ezt a fájlt, 963 01:00:02,180 --> 01:00:04,230 ez csak a 2-es szám. 964 01:00:04,230 --> 01:00:06,550 Ha valaki megnézi a főbb most lássuk, hogyan is működik ez. 965 01:00:06,550 --> 01:00:09,770 Először is úgy néz ki, egy kicsit rejtélyes, de ez az egész cuccot hét 1. 966 01:00:09,770 --> 01:00:12,210 Kérje meg a felhasználót a fokozatok. Hogyan tudjuk ezt megtenni? 967 01:00:12,210 --> 01:00:17,350 Összhangban 22 - ez tényleg a szaftos rész - Kijelentem, az úszó 968 01:00:17,350 --> 01:00:23,240 de nem csak egy egyetlen úszó. Én nyilvánította, inkább egy sor lebegőpontos értékeket. 969 01:00:23,240 --> 01:00:27,700 Ezt a változót fog hívni fokozatok, mint hallgatólagos itt 970 01:00:27,700 --> 01:00:31,420 de az egyetlen darab új szintaxis, akkor ezek a szögletes zárójelek között. 971 01:00:31,420 --> 01:00:37,280 Az a tény, hogy már mondtam float évfolyamon, majd nyitó zárójel, majd a szám - 972 01:00:37,280 --> 01:00:40,980 észre, ha ez egy állandó ez éppen olyan, mint tettük ezt - 973 01:00:40,980 --> 01:00:46,840 ez azt jelenti, "Hé számítógép, adj 2 úszók és nézzük együtt hívjuk őket fokozatok." 974 01:00:46,840 --> 01:00:51,780 >> Ezzel szemben egy sokkal unalmas folyamat, mint ez: float grade1; 975 01:00:51,780 --> 01:00:54,580 úszó grade2, és így tovább. 976 01:00:54,580 --> 01:00:58,310 Tehát egy tömböt lehetővé teszi számunkra, hogy végre ezt a gondolatot, de sokkal kevésbé messily, 977 01:00:58,310 --> 01:01:04,560 oly módon, hogy tudunk írni 1 sor kód helyett, mondjuk, 16 egy 16 hetes félév. 978 01:01:04,560 --> 01:01:09,060 Nem akartam, hogy hard-2-es kód, mert ha úgy gondolja, erről most logikusan, 979 01:01:09,060 --> 01:01:12,560 Tegyük fel a következő évben CS50 változások 3 vetélkedők helyett 980 01:01:12,560 --> 01:01:15,010 és én a 2-es szám van, az volt a 2-es szám van, 981 01:01:15,010 --> 01:01:17,210 Volt a 2-es szám van, a 2-es szám van. 982 01:01:17,210 --> 01:01:19,890 Ez lesz nagyon unalmas és nagyon könnyen elcseszed 983 01:01:19,890 --> 01:01:26,550 és hogy véletlenül módosítsa 1 érték 3 és hiányzik néhány más értéke 2. 984 01:01:26,550 --> 01:01:30,660 Szóval megyek helyette elvont ezt el, és ezt a konstans, hogy 985 01:01:30,660 --> 01:01:32,520 mint a neve is mutatja, soha nem változik. 986 01:01:32,520 --> 01:01:35,870 És most nem számít, hogy mi a különböző vetélkedők idén vagy jövőre, 987 01:01:35,870 --> 01:01:39,380 Csak meg kell változtatni, hogy egy helyen ide tetején. 988 01:01:39,380 --> 01:01:41,230 Szóval ez az egész egy konstans. 989 01:01:41,230 --> 01:01:47,100 Eközben az új fogalmi jellemzője az, hogy egy tömb. 990 01:01:47,100 --> 01:01:55,030 Tehát a szögletes zárójelek add nekem ezt a sok úszók és lehetővé teszi számomra együttesen hívjuk őket évfolyamon itt. 991 01:01:55,030 --> 01:01:56,720 És most lássuk, mit fogok csinálni. 992 01:01:56,720 --> 01:01:59,220 Itt sorban 24 a kezdete a hurok. 993 01:01:59,220 --> 01:02:03,380 >> Ez tényleg semmi fantázia. Ez csak a vetélkedők helyett beégetett számot. 994 01:02:03,380 --> 01:02:06,740 De nincs semmi intellektuálisan más ott a múlt héten. 995 01:02:06,740 --> 01:02:11,650 Ez csak printf, így a printf ("Kvíz #% d% d:") 996 01:02:11,650 --> 01:02:16,670 mert én csak azt szeretném kinyomtatni adni nekem quiz száma 1, 2, majd a 2-ból 2. 997 01:02:16,670 --> 01:02:18,480 Tehát ez egy tisztán esztétikai dolog. 998 01:02:18,480 --> 01:02:21,000 De az érdekes rész most már összhangban van az 27. 999 01:02:21,000 --> 01:02:27,840 Annak érdekében, hogy kitöltse az egyik két helykitöltõvel egy lebegőpontos érték, 1000 01:02:27,840 --> 01:02:29,640 újra használni szögletes zárójelben. 1001 01:02:29,640 --> 01:02:35,170 Ebben az esetben én vagyok a i, mert ez a for ciklus kezdődött i egyenlő milyen értéket, látszólag? 1002 01:02:35,170 --> 01:02:36,670 [Hallgató] 0. >> [Malan] 0. 1003 01:02:36,670 --> 01:02:40,990 Tehát az első iterációs e hurok, az olyan, mintha én írtam ezt a kódot, 1004 01:02:40,990 --> 01:02:46,310 hanem a második iteráció e hurok, az olyan, mintha én írtam ezt a kódot. 1005 01:02:46,310 --> 01:02:49,970 De az a tény, hogy én vagyok egy változó tökéletes, mert, mint a neve is sugallja, 1006 01:02:49,970 --> 01:02:52,600 ez változó értéke minden iteráció, 1007 01:02:52,600 --> 01:02:55,900 úgyhogy kitöltésével ezt a tömböt egy helyen egy időben. 1008 01:02:55,900 --> 01:02:57,380 Mit jelent ez a tömb néz ki? 1009 01:02:57,380 --> 01:03:01,570 Az ok, amiért felhívta a szuper egyszerű téglalap a képernyő előtt itt volt az oka. 1010 01:03:01,570 --> 01:03:05,590 Egy tömb csak egy darab memória, majd egy másik darabja a memória 1011 01:03:05,590 --> 01:03:08,570 majd egy másik darab az emlékezet és így tovább. 1012 01:03:08,570 --> 01:03:13,120 Szóval, ha a tömb mérete 2 ebben az esetben is, minden, amit tenne 1013 01:03:13,120 --> 01:03:20,200 beírja az én teszt eredmények, mint itt - kaptam 100-ez aztán kaptam a 99 e egy - 1014 01:03:20,200 --> 01:03:24,970 akkor ez a memória lehet, hogy nem is lehet használni, mert én már csak arra kérték, a számítógép 1015 01:03:24,970 --> 01:03:26,840 egy tömb mérete 2. 1016 01:03:26,840 --> 01:03:28,600 Ezek a terek még mindig ott vannak, ugye? 1017 01:03:28,600 --> 01:03:32,670 Még mindig van 2 GB RAM-mal is, ha csak azt kérdezi, 2 úszók. 1018 01:03:32,670 --> 01:03:36,840 Tehát az ötlet mögött tömbök, hogy a számítógép csak úgy egy darab memória 1019 01:03:36,840 --> 01:03:41,340 majd arányosítja kisebb darabokra háttal hátra hátra. 1020 01:03:41,340 --> 01:03:43,310 És ez minden egy tömb. 1021 01:03:43,310 --> 01:03:47,350 >> Ez egy folytonos darab memória belsejében, ahol Ön a dolgokat. 1022 01:03:47,350 --> 01:03:50,700 Ez történik, hogy akkor nem csak valami unalmas számtani. 1023 01:03:50,700 --> 01:03:54,640 Ha görgessen itt, ez az, ahol én, akkor iterációkhoz a tömbben. 1024 01:03:54,640 --> 01:03:58,020 Jöttem fel az összegzése minden érték a tömbben, 1025 01:03:58,020 --> 01:04:02,470 és akkor használhatod a round függvény itt ténylegesen összeg osztva vetélkedők. 1026 01:04:02,470 --> 01:04:06,320 De hadd lóbálja a kezét, hogy a fajta elég aritmetikai most. 1027 01:04:06,320 --> 01:04:08,370 De minden, ami csinál nekem végeredményben kiszámításánál egy átlagos. 1028 01:04:08,370 --> 01:04:13,580 Tehát először kvíz plus 2. kvíz osztva 2, majd a nyomtatás ki, mint egy int. 1029 01:04:13,580 --> 01:04:17,280 De térjünk most átmenet egy másik példát nevű sztring1, 1030 01:04:17,280 --> 01:04:20,700 amely hasonló képet fest, de a szálakat. 1031 01:04:20,700 --> 01:04:23,940 Hadd menjek előre, és egyszerűsíteni ezt csak egy pillanatra. 1032 01:04:23,940 --> 01:04:27,090 Bocsáss meg a behúzás most. 1033 01:04:27,090 --> 01:04:30,870 Közleményt a 19 E példa, kapok egy string a felhasználó elől. 1034 01:04:30,870 --> 01:04:34,640 De észre, mit csinálsz a következő vonalak 22-től kezdődően. 1035 01:04:34,640 --> 01:04:41,250 Én valójában iterációjával tól i-ig - és ez egy új trükk - strlen, string hosszát. 1036 01:04:41,250 --> 01:04:44,880 Ez a funkció, hogy jön a C, hogy ha át, hogy egy string, 1037 01:04:44,880 --> 01:04:47,730 azt mondja, hogy hány karakter van, hogy a string. Ez minden. 1038 01:04:47,730 --> 01:04:51,550 És az a tény, hogy ez strlen helyett string hossza csak mert tömörebb. 1039 01:04:51,550 --> 01:04:55,100 Harminc évvel ezelőtt, az emberek szerették írni dolgokat tömören, amennyire csak lehetséges, 1040 01:04:55,100 --> 01:04:57,630 ezért is tartanak, hogy az egyezmény ide. 1041 01:04:57,630 --> 01:05:00,660 i + + csak azt jelenti, növeljük i egyes iteráció. 1042 01:05:00,660 --> 01:05:02,990 És most észre, ami igazán érdekes. 1043 01:05:02,990 --> 01:05:09,180 A vonal 24, azt mondom, "Computer, adj egy karakter, 8 bit, és hívja meg c." 1044 01:05:09,180 --> 01:05:12,630 De mi ez a jobb oldali mond? 1045 01:05:13,490 --> 01:05:16,530 Magyarul, ez mit jelent? 1046 01:05:16,530 --> 01:05:18,730 [Hallgató] Az első karakter a tömbben. 1047 01:05:18,730 --> 01:05:20,790 Pontosan. Add ide az első karakter a tömbben. 1048 01:05:20,790 --> 01:05:24,090 Vagy, még általánosabban, add nekem az i-edik karaktere a tömbben. 1049 01:05:24,090 --> 01:05:26,100 És észre fontos most, hogy a számítógép-tudósok, 1050 01:05:26,100 --> 01:05:27,890 vagyunk valójában számolás 0-tól. 1051 01:05:27,890 --> 01:05:29,720 >> Nincs mérlegelési most kezdeni ezt. 1052 01:05:29,720 --> 01:05:34,160 Most meg kell viselkedni összhangban a számítógép elvárásait és számolni 0-tól 1053 01:05:34,160 --> 01:05:38,180 mert [0] lesz az első karakter egy string, 1054 01:05:38,180 --> 01:05:42,150 [1] lesz a második, [2] lesz a harmadik, és így tovább. 1055 01:05:42,150 --> 01:05:49,720 Szóval ezt a programot, ha fordítani, ez ismét string1, úgyhogy győződjön meg sztring1, 1056 01:05:49,720 --> 01:05:54,670 és most már futni string1 az én terminál ablakban. 1057 01:05:54,670 --> 01:05:58,330 Ez vár bemenet, így megyek írja be David, az Enter, 1058 01:05:58,330 --> 01:06:02,540 és most kiírja Dávid mindezt különböző vonalak, mert nyilatkozat, hogy mit csinálok. 1059 01:06:02,540 --> 01:06:05,820 Én nyomtat egy karaktert egy időben. 1060 01:06:05,820 --> 01:06:10,100 Nem fogunk belemenni részletesen ma, de azt el kell hagyni egy perccel ezelőtt ezt az ellenőrzést itt. 1061 01:06:10,100 --> 01:06:15,480 Kiderült, hogy ha a felhasználó nem működött megfelelően, ellenséges, vagy csak zavaros, 1062 01:06:15,480 --> 01:06:20,210 akkor valóban nem adnak egy sor hosszasan. 1063 01:06:20,210 --> 01:06:22,860 Ha bejön a rossz gombot a billentyűzeten, lehet, hogy nem adnak karakterlánc egyáltalán, 1064 01:06:22,860 --> 01:06:26,950 vagy ha rosszindulatú, akkor megpróbálhatja beilleszteni egy gigabájt érdemes egy esszé 1065 01:06:26,950 --> 01:06:29,290 pótolni ezt a string, és ha a számítógép elfogy a memória, 1066 01:06:29,290 --> 01:06:32,710 kiderül, hogy mi lesz, hogy újra ezt a különleges értéket nevezzük NULL. 1067 01:06:32,710 --> 01:06:35,580 Tehát most már, csak tudom, hogy van ez a különleges érték úgynevezett NULL 1068 01:06:35,580 --> 01:06:39,580 amely lehetővé teszi számunkra, hogy ellenőrizze, amikor elfogyott a memória, többek között. 1069 01:06:39,580 --> 01:06:45,630 De ha kinyitom most string2, észre egy különbség van. 1070 01:06:45,630 --> 01:06:48,210 Értesítés egy különbség itt string2. 1071 01:06:48,210 --> 01:06:51,340 Ezzel string2, ez a for ciklus egy kicsit más. 1072 01:06:51,340 --> 01:06:55,010 >> Hadd törölje a NULL annak érdekében, hogy meg tudjuk beszélni ezeket egy másik alkalommal. 1073 01:06:55,010 --> 01:06:57,800 Mi a különbség, ami a for ciklus ebben az időben? 1074 01:06:59,620 --> 01:07:01,670 Mehetek vissza az előző példában. 1075 01:07:01,670 --> 01:07:08,580 Szóval ez 2-es verziója, ez 1-es verzióját. 1, 2. 1076 01:07:08,580 --> 01:07:11,980 1, 2. 1077 01:07:13,520 --> 01:07:16,660 Az strlen hívás hol? 1078 01:07:16,660 --> 01:07:18,860 Ez az első része a hurok. 1079 01:07:18,860 --> 01:07:21,830 Minden gondolat, hogy miért csinálom ezt? Igen. 1080 01:07:21,830 --> 01:07:24,560 [Hallgató] Szóval nem hívja a funkció minden egyes alkalommal. 1081 01:07:24,560 --> 01:07:26,440 [Malan] Tehát nem kérdőjelezik meg a függvény minden egyes alkalommal. Pontosan. 1082 01:07:26,440 --> 01:07:28,300 Emlékezzünk vissza, honnan a hurok, hogy ők szuper egyszerű 1083 01:07:28,300 --> 01:07:31,770 ha egyszer valami megérteni, hogy ez az inicializálás, a feltétel és a frissítést. 1084 01:07:31,770 --> 01:07:34,750 A probléma az, hogy a feltétel történik minden iteráció a hurok. 1085 01:07:34,750 --> 01:07:40,010 És így ebben a példában itt, mi a rossz a tény, hogy ez az én állapotot? 1086 01:07:40,010 --> 01:07:41,830 [Hallgató] Te hívó strlen. 1087 01:07:41,830 --> 01:07:44,340 [Malan] Te hívó strlen újra és újra és újra. 1088 01:07:44,340 --> 01:07:47,410 De ha egyszer már beírt David, a hossza a string 5, 1089 01:07:47,410 --> 01:07:49,650 és ez nem fog megváltozni minden iteráció a hurok 1090 01:07:49,650 --> 01:07:51,670 mivel a húr még mindig D-a-v-i-d. 1091 01:07:51,670 --> 01:07:55,320 Szóval ez egy tipp, hogy mi fog egyre fontosabb gondolat 1092 01:07:55,320 --> 01:08:00,410 ismert, mint a tervezési döntés, ha csak nem, hogy a számítógép nem felesleges munkát. 1093 01:08:00,410 --> 01:08:03,920 >> Csakúgy, mint egy besurranó elõnézetét pset2, pset2 a standard változat 1094 01:08:03,920 --> 01:08:07,030 fog kihívás, hogy ténylegesen alkalmazni bizonyos számú titkosítási, 1095 01:08:07,030 --> 01:08:10,410 bizonyos számú titkosítási algoritmusok, így mind a titkosítani 1096 01:08:10,410 --> 01:08:13,840 és dekódolja titkos üzeneteket ugyanúgy, mint az egyik Ralphie ott dekódolni. 1097 01:08:13,840 --> 01:08:16,810 A hacker kiadásában pset2, fogunk menni egy kicsit tovább. 1098 01:08:16,810 --> 01:08:19,649 Fogunk átadni egy fájlt a tényleges számítógépes rendszer 1099 01:08:19,649 --> 01:08:23,479 amely tartalmaz egy csomó felhasználónevek és a tényleges titkosított jelszavakat, 1100 01:08:23,479 --> 01:08:26,939 és a kihívás a hacker verzió lesz feltörni ezeket a jelszavakat 1101 01:08:26,939 --> 01:08:33,200 és kitalálni, mit kriptográfia, vagy mi titkos használtak ténylegesen generálni ezeket a jelszavakat. 1102 01:08:33,200 --> 01:08:36,109 És mi lesz, hogy ezt az egy új funkció itt a C 1103 01:08:36,109 --> 01:08:40,630 hogy adok neked csak egy demo nevei parancssori argumentumok. 1104 01:08:40,630 --> 01:08:44,229 Kiderült, mint néhány talán már látható a szakaszban vagy tankönyveket, 1105 01:08:44,229 --> 01:08:48,260 fő nem mindig kell semmisnek zárójelben. 1106 01:08:48,260 --> 01:08:52,430 Kiderül, hogy fő is lehet írni, mint ez a két érv, 1107 01:08:52,430 --> 01:08:56,870 argc és argv, ahol argc a szavak száma 1108 01:08:56,870 --> 01:09:00,020 hogy írja után a program nevét a parancssorban 1109 01:09:00,020 --> 01:09:03,420 és az argv a tényleges szavakat. 1110 01:09:03,420 --> 01:09:07,540 És ahogy a szögletes zárójelek ott utalnak, argv nyilvánvalóan egy tömb. 1111 01:09:07,540 --> 01:09:12,210 Ez lesz egy string után egy string után egy string a memóriában. 1112 01:09:12,210 --> 01:09:16,010 >> Szóval mit fogunk tudni csinálni kezdődő Pset 2 a valami ilyesmi. 1113 01:09:16,010 --> 01:09:21,350 Ha teszek argv1, amely példa jövünk vissza hétfőn, és futtatni, 1114 01:09:21,350 --> 01:09:23,370 észre, hogy nem úgy tűnik, hogy semmit sem. 1115 01:09:23,370 --> 01:09:25,490 Csak kiírja a saját nevét. 1116 01:09:25,490 --> 01:09:31,479 De ha azt mondom, viszlát osztály, azt tapasztaljuk, hogy ez a program látszólag végigmegy 1117 01:09:31,479 --> 01:09:35,479 át az egyes szavak, amelyeket írt a billentyűket. 1118 01:09:35,479 --> 01:09:41,630 És az eszközöket, amelyek segítségével fogunk hozzáférni szó, hogy a felhasználó beírt a prompt 1119 01:09:41,630 --> 01:09:49,160 ez módosítja fő kiindulási e hétvégén int main (void) hova int main (argc, argv) 1120 01:09:49,160 --> 01:09:52,050 és így fog megszületni parancssori argumentumok. 1121 01:09:52,050 --> 01:09:57,100 És ha egyszer igazán kifinomult most ezt, akkor képes lesz arra, hogy írjon igazán trippy programok 1122 01:09:57,100 --> 01:09:59,610 mint például ez itt, amely fölé és azon túl 1123 01:09:59,610 --> 01:10:03,940 bizonyos funkcióit tettünk eddig, de minden nagyon erős. 1124 01:10:03,940 --> 01:10:08,950 >> Így fogjuk elhagyni ezt e a képernyőn, és mi találkozunk hétfőn. 1125 01:10:17,570 --> 01:10:20,000 >> [CS50.TV]