1 00:00:00,000 --> 00:00:02,742 2 00:00:02,742 --> 00:00:05,680 >> SPEAKER 1: Szia mindenkinek. 3 00:00:05,680 --> 00:00:07,530 Mi lesz az induláshoz. 4 00:00:07,530 --> 00:00:09,330 Azt hiszem, az emberek még mindig megy hogy szűrést. 5 00:00:09,330 --> 00:00:12,840 De az az érdeke, ezért azt is hogy ti innen időben, 6 00:00:12,840 --> 00:00:14,110 fogunk kezdeni. 7 00:00:14,110 --> 00:00:18,780 Szóval szívesen a CS50 kvíz 0 kritika. 8 00:00:18,780 --> 00:00:23,020 Azoknak, akik még nem tudatosult Mégis, van egy kérdésem szerdán. 9 00:00:23,020 --> 00:00:25,700 Woo-hoo. 10 00:00:25,700 --> 00:00:29,780 >> Ha még nem kezdte tanulmányozni még vagy nem ismerték fel, hogy ez létezik még, 11 00:00:29,780 --> 00:00:34,070 múlt vetélkedők és minden információt a a kvíz vannak cs50.net/quizzes. 12 00:00:34,070 --> 00:00:38,090 Van néhány nagyon jó dolog ott, múlt vetélkedők az elmúlt 10 13 00:00:38,090 --> 00:00:43,760 évben, valamint az információs erről a kvízt és témák 14 00:00:43,760 --> 00:00:46,250 hogy fedezi. 15 00:00:46,250 --> 00:00:48,980 Tehát kezdjük. 16 00:00:48,980 --> 00:00:54,240 >> Szóval srácok talán emlékeznek, az első nap az osztályban Dávid azokat lámpák. 17 00:00:54,240 --> 00:00:59,650 Szóval lényegében mindent, ami a motorháztető alatt a számítógép 18 00:00:59,650 --> 00:01:00,860 végzett bináris. 19 00:01:00,860 --> 00:01:04,080 Binary azt jelenti, amit hangzik mint a 0 és 1-es. 20 00:01:04,080 --> 00:01:09,290 Két értéke van, hogy a is képviselteti magát. 21 00:01:09,290 --> 00:01:14,675 >> Tehát ugyanúgy, mint az első napon a szakasz amikor David van kapcsolva a lámpa 22 00:01:14,675 --> 00:01:21,990 hogy képviselje a gumó, vagy 1, a számítógép érti a bináris 0-és a 23 00:01:21,990 --> 00:01:24,110 1-es, vagy ki. 24 00:01:24,110 --> 00:01:25,360 Alapjai Binary. 25 00:01:25,360 --> 00:01:29,440 26 00:01:29,440 --> 00:01:32,470 Minden helyen képviselteti magát A bázis két. 27 00:01:32,470 --> 00:01:36,260 Szóval adjunk hozzá 2 a 0 a 1 2 egészen. 28 00:01:36,260 --> 00:01:41,970 >> Annak kiszámítására, milyen a bináris, hogy tizedes, akkor kövesse az egyenlet 29 00:01:41,970 --> 00:01:42,840 típusú dolog. 30 00:01:42,840 --> 00:01:49,510 Ha van egy 1 bármely olyan helyen, Ön szorozd meg bármilyen 31 00:01:49,510 --> 00:01:53,820 alapozni, van, add fel, és kap a tizedes. 32 00:01:53,820 --> 00:01:57,930 Szóval, ez az, hogyan számít 5 bináris. 33 00:01:57,930 --> 00:02:01,400 Csakúgy, mint amit mi csináltunk a utolsó dia, ez hogyan lenne 34 00:02:01,400 --> 00:02:02,650 jelentik 1 és 5. 35 00:02:02,650 --> 00:02:05,320 36 00:02:05,320 --> 00:02:09,660 >> Hasonlóképpen, mint te is hozzá és kivonni a decimális vagy 10-es alapú, vagy 37 00:02:09,660 --> 00:02:13,040 tényleg olyan alap, az adhat és vonjuk bináris. 38 00:02:13,040 --> 00:02:18,400 Pontosan az, amit elvár, ha hozzá a két fel, ha az megegyezik a nagyobb 39 00:02:18,400 --> 00:02:24,220 mint 1, magánál a 1, hogy ez a 0, és nem a mellett, hogy így, csak 40 00:02:24,220 --> 00:02:29,910 mint amit elvár a rendszeres tizedes vagy bármely más alap. 41 00:02:29,910 --> 00:02:30,970 Cool. 42 00:02:30,970 --> 00:02:35,140 >> Szóval, mint már mondtam, mindent, ami megy a motorháztető alatt a számítógépünk 43 00:02:35,140 --> 00:02:37,560 történik 0 és 1-es, vagy bináris. 44 00:02:37,560 --> 00:02:43,470 Szóval hogyan lehet kifejezni, például, betűk vagy számok és jelek? 45 00:02:43,470 --> 00:02:45,560 A válasz erre az, hogy ASCII. 46 00:02:45,560 --> 00:02:49,380 >> ASCII egy leképezés a karakterek között hogy mi általában látni a 47 00:02:49,380 --> 00:02:53,360 Angol nyelv, mint A., B, C a, aláhúzás, kötőjel, és 48 00:02:53,360 --> 00:02:54,910 ilyesmi. 49 00:02:54,910 --> 00:02:57,260 És térképek, hogy egy ASCII értéket. 50 00:02:57,260 --> 00:03:03,080 Az ASCII érték csak egy szám, amely lehet érteni a számítógép. 51 00:03:03,080 --> 00:03:07,430 És ahogy tudod csinálni kívül és kivonás számok, meg tudod csinálni 52 00:03:07,430 --> 00:03:10,890 őket ASCII értékeket. 53 00:03:10,890 --> 00:03:14,050 >> Tehát ebben a példában, mi majd ezt nyomtassa ki? 54 00:03:14,050 --> 00:03:26,790 55 00:03:26,790 --> 00:03:35,480 Igen, csak egy hely a B tér C space D. Hol az egér megy? 56 00:03:35,480 --> 00:03:39,200 57 00:03:39,200 --> 00:03:43,380 Figyeljük megadhatjuk egy int 65. 58 00:03:43,380 --> 00:03:47,080 És amikor nyomtatni hogy ki a százalék C, ez lesz értelmezni, hogy a 59 00:03:47,080 --> 00:03:49,330 karakter és kiírja A. 60 00:03:49,330 --> 00:03:52,800 >> Ugyanígy azt is kijelenti, , mint egy karakter. 61 00:03:52,800 --> 00:03:56,860 És ha nyomtassa ki a százalékos C, ez lesz értelmezni, hogy az 62 00:03:56,860 --> 00:04:05,240 százalék D. És ahogy akkor adjunk hozzá egy szám, akkor hozzá karakterek 63 00:04:05,240 --> 00:04:06,878 ASCII értékek, ebben az esetben. 64 00:04:06,878 --> 00:04:11,370 65 00:04:11,370 --> 00:04:16,130 >> Szóval egy kis mutató mindenki számára. 66 00:04:16,130 --> 00:04:19,610 5, mint a húr, nem valójában egyenlő 5. 67 00:04:19,610 --> 00:04:26,610 Tehát hogyan tudnánk alakítani a húr 5. Az egész 5? 68 00:04:26,610 --> 00:04:28,930 Van ötleted? 69 00:04:28,930 --> 00:04:31,630 Igen. 70 00:04:31,630 --> 00:04:36,720 >> Tehát, ha van 5 mint a húr, tudjuk kivonni 0. 71 00:04:36,720 --> 00:04:37,820 És ez ad nekünk 5. 72 00:04:37,820 --> 00:04:41,670 És hasonlóképpen, ha van 5, mint egy egész, hozzá, hogy a húr 0-ra. 73 00:04:41,670 --> 00:04:43,112 És ez ad nekünk a húr 5. 74 00:04:43,112 --> 00:04:46,350 75 00:04:46,350 --> 00:04:48,350 Cool. 76 00:04:48,350 --> 00:04:52,940 >> Most emlékszem vissza, előadás egyik, ahol beszélgettünk algoritmusokat. 77 00:04:52,940 --> 00:04:57,260 Szóval hogyan lehet valóban szeretné a számítógép hogy milyen érdekes dolgok? 78 00:04:57,260 --> 00:05:00,460 Tudod, csak összeadása és kivonása számok és a nyomtatás a dolgokat nem 79 00:05:00,460 --> 00:05:01,730 az izgalmas. 80 00:05:01,730 --> 00:05:04,620 Általában, azt akarjuk, hogy számítógép végre valamilyen algoritmus. 81 00:05:04,620 --> 00:05:07,820 Egy kicsit bonyolultabb mint egyszerű számtani. 82 00:05:07,820 --> 00:05:11,930 >> Az algoritmus csak egy lépésről lépésre set Az utasítások, hogyan lehet végrehajtani 83 00:05:11,930 --> 00:05:14,640 egy bizonyos task-- 84 00:05:14,640 --> 00:05:15,660 Csakúgy, mint egy recept. 85 00:05:15,660 --> 00:05:19,990 Lehet, hogy emlékszik az első napon osztály, ahol Dávid nekünk számít a terem 86 00:05:19,990 --> 00:05:22,550 Az emberek és hány ember volt a szobában. 87 00:05:22,550 --> 00:05:24,480 Lehet használni a számolás egyenként. 88 00:05:24,480 --> 00:05:25,860 1, 2, 3, 4. 89 00:05:25,860 --> 00:05:28,010 Ebben az esetben, egy lineáris idő algoritmus. 90 00:05:28,010 --> 00:05:31,710 >> Dávid azonban bevezetett egy algoritmust hogy számít az ember a szobában 91 00:05:31,710 --> 00:05:37,340 ahol mindenki feláll, akkor mondja ki a számot egy másik személy, hozzá, hogy 92 00:05:37,340 --> 00:05:39,200 szám fel, és egy ember leül. 93 00:05:39,200 --> 00:05:40,410 És ismételje ezt. 94 00:05:40,410 --> 00:05:42,910 Ez az egyik fajta algoritmus. 95 00:05:42,910 --> 00:05:47,520 Mi lehet elemezni, hogy hatékony egy algoritmus rajta üzemidejét. 96 00:05:47,520 --> 00:05:49,680 De akkor beszéljünk egy kicsit erről később. 97 00:05:49,680 --> 00:05:52,740 98 00:05:52,740 --> 00:05:57,090 >> Tehát az összes algoritmus is kell írni pszeudokódja. 99 00:05:57,090 --> 00:06:01,120 Pszeudókód csak egy angol mint szintaxis, hogy képviselje 100 00:06:01,120 --> 00:06:02,420 egy programozási nyelv. 101 00:06:02,420 --> 00:06:06,070 Például, ha azt akartuk, hogy kérje a felhasználót kitalálni kedvenc számot, 102 00:06:06,070 --> 00:06:08,390 Lehet, hogy pszeudokódja mint olyan. 103 00:06:08,390 --> 00:06:09,850 >> Kap egy felhasználó hiszem. 104 00:06:09,850 --> 00:06:13,570 Ha a becslés helyes, mondd meg nekik, ők helyes, különben nekik 105 00:06:13,570 --> 00:06:15,560 ők nem helyes. 106 00:06:15,560 --> 00:06:22,530 És pszeudokód egy módja könnyen ami egy gondolat vagy egy algoritmus. 107 00:06:22,530 --> 00:06:26,910 Így most érdemes valójában írni ez az a nyelv, amely a számítógép 108 00:06:26,910 --> 00:06:27,980 talán megértés. 109 00:06:27,980 --> 00:06:35,660 Így írhatnánk a pszeudokódja és értelmezni, hogy a forráskódot. 110 00:06:35,660 --> 00:06:41,320 >> Eddig forráskód kell tartania egy bizonyos szintaxisa 111 00:06:41,320 --> 00:06:42,490 egy programozási nyelv. 112 00:06:42,490 --> 00:06:45,430 És eddig, a CS50, mi már használ többnyire c. 113 00:06:45,430 --> 00:06:48,320 Tehát ez lehet forráskódja c. 114 00:06:48,320 --> 00:06:51,440 Később a helyszínre, este jön kapcsolatba kerülnek más programozási 115 00:06:51,440 --> 00:06:52,480 nyelvek, mint a PHP. 116 00:06:52,480 --> 00:06:57,540 Vagy ha még, hogy más osztályok, akkor talán nem Java, Python, vagy akár OCML. 117 00:06:57,540 --> 00:07:01,570 De a mi c programozási nyelv, ez hogyan lehet írni a forráskódot 118 00:07:01,570 --> 00:07:04,760 A pszeudokód algoritmus Én csak a korábban leírt. 119 00:07:04,760 --> 00:07:08,630 120 00:07:08,630 --> 00:07:11,430 >> Szóval, hogyan működik a számítógép valójában érti ezt? 121 00:07:11,430 --> 00:07:14,490 Mint már mondtam, csak tényleg megérti nullák és egyesek. 122 00:07:14,490 --> 00:07:17,880 Szóval, hogyan kap a forrás kódot amit lehet 123 00:07:17,880 --> 00:07:18,960 megértette? 124 00:07:18,960 --> 00:07:22,920 Nos, van valami úgynevezett fordító. 125 00:07:22,920 --> 00:07:28,450 >> Ha felidézzük vissza a legtöbbet a psets, hogy van valamilyen program 126 00:07:28,450 --> 00:07:30,370 írt egy pont c fájlt. 127 00:07:30,370 --> 00:07:32,550 És akkor azt írja, hogy. 128 00:07:32,550 --> 00:07:35,970 Tehát mi, hogy csinál? 129 00:07:35,970 --> 00:07:39,970 >> Akkor írja make lefordítani a programot, mert valakivel-- 130 00:07:39,970 --> 00:07:42,730 aki írta a p meg; valószínűleg David-- 131 00:07:42,730 --> 00:07:44,190 létrehozott egy make fájlt. 132 00:07:44,190 --> 00:07:51,320 És ez azt mondja, hogy hogy tudja futtatni a fordító, az úgynevezett csengés, hogy Will 133 00:07:51,320 --> 00:07:55,560 majd fordítsd a forráskód tiltakozni kód, amely a nullák és egyesek 134 00:07:55,560 --> 00:07:57,720 hogy a számítógép megért. 135 00:07:57,720 --> 00:08:01,610 De egy kicsit később, mi megy mélyrehatóbb a fordítóprogramok. 136 00:08:01,610 --> 00:08:05,640 137 00:08:05,640 --> 00:08:10,800 >> Így emlékszem Pset 0, where-- igen, Kérdése van? 138 00:08:10,800 --> 00:08:11,620 >> KÖZÖNSÉG: [nem hallható]? 139 00:08:11,620 --> 00:08:12,490 >> SPEAKER 1: Igen. 140 00:08:12,490 --> 00:08:14,960 Azt hiszem, tényleg legyen az interneten. 141 00:08:14,960 --> 00:08:15,120 Igen. 142 00:08:15,120 --> 00:08:16,572 >> Közönség: Ez olyan, mint [hallhatatlan]? 143 00:08:16,572 --> 00:08:19,476 144 00:08:19,476 --> 00:08:20,830 >> SPEAKER 1: Nem. 145 00:08:20,830 --> 00:08:25,810 A vannak cs50.net/quizzes. 146 00:08:25,810 --> 00:08:32,900 >> Közönség: Slash vetélkedők, perjel 2013, perjel 0, és kattintson a 147 00:08:32,900 --> 00:08:35,956 vetélkedők 2013 és kvíz 0, felülvizsgálati szakaszban diák. 148 00:08:35,956 --> 00:08:40,380 >> SPEAKER 1: Igen, ha akartok húzza fel, és nézd meg a 149 00:08:40,380 --> 00:08:42,740 saját számítógépén, az is rendben van. 150 00:08:42,740 --> 00:08:43,130 Tegyük fel, hogy újra. 151 00:08:43,130 --> 00:08:44,546 >> KÖZÖNSÉG: [nem hallható]. 152 00:08:44,546 --> 00:08:48,780 >> SPEAKER 1: Igen, [nem hallható] a dummy változó. 153 00:08:48,780 --> 00:08:49,644 Ó, igen? 154 00:08:49,644 --> 00:08:51,372 >> KÖZÖNSÉG: [nem hallható]? 155 00:08:51,372 --> 00:08:54,300 >> SPEAKER 1: nincs, sztrájk nem a vizsga. 156 00:08:54,300 --> 00:08:55,950 Sajnáljuk, a kérdés az volt, az volt sztrájk a vizsga. 157 00:08:55,950 --> 00:08:59,530 És ez nem az. 158 00:08:59,530 --> 00:09:05,780 Tehát Pset 0, nektek kellett volna minden végre valami a semmiből. 159 00:09:05,780 --> 00:09:13,100 És megtudtuk, néhány alapvető programozási építőelemek segítségével semmiből. 160 00:09:13,100 --> 00:09:15,590 >> Szóval vessünk egy pillantást néhány Ezen építőkockák 161 00:09:15,590 --> 00:09:18,170 teszik ki a programot. 162 00:09:18,170 --> 00:09:20,570 Az első a logikai kifejezés. 163 00:09:20,570 --> 00:09:24,540 Logikai kifejezések is, és 0 vagy bármi, ami 164 00:09:24,540 --> 00:09:25,700 két lehetséges érték. 165 00:09:25,700 --> 00:09:30,320 Ebben az esetben, igaz vagy hamis, be vagy ki, és igen vagy nem. 166 00:09:30,320 --> 00:09:35,390 Egy példa egy egyszerű, nagyon egyszerű, programot, amely a logikai 167 00:09:35,390 --> 00:09:39,140 kifejezés itt. 168 00:09:39,140 --> 00:09:43,220 >> Tehát ahhoz, hogy a logikai kifejezések hasznos, van logikai operátorokkal. 169 00:09:43,220 --> 00:09:48,920 Ezek operátorok, hogy lehet használni összehasonlítani bizonyos értékeket. 170 00:09:48,920 --> 00:09:52,820 Így van, és vagy nem egyenlő, kisebb kisebb vagy egyenlő, vagy nagyobb, mint 171 00:09:52,820 --> 00:09:55,130 egyenlő, és kevesebb, mint vagy nagyobb, mint. 172 00:09:55,130 --> 00:09:59,060 De ezek a szereplők nem túl hasznos hacsak nem tudjuk kombinálni őket 173 00:09:59,060 --> 00:10:00,320 körülmények között. 174 00:10:00,320 --> 00:10:04,370 >> Szóval srácok talán emlékszik a semmiből és a p állítja, hogy 175 00:10:04,370 --> 00:10:05,400 Volt körülmények. 176 00:10:05,400 --> 00:10:09,710 Ezek lényegében hasonló villa a logikája a program 177 00:10:09,710 --> 00:10:12,670 hajt végre attól függően, hogy a feltétel teljesül. 178 00:10:12,670 --> 00:10:18,150 Tehát az egyik feltétele, hogy mi volt használják sokszor ez a tanfolyam a 179 00:10:18,150 --> 00:10:21,470 ha más, akkor, és más körülmények között. 180 00:10:21,470 --> 00:10:24,060 >> Íme egy példa arra, hogyan lehet használni, hogy a. 181 00:10:24,060 --> 00:10:28,430 Tudja valaki, hogy a különbség csak használ, ha nyilatkozatok minden 182 00:10:28,430 --> 00:10:32,530 az út le verseket, ha más, ha, és még együtt? 183 00:10:32,530 --> 00:10:33,013 Igen? 184 00:10:33,013 --> 00:10:34,263 >> KÖZÖNSÉG: [nem hallható]. 185 00:10:34,263 --> 00:10:40,741 186 00:10:40,741 --> 00:10:42,160 >> SPEAKER 1: Pontosan. 187 00:10:42,160 --> 00:10:50,210 Tehát, ha volt, ha egészen ez Így, még ha ez az állapot visszatér 188 00:10:50,210 --> 00:10:52,800 igaz, akkor még tovább tesztelés a következő két. 189 00:10:52,800 --> 00:11:00,120 Mivel egy más, ha egy más nyilatkozatot, ha az egyetlen igazat ad vissza, 190 00:11:00,120 --> 00:11:02,640 a többiek nem vizsgálták. 191 00:11:02,640 --> 00:11:05,955 Bármilyen kérdése van az? 192 00:11:05,955 --> 00:11:06,890 Cool. 193 00:11:06,890 --> 00:11:12,240 >> Szóval használjon if-else egy más nyilatkozatot, ha tudod, hogy ez csak 194 00:11:12,240 --> 00:11:14,470 az egyik ilyen esetben. 195 00:11:14,470 --> 00:11:21,550 Tehát tudjuk, hogy ha x kisebb, mint 0, akkor biztosan nem lesz 196 00:11:21,550 --> 00:11:22,890 0-nál nagyobb. 197 00:11:22,890 --> 00:11:26,940 198 00:11:26,940 --> 00:11:31,480 >> Ezután egy másik építőelem hogy tanultunk hurkok. 199 00:11:31,480 --> 00:11:33,310 Van három hurok. 200 00:11:33,310 --> 00:11:35,830 A hurkok, míg a hurkok, és nem közben hurkok. 201 00:11:35,830 --> 00:11:38,730 És általában, amikor leül a írjon valamit, akkor el kell döntenie, 202 00:11:38,730 --> 00:11:40,060 amely a három a használni kívánt. 203 00:11:40,060 --> 00:11:41,900 Szóval hogyan lehet eldönteni, hogy melyik? 204 00:11:41,900 --> 00:11:44,920 205 00:11:44,920 --> 00:11:48,790 >> Mi általában használ a hurok, ha tudjuk hányszor akarjuk iterálására 206 00:11:48,790 --> 00:11:53,650 át valamit, vagy hogy hányszor azt akarjuk, hogy a feladat végrehajtása során. 207 00:11:53,650 --> 00:11:58,830 Az általunk használt while, ha kell egy kis feltétel, hogy igaz, hogy fut. 208 00:11:58,830 --> 00:12:03,730 És az általunk használt csinálni, miközben nagyon hasonló darabig, de azt akarjuk, hogy kódot futtatni 209 00:12:03,730 --> 00:12:04,880 legalább egy alkalommal. 210 00:12:04,880 --> 00:12:09,410 >> Tehát nem, míg, bármi is van a, nem fog mindig fut legalább egy időben. 211 00:12:09,410 --> 00:12:13,120 Mivel, miközben azt lehet, hogy nem fut minden, ha a 212 00:12:13,120 --> 00:12:15,490 feltétel nem teljesül. 213 00:12:15,490 --> 00:12:16,740 Bármilyen kérdése van ezzel? 214 00:12:16,740 --> 00:12:20,480 215 00:12:20,480 --> 00:12:22,860 >> Így szerkezete a hurok. 216 00:12:22,860 --> 00:12:23,620 Ti mind látta ezt. 217 00:12:23,620 --> 00:12:25,320 Inicializálja azt. 218 00:12:25,320 --> 00:12:26,600 Van valamilyen feltétel. 219 00:12:26,600 --> 00:12:32,340 Így például, talán inicializálni mint az i értéke 0-ra. 220 00:12:32,340 --> 00:12:34,040 i kisebb, mint 10. 221 00:12:34,040 --> 00:12:35,442 És i ++. 222 00:12:35,442 --> 00:12:39,010 Nagyon egyszerű, hogy tettünk. 223 00:12:39,010 --> 00:12:42,210 >> Egy while ciklus, hasonlóképpen, akkor hogy valamilyen inicializálás, 224 00:12:42,210 --> 00:12:44,980 valamilyen feltétel, és valamilyen frissítés. 225 00:12:44,980 --> 00:12:51,990 Így valósíthatja meg a hurok is mint a while ciklus ezzel. 226 00:12:51,990 --> 00:12:56,000 És hasonlóképpen a do while ciklus, talán van némi inicializálás, 227 00:12:56,000 --> 00:12:58,640 végre valami, frissíteni, és majd ellenőrizze az állapotát. 228 00:12:58,640 --> 00:13:03,500 229 00:13:03,500 --> 00:13:05,140 >> Tehát most funkciókat. 230 00:13:05,140 --> 00:13:06,460 Rakjuk össze mindent. 231 00:13:06,460 --> 00:13:10,140 Azt érdemes írni néhány fajta funkciót. 232 00:13:10,140 --> 00:13:12,790 Közös funkció, hogy talán már láttuk a legfontosabb. 233 00:13:12,790 --> 00:13:13,770 Main függvény. 234 00:13:13,770 --> 00:13:16,160 Van egy visszatérő típus, int. 235 00:13:16,160 --> 00:13:18,470 Ez egy függvény neve, fő. 236 00:13:18,470 --> 00:13:20,810 És azt érvekkel argc és argv. 237 00:13:20,810 --> 00:13:24,040 Tehát fő csak egy funkció. 238 00:13:24,040 --> 00:13:27,230 >> Egyéb funkciók lehet, hogy használt, printf-- printf egy function-- 239 00:13:27,230 --> 00:13:29,330 GetInt, toupper. 240 00:13:29,330 --> 00:13:32,010 De ezek történetesen már végrehajtani minket 241 00:13:32,010 --> 00:13:33,270 valamilyen könyvtár. 242 00:13:33,270 --> 00:13:37,400 Ha a srácok emlékszel beleértve ez CS50.h könyvtárban, vagy a 243 00:13:37,400 --> 00:13:38,510 standard I / O könyvtár. 244 00:13:38,510 --> 00:13:39,200 Igen, kérdés? 245 00:13:39,200 --> 00:13:41,610 >> KÖZÖNSÉG: A legfontosabb most rejlő c? 246 00:13:41,610 --> 00:13:44,740 Vajon ez csak egyfajta [nem hallható]? 247 00:13:44,740 --> 00:13:47,370 >> SPEAKER 1: A kérdés az, ha a fő velejárója c. 248 00:13:47,370 --> 00:13:51,460 És igen, az összes funkció egy fő funkciója. 249 00:13:51,460 --> 00:13:55,290 Ez a fajta szükséges számítógép hogy tudom, hol kezdjem 250 00:13:55,290 --> 00:13:55,993 futtatja a kódot. 251 00:13:55,993 --> 00:13:58,108 >> Közönség: Akkor nem [nem hallható]? 252 00:13:58,108 --> 00:13:59,480 >> SPEAKER 1: Nem 253 00:13:59,480 --> 00:14:00,760 Egyéb kérdés? 254 00:14:00,760 --> 00:14:03,430 255 00:14:03,430 --> 00:14:04,770 Cool. 256 00:14:04,770 --> 00:14:08,050 Szóval, mint tudod használni a funkciót hogy van írva az Ön számára, akkor is 257 00:14:08,050 --> 00:14:10,380 írja meg saját funkciója. 258 00:14:10,380 --> 00:14:17,050 Ez a funkció, hogy valaki írtak kiszámításához hangerő 259 00:14:17,050 --> 00:14:18,395 Egy q, például. 260 00:14:18,395 --> 00:14:21,300 261 00:14:21,300 --> 00:14:29,500 Van egy visszatérő típus van, ebben az esetben int, a funkció neve q és a 262 00:14:29,500 --> 00:14:31,360 paraméterek listája. 263 00:14:31,360 --> 00:14:34,550 >> És jegyezze meg, hogy meg kell írni az adatokat A paraméter típusát kívánt 264 00:14:34,550 --> 00:14:38,660 használja, vagy más funkciót nem tudni, hogy milyen 265 00:14:38,660 --> 00:14:41,650 paramétert kéne elfogadása. 266 00:14:41,650 --> 00:14:48,110 Szóval, ebben az esetben, azt akarjuk, egy egész szám, mint a mi bemenet. 267 00:14:48,110 --> 00:14:50,390 Szóval, miért is akarjuk használni funkciókat? 268 00:14:50,390 --> 00:14:52,800 >> Először is, nagy a szervezet. 269 00:14:52,800 --> 00:14:56,350 Segítenek szakítani a kódot több szervezett darabokat, és 270 00:14:56,350 --> 00:14:57,960 könnyebben olvasható. 271 00:14:57,960 --> 00:14:59,760 Egyszerűsítés. 272 00:14:59,760 --> 00:15:01,740 Ez jó a design. 273 00:15:01,740 --> 00:15:04,570 Ha olvasod a kódrészletet és a fő funkciója valóban, 274 00:15:04,570 --> 00:15:07,750 nagyon hosszú, lehet, hogy nehezebb ok, hogy mi folyik itt. 275 00:15:07,750 --> 00:15:11,710 Tehát, ha bontani funkciók lehet, hogy könnyebb legyen olvasni. 276 00:15:11,710 --> 00:15:12,750 És újra-képességét. 277 00:15:12,750 --> 00:15:16,940 Ha van egy darab kód, amit most hívott vagy fuss többször, 278 00:15:16,940 --> 00:15:20,690 ahelyett, hogy felülírná a kódot 10-szer a fő funkciója, lehet, hogy 279 00:15:20,690 --> 00:15:21,440 akarod használni azt. 280 00:15:21,440 --> 00:15:25,740 És akkor minden alkalommal meg kell használni, hogy a kódrészletet, hívja a funkciót. 281 00:15:25,740 --> 00:15:30,550 282 00:15:30,550 --> 00:15:35,380 >> Tehát most, ha arra gondolunk, vissza a semmiből, mi is beszéltünk néhány fogalom, 283 00:15:35,380 --> 00:15:37,680 amelyek közül az egyik menetvágó. 284 00:15:37,680 --> 00:15:41,120 Szál a koncepció több szekvenciáit kód 285 00:15:41,120 --> 00:15:43,040 végrehajtó ugyanabban az időben. 286 00:15:43,040 --> 00:15:47,490 Így gondolom, vissza nap egyik, ahol Dávid srácok számolja ki a számát 287 00:15:47,490 --> 00:15:48,440 ember a szobában. 288 00:15:48,440 --> 00:15:50,550 >> Lényegében mi A minden ti voltatok 289 00:15:50,550 --> 00:15:52,370 futás külön szálon. 290 00:15:52,370 --> 00:15:55,540 És ezek a szálak jönnek össze hogy valamilyen választ. 291 00:15:55,540 --> 00:15:58,890 Hasonlóképpen, a Scratch, ha van több sprite, lehet, hogy 292 00:15:58,890 --> 00:16:01,070 Van egy macska és egy kutya. 293 00:16:01,070 --> 00:16:08,770 És akkor egyszerre futó saját szkripteket. 294 00:16:08,770 --> 00:16:10,020 Ez egy példa a menetvágó. 295 00:16:10,020 --> 00:16:12,860 296 00:16:12,860 --> 00:16:18,000 >> És a másik fogalom, ami bevezetett karcolás volt eseményeket. 297 00:16:18,000 --> 00:16:22,550 És események, amikor több rész a kódot kommunikálnak egymással. 298 00:16:22,550 --> 00:16:26,840 A Scratch, ez volt, amikor használta a broadcast vezérlés és a Mikor én 299 00:16:26,840 --> 00:16:29,500 Fogadás blokkok. 300 00:16:29,500 --> 00:16:35,170 >> És azt is, a probléma Set 4, láttuk egy kicsit az események is. 301 00:16:35,170 --> 00:16:38,250 Srácok volna használni a Gevent könyvtár. 302 00:16:38,250 --> 00:16:42,450 És ott volt a funkció waitForClick amelyben vártál 303 00:16:42,450 --> 00:16:44,300 a felhasználót, hogy kattintson. 304 00:16:44,300 --> 00:16:47,870 És a kattintás, ebben az esetben lenne az esemény, és várja kattintás a 305 00:16:47,870 --> 00:16:49,120 eseménykezelő. 306 00:16:49,120 --> 00:16:53,690 307 00:16:53,690 --> 00:16:58,630 >> És azt is, az egész fut a psets és dolgozik a psets, akkor 308 00:16:58,630 --> 00:17:01,920 Lehet, hogy érintkeznek néhány ilyen parancsok. 309 00:17:01,920 --> 00:17:05,579 Ez az, amit beírt a terminál ablak vagy bármi ablak 310 00:17:05,579 --> 00:17:12,119 hogy megjelenik a g Edit, lényegében, navigálni a számítógép. 311 00:17:12,119 --> 00:17:19,440 >> Így például, LS felsorolja a tartalmát egy könyvtárba. 312 00:17:19,440 --> 00:17:22,510 Készíts könyvtárban létrehoz egy új mappát. 313 00:17:22,510 --> 00:17:24,819 CD, változás könyvtárba. 314 00:17:24,819 --> 00:17:28,400 RM, távolítsa el, törli a fájlt vagy valami könyvtár. 315 00:17:28,400 --> 00:17:31,050 Majd távolítsa könyvtár eltávolítja a könyvtár. 316 00:17:31,050 --> 00:17:32,300 >> KÖZÖNSÉG: [nem hallható]? 317 00:17:32,300 --> 00:17:36,978 318 00:17:36,978 --> 00:17:38,370 >> SPEAKER 1: Ja, biztos. 319 00:17:38,370 --> 00:17:42,530 320 00:17:42,530 --> 00:17:46,040 Elnézést, a kérdés az volt, ha azt sugallja, hogy ezt az 321 00:17:46,040 --> 00:17:48,840 a puskát. 322 00:17:48,840 --> 00:17:49,440 Ez segíthet. 323 00:17:49,440 --> 00:17:51,490 Ha van hely, akkor tedd azt. 324 00:17:51,490 --> 00:17:56,170 Ez is csak általában elég jó emlékezni, mert használat közben 325 00:17:56,170 --> 00:17:59,060 érdemes csak van ez megjegyzett. 326 00:17:59,060 --> 00:18:02,750 Hogy lesz, hogy az életed sokkal könnyebb. 327 00:18:02,750 --> 00:18:04,000 Nem válaszolok a kérdésére? 328 00:18:04,000 --> 00:18:10,528 329 00:18:10,528 --> 00:18:14,290 >> Tehát most, beszélgettünk egy kicsit röviden a könyvtárak. 330 00:18:14,290 --> 00:18:18,570 De a két legfontosabb, amit már segítségével eddig a tanfolyam 331 00:18:18,570 --> 00:18:20,860 standard I / O és CS50. 332 00:18:20,860 --> 00:18:25,410 Milyen dolgokat tartalmazza a szokásos I / O könyvtár? 333 00:18:25,410 --> 00:18:28,410 >> Igen, eddig általunk használt printf. 334 00:18:28,410 --> 00:18:31,150 A CS50, általunk használt GetInt és getString. 335 00:18:31,150 --> 00:18:37,200 És az adatok string típusú is előfordul, kell bejelenteni ebben CS50 könyvtárban. 336 00:18:37,200 --> 00:18:40,250 Majd beszéljünk egy kicsit mélyrehatóbban a hogyan könyvtárak működnek és hogyan 337 00:18:40,250 --> 00:18:41,870 befolyásolja a többi a kódot. 338 00:18:41,870 --> 00:18:46,220 De ezek a két legfontosabb, hogy mi érintkezésbe az eddig 339 00:18:46,220 --> 00:18:48,430 a kurzus. 340 00:18:48,430 --> 00:18:50,050 >> Típusok. 341 00:18:50,050 --> 00:18:58,120 Ezek jó emlékezni, hogy mennyi minden típus képviseli, vagy hogyan 342 00:18:58,120 --> 00:19:02,840 sok byte típusú requires-- 343 00:19:02,840 --> 00:19:04,990 int, 4 bájt; char, 1 byte. 344 00:19:04,990 --> 00:19:06,550 Float 4 bájt. 345 00:19:06,550 --> 00:19:07,782 Mi ez a kettős? 346 00:19:07,782 --> 00:19:09,032 >> KÖZÖNSÉG: [nem hallható]. 347 00:19:09,032 --> 00:19:11,398 348 00:19:11,398 --> 00:19:16,240 >> SPEAKER 1: Igen, így úszó de megduplázza a méretét. 349 00:19:16,240 --> 00:19:17,150 Mi a helyzet a hosszú? 350 00:19:17,150 --> 00:19:18,400 >> KÖZÖNSÉG: [nem hallható]. 351 00:19:18,400 --> 00:19:21,614 352 00:19:21,614 --> 00:19:24,680 >> SPEAKER 1: OK. 353 00:19:24,680 --> 00:19:25,410 Mi az a hosszú? 354 00:19:25,410 --> 00:19:26,660 >> KÖZÖNSÉG: [nem hallható]. 355 00:19:26,660 --> 00:19:29,400 356 00:19:29,400 --> 00:19:31,450 >> SPEAKER 1: Igen, dupla int. 357 00:19:31,450 --> 00:19:34,240 358 00:19:34,240 --> 00:19:34,705 Igen. 359 00:19:34,705 --> 00:19:36,100 >> KÖZÖNSÉG: [nem hallható]. 360 00:19:36,100 --> 00:19:38,030 >> SPEAKER 1: Long [nem hallható]. 361 00:19:38,030 --> 00:19:41,860 Majd egy hosszú, hosszú kétszerese. 362 00:19:41,860 --> 00:19:42,814 >> Közönség: Nem, nem. 363 00:19:42,814 --> 00:19:47,107 Hosszú csak egy int. 364 00:19:47,107 --> 00:19:50,910 Attól függ, hogy az építészet előtt a [nem hallható] 365 00:19:50,910 --> 00:19:52,922 és int, hogy az azonos méretű. 366 00:19:52,922 --> 00:19:54,172 [Nem hallható]. 367 00:19:54,172 --> 00:19:58,841 368 00:19:58,841 --> 00:20:00,920 >> SPEAKER 1: Tehát egy hosszú és egy int ugyanaz. 369 00:20:00,920 --> 00:20:02,943 Majd egy hosszú, hosszú kétszerese az int. 370 00:20:02,943 --> 00:20:03,910 Cool. 371 00:20:03,910 --> 00:20:05,550 És akkor, mi az utolsó típus? 372 00:20:05,550 --> 00:20:06,510 >> Közönség: Pointer. 373 00:20:06,510 --> 00:20:10,350 >> SPEAKER 1: Igen, így megtudtuk, egy kicsit a mutatók. 374 00:20:10,350 --> 00:20:14,015 És függetlenül attól, hogy mi az a mutató rámutatva hogy-- ez lehet egy char csillag 375 00:20:14,015 --> 00:20:15,880 vagy egy int star-- 376 00:20:15,880 --> 00:20:20,530 ez mindig 4 bájt a mutató. 377 00:20:20,530 --> 00:20:21,633 Kérdések róla? 378 00:20:21,633 --> 00:20:22,116 Igen? 379 00:20:22,116 --> 00:20:24,531 >> KÖZÖNSÉG: [nem hallható]? 380 00:20:24,531 --> 00:20:29,530 >> SPEAKER 1: Tehát egy hosszú és egy int vannak ugyanaz ebben CS50 készülék. 381 00:20:29,530 --> 00:20:32,302 >> Közönség: A készülék teljesen cserélhető. 382 00:20:32,302 --> 00:20:33,510 >> SPEAKER 1: Igen. 383 00:20:33,510 --> 00:20:36,610 Tehát egy hosszú, hosszú kétszer egy int. 384 00:20:36,610 --> 00:20:39,250 >> Közönség: Ez a 32 bit? 385 00:20:39,250 --> 00:20:40,620 >> SPEAKER 1: 32 bit, igen. 386 00:20:40,620 --> 00:20:43,572 >> Közönség: így [nem hallható]? 387 00:20:43,572 --> 00:20:46,790 >> SPEAKER 1: Igen, ha nem kifejezetten azt mondják, te 388 00:20:46,790 --> 00:20:47,870 kell vállalnia a 32 bit. 389 00:20:47,870 --> 00:20:50,040 >> Közönség: Nem mondanám, hogy valami mint feltételezve 390 00:20:50,040 --> 00:20:51,498 építészet, mint a készülék. 391 00:20:51,498 --> 00:20:58,800 392 00:20:58,800 --> 00:21:01,710 64 bit, az egyetlen dolog, ami változás long és a mutatók. 393 00:21:01,710 --> 00:21:05,614 Mindketten [nem hallható]. 394 00:21:05,614 --> 00:21:06,590 >> SPEAKER 1: Igen? 395 00:21:06,590 --> 00:21:07,566 >> Közönség: kérdés. 396 00:21:07,566 --> 00:21:10,982 Így az egyik gyakorlat vetélkedők, azt kérdezi egy unsigned int. 397 00:21:10,982 --> 00:21:15,374 Szóval hogyan lenne meghatározni egy int [nem hallható]? 398 00:21:15,374 --> 00:21:18,140 >> SPEAKER 1: Jelöletlen A szintén 4 byte. 399 00:21:18,140 --> 00:21:21,172 De mi a különbség egy aláírt int és unsigned int? 400 00:21:21,172 --> 00:21:22,422 >> KÖZÖNSÉG: [nem hallható]. 401 00:21:22,422 --> 00:21:24,868 402 00:21:24,868 --> 00:21:25,630 >> SPEAKER 1: Igaz. 403 00:21:25,630 --> 00:21:27,570 Egy képviselhet negatív értékeket. 404 00:21:27,570 --> 00:21:28,580 De hogyan csinálni? 405 00:21:28,580 --> 00:21:30,536 >> KÖZÖNSÉG: [nem hallható]. 406 00:21:30,536 --> 00:21:36,370 >> SPEAKER 1: Igen, lement 1 bit, hogy képviselje a jel. 407 00:21:36,370 --> 00:21:40,910 408 00:21:40,910 --> 00:21:45,040 Az aláírt már egy kicsit, hogy a képviseli a jel. 409 00:21:45,040 --> 00:21:48,886 És aláírás csak az összes pozitív. 410 00:21:48,886 --> 00:21:50,365 >> Közönség: OK. 411 00:21:50,365 --> 00:21:54,230 Szóval azt mondod, hogy a kettős az kétszer akkora, mint egy úszó? 412 00:21:54,230 --> 00:21:58,202 >> SPEAKER 1: Double kétszer akkora, mint egy úszó, igen. 413 00:21:58,202 --> 00:22:01,639 >> Közönség: Hogyan működik a mutató egy hosszú, hosszú [nem hallható]? 414 00:22:01,639 --> 00:22:06,058 415 00:22:06,058 --> 00:22:10,870 >> SPEAKER 1: Tehát a kérdés az, hogy hogyan működik A mutató egy hosszú long-- 416 00:22:10,870 --> 00:22:13,800 Hogy van, hogy csak négy bájt, ha egy hosszú, hosszú a 8 bájt. 417 00:22:13,800 --> 00:22:17,310 Úgy emlékszem, mi is az a mutató, lényegében a nagyon alap értékét. 418 00:22:17,310 --> 00:22:19,046 >> KÖZÖNSÉG: [nem hallható]. 419 00:22:19,046 --> 00:22:22,670 >> SPEAKER 1: Igen, tehát a mutató csak egy memóriahely. 420 00:22:22,670 --> 00:22:28,040 Így nem számít, hogy mennyi helyet Ez a mutató mutat. 421 00:22:28,040 --> 00:22:32,060 Csak szüksége van 4 byte nyomon követni Az, hogy a memória hely. 422 00:22:32,060 --> 00:22:34,760 423 00:22:34,760 --> 00:22:36,010 Egyéb kérdés? 424 00:22:36,010 --> 00:22:39,800 425 00:22:39,800 --> 00:22:41,050 Cool. 426 00:22:41,050 --> 00:22:42,920 427 00:22:42,920 --> 00:22:47,460 >> Tehát az utolsó dolog, amit szabványos kimenet. 428 00:22:47,460 --> 00:22:51,020 Akkor használja őket gyakran elég, hogy vissza tud emlékezni. 429 00:22:51,020 --> 00:22:54,800 De ez az, amikor az általunk használt printf, például. 430 00:22:54,800 --> 00:22:59,260 És mi van ezeknek a helyőrzők hogy hívták formátum kódokat. 431 00:22:59,260 --> 00:23:03,910 >> Tehát százalék c char, százalék I int, és mi is használhatjuk százalék d. 432 00:23:03,910 --> 00:23:05,130 Ez ugyanaz a dolog. 433 00:23:05,130 --> 00:23:08,200 , De általában a mi CS50 próbáld meg használni százalék i. 434 00:23:08,200 --> 00:23:09,860 Százalék F úszó. 435 00:23:09,860 --> 00:23:15,620 Százalék ld hosszú, hosszú és százalék s karakterlánc. 436 00:23:15,620 --> 00:23:18,550 >> Hasonlóképpen, mi már egy pár ezen szekvenciák. 437 00:23:18,550 --> 00:23:22,431 Például backslash n új sor. 438 00:23:22,431 --> 00:23:26,910 Ez csak az, amikor a formázás A kódot nyomtatott f. 439 00:23:26,910 --> 00:23:27,260 Igen? 440 00:23:27,260 --> 00:23:28,906 >> Közönség: Milyen százalék D? 441 00:23:28,906 --> 00:23:31,850 >> SPEAKER 1: Tehát a kérdés az, ami százalékos D? 442 00:23:31,850 --> 00:23:33,270 Százalék d a ints. 443 00:23:33,270 --> 00:23:37,392 Százalék d és százalék én ugyanaz. 444 00:23:37,392 --> 00:23:41,130 >> Közönség: Mi a különbség a backslash n és backslash r? 445 00:23:41,130 --> 00:23:45,300 >> SPEAKER 1: Tehát a kérdés az, ami a különbség a holtjáték n és 446 00:23:45,300 --> 00:23:48,615 holtjáték r? 447 00:23:48,615 --> 00:23:50,906 Azt hiszem, backslash r fektettünk-- 448 00:23:50,906 --> 00:23:54,340 >> KÖZÖNSÉG Szóval backslash r csak azt jelenti, visszatér a sor elejére 449 00:23:54,340 --> 00:23:56,670 anélkül, hogy lesz egy új sor. 450 00:23:56,670 --> 00:24:01,000 Tehát, ha nyomtatni backslash r és menj vissza a sor elejére 451 00:24:01,000 --> 00:24:04,005 akkor nyomtathat több dolgot, felülírja a dolog, hogy ez már 452 00:24:04,005 --> 00:24:04,390 [Nem hallható]. 453 00:24:04,390 --> 00:24:06,725 Mivel n valóban megy egy új vonal és megy [nem hallható]. 454 00:24:06,725 --> 00:24:10,525 455 00:24:10,525 --> 00:24:13,915 >> SPEAKER 1: Nos, bármilyen egyéb kérdés? 456 00:24:13,915 --> 00:24:15,430 Rendben. 457 00:24:15,430 --> 00:24:18,617 Fogom kézzel le kell Dan, aki a jövőben is. 458 00:24:18,617 --> 00:24:25,078 >> [Taps] 459 00:24:25,078 --> 00:25:08,814 460 00:25:08,814 --> 00:25:09,720 >> DAN: Rendicsek. 461 00:25:09,720 --> 00:25:18,590 Így fogok beszélni egy széles tartomány ötletek az osztály, amely 462 00:25:18,590 --> 00:25:23,220 nagyjából képviselője a héten két és A hét elején három elindulás 463 00:25:23,220 --> 00:25:28,690 A casting, ami csak egy módja kezelésére értéke, mint egy bizonyos típusú 464 00:25:28,690 --> 00:25:30,830 értéke egy másik típusú. 465 00:25:30,830 --> 00:25:34,110 Így meg tudjuk csinálni ezt a karakterről ints, úszik ints, és 466 00:25:34,110 --> 00:25:35,360 hosszú long megkétszereződik. 467 00:25:35,360 --> 00:25:38,170 468 00:25:38,170 --> 00:25:44,500 >> Mindezek a dolgok lehet használni, mint módokon kezelésének néhány számérték 469 00:25:44,500 --> 00:25:48,370 mínusz char néhány más számérték. 470 00:25:48,370 --> 00:25:54,480 Tehát vannak problémák ezzel, a Természetesen, ami akkor jön, amikor a leadott 471 00:25:54,480 --> 00:25:57,860 dolgok, mint úszó a ints. 472 00:25:57,860 --> 00:26:00,500 Szóval ez egy kicsit furcsa. 473 00:26:00,500 --> 00:26:03,170 Van egy úszó, ami 1,31. 474 00:26:03,170 --> 00:26:05,220 Azt szorozd meg 10,000. 475 00:26:05,220 --> 00:26:08,380 És akkor nyomtassa ki, mint egy int. 476 00:26:08,380 --> 00:26:09,630 Mit jelent ez a teljesítmény? 477 00:26:09,630 --> 00:26:11,600 478 00:26:11,600 --> 00:26:14,020 10,000 alkalommal 1.31. 479 00:26:14,020 --> 00:26:18,761 Így 13,000, ez a becslés? 480 00:26:18,761 --> 00:26:20,685 >> Közönség: Azt hiszem, 10.000. 481 00:26:20,685 --> 00:26:24,234 >> DAN: Szóval azt megszorozzák 10.000 mielőtt én öntése. 482 00:26:24,234 --> 00:26:25,202 >> Közönség: Oh. 483 00:26:25,202 --> 00:26:27,622 Nem létezik az egyik 9 és néhány 0. számok? 484 00:26:27,622 --> 00:26:29,270 >> DAN: Lehet, hogy valami furcsa számjegy. 485 00:26:29,270 --> 00:26:32,410 486 00:26:32,410 --> 00:26:37,670 Így van, ez 1,3-szer 10.000. 487 00:26:37,670 --> 00:26:40,040 Szóval ez 13.000. 488 00:26:40,040 --> 00:26:41,313 És ez az extra weird-- 489 00:26:41,313 --> 00:26:42,160 >> Közönség: 13,100. 490 00:26:42,160 --> 00:26:42,650 >> DAN: 13,100. 491 00:26:42,650 --> 00:26:44,910 Köszönöm, Rob. 492 00:26:44,910 --> 00:26:46,610 És ez az extra weirdness-- 493 00:26:46,610 --> 00:26:48,060 ez 9,9-- 494 00:26:48,060 --> 00:26:53,860 egyszerűen azért, mert ez a casting végül lefelé kerekítve, ahol 495 00:26:53,860 --> 00:26:55,394 nem kellett volna. 496 00:26:55,394 --> 00:26:55,871 Igen. 497 00:26:55,871 --> 00:26:58,256 >> Közönség: Az öntési történik után valami mást? 498 00:26:58,256 --> 00:27:03,865 >> DAN: Szóval, mert van ez a nyomtatott, az teszi ezt szorzás előtt 499 00:27:03,865 --> 00:27:05,230 teszi ezt öntés. 500 00:27:05,230 --> 00:27:06,140 >> KÖZÖNSÉG: [nem hallható]. 501 00:27:06,140 --> 00:27:11,350 >> DAN: Azt hiszem, ez az első öntött, Igen, ami 10.000. 502 00:27:11,350 --> 00:27:12,610 Van még valami? 503 00:27:12,610 --> 00:27:13,330 Cool. 504 00:27:13,330 --> 00:27:16,344 Szóval ez a 13.099. 505 00:27:16,344 --> 00:27:17,840 Miért történik ez? 506 00:27:17,840 --> 00:27:18,900 Pontatlanság. 507 00:27:18,900 --> 00:27:21,020 >> Úszók nem tökéletes. 508 00:27:21,020 --> 00:27:27,550 Ők csak a számoknak a egyes számjegyek száma. 509 00:27:27,550 --> 00:27:35,120 Tehát, ha ki kell nyomtatni 8 sig füge ez úszó, kapunk egyfajta 510 00:27:35,120 --> 00:27:36,800 csúnya szám. 511 00:27:36,800 --> 00:27:45,580 És ez azért van, mert 1.31 nem pontosan képviseli egyszerű 512 00:27:45,580 --> 00:27:49,000 hatásköre két gép. 513 00:27:49,000 --> 00:27:53,530 Így végül figyelembe a legközelebb Gondolom, amely végül 514 00:27:53,530 --> 00:27:55,710 hogy egy kicsit alacsony. 515 00:27:55,710 --> 00:27:57,730 Értelme? 516 00:27:57,730 --> 00:27:59,110 OK. 517 00:27:59,110 --> 00:28:05,840 >> Most váltott egy másfajta Ennek feltételes állítások, ahol minden 518 00:28:05,840 --> 00:28:09,900 törődünk egyetlen változó. 519 00:28:09,900 --> 00:28:16,570 Tehát ebben a konkrét példában vagyunk kapok egy egész szám a felhasználó elől. 520 00:28:16,570 --> 00:28:21,070 Aztán keresünk mi az egész szám. 521 00:28:21,070 --> 00:28:23,500 Feltehetően ez szám egy-négy. 522 00:28:23,500 --> 00:28:24,800 Ez az, amit kérünk. 523 00:28:24,800 --> 00:28:28,450 >> Szóval nem egy kapcsoló a változó nevét. 524 00:28:28,450 --> 00:28:34,290 Akkor létre esetekben lehetséges értékek lehetne. 525 00:28:34,290 --> 00:28:37,730 Tehát ha az egyik, azt mondják, hogy ez alacsony. 526 00:28:37,730 --> 00:28:41,080 És akkor szünet, hogy ki A kapcsoló feltétel úgy 527 00:28:41,080 --> 00:28:43,270 ne folytasd. 528 00:28:43,270 --> 00:28:44,830 >> A következő case-- 529 00:28:44,830 --> 00:28:46,940 így az esetben két és eset three-- 530 00:28:46,940 --> 00:28:51,920 ha ez esetben a két csak esik le a az első sorban a kód azt látja, mint a 531 00:28:51,920 --> 00:28:55,400 az esetben három, amíg nem találkozik egy break. 532 00:28:55,400 --> 00:29:00,430 Így az oka annak, hogy ha az egyik, hogy csak nyomtatott alacsony, mert én 533 00:29:00,430 --> 00:29:01,890 ezt szünet van. 534 00:29:01,890 --> 00:29:05,360 Ha, mondjuk, figyelmen kívül hagyta ezt break-- ha én dobta ezt breakaway-- 535 00:29:05,360 --> 00:29:09,740 ez nyomtatni alacsony, és akkor ez nyomtatni középső, és akkor lenne megtörni. 536 00:29:09,740 --> 00:29:12,200 >> Tehát szünetek fontos részét kapcsoló feltételek és 537 00:29:12,200 --> 00:29:14,340 kellene lennie. 538 00:29:14,340 --> 00:29:20,070 Olyan esetek, amelyek nem szerepelnek kifejezetten kezeli az alapértelmezett 539 00:29:20,070 --> 00:29:26,645 esetben a kapcsolót, és meg kell hozza. 540 00:29:26,645 --> 00:29:31,363 >> Közönség: Tehát 1, 2, 3, és a 4. lenne n? 541 00:29:31,363 --> 00:29:33,310 >> DAN: Értékek az n lehet. 542 00:29:33,310 --> 00:29:34,654 Igen. 543 00:29:34,654 --> 00:29:35,146 Igen? 544 00:29:35,146 --> 00:29:37,606 >> Közönség: Tehát, ha van hogy [nem hallható]? 545 00:29:37,606 --> 00:29:44,002 546 00:29:44,002 --> 00:29:46,830 >> DAN: Azt nyomtatni alacsony, majd a ez nyomtatni középső, és 547 00:29:46,830 --> 00:29:47,400 akkor szakadna. 548 00:29:47,400 --> 00:29:50,244 >> Közönség: Miért lenne kinyomtatni közép ha [nem hallható]? 549 00:29:50,244 --> 00:29:54,036 550 00:29:54,036 --> 00:30:00,550 >> DAN: Tehát mindent az ügy előtt egy kis szünetet alá esik. 551 00:30:00,550 --> 00:30:09,390 Tehát ha az egyik nyomtatott alatta eset egy mint ez a következő nyomtatás. 552 00:30:09,390 --> 00:30:09,890 Igen? 553 00:30:09,890 --> 00:30:11,140 >> KÖZÖNSÉG: [nem hallható]? 554 00:30:11,140 --> 00:30:15,890 555 00:30:15,890 --> 00:30:22,170 >> DAN: Tehát ez a szám csak egy bizonyos érték, hogy ez a változó 556 00:30:22,170 --> 00:30:23,420 vehet, igaz? 557 00:30:23,420 --> 00:30:26,740 558 00:30:26,740 --> 00:30:28,490 Van ennek értelme? 559 00:30:28,490 --> 00:30:28,990 Igen. 560 00:30:28,990 --> 00:30:31,490 >> KÖZÖNSÉG: [nem hallható]? 561 00:30:31,490 --> 00:30:34,130 >> DAN: Igen, az esetben két fog nyomtatni középső, majd szünet. 562 00:30:34,130 --> 00:30:35,380 >> KÖZÖNSÉG: [nem hallható]? 563 00:30:35,380 --> 00:30:37,954 564 00:30:37,954 --> 00:30:40,050 >> DAN: Azt hiszem, minden? 565 00:30:40,050 --> 00:30:43,855 Milyen más adattípusok tud átkapcsolás? 566 00:30:43,855 --> 00:30:46,320 >> Közönség: válthat bármely adattípusok. 567 00:30:46,320 --> 00:30:50,905 De ez csak azt jelenti, semmi több, mint karakter és ints és ilyesmi, mert 568 00:30:50,905 --> 00:30:55,600 ha áttérnek a mutató hogy nem igazán van értelme, 569 00:30:55,600 --> 00:30:59,555 átkapcsolás terhelések, ha még mondjuk ezt teszed, mert a lebegőpontos 570 00:30:59,555 --> 00:31:02,840 A precíziós, amit nem igazán akarom, hogy egyébként. 571 00:31:02,840 --> 00:31:07,320 Tehát nagyon sok, csak ints és karakter és ilyesmi. 572 00:31:07,320 --> 00:31:12,360 >> DAN: Igen, ha van kifejezett értékeket, hogy tudod, azt hiszem, lehet 573 00:31:12,360 --> 00:31:14,250 hogy a kapcsoló valóban hasznos. 574 00:31:14,250 --> 00:31:17,094 575 00:31:17,094 --> 00:31:18,990 Jó? 576 00:31:18,990 --> 00:31:21,370 OK. 577 00:31:21,370 --> 00:31:26,180 >> Köre a tartomány, hogy a bejelentett változó kiterjed. 578 00:31:26,180 --> 00:31:32,190 Tehát ebben a kis kódrészletet van, lenne teljes a hibák. 579 00:31:32,190 --> 00:31:41,450 És az ok, hogy én kijelentette, ez int i hatályán belül ez a for ciklus. 580 00:31:41,450 --> 00:31:46,390 Aztán próbálom hivatkozást i kívül, hogy hurok hatály. 581 00:31:46,390 --> 00:31:50,330 >> Tehát alapvetően, akkor gondolj hatály , mint bármi, amit kijelentik 582 00:31:50,330 --> 00:31:59,750 A belsejében egy sor kapcsos zárójelek csak létezik az említett kapcsos zárójeleket. 583 00:31:59,750 --> 00:32:04,990 És ha megpróbálod, és használni, hogy a változó kívül azokat kapcsos zárójelek, akkor 584 00:32:04,990 --> 00:32:08,356 kap egy hiba a fordító. 585 00:32:08,356 --> 00:32:08,812 Igen? 586 00:32:08,812 --> 00:32:09,724 >> Közönség: Tehát ez nem működik? 587 00:32:09,724 --> 00:32:11,790 >> DAN: Ez nem működik, igen. 588 00:32:11,790 --> 00:32:17,190 589 00:32:17,190 --> 00:32:18,660 Strings. 590 00:32:18,660 --> 00:32:19,780 Karakterlánc egy char *. 591 00:32:19,780 --> 00:32:22,250 Ők pontosan ugyanaz. 592 00:32:22,250 --> 00:32:25,540 Ők csak mutatókat karaktereket. 593 00:32:25,540 --> 00:32:33,000 És minden vonósok, hogy van véget kell A backslash nulla, ami csak 594 00:32:33,000 --> 00:32:34,410 C egyezmény. 595 00:32:34,410 --> 00:32:36,680 >> Úgy hívják a NULL terminátor. 596 00:32:36,680 --> 00:32:39,050 És NULL-- 597 00:32:39,050 --> 00:32:41,670 tőke N, tőke U, a tőke L, tőke L-- 598 00:32:41,670 --> 00:32:44,290 nem ugyanaz, mint a NULL terminátor. 599 00:32:44,290 --> 00:32:46,640 Ez a mutató. 600 00:32:46,640 --> 00:32:48,280 Ez a karaktert. 601 00:32:48,280 --> 00:32:49,530 Ezek nagyon különböző. 602 00:32:49,530 --> 00:32:50,200 Emlékszem rá. 603 00:32:50,200 --> 00:32:52,320 Ez lesz a kvíz, valószínűleg. 604 00:32:52,320 --> 00:32:54,040 Nem láttam a kvíz. 605 00:32:54,040 --> 00:32:57,880 606 00:32:57,880 --> 00:32:58,840 Igen? 607 00:32:58,840 --> 00:33:01,232 >> Közönség: Tehát NULL, mondjuk, a mutató? 608 00:33:01,232 --> 00:33:01,995 >> DAN: Igen. 609 00:33:01,995 --> 00:33:05,170 >> Közönség: Mit [nem hallható]? 610 00:33:05,170 --> 00:33:10,050 >> DAN: Ha, mondjuk, a malloc nevezzük, ha nincs elég memória, hogy 611 00:33:10,050 --> 00:33:14,400 bármilyen méretű kérsz, malloc visszatér NULL. 612 00:33:14,400 --> 00:33:19,550 Ez alapvetően ha egy funkció volna vissza a mutató, akkor 613 00:33:19,550 --> 00:33:22,600 ellenőrizni kell ellen NULL mert NULL egy szép good-- 614 00:33:22,600 --> 00:33:25,260 ez, egyfajta, a szemét érték. 615 00:33:25,260 --> 00:33:27,050 Ez egy nulla amennyire mutatók menni. 616 00:33:27,050 --> 00:33:29,630 617 00:33:29,630 --> 00:33:32,250 >> Amikor hívja a funkció, amely visszaadja a mutató. 618 00:33:32,250 --> 00:33:35,960 Fogsz szeretné ellenőrizni, hogy arról, hogy ez a mutató nem NULL 619 00:33:35,960 --> 00:33:37,760 mert NULL nagyon gyakori. 620 00:33:37,760 --> 00:33:40,160 Ez a fajta szemetet visszatérés. 621 00:33:40,160 --> 00:33:44,902 Tehát, ha valami nem megy rendben, csak vissza NULL helyette. 622 00:33:44,902 --> 00:33:45,898 >> KÖZÖNSÉG: [nem hallható]? 623 00:33:45,898 --> 00:33:48,922 >> DAN: Igen, és hogy van ez. 624 00:33:48,922 --> 00:33:51,750 >> KÖZÖNSÉG: [nem hallható]? 625 00:33:51,750 --> 00:33:52,800 >> DAN: Helyesírás, mint ez. 626 00:33:52,800 --> 00:33:54,150 Ez a NULL terminátor. 627 00:33:54,150 --> 00:33:56,560 Ez kisbetűs N-U-L-L, ha te helyesírási. 628 00:33:56,560 --> 00:33:59,860 >> Közönség: Én csak elmentem vissza, és teszteltük. 629 00:33:59,860 --> 00:34:03,010 És ha megpróbálod, hogy a lebegőpontos érték egy kapcsolóval, akkor kiabálni veled 630 00:34:03,010 --> 00:34:05,916 mondván állítás igényel kifejezés Az egész típusú. 631 00:34:05,916 --> 00:34:07,166 >> DAN: Tessék. 632 00:34:07,166 --> 00:34:09,639 633 00:34:09,639 --> 00:34:12,246 De igen, mi volt a kérdés? 634 00:34:12,246 --> 00:34:13,496 >> KÖZÖNSÉG: [nem hallható]? 635 00:34:13,496 --> 00:34:16,150 636 00:34:16,150 --> 00:34:23,679 >> DAN: Szóval főváros N, tőke U, a tőke L, a tőke L egy valódi c dolog. 637 00:34:23,679 --> 00:34:29,719 Ez a NULL pointer és akarat csak kezelni. 638 00:34:29,719 --> 00:34:33,530 Akkor soha nem próbálja meg, és pontosan a NULL karakter és lát 639 00:34:33,530 --> 00:34:35,630 más út, mint ez. 640 00:34:35,630 --> 00:34:36,610 Igen? 641 00:34:36,610 --> 00:34:42,490 >> Közönség: Tehát visszatérve char max vagy valamit a jegyzeteket, nem igaz 642 00:34:42,490 --> 00:34:43,960 testesítik meg ugyanazt a funkciót mint [nem hallható]? 643 00:34:43,960 --> 00:34:50,655 644 00:34:50,655 --> 00:34:54,949 >> Közönség: Szóval azt utalva visszatérő karakter max a getchar, vagy 645 00:34:54,949 --> 00:34:55,444 bármi is legyen az? 646 00:34:55,444 --> 00:34:55,940 >> Közönség: Igen. 647 00:34:55,940 --> 00:34:58,620 >> Közönség: Igen, tehát az általános kifejezés azokat a dolgokat 648 00:34:58,620 --> 00:34:59,920 vannak őrszem értékeket. 649 00:34:59,920 --> 00:35:03,640 Szóval, mint visszatérő int max a GetInt és char Max a getchar, ez 650 00:35:03,640 --> 00:35:06,010 kellett volna lennie, minden rendben, ha ezek a dolgok visszatérnek hozzánk, 651 00:35:06,010 --> 00:35:07,210 Valami nem stimmel. 652 00:35:07,210 --> 00:35:09,950 >> A mutatók, csak éppen van ez sentinel értéket, hogy mindenki 653 00:35:09,950 --> 00:35:10,750 egyetért a. 654 00:35:10,750 --> 00:35:13,210 És ez a dolog, amit vissza amikor a dolgok rosszul mennek. 655 00:35:13,210 --> 00:35:15,910 Így char max, amit használ hogy képviselje valami 656 00:35:15,910 --> 00:35:18,100 mint NULL vagy getchar. 657 00:35:18,100 --> 00:35:23,420 >> Közönség: Tehát, ha tesztelés getchar, is csak NULLA? 658 00:35:23,420 --> 00:35:23,910 Lenne különbséget tenni? 659 00:35:23,910 --> 00:35:25,400 >> DAN: Lehet nem csak ellenőrizni NULL. 660 00:35:25,400 --> 00:35:30,130 Azt kell ellenőrizni char max, mert a visszatérési értéke a függvény 661 00:35:30,130 --> 00:35:35,416 a karakter nem a mutató. 662 00:35:35,416 --> 00:35:35,888 Igen? 663 00:35:35,888 --> 00:35:38,248 >> Közönség: Ez a kérdés arra a karakterlánc hosszát. 664 00:35:38,248 --> 00:35:40,136 Ez azt tartalmazza a NULL karakter? 665 00:35:40,136 --> 00:35:41,000 >> DAN: Nem 666 00:35:41,000 --> 00:35:45,930 És ez tulajdonképpen hogyan string-hossz tudja megállítani, mert megy át 667 00:35:45,930 --> 00:35:49,070 a tömb karakterekből ig látja a NULL karaktert. 668 00:35:49,070 --> 00:35:51,030 És akkor ez olyan, mint az összes jobb, kész vagyok. 669 00:35:51,030 --> 00:35:52,130 >> KÖZÖNSÉG: [nem hallható] öt? 670 00:35:52,130 --> 00:35:53,990 >> DAN: Hello lenne öt. 671 00:35:53,990 --> 00:35:55,240 Aha. 672 00:35:55,240 --> 00:35:59,580 673 00:35:59,580 --> 00:36:02,880 Tehát tömbök folytonos blokk memória. 674 00:36:02,880 --> 00:36:08,480 Ők azonnali hozzáférést azzal az neve a tömb, majd a göndör 675 00:36:08,480 --> 00:36:16,720 nadrágtartó, amit index akarsz menni hogy, ők indexe nulla és 676 00:36:16,720 --> 00:36:20,100 a hossza a tömb mínusz 1. 677 00:36:20,100 --> 00:36:23,070 >> És ők által bejelentett típusát dolog, hogy te tárolja a 678 00:36:23,070 --> 00:36:29,750 tömb, a nevét, a tömb, majd függetlenül a méret az, hogy a tömb. 679 00:36:29,750 --> 00:36:36,660 Tehát ez egy char tömb hossza hat, amely ezeket az értékeket. 680 00:36:36,660 --> 00:36:42,050 681 00:36:42,050 --> 00:36:42,700 Igen? 682 00:36:42,700 --> 00:36:43,950 >> KÖZÖNSÉG: [nem hallható]? 683 00:36:43,950 --> 00:36:47,980 684 00:36:47,980 --> 00:36:48,460 >> DAN: Igen. 685 00:36:48,460 --> 00:36:51,340 >> KÖZÖNSÉG: [nem hallható]? 686 00:36:51,340 --> 00:36:56,700 >> DAN: Ha van, mi folyik a tömb már. 687 00:36:56,700 --> 00:37:02,260 Így lehet megadni ezt inkább, mint, mondjuk, char, függetlenül a nevét 688 00:37:02,260 --> 00:37:12,200 tömb, üres zárójelek egyenlő göndör zárójel H vessző E vessző L vessző L vessző 689 00:37:12,200 --> 00:37:16,290 O vessző NULL karakter és kapcsos zárójel. 690 00:37:16,290 --> 00:37:18,180 Ez azt is dolgozik, mint a nyilatkozat. 691 00:37:18,180 --> 00:37:20,886 >> KÖZÖNSÉG: [nem hallható]? 692 00:37:20,886 --> 00:37:23,110 >> DAN: Akkor meg kell, hogy A méret már. 693 00:37:23,110 --> 00:37:23,896 >> KÖZÖNSÉG: [nem hallható]? 694 00:37:23,896 --> 00:37:25,146 >> DAN: Igen. 695 00:37:25,146 --> 00:37:30,114 696 00:37:30,114 --> 00:37:32,420 Rendicsek. 697 00:37:32,420 --> 00:37:36,430 Parancssori érvek egy módja szerzés bemenet a felhasználót 698 00:37:36,430 --> 00:37:39,380 érveket a fő. 699 00:37:39,380 --> 00:37:40,600 Legfontosabb két argumentuma. 700 00:37:40,600 --> 00:37:47,680 A számos érv, amelynek a haladt át a parancssort és a 701 00:37:47,680 --> 00:37:55,340 húr vektor vagy egy string tömb az összes érvet. 702 00:37:55,340 --> 00:38:07,840 >> Tehát, ha én, mondjuk, az úgynevezett a funkció, mint például a a pont ki 1 hely, 2. hely, három, 703 00:38:07,840 --> 00:38:10,110 argc lenne 4. 704 00:38:10,110 --> 00:38:17,370 És az argv 0 lenne pont ki. 705 00:38:17,370 --> 00:38:19,130 Argv1 lenne 1. 706 00:38:19,130 --> 00:38:23,030 argv2 lenne 2 argv3 lenne 3, az adott esetben. 707 00:38:23,030 --> 00:38:23,310 Igen? 708 00:38:23,310 --> 00:38:25,400 >> KÖZÖNSÉG: [nem hallható]? 709 00:38:25,400 --> 00:38:34,010 >> DAN: Az utolsó elem a tömbben mivel a tömb hossza argc plusz 710 00:38:34,010 --> 00:38:41,050 egyik argb, az utolsó elem a NULL pointer. 711 00:38:41,050 --> 00:38:42,580 Ez argc plusz 1. 712 00:38:42,580 --> 00:38:46,210 713 00:38:46,210 --> 00:38:52,150 Tehát abban az esetben, hogy azt mondtam, hogy lenne az argv 0 egy pont ki. 714 00:38:52,150 --> 00:38:56,330 argv 1. 1. argv2 2. argv 3 3. 715 00:38:56,330 --> 00:39:03,490 argv 4, amely egy nagyobb, mint argc volnának. 716 00:39:03,490 --> 00:39:04,870 >> És ez a NULL pointer. 717 00:39:04,870 --> 00:39:06,590 Igen. 718 00:39:06,590 --> 00:39:11,250 És ez azért van, mert a sztring a char csillag egy mutató. 719 00:39:11,250 --> 00:39:14,102 Tehát azt, hogy legyen az azonos típusú. 720 00:39:14,102 --> 00:39:14,595 Igen? 721 00:39:14,595 --> 00:39:16,074 >> Közönség: Két kérdés. 722 00:39:16,074 --> 00:39:21,004 Tehát az egyik, mi a különbség ebben és más getString mint egyféle 723 00:39:21,004 --> 00:39:22,483 a felhasználói motor? 724 00:39:22,483 --> 00:39:25,934 És két, igaz tárolt a legutóbbi memória? 725 00:39:25,934 --> 00:39:28,399 Szóval, mint, getString lenne legyen [nem hallható]? 726 00:39:28,399 --> 00:39:31,357 727 00:39:31,357 --> 00:39:33,650 >> DAN: Hol van tárolva? 728 00:39:33,650 --> 00:39:34,905 Nem tudom, hol van tárolva. 729 00:39:34,905 --> 00:39:40,000 >> Közönség: Szóval, tényleg, tudod, hogy bármilyen működik hívod érveit 730 00:39:40,000 --> 00:39:42,170 vannak tárolva a verem? 731 00:39:42,170 --> 00:39:46,610 Tehát argc és argv érvek a fő és ezek a stack, vagy tényleg 732 00:39:46,610 --> 00:39:49,131 éppen mit gondol a kezdetét a halom. 733 00:39:49,131 --> 00:39:53,490 Mi volt a másik rész a kérdés? 734 00:39:53,490 --> 00:39:56,821 >> Közönség: Szóval mi a [nem hallható]? 735 00:39:56,821 --> 00:40:00,990 >> DAN: Igen, csak másképp A szerzés a felhasználóhoz. 736 00:40:00,990 --> 00:40:06,030 Ez az egy kicsit hatékonyabb és ez praktikusabb szkripteket, mert 737 00:40:06,030 --> 00:40:10,070 egyszerűen csak át paraméterként a fő funkció ahelyett, hogy várjon 738 00:40:10,070 --> 00:40:13,400 a felhasználók, ha nincs számára. 739 00:40:13,400 --> 00:40:16,280 >> Közönség: És igen, kap húrok lenne [nem hallható]. 740 00:40:16,280 --> 00:40:17,922 Ez tárolja a cucc amire szüksége van. 741 00:40:17,922 --> 00:40:18,834 >> DAN: Igen? 742 00:40:18,834 --> 00:40:21,114 >> KÖZÖNSÉG: [nem hallható]? 743 00:40:21,114 --> 00:40:27,545 >> DAN: Igen, ARGV 0 mindig tartalmazza a pont perjel a függvény hívás. 744 00:40:27,545 --> 00:40:28,042 Igen? 745 00:40:28,042 --> 00:40:29,292 >> KÖZÖNSÉG: [nem hallható]? 746 00:40:29,292 --> 00:40:33,509 747 00:40:33,509 --> 00:40:37,310 >> DAN: Igen, az egyes érvek véget ért a NULL karaktert, mert 748 00:40:37,310 --> 00:40:38,310 vannak húrok. 749 00:40:38,310 --> 00:40:40,892 >> KÖZÖNSÉG: [nem hallható]? 750 00:40:40,892 --> 00:40:44,116 >> DAN: Igen, ARGV argc egy NULL mutató. 751 00:40:44,116 --> 00:40:45,112 >> KÖZÖNSÉG: [nem hallható]? 752 00:40:45,112 --> 00:40:47,104 >> DAN: Ó, igen. 753 00:40:47,104 --> 00:40:48,100 Ja, bocs. 754 00:40:48,100 --> 00:40:49,594 >> Közönség: így [nem hallható]? 755 00:40:49,594 --> 00:41:08,518 756 00:41:08,518 --> 00:41:16,340 >> DAN: A kérdés az, ha már a parancssori pont perjel a pont ki 1, 2, 757 00:41:16,340 --> 00:41:20,410 lenne a száma parancssori érvek két vagy lenne három? 758 00:41:20,410 --> 00:41:24,420 759 00:41:24,420 --> 00:41:28,240 >> Közönség: Azt hiszem, nem igazán számít. 760 00:41:28,240 --> 00:41:31,370 Azt szokták mondani, ó, te nem felelt meg bármilyen parancssori argumentumok amikor, 761 00:41:31,370 --> 00:41:32,730 Nyilvánvaló, hogy az úgynevezett funkció. 762 00:41:32,730 --> 00:41:37,950 Szóval inkább hangosan kizárni a funkció a parancssorból 763 00:41:37,950 --> 00:41:40,350 érveket annak ellenére, hogy tartalmazza argv. 764 00:41:40,350 --> 00:41:42,600 >> DAN: De ha ez volt a test-- 765 00:41:42,600 --> 00:41:46,550 yeah-- és akkor is, ha valamit mondani mint argc = 3, 766 00:41:46,550 --> 00:41:48,512 te biztonságban áll. 767 00:41:48,512 --> 00:41:49,416 Igen? 768 00:41:49,416 --> 00:41:50,666 >> KÖZÖNSÉG: [nem hallható]? 769 00:41:50,666 --> 00:42:00,990 770 00:42:00,990 --> 00:42:09,510 >> DAN: Azt hiszem, ha ahelyett, hogy hívás ez A argc és vonós argv konzolok 771 00:42:09,510 --> 00:42:14,350 de tartotta az azonos típusú és hívott őket, valami más, mint a 772 00:42:14,350 --> 00:42:16,640 és b, akkor még mindig működik? 773 00:42:16,640 --> 00:42:18,790 És ez akkor is működik, akkor csak-- 774 00:42:18,790 --> 00:42:21,520 használata helyett argc-- akkor használja a és b. 775 00:42:21,520 --> 00:42:24,436 776 00:42:24,436 --> 00:42:25,408 Igen? 777 00:42:25,408 --> 00:42:26,658 >> KÖZÖNSÉG: [nem hallható]? 778 00:42:26,658 --> 00:42:34,642 779 00:42:34,642 --> 00:42:38,850 >> DAN: A kérdés tehát az, getString fogja tárolni a memória a halom 780 00:42:38,850 --> 00:42:42,280 mert getString char *. 781 00:42:42,280 --> 00:42:47,530 Tárolja memória a kupac, mert kéri most malloc belül a tényleges 782 00:42:47,530 --> 00:42:49,258 végrehajtása getString. 783 00:42:49,258 --> 00:42:53,210 784 00:42:53,210 --> 00:42:55,090 OK, mozgó. 785 00:42:55,090 --> 00:42:55,950 >> Biztonság. 786 00:42:55,950 --> 00:43:01,090 Tehát, hogy valóban biztonságos, akkor hivatkozhat nincs egy és hagyja, hogy senki a hozzáférést minden olyan 787 00:43:01,090 --> 00:43:04,540 a tájékoztatás, ezért mindenki építi a saját gép, 788 00:43:04,540 --> 00:43:09,580 saját operációs rendszer, mind a programok a semmiből, és természetesen 789 00:43:09,580 --> 00:43:13,410 nem csatlakozik semmilyen egyéb gépek az interneten keresztül. 790 00:43:13,410 --> 00:43:17,350 Így számítógépek bizonytalan. 791 00:43:17,350 --> 00:43:19,200 Tényleg. 792 00:43:19,200 --> 00:43:20,940 Bíznunk kell más emberek. 793 00:43:20,940 --> 00:43:26,500 >> És az ötlet a biztonság az, hogy te vagy megpróbálta korlátozni a mennyiségét 794 00:43:26,500 --> 00:43:27,540 bizalom, hogy szükség van. 795 00:43:27,540 --> 00:43:32,080 És az egyik azt jelenti, hogy az keresztül kriptográfia. 796 00:43:32,080 --> 00:43:34,950 Kriptográfia, lényegében, mi titkait. 797 00:43:34,950 --> 00:43:38,880 >> Néha meg kell, hogy adja át a titkot mentén a, mondjuk, az interneten, vagy 798 00:43:38,880 --> 00:43:39,980 más dolog. 799 00:43:39,980 --> 00:43:43,180 És mi nem akarjuk az embereket tudni, hogy ezeket a titkokat. 800 00:43:43,180 --> 00:43:50,100 Így titkosítja a titkainkat egy út hogy reméljük, senki nem tudja kitalálni. 801 00:43:50,100 --> 00:43:51,600 >> Tehát used-- 802 00:43:51,600 --> 00:43:54,340 keresztül ennek során class-- 803 00:43:54,340 --> 00:44:00,750 dolgok, mint Caesar titkosítást és [Nem hallható], amelyek mind nagyon, nagyon 804 00:44:00,750 --> 00:44:03,200 bizonytalan módon titkosítja dolgok. 805 00:44:03,200 --> 00:44:07,930 Ők könnyű kitalálni, mit és mit titkok. 806 00:44:07,930 --> 00:44:12,130 A valódi világ használ sokkal több bonyolult titkosítási rendszerek. 807 00:44:12,130 --> 00:44:13,880 És nem fog bele sokkal több annál. 808 00:44:13,880 --> 00:44:18,280 809 00:44:18,280 --> 00:44:19,430 >> Hibakeresés. 810 00:44:19,430 --> 00:44:20,785 GDB a legjobb. 811 00:44:20,785 --> 00:44:24,014 812 00:44:24,014 --> 00:44:25,810 Fogom hangsúlyozni ezt újra. 813 00:44:25,810 --> 00:44:30,920 Használja GDB minden alkalommal, minden alkalommal, amikor van egy probléma. 814 00:44:30,920 --> 00:44:36,030 Parancsok hasznosak GDB vannak szünet, amit át vagy a vonal 815 00:44:36,030 --> 00:44:41,330 szám, a függvény neve, lényegében ahol a kódban le akarja állítani, 816 00:44:41,330 --> 00:44:45,600 és képesnek kell lennie, hogy átvegye az irányítást. 817 00:44:45,600 --> 00:44:54,140 >> Print vesz egy változó és kiírja bármi, hogy a változó van, hogy 818 00:44:54,140 --> 00:44:55,990 pont a végrehajtás. 819 00:44:55,990 --> 00:45:00,130 Tovább mozog a végrehajtás mentén egy lépésben. 820 00:45:00,130 --> 00:45:05,050 És lépésről lépésre egy függvényen belül a végrehajtás. 821 00:45:05,050 --> 00:45:10,480 >> Más dolgok futnak, amely így valóban futtatni a kódot. 822 00:45:10,480 --> 00:45:16,630 Folytassa veszi a szükséges lépéseket hogy eljusson a következő töréspontot. 823 00:45:16,630 --> 00:45:18,300 És sok-sok más. 824 00:45:18,300 --> 00:45:19,040 Nézni őket. 825 00:45:19,040 --> 00:45:19,901 Ők nagy. 826 00:45:19,901 --> 00:45:20,863 Igen? 827 00:45:20,863 --> 00:45:22,113 >> KÖZÖNSÉG: [nem hallható]? 828 00:45:22,113 --> 00:45:26,635 829 00:45:26,635 --> 00:45:28,200 >> DAN: Igen, ami a debugger. 830 00:45:28,200 --> 00:45:34,230 Így a debugger egy olyan program, amely lehetővé teszi, hogy hibát a programban. 831 00:45:34,230 --> 00:45:39,931 Ez nem egy olyan program, amely megtalálja a hibákat te, bár az nagyszerű lenne. 832 00:45:39,931 --> 00:45:43,020 833 00:45:43,020 --> 00:45:46,040 >> És az utolsó számomra a keresés. 834 00:45:46,040 --> 00:45:51,470 Tehát a fajta keresés, hogy beszéltünk körülbelül ebben az osztályban lineáris keresés, 835 00:45:51,470 --> 00:45:55,960 amely csak az, hogy nézd át az egyes eleme a keresési teret, egy 836 00:45:55,960 --> 00:46:00,410 elem egy időben, amíg meg nem találja, amit keres, vagy amíg el nem éri 837 00:46:00,410 --> 00:46:03,350 a végén a keresési teret, ahol pont azt mondod, hogy nem talált 838 00:46:03,350 --> 00:46:06,360 az elem, amit keresett. 839 00:46:06,360 --> 00:46:13,450 És ez tart a legjobb konstans időben, ami 0 1 és legrosszabb esetben lineáris 840 00:46:13,450 --> 00:46:16,070 idő, ami 0 n. 841 00:46:16,070 --> 00:46:19,250 >> Bináris keresés, amelynek szüksége van mocskos elemekkel. 842 00:46:19,250 --> 00:46:24,230 Elmész a közepén a elemek, nézd meg a elemet keres 843 00:46:24,230 --> 00:46:30,120 nagyobb vagy kisebb, mint az elem hogy te vagy a közepén. 844 00:46:30,120 --> 00:46:36,510 Ez ez nagyobb, akkor azt mondják, hogy az alsó a keresési tér a 845 00:46:36,510 --> 00:46:41,550 jelenlegi helyén, a középső, és indítsa újra a folyamatot. 846 00:46:41,550 --> 00:46:46,150 Ha ez kisebb, akkor nézd mondjuk hogy a-- igen, mi a helyzet? 847 00:46:46,150 --> 00:46:47,400 >> KÖZÖNSÉG: [nem hallható]? 848 00:46:47,400 --> 00:46:51,000 849 00:46:51,000 --> 00:46:54,260 >> DAN: Igen. 850 00:46:54,260 --> 00:46:58,360 Bármilyen fajta, hogy a már tanított az osztály tisztességes játék a teszt. 851 00:46:58,360 --> 00:47:01,504 852 00:47:01,504 --> 00:47:04,920 >> [Nevetés] 853 00:47:04,920 --> 00:47:10,260 >> DAN: És az a tény, hogy már nem volt hogy nem ez az a probléma halmaz, ez fair 854 00:47:10,260 --> 00:47:12,420 játék a teszt. 855 00:47:12,420 --> 00:47:15,186 >> Közönség: Nem mehetnénk át azt hogyan hogy-- 856 00:47:15,186 --> 00:47:17,052 >> DAN: Ez lesz ment át. 857 00:47:17,052 --> 00:47:20,496 >> Hangszóró 2: Az aktuális kód [Nem hallható] van study.cs50.net. 858 00:47:20,496 --> 00:47:25,910 859 00:47:25,910 --> 00:47:32,680 Tehát, ha megnézi a gyakorlat probléma Az Egyesítés fajta lapja 860 00:47:32,680 --> 00:47:35,880 study.cs50.net van a kód végrehajtási merge sort. 861 00:47:35,880 --> 00:47:38,550 Szóval nem kell végrehajtani magad ma este. 862 00:47:38,550 --> 00:47:42,090 De győződj meg róla, hogy megértette azt inkább mint memorizálása is. 863 00:47:42,090 --> 00:47:45,035 >> KÖZÖNSÉG: [nem hallható]? 864 00:47:45,035 --> 00:47:49,720 >> SPEAKER 2: The merge sort oldal study.cs50.net, van egy gyakorlat 865 00:47:49,720 --> 00:47:53,570 probléma, hogy, ha rákattint a probléma, a legvégén van egy 866 00:47:53,570 --> 00:47:56,280 megoldás, amely a merge sort végrehajtás. 867 00:47:56,280 --> 00:47:58,510 De győződj meg róla, hogy megértette azt nem csak memorizálni az 868 00:47:58,510 --> 00:47:59,760 vagy másol le. 869 00:47:59,760 --> 00:48:02,870 870 00:48:02,870 --> 00:48:06,340 >> Közönség: És egy teljesen érvényes probléma a vizsgára lenne 871 00:48:06,340 --> 00:48:07,990 olyasmi, mint itt egy lista. 872 00:48:07,990 --> 00:48:12,100 Mit jelent ez a lista kinézni után egy lépéssel a kiválasztott fajta vagy 873 00:48:12,100 --> 00:48:13,330 beillesztés sort vagy bármi. 874 00:48:13,330 --> 00:48:14,940 Egy teljes iteráció a lista. 875 00:48:14,940 --> 00:48:18,530 Tehát akkor is, ha nem a végén kelljen kódot, akkor meg kell érteni, hogy 876 00:48:18,530 --> 00:48:20,440 ahhoz, hogy tudja, hogyan fog hogy módosítja ezt a tömböt. 877 00:48:20,440 --> 00:48:24,144 878 00:48:24,144 --> 00:48:25,394 >> DAN: Ennyi nekem. 879 00:48:25,394 --> 00:48:30,604 880 00:48:30,604 --> 00:48:32,588 >> [Taps] 881 00:48:32,588 --> 00:49:06,316 882 00:49:06,316 --> 00:49:07,410 >> LUCAS: Hey mindenki. 883 00:49:07,410 --> 00:49:08,390 A nevem Lucas. 884 00:49:08,390 --> 00:49:16,840 Fogok beszélni rekurzió, minden a fajta, amit megtanultunk, és a 885 00:49:16,840 --> 00:49:18,050 kicsit minden mutató. 886 00:49:18,050 --> 00:49:18,740 OK? 887 00:49:18,740 --> 00:49:20,340 Tehát először is, rekurzió. 888 00:49:20,340 --> 00:49:22,951 Mit jelent az, hogy A függvény rekurzív? 889 00:49:22,951 --> 00:49:24,675 >> Közönség: nevezi magát. 890 00:49:24,675 --> 00:49:26,500 >> LUCAS: OK, nevezi magát, igen. 891 00:49:26,500 --> 00:49:27,700 Szóval, mint ezt a képet, pl. 892 00:49:27,700 --> 00:49:30,280 Ez olyan, mint a képen belül a kép, és így tovább. 893 00:49:30,280 --> 00:49:35,740 Így például, akkor lesz-- mint Dan hogy beszélt a bináris keresés. 894 00:49:35,740 --> 00:49:41,840 Az egyik módja, amelyben bináris keresés rekurzív az a tény, hogy maga 895 00:49:41,840 --> 00:49:43,130 próbál találni egy számot. 896 00:49:43,130 --> 00:49:44,250 Szóval megy a közepén. 897 00:49:44,250 --> 00:49:47,130 És akkor ellenőrizze, hogy a számokat ott a bal és a jobb. 898 00:49:47,130 --> 00:49:49,650 >> És akkor, ha megtudja a szám lesz a bal oldalon, ez ugyanaz a 899 00:49:49,650 --> 00:49:53,340 dolog, mint csinál a keresést újra, de Csak a bal oldalon a lista. 900 00:49:53,340 --> 00:49:57,350 Szóval így hangzik mintha rekurzív. 901 00:49:57,350 --> 00:50:01,870 Szóval ezért nektek rekurzív megoldás merge sort. 902 00:50:01,870 --> 00:50:04,270 >> OK, itt egy példa. 903 00:50:04,270 --> 00:50:07,280 Tehát mondjuk, hogy szeretnék választani a számokat 1-től n. 904 00:50:07,280 --> 00:50:13,790 Én észre, hogy az összeg az n szám n plusz n mínusz 1-től 1. 905 00:50:13,790 --> 00:50:17,810 De aztán, ha megnézi n mínusz 1 plusz n mínusz 2 plusz 1, hogy ugyanaz a 906 00:50:17,810 --> 00:50:20,680 dolog, mint összeadásával számok n-ig mínusz 1. 907 00:50:20,680 --> 00:50:25,890 Tehát azt mondhatom, az összege azonos összeg egyenlő n összege plusz mínusz 1 n. 908 00:50:25,890 --> 00:50:28,010 Van ennek értelme? 909 00:50:28,010 --> 00:50:32,630 >> És azt is volna valami mást úgynevezett alapeset, amely szerint 910 00:50:32,630 --> 00:50:37,440 a számok összege legfeljebb nulla nulla lenne. 911 00:50:37,440 --> 00:50:42,770 Tehát, amint jutok el a szám nulla, abbahagyom számolás. 912 00:50:42,770 --> 00:50:45,330 Van ennek értelme? 913 00:50:45,330 --> 00:50:48,120 >> Tehát itt egy példa arra, hogy Tudom végrehajtani ezt. 914 00:50:48,120 --> 00:50:49,860 Szóval van ez a funkció bizonyos. 915 00:50:49,860 --> 00:50:51,700 Hogy vesz egy n egész szám. 916 00:50:51,700 --> 00:50:56,300 Tehát itt először ellenőrizze, ha n kevesebb vagy egyenlő nullával. 917 00:50:56,300 --> 00:51:00,310 Tehát, ha ez kisebb, vagy egyenlő nullával, én vissza nulla, ami a mi alapeset. 918 00:51:00,310 --> 00:51:05,690 Egyébként én is csak vissza az n + a számok összege a 919 00:51:05,690 --> 00:51:07,190 egy-n mínusz egy. 920 00:51:07,190 --> 00:51:09,360 Értelme? 921 00:51:09,360 --> 00:51:10,100 OK. 922 00:51:10,100 --> 00:51:11,610 >> Szóval, itt van, amit úgy néz ki. 923 00:51:11,610 --> 00:51:15,260 Van összege 2értéke 2 plusz 1 összege. 924 00:51:15,260 --> 00:51:18,930 És néhány 1 1 plusz a összege 0, ami 0. 925 00:51:18,930 --> 00:51:20,216 Értelme? 926 00:51:20,216 --> 00:51:25,342 Tehát, ha megnézzük a stack a program, ez az, amit úgy néz ki. 927 00:51:25,342 --> 00:51:26,820 >> Először is, mi a fő funkciója. 928 00:51:26,820 --> 00:51:30,320 És akkor a fő funkciója hívott összeg 2. 929 00:51:30,320 --> 00:51:36,690 És akkor összeg 2 fog mondani, ó, összeg 2 = 2, valamint az összeg az egy. 930 00:51:36,690 --> 00:51:39,460 Szóval hozzá összege 1 és a verem. 931 00:51:39,460 --> 00:51:43,860 És az összeg 1 fog hívni összegével 0, amely szintén hozzá fog 932 00:51:43,860 --> 00:51:44,630 a verem. 933 00:51:44,630 --> 00:51:49,240 És akkor minden egyes ilyen is, hogy a a másik tetejére van, hogy visszatérjen 934 00:51:49,240 --> 00:51:52,020 mielőtt a többit is tartani fog. 935 00:51:52,020 --> 00:51:56,240 >> Így például itt, összege 0, első, megy vissza 0-ra. 936 00:51:56,240 --> 00:51:58,320 Majd válassza összege 1. 937 00:51:58,320 --> 00:52:00,850 Akkor összeg 1 fog vissza 1 összefoglalva 2. 938 00:52:00,850 --> 00:52:03,900 És végül, összege 2 megy vissza 3 fő. 939 00:52:03,900 --> 00:52:05,320 Van ennek értelme? 940 00:52:05,320 --> 00:52:09,496 >> Nagyon fontos, hogy megértsük, hogyan a verem dolgozik, és próbálja 941 00:52:09,496 --> 00:52:11,980 nézd meg, hogy van értelme. 942 00:52:11,980 --> 00:52:13,260 OK, így válogatás. 943 00:52:13,260 --> 00:52:16,170 Akkor miért válogatás fontos, először? 944 00:52:16,170 --> 00:52:18,260 Miért érdekel? 945 00:52:18,260 --> 00:52:20,310 Valaki? 946 00:52:20,310 --> 00:52:20,695 Adj nekem egy példát? 947 00:52:20,695 --> 00:52:21,040 Igen? 948 00:52:21,040 --> 00:52:22,968 >> KÖZÖNSÉG: [nem hallható]. 949 00:52:22,968 --> 00:52:24,700 >> LUCAS: Ja, OK. 950 00:52:24,700 --> 00:52:26,090 Így kereshet hatékonyabban. 951 00:52:26,090 --> 00:52:28,580 Ez egy jó út. 952 00:52:28,580 --> 00:52:32,462 Tehát, például, van egy csomó dolgok, valójában az életünkben, hogy 953 00:52:32,462 --> 00:52:32,920 vannak rendezve. 954 00:52:32,920 --> 00:52:34,830 Például a szótárak. 955 00:52:34,830 --> 00:52:39,210 >> Nagyon fontos, hogy az összes szavak valami azért, hogy mi 956 00:52:39,210 --> 00:52:41,970 könnyen hozzáférhessen. 957 00:52:41,970 --> 00:52:43,280 Szóval, ez az, amit mond. 958 00:52:43,280 --> 00:52:45,530 Kereshet hatékonyabban. 959 00:52:45,530 --> 00:52:48,740 Gondolj bele, milyen nehéz lenne, hogy egy szótár, amelyben a szavak a 960 00:52:48,740 --> 00:52:49,500 véletlenszerű sorrendben. 961 00:52:49,500 --> 00:52:53,120 Akkor meg kell nézni, nagyon sok, minden egyes szót, amíg meg nem találja a 962 00:52:53,120 --> 00:52:54,720 szó, amit keresel. 963 00:52:54,720 --> 00:52:58,710 >> Ha a Facebook is, amikor nézel a barátok, akkor 964 00:52:58,710 --> 00:53:03,540 fogja látni, hogy a Facebook tegye a közelebb barátja tetején azok 965 00:53:03,540 --> 00:53:05,470 hogy ne beszélj sokat. 966 00:53:05,470 --> 00:53:08,080 Ha megy egészen az aljára a barátok listájára, fogsz látni 967 00:53:08,080 --> 00:53:11,250 emberek, hogy talán nem is ne feledjük, hogy te vagy barátok. 968 00:53:11,250 --> 00:53:14,590 És ez azért van, mert a Facebook fajta barátaival alapján, hogy 969 00:53:14,590 --> 00:53:16,472 Close nekik. 970 00:53:16,472 --> 00:53:17,930 >> Így szervezése adatokat. 971 00:53:17,930 --> 00:53:18,450 Szintén Pokemon. 972 00:53:18,450 --> 00:53:21,400 Tehát láthatjuk, hogy minden Pokemons vannak számok. 973 00:53:21,400 --> 00:53:27,210 És ez, mint egy egyszerű való hozzáférést, az adatok. 974 00:53:27,210 --> 00:53:29,050 >> Közönség: elérése Pokemon. 975 00:53:29,050 --> 00:53:29,890 >> LUCAS: Igen. 976 00:53:29,890 --> 00:53:32,395 >> KÖZÖNSÉG: [nem hallható]. 977 00:53:32,395 --> 00:53:33,460 >> LUCAS: Igen. 978 00:53:33,460 --> 00:53:35,140 OK, így kiválasztás sort. 979 00:53:35,140 --> 00:53:41,610 Selection sort fog ki a legkisebb osztályozatlan értéke lista minden 980 00:53:41,610 --> 00:53:43,300 idő minden iterációban. 981 00:53:43,300 --> 00:53:46,800 Ez olyan, mint az a fajta, amit csinál a fejedben, amikor akarsz 982 00:53:46,800 --> 00:53:48,430 rendezni egy listát a kezét. 983 00:53:48,430 --> 00:53:51,990 >> Alapvetően minden, amit csinál, hogy néz a legkisebb szám. 984 00:53:51,990 --> 00:53:54,280 Betette a rendezett lista. 985 00:53:54,280 --> 00:53:56,230 És akkor keresse meg a következő legkisebb szám. 986 00:53:56,230 --> 00:54:00,080 És akkor is csinálom ezt, és így tovább. 987 00:54:00,080 --> 00:54:04,600 >> Tehát választék fajta alapvetően meg válassza ki minden egyes alkalommal, amikor a legkisebb 988 00:54:04,600 --> 00:54:05,750 osztályozatlan érték. 989 00:54:05,750 --> 00:54:10,840 Tedd a végén a rendezve része a listán. 990 00:54:10,840 --> 00:54:12,370 És ne csinálja. 991 00:54:12,370 --> 00:54:15,890 Nézzük gyorsan, hogy mi ez úgy néz ki, mint a. 992 00:54:15,890 --> 00:54:19,340 Tehát itt van a válogatott és rendezetlen listát. 993 00:54:19,340 --> 00:54:23,350 >> Így a rendezett lista, ez kezdetben üres. 994 00:54:23,350 --> 00:54:26,760 És akkor megyek ki a legkisebb szám van, amely 2. 995 00:54:26,760 --> 00:54:30,650 Szóval, hogy a 2-es számot, és tettem az első a listán. 996 00:54:30,650 --> 00:54:34,910 És akkor keresse meg a következő kisebb elem, amely 3. 997 00:54:34,910 --> 00:54:37,050 Szóval tedd a végén A rendezett lista. 998 00:54:37,050 --> 00:54:38,140 És akkor én is ezt teszem. 999 00:54:38,140 --> 00:54:40,040 Találom a 4. és tedd a végén. 1000 00:54:40,040 --> 00:54:41,360 Find 5 és tedd a végén. 1001 00:54:41,360 --> 00:54:44,830 >> És nézd meg, hogy minden ilyen alkalommal, hogy Azt mondom, tedd a végén van, 1002 00:54:44,830 --> 00:54:46,850 Alapvetően csere a két érték. 1003 00:54:46,850 --> 00:54:48,100 OK? 1004 00:54:48,100 --> 00:54:50,140 1005 00:54:50,140 --> 00:54:52,825 És akkor az utolsó, csak még egy elemet. 1006 00:54:52,825 --> 00:54:55,870 Szóval ez már rendezve. 1007 00:54:55,870 --> 00:54:57,800 >> OK, így beillesztés sort. 1008 00:54:57,800 --> 00:55:03,180 Beillesztés sort fogsz szintén hogy a dolog, amelyek egy rendezett és 1009 00:55:03,180 --> 00:55:04,690 egy rendezetlen listát. 1010 00:55:04,690 --> 00:55:14,540 Az egyetlen dolog az, hogy minden alkalommal, te hozzá egy elemet a rendezett 1011 00:55:14,540 --> 00:55:18,170 lista, akkor csak vedd az elem, amely előtt van a rendezetlen listát. 1012 00:55:18,170 --> 00:55:20,880 És akkor fogsz találni, amit helyzetben kell lennie, a rendezett 1013 00:55:20,880 --> 00:55:22,300 része a listán. 1014 00:55:22,300 --> 00:55:25,840 >> Lássuk, mi van ez így ez több értelme van. 1015 00:55:25,840 --> 00:55:29,360 Tehát kezdetben például próbálom hogy helyezze be a hármas szám a 1016 00:55:29,360 --> 00:55:30,680 rendezett része a lista. 1017 00:55:30,680 --> 00:55:31,800 Így a lista nincs semmi. 1018 00:55:31,800 --> 00:55:34,160 Szóval csak fel a 3-as szám. 1019 00:55:34,160 --> 00:55:37,480 >> Azt akarom, hogy a szám 5 a rendezett része a listán. 1020 00:55:37,480 --> 00:55:38,900 Szóval nézd meg a 5-ös szám. 1021 00:55:38,900 --> 00:55:40,450 Úgy vettem észre, hogy ez több mint 3. 1022 00:55:40,450 --> 00:55:41,980 Tehát tudom, hogy meg kell lennie a 3. 1023 00:55:41,980 --> 00:55:44,100 Így tettem 3 és 5. 1024 00:55:44,100 --> 00:55:45,940 >> Akkor azt akarom, hogy helyezze be a 2-es szám. 1025 00:55:45,940 --> 00:55:51,630 Úgy vettem észre, hogy a 2-es szám valóban tart majd mind a 3 és az 5. 1026 00:55:51,630 --> 00:55:54,580 Szóval tényleg ki kell rakni az egészet a utat a lista elején. 1027 00:55:54,580 --> 00:55:59,030 Így azt kell, olyan, tolja a elemek a rendezett lista, így tudok 1028 00:55:59,030 --> 00:56:01,970 hogy helyet adjon a 2-es szám. 1029 00:56:01,970 --> 00:56:03,160 >> Aztán látom a 6-os szám. 1030 00:56:03,160 --> 00:56:05,450 Látom, hogy legyen 5-e után. 1031 00:56:05,450 --> 00:56:06,240 Így tettem oda. 1032 00:56:06,240 --> 00:56:07,965 És végül, nézd meg a 4-es számú. 1033 00:56:07,965 --> 00:56:11,030 És észre kellene lehet 3 és 5 közötti. 1034 00:56:11,030 --> 00:56:14,870 Aztán tedd oda és váltás az összes többi elem. 1035 00:56:14,870 --> 00:56:16,120 Értelme? 1036 00:56:16,120 --> 00:56:17,880 1037 00:56:17,880 --> 00:56:19,150 >> Bubble Sort. 1038 00:56:19,150 --> 00:56:25,730 Így buborék rendezés alapvetően mire vagy fog csi hívjuk buborék 1039 00:56:25,730 --> 00:56:30,113 sort, mert megy át a list-- ez valóban jobb, ha én csak azt mutatják, 1040 00:56:30,113 --> 00:56:32,300 tetszik Ez-- 1041 00:56:32,300 --> 00:56:35,030 és fogsz összehasonlítása szomszédos számokat. 1042 00:56:35,030 --> 00:56:38,410 És fogsz swap helyzetben, ha ők nem 1043 00:56:38,410 --> 00:56:39,190 a megfelelő sorrendben. 1044 00:56:39,190 --> 00:56:42,570 >> Tehát alapvetően, hogy mi fog történik itt, például, 1045 00:56:42,570 --> 00:56:44,160 Van 8 és 6. 1046 00:56:44,160 --> 00:56:47,270 Tudod, hogy a rendezett sorrendben fog valóban a 6. és az 5., ugye? 1047 00:56:47,270 --> 00:56:49,540 Így fogsz cserélni a megrendeléseket. 1048 00:56:49,540 --> 00:56:51,370 Aztán látom a 8 és 4 itt. 1049 00:56:51,370 --> 00:56:52,250 És én nem ugyanaz a dolog. 1050 00:56:52,250 --> 00:56:53,400 Én cserélni újra. 1051 00:56:53,400 --> 00:56:55,070 És végül, a 2. és a 8.. 1052 00:56:55,070 --> 00:56:56,670 Azt is cserélni őket. 1053 00:56:56,670 --> 00:57:01,690 >> Úgy hívják Bubble Rendezés mert miután Minden ilyen ismétléseket, valójában, 1054 00:57:01,690 --> 00:57:05,910 a legnagyobb számú a listán lesz minden a módja annak, hogy a végén a lista. 1055 00:57:05,910 --> 00:57:06,940 Van ennek értelme? 1056 00:57:06,940 --> 00:57:11,880 Mert megtartja csere azt és mozgatása jobbra. 1057 00:57:11,880 --> 00:57:14,440 >> OK, így ez a második iteráció. 1058 00:57:14,440 --> 00:57:17,200 Ez ugyanaz a dolog. 1059 00:57:17,200 --> 00:57:20,190 Megteszek egy csere és akkor az utolsó. 1060 00:57:20,190 --> 00:57:23,290 Azt, hogy nincs swap és a lista. 1061 00:57:23,290 --> 00:57:27,460 Így Bubble Sort, mi alapvetően folyamatosan megy át a listát, és csere 1062 00:57:27,460 --> 00:57:32,310 a dolgokat, amíg vettem észre, hogy én nem tettem bármely swap csinálja iteráció, ami 1063 00:57:32,310 --> 00:57:34,270 azt jelenti, hogy a lista már rendezett. 1064 00:57:34,270 --> 00:57:35,520 Értelme? 1065 00:57:35,520 --> 00:57:38,400 1066 00:57:38,400 --> 00:57:40,870 >> Beszéljünk egy kicsit a működési idő. 1067 00:57:40,870 --> 00:57:45,165 Szóval srácok emlékszik Big O, Omega és Theta? 1068 00:57:45,165 --> 00:57:49,290 1069 00:57:49,290 --> 00:57:50,990 Igen? 1070 00:57:50,990 --> 00:57:53,070 OK, mi a Big O, először is? 1071 00:57:53,070 --> 00:57:54,315 >> KÖZÖNSÉG: [nem hallható]. 1072 00:57:54,315 --> 00:57:59,070 >> LUCAS: Igen, úgy hívják a legrosszabb runtime, ami csak azt jelenti, hogy 1073 00:57:59,070 --> 00:58:03,470 hogy mennyit vár a program hogy futtatni. 1074 00:58:03,470 --> 00:58:04,910 Mint tekintve of-- 1075 00:58:04,910 --> 00:58:06,660 ebben case-- n. 1076 00:58:06,660 --> 00:58:09,150 Az elemek száma a lista a legrosszabb esetben. 1077 00:58:09,150 --> 00:58:12,520 Mint, a lehető legrosszabb eset. 1078 00:58:12,520 --> 00:58:17,100 >> Tehát Bubble Sort, például Van nagy O n tér. 1079 00:58:17,100 --> 00:58:20,580 Miért van ez? 1080 00:58:20,580 --> 00:58:24,716 Miért Bubble Rendezés Big O n tér? 1081 00:58:24,716 --> 00:58:27,614 >> KÖZÖNSÉG: [nem hallható]. 1082 00:58:27,614 --> 00:58:35,670 >> LUCAS: Igen, a legrosszabb esetben lesz hogy én is megteszi n iterációt. 1083 00:58:35,670 --> 00:58:39,260 Tehát az egyes ismétlések fog hozza a legnagyobb elem a végéig 1084 00:58:39,260 --> 00:58:40,290 a lista. 1085 00:58:40,290 --> 00:58:44,230 Tehát a legrosszabb eset az, hogy én már kell csinálni, hogy a dolog n-szer. 1086 00:58:44,230 --> 00:58:48,550 És minden egyes ilyen alkalommal, azt kell do n swap, mert kell összehasonlítani 1087 00:58:48,550 --> 00:58:49,870 minden két elem. 1088 00:58:49,870 --> 00:58:53,730 Szóval ezért ez n négyzetes mert n-szer n. 1089 00:58:53,730 --> 00:59:00,120 >> Ezután kiválasztás sort is n tér mert minden egyes iteráció, azt kell 1090 00:59:00,120 --> 00:59:02,650 nézd meg minden egyes elem a listán. 1091 00:59:02,650 --> 00:59:04,980 És keresse meg a legkisebb, ami azt jelenti, hogy meg kell 1092 00:59:04,980 --> 00:59:06,130 átnéz n eleme. 1093 00:59:06,130 --> 00:59:11,750 És azt kell csinálni, hogy n-szer azért, mert Azt kell választani minden n eleme. 1094 00:59:11,750 --> 00:59:18,273 >> Beszúrási sort is n tér mert a legrosszabb forgatókönyv 1095 00:59:18,273 --> 00:59:20,950 legyen, egy, azt kell beszúrni n számok, igaz? 1096 00:59:20,950 --> 00:59:22,765 Így már tudom, hogy fogok hogy n iterációt. 1097 00:59:22,765 --> 00:59:25,466 1098 00:59:25,466 --> 00:59:29,840 De minden egyes ilyen számokat, ha lenne hogy nézd meg az összes számot 1099 00:59:29,840 --> 00:59:34,380 a rendezett listát, és tedd az utat az első, hogy az n négyzet lesz 1100 00:59:34,380 --> 00:59:36,230 mert ez lesz n-szer n újra. 1101 00:59:36,230 --> 00:59:38,280 Értelme? 1102 00:59:38,280 --> 00:59:41,512 Mi a omega? 1103 00:59:41,512 --> 00:59:42,886 >> KÖZÖNSÉG: [nem hallható]. 1104 00:59:42,886 --> 00:59:44,620 >> LUCAS: Ez a legjobb esetben. 1105 00:59:44,620 --> 00:59:48,810 Tehát ez olyan, mint, hogy sok alkalommal válogatás, a legjobb esetben is 1106 00:59:48,810 --> 00:59:50,660 Ha a lista már rendezett. 1107 00:59:50,660 --> 00:59:52,670 Szóval nem igazán van hogy semmit. 1108 00:59:52,670 --> 00:59:56,290 Bubble rendezése a legjobb esetben n. 1109 00:59:56,290 --> 00:59:58,820 Nem tudjátok miért? 1110 00:59:58,820 --> 01:00:00,620 >> KÖZÖNSÉG: [nem hallható]. 1111 01:00:00,620 --> 01:00:05,640 >> LUCAS: Ja, ha nyomon követheti hogy az adatok adag volt olyan swap vagy 1112 01:00:05,640 --> 01:00:10,533 Nem, ha van valami, mint a beállított igaz, ha volt egy iterációs, ha a 1113 01:00:10,533 --> 01:00:15,140 lista már rendezett, alapvetően, mi fog történni, én megyek 1114 01:00:15,140 --> 01:00:17,890 próbálja cserélni minden két szomszédos elemeket. 1115 01:00:17,890 --> 01:00:19,920 Fogom látni, hogy nincs swap. 1116 01:00:19,920 --> 01:00:21,230 És én csak vissza azonnal. 1117 01:00:21,230 --> 01:00:24,240 >> Tehát ez azt jelenti, hogy csak meg kellett megy át a lista egy időben. 1118 01:00:24,240 --> 01:00:28,990 Szóval n, mert úgy nézek ki A n eleme. 1119 01:00:28,990 --> 01:00:30,930 Miért kiválasztás sort n téren? 1120 01:00:30,930 --> 01:00:35,150 1121 01:00:35,150 --> 01:00:45,520 >> Igen, akkor is, ha a lista, a minden iterációs kiválasztás sort, én 1122 01:00:45,520 --> 01:00:47,590 ki kell választani a legkisebb elem. 1123 01:00:47,590 --> 01:00:49,980 Ez azt jelenti, hogy van, hogy megkeresse egyáltalán az elemeket az osztályozatlan 1124 01:00:49,980 --> 01:00:53,350 listája és találja a minimum Minden iteráció. 1125 01:00:53,350 --> 01:00:54,600 Van ennek értelme? 1126 01:00:54,600 --> 01:00:56,880 1127 01:00:56,880 --> 01:01:04,690 >> És beillesztés kard n, mert a Amennyiben Próbálom beilleszteni a 1128 01:01:04,690 --> 01:01:09,320 számát és az összes szám, amikor próbálja beilleszteni őket, látom, hogy 1129 01:01:09,320 --> 01:01:10,510 van a megfelelő pozícióba. 1130 01:01:10,510 --> 01:01:15,120 Nem kell, hogy menjen ellenőrizze az összes többi számok a rendezetlen listát. 1131 01:01:15,120 --> 01:01:17,170 Szóval ezért nem lesz n. 1132 01:01:17,170 --> 01:01:19,480 Értelme? 1133 01:01:19,480 --> 01:01:21,035 És mi a theta? 1134 01:01:21,035 --> 01:01:23,410 >> KÖZÖNSÉG: [nem hallható]. 1135 01:01:23,410 --> 01:01:24,380 >> LUCAS: Mi, bocs? 1136 01:01:24,380 --> 01:01:24,960 Mondd még egyszer. 1137 01:01:24,960 --> 01:01:25,666 >> KÖZÖNSÉG: [nem hallható]. 1138 01:01:25,666 --> 01:01:26,490 >> LUCAS: Pontosan. 1139 01:01:26,490 --> 01:01:31,280 Tehát látható, hogy csak a kiválasztás tárolt Merge sort is thetas. 1140 01:01:31,280 --> 01:01:39,920 És ez azért van, mert már csak theta ha mind Big O és az Omega azonos. 1141 01:01:39,920 --> 01:01:41,520 OK. 1142 01:01:41,520 --> 01:01:44,210 És végül, merge sort van log n. 1143 01:01:44,210 --> 01:01:48,910 >> És akkor, ahogy Dan azt mondta, Merge sort olyan, mint az azonos módon 1144 01:01:48,910 --> 01:01:50,320 te bináris keresés. 1145 01:01:50,320 --> 01:01:53,530 Így kap a listán. 1146 01:01:53,530 --> 01:01:55,170 És fogsz felére csökken. 1147 01:01:55,170 --> 01:02:00,580 És akkor vágja el őket kisebb felét. 1148 01:02:00,580 --> 01:02:01,730 És akkor egyesíteni őket. 1149 01:02:01,730 --> 01:02:02,960 Srácok emlékszel, ugye? 1150 01:02:02,960 --> 01:02:04,960 OK, ahogy ő mondta. 1151 01:02:04,960 --> 01:02:08,330 >> OK, mutatók. 1152 01:02:08,330 --> 01:02:11,078 Tehát mi is az a mutató? 1153 01:02:11,078 --> 01:02:12,050 >> KÖZÖNSÉG: [nem hallható]. 1154 01:02:12,050 --> 01:02:12,820 >> LUCAS: Egy cím. 1155 01:02:12,820 --> 01:02:13,720 OK. 1156 01:02:13,720 --> 01:02:18,530 Tudom, hogy David mutat egy csomó videók Muci és a dolgok mutató 1157 01:02:18,530 --> 01:02:19,080 egymást. 1158 01:02:19,080 --> 01:02:22,960 De szeretem azt hinni, a mutatók mivel csak egy címet. 1159 01:02:22,960 --> 01:02:26,110 Tehát ez egy változót, ami folyik tárolni egy címet. 1160 01:02:26,110 --> 01:02:31,940 >> Tehát csak ez a speciális változó hogy a négy bájt hosszú. 1161 01:02:31,940 --> 01:02:36,550 Ne feledje, hogy a mutató a bármi mindig négy bájt hosszú a 32-bites 1162 01:02:36,550 --> 01:02:39,370 gép így a helyzet a készülék. 1163 01:02:39,370 --> 01:02:41,920 1164 01:02:41,920 --> 01:02:47,050 És ez csak az a hely Egy változó belsejébe. 1165 01:02:47,050 --> 01:02:50,240 >> OK, így van ez a memória, alapvetően. 1166 01:02:50,240 --> 01:02:57,420 Így minden blokk memória valójában egy címke, amely a címe 1167 01:02:57,420 --> 01:02:58,890 slotty memória. 1168 01:02:58,890 --> 01:03:02,370 Tehát ez azt jelenti, hogy lehet a mutató mutató 1169 01:03:02,370 --> 01:03:03,380 Ezeknek a címeknek. 1170 01:03:03,380 --> 01:03:09,930 Szóval, hogy miért is fogjuk használni mutatók is ha kell emlékezni a helyre 1171 01:03:09,930 --> 01:03:12,300 hogy egy adott változó egy memóriát. 1172 01:03:12,300 --> 01:03:16,560 >> És ti ne feledjük, hogy egy ilyen ügy volt, ha van egy funkció 1173 01:03:16,560 --> 01:03:20,820 ha én valóban szeretném, ha csere a valós számok, én valójában 1174 01:03:20,820 --> 01:03:22,110 kell küldeni a mutató. 1175 01:03:22,110 --> 01:03:23,460 Nem a változó. 1176 01:03:23,460 --> 01:03:25,200 Srácok ne feledje, hogy? 1177 01:03:25,200 --> 01:03:26,450 A különbség between-- 1178 01:03:26,450 --> 01:03:33,350 1179 01:03:33,350 --> 01:03:34,120 mi a neve? 1180 01:03:34,120 --> 01:03:36,010 Hívás érték és hívás hivatkozva, igaz? 1181 01:03:36,010 --> 01:03:36,840 >> OK, igen. 1182 01:03:36,840 --> 01:03:38,330 Akkor hívd érték. 1183 01:03:38,330 --> 01:03:43,570 Ha csak küldj egy változót működik csak most küld egy értéket. 1184 01:03:43,570 --> 01:03:45,610 Szóval tényleg küld egy példányt a változó. 1185 01:03:45,610 --> 01:03:49,720 És a program nem érdekel lenne, ha ugyanazt a változót ténylegesen 1186 01:03:49,720 --> 01:03:51,650 készít egy másolatot. 1187 01:03:51,650 --> 01:03:56,330 >> És hívja hivatkozással azt jelenti, hogy Én tulajdonképpen másolatának megküldésével az 1188 01:03:56,330 --> 01:03:57,550 mutatót a változó. 1189 01:03:57,550 --> 01:04:00,970 Tehát ez azt jelenti, hogy én küldöm a elhelyezése változtatható. 1190 01:04:00,970 --> 01:04:04,440 Így értelme van a helye változó, amikor hívom a funkció 1191 01:04:04,440 --> 01:04:09,700 A mutatók, én vagyok képes valójában módosítsa az adatokat, hogy volt a fő. 1192 01:04:09,700 --> 01:04:12,050 Értelme? 1193 01:04:12,050 --> 01:04:17,560 >> Bár a mutató egy másolat, a mutató még mindig a valódi címét 1194 01:04:17,560 --> 01:04:20,090 a változó, hogy meg akarom változtatni. 1195 01:04:20,090 --> 01:04:21,920 Értelme? 1196 01:04:21,920 --> 01:04:24,290 >> Így teremt mutatók. 1197 01:04:24,290 --> 01:04:28,410 Ne feledje, a mutató mindig az a típus, ez mutat 1198 01:04:28,410 --> 01:04:29,890 hogy majd a csillag. 1199 01:04:29,890 --> 01:04:31,030 És akkor tegye a nevét. 1200 01:04:31,030 --> 01:04:35,765 Úgy emlékszem, hogy ha van bármi csillag, ez olyan, mint egy mutatót 1201 01:04:35,765 --> 01:04:38,990 hogy bármi változó írja, hogy volt. 1202 01:04:38,990 --> 01:04:42,850 >> Tehát itt a csillag, például, ez a mutató és egy egész szám. 1203 01:04:42,850 --> 01:04:47,680 És akkor char csillag a mutató char csillag és így tovább. 1204 01:04:47,680 --> 01:04:47,960 Igen? 1205 01:04:47,960 --> 01:04:52,710 >> Közönség: Mi van, ha a mutató az n csillag x. 1206 01:04:52,710 --> 01:04:55,255 Tudom, hogy létrehoz egy mutatót x. 1207 01:04:55,255 --> 01:04:59,432 Ez azt is kijelentik, x egy egész szám? 1208 01:04:59,432 --> 01:05:05,170 >> LUCAS: OK, így ha mondjuk n csillag x, te nem hoz létre egy mutatót a 1209 01:05:05,170 --> 01:05:06,000 változó x. 1210 01:05:06,000 --> 01:05:08,170 Te létre mutató nevű x. 1211 01:05:08,170 --> 01:05:09,396 >> KÖZÖNSÉG: [nem hallható]. 1212 01:05:09,396 --> 01:05:14,250 >> LUCAS: Tehát amikor azt mondom, n csillag x, vagyok mondván, hé, a memóriában, megyek 1213 01:05:14,250 --> 01:05:16,390 kap egy ilyen három doboz. 1214 01:05:16,390 --> 01:05:20,750 És én fogom azt mondani, hogy az lesz x, ami 1215 01:05:20,750 --> 01:05:22,000 lesz a mutató. 1216 01:05:22,000 --> 01:05:26,860 1217 01:05:26,860 --> 01:05:30,640 És valami érdekes a mutatók az, hogy azt mondják, hogy 1218 01:05:30,640 --> 01:05:32,620 4 bájt 32 bites gép. 1219 01:05:32,620 --> 01:05:36,320 És az oka, hogy azért van, mert 4 byte 32-bit. 1220 01:05:36,320 --> 01:05:40,490 >> És a gépeket, amelyek 64 bites valójában Van mutatók címek 1221 01:05:40,490 --> 01:05:43,480 amelyek 64 bit hosszú. 1222 01:05:43,480 --> 01:05:49,820 Tehát ez csak azt jelenti, hogy a méret a címeket a gép különböző. 1223 01:05:49,820 --> 01:05:52,270 >> Így referenciái és Dereferencing. 1224 01:05:52,270 --> 01:05:54,310 Két-üzemeltetők nektek kell emlékezni. 1225 01:05:54,310 --> 01:05:55,450 Az első jel. 1226 01:05:55,450 --> 01:05:56,810 A második a csillag. 1227 01:05:56,810 --> 01:06:05,060 Ne tévesszen meg, hogy a csillag, és ez a csillag, mert ne feledjük, hogy, a 1228 01:06:05,060 --> 01:06:06,950 Ebben az esetben, akkor n csillag. 1229 01:06:06,950 --> 01:06:08,700 >> Olyan, mint egy egész együtt. 1230 01:06:08,700 --> 01:06:10,720 Nincs n tér csillag. 1231 01:06:10,720 --> 01:06:12,070 Tehát ez azt jelenti, hogy ez a típus. 1232 01:06:12,070 --> 01:06:14,870 Ne feledje, hogy ha van a változó csillag, akkor 1233 01:06:14,870 --> 01:06:16,230 beszél a típusát. 1234 01:06:16,230 --> 01:06:20,540 >> Ha már csak csillag, majd a a változó nevét, azt jelenti, hogy 1235 01:06:20,540 --> 01:06:24,100 te dereferencing a mutató, amely azt jelenti, hogy éppen a 1236 01:06:24,100 --> 01:06:28,290 mutató, megtalálni a címet, hogy ez mutat, majd ezt a címet, 1237 01:06:28,290 --> 01:06:30,850 és néztem, amikor van ott. 1238 01:06:30,850 --> 01:06:34,310 Tehát azt mondom a tanítványaimnak, hogy ha van csillag, meg kell gondolni, hogy ez az 1239 01:06:34,310 --> 01:06:36,850 a rövidítése tartalmának. 1240 01:06:36,850 --> 01:06:39,770 >> Tehát, ha van egy mutató, és do csillag mutató, ez a 1241 01:06:39,770 --> 01:06:41,720 tartalmát a mutató. 1242 01:06:41,720 --> 01:06:44,580 Szóval megy bármi ez mutat és nézd meg az állandó tartalom. 1243 01:06:44,580 --> 01:06:47,730 És a jel ugyanaz dolog, mint címe. 1244 01:06:47,730 --> 01:06:52,560 >> Tehát ha van egy változó egy-- mint, mondjuk azt mondják, hogy én nem int egy egyenlő 3-- 1245 01:06:52,560 --> 01:06:56,900 ha azt akarom, hogy megtalálják a címét, hogy a változó a memória, én csak nem 1246 01:06:56,900 --> 01:06:58,240 jel a. 1247 01:06:58,240 --> 01:07:00,280 Szóval címét. 1248 01:07:00,280 --> 01:07:01,530 Értelme? 1249 01:07:01,530 --> 01:07:03,790 1250 01:07:03,790 --> 01:07:05,040 >> Tehát itt egy példa. 1251 01:07:05,040 --> 01:07:08,370 1252 01:07:08,370 --> 01:07:11,530 Ez hiányzik, int b és int c. 1253 01:07:11,530 --> 01:07:16,520 Így int a = 3 azt jelenti, hogy Én megyek a memóriába. 1254 01:07:16,520 --> 01:07:19,870 És én fogom találni a nyílás és tedd a 3-as szám van. 1255 01:07:19,870 --> 01:07:22,200 >> Aztán int b értéke 4. 1256 01:07:22,200 --> 01:07:23,100 Megyek nem ugyanaz a dolog. 1257 01:07:23,100 --> 01:07:25,840 Menj a memória és hozzádni egy számot 4. az egyik doboz. 1258 01:07:25,840 --> 01:07:27,100 És int értéke 5. 1259 01:07:27,100 --> 01:07:29,740 Találj egy dobozt, és tesz egy 5-ös szám. 1260 01:07:29,740 --> 01:07:36,160 >> Szóval mi ez a vonal csinálsz? n csillag pa egyenlő jel a. 1261 01:07:36,160 --> 01:07:37,800 Tehát először is, n csillag pa. 1262 01:07:37,800 --> 01:07:39,050 Mit csinál? 1263 01:07:39,050 --> 01:07:40,930 1264 01:07:40,930 --> 01:07:42,298 >> KÖZÖNSÉG: [nem hallható]. 1265 01:07:42,298 --> 01:07:47,890 >> LUCAS: Igen, n csillag pa, első, kijelenti mutató nevű pa. 1266 01:07:47,890 --> 01:07:53,720 És akkor ez értékét hozzárendeljük Ez a mutató, hogy a címét. 1267 01:07:53,720 --> 01:07:55,790 Így jel a. 1268 01:07:55,790 --> 01:07:58,510 Aztán, ha mégis csillag pb, mi az a csillag pb? 1269 01:07:58,510 --> 01:08:02,418 1270 01:08:02,418 --> 01:08:03,150 >> Ó, bocsánat. 1271 01:08:03,150 --> 01:08:06,330 Ez is hiányzik. n csillag pb. 1272 01:08:06,330 --> 01:08:07,905 Úgy értem, csillag pc. 1273 01:08:07,905 --> 01:08:11,200 Annyira sajnálom. 1274 01:08:11,200 --> 01:08:11,940 Ez ugyanaz a dolog. 1275 01:08:11,940 --> 01:08:16,408 De most jól vagyok ar létre egy mutatót B és majd a mutatót c. 1276 01:08:16,408 --> 01:08:16,886 Igen? 1277 01:08:16,886 --> 01:08:18,136 >> KÖZÖNSÉG: [nem hallható]? 1278 01:08:18,136 --> 01:08:25,490 1279 01:08:25,490 --> 01:08:26,670 >> LUCAS: Igen. 1280 01:08:26,670 --> 01:08:32,630 Tehát, ha megy a memóriába, és megy A doboz, jelölésből pa, 1281 01:08:32,630 --> 01:08:37,149 te tényleg fog lásd címeit. 1282 01:08:37,149 --> 01:08:38,399 OK? 1283 01:08:38,399 --> 01:08:42,970 1284 01:08:42,970 --> 01:08:43,300 Igen? 1285 01:08:43,300 --> 01:08:45,605 >> KÖZÖNSÉG: [nem hallható]? 1286 01:08:45,605 --> 01:08:49,260 >> LUCAS: Igen, mutató egy címet. 1287 01:08:49,260 --> 01:08:50,120 Soha ne felejtsük el, hogy. 1288 01:08:50,120 --> 01:08:52,800 Ez olyan, mint a legfontosabb rész a mutatók. 1289 01:08:52,800 --> 01:08:56,180 Van tárolása és címe néhány változó. 1290 01:08:56,180 --> 01:08:56,890 Van még valami? 1291 01:08:56,890 --> 01:08:58,370 Egyéb kérdés? 1292 01:08:58,370 --> 01:08:59,189 OK. 1293 01:08:59,189 --> 01:09:00,399 >> Tehát mutatók és tömbök. 1294 01:09:00,399 --> 01:09:08,189 Ne feledje, hogy amikor én int tömb 3, alapvetően, hogy mit csinálok, hogy én vagyok, kedves 1295 01:09:08,189 --> 01:09:12,779 Az, kijelentve, a mutató. 1296 01:09:12,779 --> 01:09:18,960 Így sor olyan, mint egy mutató a meghatározott helyre a memóriában, ahol én 1297 01:09:18,960 --> 01:09:21,999 kiosztott három nyílások egész szám. 1298 01:09:21,999 --> 01:09:23,430 Van ennek értelme? 1299 01:09:23,430 --> 01:09:30,250 >> Tehát, amikor én int tömb 3, milyen vagyok Ennek alapvetően teremt három 1300 01:09:30,250 --> 01:09:31,479 nyílások a memóriában. 1301 01:09:31,479 --> 01:09:33,899 Szóval csak meg három slot a memóriában. 1302 01:09:33,899 --> 01:09:38,810 Tehát, ha mégis, akkor egy csillag tömb, azt lényegében azt jelenti, a tartalom tömb, 1303 01:09:38,810 --> 01:09:46,180 ami azt jelenti, hogy törli a mutató, megyek arra a helyre, hogy ez mutat, 1304 01:09:46,180 --> 01:09:47,939 és tettem az első számú. 1305 01:09:47,939 --> 01:09:53,729 >> És akkor, ha én csillag tömb plusz 1, ez ugyanaz, mint csinál tömb 1306 01:09:53,729 --> 01:09:59,690 tartórudakhoz egyik, ami csak azt jelenti, hogy megy a az a hely, hogy ez mutatva. 1307 01:09:59,690 --> 01:10:03,000 És akkor a plusz 1 teszi nekem váltani egy pozíció. 1308 01:10:03,000 --> 01:10:06,510 Szóval megy ez a helyzet, valójában, és tedd a két szám. 1309 01:10:06,510 --> 01:10:10,900 >> És végül, amikor én tömb plusz 2, megyek, ahol 1310 01:10:10,900 --> 01:10:11,825 tömb mutatna. 1311 01:10:11,825 --> 01:10:14,690 Aztán menjen memória blokkokat. 1312 01:10:14,690 --> 01:10:16,240 Aztán fel a hármas szám itt. 1313 01:10:16,240 --> 01:10:16,600 Igen? 1314 01:10:16,600 --> 01:10:21,400 >> Közönség: Tehát csillag tömb egyszerűen mondván, az első pont. 1315 01:10:21,400 --> 01:10:25,090 És akkor adjunk hozzá 1, csak azért, mert mi csak igazán 1316 01:10:25,090 --> 01:10:27,295 hivatkozva, hogy az első címet. 1317 01:10:27,295 --> 01:10:28,545 >> LUCAS: Igen. 1318 01:10:28,545 --> 01:10:32,720 1319 01:10:32,720 --> 01:10:36,020 Miért, például, mondjuk array 0, tömb 1 és 2 sor? 1320 01:10:36,020 --> 01:10:38,970 1321 01:10:38,970 --> 01:10:42,790 Azt mondom, miért csinálod 0, 1, 2, 3 helyett 1, 2, 3? 1322 01:10:42,790 --> 01:10:46,550 Ennek egyik oka az, hogy egy, a számítógép programozók szívesebben indítanak 1323 01:10:46,550 --> 01:10:47,750 számolás 0. 1324 01:10:47,750 --> 01:10:52,370 Kettő azért van, mert ha nem tömb 0, ez ugyanaz, mint csinál tömb 1325 01:10:52,370 --> 01:10:56,330 plusz 0, ami azt jelenti, hogy megy a ezt az álláspontot, és én nem 1326 01:10:56,330 --> 01:10:59,320 hagyja minden memória blokkokat. 1327 01:10:59,320 --> 01:11:01,750 Szóval nem mozog semmilyen memória blokkokat. 1328 01:11:01,750 --> 01:11:02,015 Igen? 1329 01:11:02,015 --> 01:11:03,265 >> KÖZÖNSÉG: [nem hallható]? 1330 01:11:03,265 --> 01:11:05,928 1331 01:11:05,928 --> 01:11:12,670 >> LUCAS: Szóval ő azt kérdezi, mi az, a különbség csinál 1332 01:11:12,670 --> 01:11:14,000 ez avagy malloc. 1333 01:11:14,000 --> 01:11:17,550 Az egyik különbség az, hogy a int tömb 3 létrehozása 1334 01:11:17,550 --> 01:11:19,260 tömb a verem. 1335 01:11:19,260 --> 01:11:23,080 És amikor én malloc, akkor létrehozza a kupac. 1336 01:11:23,080 --> 01:11:25,250 Van ennek értelme? 1337 01:11:25,250 --> 01:11:28,870 >> Tehát hogyan malloc tényleg működik? 1338 01:11:28,870 --> 01:11:32,245 Akkor miért is kell használni malloc? 1339 01:11:32,245 --> 01:11:35,730 1340 01:11:35,730 --> 01:11:39,700 A fordító a fajta számok az összes a változókat, amit bejelentett. 1341 01:11:39,700 --> 01:11:44,040 És teremt helyet minden őket a verem. 1342 01:11:44,040 --> 01:11:47,180 Tehát az összes változót fog hogy valahol a verem. 1343 01:11:47,180 --> 01:11:49,460 Tehát itt van a környezeti változókat. 1344 01:11:49,460 --> 01:11:53,850 >> Tehát alapvetően tér azokat a változókat A memóriát a 1345 01:11:53,850 --> 01:11:55,080 fordításkor. 1346 01:11:55,080 --> 01:11:58,790 Tehát ez azt jelenti, hogy a számítógép tudni, hogy az összes ilyen változó 1347 01:11:58,790 --> 01:11:59,790 előre. 1348 01:11:59,790 --> 01:12:02,500 Nem kell tudni, hogy milyen értéket fogsz tenni őket. 1349 01:12:02,500 --> 01:12:05,490 De tudni kell, hogyan sok memóriát amire szüksége van. 1350 01:12:05,490 --> 01:12:09,380 >> De most tegyük fel, hogy, például, te létre egy tömb, vagy egy 1351 01:12:09,380 --> 01:12:13,430 karakterlánc, szedi a felhasználó elől. 1352 01:12:13,430 --> 01:12:17,300 Nem tudod, milyen hosszú a húr lesz, például. 1353 01:12:17,300 --> 01:12:20,600 Szóval nem tudom pontosan, hogy hány memória blokkok kiosztani, igaz? 1354 01:12:20,600 --> 01:12:24,120 >> Így nem igazán van értelme a hogy ezt mondja fel 100 karakter. 1355 01:12:24,120 --> 01:12:26,420 És akkor mi van, ha a felhasználó azt írja 150? 1356 01:12:26,420 --> 01:12:27,670 Fogsz kell csavarni. 1357 01:12:27,670 --> 01:12:30,160 1358 01:12:30,160 --> 01:12:34,620 >> Tehát alapvetően, akkor nem biztos, hogy milyen sok memória kell kiosztani 1359 01:12:34,620 --> 01:12:35,960 amikor fordítod a programot. 1360 01:12:35,960 --> 01:12:38,240 Csak azt tudom, hogy a működési idő. 1361 01:12:38,240 --> 01:12:39,950 Szóval ezért van a kupac. 1362 01:12:39,950 --> 01:12:47,610 Így a kupac megy, hogy a memória hogy te felosztása során a 1363 01:12:47,610 --> 01:12:50,810 A program időtartama fut. 1364 01:12:50,810 --> 01:12:55,780 >> Tehát alapvetően, ha nem malloc, amit teszel felosztásának memóriába 1365 01:12:55,780 --> 01:13:00,160 runtime, ami azt jelenti, hogy te döntés abban a pillanatban, hogy 1366 01:13:00,160 --> 01:13:02,670 kell, hogy a memória. 1367 01:13:02,670 --> 01:13:04,210 Szóval, amikor azt kiutalták. 1368 01:13:04,210 --> 01:13:06,430 Van ennek értelme? 1369 01:13:06,430 --> 01:13:11,690 >> Úgy emlékszem, a verem változó jönnek létre fordításkor. 1370 01:13:11,690 --> 01:13:14,560 És akkor a halom is változó létrehozott kirovó 1371 01:13:14,560 --> 01:13:15,600 a malloc, például. 1372 01:13:15,600 --> 01:13:16,850 >> KÖZÖNSÉG: [nem hallható]? 1373 01:13:16,850 --> 01:13:19,179 1374 01:13:19,179 --> 01:13:24,340 >> LUCAS: Tehát getString van Felhívom malloc. 1375 01:13:24,340 --> 01:13:26,710 Hadd beszéljünk malloc, és Elmagyarázom getString. 1376 01:13:26,710 --> 01:13:32,000 Így malloc ugyanaz a dolog a memória kiosztás. 1377 01:13:32,000 --> 01:13:34,600 Így fog kiosztani memóriát a kupac. 1378 01:13:34,600 --> 01:13:40,010 És ez vissza fog térni a mutatót ha ez a memória osztották meg. 1379 01:13:40,010 --> 01:13:43,090 >> Tehát, ha csi 1380 01:13:43,090 --> 01:13:44,910 itt example-- 1381 01:13:44,910 --> 01:13:45,830 n csillag mutató. 1382 01:13:45,830 --> 01:13:50,520 Aztán mutató értéke malloc mérete inch-szer 10. 1383 01:13:50,520 --> 01:13:52,110 Hozok létre mutató. 1384 01:13:52,110 --> 01:13:59,020 És akkor én hozzárendelése hogy mutatót értékét a mutató az malloc 1385 01:13:59,020 --> 01:13:59,680 ad nekem. 1386 01:13:59,680 --> 01:14:04,150 >> Szóval kérlek malloc lehet lefoglalni hely, 10 egész. 1387 01:14:04,150 --> 01:14:05,390 Ez az, amit mond. 1388 01:14:05,390 --> 01:14:09,020 És malloc ad nekem vissza mutatót arra a helyre. 1389 01:14:09,020 --> 01:14:11,460 Értelme? 1390 01:14:11,460 --> 01:14:12,270 OK. 1391 01:14:12,270 --> 01:14:17,940 Én pedig getString van, alapvetően, csinál egy hívja malloc így kiosztani 1392 01:14:17,940 --> 01:14:21,680 memória futás közben. 1393 01:14:21,680 --> 01:14:26,460 >> Mindig emlékezni, hogy ellenőrizze a null mert malloc fog visszatérni null 1394 01:14:26,460 --> 01:14:28,200 ha nem tud memóriát lefoglalni. 1395 01:14:28,200 --> 01:14:31,660 Tegyük fel, hogy kér egy nevetséges memória mennyisége. 1396 01:14:31,660 --> 01:14:33,950 A számítógép nem lesz képes lefoglalni, hogy sok. 1397 01:14:33,950 --> 01:14:36,410 >> Tehát malloc csak fog vissza null. 1398 01:14:36,410 --> 01:14:42,210 Tehát, mindig emlékezni, hogy ellenőrizze, hogy a mutató, hogy van a malloc van 1399 01:14:42,210 --> 01:14:45,640 null vagy nem, mert ha igen, akkor lehet, hogy kell dereferencing a mutató és 1400 01:14:45,640 --> 01:14:48,340 mellékhatások okozása hibák. 1401 01:14:48,340 --> 01:14:50,930 És végül, ne felejtsük el, a szabad memória. 1402 01:14:50,930 --> 01:14:57,800 1403 01:14:57,800 --> 01:15:00,560 >> Malloc teremt memória a kupac. 1404 01:15:00,560 --> 01:15:03,436 És meg kell szabadítani a memóriát mielőtt a program véget ér. 1405 01:15:03,436 --> 01:15:05,370 OK, ez mind nekem. 1406 01:15:05,370 --> 01:15:07,900 Sajnálom, Rob. 1407 01:15:07,900 --> 01:15:07,950 Köszönöm. 1408 01:15:07,950 --> 01:15:09,878 >> [Taps] 1409 01:15:09,878 --> 01:15:12,679 >> LUCAS: Egy utolsó kérdés mielőtt Rob jön? 1410 01:15:12,679 --> 01:15:13,138 Nem? 1411 01:15:13,138 --> 01:15:13,597 Igen? 1412 01:15:13,597 --> 01:15:15,892 >> Közönség: Nem láttam ezt az interneten. 1413 01:15:15,892 --> 01:15:17,269 Már feltöltötte már? 1414 01:15:17,269 --> 01:15:19,106 >> LUCAS: Azt hiszem, Dave feltöltése hamarosan. 1415 01:15:19,106 --> 01:15:19,880 >> DAVE: Nem lesz felkerül. 1416 01:15:19,880 --> 01:15:20,310 >> LUCAS: Nem lesz az interneten. 1417 01:15:20,310 --> 01:15:21,175 >> Közönség: Rajtunk múlik. 1418 01:15:21,175 --> 01:15:22,090 >> LUCAS: ez a helyzet? 1419 01:15:22,090 --> 01:15:23,157 OK. 1420 01:15:23,157 --> 01:15:23,644 Igen? 1421 01:15:23,644 --> 01:15:27,053 >> KÖZÖNSÉG: [nem hallható]? 1422 01:15:27,053 --> 01:15:30,285 >> LUCAS: Igen, meg kell szabadítani a memória kerül a kupac. 1423 01:15:30,285 --> 01:15:31,535 >> KÖZÖNSÉG: [nem hallható]? 1424 01:15:31,535 --> 01:15:34,518 1425 01:15:34,518 --> 01:15:36,160 >> LUCAS: Igen. 1426 01:15:36,160 --> 01:15:39,980 Minden alkalommal, amikor van egy kultúra malloc, akkor kell egy kultúra szabad 1427 01:15:39,980 --> 01:15:42,640 miután abbahagyja a változót. 1428 01:15:42,640 --> 01:15:44,800 Tehát malloc és a free mindig együtt. 1429 01:15:44,800 --> 01:15:45,410 Legjobb barátok. 1430 01:15:45,410 --> 01:15:46,720 Igen. 1431 01:15:46,720 --> 01:15:47,970 Rob? 1432 01:15:47,970 --> 01:15:55,595 1433 01:15:55,595 --> 01:15:56,850 >> ROB: Megyek gyorsan. 1434 01:15:56,850 --> 01:16:00,466 És azt is a videó kerül fel. 1435 01:16:00,466 --> 01:16:01,716 Nekem van a mikrofon be. 1436 01:16:01,716 --> 01:16:24,060 1437 01:16:24,060 --> 01:16:26,230 >> OK, így hetente öt dolog. 1438 01:16:26,230 --> 01:16:27,970 Az első dolog, amit meg a verem. 1439 01:16:27,970 --> 01:16:33,390 Úgy emlékszem, hogy már csak egy halom frame per aktív funkció hívás. 1440 01:16:33,390 --> 01:16:34,710 Majd meglátjuk, hogy a második. 1441 01:16:34,710 --> 01:16:37,850 És ne feledje, hogy valójában mi megy Minden stack frame lesznek 1442 01:16:37,850 --> 01:16:41,880 a lokális változók a mi funkciók az érveket, amelyeket át a mi 1443 01:16:41,880 --> 01:16:43,880 funkciók, valamint egy pár más dolog, amit nem igazán 1444 01:16:43,880 --> 01:16:45,260 kell aggódni. 1445 01:16:45,260 --> 01:16:50,950 >> Tehát itt egy példa program, ahol, értesítés, fő az printfing a visszatérés 1446 01:16:50,950 --> 01:16:52,830 foo értéke 4. 1447 01:16:52,830 --> 01:16:57,930 ize csak megy vissza a értéke bar 4 vessző 6. 1448 01:16:57,930 --> 01:17:02,380 És bár fog meg néhány helyi n változó értékét 4-szer 6. 1449 01:17:02,380 --> 01:17:03,920 Majd vissza n. 1450 01:17:03,920 --> 01:17:09,130 >> Tehát nézzük meg a stack-szerte a tényleges iteráció a program. 1451 01:17:09,130 --> 01:17:10,500 Szóval van az alján a halom. 1452 01:17:10,500 --> 01:17:12,620 Ne feledje, hogy a halom felnő. 1453 01:17:12,620 --> 01:17:15,370 Tehát alján mi verem, mi Van egy halom keret fő. 1454 01:17:15,370 --> 01:17:17,000 Amikor a program elindul, a fő mindig lesz a 1455 01:17:17,000 --> 01:17:18,560 alján a halom. 1456 01:17:18,560 --> 01:17:20,880 >> És mi van benne a mi verem keret legfontosabb? 1457 01:17:20,880 --> 01:17:23,810 Tehát annak ellenére, hogy nem a helyi változókat a fő, mint már mondtam, 1458 01:17:23,810 --> 01:17:29,670 mi argc és rgv a helyet belső fő verem keret. 1459 01:17:29,670 --> 01:17:33,260 Tehát fő most fog hívja a function ize. 1460 01:17:33,260 --> 01:17:35,125 És ez azt jelenti foo fog kap saját stack frame. 1461 01:17:35,125 --> 01:17:36,970 >> Tehát most vagyunk belsejében a function ize. 1462 01:17:36,970 --> 01:17:38,610 És mi kell menni Foo stack frame? 1463 01:17:38,610 --> 01:17:41,100 Nos, foo van egy érv n. 1464 01:17:41,100 --> 01:17:45,440 És n = 4, mert ez az, amit Fő halad a foo érvelését. 1465 01:17:45,440 --> 01:17:48,490 >> Tehát most foo fog hívni bárban. 1466 01:17:48,490 --> 01:17:52,070 Mi bár lesz benne az "stack frame? 1467 01:17:52,070 --> 01:17:55,610 Meg x egyenlő 4 y egyenlő hat. 1468 01:17:55,610 --> 01:17:58,540 Ez még nem minden, hogy mi lesz A stack frame mert bar 1469 01:17:58,540 --> 01:18:00,580 is van egy helyi változót n. 1470 01:18:00,580 --> 01:18:03,370 N fogunk egyezni a 24. 1471 01:18:03,370 --> 01:18:05,750 >> Tehát most sáv fog visszatérni n. 1472 01:18:05,750 --> 01:18:09,300 Tehát bár visszatér 24 A stack frame foo. 1473 01:18:09,300 --> 01:18:12,560 És mivel bár most visszatér, hogy azt jelenti, hogy most felbukkanó a stack frame 1474 01:18:12,560 --> 01:18:14,250 A sáv le a halom. 1475 01:18:14,250 --> 01:18:18,430 Így az összes memóriát bar volt a most ki a verem. 1476 01:18:18,430 --> 01:18:21,550 >> Most, ize is fog vissza 24 fő. 1477 01:18:21,550 --> 01:18:25,470 Most, hogy ize visszatér, a memória hogy pelda a saját " 1478 01:18:25,470 --> 01:18:27,550 verem keret is elment. 1479 01:18:27,550 --> 01:18:29,660 És most, a fő fog hívni printf. 1480 01:18:29,660 --> 01:18:31,660 Tehát printf is csak egy funkció. 1481 01:18:31,660 --> 01:18:35,320 Mikor hívjuk printf, ez lesz másik verem keret a printf 1482 01:18:35,320 --> 01:18:36,470 függvényhívás. 1483 01:18:36,470 --> 01:18:37,990 >> Mit halad printf? 1484 01:18:37,990 --> 01:18:40,090 Ez az, ami fog menni annak stack frame. 1485 01:18:40,090 --> 01:18:44,970 Legalább, mi megy hogy százalékos én backslash n és 1486 01:18:44,970 --> 01:18:47,180 az érvelés 24. 1487 01:18:47,180 --> 01:18:50,370 Lehet, hogy több benne a stack frame ha printf segítségével történik, hogy bizonyos 1488 01:18:50,370 --> 01:18:51,200 lokális változók. 1489 01:18:51,200 --> 01:18:51,920 Nem tudjuk. 1490 01:18:51,920 --> 01:18:53,810 >> De minden, hogy megy a printf verem keret. 1491 01:18:53,810 --> 01:18:55,740 Ez lesz végre a printf. 1492 01:18:55,740 --> 01:18:56,830 Akkor printf kész. 1493 01:18:56,830 --> 01:18:57,820 Vissza fog térni. 1494 01:18:57,820 --> 01:18:58,960 Végül a legfontosabb történik. 1495 01:18:58,960 --> 01:18:59,860 Main visszatér. 1496 01:18:59,860 --> 01:19:02,020 És akkor a program kész. 1497 01:19:02,020 --> 01:19:02,480 Igen? 1498 01:19:02,480 --> 01:19:04,505 >> Közönség: Jársz [nem hallható] 1499 01:19:04,505 --> 01:19:05,900 érvek [nem hallható] 1500 01:19:05,900 --> 01:19:06,830 paraméterek? 1501 01:19:06,830 --> 01:19:09,970 >> ROB: Tehát van egy kis különbség között érveket és paraméterek. 1502 01:19:09,970 --> 01:19:14,400 És valóban, a közös beszél, az emberek hajlamosak hogy csak keverjük őket minden alkalommal. 1503 01:19:14,400 --> 01:19:17,550 De paraméterek a formális neve a dolgok. 1504 01:19:17,550 --> 01:19:20,180 >> Tehát argc és argv a paramétereket a fő. 1505 01:19:20,180 --> 01:19:23,440 Érvek az, amit valójában adja át ezek a paraméterek. 1506 01:19:23,440 --> 01:19:28,340 Tehát amikor hívom foo 4, 4 az érvelés vagyok halad. 1507 01:19:28,340 --> 01:19:31,460 És az n paraméter, belsejében ize, veszi a 4-es érték 1508 01:19:31,460 --> 01:19:32,880 4-től volt az érv. 1509 01:19:32,880 --> 01:19:35,826 >> KÖZÖNSÉG: [nem hallható]? 1510 01:19:35,826 --> 01:19:37,880 >> ROB: n egy lokális változó bar. 1511 01:19:37,880 --> 01:19:41,420 1512 01:19:41,420 --> 01:19:44,960 n még mindig a helyi ize, de ez egy paramétert foo. 1513 01:19:44,960 --> 01:19:48,190 Ez nem egy helyi változót. 1514 01:19:48,190 --> 01:19:48,546 Igen? 1515 01:19:48,546 --> 01:19:51,180 >> KÖZÖNSÉG: [nem hallható]? 1516 01:19:51,180 --> 01:19:55,400 >> ROB: foo csak hívás bar és visszatérő bármi bar visszatér. 1517 01:19:55,400 --> 01:19:56,786 >> KÖZÖNSÉG: [nem hallható]? 1518 01:19:56,786 --> 01:19:59,591 >> ROB: Igen, csak hogy több verem kereteket. 1519 01:19:59,591 --> 01:20:00,082 Igen? 1520 01:20:00,082 --> 01:20:03,519 >> Közönség: Miért foo nevű előtt printf? 1521 01:20:03,519 --> 01:20:05,920 >> ROB: Miért foo elé hívják printf? 1522 01:20:05,920 --> 01:20:10,740 Így tudtam, hanem tett valamit mint int x = foo 4 1523 01:20:10,740 --> 01:20:12,980 majd nyomtatott x. 1524 01:20:12,980 --> 01:20:17,900 De ahelyett, kombináltam a funkció hívja a printf érv. 1525 01:20:17,900 --> 01:20:23,670 >> De figyeljük meg, hogy valójában nem végre a hívás printf amíg 1526 01:20:23,670 --> 01:20:25,610 kitalálni, milyen az ize a 4. 1527 01:20:25,610 --> 01:20:27,480 Így fogjuk értékelni ezt. 1528 01:20:27,480 --> 01:20:32,504 És csak egyszer, hogy kész lesz hogy jöjjön vissza, és értékelik ezt. 1529 01:20:32,504 --> 01:20:32,990 Igen? 1530 01:20:32,990 --> 01:20:37,364 >> Közönség: Mivel mindkét bar [nem hallható] 1531 01:20:37,364 --> 01:20:41,738 érték, miért nincs [nem hallható]? 1532 01:20:41,738 --> 01:20:44,400 >> ROB: Ők teljesen legyen int. 1533 01:20:44,400 --> 01:20:46,260 Ez nem volt fogott át több fogás. 1534 01:20:46,260 --> 01:20:49,010 Így kell lennie int bar és int foo mivel mind a két 1535 01:20:49,010 --> 01:20:50,460 visszatérnek egészek. 1536 01:20:50,460 --> 01:20:54,214 Void csak akkor, ha ők nem fognak vissza tényleges értékek. 1537 01:20:54,214 --> 01:20:54,692 Igen? 1538 01:20:54,692 --> 01:20:58,038 >> Közönség: Ha lenne egy vonal fölött a visszatérés, [nem hallható]? 1539 01:20:58,038 --> 01:21:01,862 1540 01:21:01,862 --> 01:21:03,730 >> ROB: A vonal felett a visszatérés? 1541 01:21:03,730 --> 01:21:04,410 >> Közönség: Igen. 1542 01:21:04,410 --> 01:21:10,780 Mint ha nem printf és [nem hallható], lenne kinyomtatni kétszer? 1543 01:21:10,780 --> 01:21:12,992 >> ROB: Tehát belsejében ize? 1544 01:21:12,992 --> 01:21:15,945 Ha volt egy printf itt? 1545 01:21:15,945 --> 01:21:16,750 >> Közönség: Igen. 1546 01:21:16,750 --> 01:21:19,510 >> ROB: Tehát ha van egy printf joga itt, akkor nyomtassa ki egyszer. 1547 01:21:19,510 --> 01:21:23,400 Mivel a hívott fél foo egyszer jobbra itt, aztán megüt a printf. 1548 01:21:23,400 --> 01:21:24,620 Akkor hívjuk bar. 1549 01:21:24,620 --> 01:21:25,710 És akkor foo visszatér. 1550 01:21:25,710 --> 01:21:26,275 És ennyi. 1551 01:21:26,275 --> 01:21:30,985 Mi mindig csak találkozunk a printf egyszer. 1552 01:21:30,985 --> 01:21:31,482 Igen? 1553 01:21:31,482 --> 01:21:32,973 >> KÖZÖNSÉG: [nem hallható] 1554 01:21:32,973 --> 01:21:37,950 printf hívás foo mert mi vagyunk az első hívó printf aztán továbbadja 1555 01:21:37,950 --> 01:21:38,580 az érveket. 1556 01:21:38,580 --> 01:21:40,960 >> ROB: Tehát elméletileg, nem printf hívás foo? 1557 01:21:40,960 --> 01:21:42,220 Tehát nem. 1558 01:21:42,220 --> 01:21:47,360 Csak azért, hogy ac fog végre ezeket a dolgokat, mielőtt mi is 1559 01:21:47,360 --> 01:21:49,800 hívja a funkció, az összes érvet a funkció kell 1560 01:21:49,800 --> 01:21:51,600 teljesen értékelni. 1561 01:21:51,600 --> 01:21:53,540 Szóval ez teljesen értékelni? 1562 01:21:53,540 --> 01:21:54,610 Igen, ez csak egy húr. 1563 01:21:54,610 --> 01:21:55,480 Ez csak egy értéket. 1564 01:21:55,480 --> 01:21:57,200 >> Aztán ott van, hogy teljesen értékeli ezt. 1565 01:21:57,200 --> 01:21:59,720 Ha ez megtörtént, most minden az érveit értékelik. 1566 01:21:59,720 --> 01:22:01,982 És most lehet, hogy a hívja printf. 1567 01:22:01,982 --> 01:22:02,478 Igen? 1568 01:22:02,478 --> 01:22:03,966 >> Közönség: Egy kérdés. 1569 01:22:03,966 --> 01:22:06,942 Ha van egy üres funkciót kell van visszatérés pontosvessző? 1570 01:22:06,942 --> 01:22:09,910 >> ROB: nem a visszatérés pontosvessző ha van egy void függvény. 1571 01:22:09,910 --> 01:22:13,370 1572 01:22:13,370 --> 01:22:14,780 OK. 1573 01:22:14,780 --> 01:22:15,830 Így most néhány kupac dolog. 1574 01:22:15,830 --> 01:22:19,640 Szóval, halom, hogyan fogunk foglalkozni dinamikus memória kezelésére. 1575 01:22:19,640 --> 01:22:23,100 És ez közvetlenül ellentmond a stack amit neveznék automatikus 1576 01:22:23,100 --> 01:22:24,100 memória kezelése. 1577 01:22:24,100 --> 01:22:27,140 >> Így a verem, akkor nem igazán van foglalkozni, hogy a lokális változók 1578 01:22:27,140 --> 01:22:30,400 tolnak és bukkant ki minden ezeket stack keretek és minden ilyesmi. 1579 01:22:30,400 --> 01:22:31,070 Nem kell aggódni. 1580 01:22:31,070 --> 01:22:32,070 Ez az automatikus. 1581 01:22:32,070 --> 01:22:36,990 Tehát a halom manuális. 1582 01:22:36,990 --> 01:22:38,070 És a [nem hallható] 1583 01:22:38,070 --> 01:22:41,260 származik ezeket a funkciókat malloc és ingyenes. 1584 01:22:41,260 --> 01:22:43,550 >> Tehát itt van egy másik program. 1585 01:22:43,550 --> 01:22:47,145 Minden, amit csinálunk mallocing egy egész szám. 1586 01:22:47,145 --> 01:22:49,360 Mi tárolás csillag x. 1587 01:22:49,360 --> 01:22:52,520 Persze, van, hogy ellenőrizze hogy ha x null. 1588 01:22:52,520 --> 01:22:56,400 Akkor fogjuk csak meg, milyen x mutat 50. 1589 01:22:56,400 --> 01:23:00,350 1590 01:23:00,350 --> 01:23:03,260 Nyomtassa mi x mutat, print x, majd a szabad x. 1591 01:23:03,260 --> 01:23:08,920 >> Hogy van ez valójában fog kinézni ha megnézzük a stack és halom? 1592 01:23:08,920 --> 01:23:10,950 Szóval kezdjük újra. 1593 01:23:10,950 --> 01:23:12,580 Az alján a verem, mint korábban. 1594 01:23:12,580 --> 01:23:15,930 Ne feledje, hogy téged halom közvetlenül ellenzi a stack? 1595 01:23:15,930 --> 01:23:18,850 Szóval lesz a tetején a kupac ott. 1596 01:23:18,850 --> 01:23:22,590 >> Tehát a lényeg a mi verem, mi a verem keret fő. 1597 01:23:22,590 --> 01:23:28,000 Ez a hely a argc, ARGV, és mi Most már van egy helyi változó x, ami 1598 01:23:28,000 --> 01:23:30,030 egy int csillag. 1599 01:23:30,030 --> 01:23:32,240 Így megyünk iterálására a program révén. 1600 01:23:32,240 --> 01:23:34,420 Az első dolog, amit el is a hívást malloc. 1601 01:23:34,420 --> 01:23:36,250 >> Szóval, hogy a hívást a malloc. 1602 01:23:36,250 --> 01:23:37,100 Malloc függvénye. 1603 01:23:37,100 --> 01:23:38,770 Ez lesz, hogy egy verem keret. 1604 01:23:38,770 --> 01:23:40,180 Mit halad malloc? 1605 01:23:40,180 --> 01:23:41,610 Hogy fog menni a verem keret. 1606 01:23:41,610 --> 01:23:45,130 Most haladunk mérete n, ami 4. 1607 01:23:45,130 --> 01:23:49,700 Annak érdekében, hogy az átadott malloc. 1608 01:23:49,700 --> 01:23:50,910 >> Mit malloc csinálni? 1609 01:23:50,910 --> 01:23:53,820 Ez megragadja minket némi helyet a kupac. 1610 01:23:53,820 --> 01:23:55,320 Így fogunk menni a kupac. 1611 01:23:55,320 --> 01:23:57,990 És fogunk megragad 4 byte a kupac. 1612 01:23:57,990 --> 01:24:01,500 Úgyhogy csak adni, hogy a tetszőleges címre. 1613 01:24:01,500 --> 01:24:06,680 0x123 Csak úgy, mintha egy címet, amely a halom. 1614 01:24:06,680 --> 01:24:12,300 >> Tehát mi valójában belsejében az régió memória címen Ox123? 1615 01:24:12,300 --> 01:24:13,080 Szemetet. 1616 01:24:13,080 --> 01:24:15,270 Így már nem tárolt semmit benne. 1617 01:24:15,270 --> 01:24:18,830 Tehát, amennyire tudjuk, az Bármi lehet. 1618 01:24:18,830 --> 01:24:20,560 Nem szabad feltételezni, hogy ez a nulla. 1619 01:24:20,560 --> 01:24:23,870 Ez valószínűleg nem nulla. 1620 01:24:23,870 --> 01:24:26,260 >> Tehát most malloc visszatér. 1621 01:24:26,260 --> 01:24:28,020 És mit tegyünk, ha malloc visszatér? 1622 01:24:28,020 --> 01:24:29,800 Mi meg mit ad vissza. 1623 01:24:29,800 --> 01:24:32,290 Mi meg x egyenlő azzal, amit az visszatér. 1624 01:24:32,290 --> 01:24:33,690 Tehát mi azt vissza? 1625 01:24:33,690 --> 01:24:38,150 Ez visszatérő 0x123 mivel ez a a blokk címét, hogy a memória 1626 01:24:38,150 --> 01:24:40,850 csak kiosztott a kupac. 1627 01:24:40,850 --> 01:24:47,160 >> Tehát vissza 0x123 x most megy be kell állítani egyenlő 0x123, amelyek képileg, 1628 01:24:47,160 --> 01:24:52,940 Gyakran rajzolhat x amelynek tényleges nyíl mutat, hogy a blokk. 1629 01:24:52,940 --> 01:24:55,820 De x csak tárolja a címet. 1630 01:24:55,820 --> 01:24:58,670 Így most nézzük meg, hogy ha x null. 1631 01:24:58,670 --> 01:24:59,120 Ez nem null. 1632 01:24:59,120 --> 01:25:02,170 Azt állítani, hogy az malloc sikerült. 1633 01:25:02,170 --> 01:25:04,950 >> Tehát most csillag x egyenlő 50. 1634 01:25:04,950 --> 01:25:08,450 Tehát csillag emlékszik az azt jelenti, megy, hogy a cím. 1635 01:25:08,450 --> 01:25:12,700 Tehát 0x123 fogunk megy, hogy a cím. 1636 01:25:12,700 --> 01:25:14,660 Annak érdekében, hogy elvezet minket oda. 1637 01:25:14,660 --> 01:25:16,310 Mit csinál a címet? 1638 01:25:16,310 --> 01:25:19,020 Mi tárolására 50. 1639 01:25:19,020 --> 01:25:22,500 >> Szóval miután ezt a sort, ez az, amit dolgok fognak kinézni. 1640 01:25:22,500 --> 01:25:24,640 Így most ez már nem szemét ott. 1641 01:25:24,640 --> 01:25:28,910 Most már tudjuk, hogy a 50, hogy különös címet, mert 1642 01:25:28,910 --> 01:25:32,410 mi meg azt, hogy az. 1643 01:25:32,410 --> 01:25:32,790 OK? 1644 01:25:32,790 --> 01:25:34,370 Tehát most fogunk nyomtatni f. 1645 01:25:34,370 --> 01:25:38,490 >> Tehát először fogunk nyomtatni csillag x. 1646 01:25:38,490 --> 01:25:39,640 Szóval mi a csillag x? 1647 01:25:39,640 --> 01:25:44,300 Ismét csillag x azt jelenti, megy a dolog, hogy az x-et mutat. 1648 01:25:44,300 --> 01:25:47,140 Tehát x tárol 0x123 megy, hogy a. 1649 01:25:47,140 --> 01:25:48,490 Kapunk 50. 1650 01:25:48,490 --> 01:25:50,540 Így kinyomtatni f ezt. 1651 01:25:50,540 --> 01:25:54,900 És ez azt jelenti, hogy meg fog nyomtatni 50. 1652 01:25:54,900 --> 01:25:56,850 És akkor az visszatér. 1653 01:25:56,850 --> 01:25:58,340 >> És akkor mi van a második printf. 1654 01:25:58,340 --> 01:25:59,370 Mi most százalék p. 1655 01:25:59,370 --> 01:26:01,680 Ha még nem látta, hogy ez hogy milyen nyomtatásakor mutató. 1656 01:26:01,680 --> 01:26:04,960 Tehát százalék i, százalék f, és az összes e már. 1657 01:26:04,960 --> 01:26:07,160 Tehát százalék p nyomtassa ki a mutató. 1658 01:26:07,160 --> 01:26:08,920 >> Tehát x egy mutató. 1659 01:26:08,920 --> 01:26:13,440 Tehát, ha meg akarjuk nyomtatni x is, mi mit nyomtat valójában belül 1660 01:26:13,440 --> 01:26:19,220 x, amely 0x123 Tehát az első nyomtatás f fog nyomtatni 50. 1661 01:26:19,220 --> 01:26:23,620 A második nyomtatás f folyik nyomtatni 0x123 Igen? 1662 01:26:23,620 --> 01:26:27,460 >> Közönség: Használ százalék x nyomtatni mutató? 1663 01:26:27,460 --> 01:26:31,200 >> ROB: Szóval használsz százalék x nyomtatni mutató? 1664 01:26:31,200 --> 01:26:38,350 Szóval lehet, de százalék x csak, általában a hasonló, ha van valami 1665 01:26:38,350 --> 01:26:40,325 egész és szeretne nyomtatni , mint egy hexadecimális. 1666 01:26:40,325 --> 01:26:43,250 1667 01:26:43,250 --> 01:26:44,880 Ez csak hogy csinálod. 1668 01:26:44,880 --> 01:26:47,160 >> Mivel százalék d lenne kinyomtatni a decimális. 1669 01:26:47,160 --> 01:26:50,310 Hogy-ket kapjuk százalék d. Én csak egész szám. 1670 01:26:50,310 --> 01:26:52,690 p százaléka kifejezetten a mutatók. 1671 01:26:52,690 --> 01:26:54,060 >> Tehát x egy mutató. 1672 01:26:54,060 --> 01:26:56,360 Azt akarjuk, hogy használni százalék p. 1673 01:26:56,360 --> 01:26:57,937 De százalék x működhet. 1674 01:26:57,937 --> 01:26:58,414 Igen? 1675 01:26:58,414 --> 01:26:59,664 >> KÖZÖNSÉG: [nem hallható]? 1676 01:26:59,664 --> 01:27:04,138 1677 01:27:04,138 --> 01:27:05,388 >> ROB: Igen. 1678 01:27:05,388 --> 01:27:07,870 1679 01:27:07,870 --> 01:27:13,440 Legalábbis erre a call-- így nem tartalmazza azt itt. 1680 01:27:13,440 --> 01:27:19,850 De ez a két érv szükségképpen ennek belsejében verem keret 1681 01:27:19,850 --> 01:27:23,040 valamint a helyi változókat printf segítségével történik, hogy. 1682 01:27:23,040 --> 01:27:27,020 Majd a következő hívás printf most belső printf verem keret 1683 01:27:27,020 --> 01:27:33,960 százalék p backslash n és bármilyen x értéke, ami 0x123. 1684 01:27:33,960 --> 01:27:34,425 Igen? 1685 01:27:34,425 --> 01:27:35,675 >> KÖZÖNSÉG: [nem hallható]? 1686 01:27:35,675 --> 01:27:38,145 1687 01:27:38,145 --> 01:27:40,880 >> ROB: Nem lesz nyomtatni valamit úgy néz ki, mint ez. 1688 01:27:40,880 --> 01:27:41,846 >> KÖZÖNSÉG: [nem hallható]. 1689 01:27:41,846 --> 01:27:44,510 >> ROB: Így kinyomtatja a cím formájában. 1690 01:27:44,510 --> 01:27:47,003 Úgy néz ki, mint egy cím. 1691 01:27:47,003 --> 01:27:47,494 Igen? 1692 01:27:47,494 --> 01:27:49,458 >> KÖZÖNSÉG: [nem hallható]? 1693 01:27:49,458 --> 01:27:51,075 >> ROB: Miért mi? 1694 01:27:51,075 --> 01:27:52,920 >> KÖZÖNSÉG: [nem hallható]? 1695 01:27:52,920 --> 01:27:55,240 >> ROB: Miért van ez a mutató 4 byte? 1696 01:27:55,240 --> 01:27:58,500 Tehát van egy csomó 0-előtt ezt. 1697 01:27:58,500 --> 01:28:03,740 Szóval ez tényleg 0x0000000123. 1698 01:28:03,740 --> 01:28:06,510 A 64 bites rendszer, nem lenne egy csomó több nulla. 1699 01:28:06,510 --> 01:28:11,410 1700 01:28:11,410 --> 01:28:11,900 Igen? 1701 01:28:11,900 --> 01:28:13,150 >> KÖZÖNSÉG: [nem hallható]. 1702 01:28:13,150 --> 01:28:17,290 1703 01:28:17,290 --> 01:28:21,130 >> ROB: Tehát az első printf fog print-- 1704 01:28:21,130 --> 01:28:21,980 >> KÖZÖNSÉG: [nem hallható]. 1705 01:28:21,980 --> 01:28:24,420 >> ROB: Igen, ez lesz a nyomtatás mi x mutat. 1706 01:28:24,420 --> 01:28:27,030 1707 01:28:27,030 --> 01:28:29,070 Csillag azt mondja, mi ez dolog mutat. 1708 01:28:29,070 --> 01:28:30,300 Fogd meg. 1709 01:28:30,300 --> 01:28:31,455 Tehát mi azt mutat? 1710 01:28:31,455 --> 01:28:31,850 50.. 1711 01:28:31,850 --> 01:28:32,410 Fogd meg. 1712 01:28:32,410 --> 01:28:33,390 Ez az, amit mi fogunk nyomtatni. 1713 01:28:33,390 --> 01:28:37,020 Mivel a következő egy, vagyunk csak a nyomtatást x is. 1714 01:28:37,020 --> 01:28:38,850 Mi van benne f? 1715 01:28:38,850 --> 01:28:43,710 0x123. 1716 01:28:43,710 --> 01:28:44,500 OK. 1717 01:28:44,500 --> 01:28:46,620 >> És végül, mi van a szabad. 1718 01:28:46,620 --> 01:28:48,040 Mit halad a szabad? 1719 01:28:48,040 --> 01:28:49,470 Most haladunk x. 1720 01:28:49,470 --> 01:28:52,380 Akkoriban tényleg megjelenik verem azt a keretben. 1721 01:28:52,380 --> 01:28:56,370 >> Szóval megy az érték 0x123 szabad. 1722 01:28:56,370 --> 01:28:59,070 Így most ingyen tudja, rendben, El kell menni, hogy a halom 1723 01:28:59,070 --> 01:29:00,050 és szabad, hogy a memória. 1724 01:29:00,050 --> 01:29:03,920 Ez már nem a mi a címe: 0x123. 1725 01:29:03,920 --> 01:29:07,010 >> Így szabad lesz, hogy kiadja hogy a kupac. 1726 01:29:07,010 --> 01:29:09,490 Most a halom ismét üres. 1727 01:29:09,490 --> 01:29:11,120 Jelenleg nincs memóriavesztés. 1728 01:29:11,120 --> 01:29:12,940 Most szabad visszatér. 1729 01:29:12,940 --> 01:29:16,130 Figyeljük meg, hogy x még 0x123. 1730 01:29:16,130 --> 01:29:18,240 De ez most már nem érvényes memória. 1731 01:29:18,240 --> 01:29:21,220 1732 01:29:21,220 --> 01:29:23,986 Mi már nem dereference x. 1733 01:29:23,986 --> 01:29:24,440 Igen? 1734 01:29:24,440 --> 01:29:27,240 >> KÖZÖNSÉG: A return 0 felesleges? 1735 01:29:27,240 --> 01:29:28,290 >> ROB: A returen 0 felesleges? 1736 01:29:28,290 --> 01:29:31,110 Igen. 1737 01:29:31,110 --> 01:29:33,950 Csak tedd, hogy azért, mert van egy visszatérő egy levegő. 1738 01:29:33,950 --> 01:29:36,830 Tehát ez olyan, mint, igen, lehetővé teszi, tartalmazza a return 0. 1739 01:29:36,830 --> 01:29:37,310 Igen? 1740 01:29:37,310 --> 01:29:38,560 >> KÖZÖNSÉG: [nem hallható]? 1741 01:29:38,560 --> 01:29:42,110 1742 01:29:42,110 --> 01:29:45,580 >> ROB: Szóval miután ingyen x, mi történik, ha igyekszünk dereference a mutatót? 1743 01:29:45,580 --> 01:29:47,240 Lehetséges, hogy semmi sem megy rosszul. 1744 01:29:47,240 --> 01:29:49,330 Elképzelhető, hogy akkor még mindig 50. 1745 01:29:49,330 --> 01:29:53,590 >> Ez lehetséges, azt is, hogy, hogy a memória jelenleg használt valami mást. 1746 01:29:53,590 --> 01:29:57,140 Szóval meghatározatlan viselkedés. 1747 01:29:57,140 --> 01:30:00,772 És meghatározatlan jelent valamit megtörténhet. 1748 01:30:00,772 --> 01:30:01,250 Igen? 1749 01:30:01,250 --> 01:30:02,500 >> KÖZÖNSÉG: [nem hallható]? 1750 01:30:02,500 --> 01:30:07,942 1751 01:30:07,942 --> 01:30:10,830 >> ROB: No, szóval ha rendelni x valami másra. 1752 01:30:10,830 --> 01:30:15,870 Tehát, ha itt azt mondta x értéke malloc valami else-- 1753 01:30:15,870 --> 01:30:17,100 malloc méret event-- 1754 01:30:17,100 --> 01:30:20,180 akkor az eredeti blokk A memória nem szabadult. 1755 01:30:20,180 --> 01:30:21,490 És mi már hivatalosan is elvesztette. 1756 01:30:21,490 --> 01:30:23,150 Ez egy memória szivárgás. 1757 01:30:23,150 --> 01:30:25,090 Elvesztettünk összes referencia hogy a blokk a memória. 1758 01:30:25,090 --> 01:30:26,827 Így nincs mód arra, hogy valaha is kiszabadítani. 1759 01:30:26,827 --> 01:30:32,074 1760 01:30:32,074 --> 01:30:36,630 OK, így majd vissza 0 eszközökkel történik. 1761 01:30:36,630 --> 01:30:37,900 >> Rendben, verem túlcsordulás. 1762 01:30:37,900 --> 01:30:39,320 Mi az ötlet? 1763 01:30:39,320 --> 01:30:41,210 Úgy emlékszem, halom megy lefelé. 1764 01:30:41,210 --> 01:30:43,480 Stack megy fel. 1765 01:30:43,480 --> 01:30:48,000 Tehát ez volt a példa előadás, Azt hiszem, ahol fő csak fog 1766 01:30:48,000 --> 01:30:51,380 ezt a funkciót ize, ami megy nevezi magát rekurzív át és 1767 01:30:51,380 --> 01:30:52,320 újra. 1768 01:30:52,320 --> 01:30:55,370 >> Így verem keret fog működik pontosan ugyanaz. 1769 01:30:55,370 --> 01:30:58,130 Így fogunk kezdeni fő verem, mint az alsó keretben. 1770 01:30:58,130 --> 01:31:02,000 Akkor fő fog meghívni az ize, ami fog kapni egy verem keret. 1771 01:31:02,000 --> 01:31:04,260 >> Akkor foo fog meghívni az ize újra, ami fog kapni 1772 01:31:04,260 --> 01:31:05,500 egy verem keret. 1773 01:31:05,500 --> 01:31:08,270 És újra, és újra, és újra, és újra, amíg végül, mi fut 1774 01:31:08,270 --> 01:31:09,190 a kupac. 1775 01:31:09,190 --> 01:31:11,990 Szóval, ez az, hogyan jutunk verem túlcsordulás. 1776 01:31:11,990 --> 01:31:14,910 És ezen a ponton, akkor seg hibája. 1777 01:31:14,910 --> 01:31:17,335 Vagy azt tényleg seg hiba előtt Ezen a ponton azonban igen. 1778 01:31:17,335 --> 01:31:19,660 >> KÖZÖNSÉG: A core dump a ugyanaz, mint a seg hiba? 1779 01:31:19,660 --> 01:31:26,140 >> ROB: Akkor meglátod szegmentáció hiba core dump. 1780 01:31:26,140 --> 01:31:28,760 Kapsz egy core dump amikor Ön Seg hibája. 1781 01:31:28,760 --> 01:31:32,580 És ez olyan, mint a lerakó az összes tartalma a jelenlegi memória olyan 1782 01:31:32,580 --> 01:31:36,670 hogy próbálja meg és azonosítja miért Seg hibázott. 1783 01:31:36,670 --> 01:31:37,135 Igen? 1784 01:31:37,135 --> 01:31:38,385 >> KÖZÖNSÉG: [nem hallható]? 1785 01:31:38,385 --> 01:31:40,855 1786 01:31:40,855 --> 01:31:45,460 >> ROB: Tehát egy szegmentációs hiba eszköz van egy halom túlcsordulás. 1787 01:31:45,460 --> 01:31:47,060 Tehát nem feltétlenül. 1788 01:31:47,060 --> 01:31:49,880 A szegmentációs hiba azt jelenti, hogy te vagy megható memória oly módon, 1789 01:31:49,880 --> 01:31:50,880 nem kellene. 1790 01:31:50,880 --> 01:31:54,750 Tehát az egyik módja, hogy történik ez, amikor verem túlcsordulás, kezdjük megható 1791 01:31:54,750 --> 01:31:58,736 memória oly módon, hogy ne legyen. 1792 01:31:58,736 --> 01:31:59,208 Igen? 1793 01:31:59,208 --> 01:32:00,458 >> KÖZÖNSÉG: [nem hallható]? 1794 01:32:00,458 --> 01:32:03,456 1795 01:32:03,456 --> 01:32:05,830 >> ROB: Tehát belsejében egy végtelen ciklus. 1796 01:32:05,830 --> 01:32:08,770 Mint, ez olyan, mint egy végtelen rekurzív hurok és így még egy 1797 01:32:08,770 --> 01:32:09,770 verem keret minden egyes alkalommal. 1798 01:32:09,770 --> 01:32:13,540 De csak belül a rendszeres végtelen míg az egyet 1799 01:32:13,540 --> 01:32:16,390 Nos, ne is nyomtatni F-- 1800 01:32:16,390 --> 01:32:17,040 tenni valamit. 1801 01:32:17,040 --> 01:32:18,390 Mindegy. 1802 01:32:18,390 --> 01:32:20,610 >> Nem fogunk, hogy egyre egy verem keret. 1803 01:32:20,610 --> 01:32:22,530 Mi csak fog tartani hurok mint ez az egyetlen utasítás. 1804 01:32:22,530 --> 01:32:23,920 A verem nem növekszik. 1805 01:32:23,920 --> 01:32:27,290 Ez a tény, hogy minden rekurzív hívás ad nekünk egy verem keret. 1806 01:32:27,290 --> 01:32:31,231 Ezért van, hogy verem túlcsordulás. 1807 01:32:31,231 --> 01:32:31,728 Igen? 1808 01:32:31,728 --> 01:32:38,189 >> Közönség: Tehát, ha azt mondta, hogy a while ciklus, majd a [nem hallható]? 1809 01:32:38,189 --> 01:32:42,000 >> ROB: Tehát, ha belül a while ciklus volt egy printf, akkor is lenne 1810 01:32:42,000 --> 01:32:42,790 nem seg hibája. 1811 01:32:42,790 --> 01:32:46,090 Csak nem akartam összezavarni a dolgokat. 1812 01:32:46,090 --> 01:32:46,610 Ez lenne hurok. 1813 01:32:46,610 --> 01:32:48,225 Azt, hogy egy halom Keret a printf. 1814 01:32:48,225 --> 01:32:49,580 >> Akkor printf visszatér. 1815 01:32:49,580 --> 01:32:50,280 Akkor lenne hurok újra. 1816 01:32:50,280 --> 01:32:51,460 Azt, hogy egy halom Keret a printf. 1817 01:32:51,460 --> 01:32:52,850 Ez vissza. 1818 01:32:52,850 --> 01:32:54,060 Egyetlen verem keret. 1819 01:32:54,060 --> 01:33:00,215 Szóval nem kap ez a végtelen halmozódása verem kereteket. 1820 01:33:00,215 --> 01:33:03,185 >> KÖZÖNSÉG: [nem hallható]? 1821 01:33:03,185 --> 01:33:04,040 >> ROB: Igen. 1822 01:33:04,040 --> 01:33:09,360 Tehát ez a verem túlcsordulás történik mert ezek közül egyik sem 1823 01:33:09,360 --> 01:33:11,600 hívások foo visszatérnek. 1824 01:33:11,600 --> 01:33:15,250 Tehát, ha visszatérünk, akkor azt indul vesztes verem kereteket. 1825 01:33:15,250 --> 01:33:17,870 És akkor nem verem túlcsordulás. 1826 01:33:17,870 --> 01:33:20,070 És hogy miért van szükség egy alapeset a személyes funkciók. 1827 01:33:20,070 --> 01:33:22,992 1828 01:33:22,992 --> 01:33:23,479 Igen? 1829 01:33:23,479 --> 01:33:27,375 >> Közönség: A potenciális nagysága és a verem a kupac azonos 1830 01:33:27,375 --> 01:33:29,880 minden program? 1831 01:33:29,880 --> 01:33:31,910 >> ROB: Nagyjából. 1832 01:33:31,910 --> 01:33:35,090 A potenciális méretét a verem és A halom azonos minden program? 1833 01:33:35,090 --> 01:33:37,180 Durván. 1834 01:33:37,180 --> 01:33:40,080 Van némi véletlen besorolás ahol a stack kezdődik és 1835 01:33:40,080 --> 01:33:42,400 ahol a kupac kezdődik. 1836 01:33:42,400 --> 01:33:45,870 Ha véletlenül van egy csomó globális változók és a dolgok, lehet, hogy 1837 01:33:45,870 --> 01:33:49,520 elvenni egy kis helyet a kupac. 1838 01:33:49,520 --> 01:33:54,060 >> A 64 bites rendszer, akkor gyakorlatilag végtelen memória. 1839 01:33:54,060 --> 01:33:55,820 Már csak annyi. 1840 01:33:55,820 --> 01:33:59,250 A 32 bites és 64 bites, hogy egy jelentős különbség. 1841 01:33:59,250 --> 01:34:02,350 >> Fogsz kapni egy csomó más verem és a kupac egy 64 bites 1842 01:34:02,350 --> 01:34:05,810 rendszer, mert ott csak több címek tudják használni. 1843 01:34:05,810 --> 01:34:09,360 Hanem egy egyedi rendszer, akkor nagyjából azonos mennyiségű stack 1844 01:34:09,360 --> 01:34:10,785 és a kupac. 1845 01:34:10,785 --> 01:34:13,635 1846 01:34:13,635 --> 01:34:15,530 Rendben. 1847 01:34:15,530 --> 01:34:18,220 >> Tehát az utolsó dolog összeállítása. 1848 01:34:18,220 --> 01:34:19,810 Így tudnia kell ezt a folyamatot. 1849 01:34:19,810 --> 01:34:22,240 Négy nagy lépést. 1850 01:34:22,240 --> 01:34:24,400 Tehát az első egy kell könnyen megjegyezhető. 1851 01:34:24,400 --> 01:34:25,085 Pre-feldolgozás. 1852 01:34:25,085 --> 01:34:28,390 Ez az előtag elő benne. 1853 01:34:28,390 --> 01:34:32,080 Tehát ez előtt minden mást. 1854 01:34:32,080 --> 01:34:34,000 >> A lényeg, hogy emlékezzen a hash. 1855 01:34:34,000 --> 01:34:37,250 Tehát hash meghatározza és hash tartalmazza az összes ilyen. 1856 01:34:37,250 --> 01:34:39,560 Ezek mind pre-processzor irányelveket. 1857 01:34:39,560 --> 01:34:42,030 Ezek azok a dolgok, hogy a pre-processzor gondoskodik. 1858 01:34:42,030 --> 01:34:43,680 >> Szóval, mit csinál egy pre-processzor csinálni? 1859 01:34:43,680 --> 01:34:44,850 Ez egy nagyon buta dolog. 1860 01:34:44,850 --> 01:34:49,380 Minden ez képes mind ezeket másolás és kivágás és beillesztés műveleteket. 1861 01:34:49,380 --> 01:34:51,790 >> Tehát hash tartalmazza szabványos i0 pont h. 1862 01:34:51,790 --> 01:34:52,990 Mi ez csinál? 1863 01:34:52,990 --> 01:34:56,610 Ez megragadta a standard i0 pont h fájlt, és beilleszteni a felső 1864 01:34:56,610 --> 01:34:58,960 bárhol azt mondja hash tartalmazza szabvány i0 pont h. 1865 01:34:58,960 --> 01:35:02,480 >> És minden hash meghatározni, hogy mi már láttam, mit csinál? 1866 01:35:02,480 --> 01:35:06,730 A másolás az értéket, amely a hash definiált definíciója és beillesztés az 1867 01:35:06,730 --> 01:35:08,500 bárhol is használja az értéket. 1868 01:35:08,500 --> 01:35:13,400 Így az előfeldolgozó csak nem igazán egyszerű szöveges alapú műveleteket. 1869 01:35:13,400 --> 01:35:15,870 Ez egyáltalán nem okos. 1870 01:35:15,870 --> 01:35:18,920 Tehát minden más bonyolultabb. 1871 01:35:18,920 --> 01:35:22,970 >> Most, hogy előfeldolgozó Kész, valójában össze. 1872 01:35:22,970 --> 01:35:24,320 Tehát mit összeállítása jelent? 1873 01:35:24,320 --> 01:35:27,310 Mostantól majd a C kód az assembly kódot. 1874 01:35:27,310 --> 01:35:27,570 Igen? 1875 01:35:27,570 --> 01:35:28,820 >> KÖZÖNSÉG: [nem hallható]? 1876 01:35:28,820 --> 01:35:32,390 1877 01:35:32,390 --> 01:35:34,220 >> ROB: Igen, elkaptuk ezt. 1878 01:35:34,220 --> 01:35:36,880 1879 01:35:36,880 --> 01:35:38,660 Így összeállítása. 1880 01:35:38,660 --> 01:35:40,310 Elmegyünk a C és összeszerelés. 1881 01:35:40,310 --> 01:35:42,470 Szóval ez egy igazi nyelvi változás. 1882 01:35:42,470 --> 01:35:45,240 Összeállítása önmagában azt jelenti, megy a magasabb szintű nyelv 1883 01:35:45,240 --> 01:35:47,340 alacsonyabb szintű nyelven. 1884 01:35:47,340 --> 01:35:50,720 >> És c egy magas szintű nyelv mint a szerelvény. 1885 01:35:50,720 --> 01:35:52,320 Mi az összeszerelés? 1886 01:35:52,320 --> 01:35:56,440 Az utasítások, amelyek, nagyon sokat tett a CPU-t. 1887 01:35:56,440 --> 01:35:59,130 De a számítógép még mindig nem Nem értem összeszerelés. 1888 01:35:59,130 --> 01:36:01,570 Csak megérti egyesek és nullák. 1889 01:36:01,570 --> 01:36:06,160 Így a következő lépés a szerelés, ami hoz minket ezeket az utasításokat, hogy 1890 01:36:06,160 --> 01:36:08,760 a CPU megérti, és valóban fordítja őket, hogy 1891 01:36:08,760 --> 01:36:10,820 az egyesek és nullák. 1892 01:36:10,820 --> 01:36:13,570 >> Így C egységet bináris. 1893 01:36:13,570 --> 01:36:15,870 De nincs végrehajtható még. 1894 01:36:15,870 --> 01:36:19,550 Így gondolom, a CS50 könyvtár. 1895 01:36:19,550 --> 01:36:23,070 Mi van ha egy bináris ez CS50 könyvtár, amely getString 1896 01:36:23,070 --> 01:36:24,400 és GetInt és minden. 1897 01:36:24,400 --> 01:36:25,700 >> De a CS50 library-- 1898 01:36:25,700 --> 01:36:27,650 és a itself-- nem futtatható. 1899 01:36:27,650 --> 01:36:29,570 Ez nem egy fő funkciója van. 1900 01:36:29,570 --> 01:36:32,230 Ez csak egy csomó bináris hogy tudod használni. 1901 01:36:32,230 --> 01:36:41,730 Tehát összekapcsolása hogyan hozzuk össze minden Ezeknek a különböző bináris fájlokat 1902 01:36:41,730 --> 01:36:43,110 egy tényleges futtatható. 1903 01:36:43,110 --> 01:36:45,900 Az egyik, hogy akkor írja pont perjel a pont ki. 1904 01:36:45,900 --> 01:36:51,660 >> Tehát ez olyan, mint a fájl írta, - függetlenül a programot fektettünk-- 1905 01:36:51,660 --> 01:36:53,620 Ceaser pont c. 1906 01:36:53,620 --> 01:36:55,100 De most, hogy már össze le a bináris. 1907 01:36:55,100 --> 01:36:56,480 Tehát Ceaser dot o. 1908 01:36:56,480 --> 01:36:59,620 És ez a mi CS50 könyvtárt bináris. 1909 01:36:59,620 --> 01:37:02,284 És ők is együttes egyetlen futtatható. 1910 01:37:02,284 --> 01:37:02,758 Igen? 1911 01:37:02,758 --> 01:37:04,008 >> KÖZÖNSÉG: [nem hallható]? 1912 01:37:04,008 --> 01:37:08,800 1913 01:37:08,800 --> 01:37:12,710 >> ROB: Tehát először közé, ne feledd, A hash tartalmaz valójában egy 1914 01:37:12,710 --> 01:37:13,810 pre-processzor lépésben. 1915 01:37:13,810 --> 01:37:14,750 De ez külön. 1916 01:37:14,750 --> 01:37:20,730 Ha nem használ funkciók kívül a egy fájl, akkor, 1917 01:37:20,730 --> 01:37:26,100 Nem, nem kell összekapcsolni semmit mivel mindent. 1918 01:37:26,100 --> 01:37:30,310 >> Igaz, printf kerül kapcsolódik. 1919 01:37:30,310 --> 01:37:32,820 Ha valaha is használni a printf, hogy valami hogy kell kapcsolni a 1920 01:37:32,820 --> 01:37:35,740 mert nem írtam. 1921 01:37:35,740 --> 01:37:39,530 És valójában printf automatikusan kapcsolódik. 1922 01:37:39,530 --> 01:37:42,760 Tudod, hogy a parancssorban, vagy ha beírt, hogy, látod, hogy 1923 01:37:42,760 --> 01:37:46,690 kötőjel l CS50, amely kapcsolat A CS50 könyvtárban? 1924 01:37:46,690 --> 01:37:49,070 Printf, meg ilyesmi, megy össze kell kapcsolni az automatikus. 1925 01:37:49,070 --> 01:37:51,730 1926 01:37:51,730 --> 01:37:53,930 Bármilyen egyéb kérdése van valami? 1927 01:37:53,930 --> 01:37:56,280 >> KÖZÖNSÉG: [nem hallható]? 1928 01:37:56,280 --> 01:37:58,300 >> ROB: összekapcsolása? 1929 01:37:58,300 --> 01:38:03,450 Van egy csomó különböző bináris fájlokat. 1930 01:38:03,450 --> 01:38:06,410 Ez a legjobb példa , amit mi használunk CS50 könyvtár. 1931 01:38:06,410 --> 01:38:09,960 Már össze és adja be Önnek a bináris ehhez CS50 könyvtár. 1932 01:38:09,960 --> 01:38:12,410 >> Használni kívánt getString a programban. 1933 01:38:12,410 --> 01:38:14,750 Szóval megy, és használja getString. 1934 01:38:14,750 --> 01:38:19,700 De anélkül, hogy a bináris kód GetString, amikor fordítod a kód 1935 01:38:19,700 --> 01:38:23,140 le, akkor valójában nem fut le programot, mert getString karakterlánc 1936 01:38:23,140 --> 01:38:25,080 még nem teljesen meghatározott. 1937 01:38:25,080 --> 01:38:29,220 >> Ez csak akkor, ha link az én bináris tartalmazó getString, hogy most, minden 1938 01:38:29,220 --> 01:38:31,130 jobb, tudok valójában végre getString. 1939 01:38:31,130 --> 01:38:32,330 Az állomány teljes. 1940 01:38:32,330 --> 01:38:34,208 És tudom futtatni ezt. 1941 01:38:34,208 --> 01:38:34,697 Igen? 1942 01:38:34,697 --> 01:38:37,631 >> Közönség: e linkelését convert A bináris végrehajtható? 1943 01:38:37,631 --> 01:38:42,032 Tehát akkor is, ha nincs más könyvtárak, nem lenne még mindig 1944 01:38:42,032 --> 01:38:44,477 le kell fordítani a [nem hallható]? 1945 01:38:44,477 --> 01:38:48,640 >> ROB: Tehát egy futtatható még bináris. 1946 01:38:48,640 --> 01:38:51,750 Ez csak ötvözi a teljes csomó bináris. 1947 01:38:51,750 --> 01:38:55,124 1948 01:38:55,124 --> 01:38:56,591 >> Közönség: Köszönöm szépen. 1949 01:38:56,591 --> 01:38:58,560 >> ROB: Nem gond. 1950 01:38:58,560 --> 01:38:59,540 Egyéb kérdés? 1951 01:38:59,540 --> 01:39:02,001 Máskülönben mi készen is van. 1952 01:39:02,001 --> 01:39:02,690 Rendben. 1953 01:39:02,690 --> 01:39:02,990 Köszönöm. 1954 01:39:02,990 --> 01:39:03,590 >> [Taps] 1955 01:39:03,590 --> 01:39:04,490 >> Közönség: Köszönöm. 1956 01:39:04,490 --> 01:39:05,740 >> ROB: Igen. 1957 01:39:05,740 --> 01:39:06,582