1 00:00:00,000 --> 00:00:02,742 2 00:00:02,742 --> 00:00:05,680 >> SPEAKER 1: Tere kõigile. 3 00:00:05,680 --> 00:00:07,530 Me alustada. 4 00:00:07,530 --> 00:00:09,330 Ma arvan, et inimesed on ikka veel olema filtreerimise. 5 00:00:09,330 --> 00:00:12,840 Kuid aja huvides, et saaksime saada teid siit välja õigel ajal, 6 00:00:12,840 --> 00:00:14,110 me ei kavatse hakata. 7 00:00:14,110 --> 00:00:18,780 Nii et tere tulemast CS50 Quiz 0 ülevaade. 8 00:00:18,780 --> 00:00:23,020 Neile, kes pole veel aru saanud veel, teil on küsimus kolmapäeval. 9 00:00:23,020 --> 00:00:25,700 Hoo. 10 00:00:25,700 --> 00:00:29,780 >> Kui te ei ole alustatud õpib veel või ei märganud, et see eksisteerib veel, 11 00:00:29,780 --> 00:00:34,070 Viimase viktoriinid ja kogu teave Sinu viktoriin olete cs50.net/quizzes. 12 00:00:34,070 --> 00:00:38,090 Seal on mõned päris head kraami seal, Viimase viktoriine alates viimase 10 13 00:00:38,090 --> 00:00:43,760 aastat, samuti teavet selle viktoriini ja teemad 14 00:00:43,760 --> 00:00:46,250 mis kaetakse. 15 00:00:46,250 --> 00:00:48,980 Niisiis alustame. 16 00:00:48,980 --> 00:00:54,240 >> Nii et te võiks meeles pidada, esimene päeval klassi David oli neid lampe. 17 00:00:54,240 --> 00:00:59,650 Nii et sisuliselt kõik, mis läheb kapoti alla arvuti on 18 00:00:59,650 --> 00:01:00,860 teha binaarne. 19 00:01:00,860 --> 00:01:04,080 Binary tähendab, mida see kõlab nagu 0-ja 1-d. 20 00:01:04,080 --> 00:01:09,290 Sellel on kaks väärtust, mis võib olla esindatud. 21 00:01:09,290 --> 00:01:14,675 >> Nii nagu ka esimesel päeval jagu kui David sisselülitamist valgust 22 00:01:14,675 --> 00:01:21,990 pirn esindama kohta, või 1, meie arvuti mõistab binaarne nagu 0-ja 23 00:01:21,990 --> 00:01:24,110 1 aasta, sisse või välja lülitada. 24 00:01:24,110 --> 00:01:25,360 Põhitõed Binary. 25 00:01:25,360 --> 00:01:29,440 26 00:01:29,440 --> 00:01:32,470 Iga koht on esindatud aastal aluse kaks. 27 00:01:32,470 --> 00:01:36,260 Nii et teil lisada 2 kuni 0 1 kuni 2 kogu tee üles. 28 00:01:36,260 --> 00:01:41,970 >> Selleks et arvutada, mida teie binaarne on kohaga, siis järgige seda võrrandit 29 00:01:41,970 --> 00:01:42,840 tüüpi asi. 30 00:01:42,840 --> 00:01:49,510 Kui sul on 1 üheski neist kohtadest, sa korrutada see iganes 31 00:01:49,510 --> 00:01:53,820 rajada see on, lisage see üles, ja saad koma. 32 00:01:53,820 --> 00:01:57,930 Nii see on, kuidas sa loota 5 kahendsüsteemis. 33 00:01:57,930 --> 00:02:01,400 Just nagu see, mida me teeme on viimase slaidi see on, kuidas sa 34 00:02:01,400 --> 00:02:02,650 kujutavad 1 kuni 5. 35 00:02:02,650 --> 00:02:05,320 36 00:02:05,320 --> 00:02:09,660 >> Samamoodi, nagu ka saab lisada ja lahutama kümnendsüsteemis või aluse 10, või 37 00:02:09,660 --> 00:02:13,040 tõesti mingit alust on võimalik lisada ja lahutada kahendsüsteemis. 38 00:02:13,040 --> 00:02:18,400 Täpselt, mida te ootate, kui te lisada kaks üles, kui see võrdub suurem 39 00:02:18,400 --> 00:02:24,220 kui 1, kannad 1, et see 0, ja seda veel, et viis, vaid 40 00:02:24,220 --> 00:02:29,910 nagu te ootate regulaarselt koma või muu alus. 41 00:02:29,910 --> 00:02:30,970 Lahe. 42 00:02:30,970 --> 00:02:35,140 >> Nii nagu ma enne ütlesin, kõik, mis läheb kapoti alla meie arvuti 43 00:02:35,140 --> 00:02:37,560 tehakse 0-ja 1-või binaarne. 44 00:02:37,560 --> 00:02:43,470 Niisiis, kuidas me väljendame, näiteks tähtede või numbritega või tähtedega? 45 00:02:43,470 --> 00:02:45,560 Ja vastus sellele on ASCII. 46 00:02:45,560 --> 00:02:49,380 >> ASCII on kaardistamise vahel tähemärki et me tavaliselt näha 47 00:02:49,380 --> 00:02:53,360 Inglise keeles nagu on, B, C on, rõhutada, kriipsud ja 48 00:02:53,360 --> 00:02:54,910 midagi sellist. 49 00:02:54,910 --> 00:02:57,260 Ja see kaardistab et ASCII väärtus. 50 00:02:57,260 --> 00:03:03,080 ASCII väärtus on lihtsalt number, et saab aru arvuti. 51 00:03:03,080 --> 00:03:07,430 Ja just nagu saate teha lisaks ja lahutamist numbritega, mida saate teha, 52 00:03:07,430 --> 00:03:10,890 neid ASCII väärtused. 53 00:03:10,890 --> 00:03:14,050 >> Nii selles näites, mida on see välja printida? 54 00:03:14,050 --> 00:03:26,790 55 00:03:26,790 --> 00:03:35,480 Jah, nii lihtsalt ruumi B ruum C ruumi D. Kuhu mu hiir minna? 56 00:03:35,480 --> 00:03:39,200 57 00:03:39,200 --> 00:03:43,380 Pange tähele, saate määratleda int 65. 58 00:03:43,380 --> 00:03:47,080 Ja kui teil on vaja printida, et viia protsenti C, see saab tõlgendada, et kui 59 00:03:47,080 --> 00:03:49,330 iseloomu ja trükib välja A. 60 00:03:49,330 --> 00:03:52,800 >> Samamoodi saab deklareerida seda paalia. 61 00:03:52,800 --> 00:03:56,860 Ja kui sa seda välja printida, kasutades protsenti C, siis see tõlgendama, et kui 62 00:03:56,860 --> 00:04:05,240 protsenti D. Ja just nagu saate lisada number, võite lisada tegelased on 63 00:04:05,240 --> 00:04:06,878 ASCII väärtused, käesoleval juhul. 64 00:04:06,878 --> 00:04:11,370 65 00:04:11,370 --> 00:04:16,130 >> Nii et natuke pointer kõigile. 66 00:04:16,130 --> 00:04:19,610 5, kui string, ei tegelikult võrdne 5. 67 00:04:19,610 --> 00:04:26,610 Niisiis, kuidas võiks me muuta string 5 täisarv 5? 68 00:04:26,610 --> 00:04:28,930 Mingeid ideid? 69 00:04:28,930 --> 00:04:31,630 Jah. 70 00:04:31,630 --> 00:04:36,720 >> Nii et kui meil on 5 string, me saame lahutada 0. 71 00:04:36,720 --> 00:04:37,820 Ja see annab meile 5. 72 00:04:37,820 --> 00:04:41,670 Ja samamoodi, kui meil on 5 kui täisarv, lisada, et string 0. 73 00:04:41,670 --> 00:04:43,112 Ja see annab meile string 5. 74 00:04:43,112 --> 00:04:46,350 75 00:04:46,350 --> 00:04:48,350 Lahe. 76 00:04:48,350 --> 00:04:52,940 >> Nüüd meenutavad tagasi loengu, kus me rääkisime algoritme. 77 00:04:52,940 --> 00:04:57,260 Niisiis, kuidas me tegelikult tahame arvuti teha huvitavaid asju? 78 00:04:57,260 --> 00:05:00,460 Tead, lihtsalt lisades ja lahutatakse numbrid ja trükkimine asjad ei ole 79 00:05:00,460 --> 00:05:01,730 et põnev. 80 00:05:01,730 --> 00:05:04,620 Tavaliselt me ​​tahame, et meie arvuti täidab mingi algoritmi. 81 00:05:04,620 --> 00:05:07,820 Midagi veidi keerulisem kui lihtsalt lihtne aritmeetika. 82 00:05:07,820 --> 00:05:11,930 >> Algoritm on lihtsalt samm-sammult komplekt ning juhised, kuidas sooritada 83 00:05:11,930 --> 00:05:14,640 teatud task-- 84 00:05:14,640 --> 00:05:15,660 Just nagu retsept. 85 00:05:15,660 --> 00:05:19,990 Sa võid mäletan esimesel päeval klassis, kus David oli meil loota tuba 86 00:05:19,990 --> 00:05:22,550 inimesi ja kui palju inimesi toas olid. 87 00:05:22,550 --> 00:05:24,480 Sa võid kasutada loendamist ükshaaval. 88 00:05:24,480 --> 00:05:25,860 1, 2, 3, 4. 89 00:05:25,860 --> 00:05:28,010 Sellisel juhul lineaarne algoritm. 90 00:05:28,010 --> 00:05:31,710 >> Kuid David tutvustas algoritm sul loendada inimesed ruumis 91 00:05:31,710 --> 00:05:37,340 kus igaüks seisab, ütlete teie numbrit teisele isikule, lisada, et 92 00:05:37,340 --> 00:05:39,200 number üles ja üks inimene istub. 93 00:05:39,200 --> 00:05:40,410 Ja sa kordama. 94 00:05:40,410 --> 00:05:42,910 See on üks tüüp algoritm. 95 00:05:42,910 --> 00:05:47,520 Me saame analüüsida, kui tõhus algoritm põhineb see tekib aja jooksul. 96 00:05:47,520 --> 00:05:49,680 Aga räägime natuke rohkem sellest hiljem. 97 00:05:49,680 --> 00:05:52,740 98 00:05:52,740 --> 00:05:57,090 >> Nii et kõik algoritmid saab ka kirjutatakse pseudokoodi. 99 00:05:57,090 --> 00:06:01,120 Pseudocode on just inglise keelt nagu süntaks kasutada esindama 100 00:06:01,120 --> 00:06:02,420 programmeerimiskeelt. 101 00:06:02,420 --> 00:06:06,070 Näiteks, kui me tahtsime küsida kasutaja vist mu lemmik number, et me 102 00:06:06,070 --> 00:06:08,390 Võib-olla pseudokoodi sellisena. 103 00:06:08,390 --> 00:06:09,850 >> Saa kasutaja arvan. 104 00:06:09,850 --> 00:06:13,570 Kui oletus on õige, siis ütle neile nad on õiged, muidu ütlen neile 105 00:06:13,570 --> 00:06:15,560 nad ei ole õiged. 106 00:06:15,560 --> 00:06:22,530 Ja pseudokoodi on viis kergesti esindavad idee või algoritm. 107 00:06:22,530 --> 00:06:26,910 Nüüd tahetakse tegelikult kirjutada seda keelt, et arvuti 108 00:06:26,910 --> 00:06:27,980 võiks mõistmist. 109 00:06:27,980 --> 00:06:35,660 Nii et me võiks kirjutada meie pseudokoodi ja tõlgendada seda arvesse lähtekoodi. 110 00:06:35,660 --> 00:06:41,320 >> Seni lähtekoodi peab järgima Lisa teatud süntaks 111 00:06:41,320 --> 00:06:42,490 programmeerimiskeelt. 112 00:06:42,490 --> 00:06:45,430 Ja siiani on CS50, me kasutan enamasti c. 113 00:06:45,430 --> 00:06:48,320 Nii et see võib olla lähtekoodi c. 114 00:06:48,320 --> 00:06:51,440 Hiljem muidugi sa öösel tuled kontaktis teiste programmide 115 00:06:51,440 --> 00:06:52,480 keeltes nagu PHP. 116 00:06:52,480 --> 00:06:57,540 Või kui sa isegi võtta teistesse klassidesse, siis võiks teha Java, Python või isegi OCML. 117 00:06:57,540 --> 00:07:01,570 Kuid meie C programmi keelt, on see kuidas me võiksime kirjutada lähtekoodi 118 00:07:01,570 --> 00:07:04,760 pseudokoodi algoritm, mis Ma lihtsalt varem kirjeldatud. 119 00:07:04,760 --> 00:07:08,630 120 00:07:08,630 --> 00:07:11,430 >> Niisiis, kuidas arvuti tegelikult sellest aru? 121 00:07:11,430 --> 00:07:14,490 Nagu ma enne ütlesin, see vaid tõesti mõistab nulli ja ones. 122 00:07:14,490 --> 00:07:17,880 Niisiis, kuidas see saada allikas koodi midagi, mis võib olla 123 00:07:17,880 --> 00:07:18,960 arusaadav? 124 00:07:18,960 --> 00:07:22,920 Noh, meil on midagi nimega kompilaator. 125 00:07:22,920 --> 00:07:28,450 >> Kui te mäletate tagasi enamiku oma psets, siis tuli mingi programm 126 00:07:28,450 --> 00:07:30,370 kirjutatud dot c fail. 127 00:07:30,370 --> 00:07:32,550 Ja siis oleks tüüp mark. 128 00:07:32,550 --> 00:07:35,970 Nii et mida teha teed? 129 00:07:35,970 --> 00:07:39,970 >> Sa võid kirjutada make kompileerida programmi, sest kellestki-- 130 00:07:39,970 --> 00:07:42,730 kes kirjutas oma p kogum; ilmselt David-- 131 00:07:42,730 --> 00:07:44,190 loodud make faili. 132 00:07:44,190 --> 00:07:51,320 Ja see ütleb teeb teadma, et käivitada oma koostaja, nimetatakse rõkkama, et tahe 133 00:07:51,320 --> 00:07:55,560 siis kompileerida lähtekoodi vastuväiteid kood, mis on nulli ja need 134 00:07:55,560 --> 00:07:57,720 et arvuti aru saab. 135 00:07:57,720 --> 00:08:01,610 Aga veidi hiljem, me läheme põhjalikumalt umbes koostajad. 136 00:08:01,610 --> 00:08:05,640 137 00:08:05,640 --> 00:08:10,800 >> Nii meenutavad pset 0, where-- jah, teil on küsimus? 138 00:08:10,800 --> 00:08:11,620 >> Sihtrühm: [kuuldamatu]? 139 00:08:11,620 --> 00:08:12,490 >> SPEAKER 1: Jah. 140 00:08:12,490 --> 00:08:14,960 Ma arvan, et nad tegelikult peaks olema internetis. 141 00:08:14,960 --> 00:08:15,120 Jah. 142 00:08:15,120 --> 00:08:16,572 >> Sihtrühm: Kas see on nagu [kuuldamatu]? 143 00:08:16,572 --> 00:08:19,476 144 00:08:19,476 --> 00:08:20,830 >> SPEAKER 1: See ei ole. 145 00:08:20,830 --> 00:08:25,810 Olete cs50.net/quizzes. 146 00:08:25,810 --> 00:08:32,900 >> Sihtrühm: Slash viktoriinid, kärpida 2013 kaldkriips 0 ja klõpsa kaudu 147 00:08:32,900 --> 00:08:35,956 viktoriinid 2013 ja viktoriin 0, vaadata jagu slaidid. 148 00:08:35,956 --> 00:08:40,380 >> SPEAKER 1: Jah, kui te soovite tõmmake see üles ja vaata seda oma 149 00:08:40,380 --> 00:08:42,740 oma arvuti, see on hea ka. 150 00:08:42,740 --> 00:08:43,130 Ütle, et jälle. 151 00:08:43,130 --> 00:08:44,546 >> Sihtrühm: [kuuldamatu]. 152 00:08:44,546 --> 00:08:48,780 >> SPEAKER 1: Jah, [kuuldamatu] on fiktiivne muutuja. 153 00:08:48,780 --> 00:08:49,644 Oh, jah? 154 00:08:49,644 --> 00:08:51,372 >> Sihtrühm: [kuuldamatu]? 155 00:08:51,372 --> 00:08:54,300 >> SPEAKER 1: Ei, streigid ei ole eksami. 156 00:08:54,300 --> 00:08:55,950 Kahjuks tema küsimus oli, oli lööb eksami. 157 00:08:55,950 --> 00:08:59,530 Ja see ei ole. 158 00:08:59,530 --> 00:09:05,780 Nii pset 0, kutid peaks olema kõik rakendada midagi kasutades nullist. 159 00:09:05,780 --> 00:09:13,100 Ja me õppisime mõned põhilised programmeerimine ehituskivid kasutades nullist. 160 00:09:13,100 --> 00:09:15,590 >> Võtame pilk mõned Nende ehitusplokkide 161 00:09:15,590 --> 00:09:18,170 mis moodustavad programmi. 162 00:09:18,170 --> 00:09:20,570 Esiteks on Boolean väljend. 163 00:09:20,570 --> 00:09:24,540 Loogiline väljendeid on need ja 0-või midagi, mis on 164 00:09:24,540 --> 00:09:25,700 kaks võimalikku väärtust. 165 00:09:25,700 --> 00:09:30,320 Sellisel juhul on õige või vale, sisse või välja lülitada, ja jah või ei. 166 00:09:30,320 --> 00:09:35,390 Näide lihtne, väga lihtne, programmi, mis kasutab Boolean 167 00:09:35,390 --> 00:09:39,140 väljendus siin. 168 00:09:39,140 --> 00:09:43,220 >> Nii et Boole'i ​​avaldised kasulik olla, meil on Boole'i ​​operaatorid. 169 00:09:43,220 --> 00:09:48,920 Need on operaatorid, mida saab kasutada võrrelda teatud väärtusi. 170 00:09:48,920 --> 00:09:52,820 Nii et meil on ja ega ole võrdne, väiksem kui või võrdne või suurem 171 00:09:52,820 --> 00:09:55,130 võrdne ja väiksem kui või suurem. 172 00:09:55,130 --> 00:09:59,060 Aga need ettevõtjad ei ole väga kasulik kui me ei saa ühendada need 173 00:09:59,060 --> 00:10:00,320 tingimustel. 174 00:10:00,320 --> 00:10:04,370 >> Nii et te võiks meeles pidada nullist ja oma p seab, et me 175 00:10:04,370 --> 00:10:05,400 pidi tingimustel. 176 00:10:05,400 --> 00:10:09,710 Need on sisuliselt nagu kahvlid loogika oma programm, mis 177 00:10:09,710 --> 00:10:12,670 täidab vastavalt sellele, kas tingimus on täidetud. 178 00:10:12,670 --> 00:10:18,150 Nii et üks tingimus, et meil oli kasutatakse palju kordi on see muidugi on 179 00:10:18,150 --> 00:10:21,470 kui muud, kui, ja muud tingimused. 180 00:10:21,470 --> 00:10:24,060 >> Siin on näide sellest, kuidas võite seda kasutada. 181 00:10:24,060 --> 00:10:28,430 Kas keegi teab, vahest lihtsalt kasutab kui avaldused kõik 182 00:10:28,430 --> 00:10:32,530 tee alla salme, kui mujal, kui ja teine ​​ühendada? 183 00:10:32,530 --> 00:10:33,013 Jah? 184 00:10:33,013 --> 00:10:34,263 >> Sihtrühm: [kuuldamatu]. 185 00:10:34,263 --> 00:10:40,741 186 00:10:40,741 --> 00:10:42,160 >> SPEAKER 1: Täpselt. 187 00:10:42,160 --> 00:10:50,210 Nii et kui mul oleks, kui kogu tee alla selle Muide, isegi siis, kui see tingimus tagasi 188 00:10:50,210 --> 00:10:52,800 Tõsi, see on jätkuvalt testides kahe järgmise. 189 00:10:52,800 --> 00:11:00,120 Ning arvestades, teine-kui muidu avaldus, kui üks tagastab true, 190 00:11:00,120 --> 00:11:02,640 teised ei ole kontrollitud. 191 00:11:02,640 --> 00:11:05,955 Kõik küsimused selle kohta? 192 00:11:05,955 --> 00:11:06,890 Lahe. 193 00:11:06,890 --> 00:11:12,240 >> Nii et te kasutate, kui-teine ​​ja teine avaldus, kui sa tead, et ta saab ainult 194 00:11:12,240 --> 00:11:14,470 üks neist juhtudest. 195 00:11:14,470 --> 00:11:21,550 Nii et me teame, kui x on väiksem kui 0, siis on Kindlasti ei kavatse olla 196 00:11:21,550 --> 00:11:22,890 suurem kui 0. 197 00:11:22,890 --> 00:11:26,940 198 00:11:26,940 --> 00:11:31,480 >> Järgmine, teine ​​ehituskivi et me oleme õppinud on silmused. 199 00:11:31,480 --> 00:11:33,310 Meil on kolme tüüpi silmuseid. 200 00:11:33,310 --> 00:11:35,830 Sest silmad, samas silmuseid, ja teha samas silmuseid. 201 00:11:35,830 --> 00:11:38,730 Ja üldiselt, kui sa istuda kirjutada midagi, sa pead otsustama 202 00:11:38,730 --> 00:11:40,060 milline kolmest soovite kasutada. 203 00:11:40,060 --> 00:11:41,900 Niisiis, kuidas me otsustada, milline neist? 204 00:11:41,900 --> 00:11:44,920 205 00:11:44,920 --> 00:11:48,790 >> Me üldiselt kasutada loop kui me teame, Mitu korda me tahame kinnitada, 206 00:11:48,790 --> 00:11:53,650 läbi midagi või mitu korda tahame täita ülesanne. 207 00:11:53,650 --> 00:11:58,830 Me kasutame samas silmuseid, kui me vajame tingimusel, et olla tõsi, et hoida töötab. 208 00:11:58,830 --> 00:12:03,730 Ja me kasutame seda, kui väga sarnane aega, kuid me tahame, et meie koodi käivitumise ajal 209 00:12:03,730 --> 00:12:04,880 vähemalt üks kord. 210 00:12:04,880 --> 00:12:09,410 >> Nii et samal ajal, kõik, mis on ta teeb käivitatakse alati vähemalt üks kord. 211 00:12:09,410 --> 00:12:13,120 Pidades samal ajal, see ei pruugi üldse töötada, kui 212 00:12:13,120 --> 00:12:15,490 tingimus ei ole täidetud. 213 00:12:15,490 --> 00:12:16,740 Küsimusi on? 214 00:12:16,740 --> 00:12:20,480 215 00:12:20,480 --> 00:12:22,860 >> Nii struktuuri jaoks silmus. 216 00:12:22,860 --> 00:12:23,620 Te olete kõik näinud seda. 217 00:12:23,620 --> 00:12:25,320 Sa initsialiseerida ta. 218 00:12:25,320 --> 00:12:26,600 Sul on mingi haigus. 219 00:12:26,600 --> 00:12:32,340 Nii näiteks võime initsialiseerida kui i on 0. 220 00:12:32,340 --> 00:12:34,040 i on väiksem kui 10. 221 00:12:34,040 --> 00:12:35,442 Ja i ++. 222 00:12:35,442 --> 00:12:39,010 Väga lihtne, et me oleme teinud. 223 00:12:39,010 --> 00:12:42,210 >> Sest kuigi loop, samamoodi, pead et on mingi initsialiseerimise 224 00:12:42,210 --> 00:12:44,980 mingi tingimus, ja mingi uuendus. 225 00:12:44,980 --> 00:12:51,990 Nii saame rakendada meie jaoks silmus ka kui samas silmus, kasutades seda. 226 00:12:51,990 --> 00:12:56,000 Ja sarnaselt do samas silmus, Me võib-olla mõned initsialiseerimise 227 00:12:56,000 --> 00:12:58,640 täita midagi, ajakohastab seda ning siis kontrollige seisukorras. 228 00:12:58,640 --> 00:13:03,500 229 00:13:03,500 --> 00:13:05,140 >> Nüüd funktsioone. 230 00:13:05,140 --> 00:13:06,460 Panime kõik koos. 231 00:13:06,460 --> 00:13:10,140 Me võiksite kirjutada mõned sellist funktsiooni. 232 00:13:10,140 --> 00:13:12,790 Ühine funktsioon, mida võiks olen näinud juba on peamine. 233 00:13:12,790 --> 00:13:13,770 Peamised on funktsioon. 234 00:13:13,770 --> 00:13:16,160 See on naasmise tüüp int. 235 00:13:16,160 --> 00:13:18,470 See on funktsiooni nimi, peamised. 236 00:13:18,470 --> 00:13:20,810 Ja see on veel argumente, argc ja argv. 237 00:13:20,810 --> 00:13:24,040 Nii peamine on vaid funktsiooni. 238 00:13:24,040 --> 00:13:27,230 >> Muud funktsioonid, mida oleks võinud kasutada, printf-- printf on funktsioon-- 239 00:13:27,230 --> 00:13:29,330 GetInt, toupper. 240 00:13:29,330 --> 00:13:32,010 Aga need juhtumisi olnud rakendatakse meile 241 00:13:32,010 --> 00:13:33,270 mingi raamatukogu. 242 00:13:33,270 --> 00:13:37,400 Kui te meeles pidama, sh Selle CS50.h raamatukogu või 243 00:13:37,400 --> 00:13:38,510 standard I / O raamatukogu. 244 00:13:38,510 --> 00:13:39,200 Jah, küsimus? 245 00:13:39,200 --> 00:13:41,610 >> Sihtrühm: Kas peamine lihtsalt omane c? 246 00:13:41,610 --> 00:13:44,740 Kas see lihtsalt selline [kuuldamatu]? 247 00:13:44,740 --> 00:13:47,370 >> SPEAKER 1: küsimus on kui peamine on omane c. 248 00:13:47,370 --> 00:13:51,460 Ning jah, kõik funktsioonid on peamine ülesanne. 249 00:13:51,460 --> 00:13:55,290 See on selline, mis on vajalikud arvuti teada, kust alustada 250 00:13:55,290 --> 00:13:55,993 töötab koodi. 251 00:13:55,993 --> 00:13:58,108 >> Sihtrühm: Nii et te ei saa [kuuldamatu]? 252 00:13:58,108 --> 00:13:59,480 >> SPEAKER 1: Ei 253 00:13:59,480 --> 00:14:00,760 On veel küsimusi? 254 00:14:00,760 --> 00:14:03,430 255 00:14:03,430 --> 00:14:04,770 Lahe. 256 00:14:04,770 --> 00:14:08,050 Nii nagu võite kasutada funktsiooni , mis on kirjutatud, saate ka 257 00:14:08,050 --> 00:14:10,380 kirjutada oma funktsiooni. 258 00:14:10,380 --> 00:14:17,050 See on funktsioon, mis keegi võiks kirjutanud arvutada mahu 259 00:14:17,050 --> 00:14:18,395 ning q, näiteks. 260 00:14:18,395 --> 00:14:21,300 261 00:14:21,300 --> 00:14:29,500 Seal tagastamise tüüp siin, sel juhul int, meie funktsiooni nimi q ja meie 262 00:14:29,500 --> 00:14:31,360 parameetrite loetelu. 263 00:14:31,360 --> 00:14:34,550 >> Ja pange tähele, et teil on kirjutada andmeid tüüpi parameeter soovid 264 00:14:34,550 --> 00:14:38,660 kasutada või siis funktsioon ei teada, millist 265 00:14:38,660 --> 00:14:41,650 parameeter ma peaksin aktsepteerides. 266 00:14:41,650 --> 00:14:48,110 Niisiis, käesoleval juhul me tahame täisarv kui meie panus. 267 00:14:48,110 --> 00:14:50,390 Miks võib tahame kasutada funktsioone? 268 00:14:50,390 --> 00:14:52,800 >> Esiteks, suur organisatsioon. 269 00:14:52,800 --> 00:14:56,350 Nad aitavad lõhkuda oma koodi rohkem organiseeritud tükkideks ja muuta 270 00:14:56,350 --> 00:14:57,960 oleks lihtsam lugeda. 271 00:14:57,960 --> 00:14:59,760 Lihtsustamine. 272 00:14:59,760 --> 00:15:01,740 See on hea disain. 273 00:15:01,740 --> 00:15:04,570 Kui sa loed koodijupi ja peamine ülesanne on tõesti, 274 00:15:04,570 --> 00:15:07,750 tõesti pikk, siis võib olla raskem Põhjus sellest, mis toimub. 275 00:15:07,750 --> 00:15:11,710 Nii et kui sa jaotada see funktsioone, oleks lihtsam lugeda. 276 00:15:11,710 --> 00:15:12,750 Ja uuesti-võime. 277 00:15:12,750 --> 00:15:16,940 Kui teil on patakas kood, mis kuramuse nimega või käivitada mitu korda, 278 00:15:16,940 --> 00:15:20,690 asemel ümberkirjutamist, et kood 10 korda Teie peamine ülesanne, siis võib 279 00:15:20,690 --> 00:15:21,440 tahad seda kasutada. 280 00:15:21,440 --> 00:15:25,740 Ja siis iga kord, kui on vaja kasutada, et koodijupi, kõne funktsiooni. 281 00:15:25,740 --> 00:15:30,550 282 00:15:30,550 --> 00:15:35,380 >> Nüüd, kui me mäletame tagasi tühjalt, me ka rääkisime mõned mõisted, 283 00:15:35,380 --> 00:15:37,680 millest üks on keere. 284 00:15:37,680 --> 00:15:41,120 Teema on mõiste mitmekordne järjestused kood 285 00:15:41,120 --> 00:15:43,040 täidesaatva samal ajal. 286 00:15:43,040 --> 00:15:47,490 Seega arvan, et tagasi päeval, kui Taavet oli kutid loota off arvu 287 00:15:47,490 --> 00:15:48,440 inimesed ruumis. 288 00:15:48,440 --> 00:15:50,550 >> Sisuliselt, mis toimub aasta on kõik kutid olid 289 00:15:50,550 --> 00:15:52,370 töötab eraldi teemad. 290 00:15:52,370 --> 00:15:55,540 Ja need niidid üheskoos saada mingi vastus. 291 00:15:55,540 --> 00:15:58,890 Samamoodi Scratch, kui teil on mitu sprites, võite 292 00:15:58,890 --> 00:16:01,070 on kass ja koer. 293 00:16:01,070 --> 00:16:08,770 Ja nad oleksid samaaegselt töötab oma skripte. 294 00:16:08,770 --> 00:16:10,020 See on näide väliskeermestamiseks. 295 00:16:10,020 --> 00:16:12,860 296 00:16:12,860 --> 00:16:18,000 >> Ja teine ​​mõiste, mis oli kasutusele kriimustus oli üritusi. 297 00:16:18,000 --> 00:16:22,550 Ja üritusi, kui mitu osad koodi üksteisega suhelda. 298 00:16:22,550 --> 00:16:26,840 Scratch, see oli siis, kui kasutatakse saade kontrolli ja kui ma 299 00:16:26,840 --> 00:16:29,500 Saate plokke. 300 00:16:29,500 --> 00:16:35,170 >> Ja ka aastal Ülesanded 4 nägime natuke sündmuste samuti. 301 00:16:35,170 --> 00:16:38,250 Te võib-olla kasutada Gevent raamatukogu. 302 00:16:38,250 --> 00:16:42,450 Ja seal oli üks funktsioon waitForClick kus sa ootasid 303 00:16:42,450 --> 00:16:44,300 kasutaja klikkima. 304 00:16:44,300 --> 00:16:47,870 Ja kliki, sel juhul oleks korral ja oodake click on oma 305 00:16:47,870 --> 00:16:49,120 sündmus. 306 00:16:49,120 --> 00:16:53,690 307 00:16:53,690 --> 00:16:58,630 >> Ja ka kogu reklaamide psets ja tööd oma psets, siis 308 00:16:58,630 --> 00:17:01,920 võisid puutuda mõned neist käskudest. 309 00:17:01,920 --> 00:17:05,579 See on see, mida sa kirjutasid oma terminali aken või mis iganes aknas 310 00:17:05,579 --> 00:17:12,119 , mis näitab üles oma g redigeerida, sisuliselt, navigeerida oma arvutis. 311 00:17:12,119 --> 00:17:19,440 >> Nii näiteks, LS loetleb kataloogi sisu. 312 00:17:19,440 --> 00:17:22,510 Tee kataloog luuakse uus kaust. 313 00:17:22,510 --> 00:17:24,819 CD, muutus kataloogi. 314 00:17:24,819 --> 00:17:28,400 RM, eemaldada kustutab faili või mõne kataloogi. 315 00:17:28,400 --> 00:17:31,050 Ja siis eemaldada kataloog eemaldab kataloogi. 316 00:17:31,050 --> 00:17:32,300 >> Sihtrühm: [kuuldamatu]? 317 00:17:32,300 --> 00:17:36,978 318 00:17:36,978 --> 00:17:38,370 >> SPEAKER 1: Jah, kindlasti. 319 00:17:38,370 --> 00:17:42,530 320 00:17:42,530 --> 00:17:46,040 Vabandust, küsimus oli, kui te soovitan panna see 321 00:17:46,040 --> 00:17:48,840 aasta spikker. 322 00:17:48,840 --> 00:17:49,440 See võiks aidata. 323 00:17:49,440 --> 00:17:51,490 Kui sul on ruumi, võite panna see. 324 00:17:51,490 --> 00:17:56,170 See on ka lihtsalt üldiselt piisavalt hea meeles pidada, sest kui sa seda kasutada 325 00:17:56,170 --> 00:17:59,060 võiksite lihtsalt on see meelde. 326 00:17:59,060 --> 00:18:02,750 See teeb teie elu palju lihtsamaks. 327 00:18:02,750 --> 00:18:04,000 Kas ma oma küsimusele vastust? 328 00:18:04,000 --> 00:18:10,528 329 00:18:10,528 --> 00:18:14,290 >> Nüüd, me rääkisime natuke Lühidalt raamatukogudes. 330 00:18:14,290 --> 00:18:18,570 Kuid kaks peamist need, mis me oleme kasutades siiani käigus on 331 00:18:18,570 --> 00:18:20,860 standard I / O ja CS50. 332 00:18:20,860 --> 00:18:25,410 Milliseid asju on kantud in standard I / O raamatukogu? 333 00:18:25,410 --> 00:18:28,410 >> Jah, seni oleme kasutatakse printf. 334 00:18:28,410 --> 00:18:31,150 In CS50 oleme kasutatakse GetInt ja getString. 335 00:18:31,150 --> 00:18:37,200 Ja andmete tüüp string ka juhtub deklareeritakse see CS50 raamatukogu. 336 00:18:37,200 --> 00:18:40,250 Räägime natuke rohkem sügavuti umbes kuidas raamatukogud töötavad ja kuidas nad 337 00:18:40,250 --> 00:18:41,870 suhelda oma ülejäänud kood. 338 00:18:41,870 --> 00:18:46,220 Aga need on kaks peamist need, mis me on kokku puutunud seni 339 00:18:46,220 --> 00:18:48,430 käigus. 340 00:18:48,430 --> 00:18:50,050 >> Tüübid. 341 00:18:50,050 --> 00:18:58,120 Need on hea meeles pidada, kui palju iga liik on esindatud või kuidas 342 00:18:58,120 --> 00:19:02,840 palju baite iga tüüpi requires-- 343 00:19:02,840 --> 00:19:04,990 int, 4 baiti; char, 1 bait. 344 00:19:04,990 --> 00:19:06,550 Float on 4 baiti. 345 00:19:06,550 --> 00:19:07,782 Mis on topelt? 346 00:19:07,782 --> 00:19:09,032 >> Sihtrühm: [kuuldamatu]. 347 00:19:09,032 --> 00:19:11,398 348 00:19:11,398 --> 00:19:16,240 >> SPEAKER 1: Jah, nii float aga kahekordistada. 349 00:19:16,240 --> 00:19:17,150 Aga kaua? 350 00:19:17,150 --> 00:19:18,400 >> Sihtrühm: [kuuldamatu]. 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 Mis on pikk? 354 00:19:25,410 --> 00:19:26,660 >> Sihtrühm: [kuuldamatu]. 355 00:19:26,660 --> 00:19:29,400 356 00:19:29,400 --> 00:19:31,450 >> SPEAKER 1: Jah, kahekordistub int. 357 00:19:31,450 --> 00:19:34,240 358 00:19:34,240 --> 00:19:34,705 Jah. 359 00:19:34,705 --> 00:19:36,100 >> Sihtrühm: [kuuldamatu]. 360 00:19:36,100 --> 00:19:38,030 >> SPEAKER 1: Pikk [kuuldamatu]. 361 00:19:38,030 --> 00:19:41,860 Ja siis pikk pikk on kahekordne. 362 00:19:41,860 --> 00:19:42,814 >> Sihtrühm: Ei, ei. 363 00:19:42,814 --> 00:19:47,107 Kaua on lihtsalt int. 364 00:19:47,107 --> 00:19:50,910 See sõltub arhitektuur enne [kuuldamatu] 365 00:19:50,910 --> 00:19:52,922 ja int on ühesuurused. 366 00:19:52,922 --> 00:19:54,172 [Kuuldamatu]. 367 00:19:54,172 --> 00:19:58,841 368 00:19:58,841 --> 00:20:00,920 >> SPEAKER 1: Nii pikk ja int on sama. 369 00:20:00,920 --> 00:20:02,943 Ja siis pikka on topelt int. 370 00:20:02,943 --> 00:20:03,910 Lahe. 371 00:20:03,910 --> 00:20:05,550 Ja siis, mis on viimane tüüpi? 372 00:20:05,550 --> 00:20:06,510 >> Sihtrühm: Pointer. 373 00:20:06,510 --> 00:20:10,350 >> SPEAKER 1: Jah, me oleme õppinud natuke vihjeid. 374 00:20:10,350 --> 00:20:14,015 Ja hoolimata sellest, mida osuti on juhtides to-- see võiks olla char star 375 00:20:14,015 --> 00:20:15,880 või int star-- 376 00:20:15,880 --> 00:20:20,530 see on alati 4 baiti pointer. 377 00:20:20,530 --> 00:20:21,633 Küsimused, mis? 378 00:20:21,633 --> 00:20:22,116 Jah? 379 00:20:22,116 --> 00:20:24,531 >> Sihtrühm: [kuuldamatu]? 380 00:20:24,531 --> 00:20:29,530 >> SPEAKER 1: Nii pikk ja int on Samal selles CS50 seade. 381 00:20:29,530 --> 00:20:32,302 >> Sihtrühm: seade on täielikult vahetatavad. 382 00:20:32,302 --> 00:20:33,510 >> SPEAKER 1: Jah. 383 00:20:33,510 --> 00:20:36,610 Nii et siis pikk pikk on topelt int. 384 00:20:36,610 --> 00:20:39,250 >> Sihtrühm: See on 32-bitine? 385 00:20:39,250 --> 00:20:40,620 >> SPEAKER 1: 32 bit, jah. 386 00:20:40,620 --> 00:20:43,572 >> Sihtrühm: Nii [kuuldamatu]? 387 00:20:43,572 --> 00:20:46,790 >> SPEAKER 1: Jah, kui see ei ole selgesõnaliselt öelda, siis 388 00:20:46,790 --> 00:20:47,870 peaks võtma 32 bit. 389 00:20:47,870 --> 00:20:50,040 >> Sihtrühm: Oleks midagi öelda nagu eeldades 390 00:20:50,040 --> 00:20:51,498 arhitektuur nagu aparaat. 391 00:20:51,498 --> 00:20:58,800 392 00:20:58,800 --> 00:21:01,710 64 bit, vaid asjad, mis muutus on pikad ja suunanäitajaks. 393 00:21:01,710 --> 00:21:05,614 Nad mõlemad [kuuldamatu]. 394 00:21:05,614 --> 00:21:06,590 >> SPEAKER 1: Jah? 395 00:21:06,590 --> 00:21:07,566 >> Sihtrühm: Küsimus. 396 00:21:07,566 --> 00:21:10,982 Nii ühel praktika viktoriinid küsib ta umbes allkirjastamata int. 397 00:21:10,982 --> 00:21:15,374 Niisiis, kuidas oleks, et määrata alates int [kuuldamatu]? 398 00:21:15,374 --> 00:21:18,140 >> SPEAKER 1: allkirjastamata aastal on ka 4 baiti. 399 00:21:18,140 --> 00:21:21,172 Aga milline on erinevate umbes allkirjastatud int ja allkirjastamata int? 400 00:21:21,172 --> 00:21:22,422 >> Sihtrühm: [kuuldamatu]. 401 00:21:22,422 --> 00:21:24,868 402 00:21:24,868 --> 00:21:25,630 >> SPEAKER 1: Õige. 403 00:21:25,630 --> 00:21:27,570 Üks võimalik esindada negatiivsed väärtused. 404 00:21:27,570 --> 00:21:28,580 Aga kuidas see seda teha? 405 00:21:28,580 --> 00:21:30,536 >> Sihtrühm: [kuuldamatu]. 406 00:21:30,536 --> 00:21:36,370 >> SPEAKER 1: Jah, see säästab 1 natuke esindama märk. 407 00:21:36,370 --> 00:21:40,910 408 00:21:40,910 --> 00:21:45,040 Allkirjastatud on üks natuke, et tähistab märk. 409 00:21:45,040 --> 00:21:48,886 Ja allkirjastamata lihtsalt on kõik positiivsed. 410 00:21:48,886 --> 00:21:50,365 >> Sihtrühm: OK. 411 00:21:50,365 --> 00:21:54,230 Nii et te ütlete, et topelt ei kaks suurust ujuki? 412 00:21:54,230 --> 00:21:58,202 >> SPEAKER 1: Double on kaks korda suurus float, jah. 413 00:21:58,202 --> 00:22:01,639 >> Sihtrühm: Kuidas pointer pikk pikk [kuuldamatu]? 414 00:22:01,639 --> 00:22:06,058 415 00:22:06,058 --> 00:22:10,870 >> SPEAKER 1: Seega on küsimus selles kuidas kursor pikk long-- 416 00:22:10,870 --> 00:22:13,800 kuidas on see, et ainult neli baiti, kui pikka oma 8 baiti. 417 00:22:13,800 --> 00:22:17,310 Seega pidage meeles, mis on osuti, Sisuliselt on väga baasi väärtust. 418 00:22:17,310 --> 00:22:19,046 >> Sihtrühm: [kuuldamatu]. 419 00:22:19,046 --> 00:22:22,670 >> SPEAKER 1: Jah, nii et osuti on lihtsalt mälu asukoht. 420 00:22:22,670 --> 00:22:28,040 Nii et see ei ole oluline, kui palju ruumi et osuti osutab. 421 00:22:28,040 --> 00:22:32,060 See vajab ainult 4 baiti jälgida Selle mälu asukohta. 422 00:22:32,060 --> 00:22:34,760 423 00:22:34,760 --> 00:22:36,010 On veel küsimusi? 424 00:22:36,010 --> 00:22:39,800 425 00:22:39,800 --> 00:22:41,050 Lahe. 426 00:22:41,050 --> 00:22:42,920 427 00:22:42,920 --> 00:22:47,460 >> Nii et viimane asi, mida ma pean on standard väljund. 428 00:22:47,460 --> 00:22:51,020 Sa peaksid kasutama neid sageli piisavalt, et sa ei mäleta. 429 00:22:51,020 --> 00:22:54,800 Aga see, kui me kasutame printf, näiteks. 430 00:22:54,800 --> 00:22:59,260 Ja meil on need kohatäitjaid, mis kutsuti vormingu tähistamine. 431 00:22:59,260 --> 00:23:03,910 >> Niisiis protsenti c char, protsenti i jaoks int, ja me saame kasutada ka protsenti d. 432 00:23:03,910 --> 00:23:05,130 See on sama asi. 433 00:23:05,130 --> 00:23:08,200 Kuid üldiselt on CS50 me proovida kasutada protsenti i. 434 00:23:08,200 --> 00:23:09,860 Protsenti f float. 435 00:23:09,860 --> 00:23:15,620 Protsenti ld kaua kaua ja protsenti s string. 436 00:23:15,620 --> 00:23:18,550 >> Samuti oleme kasutanud vähe Nende põgeneda järjestusi. 437 00:23:18,550 --> 00:23:22,431 Näiteks längkriipsu n uue liiniga. 438 00:23:22,431 --> 00:23:26,910 See on ainult siis, kui sa vormindamist Sinu kood print f. 439 00:23:26,910 --> 00:23:27,260 Jah? 440 00:23:27,260 --> 00:23:28,906 >> Sihtrühm: Mis on protsent d eest? 441 00:23:28,906 --> 00:23:31,850 >> SPEAKER 1: Seega on küsimus on see, mis on protsendi D? 442 00:23:31,850 --> 00:23:33,270 Protsenti d on ints. 443 00:23:33,270 --> 00:23:37,392 Protsenti d ja protsenti i on sama. 444 00:23:37,392 --> 00:23:41,130 >> Sihtrühm: Mis vahe on längkriipsu n ja längkriipsu r? 445 00:23:41,130 --> 00:23:45,300 >> SPEAKER 1: Seega on küsimus, mis on vahe tagasilöögi n ja 446 00:23:45,300 --> 00:23:48,615 tagasilöögi r? 447 00:23:48,615 --> 00:23:50,906 Ma arvan längkriipsu r on-- 448 00:23:50,906 --> 00:23:54,340 >> Sihtrühm: Nii längkriipsu r lihtsalt tähendab, tagasi rea algusesse 449 00:23:54,340 --> 00:23:56,670 ilma tegelikult läheb uuele reale. 450 00:23:56,670 --> 00:24:01,000 Nii et kui teil on vaja printida längkriipsu r ja te mine tagasi rea algusesse 451 00:24:01,000 --> 00:24:04,005 siis printida rohkem kraami, siis kirjutatakse asju, mis on juba 452 00:24:04,005 --> 00:24:04,390 [Kuuldamatu]. 453 00:24:04,390 --> 00:24:06,725 Arvestades, n tegelikult läheb uus line ja läheb [kuuldamatu]. 454 00:24:06,725 --> 00:24:10,525 455 00:24:10,525 --> 00:24:13,915 >> SPEAKER 1: Noh, kõik muud küsimused? 456 00:24:13,915 --> 00:24:15,430 Olgu. 457 00:24:15,430 --> 00:24:18,617 Ma anna see ära Dan, kes jätkab. 458 00:24:18,617 --> 00:24:25,078 >> [APPLAUSE] 459 00:24:25,078 --> 00:25:08,814 460 00:25:08,814 --> 00:25:09,720 >> DAN: võibolla tõesti. 461 00:25:09,720 --> 00:25:18,590 Seega ma räägin veel lai hulga ideid klassi, mis on 462 00:25:18,590 --> 00:25:23,220 umbes esindaja nädal kaks ja alguse nädal kolm liikumahakkamist 463 00:25:23,220 --> 00:25:28,690 valamise, mis on lihtsalt viis ravimiseks väärtus teatud tüüpi kui 464 00:25:28,690 --> 00:25:30,830 väärtus erinevat tüüpi. 465 00:25:30,830 --> 00:25:34,110 Nii et me saame teha seda tähte kuni ints, ujukite ints ja 466 00:25:34,110 --> 00:25:35,360 kaua igatseb kahekordistada. 467 00:25:35,360 --> 00:25:38,170 468 00:25:38,170 --> 00:25:44,500 >> Kõik need asjad saab kasutada viisidel ravivad mõned arvuline väärtus 469 00:25:44,500 --> 00:25:48,370 miinus char nagu mõned teised arvuline väärtus. 470 00:25:48,370 --> 00:25:54,480 Nii et seal on mõned küsimused selle, ning Muidugi, mis tekib siis, kui enamus 471 00:25:54,480 --> 00:25:57,860 asjad nagu float ints. 472 00:25:57,860 --> 00:26:00,500 Nii et see on natuke imelik. 473 00:26:00,500 --> 00:26:03,170 Meil on ujuk, mis on 1,31. 474 00:26:03,170 --> 00:26:05,220 Me korrutame selle 10000. 475 00:26:05,220 --> 00:26:08,380 Ja siis me printida kui int. 476 00:26:08,380 --> 00:26:09,630 Mida see väljund? 477 00:26:09,630 --> 00:26:11,600 478 00:26:11,600 --> 00:26:14,020 10000 korda 1,31. 479 00:26:14,020 --> 00:26:18,761 Nii 13.000, on see, et vist? 480 00:26:18,761 --> 00:26:20,685 >> Sihtrühm: Ma arvan, et see on 10000. 481 00:26:20,685 --> 00:26:24,234 >> DAN: Nii et ma korrutades 10000 Enne ma casting ta. 482 00:26:24,234 --> 00:26:25,202 >> Sihtrühm: Oh. 483 00:26:25,202 --> 00:26:27,622 Kas siis ei tekiks üks 9 ja mõned 0 numbrid? 484 00:26:27,622 --> 00:26:29,270 >> DAN: Te olete mingi imelik numbrit. 485 00:26:29,270 --> 00:26:32,410 486 00:26:32,410 --> 00:26:37,670 Nii õige, see on 1,3 korda 10.000. 487 00:26:37,670 --> 00:26:40,040 Nii et see on 13000. 488 00:26:40,040 --> 00:26:41,313 Ja see ekstra kummaline-- 489 00:26:41,313 --> 00:26:42,160 >> Sihtrühm: 13100. 490 00:26:42,160 --> 00:26:42,650 >> DAN: 13100. 491 00:26:42,650 --> 00:26:44,910 Aitäh, Rob. 492 00:26:44,910 --> 00:26:46,610 Ja see ekstra weirdness-- 493 00:26:46,610 --> 00:26:48,060 Selle 9,9-- 494 00:26:48,060 --> 00:26:53,860 on lihtsalt sellepärast, et see valu sattus ümardamisest kus 495 00:26:53,860 --> 00:26:55,394 see ei tohiks olla. 496 00:26:55,394 --> 00:26:55,871 Jah. 497 00:26:55,871 --> 00:26:58,256 >> Sihtrühm: casting juhtub pärast veel midagi? 498 00:26:58,256 --> 00:27:03,865 >> DAN: Nii, kuna mul on see trükis, seda teeb seda korrutamine enne selle 499 00:27:03,865 --> 00:27:05,230 kas see valu. 500 00:27:05,230 --> 00:27:06,140 >> Sihtrühm: [kuuldamatu]. 501 00:27:06,140 --> 00:27:11,350 >> DAN: Ma arvan, et see seaks esimene, jah, mis oleks 10000. 502 00:27:11,350 --> 00:27:12,610 Midagi veel? 503 00:27:12,610 --> 00:27:13,330 Lahe. 504 00:27:13,330 --> 00:27:16,344 Nii et see on 13099. 505 00:27:16,344 --> 00:27:17,840 Miks see nii on? 506 00:27:17,840 --> 00:27:18,900 Ebatäpsus. 507 00:27:18,900 --> 00:27:21,020 >> Ujub ei ole täiuslik. 508 00:27:21,020 --> 00:27:27,550 Nad võivad esindada ainult numbreid teatud arvu komakohani. 509 00:27:27,550 --> 00:27:35,120 Nii et kui me välja printida 8 sig viigimarju see float, saame omamoodi 510 00:27:35,120 --> 00:27:36,800 kole vaadata number. 511 00:27:36,800 --> 00:27:45,580 Ja seda sellepärast, 1.31 ei saa täpselt esindab lihtne 512 00:27:45,580 --> 00:27:49,000 volitused kaks masinat. 513 00:27:49,000 --> 00:27:53,530 Nii et see jõuab võttes lähim arvan, mis jõuab 514 00:27:53,530 --> 00:27:55,710 olles natuke madal. 515 00:27:55,710 --> 00:27:57,730 Mõtet? 516 00:27:57,730 --> 00:27:59,110 OK. 517 00:27:59,110 --> 00:28:05,840 >> Nüüd, sisse on teistmoodi teeme tingimisi avaldused, kus kõik 518 00:28:05,840 --> 00:28:09,900 me hoolime on ühe muutuja. 519 00:28:09,900 --> 00:28:16,570 Nii et see konkreetne näide, et me oleme saada täisarv kasutaja. 520 00:28:16,570 --> 00:28:21,070 Ja siis me vaatame mida see täisarv on. 521 00:28:21,070 --> 00:28:23,500 Arvatavasti on see number üks kuni neli. 522 00:28:23,500 --> 00:28:24,800 See, mida me palume. 523 00:28:24,800 --> 00:28:28,450 >> Nii et sa ei lülitiga muutuja nimi. 524 00:28:28,450 --> 00:28:34,290 Siis loodud juhtudel võimalik väärtustab see võiks olla. 525 00:28:34,290 --> 00:28:37,730 Nii et juhul kui üks, ütlevad, et see on madal. 526 00:28:37,730 --> 00:28:41,080 Ja siis sa murda välja tulla lüliti seisundis, 527 00:28:41,080 --> 00:28:43,270 sa ei jätka. 528 00:28:43,270 --> 00:28:44,830 >> Järgmise juhul-- 529 00:28:44,830 --> 00:28:46,940 nii juhul kaks ja juhul meeter 530 00:28:46,940 --> 00:28:51,920 kui see on juhul kaks ta lihtsalt kukub alla esimene rida koodi ta peab koos 531 00:28:51,920 --> 00:28:55,400 kohtuasja kolm kuni ta näeb murda. 532 00:28:55,400 --> 00:29:00,430 Nii et põhjus, saad puhul üks ainult print madal on, sest ma 533 00:29:00,430 --> 00:29:01,890 on see break siin. 534 00:29:01,890 --> 00:29:05,360 Kui ma, ütleme, ignoreeritakse seda break-- kui ma viskasin selle breakaway-- 535 00:29:05,360 --> 00:29:09,740 oleks printida madal, ja siis oleks prindi keskel, ja siis see murraks. 536 00:29:09,740 --> 00:29:12,200 >> Nii katkestused on oluline osa Lüliti tingimused ja 537 00:29:12,200 --> 00:29:14,340 nad peavad seal olema. 538 00:29:14,340 --> 00:29:20,070 Iga juhtudel, mis ei ole selgesõnaliselt haldab default 539 00:29:20,070 --> 00:29:26,645 juhul lüliti ja peaks enamus. 540 00:29:26,645 --> 00:29:31,363 >> Sihtrühm: Nii 1, 2, 3, ja 4 oleks n? 541 00:29:31,363 --> 00:29:33,310 >> DAN: Väärtused, mis n võib olla. 542 00:29:33,310 --> 00:29:34,654 Jah. 543 00:29:34,654 --> 00:29:35,146 Jah? 544 00:29:35,146 --> 00:29:37,606 >> Sihtrühm: Nii et kui teil on et [kuuldamatu]? 545 00:29:37,606 --> 00:29:44,002 546 00:29:44,002 --> 00:29:46,830 >> DAN: Te printida madal ja seejärel oleks printida keskel ja 547 00:29:46,830 --> 00:29:47,400 siis murraks. 548 00:29:47,400 --> 00:29:50,244 >> Sihtrühm: Miks see printida keskel, kui [kuuldamatu]? 549 00:29:50,244 --> 00:29:54,036 550 00:29:54,036 --> 00:30:00,550 >> DAN: Nii kõike juhul enne vaheaega kuulub. 551 00:30:00,550 --> 00:30:09,390 Nii et juhul kui üks print on all juhul üks on see järgmine print. 552 00:30:09,390 --> 00:30:09,890 Jah? 553 00:30:09,890 --> 00:30:11,140 >> Sihtrühm: [kuuldamatu]? 554 00:30:11,140 --> 00:30:15,890 555 00:30:15,890 --> 00:30:22,170 >> DAN: Nii et see arv on vaid eriti väärtus, et see muutuja 556 00:30:22,170 --> 00:30:23,420 võib võtta, eks? 557 00:30:23,420 --> 00:30:26,740 558 00:30:26,740 --> 00:30:28,490 Kas on mõtet? 559 00:30:28,490 --> 00:30:28,990 Jah. 560 00:30:28,990 --> 00:30:31,490 >> Sihtrühm: [kuuldamatu]? 561 00:30:31,490 --> 00:30:34,130 >> DAN: Jah, juhul kaks oleks printida keskel ja siis murda. 562 00:30:34,130 --> 00:30:35,380 >> Sihtrühm: [kuuldamatu]? 563 00:30:35,380 --> 00:30:37,954 564 00:30:37,954 --> 00:30:40,050 >> DAN: Ma arvan, et iga? 565 00:30:40,050 --> 00:30:43,855 Mis muud tüüpi andmeid saab üle minna? 566 00:30:43,855 --> 00:30:46,320 >> Sihtrühm: saate lülitada mis tahes tüüpi andmeid. 567 00:30:46,320 --> 00:30:50,905 Aga see tähendab ainult midagi üle tähemärki ja ints ja värki, sest 568 00:30:50,905 --> 00:30:55,600 kui sa oled vahetamise üle pointer mis ei ole tegelikult mõtet, 569 00:30:55,600 --> 00:30:59,555 vahetamise üle koormused, kui see isegi olgem sa seda teha, sest ujukoma 570 00:30:59,555 --> 00:31:02,840 täpsus, siis ei oleks tõesti taha seda teha niikuinii. 571 00:31:02,840 --> 00:31:07,320 Nii et päris palju, lihtsalt ints ja tähemärki ja värki. 572 00:31:07,320 --> 00:31:12,360 >> DAN: Jah, see on siis, kui sul on selge väärtused, et sa tead, ma arvan, võib olla 573 00:31:12,360 --> 00:31:14,250 et lüliti on tegelikult kasulik. 574 00:31:14,250 --> 00:31:17,094 575 00:31:17,094 --> 00:31:18,990 Hea? 576 00:31:18,990 --> 00:31:21,370 OK. 577 00:31:21,370 --> 00:31:26,180 >> Ulatus on vahemikus, mis on deklareeritud muutuja laieneb. 578 00:31:26,180 --> 00:31:32,190 Nii et see väike patakas kood mul on, oleks täis vigu. 579 00:31:32,190 --> 00:31:41,450 Ja põhjus on I kuulutas selle int i piires kuuluvad käesoleva silmus. 580 00:31:41,450 --> 00:31:46,390 Ja siis ma üritan viidata, et i väljapoole, et loop ulatust. 581 00:31:46,390 --> 00:31:50,330 >> Ühesõnaga, saate mõelda ulatus kas midagi deklareerida 582 00:31:50,330 --> 00:31:59,750 kus sees komplekt looksulg ainult olemas nendes looksulg. 583 00:31:59,750 --> 00:32:04,990 Ja kui sa püüad ja kasutada, et muutuja väljaspool neid looksulg, saate 584 00:32:04,990 --> 00:32:08,356 saada vea tõlkija. 585 00:32:08,356 --> 00:32:08,812 Jah? 586 00:32:08,812 --> 00:32:09,724 >> Sihtrühm: Nii et see ei tööta? 587 00:32:09,724 --> 00:32:11,790 >> DAN: See ei tööta, jah. 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 String char *. 591 00:32:19,780 --> 00:32:22,250 Nad on täpselt sama. 592 00:32:22,250 --> 00:32:25,540 Nad on lihtsalt vihjeid tähemärki. 593 00:32:25,540 --> 00:32:33,000 Ja iga stringe, mis teil on peaks lõppema koos tagurpidi kaldkriipsuga null, mis on just 594 00:32:33,000 --> 00:32:34,410 c konventsiooniga. 595 00:32:34,410 --> 00:32:36,680 >> Seda nimetatakse NULL terminaator. 596 00:32:36,680 --> 00:32:39,050 Ja NULL-- 597 00:32:39,050 --> 00:32:41,670 kapitali N, kapitali U, kapitali L, kapital ma-- 598 00:32:41,670 --> 00:32:44,290 ei ole sama NULL terminaator. 599 00:32:44,290 --> 00:32:46,640 See on kursor. 600 00:32:46,640 --> 00:32:48,280 See on iseloomu. 601 00:32:48,280 --> 00:32:49,530 Nad on väga erinevad. 602 00:32:49,530 --> 00:32:50,200 Mäletad seda. 603 00:32:50,200 --> 00:32:52,320 See toimub viktoriin, ilmselt. 604 00:32:52,320 --> 00:32:54,040 Ma ei ole näinud viktoriini. 605 00:32:54,040 --> 00:32:57,880 606 00:32:57,880 --> 00:32:58,840 Jah? 607 00:32:58,840 --> 00:33:01,232 >> Sihtrühm: Nii et NULL on, ütleme, pointer? 608 00:33:01,232 --> 00:33:01,995 >> DAN: Jah. 609 00:33:01,995 --> 00:33:05,170 >> Sihtrühm: Mida tähendab [kuuldamatu]? 610 00:33:05,170 --> 00:33:10,050 >> DAN: Kui ütleme, malloc nimetatakse, kui sa ei ole piisavalt mälu, et saada 611 00:33:10,050 --> 00:33:14,400 olenemata suurusest palud, malloc tagasi NULL. 612 00:33:14,400 --> 00:33:19,550 See on põhiliselt siis, kui see funktsioon on peaksid tagasi pointer, sa 613 00:33:19,550 --> 00:33:22,600 vaja vaadata vastu NULL, sest NULL on päris hea-- 614 00:33:22,600 --> 00:33:25,260 see, omamoodi, prügi väärtus. 615 00:33:25,260 --> 00:33:27,050 See on null niipalju kui osuti läheb. 616 00:33:27,050 --> 00:33:29,630 617 00:33:29,630 --> 00:33:32,250 >> Iga kord, kui te helistate funktsiooni mis tagastab viida. 618 00:33:32,250 --> 00:33:35,960 Sa lähed soovite kontrollida, et olla kindel, et see osuti ei ole NULL 619 00:33:35,960 --> 00:33:37,760 sest NULL on väga levinud. 620 00:33:37,760 --> 00:33:40,160 See on omamoodi prügi tagasi. 621 00:33:40,160 --> 00:33:44,902 Nii et kui midagi ei lähe küll, lihtsalt tagasi NULL asemel. 622 00:33:44,902 --> 00:33:45,898 >> Sihtrühm: [kuuldamatu]? 623 00:33:45,898 --> 00:33:48,922 >> DAN: Jah, ja see on see. 624 00:33:48,922 --> 00:33:51,750 >> Sihtrühm: [kuuldamatu]? 625 00:33:51,750 --> 00:33:52,800 >> DAN: Spell, kuna seda. 626 00:33:52,800 --> 00:33:54,150 See on NULL terminaator. 627 00:33:54,150 --> 00:33:56,560 See on väiketähed N-U-L-L, kui sa õigekirja see. 628 00:33:56,560 --> 00:33:59,860 >> Sihtrühm: Ja ma läksin tagasi ja seda testinud. 629 00:33:59,860 --> 00:34:03,010 Ja kui sa püüad panna ujukoma väärtuse lüliti, siis see karjuda 630 00:34:03,010 --> 00:34:05,916 ütles avalduses nõuab väljendus täisarv tüüpi. 631 00:34:05,916 --> 00:34:07,166 >> DAN: Ole lahke. 632 00:34:07,166 --> 00:34:09,639 633 00:34:09,639 --> 00:34:12,246 Aga jah, milline oli küsimus jälle? 634 00:34:12,246 --> 00:34:13,496 >> Sihtrühm: [kuuldamatu]? 635 00:34:13,496 --> 00:34:16,150 636 00:34:16,150 --> 00:34:23,679 >> DAN: Nii kapitali N, kapitali U, kapitali L, kapital L on tegelik c asi. 637 00:34:23,679 --> 00:34:29,719 See on NULL pointer ja tahe ainult sellisena käsitleda. 638 00:34:29,719 --> 00:34:33,530 Sa ei ole kunagi proovida ja õigekirja NULL iseloomu ja näe 639 00:34:33,530 --> 00:34:35,630 muul viisil kui see. 640 00:34:35,630 --> 00:34:36,610 Jah? 641 00:34:36,610 --> 00:34:42,490 >> Sihtrühm: Nii et taas char max või midagi lisades, oleks see 642 00:34:42,490 --> 00:34:43,960 kehastavad sama funktsiooni kui [kuuldamatu]? 643 00:34:43,960 --> 00:34:50,655 644 00:34:50,655 --> 00:34:54,949 >> Sihtrühm: Nii et te silmas peate tagastamise char max alates getchar või 645 00:34:54,949 --> 00:34:55,444 mis see on? 646 00:34:55,444 --> 00:34:55,940 >> Sihtrühm: Jah. 647 00:34:55,940 --> 00:34:58,620 >> Sihtrühm: Jah, nii üldise termin kõigi nende asjade 648 00:34:58,620 --> 00:34:59,920 on kontroll-väärtused. 649 00:34:59,920 --> 00:35:03,640 Nii nagu naasmist int max alates GetInt ja char max alates getchar, see on 650 00:35:03,640 --> 00:35:06,010 peaks olema nagu kõik korras, kui need asjad on tagasi meile 651 00:35:06,010 --> 00:35:07,210 midagi läks valesti. 652 00:35:07,210 --> 00:35:09,950 >> Vihjeid me just on Selle kontroll-väärtus, et igaüks 653 00:35:09,950 --> 00:35:10,750 lepib. 654 00:35:10,750 --> 00:35:13,210 Ja see on asi, mida tagasi kui asjad lähevad halvasti. 655 00:35:13,210 --> 00:35:15,910 Nii char max mida me kasutame esindada midagi 656 00:35:15,910 --> 00:35:18,100 nagu NULL või getchar. 657 00:35:18,100 --> 00:35:23,420 >> Sihtrühm: Seega, kui olete katsetamise getchar, kas sa lihtsalt panna NULL? 658 00:35:23,420 --> 00:35:23,910 Kas see muudab? 659 00:35:23,910 --> 00:35:25,400 >> DAN: Te ei saa lihtsalt vaadata NULL. 660 00:35:25,400 --> 00:35:30,130 Sa pead kontrollima char max sest tagastatav väärtus on funktsioon 661 00:35:30,130 --> 00:35:35,416 iseloomu ei viida. 662 00:35:35,416 --> 00:35:35,888 Jah? 663 00:35:35,888 --> 00:35:38,248 >> Sihtrühm: See küsimus puudutab seda, stringi pikkus. 664 00:35:38,248 --> 00:35:40,136 Kas see sisaldada NULL iseloomu? 665 00:35:40,136 --> 00:35:41,000 >> DAN: Ei 666 00:35:41,000 --> 00:35:45,930 Ja see on tegelikult, kuidas string pikkusega teab lõpetada, sest see läheb läbi 667 00:35:45,930 --> 00:35:49,070 Teie array märkide kuni see näeb NULL iseloomu. 668 00:35:49,070 --> 00:35:51,030 Ja siis see on nagu kõik Olgu, ma olen teinud. 669 00:35:51,030 --> 00:35:52,130 >> Sihtrühm: [kuuldamatu] viis? 670 00:35:52,130 --> 00:35:53,990 >> DAN: Tere oleks viis. 671 00:35:53,990 --> 00:35:55,240 Yep. 672 00:35:55,240 --> 00:35:59,580 673 00:35:59,580 --> 00:36:02,880 Nii massiivid on pidev blokeerib mälu. 674 00:36:02,880 --> 00:36:08,480 Nad on vahetu juurdepääs, öeldes, nimi massiivi ja siis, lokkis 675 00:36:08,480 --> 00:36:16,720 traksid, olenemata index tahad minna et, nad indekseeritud nullist läbi 676 00:36:16,720 --> 00:36:20,100 pikkus massiivi miinus 1. 677 00:36:20,100 --> 00:36:23,070 >> Ja nad deklareeritud tüüpi asi, mis sa salvestamine 678 00:36:23,070 --> 00:36:29,750 massiivi nimi massiivi ja seejärel suurusele vaatamata on selle massiivi. 679 00:36:29,750 --> 00:36:36,660 Nii et see on char massiiv pikkusega kuus, mis on need väärtused. 680 00:36:36,660 --> 00:36:42,050 681 00:36:42,050 --> 00:36:42,700 Jah? 682 00:36:42,700 --> 00:36:43,950 >> Sihtrühm: [kuuldamatu]? 683 00:36:43,950 --> 00:36:47,980 684 00:36:47,980 --> 00:36:48,460 >> DAN: Jah. 685 00:36:48,460 --> 00:36:51,340 >> Sihtrühm: [kuuldamatu]? 686 00:36:51,340 --> 00:36:56,700 >> DAN: Kui teil on, mis toimub arvesse array juba tehtud. 687 00:36:56,700 --> 00:37:02,260 Nii et sa võiksid täpsustada selle asemel näiteks, ütleme, char, mis iganes nime oma 688 00:37:02,260 --> 00:37:12,200 massiiv on tühi sulgudes võrdub lokkis traksidega H komaga E komaga L komaga L komaga 689 00:37:12,200 --> 00:37:16,290 O komaga NULL iseloomu ja lokkis traksidega. 690 00:37:16,290 --> 00:37:18,180 See oleks ka töö deklaratsioon. 691 00:37:18,180 --> 00:37:20,886 >> Sihtrühm: [kuuldamatu]? 692 00:37:20,886 --> 00:37:23,110 >> DAN: Siis peate suurus juba tehtud. 693 00:37:23,110 --> 00:37:23,896 >> Sihtrühm: [kuuldamatu]? 694 00:37:23,896 --> 00:37:25,146 >> DAN: Jah. 695 00:37:25,146 --> 00:37:30,114 696 00:37:30,114 --> 00:37:32,420 Võibolla tõesti. 697 00:37:32,420 --> 00:37:36,430 Käsurea argumendid on viis saada sisend kasutaja 698 00:37:36,430 --> 00:37:39,380 argumente peamine. 699 00:37:39,380 --> 00:37:40,600 Main kaht argumenti. 700 00:37:40,600 --> 00:37:47,680 Mitmeid argumente, mis on edasi mööda käsurea ja 701 00:37:47,680 --> 00:37:55,340 string vektor või stringi massiivi kõiki argumente. 702 00:37:55,340 --> 00:38:07,840 >> Nii et kui ma, ütleme, nimetatakse funktsiooni nagu dot välja 1 ruum, 2 ruumi, kolm, 703 00:38:07,840 --> 00:38:10,110 argc oleks 4. 704 00:38:10,110 --> 00:38:17,370 Ja argv 0 oleks dot välja. 705 00:38:17,370 --> 00:38:19,130 Argv1 oleks 1. 706 00:38:19,130 --> 00:38:23,030 argv2 oleks 2. argv3 oleks 3, et konkreetse juhtumi puhul. 707 00:38:23,030 --> 00:38:23,310 Jah? 708 00:38:23,310 --> 00:38:25,400 >> Sihtrühm: [kuuldamatu]? 709 00:38:25,400 --> 00:38:34,010 >> DAN: viimane element massiivi sest massiiv on pikkus argc pluss 710 00:38:34,010 --> 00:38:41,050 üks argB, viimane element on NULL pointer. 711 00:38:41,050 --> 00:38:42,580 On argc pluss 1. 712 00:38:42,580 --> 00:38:46,210 713 00:38:46,210 --> 00:38:52,150 Nii juhtub, et ma just ütlesin, see oleks argv 0 on dot välja. 714 00:38:52,150 --> 00:38:56,330 argv 1 on 1. argv2 on 2. argv 3 3. 715 00:38:56,330 --> 00:39:03,490 argv 4, mis on üks suuremaid kui argc oleks NULL. 716 00:39:03,490 --> 00:39:04,870 >> Ja see on NULL pointer. 717 00:39:04,870 --> 00:39:06,590 Jah. 718 00:39:06,590 --> 00:39:11,250 Ja see on sellepärast, et string on char star on osuti. 719 00:39:11,250 --> 00:39:14,102 Nii peab see olema sama tüüpi. 720 00:39:14,102 --> 00:39:14,595 Jah? 721 00:39:14,595 --> 00:39:16,074 >> Sihtrühm: Kaks küsimust. 722 00:39:16,074 --> 00:39:21,004 Nii et üks, mis on vahe seda ja getString muud kui üks tüüp 723 00:39:21,004 --> 00:39:22,483 kasutaja mootorit? 724 00:39:22,483 --> 00:39:25,934 Ja kaks, on see salvestatud viimaste mälu? 725 00:39:25,934 --> 00:39:28,399 Nii nagu getString oleks olla [kuuldamatu]? 726 00:39:28,399 --> 00:39:31,357 727 00:39:31,357 --> 00:39:33,650 >> DAN: Kus on see salvestatud? 728 00:39:33,650 --> 00:39:34,905 Ma ei tea, kus see on salvestatud. 729 00:39:34,905 --> 00:39:40,000 >> Sihtrühm: Nii, tegelikult, sa tead, kuidas iga funktsioon, mida nimetame seda argumendid 730 00:39:40,000 --> 00:39:42,170 hoitakse virnas? 731 00:39:42,170 --> 00:39:46,610 Nii argc ja argv on argumendid, et peamine ja nad on virnas, või tegelikult 732 00:39:46,610 --> 00:39:49,131 veidi üle, mida te arvate, kui algusest korstnat. 733 00:39:49,131 --> 00:39:53,490 Mis oli teine ​​osa küsimuse? 734 00:39:53,490 --> 00:39:56,821 >> Sihtrühm: Mis siis [kuuldamatu]? 735 00:39:56,821 --> 00:40:00,990 >> DAN: Jah, see on lihtsalt teistmoodi saada sisend kasutaja. 736 00:40:00,990 --> 00:40:06,030 See üks on veidi tõhusam ja see mugavamaks skripte, sest sa 737 00:40:06,030 --> 00:40:10,070 võib lihtsalt mööda argumente oma peamise funktsiooni asemel, et oodata 738 00:40:10,070 --> 00:40:13,400 kasutajatele, kui sul ei ole kasutajat. 739 00:40:13,400 --> 00:40:16,280 >> Sihtrühm: Ja jah, saan stringid oleks [kuuldamatu]. 740 00:40:16,280 --> 00:40:17,922 Oleks salvestada asju, mida vaja. 741 00:40:17,922 --> 00:40:18,834 >> DAN: Jah? 742 00:40:18,834 --> 00:40:21,114 >> Sihtrühm: [kuuldamatu]? 743 00:40:21,114 --> 00:40:27,545 >> DAN: Jah, argv 0 sisaldab alati dot kaldkriips funktsiooni kõne. 744 00:40:27,545 --> 00:40:28,042 Jah? 745 00:40:28,042 --> 00:40:29,292 >> Sihtrühm: [kuuldamatu]? 746 00:40:29,292 --> 00:40:33,509 747 00:40:33,509 --> 00:40:37,310 >> DAN: Jah, iga argumendid lõppes NULL iseloomu, sest nad 748 00:40:37,310 --> 00:40:38,310 on stringid. 749 00:40:38,310 --> 00:40:40,892 >> Sihtrühm: [kuuldamatu]? 750 00:40:40,892 --> 00:40:44,116 >> DAN: Jah, argv argc on NULL pointer. 751 00:40:44,116 --> 00:40:45,112 >> Sihtrühm: [kuuldamatu]? 752 00:40:45,112 --> 00:40:47,104 >> DAN: Oh yeah. 753 00:40:47,104 --> 00:40:48,100 Jah, vabandust. 754 00:40:48,100 --> 00:40:49,594 >> Sihtrühm: Nii [kuuldamatu]? 755 00:40:49,594 --> 00:41:08,518 756 00:41:08,518 --> 00:41:16,340 >> DAN: Seega on küsimus selles, kui teil on olnud käsurea dot kaldkriips dot välja 1, 2, 757 00:41:16,340 --> 00:41:20,410 oleks mitmeid käsurea argumendid on kaks või oleks kolm? 758 00:41:20,410 --> 00:41:24,420 759 00:41:24,420 --> 00:41:28,240 >> Sihtrühm: Ma arvan, et see ei ole tegelikult küsimus. 760 00:41:28,240 --> 00:41:31,370 Ma pigem öelda, oh, sa ei liigu käsurea argumente, kui 761 00:41:31,370 --> 00:41:32,730 Ilmselt sa nimetatakse funktsiooni. 762 00:41:32,730 --> 00:41:37,950 Nii et ma pigem vokaalselt välistada funktsioon käsurealt 763 00:41:37,950 --> 00:41:40,350 argumendid, kuigi see on lisada argv. 764 00:41:40,350 --> 00:41:42,600 >> DAN: Aga kui see oli test-- 765 00:41:42,600 --> 00:41:46,550 Jaa ja ka siis kui sa midagi öelda nagu argc võrdub 3, 766 00:41:46,550 --> 00:41:48,512 sa oled ohutu seismise. 767 00:41:48,512 --> 00:41:49,416 Jah? 768 00:41:49,416 --> 00:41:50,666 >> Sihtrühm: [kuuldamatu]? 769 00:41:50,666 --> 00:42:00,990 770 00:42:00,990 --> 00:42:09,510 >> DAN: Ma arvan, et kui selle asemel, nimetades seda aastal argc ja string argv sulgudes 771 00:42:09,510 --> 00:42:14,350 kuid hoitakse sama liiki ja just helistas neile midagi nagu 772 00:42:14,350 --> 00:42:16,640 ja b, oleks see ikka toimib? 773 00:42:16,640 --> 00:42:18,790 Ja see oleks ikka töö, siis oleks lihtsalt-- 774 00:42:18,790 --> 00:42:21,520 asemel argc-- soovite kasutada ja b. 775 00:42:21,520 --> 00:42:24,436 776 00:42:24,436 --> 00:42:25,408 Jah? 777 00:42:25,408 --> 00:42:26,658 >> Sihtrühm: [kuuldamatu]? 778 00:42:26,658 --> 00:42:34,642 779 00:42:34,642 --> 00:42:38,850 >> DAN: Seega on küsimus getString on kavatse hoida mälu hunnik 780 00:42:38,850 --> 00:42:42,280 sest getString on char *. 781 00:42:42,280 --> 00:42:47,530 See salvestab mälu hunnik, sest see nõuab nüüd malloc reaalset 782 00:42:47,530 --> 00:42:49,258 rakendamise getString. 783 00:42:49,258 --> 00:42:53,210 784 00:42:53,210 --> 00:42:55,090 OK, liigub. 785 00:42:55,090 --> 00:42:55,950 >> Turvalisus. 786 00:42:55,950 --> 00:43:01,090 Nii et olla tõeliselt turvaline, sa tugineda ei üks ja lubate keegi juurdepääsu mis tahes 787 00:43:01,090 --> 00:43:04,540 teie andmeid, mistõttu igaüks ehitab oma masinaid, 788 00:43:04,540 --> 00:43:09,580 oma operatsioonisüsteemide kõik oma programmide nullist, ja loomulikult 789 00:43:09,580 --> 00:43:13,410 ärge ühendage muid masinaid Interneti kaudu. 790 00:43:13,410 --> 00:43:17,350 Nii et arvutid on ebakindel. 791 00:43:17,350 --> 00:43:19,200 Nad on tõesti. 792 00:43:19,200 --> 00:43:20,940 Me peame usaldama teisi inimesi. 793 00:43:20,940 --> 00:43:26,500 >> Ja idee turvalisus on see, et sa oled püüab piirata summa 794 00:43:26,500 --> 00:43:27,540 usun, et teil on vaja. 795 00:43:27,540 --> 00:43:32,080 Ja üks vahend sa seda on läbi krüptograafia. 796 00:43:32,080 --> 00:43:34,950 Krüptograafia on sisuliselt meil on saladusi. 797 00:43:34,950 --> 00:43:38,880 >> Mõnikord peame läbima oma saladused koos läbi, ütleme, internet või 798 00:43:38,880 --> 00:43:39,980 muid asju. 799 00:43:39,980 --> 00:43:43,180 Ja me ei taha, et inimesed teada neid saladusi. 800 00:43:43,180 --> 00:43:50,100 Nii et me krüptida oma saladusi arvesse nii et me loodame, et keegi saab nuputada. 801 00:43:50,100 --> 00:43:51,600 >> Nii et me used-- 802 00:43:51,600 --> 00:43:54,340 kaudu muidugi selle class-- 803 00:43:54,340 --> 00:44:00,750 asjad nagu Caesar salakiri ja [Kuuldamatu], mis on mõlemad väga 804 00:44:00,750 --> 00:44:03,200 ebakindel, kuidas krüptimine asju. 805 00:44:03,200 --> 00:44:07,930 Nad on lihtne aru saada, mida nad oled ja mida teie riigisaladusi. 806 00:44:07,930 --> 00:44:12,130 Reaalses maailmas kasutab palju keeruline krüpteerimisskeemid. 807 00:44:12,130 --> 00:44:13,880 Ja me ei hakka palju rohkem. 808 00:44:13,880 --> 00:44:18,280 809 00:44:18,280 --> 00:44:19,430 >> Silumine. 810 00:44:19,430 --> 00:44:20,785 GDB on parim. 811 00:44:20,785 --> 00:44:24,014 812 00:44:24,014 --> 00:44:25,810 Ma veel kord rõhutada. 813 00:44:25,810 --> 00:44:30,920 Kasutage GDB kõik kord iga kord, kui on probleem. 814 00:44:30,920 --> 00:44:36,030 Käsud, mis on kasulikud GDB on murda, mida läbivad kas liin 815 00:44:36,030 --> 00:44:41,330 number, funktsiooni nime, sisuliselt Kui teie kood soovid peatuda, 816 00:44:41,330 --> 00:44:45,600 ning olema võimeline võtma kontrolli. 817 00:44:45,600 --> 00:44:54,140 >> Prindi võtab muutuv ja prindib mis iganes see muutuja on sel 818 00:44:54,140 --> 00:44:55,990 hetkel oma täitmise. 819 00:44:55,990 --> 00:45:00,130 Järgmine kolib oma täitmise mööda üks samm. 820 00:45:00,130 --> 00:45:05,050 Ja astuda samme sees funktsiooni Teie täitmine. 821 00:45:05,050 --> 00:45:10,480 >> Muud asjad on joosta, mis on see, kuidas sa tegelikult käivitada oma koodi. 822 00:45:10,480 --> 00:45:16,630 Jätka võtab kõik vajalikud sammud et saada järgmisele murdepunkt. 823 00:45:16,630 --> 00:45:18,300 Ja seal on palju, palju muud. 824 00:45:18,300 --> 00:45:19,040 Vaata neid. 825 00:45:19,040 --> 00:45:19,901 Nad on suurepärased. 826 00:45:19,901 --> 00:45:20,863 Jah? 827 00:45:20,863 --> 00:45:22,113 >> Sihtrühm: [kuuldamatu]? 828 00:45:22,113 --> 00:45:26,635 829 00:45:26,635 --> 00:45:28,200 >> DAN: Jah, mis on silur. 830 00:45:28,200 --> 00:45:34,230 Nii siluri on programm, mis saab siluda oma programmi. 831 00:45:34,230 --> 00:45:39,931 See ei ole programm, mis leiab vigu jaoks sa, kuigi see oleks tore. 832 00:45:39,931 --> 00:45:43,020 833 00:45:43,020 --> 00:45:46,040 >> Ja viimane minu jaoks on otsing. 834 00:45:46,040 --> 00:45:51,470 Nii liiki otsing, mis me rääkisime umbes Selle klassi on lineaarne otsing, 835 00:45:51,470 --> 00:45:55,960 mis on lihtsalt, et teil vaadata läbi iga element otsing ruumi, üks 836 00:45:55,960 --> 00:46:00,410 element korraga, kuni leiad, mida otsite või kuni jõuate 837 00:46:00,410 --> 00:46:03,350 lõpuks oma otsingut ruumi, kus juhtida te ütlete, et te ei suutnud leida 838 00:46:03,350 --> 00:46:06,360 element, et sa olid otsivad. 839 00:46:06,360 --> 00:46:13,450 Ja see võtab parimal pidev ajal mis on 0 1 ja halvimal lineaarne 840 00:46:13,450 --> 00:46:16,070 aega, mis on 0 n. 841 00:46:16,070 --> 00:46:19,250 >> Binary otsing, mis vajab räpane elemente. 842 00:46:19,250 --> 00:46:24,230 Lähed keskel oma elemendid, kas element otsite 843 00:46:24,230 --> 00:46:30,120 on suurem või väiksem kui element et sa oled keskel. 844 00:46:30,120 --> 00:46:36,510 See on suurem, te ütlete, et põhja Teie otsing ruum on oma 845 00:46:36,510 --> 00:46:41,550 praegust asukohta, keskel, ja sa taaskäivitada protsess. 846 00:46:41,550 --> 00:46:46,150 Kui see on väiksem, siis vaata öelda et kura jah, mis toimub? 847 00:46:46,150 --> 00:46:47,400 >> Sihtrühm: [kuuldamatu]? 848 00:46:47,400 --> 00:46:51,000 849 00:46:51,000 --> 00:46:54,260 >> DAN: Jah. 850 00:46:54,260 --> 00:46:58,360 Mingit sorti, mis on õpetanud klass on aus mäng test. 851 00:46:58,360 --> 00:47:01,504 852 00:47:01,504 --> 00:47:04,920 >> [Naer] 853 00:47:04,920 --> 00:47:10,260 >> DAN: Ja see, et sa ei ole olnud seda teha probleem komplekt, see on õiglane 854 00:47:10,260 --> 00:47:12,420 mäng test. 855 00:47:12,420 --> 00:47:15,186 >> Sihtrühm: Kas me läheme selle üle, kuidas to-- 856 00:47:15,186 --> 00:47:17,052 >> DAN: See on läinud üle. 857 00:47:17,052 --> 00:47:20,496 >> SPEAKER 2: Tegelik kood [Kuuldamatu] on study.cs50.net. 858 00:47:20,496 --> 00:47:25,910 859 00:47:25,910 --> 00:47:32,680 Nii et kui te vaatate tava probleem ühendamise omamoodi lehel 860 00:47:32,680 --> 00:47:35,880 study.cs50.net on koodi rakendamise liita omamoodi. 861 00:47:35,880 --> 00:47:38,550 Nii et sa ei pea rakendama ise täna. 862 00:47:38,550 --> 00:47:42,090 Aga veenduge, et saate aru, see pigem kui lihtsalt meeldejätmist see. 863 00:47:42,090 --> 00:47:45,035 >> Sihtrühm: [kuuldamatu]? 864 00:47:45,035 --> 00:47:49,720 >> SPEAKER 2: merge sort lehekülje kohta study.cs50.net on praktikas 865 00:47:49,720 --> 00:47:53,570 probleem, et kui klõpsate kaudu probleem, päris lõpus on 866 00:47:53,570 --> 00:47:56,280 lahendus, mis on nende ühendamise Sorteeri rakendamist. 867 00:47:56,280 --> 00:47:58,510 Aga veenduge, et saate aru, see mitte lihtsalt meeldejätmist see 868 00:47:58,510 --> 00:47:59,760 kopeerida või alla. 869 00:47:59,760 --> 00:48:02,870 870 00:48:02,870 --> 00:48:06,340 >> Sihtrühm: Ja täiesti kehtiva probleem eksam oleks 871 00:48:06,340 --> 00:48:07,990 midagi siin on nimekiri. 872 00:48:07,990 --> 00:48:12,100 Mida see nimekiri näeb välja pärast üks samm valikud sort või 873 00:48:12,100 --> 00:48:13,330 sisestamise sorti või mis iganes. 874 00:48:13,330 --> 00:48:14,940 Üks täis iteratsiooni nimekirja. 875 00:48:14,940 --> 00:48:18,530 Nii et isegi kui sa ei jõua, kellel on vaja kood, sa pead aru saama, et 876 00:48:18,530 --> 00:48:20,440 piisavalt teada, kuidas see läheb tuleb muutes selle massiivi. 877 00:48:20,440 --> 00:48:24,144 878 00:48:24,144 --> 00:48:25,394 >> DAN: See on see minu jaoks. 879 00:48:25,394 --> 00:48:30,604 880 00:48:30,604 --> 00:48:32,588 >> [APPLAUSE] 881 00:48:32,588 --> 00:49:06,316 882 00:49:06,316 --> 00:49:07,410 >> LUCAS: Hei kõigile. 883 00:49:07,410 --> 00:49:08,390 Minu nimi on Lucas. 884 00:49:08,390 --> 00:49:16,840 Ma lähen rääkida rekursioon, kõik kehvasti, et me oleme õppinud, ja 885 00:49:16,840 --> 00:49:18,050 natuke kõik suunanäitajaks. 886 00:49:18,050 --> 00:49:18,740 OK? 887 00:49:18,740 --> 00:49:20,340 Nii et kõigepealt rekursioon. 888 00:49:20,340 --> 00:49:22,951 Mis tähendab see, et funktsioon on rekursiivne? 889 00:49:22,951 --> 00:49:24,675 >> Sihtrühm: nimetab ennast. 890 00:49:24,675 --> 00:49:26,500 >> LUCAS: OK, nimetab ennast, jah. 891 00:49:26,500 --> 00:49:27,700 Nii nagu see pilt, näiteks. 892 00:49:27,700 --> 00:49:30,280 See on nagu pildi sees kohta pilt ja nii edasi. 893 00:49:30,280 --> 00:49:35,740 Nii näiteks saab peate-- Dan et rääkisin binaarne otsing. 894 00:49:35,740 --> 00:49:41,840 Üks viis, kuidas binaarne otsing on kirjutan on see, et sa oled 895 00:49:41,840 --> 00:49:43,130 püüdes leida number. 896 00:49:43,130 --> 00:49:44,250 Nii et te lähete keskel. 897 00:49:44,250 --> 00:49:47,130 Ja siis vaadake, kui numbrid on aastal vasakul ja paremal. 898 00:49:47,130 --> 00:49:49,650 >> Ja siis, kui sa teada, number on saab olema vasakul, see on sama 899 00:49:49,650 --> 00:49:53,340 asja nagu teed otsing uuesti, kuid just vasakul nimekirjas. 900 00:49:53,340 --> 00:49:57,350 Nii see on, kuidas see kõlab nagu see on rekursiivne. 901 00:49:57,350 --> 00:50:01,870 Nii et miks te poisid on rekursiivne lahendus merge sort. 902 00:50:01,870 --> 00:50:04,270 >> OK, nii et siin on näide. 903 00:50:04,270 --> 00:50:07,280 Ütleme, et ma tahan, et valida kõiki numbreid 1 kuni n. 904 00:50:07,280 --> 00:50:13,790 Ma ei mõista, et summa n number on n pluss n miinus 1 kuni 1. 905 00:50:13,790 --> 00:50:17,810 Aga siis, kui ma vaatan n miinus 1 pluss n miinus 2 pluss 1, mis on sama 906 00:50:17,810 --> 00:50:20,680 asja nagu liidetakse numbrid kuni n miinus 1. 907 00:50:20,680 --> 00:50:25,890 Nii et ma ei saa öelda, summa on võrdne summaga võrdub n pluss summa n miinus 1. 908 00:50:25,890 --> 00:50:28,010 Kas on mõtet? 909 00:50:28,010 --> 00:50:32,630 >> Ja ma ka oleks midagi nn aluspõhimõtted, mis seisneb selles, et 910 00:50:32,630 --> 00:50:37,440 summa arvuga kuni nulli oleks null. 911 00:50:37,440 --> 00:50:42,770 Seega niipea, kui ma saan number null, ma saan lugedes. 912 00:50:42,770 --> 00:50:45,330 Kas on mõtet? 913 00:50:45,330 --> 00:50:48,120 >> Nii et siin on näide sellest, kuidas Võin seda rakendama. 914 00:50:48,120 --> 00:50:49,860 Nii et mul on see funktsioon mõned. 915 00:50:49,860 --> 00:50:51,700 See võtab täisarv n. 916 00:50:51,700 --> 00:50:56,300 Nii et siin ma kõigepealt kontrollida, kui n on väiksem või võrdne nulliga. 917 00:50:56,300 --> 00:51:00,310 Nii et kui see on väiksem või võrdne nulliga, I tagastab null, mis on meie baasi puhul. 918 00:51:00,310 --> 00:51:05,690 Muidu ma ei saa lihtsalt tagasi n pluss summa numbritega 919 00:51:05,690 --> 00:51:07,190 üks n miinus üks. 920 00:51:07,190 --> 00:51:09,360 Mõtet? 921 00:51:09,360 --> 00:51:10,100 OK. 922 00:51:10,100 --> 00:51:11,610 >> Nii et siin on, kuidas see välja näeb. 923 00:51:11,610 --> 00:51:15,260 Sul on summa 2 võrdsete 2 pluss summa 1. 924 00:51:15,260 --> 00:51:18,930 Ja mõned 1 on 1 pluss summa 0, mis on 0. 925 00:51:18,930 --> 00:51:20,216 Mõtet? 926 00:51:20,216 --> 00:51:25,342 Nii et kui me vaatame korstnat oma programm on see, mida ta näeb. 927 00:51:25,342 --> 00:51:26,820 >> Esiteks, meil on peamine funktsioon. 928 00:51:26,820 --> 00:51:30,320 Ja siis peamine funktsioon nimetatakse summa 2. 929 00:51:30,320 --> 00:51:36,690 Ja siis summa 2 läheb öelda, oh, summa 2 võrdub 2 pluss summa üks. 930 00:51:36,690 --> 00:51:39,460 Nii lisan summa 1 kuni pinu. 931 00:51:39,460 --> 00:51:43,860 Ja summa 1 läheb helistada summa 0, mis on ka kavatse lisada 932 00:51:43,860 --> 00:51:44,630 korstnat. 933 00:51:44,630 --> 00:51:49,240 Ja siis kõik need need, mis on üksteise peale tagastama 934 00:51:49,240 --> 00:51:52,020 enne teisi ones saab edasi. 935 00:51:52,020 --> 00:51:56,240 >> Nii näiteks, siin summa 0, Esiteks läheb tagasi 0. 936 00:51:56,240 --> 00:51:58,320 Ja siis valida summa 1. 937 00:51:58,320 --> 00:52:00,850 Siis summa 1 läheb tagasi 1 kuni summa 2. 938 00:52:00,850 --> 00:52:03,900 Ja lõpuks, summa 2 läheb tagasi 3 esilehele. 939 00:52:03,900 --> 00:52:05,320 Kas on mõtet? 940 00:52:05,320 --> 00:52:09,496 >> See on tõesti oluline mõista, kuidas stack töötab ja proovida 941 00:52:09,496 --> 00:52:11,980 vaata, kas see on mõistlik. 942 00:52:11,980 --> 00:52:13,260 OK, nii sorteerimine. 943 00:52:13,260 --> 00:52:16,170 Miks on sorteerimine oluline, kõigepealt? 944 00:52:16,170 --> 00:52:18,260 Miks me peaks hoolima? 945 00:52:18,260 --> 00:52:20,310 Keegi? 946 00:52:20,310 --> 00:52:20,695 Anna mulle näiteks? 947 00:52:20,695 --> 00:52:21,040 Jah? 948 00:52:21,040 --> 00:52:22,968 >> Sihtrühm: [kuuldamatu]. 949 00:52:22,968 --> 00:52:24,700 >> LUCAS: Jah, OK. 950 00:52:24,700 --> 00:52:26,090 Nii saate otsida tõhusamalt. 951 00:52:26,090 --> 00:52:28,580 See on hea viis. 952 00:52:28,580 --> 00:52:32,462 Nii näiteks on meil palju asju, tegelikult meie elus, et 953 00:52:32,462 --> 00:52:32,920 on järjestatud. 954 00:52:32,920 --> 00:52:34,830 Näiteks sõnaraamatud. 955 00:52:34,830 --> 00:52:39,210 >> See on väga oluline, et kõik sõnad mingi Selleks, et me 956 00:52:39,210 --> 00:52:41,970 pääseb lihtsalt. 957 00:52:41,970 --> 00:52:43,280 Nii et see, millest ta räägib. 958 00:52:43,280 --> 00:52:45,530 Võite otsida tõhusamalt. 959 00:52:45,530 --> 00:52:48,740 Mõtle, kui raske see oleks, sõnastik, kus sõnad on 960 00:52:48,740 --> 00:52:49,500 juhuslikus järjekorras. 961 00:52:49,500 --> 00:52:53,120 Sa pead vaatama, päris palju, iga sõna, kuni leiate 962 00:52:53,120 --> 00:52:54,720 sõna, mida te otsite. 963 00:52:54,720 --> 00:52:58,710 >> Kui te kasutate Facebook ka, kui sa vaatad oma sõpradele, et sa oled 964 00:52:58,710 --> 00:53:03,540 näeme, et Facebook pane lähemale sõbra peal ones 965 00:53:03,540 --> 00:53:05,470 et sa ei räägi nii palju. 966 00:53:05,470 --> 00:53:08,080 Kui te lähete kõik viis põhja Teie sõber loetelu, sa lähed, et näha, 967 00:53:08,080 --> 00:53:11,250 inimesed, et sa ilmselt isegi ei pidage meeles, et sinu sõbrad. 968 00:53:11,250 --> 00:53:14,590 Ja see on sellepärast, et Facebook kehvasti Sõprade põhjal, kui 969 00:53:14,590 --> 00:53:16,472 lähedal te neid. 970 00:53:16,472 --> 00:53:17,930 >> Nii korraldab andmed. 971 00:53:17,930 --> 00:53:18,450 Samuti Pokemon. 972 00:53:18,450 --> 00:53:21,400 Nii et näete, et kõik Pokemons on numbrid. 973 00:53:21,400 --> 00:53:27,210 Ja see on nagu lihtne juurdepääsutee andmeid. 974 00:53:27,210 --> 00:53:29,050 >> Sihtrühm: Juurdepääs Pokemon. 975 00:53:29,050 --> 00:53:29,890 >> LUCAS: Jah. 976 00:53:29,890 --> 00:53:32,395 >> Sihtrühm: [kuuldamatu]. 977 00:53:32,395 --> 00:53:33,460 >> LUCAS: Yep. 978 00:53:33,460 --> 00:53:35,140 OK, nii et valik omamoodi. 979 00:53:35,140 --> 00:53:41,610 Valik omamoodi läheb valima Väikseim sorteerimata väärtus nimekirja iga 980 00:53:41,610 --> 00:53:43,300 aega iga iteratsiooni. 981 00:53:43,300 --> 00:53:46,800 See on nagu omamoodi, et te oma peaga, kui sa üritad 982 00:53:46,800 --> 00:53:48,430 sorteeri nimekiri käsi. 983 00:53:48,430 --> 00:53:51,990 >> Põhimõtteliselt kõik, mida teha, on teil vaadata võtta väikseima numbriga. 984 00:53:51,990 --> 00:53:54,280 Sa pane see Sorteeritud nimekirja. 985 00:53:54,280 --> 00:53:56,230 Ja siis sa ootad Järgmise väikseim number. 986 00:53:56,230 --> 00:54:00,080 Ja siis edasi teha seda ja nii edasi. 987 00:54:00,080 --> 00:54:04,600 >> Nii et valik omamoodi on põhimõtteliselt sa valida iga kord väikseim 988 00:54:04,600 --> 00:54:05,750 sorteerimata väärtus. 989 00:54:05,750 --> 00:54:10,840 Pane lõpus järjestatud osa nimekirjast. 990 00:54:10,840 --> 00:54:12,370 Ja hoida teeme seda. 991 00:54:12,370 --> 00:54:15,890 Nii et olgem kiiresti näha, millised see näeb välja. 992 00:54:15,890 --> 00:54:19,340 Nii et siin on järjestatud ning sortimata nimekirja. 993 00:54:19,340 --> 00:54:23,350 >> Nii järjestatud nimekirja, see on esialgu tühi. 994 00:54:23,350 --> 00:54:26,760 Ja siis ma lähen valima väikseima numbriga, mis on 2. 995 00:54:26,760 --> 00:54:30,650 Nii et ma saan number 2 ja panin aastal ees nimekirja. 996 00:54:30,650 --> 00:54:34,910 Ja siis ma vaatan järgmiseks väikseim element, mis on 3. 997 00:54:34,910 --> 00:54:37,050 Nii et kui ma panen selle lõpus on järjestatud nimekirja. 998 00:54:37,050 --> 00:54:38,140 Ja siis ma edasi teha. 999 00:54:38,140 --> 00:54:40,040 Ma leian, 4 ja pane see lõpus. 1000 00:54:40,040 --> 00:54:41,360 Leia 5 ja pane see lõpus. 1001 00:54:41,360 --> 00:54:44,830 >> Ja vaadata, kuidas kõik need ajad, et Ma ütlen pane see lõpus on 1002 00:54:44,830 --> 00:54:46,850 Põhimõtteliselt vahetada kaks väärtust. 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 Ja siis viimane, sa lihtsalt veel üks element. 1006 00:54:52,825 --> 00:54:55,870 Nii et see on juba järjestatud. 1007 00:54:55,870 --> 00:54:57,800 >> OK, nii sisestamise omamoodi. 1008 00:54:57,800 --> 00:55:03,180 Insertion Sort sa lähed on ka et asi, millel on järjestatud ja 1009 00:55:03,180 --> 00:55:04,690 sorteerimata nimekirja. 1010 00:55:04,690 --> 00:55:14,540 Ainuke asi on see, et iga kord, kui olete lisatud element järjestatud 1011 00:55:14,540 --> 00:55:18,170 nimekiri, sa lihtsalt vali element, mis ees on sorteerimata nimekirja. 1012 00:55:18,170 --> 00:55:20,880 Ja siis sa lähed leida, mida positsioon peaks olema sorteeritud 1013 00:55:20,880 --> 00:55:22,300 osa nimekirjast. 1014 00:55:22,300 --> 00:55:25,840 >> Vaatame, mis see nii on see on mõttekam. 1015 00:55:25,840 --> 00:55:29,360 Nii et esialgu näiteks Püüan sisestada number kolm 1016 00:55:29,360 --> 00:55:30,680 Sorteeritud nimekirja osana. 1017 00:55:30,680 --> 00:55:31,800 Nii et nimekiri ei ole midagi. 1018 00:55:31,800 --> 00:55:34,160 Nii et ma ei saa lihtsalt panna number 3. 1019 00:55:34,160 --> 00:55:37,480 >> Nüüd, ma tahan, et lisada number 5 Sorteeritud osa nimekirjast. 1020 00:55:37,480 --> 00:55:38,900 Nii et ma vaatan number 5. 1021 00:55:38,900 --> 00:55:40,450 Märkan, et see on suurem kui 3. 1022 00:55:40,450 --> 00:55:41,980 Nii et ma tean, et see peab olema pärast 3. 1023 00:55:41,980 --> 00:55:44,100 Nii et panin 3 ja 5. 1024 00:55:44,100 --> 00:55:45,940 >> Siis ma tahan, et sisestada number 2. 1025 00:55:45,940 --> 00:55:51,630 Märkan, et number 2 on tegelikult viimane siis nii 3 ja 5. 1026 00:55:51,630 --> 00:55:54,580 Nii et ma tegelikult panna see kõik kuidas alguses nimekirja. 1027 00:55:54,580 --> 00:55:59,030 Nii et ma pean, selline, suunata kõik elementide järjestatud nimekiri, et ma saaks 1028 00:55:59,030 --> 00:56:01,970 teha ruumi number 2. 1029 00:56:01,970 --> 00:56:03,160 >> Siis ma näen number 6. 1030 00:56:03,160 --> 00:56:05,450 Ma näen, et see peaks olema pärast 5. 1031 00:56:05,450 --> 00:56:06,240 Nii et ma panin selle sinna. 1032 00:56:06,240 --> 00:56:07,965 Ja lõpuks, ma vaatan number 4. 1033 00:56:07,965 --> 00:56:11,030 Ja märkan see peaks olema vahemikus 3 ja 5. 1034 00:56:11,030 --> 00:56:14,870 Ja siis panin selle sinna ja nihe kõik muud elemendid. 1035 00:56:14,870 --> 00:56:16,120 Mõtet? 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 Nii mull sorteerida on põhimõtteliselt mida sa oled läheb tegema-- me nimetame seda mull 1039 00:56:25,730 --> 00:56:30,113 Sorteeri sest sa lähed läbi list-- see on tegelikult parem, kui ma lihtsalt näidata 1040 00:56:30,113 --> 00:56:32,300 soovid see-- 1041 00:56:32,300 --> 00:56:35,030 ja sa lähed võrrelda külgneva numbrid. 1042 00:56:35,030 --> 00:56:38,410 Ja sa lähed vahetada oma seisukohti, kui nad ei ole 1043 00:56:38,410 --> 00:56:39,190 õiges järjekorras. 1044 00:56:39,190 --> 00:56:42,570 >> Ühesõnaga, mis läheb juhtuda, on siin näiteks 1045 00:56:42,570 --> 00:56:44,160 sul on 8 ja 6. 1046 00:56:44,160 --> 00:56:47,270 Sa tead, et sorteeritud tellimus tegelikult on 6 ja 5, eks? 1047 00:56:47,270 --> 00:56:49,540 Nii et sa lähed, et vahetada tellimusi. 1048 00:56:49,540 --> 00:56:51,370 Siis ma näen, 8 ja 4 siin. 1049 00:56:51,370 --> 00:56:52,250 Ja ma teen sama asja. 1050 00:56:52,250 --> 00:56:53,400 Ma vahetada uuesti. 1051 00:56:53,400 --> 00:56:55,070 Ja lõpuks, 2 ja 8. 1052 00:56:55,070 --> 00:56:56,670 Ma ka vahetada neid. 1053 00:56:56,670 --> 00:57:01,690 >> Seda nimetatakse Bubble Sort sest pärast iga iteratsiooni, tegelikult, 1054 00:57:01,690 --> 00:57:05,910 suurim arv nimekirjas saab kõik viis lõpuks nimekirja. 1055 00:57:05,910 --> 00:57:06,940 Kas on mõtet? 1056 00:57:06,940 --> 00:57:11,880 Sest see hoiab see vahetada ning selle liigutamine paremale. 1057 00:57:11,880 --> 00:57:14,440 >> OK, nii et see on teise iteratsiooni. 1058 00:57:14,440 --> 00:57:17,200 Oleks sama asi. 1059 00:57:17,200 --> 00:57:20,190 Ma teen ühe swap ja Seejärel viimane. 1060 00:57:20,190 --> 00:57:23,290 Ma, et ei ole vahetustehingud ja nimekiri on sorteeritud. 1061 00:57:23,290 --> 00:57:27,460 Nii Bubble Sort, me põhimõtteliselt hoida läbimas nimekiri ja vahetada 1062 00:57:27,460 --> 00:57:32,310 asjad kuni märkan, et ma ei teinud iga vahetustehingute teed, et korduse mis 1063 00:57:32,310 --> 00:57:34,270 tähendab, et nimekiri on juba järjestatud. 1064 00:57:34,270 --> 00:57:35,520 Mõtet? 1065 00:57:35,520 --> 00:57:38,400 1066 00:57:38,400 --> 00:57:40,870 >> Räägime natuke umbes sõiduaega. 1067 00:57:40,870 --> 00:57:45,165 Nii et te poisid mäletan Big O, O, ja Theta? 1068 00:57:45,165 --> 00:57:49,290 1069 00:57:49,290 --> 00:57:50,990 Jah? 1070 00:57:50,990 --> 00:57:53,070 OK, mis on Big O kõigepealt? 1071 00:57:53,070 --> 00:57:54,315 >> Sihtrühm: [kuuldamatu]. 1072 00:57:54,315 --> 00:57:59,070 >> LUCAS: Jah, seda nimetatakse halvima runtime, mis tähendab lihtsalt, et see on 1073 00:57:59,070 --> 00:58:03,470 kui palju te ootate programm võtta joosta. 1074 00:58:03,470 --> 00:58:04,910 Nagu, nii of-- 1075 00:58:04,910 --> 00:58:06,660 Selles juhul-- n. 1076 00:58:06,660 --> 00:58:09,150 Elementide arvu nimekiri halvimal juhul. 1077 00:58:09,150 --> 00:58:12,520 Like, halvimal võimalikul. 1078 00:58:12,520 --> 00:58:17,100 >> Nii Bubble Sort näiteks meil Big O n ruut. 1079 00:58:17,100 --> 00:58:20,580 Miks me peame seda? 1080 00:58:20,580 --> 00:58:24,716 Miks on Bubble Sort Big O n ruut? 1081 00:58:24,716 --> 00:58:27,614 >> Sihtrühm: [kuuldamatu]. 1082 00:58:27,614 --> 00:58:35,670 >> LUCAS: Jah, halvimal juhul saab mis ma pean tegema, n iteratsiooni. 1083 00:58:35,670 --> 00:58:39,260 Nii et iga iteratsiooni läheb tuua suurima elemendi lõppu 1084 00:58:39,260 --> 00:58:40,290 nimekirja. 1085 00:58:40,290 --> 00:58:44,230 Nii et halvimal juhul on see, et mul on mida teha, et asi n korda. 1086 00:58:44,230 --> 00:58:48,550 Ja kõik need ajad, ma pean teha n vahetustehinguid, sest mul on võrrelda 1087 00:58:48,550 --> 00:58:49,870 iga kahe elemendi. 1088 00:58:49,870 --> 00:58:53,730 Nii et miks see on n ruudus sest see on n korda n. 1089 00:58:53,730 --> 00:59:00,120 >> Siis valiku sort on ka n ruut sest iga iteratsiooni, ma pean 1090 00:59:00,120 --> 00:59:02,650 vaadata iga element aastal nimekirja. 1091 00:59:02,650 --> 00:59:04,980 Ja siis leida väikseim, mis tähendab, et ma pean 1092 00:59:04,980 --> 00:59:06,130 vaadata läbi n elementi. 1093 00:59:06,130 --> 00:59:11,750 Ja mida ma pean tegema, et n korda, sest Mul on valida, kas kõik n elementi. 1094 00:59:11,750 --> 00:59:18,273 >> Sisestamise sort on ka n ruut sest halvimal juhul teeb 1095 00:59:18,273 --> 00:59:20,950 olla üks, ma pean sisestada n numbrid, eks? 1096 00:59:20,950 --> 00:59:22,765 Nii et ma juba tean, et ma lähen on n iteratsiooni. 1097 00:59:22,765 --> 00:59:25,466 1098 00:59:25,466 --> 00:59:29,840 Kuid kõik need numbrid, kui mul oleks vaatama kõik numbrid 1099 00:59:29,840 --> 00:59:34,380 järjestatud nimekiri ja pane see kõik viis aastal ees, mis on n ruudu 1100 00:59:34,380 --> 00:59:36,230 sest see on n korda n uuesti. 1101 00:59:36,230 --> 00:59:38,280 Mõtet? 1102 00:59:38,280 --> 00:59:41,512 Aga omega? 1103 00:59:41,512 --> 00:59:42,886 >> Sihtrühm: [kuuldamatu]. 1104 00:59:42,886 --> 00:59:44,620 >> LUCAS: See on parim stsenaarium. 1105 00:59:44,620 --> 00:59:48,810 Nii et see on nagu, et palju kordi, sorteerimine, parimal juhul on 1106 00:59:48,810 --> 00:59:50,660 Kui loend on juba sorteeritud. 1107 00:59:50,660 --> 00:59:52,670 Nii et sa tõesti ei pea midagi teha. 1108 00:59:52,670 --> 00:59:56,290 Bubble Sort on parim stsenaariumi korral n. 1109 00:59:56,290 --> 00:59:58,820 Kas te teate, miks? 1110 00:59:58,820 --> 01:00:00,620 >> Sihtrühm: [kuuldamatu]. 1111 01:00:00,620 --> 01:00:05,640 >> LUCAS: Jah, kui teil jälgida kas andmed suhe olnud vahetustehinguid või 1112 01:00:05,640 --> 01:00:10,533 ei, kui teil on midagi seadistada tõsi, kui seal oli iteratsiooni, kui 1113 01:00:10,533 --> 01:00:15,140 nimekiri on juba valmis, põhimõtteliselt Mis juhtub on ma lähen 1114 01:00:15,140 --> 01:00:17,890 Proovige vahetada iga kahe naaberelemendid. 1115 01:00:17,890 --> 01:00:19,920 Ma näen, et puuduvad vahetustehinguid. 1116 01:00:19,920 --> 01:00:21,230 Ja ma lihtsalt tagasi kohe. 1117 01:00:21,230 --> 01:00:24,240 >> Nii et see tähendab, et ma lihtsalt pidin nimekiri läbi üks kord. 1118 01:00:24,240 --> 01:00:28,990 Nii et see on n, sest ma vaatan at n elementi. 1119 01:00:28,990 --> 01:00:30,930 Miks valimine omamoodi n ruutu? 1120 01:00:30,930 --> 01:00:35,150 1121 01:00:35,150 --> 01:00:45,520 >> Jah, isegi kui nimekiri on järjestatud jaoks iga iteratsiooni valikut sort, I 1122 01:00:45,520 --> 01:00:47,590 on valida minimaalne element. 1123 01:00:47,590 --> 01:00:49,980 See tähendab, et ma pean välja otsima üldse elementi sortimata 1124 01:00:49,980 --> 01:00:53,350 nimekirja ja leida minimaalne iga iteratsiooni. 1125 01:00:53,350 --> 01:00:54,600 Kas on mõtet? 1126 01:00:54,600 --> 01:00:56,880 1127 01:00:56,880 --> 01:01:04,690 >> Ja sisestamise mõõk on N sest nii, et ma üritan sisestada 1128 01:01:04,690 --> 01:01:09,320 numbrid ja kõik numbrid, kui ma proovige neid sisestada, ma näen, et nad 1129 01:01:09,320 --> 01:01:10,510 on õiges asendis. 1130 01:01:10,510 --> 01:01:15,120 Ma ei pea minema kontrollima kõiki teisi arvuga sortimata nimekirja. 1131 01:01:15,120 --> 01:01:17,170 Nii et miks see on n. 1132 01:01:17,170 --> 01:01:19,480 Mõtet? 1133 01:01:19,480 --> 01:01:21,035 Ja mis on teeta? 1134 01:01:21,035 --> 01:01:23,410 >> Sihtrühm: [kuuldamatu]. 1135 01:01:23,410 --> 01:01:24,380 >> LUCAS: Mida, vabandust? 1136 01:01:24,380 --> 01:01:24,960 Ütle seda uuesti. 1137 01:01:24,960 --> 01:01:25,666 >> Sihtrühm: [kuuldamatu]. 1138 01:01:25,666 --> 01:01:26,490 >> LUCAS: Täpselt. 1139 01:01:26,490 --> 01:01:31,280 Nii et näete, et ainult valiku salvestatud Merge sort on teetast. 1140 01:01:31,280 --> 01:01:39,920 Ja see on sellepärast, et sul on ainult beta kui mõlemad Big O ja Omega on sama. 1141 01:01:39,920 --> 01:01:41,520 OK. 1142 01:01:41,520 --> 01:01:44,210 Ja lõpuks, liita omamoodi on log n. 1143 01:01:44,210 --> 01:01:48,910 >> Ja siis, kui Dan ütles, Merge sort on selline nagu samamoodi, et 1144 01:01:48,910 --> 01:01:50,320 sa binaarne otsing. 1145 01:01:50,320 --> 01:01:53,530 Nii saad nimekirja. 1146 01:01:53,530 --> 01:01:55,170 Ja sa lähed pooleks. 1147 01:01:55,170 --> 01:02:00,580 Ja siis lõigata väiksemates pooleks. 1148 01:02:00,580 --> 01:02:01,730 Ja siis need ühendada. 1149 01:02:01,730 --> 01:02:02,960 Te meeles pidada, eks? 1150 01:02:02,960 --> 01:02:04,960 OK, nagu ta ütles. 1151 01:02:04,960 --> 01:02:08,330 >> OK, viiteid. 1152 01:02:08,330 --> 01:02:11,078 Mis on pointer? 1153 01:02:11,078 --> 01:02:12,050 >> Sihtrühm: [kuuldamatu]. 1154 01:02:12,050 --> 01:02:12,820 >> LUCAS: aadress. 1155 01:02:12,820 --> 01:02:13,720 OK. 1156 01:02:13,720 --> 01:02:18,530 Ma tean, et David näitab kamp videod Binky ja asjad juhtides 1157 01:02:18,530 --> 01:02:19,080 üksteist. 1158 01:02:19,080 --> 01:02:22,960 Aga mulle meeldib mõelda viiteid pelgalt aadress. 1159 01:02:22,960 --> 01:02:26,110 Nii et see on muutuja, mis läheb salvestada aadressi. 1160 01:02:26,110 --> 01:02:31,940 >> Nii et see on lihtsalt see eriline muutuja see on neli baiti. 1161 01:02:31,940 --> 01:02:36,550 Pea meeles, et kursor midagi on alati neli baiti meie 32-bit 1162 01:02:36,550 --> 01:02:39,370 masin nii juhtumi seadet. 1163 01:02:39,370 --> 01:02:41,920 1164 01:02:41,920 --> 01:02:47,050 Ja see lihtsalt on asukoha Muutuva sees on. 1165 01:02:47,050 --> 01:02:50,240 >> OK, nii et seal on see mälu, põhimõtteliselt. 1166 01:02:50,240 --> 01:02:57,420 Nii iga ploki mälu on tegelikult etikett, mis on aadress 1167 01:02:57,420 --> 01:02:58,890 slotty mälu. 1168 01:02:58,890 --> 01:03:02,370 See tähendab, et ma ei ole osuti osutab 1169 01:03:02,370 --> 01:03:03,380 kõik need aadressid. 1170 01:03:03,380 --> 01:03:09,930 Nii et põhjus, miks me kasutame osuti on kui mul on meeles pidada, asukoha 1171 01:03:09,930 --> 01:03:12,300 et konkreetse muutuja on mälu. 1172 01:03:12,300 --> 01:03:16,560 >> Ja te meeles pidama, et üks neist juhtudel oli, kui mul on funktsioon 1173 01:03:16,560 --> 01:03:20,820 kui mul on tõesti tahan, et sa swap reaalarvud, ma tegelikult 1174 01:03:20,820 --> 01:03:22,110 saatma pointer. 1175 01:03:22,110 --> 01:03:23,460 Ei muutuja. 1176 01:03:23,460 --> 01:03:25,200 Kas te meeles pidama, et? 1177 01:03:25,200 --> 01:03:26,450 Erinevus between-- 1178 01:03:26,450 --> 01:03:33,350 1179 01:03:33,350 --> 01:03:34,120 Mis on nimi? 1180 01:03:34,120 --> 01:03:36,010 Üleskutse väärtusest ja helistaja viidates, eks? 1181 01:03:36,010 --> 01:03:36,840 >> OK, jah. 1182 01:03:36,840 --> 01:03:38,330 Nii kõne maksumus. 1183 01:03:38,330 --> 01:03:43,570 Kui sa lihtsalt saata muutuja toimida sa lihtsalt saata raha. 1184 01:03:43,570 --> 01:03:45,610 Nii et te tegelikult saates koopia muutuja. 1185 01:03:45,610 --> 01:03:49,720 Ja sinu programm ei hooli Aga kui sama muutuja tegelikult 1186 01:03:49,720 --> 01:03:51,650 teeb koopia. 1187 01:03:51,650 --> 01:03:56,330 >> Ja kutsudes viitega tähendab, et Ma tegelikult saates 1188 01:03:56,330 --> 01:03:57,550 pointer muutuja. 1189 01:03:57,550 --> 01:04:00,970 Nii et see tähendab, et ma saadan asukoht muutuja. 1190 01:04:00,970 --> 01:04:04,440 Nii tajuvad mul asukohast muutuja, kui ma kutsun funktsiooni 1191 01:04:04,440 --> 01:04:09,700 koos suunanäitajaks, ma olen võimeline tegelikult muuta andmeid, mis oli peamine. 1192 01:04:09,700 --> 01:04:12,050 Mõtet? 1193 01:04:12,050 --> 01:04:17,560 >> Kuigi, osuti on koopia, osuti on veel reaalne aadress 1194 01:04:17,560 --> 01:04:20,090 muutuja, et ma tahan muuta. 1195 01:04:20,090 --> 01:04:21,920 Mõtet? 1196 01:04:21,920 --> 01:04:24,290 >> Nii et luua viiteid. 1197 01:04:24,290 --> 01:04:28,410 Pea meeles, et osuti on alati tüüp, et ta sihib 1198 01:04:28,410 --> 01:04:29,890 ja siis täht. 1199 01:04:29,890 --> 01:04:31,030 Ja siis paned nime. 1200 01:04:31,030 --> 01:04:35,765 Seega pidage meeles, et iga kord, kui teil on mis iganes täht, see on nagu kursor 1201 01:04:35,765 --> 01:04:38,990 mis tahes muutuja tüüp, et teil oli. 1202 01:04:38,990 --> 01:04:42,850 >> Nii et siin linnas, näiteks, et see on osuti ja täisarv. 1203 01:04:42,850 --> 01:04:47,680 Ja siis char star on pointer char star ja nii edasi. 1204 01:04:47,680 --> 01:04:47,960 Jah? 1205 01:04:47,960 --> 01:04:52,710 >> Sihtrühm: Mis siis, kui meil on osuti n täht x. 1206 01:04:52,710 --> 01:04:55,255 Ma tean, mis loob kursor x. 1207 01:04:55,255 --> 01:04:59,432 Kas see ka deklareerida x täisarv? 1208 01:04:59,432 --> 01:05:05,170 >> LUCAS: OK, nii et kui te ütlete, n täht x, sa ei loo viit 1209 01:05:05,170 --> 01:05:06,000 muutuja x. 1210 01:05:06,000 --> 01:05:08,170 Loote pointer nimega x. 1211 01:05:08,170 --> 01:05:09,396 >> Sihtrühm: [kuuldamatu]. 1212 01:05:09,396 --> 01:05:14,250 >> LUCAS: Nii et kui ma ütlen, n täht x, ma olen ütlesid, hei, mälu, ma lähen 1213 01:05:14,250 --> 01:05:16,390 saada üks neid kolme kasti. 1214 01:05:16,390 --> 01:05:20,750 Ja ma ütlen, et see saab olema x, mis on 1215 01:05:20,750 --> 01:05:22,000 läheb osuti. 1216 01:05:22,000 --> 01:05:26,860 1217 01:05:26,860 --> 01:05:30,640 Ja midagi huvitavat viiteid on see, et me ütleme, et nad on 1218 01:05:30,640 --> 01:05:32,620 4 baiti 32-bit masin. 1219 01:05:32,620 --> 01:05:36,320 Ja selle põhjuseks on asjaolu, 4 baiti on 32-bitti. 1220 01:05:36,320 --> 01:05:40,490 >> Ja masinaid, mis on 64 bitti tegelikult on viiteid aadressid 1221 01:05:40,490 --> 01:05:43,480 mis on 64 bitti pikk. 1222 01:05:43,480 --> 01:05:49,820 Nii lihtsalt see suurus aadressid masin on erinev. 1223 01:05:49,820 --> 01:05:52,270 >> Nii Viitamine ja Dereferencing. 1224 01:05:52,270 --> 01:05:54,310 On kaks operaatorit, et te peaksite meeles pidama. 1225 01:05:54,310 --> 01:05:55,450 Esimene on ampersand. 1226 01:05:55,450 --> 01:05:56,810 Teine on staar. 1227 01:05:56,810 --> 01:06:05,060 Ärge saage segaduses, et linnas ja selle Star, sest mäletan, et 1228 01:06:05,060 --> 01:06:06,950 Sel juhul on teil n star. 1229 01:06:06,950 --> 01:06:08,700 >> See on nagu kogu asja koos. 1230 01:06:08,700 --> 01:06:10,720 Ei ole n Space Star. 1231 01:06:10,720 --> 01:06:12,070 Nii et see tähendab, et see tüüp. 1232 01:06:12,070 --> 01:06:14,870 Pea meeles, et kui teil on muutlik täht, sa oled 1233 01:06:14,870 --> 01:06:16,230 Kõne all. 1234 01:06:16,230 --> 01:06:20,540 >> Kui teil on lihtsalt täht ja siis nimi varieeruv, see tähendab, et 1235 01:06:20,540 --> 01:06:24,100 sa dereferencing osuti, mis tähendab, et te vaatate 1236 01:06:24,100 --> 01:06:28,290 pointer, leida aadress on osutades, läheb see aadress, 1237 01:06:28,290 --> 01:06:30,850 ja vaadates, kui teil seal. 1238 01:06:30,850 --> 01:06:34,310 Nii et ma ütlen oma õpilastele, et kui teil on star, siis tuleb mõelda, et see on 1239 01:06:34,310 --> 01:06:36,850 lühend sisu. 1240 01:06:36,850 --> 01:06:39,770 >> Nii et kui teil on osuti ja te teha star pointer, see on 1241 01:06:39,770 --> 01:06:41,720 sisu pointer. 1242 01:06:41,720 --> 01:06:44,580 Nii et te lähete iganes seda osutades ja vaadata pidevalt sisu. 1243 01:06:44,580 --> 01:06:47,730 Ja-märk on sama asja nagu aadress. 1244 01:06:47,730 --> 01:06:52,560 >> Nii et kui mul on muutuv a-- nagu, olgem öelda, et ma tegin int võrdub 3-- 1245 01:06:52,560 --> 01:06:56,900 kui ma tahan leida aadressi, et muutuja mälu, ma ei saa lihtsalt teha 1246 01:06:56,900 --> 01:06:58,240 ampersand. 1247 01:06:58,240 --> 01:07:00,280 Nii et see on aadress. 1248 01:07:00,280 --> 01:07:01,530 Mõtet? 1249 01:07:01,530 --> 01:07:03,790 1250 01:07:03,790 --> 01:07:05,040 >> Nii et siin on näide. 1251 01:07:05,040 --> 01:07:08,370 1252 01:07:08,370 --> 01:07:11,530 See on puudu int b ja int c. 1253 01:07:11,530 --> 01:07:16,520 Nii int võrdub 3 tähendab, et Ma lähen, et mälu. 1254 01:07:16,520 --> 01:07:19,870 Ja ma leida pesa ja pane number 3 siin. 1255 01:07:19,870 --> 01:07:22,200 >> Ja siis int b võrdub 4. 1256 01:07:22,200 --> 01:07:23,100 Ma teen sama asja. 1257 01:07:23,100 --> 01:07:25,840 Mine mälu ja pane number 4 ühes kastid. 1258 01:07:25,840 --> 01:07:27,100 Ja int võrdub 5. 1259 01:07:27,100 --> 01:07:29,740 Leia teine ​​kast ja pane number 5. 1260 01:07:29,740 --> 01:07:36,160 >> Mis siis on see joon teed? n star pa võrdne-märk. 1261 01:07:36,160 --> 01:07:37,800 Nii et kõigepealt n star pa. 1262 01:07:37,800 --> 01:07:39,050 Mida ta teeb? 1263 01:07:39,050 --> 01:07:40,930 1264 01:07:40,930 --> 01:07:42,298 >> Sihtrühm: [kuuldamatu]. 1265 01:07:42,298 --> 01:07:47,890 >> LUCAS: Jah, nii n star pa esiteks kinnitab viit nimetatakse pa. 1266 01:07:47,890 --> 01:07:53,720 Ja siis see määrates väärtuse et osuti olema aadress. 1267 01:07:53,720 --> 01:07:55,790 Nii-märk. 1268 01:07:55,790 --> 01:07:58,510 Siis, kui ma seda teen star pb, mis on star pb? 1269 01:07:58,510 --> 01:08:02,418 1270 01:08:02,418 --> 01:08:03,150 >> Oh, vabandust. 1271 01:08:03,150 --> 01:08:06,330 See on ka puudu. n star pb. 1272 01:08:06,330 --> 01:08:07,905 Ma mõtlen star tk. 1273 01:08:07,905 --> 01:08:11,200 Mul on nii kahju. 1274 01:08:11,200 --> 01:08:11,940 See on sama asi. 1275 01:08:11,940 --> 01:08:16,408 Aga nüüd ma olen hea ar luues pointer et B ja seejärel kursor c. 1276 01:08:16,408 --> 01:08:16,886 Jah? 1277 01:08:16,886 --> 01:08:18,136 >> Sihtrühm: [kuuldamatu]? 1278 01:08:18,136 --> 01:08:25,490 1279 01:08:25,490 --> 01:08:26,670 >> LUCAS: Jah. 1280 01:08:26,670 --> 01:08:32,630 Nii et kui te lähete mälu ja lähete kast, mis on tähis, PA, 1281 01:08:32,630 --> 01:08:37,149 sa oled tegelikult läheb vt aadressi. 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 Jah? 1285 01:08:43,300 --> 01:08:45,605 >> Sihtrühm: [kuuldamatu]? 1286 01:08:45,605 --> 01:08:49,260 >> LUCAS: Jah, osuti on aadress. 1287 01:08:49,260 --> 01:08:50,120 Ära kunagi unusta, et. 1288 01:08:50,120 --> 01:08:52,800 See on nagu kõige olulisem osa kohta vihjeid. 1289 01:08:52,800 --> 01:08:56,180 Seal on hoidmiseks ja aadress mõningal muutuja. 1290 01:08:56,180 --> 01:08:56,890 Midagi veel? 1291 01:08:56,890 --> 01:08:58,370 On veel küsimusi? 1292 01:08:58,370 --> 01:08:59,189 OK. 1293 01:08:59,189 --> 01:09:00,399 >> Nii viiteid ja massiivid. 1294 01:09:00,399 --> 01:09:08,189 Pea meeles, et kui ma teen int massiiv 3, Põhimõtteliselt, mida ma teen on ma olen, kind 1295 01:09:08,189 --> 01:09:12,779 kohta, kuulutab pointer. 1296 01:09:12,779 --> 01:09:18,960 Nii massiiv on selline nagu kursor konkreetse koha mälus, kus ma 1297 01:09:18,960 --> 01:09:21,999 eraldatud kolm teenindusaega täisarvud. 1298 01:09:21,999 --> 01:09:23,430 Kas on mõtet? 1299 01:09:23,430 --> 01:09:30,250 >> Nii et kui ma teen int massiiv 3, mida ma olen teeme, põhimõtteliselt on luua kolm 1300 01:09:30,250 --> 01:09:31,479 pilude mälu. 1301 01:09:31,479 --> 01:09:33,899 Nii et ma lihtsalt leida kolm teenindusajad mälu. 1302 01:09:33,899 --> 01:09:38,810 Nii et kui ma seda teen, siis star massiiv, see Sisuliselt tähendab sisu massiiv, 1303 01:09:38,810 --> 01:09:46,180 mis tähendab, et ma kustutan pointer, ma lähen selle asemel, et see osutab, 1304 01:09:46,180 --> 01:09:47,939 ja panin number üks. 1305 01:09:47,939 --> 01:09:53,729 >> Ja siis, kui ma seda teen star array pluss 1 see on sama asi, mis teeb massiivi 1306 01:09:53,729 --> 01:09:59,690 Sulgudes üks, mis tähendab lihtsalt käin koht, et see osutavad. 1307 01:09:59,690 --> 01:10:03,000 Ja siis pluss 1 marke mind minema ühes asendis. 1308 01:10:03,000 --> 01:10:06,510 Nii et ma lähen seda seisukohta, tegelikult, ja pane number kaks. 1309 01:10:06,510 --> 01:10:10,900 >> Ja siis lõpuks, kui ma massiivi plus 2, ma lähen sinna, kus 1310 01:10:10,900 --> 01:10:11,825 massiivi osutavad. 1311 01:10:11,825 --> 01:10:14,690 Ja siis ma liikuda mälu plokke. 1312 01:10:14,690 --> 01:10:16,240 Ja siis ma pane number kolm siin. 1313 01:10:16,240 --> 01:10:16,600 Jah? 1314 01:10:16,600 --> 01:10:21,400 >> Sihtrühm: Nii star massiiv on lihtsalt öeldes väga esimene punkt. 1315 01:10:21,400 --> 01:10:25,090 Ja võite lisada 1, lihtsalt sellepärast, Me oleme tegelikult alles 1316 01:10:25,090 --> 01:10:27,295 viitamine, et esimene aadressi. 1317 01:10:27,295 --> 01:10:28,545 >> LUCAS: Jah. 1318 01:10:28,545 --> 01:10:32,720 1319 01:10:32,720 --> 01:10:36,020 Miks me näiteks öelda massiivi 0, array 1 ja 2 sõnad? 1320 01:10:36,020 --> 01:10:38,970 1321 01:10:38,970 --> 01:10:42,790 Ma ei ütle, miks sa seda teed 0 1, 2, 3 asemel 1, 2, 3? 1322 01:10:42,790 --> 01:10:46,550 Üks põhjusi on, üks, arvuti programmeerijad eelistavad alustada 1323 01:10:46,550 --> 01:10:47,750 lugedes 0. 1324 01:10:47,750 --> 01:10:52,370 Kaks on, sest kui sa seda teed massiivi 0, see on sama asi, mis teeb massiivi 1325 01:10:52,370 --> 01:10:56,330 pluss 0, mis tähendab, et ma lähen selle seisukoha, ja ma ei ole 1326 01:10:56,330 --> 01:10:59,320 jäta ühtegi mälu plokke. 1327 01:10:59,320 --> 01:11:01,750 Nii et ma ei liigu ühtegi mälu plokke. 1328 01:11:01,750 --> 01:11:02,015 Jah? 1329 01:11:02,015 --> 01:11:03,265 >> Sihtrühm: [kuuldamatu]? 1330 01:11:03,265 --> 01:11:05,928 1331 01:11:05,928 --> 01:11:12,670 >> LUCAS: Nii et ta küsib, mis on vahet tehes 1332 01:11:12,670 --> 01:11:14,000 see või teed malloc. 1333 01:11:14,000 --> 01:11:17,550 Üks erinevusi on, et int massiiv 3 on luua 1334 01:11:17,550 --> 01:11:19,260 massiivi pinu. 1335 01:11:19,260 --> 01:11:23,080 Ja kui ma malloc, see loob hunnik. 1336 01:11:23,080 --> 01:11:25,250 Kas on mõtet? 1337 01:11:25,250 --> 01:11:28,870 >> Niisiis, kuidas malloc tegelikult töötavad? 1338 01:11:28,870 --> 01:11:32,245 Miks me isegi vaja kasutada malloc? 1339 01:11:32,245 --> 01:11:35,730 1340 01:11:35,730 --> 01:11:39,700 Teie koostaja omamoodi arvud välja kõik muutujaid kuulutatud. 1341 01:11:39,700 --> 01:11:44,040 Ja ta loob ruumi kõigile neist virnas. 1342 01:11:44,040 --> 01:11:47,180 Nii et kõik teie muutujad lähevad olla kusagil virnas. 1343 01:11:47,180 --> 01:11:49,460 Nii et siin on keskkonna muutujad. 1344 01:11:49,460 --> 01:11:53,850 >> Ühesõnaga, ruum nende muutujate mälu on jaotatud at 1345 01:11:53,850 --> 01:11:55,080 kompileerimise ajal. 1346 01:11:55,080 --> 01:11:58,790 Nii et see tähendab, et arvuti on teadma kõik need muutujad 1347 01:11:58,790 --> 01:11:59,790 varem. 1348 01:11:59,790 --> 01:12:02,500 See ei pea teadma, mis väärtus sa lähed panna neid. 1349 01:12:02,500 --> 01:12:05,490 Aga ta peab teadma, kuidas palju mälu vajate. 1350 01:12:05,490 --> 01:12:09,380 >> Aga nüüd ütleme, et näiteks loote massiiv või võttes 1351 01:12:09,380 --> 01:12:13,430 string, et te võtate kasutaja. 1352 01:12:13,430 --> 01:12:17,300 Sa ei tea, kui kaua string saab olema, näiteks. 1353 01:12:17,300 --> 01:12:20,600 Nii et sa ei tea täpselt, kui palju mäluplokke te eraldada, eks? 1354 01:12:20,600 --> 01:12:24,120 >> Nii et see ei ole tegelikult mõtet sa öelda panna 100 tähemärki. 1355 01:12:24,120 --> 01:12:26,420 Ja mis siis, kui kasutaja kirjutab 150? 1356 01:12:26,420 --> 01:12:27,670 Sa lähed tuleb kruvitud. 1357 01:12:27,670 --> 01:12:30,160 1358 01:12:30,160 --> 01:12:34,620 >> Ühesõnaga, te ei saa olla kindel, kui palju mälu teil on vaja eraldada 1359 01:12:34,620 --> 01:12:35,960 kui sa kompileerida programmi. 1360 01:12:35,960 --> 01:12:38,240 Sa tead, et on töö aeg. 1361 01:12:38,240 --> 01:12:39,950 Nii et miks sa pead laduma. 1362 01:12:39,950 --> 01:12:47,610 Nii hunnik läheb on mälu et sa eraldamise ajal 1363 01:12:47,610 --> 01:12:50,810 Programmi kestuse töötab. 1364 01:12:50,810 --> 01:12:55,780 >> Nii et põhimõtteliselt, kui sa malloc, mida sa teed eraldab mälu 1365 01:12:55,780 --> 01:13:00,160 runtime, mis tähendab, et sa oled otsustamisel õigus sel hetkel, et sa 1366 01:13:00,160 --> 01:13:02,670 peaks olema, et mälu. 1367 01:13:02,670 --> 01:13:04,210 Nii et kui sa oled eraldamise. 1368 01:13:04,210 --> 01:13:06,430 Kas on mõtet? 1369 01:13:06,430 --> 01:13:11,690 >> Seega pidage meeles, stack on muutujad mis on loodud kompileerimise ajal. 1370 01:13:11,690 --> 01:13:14,560 Ja siis hunnik on muutujad mis on loodud lähete 1371 01:13:14,560 --> 01:13:15,600 koos malloc, näiteks. 1372 01:13:15,600 --> 01:13:16,850 >> Sihtrühm: [kuuldamatu]? 1373 01:13:16,850 --> 01:13:19,179 1374 01:13:19,179 --> 01:13:24,340 >> LUCAS: Nii getString on ei kutsu malloc. 1375 01:13:24,340 --> 01:13:26,710 Lubage mul rääkida malloc ja Ma seletan getString. 1376 01:13:26,710 --> 01:13:32,000 Nii malloc on sama asi kui mälu eraldamise. 1377 01:13:32,000 --> 01:13:34,600 Nii, et see saab eraldada mälu hunnik. 1378 01:13:34,600 --> 01:13:40,010 Ja see läheb tagasi pointer kui see mälu olid eraldatud hetkel. 1379 01:13:40,010 --> 01:13:43,090 >> Nii et kui te teha-- 1380 01:13:43,090 --> 01:13:44,910 siin example-- 1381 01:13:44,910 --> 01:13:45,830 n star pointer. 1382 01:13:45,830 --> 01:13:50,520 Ja siis osuti võrdub malloc suurus tolli korda 10. 1383 01:13:50,520 --> 01:13:52,110 Ma loon pointer. 1384 01:13:52,110 --> 01:13:59,020 Ja siis ma määrates, et kursor väärtus osutiga et malloc 1385 01:13:59,020 --> 01:13:59,680 annab mulle. 1386 01:13:59,680 --> 01:14:04,150 >> Nii et ma palun malloc saab eraldada ruumi 10 täisarvud. 1387 01:14:04,150 --> 01:14:05,390 See, mida ta ütleb. 1388 01:14:05,390 --> 01:14:09,020 Ja malloc annab mulle tagasi kursor selle koha. 1389 01:14:09,020 --> 01:14:11,460 Mõtet? 1390 01:14:11,460 --> 01:14:12,270 OK. 1391 01:14:12,270 --> 01:14:17,940 I ja getString on põhiliselt teed helistage malloc nii et saate eraldada 1392 01:14:17,940 --> 01:14:21,680 mälu jooksul tööaega. 1393 01:14:21,680 --> 01:14:26,460 >> Pea alati meeles, et kontrollida null sest malloc läheb tagasi null 1394 01:14:26,460 --> 01:14:28,200 kui ta ei saa mälu eraldada. 1395 01:14:28,200 --> 01:14:31,660 Oletame, et te küsite naeruväärne mälu. 1396 01:14:31,660 --> 01:14:33,950 Teie arvuti ei kavatse olla võimalik eraldada nii palju. 1397 01:14:33,950 --> 01:14:36,410 >> Nii malloc lihtsalt läheb tagasi null. 1398 01:14:36,410 --> 01:14:42,210 Nii et alati meeles, et vaadata, kas pointer, et sul on malloc on 1399 01:14:42,210 --> 01:14:45,640 null või mitte, sest kui ta on, siis võite tuleb dereferencing osuti ja 1400 01:14:45,640 --> 01:14:48,340 põhjustades pool vigu. 1401 01:14:48,340 --> 01:14:50,930 Ja lõpuks, ärge unustage oma vaba mälu. 1402 01:14:50,930 --> 01:14:57,800 1403 01:14:57,800 --> 01:15:00,560 >> Malloc loob mälu hunnik. 1404 01:15:00,560 --> 01:15:03,436 Ja sul on vaba mälu enne programmi lõppemist. 1405 01:15:03,436 --> 01:15:05,370 OK, see on kõik minu jaoks. 1406 01:15:05,370 --> 01:15:07,900 Vabandame, Rob. 1407 01:15:07,900 --> 01:15:07,950 Tänan. 1408 01:15:07,950 --> 01:15:09,878 >> [APPLAUSE] 1409 01:15:09,878 --> 01:15:12,679 >> LUCAS: Kõik viimasel küsimused enne Rob on? 1410 01:15:12,679 --> 01:15:13,138 Ei? 1411 01:15:13,138 --> 01:15:13,597 Jah? 1412 01:15:13,597 --> 01:15:15,892 >> Sihtrühm: ma ei näe Selle ühe online. 1413 01:15:15,892 --> 01:15:17,269 Kas olete laadinud seda veel? 1414 01:15:17,269 --> 01:15:19,106 >> LUCAS: Ma arvan, et Dave on üleslaadimisel see varsti. 1415 01:15:19,106 --> 01:15:19,880 >> DAVE: See saab olema postitatud. 1416 01:15:19,880 --> 01:15:20,310 >> LUCAS: See oleks võrgus. 1417 01:15:20,310 --> 01:15:21,175 >> Sihtrühm: See oleneb. 1418 01:15:21,175 --> 01:15:22,090 >> LUCAS: See toimub? 1419 01:15:22,090 --> 01:15:23,157 OK. 1420 01:15:23,157 --> 01:15:23,644 Jah? 1421 01:15:23,644 --> 01:15:27,053 >> Sihtrühm: [kuuldamatu]? 1422 01:15:27,053 --> 01:15:30,285 >> LUCAS: Jah, sa peaksid vabastama kõik mälu, mis on pandud hunnik. 1423 01:15:30,285 --> 01:15:31,535 >> Sihtrühm: [kuuldamatu]? 1424 01:15:31,535 --> 01:15:34,518 1425 01:15:34,518 --> 01:15:36,160 >> LUCAS: Jah. 1426 01:15:36,160 --> 01:15:39,980 Iga kord, kui teil on kultuuri malloc, siis peaks olema kultuur tasuta 1427 01:15:39,980 --> 01:15:42,640 pärast te lõpetate selle muutuja. 1428 01:15:42,640 --> 01:15:44,800 Nii malloc ja vaba on alati koos. 1429 01:15:44,800 --> 01:15:45,410 Nende parimad sõbrad. 1430 01:15:45,410 --> 01:15:46,720 Jah. 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: Ma lähen kiiresti. 1434 01:15:56,850 --> 01:16:00,466 Ja ka video pannakse üles. 1435 01:16:00,466 --> 01:16:01,716 Mul on mic. 1436 01:16:01,716 --> 01:16:24,060 1437 01:16:24,060 --> 01:16:26,230 >> OK, nii et nädalas viis asju. 1438 01:16:26,230 --> 01:16:27,970 Esimene asi, mis meil on pinu. 1439 01:16:27,970 --> 01:16:33,390 Seega pidage meeles, et seal on ainult üks korstnat kaadrit aktiivne funktsioon kõne. 1440 01:16:33,390 --> 01:16:34,710 Me näeme, et teine. 1441 01:16:34,710 --> 01:16:37,850 Ja ka meeles pidama, mida tegelikult läheb Iga freimi ei kavatse olla 1442 01:16:37,850 --> 01:16:41,880 kohalikud muutujad meie funktsioonid, väiteid, mis on läbinud meie 1443 01:16:41,880 --> 01:16:43,880 funktsioonid koos paari teisi asju, mida tegelikult ei 1444 01:16:43,880 --> 01:16:45,260 pea muretsema. 1445 01:16:45,260 --> 01:16:50,950 >> Nii et siin on näiteks programm, kus, teate, peamine on printfing tulu 1446 01:16:50,950 --> 01:16:52,830 väärtus foo 4. 1447 01:16:52,830 --> 01:16:57,930 suva lihtsalt läheb tagasi väärtus bar 4 komaga 6. 1448 01:16:57,930 --> 01:17:02,380 Ja baar läheb määrata mõned kohalikud muutuja n võrdub 4 korda 6. 1449 01:17:02,380 --> 01:17:03,920 Ja siis tagasi n. 1450 01:17:03,920 --> 01:17:09,130 >> Nii et vaatame, korstna kogu tegelik iteratsiooni selle programmi. 1451 01:17:09,130 --> 01:17:10,500 Nii et alt meie pinu. 1452 01:17:10,500 --> 01:17:12,620 Pea meeles, et stack üles kasvab. 1453 01:17:12,620 --> 01:17:15,370 Nii et alt meie virna me on freimi jaoks peamine. 1454 01:17:15,370 --> 01:17:17,000 Kui programm käivitub, peamised alati saab olema 1455 01:17:17,000 --> 01:17:18,560 alt meie pinu. 1456 01:17:18,560 --> 01:17:20,880 >> Ja mis on sees meie freimi jaoks peamine? 1457 01:17:20,880 --> 01:17:23,810 Nii et kuigi ei ole kohalik muutujate peamine, nagu ma enne ütlesin, 1458 01:17:23,810 --> 01:17:29,670 oleme argc ja rgv võtavad ruumi sees peamine freimi. 1459 01:17:29,670 --> 01:17:33,260 Nii et peamine on nüüd läheb helistada funktsiooni foo. 1460 01:17:33,260 --> 01:17:35,125 Ja see tähendab, foo läheb saada oma freimi. 1461 01:17:35,125 --> 01:17:36,970 >> Nüüd oleme sees funktsiooni foo. 1462 01:17:36,970 --> 01:17:38,610 Ja mida on vaja minna suva on freimi? 1463 01:17:38,610 --> 01:17:41,100 Noh, foo on argument n. 1464 01:17:41,100 --> 01:17:45,440 Ja n on 4, sest see on, mida Peamised möödub nagu foo argument. 1465 01:17:45,440 --> 01:17:48,490 >> Nüüd foo läheb helistada baar. 1466 01:17:48,490 --> 01:17:52,070 Mis on baar läheb on sees tema "freimi? 1467 01:17:52,070 --> 01:17:55,610 See on x on võrdne 4 y võrdne kuue. 1468 01:17:55,610 --> 01:17:58,540 See pole veel kõik, et me ei kavatse olla aastal freimi sest bar 1469 01:17:58,540 --> 01:18:00,580 Lisaks on kohaliku muutuja n. 1470 01:18:00,580 --> 01:18:03,370 Ja n me seatud võrdne 24. 1471 01:18:03,370 --> 01:18:05,750 >> Nüüd baar läheb tagasi n. 1472 01:18:05,750 --> 01:18:09,300 Nii et baar on tagasi 24 freimi suva. 1473 01:18:09,300 --> 01:18:12,560 Ja kuna baar on naasmas, et tähendab, et me popping freimi 1474 01:18:12,560 --> 01:18:14,250 bar maha virna. 1475 01:18:14,250 --> 01:18:18,430 Nii et kõik, mälu, et baar oli kasutades on nüüd ära pinu. 1476 01:18:18,430 --> 01:18:21,550 >> Nüüd foo ka läheb tagasi 24 esilehele. 1477 01:18:21,550 --> 01:18:25,470 Nüüd, et suva on tagasi, mälu et foo kasutas oma " 1478 01:18:25,470 --> 01:18:27,550 freimi on ka läinud. 1479 01:18:27,550 --> 01:18:29,660 Ja nüüd, peamised läheb helistada printf. 1480 01:18:29,660 --> 01:18:31,660 Nii printf on lihtsalt üks funktsioon. 1481 01:18:31,660 --> 01:18:35,320 Kui me nimetame printf, et see saab olema teise freimi jaoks printf 1482 01:18:35,320 --> 01:18:36,470 funktsioon kõne. 1483 01:18:36,470 --> 01:18:37,990 >> Mida me kulgeb printf? 1484 01:18:37,990 --> 01:18:40,090 See, mis toimub minna selle freimi. 1485 01:18:40,090 --> 01:18:44,970 Vähemalt on meil passib et protsenti i Kurakaldkriips n ja 1486 01:18:44,970 --> 01:18:47,180 argument 24. 1487 01:18:47,180 --> 01:18:50,370 See võib olla rohkem see freimi kui printf juhtub olema kasutades mõned 1488 01:18:50,370 --> 01:18:51,200 kohalikud muutujad. 1489 01:18:51,200 --> 01:18:51,920 Me ei tea. 1490 01:18:51,920 --> 01:18:53,810 >> Aga kõik, mis läheb printf poolt freimi. 1491 01:18:53,810 --> 01:18:55,740 See läheb täide printf. 1492 01:18:55,740 --> 01:18:56,830 Siis printf on tehtud. 1493 01:18:56,830 --> 01:18:57,820 Ta naaseb. 1494 01:18:57,820 --> 01:18:58,960 Lõpuks peamine on tehtud. 1495 01:18:58,960 --> 01:18:59,860 Main naaseb. 1496 01:18:59,860 --> 01:19:02,020 Ja siis meie programm on tehtud. 1497 01:19:02,020 --> 01:19:02,480 Jah? 1498 01:19:02,480 --> 01:19:04,505 >> Sihtrühm: Kas olete näinud [kuuldamatu] 1499 01:19:04,505 --> 01:19:05,900 argumendid [kuuldamatu] 1500 01:19:05,900 --> 01:19:06,830 parameetrid? 1501 01:19:06,830 --> 01:19:09,970 >> ROB: Nii et on olemas väike erinevus vahel argumente ja parameetreid. 1502 01:19:09,970 --> 01:19:14,400 Ja tõesti, ühist rääkida, inimesed kipuvad lihtsalt segada neid kogu aeg. 1503 01:19:14,400 --> 01:19:17,550 Aga parameetrid on ametliku nimi asjad. 1504 01:19:17,550 --> 01:19:20,180 >> Nii argc ja argv on parameetrid peamine. 1505 01:19:20,180 --> 01:19:23,440 Argumendid, mida sa tegelikult liigu nagu need parameetrid. 1506 01:19:23,440 --> 01:19:28,340 Nii et kui ma kutsun foo 4, 4 on argument ma möödaminnes. 1507 01:19:28,340 --> 01:19:31,460 Ja parameeter n, sees suva, võtab väärtuse 4 1508 01:19:31,460 --> 01:19:32,880 alates 4 oli argument. 1509 01:19:32,880 --> 01:19:35,826 >> Sihtrühm: [kuuldamatu]? 1510 01:19:35,826 --> 01:19:37,880 >> ROB: n on kohaliku muutuja baari. 1511 01:19:37,880 --> 01:19:41,420 1512 01:19:41,420 --> 01:19:44,960 n on ikka kohalik foo, aga see parameeter foo. 1513 01:19:44,960 --> 01:19:48,190 See ei ole kohalik muutuja. 1514 01:19:48,190 --> 01:19:48,546 Jah? 1515 01:19:48,546 --> 01:19:51,180 >> Sihtrühm: [kuuldamatu]? 1516 01:19:51,180 --> 01:19:55,400 >> ROB: foo on lihtsalt helistades bar ja tagastamise iganes baar tulu. 1517 01:19:55,400 --> 01:19:56,786 >> Sihtrühm: [kuuldamatu]? 1518 01:19:56,786 --> 01:19:59,591 >> ROB: Jah, lihtsalt et näha, mitu korstnat raamid. 1519 01:19:59,591 --> 01:20:00,082 Jah? 1520 01:20:00,082 --> 01:20:03,519 >> Sihtrühm: Miks suva nimega enne printf? 1521 01:20:03,519 --> 01:20:05,920 >> ROB: Miks suva nimega enne printf? 1522 01:20:05,920 --> 01:20:10,740 Nii et ma oleks võinud selle asemel midagi teinud nagu int x võrdub foo 4. 1523 01:20:10,740 --> 01:20:12,980 ja seejärel trükitud x. 1524 01:20:12,980 --> 01:20:17,900 Kuid selle asemel, I kombineeritud funktsiooni sea ​​printf argument. 1525 01:20:17,900 --> 01:20:23,670 >> Aga teate, et me ei saa tegelikult täidab kõne printf kuni me 1526 01:20:23,670 --> 01:20:25,610 aru saada, mis foo 4 on. 1527 01:20:25,610 --> 01:20:27,480 Nii me hinnata seda. 1528 01:20:27,480 --> 01:20:32,504 Ja alles siis, kui see on tehtud lähed tagasi tulla ja hinnata seda. 1529 01:20:32,504 --> 01:20:32,990 Jah? 1530 01:20:32,990 --> 01:20:37,364 >> Sihtrühm: Kuna mõlemad baari [kuuldamatu] 1531 01:20:37,364 --> 01:20:41,738 väärtus, miks me ei ole [kuuldamatu]? 1532 01:20:41,738 --> 01:20:44,400 >> ROB: nad täiesti peaks olema int. 1533 01:20:44,400 --> 01:20:46,260 See ei olnud püütud jooksul mitu keerdu. 1534 01:20:46,260 --> 01:20:49,010 Seega peaks olema int baar ja int suva, sest need mõlemad 1535 01:20:49,010 --> 01:20:50,460 naasevad täisarvud. 1536 01:20:50,460 --> 01:20:54,214 Void on ainult siis, kui nad ei kavatse tagasi tegelikke väärtusi. 1537 01:20:54,214 --> 01:20:54,692 Jah? 1538 01:20:54,692 --> 01:20:58,038 >> Sihtrühm: Kui sul oleks joon Vastutasuks [kuuldamatu]? 1539 01:20:58,038 --> 01:21:01,862 1540 01:21:01,862 --> 01:21:03,730 >> ROB: joon tulu? 1541 01:21:03,730 --> 01:21:04,410 >> Sihtrühm: Jah. 1542 01:21:04,410 --> 01:21:10,780 Like kui sa printf ja [kuuldamatu] oleks see printida kaks korda? 1543 01:21:10,780 --> 01:21:12,992 >> ROB: Nii sees suva? 1544 01:21:12,992 --> 01:21:15,945 Kui meil oleks printf siin? 1545 01:21:15,945 --> 01:21:16,750 >> Sihtrühm: Jah. 1546 01:21:16,750 --> 01:21:19,510 >> ROB: Nii et kui meil oli printf õigus Siit oleks printida üks kord. 1547 01:21:19,510 --> 01:21:23,400 Kuna me nõuame foo kord paremale siin, siis me tabame printf. 1548 01:21:23,400 --> 01:21:24,620 Siis me nimetame baar. 1549 01:21:24,620 --> 01:21:25,710 Ja siis suva naaseb. 1550 01:21:25,710 --> 01:21:26,275 Ja ongi kõik. 1551 01:21:26,275 --> 01:21:30,985 Me ainult kunagi tekib printf kord. 1552 01:21:30,985 --> 01:21:31,482 Jah? 1553 01:21:31,482 --> 01:21:32,973 >> Sihtrühm: [kuuldamatu] 1554 01:21:32,973 --> 01:21:37,950 printf helistades suva, sest me oleme esimene kutsudes printf ja siis me kulgeb 1555 01:21:37,950 --> 01:21:38,580 argumendid. 1556 01:21:38,580 --> 01:21:40,960 >> ROB: Nii et teoreetiliselt ei ole printf helistades suva? 1557 01:21:40,960 --> 01:21:42,220 Seega ei ole. 1558 01:21:42,220 --> 01:21:47,360 Just selleks, et c läheb täita neid asju on, enne kui saame 1559 01:21:47,360 --> 01:21:49,800 helistada funktsioon, kõik argumendid Lisa funktsioon pea 1560 01:21:49,800 --> 01:21:51,600 täielikult hinnata. 1561 01:21:51,600 --> 01:21:53,540 Nii on see täiesti hinnatakse? 1562 01:21:53,540 --> 01:21:54,610 Jah, see on lihtsalt string. 1563 01:21:54,610 --> 01:21:55,480 See on lihtsalt raha. 1564 01:21:55,480 --> 01:21:57,200 >> Siis on meil täiesti hinnata seda. 1565 01:21:57,200 --> 01:21:59,720 Kui see on tehtud, nüüd on kõik tema argumendid on hinnatud. 1566 01:21:59,720 --> 01:22:01,982 Ja nüüd me saame teha helistage printf. 1567 01:22:01,982 --> 01:22:02,478 Jah? 1568 01:22:02,478 --> 01:22:03,966 >> Sihtrühm: Üks küsimus. 1569 01:22:03,966 --> 01:22:06,942 Kui teil on tühine funktsioon, must teil on tulu semikoolon? 1570 01:22:06,942 --> 01:22:09,910 >> ROB: Sa ei ole vastutasuks semikoolon kui teil on tühine funktsioon. 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 Nüüd mõned hunnik asju. 1574 01:22:15,830 --> 01:22:19,640 Nii hunnik on, kuidas me tegeleme dünaamiline mäluhaldus. 1575 01:22:19,640 --> 01:22:23,100 Ja see on otseselt vastuolus stack mida me nimetame automaatne 1576 01:22:23,100 --> 01:22:24,100 mälu haldamine. 1577 01:22:24,100 --> 01:22:27,140 >> Nii korstnat, sa ei ole kunagi tegelikult on tegeleda, kui kohalikud muutujad 1578 01:22:27,140 --> 01:22:30,400 surutakse ja hüppasid välja kõik Nende korstnat raamid ja kõik see kraam. 1579 01:22:30,400 --> 01:22:31,070 Sa ei pea muretsema selle. 1580 01:22:31,070 --> 01:22:32,070 See on automaatne. 1581 01:22:32,070 --> 01:22:36,990 Nii hunnik on kasutusjuhendis. 1582 01:22:36,990 --> 01:22:38,070 Ja [kuuldamatu] 1583 01:22:38,070 --> 01:22:41,260 pärineb nende funktsioonid malloc ja tasuta. 1584 01:22:41,260 --> 01:22:43,550 >> Nii et siin on veel üks programm. 1585 01:22:43,550 --> 01:22:47,145 Kõik me teeme on mallocing täisarv. 1586 01:22:47,145 --> 01:22:49,360 Me talletades seda täht x. 1587 01:22:49,360 --> 01:22:52,520 Muidugi, me peame kontrollima näha, kui x on null. 1588 01:22:52,520 --> 01:22:56,400 Siis me lihtsalt määrata, mida x on suunaga 50. 1589 01:22:56,400 --> 01:23:00,350 1590 01:23:00,350 --> 01:23:03,260 Prindi mida x on suunaga, print x, ja siis vaba x. 1591 01:23:03,260 --> 01:23:08,920 >> Niisiis, kuidas see tegelikult läheb otsima kui me vaatame meie stack ja hunnik? 1592 01:23:08,920 --> 01:23:10,950 Nii et hakkame jälle. 1593 01:23:10,950 --> 01:23:12,580 Alt meie virna nagu enne. 1594 01:23:12,580 --> 01:23:15,930 Pea meeles, et sinu hunnik otse vastu korstnat? 1595 01:23:15,930 --> 01:23:18,850 Nii et me ei kavatse olla top meie hunnik seal. 1596 01:23:18,850 --> 01:23:22,590 >> Nii alt meie virna oleme meie freimi jaoks peamine. 1597 01:23:22,590 --> 01:23:28,000 See on ruumi argc, argv ja me Nüüd on kohalik muutuja x, mis 1598 01:23:28,000 --> 01:23:30,030 on int star. 1599 01:23:30,030 --> 01:23:32,240 Nii et me ei kavatse kinnitada, käesoleva programmi kaudu. 1600 01:23:32,240 --> 01:23:34,420 Esimene asi, mis meil on Kõne malloc. 1601 01:23:34,420 --> 01:23:36,250 >> Nii et me teeme üleskutse malloc. 1602 01:23:36,250 --> 01:23:37,100 Malloc on funktsioon. 1603 01:23:37,100 --> 01:23:38,770 See läheb aina freimi. 1604 01:23:38,770 --> 01:23:40,180 Mida me tõmmatakse malloc? 1605 01:23:40,180 --> 01:23:41,610 See saab sisse minna magasini raami. 1606 01:23:41,610 --> 01:23:45,130 Me möödume suurusest n, mis on 4. 1607 01:23:45,130 --> 01:23:49,700 Nii et on läinud malloc. 1608 01:23:49,700 --> 01:23:50,910 >> Mis malloc teha? 1609 01:23:50,910 --> 01:23:53,820 See haarab meid ruumi hunnik. 1610 01:23:53,820 --> 01:23:55,320 Nii et me ei kavatse minna hunnik. 1611 01:23:55,320 --> 01:23:57,990 Ja me ei kavatse haarata 4 baiti laduma. 1612 01:23:57,990 --> 01:24:01,500 Nii et olgem lihtsalt anda, et suvalise aadressi. 1613 01:24:01,500 --> 01:24:06,680 0x123 Lihtsalt teeselda, et on aadress, et on hunnik. 1614 01:24:06,680 --> 01:24:12,300 >> Mis on tegelikult sees, et piirkond mälu aadressil Ox123? 1615 01:24:12,300 --> 01:24:13,080 Prügi. 1616 01:24:13,080 --> 01:24:15,270 Nii et me ei ole salvestatud midagi ta. 1617 01:24:15,270 --> 01:24:18,830 Nii et nii palju kui me teame, et võiks olla midagi. 1618 01:24:18,830 --> 01:24:20,560 Te ei tohiks eeldada, et see on null. 1619 01:24:20,560 --> 01:24:23,870 See on kõige tõenäolisemalt ei ole null. 1620 01:24:23,870 --> 01:24:26,260 >> Nüüd malloc tulu. 1621 01:24:26,260 --> 01:24:28,020 Ja mida me siis teeme, kui malloc naaseb? 1622 01:24:28,020 --> 01:24:29,800 Seame mida ta naaseb. 1623 01:24:29,800 --> 01:24:32,290 Seame x on võrdne sellega, mida see on tagasi. 1624 01:24:32,290 --> 01:24:33,690 Mis on see, tagastades? 1625 01:24:33,690 --> 01:24:38,150 Ta naasis 0x123, kuna see on aadress ploki mälu, et see 1626 01:24:38,150 --> 01:24:40,850 lihtsalt eraldatud hunnik. 1627 01:24:40,850 --> 01:24:47,160 >> Nii et tagasi 0x123 x on nüüd, mis tuleb võrdne 0x123, mis piltlikult, 1628 01:24:47,160 --> 01:24:52,940 me sageli teha kui x, mille tegelik nool, et blokeerida. 1629 01:24:52,940 --> 01:24:55,820 Aga x on lihtsalt ladustamiseks aadressil. 1630 01:24:55,820 --> 01:24:58,670 Nii et nüüd on meil kontrollida, kui x on null. 1631 01:24:58,670 --> 01:24:59,120 See ei ole null. 1632 01:24:59,120 --> 01:25:02,170 Meie sooviks, et see malloc õnnestunud. 1633 01:25:02,170 --> 01:25:04,950 >> Nüüd star x võrdub 50. 1634 01:25:04,950 --> 01:25:08,450 Nii star mäletab tähendab see minge sellele aadressile. 1635 01:25:08,450 --> 01:25:12,700 Nii 0x123 Me minge sellele aadressile. 1636 01:25:12,700 --> 01:25:14,660 Nii et jõuame sinna. 1637 01:25:14,660 --> 01:25:16,310 Mida me teeme sellel aadressil? 1638 01:25:16,310 --> 01:25:19,020 Me hoidmiseks 50. 1639 01:25:19,020 --> 01:25:22,500 >> Nii et pärast seda joont, et on, mida asjad hakkavad nägema. 1640 01:25:22,500 --> 01:25:24,640 Nii et nüüd on see enam prügi sinna. 1641 01:25:24,640 --> 01:25:28,910 Nüüd me teame, et 50 on selles eriti aadress, sest 1642 01:25:28,910 --> 01:25:32,410 seadsime ta selle. 1643 01:25:32,410 --> 01:25:32,790 OK? 1644 01:25:32,790 --> 01:25:34,370 Nüüd me ei kavatse trükkida f. 1645 01:25:34,370 --> 01:25:38,490 >> Nii et kõigepealt me ​​printida star x. 1646 01:25:38,490 --> 01:25:39,640 Mis on täht x? 1647 01:25:39,640 --> 01:25:44,300 Jällegi, star x tähendab minna asi, et x on suunaga. 1648 01:25:44,300 --> 01:25:47,140 Nii x salvestab 0x123 Mine seda. 1649 01:25:47,140 --> 01:25:48,490 Me saame 50. 1650 01:25:48,490 --> 01:25:50,540 Nii printida f, et. 1651 01:25:50,540 --> 01:25:54,900 Ja see tähendab, et see saab printida 50. 1652 01:25:54,900 --> 01:25:56,850 Ja siis, et naaseb. 1653 01:25:56,850 --> 01:25:58,340 >> Ja siis on meil teine ​​printf. 1654 01:25:58,340 --> 01:25:59,370 Oleme nüüd protsenti p. 1655 01:25:59,370 --> 01:26:01,680 Kui sa ei ole näinud seda, et see on kuidas printida pointer. 1656 01:26:01,680 --> 01:26:04,960 Nii et meil on protsenti i, protsenti f, ja kõik need juba. 1657 01:26:04,960 --> 01:26:07,160 Niisiis protsenti p, printida pointer. 1658 01:26:07,160 --> 01:26:08,920 >> Nii et x on viit. 1659 01:26:08,920 --> 01:26:13,440 Nii et kui me printida x ise, me trükkimiseks, mis on tegelikult sees 1660 01:26:13,440 --> 01:26:19,220 x, mis on 0x123 Nii esimese print f on trükkimineku 50. 1661 01:26:19,220 --> 01:26:23,620 Teine print f läheb printida 0x123 Jah? 1662 01:26:23,620 --> 01:26:27,460 >> Sihtrühm: Kas sa kasutad protsenti x printida pointer? 1663 01:26:27,460 --> 01:26:31,200 >> ROB: Nii et te kasutate protsenti x printida pointer? 1664 01:26:31,200 --> 01:26:38,350 Siis võite vaid protsendi x on lihtsalt, Üldisemalt, nagu siis, kui teil on 1665 01:26:38,350 --> 01:26:40,325 täisarv ja te soovite printida see nagu kuueteistkümnendsüsteemis. 1666 01:26:40,325 --> 01:26:43,250 1667 01:26:43,250 --> 01:26:44,880 See on lihtsalt, kuidas sa seda teed. 1668 01:26:44,880 --> 01:26:47,160 >> Arvestades, protsenti d oleks prindi kohaga. 1669 01:26:47,160 --> 01:26:50,310 See on olnud saame protsenti d. i on lihtsalt täisarv. 1670 01:26:50,310 --> 01:26:52,690 protsenti p on spetsiaalselt Vihjeid. 1671 01:26:52,690 --> 01:26:54,060 >> Nii et x on viit. 1672 01:26:54,060 --> 01:26:56,360 Me tahame kasutada protsenti p. 1673 01:26:56,360 --> 01:26:57,937 Aga protsendi x võiks toimida. 1674 01:26:57,937 --> 01:26:58,414 Jah? 1675 01:26:58,414 --> 01:26:59,664 >> Sihtrühm: [kuuldamatu]? 1676 01:26:59,664 --> 01:27:04,138 1677 01:27:04,138 --> 01:27:05,388 >> ROB: Jah. 1678 01:27:05,388 --> 01:27:07,870 1679 01:27:07,870 --> 01:27:13,440 Vähemalt see call-- et ma ei sisalda see siin. 1680 01:27:13,440 --> 01:27:19,850 Aga need kaks argumenti on tingimata sees selle freimi 1681 01:27:19,850 --> 01:27:23,040 koos kõigi kohalike muutujate printf juhtub olema kasutades. 1682 01:27:23,040 --> 01:27:27,020 Ja siis järgmine kõne printf nüüd sees printf freimi on 1683 01:27:27,020 --> 01:27:33,960 protsenti p längkriipsu n ja mis iganes x väärtus on, mis on 0x123. 1684 01:27:33,960 --> 01:27:34,425 Jah? 1685 01:27:34,425 --> 01:27:35,675 >> Sihtrühm: [kuuldamatu]? 1686 01:27:35,675 --> 01:27:38,145 1687 01:27:38,145 --> 01:27:40,880 >> ROB: See saab printida midagi mis näeb välja selline. 1688 01:27:40,880 --> 01:27:41,846 >> Sihtrühm: [kuuldamatu]. 1689 01:27:41,846 --> 01:27:44,510 >> ROB: Nii et see prindib see aadress kujul. 1690 01:27:44,510 --> 01:27:47,003 Tundub aadress. 1691 01:27:47,003 --> 01:27:47,494 Jah? 1692 01:27:47,494 --> 01:27:49,458 >> Sihtrühm: [kuuldamatu]? 1693 01:27:49,458 --> 01:27:51,075 >> ROB: Miks on mis? 1694 01:27:51,075 --> 01:27:52,920 >> Sihtrühm: [kuuldamatu]? 1695 01:27:52,920 --> 01:27:55,240 >> ROB: Miks on see pointer 4 baiti? 1696 01:27:55,240 --> 01:27:58,500 Nii et seal on terve hulk 0 on ees see. 1697 01:27:58,500 --> 01:28:03,740 Nii et see on tõesti 0x0000000123. 1698 01:28:03,740 --> 01:28:06,510 64-bitine süsteem, oleks terve hunnik rohkem nulle. 1699 01:28:06,510 --> 01:28:11,410 1700 01:28:11,410 --> 01:28:11,900 Jah? 1701 01:28:11,900 --> 01:28:13,150 >> Sihtrühm: [kuuldamatu]. 1702 01:28:13,150 --> 01:28:17,290 1703 01:28:17,290 --> 01:28:21,130 >> ROB: Nii et esimene printf läheb print-- 1704 01:28:21,130 --> 01:28:21,980 >> Sihtrühm: [kuuldamatu]. 1705 01:28:21,980 --> 01:28:24,420 >> ROB: Jah, see saab printida Mida x osutab. 1706 01:28:24,420 --> 01:28:27,030 1707 01:28:27,030 --> 01:28:29,070 Star ütleb, milline on see asi osutades. 1708 01:28:29,070 --> 01:28:30,300 Haara see. 1709 01:28:30,300 --> 01:28:31,455 Mis on see, mis osutab? 1710 01:28:31,455 --> 01:28:31,850 50. 1711 01:28:31,850 --> 01:28:32,410 Haara see. 1712 01:28:32,410 --> 01:28:33,390 See, mida me printida. 1713 01:28:33,390 --> 01:28:37,020 Arvestades, et järgmise üks, me oleme lihtsalt printimisel x ise. 1714 01:28:37,020 --> 01:28:38,850 Mis on sees 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 >> Ja siis lõpuks, meil on tasuta. 1718 01:28:46,620 --> 01:28:48,040 Mida me möödaminnes tasuta? 1719 01:28:48,040 --> 01:28:49,470 Me möödume x. 1720 01:28:49,470 --> 01:28:52,380 See kord, kui ma tegelikult kuvata selle freimi. 1721 01:28:52,380 --> 01:28:56,370 >> Nii et me kulgeb väärtus 0x123 tasuta. 1722 01:28:56,370 --> 01:28:59,070 Nüüd vaba teab, eks, Ma pean minema kuni hunnik 1723 01:28:59,070 --> 01:29:00,050 ja tasuta, et mälu. 1724 01:29:00,050 --> 01:29:03,920 Seda enam ei kasuta, mida on aadressil 0x123. 1725 01:29:03,920 --> 01:29:07,010 >> Nii et tasuta saab vabastada et alates hunnik. 1726 01:29:07,010 --> 01:29:09,490 Nüüd on meie hunnik on tühi jälle. 1727 01:29:09,490 --> 01:29:11,120 Meil ei ole mingit mälu lekked. 1728 01:29:11,120 --> 01:29:12,940 Nüüd vaba naaseb. 1729 01:29:12,940 --> 01:29:16,130 Pange tähele, et x on ikka 0x123. 1730 01:29:16,130 --> 01:29:18,240 Aga see on nüüd kehtetu mälu. 1731 01:29:18,240 --> 01:29:21,220 1732 01:29:21,220 --> 01:29:23,986 Me ei tohiks enam dereference x. 1733 01:29:23,986 --> 01:29:24,440 Jah? 1734 01:29:24,440 --> 01:29:27,240 >> Sihtrühm: Kas tagasi 0 üleliigne? 1735 01:29:27,240 --> 01:29:28,290 >> ROB: Kas returen 0 üleliigne? 1736 01:29:28,290 --> 01:29:31,110 Jah. 1737 01:29:31,110 --> 01:29:33,950 Me lihtsalt panna, et kuna meil tagasi üks õhku. 1738 01:29:33,950 --> 01:29:36,830 Nii et see on nagu, jah, laseb sisaldama return 0. 1739 01:29:36,830 --> 01:29:37,310 Jah? 1740 01:29:37,310 --> 01:29:38,560 >> Sihtrühm: [kuuldamatu]? 1741 01:29:38,560 --> 01:29:42,110 1742 01:29:42,110 --> 01:29:45,580 >> ROB: Nii et pärast vaba x, mis juhtub, kui püüame dereference pointer? 1743 01:29:45,580 --> 01:29:47,240 On võimalik, et midagi läheb valesti. 1744 01:29:47,240 --> 01:29:49,330 On võimalik, et me ikka 50. 1745 01:29:49,330 --> 01:29:53,590 >> On võimalik ka, et see mälu on nüüd kasutada midagi muud. 1746 01:29:53,590 --> 01:29:57,140 Nii et see on määratlemata käitumine. 1747 01:29:57,140 --> 01:30:00,772 Ja määratlemata midagi tähendab võib juhtuda. 1748 01:30:00,772 --> 01:30:01,250 Jah? 1749 01:30:01,250 --> 01:30:02,500 >> Sihtrühm: [kuuldamatu]? 1750 01:30:02,500 --> 01:30:07,942 1751 01:30:07,942 --> 01:30:10,830 >> ROB: Ei, nii et kui teil määrata x millegi muuga. 1752 01:30:10,830 --> 01:30:15,870 Nii et kui siin ütlesime x võrdub malloc midagi else-- 1753 01:30:15,870 --> 01:30:17,100 malloc suurus event-- 1754 01:30:17,100 --> 01:30:20,180 siis originaal ploki mälu ei ole vabastatud. 1755 01:30:20,180 --> 01:30:21,490 Ja me oleme ametlikult kaotanud. 1756 01:30:21,490 --> 01:30:23,150 See on mälu leke. 1757 01:30:23,150 --> 01:30:25,090 Me kaotasime kõik viited Selle ploki mälu. 1758 01:30:25,090 --> 01:30:26,827 Nii et ei ole nii, et me ei saa kunagi vabastada ta. 1759 01:30:26,827 --> 01:30:32,074 1760 01:30:32,074 --> 01:30:36,630 OK, nii et siis tagasi 0 vahenditega tehtud. 1761 01:30:36,630 --> 01:30:37,900 >> Olgu, korstnat ülevoolu. 1762 01:30:37,900 --> 01:30:39,320 Mis mõte siin? 1763 01:30:39,320 --> 01:30:41,210 Seega pidage meeles, hunnik läheb alla. 1764 01:30:41,210 --> 01:30:43,480 Stack läheb üles. 1765 01:30:43,480 --> 01:30:48,000 Nii oli see näiteks loeng, Ma arvan, kus peamine on lihtsalt läheb 1766 01:30:48,000 --> 01:30:51,380 nimetame seda funktsiooni foo, mis läheb helistada ise rekursiivselt üle ja 1767 01:30:51,380 --> 01:30:52,320 jälle. 1768 01:30:52,320 --> 01:30:55,370 >> Nii korstnat raamid hakkavad töötavad täpselt sama. 1769 01:30:55,370 --> 01:30:58,130 Nii et me ei kavatse alustada peamiste kui põhja freimi. 1770 01:30:58,130 --> 01:31:02,000 Siis peamised läheb helistada suva, mis ei hakka freimi. 1771 01:31:02,000 --> 01:31:04,260 >> Siis foo läheb helistada foo uuesti, mis ei hakka 1772 01:31:04,260 --> 01:31:05,500 teise freimi. 1773 01:31:05,500 --> 01:31:08,270 Ja siis uuesti ja uuesti ja uuesti, ja uuesti, kuni lõpuks võtame 1774 01:31:08,270 --> 01:31:09,190 arvesse hunnik. 1775 01:31:09,190 --> 01:31:11,990 Nii et see on see, kuidas me saame stack overflow. 1776 01:31:11,990 --> 01:31:14,910 Ja selles punktis, siis SEG süü. 1777 01:31:14,910 --> 01:31:17,335 Või sa tõesti SEG süü enne Siinkohal aga jah. 1778 01:31:17,335 --> 01:31:19,660 >> Sihtrühm: Kas core dump sama SEG süü? 1779 01:31:19,660 --> 01:31:26,140 >> ROB: Nii et te näete segmenteerimine süü tuum dumpinguhinnaga. 1780 01:31:26,140 --> 01:31:28,760 Sa saad core dump kui sa SEG süü. 1781 01:31:28,760 --> 01:31:32,580 Ja see on nagu prügila kõik sisu oma praeguse mälu nii 1782 01:31:32,580 --> 01:31:36,670 et te võite proovida ja kindlaks miks sa SEG heita. 1783 01:31:36,670 --> 01:31:37,135 Jah? 1784 01:31:37,135 --> 01:31:38,385 >> Sihtrühm: [kuuldamatu]? 1785 01:31:38,385 --> 01:31:40,855 1786 01:31:40,855 --> 01:31:45,460 >> ROB: Nii killustatust süü vahendid seal stack overflow. 1787 01:31:45,460 --> 01:31:47,060 Nii ei pea. 1788 01:31:47,060 --> 01:31:49,880 Killustatust süü tähendab, et sa oled liigutav mälu viisil 1789 01:31:49,880 --> 01:31:50,880 sa ei tohiks olla. 1790 01:31:50,880 --> 01:31:54,750 Nii et üks võimalus, mis juhtub on see, kui sa korstnat ülevoolu, hakkame liigutav 1791 01:31:54,750 --> 01:31:58,736 mälu nii, et me ei tohiks olla. 1792 01:31:58,736 --> 01:31:59,208 Jah? 1793 01:31:59,208 --> 01:32:00,458 >> Sihtrühm: [kuuldamatu]? 1794 01:32:00,458 --> 01:32:03,456 1795 01:32:03,456 --> 01:32:05,830 >> ROB: Nii sees lõputu silmuse. 1796 01:32:05,830 --> 01:32:08,770 Nagu, see on nagu rekursiivne lõpmatu silmuse ja nii saaksime veel 1797 01:32:08,770 --> 01:32:09,770 freimi iga kord. 1798 01:32:09,770 --> 01:32:13,540 Aga sees regulaarne lõpmatu samas keegi-- 1799 01:32:13,540 --> 01:32:16,390 noh, ärme isegi printida F-- 1800 01:32:16,390 --> 01:32:17,040 midagi teha. 1801 01:32:17,040 --> 01:32:18,390 Mida iganes. 1802 01:32:18,390 --> 01:32:20,610 >> Me ei kavatse saada teise freimi. 1803 01:32:20,610 --> 01:32:22,530 Me lihtsalt hoiame silmukoiminen üle selle ühe juhendamine. 1804 01:32:22,530 --> 01:32:23,920 Stack ei kasva. 1805 01:32:23,920 --> 01:32:27,290 On fakt, et iga rekursiivse Kõne annab meile freimi. 1806 01:32:27,290 --> 01:32:31,231 Sellepärast saame korstnat ülevoolu. 1807 01:32:31,231 --> 01:32:31,728 Jah? 1808 01:32:31,728 --> 01:32:38,189 >> Sihtrühm: Nii et kui te ütlesite, et saada samas silmus ja seejärel [kuuldamatu]? 1809 01:32:38,189 --> 01:32:42,000 >> ROB: Nii et kui sees, samas loop oli printf, sa ikkagi 1810 01:32:42,000 --> 01:32:42,790 ei seg süü. 1811 01:32:42,790 --> 01:32:46,090 Ma lihtsalt ei taha ajada asju. 1812 01:32:46,090 --> 01:32:46,610 Oleks loop. 1813 01:32:46,610 --> 01:32:48,225 Sa saad ühe korstna Raam printf. 1814 01:32:48,225 --> 01:32:49,580 >> Siis printf naaseks. 1815 01:32:49,580 --> 01:32:50,280 Siis Sa silmus uuesti. 1816 01:32:50,280 --> 01:32:51,460 Sa saad ühe korstna Raam printf. 1817 01:32:51,460 --> 01:32:52,850 Oleks tagasi. 1818 01:32:52,850 --> 01:32:54,060 Single freimi. 1819 01:32:54,060 --> 01:33:00,215 Nii et sa ei saa seda lõputult kuhjuvad korstnat raamid. 1820 01:33:00,215 --> 01:33:03,185 >> Sihtrühm: [kuuldamatu]? 1821 01:33:03,185 --> 01:33:04,040 >> ROB: Jah. 1822 01:33:04,040 --> 01:33:09,360 Nii et see stack overflow juhtub kuna ükski nendest 1823 01:33:09,360 --> 01:33:11,600 kõned foo naasmist. 1824 01:33:11,600 --> 01:33:15,250 Nii et kui me tagasi, siis me alustada kaotamas korstnat raamid. 1825 01:33:15,250 --> 01:33:17,870 Ja siis me ei korstnat ülevoolu. 1826 01:33:17,870 --> 01:33:20,070 Ja see, miks teil on vaja tugipunkti oma isikliku funktsioone. 1827 01:33:20,070 --> 01:33:22,992 1828 01:33:22,992 --> 01:33:23,479 Jah? 1829 01:33:23,479 --> 01:33:27,375 >> Sihtrühm: Kas võimaliku suuruse ja stack hunnik sama 1830 01:33:27,375 --> 01:33:29,880 kõik programmid? 1831 01:33:29,880 --> 01:33:31,910 >> ROB: Umbes. 1832 01:33:31,910 --> 01:33:35,090 Kas võimaliku suuruse kohta virna ja hunnik sama kõigis programmides? 1833 01:33:35,090 --> 01:33:37,180 Ligikaudu. 1834 01:33:37,180 --> 01:33:40,080 On mõningaid randomisatsiooni kui stack algab ja 1835 01:33:40,080 --> 01:33:42,400 kus hunnik hakkab. 1836 01:33:42,400 --> 01:33:45,870 Kui juhtub, et on terve hulk globaalsete muutujate ja asju, siis võib 1837 01:33:45,870 --> 01:33:49,520 ära võtta ruumi Teie hunnik. 1838 01:33:49,520 --> 01:33:54,060 >> 64-bit süsteemi, siis praktiliselt on lõpmatu mälu. 1839 01:33:54,060 --> 01:33:55,820 Seal on lihtsalt nii palju. 1840 01:33:55,820 --> 01:33:59,250 Ajavahemikus 32 bitti ja 64 bitti, et on oluline erinevus. 1841 01:33:59,250 --> 01:34:02,350 >> Sa lähed, et saada palju rohkem Kestab ja hunnik ruumi 64-bit 1842 01:34:02,350 --> 01:34:05,810 süsteem, sest seal on lihtsalt rohkem aadressid, et nad saavad kasutada. 1843 01:34:05,810 --> 01:34:09,360 Kuid üksikute süsteemi, siis olema ligikaudu sama kogus virna 1844 01:34:09,360 --> 01:34:10,785 ja hunnik ruumi. 1845 01:34:10,785 --> 01:34:13,635 1846 01:34:13,635 --> 01:34:15,530 Olgu. 1847 01:34:15,530 --> 01:34:18,220 >> Nii et viimane asi, mida on koostamisel. 1848 01:34:18,220 --> 01:34:19,810 Nii et sa peaksid teadma seda protsessi. 1849 01:34:19,810 --> 01:34:22,240 Seal on neli suurt sammu. 1850 01:34:22,240 --> 01:34:24,400 Nii esimene peaks lihtne meeles pidada. 1851 01:34:24,400 --> 01:34:25,085 Eeltöötlus. 1852 01:34:25,085 --> 01:34:28,390 See on prefiks pre ta. 1853 01:34:28,390 --> 01:34:32,080 Nii et tegemist on enne kõike muud. 1854 01:34:32,080 --> 01:34:34,000 >> On meeles pidada, hash. 1855 01:34:34,000 --> 01:34:37,250 Nii hash määratleb ja hash sisaldab kõigis neist. 1856 01:34:37,250 --> 01:34:39,560 Need on kõik eelnevalt protsessor direktiividele. 1857 01:34:39,560 --> 01:34:42,030 Need on asjad, mis pre-protsessor hoolitseb. 1858 01:34:42,030 --> 01:34:43,680 >> Mis siis pre-protsessor tegema? 1859 01:34:43,680 --> 01:34:44,850 See on tõesti loll asi. 1860 01:34:44,850 --> 01:34:49,380 Kõik see on võimeline on kõik need koopia ning lõigatud ja kleebi operatsioone. 1861 01:34:49,380 --> 01:34:51,790 >> Nii hash sisaldab standard I0 dot h. 1862 01:34:51,790 --> 01:34:52,990 Mis on see, et teed? 1863 01:34:52,990 --> 01:34:56,610 See haarates standard I0 dot h fail ja kleepida see top 1864 01:34:56,610 --> 01:34:58,960 kui ta ütleb, hash sisaldab standard I0 dot h. 1865 01:34:58,960 --> 01:35:02,480 >> Ja iga hash määratleda, et me oleme näha, mis see teeb? 1866 01:35:02,480 --> 01:35:06,730 Selle kopeerimine väärtus, räsi defineeritud, on määratletud ja kleepida, et 1867 01:35:06,730 --> 01:35:08,500 kus te kasutate väärtus. 1868 01:35:08,500 --> 01:35:13,400 Nii eeltöötluse lihtsalt ei tõesti lihtne tekstipõhine operatsioone. 1869 01:35:13,400 --> 01:35:15,870 See ei tee midagi, tark. 1870 01:35:15,870 --> 01:35:18,920 Nii et kõik muu on keerulisem. 1871 01:35:18,920 --> 01:35:22,970 >> Nüüd, et eeltöötlus on teha, et me tegelikult koguda. 1872 01:35:22,970 --> 01:35:24,320 Mis siis koostamine tähendab? 1873 01:35:24,320 --> 01:35:27,310 Jälgime nüüd läheb c-koodi kokkupanemise kood. 1874 01:35:27,310 --> 01:35:27,570 Jah? 1875 01:35:27,570 --> 01:35:28,820 >> Sihtrühm: [kuuldamatu]? 1876 01:35:28,820 --> 01:35:32,390 1877 01:35:32,390 --> 01:35:34,220 >> ROB: Jah, saime selle. 1878 01:35:34,220 --> 01:35:36,880 1879 01:35:36,880 --> 01:35:38,660 Nii koostamisel. 1880 01:35:38,660 --> 01:35:40,310 Me läheme c-st koost. 1881 01:35:40,310 --> 01:35:42,470 Nii et see on tegelik keel muutus. 1882 01:35:42,470 --> 01:35:45,240 Koostamine iseenesest tähendab siirdumine kõrgema taseme keele 1883 01:35:45,240 --> 01:35:47,340 madalamat keeles. 1884 01:35:47,340 --> 01:35:50,720 >> Ja c on kõrgkeeles võrreldes koost. 1885 01:35:50,720 --> 01:35:52,320 Mis on koost? 1886 01:35:52,320 --> 01:35:56,440 Tema juhiseid, mis on, päris palju, teinud oma CPU. 1887 01:35:56,440 --> 01:35:59,130 Aga arvuti ikka ei saa aru koost. 1888 01:35:59,130 --> 01:36:01,570 See ainult neid ühtesid ja nulle. 1889 01:36:01,570 --> 01:36:06,160 Nii et järgmine samm on koguda, mis toob meid neid juhiseid, et 1890 01:36:06,160 --> 01:36:08,760 Sinu CPU mõistab ja tegelikult tõlgib neid, et 1891 01:36:08,760 --> 01:36:10,820 ühtesid ja nulle. 1892 01:36:10,820 --> 01:36:13,570 >> Nii C kuni assamblee binaarne. 1893 01:36:13,570 --> 01:36:15,870 Aga ma ei ole käivitatav veel. 1894 01:36:15,870 --> 01:36:19,550 Nii et mõtle CS50 raamatukogu. 1895 01:36:19,550 --> 01:36:23,070 Me oleme pakkunud teile binaar Selle CS50 raamatukogu, mis on getString 1896 01:36:23,070 --> 01:36:24,400 ja GetInt ja kõik. 1897 01:36:24,400 --> 01:36:25,700 >> Aga CS50 library-- 1898 01:36:25,700 --> 01:36:27,650 aastal ja itself-- ei ole täidetavad. 1899 01:36:27,650 --> 01:36:29,570 See ei pea põhifunktsiooni. 1900 01:36:29,570 --> 01:36:32,230 See on lihtsalt hunnik binaarne , mida saab kasutada. 1901 01:36:32,230 --> 01:36:41,730 Nii ühendab on see, kuidas me koondama kõik Nende eri binaarsed failid 1902 01:36:41,730 --> 01:36:43,110 arvesse tegelikku käivitatav. 1903 01:36:43,110 --> 01:36:45,900 Üks, mis saab sisestada dot kaldkriips dot välja. 1904 01:36:45,900 --> 01:36:51,660 >> Nii et see on nagu fail, mida kirjutas, - olenemata Teie programm on-- 1905 01:36:51,660 --> 01:36:53,620 Ceaser dot c. 1906 01:36:53,620 --> 01:36:55,100 Aga nüüd on see koostatud alla binaarne. 1907 01:36:55,100 --> 01:36:56,480 Nii Ceaser dot o. 1908 01:36:56,480 --> 01:36:59,620 Ja see on meie CS50 raamatukogud binaarne. 1909 01:36:59,620 --> 01:37:02,284 Ja nad on ühendatud üheks käivitatav. 1910 01:37:02,284 --> 01:37:02,758 Jah? 1911 01:37:02,758 --> 01:37:04,008 >> Sihtrühm: [kuuldamatu]? 1912 01:37:04,008 --> 01:37:08,800 1913 01:37:08,800 --> 01:37:12,710 >> ROB: Nii et esimese hulka, pea meeles, hash hulka on tegelikult 1914 01:37:12,710 --> 01:37:13,810 pre-protsessor samm. 1915 01:37:13,810 --> 01:37:14,750 Aga see on eraldi. 1916 01:37:14,750 --> 01:37:20,730 Kui te ei kasuta mingeid funktsioone, mis on väljaspool oma ühe faili siis, 1917 01:37:20,730 --> 01:37:26,100 Ei, sa ei pea siduda midagi kuna teil on kõik. 1918 01:37:26,100 --> 01:37:30,310 >> See tähendab, et printf on omavahel seotud. 1919 01:37:30,310 --> 01:37:32,820 Kui te olete kunagi kasutada printf, et midagi mis peab olema ühendatud 1920 01:37:32,820 --> 01:37:35,740 sest sa ei kirjutanud seda. 1921 01:37:35,740 --> 01:37:39,530 Ja tõepoolest, printf automaatselt omavahel seotud. 1922 01:37:39,530 --> 01:37:42,760 Sa tead, kuidas käsureal või kui kirjutad teha, sa näed seda on 1923 01:37:42,760 --> 01:37:46,690 kriips l CS50, mis on link aastal CS50 raamatukogu? 1924 01:37:46,690 --> 01:37:49,070 Printf ja värki, läheb seotakse automaatselt. 1925 01:37:49,070 --> 01:37:51,730 1926 01:37:51,730 --> 01:37:53,930 Muude küsimuste kohta midagi? 1927 01:37:53,930 --> 01:37:56,280 >> Sihtrühm: [kuuldamatu]? 1928 01:37:56,280 --> 01:37:58,300 >> ROB: ühendab? 1929 01:37:58,300 --> 01:38:03,450 Meil on terve hunnik eri binaarsed failid. 1930 01:38:03,450 --> 01:38:06,410 See on kanoonilise näiteks mida me kasutame on CS50 raamatukogu. 1931 01:38:06,410 --> 01:38:09,960 Oleme koostanud ja antakse teile binaarne selle CS50 raamatukogu. 1932 01:38:09,960 --> 01:38:12,410 >> Te soovite kasutada getString oma programmi. 1933 01:38:12,410 --> 01:38:14,750 Nii et sa minna ja kasutada getString. 1934 01:38:14,750 --> 01:38:19,700 Aga ilma minu kahendkoodi jaoks GetString, kui sa kompileerida koodi 1935 01:38:19,700 --> 01:38:23,140 alla, ei saa te reaalselt sõita oma programmi, sest getString String on 1936 01:38:23,140 --> 01:38:25,080 ei ole veel täielikult kindlaks määratud. 1937 01:38:25,080 --> 01:38:29,220 >> See on ainult siis, kui sa link minu binaarne mis sisaldab getString et nüüd on kõik 1938 01:38:29,220 --> 01:38:31,130 Olgu, ma ei saa tegelikult täita getString. 1939 01:38:31,130 --> 01:38:32,330 Minu fail on täielik. 1940 01:38:32,330 --> 01:38:34,208 Ja ma ei saa käivitada. 1941 01:38:34,208 --> 01:38:34,697 Jah? 1942 01:38:34,697 --> 01:38:37,631 >> Sihtrühm: Kas sidudes teisendada binaarne täitmisfaili? 1943 01:38:37,631 --> 01:38:42,032 Nii et isegi kui teil ei ole muid raamatukogud, poleks see ikkagi 1944 01:38:42,032 --> 01:38:44,477 vaja tõlkida [kuuldamatu]? 1945 01:38:44,477 --> 01:38:48,640 >> ROB: Nii et käivitatav on ikka kahendsüsteemis. 1946 01:38:48,640 --> 01:38:51,750 See lihtsalt ühendab kogu hunnik kahendailid. 1947 01:38:51,750 --> 01:38:55,124 1948 01:38:55,124 --> 01:38:56,591 >> Sihtrühm: Tänan sind nii palju. 1949 01:38:56,591 --> 01:38:58,560 >> ROB: Ei ole probleem. 1950 01:38:58,560 --> 01:38:59,540 On veel küsimusi? 1951 01:38:59,540 --> 01:39:02,001 Muidu me oleme valmis. 1952 01:39:02,001 --> 01:39:02,690 Olgu. 1953 01:39:02,690 --> 01:39:02,990 Tänan. 1954 01:39:02,990 --> 01:39:03,590 >> [APPLAUSE] 1955 01:39:03,590 --> 01:39:04,490 >> Sihtrühm: Aitäh. 1956 01:39:04,490 --> 01:39:05,740 >> ROB: Jah. 1957 01:39:05,740 --> 01:39:06,582