1 00:00:00,000 --> 00:00:11,320 2 00:00:11,320 --> 00:00:13,260 >> DAVID Malan: Pozdrav, i dobrodošli natrag u CS50. 3 00:00:13,260 --> 00:00:14,860 Dakle, ovo je kraj četiri tjedna. 4 00:00:14,860 --> 00:00:16,680 Samo jedna najava prvog. 5 00:00:16,680 --> 00:00:19,600 Dakle, tzv peti je ponedjeljak dolazi do idućeg ponedjeljka. 6 00:00:19,600 --> 00:00:22,800 Ovo je prilika za promjenu iz SAT / UNSAT na slovo razreda, odnosno od 7 00:00:22,800 --> 00:00:24,130 Pismo stupnja SAT / UNSAT. 8 00:00:24,130 --> 00:00:27,130 Dosadno, taj proces ne zahtijeva potpis, jer morate ispuniti 9 00:00:27,130 --> 00:00:28,770 iz jednog od tih ružičastih dodati / pad forme. 10 00:00:28,770 --> 00:00:31,680 >> Zbog tehnički, SAT / UNSAT verzija i verzija pismo stupnja 11 00:00:31,680 --> 00:00:33,320 imaju različite brojeve katalog. 12 00:00:33,320 --> 00:00:34,240 No, nije velika stvar. 13 00:00:34,240 --> 00:00:36,620 Samo dođi do mene ili Rob ili Lauren u bilo kojem trenutku. 14 00:00:36,620 --> 00:00:39,550 Ili nam e-mail ako nemate kakav papirologije morate danas, a mi 15 00:00:39,550 --> 00:00:43,410 će svakako pomoći da se skrb da prije ponedjeljka. 16 00:00:43,410 --> 00:00:45,780 >> U redu, tako da danas - 17 00:00:45,780 --> 00:00:47,630 zapravo, ima malo odjeka. 18 00:00:47,630 --> 00:00:51,070 Možemo li mi ton dolje malo? 19 00:00:51,070 --> 00:00:51,730 OK. 20 00:00:51,730 --> 00:00:54,850 Tako danas, uvodimo temu poznat kao pokazivače. 21 00:00:54,850 --> 00:00:57,770 I moram priznati da je to jedna od složenije teme koje smo skloni 22 00:00:57,770 --> 00:01:00,960 pokrivaju u ovoj klasi, ili stvarno bilo uvodni tečaj koji koristi C. 23 00:01:00,960 --> 00:01:05,510 >> Ali uzeti moj riječ za to, pogotovo ako je vaš um osjeća malo više savijena 24 00:01:05,510 --> 00:01:07,100 i danas u tjednima koji dolaze. 25 00:01:07,100 --> 00:01:10,340 To nije predstavnik li dobivanje bilo još gore, na to znači samo to da je 26 00:01:10,340 --> 00:01:13,360 to je posebno sofisticirani topic Obećajem da, prije nekoliko tjedana 27 00:01:13,360 --> 00:01:17,610 stoga, će činiti sve previše upadljivo jednostavno u retrospektivi. 28 00:01:17,610 --> 00:01:18,720 >> Još uvijek se sjećam do danas. 29 00:01:18,720 --> 00:01:22,190 Sjedio sam u Elliott blagovaonice, sjedi pored moje TF Nishat Mehta, 30 00:01:22,190 --> 00:01:24,070 koji je bio stanovnik Elliott kuće. 31 00:01:24,070 --> 00:01:26,340 I iz nekog razloga, to Tema stisne. 32 00:01:26,340 --> 00:01:29,430 Koji je reći da sam i ja borili s njim za neki iznos od vrijeme, ali sam 33 00:01:29,430 --> 00:01:33,610 ću sve od sebe kako bi se izbjegli takvi Borba s temom koja u konačnici 34 00:01:33,610 --> 00:01:34,580 je vrlo moćan. 35 00:01:34,580 --> 00:01:37,350 >> U stvari, jedna je od tema razgovarat ćemo o u tjednima koji dolaze je da 36 00:01:37,350 --> 00:01:41,130 sigurnosti, a kako možete zapravo iskorištavaju strojeva na načine 37 00:01:41,130 --> 00:01:42,320 koje nisu bile namijenjene. 38 00:01:42,320 --> 00:01:45,850 I one su obično eksploatacije Rezultat bugova, pogrešaka koje smo 39 00:01:45,850 --> 00:01:49,740 ljudi čine po ne razumijevanju nekih temeljne provedbu 40 00:01:49,740 --> 00:01:52,250 Detaljnije putem programa koje su napravili. 41 00:01:52,250 --> 00:01:55,410 >> Sada bi se to čini sve više user friendly, mislio sam da bih igrati 10 42 00:01:55,410 --> 00:01:59,680 Drugi pregled malo Claymation lik zove Binky koji je doveo do 43 00:01:59,680 --> 00:02:03,020 Život je jedna prijateljica na Stanfordu, Profesor Nick Parlante. 44 00:02:03,020 --> 00:02:06,753 Dakle, dopustite mi da vam to teaser od Binky ovdje. 45 00:02:06,753 --> 00:02:09,520 >> [Video reprodukciju] 46 00:02:09,520 --> 00:02:10,380 >> -Hej, Binky. 47 00:02:10,380 --> 00:02:11,050 Probudite se. 48 00:02:11,050 --> 00:02:13,610 Vrijeme je za zabavu pokazivač. 49 00:02:13,610 --> 00:02:14,741 >> -Što je to? 50 00:02:14,741 --> 00:02:16,440 Doznajte više o pokazivače? 51 00:02:16,440 --> 00:02:17,928 Oh, goodie. 52 00:02:17,928 --> 00:02:18,920 >> [END video reprodukciju] 53 00:02:18,920 --> 00:02:20,670 >> DAVID Malan: To je Stanford računalne znanosti. 54 00:02:20,670 --> 00:02:23,194 Dakle, više o tome doći. 55 00:02:23,194 --> 00:02:24,930 >> [PLJESAK] 56 00:02:24,930 --> 00:02:26,660 >> DAVID Malan: Žao nam je, Nick. 57 00:02:26,660 --> 00:02:30,680 >> Dakle podsjetiti da smo zadnji put završila na ovo je stvarno uzbudljivo alpinista 58 00:02:30,680 --> 00:02:32,960 pri čemu je ova funkcija jednostavno ne rade. 59 00:02:32,960 --> 00:02:34,960 Barem intuitivno, osjećala kao i to bi trebalo raditi. 60 00:02:34,960 --> 00:02:37,600 Jednostavno zamjene vrijednosti po dva cijela broja. 61 00:02:37,600 --> 00:02:40,915 Ali sjećam da kad smo ispisati izvorne vrijednosti u glavnom, jedan i 62 00:02:40,915 --> 00:02:44,210 dvojica, oni su još uvijek jedna te dvije, a ne dvije i. 63 00:02:44,210 --> 00:02:46,070 >> Pa neka mi zapravo prebacivanje preko aparata. 64 00:02:46,070 --> 00:02:50,180 I sam napisao gore malo kostura koda u napredovati ovdje, gdje ja tvrdim da je x 65 00:02:50,180 --> 00:02:52,500 će biti 1, y će se 2.. 66 00:02:52,500 --> 00:02:54,810 I onda ispisati oba svoja Vrijednosti ispis s f. 67 00:02:54,810 --> 00:02:57,540 >> I onda tvrditi da je ovdje ćemo ih zamijeniti. 68 00:02:57,540 --> 00:03:00,800 Ostavio sam prazno mjesto za nas ovdje na ispunite danas u samo trenutak. 69 00:03:00,800 --> 00:03:03,380 Zatim, Ja ću tvrditi da dvije varijable su zamijenili. 70 00:03:03,380 --> 00:03:04,770 Onda ću za ispis ih opet. 71 00:03:04,770 --> 00:03:07,090 I tako, nadamo se, trebao bih vidjeti 1, 2. 72 00:03:07,090 --> 00:03:07,380 2, 1. 73 00:03:07,380 --> 00:03:09,830 To je super jednostavno Cilj upravo sada. 74 00:03:09,830 --> 00:03:12,430 >> Pa kako ćemo ići oko zamjene dvije varijable? 75 00:03:12,430 --> 00:03:17,220 Pa ako ja predlažem da se ovdje ta šalice možda predstavlja memorije na računalu. 76 00:03:17,220 --> 00:03:19,070 To je nekoliko ugriza, ovo je još nekoliko zalogaja. 77 00:03:19,070 --> 00:03:23,260 Jesmo li volonter Dođi gore i mix nam nešto za piće, ako je poznato? 78 00:03:23,260 --> 00:03:23,920 Dođi gore. 79 00:03:23,920 --> 00:03:24,815 Koje je tvoje ime? 80 00:03:24,815 --> 00:03:25,260 >> JESS: Jess. 81 00:03:25,260 --> 00:03:25,690 >> DAVID Malan: Jess? 82 00:03:25,690 --> 00:03:26,540 Dođi gore, Jess. 83 00:03:26,540 --> 00:03:29,180 Ako vam ne smeta, moramo staviti Google Glass na vas tako da možemo 84 00:03:29,180 --> 00:03:30,430 besmrtnim to. 85 00:03:30,430 --> 00:03:32,800 86 00:03:32,800 --> 00:03:34,670 OK, stakla. 87 00:03:34,670 --> 00:03:37,250 Snimanje videa. 88 00:03:37,250 --> 00:03:43,103 I OK, mi smo dobro ići s Jess ovdje. 89 00:03:43,103 --> 00:03:43,810 U redu. 90 00:03:43,810 --> 00:03:45,120 Drago mi je. 91 00:03:45,120 --> 00:03:47,720 >> Dakle, ono što želim učiniti ovdje - ako mogu, vrlo brzo - 92 00:03:47,720 --> 00:03:51,040 Samo toči nam pola čaše naranče soka i pola čaše mlijeka, 93 00:03:51,040 --> 00:03:55,710 predstavlja učinkovito brojeve 1 u jednu šalicu i 2 u drugom šalicu. 94 00:03:55,710 --> 00:04:01,380 95 00:04:01,380 --> 00:04:02,630 >> Ovo će biti dobra snimka. 96 00:04:02,630 --> 00:04:04,910 97 00:04:04,910 --> 00:04:05,860 >> JESS: Žao nam je. 98 00:04:05,860 --> 00:04:06,330 >> DAVID Malan: Ne, ne. 99 00:04:06,330 --> 00:04:08,703 To je u redu. 100 00:04:08,703 --> 00:04:10,120 Nica. 101 00:04:10,120 --> 00:04:12,950 U redu, tako da imamo četiri bajta vrijedno soka od naranče. 102 00:04:12,950 --> 00:04:14,460 Mi ćemo ga zvali vrijednost 1. 103 00:04:14,460 --> 00:04:16,579 Sada još četiri bajta vrijedan mlijeka. 104 00:04:16,579 --> 00:04:18,519 Hoće li to nazvati vrijednost 2. 105 00:04:18,519 --> 00:04:20,440 Tako da x i y, respektivno. 106 00:04:20,440 --> 00:04:23,450 >> U redu, tako da sada ako je zadatak pri ruci - za vas, Jess, ispred svih 107 00:04:23,450 --> 00:04:24,270 vaših kolega - 108 00:04:24,270 --> 00:04:28,510 je da se zamijene vrijednosti xiy takve da želimo sok od naranče u 109 00:04:28,510 --> 00:04:32,070 druga šalice i mlijeko u ovom kupu, kako se Možda ste - prije nego što zapravo učiniti 110 00:04:32,070 --> 00:04:34,020 je - ići oko radiš ovo? 111 00:04:34,020 --> 00:04:35,220 >> OK, mudra odluka. 112 00:04:35,220 --> 00:04:36,340 Tako vam je potrebno malo više memorije. 113 00:04:36,340 --> 00:04:38,190 Tako ćemo dodijeliti privremena šalice, ako hoćete. 114 00:04:38,190 --> 00:04:40,540 A sada nastaviti da zamijene xiy. 115 00:04:40,540 --> 00:04:52,950 116 00:04:52,950 --> 00:04:53,530 >> Izvrsno. 117 00:04:53,530 --> 00:04:54,420 Dakle, vrlo dobro učinio. 118 00:04:54,420 --> 00:04:55,670 Hvala vam puno, Jess. 119 00:04:55,670 --> 00:04:59,520 120 00:04:59,520 --> 00:05:00,020 Izvolite. 121 00:05:00,020 --> 00:05:01,950 Malo suvenir. 122 00:05:01,950 --> 00:05:04,350 >> U redu, tako očito, super jednostavna ideja. 123 00:05:04,350 --> 00:05:07,500 Potpuno intuitivno da nam treba malo više prostora za pohranu - u ovom obliku, 124 00:05:07,500 --> 00:05:09,750 Šalica - da li smo doista želite zamijeniti ove dvije varijable. 125 00:05:09,750 --> 00:05:11,110 Tako ćemo učiniti upravo to. 126 00:05:11,110 --> 00:05:14,330 Ovdje gore u sredini gdje ja tvrdim da sam će se raditi neke zamjene, ja ću 127 00:05:14,330 --> 00:05:15,720 ići naprijed i proglasiti temp. 128 00:05:15,720 --> 00:05:17,980 I ja ću ga postaviti jednako, recimo, x. 129 00:05:17,980 --> 00:05:21,110 >> Onda ću promijeniti vrijednost x baš kao Jess je ovdje s 130 00:05:21,110 --> 00:05:23,200 mlijeko i sok od naranče bude jednak y. 131 00:05:23,200 --> 00:05:27,460 A ja ću se promijeniti y biti jednaki da ne x, jer sada mi bi se 132 00:05:27,460 --> 00:05:29,530 zaglavi u krug, nego temp. 133 00:05:29,530 --> 00:05:33,170 Gdje sam privremeno - ili gdje Jess privremeno staviti sok od naranče 134 00:05:33,170 --> 00:05:35,460 prije nego što je prepiše da šalicu s mlijekom. 135 00:05:35,460 --> 00:05:37,250 >> Pa neka mi sada ići naprijed i učiniti to. 136 00:05:37,250 --> 00:05:39,210 To se zove noswap.c. 137 00:05:39,210 --> 00:05:41,190 I sad neka mi pokrenuti nikakvu zamjenu. 138 00:05:41,190 --> 00:05:43,910 I doista vidim, ako sam proširiti Prozor malo, da 139 00:05:43,910 --> 00:05:45,160 x je 1, y je 2. 140 00:05:45,160 --> 00:05:47,230 , A zatim je x 2, y je 1. 141 00:05:47,230 --> 00:05:51,910 >> No, podsjetiti da je u ponedjeljak smo stvari malo drugačije čemu sam 142 00:05:51,910 --> 00:05:56,760 umjesto da provodi pomagač funkciju, ako hoćete, to je zapravo nevažeće. 143 00:05:56,760 --> 00:05:58,010 Nazvao sam ga zamijeniti. 144 00:05:58,010 --> 00:06:01,600 Dao sam ga dva parametra, a ja sam pozvao ih i ja ih zvali b. 145 00:06:01,600 --> 00:06:04,380 >> Iskreno, ja bi ih nazvati x i y. 146 00:06:04,380 --> 00:06:06,040 Nema ništa zaustavljanja ja u tome. 147 00:06:06,040 --> 00:06:08,140 No ja bih rekao da je tada malo dvosmisleno. 148 00:06:08,140 --> 00:06:11,910 Jer podsjetimo za ponedjeljak da smo tvrdio da su ti parametri bili 149 00:06:11,910 --> 00:06:13,650 kopije vrijednosti prošli u. 150 00:06:13,650 --> 00:06:15,640 Tako da se samo zeza s vašim Um, mislim, ako koristite 151 00:06:15,640 --> 00:06:17,370 točno iste varijable. 152 00:06:17,370 --> 00:06:20,150 >> Tako sam, umjesto ćemo ih nazvati i b, samo za jasnoću. 153 00:06:20,150 --> 00:06:21,840 No, mogli bismo ih nazvati najviše sve što želimo. 154 00:06:21,840 --> 00:06:26,280 I ja ću kopirati i zalijepiti djelotvorno ovaj broj od gore 155 00:06:26,280 --> 00:06:27,170 dolje u ovdje. 156 00:06:27,170 --> 00:06:29,110 Jer sam vidjela da to radi. 157 00:06:29,110 --> 00:06:30,790 Tako da je u prilično dobrom stanju. 158 00:06:30,790 --> 00:06:37,390 A ja ću promijeniti moj x, na mom x da, moj y B i Y za moj b. 159 00:06:37,390 --> 00:06:39,130 >> Dakle, drugim riječima, točno ista logika. 160 00:06:39,130 --> 00:06:40,850 Točno istu stvar da je Jess. 161 00:06:40,850 --> 00:06:44,350 A onda je jedna stvar moram napraviti do Ovdje, naravno, to je sada pozvati 162 00:06:44,350 --> 00:06:45,990 funkcija, ili nazovite tu funkciju. 163 00:06:45,990 --> 00:06:50,430 Dakle, ja ću nazvati ovu funkciju s dva ulaza, xiy, a hit Spremi. 164 00:06:50,430 --> 00:06:52,300 >> U redu, tako fundamentalno ista stvar. 165 00:06:52,300 --> 00:06:55,570 Zapravo, vjerojatno sam napravio program nepotrebno komplicira 166 00:06:55,570 --> 00:07:00,820 piše funkciju koja je samo uzimajući oko šest linija koda, dok sam 167 00:07:00,820 --> 00:07:02,970 prethodno provedene to je u samo tri. 168 00:07:02,970 --> 00:07:06,230 >> Zato mi dopustite da ići naprijed i sada remake ovaj, ne bi swap. 169 00:07:06,230 --> 00:07:07,920 U redu, ja sam zeznuo ovdje. 170 00:07:07,920 --> 00:07:11,290 To bi trebao biti greška koja možda vidi sve najčešće kao vaš 171 00:07:11,290 --> 00:07:12,380 Programi se složeniji. 172 00:07:12,380 --> 00:07:13,470 No, tu je lako srediti. 173 00:07:13,470 --> 00:07:15,650 Dopustite mi da pomicanje natrag ovdje. 174 00:07:15,650 --> 00:07:18,190 >> A što je prva pogreška vidim? 175 00:07:18,190 --> 00:07:19,520 Implicitni deklaraciju. 176 00:07:19,520 --> 00:07:21,466 Što to obično znače? 177 00:07:21,466 --> 00:07:22,830 Oh, zaboravio sam na prototip. 178 00:07:22,830 --> 00:07:26,900 Zaboravio sam naučiti da je prevodilac swapa će postojati, iako je 179 00:07:26,900 --> 00:07:28,920 ne postoji na samom početku programa. 180 00:07:28,920 --> 00:07:35,780 Dakle, ja sam samo htio reći void, swap, int, int b, zarez. 181 00:07:35,780 --> 00:07:37,280 >> Dakle, ja ne idem na to reimplement. 182 00:07:37,280 --> 00:07:39,140 Ali sada prikazuje ono što je ovdje dolje. 183 00:07:39,140 --> 00:07:42,530 I obavijest, odsustvo-zarezom ovdje, što nije nužno ako 184 00:07:42,530 --> 00:07:43,200 provedbi. 185 00:07:43,200 --> 00:07:46,010 >> Pa neka mi preurediti ovo, ne čine swap. 186 00:07:46,010 --> 00:07:46,910 Puno boljem stanju. 187 00:07:46,910 --> 00:07:48,130 Trčanje nema zamjenu. 188 00:07:48,130 --> 00:07:48,740 I k vragu. 189 00:07:48,740 --> 00:07:51,650 Sada smo tamo gdje smo bili u ponedjeljak, gdje se stvar ne zamijene. 190 00:07:51,650 --> 00:07:55,410 >> A ono što je intuitivno objašnjenje zašto je to tako? 191 00:07:55,410 --> 00:07:56,380 Da? 192 00:07:56,380 --> 00:07:57,630 >> STUDENT: [nečujno]. 193 00:07:57,630 --> 00:08:04,140 194 00:08:04,140 --> 00:08:05,230 >> DAVID Malan: Točno. 195 00:08:05,230 --> 00:08:07,330 Pa i b su kopije xiy. 196 00:08:07,330 --> 00:08:10,680 A u stvari, svaki put kad sam bio raspisivanje funkciju tako daleko da 197 00:08:10,680 --> 00:08:12,540 prolazi varijable kao Ints - 198 00:08:12,540 --> 00:08:14,470 kao zamjena se očekuje ovdje - 199 00:08:14,470 --> 00:08:16,270 ti dečki su u prolazu primjeraka. 200 00:08:16,270 --> 00:08:19,150 >> Sada to znači da je potrebno malo vremena, djelić sekunde, za 201 00:08:19,150 --> 00:08:23,270 računalu za kopiranje bitova iz jednog varijabla u komadićima drugi. 202 00:08:23,270 --> 00:08:24,610 Ali to nije tako velika stvar. 203 00:08:24,610 --> 00:08:25,920 No, oni su ipak kopija. 204 00:08:25,920 --> 00:08:30,020 >> I tako sada, u kontekstu zamjene, Ja sam u stvari uspješno 205 00:08:30,020 --> 00:08:31,180 A i B mijenjaju. 206 00:08:31,180 --> 00:08:33,000 U stvari, idemo napraviti brzi razum provjeriti. 207 00:08:33,000 --> 00:08:36,830 Ispis f je% ja, nova linija. 208 00:08:36,830 --> 00:08:38,770 I neka je plug-in. 209 00:08:38,770 --> 00:08:41,830 Sada ćemo napraviti istu stvar sa b. 210 00:08:41,830 --> 00:08:43,640 I neka je napraviti istu stvar ovdje. 211 00:08:43,640 --> 00:08:47,260 >> A sada, neka mi kopirati te iste linije opet na dnu funkcije 212 00:08:47,260 --> 00:08:51,250 nakon mojih tri linije zanimljiva mogao izvršiti, a 213 00:08:51,250 --> 00:08:53,270 ispisati i B opet. 214 00:08:53,270 --> 00:08:56,030 Dakle, sada ćemo napraviti ovo, da nema zamjenu. 215 00:08:56,030 --> 00:08:58,430 Dopustite mi da se terminal prozor malo jači, tako da možemo vidjeti 216 00:08:58,430 --> 00:08:59,520 više od toga odjednom. 217 00:08:59,520 --> 00:09:00,860 >> I pokrenuti nikakvu zamjenu. 218 00:09:00,860 --> 00:09:04,000 x je 1, y je 2. a je 1, b je 2. 219 00:09:04,000 --> 00:09:06,070 , A zatim, je 2, b je 1. 220 00:09:06,070 --> 00:09:09,390 Dakle, to je rad, baš kao i Jess Ovdje je unutar swapa. 221 00:09:09,390 --> 00:09:13,090 Ali, naravno, to što nema učinka o varijabli u glavno. 222 00:09:13,090 --> 00:09:15,360 >> Tako smo vidjeli trik kojim smo mogla popraviti, zar ne? 223 00:09:15,360 --> 00:09:19,560 Kada ste suočeni s ovom djelokrugu rada problem, možete se i samo punt i učiniti x. 224 00:09:19,560 --> 00:09:22,400 i imat kakvu varijable umjesto? 225 00:09:22,400 --> 00:09:23,390 >> Mogli bi ih globalno. 226 00:09:23,390 --> 00:09:27,560 Stavite ih na samom vrhu datoteke kao što smo učinili, čak u igri od 15 godina. 227 00:09:27,560 --> 00:09:28,890 Koristimo globalnu varijablu. 228 00:09:28,890 --> 00:09:32,420 No, u kontekstu u igri 15, je razumno imati globalni 229 00:09:32,420 --> 00:09:37,170 varijabla predstavlja ploču, jer Ukupnost 15.c je sve 230 00:09:37,170 --> 00:09:38,650 o provedbi tu igru. 231 00:09:38,650 --> 00:09:41,470 To je ono što datoteka postoji učiniti. 232 00:09:41,470 --> 00:09:44,170 >> No, u ovom slučaju ovdje, ja sam pozivanje funkcije zamjenu. 233 00:09:44,170 --> 00:09:45,380 Želim da zamijene dvije varijable. 234 00:09:45,380 --> 00:09:48,950 I to bi trebalo početi osjećati samo traljav ako je rješenje za sve naše 235 00:09:48,950 --> 00:09:51,300 problemi kad smo izvoditi u okviru Pitanja je da je globalna. 236 00:09:51,300 --> 00:09:54,730 Zbog vrlo brzo naš program će postati prilično nered. 237 00:09:54,730 --> 00:09:57,760 I mi to učinio vrlo rijetko Kao rezultat toga u 15.c. 238 00:09:57,760 --> 00:10:00,470 >> No, ispostavilo se da postoji bolji način uopce. 239 00:10:00,470 --> 00:10:05,600 Dopustite mi da se zapravo vratiti i izbrisati ispisivati ​​P-a, samo kako bi se pojednostavio ovaj kod. 240 00:10:05,600 --> 00:10:09,160 I neka mi predložiti da To je, doista, je loše. 241 00:10:09,160 --> 00:10:15,990 Ali, ako sam umjesto toga dodajte u nekim zvijezdicama i zvijezde, umjesto da sam može pretvoriti ovo 242 00:10:15,990 --> 00:10:18,670 funkcija u jednu koja je zapravo operativni. 243 00:10:18,670 --> 00:10:25,020 >> Dakle, neka mi se vratiti ovdje i priznajem govoreći Zvjezdica je uvijek teško, 244 00:10:25,020 --> 00:10:26,170 pa ću reći zvijezde. 245 00:10:26,170 --> 00:10:27,660 Ja ću samo uživajte u onome što taj jedan. 246 00:10:27,660 --> 00:10:28,190 U redu. 247 00:10:28,190 --> 00:10:30,190 A sada, što ću učiniti umjesto toga? 248 00:10:30,190 --> 00:10:34,130 >> Dakle, prije svega, ja ću navesti da umjesto donošenjem int u 249 00:10:34,130 --> 00:10:37,980 Zamijeni funkciju, da sam umjesto ide reći int zvijezdu. 250 00:10:37,980 --> 00:10:39,170 Sada, što pokazuju star? 251 00:10:39,170 --> 00:10:41,970 To je pojam od pokazivača tom Binky, Claymation karakter, bio je 252 00:10:41,970 --> 00:10:43,465 pozivajući se na trenutak prije. 253 00:10:43,465 --> 00:10:47,610 >> Dakle, ako kažemo int zvijezdu, značenje to je sada da se ne događa da se 254 00:10:47,610 --> 00:10:49,110 donesen po vrijednosti. 255 00:10:49,110 --> 00:10:50,350 To neće biti kopiran u. 256 00:10:50,350 --> 00:10:54,700 Umjesto toga, adresa je će biti donesen u. 257 00:10:54,700 --> 00:10:57,840 >> Dakle podsjetiti da unutar vašeg računala je cijela hrpa memorije, inače 258 00:10:57,840 --> 00:10:58,760 poznat kao RAM. 259 00:10:58,760 --> 00:11:00,520 A to je samo RAM cijela hrpa bajtova. 260 00:11:00,520 --> 00:11:03,320 Dakle, ako vaš Mac ili računalo ima dva gigabajta, imate 2 261 00:11:03,320 --> 00:11:05,760 milijardi bajtova memorije. 262 00:11:05,760 --> 00:11:08,440 >> Sada neka je samo pretpostaviti da je samo držati stvari lijepo i uredno, smo 263 00:11:08,440 --> 00:11:09,450 dodijeliti adresu - 264 00:11:09,450 --> 00:11:10,170 broj - 265 00:11:10,170 --> 00:11:12,270 svakom bajtu RAM-u računala. 266 00:11:12,270 --> 00:11:15,410 Prvi bajt tih dviju milijarde dolara je, prema broju nula. 267 00:11:15,410 --> 00:11:18,572 Sljedeći je bajt broj jedan, broj dva, skroz gore, dot dot 268 00:11:18,572 --> 00:11:20,530 dot, na oko 2 milijarde. 269 00:11:20,530 --> 00:11:23,640 >> Tako možete broj bajtova memorije u računalu. 270 00:11:23,640 --> 00:11:26,460 Dakle, pretpostavimo da je to ono podrazumijevamo pod adresu. 271 00:11:26,460 --> 00:11:31,360 Pa kad vidim int zvijezda A, što se događa biti donesen u zamjeni je sada 272 00:11:31,360 --> 00:11:32,830 adresa. 273 00:11:32,830 --> 00:11:37,150 Nije njegova vrijednost, ali bez obzira na njegov poštanska Adresa je, da tako kažemo - 274 00:11:37,150 --> 00:11:38,810 Njegov položaj u RAM. 275 00:11:38,810 --> 00:11:41,250 >> Ai za b, idem reći istu stvar. 276 00:11:41,250 --> 00:11:42,720 Interesi, star, b. 277 00:11:42,720 --> 00:11:46,350 Kao na stranu, tehnički zvijezde mogao ići i na drugim mjestima. 278 00:11:46,350 --> 00:11:50,140 No, mi ćemo standardizirati na zvijezde bića tik uz tip podataka. 279 00:11:50,140 --> 00:11:54,080 >> Dakle swap potpis sada znači, daj mi adresa int, a poziv 280 00:11:54,080 --> 00:11:55,400 koje adresu. 281 00:11:55,400 --> 00:11:58,690 I daj mi još jednu adresu int i poziv da b adresa. 282 00:11:58,690 --> 00:12:01,120 >> Ali sada mi je kod ovdje se mora promijeniti. 283 00:12:01,120 --> 00:12:03,470 Jer ako ja izjavljujem int temp - 284 00:12:03,470 --> 00:12:05,580 koji je još uvijek tipa int - 285 00:12:05,580 --> 00:12:08,700 ali ja pohraniti u to, kakvu vrijednost? 286 00:12:08,700 --> 00:12:12,870 Da se razumijemo, ja sam stavljajući u kod kao što je napisano u ovom trenutku? 287 00:12:12,870 --> 00:12:14,360 >> Ja sam stavljajući lokaciju u. 288 00:12:14,360 --> 00:12:16,500 Ali mi nije stalo Mjesto je sada, zar ne? 289 00:12:16,500 --> 00:12:21,940 Temperatura postoji samo Jess 'treću šalicu postojala, za koju svrhu? 290 00:12:21,940 --> 00:12:23,090 Za spremanje vrijednosti. 291 00:12:23,090 --> 00:12:24,830 Mlijeko ili sok od naranče. 292 00:12:24,830 --> 00:12:28,520 Nije zapravo pohraniti adresu bilo koji od tih stvari, koje osjeća 293 00:12:28,520 --> 00:12:31,200 malo besmisleno u ovom stvarnom svjetskom kontekstu svejedno. 294 00:12:31,200 --> 00:12:34,990 >> Pa stvarno, ono što želim staviti u temp nije adresa, ali 295 00:12:34,990 --> 00:12:36,180 sadržaj. 296 00:12:36,180 --> 00:12:41,930 Dakle, ako je broj kao što je 123, to je 123. bajt memorije koja jednostavno 297 00:12:41,930 --> 00:12:45,090 se događa da se zauzimaju, da je vrijednost u se događa da se okupator. 298 00:12:45,090 --> 00:12:49,040 >> Ako želim ići na tu adresu, Moram reći oznaÄŤili. 299 00:12:49,040 --> 00:12:52,610 Isto tako, ako bih se promijeniti ono što je na adresu, mogu promijeniti 300 00:12:52,610 --> 00:12:53,570 to za početak. 301 00:12:53,570 --> 00:12:58,185 Ako želite pohraniti u ono što je po Mjesto s onim što je na mjestu 302 00:12:58,185 --> 00:13:02,180 na B, star b zvijezda. 303 00:13:02,180 --> 00:13:05,340 >> Tako je u kratkom, čak i ako to nije dosta tone u još - i ja ne bih očekivati 304 00:13:05,340 --> 00:13:06,560 da bi tako brzo - 305 00:13:06,560 --> 00:13:11,100 shvatiti da sve što radim je prefiksa ove zvijezde mojih varijabli, 306 00:13:11,100 --> 00:13:13,350 izreka ne zgrabite vrijednosti. 307 00:13:13,350 --> 00:13:14,520 Ne promijenite vrijednosti. 308 00:13:14,520 --> 00:13:17,600 No, umjesto toga, idite na tim adresama i dobiti vrijednost. 309 00:13:17,600 --> 00:13:21,430 Idi na toj adresi i promjeni vrijednost tamo. 310 00:13:21,430 --> 00:13:25,500 >> Pa sad neka mi pomicanje natrag do vrha, Samo kako bi riješili ovaj redak ovdje, na 311 00:13:25,500 --> 00:13:27,690 promjenu prototip kako bi se slagala. 312 00:13:27,690 --> 00:13:30,280 Ali ja sada morati napraviti jednu drugu stvar. 313 00:13:30,280 --> 00:13:35,500 Intuitivno, ako sam promijenio vrste argumenata koji Swap očekuje, 314 00:13:35,500 --> 00:13:37,245 Što još trebam promijeniti u mom kodu? 315 00:13:37,245 --> 00:13:39,750 316 00:13:39,750 --> 00:13:40,840 >> Kad sam poziv swap. 317 00:13:40,840 --> 00:13:43,340 Jer upravo sada, ono što ja I prolazeći da zamijene dalje? 318 00:13:43,340 --> 00:13:47,450 Vrijednost x i vrijednost y ili mlijeko i sok od naranče. 319 00:13:47,450 --> 00:13:48,510 Ali ja ne želim to učiniti. 320 00:13:48,510 --> 00:13:51,060 I umjesto da žele proći u što? 321 00:13:51,060 --> 00:13:53,050 Mjesto xi mjesto y. 322 00:13:53,050 --> 00:13:55,300 Koje su njihove poštanske adrese, da se tako izrazim. 323 00:13:55,300 --> 00:13:57,600 >> Pa za to, postoji znak za struju. 324 00:13:57,600 --> 00:13:59,260 Ampersand vrsta zvuči kao adresu. 325 00:13:59,260 --> 00:14:03,240 pa n, znak za struju, adresa od x i y adresu. 326 00:14:03,240 --> 00:14:06,790 Tako da je namjerno koje koristimo Kada zovete znakove za funkciju, 327 00:14:06,790 --> 00:14:10,230 i zvijezde, kada proglašenja i kada provedbu funkciju. 328 00:14:10,230 --> 00:14:14,220 >> A sjetite se samo ampersand adresa operatora, kao i zvijezda 329 00:14:14,220 --> 00:14:15,490 tamo operatera - 330 00:14:15,490 --> 00:14:18,640 ili, točnije, dereference operatera. 331 00:14:18,640 --> 00:14:23,480 Dakle, to je puno riječi samo reći da je sada, nadamo se, swap ide 332 00:14:23,480 --> 00:14:24,440 biti točna. 333 00:14:24,440 --> 00:14:26,550 >> Dopustite mi da ići naprijed i učiniti - 334 00:14:26,550 --> 00:14:30,940 neka je zapravo preimenovati datoteku, da ne ovaj program još uvijek se zove nema zamjena. 335 00:14:30,940 --> 00:14:33,240 Tvrdim da ćemo ga zovu swap.c sada. 336 00:14:33,240 --> 00:14:35,670 Tako bi, zamijeniti. 337 00:14:35,670 --> 00:14:37,520 Dot, slash, zamijeniti. 338 00:14:37,520 --> 00:14:40,210 >> A sada doista, x je 1, y je 2. 339 00:14:40,210 --> 00:14:44,040 , A zatim, x je 2, y je jedan. 340 00:14:44,040 --> 00:14:46,500 Pa ćemo vidjeti ako mi to ne može učiniti malo drugačije, kao što je 341 00:14:46,500 --> 00:14:47,180 ovdje događa. 342 00:14:47,180 --> 00:14:51,250 Prvo, neka mi uvećanje na našim crtanje ekran ovdje. 343 00:14:51,250 --> 00:14:54,160 I neka mi predloži za trenutak - a kad crtam ovdje će se zrcale 344 00:14:54,160 --> 00:14:58,660 tamo sada - neka mi predložiti da Ovdje je cijela hrpa memorije, ili 345 00:14:58,660 --> 00:15:00,540 RAM, unutar moje računalo. 346 00:15:00,540 --> 00:15:04,140 >> I to će biti broj ugriza, recimo, jednom. 347 00:15:04,140 --> 00:15:05,720 To će biti broj 2 bajta. 348 00:15:05,720 --> 00:15:08,220 I ja ću napraviti cijelu hrpu više, i onda hrpa točkica točkica točkica na 349 00:15:08,220 --> 00:15:10,880 pokazuju da postoji 2 milijarde od tih stvari. 350 00:15:10,880 --> 00:15:13,520 4, 5, i tako dalje. 351 00:15:13,520 --> 00:15:17,055 >> Dakle, tu su prvih pet bajtova od mog računala memorije. 352 00:15:17,055 --> 00:15:17,560 U redu? 353 00:15:17,560 --> 00:15:19,060 Vrlo malo od 2 milijarde eura. 354 00:15:19,060 --> 00:15:21,120 Ali sada ću predložiti sljedeće. 355 00:15:21,120 --> 00:15:27,490 Ja ću predložiti da se ide na x pohraniti broj 1, a imat će 356 00:15:27,490 --> 00:15:29,690 pohraniti broj dva. 357 00:15:29,690 --> 00:15:35,000 I neka mi sada ići naprijed i predstavlja ove vrijednosti, kao što slijedi. 358 00:15:35,000 --> 00:15:41,510 >> Učinimo to na sljedeći način. 359 00:15:41,510 --> 00:15:42,870 Daj mi samo jednu sekundu. 360 00:15:42,870 --> 00:15:44,150 Jedan drugi. 361 00:15:44,150 --> 00:15:45,680 OK. 362 00:15:45,680 --> 00:15:47,560 Želim da ovo malo - 363 00:15:47,560 --> 00:15:50,440 hajdemo to učiniti opet. 364 00:15:50,440 --> 00:15:53,250 Inače ću te korištenjem Isti brojevi, nenamjerno, 365 00:15:53,250 --> 00:15:54,230 više puta. 366 00:15:54,230 --> 00:15:57,320 >> Dakle, samo tako možemo imati različite brojeve pričati o, nazovimo to bajt 367 00:15:57,320 --> 00:16:03,391 broj 123, 124, 125, 126, i dot dot dot. 368 00:16:03,391 --> 00:16:08,400 I neka mi sada tvrditi da ću se stavi vrijednost 1 ovdje, a onda se vrijednost 2 369 00:16:08,400 --> 00:16:11,990 Ovdje, inače poznat kao xiy. 370 00:16:11,990 --> 00:16:15,300 Dakle, to samo tako dogodi da ovo je x, ovo y. 371 00:16:15,300 --> 00:16:18,180 >> I baš neki Slučajnost, računalo, operativni sustav, 372 00:16:18,180 --> 00:16:21,890 dogodilo staviti x na mjestu broj 123. 373 00:16:21,890 --> 00:16:25,590 I y završio na 124. mjestu - 374 00:16:25,590 --> 00:16:26,330 k vragu. 375 00:16:26,330 --> 00:16:28,700 Trebao sam to popraviti. 376 00:16:28,700 --> 00:16:34,040 O, čovječe, ja stvarno želite učiniti? 377 00:16:34,040 --> 00:16:37,340 Da, želim popraviti i b pravilno o ovom danas. 378 00:16:37,340 --> 00:16:39,950 Nažalost, novi u ovome. 379 00:16:39,950 --> 00:16:45,020 >> 127, 131, a ja ne želim da se to složeno, ali zašto sam promijeniti 380 00:16:45,020 --> 00:16:46,340 Brojevi tamo? 381 00:16:46,340 --> 00:16:48,360 Zato želim da se Ints zapravo biti četiri bajta. 382 00:16:48,360 --> 00:16:49,810 Tako ćemo biti super analnog o tome. 383 00:16:49,810 --> 00:16:53,800 Tako da, ako se dogodi da se jedan obratio 123, 2 će biti na adresu 384 00:16:53,800 --> 00:16:55,730 127, jer to je samo 4 pozdravili daleko. 385 00:16:55,730 --> 00:16:56,210 To je sve. 386 00:16:56,210 --> 00:16:58,640 I mi ćemo zaboraviti na sve druge adrese u svijetu. 387 00:16:58,640 --> 00:17:03,320 >> Tako je, na mjestu x 123, y je na mjestu 127. 388 00:17:03,320 --> 00:17:05,770 I sad, što to zapravo sam želite učiniti? 389 00:17:05,770 --> 00:17:10,099 Kad sam poziv zamjenu sada, što je zapravo događa? 390 00:17:10,099 --> 00:17:14,920 Pa, kad sam nazvati zamjenu, ja sam prolaze adresa x i y adresu. 391 00:17:14,920 --> 00:17:18,540 Tako na primjer, ako se ta dva komada papira sada predstavljaju dvije 392 00:17:18,540 --> 00:17:23,510 Argumenti i b za swap, ono što sam ja će pisati o prvom od njih, 393 00:17:23,510 --> 00:17:27,720 što ću nazvati nazivaju? 394 00:17:27,720 --> 00:17:30,610 >> Točno, 123. 395 00:17:30,610 --> 00:17:31,905 Dakle, to ja tvrdim je. 396 00:17:31,905 --> 00:17:32,955 Ovaj je parametar. 397 00:17:32,955 --> 00:17:35,856 Ja sam stavljajući adresu x unutra. 398 00:17:35,856 --> 00:17:38,152 >> Što je to? 399 00:17:38,152 --> 00:17:40,890 >> Što je to? 400 00:17:40,890 --> 00:17:41,190 >> Ne, ne. 401 00:17:41,190 --> 00:17:41,720 To je u redu. 402 00:17:41,720 --> 00:17:42,570 Ipak dobra, još uvijek dobra. 403 00:17:42,570 --> 00:17:43,530 Tako je to. 404 00:17:43,530 --> 00:17:46,240 A sada na drugom komadu papira, ovo će biti b, a što sam ja 405 00:17:46,240 --> 00:17:49,010 će se pisati na ovaj komad papira? 406 00:17:49,010 --> 00:17:50,080 127. 407 00:17:50,080 --> 00:17:53,720 >> Dakle, jedina stvar koja se promijenila od Naša prethodna govori o ovoj priči je, 408 00:17:53,720 --> 00:17:58,590 nego doslovno 1 i 2, ja sam proći će u 123. i 127.. 409 00:17:58,590 --> 00:18:02,130 A ja sad idem staviti ovih iznutra ove kutije, u redu? 410 00:18:02,130 --> 00:18:04,640 Tako da je crna kutija sada predstavlja zamjena funkcija. 411 00:18:04,640 --> 00:18:07,230 >> U međuvremenu, neka se sada netko implementirati funkciju swapa. 412 00:18:07,230 --> 00:18:09,090 Bi li netko ovdje željeli volontirati? 413 00:18:09,090 --> 00:18:09,560 Dođi gore. 414 00:18:09,560 --> 00:18:11,080 Koje je tvoje ime? 415 00:18:11,080 --> 00:18:11,460 Charlie. 416 00:18:11,460 --> 00:18:12,080 U redu, Charlie. 417 00:18:12,080 --> 00:18:14,810 Dođi gore. 418 00:18:14,810 --> 00:18:17,310 >> Dakle, Charlie će igrati Uloga naše crne kutije. 419 00:18:17,310 --> 00:18:21,460 I Charlie, ono što bih želio da učinite Sada se provesti zamjenu na takav način 420 00:18:21,460 --> 00:18:25,320 da je, s obzirom na te dvije adrese, da su zapravo ide 421 00:18:25,320 --> 00:18:26,330 za promjenu vrijednosti. 422 00:18:26,330 --> 00:18:28,290 I ja ću šaptati u uho kako pokrenuti TV ovdje. 423 00:18:28,290 --> 00:18:29,930 >> Dakle, ići naprijed, a ti si crna kutija. 424 00:18:29,930 --> 00:18:30,920 Doći tamo. 425 00:18:30,920 --> 00:18:34,054 Koje vrijednosti vidiš za te Koje vrijednosti vidiš za b? 426 00:18:34,054 --> 00:18:36,740 >> CHARLIE: je 123, a b 127. 427 00:18:36,740 --> 00:18:37,530 >> DAVID Malan: OK, točno. 428 00:18:37,530 --> 00:18:38,940 Sada pauzirati postoji samo na trenutak. 429 00:18:38,940 --> 00:18:41,680 Prva stvar koju će učiniti sada, prema kod - što 430 00:18:41,680 --> 00:18:43,220 I sada ću podići na zaslonu - 431 00:18:43,220 --> 00:18:46,750 koja će se izdvojiti malo malo memorije zove temp. 432 00:18:46,750 --> 00:18:48,850 Dakle, ja ću ići naprijed i vam taj memorije. 433 00:18:48,850 --> 00:18:52,210 >> Dakle, ovo će biti treća varijabla da ste dostupni 434 00:18:52,210 --> 00:18:54,080 što se zove temp. 435 00:18:54,080 --> 00:18:57,120 A što ćeš pisati na temp komad papira? 436 00:18:57,120 --> 00:19:02,524 437 00:19:02,524 --> 00:19:03,470 >> CHARLIE: pokazivače, zar ne? 438 00:19:03,470 --> 00:19:04,790 >> DAVID Malan: OK, ali ne nužno upućuje. 439 00:19:04,790 --> 00:19:07,230 Dakle linija koda da sam istaknuta na desnoj strani, 440 00:19:07,230 --> 00:19:07,900 počnimo postoji. 441 00:19:07,900 --> 00:19:08,890 Piše zvijezda. 442 00:19:08,890 --> 00:19:11,670 Dakle, trenutno spremanje broj 123. 443 00:19:11,670 --> 00:19:16,660 I samo intuitivno, što nije star 123 znači? 444 00:19:16,660 --> 00:19:21,630 >> Ali specifično, ako je 123, star znači što? 445 00:19:21,630 --> 00:19:22,560 Vrijednost. 446 00:19:22,560 --> 00:19:24,580 Ili više ležerno, otići tamo. 447 00:19:24,580 --> 00:19:28,620 Pa neka mi predlažemo da, držeći u tvoja ruka, ići naprijed i liječenje koje 448 00:19:28,620 --> 00:19:29,430 kao da je to karta. 449 00:19:29,430 --> 00:19:32,940 I sami hoda preko računalo ' memorije, te nas pronaći ono što je 450 00:19:32,940 --> 00:19:36,520 na mjestu 123. 451 00:19:36,520 --> 00:19:37,720 Točno. 452 00:19:37,720 --> 00:19:41,100 >> Tako vidimo na mjestu 123 je ono, očito? 453 00:19:41,100 --> 00:19:44,240 U redu, tako što je vrijednost sada si ti će se staviti u temp? 454 00:19:44,240 --> 00:19:44,750 Točno. 455 00:19:44,750 --> 00:19:45,600 Pa ići naprijed i učiniti. 456 00:19:45,600 --> 00:19:51,280 I napisati broj 1 na komad Rad koji trenutno pod nazivom temp. 457 00:19:51,280 --> 00:19:53,540 >> A sada sljedeći korak koji idete za provedbu 458 00:19:53,540 --> 00:19:54,310 će biti ono. 459 00:19:54,310 --> 00:19:57,820 Pa, na desnoj strani Sljedeći linija koda je star b. B, od 460 00:19:57,820 --> 00:19:59,260 Tečaj, pohranjuje adrese. 461 00:19:59,260 --> 00:20:02,270 To adrese 127. 462 00:20:02,270 --> 00:20:06,620 Star b znači ono, usput govoreći? 463 00:20:06,620 --> 00:20:08,700 >> Idi na tom mjestu. 464 00:20:08,700 --> 00:20:14,988 Dakle, ići naprijed i nas pronaći ono što je na mjestu 127. 465 00:20:14,988 --> 00:20:15,480 OK. 466 00:20:15,480 --> 00:20:19,170 Naravno, na mjestu 127, još uvijek je vrijednost 2. 467 00:20:19,170 --> 00:20:24,060 Dakle, ono što se sada ideš u dućan što god je na poziciji u? 468 00:20:24,060 --> 00:20:26,860 Dakle, zvijezda sredstvo ide na mjesto u. 469 00:20:26,860 --> 00:20:29,770 Koje je mjesto? 470 00:20:29,770 --> 00:20:30,430 >> Točno. 471 00:20:30,430 --> 00:20:34,190 Pa sad, ako želite promijeniti ono što je na tom mjestu - 472 00:20:34,190 --> 00:20:36,470 Ja ću ići naprijed i pokrenuti gumice su ovdje. 473 00:20:36,470 --> 00:20:37,760 A sada ga vratiti na četkicu. 474 00:20:37,760 --> 00:20:42,190 Koji broj ideš pisati u tom prazan okvir sada? 475 00:20:42,190 --> 00:20:42,850 >> Točno. 476 00:20:42,850 --> 00:20:46,470 Dakle, ova linija koda, da bude jasno - neka ja pauziram ono Charlie radi i 477 00:20:46,470 --> 00:20:51,730 naglasiti ovdje, ono što je upravo učinio je pisati u taj okvir, na mjestu 123 478 00:20:51,730 --> 00:20:55,150 vrijednost koja je prethodno na b. 479 00:20:55,150 --> 00:20:59,140 I tako smo sada provodi doista ova druga linija koda. 480 00:20:59,140 --> 00:21:01,920 >> Sada, nažalost, postoji još jedan redak preostalo. 481 00:21:01,920 --> 00:21:04,900 Sada ono što je u temp, doslovno? 482 00:21:04,900 --> 00:21:06,200 Očito je broj jedan. 483 00:21:06,200 --> 00:21:07,020 To nije adresa. 484 00:21:07,020 --> 00:21:09,380 To je samo broj, vrsta varijabilni od jednog tjedna. 485 00:21:09,380 --> 00:21:13,520 >> I sad kad kažeš b zvijezda, to znači da ići na adresu b, što je od 486 00:21:13,520 --> 00:21:15,090 Tečaj ovdje. 487 00:21:15,090 --> 00:21:16,020 Dakle, kad jednom doći - 488 00:21:16,020 --> 00:21:18,320 Ja ću ići naprijed i izbrisati ono što je zapravo postoji - a što si ti 489 00:21:18,320 --> 00:21:20,820 će pisati sada, na licu mjesta 127? 490 00:21:20,820 --> 00:21:22,010 >> CHARLIE: Temp, koji je jedan. 491 00:21:22,010 --> 00:21:23,430 >> DAVID Malan: temp, što je jedan. 492 00:21:23,430 --> 00:21:25,670 A što se događa s temp na kraju? 493 00:21:25,670 --> 00:21:26,600 Pa, mi zapravo ne znamo. 494 00:21:26,600 --> 00:21:27,420 Mi zapravo ne zanima. 495 00:21:27,420 --> 00:21:31,090 Svaki put smo implementirali funkciju do sada, sve lokalne varijable imate 496 00:21:31,090 --> 00:21:31,890 su doista lokalni. 497 00:21:31,890 --> 00:21:33,060 I oni samo nestati. 498 00:21:33,060 --> 00:21:35,040 Oni su vraćene od strane operativnog Sustav kraju. 499 00:21:35,040 --> 00:21:39,800 >> Dakle, činjenica da još uvijek ima temp Vrijednost 1 je vrsta od temelja 500 00:21:39,800 --> 00:21:41,150 nezanimljiv nama. 501 00:21:41,150 --> 00:21:43,100 U redu, tako da pljesak ako smo mogli za Charlieja. 502 00:21:43,100 --> 00:21:46,400 Vrlo dobro učinio. 503 00:21:46,400 --> 00:21:51,520 >> U redu, tako da ono više ne to znači da možemo napraviti? 504 00:21:51,520 --> 00:21:54,400 Tako ispada da smo bili govori nekoliko bijelih laži 505 00:21:54,400 --> 00:21:55,540 za neko vrijeme. 506 00:21:55,540 --> 00:21:59,990 Doista, ispada da se niz, sve ovo vrijeme, zapravo i nije 507 00:21:59,990 --> 00:22:02,190 slijed znakova po sebi. 508 00:22:02,190 --> 00:22:03,980 To je vrsta koja intuitivno. 509 00:22:03,980 --> 00:22:08,270 >> No, tehnički gledano, struna Vrsta podataka koje smo proglasili unutar 510 00:22:08,270 --> 00:22:12,170 CS50 knjižnica pojednostaviti svijet za prvih nekoliko tjedana klase. 511 00:22:12,170 --> 00:22:20,130 Ono što je stvarno je niz adresa lika negdje u RAM-u. 512 00:22:20,130 --> 00:22:25,530 String je zapravo broj, kao što je 123. ili 127, što se događa s demarkiraju 513 00:22:25,530 --> 00:22:28,420 gdje je string počinje u memorije računala. 514 00:22:28,420 --> 00:22:31,870 >> Ali, to ne predstavlja string, sama po sebi, sama po sebi. 515 00:22:31,870 --> 00:22:33,460 I možemo vidjeti ovo što slijedi. 516 00:22:33,460 --> 00:22:35,980 Dopustite mi da ide naprijed i otvaraju Neki kod koji je među 517 00:22:35,980 --> 00:22:38,340 današnji izvorni kod primjera. 518 00:22:38,340 --> 00:22:42,225 I ja ću ići naprijed i otvorite do, recimo, usporedite-0.c. 519 00:22:42,225 --> 00:22:44,830 520 00:22:44,830 --> 00:22:48,790 Ovo je buggy program koji će koji će se provoditi na sljedeći način. 521 00:22:48,790 --> 00:22:49,040 >> Prvo. 522 00:22:49,040 --> 00:22:50,420 Ja ću reći nešto. 523 00:22:50,420 --> 00:22:52,660 Onda ću ići naprijed i dobiti niz od korisnika 524 00:22:52,660 --> 00:22:53,750 u toj sljedeći redak. 525 00:22:53,750 --> 00:22:55,370 Onda ću ga opet reći. 526 00:22:55,370 --> 00:22:57,540 Onda ću dobiti još jednu string od korisnika. 527 00:22:57,540 --> 00:23:00,390 >> I napomena, ja sam prikazati jedan od žice u varijablu e, i 528 00:23:00,390 --> 00:23:03,040 jedan od tih nizova u varijablu naziva t. 529 00:23:03,040 --> 00:23:07,480 A sada ću tvrditi, vrlo razumnoj mjeri, da, ako je jednaka jednaka t, 530 00:23:07,480 --> 00:23:08,940 žice su isti. 531 00:23:08,940 --> 00:23:09,970 Možete upisati istu stvar. 532 00:23:09,970 --> 00:23:11,830 Inače, žica nije ista stvar. 533 00:23:11,830 --> 00:23:15,440 >> Uostalom, ako unosimo dva Ints, dva znakovi, dva kola, dva u parovima, bilo koje od 534 00:23:15,440 --> 00:23:18,400 vrste podataka koje smo razgovarali o Do sada ih je usporediti - 535 00:23:18,400 --> 00:23:22,070 podsjetiti da je vrlo jasno, a prije da ne to učiniti, jer 536 00:23:22,070 --> 00:23:25,840 jedan znak jednakosti je, naravno, operator pridruživanja. 537 00:23:25,840 --> 00:23:26,820 Dakle, da bi se bug. 538 00:23:26,820 --> 00:23:29,260 >> Mi koristimo jednak znak jednakosti, što je uistinu uspoređuje 539 00:23:29,260 --> 00:23:31,050 stvari za istinske ravnopravnosti. 540 00:23:31,050 --> 00:23:32,275 Ali ja tvrdim je to lud. 541 00:23:32,275 --> 00:23:37,400 Ako sam ići naprijed i napraviti usporedbu nulu, a onda ne dot slash usporedite nulu. 542 00:23:37,400 --> 00:23:39,700 I sam upisati, recimo, bok. 543 00:23:39,700 --> 00:23:41,590 A onda ćemo pozdraviti ponovno. 544 00:23:41,590 --> 00:23:46,040 Doslovno ista stvar, računalo tvrdi sam upisali različite stvari. 545 00:23:46,040 --> 00:23:47,640 >> Sada možda sam samo krivo upisao nešto. 546 00:23:47,640 --> 00:23:49,910 Ja ću upisati ime mi ovaj put. 547 00:23:49,910 --> 00:23:52,580 Mislim, halo. 548 00:23:52,580 --> 00:23:54,770 Pozdrav. 549 00:23:54,770 --> 00:23:57,360 To je drugačije svaki put. 550 00:23:57,360 --> 00:23:58,430 >> Pa, zašto je to? 551 00:23:58,430 --> 00:24:00,140 Što se doista događa ispod haube? 552 00:24:00,140 --> 00:24:03,270 Pa, što se zapravo događa ispod napa je string zatim 553 00:24:03,270 --> 00:24:07,410 Ja upisali u tom prvi put za primjer Riječ je zdravo, naravno. 554 00:24:07,410 --> 00:24:11,660 Ali ako mi predstavlja to ispod napa, podsjetiti da je 555 00:24:11,660 --> 00:24:13,470 struna na polje. 556 00:24:13,470 --> 00:24:15,040 I mi rekao koliko u prošlosti. 557 00:24:15,040 --> 00:24:20,200 >> Dakle, ako sam skrenuti na taj niz kao što je ovaj, ja sam će predstavljati nešto sasvim 558 00:24:20,200 --> 00:24:23,030 slično onome što smo maloprije. 559 00:24:23,030 --> 00:24:25,390 I tu je zapravo nešto Posebna ovdje. 560 00:24:25,390 --> 00:24:28,090 Što smo se utvrdilo je, na na kraju svakog niza? 561 00:24:28,090 --> 00:24:30,760 Da, backslash nuli, pa se Samo način prikazivanja, 562 00:24:30,760 --> 00:24:33,610 Doslovno, 00000000. 563 00:24:33,610 --> 00:24:35,680 Osam 0 bita u nizu. 564 00:24:35,680 --> 00:24:37,610 >> Ne znam, iskreno, ono što je nakon toga. 565 00:24:37,610 --> 00:24:40,090 To je samo hrpa više RAM-a unutar moje računalo. 566 00:24:40,090 --> 00:24:40,970 Ali ovo polje. 567 00:24:40,970 --> 00:24:42,260 Razgovarali smo o tome prije nego polja. 568 00:24:42,260 --> 00:24:45,010 A mi obično govorimo o nizovima kao location nula, 569 00:24:45,010 --> 00:24:46,580 zatim jedan, a zatim dva. 570 00:24:46,580 --> 00:24:47,950 No, to je samo za praktičnost. 571 00:24:47,950 --> 00:24:49,380 I to je sasvim relativna. 572 00:24:49,380 --> 00:24:53,010 >> Kad ste zapravo uzimajući memorije na Računalo, što je, naravno, bilo 573 00:24:53,010 --> 00:24:55,450 2 milijarde neki čudni bajtova, potencijalno. 574 00:24:55,450 --> 00:24:59,100 Pa stvarno ispod poklopca motora, sve ovo vrijeme, da. 575 00:24:59,100 --> 00:25:01,670 Ovo bi moglo biti jako dobro nosač nuli. 576 00:25:01,670 --> 00:25:04,780 Ali ako kopati još dublje ispod napa, to je stvarno 577 00:25:04,780 --> 00:25:07,000 obratiti broj 123. 578 00:25:07,000 --> 00:25:09,150 Ovo je adresa 124. 579 00:25:09,150 --> 00:25:11,040 Ovo je adresa 125. 580 00:25:11,040 --> 00:25:12,540 >> I nisam zeznuti ovaj put. 581 00:25:12,540 --> 00:25:15,840 To su sada jedna bajtova Osim iz kojeg razloga? 582 00:25:15,840 --> 00:25:17,930 Koliko je velik znak? 583 00:25:17,930 --> 00:25:19,170 Char je samo jedan bajt. 584 00:25:19,170 --> 00:25:20,570 Int je obično četiri bajta. 585 00:25:20,570 --> 00:25:24,850 Dakle, to je razlog zašto sam napravio to 123, 127, 131 i tako dalje. 586 00:25:24,850 --> 00:25:27,560 Sada mogu zadržati matematike jednostavnije i baš to plus jedan. 587 00:25:27,560 --> 00:25:30,510 A ovo je sada ono što se stvarno događa na ispod haube. 588 00:25:30,510 --> 00:25:37,760 >> Dakle, kada se proglasi ovako nešto, string s, to je zapravo - 589 00:25:37,760 --> 00:25:39,170 ispada - 590 00:25:39,170 --> 00:25:41,190 char star. 591 00:25:41,190 --> 00:25:44,640 Star je, naravno, znači da adresa, zvani pointer. 592 00:25:44,640 --> 00:25:46,200 Dakle, to je nešto adresu. 593 00:25:46,200 --> 00:25:47,510 Što je adresa? 594 00:25:47,510 --> 00:25:47,760 >> Pa - 595 00:25:47,760 --> 00:25:51,680 Ja sam jedini koji mogu vidjeti vrlo Bitna stvar sam što, ili mislite 596 00:25:51,680 --> 00:25:52,560 Ja izmišljam. 597 00:25:52,560 --> 00:25:55,270 Dakle string - 598 00:25:55,270 --> 00:25:57,180 Tužno je što imam monitor tamo gdje sam 599 00:25:57,180 --> 00:25:58,100 mogli su vidjeti da je. 600 00:25:58,100 --> 00:26:00,990 >> U redu, tako da je ono što je string Ja proglasio ranije. 601 00:26:00,990 --> 00:26:04,600 No, ispostavilo se, zahvaljujući nešto Čarolija u CS50 knjižnici, sve to 602 00:26:04,600 --> 00:26:08,780 Vrijeme string je doslovno bio znak zvjezdice. 603 00:26:08,780 --> 00:26:11,310 Zvijezda opet znači pokazivač ili adresa. 604 00:26:11,310 --> 00:26:14,180 Činjenica da je to bočni Riječ znak znači da je 605 00:26:14,180 --> 00:26:15,970 adresa lika. 606 00:26:15,970 --> 00:26:23,100 >> Dakle, ako se string zove, i tipkam u H-E-L-L-O, sada predlažemo ono što je mogao 607 00:26:23,100 --> 00:26:27,330 string doslovce vraća sve ovaj put, iako mi smo prilično 608 00:26:27,330 --> 00:26:29,980 pojednostavni svijet? 609 00:26:29,980 --> 00:26:33,310 Što se zapravo string vrati kao povratnu vrijednost? 610 00:26:33,310 --> 00:26:35,830 611 00:26:35,830 --> 00:26:38,720 >> 123 u ovom slučaju, na primjer. 612 00:26:38,720 --> 00:26:42,630 Mi smo ranije rekli da su dobili niz jednostavno vraća niz, slijed 613 00:26:42,630 --> 00:26:43,300 likovi. 614 00:26:43,300 --> 00:26:44,790 Ali to je malo bijele laži. 615 00:26:44,790 --> 00:26:48,010 Način dobili string stvarno radi ispod poklopca motora nalazi se dobiva 616 00:26:48,010 --> 00:26:48,930 string od korisnika. 617 00:26:48,930 --> 00:26:51,530 To plops likovi koji on ili ona vrsta u memoriji. 618 00:26:51,530 --> 00:26:54,680 To stavlja obrnute kose nulu na kraju od onih koji niz znakova. 619 00:26:54,680 --> 00:26:57,310 >> Ali što onda ne bi string Doslovno se vratiti? 620 00:26:57,310 --> 00:27:02,710 To doslovno vraća adresu Prvi bajt u RAM koji 621 00:27:02,710 --> 00:27:04,130 to se koristi za tu snagu. 622 00:27:04,130 --> 00:27:07,500 I ispada da je samo po povratku jednu adresu 623 00:27:07,500 --> 00:27:12,120 Prvi znak u nizu, koji je dovoljni za pronalaženje sveukupnost 624 00:27:12,120 --> 00:27:12,630 string. 625 00:27:12,630 --> 00:27:16,930 >> Drugim riječima, dobili string nema vratiti 123 i 124 i 125. 626 00:27:16,930 --> 00:27:19,950 To ne mora mi dati vremena Popis svih bajtova koji 627 00:27:19,950 --> 00:27:20,740 moj string koristi. 628 00:27:20,740 --> 00:27:22,670 Jer jednom, oni su svi natrag na leđa. 629 00:27:22,670 --> 00:27:28,160 I dvije, temelji se na prvom obraćanju, sam mogu shvatiti gdje završava string. 630 00:27:28,160 --> 00:27:29,910 Kako? 631 00:27:29,910 --> 00:27:33,490 >> Posebna null karakter, obrnute kose nula na kraju. 632 00:27:33,490 --> 00:27:35,430 Dakle, drugim riječima, ako se što prođe oko - 633 00:27:35,430 --> 00:27:36,530 unutar varijabli - 634 00:27:36,530 --> 00:27:41,300 adresa char, i preuzimate da je na kraju svakog niza, bilo 635 00:27:41,300 --> 00:27:45,040 slijed znakova što mi ljudi sjetiti žice, ako pretpostavimo da 636 00:27:45,040 --> 00:27:48,600 na kraju svakog takvog niza postoji backslash nulu, ti si zlatna. 637 00:27:48,600 --> 00:27:52,430 Jer uvijek možete pronaći kraj niza. 638 00:27:52,430 --> 00:27:54,870 >> Sada ono što je stvarno onda ide u ovom programu? 639 00:27:54,870 --> 00:27:59,990 Zašto je ovaj program, usporedite-0.c, lud? 640 00:27:59,990 --> 00:28:01,690 Što se zapravo u usporedbi? 641 00:28:01,690 --> 00:28:02,420 Da? 642 00:28:02,420 --> 00:28:05,000 >> STUDENT: [nečujno]. 643 00:28:05,000 --> 00:28:05,730 >> DAVID Malan: Točno. 644 00:28:05,730 --> 00:28:08,350 To je usporedbom mjesta od žice. 645 00:28:08,350 --> 00:28:12,420 Dakle, ako je korisnik upisali u jednom Pozdrav, kao što sam učinio, memorije može završiti 646 00:28:12,420 --> 00:28:13,430 upravo kao što je ovaj. 647 00:28:13,430 --> 00:28:18,210 Ako korisnik onda upiše Bok opet, ali pozivom dobili niz opet, c 648 00:28:18,210 --> 00:28:21,800 nije posebno pametan, osim ako vas naučiti je biti pametan pisanjem koda. 649 00:28:21,800 --> 00:28:22,430 >> C - 650 00:28:22,430 --> 00:28:23,860 i računala općenitije - 651 00:28:23,860 --> 00:28:27,370 Ako upišete u riječi Bok opet, znaš što ćeš dobiti. 652 00:28:27,370 --> 00:28:31,480 Ti si idući u dobiti drugi niz memorije koja, da, dogodi se 653 00:28:31,480 --> 00:28:35,510 spremanje H-E-l-L-O i tako dalje. 654 00:28:35,510 --> 00:28:38,240 >> To će izgledati isto nama ljudima, ali ta adresa 655 00:28:38,240 --> 00:28:39,460 možda neće biti 123. 656 00:28:39,460 --> 00:28:42,470 To može samo tako dogoditi da operativni sustav ima neke dostupno 657 00:28:42,470 --> 00:28:45,430 prostor za primjer, na mjestu - 658 00:28:45,430 --> 00:28:49,820 recimo nešto proizvoljno, Mjesto kao što je to 200. 659 00:28:49,820 --> 00:28:51,620 A to je 201 Mjesto. 660 00:28:51,620 --> 00:28:53,060 A to je 202 Mjesto. 661 00:28:53,060 --> 00:28:55,730 Nemamo pojma gdje je koja je će biti u sjećanju. 662 00:28:55,730 --> 00:28:59,110 >> No, što to znači da je ono što je će biti pohranjen u konačnici u S? 663 00:28:59,110 --> 00:29:00,750 Broj 123. 664 00:29:00,750 --> 00:29:04,860 Što će biti pohranjeni u t, u ovom primjeru proizvoljne? 665 00:29:04,860 --> 00:29:06,300 Broj 200. 666 00:29:06,300 --> 00:29:11,410 I sve to znači onda je očito, 123 nije jednak 200. 667 00:29:11,410 --> 00:29:14,940 I tako to, ako uvjet nije true. 668 00:29:14,940 --> 00:29:18,430 Budući da se string koristi različite komadi memorije svaki put. 669 00:29:18,430 --> 00:29:20,360 >> Sada možemo vidjeti opet U drugom primjeru. 670 00:29:20,360 --> 00:29:23,764 Dopustite mi da ići naprijed i otvoriti copy-0.c. 671 00:29:23,764 --> 00:29:28,770 Tvrdim da je ovaj primjer će probati - ali ne uspijevaju - za kopiranje dvije žice 672 00:29:28,770 --> 00:29:29,910 na sljedeći način. 673 00:29:29,910 --> 00:29:31,730 >> Ja ću reći nešto za korisnika. 674 00:29:31,730 --> 00:29:34,490 I onda ću dobiti string i pozvati ga je. 675 00:29:34,490 --> 00:29:36,400 I sad, ja sam to provjeriti ovdje. 676 00:29:36,400 --> 00:29:37,990 Spomenuli smo tu, dok leđa. 677 00:29:37,990 --> 00:29:42,490 No, kada bi dobili povratnu null string, drugi posebni znak, ili posebna 678 00:29:42,490 --> 00:29:45,050 Simbol recimo. 679 00:29:45,050 --> 00:29:45,900 Ako je iz memorije. 680 00:29:45,900 --> 00:29:48,970 >> Na primjer, ako korisnik stvarno biti teško i vrste grozomornim 681 00:29:48,970 --> 00:29:51,220 Broj znakova po tipkovnica i hitovi Enter. 682 00:29:51,220 --> 00:29:54,580 Ako je broj znakova Jednostavno ne mogu stane u RAM-u za sve što luda 683 00:29:54,580 --> 00:29:57,820 Razlog, i dobili niz might vrlo dobro se vratiti null. 684 00:29:57,820 --> 00:30:01,080 >> Ili, ako vaš program sama radi puno o drugim stvarima, a tu je samo 685 00:30:01,080 --> 00:30:03,790 nije dovoljno memorije za string dobili uspjeti, to bi moglo završiti 686 00:30:03,790 --> 00:30:05,240 se vraća null. 687 00:30:05,240 --> 00:30:07,160 No, budimo precizniji kao što je to. 688 00:30:07,160 --> 00:30:10,280 Što je S je vrsta podataka Stvarno? 689 00:30:10,280 --> 00:30:11,610 Char star. 690 00:30:11,610 --> 00:30:14,560 >> Tako ispada sada možemo kore Vratit sloj null. 691 00:30:14,560 --> 00:30:17,500 Ispada, null je - da, očito poseban simbol. 692 00:30:17,500 --> 00:30:19,190 No što je to zapravo? 693 00:30:19,190 --> 00:30:25,220 Stvarno, null je samo simbol koji smo ljudi koriste za zastupanje nulu kao dobro. 694 00:30:25,220 --> 00:30:29,010 >> Dakle autorima C i računala općenitije, odlučio godina 695 00:30:29,010 --> 00:30:30,010 da, znate što. 696 00:30:30,010 --> 00:30:34,850 Zašto ne bismo osigurali da nijedan korisnik Podaci se nikada, nikada, nikada 697 00:30:34,850 --> 00:30:36,730 pohranjeni na nulu bye? 698 00:30:36,730 --> 00:30:39,610 U stvari, čak iu mom primjeru proizvoljne prije, nisam pokrenuti numeriranje 699 00:30:39,610 --> 00:30:40,390 bajtova na nulu. 700 00:30:40,390 --> 00:30:41,540 Počela sam na jedan. 701 00:30:41,540 --> 00:30:44,950 Zato što sam znao da su ljudi u svijetu su odlučili zadržati nulu 702 00:30:44,950 --> 00:30:47,970 oktet u svačije RAM nešto posebno. 703 00:30:47,970 --> 00:30:52,020 >> Razlog je, kada god želite signalizira da nešto pođe po zlu 704 00:30:52,020 --> 00:30:55,960 s obzirom na adrese, što se vratio null - inače poznat kao nula - 705 00:30:55,960 --> 00:30:59,410 i zato što znaju da ne postoji čitljiv podataka, na adresi nula, jasno 706 00:30:59,410 --> 00:31:00,400 to znači da je greška. 707 00:31:00,400 --> 00:31:04,080 I to je razlog zašto smo, po konvenciji, provjerite za ništave i povratak nečemu 708 00:31:04,080 --> 00:31:06,260 kao jedan u tim slučajevima. 709 00:31:06,260 --> 00:31:09,300 >> Dakle, ako smo pomicali prema dolje sada, to je samo onda neka pogreška provjere, samo u slučaju 710 00:31:09,300 --> 00:31:10,610 nešto je pošlo po zlu s [? jamčevinu?] 711 00:31:10,610 --> 00:31:13,470 zajedno i izađite iz programa po povratku ranije. 712 00:31:13,470 --> 00:31:19,030 Ova linija je sada mogao biti prepisivati jer, što znači što? 713 00:31:19,030 --> 00:31:23,155 Na lijevoj strani, daj mi još jedan pointer na niz znakova, a zovemo je t. 714 00:31:23,155 --> 00:31:26,935 Što sam ja pohranu unutar t, sa sjedištem Na ovoj jednoj liniji koda? 715 00:31:26,935 --> 00:31:30,950 716 00:31:30,950 --> 00:31:32,170 >> Ja sam pohranu mjesto. 717 00:31:32,170 --> 00:31:34,742 Naime Mjesto koji je u s.. 718 00:31:34,742 --> 00:31:39,000 Dakle, ako je korisnik upisali u bok, a da je prva pozdraviti dogodi završiti 719 00:31:39,000 --> 00:31:42,567 Ovdje se, dakle broj 123 je će se vratiti iz dobiti 720 00:31:42,567 --> 00:31:43,810 nanizati i biti pohranjeni - 721 00:31:43,810 --> 00:31:44,780 kao što smo ranije rekli - 722 00:31:44,780 --> 00:31:45,440 u sekundama. 723 00:31:45,440 --> 00:31:50,560 >> Kad sam sada izjavljujem drugi pokazivač char i to nazvati t, što je broj 724 00:31:50,560 --> 00:31:53,940 doslovno će završiti u t prema priči? 725 00:31:53,940 --> 00:31:55,420 Dakle 123. 726 00:31:55,420 --> 00:32:00,310 >> Dakle, tehnički i sada je i t se upućuju na točno 727 00:32:00,310 --> 00:32:02,410 Isti komade memorije. 728 00:32:02,410 --> 00:32:06,140 Dakle, primijetite ono što ću učiniti sada dokazati da je ovaj program je lud. 729 00:32:06,140 --> 00:32:08,820 >> Prvo ću tvrditi, s print f, kapitaliziranje 730 00:32:08,820 --> 00:32:10,080 Kopija nizu. 731 00:32:10,080 --> 00:32:11,660 Tada ću učiniti nešto provjere pogreške. 732 00:32:11,660 --> 00:32:12,160 Ja ću biti sigurni. 733 00:32:12,160 --> 00:32:16,710 Budimo sigurni da string t je na Barem veći od nule u duljini, 734 00:32:16,710 --> 00:32:19,190 tako da postoji neki lik postoji da zapravo kapitalizirati. 735 00:32:19,190 --> 00:32:22,840 >> A onda možda sjetiti ove iz prethodnih primjera. 736 00:32:22,840 --> 00:32:25,630 2 gornji - koja je u ctype.h datoteku. 737 00:32:25,630 --> 00:32:30,800 T nosač zero mi daje nulu karakter niza t. 738 00:32:30,800 --> 00:32:34,360 A 2 gornja te iste vrijednosti, od Tečaj, pretvara se u velika slova. 739 00:32:34,360 --> 00:32:38,230 >> Dakle, intuitivno, to istaknuo liniju koda je kapitaliziranje prvi 740 00:32:38,230 --> 00:32:40,250 Pismo ut. 741 00:32:40,250 --> 00:32:44,485 Ali to nije kapitaliziranje, intuitivno, prvo slovo u sekundama. 742 00:32:44,485 --> 00:32:48,130 No ako ste mislili unaprijed, što sam ja da vide kad sam pokrenuti ovaj program 743 00:32:48,130 --> 00:32:54,220 i ispisati i izvornika, s i tzv kopiranje, t? 744 00:32:54,220 --> 00:32:55,350 >> Oni zapravo će biti isti. 745 00:32:55,350 --> 00:32:56,600 I zašto su oni će biti isti? 746 00:32:56,600 --> 00:32:58,970 747 00:32:58,970 --> 00:33:01,020 Oni su oboje upućuju na točno istu stvar. 748 00:33:01,020 --> 00:33:01,610 Tako ćemo učiniti. 749 00:33:01,610 --> 00:33:03,160 >> Napravite kopije nulu. 750 00:33:03,160 --> 00:33:04,070 Ona izrađuje OK. 751 00:33:04,070 --> 00:33:06,500 Dopustite mi da vodim kopiranja nulu. 752 00:33:06,500 --> 00:33:10,110 Dopustite mi upisati nešto poput halo u sve su mala slova onda pritisnite Enter. 753 00:33:10,110 --> 00:33:16,520 I ona tvrdi da su i izvornik i i kopiranje su doista jednaki. 754 00:33:16,520 --> 00:33:17,920 >> Dakle, ono što se doista dogodilo ovdje? 755 00:33:17,920 --> 00:33:20,100 Dopustite mi da ponovno iscrtavanje ovu sliku jednostavno ispričati priču u 756 00:33:20,100 --> 00:33:21,340 malo drugačiji način. 757 00:33:21,340 --> 00:33:26,060 Ono što se zapravo događa ispod napa kad sam proglasiti nešto poput 758 00:33:26,060 --> 00:33:30,410 char početak s, ili string s, Ja sam uzimajući pokazivač - 759 00:33:30,410 --> 00:33:33,090 koji se dogoditi da se četiri bajta u CS50 aparata 760 00:33:33,090 --> 00:33:34,410 i puno računala. 761 00:33:34,410 --> 00:33:36,008 A ja ću nazvati tu s.. 762 00:33:36,008 --> 00:33:39,810 A to trenutno ima neka nepoznata vrijednost. 763 00:33:39,810 --> 00:33:43,900 >> Kada deklarirati varijablu, osim ako Stavite se vrijednost postoji, tko 764 00:33:43,900 --> 00:33:44,570 zna što je tamo. 765 00:33:44,570 --> 00:33:48,110 To bi mogao biti neki slučajni slijed bita od prethodne izvedbe. 766 00:33:48,110 --> 00:33:52,490 Dakle, kada sam, u mojoj liniji koda ništa dobiti string, a zatim pohraniti povratak 767 00:33:52,490 --> 00:33:54,800 vrijednost u sekundama dobili niz nekako - 768 00:33:54,800 --> 00:33:58,520 a mi ćemo na kraju guliti natrag kako bi niz djela, nekako izdvaja 769 00:33:58,520 --> 00:34:00,480 Niz koji je vjerojatno izgleda malo kao što je ovaj. 770 00:34:00,480 --> 00:34:05,390 H-E-L-L-O, backslash nula. 771 00:34:05,390 --> 00:34:09,510 >> Pretpostavimo da je to adresa 123 samo prva dosljednost. 772 00:34:09,510 --> 00:34:13,000 Tako se vraća string, u istaknuta linija postoji, ona se vraća 773 00:34:13,000 --> 00:34:15,000 Broj mi je rekao, 123. 774 00:34:15,000 --> 00:34:17,420 Dakle, što se doista događa unutar je ovdje? 775 00:34:17,420 --> 00:34:26,590 >> Pa, što se doista događa Unutrašnjost je s 123. 776 00:34:26,590 --> 00:34:29,250 Ali iskreno, ja sam uzimajući malo zbunjena svim tim adresama, 777 00:34:29,250 --> 00:34:30,320 sve ove slučajni brojevi. 778 00:34:30,320 --> 00:34:32,290 123, 124, 127. 779 00:34:32,290 --> 00:34:34,570 Dakle, neka je zapravo pojednostavljenje svijet malo. 780 00:34:34,570 --> 00:34:38,800 >> Kada govorimo o pokazivače, iskreno, da nama ljudima, tko je pakao brine gdje je 781 00:34:38,800 --> 00:34:39,870 stvari su se u sjećanju? 782 00:34:39,870 --> 00:34:41,080 To je posve proizvoljna. 783 00:34:41,080 --> 00:34:43,370 To će ovisiti o tome koliko RAM-a ima user. 784 00:34:43,370 --> 00:34:46,590 To će ovisiti o tome kada u danu pokrenete program, možda, i 785 00:34:46,590 --> 00:34:48,250 ono ulazna vam daje upute. 786 00:34:48,250 --> 00:34:50,060 Mi smo stan na nebitnim detaljima. 787 00:34:50,060 --> 00:34:54,230 >> Tako ćemo sažetak daleko i reći da, kada pokrenuti liniju koda kao što je ovaj, 788 00:34:54,230 --> 00:34:57,320 char je star dobiva povratak Vrijednost dobili niz. 789 00:34:57,320 --> 00:35:02,720 Zašto ne bismo umjesto toga samo privući ono što smo zadržati poziv pokazivač kao da ga je 790 00:35:02,720 --> 00:35:04,140 pokazujući na nešto? 791 00:35:04,140 --> 00:35:07,000 Dakle, ja tvrdim da je do sada je pokazivač - 792 00:35:07,000 --> 00:35:08,480 ispod poklopca motora je adresa. 793 00:35:08,480 --> 00:35:11,330 No, to je samo ukazuje na prvi bajt u 794 00:35:11,330 --> 00:35:12,780 niz koji je vraćen. 795 00:35:12,780 --> 00:35:16,710 >> Ako ja sada vratiti u kod ovdje, ono što se događa na ovoj liniji? 796 00:35:16,710 --> 00:35:20,020 Pa, u ovom označene linije sada, Ja sam očito jedan proglašenja 797 00:35:20,020 --> 00:35:21,070 varijabla zove t. 798 00:35:21,070 --> 00:35:25,700 Ali to je također pointer, pa ću ga privući što, u teoriji, točnije 799 00:35:25,700 --> 00:35:26,710 iste veličine kutije. 800 00:35:26,710 --> 00:35:28,160 I ja ću ga nazvati t. 801 00:35:28,160 --> 00:35:33,500 >> I sad ako se vratimo na koda ponovno, kad sam pohraniti i unutar t, 802 00:35:33,500 --> 00:35:36,920 ono što sam ja tehnički stavljajući unutar t? 803 00:35:36,920 --> 00:35:39,350 Pa tehnički, to je broj 123. 804 00:35:39,350 --> 00:35:42,270 Pa stvarno sam trebao pisati broj 123 tamo. 805 00:35:42,270 --> 00:35:43,900 Ali neka je to viša razina. 806 00:35:43,900 --> 00:35:48,090 t, ako je samo pokazivač, intuitivno, je upravo to. 807 00:35:48,090 --> 00:35:49,800 To je sve što je što pohranjene tamo. 808 00:35:49,800 --> 00:35:54,970 >> Tako sada u posljednjih zanimljive linije koda, kada sam zapravo ići o 809 00:35:54,970 --> 00:36:00,680 kapitaliziranje nula karakter ut, što se događa? 810 00:36:00,680 --> 00:36:06,310 Pa, t nosač nula sada pokazuje na ono lik, valjda? 811 00:36:06,310 --> 00:36:07,460 >> To ukazuje na h. 812 00:36:07,460 --> 00:36:08,870 Zbog t nosač nuli - 813 00:36:08,870 --> 00:36:12,490 Podsjetimo, ovo je stara sintakse. t nosač zero samo znači, ako je string t, t 814 00:36:12,490 --> 00:36:15,590 Nosač nula znači dobivanje nuli lik u toj snazi. 815 00:36:15,590 --> 00:36:18,650 Dakle, što to zapravo znači je otići na ovom polju - 816 00:36:18,650 --> 00:36:21,520 i da, to bi moglo biti 123, to bi moglo biti 124. 817 00:36:21,520 --> 00:36:22,790 Ali to je sve relativno, sjećam. 818 00:36:22,790 --> 00:36:25,640 Kad govorimo o niz, imamo Prednost pričaju 819 00:36:25,640 --> 00:36:27,000 relativne indeksi. 820 00:36:27,000 --> 00:36:31,120 >> I tako sada možemo samo pretpostavljati da je nula t nosač je h. 821 00:36:31,120 --> 00:36:35,090 Dakle, ako ja zovem 2 gornja na njega, kako je to Stvarno se radi kapitaliziranje 822 00:36:35,090 --> 00:36:38,290 h mala u velika slova H. Ali, naravno, ono što je e? 823 00:36:38,290 --> 00:36:41,010 To ukazuje na isto prokleto nizu. 824 00:36:41,010 --> 00:36:44,200 >> Dakle, ovo je sve što je bio događa u ovom kodu dosad. 825 00:36:44,200 --> 00:36:45,960 Pa što je onda dublji smisao? 826 00:36:45,960 --> 00:36:48,300 Kako ćemo riješiti ta dva problema? 827 00:36:48,300 --> 00:36:50,870 Kako ćemo usporediti s aktualnim žice? 828 00:36:50,870 --> 00:36:53,720 >> Pa intuitivno, kako bi se idete o uspoređujući dva 829 00:36:53,720 --> 00:36:55,090 žice za istinske ravnopravnosti? 830 00:36:55,090 --> 00:36:58,920 831 00:36:58,920 --> 00:37:00,750 >> Što to znači, ako dvije žice su jednaki? 832 00:37:00,750 --> 00:37:04,330 Očito se ne da njihove adrese Jednaki u sjećanju, jer to je niska 833 00:37:04,330 --> 00:37:06,590 Razina provedbe detalja. 834 00:37:06,590 --> 00:37:08,360 Svi znakovi su isti. 835 00:37:08,360 --> 00:37:12,810 Pa neka mi predlažemo, a neka me upoznati u verziji jedne od compare.c 836 00:37:12,810 --> 00:37:14,970 ovdje, pa usporedite-1.c. 837 00:37:14,970 --> 00:37:19,590 >> Dopustite mi predlažemo da smo još uvijek dobiti Pokazivač pozvao je i dućan u to 838 00:37:19,590 --> 00:37:20,610 vrati vrijednost dobili niz. 839 00:37:20,610 --> 00:37:21,750 Idemo napraviti istu stvar sa t. 840 00:37:21,750 --> 00:37:23,230 Dakle, nitko od koda je drugačiji. 841 00:37:23,230 --> 00:37:25,420 Ja ću dodati malo više pogrešaka provjeru sada. 842 00:37:25,420 --> 00:37:29,390 Dakle, sada kad smo vrsta piling natrag ovaj slojeva u CS50 onoga string 843 00:37:29,390 --> 00:37:33,520 zapravo, moramo biti više analni o tome da ne zlorabe 844 00:37:33,520 --> 00:37:35,330 nevažeći vrijednosti kao što su null. 845 00:37:35,330 --> 00:37:36,440 >> Dakle, samo ću provjeriti. 846 00:37:36,440 --> 00:37:41,490 Ako je ne jednak null, a ne t jednako null, to znači da smo OK. 847 00:37:41,490 --> 00:37:44,460 Get string nije zeznuti dobivanje bilo koji od tih nizova. 848 00:37:44,460 --> 00:37:51,270 A možda možete pogoditi sada, ono što nema STR CMP prilici učiniti? 849 00:37:51,270 --> 00:37:52,000 Gudački usporedbu. 850 00:37:52,000 --> 00:37:55,470 >> Dakle, ako ste program u java prije, ovo je kao na jednak način u 851 00:37:55,470 --> 00:37:56,490 string klasa. 852 00:37:56,490 --> 00:37:57,890 No, za one od vas koji nisu programirati prije, 853 00:37:57,890 --> 00:37:59,320 ovo je samo c funkcija. 854 00:37:59,320 --> 00:38:02,180 To se događa da se u file zove string.h. 855 00:38:02,180 --> 00:38:03,830 To je mjesto gdje je proglašena. 856 00:38:03,830 --> 00:38:05,110 >> I string usporedbu - 857 00:38:05,110 --> 00:38:07,530 Ja zapravo zaboraviti njegove uporabe, Ali pustimo to. 858 00:38:07,530 --> 00:38:10,470 Podsjetimo da možemo napraviti Čovjek, promiješajte usporedbu. 859 00:38:10,470 --> 00:38:12,590 A to će dovesti do Linux programera za upotrebu. 860 00:38:12,590 --> 00:38:14,060 I to je, iskreno, pomalo zagonetno. 861 00:38:14,060 --> 00:38:15,270 Ali vidim da se ovdje, da. 862 00:38:15,270 --> 00:38:17,570 Moram se uključiti string.h. 863 00:38:17,570 --> 00:38:20,590 >> I ovdje piše pod opisom " string usporediti funkcija uspoređuje 864 00:38:20,590 --> 00:38:24,560 dvije žice S1 i S2. "I S1 i S2 su očito dvije 865 00:38:24,560 --> 00:38:26,120 Argumenti prošlo u. 866 00:38:26,120 --> 00:38:28,650 Ja stvarno ne sjećam što const, ali sada primjetiti - 867 00:38:28,650 --> 00:38:31,480 a možda ste to već vidjeli kad je što ste koristiti stranice man ako 868 00:38:31,480 --> 00:38:32,390 imati sve - 869 00:38:32,390 --> 00:38:36,220 da je zvijezda znak je samo sinonim s nizom. 870 00:38:36,220 --> 00:38:40,440 >> Dakle, to uspoređuje dvije žice, S1 i S2, te ga vraća cijeli broj manje 871 00:38:40,440 --> 00:38:44,930 od ili jednak ili veći od nule ako S1 se nalazi, odnosno, da se 872 00:38:44,930 --> 00:38:47,450 manji od ili odgovaraju ili biti veća od S2. 873 00:38:47,450 --> 00:38:51,220 To je samo vrlo složen način govoreći: da string usporedbu vraća 874 00:38:51,220 --> 00:38:55,760 nula ako dvije žice su intuitivno identični, znak za 875 00:38:55,760 --> 00:38:57,120 znak za karaktera. 876 00:38:57,120 --> 00:38:59,970 >> To vraća negativan broj ako je e, po abecednom redu, trebalo 877 00:38:59,970 --> 00:39:01,010 doći prije t. 878 00:39:01,010 --> 00:39:05,300 Ili vraća pozitivan broj ako e je trebao doći nakon t 879 00:39:05,300 --> 00:39:06,170 abecedi. 880 00:39:06,170 --> 00:39:08,360 Dakle, s ovom jednostavnom funkcijom, mogli li, primjerice, sortirati 881 00:39:08,360 --> 00:39:09,770 cijela hrpa riječi? 882 00:39:09,770 --> 00:39:13,984 >> Pa u ovoj novoj verziji, idem ići naprijed i učiniti compare1. 883 00:39:13,984 --> 00:39:15,750 Dot slash usporediti jedan. 884 00:39:15,750 --> 00:39:18,030 Ja ću upisati hello na svim malim slovima. 885 00:39:18,030 --> 00:39:20,300 Ja ću upisati Pozdrav u svim malim slovima ponovno. 886 00:39:20,300 --> 00:39:23,340 I srećom sada shvaća Ja upisali istu stvar. 887 00:39:23,340 --> 00:39:27,520 >> U međuvremenu, ako sam upisati hello na manji slučaj i HELLO u gornjem slučaju i 888 00:39:27,520 --> 00:39:29,710 usporediti ih, ja upisali različite stvari. 889 00:39:29,710 --> 00:39:32,530 Jer ne samo da su adrese drugačija, ali mi usporedbe 890 00:39:32,530 --> 00:39:35,350 različiti likovi opet i opet. 891 00:39:35,350 --> 00:39:37,320 >> Pa idemo i popraviti jedan Drugi problem je sada. 892 00:39:37,320 --> 00:39:41,590 Dopustite mi da otvaraju verziju jednog od primjerak, koji se sada bavi 893 00:39:41,590 --> 00:39:42,900 ovo pitanje na sljedeći način. 894 00:39:42,900 --> 00:39:45,650 A ova će izgledati malo složeniji. 895 00:39:45,650 --> 00:39:49,320 Ali ako mislite o tome što smo problema potrebno riješiti, nadam se da će ovo biti 896 00:39:49,320 --> 00:39:51,870 jasno je u samo trenutak sada. 897 00:39:51,870 --> 00:39:57,280 >> Dakle, ovaj prvi redak, znak start t, u Laički rečeno može netko predložiti 898 00:39:57,280 --> 00:39:59,450 što ovaj redak ovdje znači? 899 00:39:59,450 --> 00:40:01,050 Char star t, što je to radiš? 900 00:40:01,050 --> 00:40:06,660 901 00:40:06,660 --> 00:40:07,210 >> Dobro. 902 00:40:07,210 --> 00:40:09,500 Stvaranje pokazivač za neke mjesto u memoriji. 903 00:40:09,500 --> 00:40:10,930 I neka mi ga poboljšati malo. 904 00:40:10,930 --> 00:40:17,180 Objavite varijable koje će pohraniti adresa neki znak u memoriju, jednostavno 905 00:40:17,180 --> 00:40:18,480 da se malo više pravilno. 906 00:40:18,480 --> 00:40:21,210 >> U redu, tako da sada na desnoj strani, sam nikada nije vidio jednu od tih funkcija 907 00:40:21,210 --> 00:40:22,660 prije, malloc. 908 00:40:22,660 --> 00:40:26,980 No, što bi to značilo? 909 00:40:26,980 --> 00:40:28,050 Raspodjela memorije. 910 00:40:28,050 --> 00:40:29,410 Dodjela memorije. 911 00:40:29,410 --> 00:40:33,050 >> Tako ispada, do sada, mi su zapravo i nije imala snažan način 912 00:40:33,050 --> 00:40:36,210 traži operativni sustav, dajte mi neke memorije. 913 00:40:36,210 --> 00:40:39,980 Umjesto toga, sada imamo funkciju pod nazivom malloc koji radi upravo to. 914 00:40:39,980 --> 00:40:42,960 Iako je to malo odvraćanje pozornosti upravo sada, primijetiti da je u 915 00:40:42,960 --> 00:40:46,200 između dva zagradama je Upravo će to biti broj. 916 00:40:46,200 --> 00:40:48,510 Gdje sam upisali u pitanju ocjene može biti broj. 917 00:40:48,510 --> 00:40:51,020 >> A taj broj znači, daj mi 10 bajtova. 918 00:40:51,020 --> 00:40:52,320 Daj mi 20 bajtova. 919 00:40:52,320 --> 00:40:53,820 Dajte mi 100 bajtova. 920 00:40:53,820 --> 00:40:56,500 I malloc će učiniti sve da pitati operativni sustav - 921 00:40:56,500 --> 00:40:57,630 Linux, u ovom slučaju - 922 00:40:57,630 --> 00:40:59,630 hej, njihovi su 100 bajtova RAM na raspolaganju? 923 00:40:59,630 --> 00:41:04,320 Ako je tako, vrati one bajtova mi je vraća adresu od čega u 924 00:41:04,320 --> 00:41:06,610 ti bajtova, možda? 925 00:41:06,610 --> 00:41:07,610 Vrlo prvi. 926 00:41:07,610 --> 00:41:10,460 >> Tako i ovdje - i to je dominantna u C, svaki put kad ste 927 00:41:10,460 --> 00:41:11,680 bave adrese? 928 00:41:11,680 --> 00:41:15,830 Vi ste gotovo uvijek bave Prvi takav adresa, bez obzira koliko velika 929 00:41:15,830 --> 00:41:19,490 komad memorije da su se vrati, da se tako izrazim. 930 00:41:19,490 --> 00:41:20,880 >> Tako ćemo roniti ovdje. 931 00:41:20,880 --> 00:41:23,940 Ja sam pokušava izdvojiti kako mnogi bajtova, točno? 932 00:41:23,940 --> 00:41:24,080 Pa. 933 00:41:24,080 --> 00:41:26,090 Gudački duljina s - neka je napraviti konkretan primjer. 934 00:41:26,090 --> 00:41:30,700 Ako je s hello, H-E-L-L-O, što je string duljine s, očito? 935 00:41:30,700 --> 00:41:32,010 Dakle, to je pet. 936 00:41:32,010 --> 00:41:34,590 Ali ja radim plus jedan na to, zašto? 937 00:41:34,590 --> 00:41:37,700 Zašto želim šest bajtova umjesto pet? 938 00:41:37,700 --> 00:41:38,790 Null karakter. 939 00:41:38,790 --> 00:41:41,210 >> Ne želim otići s ovog Posebna null karakter. 940 00:41:41,210 --> 00:41:45,160 Jer ako sam napraviti kopiju Pozdrav i Upravo to H-E-L-L-O, ali ja ne stavi 941 00:41:45,160 --> 00:41:50,160 da je posebni znak, računalo ne bi mogli imati, slučajno, obrnute kose 942 00:41:50,160 --> 00:41:51,730 nuli tu za mene. 943 00:41:51,730 --> 00:41:55,570 I tako, ako ja pokušavam shvatiti duljina kopija, ja mislim da bi moglo 944 00:41:55,570 --> 00:41:59,360 to je 20 znakova, odnosno milijun znakova ako sam nikada nije dogodilo 945 00:41:59,360 --> 00:42:01,050 pogoditi backslash nulu. 946 00:42:01,050 --> 00:42:05,780 >> Dakle, trebamo šest bajtova za pohranu H-E-L-L-O, backslash nula. 947 00:42:05,780 --> 00:42:07,870 A onda je to samo da se super anal. 948 00:42:07,870 --> 00:42:10,700 Pretpostavimo da sam zaboraviti ono veličina char je. 949 00:42:10,700 --> 00:42:12,020 Mi držati govore da je jedan bajt. 950 00:42:12,020 --> 00:42:12,860 I to obično biva. 951 00:42:12,860 --> 00:42:15,425 U teoriji, to bi moglo biti nešto različite, na drugom Mac ili 952 00:42:15,425 --> 00:42:16,250 različita računala. 953 00:42:16,250 --> 00:42:19,650 >> Tako ispada da postoji taj operator zove sizeof da ako prođe ga je 954 00:42:19,650 --> 00:42:22,680 Ime tipu podataka - kao što je char ili int, float ili - 955 00:42:22,680 --> 00:42:26,930 to će vam reći, dinamično, koliko je bajtova char zauzima na to 956 00:42:26,930 --> 00:42:28,090 određenom računalu. 957 00:42:28,090 --> 00:42:31,360 >> Dakle, ovo je praktički samo kao što je rekao jedan puta ili 958 00:42:31,360 --> 00:42:32,440 puta baš ništa. 959 00:42:32,440 --> 00:42:36,340 Ali ja sam to samo da bi se super analni, da je samo u slučaju znak razlikuje 960 00:42:36,340 --> 00:42:40,610 na vašem računalu u odnosu rudnika, na taj način matematike uvijek ide na check out. 961 00:42:40,610 --> 00:42:43,720 >> Konačno, ovdje dolje sam provjeriti null, što je uvijek dobra praksa - opet, 962 00:42:43,720 --> 00:42:44,920 svaki put kad imamo posla s pokazivačima. 963 00:42:44,920 --> 00:42:47,520 Ako malloc nije bio u mogućnosti dati mi šest pozdravili - što je 964 00:42:47,520 --> 00:42:49,210 vjerojatno, ali samo u slučaju - 965 00:42:49,210 --> 00:42:50,730 jedan odmah vratiti. 966 00:42:50,730 --> 00:42:53,290 A sada, samo naprijed i kopirajte string kako slijedi. 967 00:42:53,290 --> 00:42:57,240 A to je poznato sintakse, doduše u drugoj ulozi. 968 00:42:57,240 --> 00:43:01,210 >> Ja ću ići naprijed i dobiti niz duljina-ih i pohraniti ga u n. 969 00:43:01,210 --> 00:43:06,620 I onda ću ponoviti na jednak i nula do i uključujući N, 970 00:43:06,620 --> 00:43:08,410 veća od ili jednaka. 971 00:43:08,410 --> 00:43:13,540 Tako da na svakoj iteraciji, stavim ith karakter s U-ti 972 00:43:13,540 --> 00:43:15,380 karakter t. 973 00:43:15,380 --> 00:43:18,190 >> Dakle, ono što se zapravo događa ispod napa ovdje? 974 00:43:18,190 --> 00:43:22,140 Pa ako je to, na primjer, je s - 975 00:43:22,140 --> 00:43:26,400 i sam utipkao riječ H-E-L-L-O a tu je obrnuta kosa crta nula. 976 00:43:26,400 --> 00:43:29,020 I opet, ovo je ukazujući ovdje. 977 00:43:29,020 --> 00:43:30,830 I ovdje je t. 978 00:43:30,830 --> 00:43:34,860 >> A to se pokazuje sada kopija sjećanja, zar ne? 979 00:43:34,860 --> 00:43:37,340 Malloc mi je dao cijelo komad memorije. 980 00:43:37,340 --> 00:43:41,440 Ne znam što je inicijalno u bilo kojem od tih mjesta. 981 00:43:41,440 --> 00:43:44,340 Dakle, ja ću misliti na njih kao cijela hrpa upitnicima. 982 00:43:44,340 --> 00:43:50,190 >> No, čim sam početak petlje od nule na gore kroz duljine s, t 983 00:43:50,190 --> 00:43:52,790 Nosač nula i t nosač 1 - 984 00:43:52,790 --> 00:43:55,080 i ja ću staviti ovo sada na nadzemne - 985 00:43:55,080 --> 00:44:04,190 t nosač nula i nosač s nula znači da ću biti kopiranje 986 00:44:04,190 --> 00:44:09,875 iterativno h ovdje, E-L-L-O. Plus, jer sam plus 987 00:44:09,875 --> 00:44:12,370 1, backslash nuli. 988 00:44:12,370 --> 00:44:19,060 >> Tako sada u slučaju Usporedba-1.c, Na kraju, ako sam ispis 989 00:44:19,060 --> 00:44:24,760 kapitalizacija t, trebali bismo vidjeti da je nepromijenjeno. 990 00:44:24,760 --> 00:44:26,090 Dopustite mi sada ići naprijed i učiniti. 991 00:44:26,090 --> 00:44:28,630 Tako bi copy1. 992 00:44:28,630 --> 00:44:30,860 Dot slash copy1. 993 00:44:30,860 --> 00:44:33,670 Ja ću upisati Pozdrav, Enter. 994 00:44:33,670 --> 00:44:37,430 A sada primjetiti, samo kopiju je kapitaliziraju. 995 00:44:37,430 --> 00:44:40,890 Budući da sam doista imaju dva komadi memorije. 996 00:44:40,890 --> 00:44:44,390 >> Nažalost, možete napraviti neke prilično loše i prilično opasne stvari ovdje. 997 00:44:44,390 --> 00:44:49,290 Dopustite mi podići primjer ovdje sada, koji nam daje primjer nekoliko 998 00:44:49,290 --> 00:44:51,540 različite linije. 999 00:44:51,540 --> 00:44:56,040 Dakle, samo intuitivno ovdje, prva linija koda, int x star, je proglašenje 1000 00:44:56,040 --> 00:44:57,340 varijabla zove x. 1001 00:44:57,340 --> 00:44:58,810 A što je tip podataka te varijable? 1002 00:44:58,810 --> 00:45:01,820 1003 00:45:01,820 --> 00:45:04,290 Koji je tip podataka te varijable? 1004 00:45:04,290 --> 00:45:06,980 To nije roman u nastavcima. 1005 00:45:06,980 --> 00:45:08,350 >> Je tip podataka int zvijezda. 1006 00:45:08,350 --> 00:45:12,600 Dakle, što to znači? x volje pohraniti adresu int. 1007 00:45:12,600 --> 00:45:13,520 Jednostavan je to. 1008 00:45:13,520 --> 00:45:16,220 Y će se pohraniti adresa int. 1009 00:45:16,220 --> 00:45:18,390 Što je treći redak koda radiš tu? 1010 00:45:18,390 --> 00:45:21,850 To je dodjelom koliko bajtova, najvjerojatnije? 1011 00:45:21,850 --> 00:45:22,350 Četiri. 1012 00:45:22,350 --> 00:45:25,460 Zbog veličine int je uglavnom četiri, malloc od četiri daje 1013 00:45:25,460 --> 00:45:29,950 vratim adresu sitna memorije, prva čijih je bajtova 1014 00:45:29,950 --> 00:45:32,110 pohranjeni sada u X. 1015 00:45:32,110 --> 00:45:34,410 >> Sada idemo malo brže. 1016 00:45:34,410 --> 00:45:35,760 Star x znači što? 1017 00:45:35,760 --> 00:45:38,480 1018 00:45:38,480 --> 00:45:42,590 To znači ići na tu adresu i staviti ono broj ima? 1019 00:45:42,590 --> 00:45:43,870 Stavio broj 42 tamo. 1020 00:45:43,870 --> 00:45:47,590 Star y znači ići na ono što je na y i stavio broj 13 tamo. 1021 00:45:47,590 --> 00:45:48,600 >> Ali čekaj malo. 1022 00:45:48,600 --> 00:45:51,640 Što je u y u ovom trenutku? 1023 00:45:51,640 --> 00:45:54,950 Ono što je adresa y pohranjuju? 1024 00:45:54,950 --> 00:45:55,770 Mi ne znamo, zar ne? 1025 00:45:55,770 --> 00:45:59,230 Mi nikada nisu odjednom koristiti raspored Operator uključuje y. 1026 00:45:59,230 --> 00:46:03,370 Dakle, imat kad su objavljene na drugoj liniji Kod je samo neko smeće vrijednost, big 1027 00:46:03,370 --> 00:46:04,760 Upitnik se tako izrazim. 1028 00:46:04,760 --> 00:46:07,230 To bi mogao biti pokazuje slučajno na što u memoriji, koji 1029 00:46:07,230 --> 00:46:08,340 uglavnom loše. 1030 00:46:08,340 --> 00:46:13,540 >> Dakle, čim smo pogodak tu liniju postoji, Zvijezda y jednako je 13, nešto loše, 1031 00:46:13,540 --> 00:46:17,220 nešto jako loše se o se dogoditi da Binky. 1032 00:46:17,220 --> 00:46:25,810 Tako ćemo vidjeti što će se završiti događa se ovdje, u ovom Binky minutu 1033 00:46:25,810 --> 00:46:26,200 ili tako izgleda. 1034 00:46:26,200 --> 00:46:26,490 >> [Video reprodukciju] 1035 00:46:26,490 --> 00:46:26,745 >> -Hej, Binky. 1036 00:46:26,745 --> 00:46:27,000 Probudite se. 1037 00:46:27,000 --> 00:46:29,296 Vrijeme je za zabavu pokazivač. 1038 00:46:29,296 --> 00:46:30,680 >> -Što je to? 1039 00:46:30,680 --> 00:46:31,980 Doznajte više o pokazivače? 1040 00:46:31,980 --> 00:46:34,010 Oh, goodie. 1041 00:46:34,010 --> 00:46:37,220 >> -Pa, za početak, mislim da smo Trebat će par savjeta. 1042 00:46:37,220 --> 00:46:37,930 >> -U redu. 1043 00:46:37,930 --> 00:46:41,650 Ovaj kod izdvaja dva pokazivače što može ukazivati ​​na cijelih brojeva. 1044 00:46:41,650 --> 00:46:43,760 >> -U redu, dobro, vidim dva naputke. 1045 00:46:43,760 --> 00:46:45,850 Ali, oni ne činiti se biti ukazujući na ništa. 1046 00:46:45,850 --> 00:46:46,490 >> -To je točno. 1047 00:46:46,490 --> 00:46:48,630 U početku, to ne upućuje ukazuju na ništa. 1048 00:46:48,630 --> 00:46:51,700 Ono što oni ukazuju na nazivaju pointees, te ih se postava 1049 00:46:51,700 --> 00:46:52,850 odvojeni korak. 1050 00:46:52,850 --> 00:46:53,740 >> -Oh, desno, desno. 1051 00:46:53,740 --> 00:46:54,500 Znao sam da je. 1052 00:46:54,500 --> 00:46:56,270 U pointees su odvojeni. 1053 00:46:56,270 --> 00:46:58,553 Pa kako se izdvojiti pointee? 1054 00:46:58,553 --> 00:46:59,480 >> -U redu. 1055 00:46:59,480 --> 00:47:03,707 Pa, ovaj broj dodjeljuje novi prirodni brojevi pointee, a taj dio postavlja x 1056 00:47:03,707 --> 00:47:05,520 ukazati na njega. 1057 00:47:05,520 --> 00:47:06,760 >> -Hej, da izgleda bolje. 1058 00:47:06,760 --> 00:47:08,520 Tako bi se nešto učiniti. 1059 00:47:08,520 --> 00:47:09,530 >> -U redu. 1060 00:47:09,530 --> 00:47:14,110 Ja ću dereference x pokazivač za pohranu broj 42 u svoj pointee. 1061 00:47:14,110 --> 00:47:17,660 Za ovaj trik, ja ću morati svoju magiju štapić od dereferencing. 1062 00:47:17,660 --> 00:47:20,695 >> -Tvoj čarobni štapić od dereferencing? 1063 00:47:20,695 --> 00:47:22,632 Uh, to je super. 1064 00:47:22,632 --> 00:47:24,620 >> -To je ono što kod izgleda. 1065 00:47:24,620 --> 00:47:27,526 Ja ću samo postaviti broj, i - 1066 00:47:27,526 --> 00:47:28,250 >> -Hej, gledaj. 1067 00:47:28,250 --> 00:47:29,680 Tu ide. 1068 00:47:29,680 --> 00:47:34,520 Dakle, radi se o dereference x slijedi Strelica za pristup svoje pointee. 1069 00:47:34,520 --> 00:47:36,690 U tom slučaju, za pohranu 42 unutra. 1070 00:47:36,690 --> 00:47:40,890 Hej, pokušajte ga koristiti za spremanje broja 13 kroz drugi pokazivač, y. 1071 00:47:40,890 --> 00:47:42,125 >> -U redu. 1072 00:47:42,125 --> 00:47:46,810 Ja ću ići preko ovdje da y i dobiti broj 13 postavili. 1073 00:47:46,810 --> 00:47:50,890 A onda se na štapić za dereferencing i samo - 1074 00:47:50,890 --> 00:47:52,430 stani! 1075 00:47:52,430 --> 00:47:53,030 >> -Oh, hej. 1076 00:47:53,030 --> 00:47:54,610 To nije posao. 1077 00:47:54,610 --> 00:47:58,200 Recimo, Binky, ne mislim dereferencing y je dobra ideja, 1078 00:47:58,200 --> 00:48:01,370 zbog postavljanja pointee je zasebna korak. 1079 00:48:01,370 --> 00:48:03,460 A ja ne vjerujem da ćemo ikada to učinio. 1080 00:48:03,460 --> 00:48:03,810 >> -Hmm. 1081 00:48:03,810 --> 00:48:05,160 Dobro pitanje. 1082 00:48:05,160 --> 00:48:07,410 >> -Da, mi izdvojila pokazivača y. 1083 00:48:07,410 --> 00:48:10,045 Ali mi nikada ga postaviti na ukazuju na pointee. 1084 00:48:10,045 --> 00:48:10,490 >> -Hmm. 1085 00:48:10,490 --> 00:48:12,170 Vrlo pažljiv. 1086 00:48:12,170 --> 00:48:13,790 >> -Hej, vi ste u potrazi dobro tamo, Binky. 1087 00:48:13,790 --> 00:48:16,920 Može li se to popraviti, tako da je y boda na isto pointee kao X? 1088 00:48:16,920 --> 00:48:17,810 >> -Naravno. 1089 00:48:17,810 --> 00:48:20,300 Ja ću koristiti svoj čarobni štapić od pokazivač zadatak. 1090 00:48:20,300 --> 00:48:22,240 >> -Je li to će biti Problem kao prije? 1091 00:48:22,240 --> 00:48:22,665 >> -Ne. 1092 00:48:22,665 --> 00:48:24,300 To ne dirajte pointees. 1093 00:48:24,300 --> 00:48:27,880 To samo mijenja jedan pokazivač ukazati na istu stvar kao i drugi. 1094 00:48:27,880 --> 00:48:28,970 >> -Oh, vidim. 1095 00:48:28,970 --> 00:48:31,730 Sada imat ukazuje na istom mjestu kao i x.. 1096 00:48:31,730 --> 00:48:32,450 Dakle, pričekajte. 1097 00:48:32,450 --> 00:48:33,490 Sada y je fiksna. 1098 00:48:33,490 --> 00:48:34,630 Ima pointee. 1099 00:48:34,630 --> 00:48:36,520 Tako možete isprobati štapić od dereferencing opet 1100 00:48:36,520 --> 00:48:39,200 poslati 13 više. 1101 00:48:39,200 --> 00:48:39,840 >> -U redu. 1102 00:48:39,840 --> 00:48:41,570 Ovdje ide. 1103 00:48:41,570 --> 00:48:42,870 >> -Hej, vidi ovo. 1104 00:48:42,870 --> 00:48:44,320 Sada dereferencing radove na y. 1105 00:48:44,320 --> 00:48:47,020 I zato što su pokazivače dijeljenja da je jedan pointee, oni 1106 00:48:47,020 --> 00:48:48,585 i vidjeti 13. 1107 00:48:48,585 --> 00:48:49,040 >> -Da. 1108 00:48:49,040 --> 00:48:49,670 Dijeljenje. 1109 00:48:49,670 --> 00:48:50,380 Što god. 1110 00:48:50,380 --> 00:48:52,290 Tako ćemo prebaciti mjesta sada? 1111 00:48:52,290 --> 00:48:52,970 >> -O, gledaj. 1112 00:48:52,970 --> 00:48:54,150 Nemamo vremena. 1113 00:48:54,150 --> 00:48:55,200 >> -Ali - 1114 00:48:55,200 --> 00:48:57,060 >> -Sjeti se samo tri pokazivač pravila. 1115 00:48:57,060 --> 00:49:00,100 Broj jedan, osnovna struktura je da imate pokazivač. 1116 00:49:00,100 --> 00:49:02,170 A to ukazuje na to pointee. 1117 00:49:02,170 --> 00:49:04,160 No, pokazivač i pointee su odvojene. 1118 00:49:04,160 --> 00:49:06,460 I uobičajena pogreška je postavili pokazivač, ali se 1119 00:49:06,460 --> 00:49:08,540 zaboravite dati pointee. 1120 00:49:08,540 --> 00:49:12,460 >> Broj dva, pokazivač počinje dereferencing na pokazivač, a slijedi njegova 1121 00:49:12,460 --> 00:49:14,570 Strelica tijekom pristupiti njegovu pointee. 1122 00:49:14,570 --> 00:49:18,640 Kao što svi znamo, to radi samo ako postoji je pointee, koja dobiva natrag 1123 00:49:18,640 --> 00:49:19,790 Pravilo broj jedan. 1124 00:49:19,790 --> 00:49:23,670 >> Broj tri, pokazivač zadatak traje jedan pokazivač i promjene koje bi ukazivale na 1125 00:49:23,670 --> 00:49:25,850 Isto pointee kao još jedan pokazivač. 1126 00:49:25,850 --> 00:49:27,840 Dakle, nakon dodjele, dva pokazivače će 1127 00:49:27,840 --> 00:49:29,430 ukazuju na istu pointee. 1128 00:49:29,430 --> 00:49:31,600 Ponekad se to zove dijeljenje. 1129 00:49:31,600 --> 00:49:33,430 I to je sve što je na njega, stvarno. 1130 00:49:33,430 --> 00:49:33,840 Bye bye sada. 1131 00:49:33,840 --> 00:49:34,300 >> [END video reprodukciju] 1132 00:49:34,300 --> 00:49:36,940 >> DAVID Malan: Pa više na pokazivače, više na Binky sljedeći tjedan. 1133 00:49:36,940 --> 00:49:38,190 Vidimo se u ponedjeljak. 1134 00:49:38,190 --> 00:49:42,187