1 00:00:00,000 --> 00:00:02,742 2 00:00:02,742 --> 00:00:05,680 >> Zvučnik 1: Pozdrav svima. 3 00:00:05,680 --> 00:00:07,530 Mi ćemo za početak. 4 00:00:07,530 --> 00:00:09,330 Mislim da su ljudi još uvijek ide da se filtriranje u. 5 00:00:09,330 --> 00:00:12,840 No, u interesu vremena, tako da možemo dobili ste dečki odavde na vrijeme, 6 00:00:12,840 --> 00:00:14,110 ćemo početi. 7 00:00:14,110 --> 00:00:18,780 Dakle, dobrodošli na CS50 Kviz 0 pregledu. 8 00:00:18,780 --> 00:00:23,020 Za one od vas koji nisu ostvarili ipak, imate pitanje u srijedu. 9 00:00:23,020 --> 00:00:25,700 Woo-hoo. 10 00:00:25,700 --> 00:00:29,780 >> Ako niste počela učiti još i nisu shvatili da postoji ovaj još, 11 00:00:29,780 --> 00:00:34,070 Proteklih kvizovi i sve informacije o Vaš kviz su na cs50.net/quizzes. 12 00:00:34,070 --> 00:00:38,090 Tu je neki prilično dobre stvari tamo, Proteklih kvizovi iz posljednja 10 13 00:00:38,090 --> 00:00:43,760 godine, kao i informacije o O ovom kvizu i temama 14 00:00:43,760 --> 00:00:46,250 koji će biti pokriveni. 15 00:00:46,250 --> 00:00:48,980 Pa počnimo. 16 00:00:48,980 --> 00:00:54,240 >> Dakle, vi bi se mogao sjetiti, prvi Dan klase David je imao tih svjetala. 17 00:00:54,240 --> 00:00:59,650 Dakle, u suštini, sve što ide na pod napa od računala 18 00:00:59,650 --> 00:01:00,860 učinjeno u binarnom. 19 00:01:00,860 --> 00:01:04,080 Binarna znači ono što zvuči kao, 0-a i 1-a. 20 00:01:04,080 --> 00:01:09,290 Ima dvije vrijednosti koje mogu zastupati. 21 00:01:09,290 --> 00:01:14,675 >> Dakle, baš kao iu prvom dijelu dana kad se David okrenuo na svjetlo 22 00:01:14,675 --> 00:01:21,990 žarulja za zastupanje, ili 1, naše računalo razumije binarni kao 0-a i 23 00:01:21,990 --> 00:01:24,110 1-a, ili isključiti. 24 00:01:24,110 --> 00:01:25,360 Osnove binarno. 25 00:01:25,360 --> 00:01:29,440 26 00:01:29,440 --> 00:01:32,470 Svako mjesto je zastupljena u bazi dva. 27 00:01:32,470 --> 00:01:36,260 Tako ćete dodati 2 na 0 do 1 do 2 skroz gore. 28 00:01:36,260 --> 00:01:41,970 >> Za izračun što vaš binarno je decimale, samo slijedite ove jednadžbe 29 00:01:41,970 --> 00:01:42,840 tipa stvar. 30 00:01:42,840 --> 00:01:49,510 Ako imate 1 u bilo kojem od tih mjesta, vi to pomnožite god 31 00:01:49,510 --> 00:01:53,820 temeljiti je u, dodajte ga, i dobivate decimale. 32 00:01:53,820 --> 00:01:57,930 Dakle, to je kako računaš do 5 u binarnom. 33 00:01:57,930 --> 00:02:01,400 Baš kao što smo radili na Posljednji tobogan, to je način na koji će 34 00:02:01,400 --> 00:02:02,650 predstavlja 1 do 5. 35 00:02:02,650 --> 00:02:05,320 36 00:02:05,320 --> 00:02:09,660 >> Slično tome, baš kao što možete dodati i oduzmite u decimale dno ili 10, ili 37 00:02:09,660 --> 00:02:13,040 stvarno bilo baza, na može dodati i oduzimanje u binarnom. 38 00:02:13,040 --> 00:02:18,400 Točno ono što se i očekuje kada dodajte dvije gore, ako je to jednako veće 39 00:02:18,400 --> 00:02:24,220 od 1, nosite 1, čine ga 0, i učiniti toga na taj način, samo 40 00:02:24,220 --> 00:02:29,910 kao što se i očekuje s redovitim decimalna ili neke druge baze. 41 00:02:29,910 --> 00:02:30,970 Cool. 42 00:02:30,970 --> 00:02:35,140 >> Dakle, kao što sam rekao prije, sve ono što ide na ispod haube našeg računala 43 00:02:35,140 --> 00:02:37,560 je učinjeno u 0-a i 1-a, ili binarno. 44 00:02:37,560 --> 00:02:43,470 Pa kako ćemo izraziti, primjerice, slova ili brojevi ili znakovi? 45 00:02:43,470 --> 00:02:45,560 A odgovor na to je ASCII. 46 00:02:45,560 --> 00:02:49,380 >> ASCII je mapiranje između likova da bi normalno vidjeti u 47 00:02:49,380 --> 00:02:53,360 Engleski jezik kao što je, B-a, C-a, naglašavaju, crtice i 48 00:02:53,360 --> 00:02:54,910 bilo što slično. 49 00:02:54,910 --> 00:02:57,260 I to karte koje se ASCII vrijednosti. 50 00:02:57,260 --> 00:03:03,080 ASCII vrijednost je samo broj koji može razumjeti vaše računalo. 51 00:03:03,080 --> 00:03:07,430 I baš kao što možete učiniti zbrajanje i oduzimanje s brojevima, to možete učiniti 52 00:03:07,430 --> 00:03:10,890 im ASCII vrijednostima. 53 00:03:10,890 --> 00:03:14,050 >> Dakle, u ovom primjeru, što će to isprintati? 54 00:03:14,050 --> 00:03:26,790 55 00:03:26,790 --> 00:03:35,480 Da, pa samo prostor B prostor C prostora D. Gdje je moj miš ide? 56 00:03:35,480 --> 00:03:39,200 57 00:03:39,200 --> 00:03:43,380 Obavijest možete definirati int na 65. 58 00:03:43,380 --> 00:03:47,080 I kad ispisujete da se pomoću posto C, to će protumačiti da je kao 59 00:03:47,080 --> 00:03:49,330 karakter te će ispisati A. 60 00:03:49,330 --> 00:03:52,800 >> Isto tako, možete proglasiti to je kao char. 61 00:03:52,800 --> 00:03:56,860 A kada ga ispisati pomoću posto C, to će protumačiti da je kao 62 00:03:56,860 --> 00:04:05,240 posto D. I baš kao što možete dodati broj, možete dodati likovi 63 00:04:05,240 --> 00:04:06,878 ASCII vrijednosti, u ovom slučaju. 64 00:04:06,878 --> 00:04:11,370 65 00:04:11,370 --> 00:04:16,130 >> Dakle, malo pokazivač za svakoga. 66 00:04:16,130 --> 00:04:19,610 5, u obliku niza, ne zapravo jednaka 5. 67 00:04:19,610 --> 00:04:26,610 Pa kako bismo mogli pretvoriti Niz 5 na cijeli broj 5? 68 00:04:26,610 --> 00:04:28,930 Bilo koji ideja? 69 00:04:28,930 --> 00:04:31,630 Da. 70 00:04:31,630 --> 00:04:36,720 >> Dakle, ako imamo 5 kao niz, možemo oduzeti 0. 71 00:04:36,720 --> 00:04:37,820 I to će nam dati 5. 72 00:04:37,820 --> 00:04:41,670 A na sličan način, ako imamo 5 kao cijeli broj, dodati da se na nizu 0. 73 00:04:41,670 --> 00:04:43,112 I to nam daje niz 5. 74 00:04:43,112 --> 00:04:46,350 75 00:04:46,350 --> 00:04:48,350 Cool. 76 00:04:48,350 --> 00:04:52,940 >> Sada, sjećam natrag na predavanje onaj u kojemu razgovarali smo o algoritmima. 77 00:04:52,940 --> 00:04:57,260 Pa kako ćemo zapravo žele računalo raditi zanimljive stvari? 78 00:04:57,260 --> 00:05:00,460 Znate, samo zbrajanje i oduzimanje brojevi i tiskanje stvari nije 79 00:05:00,460 --> 00:05:01,730 kako uzbudljivo. 80 00:05:01,730 --> 00:05:04,620 Obično, želimo naše računalo na obavljaju neku vrstu algoritma. 81 00:05:04,620 --> 00:05:07,820 Nešto malo složeniji nego samo jednostavne aritmetike. 82 00:05:07,820 --> 00:05:11,930 >> Algoritam je samo korak po korak setu uputa za kako to izvesti 83 00:05:11,930 --> 00:05:14,640 izvjesno task-- 84 00:05:14,640 --> 00:05:15,660 Baš kao i recept. 85 00:05:15,660 --> 00:05:19,990 Možda ćete se sjetiti prvog dana klase u kojoj je David nas računati sobu 86 00:05:19,990 --> 00:05:22,550 ljudi i koliko ljudi bili su u sobi. 87 00:05:22,550 --> 00:05:24,480 Možda se koristi za brojanje jedan po jedan. 88 00:05:24,480 --> 00:05:25,860 1, 2, 3, 4. 89 00:05:25,860 --> 00:05:28,010 U tom slučaju, linearno vrijeme algoritam. 90 00:05:28,010 --> 00:05:31,710 >> Ali je David uveo algoritam za vi brojati ljude u sobi 91 00:05:31,710 --> 00:05:37,340 gdje svatko ustaje, što reći vaš broj na drugu osobu, dodati da 92 00:05:37,340 --> 00:05:39,200 broj gore, a jedna osoba sjedi dolje. 93 00:05:39,200 --> 00:05:40,410 A ti to ponoviti. 94 00:05:40,410 --> 00:05:42,910 To je jedna vrsta algoritma. 95 00:05:42,910 --> 00:05:47,520 Možemo analizirati kako učinkovito An Algoritam se temelji na to pokrenuti vrijeme. 96 00:05:47,520 --> 00:05:49,680 Ali razgovarat ćemo malo više o tome kasnije. 97 00:05:49,680 --> 00:05:52,740 98 00:05:52,740 --> 00:05:57,090 >> Dakle, svi algoritmi mogu također biti napisan u pseudocode. 99 00:05:57,090 --> 00:06:01,120 Pseudocode je samo engleski kao sintaksa koristi za zastupanje 100 00:06:01,120 --> 00:06:02,420 programski jezik. 101 00:06:02,420 --> 00:06:06,070 Na primjer, ako smo htjeli pitati korisnika pogoditi moj omiljeni broj, mi 102 00:06:06,070 --> 00:06:08,390 možda pseudocode kao takva. 103 00:06:08,390 --> 00:06:09,850 >> Nabavite korisnik pogoditi. 104 00:06:09,850 --> 00:06:13,570 Ako pretpostavka točna, recite im oni su točne, drugi im reći 105 00:06:13,570 --> 00:06:15,560 oni nisu točne. 106 00:06:15,560 --> 00:06:22,530 I pseudocode je način lako zastupa ideju ili algoritam. 107 00:06:22,530 --> 00:06:26,910 Dakle, sada smo možda želite zapravo pisati to na jeziku koji računalo 108 00:06:26,910 --> 00:06:27,980 Možda razumijevanje. 109 00:06:27,980 --> 00:06:35,660 Tako bismo mogli pisati našu pseudocode i tumače da je u izvornom kodu. 110 00:06:35,660 --> 00:06:41,320 >> Do sada, izvorni kod mora pridržavati određenoj sintaksi 111 00:06:41,320 --> 00:06:42,490 programski jezik. 112 00:06:42,490 --> 00:06:45,430 I do sada, u CS50, mi smo Koristim uglavnom c. 113 00:06:45,430 --> 00:06:48,320 Dakle, ovo bi moglo biti izvorni kod za c. 114 00:06:48,320 --> 00:06:51,440 Kasnije je u tijeku, te večeri došao u dodir s drugim programima 115 00:06:51,440 --> 00:06:52,480 jezici poput PHP. 116 00:06:52,480 --> 00:06:57,540 Ili, ako čak i poduzeti druge razrede, te moglo učiniti Java, Python, ili čak OCML. 117 00:06:57,540 --> 00:07:01,570 No, u našem C programskog jezika, to je Kako bismo mogli napisati izvorni kod za 118 00:07:01,570 --> 00:07:04,760 pseudocode algoritam koji Upravo sam opisao ranije. 119 00:07:04,760 --> 00:07:08,630 120 00:07:08,630 --> 00:07:11,430 >> Pa kako se vaše računalo zapravo shvatiti? 121 00:07:11,430 --> 00:07:14,490 Kao što sam rekao prije, to je samo jako razumije nula i jedinica. 122 00:07:14,490 --> 00:07:17,880 Pa kako se to dobili od izvora Kod u nešto što može biti 123 00:07:17,880 --> 00:07:18,960 razumio? 124 00:07:18,960 --> 00:07:22,920 Pa, imamo nešto nazvao prevodilac. 125 00:07:22,920 --> 00:07:28,450 >> Ako se prisjetimo još u većini svoje psets, imali ste neku vrstu programa 126 00:07:28,450 --> 00:07:30,370 napisana u dot c datoteku. 127 00:07:30,370 --> 00:07:32,550 I onda će upisati napraviti. 128 00:07:32,550 --> 00:07:35,970 Dakle, ono što se da radite? 129 00:07:35,970 --> 00:07:39,970 >> Možete upisati make sastaviti svoj Program jer someone-- 130 00:07:39,970 --> 00:07:42,730 tko je napisao svoju p set; Vjerojatno David-- 131 00:07:42,730 --> 00:07:44,190 stvorio make datoteku. 132 00:07:44,190 --> 00:07:51,320 I to govori da je znati da se pokrenuti svoj prevodilac, zove jeka, koji će 133 00:07:51,320 --> 00:07:55,560 zatim sastaviti svoj izvorni kod za prigovoriti kod, koji je nula i jedinica 134 00:07:55,560 --> 00:07:57,720 da vaše računalo razumije. 135 00:07:57,720 --> 00:08:01,610 Ali malo kasnije, mi ćemo ići više u dubinu o prevodiocima. 136 00:08:01,610 --> 00:08:05,640 137 00:08:05,640 --> 00:08:10,800 >> Dakle, sjećam pset 0, where-- da, Imate li pitanje? 138 00:08:10,800 --> 00:08:11,620 >> PUBLIKA: [nečujan]? 139 00:08:11,620 --> 00:08:12,490 >> Zvučnik 1: Da. 140 00:08:12,490 --> 00:08:14,960 Mislim da su oni zapravo trebao biti online. 141 00:08:14,960 --> 00:08:15,120 Da. 142 00:08:15,120 --> 00:08:16,572 >> PUBLIKA: Je li kao [nečujan]? 143 00:08:16,572 --> 00:08:19,476 144 00:08:19,476 --> 00:08:20,830 >> Zvučnik 1: Nije. 145 00:08:20,830 --> 00:08:25,810 Su na cs50.net/quizzes. 146 00:08:25,810 --> 00:08:32,900 >> PUBLIKA: Slash kvizovi, Slash 2013, slash 0, i samo klikati 147 00:08:32,900 --> 00:08:35,956 kvizovi 2013 i kviz 0, pregledajte odjeljak slajdove. 148 00:08:35,956 --> 00:08:40,380 >> Zvučnik 1: Da, pa ako vi želite povucite ga prema gore i pogledati ga na vaš 149 00:08:40,380 --> 00:08:42,740 vlastito računalo, to je u redu previše. 150 00:08:42,740 --> 00:08:43,130 Opet reći. 151 00:08:43,130 --> 00:08:44,546 >> PUBLIKA: [nečujan]. 152 00:08:44,546 --> 00:08:48,780 >> Zvučnik 1: Da, [nečujan] je dummy varijabla. 153 00:08:48,780 --> 00:08:49,644 Oh, da? 154 00:08:49,644 --> 00:08:51,372 >> PUBLIKA: [nečujan]? 155 00:08:51,372 --> 00:08:54,300 >> Zvučnik 1: Ne, štrajkovi nisu na ispitu. 156 00:08:54,300 --> 00:08:55,950 Nažalost, njezin Pitanje je, je štrajkovi na ispitu. 157 00:08:55,950 --> 00:08:59,530 I to nije. 158 00:08:59,530 --> 00:09:05,780 Dakle pset 0, vi bi trebali imati sve provodi nešto pomoću ispočetka. 159 00:09:05,780 --> 00:09:13,100 A kako smo naučili neke osnovne programe građevni blokovi koriste nule. 160 00:09:13,100 --> 00:09:15,590 >> Tako ćemo pogledati neke od tih blokova za izgradnju 161 00:09:15,590 --> 00:09:18,170 koje čine program. 162 00:09:18,170 --> 00:09:20,570 Prvo je logički izraz. 163 00:09:20,570 --> 00:09:24,540 Boolean izraza su one i 0-a ili bilo čega što se 164 00:09:24,540 --> 00:09:25,700 dvije moguće vrijednosti. 165 00:09:25,700 --> 00:09:30,320 U tom slučaju, točno ili netočno, ili isključiti, a da ili ne. 166 00:09:30,320 --> 00:09:35,390 Primjer jednostavne, vrlo jednostavno, Program koji koristi Boolean 167 00:09:35,390 --> 00:09:39,140 Izraz se ovdje. 168 00:09:39,140 --> 00:09:43,220 >> Dakle, kako bi za Boolean izraza za biti korisno, imamo Boolean operatora. 169 00:09:43,220 --> 00:09:48,920 Subjekti koji su mogu koristiti usporediti s određenim vrijednostima. 170 00:09:48,920 --> 00:09:52,820 Dakle, imamo i ili ne odgovara, manje od ili jednak, veća od ili 171 00:09:52,820 --> 00:09:55,130 jednaka, i najmanje ili više od. 172 00:09:55,130 --> 00:09:59,060 Ali ti operateri nisu jako korisna osim ako ih možemo kombinirati u 173 00:09:59,060 --> 00:10:00,320 uvjeti. 174 00:10:00,320 --> 00:10:04,370 >> Dakle, vi bi se mogao sjetiti od nule i od svog p postavlja da mi 175 00:10:04,370 --> 00:10:05,400 imao uvjete. 176 00:10:05,400 --> 00:10:09,710 Oni su, u biti, kao što je vilica u Logika vašeg programa koji 177 00:10:09,710 --> 00:10:12,670 izvršava, ovisno o tome je li uvjet je zadovoljen. 178 00:10:12,670 --> 00:10:18,150 Tako je jedan od uvjeta koje smo imali koristi mnogo puta u ovom tečaju je 179 00:10:18,150 --> 00:10:21,470 ako je, drugo, ako je i drugo uvjete. 180 00:10:21,470 --> 00:10:24,060 >> Evo primjer kako možda koristiti. 181 00:10:24,060 --> 00:10:28,430 Da li netko zna razliku između samo pomoću ako izjavama sve 182 00:10:28,430 --> 00:10:32,530 putu prema dolje stihova, ako, drugo, ako, i drugo u kombinaciji? 183 00:10:32,530 --> 00:10:33,013 Da? 184 00:10:33,013 --> 00:10:34,263 >> PUBLIKA: [nečujan]. 185 00:10:34,263 --> 00:10:40,741 186 00:10:40,741 --> 00:10:42,160 >> Zvučnik 1: Točno. 187 00:10:42,160 --> 00:10:50,210 Dakle, ako sam imao, ako do kraja ovog način, čak i ako se ovaj uvjet ne vrati 188 00:10:50,210 --> 00:10:52,800 Istina, ona će i dalje nastaviti testiranje sljedeća dva. 189 00:10:52,800 --> 00:11:00,120 Dok, s jedne drugo-ako se, na drugo izjavu, ako je jedan true 190 00:11:00,120 --> 00:11:02,640 ostali nisu testirani. 191 00:11:02,640 --> 00:11:05,955 Bilo kakva pitanja o tome? 192 00:11:05,955 --> 00:11:06,890 Cool. 193 00:11:06,890 --> 00:11:12,240 >> Dakle, koristite li-drugi od drugoga Izjava ako znate da je to moguće samo 194 00:11:12,240 --> 00:11:14,470 biti jedan od tih slučajeva. 195 00:11:14,470 --> 00:11:21,550 Dakle, mi znamo, ako je x manje od 0, to je definitivno neće biti 196 00:11:21,550 --> 00:11:22,890 veći od 0. 197 00:11:22,890 --> 00:11:26,940 198 00:11:26,940 --> 00:11:31,480 >> Zatim, još jedna zgrada blok da smo naučili su petlje. 199 00:11:31,480 --> 00:11:33,310 Imamo tri vrste petlji. 200 00:11:33,310 --> 00:11:35,830 Za petlje, dok petlje, i to dok su petlje. 201 00:11:35,830 --> 00:11:38,730 I općenito, kad sjednete za napisati nešto, morate odlučiti 202 00:11:38,730 --> 00:11:40,060 koji je od njih trojice koji želite koristiti. 203 00:11:40,060 --> 00:11:41,900 Pa kako ćemo odlučiti što? 204 00:11:41,900 --> 00:11:44,920 205 00:11:44,920 --> 00:11:48,790 >> Mi uglavnom koriste za petlju, ako znamo koliko puta želimo ponoviti 206 00:11:48,790 --> 00:11:53,650 kroz nešto ili koliko puta želimo obaviti zadatak. 207 00:11:53,650 --> 00:11:58,830 Mi koristimo dok petlje, ako nam treba neki Uvjet da bi bilo istinito da bi trčanje. 208 00:11:58,830 --> 00:12:03,730 I mi koristimo učiniti dok je vrlo sličan a, ali želimo da naša koda na 209 00:12:03,730 --> 00:12:04,880 barem jedan put. 210 00:12:04,880 --> 00:12:09,410 >> Dakle, učiniti dok god je u rade bit Uvijek pokrenuti barem jedan put. 211 00:12:09,410 --> 00:12:13,120 Budući da se, s vremena ga Ne mogu uopće rade, ako 212 00:12:13,120 --> 00:12:15,490 uvjet nije ispunjen. 213 00:12:15,490 --> 00:12:16,740 Bilo kakva pitanja s tim? 214 00:12:16,740 --> 00:12:20,480 215 00:12:20,480 --> 00:12:22,860 >> Dakle struktura za petlje. 216 00:12:22,860 --> 00:12:23,620 Vi dečki ste svi vidjeli. 217 00:12:23,620 --> 00:12:25,320 Možete ga pokrene. 218 00:12:25,320 --> 00:12:26,600 Imate neku vrstu stanja. 219 00:12:26,600 --> 00:12:32,340 Tako, na primjer, mogli bismo inicijalizirati kao za i jednak je 0. 220 00:12:32,340 --> 00:12:34,040 da je manje od 10. 221 00:12:34,040 --> 00:12:35,442 A i ++. 222 00:12:35,442 --> 00:12:39,010 Vrlo jednostavno onaj koji smo učinili. 223 00:12:39,010 --> 00:12:42,210 >> Za while petlji, na sličan način, imate da imaju neku vrstu inicijalizacije, 224 00:12:42,210 --> 00:12:44,980 neka vrsta stanja, i neka vrsta nadogradnje. 225 00:12:44,980 --> 00:12:51,990 Tako možemo implementirati naše za petlje i kao while petlji koristeći ovaj. 226 00:12:51,990 --> 00:12:56,000 A na sličan način s učiniti dok petlje, bismo mogli imati neki inicijalizacije, 227 00:12:56,000 --> 00:12:58,640 izvršiti nešto, to ažurirati, a zatim provjerite stanje. 228 00:12:58,640 --> 00:13:03,500 229 00:13:03,500 --> 00:13:05,140 >> Tako sada funkcionira. 230 00:13:05,140 --> 00:13:06,460 Mi smo stavili sve zajedno. 231 00:13:06,460 --> 00:13:10,140 Mi možda želite napisati neke vrste funkcije. 232 00:13:10,140 --> 00:13:12,790 Zajedničko djelovanje koje možda Vidio već je glavno. 233 00:13:12,790 --> 00:13:13,770 Glavna je funkcija. 234 00:13:13,770 --> 00:13:16,160 To je povratni tip, Int. 235 00:13:16,160 --> 00:13:18,470 Ona ima ime funkcije, glavni. 236 00:13:18,470 --> 00:13:20,810 I to ima argumente, argc i argv. 237 00:13:20,810 --> 00:13:24,040 Dakle, glavno je samo funkcija. 238 00:13:24,040 --> 00:13:27,230 >> Ostale funkcije možda ste koristili, printf-- printf je function-- 239 00:13:27,230 --> 00:13:29,330 GetInt, toupper. 240 00:13:29,330 --> 00:13:32,010 No, to se dogoditi da su provodi za nas 241 00:13:32,010 --> 00:13:33,270 neka vrsta knjižnica. 242 00:13:33,270 --> 00:13:37,400 Ako vi zapamtite uključujući to CS50.h knjižnica ili 243 00:13:37,400 --> 00:13:38,510 standardni I / O biblioteka. 244 00:13:38,510 --> 00:13:39,200 Da, pitanje? 245 00:13:39,200 --> 00:13:41,610 >> PUBLIKA: Je li glavni samo svojstvena c? 246 00:13:41,610 --> 00:13:44,740 To ne samo vrsta [nečujan]? 247 00:13:44,740 --> 00:13:47,370 >> Zvučnik 1: Pitanje je ako glavna je svojstvena c. 248 00:13:47,370 --> 00:13:51,460 I da, sve funkcije imaju glavnu ulogu. 249 00:13:51,460 --> 00:13:55,290 To je vrsta nužno za računala znati gdje početi 250 00:13:55,290 --> 00:13:55,993 trčanje kod. 251 00:13:55,993 --> 00:13:58,108 >> PUBLIKA: tako da ne bi [nečujan]? 252 00:13:58,108 --> 00:13:59,480 >> Zvučnik 1: Ne 253 00:13:59,480 --> 00:14:00,760 Bilo koja druga pitanja? 254 00:14:00,760 --> 00:14:03,430 255 00:14:03,430 --> 00:14:04,770 Cool. 256 00:14:04,770 --> 00:14:08,050 Dakle, baš kao što možete koristiti funkciju koja je pisana za vas, također možete 257 00:14:08,050 --> 00:14:10,380 napisati svoju funkciju. 258 00:14:10,380 --> 00:14:17,050 Ova je funkcija da bi netko mogao napisao da se izračunati volumen 259 00:14:17,050 --> 00:14:18,395 od Q, na primjer. 260 00:14:18,395 --> 00:14:21,300 261 00:14:21,300 --> 00:14:29,500 Postoji povratna tipa ovdje, u ovom slučaju Interesi, naše ime funkcija q i naše 262 00:14:29,500 --> 00:14:31,360 Popis parametara. 263 00:14:31,360 --> 00:14:34,550 >> I imajte na umu da morate pisati podatke tip parametra koji želite 264 00:14:34,550 --> 00:14:38,660 koristiti ili pak funkciju ne Znam kakav 265 00:14:38,660 --> 00:14:41,650 parametar trebao sam se prihvaća. 266 00:14:41,650 --> 00:14:48,110 Dakle, u ovom slučaju, želimo cijeli broj kao naš ulaz. 267 00:14:48,110 --> 00:14:50,390 Pa zašto bismo željeli koristiti funkcije? 268 00:14:50,390 --> 00:14:52,800 >> Prije svega, veliki za organizaciju. 269 00:14:52,800 --> 00:14:56,350 Oni pomažu razbiti svoj kod u organiziraniji komade i napravite 270 00:14:56,350 --> 00:14:57,960 je lakše čitati. 271 00:14:57,960 --> 00:14:59,760 Pojednostavljenje. 272 00:14:59,760 --> 00:15:01,740 To je dobro za dizajn. 273 00:15:01,740 --> 00:15:04,570 Kad čitaš dio koda a glavna funkcija je stvarno, 274 00:15:04,570 --> 00:15:07,750 jako dugo, to bi moglo biti teže Razlog o tome što se događa. 275 00:15:07,750 --> 00:15:11,710 Dakle, ako ste ga razbiti u funkcijama, to bi moglo biti lakše za čitanje. 276 00:15:11,710 --> 00:15:12,750 I ponovno-sposobnost. 277 00:15:12,750 --> 00:15:16,940 Ako imate komad koda koji je bio naziva ili pokrenuti više puta, 278 00:15:16,940 --> 00:15:20,690 umjesto prepisivanja taj kod 10 puta u glavnoj funkciji, možda ćete 279 00:15:20,690 --> 00:15:21,440 želite ga ponovno koristiti. 280 00:15:21,440 --> 00:15:25,740 I onda svaki put morati koristiti da dio koda, pozvati funkciju. 281 00:15:25,740 --> 00:15:30,550 282 00:15:30,550 --> 00:15:35,380 >> Pa sad, ako se sjetimo natrag do nule, Također smo razgovarali o nekoliko koncepata, 283 00:15:35,380 --> 00:15:37,680 od kojih je navoja. 284 00:15:37,680 --> 00:15:41,120 Tema je koncept višestrukih sekvence koda 285 00:15:41,120 --> 00:15:43,040 izvršava u isto vrijeme. 286 00:15:43,040 --> 00:15:47,490 Pa se sjetim prvog dana, gdje je David imao ti dečki računati off broja 287 00:15:47,490 --> 00:15:48,440 ljudi u sobi. 288 00:15:48,440 --> 00:15:50,550 >> U biti, ono što se događa na je sve od vas bili su 289 00:15:50,550 --> 00:15:52,370 trčanje odvojene teme. 290 00:15:52,370 --> 00:15:55,540 A ti niti su došli zajedno dobiti nekakav odgovor. 291 00:15:55,540 --> 00:15:58,890 Slično tome, u nule, kada imate Višestruki duhovi, možda ćete 292 00:15:58,890 --> 00:16:01,070 imati mačku i psa. 293 00:16:01,070 --> 00:16:08,770 I oni će biti istodobno radi vlastite skripte. 294 00:16:08,770 --> 00:16:10,020 To je primjer navoja. 295 00:16:10,020 --> 00:16:12,860 296 00:16:12,860 --> 00:16:18,000 >> I drugi koncept koji je bio uveden ispočetka bio događanja. 297 00:16:18,000 --> 00:16:22,550 A događaji su kada više dijelova Vaš kod međusobnu komunikaciju. 298 00:16:22,550 --> 00:16:26,840 U ispočetka, ovo je bio kada se koristi emitiranje kontrola i kada sam 299 00:16:26,840 --> 00:16:29,500 Primanje blokova. 300 00:16:29,500 --> 00:16:35,170 >> I također, u problem Set 4, vidjeli smo Malo događaja kao dobro. 301 00:16:35,170 --> 00:16:38,250 Vi dečki mogli imati koristi Gevent knjižnica. 302 00:16:38,250 --> 00:16:42,450 A tu je funkciju waitForClick u kojem ste čekali 303 00:16:42,450 --> 00:16:44,300 za korisnika da klikne. 304 00:16:44,300 --> 00:16:47,870 I vaš klik, u ovom slučaju, bilo bi događaja i čekati klik je vaše 305 00:16:47,870 --> 00:16:49,120 rukovatelj događaj. 306 00:16:49,120 --> 00:16:53,690 307 00:16:53,690 --> 00:16:58,630 >> I također, tijekom prikazivati ​​svoje psets i radi na svojim psets, što 308 00:16:58,630 --> 00:17:01,920 možda su došli u kontakt s Neke od tih naredbi. 309 00:17:01,920 --> 00:17:05,579 To je ono što ste upisali u svoje Terminal prozor ili što god prozor 310 00:17:05,579 --> 00:17:12,119 koji se prikazuje na vašem g uređivanja, suštini, navigaciju vaše računalo. 311 00:17:12,119 --> 00:17:19,440 >> Tako, na primjer, navodi LS Sadržaj imenik. 312 00:17:19,440 --> 00:17:22,510 Napravite katalog stvara novu mapu. 313 00:17:22,510 --> 00:17:24,819 CD-a, promjena imenik. 314 00:17:24,819 --> 00:17:28,400 RM, ukloniti, izbrisati datoteke ili neki katalog. 315 00:17:28,400 --> 00:17:31,050 I onda skinite imenik uklanja imenik. 316 00:17:31,050 --> 00:17:32,300 >> PUBLIKA: [nečujan]? 317 00:17:32,300 --> 00:17:36,978 318 00:17:36,978 --> 00:17:38,370 >> Zvučnik 1: Da, sigurno. 319 00:17:38,370 --> 00:17:42,530 320 00:17:42,530 --> 00:17:46,040 Nažalost, pitanje je, ako vas sugeriraju stavljajući to 321 00:17:46,040 --> 00:17:48,840 na varati list. 322 00:17:48,840 --> 00:17:49,440 To bi moglo pomoći. 323 00:17:49,440 --> 00:17:51,490 Ako imate sobu, možete ga staviti na. 324 00:17:51,490 --> 00:17:56,170 To je također samo općenito dovoljno dobar zapamtiti, jer kada ga koristite 325 00:17:56,170 --> 00:17:59,060 možda želite samo ga napamet. 326 00:17:59,060 --> 00:18:02,750 To će učiniti vaš život mnogo lakše. 327 00:18:02,750 --> 00:18:04,000 Jesam li odgovoriti na vaše pitanje? 328 00:18:04,000 --> 00:18:10,528 329 00:18:10,528 --> 00:18:14,290 >> Tako sada, razgovarali smo malo Ukratko o knjižnicama. 330 00:18:14,290 --> 00:18:18,570 No, dvije su glavne one koje smo već pomoću do sada u tijeku su 331 00:18:18,570 --> 00:18:20,860 standardni I / O i cs50. 332 00:18:20,860 --> 00:18:25,410 Kakve stvari su uključeni u standardnoj I / O knjižnici? 333 00:18:25,410 --> 00:18:28,410 >> Da, do sada smo koristiti printf. 334 00:18:28,410 --> 00:18:31,150 U cs50 smo koristiti GetInt i GetString. 335 00:18:31,150 --> 00:18:37,200 A tip podataka string se događa biti proglašen u ovoj cs50 knjižnici. 336 00:18:37,200 --> 00:18:40,250 Razgovarat ćemo malo više u dubinu o kako knjižnice rade i kako su 337 00:18:40,250 --> 00:18:41,870 komunicirati s ostatkom kodu. 338 00:18:41,870 --> 00:18:46,220 No, to su dva glavna one koje smo su došli u kontakt s do sada u 339 00:18:46,220 --> 00:18:48,430 Naravno. 340 00:18:48,430 --> 00:18:50,050 >> Vrste. 341 00:18:50,050 --> 00:18:58,120 To su dobro zapamtiti koliko svaka vrsta predstavlja ili kako 342 00:18:58,120 --> 00:19:02,840 mnogi bajtova svaka tipa requires-- 343 00:19:02,840 --> 00:19:04,990 Interesi, 4 bajta; char, 1 bajt. 344 00:19:04,990 --> 00:19:06,550 Float je 4 bajta. 345 00:19:06,550 --> 00:19:07,782 Što je dvaput? 346 00:19:07,782 --> 00:19:09,032 >> PUBLIKA: [nečujan]. 347 00:19:09,032 --> 00:19:11,398 348 00:19:11,398 --> 00:19:16,240 >> Zvučnik 1: Da, tako plutaju ali udvostručiti veličinu. 349 00:19:16,240 --> 00:19:17,150 Što je dug? 350 00:19:17,150 --> 00:19:18,400 >> PUBLIKA: [nečujan]. 351 00:19:18,400 --> 00:19:21,614 352 00:19:21,614 --> 00:19:24,680 >> Zvučnik 1: U redu. 353 00:19:24,680 --> 00:19:25,410 Što je dug? 354 00:19:25,410 --> 00:19:26,660 >> PUBLIKA: [nečujan]. 355 00:19:26,660 --> 00:19:29,400 356 00:19:29,400 --> 00:19:31,450 >> Zvučnik 1: Da, dvostruko int. 357 00:19:31,450 --> 00:19:34,240 358 00:19:34,240 --> 00:19:34,705 Da. 359 00:19:34,705 --> 00:19:36,100 >> PUBLIKA: [nečujan]. 360 00:19:36,100 --> 00:19:38,030 >> Zvučnik 1: Duga [nečujan]. 361 00:19:38,030 --> 00:19:41,860 A onda dugo dugo je dvostruko veći. 362 00:19:41,860 --> 00:19:42,814 >> PUBLIKA: Ne, ne. 363 00:19:42,814 --> 00:19:47,107 Dugo je samo int. 364 00:19:47,107 --> 00:19:50,910 To ovisi o arhitekturi prije [nečujan] 365 00:19:50,910 --> 00:19:52,922 INT imaju istu širinu. 366 00:19:52,922 --> 00:19:54,172 [Nečujan]. 367 00:19:54,172 --> 00:19:58,841 368 00:19:58,841 --> 00:20:00,920 >> Zvučnik 1: Tako dugo i Int su isti. 369 00:20:00,920 --> 00:20:02,943 A onda dugo dugo je dvostruko int. 370 00:20:02,943 --> 00:20:03,910 Cool. 371 00:20:03,910 --> 00:20:05,550 A onda, što je posljednji tip? 372 00:20:05,550 --> 00:20:06,510 >> PUBLIKA: Pointer. 373 00:20:06,510 --> 00:20:10,350 >> Zvučnik 1: Da, pa smo naučili malo o pokazivače. 374 00:20:10,350 --> 00:20:14,015 I bez obzira što je pokazivač pokazujući to-- to bi mogao biti char zvijezda 375 00:20:14,015 --> 00:20:15,880 ili int star-- 376 00:20:15,880 --> 00:20:20,530 to je uvijek 4 bajta za pokazivača. 377 00:20:20,530 --> 00:20:21,633 Pitanja o tome? 378 00:20:21,633 --> 00:20:22,116 Da? 379 00:20:22,116 --> 00:20:24,531 >> PUBLIKA: [nečujan]? 380 00:20:24,531 --> 00:20:29,530 >> Zvučnik 1: Tako dugo i int su Isti u ovom cs50 uređaja. 381 00:20:29,530 --> 00:20:32,302 >> PUBLIKA: aparat potpuno zamjenjivi. 382 00:20:32,302 --> 00:20:33,510 >> Zvučnik 1: Da. 383 00:20:33,510 --> 00:20:36,610 Pa onda dugo dugo je dvostruko int. 384 00:20:36,610 --> 00:20:39,250 >> PUBLIKA: Ovo je 32-bitni? 385 00:20:39,250 --> 00:20:40,620 >> Zvučnik 1: 32 bita, da. 386 00:20:40,620 --> 00:20:43,572 >> PUBLIKE: Dakle [nečujan]? 387 00:20:43,572 --> 00:20:46,790 >> Zvučnik 1: Da, ako se to ne dogodi izrijekom reći, 388 00:20:46,790 --> 00:20:47,870 trebala preuzeti 32-bitni. 389 00:20:47,870 --> 00:20:50,040 >> PUBLIKA: To će reći nešto kao pretpostavku 390 00:20:50,040 --> 00:20:51,498 Arhitektura kao aparata. 391 00:20:51,498 --> 00:20:58,800 392 00:20:58,800 --> 00:21:01,710 Za 64 bitni, samo stvari koje Promjena se čezne i pokazivače. 393 00:21:01,710 --> 00:21:05,614 Obojica [nečujan]. 394 00:21:05,614 --> 00:21:06,590 >> Zvučnik 1: Da? 395 00:21:06,590 --> 00:21:07,566 >> PUBLIKA: Pitanje. 396 00:21:07,566 --> 00:21:10,982 Dakle, na jednom od prakse kvizovima, ona pita o nepotpisane int. 397 00:21:10,982 --> 00:21:15,374 Pa kako bi to biti određena od int [nečujan]? 398 00:21:15,374 --> 00:21:18,140 >> Zvučnik 1: nepotpisani je i na 4 bajta. 399 00:21:18,140 --> 00:21:21,172 No, ono što je drugačije potpisao int i unsigned int? 400 00:21:21,172 --> 00:21:22,422 >> PUBLIKA: [nečujan]. 401 00:21:22,422 --> 00:21:24,868 402 00:21:24,868 --> 00:21:25,630 >> Zvučnik 1: Točno. 403 00:21:25,630 --> 00:21:27,570 One mogu predstavljati negativne vrijednosti. 404 00:21:27,570 --> 00:21:28,580 Ali kako to učiniti? 405 00:21:28,580 --> 00:21:30,536 >> PUBLIKA: [nečujan]. 406 00:21:30,536 --> 00:21:36,370 >> Zvučnik 1: Da, to štedi 1 malo se predstavljaju znak. 407 00:21:36,370 --> 00:21:40,910 408 00:21:40,910 --> 00:21:45,040 Potpisao je jedan bit da predstavlja znak. 409 00:21:45,040 --> 00:21:48,886 I nepotpisani samo je sve pozitivi. 410 00:21:48,886 --> 00:21:50,365 >> PUBLIKA: U redu. 411 00:21:50,365 --> 00:21:54,230 Dakle, vi kažete da je dvaput dvostruko veći od float? 412 00:21:54,230 --> 00:21:58,202 >> Zvučnik 1: Dvostruka je dva puta veličina float, da. 413 00:21:58,202 --> 00:22:01,639 >> PUBLIKA: Kako pokazivač da dugo dugo [nečujan]? 414 00:22:01,639 --> 00:22:06,058 415 00:22:06,058 --> 00:22:10,870 >> Zvučnik 1: Dakle, pitanje je kako se pokazivač dugo long-- 416 00:22:10,870 --> 00:22:13,800 Kako je to samo četiri bajta kada dugo dok njegovi 8 bajtova. 417 00:22:13,800 --> 00:22:17,310 Dakle, ne zaboravite ono što je pokazivač, u biti, na vrlo bazne vrijednosti. 418 00:22:17,310 --> 00:22:19,046 >> PUBLIKA: [nečujan]. 419 00:22:19,046 --> 00:22:22,670 >> Zvučnik 1: Da, tako se kazaljka je samo mjesto memorije. 420 00:22:22,670 --> 00:22:28,040 Dakle, nije važno koliko prostora da kazaljka pokazuje da. 421 00:22:28,040 --> 00:22:32,060 To treba samo 4 bajta pratiti te memorijske lokacije. 422 00:22:32,060 --> 00:22:34,760 423 00:22:34,760 --> 00:22:36,010 Bilo koja druga pitanja? 424 00:22:36,010 --> 00:22:39,800 425 00:22:39,800 --> 00:22:41,050 Cool. 426 00:22:41,050 --> 00:22:42,920 427 00:22:42,920 --> 00:22:47,460 >> Dakle, zadnje što imam je standardni izlaz. 428 00:22:47,460 --> 00:22:51,020 Trebali biste ih koristiti često dovoljno da se možete sjetiti. 429 00:22:51,020 --> 00:22:54,800 No, to je kada koristimo printf, na primjer. 430 00:22:54,800 --> 00:22:59,260 I mi imamo ove rezervirana mjesta koja pozvani format koda. 431 00:22:59,260 --> 00:23:03,910 >> Dakle posto c char, posto ja za int, i mi također može koristiti posto d. 432 00:23:03,910 --> 00:23:05,130 To je ista stvar. 433 00:23:05,130 --> 00:23:08,200 No, općenito, u CS50 smo pokušati iskoristiti posto ja. 434 00:23:08,200 --> 00:23:09,860 Posto F za plovak. 435 00:23:09,860 --> 00:23:15,620 Posto LD dugo dugo i posto a za niz. 436 00:23:15,620 --> 00:23:18,550 >> Slično tome, mi smo bili pomoću nekoliko od tih bijega sekvenci. 437 00:23:18,550 --> 00:23:22,431 Na primjer, kose crtice n za novu liniju. 438 00:23:22,431 --> 00:23:26,910 Ovo je samo za kad ste formatiranja Vaš kod za ispis f. 439 00:23:26,910 --> 00:23:27,260 Da? 440 00:23:27,260 --> 00:23:28,906 >> PUBLIKA: Što je posto d za? 441 00:23:28,906 --> 00:23:31,850 >> Zvučnik 1: Dakle pitanje je ono što je d posto za? 442 00:23:31,850 --> 00:23:33,270 Posto je d za ints. 443 00:23:33,270 --> 00:23:37,392 Posto, a D posto I su isti. 444 00:23:37,392 --> 00:23:41,130 >> PUBLIKA: Koja je razlika između Obrnuta kosa crta n i Obrnuta kosa crta r? 445 00:23:41,130 --> 00:23:45,300 >> Zvučnik 1: Dakle, pitanje je što je Razlika između zračnosti n i 446 00:23:45,300 --> 00:23:48,615 protuudar r? 447 00:23:48,615 --> 00:23:50,906 Mislim obrnute kose crte r je-- 448 00:23:50,906 --> 00:23:54,340 >> PUBLIKE: Dakle Obrnuta kosa crta r samo implicira vraća na početak linija 449 00:23:54,340 --> 00:23:56,670 bez zapravo ide na novu liniju. 450 00:23:56,670 --> 00:24:01,000 Dakle, ako ste ispisali kose crtice r a vi vratiti na početak retka 451 00:24:01,000 --> 00:24:04,005 onda ispisati više stvari, što prebrisati stvari koje je već na 452 00:24:04,005 --> 00:24:04,390 [Nečujan]. 453 00:24:04,390 --> 00:24:06,725 Budući da, n zapravo ide na novi linija i ide na [nečujan]. 454 00:24:06,725 --> 00:24:10,525 455 00:24:10,525 --> 00:24:13,915 >> Zvučnik 1: Pa, bilo koja druga pitanja? 456 00:24:13,915 --> 00:24:15,430 U redu. 457 00:24:15,430 --> 00:24:18,617 Ja ću ga uručiti na Dan koji će se nastaviti. 458 00:24:18,617 --> 00:24:25,078 >> [Pljesak] 459 00:24:25,078 --> 00:25:08,814 460 00:25:08,814 --> 00:25:09,720 >> DAN: Sve dešnjak. 461 00:25:09,720 --> 00:25:18,590 Dakle, ja ću govoriti o još jedan široki raspon ideja iz razreda koji su 462 00:25:18,590 --> 00:25:23,220 grubo predstavnik tjedan dva i Početak tjedna tri počevši od 463 00:25:23,220 --> 00:25:28,690 s lijevanje, što je samo način tretiranje vrijednosti određene vrste kao 464 00:25:28,690 --> 00:25:30,830 vrijednost od različitih vrsta. 465 00:25:30,830 --> 00:25:34,110 Dakle, možemo to učiniti sa broj znakova na ori-, ispliva na ints, a 466 00:25:34,110 --> 00:25:35,360 dugo čezne udvostručiti. 467 00:25:35,360 --> 00:25:38,170 468 00:25:38,170 --> 00:25:44,500 >> Sve ove stvari se mogu koristiti kao načina liječenja neku brojčanu vrijednost 469 00:25:44,500 --> 00:25:48,370 minus char kao neki drugi numerička vrijednost. 470 00:25:48,370 --> 00:25:54,480 Dakle, postoje neki problemi s tim, od Dakako, koji dolazi kada baci 471 00:25:54,480 --> 00:25:57,860 stvari kao što isplivaju na ints. 472 00:25:57,860 --> 00:26:00,500 Dakle, to je malo čudno. 473 00:26:00,500 --> 00:26:03,170 Imamo plovak koji je 1.31. 474 00:26:03,170 --> 00:26:05,220 Mi to pomnožite 10.000. 475 00:26:05,220 --> 00:26:08,380 I onda smo ga ispisali kao int. 476 00:26:08,380 --> 00:26:09,630 Što to izlaz? 477 00:26:09,630 --> 00:26:11,600 478 00:26:11,600 --> 00:26:14,020 10.000 puta 1,31. 479 00:26:14,020 --> 00:26:18,761 Dakle, 13.000, je da gostu? 480 00:26:18,761 --> 00:26:20,685 >> PUBLIKA: Mislim da je 10.000. 481 00:26:20,685 --> 00:26:24,234 >> DAN: Pa ja sam to pomnoži sa 10.000 prije nego što sam ga casting. 482 00:26:24,234 --> 00:26:25,202 >> PUBLIKA: Oh. 483 00:26:25,202 --> 00:26:27,622 Ne bi tu bilo jedno 9 a neki 0 brojevi? 484 00:26:27,622 --> 00:26:29,270 >> DAN: Možda ima neke čudne znamenke. 485 00:26:29,270 --> 00:26:32,410 486 00:26:32,410 --> 00:26:37,670 Pa dobro, to je 1,3 puta 10.000. 487 00:26:37,670 --> 00:26:40,040 Dakle, to je 13.000. 488 00:26:40,040 --> 00:26:41,313 A ovaj dodatni weird-- 489 00:26:41,313 --> 00:26:42,160 >> PUBLIKA: 13.100. 490 00:26:42,160 --> 00:26:42,650 >> DAN: 13.100. 491 00:26:42,650 --> 00:26:44,910 Hvala ti, Rob. 492 00:26:44,910 --> 00:26:46,610 A ovaj dodatni weirdness-- 493 00:26:46,610 --> 00:26:48,060 to 9,9-- 494 00:26:48,060 --> 00:26:53,860 je jednostavno zato što ovaj lijevanje završio zaokruživanje dolje gdje 495 00:26:53,860 --> 00:26:55,394 to ne bi trebao imati. 496 00:26:55,394 --> 00:26:55,871 Da. 497 00:26:55,871 --> 00:26:58,256 >> PUBLIKA: lijevanje događa nakon što bilo što drugo? 498 00:26:58,256 --> 00:27:03,865 >> DAN: Pa zato što imam to u tisku, da se ovaj množenje prije njega 499 00:27:03,865 --> 00:27:05,230 se ovaj casting. 500 00:27:05,230 --> 00:27:06,140 >> PUBLIKA: [nečujan]. 501 00:27:06,140 --> 00:27:11,350 >> DAN: Mislim da bi prvi baci, Da, što bi bilo 10.000. 502 00:27:11,350 --> 00:27:12,610 Bilo što drugo? 503 00:27:12,610 --> 00:27:13,330 Cool. 504 00:27:13,330 --> 00:27:16,344 Dakle, ovo je 13.099. 505 00:27:16,344 --> 00:27:17,840 Zašto se ovo dogodilo? 506 00:27:17,840 --> 00:27:18,900 Nepreciznost. 507 00:27:18,900 --> 00:27:21,020 >> Pluta nisu savršeni. 508 00:27:21,020 --> 00:27:27,550 Oni mogu predstavljati samo brojke na Određeni broj značajnih znamenki. 509 00:27:27,550 --> 00:27:35,120 Dakle, ako smo ispisali 8 SIG smokve na to float, dobili smo neku vrstu 510 00:27:35,120 --> 00:27:36,800 ružno izgleda broj. 511 00:27:36,800 --> 00:27:45,580 A to je zato što ne može točno 1.31 zastupati jednostavna 512 00:27:45,580 --> 00:27:49,000 Ovlasti dvoje u stroju. 513 00:27:49,000 --> 00:27:53,530 Tako da završi uzimajući najbliži Pretpostavljam, koji završava 514 00:27:53,530 --> 00:27:55,710 da malo nizak. 515 00:27:55,710 --> 00:27:57,730 Smisla? 516 00:27:57,730 --> 00:27:59,110 U redu. 517 00:27:59,110 --> 00:28:05,840 >> Sada, prebacili su drugačiji način radi uvjetne izjave u kojoj sve 518 00:28:05,840 --> 00:28:09,900 mi je stalo je jedna varijabla. 519 00:28:09,900 --> 00:28:16,570 Dakle, u ovom konkretnom primjeru, mi smo uzimajući broj od strane korisnika. 520 00:28:16,570 --> 00:28:21,070 I onda gledamo ono što je cijeli broj. 521 00:28:21,070 --> 00:28:23,500 Vjerojatno, to je broj između jedan i četiri. 522 00:28:23,500 --> 00:28:24,800 To je ono što smo tražili. 523 00:28:24,800 --> 00:28:28,450 >> Tako ćete napraviti prekidač za ime varijable. 524 00:28:28,450 --> 00:28:34,290 Onda ste postavili slučajeve moguće Vrijednosti bi to moglo biti. 525 00:28:34,290 --> 00:28:37,730 Dakle jednom slučaju, kažu da je niska. 526 00:28:37,730 --> 00:28:41,080 A onda razbiti izaći stanja prekidača tako 527 00:28:41,080 --> 00:28:43,270 ne ide. 528 00:28:43,270 --> 00:28:44,830 >> U sljedećem case-- 529 00:28:44,830 --> 00:28:46,940 tako slučaj dva i slučaj three-- 530 00:28:46,940 --> 00:28:51,920 Ako je to slučaj dvoje to samo spušta na Prva linija koda što smatra s 531 00:28:51,920 --> 00:28:55,400 slučaju, tri dok se ne vidi pauzu. 532 00:28:55,400 --> 00:29:00,430 Dakle, razlog što se slučaj jednog do samo ispisa niska je, jer sam 533 00:29:00,430 --> 00:29:01,890 imaju ovu pauzu ovdje. 534 00:29:01,890 --> 00:29:05,360 Ako sam, recimo, ignorirali ovu break-- ako sam bacio ovu breakaway-- 535 00:29:05,360 --> 00:29:09,740 to će ispisati niska, a onda bi se ispisati sredinu, a onda bi se slomiti. 536 00:29:09,740 --> 00:29:12,200 >> Dakle, pauze su važan dio od prebaciti uvjete i 537 00:29:12,200 --> 00:29:14,340 oni bi trebali biti tamo. 538 00:29:14,340 --> 00:29:20,070 O svim slučajevima koji nisu izričito navedeni upravljana od strane defaultu 539 00:29:20,070 --> 00:29:26,645 slučaj u prekidač i treba baciti. 540 00:29:26,645 --> 00:29:31,363 >> PUBLIKE: Dakle 1, 2, 3, i 4 biti n? 541 00:29:31,363 --> 00:29:33,310 >> DAN: Vrijednosti koje n može biti. 542 00:29:33,310 --> 00:29:34,654 Da. 543 00:29:34,654 --> 00:29:35,146 Da? 544 00:29:35,146 --> 00:29:37,606 >> PUBLIKE: Dakle, kada imate koji [nečujan]? 545 00:29:37,606 --> 00:29:44,002 546 00:29:44,002 --> 00:29:46,830 >> DAN: Ti bi ispisati niska, a zatim to će ispisati sredini, a 547 00:29:46,830 --> 00:29:47,400 onda bi razbiti. 548 00:29:47,400 --> 00:29:50,244 >> PUBLIKA: Zašto bi se ispisati Srednji ako [nečujan]? 549 00:29:50,244 --> 00:29:54,036 550 00:29:54,036 --> 00:30:00,550 >> DAN: Tako je sve pod slučaju Prije pauze spada pod. 551 00:30:00,550 --> 00:30:09,390 Dakle, slučaj je jedan ispisa je ispod slučaj jedan kao što je to slijedi ispis. 552 00:30:09,390 --> 00:30:09,890 Da? 553 00:30:09,890 --> 00:30:11,140 >> PUBLIKA: [nečujan]? 554 00:30:11,140 --> 00:30:15,890 555 00:30:15,890 --> 00:30:22,170 >> DAN: Dakle, taj broj je samo određeni vrijednost koju ova varijabla 556 00:30:22,170 --> 00:30:23,420 može se, zar ne? 557 00:30:23,420 --> 00:30:26,740 558 00:30:26,740 --> 00:30:28,490 Da li to smisla? 559 00:30:28,490 --> 00:30:28,990 Da. 560 00:30:28,990 --> 00:30:31,490 >> PUBLIKA: [nečujan]? 561 00:30:31,490 --> 00:30:34,130 >> DAN: Da, slučaj dvije će ispisati Srednji i onda slomiti. 562 00:30:34,130 --> 00:30:35,380 >> PUBLIKA: [nečujan]? 563 00:30:35,380 --> 00:30:37,954 564 00:30:37,954 --> 00:30:40,050 >> DAN: Mislim da je bilo? 565 00:30:40,050 --> 00:30:43,855 Koje druge vrste podataka možete prijeći? 566 00:30:43,855 --> 00:30:46,320 >> PUBLIKA: Možete prebaciti preko bilo koje vrste podataka. 567 00:30:46,320 --> 00:30:50,905 No, to samo znači ništa više od broj znakova i ori- i takve stvari, jer je 568 00:30:50,905 --> 00:30:55,600 ako ste prespajanja pokazivač da zapravo ne smisla, 569 00:30:55,600 --> 00:30:59,555 prebacivanje preko opterećenja, ako ga još neka je li to učiniti, jer s pomičnim zarezom 570 00:30:59,555 --> 00:31:02,840 u preciznosti, ne bi stvarno želim to učiniti bilo kako. 571 00:31:02,840 --> 00:31:07,320 Dakle, prilično mnogo, samo ori- i znakova i takvim stvarima. 572 00:31:07,320 --> 00:31:12,360 >> DAN: Da, to je kad imate eksplicitno Vrijednosti koje znate, mislim, može biti 573 00:31:12,360 --> 00:31:14,250 da prekidač je zapravo korisna. 574 00:31:14,250 --> 00:31:17,094 575 00:31:17,094 --> 00:31:18,990 Dobro? 576 00:31:18,990 --> 00:31:21,370 U redu. 577 00:31:21,370 --> 00:31:26,180 >> Opseg je raspon koji proglašena promjenjiva proširuje. 578 00:31:26,180 --> 00:31:32,190 Dakle, u ovom malom komad koda imam, to bi bilo puno pogrešaka. 579 00:31:32,190 --> 00:31:41,450 A razlog je sam proglasio ovu int I u okviru ove za petlje. 580 00:31:41,450 --> 00:31:46,390 I onda ja pokušavam uputama koje I izvan toga za opseg petlje. 581 00:31:46,390 --> 00:31:50,330 >> Tako je u osnovi, možete razmišljati o opsegu kao i bilo što da proglasi 582 00:31:50,330 --> 00:31:59,750 sa unutar skupa vitičastim zagradama samo postoji unutar tih vitičastim zagradama. 583 00:31:59,750 --> 00:32:04,990 A ako pokušate i koristiti tu varijablu izvan tih vitičastim zagradama, vi ćete 584 00:32:04,990 --> 00:32:08,356 dobiti greška iz prevodilac. 585 00:32:08,356 --> 00:32:08,812 Da? 586 00:32:08,812 --> 00:32:09,724 >> PUBLIKA: Pa ovo ne radi? 587 00:32:09,724 --> 00:32:11,790 >> DAN: To ne radi, da. 588 00:32:11,790 --> 00:32:17,190 589 00:32:17,190 --> 00:32:18,660 Žice. 590 00:32:18,660 --> 00:32:19,780 Gudački char *. 591 00:32:19,780 --> 00:32:22,250 Oni su isti. 592 00:32:22,250 --> 00:32:25,540 Oni su samo primjeri koji znakova. 593 00:32:25,540 --> 00:32:33,000 A sve žice koje imate trebali završiti s obrnute kose crte nula, što je samo 594 00:32:33,000 --> 00:32:34,410 c konvencija. 595 00:32:34,410 --> 00:32:36,680 >> To se zove NULL terminatora. 596 00:32:36,680 --> 00:32:39,050 I NULL-- 597 00:32:39,050 --> 00:32:41,670 N kapital, kapital U, kapital L, kapitala ja-- 598 00:32:41,670 --> 00:32:44,290 nije isti kao NULL terminatora. 599 00:32:44,290 --> 00:32:46,640 To je kazaljka. 600 00:32:46,640 --> 00:32:48,280 To je znak. 601 00:32:48,280 --> 00:32:49,530 Oni su vrlo različita. 602 00:32:49,530 --> 00:32:50,200 Zapamti to. 603 00:32:50,200 --> 00:32:52,320 To će biti na kvizu, vjerojatno. 604 00:32:52,320 --> 00:32:54,040 Nisam vidio kviz. 605 00:32:54,040 --> 00:32:57,880 606 00:32:57,880 --> 00:32:58,840 Da? 607 00:32:58,840 --> 00:33:01,232 >> PUBLIKE: Dakle NULL je, recimo, pokazivač? 608 00:33:01,232 --> 00:33:01,995 >> DAN: Da. 609 00:33:01,995 --> 00:33:05,170 >> PUBLIKA: Što znači [nečujan]? 610 00:33:05,170 --> 00:33:10,050 >> DAN: Ako je, kažu, malloc se zove kad vas nemaju dovoljno memorije da se 611 00:33:10,050 --> 00:33:14,400 bez obzira na veličinu ste tražili, malloc će se vratiti NULL. 612 00:33:14,400 --> 00:33:19,550 To je, u osnovi, kad god je funkcija trebao vratiti pokazivača, 613 00:33:19,550 --> 00:33:22,600 potrebno provjeriti protiv NULL, jer NULL je prilično good-- 614 00:33:22,600 --> 00:33:25,260 to je, na neki način, vrijednost smeće. 615 00:33:25,260 --> 00:33:27,050 To je nula koliko pokazivače ići. 616 00:33:27,050 --> 00:33:29,630 617 00:33:29,630 --> 00:33:32,250 >> Kad god nazvati funkciju, koja vraća pokazivač. 618 00:33:32,250 --> 00:33:35,960 Ti ćeš želite provjeriti kako bi se sigurni da je kazaljka nije NULL 619 00:33:35,960 --> 00:33:37,760 jer NULL je vrlo čest. 620 00:33:37,760 --> 00:33:40,160 To je svojevrsni povratak smeća. 621 00:33:40,160 --> 00:33:44,902 Dakle, ako se nešto ne ide dobro, Upravo vratiti NULL umjesto. 622 00:33:44,902 --> 00:33:45,898 >> PUBLIKA: [nečujan]? 623 00:33:45,898 --> 00:33:48,922 >> DAN: Da, i to je to. 624 00:33:48,922 --> 00:33:51,750 >> PUBLIKA: [nečujan]? 625 00:33:51,750 --> 00:33:52,800 >> DAN: Spell to što je ovaj. 626 00:33:52,800 --> 00:33:54,150 To je NULL terminatora. 627 00:33:54,150 --> 00:33:56,560 To je mala N-U-L-L, ako ti ga pravopis. 628 00:33:56,560 --> 00:33:59,860 >> PUBLIKA: I samo sam otišao natrag i testirali ga. 629 00:33:59,860 --> 00:34:03,010 A ako pokušate staviti pomičnim zarezom Vrijednost u prekidač, to će vikati na vas 630 00:34:03,010 --> 00:34:05,916 govoreći izjava zahtijeva izražavanje od cjelobrojnog tipa. 631 00:34:05,916 --> 00:34:07,166 >> DAN: Izvoli. 632 00:34:07,166 --> 00:34:09,639 633 00:34:09,639 --> 00:34:12,246 Ali da, što je opet pitanje? 634 00:34:12,246 --> 00:34:13,496 >> PUBLIKA: [nečujan]? 635 00:34:13,496 --> 00:34:16,150 636 00:34:16,150 --> 00:34:23,679 >> DAN: Dakle kapital N, kapital U, kapital L, kapital L je stvarna C stvar. 637 00:34:23,679 --> 00:34:29,719 To je NULL pokazivač i volje samo treba tretirati kao takve. 638 00:34:29,719 --> 00:34:33,530 Vi nikada neće probati i čarolija NULL lik i vidjeti bilo 639 00:34:33,530 --> 00:34:35,630 drugi način od ovoga. 640 00:34:35,630 --> 00:34:36,610 Da? 641 00:34:36,610 --> 00:34:42,490 >> PUBLIKE: Dakle povratka u char max ili nešto u bilješkama, zar ne 642 00:34:42,490 --> 00:34:43,960 utjelovljuju istu funkciju kao [nečujan]? 643 00:34:43,960 --> 00:34:50,655 644 00:34:50,655 --> 00:34:54,949 >> PUBLIKA: Tako se to odnosi povratka char max iz getchar, ili 645 00:34:54,949 --> 00:34:55,444 god je to? 646 00:34:55,444 --> 00:34:55,940 >> PUBLIKA: Da. 647 00:34:55,940 --> 00:34:58,620 >> PUBLIKA: Da, tako općenito Termin za sve one stvari 648 00:34:58,620 --> 00:34:59,920 sentinel su vrijednosti. 649 00:34:59,920 --> 00:35:03,640 Dakle, kao što se vraćaju int max iz GetInt i char max iz getchar, to je 650 00:35:03,640 --> 00:35:06,010 trebao biti kao, u redu, ako je ove stvari se vraćaju u nama, 651 00:35:06,010 --> 00:35:07,210 nešto je pošlo po zlu. 652 00:35:07,210 --> 00:35:09,950 >> Za naputke, samo mi se dogoditi da imaju to Sentinel vrijednost da svatko 653 00:35:09,950 --> 00:35:10,750 slaže nakon. 654 00:35:10,750 --> 00:35:13,210 A to je stvar koju se vratiti kad stvari krenu po zlu. 655 00:35:13,210 --> 00:35:15,910 Dakle char max je ono što mi koristimo da predstavljaju nešto 656 00:35:15,910 --> 00:35:18,100 kao NULL ili getchar. 657 00:35:18,100 --> 00:35:23,420 >> PUBLIKE: Dakle, ako ste testiranje getchar, mogla si samo staviti NULL? 658 00:35:23,420 --> 00:35:23,910 Bi li to napraviti razliku? 659 00:35:23,910 --> 00:35:25,400 >> DAN: Ne može samo provjeriti NULL. 660 00:35:25,400 --> 00:35:30,130 Morali biste provjerili char max, jer povratna vrijednost iz funkcije 661 00:35:30,130 --> 00:35:35,416 lik ne pointer. 662 00:35:35,416 --> 00:35:35,888 Da? 663 00:35:35,888 --> 00:35:38,248 >> PUBLIKA: Ovo pitanje pita za duljinu niza. 664 00:35:38,248 --> 00:35:40,136 Da li to uključuje NULL znaka? 665 00:35:40,136 --> 00:35:41,000 >> DAN: Ne 666 00:35:41,000 --> 00:35:45,930 I to je zapravo kako je duljina niza zna da se zaustavi jer ide kroz 667 00:35:45,930 --> 00:35:49,070 Vaša niz znakova do vidi NULL karakter. 668 00:35:49,070 --> 00:35:51,030 A onda je to, sve Dobro, ja sam učinio. 669 00:35:51,030 --> 00:35:52,130 >> PUBLIKA: [nečujan] pet? 670 00:35:52,130 --> 00:35:53,990 >> DAN: Pozdrav će biti pet. 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 Tako su nizovi kontinuirani blokovi memorije. 674 00:36:02,880 --> 00:36:08,480 Oni imaju brz pristup rekavši naziv polja, a zatim, u vitičastim 675 00:36:08,480 --> 00:36:16,720 aparatić, bez obzira na indeks želite ići da, oni indeksirani od nule kroz 676 00:36:16,720 --> 00:36:20,100 duljina niza minus 1. 677 00:36:20,100 --> 00:36:23,070 >> I oni proglašena po vrsti Ono što ste spremanje u 678 00:36:23,070 --> 00:36:29,750 polje, naziv polja, a zatim sve što je veličina tog polja. 679 00:36:29,750 --> 00:36:36,660 Dakle, ovo je char polje duljine šest koji ima te vrijednosti. 680 00:36:36,660 --> 00:36:42,050 681 00:36:42,050 --> 00:36:42,700 Da? 682 00:36:42,700 --> 00:36:43,950 >> PUBLIKA: [nečujan]? 683 00:36:43,950 --> 00:36:47,980 684 00:36:47,980 --> 00:36:48,460 >> DAN: Da. 685 00:36:48,460 --> 00:36:51,340 >> PUBLIKA: [nečujan]? 686 00:36:51,340 --> 00:36:56,700 >> DAN: Ako imate ono što se događa u nizu već napravili. 687 00:36:56,700 --> 00:37:02,260 Tako da bi mogao odrediti ovaj umjesto što, recimo, char, bez obzira na ime svoje 688 00:37:02,260 --> 00:37:12,200 Niz je, prazne zagrade jednako kovrčava braće H zarez zarez E L L zarez zarez 689 00:37:12,200 --> 00:37:16,290 O zarez NULL znak i kovrčava Brace. 690 00:37:16,290 --> 00:37:18,180 To će također raditi kao deklaracije. 691 00:37:18,180 --> 00:37:20,886 >> PUBLIKA: [nečujan]? 692 00:37:20,886 --> 00:37:23,110 >> DAN: Onda morate imati Veličina je već napravio. 693 00:37:23,110 --> 00:37:23,896 >> PUBLIKA: [nečujan]? 694 00:37:23,896 --> 00:37:25,146 >> DAN: Da. 695 00:37:25,146 --> 00:37:30,114 696 00:37:30,114 --> 00:37:32,420 Sve dešnjak. 697 00:37:32,420 --> 00:37:36,430 Argumente naredbenog retka su način dobivanje informacije od korisnika, kao 698 00:37:36,430 --> 00:37:39,380 Argumenti za glavni. 699 00:37:39,380 --> 00:37:40,600 Glavni traje dva argumenta. 700 00:37:40,600 --> 00:37:47,680 Broj argumenata koji se prošli zajedno zapovjedne linije i 701 00:37:47,680 --> 00:37:55,340 string vektor ili string niz od svih argumenata. 702 00:37:55,340 --> 00:38:07,840 >> Dakle, ako ja, recimo, zove funkcije, kao što su dot iz 1. prostora, 2 prostora, tri, 703 00:38:07,840 --> 00:38:10,110 argc će biti 4. 704 00:38:10,110 --> 00:38:17,370 I argv 0 će biti točka van. 705 00:38:17,370 --> 00:38:19,130 Argv1 bi biti 1. 706 00:38:19,130 --> 00:38:23,030 argv2 će biti 2. argv3 bi 3, u tom slučaju. 707 00:38:23,030 --> 00:38:23,310 Da? 708 00:38:23,310 --> 00:38:25,400 >> PUBLIKA: [nečujan]? 709 00:38:25,400 --> 00:38:34,010 >> DAN: Posljednji element u nizu jer niz je duljina argc plus 710 00:38:34,010 --> 00:38:41,050 jedan od argb, posljednji element je NULL pokazivač. 711 00:38:41,050 --> 00:38:42,580 To je argc plus 1. 712 00:38:42,580 --> 00:38:46,210 713 00:38:46,210 --> 00:38:52,150 Dakle, u slučaju da sam upravo rekao, bi se argv 0 je dot van. 714 00:38:52,150 --> 00:38:56,330 argv 1 je 1. argv2 je 2. argv 3 je 3. 715 00:38:56,330 --> 00:39:03,490 argv 4, što je jedan veći nego argc će biti NULL. 716 00:39:03,490 --> 00:39:04,870 >> I to je NULL pokazivač. 717 00:39:04,870 --> 00:39:06,590 Da. 718 00:39:06,590 --> 00:39:11,250 A to je zato što je niz char zvijezda je pokazivač. 719 00:39:11,250 --> 00:39:14,102 Dakle, ona mora biti isti tip. 720 00:39:14,102 --> 00:39:14,595 Da? 721 00:39:14,595 --> 00:39:16,074 >> PUBLIKA: Dva pitanja. 722 00:39:16,074 --> 00:39:21,004 Tako je jedan, što je razlika između ovo i GetString osim jedne vrste 723 00:39:21,004 --> 00:39:22,483 u korisničkom motor? 724 00:39:22,483 --> 00:39:25,934 I drugo, je li pohranjena unutar Nedavno memorije? 725 00:39:25,934 --> 00:39:28,399 Dakle, kao što je, GetString bi biti [nečujan]? 726 00:39:28,399 --> 00:39:31,357 727 00:39:31,357 --> 00:39:33,650 >> DAN: Gdje je pohranjena? 728 00:39:33,650 --> 00:39:34,905 Ne znam gdje je pohranjena. 729 00:39:34,905 --> 00:39:40,000 >> PUBLIKA: Pa, zapravo, znate kako je bilo funkcionira li nazvati to argumenti 730 00:39:40,000 --> 00:39:42,170 pohranjuju se u dimnjaku? 731 00:39:42,170 --> 00:39:46,610 Dakle argc i argv su argumenti za glavni i oni su na hrpi, ili stvarno 732 00:39:46,610 --> 00:39:49,131 iznad onoga što mislite što je Početak snopa. 733 00:39:49,131 --> 00:39:53,490 Ono što je drugi dio ne dolazi u obzir? 734 00:39:53,490 --> 00:39:56,821 >> PUBLIKA: Pa što je [nečujan]? 735 00:39:56,821 --> 00:40:00,990 >> DAN: Da, to je samo drugačiji način dobivanja informacije od korisnika. 736 00:40:00,990 --> 00:40:06,030 Ovaj je nešto učinkovitiji i to je spretniju za skripte jer vas 737 00:40:06,030 --> 00:40:10,070 može samo proći argumente da je vaš glavni funkcija, a ne da čekaju 738 00:40:10,070 --> 00:40:13,400 za korisnike, ako nemate sve korisnike. 739 00:40:13,400 --> 00:40:16,280 >> PUBLIKA: I da, dobili žice će biti [nečujan]. 740 00:40:16,280 --> 00:40:17,922 To će pohraniti stvari koje trebate. 741 00:40:17,922 --> 00:40:18,834 >> DAN: Da? 742 00:40:18,834 --> 00:40:21,114 >> PUBLIKA: [nečujan]? 743 00:40:21,114 --> 00:40:27,545 >> DAN: Da, argv 0 uvijek uključuje dot slash funkcije poziva. 744 00:40:27,545 --> 00:40:28,042 Da? 745 00:40:28,042 --> 00:40:29,292 >> PUBLIKA: [nečujan]? 746 00:40:29,292 --> 00:40:33,509 747 00:40:33,509 --> 00:40:37,310 >> DAN: Da, svaki od argumenata su završio u NULL karaktera, jer oni 748 00:40:37,310 --> 00:40:38,310 su nizovi. 749 00:40:38,310 --> 00:40:40,892 >> PUBLIKA: [nečujan]? 750 00:40:40,892 --> 00:40:44,116 >> DAN: Da, argv argc je NULL pokazivač. 751 00:40:44,116 --> 00:40:45,112 >> PUBLIKA: [nečujan]? 752 00:40:45,112 --> 00:40:47,104 >> DAN: O da. 753 00:40:47,104 --> 00:40:48,100 Da, žao mi je. 754 00:40:48,100 --> 00:40:49,594 >> PUBLIKE: Dakle [nečujan]? 755 00:40:49,594 --> 00:41:08,518 756 00:41:08,518 --> 00:41:16,340 >> DAN: Dakle, pitanje je, ako ste imali naredbenog retka točka slash točku iz 1., 2., 757 00:41:16,340 --> 00:41:20,410 bi broj naredbenog retka argumenti biti dva ili će to biti tri? 758 00:41:20,410 --> 00:41:24,420 759 00:41:24,420 --> 00:41:28,240 >> PUBLIKA: Mislim da se to ne dogodi stvarno stvar. 760 00:41:28,240 --> 00:41:31,370 I imaju tendenciju da kažu, oh, što nije prošao sve argumente naredbenog retka kada, 761 00:41:31,370 --> 00:41:32,730 Očito, što se zove funkciju. 762 00:41:32,730 --> 00:41:37,950 Dakle, ja imaju tendenciju da se vokalno isključuje Funkcija iz naredbenog retka 763 00:41:37,950 --> 00:41:40,350 Argumenti iako je uključeni u argv. 764 00:41:40,350 --> 00:41:42,600 >> DAN: Ali ako je to bio na test-- 765 00:41:42,600 --> 00:41:46,550 yeah-- i ako nešto reći kao argc iznosi 3, 766 00:41:46,550 --> 00:41:48,512 ti si u sigurnom stanju. 767 00:41:48,512 --> 00:41:49,416 Da? 768 00:41:49,416 --> 00:41:50,666 >> PUBLIKA: [nečujan]? 769 00:41:50,666 --> 00:42:00,990 770 00:42:00,990 --> 00:42:09,510 >> DAN: Mislim, ako umjesto pozivanja to u argc i gudačkih argv tipkovnici 771 00:42:09,510 --> 00:42:14,350 ali je zadržao iste vrste i upravo zvao im nešto drugo kao 772 00:42:14,350 --> 00:42:16,640 i b, bi li i dalje raditi? 773 00:42:16,640 --> 00:42:18,790 I to će i dalje raditi, ti bi samo-- 774 00:42:18,790 --> 00:42:21,520 umjesto korištenja argc-- ti bi koristiti i B. 775 00:42:21,520 --> 00:42:24,436 776 00:42:24,436 --> 00:42:25,408 Da? 777 00:42:25,408 --> 00:42:26,658 >> PUBLIKA: [nečujan]? 778 00:42:26,658 --> 00:42:34,642 779 00:42:34,642 --> 00:42:38,850 >> DAN: Dakle, pitanje je GetString je ide za pohranu memorije u hrpi 780 00:42:38,850 --> 00:42:42,280 jer GetString je char *. 781 00:42:42,280 --> 00:42:47,530 Ona pohranjuje memorije u hrpi, jer to sada poziva malloc roku stvarna 782 00:42:47,530 --> 00:42:49,258 Provedba GetString. 783 00:42:49,258 --> 00:42:53,210 784 00:42:53,210 --> 00:42:55,090 U redu, idemo dalje. 785 00:42:55,090 --> 00:42:55,950 >> Sigurnost. 786 00:42:55,950 --> 00:43:01,090 Dakle, da se uistinu siguran, što se oslanjaju na br jedan, a vi ne dopustiti jedan pristup pojedinim 787 00:43:01,090 --> 00:43:04,540 vaših podataka, što je razlog zašto Svatko gradi svoje strojeve, 788 00:43:04,540 --> 00:43:09,580 njihovi operativni sustavi, sve svoje programi od nule, a očito 789 00:43:09,580 --> 00:43:13,410 ne povezati s bilo kojim drugim strojevima putem interneta. 790 00:43:13,410 --> 00:43:17,350 Dakle, računala su nesigurni. 791 00:43:17,350 --> 00:43:19,200 Oni doista jesu. 792 00:43:19,200 --> 00:43:20,940 Moramo vjerovati drugim ljudima. 793 00:43:20,940 --> 00:43:26,500 >> A ideja o sigurnosti je da si ti pokušava ograničiti količinu 794 00:43:26,500 --> 00:43:27,540 povjerenje koje vam je potrebno. 795 00:43:27,540 --> 00:43:32,080 A jedan od načina da to učiniti je kroz kriptografiju. 796 00:43:32,080 --> 00:43:34,950 Kriptografija je, u biti, imamo tajne. 797 00:43:34,950 --> 00:43:38,880 >> Ponekad moramo proći naše tajne zajedno kroz, recimo, internet ili 798 00:43:38,880 --> 00:43:39,980 druge stvari. 799 00:43:39,980 --> 00:43:43,180 A mi ne želimo ljude znati ove tajne. 800 00:43:43,180 --> 00:43:50,100 Tako smo kodirati naše tajne na način Nadamo se da nitko ne može shvatiti. 801 00:43:50,100 --> 00:43:51,600 >> Tako smo used-- 802 00:43:51,600 --> 00:43:54,340 kroz tijek ovog class-- 803 00:43:54,340 --> 00:44:00,750 stvari kao Cezarova šifra i [Nečujan], koji su vrlo, vrlo 804 00:44:00,750 --> 00:44:03,200 nesigurni načini kriptiranje stvari. 805 00:44:03,200 --> 00:44:07,930 Oni su lako shvatiti što im je su i koje su vaše tajne. 806 00:44:07,930 --> 00:44:12,130 Stvarni svijet koristi mnogo više komplicirani šifriranje sheme. 807 00:44:12,130 --> 00:44:13,880 I nećemo ući u mnogo više od toga. 808 00:44:13,880 --> 00:44:18,280 809 00:44:18,280 --> 00:44:19,430 >> Ispravljanje pogrešaka. 810 00:44:19,430 --> 00:44:20,785 GDB je najbolji. 811 00:44:20,785 --> 00:44:24,014 812 00:44:24,014 --> 00:44:25,810 Ja ću naglasiti opet. 813 00:44:25,810 --> 00:44:30,920 Koristite GDB cijelo vrijeme svaki Vrijeme imate problem. 814 00:44:30,920 --> 00:44:36,030 Naredbe koje su korisne u GDB su slomiti, koje prolaze ili liniju 815 00:44:36,030 --> 00:44:41,330 broj, ime funkciju, u suštini gdje u kodu želite zaustaviti, 816 00:44:41,330 --> 00:44:45,600 i biti u mogućnosti da preuzmu kontrolu. 817 00:44:45,600 --> 00:44:54,140 >> Ispis traje varijablu i ispisuje što god da je varijabla u to 818 00:44:54,140 --> 00:44:55,990 točka u vašem izvršenja. 819 00:44:55,990 --> 00:45:00,130 Sljedeća premješta izvršenje po jednom koraku. 820 00:45:00,130 --> 00:45:05,050 I korak korake unutar funkcije u svom izvršenju. 821 00:45:05,050 --> 00:45:10,480 >> Druge stvari su pokrenuti, što je, kako što zapravo pokrenuti svoj kod. 822 00:45:10,480 --> 00:45:16,630 Nastavak poduzima sve korake potrebne kako bi dobili na sljedeću točki prekida. 823 00:45:16,630 --> 00:45:18,300 A tu su i mnogi, mnogi drugi. 824 00:45:18,300 --> 00:45:19,040 Potražite ih. 825 00:45:19,040 --> 00:45:19,901 Oni su super. 826 00:45:19,901 --> 00:45:20,863 Da? 827 00:45:20,863 --> 00:45:22,113 >> PUBLIKA: [nečujan]? 828 00:45:22,113 --> 00:45:26,635 829 00:45:26,635 --> 00:45:28,200 >> DAN: Da, to je za ispravljanje pogrešaka. 830 00:45:28,200 --> 00:45:34,230 Dakle, debugger je program koji omogućuje ispravljanje svoj program. 831 00:45:34,230 --> 00:45:39,931 To nije program koji pronalazi greške za što, iako to bi bilo sjajno. 832 00:45:39,931 --> 00:45:43,020 833 00:45:43,020 --> 00:45:46,040 >> I na kraju, za mene je potraga. 834 00:45:46,040 --> 00:45:51,470 Dakle vrstama traženju da smo razgovarali o je u ovoj klasi su linearno pretraživanje, 835 00:45:51,470 --> 00:45:55,960 koja je samo da pogledate kroz svaki element za pretraživanje prostora, jedan 836 00:45:55,960 --> 00:46:00,410 elementa u isto vrijeme, dok ne pronađete ono što što tražite ili dok ne dođete 837 00:46:00,410 --> 00:46:03,350 Kraj za pretraživanje prostora na kojem točku koju kažu da nisu mogli naći 838 00:46:03,350 --> 00:46:06,360 element koji ste bili u potrazi za. 839 00:46:06,360 --> 00:46:13,450 I to traje u najboljem stalnu vrijeme, što je 0 od 1 i po najgorem linearnih 840 00:46:13,450 --> 00:46:16,070 vrijeme, što je 0 n. 841 00:46:16,070 --> 00:46:19,250 >> Binarna pretraživanje, što treba pogan elementi. 842 00:46:19,250 --> 00:46:24,230 Možete ići na sredini svojih elemenata, vidjeti ako je element što tražite 843 00:46:24,230 --> 00:46:30,120 veći ili manji od elementa da si u sredini. 844 00:46:30,120 --> 00:46:36,510 To je veći, vi kažete da je dno Vaše pretraživanje prostor je vaše 845 00:46:36,510 --> 00:46:41,550 trenutni položaj, srednji, i ponovnog pokretanja procesa. 846 00:46:41,550 --> 00:46:46,150 Ako je manja, izgledaš reći da do- Da, što je? 847 00:46:46,150 --> 00:46:47,400 >> PUBLIKA: [nečujan]? 848 00:46:47,400 --> 00:46:51,000 849 00:46:51,000 --> 00:46:54,260 >> DAN: Da. 850 00:46:54,260 --> 00:46:58,360 Svaka vrsta vrste koji je učio u Klasa je fer igra za probu. 851 00:46:58,360 --> 00:47:01,504 852 00:47:01,504 --> 00:47:04,920 >> [Smijeh] 853 00:47:04,920 --> 00:47:10,260 >> DAN: I činjenica da niste imali to učiniti za set problema, to je fer 854 00:47:10,260 --> 00:47:12,420 igra za probu. 855 00:47:12,420 --> 00:47:15,186 >> PUBLIKA: Možemo ići preko njega kako to-- 856 00:47:15,186 --> 00:47:17,052 >> DAN: Bit će obići. 857 00:47:17,052 --> 00:47:20,496 >> ZVUČNIK 2: Stvarni broj za [Nečujan] je na study.cs50.net. 858 00:47:20,496 --> 00:47:25,910 859 00:47:25,910 --> 00:47:32,680 Dakle, ako pogledate problema praksi na stranici spajanje vrstom 860 00:47:32,680 --> 00:47:35,880 study.cs50.net, tu je kod za provedbu spojiti vrsta. 861 00:47:35,880 --> 00:47:38,550 Dakle, ne morate provesti što se večeras. 862 00:47:38,550 --> 00:47:42,090 No, budite sigurni da ga razumijemo a nego samo ga napamet. 863 00:47:42,090 --> 00:47:45,035 >> PUBLIKA: [nečujan]? 864 00:47:45,035 --> 00:47:49,720 >> ZVUČNIK 2: stranica spajanje sortiranje study.cs50.net, je praksa 865 00:47:49,720 --> 00:47:53,570 problem koji, ako klikati Problem je, na samom kraju postoji 866 00:47:53,570 --> 00:47:56,280 rješenje, a to je spajanje Provedba vrst. 867 00:47:56,280 --> 00:47:58,510 No, budite sigurni da ga razumijemo a ne samo ga napamet 868 00:47:58,510 --> 00:47:59,760 kopiranjem ili dolje. 869 00:47:59,760 --> 00:48:02,870 870 00:48:02,870 --> 00:48:06,340 >> PUBLIKA: I savršeno valjana Problem za ispit će biti 871 00:48:06,340 --> 00:48:07,990 nešto kao ovdje je popis. 872 00:48:07,990 --> 00:48:12,100 Što ovaj popis izgledati nakon jedan korak od izabranih vrsta ili 873 00:48:12,100 --> 00:48:13,330 umetanje sortirati ili bilo što drugo. 874 00:48:13,330 --> 00:48:14,940 Jedna puna iteracija popisa. 875 00:48:14,940 --> 00:48:18,530 Dakle, čak i ako ne završiti trebaju Šifra za to, morate ga razumjeti 876 00:48:18,530 --> 00:48:20,440 dovoljno da znam kako to ide kako bi se izmjenom ovaj niz. 877 00:48:20,440 --> 00:48:24,144 878 00:48:24,144 --> 00:48:25,394 >> DAN: To je to za mene. 879 00:48:25,394 --> 00:48:30,604 880 00:48:30,604 --> 00:48:32,588 >> [Pljesak] 881 00:48:32,588 --> 00:49:06,316 882 00:49:06,316 --> 00:49:07,410 >> LUCAS: Hej svima. 883 00:49:07,410 --> 00:49:08,390 Moje ime je Lucas. 884 00:49:08,390 --> 00:49:16,840 Ja ću govoriti o rekurzije, sve One vrste koje smo naučili, i 885 00:49:16,840 --> 00:49:18,050 Malo sve upućuje. 886 00:49:18,050 --> 00:49:18,740 OK? 887 00:49:18,740 --> 00:49:20,340 Dakle, prije svega, rekurzija. 888 00:49:20,340 --> 00:49:22,951 Što to znači reći da funkcija je rekurzivna? 889 00:49:22,951 --> 00:49:24,675 >> PUBLIKA: sebe naziva. 890 00:49:24,675 --> 00:49:26,500 >> LUCAS: U redu, zove se, da. 891 00:49:26,500 --> 00:49:27,700 Dakle, kao što su ove slike, na primjer. 892 00:49:27,700 --> 00:49:30,280 To je kao na slici unutar od slike i tako dalje. 893 00:49:30,280 --> 00:49:35,740 Tako, na primjer, možete have-- kao Dan koji je govorio o binarnom potrazi. 894 00:49:35,740 --> 00:49:41,840 Jedan od načina na koji binarno pretraživanje rekurzivna je činjenica da ste 895 00:49:41,840 --> 00:49:43,130 pokušava pronaći broj. 896 00:49:43,130 --> 00:49:44,250 Dakle, idete u sredini. 897 00:49:44,250 --> 00:49:47,130 I onda provjeriti da li su brojevi tamo u lijevo i desno. 898 00:49:47,130 --> 00:49:49,650 >> A onda, ako ste saznali broj će biti na lijevoj strani, to je ista 899 00:49:49,650 --> 00:49:53,340 što i opet radi potragu, ali Upravo na lijevoj popisa. 900 00:49:53,340 --> 00:49:57,350 Dakle, to je kako to zvuči kao da je rekurzivna. 901 00:49:57,350 --> 00:50:01,870 Dakle, to je razlog zašto ti dečki imaju rekurzivna rješenje za udruživanjem vrste. 902 00:50:01,870 --> 00:50:04,270 >> U redu, pa evo primjer. 903 00:50:04,270 --> 00:50:07,280 Dakle, recimo da želim izabrati svi brojevi od 1 do n. 904 00:50:07,280 --> 00:50:13,790 Ja mogu shvatiti da zbroj n Broj n plus N minus 1 do 1. 905 00:50:13,790 --> 00:50:17,810 Ali onda, ako pogledam na n minus 1 plus n minus 2 plus 1, to je ista 906 00:50:17,810 --> 00:50:20,680 stvar kao summing brojeva do nje minus 1. 907 00:50:20,680 --> 00:50:25,890 Dakle, ja mogu reći zbroj jednakom zbroju jednak n plus zbroj n minus 1. 908 00:50:25,890 --> 00:50:28,010 Da li to smisla? 909 00:50:28,010 --> 00:50:32,630 >> I ja bih nešto drugo zove osnovni scenarij, a to je da 910 00:50:32,630 --> 00:50:37,440 zbroj brojeva do nuli će biti nula. 911 00:50:37,440 --> 00:50:42,770 Dakle, čim sam doći do broja nula, sam prekinuti odbrojavanje. 912 00:50:42,770 --> 00:50:45,330 Da li to smisla? 913 00:50:45,330 --> 00:50:48,120 >> Dakle, ovdje je primjer kako Ja mogu provesti to. 914 00:50:48,120 --> 00:50:49,860 Dakle, imam tu funkciju u nekim. 915 00:50:49,860 --> 00:50:51,700 To traje cijeli broj N. 916 00:50:51,700 --> 00:50:56,300 Dakle, ovdje sam prvi put provjeriti da li je n manji ili jednak nuli. 917 00:50:56,300 --> 00:51:00,310 Dakle, ako je manje ili jednako nuli, ja povratak na nulu, što je naš osnovni scenarij. 918 00:51:00,310 --> 00:51:05,690 Inače, ja samo mogu vratiti n plus zbroj brojeva iz 919 00:51:05,690 --> 00:51:07,190 jedan na n minus jedan. 920 00:51:07,190 --> 00:51:09,360 Smisla? 921 00:51:09,360 --> 00:51:10,100 U redu. 922 00:51:10,100 --> 00:51:11,610 >> Pa evo kako to izgleda. 923 00:51:11,610 --> 00:51:15,260 Imate iznos od 2 jednako 2 plus suma od 1. 924 00:51:15,260 --> 00:51:18,930 A neki od 1 je 1 plus zbroj 0, što je 0. 925 00:51:18,930 --> 00:51:20,216 Smisla? 926 00:51:20,216 --> 00:51:25,342 Dakle, ako gledamo na hrpu svoje Program, to je ono što izgleda. 927 00:51:25,342 --> 00:51:26,820 >> Prvo, imamo glavnu funkciju. 928 00:51:26,820 --> 00:51:30,320 A onda je glavna funkcija zove zbroj 2. 929 00:51:30,320 --> 00:51:36,690 A onda je zbroj 2 će reći, oh, zbroj 2 jednako je 2 plus iznos od jedne. 930 00:51:36,690 --> 00:51:39,460 Tako sam dodati iznos od 1 do snopa. 931 00:51:39,460 --> 00:51:43,860 I suma od 1 će se zvati zbroj 0, što također će se dodati 932 00:51:43,860 --> 00:51:44,630 na stog. 933 00:51:44,630 --> 00:51:49,240 I onda svaki od tih one koji su na vrhu drugi morati vratiti 934 00:51:49,240 --> 00:51:52,020 Prije nego ostali ljudi mogu zadržati ide. 935 00:51:52,020 --> 00:51:56,240 >> Tako na primjer, ovdje, zbroj 0, Prva, koja će vratiti 0. 936 00:51:56,240 --> 00:51:58,320 A onda odlučite sumu od 1. 937 00:51:58,320 --> 00:52:00,850 Zatim suma od 1 će povratak 1 do iznosa od 2. 938 00:52:00,850 --> 00:52:03,900 I na kraju, iznos od 2 ide Za povratak na 3 glavna. 939 00:52:03,900 --> 00:52:05,320 Da li to smisla? 940 00:52:05,320 --> 00:52:09,496 >> To je stvarno važno razumjeti kako stog radi i pokušati 941 00:52:09,496 --> 00:52:11,980 vidjeti ako ima smisla. 942 00:52:11,980 --> 00:52:13,260 U redu, tako da sortiranje. 943 00:52:13,260 --> 00:52:16,170 Pa zašto je sortiranje važno, Prije svega? 944 00:52:16,170 --> 00:52:18,260 Zašto bi nas bilo briga? 945 00:52:18,260 --> 00:52:20,310 Svatko? 946 00:52:20,310 --> 00:52:20,695 Daj mi jedan primjer? 947 00:52:20,695 --> 00:52:21,040 Da? 948 00:52:21,040 --> 00:52:22,968 >> PUBLIKA: [nečujan]. 949 00:52:22,968 --> 00:52:24,700 >> LUCAS: Da, u redu. 950 00:52:24,700 --> 00:52:26,090 Dakle, možete učinkovitije tražiti. 951 00:52:26,090 --> 00:52:28,580 To je dobar način. 952 00:52:28,580 --> 00:52:32,462 Tako, na primjer, imamo puno stvari, zapravo, u našim životima koje 953 00:52:32,462 --> 00:52:32,920 su razvrstani. 954 00:52:32,920 --> 00:52:34,830 Na primjer, rječnici. 955 00:52:34,830 --> 00:52:39,210 >> To je vrlo važno da imaju sve riječi u nekom redu da mi 956 00:52:39,210 --> 00:52:41,970 može pristupiti lako. 957 00:52:41,970 --> 00:52:43,280 Dakle, to je ono što on govori. 958 00:52:43,280 --> 00:52:45,530 Možete učinkovitije tražiti. 959 00:52:45,530 --> 00:52:48,740 Razmislite o tome kako je teško bi bilo imati rječnik u kojem su riječi u 960 00:52:48,740 --> 00:52:49,500 slučajnim redoslijedom. 961 00:52:49,500 --> 00:52:53,120 Morat ćete pogledati, prilično mnogo, svaki riječ dok ne nađete 962 00:52:53,120 --> 00:52:54,720 Riječ koju tražite. 963 00:52:54,720 --> 00:52:58,710 >> Ako koristite Facebook također, kada ste u potrazi na svoje prijatelje, ti si 964 00:52:58,710 --> 00:53:03,540 će se vidjeti da je Facebook stavio svoj bliži prijatelj je na vrhu one 965 00:53:03,540 --> 00:53:05,470 da ne govorimo kako bi to puno. 966 00:53:05,470 --> 00:53:08,080 Ako ide sve na putu do dna Vaš popis prijatelja, ti ćeš vidjeti 967 00:53:08,080 --> 00:53:11,250 ljudi koji vjerojatno ni ne sjetite se da ste prijatelji sa. 968 00:53:11,250 --> 00:53:14,590 A to je zato što Facebook sorti Vaši prijatelji se temelje na tome 969 00:53:14,590 --> 00:53:16,472 zatvoriti ste na njih. 970 00:53:16,472 --> 00:53:17,930 >> Dakle organiziranja podataka. 971 00:53:17,930 --> 00:53:18,450 Također Pokemon. 972 00:53:18,450 --> 00:53:21,400 Pa vidite da je sve Pokemon imaju brojeve. 973 00:53:21,400 --> 00:53:27,210 A to je kao jednostavan način pristupa podacima. 974 00:53:27,210 --> 00:53:29,050 >> PUBLIKA: Pristupanje Pokemon. 975 00:53:29,050 --> 00:53:29,890 >> LUCAS: Da. 976 00:53:29,890 --> 00:53:32,395 >> PUBLIKA: [nečujan]. 977 00:53:32,395 --> 00:53:33,460 >> LUCAS: Aha. 978 00:53:33,460 --> 00:53:35,140 U redu, tako da izbor vrst. 979 00:53:35,140 --> 00:53:41,610 Izbor je sorta koja se događa za odabir Najmanji nesortiran vrijednost popisu svakog 980 00:53:41,610 --> 00:53:43,300 Vrijeme u svakoj iteraciji. 981 00:53:43,300 --> 00:53:46,800 To je vrsta kao što su one vrste koje ste učinili u glavi kad pokušavate 982 00:53:46,800 --> 00:53:48,430 sortirati popis na ruku. 983 00:53:48,430 --> 00:53:51,990 >> Uglavnom, sve što trebate učiniti je pogledate za najmanji broj. 984 00:53:51,990 --> 00:53:54,280 Možete ga staviti u sortirani popis. 985 00:53:54,280 --> 00:53:56,230 I onda ste u potrazi za Sljedeći najmanji broj. 986 00:53:56,230 --> 00:54:00,080 I onda nastaviti raditi da i tako dalje. 987 00:54:00,080 --> 00:54:04,600 >> Dakle, izbor je u osnovi neka vrsta si odaberite svaki put najmanji 988 00:54:04,600 --> 00:54:05,750 nesortiran vrijednost. 989 00:54:05,750 --> 00:54:10,840 Stavite na kraju razvrstani Dio popisa. 990 00:54:10,840 --> 00:54:12,370 I imajte to raditi. 991 00:54:12,370 --> 00:54:15,890 Tako ćemo brzo vidjeti što to izgleda. 992 00:54:15,890 --> 00:54:19,340 Dakle, ovdje je sortirano i nesortiran popis. 993 00:54:19,340 --> 00:54:23,350 >> Tako je za izdvojiti od popisa, to je u početku prazna. 994 00:54:23,350 --> 00:54:26,760 A onda ću odabrati Najmanji broj ovdje, što je 2. 995 00:54:26,760 --> 00:54:30,650 Tako sam se broj 2 i ja stavio U prednjem dijelu popisa. 996 00:54:30,650 --> 00:54:34,910 A onda sam u potrazi za sljedeći najmanji element, koji je 3. 997 00:54:34,910 --> 00:54:37,050 Zato sam ga stavio na kraju popisa razvrstati. 998 00:54:37,050 --> 00:54:38,140 A onda sam zadržati taj događaj. 999 00:54:38,140 --> 00:54:40,040 Smatram 4 i stavite ga na kraju. 1000 00:54:40,040 --> 00:54:41,360 Pronađite 5 i staviti ga na kraju. 1001 00:54:41,360 --> 00:54:44,830 >> A pogledajte kako sve ono vrijeme koje Ja govorim stavi na kraj, 1002 00:54:44,830 --> 00:54:46,850 osnovi, zamjene dvije vrijednosti. 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 I onda posljednja, samo ima još jedan element. 1006 00:54:52,825 --> 00:54:55,870 Dakle, to je već riješeno. 1007 00:54:55,870 --> 00:54:57,800 >> U redu, tako da umetanje vrst. 1008 00:54:57,800 --> 00:55:03,180 Umetanje svojevrsni ćeš imati i da je stvar što sortirati i 1009 00:55:03,180 --> 00:55:04,690 nesortiran popis. 1010 00:55:04,690 --> 00:55:14,540 Jedina stvar je da svaki put kada dodajete element na sortiraju 1011 00:55:14,540 --> 00:55:18,170 popisu, samo odabrati element koji je ispred nerazvrstani popisa. 1012 00:55:18,170 --> 00:55:20,880 I onda ćeš pronaći što Položaj bi trebao biti u sortirani 1013 00:55:20,880 --> 00:55:22,300 Dio popisa. 1014 00:55:22,300 --> 00:55:25,840 >> Da vidimo što je to tako to ima više smisla. 1015 00:55:25,840 --> 00:55:29,360 Dakle, u početku, na primjer, ja pokušavam umetnuti broj tri u 1016 00:55:29,360 --> 00:55:30,680 sortirani dio popisa. 1017 00:55:30,680 --> 00:55:31,800 Dakle, popis nema ništa. 1018 00:55:31,800 --> 00:55:34,160 Dakle, ja mogu samo staviti broj 3. 1019 00:55:34,160 --> 00:55:37,480 >> Sada, želim dodati broj 5 na sortirani dio popisa. 1020 00:55:37,480 --> 00:55:38,900 Dakle, sam pogled na broju 5. 1021 00:55:38,900 --> 00:55:40,450 Primjećujem da je veći od 3. 1022 00:55:40,450 --> 00:55:41,980 Dakle, ja znam da to mora biti nakon 3. 1023 00:55:41,980 --> 00:55:44,100 Zato sam stavio 3 i 5. 1024 00:55:44,100 --> 00:55:45,940 >> Tada želim umetnuti broj 2. 1025 00:55:45,940 --> 00:55:51,630 Primjećujem da je broj 2 je zapravo trajati zatim oba 3 i 5. 1026 00:55:51,630 --> 00:55:54,580 Tako sam zapravo morati staviti sve to Način na početku popisa. 1027 00:55:54,580 --> 00:55:59,030 Pa moram, vrsta, prebaciti sve elementi u popisu sortirane, tako da mogu 1028 00:55:59,030 --> 00:56:01,970 napravili mjesta za broj 2. 1029 00:56:01,970 --> 00:56:03,160 >> Tada sam vidjeti broj 6. 1030 00:56:03,160 --> 00:56:05,450 Vidim da bi trebalo biti nakon 5. 1031 00:56:05,450 --> 00:56:06,240 Tako sam ga tamo stavio. 1032 00:56:06,240 --> 00:56:07,965 I na kraju, sam pogled na broj 4. 1033 00:56:07,965 --> 00:56:11,030 I primjećujem kako bi trebao biti između 3 i 5. 1034 00:56:11,030 --> 00:56:14,870 I onda sam ga stavio tamo i smjene svi ostali elementi. 1035 00:56:14,870 --> 00:56:16,120 Smisla? 1036 00:56:16,120 --> 00:56:17,880 1037 00:56:17,880 --> 00:56:19,150 >> Mjehurić Sortiranje. 1038 00:56:19,150 --> 00:56:25,730 Dakle Bubble sorta je u osnovi ono što si će do-- smo ga nazvati mjehurića 1039 00:56:25,730 --> 00:56:30,113 Sortiranje jer idete kroz list-- to je zapravo bolje da sam samo pokazati 1040 00:56:30,113 --> 00:56:32,300 Želite ovo-- 1041 00:56:32,300 --> 00:56:35,030 a ti ćeš usporediti susjedna broja. 1042 00:56:35,030 --> 00:56:38,410 I ti ćeš da zamijene pozicije, ako oni nisu 1043 00:56:38,410 --> 00:56:39,190 u pravom redoslijedu. 1044 00:56:39,190 --> 00:56:42,570 >> Tako je u osnovi, što će se dogoditi ovdje, na primjer, 1045 00:56:42,570 --> 00:56:44,160 imate 8 i 6. 1046 00:56:44,160 --> 00:56:47,270 Vi znate da su sortirani narudžba će zapravo biti 6 i 5, zar ne? 1047 00:56:47,270 --> 00:56:49,540 Tako da ćeš mijenjati naloge. 1048 00:56:49,540 --> 00:56:51,370 Onda vidim od 8 i 4 ovdje. 1049 00:56:51,370 --> 00:56:52,250 I ja isto. 1050 00:56:52,250 --> 00:56:53,400 Ponovno sam zamijeniti. 1051 00:56:53,400 --> 00:56:55,070 I na kraju, 2 i 8. 1052 00:56:55,070 --> 00:56:56,670 Također sam ih zamijeniti. 1053 00:56:56,670 --> 00:57:01,690 >> To se zove Bubble Sortiranje jer nakon svaki od tih iteracija, zapravo, 1054 00:57:01,690 --> 00:57:05,910 Najveći broj na popisu dobiva sve način kraju liste. 1055 00:57:05,910 --> 00:57:06,940 Da li to smisla? 1056 00:57:06,940 --> 00:57:11,880 Budući da čuva ga zamjene i kreće se s desne strane. 1057 00:57:11,880 --> 00:57:14,440 >> U redu, tako da je ovo druga iteracija. 1058 00:57:14,440 --> 00:57:17,200 To bi bilo isto. 1059 00:57:17,200 --> 00:57:20,190 Učinit ću jednu zamjenu i zatim posljednja. 1060 00:57:20,190 --> 00:57:23,290 I da nema zamjene i popis sortira. 1061 00:57:23,290 --> 00:57:27,460 Dakle, u Bubble vrste, mi u osnovi zadržati ide kroz popis i zamjene 1062 00:57:27,460 --> 00:57:32,310 stvari dok sam obavijest da nisam učinio bilo zamjene događaj koji iteracija, koja 1063 00:57:32,310 --> 00:57:34,270 znači da je popis već riješeno. 1064 00:57:34,270 --> 00:57:35,520 Smisla? 1065 00:57:35,520 --> 00:57:38,400 1066 00:57:38,400 --> 00:57:40,870 >> Pričajmo malo o pokretanju vremena. 1067 00:57:40,870 --> 00:57:45,165 Pa se vi sjetite Facu O, Omega, i Theta? 1068 00:57:45,165 --> 00:57:49,290 1069 00:57:49,290 --> 00:57:50,990 Da? 1070 00:57:50,990 --> 00:57:53,070 U redu, što je Big O, u prvom redu? 1071 00:57:53,070 --> 00:57:54,315 >> PUBLIKA: [nečujan]. 1072 00:57:54,315 --> 00:57:59,070 >> LUCAS: Da, to se zove najgori slučaj Trajanje, što samo znači da je 1073 00:57:59,070 --> 00:58:03,470 koliko ste očekivali program da se pokrenuti. 1074 00:58:03,470 --> 00:58:04,910 Kao, u smislu of-- 1075 00:58:04,910 --> 00:58:06,660 u ovom case-- n. 1076 00:58:06,660 --> 00:58:09,150 Broj elemenata Popis u najgorem slučaju. 1077 00:58:09,150 --> 00:58:12,520 Kao i, u najgorem mogućem slučaju. 1078 00:58:12,520 --> 00:58:17,100 >> Tako je za Bubble sorta, primjerice, Imamo velike O n trgu. 1079 00:58:17,100 --> 00:58:20,580 Zašto moramo da? 1080 00:58:20,580 --> 00:58:24,716 Zašto je mjehurić Sortiranje Big O n trgu? 1081 00:58:24,716 --> 00:58:27,614 >> PUBLIKA: [nečujan]. 1082 00:58:27,614 --> 00:58:35,670 >> LUCAS: Da, pa u najgorem slučaju će biti da ću morati učiniti n iteracija. 1083 00:58:35,670 --> 00:58:39,260 Dakle, svaki od iteracija će bi najveći element na kraju 1084 00:58:39,260 --> 00:58:40,290 popisa. 1085 00:58:40,290 --> 00:58:44,230 Dakle najgori slučaj je da imam učiniti tu stvar n puta. 1086 00:58:44,230 --> 00:58:48,550 A za svaki od tih vremena, moram to n swapove jer moram usporediti 1087 00:58:48,550 --> 00:58:49,870 svaka dva elementa. 1088 00:58:49,870 --> 00:58:53,730 Dakle, to je razlog zašto je n kvadrat zato što je n puta n. 1089 00:58:53,730 --> 00:59:00,120 >> Zatim, izbor sorta je također n kvadrat jer, za svaku iteraciju, moram 1090 00:59:00,120 --> 00:59:02,650 pogledati svakog pojedinog elementa na popisu. 1091 00:59:02,650 --> 00:59:04,980 I onda naći najmanji, što znači da moram 1092 00:59:04,980 --> 00:59:06,130 gledati kroz n elemenata. 1093 00:59:06,130 --> 00:59:11,750 I moram učiniti da je n puta, jer Moram odabir svih n elemenata. 1094 00:59:11,750 --> 00:59:18,273 >> Umetanje svojevrsni je n kvadrat jer je najgori mogući scenarij će 1095 00:59:18,273 --> 00:59:20,950 biti, jedan, moram umetnuti n brojeva, zar ne? 1096 00:59:20,950 --> 00:59:22,765 Pa ja već znam da ću imati n iteracija. 1097 00:59:22,765 --> 00:59:25,466 1098 00:59:25,466 --> 00:59:29,840 No, za svaki od tih brojeva, ako sam imao gledati na sve brojeve u 1099 00:59:29,840 --> 00:59:34,380 Popis razvrstani i stavio ga skroz u prednjem, da će n kvadrat 1100 00:59:34,380 --> 00:59:36,230 jer će n puta n opet. 1101 00:59:36,230 --> 00:59:38,280 Smisla? 1102 00:59:38,280 --> 00:59:41,512 Što je omega? 1103 00:59:41,512 --> 00:59:42,886 >> PUBLIKA: [nečujan]. 1104 00:59:42,886 --> 00:59:44,620 >> LUCAS: To je najbolji mogući scenarij. 1105 00:59:44,620 --> 00:59:48,810 Dakle, to je kao, u puno vremena za sortiranje, najbolji scenarij je 1106 00:59:48,810 --> 00:59:50,660 kad je već razvrstani popis. 1107 00:59:50,660 --> 00:59:52,670 Tako da stvarno ne imati ništa učiniti. 1108 00:59:52,670 --> 00:59:56,290 Mjehurić Sortiranje ima najbolji scenarij n. 1109 00:59:56,290 --> 00:59:58,820 Znaju li vi zašto? 1110 00:59:58,820 --> 01:00:00,620 >> PUBLIKA: [nečujan]. 1111 01:00:00,620 --> 01:00:05,640 >> LUCAS: Da, ako pratimo je li se podaci obrok imao swaps ili 1112 01:00:05,640 --> 01:00:10,533 Ne, ako imate nešto kao što je postavljena na istina, ako je bilo iteracija, ako 1113 01:00:10,533 --> 01:00:15,140 Popis je već sortiran, u osnovi, što će se dogoditi je da ću 1114 01:00:15,140 --> 01:00:17,890 pokušati mijenjati svaka dva susjedne elemente. 1115 01:00:17,890 --> 01:00:19,920 Idem vidjeti kako nema zamjene. 1116 01:00:19,920 --> 01:00:21,230 I upravo sam se vratiti odmah. 1117 01:00:21,230 --> 01:00:24,240 >> Dakle, to znači da sam jednostavno morala proći kroz popis jednom trenutku. 1118 01:00:24,240 --> 01:00:28,990 Dakle, to je nje, jer sam pogled na n elemenata. 1119 01:00:28,990 --> 01:00:30,930 Zašto izbor vrst n trgu? 1120 01:00:30,930 --> 01:00:35,150 1121 01:00:35,150 --> 01:00:45,520 >> Da, čak i ako Popis je sortiran, za svaka iteracija odabira vrste, ja 1122 01:00:45,520 --> 01:00:47,590 morate odabrati najmanji element. 1123 01:00:47,590 --> 01:00:49,980 Dakle, to znači da sam se pogledati na svim elementima u nesortiran 1124 01:00:49,980 --> 01:00:53,350 popis i pronaći minimum za svaku iteraciju. 1125 01:00:53,350 --> 01:00:54,600 Da li to smisla? 1126 01:00:54,600 --> 01:00:56,880 1127 01:00:56,880 --> 01:01:04,690 >> I umetanje mač je n, jer se u slučaj da pokušavam umetnuti 1128 01:01:04,690 --> 01:01:09,320 brojevi i svi brojevi, kad sam pokušajte ih umetnuti, vidim da su 1129 01:01:09,320 --> 01:01:10,510 su u pravilnom položaju. 1130 01:01:10,510 --> 01:01:15,120 Ne moram ići provjeriti sve druge Brojevi u nerazvrstani popisu. 1131 01:01:15,120 --> 01:01:17,170 Dakle, to je razlog zašto će n. 1132 01:01:17,170 --> 01:01:19,480 Smisla? 1133 01:01:19,480 --> 01:01:21,035 A što je teta? 1134 01:01:21,035 --> 01:01:23,410 >> PUBLIKA: [nečujan]. 1135 01:01:23,410 --> 01:01:24,380 >> LUCAS: Što mi je? 1136 01:01:24,380 --> 01:01:24,960 Opet reci. 1137 01:01:24,960 --> 01:01:25,666 >> PUBLIKA: [nečujan]. 1138 01:01:25,666 --> 01:01:26,490 >> LUCAS: Točno. 1139 01:01:26,490 --> 01:01:31,280 Dakle, možete vidjeti da je samo izbor pohranjeni u pisma svojevrsni imaju thetas. 1140 01:01:31,280 --> 01:01:39,920 A to je zato što imaju samo teta ako oba Big O i Omega su isti. 1141 01:01:39,920 --> 01:01:41,520 U redu. 1142 01:01:41,520 --> 01:01:44,210 I na kraju, spojiti sorta koja se u log n. 1143 01:01:44,210 --> 01:01:48,910 >> A onda, kao što je Dan je govorio, pisma svojevrsni je vrsta kao što su na isti način na koji 1144 01:01:48,910 --> 01:01:50,320 ti binarni pretragu. 1145 01:01:50,320 --> 01:01:53,530 Tako ćete dobiti popis. 1146 01:01:53,530 --> 01:01:55,170 I ti ćeš smanjiti na pola. 1147 01:01:55,170 --> 01:02:00,580 I onda ih izrezati u manjim polovice. 1148 01:02:00,580 --> 01:02:01,730 I onda ih spojiti. 1149 01:02:01,730 --> 01:02:02,960 Vi dečki ne zaboravite da je, zar ne? 1150 01:02:02,960 --> 01:02:04,960 U redu, što je on rekao. 1151 01:02:04,960 --> 01:02:08,330 >> U redu, upućuje. 1152 01:02:08,330 --> 01:02:11,078 Dakle, ono što je kazaljka? 1153 01:02:11,078 --> 01:02:12,050 >> PUBLIKA: [nečujan]. 1154 01:02:12,050 --> 01:02:12,820 >> LUCAS: adresa. 1155 01:02:12,820 --> 01:02:13,720 U redu. 1156 01:02:13,720 --> 01:02:18,530 Znam da je David pokazuje hrpu videospotovi Binky i stvari koje upućuju 1157 01:02:18,530 --> 01:02:19,080 drugoga. 1158 01:02:19,080 --> 01:02:22,960 Ali volim razmišljati o pokazivače kao pukog adresu. 1159 01:02:22,960 --> 01:02:26,110 Dakle, to je varijabla koja se događa pohraniti adresu. 1160 01:02:26,110 --> 01:02:31,940 >> Dakle, to je samo ova posebna varijabla koji je četiri bajtova. 1161 01:02:31,940 --> 01:02:36,550 Sjeti se, da je kazaljka na što je Uvijek četiri bajtova za našu 32-bitni 1162 01:02:36,550 --> 01:02:39,370 Stroj tako slučaj s aparata. 1163 01:02:39,370 --> 01:02:41,920 1164 01:02:41,920 --> 01:02:47,050 I to je upravo mjesto varijable unutar nje. 1165 01:02:47,050 --> 01:02:50,240 >> U redu, tako da je ova memorija, u osnovi. 1166 01:02:50,240 --> 01:02:57,420 Dakle, svaki blok memorije zapravo ima oznaka, što je adresa 1167 01:02:57,420 --> 01:02:58,890 slotty memorije. 1168 01:02:58,890 --> 01:03:02,370 Dakle, to znači da mogu imati pokazivač pokazuje na 1169 01:03:02,370 --> 01:03:03,380 bilo koji od tih adresa. 1170 01:03:03,380 --> 01:03:09,930 Dakle, razlog zašto ćemo koristiti upućuje se ako moram sjetiti mjesto 1171 01:03:09,930 --> 01:03:12,300 da specifična varijabla memorije. 1172 01:03:12,300 --> 01:03:16,560 >> A vi ne zaboravite da je jedan od onih slučajevi bio ako imam funkciju 1173 01:03:16,560 --> 01:03:20,820 ako imam stvarno želite zamjena za reals, zapravo sam 1174 01:03:20,820 --> 01:03:22,110 morati poslati pokazivač. 1175 01:03:22,110 --> 01:03:23,460 Ne promjenjiva. 1176 01:03:23,460 --> 01:03:25,200 Vi zapamtite to učiniti? 1177 01:03:25,200 --> 01:03:26,450 Razlika between-- 1178 01:03:26,450 --> 01:03:33,350 1179 01:03:33,350 --> 01:03:34,120 Kako se zove? 1180 01:03:34,120 --> 01:03:36,010 Pozivi prema vrijednosti i pozivom pozivanjem, zar ne? 1181 01:03:36,010 --> 01:03:36,840 >> U redu, da. 1182 01:03:36,840 --> 01:03:38,330 Tako zovu po vrijednosti. 1183 01:03:38,330 --> 01:03:43,570 Kada samo poslati varijabla funkcionirati ste samo slanje vrijednost. 1184 01:03:43,570 --> 01:03:45,610 Pa ti si zapravo šalju kopija varijable. 1185 01:03:45,610 --> 01:03:49,720 A vaš program nije me briga o ako je ista varijabla zapravo 1186 01:03:49,720 --> 01:03:51,650 čini kopiju. 1187 01:03:51,650 --> 01:03:56,330 >> I zove po referenca znači da Ja sam zapravo slanjem kopije 1188 01:03:56,330 --> 01:03:57,550 kazaljka na varijablu. 1189 01:03:57,550 --> 01:04:00,970 Dakle, to znači da šaljem Mjesto te varijable. 1190 01:04:00,970 --> 01:04:04,440 Dakle, osjećam da imam mjesto promjenjiva, kad sam nazvati funkcija 1191 01:04:04,440 --> 01:04:09,700 s pokazivača, ja sam u mogućnosti da se zapravo promjenu podataka koji je u glavni. 1192 01:04:09,700 --> 01:04:12,050 Smisla? 1193 01:04:12,050 --> 01:04:17,560 >> Iako, pokazivač je kopija, Pokazivač još uvijek ima stvarnu adresu 1194 01:04:17,560 --> 01:04:20,090 varijabla koja želim promijeniti. 1195 01:04:20,090 --> 01:04:21,920 Smisla? 1196 01:04:21,920 --> 01:04:24,290 >> Dakle, stvaranje naputke. 1197 01:04:24,290 --> 01:04:28,410 Zapamtite, pokazivač uvijek imati tip koji to pokazuje 1198 01:04:28,410 --> 01:04:29,890 na, a zatim zvijezde. 1199 01:04:29,890 --> 01:04:31,030 I onda si stavi ime. 1200 01:04:31,030 --> 01:04:35,765 Dakle, ne zaboravite da kad god imate god star, to je kao pokazivač 1201 01:04:35,765 --> 01:04:38,990 kako god promjenjiva upišite koje ste imali. 1202 01:04:38,990 --> 01:04:42,850 >> Pa ovdje u zvijezde, na primjer, to je pokazivač i cijeli broj. 1203 01:04:42,850 --> 01:04:47,680 A onda char zvijezda je pokazivač char zvijezda i tako dalje. 1204 01:04:47,680 --> 01:04:47,960 Da? 1205 01:04:47,960 --> 01:04:52,710 >> PUBLIKA: Što ako imamo pokazivač n zvijezda x. 1206 01:04:52,710 --> 01:04:55,255 Znam da se stvara pokazivač na X. 1207 01:04:55,255 --> 01:04:59,432 Da li to ujedno izjavljujem x cijeli broj? 1208 01:04:59,432 --> 01:05:05,170 >> LUCAS: U redu, tako da kada kažeš n zvijezda x, da ne stvara pokazivač 1209 01:05:05,170 --> 01:05:06,000 varijabla x. 1210 01:05:06,000 --> 01:05:08,170 Vi ste stvarajući pokazivač nazivom x. 1211 01:05:08,170 --> 01:05:09,396 >> PUBLIKA: [nečujan]. 1212 01:05:09,396 --> 01:05:14,250 >> LUCAS: Dakle, kad kažem n zvijezda x, ja sam govoreći, hej, u sjećanju, ja ću 1213 01:05:14,250 --> 01:05:16,390 dobiti jedan od ova tri kutije. 1214 01:05:16,390 --> 01:05:20,750 A ja ću reći da je to će biti x, što je 1215 01:05:20,750 --> 01:05:22,000 će biti pokazivač. 1216 01:05:22,000 --> 01:05:26,860 1217 01:05:26,860 --> 01:05:30,640 I nešto zanimljivo o pokazivače jest da kažemo da imaju 1218 01:05:30,640 --> 01:05:32,620 4 bajta za 32-bitni stroj. 1219 01:05:32,620 --> 01:05:36,320 A razlog za to je zato što 4 bajta su 32 bita. 1220 01:05:36,320 --> 01:05:40,490 >> I strojeva koji su 64 bita zapravo imati pokazivače adrese 1221 01:05:40,490 --> 01:05:43,480 da su 64 bita. 1222 01:05:43,480 --> 01:05:49,820 Dakle, to samo znači da je veličina adrese u stroju je drugačiji. 1223 01:05:49,820 --> 01:05:52,270 >> Dakle, korištenje i Dereferencing. 1224 01:05:52,270 --> 01:05:54,310 Postoje dva operatera da ti dečki trebali zapamtiti. 1225 01:05:54,310 --> 01:05:55,450 Prvi je znak za struju. 1226 01:05:55,450 --> 01:05:56,810 Drugi je zvijezda. 1227 01:05:56,810 --> 01:06:05,060 Ne dajte se zbuniti tom zvijezdom i to zvijezda, jer ne zaboravite da je u 1228 01:06:05,060 --> 01:06:06,950 Ovaj slučaj, imate n zvijezdu. 1229 01:06:06,950 --> 01:06:08,700 >> To je kao cijelu stvar zajedno. 1230 01:06:08,700 --> 01:06:10,720 Nema nje Space Star. 1231 01:06:10,720 --> 01:06:12,070 Dakle, to znači da je to tip. 1232 01:06:12,070 --> 01:06:14,870 Sjeti se, da kad imate promjenjiva zvijezda, ti si 1233 01:06:14,870 --> 01:06:16,230 Riječ je o vrsti. 1234 01:06:16,230 --> 01:06:20,540 >> Kada imate samo zvijezda, a zatim naziv varijable, to znači da 1235 01:06:20,540 --> 01:06:24,100 ti si dereferencing pokazivač, koji znači da ste u potrazi na 1236 01:06:24,100 --> 01:06:28,290 pokazivač, pronalaženje adrese to ukazujući da, ide na tu adresu, 1237 01:06:28,290 --> 01:06:30,850 i gleda na svaki put imate tamo. 1238 01:06:30,850 --> 01:06:34,310 Tako sam svojim studentima da kad imate zvijezda, te bi trebao misliti da je to 1239 01:06:34,310 --> 01:06:36,850 kratica sadržaja. 1240 01:06:36,850 --> 01:06:39,770 >> Dakle, ako imate pokazivač, a vi napraviti zvijezdu pokazivač, to je 1241 01:06:39,770 --> 01:06:41,720 Sadržaj pokazivača. 1242 01:06:41,720 --> 01:06:44,580 Dakle, ići na sve što se pokazuje na i pogled na stalnoj sadržaja. 1243 01:06:44,580 --> 01:06:47,730 A znak za struju je ista stvar kao adresu. 1244 01:06:47,730 --> 01:06:52,560 >> Dakle, ako imam varijablu A- kao, ajmo reći da sam učinio int jednak 3-- 1245 01:06:52,560 --> 01:06:56,900 ako želim pronaći adresu koja varijabla memorije, ja samo mogu učiniti 1246 01:06:56,900 --> 01:06:58,240 znak za struju. 1247 01:06:58,240 --> 01:07:00,280 Dakle, to je adresa. 1248 01:07:00,280 --> 01:07:01,530 Smisla? 1249 01:07:01,530 --> 01:07:03,790 1250 01:07:03,790 --> 01:07:05,040 >> Dakle, ovdje je primjer. 1251 01:07:05,040 --> 01:07:08,370 1252 01:07:08,370 --> 01:07:11,530 To nedostaje int B i int c. 1253 01:07:11,530 --> 01:07:16,520 Dakle int iznosi 3 znači da Ja ću otići u sjećanju. 1254 01:07:16,520 --> 01:07:19,870 A ja ću naći utor i staviti broj 3 ovdje. 1255 01:07:19,870 --> 01:07:22,200 >> A onda int b jednak 4. 1256 01:07:22,200 --> 01:07:23,100 Ja ću učiniti istu stvar. 1257 01:07:23,100 --> 01:07:25,840 Idi na memoriju i staviti broj 4 u jedan od okvira. 1258 01:07:25,840 --> 01:07:27,100 I Int jednaka 5. 1259 01:07:27,100 --> 01:07:29,740 Nađi još jednu kutiju i stavio broj 5. 1260 01:07:29,740 --> 01:07:36,160 >> Pa što je ovo linija radite? n zvijezda godišnje iznosi ampersand A. 1261 01:07:36,160 --> 01:07:37,800 Dakle, prije svega, n zvijezda godišnje. 1262 01:07:37,800 --> 01:07:39,050 Što se to radi? 1263 01:07:39,050 --> 01:07:40,930 1264 01:07:40,930 --> 01:07:42,298 >> PUBLIKA: [nečujan]. 1265 01:07:42,298 --> 01:07:47,890 >> LUCAS: Da, tako je n zvijezda godišnje, prvi put, izjavljuje pokazivač zove godišnje. 1266 01:07:47,890 --> 01:07:53,720 A onda je dodjeljivanje vrijednosti da se kazaljka biti adresu. 1267 01:07:53,720 --> 01:07:55,790 Dakle, znak za struju. 1268 01:07:55,790 --> 01:07:58,510 Zatim, ako mi je činiti zvijezda PB, ono što je PB zvijezda? 1269 01:07:58,510 --> 01:08:02,418 1270 01:08:02,418 --> 01:08:03,150 >> Oh, ispričavam se. 1271 01:08:03,150 --> 01:08:06,330 To je također nedostaje. n zvijezda PB. 1272 01:08:06,330 --> 01:08:07,905 Mislim zvijezda računalo. 1273 01:08:07,905 --> 01:08:11,200 Tako mi je žao. 1274 01:08:11,200 --> 01:08:11,940 To je ista stvar. 1275 01:08:11,940 --> 01:08:16,408 Ali sad sam dobro ar stvarajući pokazivač do b, a zatim pokazivač na c. 1276 01:08:16,408 --> 01:08:16,886 Da? 1277 01:08:16,886 --> 01:08:18,136 >> PUBLIKA: [nečujan]? 1278 01:08:18,136 --> 01:08:25,490 1279 01:08:25,490 --> 01:08:26,670 >> LUCAS: Da. 1280 01:08:26,670 --> 01:08:32,630 Dakle, ako idete u memoriju i idete okvir koji je označitelja za godišnje, 1281 01:08:32,630 --> 01:08:37,149 ti si zapravo ide vidjeti adresu. 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 Da? 1285 01:08:43,300 --> 01:08:45,605 >> PUBLIKA: [nečujan]? 1286 01:08:45,605 --> 01:08:49,260 >> LUCAS: Da, pokazivač je adresa. 1287 01:08:49,260 --> 01:08:50,120 Nikad ne zaboravite to. 1288 01:08:50,120 --> 01:08:52,800 To je kao najvažniji dio o pokazivače. 1289 01:08:52,800 --> 01:08:56,180 Tu je skladištenje i adresu do neke varijable. 1290 01:08:56,180 --> 01:08:56,890 Bilo što drugo? 1291 01:08:56,890 --> 01:08:58,370 Bilo koja druga pitanja? 1292 01:08:58,370 --> 01:08:59,189 U redu. 1293 01:08:59,189 --> 01:09:00,399 >> Dakle Kazaljke i polja. 1294 01:09:00,399 --> 01:09:08,189 Zapamtite da kada radim int polje 3, Uglavnom, ono što ja radim je sam, ljubazni 1295 01:09:08,189 --> 01:09:12,779 od, izjavljujući u pokazivaču. 1296 01:09:12,779 --> 01:09:18,960 Dakle, niz je vrsta kao što su pokazivač specifično mjesto u memoriji u kojem sam 1297 01:09:18,960 --> 01:09:21,999 izdvojila tri utora za cijelih brojeva. 1298 01:09:21,999 --> 01:09:23,430 Da li to smisla? 1299 01:09:23,430 --> 01:09:30,250 >> Dakle, kada radim int polje 3, što sam radi, u osnovi, stvara tri 1300 01:09:30,250 --> 01:09:31,479 mjesta u memoriji. 1301 01:09:31,479 --> 01:09:33,899 Pa ja samo naći tri mjesta u memoriji. 1302 01:09:33,899 --> 01:09:38,810 Dakle, ako ja, onda, niza zvijezda, to Znači sadržaj polja, 1303 01:09:38,810 --> 01:09:46,180 što znači da sam izbrisati pokazivač, idem na to mjesto da to pokazuje da se, 1304 01:09:46,180 --> 01:09:47,939 i ja staviti broj jedan. 1305 01:09:47,939 --> 01:09:53,729 >> A onda, ako ja zvijezda niz plus 1, to je ista stvar kao i radi niz 1306 01:09:53,729 --> 01:09:59,690 nosači jedan, što samo znači da idem Mjesto koje to pokazuje na. 1307 01:09:59,690 --> 01:10:03,000 A onda su plus 1 marke ja pomak za jedno mjesto. 1308 01:10:03,000 --> 01:10:06,510 Tako sam ići na to mjesto, zapravo, i staviti broj dva. 1309 01:10:06,510 --> 01:10:10,900 >> A onda, na kraju, kad radim Niz plus 2, idem tamo gdje 1310 01:10:10,900 --> 01:10:11,825 Niz je pokazujući na. 1311 01:10:11,825 --> 01:10:14,690 A onda sam se premjestiti na memorijskim blokovima. 1312 01:10:14,690 --> 01:10:16,240 A onda sam stavio broj tri ovdje. 1313 01:10:16,240 --> 01:10:16,600 Da? 1314 01:10:16,600 --> 01:10:21,400 >> PUBLIKE: Dakle zvijezda niz je jednostavno kaže se u prvoj točki. 1315 01:10:21,400 --> 01:10:25,090 A možete dodati 1, samo zato mi smo samo jako 1316 01:10:25,090 --> 01:10:27,295 pozivom taj prvi adresu. 1317 01:10:27,295 --> 01:10:28,545 >> LUCAS: Da. 1318 01:10:28,545 --> 01:10:32,720 1319 01:10:32,720 --> 01:10:36,020 Zašto nam, na primjer, kažu niz 0, polje 1 i niz 2? 1320 01:10:36,020 --> 01:10:38,970 1321 01:10:38,970 --> 01:10:42,790 Ja govorim, zašto to ne učinite 0, 1, 2, 3, umjesto 1, 2, 3? 1322 01:10:42,790 --> 01:10:46,550 Jedan od razloga je, jedna, računalo programeri radije za početak 1323 01:10:46,550 --> 01:10:47,750 računajući od 0. 1324 01:10:47,750 --> 01:10:52,370 Dva je jer kad ti niz 0, to je ista stvar kao i radi niz 1325 01:10:52,370 --> 01:10:56,330 plus 0, što znači da ću ići na da je stav, a ja to ne 1326 01:10:56,330 --> 01:10:59,320 preskočiti bilo memorijskih blokova. 1327 01:10:59,320 --> 01:11:01,750 Dakle, ja ne presele bilo memorijskih blokova. 1328 01:11:01,750 --> 01:11:02,015 Da? 1329 01:11:02,015 --> 01:11:03,265 >> PUBLIKA: [nečujan]? 1330 01:11:03,265 --> 01:11:05,928 1331 01:11:05,928 --> 01:11:12,670 >> LUCAS: Dakle, ona pita što je Razlika između događaj 1332 01:11:12,670 --> 01:11:14,000 ovo ili radite malloc. 1333 01:11:14,000 --> 01:11:17,550 Jedna razlika je u tome int polje 3 se stvara 1334 01:11:17,550 --> 01:11:19,260 Niz na stog. 1335 01:11:19,260 --> 01:11:23,080 I kad sam to malloc ga, stvara na gomili. 1336 01:11:23,080 --> 01:11:25,250 Da li to smisla? 1337 01:11:25,250 --> 01:11:28,870 >> Pa kako se malloc zapravo rade? 1338 01:11:28,870 --> 01:11:32,245 Pa zašto se onda uopće potrebno koristiti malloc? 1339 01:11:32,245 --> 01:11:35,730 1340 01:11:35,730 --> 01:11:39,700 Vaš prevodilac vrsta figure out sve varijable koje objavljene. 1341 01:11:39,700 --> 01:11:44,040 I on stvara prostor za sve od njih u snopu. 1342 01:11:44,040 --> 01:11:47,180 Dakle, sve svoje varijable idu biti negdje u snopu. 1343 01:11:47,180 --> 01:11:49,460 Dakle, ovdje je varijable okoline. 1344 01:11:49,460 --> 01:11:53,850 >> Tako je u osnovi, prostor za one varijable u memoriji se dodjeljuje na 1345 01:11:53,850 --> 01:11:55,080 sastaviti vrijeme. 1346 01:11:55,080 --> 01:11:58,790 Dakle, to znači da je vaše računalo znati sve te varijable 1347 01:11:58,790 --> 01:11:59,790 unaprijed. 1348 01:11:59,790 --> 01:12:02,500 To ne treba znati što vrijednost ti ćeš staviti u njih. 1349 01:12:02,500 --> 01:12:05,490 No, treba znati kako koliko memorije vam je potrebno. 1350 01:12:05,490 --> 01:12:09,380 >> Ali sada recimo da je, primjerice, koju stvara niz ili uzimanje 1351 01:12:09,380 --> 01:12:13,430 niz koji ste uzimanje od korisnika. 1352 01:12:13,430 --> 01:12:17,300 Ne znam koliko dugo niz koja će se, na primjer. 1353 01:12:17,300 --> 01:12:20,600 Dakle, ne znam točno koliko je memorija blokovi li izdvojiti, zar ne? 1354 01:12:20,600 --> 01:12:24,120 >> Tako da se zapravo ne smisla za što reći staviti 100 znakova. 1355 01:12:24,120 --> 01:12:26,420 I što onda ako korisnik piše 150? 1356 01:12:26,420 --> 01:12:27,670 Ti ćeš biti pijan. 1357 01:12:27,670 --> 01:12:30,160 1358 01:12:30,160 --> 01:12:34,620 >> Tako je u osnovi, ne možete biti sigurni kako koliko memorije vam je potrebno izdvojiti 1359 01:12:34,620 --> 01:12:35,960 kada sastaviti program. 1360 01:12:35,960 --> 01:12:38,240 Vi samo znate da se na vrijeme protoka. 1361 01:12:38,240 --> 01:12:39,950 Dakle, to je razlog zašto imate hrpu. 1362 01:12:39,950 --> 01:12:47,610 Dakle, gomila će imati sjećanje da ste tijekom dodjele 1363 01:12:47,610 --> 01:12:50,810 Trajanje programa trčanja. 1364 01:12:50,810 --> 01:12:55,780 >> Tako je u osnovi, kada ne malloc, što radite izdvaja memoriju na 1365 01:12:55,780 --> 01:13:00,160 Trajanje, što znači da ste odlučivanju pravo u tom trenutku da vas 1366 01:13:00,160 --> 01:13:02,670 trebao imati tu uspomenu. 1367 01:13:02,670 --> 01:13:04,210 Dakle, to je kad ste ga dodjele. 1368 01:13:04,210 --> 01:13:06,430 Da li to smisla? 1369 01:13:06,430 --> 01:13:11,690 >> Tako zapamtite, stog ima varijabli koje su stvorene na vrijeme prevođenja. 1370 01:13:11,690 --> 01:13:14,560 I onda gomila ima varijabli koji su stvorili kao što ide 1371 01:13:14,560 --> 01:13:15,600 malloc s, na primjer. 1372 01:13:15,600 --> 01:13:16,850 >> PUBLIKA: [nečujan]? 1373 01:13:16,850 --> 01:13:19,179 1374 01:13:19,179 --> 01:13:24,340 >> LUCAS: Tako je GetString nazvati malloc. 1375 01:13:24,340 --> 01:13:26,710 Razgovarat ću o tome malloc, a Ja ću objasniti GetString. 1376 01:13:26,710 --> 01:13:32,000 Dakle malloc je ista stvar kao što je dodjela memorije. 1377 01:13:32,000 --> 01:13:34,600 Dakle, to će se dodijeliti memorije na hrpi. 1378 01:13:34,600 --> 01:13:40,010 I to će se vratiti kazaljke na gdje je ta memorija je dodijeljeno na. 1379 01:13:40,010 --> 01:13:43,090 >> Dakle, kada ste do-- 1380 01:13:43,090 --> 01:13:44,910 Ovdje example-- 1381 01:13:44,910 --> 01:13:45,830 n zvijezda pokazivač. 1382 01:13:45,830 --> 01:13:50,520 A onda se kazaljka jednako malloc veličina inča puta 10. 1383 01:13:50,520 --> 01:13:52,110 Ja sam stvaranje pokazivač. 1384 01:13:52,110 --> 01:13:59,020 A onda sam dodjeljivanje da pokazivač vrijednost pokazivača koji malloc 1385 01:13:59,020 --> 01:13:59,680 se mi daje. 1386 01:13:59,680 --> 01:14:04,150 >> Dakle, tražim malloc možete dodijeliti Prostor za 10 brojeva. 1387 01:14:04,150 --> 01:14:05,390 To je ono što govori. 1388 01:14:05,390 --> 01:14:09,020 I malloc me vraća kazaljka na tom mjestu. 1389 01:14:09,020 --> 01:14:11,460 Smisla? 1390 01:14:11,460 --> 01:14:12,270 U redu. 1391 01:14:12,270 --> 01:14:17,940 Ja I GetString je, u osnovi, radi pozvati na malloc tako da možete dodijeliti 1392 01:14:17,940 --> 01:14:21,680 memorije za vrijeme izvođenja. 1393 01:14:21,680 --> 01:14:26,460 >> Uvijek imajte na umu da provjerite null jer malloc će se vratiti null 1394 01:14:26,460 --> 01:14:28,200 ako se ne može dodijeliti memoriju. 1395 01:14:28,200 --> 01:14:31,660 Recimo da pitate za smiješno količina memorije. 1396 01:14:31,660 --> 01:14:33,950 Računalo neće biti u mogućnosti izdvojiti toliko. 1397 01:14:33,950 --> 01:14:36,410 >> Dakle malloc samo ide da se vrati null. 1398 01:14:36,410 --> 01:14:42,210 Tako se uvijek sjećati da biste provjerili Pokazivač koju je dobio od malloc je 1399 01:14:42,210 --> 01:14:45,640 null ili ne, jer, ako je, možda ćete se dereferencing pokazivač i 1400 01:14:45,640 --> 01:14:48,340 uzrokuje popratne greške. 1401 01:14:48,340 --> 01:14:50,930 I na kraju, ne zaboravite Vaša slobodna memorija. 1402 01:14:50,930 --> 01:14:57,800 1403 01:14:57,800 --> 01:15:00,560 >> Malloc stvara sjećanje na hrpi. 1404 01:15:00,560 --> 01:15:03,436 I morate osloboditi memoriju prije završetka programa. 1405 01:15:03,436 --> 01:15:05,370 U redu, to je sve za mene. 1406 01:15:05,370 --> 01:15:07,900 Žao nam je, Rob. 1407 01:15:07,900 --> 01:15:07,950 Hvala. 1408 01:15:07,950 --> 01:15:09,878 >> [Pljesak] 1409 01:15:09,878 --> 01:15:12,679 >> LUCAS: Bilo posljednjih pitanja Prije Rob dolazi? 1410 01:15:12,679 --> 01:15:13,138 Ne? 1411 01:15:13,138 --> 01:15:13,597 Da? 1412 01:15:13,597 --> 01:15:15,892 >> PUBLIKA: Nisam vidio ovo je jedan on-line. 1413 01:15:15,892 --> 01:15:17,269 Jeste li ga prenijeli još? 1414 01:15:17,269 --> 01:15:19,106 >> LUCAS: Mislim da je Dave upload uskoro. 1415 01:15:19,106 --> 01:15:19,880 >> DAVE: To će biti objavljena. 1416 01:15:19,880 --> 01:15:20,310 >> LUCAS: To će biti online. 1417 01:15:20,310 --> 01:15:21,175 >> PUBLIKA: To je gore. 1418 01:15:21,175 --> 01:15:22,090 >> LUCAS: To je gore? 1419 01:15:22,090 --> 01:15:23,157 U redu. 1420 01:15:23,157 --> 01:15:23,644 Da? 1421 01:15:23,644 --> 01:15:27,053 >> PUBLIKA: [nečujan]? 1422 01:15:27,053 --> 01:15:30,285 >> LUCAS: Da, trebali osloboditi sve memorije koja se stavlja u hrpi. 1423 01:15:30,285 --> 01:15:31,535 >> PUBLIKA: [nečujan]? 1424 01:15:31,535 --> 01:15:34,518 1425 01:15:34,518 --> 01:15:36,160 >> LUCAS: Da. 1426 01:15:36,160 --> 01:15:39,980 Svaki put kada imate kulture malloc, trebali imati kulturu besplatno 1427 01:15:39,980 --> 01:15:42,640 Nakon što prestanete koristiti tu varijablu. 1428 01:15:42,640 --> 01:15:44,800 Dakle malloc i slobodno se uvijek zajedno. 1429 01:15:44,800 --> 01:15:45,410 Njihovi najbolji prijatelji. 1430 01:15:45,410 --> 01:15:46,720 Da. 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: Idem brzo. 1434 01:15:56,850 --> 01:16:00,466 I također video će biti postavljena. 1435 01:16:00,466 --> 01:16:01,716 Imam mikrofon na. 1436 01:16:01,716 --> 01:16:24,060 1437 01:16:24,060 --> 01:16:26,230 >> U redu, tako da tjedan pet stvari. 1438 01:16:26,230 --> 01:16:27,970 Prva stvar koju imamo je stog. 1439 01:16:27,970 --> 01:16:33,390 Dakle, ne zaboravite da postoji samo jedan snop Okvir po aktivnom funkcije poziva. 1440 01:16:33,390 --> 01:16:34,710 Vidjet ćemo da se u sekundu. 1441 01:16:34,710 --> 01:16:37,850 I također sjetiti što zapravo ide u svakom stog okvira će biti 1442 01:16:37,850 --> 01:16:41,880 lokalne varijable naših funkcija, argumenti koji su doneseni u našu 1443 01:16:41,880 --> 01:16:43,880 funkcije, zajedno s nekoliko ostale stvari koje zapravo ne 1444 01:16:43,880 --> 01:16:45,260 morate brinuti o tome. 1445 01:16:45,260 --> 01:16:50,950 >> Dakle, ovdje je primjer programa u kojem, obavijest, glavna je printfing povratak 1446 01:16:50,950 --> 01:16:52,830 Vrijednost foo 4. 1447 01:16:52,830 --> 01:16:57,930 Foo samo će se vratiti Vrijednost bar 4 zarezom 6. 1448 01:16:57,930 --> 01:17:02,380 I ovdje će se postaviti i neke lokalne varijabla n jednaka 4 puta 6. 1449 01:17:02,380 --> 01:17:03,920 A onda se vrati n. 1450 01:17:03,920 --> 01:17:09,130 >> Pa pogledajmo dimnjaku u cijeloj Stvarni iteracija ovog programa. 1451 01:17:09,130 --> 01:17:10,500 Tako da je dno našeg dimnjaka. 1452 01:17:10,500 --> 01:17:12,620 Ne zaboravite da je snop odraste. 1453 01:17:12,620 --> 01:17:15,370 Dakle, na dnu naše stog, mi Imate čipove okvir za glavno. 1454 01:17:15,370 --> 01:17:17,000 Kada pokrenete program, glavna uvijek će biti na 1455 01:17:17,000 --> 01:17:18,560 Donji dio naše stog. 1456 01:17:18,560 --> 01:17:20,880 >> A što je unutar našeg stog okvir za glavni? 1457 01:17:20,880 --> 01:17:23,810 Dakle, iako ne postoje lokalni varijable za glavni, kao što sam rekao prije, 1458 01:17:23,810 --> 01:17:29,670 smo argc i RGV zauzima prostor unutar glavne stog okvira. 1459 01:17:29,670 --> 01:17:33,260 Dakle, glavna je sada ide na pozvati funkciju Foo. 1460 01:17:33,260 --> 01:17:35,125 A to znači Foo će dobili svoj stack okvir. 1461 01:17:35,125 --> 01:17:36,970 >> Dakle, sada smo unutar Funkcija Foo. 1462 01:17:36,970 --> 01:17:38,610 A ono što treba ići u Foo je stog okvira? 1463 01:17:38,610 --> 01:17:41,100 Pa, Foo ima argument n. 1464 01:17:41,100 --> 01:17:45,440 I n je jednako 4, budući da je ono Glavni prolazi kao Foo argumenta. 1465 01:17:45,440 --> 01:17:48,490 >> Tako sada Foo će pozvati bar. 1466 01:17:48,490 --> 01:17:52,070 Ono što se ovdje događa da unutar svoje 'stack frame? 1467 01:17:52,070 --> 01:17:55,610 Ima x jednak 4 y jednak šest. 1468 01:17:55,610 --> 01:17:58,540 To nije sve što ćemo imati u okviru stog, jer se ovdje 1469 01:17:58,540 --> 01:18:00,580 također ima lokalne varijablu n. 1470 01:18:00,580 --> 01:18:03,370 A nje ćemo postaviti jednak 24. 1471 01:18:03,370 --> 01:18:05,750 >> Tako sada bar će vratiti n. 1472 01:18:05,750 --> 01:18:09,300 Dakle, ovdje se vraća 24 do stog okvir Foo. 1473 01:18:09,300 --> 01:18:12,560 A budući da se ovdje sada se vraćaju, da znači da smo iskakanje stog okvir 1474 01:18:12,560 --> 01:18:14,250 za bar off od stog. 1475 01:18:14,250 --> 01:18:18,430 Dakle, sve memorije koja se ovdje bio korištenjem sad isključen dimnjaku. 1476 01:18:18,430 --> 01:18:21,550 >> Sada, Foo također ide Za povratak na glavni 24. 1477 01:18:21,550 --> 01:18:25,470 Tako da sada Foo vraća, sjećanje da Foo je koristio u svojoj ' 1478 01:18:25,470 --> 01:18:27,550 stog okvir je također nestao. 1479 01:18:27,550 --> 01:18:29,660 A sada, glavna će se zvati printf. 1480 01:18:29,660 --> 01:18:31,660 Pa printf je samo još jedna funkcija. 1481 01:18:31,660 --> 01:18:35,320 Kad mi zovemo printf, to će biti još jedan snop okvir za printf 1482 01:18:35,320 --> 01:18:36,470 Funkcija poziva. 1483 01:18:36,470 --> 01:18:37,990 >> Što mi prolaze printf? 1484 01:18:37,990 --> 01:18:40,090 To je ono što će otići na svojoj stog okvira. 1485 01:18:40,090 --> 01:18:44,970 U najmanju ruku, mi smo prolazu da posto sam obrnute kose crte n i 1486 01:18:44,970 --> 01:18:47,180 Argument 24. 1487 01:18:47,180 --> 01:18:50,370 To bi moglo imati više u to stack frame printf ako se dogodi da se pomoću neke 1488 01:18:50,370 --> 01:18:51,200 lokalnim varijablama. 1489 01:18:51,200 --> 01:18:51,920 Ne znamo. 1490 01:18:51,920 --> 01:18:53,810 >> No, sve to ide u printf-ih stog okvir. 1491 01:18:53,810 --> 01:18:55,740 To će se izvršiti printf. 1492 01:18:55,740 --> 01:18:56,830 Zatim printf je učinio. 1493 01:18:56,830 --> 01:18:57,820 To će se vratiti. 1494 01:18:57,820 --> 01:18:58,960 Konačno, glavni je učinio. 1495 01:18:58,960 --> 01:18:59,860 Glavni će se vratiti. 1496 01:18:59,860 --> 01:19:02,020 I onda naš program je učinio. 1497 01:19:02,020 --> 01:19:02,480 Da? 1498 01:19:02,480 --> 01:19:04,505 >> PUBLIKA: Vidite li [nečujan] 1499 01:19:04,505 --> 01:19:05,900 Argumenti [nečujan] 1500 01:19:05,900 --> 01:19:06,830 parametri? 1501 01:19:06,830 --> 01:19:09,970 >> ROB: Dakle, postoji suptilna razlika između argumenata i parametara. 1502 01:19:09,970 --> 01:19:14,400 I doista, u zajedničkom govoriti, ljudi imaju tendenciju Samo ih miješati cijelo vrijeme. 1503 01:19:14,400 --> 01:19:17,550 No, parametri su formalno Naziv stvari. 1504 01:19:17,550 --> 01:19:20,180 >> Dakle argc i argv su Parametri za glavni. 1505 01:19:20,180 --> 01:19:23,440 Argumenti su ono što zapravo prolaze kao tim parametrima. 1506 01:19:23,440 --> 01:19:28,340 Tako da kad sam nazvati Foo 4, 4 je argument sam u prolazu. 1507 01:19:28,340 --> 01:19:31,460 I parametar n, unutar Foo, poprima vrijednosti 4 1508 01:19:31,460 --> 01:19:32,880 od 4 bio argument. 1509 01:19:32,880 --> 01:19:35,826 >> PUBLIKA: [nečujan]? 1510 01:19:35,826 --> 01:19:37,880 >> ROB: n je lokalna varijabla u bar. 1511 01:19:37,880 --> 01:19:41,420 1512 01:19:41,420 --> 01:19:44,960 n je i dalje lokalne do foo, ali to je parametar na Foo. 1513 01:19:44,960 --> 01:19:48,190 To nije lokalna varijabla. 1514 01:19:48,190 --> 01:19:48,546 Da? 1515 01:19:48,546 --> 01:19:51,180 >> PUBLIKA: [nečujan]? 1516 01:19:51,180 --> 01:19:55,400 >> ROB: Foo jednostavno zove bar i povratka u kakvim se ovdje vraća. 1517 01:19:55,400 --> 01:19:56,786 >> PUBLIKA: [nečujan]? 1518 01:19:56,786 --> 01:19:59,591 >> ROB: Da, samo da vidim višestruki stog okvire. 1519 01:19:59,591 --> 01:20:00,082 Da? 1520 01:20:00,082 --> 01:20:03,519 >> PUBLIKA: Zašto je Foo zove prije printf? 1521 01:20:03,519 --> 01:20:05,920 >> ROB: Zašto je Foo nazvao prije printf? 1522 01:20:05,920 --> 01:20:10,740 Tako sam mogao imati, umjesto toga, učinili nešto kao int x jednaka Foo od 4 1523 01:20:10,740 --> 01:20:12,980 a zatim tiskana x. 1524 01:20:12,980 --> 01:20:17,900 No, umjesto toga, u kombinaciji sam funkciju pozvati u printf argument. 1525 01:20:17,900 --> 01:20:23,670 >> Ali primijetite da ne možemo zapravo izvršavanje poziva da printf dok ne 1526 01:20:23,670 --> 01:20:25,610 shvatiti što Foo 4 je. 1527 01:20:25,610 --> 01:20:27,480 Tako ćemo ocijeniti ovu. 1528 01:20:27,480 --> 01:20:32,504 I samo jednom da je učinjeno ide vratiti i ocijeniti to. 1529 01:20:32,504 --> 01:20:32,990 Da? 1530 01:20:32,990 --> 01:20:37,364 >> PUBLIKA: Od obje trake [nečujan] 1531 01:20:37,364 --> 01:20:41,738 vrijednost, zašto ne bismo imati [nečujan]? 1532 01:20:41,738 --> 01:20:44,400 >> ROB: Oni bi stvarno trebao biti int. 1533 01:20:44,400 --> 01:20:46,260 To nije bio uhvaćen tijekom višestruki prolazi. 1534 01:20:46,260 --> 01:20:49,010 Dakle, to bi trebalo biti int bar i int Foo jer su i one 1535 01:20:49,010 --> 01:20:50,460 se vraćaju prirodni brojevi. 1536 01:20:50,460 --> 01:20:54,214 Void je samo ako se ne ide za povratak stvarne vrijednosti. 1537 01:20:54,214 --> 01:20:54,692 Da? 1538 01:20:54,692 --> 01:20:58,038 >> PUBLIKA: Ako ste imali liniju gore povratka, [nečujan]? 1539 01:20:58,038 --> 01:21:01,862 1540 01:21:01,862 --> 01:21:03,730 >> ROB: linija iznad povratka? 1541 01:21:03,730 --> 01:21:04,410 >> PUBLIKA: Da. 1542 01:21:04,410 --> 01:21:10,780 Kao, ako si učinio printf i [nečujan], bi se ispisati dva puta? 1543 01:21:10,780 --> 01:21:12,992 >> ROB: Tako unutar foo? 1544 01:21:12,992 --> 01:21:15,945 Ako smo imali printf ovdje? 1545 01:21:15,945 --> 01:21:16,750 >> PUBLIKA: Da. 1546 01:21:16,750 --> 01:21:19,510 >> ROB: Dakle, ako smo imali pravo printf ovdje, to će ispisati jednom. 1547 01:21:19,510 --> 01:21:23,400 Budući da smo se zove Foo jednom u pravu ovdje, onda ćemo udariti printf. 1548 01:21:23,400 --> 01:21:24,620 Onda ćemo pozvati bar. 1549 01:21:24,620 --> 01:21:25,710 I onda Foo će se vratiti. 1550 01:21:25,710 --> 01:21:26,275 I to je to. 1551 01:21:26,275 --> 01:21:30,985 Mi samo ikada naići Jednom printf. 1552 01:21:30,985 --> 01:21:31,482 Da? 1553 01:21:31,482 --> 01:21:32,973 >> PUBLIKA: [nečujan] 1554 01:21:32,973 --> 01:21:37,950 printf pozivom Foo zato što smo prvi nazivajući printf a onda smo prolazu 1555 01:21:37,950 --> 01:21:38,580 argumenti. 1556 01:21:38,580 --> 01:21:40,960 >> ROB: Tako je u teoriji, nije printf zove Foo? 1557 01:21:40,960 --> 01:21:42,220 Dakle, nema. 1558 01:21:42,220 --> 01:21:47,360 Samo bi da c će izvršavanje tih stvari je, prije nego što možemo 1559 01:21:47,360 --> 01:21:49,800 pozvati funkciju, sve argumente da funkcije mora 1560 01:21:49,800 --> 01:21:51,600 biti potpuno vrednovati. 1561 01:21:51,600 --> 01:21:53,540 Tako je to u potpunosti vrednovati? 1562 01:21:53,540 --> 01:21:54,610 Da, to je samo niz. 1563 01:21:54,610 --> 01:21:55,480 To je samo vrijednost. 1564 01:21:55,480 --> 01:21:57,200 >> Tada moramo potpuno ocijeniti ovu. 1565 01:21:57,200 --> 01:21:59,720 Nakon što je to učinio, sada sve njegovi argumenti se ocjenjuju. 1566 01:21:59,720 --> 01:22:01,982 A sada možemo napraviti pozvati na printf. 1567 01:22:01,982 --> 01:22:02,478 Da? 1568 01:22:02,478 --> 01:22:03,966 >> PUBLIKA: Jedno pitanje. 1569 01:22:03,966 --> 01:22:06,942 Ako imate funkciju void, mora imate povratnu-zarez? 1570 01:22:06,942 --> 01:22:09,910 >> ROB: Ne znaš povratak zarez Ako imate funkciju void. 1571 01:22:09,910 --> 01:22:13,370 1572 01:22:13,370 --> 01:22:14,780 U redu. 1573 01:22:14,780 --> 01:22:15,830 Pa sad neka hrpa stvari. 1574 01:22:15,830 --> 01:22:19,640 Dakle, gomila je kako ćemo se nositi s dinamičnim upravljanje memorijom. 1575 01:22:19,640 --> 01:22:23,100 A to je izravno u suprotnosti s stog što bismo nazvali automatski 1576 01:22:23,100 --> 01:22:24,100 upravljanje memorijom. 1577 01:22:24,100 --> 01:22:27,140 >> Dakle, na hrpu, nikada stvarno imati se nositi s time kako lokalnim varijablama 1578 01:22:27,140 --> 01:22:30,400 guraju i popped off sve ove stog okviri i sve te stvari. 1579 01:22:30,400 --> 01:22:31,070 Vi ne morate brinuti o tome. 1580 01:22:31,070 --> 01:22:32,070 To je automatski. 1581 01:22:32,070 --> 01:22:36,990 Dakle, gomila je za upotrebu. 1582 01:22:36,990 --> 01:22:38,070 I [nečujan] 1583 01:22:38,070 --> 01:22:41,260 dolazi iz tih funkcija malloc i besplatno. 1584 01:22:41,260 --> 01:22:43,550 >> Dakle, ovdje je drugi program. 1585 01:22:43,550 --> 01:22:47,145 Sve što radite je mallocing cijeli broj. 1586 01:22:47,145 --> 01:22:49,360 Mi smo ga pohrane u kategorizaciji x. 1587 01:22:49,360 --> 01:22:52,520 Naravno, moramo provjeriti da li je x null. 1588 01:22:52,520 --> 01:22:56,400 Onda ćemo samo postaviti ono x je pokazujući na 50. 1589 01:22:56,400 --> 01:23:00,350 1590 01:23:00,350 --> 01:23:03,260 Ispis ono x upire prstom, print x, a zatim slobodno x. 1591 01:23:03,260 --> 01:23:08,920 >> Pa kako je to zapravo će izgledati ako gledamo naše hrpu i hrpu? 1592 01:23:08,920 --> 01:23:10,950 Tako ćemo početi ispočetka. 1593 01:23:10,950 --> 01:23:12,580 Donji dio naše stog kao i prije. 1594 01:23:12,580 --> 01:23:15,930 Sjetite se da ti gomila izravno protivi stog? 1595 01:23:15,930 --> 01:23:18,850 Tako ćemo imati vrhu naše hrpu tamo. 1596 01:23:18,850 --> 01:23:22,590 >> Dakle dnu naše stog, imamo Naš stog okvir za glavno. 1597 01:23:22,590 --> 01:23:28,000 Ima prostora za argc, argv, a mi Sada imaju lokalne varijable X, koji 1598 01:23:28,000 --> 01:23:30,030 je Int zvijezda. 1599 01:23:30,030 --> 01:23:32,240 Tako ćemo ponoviti kroz ovaj program. 1600 01:23:32,240 --> 01:23:34,420 Prva stvar koju imamo poziv na malloc. 1601 01:23:34,420 --> 01:23:36,250 >> Tako činimo poziv malloc. 1602 01:23:36,250 --> 01:23:37,100 Malloc je funkcija. 1603 01:23:37,100 --> 01:23:38,770 To će dobiti stack okvir. 1604 01:23:38,770 --> 01:23:40,180 Što nam prolazi na malloc? 1605 01:23:40,180 --> 01:23:41,610 To će ići unutra iz dimnjaka okvira. 1606 01:23:41,610 --> 01:23:45,130 Mi prolazi veličine n, što je 4. 1607 01:23:45,130 --> 01:23:49,700 Tako da je prošao na malloc. 1608 01:23:49,700 --> 01:23:50,910 >> Što malloc učiniti? 1609 01:23:50,910 --> 01:23:53,820 To nam dočepa neki prostor na hrpi. 1610 01:23:53,820 --> 01:23:55,320 Tako ćemo ići na hrpi. 1611 01:23:55,320 --> 01:23:57,990 A mi idemo u zgrabite 4 bajta iz hrpe. 1612 01:23:57,990 --> 01:24:01,500 Pa neka je samo dati da proizvoljna adresa. 1613 01:24:01,500 --> 01:24:06,680 0x123 Samo pretvarati da je adresa koja je na hrpi. 1614 01:24:06,680 --> 01:24:12,300 >> Dakle, ono što je zapravo unutar koje područje memorije na adresi Ox123? 1615 01:24:12,300 --> 01:24:13,080 Garbage. 1616 01:24:13,080 --> 01:24:15,270 Pa nismo pohranjeni u njemu ništa. 1617 01:24:15,270 --> 01:24:18,830 Dakle, koliko mi znamo, to mogao biti ništa. 1618 01:24:18,830 --> 01:24:20,560 Vi ne bi trebali pretpostaviti da je nula. 1619 01:24:20,560 --> 01:24:23,870 To je vjerojatno nije nula. 1620 01:24:23,870 --> 01:24:26,260 >> Tako sada malloc vraća. 1621 01:24:26,260 --> 01:24:28,020 I što nam je činiti kada se malloc vraća? 1622 01:24:28,020 --> 01:24:29,800 Postavili smo ono što se vraća. 1623 01:24:29,800 --> 01:24:32,290 Mi smo postavili x jednaka onome što ona se vraća. 1624 01:24:32,290 --> 01:24:33,690 Pa što je to povratak? 1625 01:24:33,690 --> 01:24:38,150 To je povratak 0x123 budući da je adresa bloka u memoriji da to 1626 01:24:38,150 --> 01:24:40,850 Samo izdvojila u gomili. 1627 01:24:40,850 --> 01:24:47,160 >> Dakle, povratak 0x123 x sada će biti postavljen jednak 0x123 koja je, slikovito, 1628 01:24:47,160 --> 01:24:52,940 Često smo izvući što x ima stvarna strelica na tom bloku. 1629 01:24:52,940 --> 01:24:55,820 No x samo je spremanje tu adresu. 1630 01:24:55,820 --> 01:24:58,670 Zato sada moramo provjeriti da li je x null. 1631 01:24:58,670 --> 01:24:59,120 To nije null. 1632 01:24:59,120 --> 01:25:02,170 Mi se pretvarati da je malloc uspjeli. 1633 01:25:02,170 --> 01:25:04,950 >> Dakle, sada star 50 x jednaka. 1634 01:25:04,950 --> 01:25:08,450 Dakle zvijezda pamti to znači idi na tu adresu. 1635 01:25:08,450 --> 01:25:12,700 Dakle 0x123 ćemo idi na tu adresu. 1636 01:25:12,700 --> 01:25:14,660 Dakle, to nas dovodi tamo gore. 1637 01:25:14,660 --> 01:25:16,310 Što radimo na toj adresi? 1638 01:25:16,310 --> 01:25:19,020 Mi pohranu 50. 1639 01:25:19,020 --> 01:25:22,500 >> Dakle, nakon ove linije, to je ono što stvari će izgledati. 1640 01:25:22,500 --> 01:25:24,640 Dakle, sada to više nije smeće tamo. 1641 01:25:24,640 --> 01:25:28,910 Sada znamo da je 50 je u tome Posebno adresa jer 1642 01:25:28,910 --> 01:25:32,410 smo ga postavili na to. 1643 01:25:32,410 --> 01:25:32,790 OK? 1644 01:25:32,790 --> 01:25:34,370 Dakle, sada idemo ispisati f. 1645 01:25:34,370 --> 01:25:38,490 >> Dakle, prvo ćemo ispisati zvijezda x. 1646 01:25:38,490 --> 01:25:39,640 Dakle, ono što je zvijezda x? 1647 01:25:39,640 --> 01:25:44,300 Opet, zvijezda x znači ići Ono što se pokazuje na x. 1648 01:25:44,300 --> 01:25:47,140 Dakle, x je spremanje 0x123 Idite na to. 1649 01:25:47,140 --> 01:25:48,490 Mi smo dobili 50. 1650 01:25:48,490 --> 01:25:50,540 Tako ispisati f to. 1651 01:25:50,540 --> 01:25:54,900 A to znači da će se ispisati 50. 1652 01:25:54,900 --> 01:25:56,850 I onda da se vraća. 1653 01:25:56,850 --> 01:25:58,340 >> I onda imamo drugu printf. 1654 01:25:58,340 --> 01:25:59,370 Mi smo sada posto str. 1655 01:25:59,370 --> 01:26:01,680 Ako niste vidjeli, to je koliko ste ispisali pokazivač. 1656 01:26:01,680 --> 01:26:04,960 Dakle, imamo posto ja, posto f, i sve one koji su već. 1657 01:26:04,960 --> 01:26:07,160 Dakle posto p, ispisati pokazivač. 1658 01:26:07,160 --> 01:26:08,920 >> Tako je x pokazivač. 1659 01:26:08,920 --> 01:26:13,440 Dakle, ako ćemo ispisati x sebi, mi smo ispis što je zapravo unutra 1660 01:26:13,440 --> 01:26:19,220 X, koji je 0x123 Pa prvi print f će ispisati 50. 1661 01:26:19,220 --> 01:26:23,620 Drugi ispis f ide ispisati 0x123 Da? 1662 01:26:23,620 --> 01:26:27,460 >> PUBLIKA: Koristite li posto x za ispis pokazivač? 1663 01:26:27,460 --> 01:26:31,200 >> ROB: Pa vi koristite posto x za ispis pokazivač? 1664 01:26:31,200 --> 01:26:38,350 Tako možete, ali posto je x samo, Općenito, za kao i ako imate neke 1665 01:26:38,350 --> 01:26:40,325 cijeli broj i želite ispisati to je kao heksadecimalni. 1666 01:26:40,325 --> 01:26:43,250 1667 01:26:43,250 --> 01:26:44,880 To je samo kako ćete to učiniti. 1668 01:26:44,880 --> 01:26:47,160 >> Budući da, posto d bi ispisati decimale. 1669 01:26:47,160 --> 01:26:50,310 To su mi dobiti posto d. Ja je samo broj. 1670 01:26:50,310 --> 01:26:52,690 posto je p specifično Za naputke. 1671 01:26:52,690 --> 01:26:54,060 >> Tako je x pokazivač. 1672 01:26:54,060 --> 01:26:56,360 Želimo iskoristiti posto str. 1673 01:26:56,360 --> 01:26:57,937 Ali posto x mogao raditi. 1674 01:26:57,937 --> 01:26:58,414 Da? 1675 01:26:58,414 --> 01:26:59,664 >> PUBLIKA: [nečujan]? 1676 01:26:59,664 --> 01:27:04,138 1677 01:27:04,138 --> 01:27:05,388 >> ROB: Da. 1678 01:27:05,388 --> 01:27:07,870 1679 01:27:07,870 --> 01:27:13,440 Barem za to call-- pa sam nije ga uključiti ovdje u. 1680 01:27:13,440 --> 01:27:19,850 No, ove dvije tvrdnje su nužno unutar tog okvira stog 1681 01:27:19,850 --> 01:27:23,040 zajedno sa svim lokalnim varijablama printf dogoditi da se koriste. 1682 01:27:23,040 --> 01:27:27,020 A onda sljedeći poziv na printf sada unutar printf stog okvir 1683 01:27:27,020 --> 01:27:33,960 Obrnuta kosa crta posto p n i što god vrijednost X, koji je 0x123. 1684 01:27:33,960 --> 01:27:34,425 Da? 1685 01:27:34,425 --> 01:27:35,675 >> PUBLIKA: [nečujan]? 1686 01:27:35,675 --> 01:27:38,145 1687 01:27:38,145 --> 01:27:40,880 >> ROB: To će ispisati nešto da izgleda ovako. 1688 01:27:40,880 --> 01:27:41,846 >> PUBLIKA: [nečujan]. 1689 01:27:41,846 --> 01:27:44,510 >> ROB: Tako se to ispisuje u adresnu obliku. 1690 01:27:44,510 --> 01:27:47,003 Izgleda poput adrese. 1691 01:27:47,003 --> 01:27:47,494 Da? 1692 01:27:47,494 --> 01:27:49,458 >> PUBLIKA: [nečujan]? 1693 01:27:49,458 --> 01:27:51,075 >> ROB: Zašto je što? 1694 01:27:51,075 --> 01:27:52,920 >> PUBLIKA: [nečujan]? 1695 01:27:52,920 --> 01:27:55,240 >> ROB: Zašto je ovo pokazivač 4 bajta? 1696 01:27:55,240 --> 01:27:58,500 Dakle, postoje cijela hrpa od 0-ih godina ispred ove. 1697 01:27:58,500 --> 01:28:03,740 Dakle, to je stvarno 0x0000000123. 1698 01:28:03,740 --> 01:28:06,510 Na 64-bitnom sustavu, ne bi bilo cijela hrpa više nula. 1699 01:28:06,510 --> 01:28:11,410 1700 01:28:11,410 --> 01:28:11,900 Da? 1701 01:28:11,900 --> 01:28:13,150 >> PUBLIKA: [nečujan]. 1702 01:28:13,150 --> 01:28:17,290 1703 01:28:17,290 --> 01:28:21,130 >> ROB: Tako prvi printf će print-- 1704 01:28:21,130 --> 01:28:21,980 >> PUBLIKA: [nečujan]. 1705 01:28:21,980 --> 01:28:24,420 >> ROB: Da, to će se ispisati ono x pokazuje da. 1706 01:28:24,420 --> 01:28:27,030 1707 01:28:27,030 --> 01:28:29,070 Star kaže što je to što ukazuje na. 1708 01:28:29,070 --> 01:28:30,300 Zgrabite ga. 1709 01:28:30,300 --> 01:28:31,455 Dakle, ono što je on ukazujući na? 1710 01:28:31,455 --> 01:28:31,850 50. 1711 01:28:31,850 --> 01:28:32,410 Zgrabite ga. 1712 01:28:32,410 --> 01:28:33,390 To je ono što ćemo ispisati. 1713 01:28:33,390 --> 01:28:37,020 Budući da, sljedeći jedan, mi smo Samo tiskanje x sebi. 1714 01:28:37,020 --> 01:28:38,850 Što je unutar f? 1715 01:28:38,850 --> 01:28:43,710 0x123. 1716 01:28:43,710 --> 01:28:44,500 U redu. 1717 01:28:44,500 --> 01:28:46,620 >> A onda, na kraju, imamo slobodan. 1718 01:28:46,620 --> 01:28:48,040 Što mi prolazi kako bi oslobodili? 1719 01:28:48,040 --> 01:28:49,470 Mi prolazi x. 1720 01:28:49,470 --> 01:28:52,380 Taj put sam stvarno prikazuju je u stog okvira. 1721 01:28:52,380 --> 01:28:56,370 >> Tako smo prebacivali vrijednost 0x123 na besplatne. 1722 01:28:56,370 --> 01:28:59,070 Tako sada slobodan zna, sve u redu, Moram ići na hrpi 1723 01:28:59,070 --> 01:29:00,050 i bez da je memorija. 1724 01:29:00,050 --> 01:29:03,920 To se više ne koriste ono što nalazi se na adresi 0x123. 1725 01:29:03,920 --> 01:29:07,010 >> Dakle, slobodno će se objaviti da iz hrpe. 1726 01:29:07,010 --> 01:29:09,490 Sada naša gomila je opet prazna. 1727 01:29:09,490 --> 01:29:11,120 Mi nemamo curenje memorije. 1728 01:29:11,120 --> 01:29:12,940 Sada besplatno će se vratiti. 1729 01:29:12,940 --> 01:29:16,130 Obavijest da je x uvijek 0x123. 1730 01:29:16,130 --> 01:29:18,240 No, to je sada ne vrijedi memorije. 1731 01:29:18,240 --> 01:29:21,220 1732 01:29:21,220 --> 01:29:23,986 Mi više ne bi trebao dereference x. 1733 01:29:23,986 --> 01:29:24,440 Da? 1734 01:29:24,440 --> 01:29:27,240 >> PUBLIKA: Je li povratak 0 viška? 1735 01:29:27,240 --> 01:29:28,290 >> ROB: Je returen 0 suvišno? 1736 01:29:28,290 --> 01:29:31,110 Da. 1737 01:29:31,110 --> 01:29:33,950 Upravo smo stavili da postoji, jer imamo povratak jednu za zrak. 1738 01:29:33,950 --> 01:29:36,830 Dakle, to je kao da, omogućuje uključuje povratak 0. 1739 01:29:36,830 --> 01:29:37,310 Da? 1740 01:29:37,310 --> 01:29:38,560 >> PUBLIKA: [nečujan]? 1741 01:29:38,560 --> 01:29:42,110 1742 01:29:42,110 --> 01:29:45,580 >> ROB: Tako je nakon slobodnih X, što će se dogoditi ako nastojimo dereference pokazivača? 1743 01:29:45,580 --> 01:29:47,240 Moguće je da ništa ne pođe po zlu. 1744 01:29:47,240 --> 01:29:49,330 Moguće je da smo još uvijek ćete dobiti 50. 1745 01:29:49,330 --> 01:29:53,590 >> Moguće je, također, da je memorija Trenutno se koristi za nešto drugo. 1746 01:29:53,590 --> 01:29:57,140 Dakle, to je nedefinirano ponašanje. 1747 01:29:57,140 --> 01:30:00,772 I nedefinirana znači ništa može dogoditi. 1748 01:30:00,772 --> 01:30:01,250 Da? 1749 01:30:01,250 --> 01:30:02,500 >> PUBLIKA: [nečujan]? 1750 01:30:02,500 --> 01:30:07,942 1751 01:30:07,942 --> 01:30:10,830 >> ROB: Ne, pa ako ste dodijelili x za nešto drugo. 1752 01:30:10,830 --> 01:30:15,870 Dakle, ako ovdje smo rekli x jednaka malloc nešto else-- 1753 01:30:15,870 --> 01:30:17,100 malloc veličina event-- 1754 01:30:17,100 --> 01:30:20,180 zatim da je izvorni blok memorije nije oslobođen. 1755 01:30:20,180 --> 01:30:21,490 I mi službeno su ga izgubili. 1756 01:30:21,490 --> 01:30:23,150 To je otjecanje memorije. 1757 01:30:23,150 --> 01:30:25,090 Izgubili smo sve reference za taj blok memorije. 1758 01:30:25,090 --> 01:30:26,827 Dakle, ne postoji način na koji smo ikada može ga osloboditi. 1759 01:30:26,827 --> 01:30:32,074 1760 01:30:32,074 --> 01:30:36,630 U redu, pa onda povratak 0 znači učinio. 1761 01:30:36,630 --> 01:30:37,900 >> U redu, tako da Stack Overflow. 1762 01:30:37,900 --> 01:30:39,320 Što je ideja ovdje? 1763 01:30:39,320 --> 01:30:41,210 Tako zapamtite, gomila ide prema dolje. 1764 01:30:41,210 --> 01:30:43,480 Stack ide gore. 1765 01:30:43,480 --> 01:30:48,000 Dakle, ovo je primjer iz predavanja, Mislim, gdje je glavni samo ide na 1766 01:30:48,000 --> 01:30:51,380 nazvati ovu funkciju Foo, što se događa kako bi se nazvati rekurzivno više i 1767 01:30:51,380 --> 01:30:52,320 iznova. 1768 01:30:52,320 --> 01:30:55,370 >> Dakle, stog okviri idu raditi isto. 1769 01:30:55,370 --> 01:30:58,130 Tako ćemo početi s glavnom kao donje stog okvira. 1770 01:30:58,130 --> 01:31:02,000 Zatim glavna će nazvati Foo, koji će dobiti stack okvir. 1771 01:31:02,000 --> 01:31:04,260 >> Zatim Foo će nazvati Foo opet, koji će dobiti 1772 01:31:04,260 --> 01:31:05,500 još jedan okvir stog. 1773 01:31:05,500 --> 01:31:08,270 A onda opet, i opet, i opet, i opet sve dok, na kraju, možemo pokrenuti 1774 01:31:08,270 --> 01:31:09,190 u hrpi. 1775 01:31:09,190 --> 01:31:11,990 Dakle, to je kako smo dobili Stack Overflow. 1776 01:31:11,990 --> 01:31:14,910 I u ovom trenutku, što SEG grešku. 1777 01:31:14,910 --> 01:31:17,335 Ili ste stvarno bih SEG kriv prije Ova točka, ali da. 1778 01:31:17,335 --> 01:31:19,660 >> PUBLIKA: Je jezgra deponij isto kao SEG krivnjom? 1779 01:31:19,660 --> 01:31:26,140 >> ROB: Tako ćete vidjeti segmentaciju Jezgra krivnja bačena. 1780 01:31:26,140 --> 01:31:28,760 Dobivate jezgre deponij kada što SEG grešku. 1781 01:31:28,760 --> 01:31:32,580 I to je kao deponij za sve Sadržaj vaše trenutne memorije tako 1782 01:31:32,580 --> 01:31:36,670 koje možete probati i identificirati zašto SEG zamjeriti. 1783 01:31:36,670 --> 01:31:37,135 Da? 1784 01:31:37,135 --> 01:31:38,385 >> PUBLIKA: [nečujan]? 1785 01:31:38,385 --> 01:31:40,855 1786 01:31:40,855 --> 01:31:45,460 >> ROB: Tako znači segmentacije kvara Tu je Stack Overflow. 1787 01:31:45,460 --> 01:31:47,060 Dakle, ne nužno. 1788 01:31:47,060 --> 01:31:49,880 Segmentacije greška znači da ste dirljivo memorije na način 1789 01:31:49,880 --> 01:31:50,880 da ne bi trebali biti. 1790 01:31:50,880 --> 01:31:54,750 Dakle, jedan od načina da se to dogodi je, kada je što Stack Overflow, počinjemo dira 1791 01:31:54,750 --> 01:31:58,736 memorije na način da ne bismo trebali biti. 1792 01:31:58,736 --> 01:31:59,208 Da? 1793 01:31:59,208 --> 01:32:00,458 >> PUBLIKA: [nečujan]? 1794 01:32:00,458 --> 01:32:03,456 1795 01:32:03,456 --> 01:32:05,830 >> ROB: Tako unutar beskonačnu petlju. 1796 01:32:05,830 --> 01:32:08,770 Kao, to je kao rekurzivni Infinite petlje i tako smo dobili još jedan 1797 01:32:08,770 --> 01:32:09,770 stog uokviriti svaki put. 1798 01:32:09,770 --> 01:32:13,540 Ali samo unutar redoviti beskonačna dok one-- 1799 01:32:13,540 --> 01:32:16,390 dobro, nemojmo ni ispisati f-- 1800 01:32:16,390 --> 01:32:17,040 nešto učiniti. 1801 01:32:17,040 --> 01:32:18,390 Što god. 1802 01:32:18,390 --> 01:32:20,610 >> Nećemo se da je dobivanje još jedan okvir stog. 1803 01:32:20,610 --> 01:32:22,530 Samo ćemo zadržati petlje nad ovom jednom pouku. 1804 01:32:22,530 --> 01:32:23,920 Stog ne raste. 1805 01:32:23,920 --> 01:32:27,290 To je činjenica da je svaka rekurzivna Poziv daje nam stack okvir. 1806 01:32:27,290 --> 01:32:31,231 To je razlog zašto smo dobili Stack Overflow. 1807 01:32:31,231 --> 01:32:31,728 Da? 1808 01:32:31,728 --> 01:32:38,189 >> PUBLIKE: Dakle, ako ste rekli da se while petlja, a zatim [nečujan]? 1809 01:32:38,189 --> 01:32:42,000 >> ROB: Dakle, ako unutar while petlje došlo je printf, još uvijek bi 1810 01:32:42,000 --> 01:32:42,790 Ne SEG kriv. 1811 01:32:42,790 --> 01:32:46,090 Jednostavno nisam htio da se zbuniti stvari. 1812 01:32:46,090 --> 01:32:46,610 To bi petlje. 1813 01:32:46,610 --> 01:32:48,225 Ti bi dobili jednu hrpu okvir za printf. 1814 01:32:48,225 --> 01:32:49,580 >> Zatim printf će se vratiti. 1815 01:32:49,580 --> 01:32:50,280 Tada ćete opet bih petlju. 1816 01:32:50,280 --> 01:32:51,460 Ti bi dobili jednu hrpu okvir za printf. 1817 01:32:51,460 --> 01:32:52,850 To će se vratiti. 1818 01:32:52,850 --> 01:32:54,060 Jedan okvir stog. 1819 01:32:54,060 --> 01:33:00,215 Dakle, niste li ovo beskonačna gomilaju stog okvire. 1820 01:33:00,215 --> 01:33:03,185 >> PUBLIKA: [nečujan]? 1821 01:33:03,185 --> 01:33:04,040 >> ROB: Da. 1822 01:33:04,040 --> 01:33:09,360 Dakle, ovo Stack Overflow se događa jer nitko od njih 1823 01:33:09,360 --> 01:33:11,600 pozivi prema foo vraćaju. 1824 01:33:11,600 --> 01:33:15,250 Dakle, ako smo se vratili, onda bismo početi gubljenja stog okvire. 1825 01:33:15,250 --> 01:33:17,870 I onda mi ne bi Stack Overflow. 1826 01:33:17,870 --> 01:33:20,070 I to je razlog zašto vam je potrebna osnovni scenarij za svoje osobne funkcije. 1827 01:33:20,070 --> 01:33:22,992 1828 01:33:22,992 --> 01:33:23,479 Da? 1829 01:33:23,479 --> 01:33:27,375 >> PUBLIKA: Je li moguća veličina i stog za otpatke isti za 1830 01:33:27,375 --> 01:33:29,880 Svi programi? 1831 01:33:29,880 --> 01:33:31,910 >> ROB: Grubo. 1832 01:33:31,910 --> 01:33:35,090 Je li potencijalni veličina stoga i hrpa isti za sve programe? 1833 01:33:35,090 --> 01:33:37,180 Grubo. 1834 01:33:37,180 --> 01:33:40,080 Tu je neki randomizacije do gdje stog počinje i 1835 01:33:40,080 --> 01:33:42,400 gdje je gomila počinje. 1836 01:33:42,400 --> 01:33:45,870 Ako vam se dogoditi da imaju puno globalne varijable i stvari, možda ćete 1837 01:33:45,870 --> 01:33:49,520 odvesti daleko od nekog prostora za svoj hrpi. 1838 01:33:49,520 --> 01:33:54,060 >> Na 64-bitnom sustavu, što praktički ima beskonačno memorije. 1839 01:33:54,060 --> 01:33:55,820 Postoji samo toliko. 1840 01:33:55,820 --> 01:33:59,250 Između 32 bita i 64 bita, odnosno je značajna razlika. 1841 01:33:59,250 --> 01:34:02,350 >> Ti ćeš dobiti puno više stog i hrpa prostora na 64-bitnoj 1842 01:34:02,350 --> 01:34:05,810 Sustav zato što je samo još adrese koje mogu koristiti. 1843 01:34:05,810 --> 01:34:09,360 No, na individualnoj sustavu, to će biti otprilike isti iznos stog 1844 01:34:09,360 --> 01:34:10,785 i gomila prostoru. 1845 01:34:10,785 --> 01:34:13,635 1846 01:34:13,635 --> 01:34:15,530 U redu. 1847 01:34:15,530 --> 01:34:18,220 >> Dakle, zadnje što je kompilacija. 1848 01:34:18,220 --> 01:34:19,810 Dakle, ti bi trebao znati taj proces. 1849 01:34:19,810 --> 01:34:22,240 Postoje četiri velike korake. 1850 01:34:22,240 --> 01:34:24,400 Dakle, prvo bi trebalo biti lako zapamtiti. 1851 01:34:24,400 --> 01:34:25,085 Pred-obrada. 1852 01:34:25,085 --> 01:34:28,390 Ona ima prefiks pre u njemu. 1853 01:34:28,390 --> 01:34:32,080 Tako je na prvome mjestu. 1854 01:34:32,080 --> 01:34:34,000 >> Stvar koju treba zapamtiti je mljeveno meso. 1855 01:34:34,000 --> 01:34:37,250 Dakle, mljeveno meso definira i mljeveno meso uključuje u svima. 1856 01:34:37,250 --> 01:34:39,560 Oni su sve unaprijed procesor direktive. 1857 01:34:39,560 --> 01:34:42,030 To su stvari koje su prije procesor brine. 1858 01:34:42,030 --> 01:34:43,680 >> Dakle, što prije procesor učiniti? 1859 01:34:43,680 --> 01:34:44,850 To je stvarno glupa stvar. 1860 01:34:44,850 --> 01:34:49,380 Sve je to u stanju su sve to kopiranja, i izrezati i zalijepiti operacije. 1861 01:34:49,380 --> 01:34:51,790 >> Dakle, mljeveno meso uključuje standardne i0 dot h. 1862 01:34:51,790 --> 01:34:52,990 Što je to radio? 1863 01:34:52,990 --> 01:34:56,610 To je zgrabio standardnu ​​I0 dot h podnijeti i zalijepiti u vrhu 1864 01:34:56,610 --> 01:34:58,960 gdje god ona kaže mljeveno meso sadrži standardni i0 točka h. 1865 01:34:58,960 --> 01:35:02,480 >> I bilo mljeveno meso definirati koje smo vidi, što se to radi? 1866 01:35:02,480 --> 01:35:06,730 Njegova kopiranje vrijednost koju mljeveno meso definirano je definiran kao i lijepljenje da 1867 01:35:06,730 --> 01:35:08,500 gdje god se koristi vrijednost. 1868 01:35:08,500 --> 01:35:13,400 Dakle Preprocessoru samo da se zapravo jednostavan tekst temelji poslovanje. 1869 01:35:13,400 --> 01:35:15,870 To ne radi ništa pametno. 1870 01:35:15,870 --> 01:35:18,920 Dakle, sve ostalo je složeniji. 1871 01:35:18,920 --> 01:35:22,970 >> Dakle, sada kada je Preprocessoru učinjeno, mi zapravo sastaviti. 1872 01:35:22,970 --> 01:35:24,320 Dakle, što to znači sastavljanje? 1873 01:35:24,320 --> 01:35:27,310 Sada idemo iz c koda do montaže koda. 1874 01:35:27,310 --> 01:35:27,570 Da? 1875 01:35:27,570 --> 01:35:28,820 >> PUBLIKA: [nečujan]? 1876 01:35:28,820 --> 01:35:32,390 1877 01:35:32,390 --> 01:35:34,220 >> ROB: Da, uhvatili smo to. 1878 01:35:34,220 --> 01:35:36,880 1879 01:35:36,880 --> 01:35:38,660 Dakle sastavljanja. 1880 01:35:38,660 --> 01:35:40,310 Idemo od c do montaže. 1881 01:35:40,310 --> 01:35:42,470 Dakle, to je stvarna promjena jezika. 1882 01:35:42,470 --> 01:35:45,240 Sama Izrada znači ide od više jezika na razini 1883 01:35:45,240 --> 01:35:47,340 jezik niže razine. 1884 01:35:47,340 --> 01:35:50,720 >> I c je jezik visoke razine u odnosu na skupštini. 1885 01:35:50,720 --> 01:35:52,320 Što je skupština? 1886 01:35:52,320 --> 01:35:56,440 Njegove upute koje su, prilično mnogo, napravio za svoj CPU. 1887 01:35:56,440 --> 01:35:59,130 Ali vaše računalo i dalje radi Ne razumijem sklop. 1888 01:35:59,130 --> 01:36:01,570 On razumije samo nule i jedinice. 1889 01:36:01,570 --> 01:36:06,160 Dakle, sljedeći korak je okupljanje, koje nam donosi iz tih uputa koje 1890 01:36:06,160 --> 01:36:08,760 procesora razumije i zapravo prevodi ih, kako bi 1891 01:36:08,760 --> 01:36:10,820 su nule i jedinice. 1892 01:36:10,820 --> 01:36:13,570 >> Dakle C do okupljanja na binarnom. 1893 01:36:13,570 --> 01:36:15,870 Ali nemam izvršnu još. 1894 01:36:15,870 --> 01:36:19,550 Dakle, mislim na cs50 knjižnici. 1895 01:36:19,550 --> 01:36:23,070 Mi smo vam s binarnom za to cs50 knjižnica, koja ima GetString 1896 01:36:23,070 --> 01:36:24,400 i GetInt i sve to. 1897 01:36:24,400 --> 01:36:25,700 >> Ali cs50 library-- 1898 01:36:25,700 --> 01:36:27,650 i od itself-- nije izvršna. 1899 01:36:27,650 --> 01:36:29,570 To ne imati glavnu funkciju. 1900 01:36:29,570 --> 01:36:32,230 To je samo hrpa binarno koje možete koristiti. 1901 01:36:32,230 --> 01:36:41,730 Dakle, povezivanje je kako smo okupiti sve od ovih različitih binarnih datoteka 1902 01:36:41,730 --> 01:36:43,110 u stvarni izvršnu. 1903 01:36:43,110 --> 01:36:45,900 Jedan koji možete upisati dot slash točku van. 1904 01:36:45,900 --> 01:36:51,660 >> Dakle, ovo je kao datoteku koju pisao, - bez obzira na vaš program je-- 1905 01:36:51,660 --> 01:36:53,620 Cezar točka c. 1906 01:36:53,620 --> 01:36:55,100 Ali sada je bio sastavljen do binarno. 1907 01:36:55,100 --> 01:36:56,480 Tako Cezar točka o. 1908 01:36:56,480 --> 01:36:59,620 I ovo je naš cs50 knjižnice binarni. 1909 01:36:59,620 --> 01:37:02,284 A oni su se u kombinaciji u jednu izvršnu. 1910 01:37:02,284 --> 01:37:02,758 Da? 1911 01:37:02,758 --> 01:37:04,008 >> PUBLIKA: [nečujan]? 1912 01:37:04,008 --> 01:37:08,800 1913 01:37:08,800 --> 01:37:12,710 >> ROB: Pa prvo su, sjećam se, mljeveno meso su zapravo 1914 01:37:12,710 --> 01:37:13,810 prije procesor korak. 1915 01:37:13,810 --> 01:37:14,750 No, to je odvojeno. 1916 01:37:14,750 --> 01:37:20,730 Ako ne koristite bilo kakve funkcije koje su izvan vaše jednu datoteku onda, 1917 01:37:20,730 --> 01:37:26,100 Ne, ne morate se povezati ništa jer imate sve. 1918 01:37:26,100 --> 01:37:30,310 >> To je rekao, printf je povezan u. 1919 01:37:30,310 --> 01:37:32,820 Ako ste ikada koristiti printf, to je nešto koji treba povezati u 1920 01:37:32,820 --> 01:37:35,740 zato što nije napisao da je. 1921 01:37:35,740 --> 01:37:39,530 A, u stvari, printf je automatski povezani u. 1922 01:37:39,530 --> 01:37:42,760 Vi znate kako na zapovjednoj liniji ili kad upišete napraviti, vidjet ćete ga imati 1923 01:37:42,760 --> 01:37:46,690 crtica l cs50, koja ima vezu u cs50 knjižnici? 1924 01:37:46,690 --> 01:37:49,070 Printf, i takve stvari, ide treba povezati u automatski. 1925 01:37:49,070 --> 01:37:51,730 1926 01:37:51,730 --> 01:37:53,930 Još neka pitanja o bilo čemu? 1927 01:37:53,930 --> 01:37:56,280 >> PUBLIKA: [nečujan]? 1928 01:37:56,280 --> 01:37:58,300 >> ROB: Povezivanje? 1929 01:37:58,300 --> 01:38:03,450 Imamo hrpu različite binarne datoteke. 1930 01:38:03,450 --> 01:38:06,410 To je kanonski primjer da mi koristimo je cs50 knjižnica. 1931 01:38:06,410 --> 01:38:09,960 Sastavili smo i dati vam na binarno za ovu cs50 knjižnici. 1932 01:38:09,960 --> 01:38:12,410 >> Želite koristiti GetString u svom programu. 1933 01:38:12,410 --> 01:38:14,750 Dakle, idete i koristiti GetString. 1934 01:38:14,750 --> 01:38:19,700 No, bez mog binarnog koda za GetString, kada sastaviti svoj kod 1935 01:38:19,700 --> 01:38:23,140 prema dolje, što zapravo ne može pokrenuti svoj Program jer GetString Gudački se 1936 01:38:23,140 --> 01:38:25,080 još uvijek nije u potpunosti definirana. 1937 01:38:25,080 --> 01:38:29,220 >> To je samo kad vam link u mom binarnom koji sadrži GetString da je sada, sve 1938 01:38:29,220 --> 01:38:31,130 U redu, ja mogu zapravo izvršavanje GetString. 1939 01:38:31,130 --> 01:38:32,330 Moj dosje je završena. 1940 01:38:32,330 --> 01:38:34,208 I ja mogu raditi ovo. 1941 01:38:34,208 --> 01:38:34,697 Da? 1942 01:38:34,697 --> 01:38:37,631 >> PUBLIKA: Da li vezna pretvoriti binarni na izvršnu? 1943 01:38:37,631 --> 01:38:42,032 Dakle, čak i ako nemate drugog knjižnice, ne bi to i dalje biti 1944 01:38:42,032 --> 01:38:44,477 potrebno prevesti [nečujan]? 1945 01:38:44,477 --> 01:38:48,640 >> ROB: Tako izvršna je još uvijek u binarnom. 1946 01:38:48,640 --> 01:38:51,750 To je samo kombiniranjem cjelinu Gomila izvršne datoteke. 1947 01:38:51,750 --> 01:38:55,124 1948 01:38:55,124 --> 01:38:56,591 >> PUBLIKA: Hvala ti puno. 1949 01:38:56,591 --> 01:38:58,560 >> ROB: Nema problema. 1950 01:38:58,560 --> 01:38:59,540 Bilo koja druga pitanja? 1951 01:38:59,540 --> 01:39:02,001 Inače, svi smo mi postavili. 1952 01:39:02,001 --> 01:39:02,690 U redu. 1953 01:39:02,690 --> 01:39:02,990 Hvala. 1954 01:39:02,990 --> 01:39:03,590 >> [Pljesak] 1955 01:39:03,590 --> 01:39:04,490 >> PUBLIKA: Hvala vam. 1956 01:39:04,490 --> 01:39:05,740 >> ROB: Da. 1957 01:39:05,740 --> 01:39:06,582