1 00:00:00,000 --> 00:00:03,395 >> [Glazbom] 2 00:00:03,395 --> 00:00:11,031 3 00:00:11,031 --> 00:00:13,280 DAVID J. Malan: To je poput brucoš seminar danas. 4 00:00:13,280 --> 00:00:14,060 U REDU. 5 00:00:14,060 --> 00:00:15,024 Dakle, vrlo kišno van. 6 00:00:15,024 --> 00:00:17,690 To teži da se dogoditi srijedom, ali sve više prilika 7 00:00:17,690 --> 00:00:18,700 za pitanja danas. 8 00:00:18,700 --> 00:00:22,210 Tako ćemo krenuti zapravo s filmom u samo trenutak. 9 00:00:22,210 --> 00:00:24,560 No, mi ćemo početi veličanstveno kao i uvijek. 10 00:00:24,560 --> 00:00:28,000 >> Ovo je CS50, i to je kraj tjedna 4. 11 00:00:28,000 --> 00:00:30,820 Dakle, ako ste ikada gledao TV ili film u kojoj 12 00:00:30,820 --> 00:00:34,690 postoji neki računalni stručnjaci i policija ili FBI, ili neka agencija 13 00:00:34,690 --> 00:00:36,930 pokušava uhvatiti neke Protivnik, dobro, vi ste 14 00:00:36,930 --> 00:00:40,850 vjerojatno čuli za izraz "poboljšati" pri čemu taj tehničar nekako 15 00:00:40,850 --> 00:00:44,750 magično zumira beskonačno daleko vidjeti zločince 16 00:00:44,750 --> 00:00:48,640 Identitet ili broj registarske pločice u čak svjetlucanje ogledalom 17 00:00:48,640 --> 00:00:50,390 ili bljesak nečijem oku. 18 00:00:50,390 --> 00:00:55,196 Dakle, istina, neka je pogledati nekoliko takvih scena iz Hollywooda. 19 00:00:55,196 --> 00:00:55,862 [VIDEO PLAYBACK] 20 00:00:55,862 --> 00:00:59,243 -OK, Sada ćemo dobiti dobar pogled na vas. 21 00:00:59,243 --> 00:01:06,488 22 00:01:06,488 --> 00:01:07,415 >> -Hold Ga. 23 00:01:07,415 --> 00:01:08,267 Trčanje da je povratak. 24 00:01:08,267 --> 00:01:09,121 >> -Čekaj malo. 25 00:01:09,121 --> 00:01:11,300 Idi pravu. 26 00:01:11,300 --> 00:01:12,209 >> -Postoji, Zamrznuti to. 27 00:01:12,209 --> 00:01:12,750 -Puni zaslon. 28 00:01:12,750 --> 00:01:13,558 -OK, Zamrznuti to. 29 00:01:13,558 --> 00:01:14,820 -Tighten Se na to, hoćete li? 30 00:01:14,820 --> 00:01:16,530 -Vector In na koji momak od stražnjeg kotača. 31 00:01:16,530 --> 00:01:19,400 -Zoom U upravo ovdje na ovom mjestu. 32 00:01:19,400 --> 00:01:22,846 -Sa Pravom opremom, slika može se povećati i izoštriti. 33 00:01:22,846 --> 00:01:24,065 -Što je to? 34 00:01:24,065 --> 00:01:25,600 -To Je poboljšanje programa. 35 00:01:25,600 --> 00:01:26,860 Možeš li jasno da se bilo? 36 00:01:26,860 --> 00:01:27,890 -Ne Znam. 37 00:01:27,890 --> 00:01:29,050 Budimo poboljšanje. 38 00:01:29,050 --> 00:01:31,575 >> -Enhance Poglavlje A6. 39 00:01:31,575 --> 00:01:33,642 >> -Ja Poboljšane detalj, and-- Mislim da postoji 40 00:01:33,642 --> 00:01:35,433 dovoljno da bi se poboljšala, pustite ga da moj zaslon. 41 00:01:35,433 --> 00:01:37,080 -Ja Poboljšana odraz u njezinim očima. 42 00:01:37,080 --> 00:01:38,830 >> -Let Je pokrenuti ovo kroz Video pojašnjenje. 43 00:01:38,830 --> 00:01:40,100 -Edgar, Možete poboljšati ovo? 44 00:01:40,100 --> 00:01:41,875 >> -Pričekaj. 45 00:01:41,875 --> 00:01:44,010 >> -I've Radio na tome pitanju. 46 00:01:44,010 --> 00:01:44,995 >> Netko je odraz. 47 00:01:44,995 --> 00:01:45,495 -Reflection. 48 00:01:45,495 --> 00:01:47,399 -Postoji Je odraz čovjekovog lica. 49 00:01:47,399 --> 00:01:48,065 -Ponuditelj Odraz. 50 00:01:48,065 --> 00:01:48,981 -Postoji Je odraz. 51 00:01:48,981 --> 00:01:50,600 -Zoom U na ogledalu. 52 00:01:50,600 --> 00:01:52,712 -Možete Vidjeti odraz. 53 00:01:52,712 --> 00:01:54,350 Možeš li poboljšati sliku odavde? 54 00:01:54,350 --> 00:01:55,370 Možeš li ga unaprijedili ovdje? 55 00:01:55,370 --> 00:01:56,210 Možeš li to poboljšati? 56 00:01:56,210 --> 00:01:56,900 Možete li to poboljšati? 57 00:01:56,900 --> 00:01:57,870 >> -Može Smo unaprijedili ovo? 58 00:01:57,870 --> 00:01:58,717 >> Možeš li to poboljšati? 59 00:01:58,717 --> 00:02:00,050 -Hold Na sekundu, ja ću unaprijediti. 60 00:02:00,050 --> 00:02:00,924 -Zoom U na vrata. 61 00:02:00,924 --> 00:02:01,700 -Times 10. 62 00:02:01,700 --> 00:02:02,586 -Zoom. 63 00:02:02,586 --> 00:02:03,490 -Useliti. 64 00:02:03,490 --> 00:02:03,990 -više. 65 00:02:03,990 --> 00:02:04,690 -Wait, Zaustaviti. 66 00:02:04,690 --> 00:02:05,190 Zaustavite. 67 00:02:05,190 --> 00:02:05,970 -Pause Ga. 68 00:02:05,970 --> 00:02:09,460 -Rotate Nas 75 stupnjeva oko vertikale, molim. 69 00:02:09,460 --> 00:02:10,962 Zaustavite. 70 00:02:10,962 --> 00:02:14,040 Vrati se na dijelu O vratima, opet. 71 00:02:14,040 --> 00:02:15,860 >> -Got Sliku pojačivač koji može bitmap? 72 00:02:15,860 --> 00:02:18,776 >> -Hej, Možda možemo koristiti Pradeep Sen način vidjeti na prozorima. 73 00:02:18,776 --> 00:02:20,372 -Ovo Softver je stanje u umjetnosti. 74 00:02:20,372 --> 00:02:21,845 >> -Ponuditelj Svojstvena vrijednost je isključen. 75 00:02:21,845 --> 00:02:24,300 >> -Sa Prava Kombinacija algorithm-- 76 00:02:24,300 --> 00:02:26,755 >> -On Je uzeti eliminacije Algoritmi za sljedeću razinu, 77 00:02:26,755 --> 00:02:28,730 i ja ih mogu koristiti za unaprijediti ovu fotografiju. 78 00:02:28,730 --> 00:02:31,286 >> -Lock Na i povećanje z-osi. 79 00:02:31,286 --> 00:02:32,560 >> -Enhance. 80 00:02:32,560 --> 00:02:33,100 >> -Enhance. 81 00:02:33,100 --> 00:02:33,600 >> -Enhance. 82 00:02:33,600 --> 00:02:34,960 -Freeze I unaprijediti. 83 00:02:34,960 --> 00:02:37,180 >> [END PLAYBACK] 84 00:02:37,180 --> 00:02:41,160 >> DAVID J. Malan: U redu, tako da svi oni su zapravo riječi. 85 00:02:41,160 --> 00:02:44,450 Oni samo nanizati u Način na koji to zapravo nije osjetljiv. 86 00:02:44,450 --> 00:02:48,400 I, u stvari, CS50 i tečajevi poput njega teži uništiti puno TV i filmove 87 00:02:48,400 --> 00:02:48,900 za tebe. 88 00:02:48,900 --> 00:02:52,330 Jer kad te računalnih stručnjaka su zveckanje off uvjete i govori 89 00:02:52,330 --> 00:02:56,860 Sviđaju stvari kao što su vektori, i z-os, 90 00:02:56,860 --> 00:02:59,572 i bilo koji broj ostalih zapravo više tehničke uvjete, 91 00:02:59,572 --> 00:03:02,030 oni su zapravo samo nizanje riječi zajedno prečesto. 92 00:03:02,030 --> 00:03:05,020 Je li to jedan od naših nada je da, kao nuspojava uzimanja predmeta 93 00:03:05,020 --> 00:03:08,245 ovako će više ljudi u Svijet zapravo biti u mogućnosti da se vagati u 94 00:03:08,245 --> 00:03:12,040 i samo ikada tako nešto utjecati na Kvaliteta i točnost tih filmova? 95 00:03:12,040 --> 00:03:14,350 >> U stvari, neka je pogledati stvarnosti. 96 00:03:14,350 --> 00:03:18,070 Dakle, ovdje je osoblje fotografija Marija, jedna od naših nastavnih bližnjima. 97 00:03:18,070 --> 00:03:20,050 I pretpostavimo da je osumnjičen za nešto. 98 00:03:20,050 --> 00:03:23,730 Pa ipak, postoji tračak neki dokaz u svom oku, 99 00:03:23,730 --> 00:03:25,480 ili u odraz njezinih naočala. 100 00:03:25,480 --> 00:03:30,760 Pa, ako radimo upravo onako filmova predlaže, u kojoj smo povećali i "poboljšati", 101 00:03:30,760 --> 00:03:34,080 ovo je koliko informacija u Marijinu licu 102 00:03:34,080 --> 00:03:36,795 kada slikate s tom izvornom razlučivosti. 103 00:03:36,795 --> 00:03:39,120 >> A, u stvari, možete vidjeti te točkice. 104 00:03:39,120 --> 00:03:41,900 A to su ono što su nazivaju pikseli, P-I-X-E-L-S, 105 00:03:41,900 --> 00:03:45,740 što je samo trg obično to je točka koja sastavlja sliku. 106 00:03:45,740 --> 00:03:49,200 I natrag u dan, i zapravo čak danas s nekim od današnje LED televizora 107 00:03:49,200 --> 00:03:51,950 ili LCD televizore, ako imaš jedan u vašoj sobi ili kod kuće, 108 00:03:51,950 --> 00:03:55,100 ako idete do super blizu njega, i pogotovo ako je to nešto stariji TV, 109 00:03:55,100 --> 00:03:58,760 vjerojatno možete i vidjeti te točkice i to je ono sastaviti sliku. 110 00:03:58,760 --> 00:04:00,980 >> I nema više informacije od toga. 111 00:04:00,980 --> 00:04:05,400 Mogli bismo "poboljšati", u smislu zaglađivanje stvari više i vrsta 112 00:04:05,400 --> 00:04:09,040 zaključi vrsta, vrsta što Boja bi trebala biti uz Marijinu oka 113 00:04:09,040 --> 00:04:10,910 tako da je zapravo nije tako pixelated. 114 00:04:10,910 --> 00:04:14,510 Ali ako sam stalno povećavanja, postoji je negativac u njezinu oku. 115 00:04:14,510 --> 00:04:16,600 Kao da je sve informacija koju imamo. 116 00:04:16,600 --> 00:04:18,920 Ne možeš stvarati Podaci iz ničega. 117 00:04:18,920 --> 00:04:20,790 Postoji samo ograničen broj bitova tamo. 118 00:04:20,790 --> 00:04:22,873 >> Tako je u Problem Set 4, gdje imate priliku 119 00:04:22,873 --> 00:04:24,580 igrati s ovom vrstom svijeta. 120 00:04:24,580 --> 00:04:27,610 U problemu Set 4, vi ćete istraživati svijet grafike, i forenzike, 121 00:04:27,610 --> 00:04:30,870 i zapravo pisanje koda koji oporavi izgubljene slike. 122 00:04:30,870 --> 00:04:33,510 Vi ćete napisati kod koji manipulira postojeće slike 123 00:04:33,510 --> 00:04:36,120 i konačno shvatiti što je događa ispod haube. 124 00:04:36,120 --> 00:04:38,540 >> A, što se ispostavilo, to je zapravo nije sve što je komplicirano. 125 00:04:38,540 --> 00:04:41,320 Na primjer, ako smo htjeli predstavljaju smješka gdje 126 00:04:41,320 --> 00:04:44,160 s tim crnim piksela, ili ove crne točkice, 127 00:04:44,160 --> 00:04:47,230 dobro, mi jednostavno može predstavljati ih kao istinski bitmap. 128 00:04:47,230 --> 00:04:50,040 A ako je ikada čuo da Izraz bitmapa, možda 129 00:04:50,040 --> 00:04:52,330 sada počinje napraviti malo više smisla danas. 130 00:04:52,330 --> 00:04:53,580 >> Mi već znamo što je malo. 131 00:04:53,580 --> 00:04:54,160 To je 0 ili 1. 132 00:04:54,160 --> 00:04:56,201 A karta je samo nešto poput komada papira 133 00:04:56,201 --> 00:04:59,180 koji vam daje upute i ima možda mreža X i Y koordinate. 134 00:04:59,180 --> 00:05:00,540 Dakle, ovdje je bitmap. 135 00:05:00,540 --> 00:05:03,680 To je karta bitova pri čemu 1 je očito 136 00:05:03,680 --> 00:05:07,857 će predstavljati bijeli piksel, a 0 će predstavljati crni piksel. 137 00:05:07,857 --> 00:05:09,440 No, svakako bi mogao okrenuti oko sebe. 138 00:05:09,440 --> 00:05:11,648 To ne stvarno obzira da dok smo dosljedni. 139 00:05:11,648 --> 00:05:15,570 I ovdje je kako, u binary-- unutar od memoriju računala, ili čak i unutar 140 00:05:15,570 --> 00:05:18,160 od datoteku na tvrdom drive-- možeš pohraniti 141 00:05:18,160 --> 00:05:20,240 najjednostavnije smješko slika. 142 00:05:20,240 --> 00:05:23,990 No, ono što smo mi, naravno, nedostaje na ovoj slici? 143 00:05:23,990 --> 00:05:24,610 Boja, zar ne? 144 00:05:24,610 --> 00:05:28,220 To je očito sljedeći korak ili pojašnjenje poboljšati ovo s bojom. 145 00:05:28,220 --> 00:05:32,230 Dakle, na žalost, sa samo jednim malo, 0 ili 1, što bi moglo predstavljati boje. 146 00:05:32,230 --> 00:05:36,100 To bi mogao biti crvene ili plave ili crna ili bijela ili zelena ili ružičasta, 147 00:05:36,100 --> 00:05:37,420 ili bilo para boja. 148 00:05:37,420 --> 00:05:40,860 No, zbog jednostavnosti, mi ćemo samo pretpostavljati crno-bijelo. 149 00:05:40,860 --> 00:05:45,930 >> Dakle, što je logično trebamo ako smo Želite provesti boje na slici? 150 00:05:45,930 --> 00:05:49,080 Što moramo učiniti? 151 00:05:49,080 --> 00:05:51,900 Kao i ako je ograničavajući faktor ovdje je da s jedne malo što može samo 152 00:05:51,900 --> 00:05:55,977 predstavljaju dvije države, 0 ili 1, bijeli ili crna, što želiš učiniti? 153 00:05:55,977 --> 00:05:56,810 Publika: Više podataka. 154 00:05:56,810 --> 00:05:58,813 DAVID J. Malan: Više bitova, Da više podataka, više bitova. 155 00:05:58,813 --> 00:06:01,440 I doista, to je točno kako u boji slike su zastupljeni. 156 00:06:01,440 --> 00:06:05,120 Umjesto da koristite jedan bit, A 0 ili 1 za svaki piksel, svaka točka, 157 00:06:05,120 --> 00:06:06,170 vi samo koristite više. 158 00:06:06,170 --> 00:06:09,660 Možda koristite 8, možda, češće korištenje 24, i doista, u problem Set 159 00:06:09,660 --> 00:06:13,300 4, će igrati s datotekom format koji koristi 24 bita obično. 160 00:06:13,300 --> 00:06:15,430 >> No, većina od vas su vjerojatno upoznati s JPEG. 161 00:06:15,430 --> 00:06:17,460 Ako ste ikada uzeti fotografija na telefonu, 162 00:06:17,460 --> 00:06:20,360 ili upload ili vidio nešto na Facebook ili Flickr, bilo koji broj 163 00:06:20,360 --> 00:06:24,882 foto-based web stranice, vi ste vjerojatno vidjeli JPEG slike prije. 164 00:06:24,882 --> 00:06:27,840 A što se ispostavilo, ovo je varalica Format ćemo koristiti u PSet 4, 165 00:06:27,840 --> 00:06:30,340 gdje idete moraju oporaviti slike 166 00:06:30,340 --> 00:06:35,160 da sam slučajno obrisane iz korumpiran memorijske kartice u fotoaparatu, 167 00:06:35,160 --> 00:06:35,800 ako hoćete. 168 00:06:35,800 --> 00:06:38,490 >> I ispada da, iako JPEG je prilično sophisticated-- 169 00:06:38,490 --> 00:06:40,906 to je mnogo više sofisticiran od crne i bijele točkice 170 00:06:40,906 --> 00:06:44,480 vidjeli smo prije nekoliko trenutaka, jer je zapravo fantazija algoritmi koji 171 00:06:44,480 --> 00:06:47,410 se koristi za kompresiju JPEG, pa da možete imati jako lijepo, 172 00:06:47,410 --> 00:06:49,832 kvaliteta slike, ali koristeći relativno malo bitova. 173 00:06:49,832 --> 00:06:51,790 A mi ćemo se vratiti kompresije prije dugo. 174 00:06:51,790 --> 00:06:56,280 Ispada da je prva tri bajta u JPEG image-- 175 00:06:56,280 --> 00:07:02,750 bez obzira što si uzeo fotografiju of-- su vrijednosti 255, 216, 255. 176 00:07:02,750 --> 00:07:05,990 >> Drugim riječima, ako ste upravo vidjeti da je uzorak bitova, 177 00:07:05,990 --> 00:07:09,180 zastupljena ovdje tri bajtova, ili 24 bita ukupno, 178 00:07:09,180 --> 00:07:13,810 s velikom vjerojatnošću možete zaključiti da tražite ga ovaj prvi od tri 179 00:07:13,810 --> 00:07:15,230 bajtova JPEG. 180 00:07:15,230 --> 00:07:18,040 A to je ono što je poznato kao potpisom JPEG. 181 00:07:18,040 --> 00:07:20,540 Puno formata datoteka tamo imaju tendenciju da se početak 182 00:07:20,540 --> 00:07:23,735 s određenim obrascima 0s i 1s, tako da je Windows i Mac OS i iOS, 183 00:07:23,735 --> 00:07:28,272 i Android znati kakav datoteke su su, osim tzv datoteke 184 00:07:28,272 --> 00:07:29,730 Proširenje da puno datoteka ima. 185 00:07:29,730 --> 00:07:32,590 Ako ste .jpg, to je još jedan trag na računalo. 186 00:07:32,590 --> 00:07:35,310 >> Tako ćemo sada pogledajte ovo malo više tehnički. 187 00:07:35,310 --> 00:07:37,390 Znamo decimale Sustav 0 do 9. 188 00:07:37,390 --> 00:07:38,740 Znamo binarna 0 i 1. 189 00:07:38,740 --> 00:07:41,842 A ako mislite natrag PSet 0, imali smo vam u koštac s, 190 00:07:41,842 --> 00:07:43,800 za malo, nešto zove heksadecimalni, 191 00:07:43,800 --> 00:07:47,320 gdje imate 16 znamenke, umjesto 10 ili umjesto 2. 192 00:07:47,320 --> 00:07:50,405 A ti znamenki, po konvenciji, su 0 do 9 i zatim se 193 00:07:50,405 --> 00:07:55,040 preko f, gdje je f predstavlja ono decimalni broj, baš kao brzi razum 194 00:07:55,040 --> 00:07:56,640 provjeriti? 195 00:07:56,640 --> 00:07:57,610 Dakle, 15. 196 00:07:57,610 --> 00:08:01,390 I mora predstavljati 10, samo Priroda narudžbe koje sam dao. 197 00:08:01,390 --> 00:08:04,350 To je samo proizvoljna konvencija, ali to je prilično standardna. 198 00:08:04,350 --> 00:08:06,870 >> Dakle, ako gledamo ovaj uzorak od tri bytes---a neka 199 00:08:06,870 --> 00:08:09,620 samo početi gledati na to u na način sukladan tome 200 00:08:09,620 --> 00:08:12,450 računalni znanstvenici općenito pogledajte i razmislite o datotekama. 201 00:08:12,450 --> 00:08:15,580 Vi naravno, možete misliti o datoteke u 0s i 1s i decimale, 202 00:08:15,580 --> 00:08:19,340 ali u stvarnosti, mi imaju tendenciju da koriste binarni ili uobičajenije hexadecimal-- 203 00:08:19,340 --> 00:08:20,760 natrag iz PSet 0. 204 00:08:20,760 --> 00:08:25,857 Pa neka mi predložiti da 255, 216, 255 i samo su ti obrasci 0s i 1s. 205 00:08:25,857 --> 00:08:28,440 I vi možete provjeriti ako želite učiniti math od tjedan 0. 206 00:08:28,440 --> 00:08:30,810 No, za sada, samo pretpostavimo ovo je uistinu točno. 207 00:08:30,810 --> 00:08:33,850 Upravo sam prepisivati ​​tri decimale Brojevi su tri binarne vrijednosti. 208 00:08:33,850 --> 00:08:36,100 Sada ono što ću učiniti je jednostavno dodajte malo bijelog prostora, 209 00:08:36,100 --> 00:08:37,266 Samo zbog čitljivosti a. 210 00:08:37,266 --> 00:08:39,940 I napomena, ja sam samo ide premjestiti stvari odvojeno. 211 00:08:39,940 --> 00:08:43,090 Dakle prije, nakon, prije, poslije. 212 00:08:43,090 --> 00:08:46,180 Radim ništa zanimljivo drugima nego samo širi stvari tako 213 00:08:46,180 --> 00:08:50,380 da obavijesti svaki skup osam bitova je sada dva seta četiri bita. 214 00:08:50,380 --> 00:08:54,920 To je korisno jer heksadecimalnom Posebno je u modi 215 00:08:54,920 --> 00:09:00,930 jer svaki heksadecimalni znamenkasti 0 do f, ili točnije 0 do 15, 216 00:09:00,930 --> 00:09:03,430 može biti zastupljena s točno četiri bita. 217 00:09:03,430 --> 00:09:07,960 Drugim riječima, u heksadecimalnom ako vas želite predstavlja 0, to je samo 0000, 218 00:09:07,960 --> 00:09:08,780 četiri nule. 219 00:09:08,780 --> 00:09:13,997 A ako želite da predstavlja 15, to je 1111, što je četiri bita. 220 00:09:13,997 --> 00:09:16,080 A ako to ne učinite math, ako je to ona mjesto, 221 00:09:16,080 --> 00:09:18,210 ovo je mjesto 16s, koji će dati you-- 222 00:09:18,210 --> 00:09:19,960 a što se događa to-- žao, u binarnom, 223 00:09:19,960 --> 00:09:23,660 to će vam dati 15, one mjesto, dvojke mjestu, četiri i Mau mjesto. 224 00:09:23,660 --> 00:09:26,821 Zato mi dopustite da predložim da je set od četiri bita na lijevo 225 00:09:26,821 --> 00:09:28,070 je ono što ćemo nazvati f. 226 00:09:28,070 --> 00:09:30,110 To je najveći broj koji može predstavljati s četiri bita. 227 00:09:30,110 --> 00:09:33,300 A mi već znamo iz heksadecimalnom, f je najveći znamenkasti u heksadecimalnom. 228 00:09:33,300 --> 00:09:36,020 Imamo još jednu f tamo, više tamo dva. 229 00:09:36,020 --> 00:09:38,980 A za sada, samo se na vjeru što sam učinio matematike pravo 230 00:09:38,980 --> 00:09:41,890 i da je lijeva polovica tih bitova, 1101, 231 00:09:41,890 --> 00:09:43,980 je ista stvar kao i D u heksadecimalnom. 232 00:09:43,980 --> 00:09:46,490 A desnica 1000, samo je 8. 233 00:09:46,490 --> 00:09:48,140 >> I to je jedan je lako vidjeti, zar ne? 234 00:09:48,140 --> 00:09:51,670 8 represents-- je u pravu ispod tog Mau mjestu. 235 00:09:51,670 --> 00:09:56,040 Dakle, imamo jedan u Mau stupcu i ništa u četiri, dvojke ili one. 236 00:09:56,040 --> 00:09:59,830 Tako sada više uobičajeno, ljudi su skloni napisati heksadecimalni znamenke kao što je ovaj, 237 00:09:59,830 --> 00:10:03,000 samo ih mljackati zajedno, i onda ih prefiks sa 0x. 238 00:10:03,000 --> 00:10:05,920 To ne znači ništa drugo nego vizualni trag na human-- 239 00:10:05,920 --> 00:10:10,350 Ovdje dolazi heksadecimalni value-- jer to inače ne bi moglo biti očito. 240 00:10:10,350 --> 00:10:13,629 >> Što će reći, u konačnici, da uzorak nula i jedinica, 241 00:10:13,629 --> 00:10:16,170 ili uzorak heksadecimalnom Znamenke ekvivalentno da ste 242 00:10:16,170 --> 00:10:18,990 će početi u potrazi za Problem je u Set 4 je this-- 243 00:10:18,990 --> 00:10:22,120 i problem Set 4 spec će hodati što kroz to u više detail-- 244 00:10:22,120 --> 00:10:25,344 ali shvatite kao svojevrsna Arcane kao to može izgledati na prvi pogled, 245 00:10:25,344 --> 00:10:27,010 da ćeš početi dobivati ​​tu puno. 246 00:10:27,010 --> 00:10:30,320 A u stvari, čak iu GDB je debugger smo uveli u ponedjeljak 247 00:10:30,320 --> 00:10:35,440 Dan uvodi u PSet 3, ide da često vam pokazati heksadecimalni vrijednosti 248 00:10:35,440 --> 00:10:39,910 samo zato što imaju tendenciju da se više Konvencionalni od decimale ili binarno 249 00:10:39,910 --> 00:10:41,157 u svijetu računala. 250 00:10:41,157 --> 00:10:42,490 Sada ćemo staviti ovo u kontekst. 251 00:10:42,490 --> 00:10:48,040 Mnogi od vas možda zapamtiti sliku ovdje, koji je došao iz čega? 252 00:10:48,040 --> 00:10:51,240 Vista, pa čak i prije nego da, Windows XP je ovaj nastup. 253 00:10:51,240 --> 00:10:52,620 Dakle, to je prekrasan krajolik. 254 00:10:52,620 --> 00:10:55,940 A u stvari, ako džaku oko online-- Mislim da je članak na Wikipediji, 255 00:10:55,940 --> 00:11:00,110 u kojoj je netko vrlo nevjerojatno iziđe naći to mjesto u svijetu postavljanje 256 00:11:00,110 --> 00:11:02,240 njegov ili njezin fotoaparat upravo pravo mjesto-- 257 00:11:02,240 --> 00:11:06,510 i to danas izgleda, ali volimo-članovima to je točno isto postavka. 258 00:11:06,510 --> 00:11:10,060 Ova slika, iako je u datoteku Format naziva bitmapa, b-m-p. 259 00:11:10,060 --> 00:11:12,910 I mi ćemo uzeti super brzi pogled na ono što to znači. 260 00:11:12,910 --> 00:11:17,770 >> Ali bitmap je samo drugačiji način predstavljaju slike još uvijek koriste piksela 261 00:11:17,770 --> 00:11:19,580 u 0s i 1s, u konačnici. 262 00:11:19,580 --> 00:11:23,282 No, brzi pogled, ima više zanimljiv potpis 263 00:11:23,282 --> 00:11:24,490 na početku datoteke. 264 00:11:24,490 --> 00:11:26,670 To nije samo tri bajtova, a postoji 265 00:11:26,670 --> 00:11:30,770 cijela hrpa obrazaca bajtova koji su unaprijed određeni smisao. 266 00:11:30,770 --> 00:11:34,490 Na primjer, negdje u Prvih nekoliko bajtova bitmap slike 267 00:11:34,490 --> 00:11:37,440 će biti veličine od slika, širina slike, 268 00:11:37,440 --> 00:11:40,390 visina slike, tako da Korisni metapodatke, ako će. 269 00:11:40,390 --> 00:11:43,940 Korisne informacije koje Photoshop ili bilo grafički program koji koristite 270 00:11:43,940 --> 00:11:45,180 Možda je zapravo stalo. 271 00:11:45,180 --> 00:11:47,170 >> Dakle, više o tome u Problem Set 4, ali ovo 272 00:11:47,170 --> 00:11:49,220 samo reći da na kraju dan 273 00:11:49,220 --> 00:11:52,390 sve formate datoteka koju ste koristili za years-- Microsoft Word datoteke, 274 00:11:52,390 --> 00:11:55,820 Brojevi datoteke, Excel datoteke, bilo koji broj formata datoteka 275 00:11:55,820 --> 00:11:57,770 koji bi mogli imati neke Poznato ekstenzija datoteke 276 00:11:57,770 --> 00:12:00,130 samo su 0s i 1s ispod haube. 277 00:12:00,130 --> 00:12:02,970 I ljudi su odlučili što su konvencije, 278 00:12:02,970 --> 00:12:08,340 ono obrasci 0s i 1s predstavlja Word datoteke u odnosu Excel datoteke, 279 00:12:08,340 --> 00:12:10,322 u odnosu na bilo koji broj drugih formata datoteka. 280 00:12:10,322 --> 00:12:12,780 Tako je u PSet 4, imat ćete priliku igrati s tim. 281 00:12:12,780 --> 00:12:14,405 >> No, što to znači imati struct. 282 00:12:14,405 --> 00:12:18,012 To je zapravo lijepo prikazali sada u ° C, koji ima samo nekoliko 283 00:12:18,012 --> 00:12:20,220 od dodatne značajke koje nismo pogledao još. 284 00:12:20,220 --> 00:12:24,230 To je prilično mala jezik i jedan od lijepih značajki o C je struct. 285 00:12:24,230 --> 00:12:27,300 Na primjer, ako htjela represent-- neka je 286 00:12:27,300 --> 00:12:33,690 kažu da želiš imati varijabla koja predstavlja student u nekom programu. 287 00:12:33,690 --> 00:12:37,330 Možda ste pisali tečaj Registracija program ili jezgra sadržaj 288 00:12:37,330 --> 00:12:38,870 alat, ili nešto slično. 289 00:12:38,870 --> 00:12:42,922 Što su komadići podataka koji se odnose studentu koji dolaze u obzir? 290 00:12:42,922 --> 00:12:44,880 Kao student je zastupljena s onim vrijednosti? 291 00:12:44,880 --> 00:12:45,732 Da? 292 00:12:45,732 --> 00:12:46,940 Imate naziv kao student. 293 00:12:46,940 --> 00:12:48,900 Što još tipični student ima? 294 00:12:48,900 --> 00:12:49,320 >> PUBLIKA: [nečujan] 295 00:12:49,320 --> 00:12:50,200 >> DAVID J. Malan: Dakle, ispričavam se. 296 00:12:50,200 --> 00:12:50,660 >> PUBLIKA: Age. 297 00:12:50,660 --> 00:12:52,980 >> DAVID J. Malan: jedna godina, ili rođendan ekvivalentno, Yep. 298 00:12:52,980 --> 00:12:53,557 Što drugo? 299 00:12:53,557 --> 00:12:54,390 PUBLIKA: ID broj? 300 00:12:54,390 --> 00:12:57,460 DAVID J. Malan: Pa identifikacijski broj, možda telefonski broj, možda spavaonica, ili kuća, 301 00:12:57,460 --> 00:12:58,670 ili koledž, ili nešto slično. 302 00:12:58,670 --> 00:13:01,820 Bilo koji broj komada podataka koji možda imate na popisu kontakata 303 00:13:01,820 --> 00:13:03,890 je ono što se moglo definirati studenta. 304 00:13:03,890 --> 00:13:08,490 Dakle, ako smo htjeli to učiniti u kodu, bismo mogli učiniti nešto jednostavno kao što je ovaj. 305 00:13:08,490 --> 00:13:15,670 Možda ćemo imati program, tako da ima recimo, int glavni (prazninu). 306 00:13:15,670 --> 00:13:18,920 A ako želim predstavljati Student sam možda, na primjer, 307 00:13:18,920 --> 00:13:24,330 niz naziva naziv za tog studenta, niz naziva spavaonica za tog studenta, 308 00:13:24,330 --> 00:13:26,900 možda int zove ID za tog studenta. 309 00:13:26,900 --> 00:13:30,840 I zato sam koristeći niz, ja morati vratiti i staviti CS50.h. 310 00:13:30,840 --> 00:13:33,300 Možda ću morati stdio.h. 311 00:13:33,300 --> 00:13:38,190 Pa neka mi preventivno učiniti oni, a ja sam nazvati ovu student.c za sada 312 00:13:38,190 --> 00:13:40,080 i spasiti ovo. 313 00:13:40,080 --> 00:13:44,206 >> I sad ja mogu učiniti nešto s tim varijablama. 314 00:13:44,206 --> 00:13:46,830 I samo ćemo pisati da je kao komentar u pseudo kodu, 315 00:13:46,830 --> 00:13:48,829 jer to nije interesantno ono što činimo za sada. 316 00:13:48,829 --> 00:13:51,242 OK, ovo je program koji nekako pohranjuje student. 317 00:13:51,242 --> 00:13:53,450 Što želim učiniti ako sam želite pohraniti dva studenta? 318 00:13:53,450 --> 00:13:55,991 Dakle, moj prvi instinkt ide sve biti u redu, čekaj malo, 319 00:13:55,991 --> 00:14:01,920 ako imam još jedan student zašto ne bih samo učiniti naziv niz 2, niz spavaonica 2, 320 00:14:01,920 --> 00:14:04,190 int ID2. 321 00:14:04,190 --> 00:14:06,540 I mi smo učinili otišao niz ovu cestu prije 322 00:14:06,540 --> 00:14:10,890 a ono što je naše rješenje za ono što se čini se vrsta hackish copy paste 323 00:14:10,890 --> 00:14:11,555 posao ovdje? 324 00:14:11,555 --> 00:14:12,346 PUBLIKA: Niz. 325 00:14:12,346 --> 00:14:13,830 DAVID J. Malan: Da, bismo mogli koristiti niz. 326 00:14:13,830 --> 00:14:15,620 Pravo ovaj vrlo brzo postaje nezgrapan. 327 00:14:15,620 --> 00:14:18,453 Morate vrsta proizvoljno početi imenovanja svih tih varijabli. 328 00:14:18,453 --> 00:14:22,190 A vi, ljudska, morate držati pratite li to u redu NAME2 odgovara 329 00:14:22,190 --> 00:14:25,060 s dorm2 odgovara ID2. 330 00:14:25,060 --> 00:14:26,200 To samo postaje u neredu. 331 00:14:26,200 --> 00:14:29,350 Dakle, to je puno lakše, sjećam od prije nekoliko tjedana, 332 00:14:29,350 --> 00:14:34,300 samo da se zove string imena a možda nam tri od tih. 333 00:14:34,300 --> 00:14:36,940 A onda možda imamo string dorms i imaju 334 00:14:36,940 --> 00:14:41,900 tri od njih, ili sa konstantom, int IDS i imaju troje njih. 335 00:14:41,900 --> 00:14:45,250 Ali čak i sada to osjeća malo neuredan, zar ne. 336 00:14:45,250 --> 00:14:49,440 Govorimo o studentima i ipak Ja sam stvarno prebiva na niskoj razini 337 00:14:49,440 --> 00:14:50,470 pojedinosti provedbe. 338 00:14:50,470 --> 00:14:52,790 Student je ime i spavaonica i ID. 339 00:14:52,790 --> 00:14:59,814 >> Zašto ne mogu jednostavno proglasiti varijablu zove student i nazvati to je. 340 00:14:59,814 --> 00:15:02,230 A ako želim još jedan student, zašto ne bih jednostavno nazvao t. 341 00:15:02,230 --> 00:15:05,260 Ili ako želim hrpu studenata, zašto ne bih jednostavno 342 00:15:05,260 --> 00:15:09,740 kažu imam cijeli razred studenti i to tri od njih. 343 00:15:09,740 --> 00:15:12,470 Drugim riječima, zašto ne mogu doći s vlastitom vrstom podataka, pod nazivom 344 00:15:12,470 --> 00:15:15,641 Studenti, unutar kojih je ime, je ID je spavaonica, 345 00:15:15,641 --> 00:15:16,890 je bilo koji broj drugih područja. 346 00:15:16,890 --> 00:15:19,030 I ispada vas može učiniti upravo to. 347 00:15:19,030 --> 00:15:21,850 >> Dakle C ima tu značajku pod nazivom struct. 348 00:15:21,850 --> 00:15:24,700 To je značajka jezik koji nam omogućuje da učinite upravo to. 349 00:15:24,700 --> 00:15:28,370 Idem samo naprijed i otvoriti structs.h 350 00:15:28,370 --> 00:15:32,299 gdje ćemo vidjeti Sljedeće definicije student. 351 00:15:32,299 --> 00:15:35,215 Ispada - a to je još jedan jednostavniji od onog koji uključuje ID 352 00:15:35,215 --> 00:15:36,080 Prije nekoliko trenutaka. 353 00:15:36,080 --> 00:15:39,120 Ako želite da se s vaša domaća tip podataka, 354 00:15:39,120 --> 00:15:42,750 i uz int i char i plutaju i sve ove druge koje postoje, 355 00:15:42,750 --> 00:15:45,810 možete učiniti doslovno pisanje typedef struct, 356 00:15:45,810 --> 00:15:47,880 onda neki vitičastih zagrada, unutar koje 357 00:15:47,880 --> 00:15:51,460 popis varijabli koje želite povezati s ovim novim prilagođenim podacima 358 00:15:51,460 --> 00:15:55,670 upisati kao ime i domu, a onda nakon vitičastih zagrada 359 00:15:55,670 --> 00:15:57,860 vam dati ime na novi tip podataka. 360 00:15:57,860 --> 00:15:59,220 Tako je, primjerice, student. 361 00:15:59,220 --> 00:16:03,247 >> A što je lijepo o tome je da je ako gledamo odgovarajućeg koda, 362 00:16:03,247 --> 00:16:05,080 Konvencija, prva od svega, je da stavite ovo 363 00:16:05,080 --> 00:16:08,230 u datoteci pod nazivom nešto dot sati, zaglavlje datoteke, što nemamo 364 00:16:08,230 --> 00:16:09,780 počeo se koristi previše. 365 00:16:09,780 --> 00:16:12,120 Ali ćemo početi pomoću vrlo malo sada. 366 00:16:12,120 --> 00:16:18,650 I što možemo učiniti s tim, u konačnici, u ovih nekoliko linija koda 367 00:16:18,650 --> 00:16:22,130 se izjaviti upravo to tip podataka, student. 368 00:16:22,130 --> 00:16:23,230 A sada ćemo ga koristiti. 369 00:16:23,230 --> 00:16:27,274 >> Idem sad ići u datoteka zove structs1.c. 370 00:16:27,274 --> 00:16:29,440 I neka je pogledati na Nekoliko obilježja ovdje. 371 00:16:29,440 --> 00:16:32,250 Dakle, stvari se ovdje uglavnom poznato, a mi ćemo 372 00:16:32,250 --> 00:16:35,040 vratiti na ono što nije upoznati u samo trenutak. 373 00:16:35,040 --> 00:16:39,880 To, naravno, je uključujući i moju vlastitu zaglavlje datoteke, što je novo, kao i, 374 00:16:39,880 --> 00:16:42,580 osim za PSet 3, gdje, Podsjetimo, imamo helpers.h. 375 00:16:42,580 --> 00:16:45,150 Tako možete sjetiti #include helpers.h. 376 00:16:45,150 --> 00:16:49,381 >> Zašto da ja pomoću citati umjesto kutnih tipkovnici? 377 00:16:49,381 --> 00:16:50,630 Kada sam birati između njih? 378 00:16:50,630 --> 00:16:52,310 Gotovo uvijek sam činiti koristiti pod kutom zagrade. 379 00:16:52,310 --> 00:16:55,040 I onda, odjednom na crta šest sam koristeći dvostruke navodnike. 380 00:16:55,040 --> 00:16:55,860 Zašto bi to moglo biti? 381 00:16:55,860 --> 00:16:56,700 Da? 382 00:16:56,700 --> 00:16:57,725 >> PUBLIKA: [nečujan] 383 00:16:57,725 --> 00:16:59,350 DAVID J. Malan: To je stvarni, što? 384 00:16:59,350 --> 00:17:00,559 PUBLIKA: To je u vašem IDE. 385 00:17:00,559 --> 00:17:02,475 DAVID J. Malan: Da, to je u mom stvarnom IDE. 386 00:17:02,475 --> 00:17:05,690 I ne prebiva na IDE, jer to je samo alat koji koristim. 387 00:17:05,690 --> 00:17:08,119 To je u mom struje katalog, posebno. 388 00:17:08,119 --> 00:17:11,647 Dakle structs.h je moj datoteka Nije instaliran u IDE, 389 00:17:11,647 --> 00:17:14,480 u samom operativnom sustavu, a to je u mom trenutnom direktoriju. 390 00:17:14,480 --> 00:17:16,910 Tako je konvencija ako želite uključiti svoj zaglavlje datoteke, 391 00:17:16,910 --> 00:17:18,200 ti samo koristiti dvostruke navodnike. 392 00:17:18,200 --> 00:17:23,290 >> Što mi zovemo ovo u linija 8, općenito govoreći? 393 00:17:23,290 --> 00:17:25,200 To je što? 394 00:17:25,200 --> 00:17:28,220 #define nešto. 395 00:17:28,220 --> 00:17:31,040 To predstavlja konstante, zar ne? 396 00:17:31,040 --> 00:17:33,140 Ako želite imati vrijednost u svom programu 397 00:17:33,140 --> 00:17:35,110 da koristite cijeli hrpa vremena, to je 398 00:17:35,110 --> 00:17:39,330 Dobar konvencija to faktor van, proglasiti ga, s hash znak 399 00:17:39,330 --> 00:17:43,340 definirati, onda, po konvenciji, u svim velika slova word-- iako to nije 400 00:17:43,340 --> 00:17:45,320 strogo potrebno, ali to je ljudska konvencija 401 00:17:45,320 --> 00:17:47,210 kapitalizirati konstante tako da oni iskočiti 402 00:17:47,210 --> 00:17:50,380 na što visually-- prostor i onda je vrijednost želite biti 403 00:17:50,380 --> 00:17:52,250 ekvivalentno ime konstantna je. 404 00:17:52,250 --> 00:17:56,110 Ne točka-zarez, ali jednostavno slijediti taj obrazac ima. 405 00:17:56,110 --> 00:17:57,770 >> Dakle, ono što ja radim u ovoj stvarnoj koda. 406 00:17:57,770 --> 00:18:00,660 Tako ćemo pogledati glavni program ovdje. 407 00:18:00,660 --> 00:18:04,080 U skladu 12 jer sam Uključene structs.h, 408 00:18:04,080 --> 00:18:06,492 Ja sada imam magično na mom zbrinjavanje nova vrsta podataka. 409 00:18:06,492 --> 00:18:09,200 Ne samo imati pristup int, i char, float i te niz, 410 00:18:09,200 --> 00:18:10,060 i plavo i drugi. 411 00:18:10,060 --> 00:18:12,470 Ja sada imaju pristup vrsta učenik podataka. 412 00:18:12,470 --> 00:18:17,740 Dakle, u skladu 12, ja sam kombinirajući dvije ideas-- jedan običaj tip podataka i dva, 413 00:18:17,740 --> 00:18:18,940 pomoću niz. 414 00:18:18,940 --> 00:18:21,700 I tako je u ovom programu, ako Želim zapravo podržavaju 415 00:18:21,700 --> 00:18:24,320 Tri različita studenti u mom programu, ja 416 00:18:24,320 --> 00:18:30,480 može se jednostavno reći dajte mi varijablu nazivaju studentima, svaki od kojih 417 00:18:30,480 --> 00:18:32,970 je tipa studenata koji je moj tip običaj podataka. 418 00:18:32,970 --> 00:18:35,890 I, posebno, dajte mi tri od onih u mom nizu. 419 00:18:35,890 --> 00:18:37,750 >> I što sad da radimo u ovom programu? 420 00:18:37,750 --> 00:18:40,670 Evo samo za petlje iterating od 0 do 3, jer je to 421 00:18:40,670 --> 00:18:42,110 što je vrijednost studenata. 422 00:18:42,110 --> 00:18:44,420 Samo sam pitajući korisnika daj mi ime studenta. 423 00:18:44,420 --> 00:18:48,090 A onda u redu 17, mi imaju uglavnom poznate linije. 424 00:18:48,090 --> 00:18:50,370 Mi imamo staru prijateljicu GetString na desnoj strani. 425 00:18:50,370 --> 00:18:52,345 A što komad sintakse je očito novi, 426 00:18:52,345 --> 00:18:55,130 Ako ste nikada nije programiran u C prije, i nikada nisu koristili konstrukt? 427 00:18:55,130 --> 00:18:55,510 Da? 428 00:18:55,510 --> 00:18:56,417 >> PUBLIKA: U .name. 429 00:18:56,417 --> 00:18:57,500 DAVID J. Malan su: .name. 430 00:18:57,500 --> 00:19:01,220 Ali to nije previše skok, jer sada studenti omeđi ja 431 00:19:01,220 --> 00:19:02,590 daje vam ja-og učenika. 432 00:19:02,590 --> 00:19:04,730 A ako želite roniti unutar te strukture, 433 00:19:04,730 --> 00:19:09,490 ti samo koristiti jedan period i onda naziv varijable iznutra, 434 00:19:09,490 --> 00:19:11,900 ili vlasništvo unutar koje Želite da biste dobili pristup. 435 00:19:11,900 --> 00:19:14,816 Isto tako onda, ako sam tada upozoravaju Korisnik, daj mi studenta spavaonica, 436 00:19:14,816 --> 00:19:18,390 što slično može pohraniti da string u varijablu domu unutar 437 00:19:18,390 --> 00:19:19,940 te studentske strukture. 438 00:19:19,940 --> 00:19:21,410 >> I sada se stvari malo fancy. 439 00:19:21,410 --> 00:19:24,420 A to će izgledati na možda puno vrlo brzo. 440 00:19:24,420 --> 00:19:27,970 Ali to ćete vidjeti mnogo više u PSet 4, pa neka je samo pogled na njega sada. 441 00:19:27,970 --> 00:19:33,364 Ispada da je u redu 23 do 38, što misliš da ću možda radiš? 442 00:19:33,364 --> 00:19:35,530 Ja sam uklonio komentare za danas, ali verziji 443 00:19:35,530 --> 00:19:38,660 koda online za Referentna ima sve komentare. 444 00:19:38,660 --> 00:19:40,171 Što mi je činiti da se radi? 445 00:19:40,171 --> 00:19:42,530 >> PUBLIKA: Spremanje datoteke sa svima informacije koje je korisnik unio. 446 00:19:42,530 --> 00:19:44,530 >> DAVID J. Malan: Da, točno, to je novi način 447 00:19:44,530 --> 00:19:46,370 da smo gledajući dva, jedna značajka C, 448 00:19:46,370 --> 00:19:48,700 gdje mogu kreirati vlastite datoteke. 449 00:19:48,700 --> 00:19:51,580 Do sada, gotovo svaki program si napisao je bez državljanstva. 450 00:19:51,580 --> 00:19:53,334 Čim se to radi radi, to je to. 451 00:19:53,334 --> 00:19:55,000 Nema memorije ili sjećanje na to. 452 00:19:55,000 --> 00:19:56,110 Nema datoteka spremljena. 453 00:19:56,110 --> 00:19:58,120 Ali ako želite spremiti ulaz koji ima 454 00:19:58,120 --> 00:20:02,100 dogodilo, kao u igri ili programu ovako ispada da možemo učiniti. 455 00:20:02,100 --> 00:20:04,360 A vi ćete vidjeti više u PSet 4 i Odjeljka. 456 00:20:04,360 --> 00:20:08,661 No, ova linija 23 bitno stvara datoteku pod nazivom students.csv. 457 00:20:08,661 --> 00:20:10,160 A možda ste vidjeli prije. 458 00:20:10,160 --> 00:20:14,250 Čak i ako ste nikada nije studirao CS prije, CSV je odijeljene zarezom varijable. 459 00:20:14,250 --> 00:20:19,000 To je kao vrlo siromašan čovjek verzija Excel datoteke, 460 00:20:19,000 --> 00:20:22,270 što znači da se može biti otvorena u Excelu i na Apple brojkama, 461 00:20:22,270 --> 00:20:23,830 i ima retke i stupce. 462 00:20:23,830 --> 00:20:26,485 Ali to nije vlasnički Format poput Microsofta ili Apple. 463 00:20:26,485 --> 00:20:29,840 To je samo zarez odvajanja vrijednosti koje ćemo vidjeti u jednom trenutku. 464 00:20:29,840 --> 00:20:31,010 >> I samo uzeti pogodak. 465 00:20:31,010 --> 00:20:33,480 U skladu 23, na samom kraj, moj drugi argument 466 00:20:33,480 --> 00:20:37,700 na ovu novu funkciju pod nazivom f otvoren otvorenom datotekom w. 467 00:20:37,700 --> 00:20:39,430 Što bi W označava? 468 00:20:39,430 --> 00:20:40,022 Da? 469 00:20:40,022 --> 00:20:41,260 >> PUBLIKA: To vam omogućuje pisanje u datoteku? 470 00:20:41,260 --> 00:20:42,630 >> DAVID J. Malan: To vam omogućuje pišete na datoteku. 471 00:20:42,630 --> 00:20:44,810 Dakle, postoji nekoliko varijanti da možemo priključiti ovdje. 472 00:20:44,810 --> 00:20:47,184 Ali ako se samo želite čitati datoteka, koji je na to gledate 473 00:20:47,184 --> 00:20:50,010 i to pročitao u memoriju, te samo koristiti citat citat "r". 474 00:20:50,010 --> 00:20:53,110 Ako želite pisati na datoteka, koristite citat citat "w". 475 00:20:53,110 --> 00:20:55,190 Tu je također dodati i par drugih stvari 476 00:20:55,190 --> 00:20:57,356 ako želite mijenjati postojeće datoteke. 477 00:20:57,356 --> 00:21:00,480 Sada ćemo zadržati vidiš stvar, a onda ćemo se vratiti na liniju 24. 478 00:21:00,480 --> 00:21:02,640 NULL, ispostavilo se, je posebna vrijednost koja 479 00:21:02,640 --> 00:21:06,070 može se vratiti na određene funkcije ako nešto pođe wrong-- 480 00:21:06,070 --> 00:21:08,490 Ako datoteka ne postoji, Ako ste ponestane memorije, 481 00:21:08,490 --> 00:21:09,620 ili hrpa drugih pogrešaka. 482 00:21:09,620 --> 00:21:13,470 No, za sada, neka je samo pretpostaviti da je ovaj samo konvencionalni provjere pogreške. 483 00:21:13,470 --> 00:21:17,090 Ovdje u skladu 26, ja sam iterating od 0 do 3 nad svim svojim studentima. 484 00:21:17,090 --> 00:21:20,470 A to je vrsta vrsta nove funkcije, fprintf, 485 00:21:20,470 --> 00:21:21,460 ali samo uzeti pogodak. 486 00:21:21,460 --> 00:21:24,370 Ako printf je samo ispis formatiran string, 487 00:21:24,370 --> 00:21:26,507 Što fprintf vjerojatno znači? 488 00:21:26,507 --> 00:21:27,590 PUBLIKA: Ispis u datoteku. 489 00:21:27,590 --> 00:21:29,290 DAVID J. Malan: Ispišite formatiran string u datoteku. 490 00:21:29,290 --> 00:21:31,180 To je ono što dodatno f način je datoteka. 491 00:21:31,180 --> 00:21:36,420 I novi prvi argument mora biti varijabla koja predstavlja datoteku. 492 00:21:36,420 --> 00:21:38,866 Onda imamo samo jedan format string kao printf. 493 00:21:38,866 --> 00:21:40,740 I iako je to sintaksa je novo, to samo 494 00:21:40,740 --> 00:21:44,610 znači priključiti ime studenta, plug-u studentskom domu, a zatim 495 00:21:44,610 --> 00:21:47,160 s fclose, zatvorite datoteku. 496 00:21:47,160 --> 00:21:49,730 A onda lastly-- to je novo a mi ćemo se vratiti na ovo 497 00:21:49,730 --> 00:21:53,240 Prije long-- sam oslobađajući student iz razloga 498 00:21:53,240 --> 00:21:54,860 koja se dogodila iznad postoji. 499 00:21:54,860 --> 00:21:56,820 No, mi ćemo se vratiti na to prije long-- 500 00:21:56,820 --> 00:21:59,820 to je zbog načina GetString je zapravo rade ispod haube. 501 00:21:59,820 --> 00:22:01,280 >> Tako ćemo uzeti brzo pogledati ovdje. 502 00:22:01,280 --> 00:22:04,380 Ako sam upisati ls u mom imeniku, primijetiti da ja ne 503 00:22:04,380 --> 00:22:09,360 imati datoteku pod nazivom students.csv, jednostavno ne postoji, ne postoji. 504 00:22:09,360 --> 00:22:14,965 Dakle, ako ja sada sastaviti ovaj program, bi konstrukt-1. / konstrukt-1, 505 00:22:14,965 --> 00:22:20,570 a ja ću ići naprijed i upišite Andi, koji živi u Berkeleyu na Yaleu. 506 00:22:20,570 --> 00:22:26,350 Mi ćemo imati Rob koji živi u Thayer ovih dana. 507 00:22:26,350 --> 00:22:33,760 I neka je doći do gdje je, mislim, Maria je u Mather, 508 00:22:33,760 --> 00:22:35,100 ako sam dobro sjećao. 509 00:22:35,100 --> 00:22:36,460 >> Dakle, ništa ne čini da se dogodi. 510 00:22:36,460 --> 00:22:40,680 Ali ako upišete LS sada, postoji students.csv. 511 00:22:40,680 --> 00:22:43,080 Idemo naprijed i otvoreni students.csv. 512 00:22:43,080 --> 00:22:46,050 To je opet vrlo lagana format datoteke. 513 00:22:46,050 --> 00:22:49,570 Ali ja jednostavno nisam usvojila Konvenciju da imam dva redaka i stupaca ovdje. 514 00:22:49,570 --> 00:22:52,020 Prvi stupac je ljudi prva imena. 515 00:22:52,020 --> 00:22:55,740 Drugi stupac je studenta domu ili koledž, ili kuću, ili sitnica. 516 00:22:55,740 --> 00:22:57,900 I sad sam spasio ovaj trajno u datoteci. 517 00:22:57,900 --> 00:22:59,280 >> Dakle, to nije sve što je zanimljivo. 518 00:22:59,280 --> 00:23:02,980 No, to je samo odskočna daska sada kako bi se mogli oduprijeti podatke 519 00:23:02,980 --> 00:23:04,040 trajno. 520 00:23:04,040 --> 00:23:08,340 Pa da vidimo sada što više možemo učiniti s tim i drugim značajkama. 521 00:23:08,340 --> 00:23:10,729 Ali prvo, bilo kakva pitanja? 522 00:23:10,729 --> 00:23:12,145 To je mnogo, a to je bilo brzo. 523 00:23:12,145 --> 00:23:16,131 Ali vidjet ćete puno više PSet 4, i. 524 00:23:16,131 --> 00:23:16,630 Da? 525 00:23:16,630 --> 00:23:19,360 >> PUBLIKA: Da li postoji način da se nastaviti dodavati imena za tu datoteku? 526 00:23:19,360 --> 00:23:19,880 >> DAVID J. Malan: Dobro pitanje. 527 00:23:19,880 --> 00:23:21,800 Da li postoji način da i dalje dodavanje imena na tu datoteku? 528 00:23:21,800 --> 00:23:22,340 Da. 529 00:23:22,340 --> 00:23:24,630 A, u stvari, ako kraj do ponovnog otvaranja datoteke, 530 00:23:24,630 --> 00:23:26,780 ti bi koristiti citat citat "a" za dodati, 531 00:23:26,780 --> 00:23:31,090 što bi samo dodati novu liniju, Nova linija i opet, točno. 532 00:23:31,090 --> 00:23:32,010 Dobro pitanje. 533 00:23:32,010 --> 00:23:32,950 Ostala pitanja? 534 00:23:32,950 --> 00:23:33,450 Da? 535 00:23:33,450 --> 00:23:35,580 PUBLIKA: Ako vodio Program opet upravo sada, 536 00:23:35,580 --> 00:23:38,000 bi se držati dodajući imena u podnijeti ili će se otvoriti novi datoteku? 537 00:23:38,000 --> 00:23:38,740 >> DAVID J. Malan: Ah, dobro pitanje. 538 00:23:38,740 --> 00:23:41,448 Ako ponovno pravu vodio program Sada, možda upisali u novim imenima, 539 00:23:41,448 --> 00:23:44,820 će dodati datoteke ili prebrisati datoteku? 540 00:23:44,820 --> 00:23:47,420 Potonji, jer sam Ne koristite dodati modu. 541 00:23:47,420 --> 00:23:49,930 I zato sam samo slijepo otvoriti datoteku za pisanje, 542 00:23:49,930 --> 00:23:51,310 to samo će prebrisati datoteku. 543 00:23:51,310 --> 00:23:54,570 Tako sam doista bi trebao učiniti je dodati, ako želim zapravo imaju dugoročno 544 00:23:54,570 --> 00:23:55,350 baze podataka. 545 00:23:55,350 --> 00:23:58,220 >> Sada CSV korisno, iskreno, ni za kao ako ste writing-- 546 00:23:58,220 --> 00:24:00,100 a mi ćemo na kraju vidjeti kasnije u semestru kada 547 00:24:00,100 --> 00:24:01,455 koristimo CSV-ovi za druge svrhe. 548 00:24:01,455 --> 00:24:04,920 Ako želite pohraniti sve ljude koji su registrirani za neki događaj, 549 00:24:04,920 --> 00:24:07,420 ili se prijavili za svoj student skupina, ili nešto slično, 550 00:24:07,420 --> 00:24:10,330 pohranjivanja podataka u ovoj vrsti format je super povoljno. 551 00:24:10,330 --> 00:24:12,580 Jer doslovno, ako ja su preuzeti ovu datoteku. 552 00:24:12,580 --> 00:24:14,540 Mogao sam double-- i neka je zapravo probati ovaj 553 00:24:14,540 --> 00:24:16,720 ako imam Excel ili brojeve ovdje. 554 00:24:16,720 --> 00:24:19,130 >> Idem desnim klikom ili upravljačke kliknite moj dosje. 555 00:24:19,130 --> 00:24:20,020 Ups. 556 00:24:20,020 --> 00:24:21,830 Desnom tipkom miša ili upravljačke kliknite moj dosje. 557 00:24:21,830 --> 00:24:24,960 Hajde, moj miš ne surađuje. 558 00:24:24,960 --> 00:24:32,694 Download-- ću preuzeti sve datoteke ovdje tako 559 00:24:32,694 --> 00:24:33,860 samo tako ja mogu zgrabiti ovo. 560 00:24:33,860 --> 00:24:37,850 I neka je vidjeti ako to radi students.csv-- prvi put 561 00:24:37,850 --> 00:24:39,310 Ja sam aktivirati. 562 00:24:39,310 --> 00:24:41,360 Sada žele vidjeti moje kontakte. 563 00:24:41,360 --> 00:24:44,310 Sada, trebam registrirati. 564 00:24:44,310 --> 00:24:47,620 Pogledajte kako je lako za korištenje CSV-ovi? 565 00:24:47,620 --> 00:24:50,840 Da, držati ga do danas. 566 00:24:50,840 --> 00:24:52,375 OK, sada smo spremni za klasu. 567 00:24:52,375 --> 00:24:58,750 568 00:24:58,750 --> 00:25:00,370 OK, oh, što je novo? 569 00:25:00,370 --> 00:25:02,920 U redu, u neposrednoj blizini. 570 00:25:02,920 --> 00:25:04,750 To je čarobno. 571 00:25:04,750 --> 00:25:07,280 OK, sada moramo ažurirati. 572 00:25:07,280 --> 00:25:10,890 A sad, to što je zaboravio file sam prvotno otvorena, 573 00:25:10,890 --> 00:25:13,090 ali ono A- tamo idemo. 574 00:25:13,090 --> 00:25:16,341 U redu, tako da sada imamo Excel datoteka. 575 00:25:16,341 --> 00:25:18,290 Hvala. 576 00:25:18,290 --> 00:25:20,764 >> U redu, tako da ono što sam učinio je jednostavno dio. 577 00:25:20,764 --> 00:25:23,930 Naravno da sam mogao unaprijed instaliran Excel ili Brojevi, ili što god programa. 578 00:25:23,930 --> 00:25:25,846 No, to je lijepo, jer sada mogu manipulirati 579 00:25:25,846 --> 00:25:28,090 podaci u standardnom formatu. 580 00:25:28,090 --> 00:25:30,294 >> Dakle, sada ćemo kontekst prebaciti na kojoj smo stali 581 00:25:30,294 --> 00:25:32,710 Posljednji put, što je za početak skinuti trening kotačima. 582 00:25:32,710 --> 00:25:34,543 Ali prvo, nisi pogledajte ovaj raniji ručak 583 00:25:34,543 --> 00:25:38,150 opet događa ovdje na vatru i Led u Cambridgeu, Sitar u New Havenu. 584 00:25:38,150 --> 00:25:43,150 Prijavite se na web stranici CS50s ASAP pridružiti CS50 studente i osoblje. 585 00:25:43,150 --> 00:25:46,090 >> Tako smo uzeli trening kotačima off je u ponedjeljak kako je follows-- 586 00:25:46,090 --> 00:25:49,120 Niz je proglašen u CS50s knjižnica za neko vrijeme. 587 00:25:49,120 --> 00:25:52,650 I to je lijepo, jer omogućuje nam govoriti o varijablama kao 588 00:25:52,650 --> 00:25:54,660 kompletna riječi i rečenice i još mnogo toga. 589 00:25:54,660 --> 00:25:56,710 Ali ispada string ne postoji. 590 00:25:56,710 --> 00:26:00,200 To je samo sinonim, ili pseudonim, da smo stvorili nešto što 591 00:26:00,200 --> 00:26:03,780 zapravo je malo više Tehnički zove char *. 592 00:26:03,780 --> 00:26:07,900 >> I doista, vidjeli smo primjer programa u ponedjeljak 593 00:26:07,900 --> 00:26:11,200 da ne ponašaju baš kao što smo i očekivali. 594 00:26:11,200 --> 00:26:13,630 To je bio varalica, usporedite-0. 595 00:26:13,630 --> 00:26:17,910 I podsjetiti da usporedite-0, ako je Ja rekompilirati programu u ponedjeljak 596 00:26:17,910 --> 00:26:22,670 i pokrenuti usporedite-0 i upišite mama u mala i mama malim slovima opet. 597 00:26:22,670 --> 00:26:25,320 Program je inzistirao da upišite različite stvari, 598 00:26:25,320 --> 00:26:29,210 iako mama, sve u mala, identičan vizualno. 599 00:26:29,210 --> 00:26:31,990 Dakle, što je bio kratki odgovor zašto se računalo misli 600 00:26:31,990 --> 00:26:34,500 te dvije žice su različiti? 601 00:26:34,500 --> 00:26:35,250 Da? 602 00:26:35,250 --> 00:26:36,534 >> PUBLIKA: [nečujan] 603 00:26:36,534 --> 00:26:37,450 DAVID J. Malan: Tako je. 604 00:26:37,450 --> 00:26:39,600 Dakle, mama, prvi put Ja ga upisati, se 605 00:26:39,600 --> 00:26:42,710 pohranjene negdje u mojoj računala memorije, ali na drugom mjestu 606 00:26:42,710 --> 00:26:44,690 nego drugi put sam upisati mama. 607 00:26:44,690 --> 00:26:46,580 Sada je sigurno mogao biti optimiziran. 608 00:26:46,580 --> 00:26:49,205 Računalo može biti pametan i shvatite ove dvije žice, hej, 609 00:26:49,205 --> 00:26:49,954 oni su identični. 610 00:26:49,954 --> 00:26:51,520 Dopustite mi da se ne redundantly ga pohraniti. 611 00:26:51,520 --> 00:26:54,229 Ali računala ne raditi Optimizacija osim ako kažem im da. 612 00:26:54,229 --> 00:26:56,061 Dakle, po defaultu, oni su Samo ću završiti 613 00:26:56,061 --> 00:26:57,670 na dva različita mjesta u memoriji. 614 00:26:57,670 --> 00:27:01,570 I tako bi biti jasno, kada se smo usporedili dvije žice, 615 00:27:01,570 --> 00:27:03,950 Prvi je bio pod nazivom e, drugi se zvao 616 00:27:03,950 --> 00:27:08,530 t, što je posebno bio sam uspoređujući ovdje na liniji 13? 617 00:27:08,530 --> 00:27:09,494 Da. 618 00:27:09,494 --> 00:27:12,390 >> PUBLIKA: To je mjesto u memoriji da je varijabla će ukazati. 619 00:27:12,390 --> 00:27:14,900 >> DAVID J. Malan: Točno, bio sam Uspoređujući mjesto u memoriji 620 00:27:14,900 --> 00:27:16,300 da te varijable ukazao na. 621 00:27:16,300 --> 00:27:20,560 Pa konkretno, ako je mama bila na byte broj 1 i 2, i 3, 622 00:27:20,560 --> 00:27:24,020 i 4-- zato zapamtite kosu crtu 0 treba biti skroz na kraju. 623 00:27:24,020 --> 00:27:29,420 I druga instanca mama, m-o-m, je na adresi 10, 11, 12, i 13. 624 00:27:29,420 --> 00:27:33,100 Bio sam uspoređujući 1, koja adresa, koje mjesto u memoriji, 625 00:27:33,100 --> 00:27:35,160 od 10, što je očito nije isto. 626 00:27:35,160 --> 00:27:36,260 1 nije 10. 627 00:27:36,260 --> 00:27:39,620 >> Dakle, to je lijepo u tome to je prilično jednostavan. 628 00:27:39,620 --> 00:27:42,870 Ali to je problematično ukoliko ne možemo činiti za usporedbu nizova. 629 00:27:42,870 --> 00:27:44,930 Dakle fundamentally-- i na ovoj niskoj razini, 630 00:27:44,930 --> 00:27:47,300 ako ste htjeli provesti program za usporedbu 631 00:27:47,300 --> 00:27:50,270 dvije odvojene riječi da korisnik utipkao za kvalitetu, 632 00:27:50,270 --> 00:27:53,944 oni postroje char za char, samo u općim uvjetima, 633 00:27:53,944 --> 00:27:55,360 ono što trebamo učiniti, očito? 634 00:27:55,360 --> 00:27:57,940 Nije dovoljno samo pogledajte te dvije adrese. 635 00:27:57,940 --> 00:27:58,860 Što trebamo učiniti? 636 00:27:58,860 --> 00:27:59,360 Da? 637 00:27:59,360 --> 00:28:01,120 >> PUBLIKA: ponoviti kroz string [nečujan]. 638 00:28:01,120 --> 00:28:02,600 >> DAVID J. Malan: Da, neka je ponoviti kroz niz. 639 00:28:02,600 --> 00:28:05,808 Idemo koristiti za petlju, while petlji, ili sve što ste najviše sviđa. 640 00:28:05,808 --> 00:28:08,840 I ako imamo dvije žice negdje u memoriji, pogledajmo svaki ih 641 00:28:08,840 --> 00:28:11,770 prvi znak, onda svaki drugi karakter, zatim treći, i četvrti, 642 00:28:11,770 --> 00:28:15,206 i peti, dok smo hit što posebnu Sentinel vrijednost? 643 00:28:15,206 --> 00:28:16,080 PUBLIKA: [nečujan] 644 00:28:16,080 --> 00:28:18,800 DAVID J. Malan: Da, backslash nula, u kojem trenutku je u svakom nizu 645 00:28:18,800 --> 00:28:20,100 možemo odlučiti to je to. 646 00:28:20,100 --> 00:28:21,970 Jesmo li se podudaraju svaki lik? 647 00:28:21,970 --> 00:28:22,990 Ako ne, return false. 648 00:28:22,990 --> 00:28:24,770 Ako je tako, povratak istina. 649 00:28:24,770 --> 00:28:28,800 I tako to je upravo ono što ova verzija programa usporedite-1.c radi. 650 00:28:28,800 --> 00:28:31,677 To je identičan onome što smo Pogledao je u ponedjeljak, osim da sam 651 00:28:31,677 --> 00:28:34,760 stečen osloboditi od riječi string-- iako da nema funkcionalni impact-- sve 652 00:28:34,760 --> 00:28:37,450 Radim sada uklanjanje neke vizualne trening kotačima, 653 00:28:37,450 --> 00:28:40,880 ali jasno vidjeti da je s i t su adrese. 654 00:28:40,880 --> 00:28:43,020 I to je ono što je zvijezda, zvjezdica, predstavlja 655 00:28:43,020 --> 00:28:46,690 je adresa, inače poznat više tehnički kao pokazivač. 656 00:28:46,690 --> 00:28:49,880 >> Dakle, kada kažem s na linije 9 i reći char * s, 657 00:28:49,880 --> 00:28:52,160 to ne znači da mi dati niz. 658 00:28:52,160 --> 00:28:56,360 To znači daj mi varijablu čija svrha u životu je da pohraniti adresu. 659 00:28:56,360 --> 00:29:00,400 Zato ću staviti adresu niza u njega. 660 00:29:00,400 --> 00:29:03,500 I doista, GetString, biti Jasno, ne vraća niz. 661 00:29:03,500 --> 00:29:06,110 To ne vrati mama backslash nula, sama po sebi. 662 00:29:06,110 --> 00:29:10,005 Što GetString posebno i upravo se vratiti? 663 00:29:10,005 --> 00:29:10,880 PUBLIKA: [nečujan] 664 00:29:10,880 --> 00:29:14,080 DAVID J. Malan: adresu, adresu prvog znaka 665 00:29:14,080 --> 00:29:16,070 u nekom nizu je stečen. 666 00:29:16,070 --> 00:29:19,250 I tako sada vidimo opet posebna ključne riječi. 667 00:29:19,250 --> 00:29:20,640 I, aludirao sam na to ranije. 668 00:29:20,640 --> 00:29:23,620 To će biti dobar konvencije kako ćemo vidjeti i opet se sada. 669 00:29:23,620 --> 00:29:27,540 Ja provjeravam da da a nije null i t nije null. 670 00:29:27,540 --> 00:29:30,100 Budući da na temelju moje stvarno Brzo spominje ranije, 671 00:29:30,100 --> 00:29:35,510 što bi moglo značiti ako se ne vrati GetString adresu, ali N-U-L-L, što je opet, 672 00:29:35,510 --> 00:29:36,990 neke posebne vrijednosti? 673 00:29:36,990 --> 00:29:37,890 >> PUBLIKA: Pogreška. 674 00:29:37,890 --> 00:29:38,600 >> DAVID J. Malan: To je pogreška. 675 00:29:38,600 --> 00:29:39,550 Nešto je pošlo po zlu. 676 00:29:39,550 --> 00:29:41,341 A što se obično bi se moglo dogoditi, pogotovo 677 00:29:41,341 --> 00:29:45,162 s strings-- što bi moglo biti nepoznatog duljine u advance-- 678 00:29:45,162 --> 00:29:46,870 možda računala ' iz memorije, možda 679 00:29:46,870 --> 00:29:49,280 ste upisali u takvom dugo riječ ili rečenica 680 00:29:49,280 --> 00:29:51,880 ili zalijepiti tako veliki esej postoji samo nedovoljno memorije. 681 00:29:51,880 --> 00:29:55,340 I tako GetString ne mogu vratiti adresu cijelu stvar, 682 00:29:55,340 --> 00:29:56,620 pa to samo vraća ništa. 683 00:29:56,620 --> 00:30:00,580 A ona kaže pogreška se dogodilo po povratku posebnu NULL vrijednosti. 684 00:30:00,580 --> 00:30:02,890 To je nulta adresa, da se tako izrazim. 685 00:30:02,890 --> 00:30:06,157 >> Sada ispada C dolazi s funkcija koja se tu iteracija. 686 00:30:06,157 --> 00:30:09,240 Nemamo provesti ovo s for petlja ili while petlji sebe. 687 00:30:09,240 --> 00:30:11,150 Možemo koristiti funkciju, zove jezgrovito, 688 00:30:11,150 --> 00:30:15,400 promiješati comp ili string usporedbu, čiji je svrha u životu je da učinite upravo to. 689 00:30:15,400 --> 00:30:19,990 Možete mu dati dvije smjernice, dvije adrese, i to će ići na tim adresama 690 00:30:19,990 --> 00:30:23,130 a zatim usporedite pismo za pismo za pismom za kvalitetu, 691 00:30:23,130 --> 00:30:26,610 zaustavljajući se samo kada je ono što je istina? 692 00:30:26,610 --> 00:30:31,540 Kada intuitivno treba promiješati comp Ponavljanje prestanu, samo da bude jasno? 693 00:30:31,540 --> 00:30:35,400 Kad pogodi obrnutu kosu crtu 0 u bilo niz, na kojem trenutku može odlučiti 694 00:30:35,400 --> 00:30:38,910 je sve uskladiti, ili je došlo do neslaganja? 695 00:30:38,910 --> 00:30:42,740 >> Dakle, ako smo pokrenuti ovaj sada i pokušati naša mala slova igre, 696 00:30:42,740 --> 00:30:49,260 kako bi usporedili-1, ./compare-1 i upišite mama malim slovima oba puta. 697 00:30:49,260 --> 00:30:50,560 Sada je ista stvar. 698 00:30:50,560 --> 00:30:54,080 A ako sam to učiniti opet s mala i onda možda veliko. 699 00:30:54,080 --> 00:30:56,720 Sada je doista razlikuje između gornje i mala. 700 00:30:56,720 --> 00:31:00,440 Dakle, nije sve što je teško ili čarobno, ali sada ne objasni 701 00:31:00,440 --> 00:31:03,140 što se događa ispod haube. 702 00:31:03,140 --> 00:31:07,640 >> Pa što još možemo izdvojiti od ove vrste lekcije? 703 00:31:07,640 --> 00:31:08,980 Tako ćemo pogledati ovo. 704 00:31:08,980 --> 00:31:15,380 Ja ću ići naprijed i napisati Brzo Program se ovdje zove copy-0. 705 00:31:15,380 --> 00:31:21,594 A sada idemo naprijed i zapravo učinimo this-- s copy-0, 706 00:31:21,594 --> 00:31:23,010 pogledajte što sam došao ovdje. 707 00:31:23,010 --> 00:31:24,712 Prvi put sam reći korisnika, nešto reći. 708 00:31:24,712 --> 00:31:26,420 Onda sam se niz i ja ga pohraniti u s. 709 00:31:26,420 --> 00:31:29,810 Tada sam provjeriti da li je jednako jednak NULL, samo povratak 1. 710 00:31:29,810 --> 00:31:31,590 Dakle, ovo je samo standardni provjere pogreške. 711 00:31:31,590 --> 00:31:33,112 Ništa zanimljivo nije dogodilo. 712 00:31:33,112 --> 00:31:36,320 A u stvari, ako smo dobili osloboditi od pogreške provjeru, ovo izgleda kao tjedna 1 kôd 713 00:31:36,320 --> 00:31:36,985 Trenutno. 714 00:31:36,985 --> 00:31:39,110 Ali ja sam počeo da biste dobili malo bolje o tome. 715 00:31:39,110 --> 00:31:43,340 >> Sada, u skladu 16, prije tjedan dana, možda čak i par dana ili minuta prije 716 00:31:43,340 --> 00:31:46,720 moglo bi se reći linije 16 stvarajući varijablu naziva t 717 00:31:46,720 --> 00:31:48,219 i kopiranje s u nju. 718 00:31:48,219 --> 00:31:50,010 I to je savršeno razumno takeaway. 719 00:31:50,010 --> 00:31:51,560 No, točnije sada. 720 00:31:51,560 --> 00:31:54,190 Što se događa u redu 16? 721 00:31:54,190 --> 00:31:56,170 Ono što je uzimajući kopirati s desna na lijevo? 722 00:31:56,170 --> 00:31:56,669 Da? 723 00:31:56,669 --> 00:31:58,490 PUBLIKA: Je t dobivanje adresu s? 724 00:31:58,490 --> 00:32:01,220 >> DAVID J. Malan: Točno, t dobiva adresu s. 725 00:32:01,220 --> 00:32:05,170 Dakle, da bude jasno sad, ako odem natrag na to ranije primjer 726 00:32:05,170 --> 00:32:08,520 i ja izvući ono što sam upisali u. 727 00:32:08,520 --> 00:32:11,640 A ono što sam upisali in-- evo je i ovdje 728 00:32:11,640 --> 00:32:15,830 je ono što sam upisali u negdje u memorije, mama i onda backslash 729 00:32:15,830 --> 00:32:17,840 0 koje je dodao za mene. 730 00:32:17,840 --> 00:32:23,060 Ono što sam pohranjene ovdje, podsjećamo, To je u položaju 1, 2, 3, 4, 731 00:32:23,060 --> 00:32:24,655 to je ono što je trenutno u s. 732 00:32:24,655 --> 00:32:29,220 Dakle, ako na liniji 16, kažem dajte mi još jedna varijabla zove t i trgovine 733 00:32:29,220 --> 00:32:33,590 u u vrijednosti s, što je dobiva pohranjene ovdje neće mama 734 00:32:33,590 --> 00:32:35,480 već samo broj 1. 735 00:32:35,480 --> 00:32:38,520 >> Dakle, ako gledamo naprijed u ovom programu Sada, ono što će se dogoditi? 736 00:32:38,520 --> 00:32:40,690 Dakle, primijetite da postoji ova funkcija možda ćete 737 00:32:40,690 --> 00:32:44,410 Koristio to prije nekog vremena za Cezara, ili Vigenere, ili možda uopće ne. 738 00:32:44,410 --> 00:32:48,170 Tvrdim s mojim printf sam će kapitalizirati kopiranja t. 739 00:32:48,170 --> 00:32:51,616 Prvi u redu 19, brzi razum ček, strlen provjerava duljinu t. 740 00:32:51,616 --> 00:32:53,740 Jer ja ne želim pokušati kapitalizirati nešto 741 00:32:53,740 --> 00:32:55,104 ako nema string tamo. 742 00:32:55,104 --> 00:32:57,520 Ako korisnik samo pritisnite Enter, nema ništa kapitalizirati. 743 00:32:57,520 --> 00:33:01,100 Dakle, ja ne želim raditi liniju 21. 744 00:33:01,100 --> 00:33:05,758 Dakle, linija 21 je kapitaliziranje koje slovo, očito, ut? 745 00:33:05,758 --> 00:33:06,514 >> PUBLIKA: m? 746 00:33:06,514 --> 00:33:08,722 DAVID J. Malan: Izgleda kao da je kopiranje koja? 747 00:33:08,722 --> 00:33:09,486 PUBLIKA: m. 748 00:33:09,486 --> 00:33:10,450 DAVID J. Malan: Uh, m. 749 00:33:10,450 --> 00:33:12,685 U redu, tako da prvi m, jer obavijest da sam 750 00:33:12,685 --> 00:33:14,935 prolazi na toupper, koji Ako ste nikada nije vidio da je 751 00:33:14,935 --> 00:33:16,980 samo funkcija iskoristiti kao svoj ulaz. 752 00:33:16,980 --> 00:33:20,240 t nosač nula znači dati ja nula karakter t. 753 00:33:20,240 --> 00:33:22,550 I tako kako se to Promijeni sliku, da bude jasno? 754 00:33:22,550 --> 00:33:25,490 755 00:33:25,490 --> 00:33:29,160 Ono što treba da se prepisivati ​​ili mijenjati s obzirom na s i t i mama 756 00:33:29,160 --> 00:33:30,097 backslash nula. 757 00:33:30,097 --> 00:33:31,470 >> PUBLIKA: [nečujan] 758 00:33:31,470 --> 00:33:34,030 >> DAVID J. Malan: Da, tako da je ovo jedna ovdje jednostavno 759 00:33:34,030 --> 00:33:40,860 treba dobiti promijenio to-- popraviti this-- treba se mijenjati do kapitala m. 760 00:33:40,860 --> 00:33:44,330 Ali sada, izgleda kasnije u Program, ako sam ispisati 761 00:33:44,330 --> 00:33:49,800 s i t kao što sam ovdje čist, gledati što je će se dogoditi ispis s i t. 762 00:33:49,800 --> 00:33:54,310 Dakle, napravite copy-0, ./copy-0. 763 00:33:54,310 --> 00:33:57,140 Dopustite mi ići naprijed i upišite u mamom u svim malim slovima. 764 00:33:57,140 --> 00:34:00,140 Obavijest i izvornika i kopija su kapitalizirani. 765 00:34:00,140 --> 00:34:00,850 Zašto? 766 00:34:00,850 --> 00:34:04,431 Pa, s i t su oba upućuju na, ako hoćete, isti komad memorije. 767 00:34:04,431 --> 00:34:06,930 I iskreno, to je sve stvarno uninteresting-- činjenicu 768 00:34:06,930 --> 00:34:09,150 da smo pomoću adresa nulu ovdje. 769 00:34:09,150 --> 00:34:11,719 Mislim, ja stvarno ne briga gdje stvari u memoriji. 770 00:34:11,719 --> 00:34:13,550 Žao mi brisanja malo previše. 771 00:34:13,550 --> 00:34:15,674 Ali ja stvarno ne briga gdje su stvari u memoriji. 772 00:34:15,674 --> 00:34:18,510 I tako, upravo ono programeri imaju tendenciju da razmišljaju o tome 773 00:34:18,510 --> 00:34:21,080 je da kada se govori o adresu, ili pokazivač, 774 00:34:21,080 --> 00:34:22,679 koga briga gdje je u memoriji. 775 00:34:22,679 --> 00:34:24,989 Ne zanima me je li to na bajt jedan ili milijardu. 776 00:34:24,989 --> 00:34:27,920 Ja samo stalo da se ovaj varijabla je učinkovito 777 00:34:27,920 --> 00:34:29,620 pokazujući na taj komad memorije. 778 00:34:29,620 --> 00:34:33,350 I tako, sada, umjesto dosjetka više proizvoljnih memorijskih adresa, neka je 779 00:34:33,350 --> 00:34:36,710 samo početi crtati pokazivače što upućuje, kao strelice. 780 00:34:36,710 --> 00:34:39,340 Dakle, ono što je i t stvarno jesu, prema ovom programu, 781 00:34:39,340 --> 00:34:42,130 jer kako sam stvorio t, to je samo dvije zasebne varijable 782 00:34:42,130 --> 00:34:43,840 pokazujući na istom komad memorije. 783 00:34:43,840 --> 00:34:45,215 I nije me briga gdje su. 784 00:34:45,215 --> 00:34:47,130 Tako možemo apstraktno daleko tom detalju. 785 00:34:47,130 --> 00:34:48,780 >> Pa kako mogu popraviti ovo? 786 00:34:48,780 --> 00:34:54,120 Ako želim napisati verziju kopiju program koji zapravo kopije string 787 00:34:54,120 --> 00:34:56,840 i kapitalizira se samo kopija, samo intuitivno, 788 00:34:56,840 --> 00:34:59,766 što je dobio biti sastojak za naše rješenje? 789 00:34:59,766 --> 00:35:00,640 PUBLIKA: [nečujan] 790 00:35:00,640 --> 00:35:01,420 DAVID J. Malan: Trebamo što? 791 00:35:01,420 --> 00:35:01,820 PUBLIKA: komad memorije. 792 00:35:01,820 --> 00:35:03,280 DAVID J. Malan: Moramo još jedan komad memorije, zar ne? 793 00:35:03,280 --> 00:35:05,360 Ne znamo kako to ipak nužno. 794 00:35:05,360 --> 00:35:11,330 Ali ja nekako morati to dogoditi tako da je izvorni mama malim slovima 795 00:35:11,330 --> 00:35:14,170 završava u ekstra komad memorije. 796 00:35:14,170 --> 00:35:19,770 I onda kad sam promijeniti kopiju, ja Ne želim promijeniti tu kopiju ovdje. 797 00:35:19,770 --> 00:35:26,020 Ja umjesto toga želite promijeniti samo ovo kopija tako da je izvorni je nepromijenjen. 798 00:35:26,020 --> 00:35:27,980 >> Dakle, neka je vidjeti kako bismo mogli to učiniti. 799 00:35:27,980 --> 00:35:31,800 U copy-1, koji je već oduzeta komentara 800 00:35:31,800 --> 00:35:33,250 ali je komentirao na internetu. 801 00:35:33,250 --> 00:35:36,710 Mi umjesto toga učiniti following-- njih linije su identični, daj mi niz 802 00:35:36,710 --> 00:35:38,340 i nazvati to je. 803 00:35:38,340 --> 00:35:43,500 Ali sada pogledajmo jedan od naših složena, ali posljednji složenosti 804 00:35:43,500 --> 00:35:47,340 za neko vrijeme, linija 16 radi upravo to. 805 00:35:47,340 --> 00:35:49,400 Dakle, ako je vaš udoban sa slika mi samo drew-- 806 00:35:49,400 --> 00:35:51,790 dajte mi novi komad memorije, kopirati sve u nju, 807 00:35:51,790 --> 00:35:53,730 da vidimo kako ćemo prevesti to kod. 808 00:35:53,730 --> 00:35:59,400 >> Dakle linija 16, na lijevoj strani, char * t daje mi tu kutiju ovdje. 809 00:35:59,400 --> 00:36:00,230 To je sve što radi. 810 00:36:00,230 --> 00:36:03,240 Na desnoj strani, m Alloc ili malloc, 811 00:36:03,240 --> 00:36:06,480 je dodjela memorije, super fancy, grobni način samo govori 812 00:36:06,480 --> 00:36:07,640 dajte mi komad memorije. 813 00:36:07,640 --> 00:36:09,290 Koliko memorije trebamo? 814 00:36:09,290 --> 00:36:10,910 Pa, je vrsta velikog izražavanja. 815 00:36:10,910 --> 00:36:12,570 Ali da vidimo što piše ovdje. 816 00:36:12,570 --> 00:36:15,940 Dakle, to je, naravno, dati se ja duljina niza s. 817 00:36:15,940 --> 00:36:19,094 Dakle, mama to bi trebalo biti što? 818 00:36:19,094 --> 00:36:21,010 Dakle, samo tri, zar ne? mama je tri znaka. 819 00:36:21,010 --> 00:36:22,830 Vi ne brojati backslash nula kada vas 820 00:36:22,830 --> 00:36:25,960 govoriti o duljini niza to je zapravo ljudska vidljive slova. 821 00:36:25,960 --> 00:36:28,020 Pa mama, pa to mi daje 3. 822 00:36:28,020 --> 00:36:31,170 Ali čekaj malo, ja sam sada dodavanjem 1. 823 00:36:31,170 --> 00:36:34,861 Zašto ja zapravo želim izdvojiti 4 bajta, a ne samo 3? 824 00:36:34,861 --> 00:36:35,360 Da? 825 00:36:35,360 --> 00:36:36,910 >> PUBLIKA: Za sentinel vrijednosti? 826 00:36:36,910 --> 00:36:38,951 >> DAVID J. Malan: Točno, za tu sentinel vrijednosti. 827 00:36:38,951 --> 00:36:40,840 Za obrnute kose crte nula, Trebam 4 bajta ukupno. 828 00:36:40,840 --> 00:36:42,870 Dakle, trebam duljinu od niza plus 1. 829 00:36:42,870 --> 00:36:45,400 I onda samo za dobru measure-- iako se na tom sustavu, 830 00:36:45,400 --> 00:36:49,390 uvijek će biti 1-- govorim pomnožite to po veličini char. 831 00:36:49,390 --> 00:36:51,552 Ispada sizeof je operater u C koji 832 00:36:51,552 --> 00:36:53,260 samo ti se govori broj bajtova koji je 833 00:36:53,260 --> 00:36:54,700 potreban za određeni tip podataka. 834 00:36:54,700 --> 00:36:57,740 To ne radi za polja, obično, ponekad ne. 835 00:36:57,740 --> 00:36:59,210 No, u općem slučaju, br. 836 00:36:59,210 --> 00:37:02,330 No, to će mi reći koliko bajtova char je, što ispada je uvijek 1. 837 00:37:02,330 --> 00:37:04,080 Dakle, to je kao pomnoži s 1. 838 00:37:04,080 --> 00:37:05,900 >> Pa super grobni potrazi linija koda. 839 00:37:05,900 --> 00:37:09,320 No, sve je to ipak daje mi komad memorije. 840 00:37:09,320 --> 00:37:13,590 No, to čini da se kopiranje ništa u tu memoriju? 841 00:37:13,590 --> 00:37:14,560 Ne još. 842 00:37:14,560 --> 00:37:22,040 I tako Što mi je na liniji 22, a 23, 24, 25, dobro, jednostavno sam to učiniti. 843 00:37:22,040 --> 00:37:23,760 A to je vrsta stara škola stvari sada. 844 00:37:23,760 --> 00:37:26,010 To je kao PSet 2, gdje ti si samo pomicanjem stvari 845 00:37:26,010 --> 00:37:28,620 oko u memoriji, odnosno u žice. 846 00:37:28,620 --> 00:37:31,920 >> Tako sam iterating od 0 do duljina niza s. 847 00:37:31,920 --> 00:37:37,820 I ja kopiranje i-th karakter u s u i-tog karaktera u t. 848 00:37:37,820 --> 00:37:41,820 I zato što sam, programer, napravio svakako izdvojiti točno onoliko bajtova 849 00:37:41,820 --> 00:37:44,600 kao što mi je potrebno, to je savršena jedan-na-jedan odnos. 850 00:37:44,600 --> 00:37:47,060 I kopirati mamu u mala slova na novi. 851 00:37:47,060 --> 00:37:50,170 I onda na kraju, ja tu liniju. 852 00:37:50,170 --> 00:37:54,637 I tako je učinak samo kapitalizirati ovaj t ovdje. 853 00:37:54,637 --> 00:37:56,470 Dakle, puno apsorbirati, ali ako samo uzeti u obzir 854 00:37:56,470 --> 00:37:58,220 što se zapravo događa na ispod haube 855 00:37:58,220 --> 00:38:00,880 se samo kreće ovi bajtova okolo, sve što 856 00:38:00,880 --> 00:38:06,617 Potrebno je riješiti ovaj problem samo da nam ovo komad memorije. 857 00:38:06,617 --> 00:38:08,450 Sada na rizik neodoljiv, neka mi pokazati 858 00:38:08,450 --> 00:38:13,200 jedna primjer koji je gotovo identična, osim što je ovaj jedan 859 00:38:13,200 --> 00:38:14,350 linija koda. 860 00:38:14,350 --> 00:38:18,870 Dakle, ovo je haker verzija ovog programa, ako hoćete. 861 00:38:18,870 --> 00:38:21,050 Ali neka je samo destilirati je u tome što se događa. 862 00:38:21,050 --> 00:38:28,920 Linija 24 koristi se ovaj t Nosač i dobiva e nosač sam. 863 00:38:28,920 --> 00:38:33,370 Sada, ja sam to mijenja mnogo više zagonetan zvijezda t 864 00:38:33,370 --> 00:38:36,280 plus 1 jednako zvijezda s plus 1. 865 00:38:36,280 --> 00:38:38,702 >> Dakle, što se događa i zašto imamo karakter zvijezda? 866 00:38:38,702 --> 00:38:41,410 Vidjeli smo zvijezdu prije, a to se koristi drugačije ovdje. 867 00:38:41,410 --> 00:38:45,490 Mi smo ranije vidio char *, sad vidim zvijezdu na početku, a to je u redu. 868 00:38:45,490 --> 00:38:48,190 Jer ispada mi možete vrsta zaključiti samo 869 00:38:48,190 --> 00:38:50,280 od onih prvi Načela što se događa. 870 00:38:50,280 --> 00:38:53,860 Dakle, samo da bude jasno, što je s? 871 00:38:53,860 --> 00:38:55,052 Prošli tjedan, bila je to niz. 872 00:38:55,052 --> 00:38:56,260 To nije dovoljno više. 873 00:38:56,260 --> 00:38:57,690 Što je s, konkretno? 874 00:38:57,690 --> 00:38:58,590 >> PUBLIKA: [nečujan] 875 00:38:58,590 --> 00:38:59,881 >> DAVID J. Malan: To je pokazivač. 876 00:38:59,881 --> 00:39:02,610 To je adresu Prvi znak mi upisali u. 877 00:39:02,610 --> 00:39:04,780 U redu, što je t? 878 00:39:04,780 --> 00:39:05,660 >> PUBLIKA: [nečujan] 879 00:39:05,660 --> 00:39:07,950 >> DAVID J. Malan su: adresu prvog bajta 880 00:39:07,950 --> 00:39:10,490 ut, koji komad memorije preusmjeriti. 881 00:39:10,490 --> 00:39:14,720 Tako ispada da kad smo ponoviti od 0 do na žici 882 00:39:14,720 --> 00:39:17,424 length-- prije svega, ja započinje na 0, jer je 883 00:39:17,424 --> 00:39:18,840 ove stare škole za petlje stvar. 884 00:39:18,840 --> 00:39:22,400 Dakle, samo zbog jednostavnosti, neka je Pretpostavljam da je prvi redak koda 885 00:39:22,400 --> 00:39:23,760 je zapravo samo to, zar ne. 886 00:39:23,760 --> 00:39:26,080 Ako i je nula, dodajući nula nešto vjerojatno 887 00:39:26,080 --> 00:39:27,540 se neće imati učinka. 888 00:39:27,540 --> 00:39:28,560 >> Pa što je ovo rekao? 889 00:39:28,560 --> 00:39:31,600 Ispada da zvijezde Operater u ovom kontekstu 890 00:39:31,600 --> 00:39:33,700 je dereference Operater, koji je samo 891 00:39:33,700 --> 00:39:37,530 fancy način govoreći ići na sljedeću adresu. 892 00:39:37,530 --> 00:39:42,080 Dakle, ako je je adresa prvog lik u ovom komad memorije, 893 00:39:42,080 --> 00:39:43,630 * s znači ići tamo. 894 00:39:43,630 --> 00:39:45,630 I zato smo izvučeni slika na ovaj način, 895 00:39:45,630 --> 00:39:47,430 možete usvojiti Sljedeći mentalni model. 896 00:39:47,430 --> 00:39:51,030 Ako je ovo s, a ti kažeš * e, * a vrsta kao žljebovi i ljestve, 897 00:39:51,030 --> 00:39:54,540 ako se sjećate igru ​​iz djetinjstva, je kao slijediti taj strelicu i otići 898 00:39:54,540 --> 00:39:55,570 na adresu. 899 00:39:55,570 --> 00:39:57,080 >> * t je ista stvar. 900 00:39:57,080 --> 00:39:59,855 Dakle, početi ovdje, idite na svom komad. 901 00:39:59,855 --> 00:40:03,350 Ne mogu samo osloniti na ovaj zaslon na taj način. 902 00:40:03,350 --> 00:40:05,560 * t znači da ide ovdje. 903 00:40:05,560 --> 00:40:08,830 A onda, za petlju samo rekavši premjestiti ovaj lik ovdje, 904 00:40:08,830 --> 00:40:11,330 premjestiti ovaj lik ovdje, premjestiti ovaj lik ovdje. 905 00:40:11,330 --> 00:40:12,890 Ali kako ću to učiniti incrementation? 906 00:40:12,890 --> 00:40:15,430 Moram poništiti ono što sam upravo izbrisana. 907 00:40:15,430 --> 00:40:18,140 To je ono što se općenito zove pokazivač aritmetički, što 908 00:40:18,140 --> 00:40:20,040 znači matematike s adresama. 909 00:40:20,040 --> 00:40:22,460 >> Ako u ovo petlji, Stalno povećavati ja, 910 00:40:22,460 --> 00:40:26,880 i s je adresa i t je adresu, ako sam samo držati dodajući 1, 911 00:40:26,880 --> 00:40:31,406 to samo znači držati se kreće prema naprijed, i naprijed, i naprijed u memoriji. 912 00:40:31,406 --> 00:40:34,030 To je kao Oxford Street je ulica koja CS zgrada na. 913 00:40:34,030 --> 00:40:36,490 CS zgrada je na 33 Oxford Street. 914 00:40:36,490 --> 00:40:39,870 Dakle, ako ste bili učiniti 33 Oxford Street plus 1, 915 00:40:39,870 --> 00:40:42,870 koji vam donosi 34 Oxfordu Ulica, zatim 35 Oxford Street, 916 00:40:42,870 --> 00:40:46,380 zatim 36 Oxford Street, što god oni Zgrade su zapravo - ako oni postoje. 917 00:40:46,380 --> 00:40:50,540 I tako, to je sve što smo radili ovdje s pokazivač aritmetika. 918 00:40:50,540 --> 00:40:53,820 >> Dakle, to je super Arcane način od sebe izražavanja. 919 00:40:53,820 --> 00:40:56,160 Ali sve što se događa ispod haube 920 00:40:56,160 --> 00:40:59,330 samo je slijedeći ove adrese, kao što slijedi kartu, ako hoćete, 921 00:40:59,330 --> 00:41:02,692 ili nakon strelice poput smo izvučeni na zaslonu. 922 00:41:02,692 --> 00:41:04,910 OK, dosta probaviti. 923 00:41:04,910 --> 00:41:10,410 Svako pitanje o sintaksi, koncepti, upućuje, malloc ili slično. 924 00:41:10,410 --> 00:41:11,480 Da, ovdje na prvom mjestu. 925 00:41:11,480 --> 00:41:13,755 >> PUBLIKA: Pa gdje je ta kaže * t jednak toupper * t, 926 00:41:13,755 --> 00:41:15,575 je da će kapitalizirati sva slova ili just-- 927 00:41:15,575 --> 00:41:17,283 >> DAVID J. Malan: Ah, jako dobro pitanje. 928 00:41:17,283 --> 00:41:19,805 Tako je u ovoj liniji ovdje, 31, će to kapitalizirati 929 00:41:19,805 --> 00:41:21,430 prvo slovo ili sve slova. 930 00:41:21,430 --> 00:41:23,460 Tako ćemo odgovoriti odlaskom natrag na prvim načelima. 931 00:41:23,460 --> 00:41:26,168 I prvi principi ovdje mislim samo idite na osnovnim definicijama 932 00:41:26,168 --> 00:41:27,000 onoga što je uključen. 933 00:41:27,000 --> 00:41:29,770 Dakle toupper je funkcija da kapitalizira char. 934 00:41:29,770 --> 00:41:30,530 To je sve. 935 00:41:30,530 --> 00:41:36,740 * t znači ići na first-- idite na adresu u t. 936 00:41:36,740 --> 00:41:40,350 Dakle, na slici, ako je to komad memorije smo dodijeljeno sa malloc, 937 00:41:40,350 --> 00:41:43,310 i to je t * t znači ići ovdje. 938 00:41:43,310 --> 00:41:46,710 >> U međuvremenu, ti prolazi ta vrijednost, mala m 939 00:41:46,710 --> 00:41:50,040 da toupper, da ste dobivanje natrag kapital M, gdje ste stavljajući ga? 940 00:41:50,040 --> 00:41:52,410 Vi ste stavljajući ga u tom istom mjestu. 941 00:41:52,410 --> 00:41:55,540 I tako ta logika onih Osnovne definicije to je samo 942 00:41:55,540 --> 00:41:58,792 kapitaliziranje prvo slovo osim ako ponoviti sa I ili 943 00:41:58,792 --> 00:42:02,000 za petlju ili while petlji, to neće učiniti ništa više nego što ga pitati. 944 00:42:02,000 --> 00:42:02,583 Dobro pitanje. 945 00:42:02,583 --> 00:42:03,237 Da? 946 00:42:03,237 --> 00:42:05,369 >> PUBLIKA: Zašto ste koristiti dereference metodom nego 947 00:42:05,369 --> 00:42:05,979 Niz? 948 00:42:05,979 --> 00:42:07,395 >> DAVID J. Malan: Ah, dobro pitanje. 949 00:42:07,395 --> 00:42:10,672 Zašto bi koristiti dereference Postupak umjesto metode polja? 950 00:42:10,672 --> 00:42:12,130 Nema posebnog razloga, da budem iskren. 951 00:42:12,130 --> 00:42:15,290 A, u stvari, za to vrsta, primjerice, pravo, 952 00:42:15,290 --> 00:42:17,556 Samo tvrdeći izradu Program složeniji, 953 00:42:17,556 --> 00:42:19,680 više oči stakla više, ljudi checking out 954 00:42:19,680 --> 00:42:22,830 jer ovo izgleda super Arcane, ali iako to rade istu stvar. 955 00:42:22,830 --> 00:42:26,695 I tako, iskreno, ovo je nepotrebno vizualno složen rješenje 956 00:42:26,695 --> 00:42:27,320 problema. 957 00:42:27,320 --> 00:42:29,580 >> To je još uvijek dobar dizajn, pet od pet za projektiranje, 958 00:42:29,580 --> 00:42:33,140 da li je u nosač zapis ili pokazivač zapis. 959 00:42:33,140 --> 00:42:36,299 But-- pogotovo kad smo dobili kasnije u tijeku u PSet 5 960 00:42:36,299 --> 00:42:39,340 kad smo provesti taj rječnik koji Ja sam spomenuo par times-- 961 00:42:39,340 --> 00:42:42,300 mi zapravo ćemo brigu o niska razina memorije adrese 962 00:42:42,300 --> 00:42:44,140 da smo stvarno shvatiti što se događa. 963 00:42:44,140 --> 00:42:48,300 >> No, za sada, ispada da je ovaj linija koda ovdje uglatim zagradama 964 00:42:48,300 --> 00:42:49,900 stvarno ne postoje. 965 00:42:49,900 --> 00:42:52,230 Oni su ono što se zove sintaktička šećera, što 966 00:42:52,230 --> 00:42:58,390 je samo jedan neobično hladan način rekavši prevodilac pretvara četvornih zagrade se 967 00:42:58,390 --> 00:43:00,420 da matematički izraz. 968 00:43:00,420 --> 00:43:02,660 Tako da je ljudsko konvencija da bi mogli samo napisati 969 00:43:02,660 --> 00:43:04,220 ove vrlo razumljiv zagrade. 970 00:43:04,220 --> 00:43:06,850 No, ono što je prevodilac, zveket, stvarno radi bilo koje vrijeme 971 00:43:06,850 --> 00:43:10,970 pišete što je istaknuto u skladu 24, ispod haube je stvarno 972 00:43:10,970 --> 00:43:12,330 pretvaranja u to. 973 00:43:12,330 --> 00:43:16,200 To je samo još ugodnijim kao čovjeka za čitanje i pisanje koda poput linije 24. 974 00:43:16,200 --> 00:43:18,530 No, s vremenom oni Trening kotači previše ispasti 975 00:43:18,530 --> 00:43:21,780 Kada jedan vlastiti komfor dobiva jači. 976 00:43:21,780 --> 00:43:27,240 >> U redu, tako da je to onda podsjetiti Bila je to najveći problem 977 00:43:27,240 --> 00:43:27,807 smo naletjeli. 978 00:43:27,807 --> 00:43:30,640 I to je ono što je izazvalo ovu cjelinu prokleto razgovor o pokazivača, 979 00:43:30,640 --> 00:43:32,340 i adrese i kopiranje stvari. 980 00:43:32,340 --> 00:43:35,410 To je zato što smo spotaknula to glupo, glupo pitanje, pri čemu 981 00:43:35,410 --> 00:43:38,830 Ja provodi logically-- s Lauren ovdje na demo i sok od naranče 982 00:43:38,830 --> 00:43:43,770 u milk-- savršeno algoritamski točna funkcija 983 00:43:43,770 --> 00:43:47,010 za zamjene dvije varijable ' vrijednosti, ali je prokleta stvar 984 00:43:47,010 --> 00:43:50,550 nisu imali bilo uporni, ili stalna, utjecaj na moj broj. 985 00:43:50,550 --> 00:43:51,820 >> A zašto je to bilo? 986 00:43:51,820 --> 00:43:54,650 Ukratko, zašto je to Provedba swapa 987 00:43:54,650 --> 00:43:58,740 logično točna, ali nema utjecaja na varijable koje se prenose na njega, 988 00:43:58,740 --> 00:44:01,119 kao što su X i Y glavni? 989 00:44:01,119 --> 00:44:02,410 Što je suština tog pitanja? 990 00:44:02,410 --> 00:44:02,909 Da? 991 00:44:02,909 --> 00:44:05,532 PUBLIKA: Zbog promjenjiva napravio kopije varijable u prolazu 992 00:44:05,532 --> 00:44:06,240 kroz funkciju. 993 00:44:06,240 --> 00:44:09,060 >> DAVID J. Malan: Točno, kada prođe varijable u funkciji ili argumenti 994 00:44:09,060 --> 00:44:11,030 u funkciji, oni su donio primjerak, koji 995 00:44:11,030 --> 00:44:14,770 znači da ćete dobiti identičan gleda Uzorak bitova za X i Y, 996 00:44:14,770 --> 00:44:15,955 naziva ovdje i b. 997 00:44:15,955 --> 00:44:18,080 A vi možete učiniti ništa Želite s tim kopijama, 998 00:44:18,080 --> 00:44:20,657 ali oni će imati nikakav Učinak na funkciju poziva. 999 00:44:20,657 --> 00:44:22,990 A, u stvari, došli smo da slika na zaslonu, opoziv 1000 00:44:22,990 --> 00:44:25,520 Posljednji put, pri čemu, ako vas stvarno mislite o tome što je 1001 00:44:25,520 --> 00:44:28,570 događa ispod hood-- ako To je memorija računala, 1002 00:44:28,570 --> 00:44:31,650 i ovdje je komad memorija se koristi za glavno, 1003 00:44:31,650 --> 00:44:34,020 ovo je komad memorija se koristi za zamjenu, 1004 00:44:34,020 --> 00:44:37,090 pa čak i ako je glavna ima varijabli, X i Y, 1005 00:44:37,090 --> 00:44:41,840 zamjena može imati jednaki gleda Vrijednosti, od kojih oba su 1 i 2, 1006 00:44:41,840 --> 00:44:44,520 ali oni su u potpunosti različite komade memorije. 1007 00:44:44,520 --> 00:44:46,130 >> Dakle, trebamo rješenje za to. 1008 00:44:46,130 --> 00:44:51,580 I iskreno, čini se da smo se sada ima rješenje za ovaj problem, zar ne. 1009 00:44:51,580 --> 00:44:55,760 Ako sada imamo mogućnost da manipulirati stvari putem pošte 1010 00:44:55,760 --> 00:44:59,310 i, na neki način žljebovi i ljestve stil, slijedite ove strelice 1011 00:44:59,310 --> 00:45:02,820 i ići bilo gdje želimo u memoriji, ne bismo mogli 1012 00:45:02,820 --> 00:45:06,220 riješiti ovaj problem prolazi od Glavni swap 1013 00:45:06,220 --> 00:45:09,650 ne vrijednosti želimo swap, ali jednostavno intuitivno 1014 00:45:09,650 --> 00:45:11,630 ono što bismo mogli proći za swap umjesto toga? 1015 00:45:11,630 --> 00:45:12,620 >> [Ubacivanjem GLAS] 1016 00:45:12,620 --> 00:45:15,244 >> DAVID J. Malan: Zašto ne bismo jednostavno prođe to adrese, zar ne? 1017 00:45:15,244 --> 00:45:17,470 Zašto ne dajemo swap Karta blago, ako hoćete, 1018 00:45:17,470 --> 00:45:20,950 da to dovodi do Stvarni vrijednosti x i y. 1019 00:45:20,950 --> 00:45:24,340 Idemo swap, zapravo promijeniti one izvorne bita, a ne 1020 00:45:24,340 --> 00:45:26,797 samo u prolazu kopije bitova. 1021 00:45:26,797 --> 00:45:29,130 I tako, u stvari, to je ono što je će biti otopina. 1022 00:45:29,130 --> 00:45:31,899 Ova verzija ovdje očito loše i manjkav. 1023 00:45:31,899 --> 00:45:35,190 A sada, na prvi pogled, to samo izgleda kao što smo dodali hrpu zvijezda slučajno 1024 00:45:35,190 --> 00:45:37,106 i prešli naše prste da će sastaviti. 1025 00:45:37,106 --> 00:45:38,460 No, to bi se sada sastaviti. 1026 00:45:38,460 --> 00:45:40,090 >> Ali da vidimo što ovo znači. 1027 00:45:40,090 --> 00:45:43,990 I, na žalost, autori C mogao izabrati drugi simbol 1028 00:45:43,990 --> 00:45:46,380 da bi ovo malo jasnije, ali operater zvijezda 1029 00:45:46,380 --> 00:45:48,610 ima drukčije značenje u dva različita konteksta. 1030 00:45:48,610 --> 00:45:50,890 I mi smo vidjeli i, ali neka je razlikovati. 1031 00:45:50,890 --> 00:45:55,310 >> Tako se na vrhu tamo, kad sam promijenila aib 1032 00:45:55,310 --> 00:46:00,470 od toga INT-a u loše Verzija int zvijezde, A i B, 1033 00:46:00,470 --> 00:46:01,740 Prije toga, bili su cijeli brojevi. 1034 00:46:01,740 --> 00:46:05,752 Što su A i B sada dobro, zelena verzija? 1035 00:46:05,752 --> 00:46:06,900 Oni adrese. 1036 00:46:06,900 --> 00:46:09,610 Adrese što, da bude jasno? 1037 00:46:09,610 --> 00:46:10,770 Adrese brojeva. 1038 00:46:10,770 --> 00:46:12,520 Dakle činjenica da sam rekavši int zvijezda sredstva 1039 00:46:12,520 --> 00:46:15,440 to je adresa cijeli, posebno. 1040 00:46:15,440 --> 00:46:19,120 >> Tako sada primjetiti u linija koda, nešto drugo promijenio previše. 1041 00:46:19,120 --> 00:46:22,770 tmp ostaje isti, jer je to je samo privremeni broj, 1042 00:46:22,770 --> 00:46:24,110 nema memorije magija postoji. 1043 00:46:24,110 --> 00:46:26,370 No, sada treba zvijezdu. 1044 00:46:26,370 --> 00:46:28,560 A, u stvari, svaki Drugi spomen A i B, 1045 00:46:28,560 --> 00:46:31,780 primijetiti da sve što je mijenja od crvene do zelene 1046 00:46:31,780 --> 00:46:34,209 je da sam prefixing te varijable sa zvijezdama. 1047 00:46:34,209 --> 00:46:35,750 Jer ja ne želim kopirati i b. 1048 00:46:35,750 --> 00:46:40,350 Jer ako ja samo kopirati A i B i zamjenu A i B, što sam ja zapravo zamjene? 1049 00:46:40,350 --> 00:46:43,760 Samo adrese, želim mijenjati što je na tim adresama. 1050 00:46:43,760 --> 00:46:44,860 Želim ići tamo. 1051 00:46:44,860 --> 00:46:48,000 I tako je operator zvijezda unutar moje funkcije, 1052 00:46:48,000 --> 00:46:51,700 ne unutar popisu parametara, znači li ići na tim adresama 1053 00:46:51,700 --> 00:46:54,490 i zapravo promijeniti te vrijednosti. 1054 00:46:54,490 --> 00:46:56,500 >> Dakle, ono što čini sliku sada izgledaju umjesto. 1055 00:46:56,500 --> 00:47:03,250 Pa, ako umjesto sam prolazu u za A i B ne 1 i 2-- 1056 00:47:03,250 --> 00:47:05,790 Ja sam zapravo treba dodati jedna definicija ovdje. 1057 00:47:05,790 --> 00:47:09,030 Dakle, pretpostavimo da ovaj komad memorije je na mjestu 10. 1058 00:47:09,030 --> 00:47:12,960 >> To je na položaju 11, ali ovaj je malo pojednostavljenja, 1059 00:47:12,960 --> 00:47:18,900 Sada imam dva izbora moram proći x i y, ili ću proći njihove adrese? 1060 00:47:18,900 --> 00:47:22,500 Ako sam proći njihove adrese ovako, ja samo 1061 00:47:22,500 --> 00:47:25,390 Sada je potrebno provesti Zamjenski po zelenoj šifru 1062 00:47:25,390 --> 00:47:29,080 tako da kada se vidi i to kad vidi b, ne samo kopirati A i B 1063 00:47:29,080 --> 00:47:30,540 i pomaknite mlijeko i sok od naranče. 1064 00:47:30,540 --> 00:47:32,664 Mlijeko i sok od naranče Metafora sada razbija, 1065 00:47:32,664 --> 00:47:35,060 jer to su čaše tekućih i ne kartama. 1066 00:47:35,060 --> 00:47:37,750 Umjesto toga treba ići na adresu 10 i mi 1067 00:47:37,750 --> 00:47:42,420 morate ići na adresu 11, i zatim izvršite tu logiku zamjenjivanje sugovornika. 1068 00:47:42,420 --> 00:47:45,580 >> Dakle, logika je isti, ali moramo malo drugačiji način 1069 00:47:45,580 --> 00:47:47,160 pristupa te varijable. 1070 00:47:47,160 --> 00:47:52,400 I tako na kraju, ono što je Program mora izgledati to. 1071 00:47:52,400 --> 00:47:56,610 U swap.c doslovno kopiraju i zalijepiti zeleni verziju. 1072 00:47:56,610 --> 00:47:58,450 Ali moram napraviti jednu promjenu. 1073 00:47:58,450 --> 00:48:00,180 Nije dovoljno samo promijeniti zamjenu. 1074 00:48:00,180 --> 00:48:03,830 Koje druge linija koda trebam promijeniti? 1075 00:48:03,830 --> 00:48:04,330 Da? 1076 00:48:04,330 --> 00:48:05,770 >> PUBLIKA: Gdje je potrebno argumente. 1077 00:48:05,770 --> 00:48:07,603 >> DAVID J. Malan: Gdje to traje svoju tvrdnju. 1078 00:48:07,603 --> 00:48:09,985 Dakle, ako sam dođite do glavno, sam ne može samo proći u X i Y, 1079 00:48:09,985 --> 00:48:12,820 i, obećavam, posljednji komad nove sintakse danas. 1080 00:48:12,820 --> 00:48:17,200 Moram proći ne x i y no adresu x i y. 1081 00:48:17,200 --> 00:48:20,400 I to ispada, simbol da su autori odlučili C 1082 00:48:20,400 --> 00:48:23,860 je ako koristite ampersand ovdje, da ne biti zbunjen sa bitovne znakom, 1083 00:48:23,860 --> 00:48:27,130 ako koristite ampersand ovdje i znak za struju ovdje, 1084 00:48:27,130 --> 00:48:29,570 to figure out za tebe, što je adresa x, 1085 00:48:29,570 --> 00:48:31,740 možda je 10, što je adresu y, možda je 1086 00:48:31,740 --> 00:48:35,400 11, a prolazi one u umjesto. 1087 00:48:35,400 --> 00:48:37,210 >> Dakle, mnogo apsorbirati odjednom. 1088 00:48:37,210 --> 00:48:40,190 Ali da vidimo sad brzo u naši preostale četiri minute 1089 00:48:40,190 --> 00:48:42,150 gdje se stvari mogu ići naopako. 1090 00:48:42,150 --> 00:48:45,120 I usput, zapravo Uzeo sam ovu sliku, 1091 00:48:45,120 --> 00:48:46,920 TF je ovu sliku godinu ili dvije dana. 1092 00:48:46,920 --> 00:48:49,190 Dakle, ovo je natrag kutak od Eliota Dining Hall. 1093 00:48:49,190 --> 00:48:52,310 Pointeri su možda najteži tema koje pokrivaju u CS50. 1094 00:48:52,310 --> 00:48:54,810 Dakle, ako ste zabrinuti vrsta nagib je kao možda je 1095 00:48:54,810 --> 00:48:56,770 više hokej štap ovako, shvatiti 1096 00:48:56,770 --> 00:49:00,160 mi smo vrsta bliži vrhunac u Uvjeti konceptualne složenosti. 1097 00:49:00,160 --> 00:49:02,300 >> I ja bi se to foto, jer sam zakleti 1098 00:49:02,300 --> 00:49:05,920 Bogu, u jesen 1996. godine, kada sam uzeo CS50 s mojim nastavno kolegama, 1099 00:49:05,920 --> 00:49:09,620 Nishat Mehta, on mi je sjeo u kutak Eliot D. dvorani tijekom ručka, 1100 00:49:09,620 --> 00:49:12,330 ili večeru, ili nešto probati da mi pomogne shvatiti naputke. 1101 00:49:12,330 --> 00:49:16,520 I ovo je mjesto gdje sam bio tjedana nakon to je bio uveden u predavanju kada je 1102 00:49:16,520 --> 00:49:18,170 Napokon sam shvatio naputke. 1103 00:49:18,170 --> 00:49:20,590 I ja sam se nada da je ovaj će kliknite daleko prije vas. 1104 00:49:20,590 --> 00:49:23,540 Ali shvatite ovo apsolutno među više sofisticirane teme 1105 00:49:23,540 --> 00:49:24,420 smo pogledao. 1106 00:49:24,420 --> 00:49:25,819 No, to je među najmoćniji. 1107 00:49:25,819 --> 00:49:28,860 A kad ste ga dobili, to je stvarno sve samo će konačno dolaze zajedno. 1108 00:49:28,860 --> 00:49:31,460 Dakle, budite uvjereni da ne potrebno je sve sudopera u danas. 1109 00:49:31,460 --> 00:49:32,980 >> Dakle ovdje je zadnji Program ćemo pogledati. 1110 00:49:32,980 --> 00:49:35,605 A mi ćemo završiti s Brzi tri minute claymation 1111 00:49:35,605 --> 00:49:37,030 napravio naš prijatelj, Nick Parlante. 1112 00:49:37,030 --> 00:49:41,440 Evo program, koji se na vrhu dva Linije izjavljuje varijablu X i Y. 1113 00:49:41,440 --> 00:49:44,780 Od kojih su oba adrese integers, zvani naputke. 1114 00:49:44,780 --> 00:49:48,125 Zatim smo izdvojiti dovoljno memorije za pohranu int 1115 00:49:48,125 --> 00:49:51,344 i pohraniti adresu te memorije u x. 1116 00:49:51,344 --> 00:49:53,260 Dakle, to je još jednostavnije nego primjerice prije. 1117 00:49:53,260 --> 00:49:56,100 Daj mi četiri bajta memorije, to je veličina int, 1118 00:49:56,100 --> 00:49:58,000 i stavio tu adresu u x. 1119 00:49:58,000 --> 00:50:01,070 Ova linija ovdje znači idite na adresu u x 1120 00:50:01,070 --> 00:50:05,270 i staviti značenje Život, broj 42 ima. 1121 00:50:05,270 --> 00:50:07,710 No, ova linija me brine. 1122 00:50:07,710 --> 00:50:12,620 Star y znači otići na adresu u y, i staviti nesretan broj 13 tamo. 1123 00:50:12,620 --> 00:50:15,780 Zašto je opasno, u ovom trenutku u story-- doduše brzo ispričao 1124 00:50:15,780 --> 00:50:17,980 u našim posljednjim minuta here-- zašto je to loše 1125 00:50:17,980 --> 00:50:19,660 za mene reći, idite na adresu u y? 1126 00:50:19,660 --> 00:50:21,077 >> PUBLIKA: Ne morate [nečujan]. 1127 00:50:21,077 --> 00:50:22,910 DAVID J. Malan: Nemam ništa stavio u y. 1128 00:50:22,910 --> 00:50:25,520 Dakle, što je vrijednost y, u ovom trenutku u priči? 1129 00:50:25,520 --> 00:50:26,570 Nemamo pojma. 1130 00:50:26,570 --> 00:50:29,190 To je neka smeća vrijednost a niti Binky znati. 1131 00:50:29,190 --> 00:50:32,532 Ako smo mogli završiti na ovoj bilješci. 1132 00:50:32,532 --> 00:50:34,832 >> [VIDEO PLAYBACK] 1133 00:50:34,832 --> 00:50:36,500 >> -Hej, Binky, probudite se. 1134 00:50:36,500 --> 00:50:39,140 To je vrijeme za zabavu pokazivač. 1135 00:50:39,140 --> 00:50:40,210 >> -Što je to? 1136 00:50:40,210 --> 00:50:41,690 Saznajte više o pokazivače? 1137 00:50:41,690 --> 00:50:43,570 Oh, Goody. 1138 00:50:43,570 --> 00:50:46,600 >> Pa, za početak, mislim da smo Trebat će par savjeta. 1139 00:50:46,600 --> 00:50:47,380 >> -U REDU. 1140 00:50:47,380 --> 00:50:51,120 Ovaj broj dodjeljuje dvije upućuje što može ukazati na cijele brojeve. 1141 00:50:51,120 --> 00:50:53,557 >> -OK, Dobro vidim Dva naputke, ali oni 1142 00:50:53,557 --> 00:50:55,140 Ne čini se da ukazuju na ništa. 1143 00:50:55,140 --> 00:50:55,970 >> -Tako je. 1144 00:50:55,970 --> 00:50:58,100 U početku pokazivače ne ukazuju na ništa. 1145 00:50:58,100 --> 00:51:00,950 Stvari Oni ukazuju na su zove pointees te ih postavljanje 1146 00:51:00,950 --> 00:51:02,330 je zasebna koraka. 1147 00:51:02,330 --> 00:51:03,210 >> Oh, u redu, u redu. 1148 00:51:03,210 --> 00:51:03,940 Znao sam to. 1149 00:51:03,940 --> 00:51:05,730 U pointees su odvojeni. 1150 00:51:05,730 --> 00:51:08,310 Pa kako se izdvojiti pointee? 1151 00:51:08,310 --> 00:51:11,960 >> -OK, I to kod izdvaja novi broj pointee, 1152 00:51:11,960 --> 00:51:15,050 i ovaj dio seta x ukazati na to. 1153 00:51:15,050 --> 00:51:16,240 >> -Hej, Da izgleda bolje. 1154 00:51:16,240 --> 00:51:17,743 Tako bi se nešto učiniti. 1155 00:51:17,743 --> 00:51:23,580 >> -OK, Ja ću dereference pokazivač x za pohraniti broj 42 u svom pointee. 1156 00:51:23,580 --> 00:51:27,130 Za ovaj trik, ja ću morati mom čarobni štapić od dereferencing. 1157 00:51:27,130 --> 00:51:30,200 >> Tvoj čarobni štapić od dereferencing? 1158 00:51:30,200 --> 00:51:32,310 Uh, da, to je super. 1159 00:51:32,310 --> 00:51:34,270 >> -Ovo Je ono što je kod izgleda. 1160 00:51:34,270 --> 00:51:35,970 Ja ću samo postaviti broj and-- 1161 00:51:35,970 --> 00:51:37,070 >> [POP SOUND] 1162 00:51:37,070 --> 00:51:39,140 >> -Hej, Pogledaj tamo ide. 1163 00:51:39,140 --> 00:51:43,980 Dakle, radi se o dereference x slijedi strelica za pristup pointee. 1164 00:51:43,980 --> 00:51:46,150 U tom slučaju, pohraniti 42 tamo. 1165 00:51:46,150 --> 00:51:50,700 Hej, pokušajte koristiti ga pohraniti broj 13 kroz drugu pokazivač, y. 1166 00:51:50,700 --> 00:51:51,840 >> -U REDU. 1167 00:51:51,840 --> 00:51:56,270 Ja ću samo ići ovdje na Y, i dobiti broj 13 set up. 1168 00:51:56,270 --> 00:52:00,380 A onda se na štapić od dereferencing i just-- 1169 00:52:00,380 --> 00:52:01,646 >> [Zvuk zujala] 1170 00:52:01,646 --> 00:52:04,080 >> Oh, hej to nije uspjelo. 1171 00:52:04,080 --> 00:52:06,470 Recimo, uh, Binky, ja ne mislim dereferencing 1172 00:52:06,470 --> 00:52:10,850 y je dobra ideja, jer je postavljanje gore pointee je zasebna koraka. 1173 00:52:10,850 --> 00:52:12,480 A ja ne mislim da smo ikada to učinio. 1174 00:52:12,480 --> 00:52:14,620 >> -Hmm, Dobra stvar. 1175 00:52:14,620 --> 00:52:19,810 >> -Da, Dodjeljuje se pokazivač, Y, ali nikada ga postaviti ukazati na pointee. 1176 00:52:19,810 --> 00:52:21,590 >> -Hmm, Vrlo pažljiv. 1177 00:52:21,590 --> 00:52:23,215 -Hej, Ti si izgleda dobro tamo, Binky. 1178 00:52:23,215 --> 00:52:26,390 Možeš li to popraviti tako da y bodova na isti pointee kao x. 1179 00:52:26,390 --> 00:52:29,290 >> -Sure, Ja koristiti svoj čarobni štapić od kazaljke zadatka. 1180 00:52:29,290 --> 00:52:31,970 >> -je Da će biti Problem, kao prije? 1181 00:52:31,970 --> 00:52:33,790 >> Ne, to ne dirati pointees. 1182 00:52:33,790 --> 00:52:35,840 To samo mijenja jedan pokazivač ukazati na isti stvar-- 1183 00:52:35,840 --> 00:52:36,465 >> [Piskavi zvuk] 1184 00:52:36,465 --> 00:52:37,450 --as drugi. 1185 00:52:37,450 --> 00:52:38,440 >> -Vidim. 1186 00:52:38,440 --> 00:52:41,200 Sada y ukazuje na istom mjestu kao x. 1187 00:52:41,200 --> 00:52:42,950 Pa, čekaj, sad y je fiksna. 1188 00:52:42,950 --> 00:52:44,110 Ima pointee. 1189 00:52:44,110 --> 00:52:47,779 Tako možete isprobati štapić od opet dereferencing poslati 13 over. 1190 00:52:47,779 --> 00:52:51,110 >> Oh, u redu, ovdje ide. 1191 00:52:51,110 --> 00:52:52,330 >> -Hej, Pogledaj to. 1192 00:52:52,330 --> 00:52:53,570 Sada dereferencing radova na y. 1193 00:52:53,570 --> 00:52:57,900 I zato što upućuje dijelite da jednom pointee, obojica vidjeli 13. 1194 00:52:57,900 --> 00:52:59,952 >> -Da, Dijeljenje, uh, što god. 1195 00:52:59,952 --> 00:53:01,535 Dakle, ćemo prebaciti mjesta sada? 1196 00:53:01,535 --> 00:53:03,730 >> Oh, izgleda da smo izvan vremena. 1197 00:53:03,730 --> 00:53:04,660 >> -But-- 1198 00:53:04,660 --> 00:53:06,520 >> -Samo Zapamtite tri pokazivač pravila. 1199 00:53:06,520 --> 00:53:09,550 Broj 1, osnovna struktura je da imate pokazivač, 1200 00:53:09,550 --> 00:53:11,630 a to ukazuje na to pointee. 1201 00:53:11,630 --> 00:53:13,740 Ali pokazivač i pointee su odvojeni. 1202 00:53:13,740 --> 00:53:15,620 A uobičajena pogreška je postaviti pokazivač 1203 00:53:15,620 --> 00:53:18,000 ali zaboraviti dati ga pointee. 1204 00:53:18,000 --> 00:53:21,170 >> Broj 2, pokazivač dereferencing počinje na pokazivač 1205 00:53:21,170 --> 00:53:24,020 i slijedi strelicu iznad pristupiti njegovu pointee. 1206 00:53:24,020 --> 00:53:27,815 Kao što svi znamo, to radi samo ako postoji je pointee, koja vrsta vrati 1207 00:53:27,815 --> 00:53:29,260 pravilo broj 1. 1208 00:53:29,260 --> 00:53:31,990 >> Broj 3, kazaljka Raspored traje jedan pokazivač 1209 00:53:31,990 --> 00:53:35,330 i mijenja ga ukazati na Isto pointee kao još jedan pokazivač. 1210 00:53:35,330 --> 00:53:37,150 Tako je nakon dodjele, dva pokazivače 1211 00:53:37,150 --> 00:53:40,927 će ukazati na istu pointee, ponekad to se zove dijeljenje. 1212 00:53:40,927 --> 00:53:42,510 I to je sve što je na njega, stvarno. 1213 00:53:42,510 --> 00:53:43,130 Doviđenja sada. 1214 00:53:43,130 --> 00:53:43,475 >> [END PLAYBACK] 1215 00:53:43,475 --> 00:53:44,830 >> DAVID J. Malan: To je to za CS50. 1216 00:53:44,830 --> 00:53:46,246 Zahvaljujući profesoru Nicku Parlante. 1217 00:53:46,246 --> 00:53:47,730 Vidimo se sljedeći tjedan. 1218 00:53:47,730 --> 00:53:51,706 1219 00:53:51,706 --> 00:53:56,435 >> [ELECTRONIC glazbom] 1220 00:53:56,435 --> 00:57:22,775