1 00:00:00,000 --> 00:00:11,320 2 00:00:11,320 --> 00:00:13,260 >> DAVID Malan: Pozdravljeni, in Dobrodošli nazaj CS50. 3 00:00:13,260 --> 00:00:14,860 Tako je ta konec štiri tedne. 4 00:00:14,860 --> 00:00:16,680 Samo ena objava prvi. 5 00:00:16,680 --> 00:00:19,600 Tako ti peti ponedeljek prihaja do tega prihaja v ponedeljek. 6 00:00:19,600 --> 00:00:22,800 To je priložnost, da se spremeni iz SAT / UNSAT na črko razreda, ali 7 00:00:22,800 --> 00:00:24,130 Pismo razred SAT / UNSAT. 8 00:00:24,130 --> 00:00:27,130 Dolgčas, da proces ne zahteva podpis, ker ste morali izpolniti 9 00:00:27,130 --> 00:00:28,770 iz ene od teh roza oblik add / drop. 10 00:00:28,770 --> 00:00:31,680 >> Ker tehnično, SAT / UNSAT različica in različica pismo razred 11 00:00:31,680 --> 00:00:33,320 imajo različne kataloške številke. 12 00:00:33,320 --> 00:00:34,240 Ampak nič posebnega. 13 00:00:34,240 --> 00:00:36,620 Samo pridi do mene ali Rob ali Lauren na kateri koli točki. 14 00:00:36,620 --> 00:00:39,550 Ali nam pišite, če nimate vrste administracije, morate danes, in smo 15 00:00:39,550 --> 00:00:43,410 bodo prepričani, da vam pomaga sprejeti skrb, da pred ponedeljkom. 16 00:00:43,410 --> 00:00:45,780 >> Vse je v redu, tako da danes - 17 00:00:45,780 --> 00:00:47,630 dejansko pa je malo odmev. 18 00:00:47,630 --> 00:00:51,070 Lahko imamo ton me dol malo? 19 00:00:51,070 --> 00:00:51,730 OK. 20 00:00:51,730 --> 00:00:54,850 Torej danes, uvajamo temo znan kot kazalca. 21 00:00:54,850 --> 00:00:57,770 In jaz moram priznati, da je to eden od bolj kompleksne teme, ki jih ponavadi 22 00:00:57,770 --> 00:01:00,960 zajema ta razred ali res vse uvodni tečaj, ki uporablja C. 23 00:01:00,960 --> 00:01:05,510 >> Ampak vzemi mojo besedo za to, še posebej če je vaš um počuti malo več ukrivljen 24 00:01:05,510 --> 00:01:07,100 danes in v prihodnjih tednih. 25 00:01:07,100 --> 00:01:10,340 To ni predstavnik snemaš vse slabši to pomeni samo, da 26 00:01:10,340 --> 00:01:13,360 to je še posebej prefinjeno temo Obljubim, nekaj tednov 27 00:01:13,360 --> 00:01:17,610 zato bo zdelo vse preveč presenetljivo enostavna za nazaj. 28 00:01:17,610 --> 00:01:18,720 >> Še vedno se spomnim na ta dan. 29 00:01:18,720 --> 00:01:22,190 Sedel sem v Elliott jedilnici sedi poleg moje TF Nishat Mehta, 30 00:01:22,190 --> 00:01:24,070 ki je bil rezident Elliott hiše. 31 00:01:24,070 --> 00:01:26,340 In iz nekega razloga, to temo enim klikom. 32 00:01:26,340 --> 00:01:29,430 Kar pomeni, da sem preveč boril z njo za nekaj časa, vendar sem 33 00:01:29,430 --> 00:01:33,610 se bo po svojih najboljših močeh, da bi preprečili vsako tako Boj s temo, ki na koncu 34 00:01:33,610 --> 00:01:34,580 je precej močna. 35 00:01:34,580 --> 00:01:37,350 >> Pravzaprav, ena od tem bomo razpravljali v prihodnjih tednih, je, da 36 00:01:37,350 --> 00:01:41,130 za varnost, in kako lahko dejansko izkoriščati stroje na načine, 37 00:01:41,130 --> 00:01:42,320 ki niso bile namenjene. 38 00:01:42,320 --> 00:01:45,850 In tisti izkoriščanj so običajno Rezultat hroščev, napak, ki smo 39 00:01:45,850 --> 00:01:49,740 ljudje, ki jih ne razume nekaterih osnovnega izvajanja 40 00:01:49,740 --> 00:01:52,250 Podatki po kateri programi so. 41 00:01:52,250 --> 00:01:55,410 >> Sedaj bi to zdi vse bolj uporabniku prijazen, sem mislil, da sem imel 10 42 00:01:55,410 --> 00:01:59,680 Drugi predogled malo claymation slika imenom Binky, ki je bila vložena v 43 00:01:59,680 --> 00:02:03,020 življenje z našega prijatelja na Stanfordu, profesor Nick Parlante. 44 00:02:03,020 --> 00:02:06,753 Torej, mi dovolite, da vam to teaser za Binky tukaj. 45 00:02:06,753 --> 00:02:09,520 >> [Predvajanje videa] 46 00:02:09,520 --> 00:02:10,380 >> Hej, Binky. 47 00:02:10,380 --> 00:02:11,050 Zbudi. 48 00:02:11,050 --> 00:02:13,610 Čas je za zabavo kazalca. 49 00:02:13,610 --> 00:02:14,741 >> Kaj je to? 50 00:02:14,741 --> 00:02:16,440 Spoznajo kazalci? 51 00:02:16,440 --> 00:02:17,928 Oh, goodie. 52 00:02:17,928 --> 00:02:18,920 >> [END predvajanje videa] 53 00:02:18,920 --> 00:02:20,670 >> DAVID Malan: To je Stanford računalništva. 54 00:02:20,670 --> 00:02:23,194 Torej, več o tem, da pridejo. 55 00:02:23,194 --> 00:02:24,930 >> [APLAVZ] 56 00:02:24,930 --> 00:02:26,660 >> DAVID Malan: Oprosti, Nick. 57 00:02:26,660 --> 00:02:30,680 >> Tako opozarjajo, da je zadnji čas, da se je končalo to je res razburljivo Alpinista 58 00:02:30,680 --> 00:02:32,960 pri čemer je ta funkcija samo ni delovala. 59 00:02:32,960 --> 00:02:34,960 Vsaj intuitivno, se mu je zdelo kot da bi bilo delo. 60 00:02:34,960 --> 00:02:37,600 Preprosto zamenjavo vrednosti dveh celih števil. 61 00:02:37,600 --> 00:02:40,915 Vendar pa opozarjajo, da ko smo izpisal prvotne vrednosti v glavnem, ene in 62 00:02:40,915 --> 00:02:44,210 dva, ki so še vedno ena in dva in ne dve, ena. 63 00:02:44,210 --> 00:02:46,070 >> Torej, kaj mi dejansko preklop kot na aparat. 64 00:02:46,070 --> 00:02:50,180 In sem napisala nekaj skeletne kode v napreduje tukaj, kjer sem trdijo, da x 65 00:02:50,180 --> 00:02:52,500 bo 1, bo y je 2. 66 00:02:52,500 --> 00:02:54,810 Nato sem izpisal obeh svojih vrednosti z tiskanja f. 67 00:02:54,810 --> 00:02:57,540 >> Nato sem trdijo tukaj, da bomo swap njih. 68 00:02:57,540 --> 00:03:00,800 Sem pustil prazno mesto tu za nas izpolnite danes v samo nekaj trenutkov. 69 00:03:00,800 --> 00:03:03,380 Nato bom trdijo, da dve spremenljivki bili zamenjani. 70 00:03:03,380 --> 00:03:04,770 Potem bom za tiskanje jih ven. 71 00:03:04,770 --> 00:03:07,090 In tako upam, naj vidim 1, 2. 72 00:03:07,090 --> 00:03:07,380 2, 1. 73 00:03:07,380 --> 00:03:09,830 To je zelo preprosta Cilj zdaj. 74 00:03:09,830 --> 00:03:12,430 >> Torej, kako bomo šli o menjavi dve spremenljivki? 75 00:03:12,430 --> 00:03:17,220 No, če jaz predlagam tukaj, da te skodelice lahko predstavlja spomin na računalniku. 76 00:03:17,220 --> 00:03:19,070 To je le nekaj grižljajev, to je še nekaj grižljajev. 77 00:03:19,070 --> 00:03:23,260 Smo lahko prostovoljec pridi gor in nam mešajte nekaj pijače, če je kaj znano? 78 00:03:23,260 --> 00:03:23,920 Pridi gor. 79 00:03:23,920 --> 00:03:24,815 Kako ti je 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 Pridi gor, Jess. 83 00:03:26,540 --> 00:03:29,180 Če vas ne moti, da moramo dati Google Glass na vas, da bomo lahko 84 00:03:29,180 --> 00:03:30,430 nesmrtne to. 85 00:03:30,430 --> 00:03:32,800 86 00:03:32,800 --> 00:03:34,670 OK, steklo. 87 00:03:34,670 --> 00:03:37,250 Snemanje videa. 88 00:03:37,250 --> 00:03:43,103 In OK, smo na dobri pojdi z Jess tukaj. 89 00:03:43,103 --> 00:03:43,810 Vse je v redu. 90 00:03:43,810 --> 00:03:45,120 Lepo, da sva se spoznala. 91 00:03:45,120 --> 00:03:47,720 >> Torej, kaj bi rad delaš tukaj - če bi lahko, dokaj hitro - 92 00:03:47,720 --> 00:03:51,040 samo nam vliva pol kozarca oranžne sok in pol kozarec mleka, 93 00:03:51,040 --> 00:03:55,710 predstavlja učinkovito številke 1 v eno skodelico in 2 v drugi skodelico. 94 00:03:55,710 --> 00:04:01,380 95 00:04:01,380 --> 00:04:02,630 >> To bo dober posnetek. 96 00:04:02,630 --> 00:04:04,910 97 00:04:04,910 --> 00:04:05,860 >> JESS: Žal mi 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 v redu. 100 00:04:08,703 --> 00:04:10,120 Lepo. 101 00:04:10,120 --> 00:04:12,950 Vse je v redu, tako da imamo štiri bajte vredno pomarančnega soka. 102 00:04:12,950 --> 00:04:14,460 Bomo ga imenujemo vrednost 1. 103 00:04:14,460 --> 00:04:16,579 Zdaj pa še štiri bajte vredno mleka. 104 00:04:16,579 --> 00:04:18,519 Bo poklical, da cenite 2. 105 00:04:18,519 --> 00:04:20,440 Torej, x in y, v tem zaporedju. 106 00:04:20,440 --> 00:04:23,450 >> Vse je v redu, tako da zdaj, če naloga pri roki - zate, Jess, pred vsem 107 00:04:23,450 --> 00:04:24,270 vaših sošolcev - 108 00:04:24,270 --> 00:04:28,510 je, da bi zamenjali vrednosti x in y tako da želimo pomarančni sok v 109 00:04:28,510 --> 00:04:32,070 drugi pokal in mleko v tem pokalu, kako morda vas - preden se dejansko ne 110 00:04:32,070 --> 00:04:34,020 to - iti o tem? 111 00:04:34,020 --> 00:04:35,220 >> OK, pametno odločitev. 112 00:04:35,220 --> 00:04:36,340 Tako da boste morali malo več pomnilnika. 113 00:04:36,340 --> 00:04:38,190 Torej, kaj je dodelila začasna cup, če boste. 114 00:04:38,190 --> 00:04:40,540 In zdaj nadaljuje, da bi zamenjali x in y. 115 00:04:40,540 --> 00:04:52,950 116 00:04:52,950 --> 00:04:53,530 >> Odlično. 117 00:04:53,530 --> 00:04:54,420 Torej, zelo dobro opravljeno. 118 00:04:54,420 --> 00:04:55,670 Najlepša hvala, Jess. 119 00:04:55,670 --> 00:04:59,520 120 00:04:59,520 --> 00:05:00,020 Tukaj si. 121 00:05:00,020 --> 00:05:01,950 Malo spominek. 122 00:05:01,950 --> 00:05:04,350 >> OK, torej je očitno, zelo preprosta ideja. 123 00:05:04,350 --> 00:05:07,500 Povsem intuitivno, da moramo bit več prostora za shranjevanje - v tej obliki, 124 00:05:07,500 --> 00:05:09,750 pokal - če dejansko želimo swap teh dveh spremenljivk. 125 00:05:09,750 --> 00:05:11,110 Torej, kaj je naredil točno to. 126 00:05:11,110 --> 00:05:14,330 Tukaj vmes, kjer trdim, da sem da se delaš nekaj zamenjavo, bom 127 00:05:14,330 --> 00:05:15,720 iti naprej in razglaša temp. 128 00:05:15,720 --> 00:05:17,980 In jaz sem jo nastavite enako, recimo, x. 129 00:05:17,980 --> 00:05:21,110 >> Potem bom spremeniti vrednost x tako kot Jess tukaj delal z 130 00:05:21,110 --> 00:05:23,200 mleko in pomarančni sok enaka y. 131 00:05:23,200 --> 00:05:27,460 In jaz bom za spremembo y enaka da ne x, ker zdaj pa bi bilo 132 00:05:27,460 --> 00:05:29,530 zaljubljen v krogu, ampak temp. 133 00:05:29,530 --> 00:05:33,170 Kje začasno - ali če Jess začasno dal pomarančni sok 134 00:05:33,170 --> 00:05:35,460 Pred clobbering da skodelico z mlekom. 135 00:05:35,460 --> 00:05:37,250 >> Naj gredo naprej in zdaj bo to. 136 00:05:37,250 --> 00:05:39,210 Je pozval noswap.c. 137 00:05:39,210 --> 00:05:41,190 In zdaj mi teče brez zamenjave. 138 00:05:41,190 --> 00:05:43,910 In res vidim, če sem širite Okno malo, da 139 00:05:43,910 --> 00:05:45,160 x je 1, je y 2. 140 00:05:45,160 --> 00:05:47,230 Potem je x 2, y 1. 141 00:05:47,230 --> 00:05:51,910 >> Vendar pa opozarjajo, da je v ponedeljek sva stvari malo drugače, pri čemer sem 142 00:05:51,910 --> 00:05:56,760 namesto da izvaja funkcijo pomočnika, če boste, da je pravzaprav nična. 143 00:05:56,760 --> 00:05:58,010 Poklical sem ga zamenjal. 144 00:05:58,010 --> 00:06:01,600 Dal sem dva parametra, in sem poklical njimi in sem poklical jim b. 145 00:06:01,600 --> 00:06:04,380 >> Odkrito povedano, sem jim x in y pokličite. 146 00:06:04,380 --> 00:06:06,040 Nič ni ustavil mi s tem, da. 147 00:06:06,040 --> 00:06:08,140 Ampak jaz bi trdili, da je takrat malo dvoumno. 148 00:06:08,140 --> 00:06:11,910 Ker odpoklic za ponedeljek, da smo je trdil, da so bili ti parametri 149 00:06:11,910 --> 00:06:13,650 kopije vrednosti minilo noter 150 00:06:13,650 --> 00:06:15,640 Torej je le zafrkava z vašo Um, mislim, če uporabljate 151 00:06:15,640 --> 00:06:17,370 popolnoma enake spremenljivke. 152 00:06:17,370 --> 00:06:20,150 >> Tako da bom namesto njih poklicati in b, samo za jasnost. 153 00:06:20,150 --> 00:06:21,840 Ampak lahko bi jim najbolj pokličite kaj hočemo. 154 00:06:21,840 --> 00:06:26,280 In bom kopiranje in lepljenje dejansko ta koda od tam gor 155 00:06:26,280 --> 00:06:27,170 navzdol v tukaj. 156 00:06:27,170 --> 00:06:29,110 Ker sem videl, da deluje. 157 00:06:29,110 --> 00:06:30,790 Tako da je v zelo dobri formi. 158 00:06:30,790 --> 00:06:37,390 In bom spremeniti svoj x na, moji x da, moj y na b in mojo Y b. 159 00:06:37,390 --> 00:06:39,130 >> Torej, z drugimi besedami, popolnoma enaka logika. 160 00:06:39,130 --> 00:06:40,850 Točno isto stvar, Jess storil. 161 00:06:40,850 --> 00:06:44,350 In potem je ena stvar, moram gor tu, seveda, sedaj sklicuje ta 162 00:06:44,350 --> 00:06:45,990 funkcijo, ali to funkcijo poklicati. 163 00:06:45,990 --> 00:06:50,430 Torej bom poklical to funkcijo z dvema vhodi, x in y, in hit Save. 164 00:06:50,430 --> 00:06:52,300 >> V redu, torej bistveno ista stvar. 165 00:06:52,300 --> 00:06:55,570 V bistvu, sem verjetno naredil program, nepotrebnem zapletena 166 00:06:55,570 --> 00:07:00,820 pisanje funkcijo, ki je samo ob nekateri šest vrstic kode ker sem 167 00:07:00,820 --> 00:07:02,970 prej izvedle to samo tri. 168 00:07:02,970 --> 00:07:06,230 >> Naj gredo naprej in zdaj remake to, da ne bo zamenjave. 169 00:07:06,230 --> 00:07:07,920 Vse je v redu, sem zajebal tukaj. 170 00:07:07,920 --> 00:07:11,290 To mora biti napaka, ki jo morda videti bolj pogosto kot vaš 171 00:07:11,290 --> 00:07:12,380 Programi dobili bolj zapleten. 172 00:07:12,380 --> 00:07:13,470 Ampak tam je enostavno popraviti. 173 00:07:13,470 --> 00:07:15,650 Dovolite mi, da se pomaknete nazaj gor. 174 00:07:15,650 --> 00:07:18,190 >> In kaj je prva napaka jaz vidim? 175 00:07:18,190 --> 00:07:19,520 Implicitno izjavo. 176 00:07:19,520 --> 00:07:21,466 Kaj to običajno kaže? 177 00:07:21,466 --> 00:07:22,830 Oh, sem pozabil prototip. 178 00:07:22,830 --> 00:07:26,900 Pozabil sem naučil prevajalnik, da swap se dogaja, da obstajajo, čeprav je 179 00:07:26,900 --> 00:07:28,920 ne obstaja na samem začetku programa. 180 00:07:28,920 --> 00:07:35,780 Torej, jaz sem samo reči, nična, zamenjave, int, int b, podpičje. 181 00:07:35,780 --> 00:07:37,280 >> Torej, ne bom ga reimplement. 182 00:07:37,280 --> 00:07:39,140 Toda zdaj se ujema, kaj je tu spodaj. 183 00:07:39,140 --> 00:07:42,530 In obvestilo, odsotnost podpičjem tu, ki ni potrebna, če 184 00:07:42,530 --> 00:07:43,200 izvajanje. 185 00:07:43,200 --> 00:07:46,010 >> Naj remake to, da ne bo zamenjave. 186 00:07:46,010 --> 00:07:46,910 Veliko boljša oblika. 187 00:07:46,910 --> 00:07:48,130 Zagnati nobene zamenjave. 188 00:07:48,130 --> 00:07:48,740 In prekleto. 189 00:07:48,740 --> 00:07:51,650 Zdaj smo spet tam, kjer smo bili v ponedeljek, če stvar ni zamenjal. 190 00:07:51,650 --> 00:07:55,410 >> In kaj je intuitivna razlaga zakaj je temu tako? 191 00:07:55,410 --> 00:07:56,380 Ja? 192 00:07:56,380 --> 00:07:57,630 >> ŠTUDENT: [neslišno]. 193 00:07:57,630 --> 00:08:04,140 194 00:08:04,140 --> 00:08:05,230 >> DAVID Malan: Točno tako. 195 00:08:05,230 --> 00:08:07,330 Tako sta a in b kopije x in y. 196 00:08:07,330 --> 00:08:10,680 In v resnici, kadarkoli ste bili kliče funkcijo tako daleč, da 197 00:08:10,680 --> 00:08:12,540 prehaja spremenljivk, kot so ints - 198 00:08:12,540 --> 00:08:14,470 tako kot zamenjava pričakuje tukaj - 199 00:08:14,470 --> 00:08:16,270 fantje so bili kratki v kopijah. 200 00:08:16,270 --> 00:08:19,150 >> Zdaj to pomeni, da je potrebno malo časa, delček sekunde, za 201 00:08:19,150 --> 00:08:23,270 Računalnik kopirati bitov iz enega spremenljivi bitov drugega. 202 00:08:23,270 --> 00:08:24,610 Ampak to ni tako velik posel. 203 00:08:24,610 --> 00:08:25,920 Ampak oni so vseeno kopija. 204 00:08:25,920 --> 00:08:30,020 >> In tako zdaj, v okviru zamenjave, Jaz sem v resnici uspešno 205 00:08:30,020 --> 00:08:31,180 spreminjanje a in b. 206 00:08:31,180 --> 00:08:33,000 V resnici, naredimo hitro preveri pameti. 207 00:08:33,000 --> 00:08:36,830 Natisni f je% i, nova linija. 208 00:08:36,830 --> 00:08:38,770 In kaj je plug. 209 00:08:38,770 --> 00:08:41,830 Zdaj pa to isto stvar z b. 210 00:08:41,830 --> 00:08:43,640 In kaj je naredil isto tukaj. 211 00:08:43,640 --> 00:08:47,260 >> In zdaj, mi kopijo te iste linije spet na dnu funkcije 212 00:08:47,260 --> 00:08:51,250 Po mojih treh linij zanimivo bi se lahko izvrši, in 213 00:08:51,250 --> 00:08:53,270 še enkrat natisniti in b. 214 00:08:53,270 --> 00:08:56,030 Torej, zdaj pa bo to, da ne bo zamenjave. 215 00:08:56,030 --> 00:08:58,430 Naj terminal okno nekoliko višji, tako da bomo lahko videli 216 00:08:58,430 --> 00:08:59,520 več to naenkrat. 217 00:08:59,520 --> 00:09:00,860 >> In vodijo nobene zamenjave. 218 00:09:00,860 --> 00:09:04,000 x je 1, je y 2. 1, b je 2. 219 00:09:04,000 --> 00:09:06,070 Potem pa je 2, je b 1. 220 00:09:06,070 --> 00:09:09,390 Tako da deluje, tako kot Jess tukaj delal znotraj zamenjave. 221 00:09:09,390 --> 00:09:13,090 Ampak seveda, to je nima učinka o spremenljivk v glavnem. 222 00:09:13,090 --> 00:09:15,360 >> Tako smo videli trik, pri čemer smo bi lahko to popraviti, kajne? 223 00:09:15,360 --> 00:09:19,560 Ko ste se soočajo s to izbrskati vprašanje, ki bi si punt in da x 224 00:09:19,560 --> 00:09:22,400 in y, kakšne spremenljivke namesto? 225 00:09:22,400 --> 00:09:23,390 >> Lahko bi jih globalno. 226 00:09:23,390 --> 00:09:27,560 Daj jih na samem vrhu datoteke kot smo to storili tudi v igri z dne 15.. 227 00:09:27,560 --> 00:09:28,890 Mi uporabljamo globalno spremenljivko. 228 00:09:28,890 --> 00:09:32,420 Toda v okviru igre 15 je smiselno, da ima globalna 229 00:09:32,420 --> 00:09:37,170 spremenljivki, ki predstavlja svet, saj celota 15.c je vse 230 00:09:37,170 --> 00:09:38,650 o izvajanju te igre. 231 00:09:38,650 --> 00:09:41,470 To je tisto, kar obstaja datoteka storiti. 232 00:09:41,470 --> 00:09:44,170 >> Toda v tem primeru tukaj, sem kliče funkcijo zamenjave. 233 00:09:44,170 --> 00:09:45,380 Želim, da bi zamenjali dve spremenljivki. 234 00:09:45,380 --> 00:09:48,950 Pa naj bi se začel počutiti le površno če je rešitev za vse naše 235 00:09:48,950 --> 00:09:51,300 Težave ko naletite na področje Vprašanja je, da je globalna. 236 00:09:51,300 --> 00:09:54,730 Ker zelo hitro naš program bo postal precej nereda. 237 00:09:54,730 --> 00:09:57,760 In sva, da je zelo varčno kot rezultat v 15.c. 238 00:09:57,760 --> 00:10:00,470 >> Vendar se izkaže, da je boljši način v celoti. 239 00:10:00,470 --> 00:10:05,600 Dovolite mi, da dejansko šel nazaj in brisanje tiskanje F-ih, samo da bi poenostavili to kodo. 240 00:10:05,600 --> 00:10:09,160 In mi predlagal, da To, seveda, je slabo. 241 00:10:09,160 --> 00:10:15,990 Če pa namesto tega dodati v nekaterih zvezdicah in zvezde, lahko namesto tega pa je to 242 00:10:15,990 --> 00:10:18,670 Funkcija v eno, ki je dejansko deluje. 243 00:10:18,670 --> 00:10:25,020 >> Naj gredo nazaj in priznam, pravijo Zvezdica je vedno težko, 244 00:10:25,020 --> 00:10:26,170 tako bom rekel zvezde. 245 00:10:26,170 --> 00:10:27,660 Jaz bom samo priznaj, da to. 246 00:10:27,660 --> 00:10:28,190 Vse je v redu. 247 00:10:28,190 --> 00:10:30,190 In zdaj, kaj bom , namesto da bi naredili? 248 00:10:30,190 --> 00:10:34,130 >> Torej, najprej bom opredeliti da namesto mimo int v 249 00:10:34,130 --> 00:10:37,980 Funkcija swap, sem namesto od reči int zvezda. 250 00:10:37,980 --> 00:10:39,170 Zdaj, kaj zvezda kažejo? 251 00:10:39,170 --> 00:10:41,970 To je, da pojem kazalec tem Binky, claymation značaj, je bilo 252 00:10:41,970 --> 00:10:43,465 se nanaša na trenutek pred tem. 253 00:10:43,465 --> 00:10:47,610 >> Torej, če rečemo, int zvezdo, smisel ta sedaj je, da se ne bo 254 00:10:47,610 --> 00:10:49,110 sprejet po svoje vrednosti. 255 00:10:49,110 --> 00:10:50,350 To ne bo mogoče kopirati noter 256 00:10:50,350 --> 00:10:54,700 Namesto, naslov je bodo opravili noter 257 00:10:54,700 --> 00:10:57,840 >> Tako opozarjajo, da je notranjost vašega računalnika je cel kup pomnilnika, sicer 258 00:10:57,840 --> 00:10:58,760 znan kot RAM. 259 00:10:58,760 --> 00:11:00,520 In to je samo RAM cel kup bajtov. 260 00:11:00,520 --> 00:11:03,320 Torej, če je vaš Mac ali osebni računalnik dva gigabajta, imate 2 261 00:11:03,320 --> 00:11:05,760 milijarda bajtov pomnilnika. 262 00:11:05,760 --> 00:11:08,440 >> Zdaj pa samo domnevam, da samo da se stvari lepo in urejeno, smo 263 00:11:08,440 --> 00:11:09,450 dodelite naslov - 264 00:11:09,450 --> 00:11:10,170 številka - 265 00:11:10,170 --> 00:11:12,270 za vsak bajt pomnilnika RAM v računalniku. 266 00:11:12,270 --> 00:11:15,410 Zelo prvi bajt tistih 2 milijard za številko nič. 267 00:11:15,410 --> 00:11:18,572 Naslednjič je bajt številka ena, številka dva, vse tja gor, dot dot 268 00:11:18,572 --> 00:11:20,530 pika, za približno 2 milijardi. 269 00:11:20,530 --> 00:11:23,640 >> Torej, lahko število bajtov pomnilnika v računalniku. 270 00:11:23,640 --> 00:11:26,460 Torej, kaj je domnevati, da je to tisto, kar mislimo z naslovom. 271 00:11:26,460 --> 00:11:31,360 Torej, ko vidim int zvezda, kaj se dogaja , ki se prenese v zamenjavo zdaj 272 00:11:31,360 --> 00:11:32,830 naslov. 273 00:11:32,830 --> 00:11:37,150 Ni njegova vrednost, ampak ne glede na poštno Naslov je tako rekoč - 274 00:11:37,150 --> 00:11:38,810 njegovo mesto v RAM. 275 00:11:38,810 --> 00:11:41,250 >> Podobno velja tudi za b, grem povedati isto stvar. 276 00:11:41,250 --> 00:11:42,720 Int, zvezda, b. 277 00:11:42,720 --> 00:11:46,350 Kot prahi, tehnično zvezde bi lahko šel na drugih lokacijah. 278 00:11:46,350 --> 00:11:50,140 Ampak bomo standardizirali na zvezdico počutje tik vrsto podatkov. 279 00:11:50,140 --> 00:11:54,080 >> Torej swap podpis sedaj pomeni, da mi naslov notr, in klic 280 00:11:54,080 --> 00:11:55,400 da naslov. 281 00:11:55,400 --> 00:11:58,690 In mi še naslov int in poziv, da se naslov b. 282 00:11:58,690 --> 00:12:01,120 >> Ampak zdaj moja koda tukaj se mora spremeniti. 283 00:12:01,120 --> 00:12:03,470 Ker če Izjavljam int temp - 284 00:12:03,470 --> 00:12:05,580 ki je še vedno tipa int - 285 00:12:05,580 --> 00:12:08,700 ampak jaz shranite v to, kakšno vrednost? 286 00:12:08,700 --> 00:12:12,870 Da bo jasno, sem dajanje z kodo, kot napisana prav zdaj? 287 00:12:12,870 --> 00:12:14,360 >> Jaz bom dal mesto v. 288 00:12:14,360 --> 00:12:16,500 Ampak jaz ne zanima mesto, kajne? 289 00:12:16,500 --> 00:12:21,940 Temp obstaja samo Jess 'tretji pokal obstajala, za kakšen namen? 290 00:12:21,940 --> 00:12:23,090 Če želite shraniti vrednost. 291 00:12:23,090 --> 00:12:24,830 Mleko ali pomarančni sok. 292 00:12:24,830 --> 00:12:28,520 Ne da bi dejansko shranjevanje naslov eno od teh stvari, ki se počuti 293 00:12:28,520 --> 00:12:31,200 malo nesmiselno v tem realnem svetovni kontekst nekako. 294 00:12:31,200 --> 00:12:34,990 >> Torej res, kaj želim dati v temp ne naslov, vendar 295 00:12:34,990 --> 00:12:36,180 vsebina. 296 00:12:36,180 --> 00:12:41,930 Torej, če je število kot 123, to je 123. bajt pomnilnika, ki pravkar 297 00:12:41,930 --> 00:12:45,090 zgodi, da je okupacijska, da vrednost V zgodi, da se zaseda. 298 00:12:45,090 --> 00:12:49,040 >> Če želim iti na ta naslov, Moram reči zvezda. 299 00:12:49,040 --> 00:12:52,610 Podobno, če bi bil jaz spremeniti, kaj je na naslovu, sem spremenila 300 00:12:52,610 --> 00:12:53,570 To za začetek. 301 00:12:53,570 --> 00:12:58,185 Če želim, da shranite, kaj je na lokacija s tem, kar je na lokaciji 302 00:12:58,185 --> 00:13:02,180 na b, zvezda b zvezda. 303 00:13:02,180 --> 00:13:05,340 >> Torej na kratko, čeprav to ni povsem potaplja v še - in jaz ne bi pričakoval 304 00:13:05,340 --> 00:13:06,560 da bi tako hitro - 305 00:13:06,560 --> 00:13:11,100 Zavedam se, da vse kar delam je prefixing te zvezde mojim spremenljivk, 306 00:13:11,100 --> 00:13:13,350 Pregovor ne zgrabi vrednosti. 307 00:13:13,350 --> 00:13:14,520 Ne spreminjajte vrednosti. 308 00:13:14,520 --> 00:13:17,600 Ampak, pojdite na te naslove in dobili vrednost. 309 00:13:17,600 --> 00:13:21,430 Pojdite na ta naslov in spremembe Vrednost tam. 310 00:13:21,430 --> 00:13:25,500 >> Torej, zdaj mi pomaknete nazaj na vrh, le popraviti to linijo tukaj, da 311 00:13:25,500 --> 00:13:27,690 spremenite prototip igralcev. 312 00:13:27,690 --> 00:13:30,280 Ampak zdaj moram storiti eno stvar. 313 00:13:30,280 --> 00:13:35,500 Intuitivno, če sem spremenil vrste argumentov, da swap pričakuje, 314 00:13:35,500 --> 00:13:37,245 kaj moram spremenite v mojo kodo? 315 00:13:37,245 --> 00:13:39,750 316 00:13:39,750 --> 00:13:40,840 >> Ko sem poklical zamenjave. 317 00:13:40,840 --> 00:13:43,340 Ker prav zdaj, kaj sem Sem mimo, da še zamenjati? 318 00:13:43,340 --> 00:13:47,450 Vrednost x in y vrednost ali mleko in pomarančni sok. 319 00:13:47,450 --> 00:13:48,510 Ampak jaz ne želim storiti. 320 00:13:48,510 --> 00:13:51,060 Jaz namesto tega želijo prenesti v kaj? 321 00:13:51,060 --> 00:13:53,050 Lokacija x in mesto y. 322 00:13:53,050 --> 00:13:55,300 Kakšne so njihove poštne naslove, tako govoriti. 323 00:13:55,300 --> 00:13:57,600 >> Torej za to, da je znak pove. 324 00:13:57,600 --> 00:13:59,260 Znak za nekako zveni kot naslov. 325 00:13:59,260 --> 00:14:03,240 Tako n, znak pove, naslov za x in y naslov. 326 00:14:03,240 --> 00:14:06,790 Torej, to je namerno, da bomo uporabili ampersands ko kliče funkcijo, 327 00:14:06,790 --> 00:14:10,230 in zvezde, ko razglasitvi in ​​ko izvedbo funkcije. 328 00:14:10,230 --> 00:14:14,220 >> In samo pomislite, kot znak & naslov izvajalca in zvezda kot 329 00:14:14,220 --> 00:14:15,490 tja operater - 330 00:14:15,490 --> 00:14:18,640 ali, natančneje, Operater dereference. 331 00:14:18,640 --> 00:14:23,480 Tako da je cel kup besed, samo da pravijo, da je zdaj, upam, da se bo zamenjava 332 00:14:23,480 --> 00:14:24,440 pravilna. 333 00:14:24,440 --> 00:14:26,550 >> Dovolite mi, da gredo naprej in - 334 00:14:26,550 --> 00:14:30,940 kaj je pravzaprav preimenovati datoteko, da ne Ta program se še vedno imenuje swap št. 335 00:14:30,940 --> 00:14:33,240 Trdim, da bomo pravimo swap.c zdaj. 336 00:14:33,240 --> 00:14:35,670 Zato poskrbite, swap. 337 00:14:35,670 --> 00:14:37,520 Pika, poševnica, swap. 338 00:14:37,520 --> 00:14:40,210 >> Sedaj res, x je 1, je y 2. 339 00:14:40,210 --> 00:14:44,040 Potem, je x 2, y je ena. 340 00:14:44,040 --> 00:14:46,500 No, da vidimo, če nam tega ne more storiti malo drugače kot s tem, kar je 341 00:14:46,500 --> 00:14:47,180 dogaja. 342 00:14:47,180 --> 00:14:51,250 Prvič, dovolite mi povečavo na našem risanje zaslon tukaj. 343 00:14:51,250 --> 00:14:54,160 In mi predlagal za trenutek - in ko rišem Tukaj bo odražala 344 00:14:54,160 --> 00:14:58,660 tam zdaj - naj predlaga tukaj je cel kup pomnilnika, ali 345 00:14:58,660 --> 00:15:00,540 RAM, znotraj mojega računalnika. 346 00:15:00,540 --> 00:15:04,140 >> In to se bo število pik, recimo, 1. 347 00:15:04,140 --> 00:15:05,720 To bo bajta številka 2. 348 00:15:05,720 --> 00:15:08,220 In bom naredil cel kup bolj in nato kup dot dot piko 349 00:15:08,220 --> 00:15:10,880 kažejo, da je 2 milijardi O teh stvareh. 350 00:15:10,880 --> 00:15:13,520 4, 5 in tako naprej. 351 00:15:13,520 --> 00:15:17,055 >> Tako so v prvih petih zlogov spomina mojega računalnika. 352 00:15:17,055 --> 00:15:17,560 Vse v redu? 353 00:15:17,560 --> 00:15:19,060 Zelo malo od 2 milijard evrov. 354 00:15:19,060 --> 00:15:21,120 Ampak zdaj bom predlagala Naslednji. 355 00:15:21,120 --> 00:15:27,490 Jaz bom predlagal, da x bo shraniti številko 1, in y je tekoč 356 00:15:27,490 --> 00:15:29,690 da shranite številko 2. 357 00:15:29,690 --> 00:15:35,000 In mi gredo naprej in zdaj predstavlja te vrednosti, kot sledi. 358 00:15:35,000 --> 00:15:41,510 >> Naredimo to takole. 359 00:15:41,510 --> 00:15:42,870 Daj mi samo eno sekundo. 360 00:15:42,870 --> 00:15:44,150 Eno sekundo. 361 00:15:44,150 --> 00:15:45,680 OK. 362 00:15:45,680 --> 00:15:47,560 Želim, da bi to malo - 363 00:15:47,560 --> 00:15:50,440 dajmo to narediti še enkrat. 364 00:15:50,440 --> 00:15:53,250 V nasprotnem primeru bom in uporabo iste številke, nenamerno, 365 00:15:53,250 --> 00:15:54,230 večkrat. 366 00:15:54,230 --> 00:15:57,320 >> Torej, samo zato, da imamo različne številke govoriti, kaj je to imenujemo bajt 367 00:15:57,320 --> 00:16:03,391 številka 123, 124, 125, 126, in dot dot dot. 368 00:16:03,391 --> 00:16:08,400 In mi trdijo sedaj, da bom dal vrednost 1 tukaj, vrednost 2 369 00:16:08,400 --> 00:16:11,990 tukaj, znane tudi kot x in y. 370 00:16:11,990 --> 00:16:15,300 Torej je prav tako se zgodi, da to je x, to je y. 371 00:16:15,300 --> 00:16:18,180 >> In samo z nekaj naključno naključje, računalnik, operacijski sistem, 372 00:16:18,180 --> 00:16:21,890 se je zgodilo, da dajo x na lokaciji Številka 123. 373 00:16:21,890 --> 00:16:25,590 In y končal na lokaciji 124 - 374 00:16:25,590 --> 00:16:26,330 prekleto. 375 00:16:26,330 --> 00:16:28,700 Tole bi morala določiti. 376 00:16:28,700 --> 00:16:34,040 Oh človek, jaz res želite to storiti? 377 00:16:34,040 --> 00:16:37,340 Da, želim popraviti to in b Pravilno o tem danes. 378 00:16:37,340 --> 00:16:39,950 Oprostite, nov v tem. 379 00:16:39,950 --> 00:16:45,020 >> 127, 131, in nisem hotel biti tako zapleteno, ampak zakaj sem spremenila 380 00:16:45,020 --> 00:16:46,340 Številke tam? 381 00:16:46,340 --> 00:16:48,360 Ker želim, da ints za dejansko štiri bajte. 382 00:16:48,360 --> 00:16:49,810 Torej, kaj je bilo super anal o tem. 383 00:16:49,810 --> 00:16:53,800 Tako da če 1. zgodi, da je treba obravnavati 123, 2 se bo na naslovu 384 00:16:53,800 --> 00:16:55,730 127, saj je le 4 odstavne niše stran. 385 00:16:55,730 --> 00:16:56,210 To je vse. 386 00:16:56,210 --> 00:16:58,640 In bomo pozabili na vse druge naslove na svetu. 387 00:16:58,640 --> 00:17:03,320 >> Torej je x na mestu 123, y je na mestu 127. 388 00:17:03,320 --> 00:17:05,770 In sedaj, kaj storiti, sem dejansko želite narediti? 389 00:17:05,770 --> 00:17:10,099 Ko sem poklical swap zdaj, kaj je pravzaprav dogaja? 390 00:17:10,099 --> 00:17:14,920 No, ko sem poklical menjavo, sem prehodu v naslov x in y naslov. 391 00:17:14,920 --> 00:17:18,540 Torej za primer, če ti dva kosa papirja, sedaj predstavljajo dve 392 00:17:18,540 --> 00:17:23,510 argumenti in b, da bi zamenjali, kaj sem jaz bodo napisali na prvem, 393 00:17:23,510 --> 00:17:27,720 kar bom poklical imenujemo? 394 00:17:27,720 --> 00:17:30,610 >> Točno, 123. 395 00:17:30,610 --> 00:17:31,905 Torej, to Trdim je. 396 00:17:31,905 --> 00:17:32,955 To je parameter. 397 00:17:32,955 --> 00:17:35,856 Jaz bom dal naslov x tam. 398 00:17:35,856 --> 00:17:38,152 >> Kaj je to? 399 00:17:38,152 --> 00:17:40,890 >> Kaj je to? 400 00:17:40,890 --> 00:17:41,190 >> Ne, ne. 401 00:17:41,190 --> 00:17:41,720 To je v redu. 402 00:17:41,720 --> 00:17:42,570 Še vedno dobro, še vedno dobra. 403 00:17:42,570 --> 00:17:43,530 Torej je to. 404 00:17:43,530 --> 00:17:46,240 Sedaj pa na drugi list papirja To se bo b, in kaj sem jaz 405 00:17:46,240 --> 00:17:49,010 bodo pisno ta kos papirja? 406 00:17:49,010 --> 00:17:50,080 127. 407 00:17:50,080 --> 00:17:53,720 >> Torej, edina stvar, ki se je spremenilo od leta naša prejšnja Prerokovanje te zgodbe je, 408 00:17:53,720 --> 00:17:58,590 namesto dobesedno 1 in 2, sem dogaja, da prenese v 123 in 127. 409 00:17:58,590 --> 00:18:02,130 In jaz sem zdaj bo dal te noter te škatle, v redu? 410 00:18:02,130 --> 00:18:04,640 Tako, da črna skrinjica zdaj predstavlja Funkcija swap. 411 00:18:04,640 --> 00:18:07,230 >> Medtem pa imajo zdaj nekoga izvajanje funkcije swap. 412 00:18:07,230 --> 00:18:09,090 Bi kdo tu gor se javi? 413 00:18:09,090 --> 00:18:09,560 Pridi gor. 414 00:18:09,560 --> 00:18:11,080 Kako ti je ime? 415 00:18:11,080 --> 00:18:11,460 Charlie. 416 00:18:11,460 --> 00:18:12,080 Vse je v redu, Charlie. 417 00:18:12,080 --> 00:18:14,810 Pridi gor. 418 00:18:14,810 --> 00:18:17,310 >> Torej, Charlie se bo igral Vloga naše črne škatle. 419 00:18:17,310 --> 00:18:21,460 Charlie, kaj bi rad, da narediš Zdaj se izvajajo zamenjave tako 420 00:18:21,460 --> 00:18:25,320 da je glede teh dveh naslovov, ste dejansko dogaja 421 00:18:25,320 --> 00:18:26,330 za spreminjanje vrednosti. 422 00:18:26,330 --> 00:18:28,290 In bom šepeta v uho kako teči TV tukaj. 423 00:18:28,290 --> 00:18:29,930 >> Tako da gredo naprej in si črna skrinjica. 424 00:18:29,930 --> 00:18:30,920 Dosežejo tam. 425 00:18:30,920 --> 00:18:34,054 Katere vrednote vidite za in Katere vrednote vidite za b? 426 00:18:34,054 --> 00:18:36,740 >> CHARLIE: je 123 in je b 127. 427 00:18:36,740 --> 00:18:37,530 >> DAVID Malan: V redu, prav. 428 00:18:37,530 --> 00:18:38,940 Zdaj ustavite se za trenutek. 429 00:18:38,940 --> 00:18:41,680 Prva stvar, ki jo boš naredil zdaj, glede na oznako - ki 430 00:18:41,680 --> 00:18:43,220 Jaz bom zdaj dvigni na zaslonu - 431 00:18:43,220 --> 00:18:46,750 se bo za dodelitev malo Malo spomina imenovano temp. 432 00:18:46,750 --> 00:18:48,850 Tako da sem šel naprej in vam ta pomnilnik. 433 00:18:48,850 --> 00:18:52,210 >> Torej, to se bo tretja spremenljivka da imate dostopno 434 00:18:52,210 --> 00:18:54,080 si poklical temp. 435 00:18:54,080 --> 00:18:57,120 In kaj boš napisal na temp kos papirja? 436 00:18:57,120 --> 00:19:02,524 437 00:19:02,524 --> 00:19:03,470 >> CHARLIE: Kazalci, kajne? 438 00:19:03,470 --> 00:19:04,790 >> DAVID Malan: OK, tudi ne nujno napotke. 439 00:19:04,790 --> 00:19:07,230 Torej vrstico kode, da sem poudarjeno na desni strani, 440 00:19:07,230 --> 00:19:07,900 začnimo tam. 441 00:19:07,900 --> 00:19:08,890 Piše zvezda. 442 00:19:08,890 --> 00:19:11,670 Torej je trenutno shranjevanje številka 123. 443 00:19:11,670 --> 00:19:16,660 In samo intuitivno, kaj je zvezda 123 pomeni? 444 00:19:16,660 --> 00:19:21,630 >> Toda posebej, če je 123, zvezda pomeni kaj? 445 00:19:21,630 --> 00:19:22,560 Vrednost. 446 00:19:22,560 --> 00:19:24,580 Ali bolj mimogrede, pojdi tja. 447 00:19:24,580 --> 00:19:28,620 Torej, kaj mi predlaga, da imajo v roko, pojdi naprej in zdravljenje, ki 448 00:19:28,620 --> 00:19:29,430 kot da je zemljevid. 449 00:19:29,430 --> 00:19:32,940 In hodi prepustite računalnika spomin, in nas, kar je 450 00:19:32,940 --> 00:19:36,520 na lokaciji 123. 451 00:19:36,520 --> 00:19:37,720 Točno tako. 452 00:19:37,720 --> 00:19:41,100 >> Tako smo videli na mestu 123 je tisto, kar je očitno? 453 00:19:41,100 --> 00:19:44,240 OK, kakšno vrednost sedaj ste bo dal v temp? 454 00:19:44,240 --> 00:19:44,750 Točno tako. 455 00:19:44,750 --> 00:19:45,600 Tako da gredo naprej in to. 456 00:19:45,600 --> 00:19:51,280 In napišite številko 1 na kos papir, ki je trenutno z naslovom temp. 457 00:19:51,280 --> 00:19:53,540 >> In zdaj naslednji korak, da boš za izvajanje 458 00:19:53,540 --> 00:19:54,310 se bo kaj. 459 00:19:54,310 --> 00:19:57,820 No, na desni strani Naslednja vrstica kode je zvezda b. b, od 460 00:19:57,820 --> 00:19:59,260 Tečaj, shranjuje naslov. 461 00:19:59,260 --> 00:20:02,270 , Ki obravnava 127. 462 00:20:02,270 --> 00:20:06,620 Star b pomeni tisto, mimogrede rečeno? 463 00:20:06,620 --> 00:20:08,700 >> Pojdite na tej lokaciji. 464 00:20:08,700 --> 00:20:14,988 Tako da gredo naprej in nam najti tistega, kar je na lokaciji 127. 465 00:20:14,988 --> 00:20:15,480 OK. 466 00:20:15,480 --> 00:20:19,170 Seveda je na mestu 127, še vrednost 2. 467 00:20:19,170 --> 00:20:24,060 Torej, kaj boš sedaj trgovino na vse, kar je na lokaciji? 468 00:20:24,060 --> 00:20:26,860 Torej zvezdic sredstvo pojdite na mesto v. 469 00:20:26,860 --> 00:20:29,770 Kaj je mesto? 470 00:20:29,770 --> 00:20:30,430 >> Točno tako. 471 00:20:30,430 --> 00:20:34,190 Torej, zdaj, če želite spremeniti kaj je na tem mestu - 472 00:20:34,190 --> 00:20:36,470 Jaz bom šel naprej in zagon radirko so tukaj. 473 00:20:36,470 --> 00:20:37,760 In zdaj ga vrnili na krtačo. 474 00:20:37,760 --> 00:20:42,190 Katero številko boste napisali v tem praznem polju zdaj? 475 00:20:42,190 --> 00:20:42,850 >> Točno tako. 476 00:20:42,850 --> 00:20:46,470 Torej, ta vrstica kode, da bo jasno - kaj mene ustavite, kaj je Charlie počne in 477 00:20:46,470 --> 00:20:51,730 poudariti tukaj, kaj mu je storiti samo je pisati v tem polju na lokaciji 123 478 00:20:51,730 --> 00:20:55,150 vrednost, ki je bila prej na b. 479 00:20:55,150 --> 00:20:59,140 In tako smo zdaj izvaja v resnici ta druga vrstica kode. 480 00:20:59,140 --> 00:21:01,920 >> Zdaj na žalost, tam je Preostali še ena vrstica. 481 00:21:01,920 --> 00:21:04,900 Zdaj, kaj je v temp, dobesedno? 482 00:21:04,900 --> 00:21:06,200 Očitno številka ena. 483 00:21:06,200 --> 00:21:07,020 To ni naslov. 484 00:21:07,020 --> 00:21:09,380 To je samo številka, vrsta razlikuje od enega tedna. 485 00:21:09,380 --> 00:21:13,520 >> In sedaj, ko ste rekli zvezda b, ki pomeni kraju naslovno b, ki je 486 00:21:13,520 --> 00:21:15,090 Tečaj tukaj. 487 00:21:15,090 --> 00:21:16,020 Torej, ko prideš tja - 488 00:21:16,020 --> 00:21:18,320 Jaz bom šel naprej in izbrisati kaj je dejansko tam - in kaj ste 489 00:21:18,320 --> 00:21:20,820 bom napisal zdaj na lokaciji, 127? 490 00:21:20,820 --> 00:21:22,010 >> CHARLIE: Temp, ki je eden. 491 00:21:22,010 --> 00:21:23,430 >> DAVID Malan: Temp, ki je eden. 492 00:21:23,430 --> 00:21:25,670 In kaj se zgodi s temperaturo na koncu? 493 00:21:25,670 --> 00:21:26,600 No, res ne vem. 494 00:21:26,600 --> 00:21:27,420 Mi ne briga. 495 00:21:27,420 --> 00:21:31,090 Vsak čas, ki smo jih izvajali funkcijo doslej, vse lokalne spremenljivke imate 496 00:21:31,090 --> 00:21:31,890 so res lokalno. 497 00:21:31,890 --> 00:21:33,060 In kar izginil. 498 00:21:33,060 --> 00:21:35,040 Oni predelalo za poslovanje Sistem sčasoma. 499 00:21:35,040 --> 00:21:39,800 >> Zato je dejstvo, da je še vedno temp vrednost 1 je nekako bistveno 500 00:21:39,800 --> 00:21:41,150 nezanimiv za nas. 501 00:21:41,150 --> 00:21:43,100 Vse je v redu, tako da aplavz če bi lahko za Charlie. 502 00:21:43,100 --> 00:21:46,400 Zelo dobro opravljeno. 503 00:21:46,400 --> 00:21:51,520 >> V redu, kaj več pa to pomeni, da lahko storimo? 504 00:21:51,520 --> 00:21:54,400 Tako se izkaže, da smo bili povedal nekaj bele laži 505 00:21:54,400 --> 00:21:55,540 za kar nekaj časa. 506 00:21:55,540 --> 00:21:59,990 Dejansko se je izkazalo, da je niz, vsem tem času ni res 507 00:21:59,990 --> 00:22:02,190 Zaporedje znakov per se. 508 00:22:02,190 --> 00:22:03,980 Nekako je to intuitivno. 509 00:22:03,980 --> 00:22:08,270 >> Ampak tehnično gledano niz tip podatkov, ki smo prijavljeni v notranjosti 510 00:22:08,270 --> 00:22:12,170 CS50 knjižnica poenostaviti svet V prvih nekaj tednih razredu. 511 00:22:12,170 --> 00:22:20,130 Kaj niz res je naslov iz narave nekje v RAM. 512 00:22:20,130 --> 00:22:25,530 Niz je res več kot 123 ali 127, ki se zgodi, da se določijo 513 00:22:25,530 --> 00:22:28,420 kjer niz začne spomin računalnika. 514 00:22:28,420 --> 00:22:31,870 >> Ampak to ne pomeni Niz po sebi sama. 515 00:22:31,870 --> 00:22:33,460 In lahko vidimo to kot sledi. 516 00:22:33,460 --> 00:22:35,980 Dovolite mi, da gredo naprej in odpiranje del kode, ki je med 517 00:22:35,980 --> 00:22:38,340 Primeri izvorne kode današnji. 518 00:22:38,340 --> 00:22:42,225 In jaz grem naprej in odprite do, recimo, primerjate-0.c. 519 00:22:42,225 --> 00:22:44,830 520 00:22:44,830 --> 00:22:48,790 To je vozičkom program, ki se bo ki se izvaja, kakor sledi. 521 00:22:48,790 --> 00:22:49,040 >> Prvi. 522 00:22:49,040 --> 00:22:50,420 Bom kaj rekel. 523 00:22:50,420 --> 00:22:52,660 Potem sem šel naprej in dobili niz od uporabnika 524 00:22:52,660 --> 00:22:53,750 v tej naslednje vrstice. 525 00:22:53,750 --> 00:22:55,370 Potem bom ponavljal. 526 00:22:55,370 --> 00:22:57,540 Potem bom dobil drugo Niz od uporabnika. 527 00:22:57,540 --> 00:23:00,390 >> In obvestilo, da sem pokazal eno strune v spremenljivko y in 528 00:23:00,390 --> 00:23:03,040 ena od teh nizov v spremenljivko imenovano t. 529 00:23:03,040 --> 00:23:07,480 In zdaj bom trdijo, zelo smiselno, da če je enaka enaka t, 530 00:23:07,480 --> 00:23:08,940 niza sta enaka. 531 00:23:08,940 --> 00:23:09,970 Vnesete isto stvar. 532 00:23:09,970 --> 00:23:11,830 Else, strune so ni ista stvar. 533 00:23:11,830 --> 00:23:15,440 >> Konec koncev, če vnesemo dve ints, dva znakov, dve plovci, dva podvoji, vse z 534 00:23:15,440 --> 00:23:18,400 podatkovni tipi smo govorili Tako daleč, da bi jih primerjali - 535 00:23:18,400 --> 00:23:22,070 Spominjam smo zelo jasno že pred časom da ne bi to naredili, ker 536 00:23:22,070 --> 00:23:25,840 sam enačaj je seveda Operater naloga. 537 00:23:25,840 --> 00:23:26,820 Torej bi bilo to napako. 538 00:23:26,820 --> 00:23:29,260 >> Mi uporabljamo enako enačaj, ki dejansko primerja 539 00:23:29,260 --> 00:23:31,050 Stvari za resnično enakost. 540 00:23:31,050 --> 00:23:32,275 Vendar trdim, da je to vozičkom. 541 00:23:32,275 --> 00:23:37,400 Če grem naprej in primerjati nič, in potem pika poševnica primerjati nič. 542 00:23:37,400 --> 00:23:39,700 In jaz sem tip v, recimo, zdravo. 543 00:23:39,700 --> 00:23:41,590 In potem pa spet pozdravit. 544 00:23:41,590 --> 00:23:46,040 Dobesedno isto stvar, računalniški trditvah sem tipkal različne stvari. 545 00:23:46,040 --> 00:23:47,640 >> Zdaj morda sem samo nekaj zatipkali. 546 00:23:47,640 --> 00:23:49,910 Jaz bom vnesite ime mi ta čas. 547 00:23:49,910 --> 00:23:52,580 Mislim, zdravo. 548 00:23:52,580 --> 00:23:54,770 Pozdravljeni. 549 00:23:54,770 --> 00:23:57,360 To je drugačen vsak čas. 550 00:23:57,360 --> 00:23:58,430 >> No, zakaj je to? 551 00:23:58,430 --> 00:24:00,140 Kaj se v resnici dogaja pod pokrovom? 552 00:24:00,140 --> 00:24:03,270 No, kaj se v resnici dogaja pod Pokrov je niz, nato 553 00:24:03,270 --> 00:24:07,410 Sem tipkal v tem prvič za primer je beseda zdravo, seveda. 554 00:24:07,410 --> 00:24:11,660 Ampak, če mi predstavlja to pod napa, opozarjajo, da 555 00:24:11,660 --> 00:24:13,470 niz v matriki. 556 00:24:13,470 --> 00:24:15,040 In sva rekla toliko v preteklosti. 557 00:24:15,040 --> 00:24:20,200 >> Torej, če potegnemo to paleto, kot je ta, da sem dogaja, da predstavlja nekaj povsem 558 00:24:20,200 --> 00:24:23,030 podoben temu, kar smo storili pred nekaj trenutki. 559 00:24:23,030 --> 00:24:25,390 In tam je dejansko nekaj Posebna tukaj. 560 00:24:25,390 --> 00:24:28,090 Kaj smo ugotoviti, je bil na konec vsakega niza? 561 00:24:28,090 --> 00:24:30,760 Ja, to Nagibnica nič, kar je samo način zastopanja, 562 00:24:30,760 --> 00:24:33,610 dobesedno, 00000000. 563 00:24:33,610 --> 00:24:35,680 Osem 0 bitov zapored. 564 00:24:35,680 --> 00:24:37,610 >> Ne vem, odkrito povedano, kaj je potem to. 565 00:24:37,610 --> 00:24:40,090 To je samo kup več RAM-a znotraj mojega računalnika. 566 00:24:40,090 --> 00:24:40,970 Ampak to je matrika. 567 00:24:40,970 --> 00:24:42,260 Pogovarjali smo se o nizi prej. 568 00:24:42,260 --> 00:24:45,010 In smo ponavadi govorimo o nizi kot lokacija nič, 569 00:24:45,010 --> 00:24:46,580 nato pa eno, potem pa dva. 570 00:24:46,580 --> 00:24:47,950 Ampak to je samo za udobje. 571 00:24:47,950 --> 00:24:49,380 In to je povsem relativno. 572 00:24:49,380 --> 00:24:53,010 >> Ko ste dejansko dobili iz spomina računalnik, je seveda koli 573 00:24:53,010 --> 00:24:55,450 2 milijardi nekaj čudno bajti, potencialno. 574 00:24:55,450 --> 00:24:59,100 Torej res pod pokrovom, Ves ta čas, ja. 575 00:24:59,100 --> 00:25:01,670 To bi bilo zelo dobro držalo nič. 576 00:25:01,670 --> 00:25:04,780 Ampak, če ste kopljemo še globlje pod napa, to je res 577 00:25:04,780 --> 00:25:07,000 obravnavati številko 123. 578 00:25:07,000 --> 00:25:09,150 To je naslov 124. 579 00:25:09,150 --> 00:25:11,040 To je naslov 125. 580 00:25:11,040 --> 00:25:12,540 >> In nisem zamočil tokrat. 581 00:25:12,540 --> 00:25:15,840 To so zdaj ena bajta poleg zakaj? 582 00:25:15,840 --> 00:25:17,930 Kako velika je znak? 583 00:25:17,930 --> 00:25:19,170 Char je samo en bajt. 584 00:25:19,170 --> 00:25:20,570 Int je običajno štiri bajte. 585 00:25:20,570 --> 00:25:24,850 Tako, da je razlog, zakaj sem to 123, 127, 131 in tako naprej. 586 00:25:24,850 --> 00:25:27,560 Sedaj lahko obdržim math enostavnejši in samo to plus 1. 587 00:25:27,560 --> 00:25:30,510 In to je zdaj tisto, kar se v resnici dogaja na pod pokrovom. 588 00:25:30,510 --> 00:25:37,760 >> Torej, ko ugotovi, kaj takega, niz s, to je pravzaprav - 589 00:25:37,760 --> 00:25:39,170 Izkazalo se je - 590 00:25:39,170 --> 00:25:41,190 char zvezda. 591 00:25:41,190 --> 00:25:44,640 Star seveda pomeni naslov, alias kazalec. 592 00:25:44,640 --> 00:25:46,200 Torej je naslov nečesa. 593 00:25:46,200 --> 00:25:47,510 Kaj je naslov? 594 00:25:47,510 --> 00:25:47,760 >> No - 595 00:25:47,760 --> 00:25:51,680 Jaz sem edini, ki vidi zelo Pomembna točka delam, ali mislite 596 00:25:51,680 --> 00:25:52,560 Delam. 597 00:25:52,560 --> 00:25:55,270 Torej niz - 598 00:25:55,270 --> 00:25:57,180 Žalostno je, da imam monitor tam, kjer sem 599 00:25:57,180 --> 00:25:58,100 lahko opazila, da. 600 00:25:58,100 --> 00:26:00,990 >> Vse je v redu, tako da je niz je tisto, Prej sem prijavljeni. 601 00:26:00,990 --> 00:26:04,600 Izkaže pa se, zahvaljujoč malo magija v knjižnici CS50, vse to 602 00:26:04,600 --> 00:26:08,780 Čas niz ima dobesedno bil znak zvezda. 603 00:26:08,780 --> 00:26:11,310 Zvezda spet pomeni, kazalec ali naslov. 604 00:26:11,310 --> 00:26:14,180 Dejstvo, da je spremljajočih Beseda znak pomeni, da je 605 00:26:14,180 --> 00:26:15,970 naslov znak. 606 00:26:15,970 --> 00:26:23,100 >> Torej, če bi dobili niz se imenuje, in sem tip v H-E-L-L-O, predlagam kaj zdaj je dobil 607 00:26:23,100 --> 00:26:27,330 Niz dobesedno bilo vračanje vseh ta čas, čeprav smo jih prej 608 00:26:27,330 --> 00:26:29,980 poenostavljeno svet? 609 00:26:29,980 --> 00:26:33,310 Kaj se pravzaprav niz vrniti kot svojo vrnjene vrednosti? 610 00:26:33,310 --> 00:26:35,830 611 00:26:35,830 --> 00:26:38,720 >> 123 v tem primeru, na primer. 612 00:26:38,720 --> 00:26:42,630 Mi smo že prej rekli, da bi dobili niz preprosto vrne niz, zaporedje 613 00:26:42,630 --> 00:26:43,300 znakov. 614 00:26:43,300 --> 00:26:44,790 Ampak to je malo belo laž. 615 00:26:44,790 --> 00:26:48,010 Tako bi dobili niz res deluje Pod pokrovom se ga dobi 616 00:26:48,010 --> 00:26:48,930 Niz od uporabnika. 617 00:26:48,930 --> 00:26:51,530 To skoči znake, ki on ali ona vrste v spominu. 618 00:26:51,530 --> 00:26:54,680 To postavlja backslashem ničle na koncu tistih zaporedje znakov. 619 00:26:54,680 --> 00:26:57,310 >> Ampak potem kaj dobil niz dobesedno vrnil? 620 00:26:57,310 --> 00:27:02,710 Dobesedno vrne naslov Prve bajtov RAM-a, da je 621 00:27:02,710 --> 00:27:04,130 uporablja za to moč. 622 00:27:04,130 --> 00:27:07,500 In izkazalo se je, da samo z vrnitvijo sam naslov 623 00:27:07,500 --> 00:27:12,120 Prvi znak v nizu, ki je zadostuje za ugotovitev celoto 624 00:27:12,120 --> 00:27:12,630 niz. 625 00:27:12,630 --> 00:27:16,930 >> Z drugimi besedami, dobili niz nima vrniti 123 in 124 in 125. 626 00:27:16,930 --> 00:27:19,950 To ni nujno, da mi dolg seznam vseh bajtov, ki 627 00:27:19,950 --> 00:27:20,740 moj niz se uporabljajo. 628 00:27:20,740 --> 00:27:22,670 Ker je ena, da so vsi na hrbtni strani. 629 00:27:22,670 --> 00:27:28,160 In dva, ki temelji na prvem naslovu, sem Lahko ugotovimo, kje Niz se konča. 630 00:27:28,160 --> 00:27:29,910 Kako? 631 00:27:29,910 --> 00:27:33,490 >> Posebna null znak, Nagibnica nič na koncu. 632 00:27:33,490 --> 00:27:35,430 Torej, z drugimi besedami, če boste peljali okrog - 633 00:27:35,430 --> 00:27:36,530 Notranjost spremenljivk - 634 00:27:36,530 --> 00:27:41,300 naslov char in prevzeti da je ob koncu vsakega niza, vse 635 00:27:41,300 --> 00:27:45,040 zaporedje znakov, kot smo ljudje mislim strune, če predpostavimo, da 636 00:27:45,040 --> 00:27:48,600 na koncu vsakega takega niza tam Nagibnica nič, ti si zlata. 637 00:27:48,600 --> 00:27:52,430 Ker lahko vedno najdete Konec niza. 638 00:27:52,430 --> 00:27:54,870 >> Zdaj, kaj je res, potem bo na v tem programu? 639 00:27:54,870 --> 00:27:59,990 Zakaj je ta program, primerjajo-0.c, buggy? 640 00:27:59,990 --> 00:28:01,690 Kaj se dejansko primerjali? 641 00:28:01,690 --> 00:28:02,420 Ja? 642 00:28:02,420 --> 00:28:05,000 >> ŠTUDENT: [neslišno]. 643 00:28:05,000 --> 00:28:05,730 >> DAVID Malan: Točno tako. 644 00:28:05,730 --> 00:28:08,350 To je primerjanje lokacij od nizov. 645 00:28:08,350 --> 00:28:12,420 Torej, če je uporabnik vnesli v zdravo enkrat, kot sem storil, bi spomin na koncu 646 00:28:12,420 --> 00:28:13,430 videti takole. 647 00:28:13,430 --> 00:28:18,210 Če nato uporabnik tipi iz Pozdravljeni, ampak ga kliče spet dobil niz, c je 648 00:28:18,210 --> 00:28:21,800 ni posebno pameten, če ne boste naučili , da je pametno s pisanjem kode. 649 00:28:21,800 --> 00:28:22,430 >> C - 650 00:28:22,430 --> 00:28:23,860 in računalnikov na splošno - 651 00:28:23,860 --> 00:28:27,370 Če vnesete v besedi Pozdravljeni še enkrat, veš, kaj boš dobil. 652 00:28:27,370 --> 00:28:31,480 Greš samo, da bi dobili drugo matriko spomina, ja, zgodi se 653 00:28:31,480 --> 00:28:35,510 shranjevanje H-E-L-L-O in tako naprej. 654 00:28:35,510 --> 00:28:38,240 >> To se dogaja, da zgledajo enako nas ljudje, vendar ta naslov 655 00:28:38,240 --> 00:28:39,460 morda ne bo 123. 656 00:28:39,460 --> 00:28:42,470 Morda samo zato, da se zgodi, da operacijski sistem ima nekaj na voljo 657 00:28:42,470 --> 00:28:45,430 prostor, na primer na lokaciji - 658 00:28:45,430 --> 00:28:49,820 recimo nekaj arbitrarno, kot je to mesto 200. 659 00:28:49,820 --> 00:28:51,620 In to je lokacija 201. 660 00:28:51,620 --> 00:28:53,060 In to je lokacija 202. 661 00:28:53,060 --> 00:28:55,730 Nimamo pojma, kje ki je bo v pomnilniku. 662 00:28:55,730 --> 00:28:59,110 >> Ampak kaj to pomeni, da tisto, kar je bo na koncu shranjena v s? 663 00:28:59,110 --> 00:29:00,750 Številka 123. 664 00:29:00,750 --> 00:29:04,860 Kaj se dogaja, da se shranjujejo na t, pri tem poljubno primer? 665 00:29:04,860 --> 00:29:06,300 Številka 200. 666 00:29:06,300 --> 00:29:11,410 In vse to pomeni, potem je očitno, 123 ni enako 200. 667 00:29:11,410 --> 00:29:14,940 In tako je to, če pogoj ni ovrednoten kot resničen. 668 00:29:14,940 --> 00:29:18,430 Saj je dobil niz z drugačno kose pomnilnika vsakič. 669 00:29:18,430 --> 00:29:20,360 >> Zdaj lahko to spet videl v drugem primeru. 670 00:29:20,360 --> 00:29:23,764 Dovolite mi, da gredo naprej in odprla copy-0.c. 671 00:29:23,764 --> 00:29:28,770 Trdim, da je ta primer se bo poskusite - vendar pa ne - za kopiranje dveh nizov 672 00:29:28,770 --> 00:29:29,910 kot sledi. 673 00:29:29,910 --> 00:29:31,730 >> Jaz bom rekel nekaj za uporabnika. 674 00:29:31,730 --> 00:29:34,490 Jaz pa bom dobil niz in ga je poklical. 675 00:29:34,490 --> 00:29:36,400 In zdaj, delam to preverjanje tukaj. 676 00:29:36,400 --> 00:29:37,990 Smo omenili tem že nekaj časa nazaj. 677 00:29:37,990 --> 00:29:42,490 Toda, ko bi lahko dobili niz vrne null, en poseben znak, ali posebni 678 00:29:42,490 --> 00:29:45,050 Simbol recimo. 679 00:29:45,050 --> 00:29:45,900 Če je iz spomina. 680 00:29:45,900 --> 00:29:48,970 >> Na primer, če je uporabnik res da je težko in vrste krute 681 00:29:48,970 --> 00:29:51,220 število znakov v Tipkovnica in zadetki Enter. 682 00:29:51,220 --> 00:29:54,580 Če to število znakov samo ne more prilegajo v RAM za karkoli nor 683 00:29:54,580 --> 00:29:57,820 Razlog, tudi dobili niz morda Zelo dobro vrne null. 684 00:29:57,820 --> 00:30:01,080 >> Ali če sam program počne veliko drugih stvari, in tam je samo 685 00:30:01,080 --> 00:30:03,790 Ni dovolj pomnilnika za get niz uspeti, je morda na koncu 686 00:30:03,790 --> 00:30:05,240 se vrača nično. 687 00:30:05,240 --> 00:30:07,160 Ampak bodimo bolj natančni , da je to. 688 00:30:07,160 --> 00:30:10,280 Kaj je podatkovni tip ev je res? 689 00:30:10,280 --> 00:30:11,610 Char zvezda. 690 00:30:11,610 --> 00:30:14,560 >> Tako se izkaže, zdaj smo lahko lupino varnostno plast null. 691 00:30:14,560 --> 00:30:17,500 Izkazalo se je, ničen, je - da, seveda poseben simbol. 692 00:30:17,500 --> 00:30:19,190 Toda kaj je to res? 693 00:30:19,190 --> 00:30:25,220 Res, ničen, je samo simbol, da smo ljudje uporabljajo, da predstavlja nič, kot dobro. 694 00:30:25,220 --> 00:30:29,010 >> Torej avtorji C in računalnikov bolj splošno, odločili že pred leti 695 00:30:29,010 --> 00:30:30,010 da, veš kaj. 696 00:30:30,010 --> 00:30:34,850 Zakaj ne bi zagotovili, da noben uporabnik podatki nikoli, nikoli, nikoli 697 00:30:34,850 --> 00:30:36,730 shranjena pri bye nič? 698 00:30:36,730 --> 00:30:39,610 Sicer pa tudi v moji poljubno primer prej nisem začeti številčenje 699 00:30:39,610 --> 00:30:40,390 bajti nič. 700 00:30:40,390 --> 00:30:41,540 Začel sem na eni. 701 00:30:41,540 --> 00:30:44,950 Ker sem vedel, da so ljudje na svetu so se odločili, da si pridržujejo nič 702 00:30:44,950 --> 00:30:47,970 bajt nikomur v RAM, kolikor nekaj posebnega. 703 00:30:47,970 --> 00:30:52,020 >> Razlog je, kadarkoli želite znamenje, da je nekaj narobe 704 00:30:52,020 --> 00:30:55,960 glede naslovov, ste se vrnili null - sicer znan kot nič - 705 00:30:55,960 --> 00:30:59,410 in ker veš, da ni zakonit podatke na naslovu nič jasno 706 00:30:59,410 --> 00:31:00,400 to pomeni napako. 707 00:31:00,400 --> 00:31:04,080 In zato smo po dogovoru, preverite za ničelno in vrnitev nečesa 708 00:31:04,080 --> 00:31:06,260 kot eden v teh primerih. 709 00:31:06,260 --> 00:31:09,300 >> Torej, če se pomaknete navzdol zdaj, to je samo potem nekaj preverjanje napak, samo v primeru 710 00:31:09,300 --> 00:31:10,610 kaj je šlo narobe z [? bail?] 711 00:31:10,610 --> 00:31:13,470 skupaj in zaprete program z vrnitvijo zgodaj. 712 00:31:13,470 --> 00:31:19,030 Ta linija bi se sedaj lahko zapišemo kot je to, kar pomeni, kaj? 713 00:31:19,030 --> 00:31:23,155 Na levi strani, daj mi drugo kazalec na znak in sprožajo je t. 714 00:31:23,155 --> 00:31:26,935 Kaj sem shranjevanja znotraj t, ki temelji na eno vrstico kode? 715 00:31:26,935 --> 00:31:30,950 716 00:31:30,950 --> 00:31:32,170 >> Jaz shranjevanje lokacijo. 717 00:31:32,170 --> 00:31:34,742 Specifično lokacijo da je v s. 718 00:31:34,742 --> 00:31:39,000 Torej, če je uporabnik vnesli v zdravo, in da najprej pozdravite se zgodi, da na koncu 719 00:31:39,000 --> 00:31:42,567 , potem pa se število 123 je bo vrnil iz dobili 720 00:31:42,567 --> 00:31:43,810 obesil in shranjeni - 721 00:31:43,810 --> 00:31:44,780 kot smo že povedali - 722 00:31:44,780 --> 00:31:45,440 vs. 723 00:31:45,440 --> 00:31:50,560 >> Ko sem zdaj razglaša drugo kazalec char in ga imenujemo t, kar je število 724 00:31:50,560 --> 00:31:53,940 Dobesedno bo na koncu leta Ne glede na zgodbo? 725 00:31:53,940 --> 00:31:55,420 Torej 123. 726 00:31:55,420 --> 00:32:00,310 >> Torej tehnično zdaj tako je in t so kazali na točno 727 00:32:00,310 --> 00:32:02,410 enake kose pomnilnika. 728 00:32:02,410 --> 00:32:06,140 Torej opazili kaj bom sedaj storiti, da dokazati, da je ta program vozičkom. 729 00:32:06,140 --> 00:32:08,820 >> Najprej bom trdijo, s print f, kapitalizacijo 730 00:32:08,820 --> 00:32:10,080 kopijo niza. 731 00:32:10,080 --> 00:32:11,660 Potem bom naredil malo Preverjanje napak. 732 00:32:11,660 --> 00:32:12,160 Jaz bom se prepričajte. 733 00:32:12,160 --> 00:32:16,710 Dajmo se prepričajte, da je niz t na vsaj večja od nič dolžine, 734 00:32:16,710 --> 00:32:19,190 tako da je nekaj znakov je dejansko izkoristili. 735 00:32:19,190 --> 00:32:22,840 >> In potem boste morda spomni tega iz prejšnjih primerov. 736 00:32:22,840 --> 00:32:25,630 2. Zgornji - ki je v ctype.h datoteke. 737 00:32:25,630 --> 00:32:30,800 T nosilec nič mi daje nič znak niza t. 738 00:32:30,800 --> 00:32:34,360 In 2. zgornji del iste vrednosti, Tečaj, ga pretvori v velike črke. 739 00:32:34,360 --> 00:32:38,230 >> Torej intuitivno, to označite vrstico kode je izkoristila prvo 740 00:32:38,230 --> 00:32:40,250 črka t. 741 00:32:40,250 --> 00:32:44,485 Ampak to ni izkoristila, intuitivno, prva črka v s. 742 00:32:44,485 --> 00:32:48,130 Toda, če razmišljate naprej, kaj sem jaz nadeja, ko sem zagon tega programa 743 00:32:48,130 --> 00:32:54,220 in izpisal tako original, s, in ti kopijo, t? 744 00:32:54,220 --> 00:32:55,350 >> Oni dejansko dogaja, da je isto. 745 00:32:55,350 --> 00:32:56,600 In zato se bo enaka? 746 00:32:56,600 --> 00:32:58,970 747 00:32:58,970 --> 00:33:01,020 Oni so tako kaže na natanko isto stvar. 748 00:33:01,020 --> 00:33:01,610 Torej, kaj je to. 749 00:33:01,610 --> 00:33:03,160 >> Naredite kopijo nič. 750 00:33:03,160 --> 00:33:04,070 To prevede v redu. 751 00:33:04,070 --> 00:33:06,500 Dovolite mi, da teče kopiranje nič. 752 00:33:06,500 --> 00:33:10,110 Dovolite mi, vnesite nekaj podobnega zdravo v vse male nato pritisnite tipko Enter. 753 00:33:10,110 --> 00:33:16,520 In trdi, da prvotna s in izvod dejansko enaki. 754 00:33:16,520 --> 00:33:17,920 >> Torej, kaj se je zares zgodilo? 755 00:33:17,920 --> 00:33:20,100 Dovolite mi, da izvlečete to sliko le povedati zgodbo v 756 00:33:20,100 --> 00:33:21,340 nekoliko drugačen način. 757 00:33:21,340 --> 00:33:26,060 Kaj se v resnici dogaja pod hood ko Izjavljam, nekaj podobnega 758 00:33:26,060 --> 00:33:30,410 znak začetek s, ali niz s, Dobim kazalec - 759 00:33:30,410 --> 00:33:33,090 ki se zgodi, da je štiri bajte V CS50 naprave 760 00:33:33,090 --> 00:33:34,410 in v veliko računalnikov. 761 00:33:34,410 --> 00:33:36,008 In bom poklical to je. 762 00:33:36,008 --> 00:33:39,810 In to ima trenutno nekateri neznano vrednost. 763 00:33:39,810 --> 00:33:43,900 >> Ko izjavi spremenljivko, razen če si dal vrednost tam, kdo 764 00:33:43,900 --> 00:33:44,570 ve, kaj je tam. 765 00:33:44,570 --> 00:33:48,110 To je lahko nekaj naključno zaporedje bitov iz prejšnjega izvedbo. 766 00:33:48,110 --> 00:33:52,490 Torej, ko sem v mojem kode ne dobijo niz in nato shrani vrnitev 767 00:33:52,490 --> 00:33:54,800 Vrednost vs dobili niz nekako - 768 00:33:54,800 --> 00:33:58,520 In bomo sčasoma lupine nazaj kako priti vrvice dela, nekako razporeja 769 00:33:58,520 --> 00:34:00,480 matrika, ki je verjetno videti bit, kot je ta. 770 00:34:00,480 --> 00:34:05,390 H-E-L-L-O, nagibnica nič. 771 00:34:05,390 --> 00:34:09,510 >> Recimo, da je to naslov 123 samo prvi doslednost. 772 00:34:09,510 --> 00:34:13,000 Torej, dobil niz vrne v poudarjeno linijo tam, se vrne 773 00:34:13,000 --> 00:34:15,000 Številka smo rekli, 123. 774 00:34:15,000 --> 00:34:17,420 Torej, kaj pravzaprav gre notranjost je tu? 775 00:34:17,420 --> 00:34:26,590 >> No, kaj res gre Notranjost s je 123. 776 00:34:26,590 --> 00:34:29,250 Vendar odkrito povedano, sem že malo zmedeni zaradi vseh teh naslovov, 777 00:34:29,250 --> 00:34:30,320 Vse te poljubnih številk. 778 00:34:30,320 --> 00:34:32,290 123, 124, 127. 779 00:34:32,290 --> 00:34:34,570 Torej, kaj je pravzaprav poenostavitev svet malo. 780 00:34:34,570 --> 00:34:38,800 >> Ko govorimo o kazalci, odkrito povedano, da nas ljudje, ki vraga briga, če 781 00:34:38,800 --> 00:34:39,870 stvari so v spomin? 782 00:34:39,870 --> 00:34:41,080 To je povsem samovoljno. 783 00:34:41,080 --> 00:34:43,370 To bo odvisno od tega, kako veliko RAM-a ima uporabnik. 784 00:34:43,370 --> 00:34:46,590 To bo odvisno, če na dan zaženete program, morda, in 785 00:34:46,590 --> 00:34:48,250 kaj vložek uporabniku vam daje. 786 00:34:48,250 --> 00:34:50,060 Mi smo stanovanje na nepomembnih podrobnostih. 787 00:34:50,060 --> 00:34:54,230 >> Torej, kaj je abstraktna stran in reči, da je ko zaženete vrstico kode, kot je ta, 788 00:34:54,230 --> 00:34:57,320 char zvezda je dobil vrnitev Vrednost get niza. 789 00:34:57,320 --> 00:35:02,720 Zakaj ne bi namesto tega preprosto sestaviti, kar smo da kliče kazalec, kot da je 790 00:35:02,720 --> 00:35:04,140 kaže na nekaj? 791 00:35:04,140 --> 00:35:07,000 Tako da sem zdaj trdijo, da je do je kazalec - 792 00:35:07,000 --> 00:35:08,480 Pod pokrovom je naslov. 793 00:35:08,480 --> 00:35:11,330 Ampak to je samo kaže na prvi bajt pri 794 00:35:11,330 --> 00:35:12,780 niz, ki je bil vrnjen. 795 00:35:12,780 --> 00:35:16,710 >> Če bom zdaj vrnil na kodo tukaj kaj se dogaja na tej liniji? 796 00:35:16,710 --> 00:35:20,020 No, v tej označeno linijo sedaj, Jaz razglasitvi očitno še 797 00:35:20,020 --> 00:35:21,070 spremenljivka imenovan t. 798 00:35:21,070 --> 00:35:25,700 Ampak to je tudi kazalec, tako da bom da se pripravi kot v teoriji, natančna 799 00:35:25,700 --> 00:35:26,710 Velikost polje enako. 800 00:35:26,710 --> 00:35:28,160 In jaz bom, da ga pokličete t. 801 00:35:28,160 --> 00:35:33,500 >> In zdaj, če gremo nazaj na kodo še enkrat ko sem shraniti notri t, 802 00:35:33,500 --> 00:35:36,920 kaj sem jaz tehnično dajanje znotraj t? 803 00:35:36,920 --> 00:35:39,350 No, tehnično, to je število 123. 804 00:35:39,350 --> 00:35:42,270 Torej, res sem se pisno številka 123 tam. 805 00:35:42,270 --> 00:35:43,900 Ampak kaj je to višji ravni sprejeti. 806 00:35:43,900 --> 00:35:48,090 t, če je to samo kazalec, intuitivno, je prav to. 807 00:35:48,090 --> 00:35:49,800 To je vse, kar bi shranjena notri. 808 00:35:49,800 --> 00:35:54,970 >> Sedaj je v zadnjih zanimivih linij kode, ko sem dejansko šel okoli 809 00:35:54,970 --> 00:36:00,680 pripisala nič značaja na t, kaj se dogaja? 810 00:36:00,680 --> 00:36:06,310 No, t nosilec nič se zdaj kaže s tem, kar lik, verjetno? 811 00:36:06,310 --> 00:36:07,460 >> To se kaže na h. 812 00:36:07,460 --> 00:36:08,870 Ker t nosilec nič - 813 00:36:08,870 --> 00:36:12,490 opozarjajo, da je to stara sintaksa. t kotnik nič pomeni samo, če je t niz, t 814 00:36:12,490 --> 00:36:15,590 Nosilec nič pomeni, dobili nič lik v tej moči. 815 00:36:15,590 --> 00:36:18,650 Torej, kaj to v resnici pomeni je šel v ta sklop - 816 00:36:18,650 --> 00:36:21,520 in ja, to bi bilo 123, to je lahko 124. 817 00:36:21,520 --> 00:36:22,790 Ampak to je vse relativno, ne pozabite. 818 00:36:22,790 --> 00:36:25,640 Kadarkoli govorimo o matriki, ki smo jih Prednost govoriš 819 00:36:25,640 --> 00:36:27,000 relativna indeksi. 820 00:36:27,000 --> 00:36:31,120 >> In sedaj lahko samo prevzeti da t nosilec nič je h. 821 00:36:31,120 --> 00:36:35,090 Torej, če kličem 2 zgornja na to, kaj je to res delaš se kapitalizirajo 822 00:36:35,090 --> 00:36:38,290 male h z veliko začetnico H. Ampak seveda, kaj je? 823 00:36:38,290 --> 00:36:41,010 To se kaže na isti darn niza. 824 00:36:41,010 --> 00:36:44,200 >> Torej, to je vse, kar se dogaja v kodi doslej. 825 00:36:44,200 --> 00:36:45,960 Torej, kaj je potem posledice? 826 00:36:45,960 --> 00:36:48,300 Kako bomo rešili teh dveh problemov? 827 00:36:48,300 --> 00:36:50,870 Kako bomo primerjali z dejanskimi strune? 828 00:36:50,870 --> 00:36:53,720 >> No intuitivno, kako bi greste o primerjavi dveh 829 00:36:53,720 --> 00:36:55,090 strune za resnično enakopravnost? 830 00:36:55,090 --> 00:36:58,920 831 00:36:58,920 --> 00:37:00,750 >> Kaj pomeni, če se dva niza sta enaka? 832 00:37:00,750 --> 00:37:04,330 Ni jasno, da so njihovi naslovi enako v spomin, ker to je nizka 833 00:37:04,330 --> 00:37:06,590 Podatek o izvajanju raven. 834 00:37:06,590 --> 00:37:08,360 Vsi znaki so enaki. 835 00:37:08,360 --> 00:37:12,810 Torej, kaj mi predlaga, naj vam predstavim v različici ene od compare.c 836 00:37:12,810 --> 00:37:14,970 tukaj, tako da primerjate-1.c. 837 00:37:14,970 --> 00:37:19,590 >> Dovolite mi, da predlagam, da še vedno zaslužiti Kazalec se imenuje i in trgovina na to 838 00:37:19,590 --> 00:37:20,610 vrne vrednost get niza. 839 00:37:20,610 --> 00:37:21,750 Naredimo isto st. 840 00:37:21,750 --> 00:37:23,230 Torej nobeden od oznake je drugačna. 841 00:37:23,230 --> 00:37:25,420 Bom dodati malo preverjanje zdaj več napak. 842 00:37:25,420 --> 00:37:29,390 Torej sedaj, da smo neke vrste piling nazaj to plasti v CS50, kaj niz 843 00:37:29,390 --> 00:37:33,520 dejansko je, da morajo biti bolj anal v tem, da se ne zlorablja 844 00:37:33,520 --> 00:37:35,330 neveljavnih vrednote, kot so nične. 845 00:37:35,330 --> 00:37:36,440 >> Torej, grem preveriti. 846 00:37:36,440 --> 00:37:41,490 Če je ni enak nično in t ne enaka nič, to pomeni, da si v redu. 847 00:37:41,490 --> 00:37:44,460 Get niz ni zajebal pridobivanje eno od teh nizov. 848 00:37:44,460 --> 00:37:51,270 In lahko morda veš zdaj, kaj ne STR CMP verjetno naredil? 849 00:37:51,270 --> 00:37:52,000 String primerjavo. 850 00:37:52,000 --> 00:37:55,470 >> Torej, če ste program java prej, to je kot metodo enaka v 851 00:37:55,470 --> 00:37:56,490 Niz razred. 852 00:37:56,490 --> 00:37:57,890 Toda za tiste, ki nimajo programirana prej, 853 00:37:57,890 --> 00:37:59,320 to je samo funkcija c. 854 00:37:59,320 --> 00:38:02,180 To se zgodi, da pridejo v datoteka z imenom string.h. 855 00:38:02,180 --> 00:38:03,830 To je, kjer je to prijavljeni. 856 00:38:03,830 --> 00:38:05,110 >> In godalni primerjavo - 857 00:38:05,110 --> 00:38:07,530 Pravzaprav sem pozabil njegovo uporabo, vendar nikoli ne moti, da. 858 00:38:07,530 --> 00:38:10,470 Spomnimo se, da lahko storimo Človek, premešamo primerjavo. 859 00:38:10,470 --> 00:38:12,590 In to se dogaja, da bi do Programerji Linux navodila. 860 00:38:12,590 --> 00:38:14,060 In to je, odkrito povedano, malce skrivnosten. 861 00:38:14,060 --> 00:38:15,270 Vendar sem lahko tukaj vidite, da, ja. 862 00:38:15,270 --> 00:38:17,570 Moram tudi string.h. 863 00:38:17,570 --> 00:38:20,590 >> In tukaj piše pod opisom " Niz funkcija primerjaj primerja 864 00:38:20,590 --> 00:38:24,560 dva niza S1 in S2. "In S1 in S2 sta očitno dve 865 00:38:24,560 --> 00:38:26,120 Argumenti opravili noter 866 00:38:26,120 --> 00:38:28,650 Res ne spomnim, kaj const je, ampak zdaj opazil - 867 00:38:28,650 --> 00:38:31,480 in lahko že to videli, ko ste uporabite man strani, če 868 00:38:31,480 --> 00:38:32,390 imajo vse - 869 00:38:32,390 --> 00:38:36,220 da znak zvezda je le sinonim z vrvico. 870 00:38:36,220 --> 00:38:40,440 >> Tako da primerja dva niza, S1 in S2, in vrne celo manj 871 00:38:40,440 --> 00:38:44,930 od ali enaka ali večja od nič če se ugotovi, S1, oziroma, da se 872 00:38:44,930 --> 00:38:47,450 nižji ali enaki, ali biti večja od S2. 873 00:38:47,450 --> 00:38:51,220 To je samo zelo zapleten način rekel da niz primerjati donose 874 00:38:51,220 --> 00:38:55,760 nič, če dva niza sta intuitivno identična, znak za 875 00:38:55,760 --> 00:38:57,120 znak za znakom. 876 00:38:57,120 --> 00:38:59,970 >> Se vrne negativno število če i, po abecedi, naj 877 00:38:59,970 --> 00:39:01,010 priti pred t. 878 00:39:01,010 --> 00:39:05,300 Ali pa vrne pozitivno število, če i naj bi prišel po t 879 00:39:05,300 --> 00:39:06,170 po abecedi. 880 00:39:06,170 --> 00:39:08,360 Torej s te preproste funkcije, lahko si, na primer, razvrstite 881 00:39:08,360 --> 00:39:09,770 cel kup besed? 882 00:39:09,770 --> 00:39:13,984 >> Torej, v tej novi različici, bom iti naprej in compare1. 883 00:39:13,984 --> 00:39:15,750 Dot poševnica primerjati enega. 884 00:39:15,750 --> 00:39:18,030 Bom vnesite zdravo v vseh malimi črkami. 885 00:39:18,030 --> 00:39:20,300 Jaz grem vnesti zdravo v vseh male znova. 886 00:39:20,300 --> 00:39:23,340 In na srečo zdaj se zaveda, Sem tipkal isto stvar. 887 00:39:23,340 --> 00:39:27,520 >> Medtem, če se vpišem v zdravo v spodnji primera in HELLO v zgornjem primeru in 888 00:39:27,520 --> 00:39:29,710 jih primerjajo, sem tipkal različni stvari. 889 00:39:29,710 --> 00:39:32,530 Ker ne le, da so naslovi različni, vendar smo primerjali 890 00:39:32,530 --> 00:39:35,350 vedno znova različnih znakov. 891 00:39:35,350 --> 00:39:37,320 >> Pa pojdimo in določi enega Druga težava zdaj. 892 00:39:37,320 --> 00:39:41,590 Naj se odprejo različico eno od kopija, ki zdaj obravnava 893 00:39:41,590 --> 00:39:42,900 to vprašanje takole. 894 00:39:42,900 --> 00:39:45,650 In to se dogaja, da si malo bolj zapletena. 895 00:39:45,650 --> 00:39:49,320 Toda če mislite, kaj problem smo treba rešiti, upajmo, da bo to 896 00:39:49,320 --> 00:39:51,870 jasno, čez nekaj trenutkov zdaj. 897 00:39:51,870 --> 00:39:57,280 >> Torej je to prva vrstica, znak start t, v smislu navadnega je lahko nekdo predlaga 898 00:39:57,280 --> 00:39:59,450 Kaj ta vrstica tu pomeni? 899 00:39:59,450 --> 00:40:01,050 Char zvezda t, kaj je to delaš? 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 Ustvarite kazalec na nekatere mesto v pomnilniku. 903 00:40:09,500 --> 00:40:10,930 In mi ga malo izboljšati. 904 00:40:10,930 --> 00:40:17,180 Razglasi spremenljivko, ki bo hranila Naslov nekaterih znak v spomin, le 905 00:40:17,180 --> 00:40:18,480 da se malo bolj pravilno. 906 00:40:18,480 --> 00:40:21,210 >> OK, zdaj na desni strani, sem nikoli nisem videl enega od teh funkcij 907 00:40:21,210 --> 00:40:22,660 prej, malloc. 908 00:40:22,660 --> 00:40:26,980 Ampak kaj bi to pomenilo? 909 00:40:26,980 --> 00:40:28,050 Dodeljevanje pomnilnika. 910 00:40:28,050 --> 00:40:29,410 Dodeljevanje pomnilnika. 911 00:40:29,410 --> 00:40:33,050 >> Tako se izkaže, do sedaj smo ni res imela močan način 912 00:40:33,050 --> 00:40:36,210 prosi operacijski sistem, dajte mi neki spomin. 913 00:40:36,210 --> 00:40:39,980 Namesto tega imamo zdaj funkcijo imenovano malloc da počne ravno to. 914 00:40:39,980 --> 00:40:42,960 Čeprav je to malo moteča zdaj, opazili, da v 915 00:40:42,960 --> 00:40:46,200 med oklepaju je šele bo število. 916 00:40:46,200 --> 00:40:48,510 Kjer sem tipkal na vprašanje oznake lahko število. 917 00:40:48,510 --> 00:40:51,020 >> In to število pomeni, Dajte mi 10 bajtov. 918 00:40:51,020 --> 00:40:52,320 Daj mi 20 bajtov. 919 00:40:52,320 --> 00:40:53,820 Daj mi 100 bajtov. 920 00:40:53,820 --> 00:40:56,500 In bo malloc po svojih močeh vprašajte operacijski sistem - 921 00:40:56,500 --> 00:40:57,630 Linux, v tem primeru - 922 00:40:57,630 --> 00:40:59,630 hej, so njihovi 100 bajtov RAM na voljo? 923 00:40:59,630 --> 00:41:04,320 Če je tako, se vrnite tiste bajte, ki mi jih vračanje naslov katerega od 924 00:41:04,320 --> 00:41:06,610 tisti bajti, morda? 925 00:41:06,610 --> 00:41:07,610 Zelo prvi. 926 00:41:07,610 --> 00:41:10,460 >> Torej tudi tu - in to je prevladujoča v C, kadarkoli si 927 00:41:10,460 --> 00:41:11,680 ki se ukvarjajo z naslovi? 928 00:41:11,680 --> 00:41:15,830 Ti si skoraj vedno ukvarjajo z Prvi tak naslov, ne glede na to, kako velik 929 00:41:15,830 --> 00:41:19,490 kos pomnilnika, ste se vrnil, tako rekoč. 930 00:41:19,490 --> 00:41:20,880 >> Torej, da se potopite v igro. 931 00:41:20,880 --> 00:41:23,940 Jaz sem poskušal razporediti kako veliko bajti, točno? 932 00:41:23,940 --> 00:41:24,080 No. 933 00:41:24,080 --> 00:41:26,090 Dolžina niz s - lets ' ne konkreten primer. 934 00:41:26,090 --> 00:41:30,700 Če je, je zdravo, H-E-L-L-O, kaj je Niz dolžine s, seveda? 935 00:41:30,700 --> 00:41:32,010 Torej je pet. 936 00:41:32,010 --> 00:41:34,590 Ampak delam plus 1 o tem, zakaj? 937 00:41:34,590 --> 00:41:37,700 Zakaj želim šest zlogov namesto petih? 938 00:41:37,700 --> 00:41:38,790 Null znak. 939 00:41:38,790 --> 00:41:41,210 >> Nočem pustiti off to Posebna null znak. 940 00:41:41,210 --> 00:41:45,160 Ker če naredim kopijo Pozdravljeni in pač H-E-L-L-O, ampak jaz ne dajo 941 00:41:45,160 --> 00:41:50,160 da je poseben znak, računalnik ne bi imeli, po naključju, backslash 942 00:41:50,160 --> 00:41:51,730 ni nič za mene. 943 00:41:51,730 --> 00:41:55,570 In tako, če sem poskušal ugotoviti, Dolžina kopijo, sem morda misliš, da 944 00:41:55,570 --> 00:41:59,360 to je dolga 20 znakov, ali milijon znakov, če mi ne bo zgodilo 945 00:41:59,360 --> 00:42:01,050 udariti poševnico nazaj nič. 946 00:42:01,050 --> 00:42:05,780 >> Zato moramo šest bajtov za shranjevanje H-E-L-L-O, nagibnica nič. 947 00:42:05,780 --> 00:42:07,870 In potem je to samo da je super anal. 948 00:42:07,870 --> 00:42:10,700 Recimo, da sem pozabil, kaj velikost char je. 949 00:42:10,700 --> 00:42:12,020 Hranimo pojasni, je to en bajt. 950 00:42:12,020 --> 00:42:12,860 In ponavadi je. 951 00:42:12,860 --> 00:42:15,425 V teoriji bi lahko bilo kaj različna, na drug računalnik ali 952 00:42:15,425 --> 00:42:16,250 drugačna PC. 953 00:42:16,250 --> 00:42:19,650 >> Tako se izkaže, da je ta izvajalec imenovano sizeof da če jo je mimo 954 00:42:19,650 --> 00:42:22,680 ime podatkovnega tipa - kot char, ali int ali float - 955 00:42:22,680 --> 00:42:26,930 vam bo povedal, dinamično, koliko bajtov char zavzema za to 956 00:42:26,930 --> 00:42:28,090 Zlasti računalnik. 957 00:42:28,090 --> 00:42:31,360 >> Torej je to dejansko samo Kot bi rekel krat 1 ali 958 00:42:31,360 --> 00:42:32,440 krat sploh nič. 959 00:42:32,440 --> 00:42:36,340 Ampak to delam samo, da je super anal, da samo v primeru, char razlikuje 960 00:42:36,340 --> 00:42:40,610 na vašem računalniku proti rudnikom, na ta način matematika je vedno tekoč, da preverite. 961 00:42:40,610 --> 00:42:43,720 >> Končno, tukaj sem ček za nično, kar je vedno dobra praksa - še enkrat, 962 00:42:43,720 --> 00:42:44,920 koli imamo opravka s kazalci. 963 00:42:44,920 --> 00:42:47,520 Če malloc ni bil sposoben dati me šest odstavne niše - kar je 964 00:42:47,520 --> 00:42:49,210 verjetno ne, ampak samo v primeru - 965 00:42:49,210 --> 00:42:50,730 takoj vrniti eno. 966 00:42:50,730 --> 00:42:53,290 In zdaj, pojdi naprej in kopiranje niz, kot sledi. 967 00:42:53,290 --> 00:42:57,240 In to je znano sintakso, čeprav v drugačni vlogi. 968 00:42:57,240 --> 00:43:01,210 >> Jaz grem naprej in dobili niz Dolžina ih in ga shranite v n. 969 00:43:01,210 --> 00:43:06,620 Jaz sem potem bo ponovitev iz i je enak nič do vključno n 970 00:43:06,620 --> 00:43:08,410 večja ali enaka. 971 00:43:08,410 --> 00:43:13,540 Tako da na vsaki ponovitvi, sem dal i-narava-ih v i- 972 00:43:13,540 --> 00:43:15,380 značaj t. 973 00:43:15,380 --> 00:43:18,190 >> Torej, kaj se v resnici dogaja pod hood tukaj? 974 00:43:18,190 --> 00:43:22,140 Torej, če je ta, na primer, je s - 975 00:43:22,140 --> 00:43:26,400 in sem vnesli v besedo H-E-L-L-O in tam je backslash nič. 976 00:43:26,400 --> 00:43:29,020 Še enkrat, to je obrnjena tukaj. 977 00:43:29,020 --> 00:43:30,830 In tu je t. 978 00:43:30,830 --> 00:43:34,860 >> To kaže zdaj kopija spomina, kajne? 979 00:43:34,860 --> 00:43:37,340 Malloc mi je dal celotno kos pomnilnika. 980 00:43:37,340 --> 00:43:41,440 Ne vem, kaj je sprva V nobenem od teh mest. 981 00:43:41,440 --> 00:43:44,340 Torej bom razmišljati o njih, kot cel kup vprałaji. 982 00:43:44,340 --> 00:43:50,190 >> Ampak takoj, ko sem začel zanka od nič gor skozi dolžino S, T 983 00:43:50,190 --> 00:43:52,790 Nosilec nič in t nosilec 1 - 984 00:43:52,790 --> 00:43:55,080 in bom to dal zdaj v zgornjem delu - 985 00:43:55,080 --> 00:44:04,190 t nosilec nič in je nosilec nič pomenilo da bom za kopiranje 986 00:44:04,190 --> 00:44:09,875 ponavljajočim h tukaj, E-L-L-O. Plus, ker sem naredil plus 987 00:44:09,875 --> 00:44:12,370 1, backslash nič. 988 00:44:12,370 --> 00:44:19,060 >> Sedaj v primeru Primerjava-c 1., Na koncu, če sem natisnete 989 00:44:19,060 --> 00:44:24,760 kapitalizacija t, bi morali vidim, da je nespremenjen. 990 00:44:24,760 --> 00:44:26,090 Dovolite mi, da gredo naprej in zdaj to. 991 00:44:26,090 --> 00:44:28,630 Zato poskrbite, copy1. 992 00:44:28,630 --> 00:44:30,860 Dot slash copy1. 993 00:44:30,860 --> 00:44:33,670 Jaz grem vnesti zdravo, Enter. 994 00:44:33,670 --> 00:44:37,430 In zdaj opazil, samo kopijo je bil začetnico. 995 00:44:37,430 --> 00:44:40,890 Ker sem resnično imamo dva kose pomnilnika. 996 00:44:40,890 --> 00:44:44,390 >> Na žalost, to lahko storite nekaj precej slabe in precej nevarno stvari tukaj. 997 00:44:44,390 --> 00:44:49,290 Dovolite mi, dvigni primer tukaj zdaj, ki nam daje zgled nekaj 998 00:44:49,290 --> 00:44:51,540 Različne linije. 999 00:44:51,540 --> 00:44:56,040 Torej samo intuitivno tukaj, prva vrstica kode, int x zvezda, ki je razglasila 1000 00:44:56,040 --> 00:44:57,340 spremenljivka imenovan x. 1001 00:44:57,340 --> 00:44:58,810 In kaj je podatkovni tip te spremenljivke? 1002 00:44:58,810 --> 00:45:01,820 1003 00:45:01,820 --> 00:45:04,290 Kaj je podatkovni tip te spremenljivke? 1004 00:45:04,290 --> 00:45:06,980 To ni bilo Alpinista. 1005 00:45:06,980 --> 00:45:08,350 >> Podatkovnega tipa int zvezda. 1006 00:45:08,350 --> 00:45:12,600 Torej, kaj to pomeni? x bo shranjevanje naslov notr. 1007 00:45:12,600 --> 00:45:13,520 Enostavno kot da. 1008 00:45:13,520 --> 00:45:16,220 Y se dogaja, da shranite naslov notr. 1009 00:45:16,220 --> 00:45:18,390 Kaj je tretja vrstica kode počne tam? 1010 00:45:18,390 --> 00:45:21,850 To je dodeljevanje koliko zlogov, najverjetneje? 1011 00:45:21,850 --> 00:45:22,350 Štiri. 1012 00:45:22,350 --> 00:45:25,460 Zaradi velikosti notr je praviloma štiri, malloc štirih daje 1013 00:45:25,460 --> 00:45:29,950 me nazaj naslov na kos spomin, prva katerega bajtov, 1014 00:45:29,950 --> 00:45:32,110 sedaj shranjen v x. 1015 00:45:32,110 --> 00:45:34,410 >> Zdaj gremo malo hitreje. 1016 00:45:34,410 --> 00:45:35,760 Star x pomeni kaj? 1017 00:45:35,760 --> 00:45:38,480 1018 00:45:38,480 --> 00:45:42,590 To pomeni, da gredo na ta naslov in dal kaj več tam? 1019 00:45:42,590 --> 00:45:43,870 To število 42 tam. 1020 00:45:43,870 --> 00:45:47,590 Star y pomeni iti, kaj je na y in dal številko 13 tam. 1021 00:45:47,590 --> 00:45:48,600 >> Toda počakaj malo. 1022 00:45:48,600 --> 00:45:51,640 Kateri je y trenutno? 1023 00:45:51,640 --> 00:45:54,950 Kaj je naslov y shranjevanje? 1024 00:45:54,950 --> 00:45:55,770 Ne vemo, kajne? 1025 00:45:55,770 --> 00:45:59,230 Nikoli nismo enkrat uporabite nalogo Operater, ki vključuje y. 1026 00:45:59,230 --> 00:46:03,370 Torej, y, kot je opredeljena v drugi vrstici koda je le nekaj smeti vrednost, velik 1027 00:46:03,370 --> 00:46:04,760 vprašaj tako rekoč. 1028 00:46:04,760 --> 00:46:07,230 Lahko se naključno obrnjena za kaj v spomin, ki 1029 00:46:07,230 --> 00:46:08,340 je na splošno slabo. 1030 00:46:08,340 --> 00:46:13,540 >> Torej, takoj, ko smo zadeli to vrstico tam, zvezda y enaka 13, nekaj slabega, 1031 00:46:13,540 --> 00:46:17,220 Nekaj ​​zelo slabo gre se zgodi, da Binky. 1032 00:46:17,220 --> 00:46:25,810 Torej, da vidimo, kaj se bo na koncu dogaja tukaj Binky v tem trenutku 1033 00:46:25,810 --> 00:46:26,200 ali tako videti. 1034 00:46:26,200 --> 00:46:26,490 >> [Predvajanje videa] 1035 00:46:26,490 --> 00:46:26,745 >> Hej, Binky. 1036 00:46:26,745 --> 00:46:27,000 Zbudi. 1037 00:46:27,000 --> 00:46:29,296 Čas je za zabavo kazalca. 1038 00:46:29,296 --> 00:46:30,680 >> Kaj je to? 1039 00:46:30,680 --> 00:46:31,980 Spoznajo kazalci? 1040 00:46:31,980 --> 00:46:34,010 Oh, goodie. 1041 00:46:34,010 --> 00:46:37,220 >> No, za začetek, mislim, da smo bodo potrebovali nekaj nasvetov. 1042 00:46:37,220 --> 00:46:37,930 >> -V redu. 1043 00:46:37,930 --> 00:46:41,650 Ta koda namenja dva kazalca , ki lahko kažejo na cela števila. 1044 00:46:41,650 --> 00:46:43,760 >> -V redu, dobro, vidim dva kazalca. 1045 00:46:43,760 --> 00:46:45,850 Vendar pa se ne zdi, da kaže na nič. 1046 00:46:45,850 --> 00:46:46,490 >> -To je res. 1047 00:46:46,490 --> 00:46:48,630 Sprva kazalci ne opozarjajo na karkoli. 1048 00:46:48,630 --> 00:46:51,700 Stvari, ki jih kažejo, da so ti pointees, in jih ustanavljajo je 1049 00:46:51,700 --> 00:46:52,850 ločena korak. 1050 00:46:52,850 --> 00:46:53,740 >> -Oh, v redu, v redu. 1051 00:46:53,740 --> 00:46:54,500 Vedel sem, da je. 1052 00:46:54,500 --> 00:46:56,270 V pointees sta ločena. 1053 00:46:56,270 --> 00:46:58,553 Torej, kako si namenil pointee? 1054 00:46:58,553 --> 00:46:59,480 >> -V redu. 1055 00:46:59,480 --> 00:47:03,707 No, ta številka dodeli novo števil pointee, in ta del določa x 1056 00:47:03,707 --> 00:47:05,520 da kažejo na to. 1057 00:47:05,520 --> 00:47:06,760 >> Hej, da izgleda bolje. 1058 00:47:06,760 --> 00:47:08,520 Torej bi bilo nekaj storiti. 1059 00:47:08,520 --> 00:47:09,530 >> -V redu. 1060 00:47:09,530 --> 00:47:14,110 Bom dereference kazalec x za shranjevanje Številka 42 na svojem pointee. 1061 00:47:14,110 --> 00:47:17,660 Za ta trik, potreboval bom svojo čarovnijo palica za Dereferenciranje. 1062 00:47:17,660 --> 00:47:20,695 >> -Vaš čarobno palico iz Dereferenciranje? 1063 00:47:20,695 --> 00:47:22,632 Uh, to je super. 1064 00:47:22,632 --> 00:47:24,620 >> -To je tisto koda izgleda. 1065 00:47:24,620 --> 00:47:27,526 Jaz bom ustanovil številko, in - 1066 00:47:27,526 --> 00:47:28,250 >> Hej, poglej. 1067 00:47:28,250 --> 00:47:29,680 Tu gre. 1068 00:47:29,680 --> 00:47:34,520 Tako početje ciljne datoteke na x sledi arrow dostop do svojega pointee. 1069 00:47:34,520 --> 00:47:36,690 V tem primeru se za shranjevanje 42 tam. 1070 00:47:36,690 --> 00:47:40,890 Hej, poskusite ga uporabljali za shranjevanje števila 13 skozi drugi kazalec, y. 1071 00:47:40,890 --> 00:47:42,125 >> -V redu. 1072 00:47:42,125 --> 00:47:46,810 Jaz bom šel tja do y in se številka 13 ustanovi. 1073 00:47:46,810 --> 00:47:50,890 In nato z palico Dereferenciranje in samo - 1074 00:47:50,890 --> 00:47:52,430 vau! 1075 00:47:52,430 --> 00:47:53,030 >> Oh, hej. 1076 00:47:53,030 --> 00:47:54,610 To ni delo. 1077 00:47:54,610 --> 00:47:58,200 Pravijo, Binky, jaz ne mislim, Dereferenciranje y je dobra ideja, 1078 00:47:58,200 --> 00:48:01,370 ker vzpostavitev pointee je ločen korak. 1079 00:48:01,370 --> 00:48:03,460 In jaz ne mislim, da bomo kdaj to storil. 1080 00:48:03,460 --> 00:48:03,810 >> -Hmm. 1081 00:48:03,810 --> 00:48:05,160 Dobro vprašanje. 1082 00:48:05,160 --> 00:48:07,410 >> -Ja, namenila kazalec y. 1083 00:48:07,410 --> 00:48:10,045 Ampak mi nikoli ne nastavite na opozarjajo na pointee. 1084 00:48:10,045 --> 00:48:10,490 >> -Hmm. 1085 00:48:10,490 --> 00:48:12,170 Zelo pazljiv. 1086 00:48:12,170 --> 00:48:13,790 >> Hej, iščete Dobro je, Binky. 1087 00:48:13,790 --> 00:48:16,920 Lahko določi, tako da y točke na isti pointee kot X? 1088 00:48:16,920 --> 00:48:17,810 >> -Seveda. 1089 00:48:17,810 --> 00:48:20,300 Jaz bom uporabil mojo čarobno palico kazalec nalogo. 1090 00:48:20,300 --> 00:48:22,240 >> -Je, da bo problem, kot prej? 1091 00:48:22,240 --> 00:48:22,665 >> -Ne. 1092 00:48:22,665 --> 00:48:24,300 To ne dotikajte pointees. 1093 00:48:24,300 --> 00:48:27,880 Prav tako se spreminja en kazalec s točko na isto stvar kot drugo. 1094 00:48:27,880 --> 00:48:28,970 >> Oh, vidim. 1095 00:48:28,970 --> 00:48:31,730 Zdaj y opozarja na istem mestu kot x. 1096 00:48:31,730 --> 00:48:32,450 Torej, počakajte. 1097 00:48:32,450 --> 00:48:33,490 Zdaj je y določena. 1098 00:48:33,490 --> 00:48:34,630 Ima pointee. 1099 00:48:34,630 --> 00:48:36,520 Torej, lahko poskusite palico za ponovno Dereferenciranje 1100 00:48:36,520 --> 00:48:39,200 poslati 13 nad. 1101 00:48:39,200 --> 00:48:39,840 >> -V redu. 1102 00:48:39,840 --> 00:48:41,570 Tukaj gre. 1103 00:48:41,570 --> 00:48:42,870 >> Hej, poglej to. 1104 00:48:42,870 --> 00:48:44,320 Sedaj Dereferenciranje dela na y. 1105 00:48:44,320 --> 00:48:47,020 In ker so kazalci v skupni rabi da je eden pointee, da 1106 00:48:47,020 --> 00:48:48,585 tako videli 13. 1107 00:48:48,585 --> 00:48:49,040 >> -Ja. 1108 00:48:49,040 --> 00:48:49,670 Delitev. 1109 00:48:49,670 --> 00:48:50,380 Karkoli. 1110 00:48:50,380 --> 00:48:52,290 Torej bomo zamenjala zdaj? 1111 00:48:52,290 --> 00:48:52,970 >> -Oh, poglej. 1112 00:48:52,970 --> 00:48:54,150 Zmanjkuje nam časa. 1113 00:48:54,150 --> 00:48:55,200 >> Ampak - 1114 00:48:55,200 --> 00:48:57,060 >> -Samo spomnite se tri Pravila kazalec. 1115 00:48:57,060 --> 00:49:00,100 Prvič, osnovna struktura je, da imate kazalec. 1116 00:49:00,100 --> 00:49:02,170 In to kaže več na pointee. 1117 00:49:02,170 --> 00:49:04,160 Ampak kazalec in pointee sta ločena. 1118 00:49:04,160 --> 00:49:06,460 In pogosta napaka je, da vzpostavi kazalec, ampak 1119 00:49:06,460 --> 00:49:08,540 pozabi dati pointee. 1120 00:49:08,540 --> 00:49:12,460 >> Številka dve, se začne kazalec Dereferenciranje Na kazalcem in sledi svojemu 1121 00:49:12,460 --> 00:49:14,570 arrow čez dostop do svojega pointee. 1122 00:49:14,570 --> 00:49:18,640 Kot vsi vemo, to deluje samo, če obstaja je pointee, ki dobi nazaj 1123 00:49:18,640 --> 00:49:19,790 Pravilo številka ena. 1124 00:49:19,790 --> 00:49:23,670 >> Številka tri, kazalec naloga je en kazalec in spremembe, da kažejo na 1125 00:49:23,670 --> 00:49:25,850 Enako pointee kot drugi kazalec. 1126 00:49:25,850 --> 00:49:27,840 Torej, po odstopu, dva kazalca bo 1127 00:49:27,840 --> 00:49:29,430 opozarjajo na istem pointee. 1128 00:49:29,430 --> 00:49:31,600 Včasih, ki se imenuje delitev. 1129 00:49:31,600 --> 00:49:33,430 In to je vse, kar je z njo, res. 1130 00:49:33,430 --> 00:49:33,840 Adijo zdaj. 1131 00:49:33,840 --> 00:49:34,300 >> [END predvajanje videa] 1132 00:49:34,300 --> 00:49:36,940 >> DAVID Malan: Torej bolj na kazalcev, Več o Binky naslednji teden. 1133 00:49:36,940 --> 00:49:38,190 Se vidimo v ponedeljek. 1134 00:49:38,190 --> 00:49:42,187