1 00:00:00,000 --> 00:00:11,320 2 00:00:11,320 --> 00:00:13,260 >> DAVID Malan: Dobrý deň, a vitajte naspäť CS50. 3 00:00:13,260 --> 00:00:14,860 Tak to je koniec týždňa štyri. 4 00:00:14,860 --> 00:00:16,680 Len jeden oznámenie ako prvý. 5 00:00:16,680 --> 00:00:19,600 Takže tzv piatej pondelok prichádza tento rok v pondelok. 6 00:00:19,600 --> 00:00:22,800 To je príležitosť pre zmenu z SAT / UNSAT na list triedy, alebo 7 00:00:22,800 --> 00:00:24,130 list grade SAT / UNSAT. 8 00:00:24,130 --> 00:00:27,130 Hnevu, že tento proces si vyžaduje podpis, pretože je nutné vyplniť 9 00:00:27,130 --> 00:00:28,770 z jedného z tých ružových Pridať / pokles formy. 10 00:00:28,770 --> 00:00:31,680 >> Vzhľadom k tomu, technicky, SAT / UNSAT verzie a list grade verzia 11 00:00:31,680 --> 00:00:33,320 majú odlišné katalógových čísiel. 12 00:00:33,320 --> 00:00:34,240 Ale žiadny veľký problém. 13 00:00:34,240 --> 00:00:36,620 Poď ku mne, alebo Rob alebo Lauren v každom bode. 14 00:00:36,620 --> 00:00:39,550 Alebo e-mailom nám, ak nemáte druh papierovanie, čo potrebujete dnes, a my 15 00:00:39,550 --> 00:00:43,410 bude určite pomôže vziať starostlivosti, že pred pondelok. 16 00:00:43,410 --> 00:00:45,780 >> Dobre, takže dnes - 17 00:00:45,780 --> 00:00:47,630 Vlastne je tu trochu ozvena. 18 00:00:47,630 --> 00:00:51,070 Môžeme tón ma trochu dole? 19 00:00:51,070 --> 00:00:51,730 OK. 20 00:00:51,730 --> 00:00:54,850 Takže dnes predstavíme tému známy ako ukazovatele. 21 00:00:54,850 --> 00:00:57,770 A musím priznať, že je to jeden z zložitejšie témy, ktoré máme tendenciu 22 00:00:57,770 --> 00:01:00,960 zahŕňa v tejto triede, alebo naozaj nejaký úvodný kurz, ktorý používa C. 23 00:01:00,960 --> 00:01:05,510 >> Ale ver mi to, a to najmä ak vaša myseľ sa cíti trochu viac sa ohýbal 24 00:01:05,510 --> 00:01:07,100 dnes av najbližších týždňoch. 25 00:01:07,100 --> 00:01:10,340 Nie je to reprezentatívne vám darí ešte horšie, na to to jednoducho znamená, že 26 00:01:10,340 --> 00:01:13,360 Je to obzvlášť sofistikovaný téma že Sľubujem, že za pár týždňov 27 00:01:13,360 --> 00:01:17,610 preto sa bude zdať až príliš nápadne jednoduché spätne. 28 00:01:17,610 --> 00:01:18,720 >> Stále si pamätám dodnes. 29 00:01:18,720 --> 00:01:22,190 Sedel som v jedálni Elliott, sedí vedľa môjho TF Nishat Mehta, 30 00:01:22,190 --> 00:01:24,070 ktorý bol rezidentom Elliott domu. 31 00:01:24,070 --> 00:01:26,340 A z nejakého dôvodu, to téma len klikne. 32 00:01:26,340 --> 00:01:29,430 Čo znamená, že aj ja som sa snažil s ňou na nejakú dobu, ale ja 33 00:01:29,430 --> 00:01:33,610 bude v mojich silách, aby nedochádzalo každý takýto Boj s témou, ktoré v konečnom dôsledku 34 00:01:33,610 --> 00:01:34,580 je veľmi silný. 35 00:01:34,580 --> 00:01:37,350 >> V skutočnosti je jedným z tém, preberieme V nasledujúcich týždňoch je to, že 36 00:01:37,350 --> 00:01:41,130 cenného papiera, a ako môžete skutočne využitie stroja spôsoby 37 00:01:41,130 --> 00:01:42,320 , Ktoré nie sú určené. 38 00:01:42,320 --> 00:01:45,850 A tie vykorisťovania sú zvyčajne výsledkom chýb chyby, ktoré sa 39 00:01:45,850 --> 00:01:49,740 ľudia tým, že pochopenie niektorých podkladového vykonávanie 40 00:01:49,740 --> 00:01:52,250 informácie, ktoré sú prostredníctvom programov. 41 00:01:52,250 --> 00:01:55,410 >> Teraz aby to zdať viac užívateľsky priateľský, som myslel, že hrať 10 42 00:01:55,410 --> 00:01:59,680 Druhý náhľad trochu claymation Obrázok s názvom Binky, ktorý bol do 43 00:01:59,680 --> 00:02:03,020 Život by náš priateľ na Stanforde, Profesor Nick Parlante. 44 00:02:03,020 --> 00:02:06,753 Takže mi dovoľte, aby som vám dal toto teaser na Binky tu. 45 00:02:06,753 --> 00:02:09,520 >> [PLAYBACK] 46 00:02:09,520 --> 00:02:10,380 >> -Hej, Binky. 47 00:02:10,380 --> 00:02:11,050 Prebuďte sa. 48 00:02:11,050 --> 00:02:13,610 Je čas na ukazovateľ zábavu. 49 00:02:13,610 --> 00:02:14,741 >> -Čo je to? 50 00:02:14,741 --> 00:02:16,440 Informácie o ukazovateli? 51 00:02:16,440 --> 00:02:17,928 Oh, cukrovinka. 52 00:02:17,928 --> 00:02:18,920 >> [END PLAYBACK] 53 00:02:18,920 --> 00:02:20,670 >> DAVID Malan: To je Stanford počítačová veda. 54 00:02:20,670 --> 00:02:23,194 Takže viac o tom prísť. 55 00:02:23,194 --> 00:02:24,930 >> [APPLAUSE] 56 00:02:24,930 --> 00:02:26,660 >> DAVID Malan: Je nám ľúto, Nick. 57 00:02:26,660 --> 00:02:30,680 >> Takže pripomenúť, že minule sme skončili na je to naozaj vzrušujúce Cliffhanger 58 00:02:30,680 --> 00:02:32,960 pričom táto funkcia jednoducho nefungovalo. 59 00:02:32,960 --> 00:02:34,960 Aspoň intuitívne, bolo to ako by to malo fungovať. 60 00:02:34,960 --> 00:02:37,600 Jednoducho prehodenie hodnôt z dvoch celých čísel. 61 00:02:37,600 --> 00:02:40,915 Ale spomínam, že keď sme si vytlačili pôvodnej hodnoty v hlavnom jeden a 62 00:02:40,915 --> 00:02:44,210 dvaja, oni boli ešte raz a dva a nie dva a jeden. 63 00:02:44,210 --> 00:02:46,070 >> Takže dovoľte mi vlastne prepínať cez spotrebiča. 64 00:02:46,070 --> 00:02:50,180 A napísal som sa trochu kostrového kódu v predom tu, kde tvrdím, že x 65 00:02:50,180 --> 00:02:52,500 bude 1, bude mať y 2. 66 00:02:52,500 --> 00:02:54,810 Potom som vytlačiť obaja ich hodnoty s potlačou f 67 00:02:54,810 --> 00:02:57,540 >> Potom som tu tvrdia, že budeme swap. 68 00:02:57,540 --> 00:03:00,800 Nechal som prázdne miesto tu pre nás vyplniť dnes za chvíľu. 69 00:03:00,800 --> 00:03:03,380 Potom budem tvrdiť, že dve premenné boli zamenené. 70 00:03:03,380 --> 00:03:04,770 Potom idem k tlači je von. 71 00:03:04,770 --> 00:03:07,090 A tak dúfajme, že by som mal vidieť 1, 2. 72 00:03:07,090 --> 00:03:07,380 2, 1. 73 00:03:07,380 --> 00:03:09,830 Je to super jednoduché Cieľom práve teraz. 74 00:03:09,830 --> 00:03:12,430 >> Tak ako sme sa ísť o výmene dve premenné? 75 00:03:12,430 --> 00:03:17,220 No, ak navrhujem tu, že tieto poháre môže predstavovať v pamäti počítača. 76 00:03:17,220 --> 00:03:19,070 To je len pár uhryznutie, to Je ešte niekoľko uhryznutí. 77 00:03:19,070 --> 00:03:23,260 Mohli by sme sa dobrovoľníckej Poď hore a mix nám niečo na pitie, keď to povedome? 78 00:03:23,260 --> 00:03:23,920 Poď hore. 79 00:03:23,920 --> 00:03:24,815 Ako sa voláte? 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 Poď hore, Jess. 83 00:03:26,540 --> 00:03:29,180 Ak vám to nevadí, musíme dať Google Sklo na vás, takže môžeme 84 00:03:29,180 --> 00:03:30,430 zvečniť to. 85 00:03:30,430 --> 00:03:32,800 86 00:03:32,800 --> 00:03:34,670 OK, sklo. 87 00:03:34,670 --> 00:03:37,250 Nahrávanie videa. 88 00:03:37,250 --> 00:03:43,103 A OK, sú dobré ísť s Jessem tu. 89 00:03:43,103 --> 00:03:43,810 Dobrá. 90 00:03:43,810 --> 00:03:45,120 Rád Vás vidím. 91 00:03:45,120 --> 00:03:47,720 >> Takže to, čo by som chcel tu robíte - ak by ste mohol, pomerne rýchlo - 92 00:03:47,720 --> 00:03:51,040 práve nalieva nám pol pohára oranžové šťavy a pol pohára mlieka, 93 00:03:51,040 --> 00:03:55,710 čo účinne čísla 1 v jednej šálke a 2 v druhom šálke. 94 00:03:55,710 --> 00:04:01,380 95 00:04:01,380 --> 00:04:02,630 >> To bude dobré zábery. 96 00:04:02,630 --> 00:04:04,910 97 00:04:04,910 --> 00:04:05,860 >> JESS: Ospravedlňujem sa. 98 00:04:05,860 --> 00:04:06,330 >> DAVID Malan: Nie, nie. 99 00:04:06,330 --> 00:04:08,703 To je v poriadku. 100 00:04:08,703 --> 00:04:10,120 Pekný. 101 00:04:10,120 --> 00:04:12,950 Dobre, takže máme štyri byty stojí pomarančového džúsu. 102 00:04:12,950 --> 00:04:14,460 Budeme to nazval hodnotu 1. 103 00:04:14,460 --> 00:04:16,579 Teraz ďalšie štyri bajty v hodnote mlieka. 104 00:04:16,579 --> 00:04:18,519 Bude hovoriť, že hodnota 2. 105 00:04:18,519 --> 00:04:20,440 Takže x a y, resp. 106 00:04:20,440 --> 00:04:23,450 >> Dobre, takže teraz, ak úlohu po ruke - pre vás, Jess, pred všetkými 107 00:04:23,450 --> 00:04:24,270 svojich spolužiakov - 108 00:04:24,270 --> 00:04:28,510 je swap hodnoty x a y také, že chceme pomarančovej šťavy 109 00:04:28,510 --> 00:04:32,070 ďalší pohár a mlieka v tomto pohári, ako Možno si - ako je skutočne robiť 110 00:04:32,070 --> 00:04:34,020 je - ísť asi robí? 111 00:04:34,020 --> 00:04:35,220 >> OK, múdre rozhodnutie. 112 00:04:35,220 --> 00:04:36,340 Takže budete potrebovať trochu viac pamäte. 113 00:04:36,340 --> 00:04:38,190 Takže poďme prideliť dočasný pohár, ak chcete. 114 00:04:38,190 --> 00:04:40,540 A teraz pristúpiť k výmene x a y. 115 00:04:40,540 --> 00:04:52,950 116 00:04:52,950 --> 00:04:53,530 >> Výborný. 117 00:04:53,530 --> 00:04:54,420 Takže veľmi dobre. 118 00:04:54,420 --> 00:04:55,670 Ďakujem moc, Jess. 119 00:04:55,670 --> 00:04:59,520 120 00:04:59,520 --> 00:05:00,020 Prosím. 121 00:05:00,020 --> 00:05:01,950 Trochu suvenír. 122 00:05:01,950 --> 00:05:04,350 >> OK, tak samozrejme, super jednoduchý nápad. 123 00:05:04,350 --> 00:05:07,500 Úplne intuitívne, že potrebujeme trochu viac úložného priestoru - v tejto podobe, 124 00:05:07,500 --> 00:05:09,750 šálka - ak sa naozaj chcete výmena týchto dvoch premenných. 125 00:05:09,750 --> 00:05:11,110 Takže poďme robiť presne to. 126 00:05:11,110 --> 00:05:14,330 Až tu medzi tým, kde tvrdím, že som bude robiť nejaké vymieňať, ja 127 00:05:14,330 --> 00:05:15,720 choďte do toho a vyhlásiť tepl. 128 00:05:15,720 --> 00:05:17,980 A ja nastavte ju presne, povedzme, x. 129 00:05:17,980 --> 00:05:21,110 >> Potom idem zmeniť hodnotu x, rovnako ako Jess som tu s 130 00:05:21,110 --> 00:05:23,200 mlieko a pomarančový džús bzř y. 131 00:05:23,200 --> 00:05:27,460 A ja pre zmenu y sa rovná k nie x, pretože teraz budeme 132 00:05:27,460 --> 00:05:29,530 uviazol v kruhu, ale skôr temp. 133 00:05:29,530 --> 00:05:33,170 Tam, kde som dočasne - alebo tam, kde Jess dočasne dať pomarančový džús 134 00:05:33,170 --> 00:05:35,460 pred prepisovanie, že šálka s mliekom. 135 00:05:35,460 --> 00:05:37,250 >> Tak ma nechaj ísť dopredu a teraz aby to. 136 00:05:37,250 --> 00:05:39,210 Hovorí sa noswap.c. 137 00:05:39,210 --> 00:05:41,190 A teraz mi dovoľte bežať bez swapu. 138 00:05:41,190 --> 00:05:43,910 A skutočne vidím, keď som rozšíriť Okno trochu, že 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 potom je x 2, y 1. 141 00:05:47,230 --> 00:05:51,910 >> Ale pripomínam, že v pondelok sme urobili veci trochu inak, keď som 142 00:05:51,910 --> 00:05:56,760 namiesto toho splnil pomocnú funkciu, ak chcete, že bol vlastne neplatné. 143 00:05:56,760 --> 00:05:58,010 Volal som ju vymeniť. 144 00:05:58,010 --> 00:06:01,600 Dal som to dva parametre, a zavolal som im a nazval som ho b 145 00:06:01,600 --> 00:06:04,380 >> Úprimne povedané, by som mohol nazvať x a y. 146 00:06:04,380 --> 00:06:06,040 Nie je nič zastaviť ma v tom, že. 147 00:06:06,040 --> 00:06:08,140 Ale ja by som tvrdiť, že je to potom trochu nejasné. 148 00:06:08,140 --> 00:06:11,910 Vzhľadom k tomu, pripomínajú na pondelok, že sme uviedla, že tieto parametre boli 149 00:06:11,910 --> 00:06:13,650 kópia hodnôt prešiel dovnútra 150 00:06:13,650 --> 00:06:15,640 Tak to proste zmätky s mysli, myslím, že pokiaľ použijete 151 00:06:15,640 --> 00:06:17,370 presne rovnakej premennej. 152 00:06:17,370 --> 00:06:20,150 >> Tak som si namiesto toho im hovoriť a b, len pre prehľadnosť. 153 00:06:20,150 --> 00:06:21,840 Ale mohli by sme im hovoriť najviac niečo chceme. 154 00:06:21,840 --> 00:06:26,280 A ja idem skopírovať a vložiť účinne tento kód odtiaľ 155 00:06:26,280 --> 00:06:27,170 dole do tu. 156 00:06:27,170 --> 00:06:29,110 Pretože som videl, že to funguje. 157 00:06:29,110 --> 00:06:30,790 Tak to je v dobrom stave. 158 00:06:30,790 --> 00:06:37,390 A ja sa zmením x do x, mojej na môj y b a môj y do bodu B. 159 00:06:37,390 --> 00:06:39,130 >> Takže inými slovami, presne rovnaká logika. 160 00:06:39,130 --> 00:06:40,850 Presne to isté, že Jess urobil. 161 00:06:40,850 --> 00:06:44,350 A potom jedna vec, ktorú musíte urobiť, až tu, samozrejme, je teraz vyvolať toto 162 00:06:44,350 --> 00:06:45,990 funkcie alebo volanie tejto funkcie. 163 00:06:45,990 --> 00:06:50,430 Tak som sa volať túto funkciu s dvoma vstupy, x a y, a stlačte Uložiť. 164 00:06:50,430 --> 00:06:52,300 >> Dobre, tak zásadne to isté. 165 00:06:52,300 --> 00:06:55,570 V skutočnosti som asi urobil program zbytočne zložité podľa 166 00:06:55,570 --> 00:07:00,820 písať nejakú funkciu, ktorá je len zaberajú asi šesť riadkov kódu kým ja 167 00:07:00,820 --> 00:07:02,970 predtým realizované To len tri. 168 00:07:02,970 --> 00:07:06,230 >> Tak ma nechaj ísť dopredu a hneď prerobiť to, aby žiadny swapu. 169 00:07:06,230 --> 00:07:07,920 Dobre, ja to posral tu. 170 00:07:07,920 --> 00:07:11,290 To by malo byť chyba, ktorú by mohli v stále bežne ako vaše 171 00:07:11,290 --> 00:07:12,380 Programy sa zložitejšie. 172 00:07:12,380 --> 00:07:13,470 Ale je ľahké opraviť. 173 00:07:13,470 --> 00:07:15,650 Dovoľte mi, aby som sa posunúť späť sem. 174 00:07:15,650 --> 00:07:18,190 >> A čo je prvá chyba vidím? 175 00:07:18,190 --> 00:07:19,520 Implicitné vyhlásenia. 176 00:07:19,520 --> 00:07:21,466 Čo to spravidla označujú? 177 00:07:21,466 --> 00:07:22,830 Zabudol som prototyp. 178 00:07:22,830 --> 00:07:26,900 Zabudol som učiť kompilátora, že výmena bude existovať, aj keď 179 00:07:26,900 --> 00:07:28,920 neexistuje na samom začiatku programu. 180 00:07:28,920 --> 00:07:35,780 Tak som len chcel povedať, void, swap, int, int b, bodkočiarku. 181 00:07:35,780 --> 00:07:37,280 >> Tak som sa nebudem ho implementujeme. 182 00:07:37,280 --> 00:07:39,140 Ale teraz to zodpovedá tomu, čo tu dole. 183 00:07:39,140 --> 00:07:42,530 A oznámenia, absencia bodkočiarkou tu, čo nie je potrebné, ak 184 00:07:42,530 --> 00:07:43,200 vykonávanie. 185 00:07:43,200 --> 00:07:46,010 >> Dovoľte mi teda prerobiť to, aby žiadny swapu. 186 00:07:46,010 --> 00:07:46,910 Oveľa lepší tvar. 187 00:07:46,910 --> 00:07:48,130 Beh bez swapu. 188 00:07:48,130 --> 00:07:48,740 A sakra. 189 00:07:48,740 --> 00:07:51,650 Teraz sme tam, kde sme boli v pondelok, kde to nebude zameniť. 190 00:07:51,650 --> 00:07:55,410 >> A čo je intuitívne vysvetlenie , Prečo je tomu tak? 191 00:07:55,410 --> 00:07:56,380 Jo? 192 00:07:56,380 --> 00:07:57,630 >> STUDENT: [nepočuteľné]. 193 00:07:57,630 --> 00:08:04,140 194 00:08:04,140 --> 00:08:05,230 >> DAVID Malan: Presne tak. 195 00:08:05,230 --> 00:08:07,330 Tak a a b sú kópie xa y. 196 00:08:07,330 --> 00:08:10,680 A v skutočnosti, zakaždým, keď som bol volanie funkcie tak ďaleko, že sa 197 00:08:10,680 --> 00:08:12,540 prechádza premenných, ako je ints - 198 00:08:12,540 --> 00:08:14,470 rovnako ako odkladací čaká tu - 199 00:08:14,470 --> 00:08:16,270 vy boli odovzdaním kópií. 200 00:08:16,270 --> 00:08:19,150 >> Teraz to znamená, že to trvá trochu času, zlomok sekundy, pre 201 00:08:19,150 --> 00:08:23,270 počítača skopírovať bitov z jedného variabilná do bitov druhého. 202 00:08:23,270 --> 00:08:24,610 Ale to nie je tak veľký problém. 203 00:08:24,610 --> 00:08:25,920 Ale oni napriek tomu kópie. 204 00:08:25,920 --> 00:08:30,020 >> A tak teraz, v súvislosti s swapu, Som v skutočnosti úspešne 205 00:08:30,020 --> 00:08:31,180 meniace sa a a b 206 00:08:31,180 --> 00:08:33,000 V skutočnosti, poďme rýchlo zdravý rozum skontrolovať. 207 00:08:33,000 --> 00:08:36,830 Vytlačiť f je% i, nový riadok. 208 00:08:36,830 --> 00:08:38,770 A poďme sa zapojiť. 209 00:08:38,770 --> 00:08:41,830 Teraz sa poďme urobiť to isté s b. 210 00:08:41,830 --> 00:08:43,640 A poďme urobiť to isté tu. 211 00:08:43,640 --> 00:08:47,260 >> A teraz mi dovoľte, aby som kopírovať tie isté linky opäť v spodnej časti funkcie 212 00:08:47,260 --> 00:08:51,250 po mojej tri riadky zaujímavé mohol vykonávať, a 213 00:08:51,250 --> 00:08:53,270 vytlačiť a b ešte raz. 214 00:08:53,270 --> 00:08:56,030 Takže teraz poďme urobiť to, aby žiadny swapu. 215 00:08:56,030 --> 00:08:58,430 Dovoľte mi, aby som okno terminálu trochu vyššie, takže môžeme vidieť 216 00:08:58,430 --> 00:08:59,520 viac naraz. 217 00:08:59,520 --> 00:09:00,860 >> A spustiť bez swapu. 218 00:09:00,860 --> 00:09:04,000 x je 1, y je 2.. je 1, b je 2. 219 00:09:04,000 --> 00:09:06,070 A potom, je 2, b je 1. 220 00:09:06,070 --> 00:09:09,390 Tak to funguje, rovnako ako Jess som tu vnútri swapu. 221 00:09:09,390 --> 00:09:13,090 Ale samozrejme, že to nemá žiadny vplyv na premenné v main. 222 00:09:13,090 --> 00:09:15,360 >> Takže sme videli trik, kedy sme mohol opraviť, nie? 223 00:09:15,360 --> 00:09:19,560 Keď ste tvárou v tvár tejto vymedzenie rozsahu problém, mohol by si staviť a zarobiť x 224 00:09:19,560 --> 00:09:22,400 a y aké premenné miesto? 225 00:09:22,400 --> 00:09:23,390 >> Dalo by sa, aby boli globálne. 226 00:09:23,390 --> 00:09:27,560 Dajte je na samom vrchole tohto súboru ako sme to urobili, a to aj v hre 15. 227 00:09:27,560 --> 00:09:28,890 Používame globálne premenné. 228 00:09:28,890 --> 00:09:32,420 Ale v rámci hry 15, to je rozumné mať globálny 229 00:09:32,420 --> 00:09:37,170 premenná reprezentujúci dosku, pretože celistvosť 15.c je všetko 230 00:09:37,170 --> 00:09:38,650 o vykonávaní tohto hru. 231 00:09:38,650 --> 00:09:41,470 To je to, čo existuje súbor robiť. 232 00:09:41,470 --> 00:09:44,170 >> Ale v tomto prípade tu, som volanie funkcie swapu. 233 00:09:44,170 --> 00:09:45,380 Chcem vymeniť dve premenné. 234 00:09:45,380 --> 00:09:48,950 A to by sa mal začať cítiť nedbanlivý v prípade, že riešenie všetkých našich 235 00:09:48,950 --> 00:09:51,300 problémy, keď sme sa spustiť do pôsobnosti otázok je, aby to globálne. 236 00:09:51,300 --> 00:09:54,730 Pretože sa veľmi rýchlo, je náš program stane docela zmätok. 237 00:09:54,730 --> 00:09:57,760 A my sme urobili len veľmi zriedka Výsledkom tohto 15.c. 238 00:09:57,760 --> 00:10:00,470 >> Ale ukazuje sa, že je lepší spôsob, ako úplne. 239 00:10:00,470 --> 00:10:05,600 Dovoľte mi, aby som skutočne vrátiť a odstrániť vytlačiť f je, len preto, aby zjednodušenie tohto kódu. 240 00:10:05,600 --> 00:10:09,160 A dovoľte mi navrhnúť, aby to je skutočne zlá. 241 00:10:09,160 --> 00:10:15,990 Ale keď som sa namiesto toho v niektorých hviezdičkami a hviezdy, môžem namiesto toho premeniť túto 242 00:10:15,990 --> 00:10:18,670 funkcie do jedného, ​​ktorý je skutočne funkčný. 243 00:10:18,670 --> 00:10:25,020 >> Tak nechaj ma ísť späť a pripustiť, hovorí hviezdička je vždy ťažké, 244 00:10:25,020 --> 00:10:26,170 tak poviem hviezdy. 245 00:10:26,170 --> 00:10:27,660 Budem Priznáme do tej jednej. 246 00:10:27,660 --> 00:10:28,190 Dobrá. 247 00:10:28,190 --> 00:10:30,190 A teraz, čo mám robiť namiesto toho? 248 00:10:30,190 --> 00:10:34,130 >> Takže v prvom rade, budem špecifikovať že miesto odovzdávanie int do 249 00:10:34,130 --> 00:10:37,980 Swap funkcie, som miesto ísť povedať int hviezdu. 250 00:10:37,980 --> 00:10:39,170 A teraz, čo sa hviezda uviesť? 251 00:10:39,170 --> 00:10:41,970 Je to, že pojem ukazovateľ, ktorý Binky, claymation postava, bol 252 00:10:41,970 --> 00:10:43,465 s odkazom na chvíľu späť. 253 00:10:43,465 --> 00:10:47,610 >> Takže keď hovoríme pravý hviezdu, význam teraz je to, že sa nebude 254 00:10:47,610 --> 00:10:49,110 prešiel v jej hodnotou. 255 00:10:49,110 --> 00:10:50,350 To nebude kopírovať palcov 256 00:10:50,350 --> 00:10:54,700 Skôr adresa je bude odovzdaný palcov 257 00:10:54,700 --> 00:10:57,840 >> Takže pripomenúť, že vo vnútri vášho počítača je celá partia pamäti, inak 258 00:10:57,840 --> 00:10:58,760 známy ako RAM. 259 00:10:58,760 --> 00:11:00,520 A to je len RAM celá partia bajtov. 260 00:11:00,520 --> 00:11:03,320 Takže ak váš Mac alebo PC má dva GB, budete mať 2 261 00:11:03,320 --> 00:11:05,760 miliarda bajtov pamäte. 262 00:11:05,760 --> 00:11:08,440 >> Teraz len predpokladať, že len preto, aby udržať veci pekné a usporiadane sme 263 00:11:08,440 --> 00:11:09,450 priradenie adresy - 264 00:11:09,450 --> 00:11:10,170 číslo - 265 00:11:10,170 --> 00:11:12,270 je ku každému byte pamäte RAM v počítači. 266 00:11:12,270 --> 00:11:15,410 Úplne prvý bajt z týchto 2 miliárd je o číslo nula. 267 00:11:15,410 --> 00:11:18,572 Ďalšia je bajt číslo jedna, číslo dva, celú cestu hore, dot dot 268 00:11:18,572 --> 00:11:20,530 bodka, na zhruba 2 miliardy. 269 00:11:20,530 --> 00:11:23,640 >> Takže môžete počet bajtov pamäte v počítači. 270 00:11:23,640 --> 00:11:26,460 Takže predpokladajme, že to je to, čo máme na mysli adresu. 271 00:11:26,460 --> 00:11:31,360 Takže keď vidím pravý hviezdu, čo sa deje ktoré majú byť odovzdané do swapu je teraz 272 00:11:31,360 --> 00:11:32,830 adresa. 273 00:11:32,830 --> 00:11:37,150 Nie jeho hodnota, ale bez ohľadu na jeho poštovej adresa, aby som tak povedal - 274 00:11:37,150 --> 00:11:38,810 jeho umiestnenia v pamäti RAM. 275 00:11:38,810 --> 00:11:41,250 >> A podobne pre B, idem povedať to isté. 276 00:11:41,250 --> 00:11:42,720 Int, hviezdu, b 277 00:11:42,720 --> 00:11:46,350 Ako stranou, technicky hviezdy mohol ísť aj na iných miestach. 278 00:11:46,350 --> 00:11:50,140 Ale budeme štandardizovať hviezdy bytia hneď vedľa dátového typu. 279 00:11:50,140 --> 00:11:54,080 >> Takže vymeniť podpis teraz znamená, daj mi adresa int a volanie 280 00:11:54,080 --> 00:11:55,400 že adresa. 281 00:11:55,400 --> 00:11:58,690 A daj mi ešte jednu adresu int a volať, že Adresa B. 282 00:11:58,690 --> 00:12:01,120 >> Ale teraz môj kód tu sa musí zmeniť. 283 00:12:01,120 --> 00:12:03,470 Pretože ak Prehlasujem, int temp - 284 00:12:03,470 --> 00:12:05,580 , Ktorý je stále ešte typu int - 285 00:12:05,580 --> 00:12:08,700 ale uložiť v ňom, aké hodnoty? 286 00:12:08,700 --> 00:12:12,870 Aby bolo jasno, ja som uvedenie sa kód, ktorý je napísaný práve teraz? 287 00:12:12,870 --> 00:12:14,360 >> Dávam umiestnenie v. 288 00:12:14,360 --> 00:12:16,500 Ale ja sa nestarám o miesto, nie? 289 00:12:16,500 --> 00:12:21,940 Temp existuje len Jess tretiu šálku existovala, za akým účelom? 290 00:12:21,940 --> 00:12:23,090 Pre uloženie hodnoty. 291 00:12:23,090 --> 00:12:24,830 Mlieko alebo pomarančový džús. 292 00:12:24,830 --> 00:12:28,520 Nie je skutočne uložiť adresu jeden z tých vecí, ktoré sa cítia 293 00:12:28,520 --> 00:12:31,200 trochu nezmyselné v tomto reálnom svetový kontext, tak ako tak. 294 00:12:31,200 --> 00:12:34,990 >> Takže naozaj to, čo chcem, aby v temp nie je adresa, ale 295 00:12:34,990 --> 00:12:36,180 obsah. 296 00:12:36,180 --> 00:12:41,930 Takže, ak je číslo ako 123, to je 123. byte pamäti, že práve 297 00:12:41,930 --> 00:12:45,090 stane sa okupačné, že hodnota v sa stane byť zaberá. 298 00:12:45,090 --> 00:12:49,040 >> Ak chcem ísť na túto adresu, Musím povedať, hviezdu. 299 00:12:49,040 --> 00:12:52,610 Rovnako tak, ak by som mal zmeniť to, čo je na adresu, zmením 300 00:12:52,610 --> 00:12:53,570 to spustiť. 301 00:12:53,570 --> 00:12:58,185 Ak chcem uložiť v tom, čo je na miesto s tým, čo je v mieste, 302 00:12:58,185 --> 00:13:02,180 na b, b hviezda hviezda. 303 00:13:02,180 --> 00:13:05,340 >> Takže v skratke, aj keď to nie je úplne potopenie doteraz - a ja by som nečakal 304 00:13:05,340 --> 00:13:06,560 že by to tak rýchlo - 305 00:13:06,560 --> 00:13:11,100 Uvedomujeme si, že všetko, čo robím je prefixu tieto hviezdy na mojej premenných, 306 00:13:11,100 --> 00:13:13,350 porekadlá nechcete chytiť hodnoty. 307 00:13:13,350 --> 00:13:14,520 Nemeňte hodnoty. 308 00:13:14,520 --> 00:13:17,600 Ale skôr, prejdite na tieto adresy a získať hodnotu. 309 00:13:17,600 --> 00:13:21,430 Prejdite na túto adresu a zmeny hodnota tam. 310 00:13:21,430 --> 00:13:25,500 >> Takže teraz mi dovoľte sa posunúť späť na vrchol, len opraviť tento riadok tu, 311 00:13:25,500 --> 00:13:27,690 zmeniť tak, aby zodpovedal prototyp. 312 00:13:27,690 --> 00:13:30,280 Ale ja teraz musíte urobiť jednu vec. 313 00:13:30,280 --> 00:13:35,500 Intuitívne, či som zmenil typy argumentov, že prehodí očakáva, 314 00:13:35,500 --> 00:13:37,245 čo ešte musím zmena v mojom kóde? 315 00:13:37,245 --> 00:13:39,750 316 00:13:39,750 --> 00:13:40,840 >> Keď hovorím swapu. 317 00:13:40,840 --> 00:13:43,340 Pretože práve teraz, čo som Aj okolo vymeniť ešte? 318 00:13:43,340 --> 00:13:47,450 Hodnota x a hodnota y, alebo mlieko a pomarančový džús. 319 00:13:47,450 --> 00:13:48,510 Ale ja nechcem robiť. 320 00:13:48,510 --> 00:13:51,060 Ja namiesto toho chcete odovzdať, čo? 321 00:13:51,060 --> 00:13:53,050 Umiestnenie X a umiestnenia y. 322 00:13:53,050 --> 00:13:55,300 Aké sú ich poštovej adresy, aby som tak povedal. 323 00:13:55,300 --> 00:13:57,600 >> Takže robiť, že tam je ampersand. 324 00:13:57,600 --> 00:13:59,260 Ampersand trochu znie ako adresu. 325 00:13:59,260 --> 00:14:03,240 tak n, ampersand, adresa z x a y adresu. 326 00:14:03,240 --> 00:14:06,790 Takže je to úmyselné, ktoré používame ampersand pri volaní funkcie, 327 00:14:06,790 --> 00:14:10,230 a hviezdy pri ohlásení a kedy vykonávanie funkcie. 328 00:14:10,230 --> 00:14:14,220 >> A len si ampersand ako adresa prevádzkovateľa, a hviezdy ako 329 00:14:14,220 --> 00:14:15,490 tam operátor - 330 00:14:15,490 --> 00:14:18,640 , Alebo, presnejšie, dereferencia operátor. 331 00:14:18,640 --> 00:14:23,480 Tak to je celý rad slov, len aby povedať, že teraz, dúfajme, že výmena sa deje 332 00:14:23,480 --> 00:14:24,440 správne. 333 00:14:24,440 --> 00:14:26,550 >> Nechaj ma ísť ďalej a robiť - 334 00:14:26,550 --> 00:14:30,940 poďme vlastne súbor premenovať, inak tento program naďalej prístupní žiadny swap. 335 00:14:30,940 --> 00:14:33,240 Tvrdím, že budeme hovoriť swap.c teraz. 336 00:14:33,240 --> 00:14:35,670 Takže si, swap. 337 00:14:35,670 --> 00:14:37,520 Dot, lomítko, swap. 338 00:14:37,520 --> 00:14:40,210 >> A teraz skutočne, x je 1, y je 2.. 339 00:14:40,210 --> 00:14:44,040 A potom, je x 2, y je jedna. 340 00:14:44,040 --> 00:14:46,500 No uvidíme, či môžeme to urobiť trochu inak, pokiaľ ide o to, čo je 341 00:14:46,500 --> 00:14:47,180 tu deje. 342 00:14:47,180 --> 00:14:51,250 Najprv mi dovoľte priblížiť na našich kreslenie obrazovku tu. 343 00:14:51,250 --> 00:14:54,160 A dovoľte mi navrhnúť na chvíľu - a keď som kresliť tu sa odrazí 344 00:14:54,160 --> 00:14:58,660 tam teraz - dovoľte mi navrhnúť, aby tu je celá partia pamäte alebo 345 00:14:58,660 --> 00:15:00,540 RAM, vnútri môjho počítača. 346 00:15:00,540 --> 00:15:04,140 >> A to bude sústo číslo, povedzme, 1. 347 00:15:04,140 --> 00:15:05,720 To bude mať číslo 2 bajty. 348 00:15:05,720 --> 00:15:08,220 A ja budem robiť veľa viac, a potom banda dot dot bodky na 349 00:15:08,220 --> 00:15:10,880 naznačujú, že tam je 2 miliardy z týchto vecí. 350 00:15:10,880 --> 00:15:13,520 4, 5, a tak ďalej. 351 00:15:13,520 --> 00:15:17,055 >> Takže tam sú prvými piatimi bajtov mojej pamäti počítača. 352 00:15:17,055 --> 00:15:17,560 V poriadku? 353 00:15:17,560 --> 00:15:19,060 Veľmi málo z 2 mld Sk. 354 00:15:19,060 --> 00:15:21,120 Ale teraz idem navrhnúť nasledujúce. 355 00:15:21,120 --> 00:15:27,490 Budem navrhovať, že x bude uložiť číslo 1 a y sa deje 356 00:15:27,490 --> 00:15:29,690 uložiť číslo 2. 357 00:15:29,690 --> 00:15:35,000 A nechaj ma ísť napred a predstavuje teraz tieto hodnoty takto. 358 00:15:35,000 --> 00:15:41,510 >> Poďme na to takto. 359 00:15:41,510 --> 00:15:42,870 Daj mi jednu sekundu. 360 00:15:42,870 --> 00:15:44,150 Jedna sekunda. 361 00:15:44,150 --> 00:15:45,680 OK. 362 00:15:45,680 --> 00:15:47,560 Chcem, aby to trochu - 363 00:15:47,560 --> 00:15:50,440 ideme na to znova. 364 00:15:50,440 --> 00:15:53,250 Inak idem a používanie rovnaké čísla, neúmyselne, 365 00:15:53,250 --> 00:15:54,230 viackrát. 366 00:15:54,230 --> 00:15:57,320 >> Takže len tak máme rôzne čísla hovoriť, nazvime tento bajt 367 00:15:57,320 --> 00:16:03,391 číslo 123, 124, 125, 126, a dot dot dot. 368 00:16:03,391 --> 00:16:08,400 A dovoľte mi tvrdí, že teraz budem dať hodnotu 1 tu, a hodnotu 2 369 00:16:08,400 --> 00:16:11,990 tu, inak známy ako x a y. 370 00:16:11,990 --> 00:16:15,300 Tak to len tak sa stane, že to je x, to je y. 371 00:16:15,300 --> 00:16:18,180 >> A len nejakou náhodou, počítače, operačný systém, 372 00:16:18,180 --> 00:16:21,890 stalo, aby X na mieste číslo 123. 373 00:16:21,890 --> 00:16:25,590 A y skončil na mieste 124 - 374 00:16:25,590 --> 00:16:26,330 sakra. 375 00:16:26,330 --> 00:16:28,700 Mal som opravil toto. 376 00:16:28,700 --> 00:16:34,040 Človeče, mám naozaj chcete urobiť? 377 00:16:34,040 --> 00:16:37,340 Áno, chcem to napraviť a b správne o tom dnes. 378 00:16:37,340 --> 00:16:39,950 Ospravedlňujeme sa, ale na tejto novej. 379 00:16:39,950 --> 00:16:45,020 >> 127, 131, a nechcel som, aby sa to zložité, ale prečo som sa zmenil 380 00:16:45,020 --> 00:16:46,340 Čísla tam? 381 00:16:46,340 --> 00:16:48,360 Pretože chcem, aby sa ints v skutočnosti štyri bajty. 382 00:16:48,360 --> 00:16:49,810 Takže poďme byť super anal o tom. 383 00:16:49,810 --> 00:16:53,800 Tak, že ak sa stane, 1 je potrebné sa zaoberať 123, 2 bude na adrese 384 00:16:53,800 --> 00:16:55,730 127, pretože je to len 4 byes preč. 385 00:16:55,730 --> 00:16:56,210 To je všetko. 386 00:16:56,210 --> 00:16:58,640 A budeme zabudnúť na všetky Ostatné adresy na svete. 387 00:16:58,640 --> 00:17:03,320 >> Takže x je v mieste 123, y je v mieste 127. 388 00:17:03,320 --> 00:17:05,770 A teraz, čo mám vlastne chcete robiť? 389 00:17:05,770 --> 00:17:10,099 Keď hovorím odkladacia teraz, čo je vlastne deje? 390 00:17:10,099 --> 00:17:14,920 No, keď hovorím swapu som odovzdaním adresa x a y na adresu. 391 00:17:14,920 --> 00:17:18,540 Tak napríklad, ak sa tieto dva kusy z papiera teraz predstavujú dve 392 00:17:18,540 --> 00:17:23,510 argumenty a a b vymeniť, čo som ja budem písať o prvej z nich, 393 00:17:23,510 --> 00:17:27,720 ktorý budem volať označujú ako? 394 00:17:27,720 --> 00:17:30,610 >> Presne tak, 123. 395 00:17:30,610 --> 00:17:31,905 Tak toto tvrdím je. 396 00:17:31,905 --> 00:17:32,955 Jedná sa o parameter. 397 00:17:32,955 --> 00:17:35,856 Dávam adresu x tam. 398 00:17:35,856 --> 00:17:38,152 >> Čo je to? 399 00:17:38,152 --> 00:17:40,890 >> Čo je to? 400 00:17:40,890 --> 00:17:41,190 >> Nie, nie. 401 00:17:41,190 --> 00:17:41,720 To je v poriadku. 402 00:17:41,720 --> 00:17:42,570 Ešte dobre, stále dobrá. 403 00:17:42,570 --> 00:17:43,530 Tak to je. 404 00:17:43,530 --> 00:17:46,240 A teraz na druhý kus papiera, to bude b, a to, čo som 405 00:17:46,240 --> 00:17:49,010 bude písať na tento kus papiera? 406 00:17:49,010 --> 00:17:50,080 127. 407 00:17:50,080 --> 00:17:53,720 >> Takže jediná vec, ktorá sa zmenila od tej doby naše predchádzajúce rozprávania tohto príbehu je, 408 00:17:53,720 --> 00:17:58,590 skôr než doslovne 1 a 2, som prejsť na 123 a 127. 409 00:17:58,590 --> 00:18:02,130 A ja som teraz dám takýchto dovnútra tejto kolónky, v poriadku? 410 00:18:02,130 --> 00:18:04,640 Tak, že čierna skrinka sa predstavuje swap funkcie. 411 00:18:04,640 --> 00:18:07,230 >> Medzitým, poďme sa teraz niekto implementovať odkladacie funkciu. 412 00:18:07,230 --> 00:18:09,090 Niekto by tu ako dobrovoľník? 413 00:18:09,090 --> 00:18:09,560 Poď hore. 414 00:18:09,560 --> 00:18:11,080 Ako sa voláte? 415 00:18:11,080 --> 00:18:11,460 Charlie. 416 00:18:11,460 --> 00:18:12,080 Dobre, Charlie. 417 00:18:12,080 --> 00:18:14,810 Poď hore. 418 00:18:14,810 --> 00:18:17,310 >> Takže Charlie bude hrať role našej čiernej skrinky. 419 00:18:17,310 --> 00:18:21,460 A Charlie, čo by som chcel, aby si Teraz je realizovaná swapu takým spôsobom, 420 00:18:21,460 --> 00:18:25,320 že vzhľadom na to, tieto dve adresy, ste sa vlastne deje 421 00:18:25,320 --> 00:18:26,330 k zmene hodnôt. 422 00:18:26,330 --> 00:18:28,290 A ja budem šepkať do ucha ako spustiť TV tu. 423 00:18:28,290 --> 00:18:29,930 >> Takže choďte do toho, a ty si čiernej skrinky. 424 00:18:29,930 --> 00:18:30,920 Oslovte tam. 425 00:18:30,920 --> 00:18:34,054 Aké hodnoty vidíte na a aké hodnoty vidíte na b? 426 00:18:34,054 --> 00:18:36,740 >> CHARLIE: je 123 a b je 127. 427 00:18:36,740 --> 00:18:37,530 >> DAVID Malan: OK, presne tak. 428 00:18:37,530 --> 00:18:38,940 Teraz pozastaviť tam len na chvíľu. 429 00:18:38,940 --> 00:18:41,680 Prvá vec, ktorú budete robiť teraz, podľa kódu - čo 430 00:18:41,680 --> 00:18:43,220 Budem sa vytiahnuť na obrazovke - 431 00:18:43,220 --> 00:18:46,750 bude prideliť trochu bit pamäte s názvom temp. 432 00:18:46,750 --> 00:18:48,850 Takže budem pokračovať a vám, že pamäť. 433 00:18:48,850 --> 00:18:52,210 >> Takže to bude tretia premenné že máte prístup k 434 00:18:52,210 --> 00:18:54,080 voláš tepl. 435 00:18:54,080 --> 00:18:57,120 A čo budete písať na temp kus papiera? 436 00:18:57,120 --> 00:19:02,524 437 00:19:02,524 --> 00:19:03,470 >> CHARLIE: Ukazovatele, že jo? 438 00:19:03,470 --> 00:19:04,790 >> DAVID Malan: OK, dobre nie je nutne ukazovatele. 439 00:19:04,790 --> 00:19:07,230 Takže riadok kódu, ktorý som zvýraznená na pravej strane, 440 00:19:07,230 --> 00:19:07,900 začnime tam. 441 00:19:07,900 --> 00:19:08,890 To hovorí hviezda. 442 00:19:08,890 --> 00:19:11,670 Takže sa v súčasnej dobe skladovania číslo 123. 443 00:19:11,670 --> 00:19:16,660 A len intuitívne, čo sa hviezda 123 znamená? 444 00:19:16,660 --> 00:19:21,630 >> Ale najmä, ak je 123, hviezda znamená čo? 445 00:19:21,630 --> 00:19:22,560 Hodnota. 446 00:19:22,560 --> 00:19:24,580 Alebo neformálne, choďte tam. 447 00:19:24,580 --> 00:19:28,620 Takže mi dovoľte navrhnúť, že drží v tvoja ruka, choďte do toho a liečbe, ktoré 448 00:19:28,620 --> 00:19:29,430 ako keď je to mapa. 449 00:19:29,430 --> 00:19:32,940 A chodiť sami sa k počítaču je pamäť, a nájsť to, čo je nám 450 00:19:32,940 --> 00:19:36,520 na mieste 123. 451 00:19:36,520 --> 00:19:37,720 Presne tak. 452 00:19:37,720 --> 00:19:41,100 >> Vidíme teda, na mieste 123 je to, samozrejme? 453 00:19:41,100 --> 00:19:44,240 OK, takže to, čo hodnota teraz ste dám do temp? 454 00:19:44,240 --> 00:19:44,750 Presne tak. 455 00:19:44,750 --> 00:19:45,600 Takže choďte do toho a robiť, že. 456 00:19:45,600 --> 00:19:51,280 A napíšte číslo 1 na kus papier, ktorý je v súčasnej dobe s názvom temp. 457 00:19:51,280 --> 00:19:53,540 >> A teraz ďalší krok, ktorý budete realizovať 458 00:19:53,540 --> 00:19:54,310 bude to. 459 00:19:54,310 --> 00:19:57,820 No, na pravej strane Nasledujúci riadok kódu je hviezda b b, o 460 00:19:57,820 --> 00:19:59,260 Samozrejme, ukladá adresu. 461 00:19:59,260 --> 00:20:02,270 To sa týka 127. 462 00:20:02,270 --> 00:20:06,620 Hviezda b znamená to, mimochodom povedané? 463 00:20:06,620 --> 00:20:08,700 >> Prejsť na tomto mieste. 464 00:20:08,700 --> 00:20:14,988 Takže choďte do toho a nájsť to, čo je nám na mieste 127. 465 00:20:14,988 --> 00:20:15,480 OK. 466 00:20:15,480 --> 00:20:19,170 Samozrejme, že na mieste 127, je stále hodnota 2. 467 00:20:19,170 --> 00:20:24,060 Tak čo ideš skladujte pri bez ohľadu na to na mieste v? 468 00:20:24,060 --> 00:20:26,860 Takže hviezdy prostriedkom prejdite do umiestnenia na. 469 00:20:26,860 --> 00:20:29,770 Čo je umiestnenie? 470 00:20:29,770 --> 00:20:30,430 >> Presne tak. 471 00:20:30,430 --> 00:20:34,190 Takže teraz, ak chcete zmeniť čo je na tomto mieste - 472 00:20:34,190 --> 00:20:36,470 Pôjdem napred a spustite guma tu. 473 00:20:36,470 --> 00:20:37,760 A teraz ju späť na štetec. 474 00:20:37,760 --> 00:20:42,190 Aké číslo sa chystáte písať V tomto boxe prázdne teraz? 475 00:20:42,190 --> 00:20:42,850 >> Presne tak. 476 00:20:42,850 --> 00:20:46,470 Takže tento riadok kódu, aby bolo jasno - či mi pauza, čo robí, a Charlieho 477 00:20:46,470 --> 00:20:51,730 upozorniť na to, čo práve urobil, je písať do tohto poľa v mieste 123 478 00:20:51,730 --> 00:20:55,150 hodnota, ktorá bola predtým v b. 479 00:20:55,150 --> 00:20:59,140 A tak sme teraz vykonáva naozaj Tento druhý riadok kódu. 480 00:20:59,140 --> 00:21:01,920 >> Teraz bohužiaľ, je to ešte jeden riadok zostávajúce. 481 00:21:01,920 --> 00:21:04,900 Teraz, čo je v teplote, a to doslova? 482 00:21:04,900 --> 00:21:06,200 Je to zrejme číslo jedna. 483 00:21:06,200 --> 00:21:07,020 To nie je adresa. 484 00:21:07,020 --> 00:21:09,380 Je to len číslo, druh premenné z jedného týždňa. 485 00:21:09,380 --> 00:21:13,520 >> A teraz, keď hovoríte, hviezdičkový B, to znamená, že prejsť na adresu B, ktorý je na 486 00:21:13,520 --> 00:21:15,090 kurz tu. 487 00:21:15,090 --> 00:21:16,020 Takže akonáhle sa tam dostanete - 488 00:21:16,020 --> 00:21:18,320 Pôjdem napred a vymazať to, čo je v skutočnosti tam - a to, čo ste 489 00:21:18,320 --> 00:21:20,820 budem písať teraz v polohe 127? 490 00:21:20,820 --> 00:21:22,010 >> CHARLIE: Temp, ktorý je jeden. 491 00:21:22,010 --> 00:21:23,430 >> DAVID Malan: Temp, ktorý je jeden. 492 00:21:23,430 --> 00:21:25,670 A čo sa stane, aby teplota na konci? 493 00:21:25,670 --> 00:21:26,600 No, naozaj neviem. 494 00:21:26,600 --> 00:21:27,420 Nemáme naozaj záleží. 495 00:21:27,420 --> 00:21:31,090 Kedykoľvek sme implementovali funkciu tak ďaleko, nejaké lokálne premenné máte 496 00:21:31,090 --> 00:21:31,890 sú skutočne miestni. 497 00:21:31,890 --> 00:21:33,060 A len tak zmiznúť. 498 00:21:33,060 --> 00:21:35,040 Sú prevzaté z prevádzky systém sa. 499 00:21:35,040 --> 00:21:39,800 >> Tak, že teplota stále Hodnota 1 je akýmsi zásadným spôsobom 500 00:21:39,800 --> 00:21:41,150 nezaujíma nás. 501 00:21:41,150 --> 00:21:43,100 Dobre, takže potlesk keby sme mohli pre Charlieho. 502 00:21:43,100 --> 00:21:46,400 Veľmi dobre. 503 00:21:46,400 --> 00:21:51,520 >> Dobre, takže čo viac robí to znamená, čo môžeme urobiť? 504 00:21:51,520 --> 00:21:54,400 Takže sa ukazuje, že sme boli hovorí niekoľko White Lies 505 00:21:54,400 --> 00:21:55,540 pre docela nejaký čas. 506 00:21:55,540 --> 00:21:59,990 V skutočnosti sa ukazuje, že reťazec, všetky tohto času, nie je naozaj 507 00:21:59,990 --> 00:22:02,190 postupnosť znakov na sebe. 508 00:22:02,190 --> 00:22:03,980 Je to druh, ktorý je intuitívne. 509 00:22:03,980 --> 00:22:08,270 >> Ale technicky vzaté, je reťazec dátový typ, ktorý sme deklarovali vo vnútri 510 00:22:08,270 --> 00:22:12,170 CS50 knižnica zjednodušiť svet počas prvých niekoľkých týždňov triedy. 511 00:22:12,170 --> 00:22:20,130 Čo reťazec naozaj je adresa znaku niekde v pamäti RAM. 512 00:22:20,130 --> 00:22:25,530 Reťazec je naozaj celá rada, rovnako ako 123 alebo 127, ktorý sa stane vymedziť 513 00:22:25,530 --> 00:22:28,420 kde reťazec začína v pamäte počítača. 514 00:22:28,420 --> 00:22:31,870 >> Ale to nepredstavuje reťazec, samo o sebe, sama o sebe. 515 00:22:31,870 --> 00:22:33,460 A vidíme to takto. 516 00:22:33,460 --> 00:22:35,980 Nechaj ma ísť dopredu a otvoriť nejaký kód, ktorý je medzi 517 00:22:35,980 --> 00:22:38,340 dnešné príklady zdrojového kódu. 518 00:22:38,340 --> 00:22:42,225 A ja idem dopredu a otvoriť do, povedzme, porovnajte-0.c. 519 00:22:42,225 --> 00:22:44,830 520 00:22:44,830 --> 00:22:48,790 Jedná sa o kočík program, ktorý bude ktoré sa majú vykonať nasledujúcim spôsobom. 521 00:22:48,790 --> 00:22:49,040 >> Prvý. 522 00:22:49,040 --> 00:22:50,420 Chystám sa niečo povedať. 523 00:22:50,420 --> 00:22:52,660 Potom budem pokračovať a získať reťazec od užívateľa 524 00:22:52,660 --> 00:22:53,750 V tomto ďalšom riadku. 525 00:22:53,750 --> 00:22:55,370 Potom budem to hovoriť znova. 526 00:22:55,370 --> 00:22:57,540 Potom budem mať ďalšie reťazec od užívateľa. 527 00:22:57,540 --> 00:23:00,390 >> A oznámenia, ukážem jeden z reťazca v premennej s názvom S a 528 00:23:00,390 --> 00:23:03,040 ďalší z týchto reťazcov v premennej s názvom t 529 00:23:03,040 --> 00:23:07,480 A teraz budem tvrdiť, veľmi rozumne, že pokiaľ je rovná rovná t, 530 00:23:07,480 --> 00:23:08,940 reťazce sú rovnaké. 531 00:23:08,940 --> 00:23:09,970 Tu zadajte to isté. 532 00:23:09,970 --> 00:23:11,830 Inak sú reťazce nie je to isté. 533 00:23:11,830 --> 00:23:15,440 >> Koniec koncov, ak by sme vstup dva ints, dve znaky, dva plaváky, dva dvojlôžkové, niektorý z 534 00:23:15,440 --> 00:23:18,400 dátové typy sme hovorili o tak ďaleko porovnať ich - 535 00:23:18,400 --> 00:23:22,070 Spomínam si, že sme veľmi jasne pred chvíľou že nebudete robiť to, pretože 536 00:23:22,070 --> 00:23:25,840 jedno znamienko rovná sa je samozrejme operátor priradenia. 537 00:23:25,840 --> 00:23:26,820 Tak to by bolo chybou. 538 00:23:26,820 --> 00:23:29,260 >> Používame rovnaké znamienko rovnosti, ktorý naozaj porovnáva 539 00:23:29,260 --> 00:23:31,050 veci pre skutočnej rovnosti. 540 00:23:31,050 --> 00:23:32,275 Ale ja vyhlasujú, že toto je chybné. 541 00:23:32,275 --> 00:23:37,400 Keď idem do toho a robiť porovnať nulu, a potom sa bodka lomítko porovnať nulu. 542 00:23:37,400 --> 00:23:39,700 A ja som písať v, povedzme, ahoj. 543 00:23:39,700 --> 00:23:41,590 A potom povedzme, že ahoj znova. 544 00:23:41,590 --> 00:23:46,040 Doslova to isté, počítač tvrdenie som napísal rôzne veci. 545 00:23:46,040 --> 00:23:47,640 >> Teraz možno som len niečo preklepu. 546 00:23:47,640 --> 00:23:49,910 Budem písať moje meno tentoraz. 547 00:23:49,910 --> 00:23:52,580 Myslím, ahoj. 548 00:23:52,580 --> 00:23:54,770 Dobrý deň. 549 00:23:54,770 --> 00:23:57,360 Je to iné, každý čas. 550 00:23:57,360 --> 00:23:58,430 >> No, prečo to je? 551 00:23:58,430 --> 00:24:00,140 Čo sa naozaj deje pod kapotou? 552 00:24:00,140 --> 00:24:03,270 No, čo sa naozaj deje pod kapucňa je reťazec, potom 553 00:24:03,270 --> 00:24:07,410 Som napísal v tom prvom napríklad je slovo ahoj, samozrejme. 554 00:24:07,410 --> 00:24:11,660 Ale ak budeme predstavovať to pod kapucňa, pripomenúť, že 555 00:24:11,660 --> 00:24:13,470 Reťazec je v poli. 556 00:24:13,470 --> 00:24:15,040 A my sme povedal, ako v minulosti. 557 00:24:15,040 --> 00:24:20,200 >> Takže ak čerpám, že pole, ako to, že som bude reprezentovať niečo úplne 558 00:24:20,200 --> 00:24:23,030 podobné tomu, čo sme robili pred chvíľou. 559 00:24:23,030 --> 00:24:25,390 A je to vlastne niečo, špeciálny tady taky. 560 00:24:25,390 --> 00:24:28,090 Čo sme sa zistiť, na Na konci každého reťazca? 561 00:24:28,090 --> 00:24:30,760 Jo, to lomítko nula, čo je len spôsob, ako reprezentovať, 562 00:24:30,760 --> 00:24:33,610 doslovne, 00000000. 563 00:24:33,610 --> 00:24:35,680 Osem bitov 0 v rade. 564 00:24:35,680 --> 00:24:37,610 >> Ja neviem, úprimne povedané, čo je po tomto. 565 00:24:37,610 --> 00:24:40,090 Je to len banda viac pamäte RAM vnútri môjho počítača. 566 00:24:40,090 --> 00:24:40,970 Ale to je pole. 567 00:24:40,970 --> 00:24:42,260 Hovorili sme o poliach predtým. 568 00:24:42,260 --> 00:24:45,010 A my typicky hovoriť o pole ako miesto nula, 569 00:24:45,010 --> 00:24:46,580 potom jeden, potom dva. 570 00:24:46,580 --> 00:24:47,950 Ale to je len pre pohodlie. 571 00:24:47,950 --> 00:24:49,380 A to je absolútne relatívna. 572 00:24:49,380 --> 00:24:53,010 >> Ak ste skutočne dostať z pamäti počítač, je to samozrejme akékoľvek 573 00:24:53,010 --> 00:24:55,450 2000000000 niektoré nepárne bajtov, potenciálne. 574 00:24:55,450 --> 00:24:59,100 Takže naozaj pod kapotou Celú tú dobu, že áno. 575 00:24:59,100 --> 00:25:01,670 To by mohlo veľmi dobre byť držiak nula. 576 00:25:01,670 --> 00:25:04,780 Ale ak budete kopať ešte hlbšie pod kapucňa, to je naozaj 577 00:25:04,780 --> 00:25:07,000 zaoberať číslo 123. 578 00:25:07,000 --> 00:25:09,150 Toto je adresa 124. 579 00:25:09,150 --> 00:25:11,040 Toto je adresa 125. 580 00:25:11,040 --> 00:25:12,540 >> A ja som nepodělal tentoraz. 581 00:25:12,540 --> 00:25:15,840 Tie sú teraz jeden bajtov rozdiel z akého dôvodu? 582 00:25:15,840 --> 00:25:17,930 Ako veľká je char? 583 00:25:17,930 --> 00:25:19,170 Char je len jeden bajt. 584 00:25:19,170 --> 00:25:20,570 Int je zvyčajne štyri bajty. 585 00:25:20,570 --> 00:25:24,850 Takže to je dôvod, prečo som to 123, 127, 131 a tak ďalej. 586 00:25:24,850 --> 00:25:27,560 Teraz môžem mať matematický jednoduchšie a proste plus 1. 587 00:25:27,560 --> 00:25:30,510 A to je teraz to, čo sa skutočne deje na pod pokrievku. 588 00:25:30,510 --> 00:25:37,760 >> Takže, keď vyhlásil niečo také, reťazec s, to je v skutočnosti - 589 00:25:37,760 --> 00:25:39,170 to dopadá - 590 00:25:39,170 --> 00:25:41,190 char hviezda. 591 00:25:41,190 --> 00:25:44,640 Hviezda, samozrejme, znamená, že adresa, aka ukazovateľ. 592 00:25:44,640 --> 00:25:46,200 Takže je to niečo adresa. 593 00:25:46,200 --> 00:25:47,510 Čo je to adresa? 594 00:25:47,510 --> 00:25:47,760 >> No - 595 00:25:47,760 --> 00:25:51,680 Som jediný, kto môže vidieť veľmi Dôležitým bodom robím, alebo si myslíte, 596 00:25:51,680 --> 00:25:52,560 Robím. 597 00:25:52,560 --> 00:25:55,270 Tak string - 598 00:25:55,270 --> 00:25:57,180 Smutné je, že máte monitor práve tam, kde som 599 00:25:57,180 --> 00:25:58,100 mohol vidieť, že. 600 00:25:58,100 --> 00:26:00,990 >> Dobre, takže to je to, čo reťazec Som vyhlásil predtým. 601 00:26:00,990 --> 00:26:04,600 Ukazuje sa však, vďaka malej kúzlo vo CS50 knižnice, to všetko 602 00:26:04,600 --> 00:26:08,780 Doba reťazec má doslova Bol char hviezda. 603 00:26:08,780 --> 00:26:11,310 Hviezda opäť znamená ukazovateľ alebo adresu. 604 00:26:11,310 --> 00:26:14,180 Skutočnosť, že je to sprievodné slovo znak znamená, že je 605 00:26:14,180 --> 00:26:15,970 adresa charakteru. 606 00:26:15,970 --> 00:26:23,100 >> Takže ak sa reťazec sa nazýva, a píšem v H-E-L-L-O, navrhne teraz, čo sa 607 00:26:23,100 --> 00:26:27,330 string doslova vrátenie všetkých tentoraz, aj keď máme dosť 608 00:26:27,330 --> 00:26:29,980 zjednodušený svet? 609 00:26:29,980 --> 00:26:33,310 Čo sa vlastne reťazec vráti ako svoju návratovú hodnotu? 610 00:26:33,310 --> 00:26:35,830 611 00:26:35,830 --> 00:26:38,720 >> 123 V tomto prípade, napríklad. 612 00:26:38,720 --> 00:26:42,630 Sme už skôr povedal, že sa reťazec jednoducho vráti reťazec, postupnosť 613 00:26:42,630 --> 00:26:43,300 znakov. 614 00:26:43,300 --> 00:26:44,790 Ale to je trochu biele lži. 615 00:26:44,790 --> 00:26:48,010 Spôsob, akým sa string naozaj funguje Pod kapotou je dostane 616 00:26:48,010 --> 00:26:48,930 reťazec od užívateľa. 617 00:26:48,930 --> 00:26:51,530 To plops znaky, ktoré on alebo ona typov v pamäti. 618 00:26:51,530 --> 00:26:54,680 Kladie spätné lomítko nula na konci z tých postupnosť znakov. 619 00:26:54,680 --> 00:26:57,310 >> Ale čo sa reťazec doslova vrátiť? 620 00:26:57,310 --> 00:27:02,710 Je to doslova vráti adresu Úplne prvé bajty RAM 621 00:27:02,710 --> 00:27:04,130 používa sa pre tú silu. 622 00:27:04,130 --> 00:27:07,500 A ukázalo sa, že práve tým, že vráti jediná adresa 623 00:27:07,500 --> 00:27:12,120 Prvý znak v reťazci, ktorý je dostačujúci pre zistenie celistvosť 624 00:27:12,120 --> 00:27:12,630 reťazec. 625 00:27:12,630 --> 00:27:16,930 >> Inými slovami, dostanete reťazec nemá vrátiť 123 a 124 a 125. 626 00:27:16,930 --> 00:27:19,950 Nemusí sa mi dlho Zoznam všetkých bytov, ktoré 627 00:27:19,950 --> 00:27:20,740 môj reťazec používa. 628 00:27:20,740 --> 00:27:22,670 Vzhľadom k tomu, jeden, všetci chrbtom k sebe. 629 00:27:22,670 --> 00:27:28,160 A za druhé na základe prvej adresu, som môžu zistiť, kde reťazec končí. 630 00:27:28,160 --> 00:27:29,910 Ako na to? 631 00:27:29,910 --> 00:27:33,490 >> Zvláštne znak null, spätné lomítko nulu na konci. 632 00:27:33,490 --> 00:27:35,430 Takže inými slovami, ak je prejsť okolo - 633 00:27:35,430 --> 00:27:36,530 v premenných - 634 00:27:36,530 --> 00:27:41,300 adresa char, a predpokladať, , Že na konci každého reťazca, každý 635 00:27:41,300 --> 00:27:45,040 postupnosť znakov ako my ľudia si reťazcov, ak predpokladáme, že 636 00:27:45,040 --> 00:27:48,600 Na konci takéhoto reťazca je tu nulovej spätné lomítko, si zlatá. 637 00:27:48,600 --> 00:27:52,430 Vzhľadom k tomu, môžete vždy nájsť koniec reťazca. 638 00:27:52,430 --> 00:27:54,870 >> Teraz, čo sa skutočne deje a potom na v tomto programe? 639 00:27:54,870 --> 00:27:59,990 Prečo je tento program, Porovnanie 0.c, kočík? 640 00:27:59,990 --> 00:28:01,690 Čo je skutočne v porovnaní? 641 00:28:01,690 --> 00:28:02,420 Jo? 642 00:28:02,420 --> 00:28:05,000 >> STUDENT: [nepočuteľné]. 643 00:28:05,000 --> 00:28:05,730 >> DAVID Malan: Presne tak. 644 00:28:05,730 --> 00:28:08,350 Je to porovnanie umiestnenie z reťazcov. 645 00:28:08,350 --> 00:28:12,420 Takže ak užívateľ zadal v ahoj raz, ako ja, môže pamäť skončiť 646 00:28:12,420 --> 00:28:13,430 , Vyzerá takto. 647 00:28:13,430 --> 00:28:18,210 Ak potom používateľ druhy uvedené v Ahoj, ale tým, že volá dostať reťazec znova, c je 648 00:28:18,210 --> 00:28:21,800 nijako zvlášť chytrý, ak učíte že je šikovný písanie kódu. 649 00:28:21,800 --> 00:28:22,430 >> C - 650 00:28:22,430 --> 00:28:23,860 a počítače všeobecnejšie - 651 00:28:23,860 --> 00:28:27,370 Ak napíšete v slove ahoj znova, viete, čo budete mať. 652 00:28:27,370 --> 00:28:31,480 Tie len tak dostať druhú sériu pamäti, že áno, stane sa 653 00:28:31,480 --> 00:28:35,510 skladovanie H-E-L-L-O, a tak ďalej. 654 00:28:35,510 --> 00:28:38,240 >> Bude to vyzerať rovnako na nás, ľudí, ale táto adresa 655 00:28:38,240 --> 00:28:39,460 nemusí byť 123. 656 00:28:39,460 --> 00:28:42,470 Mohlo by to len tak stať, že operačný systém má niektoré dispozícii 657 00:28:42,470 --> 00:28:45,430 priestor napríklad v mieste - 658 00:28:45,430 --> 00:28:49,820 povedzme niečo ľubovoľný, ako je to miesto 200. 659 00:28:49,820 --> 00:28:51,620 A to je miesto 201. 660 00:28:51,620 --> 00:28:53,060 A to je miesto 202. 661 00:28:53,060 --> 00:28:55,730 Nemáme potuchy, kde to je bude v pamäti. 662 00:28:55,730 --> 00:28:59,110 >> Ale čo to znamená, že to, čo je bude uložený v konečnom dôsledku s? 663 00:28:59,110 --> 00:29:00,750 Číslo 123. 664 00:29:00,750 --> 00:29:04,860 Čo bude uložený v t, V tomto príklade ľubovoľnej? 665 00:29:04,860 --> 00:29:06,300 Číslo 200. 666 00:29:06,300 --> 00:29:11,410 A to všetko znamená, že je potom zrejmé, 123 sa nerovná 200. 667 00:29:11,410 --> 00:29:14,940 A tak to, ak podmienka nikdy vyhodnotený ako true. 668 00:29:14,940 --> 00:29:18,430 Vzhľadom k tomu, get string používa iný kusy pamäti zakaždým. 669 00:29:18,430 --> 00:29:20,360 >> Teraz môžeme vidieť znova v ďalšom príklade. 670 00:29:20,360 --> 00:29:23,764 Nechaj ma ísť dopredu a otvoriť copy-0.c. 671 00:29:23,764 --> 00:29:28,770 Tvrdím, že tento príklad bude vyskúšať - ale nedarí - kopírovať dva reťazce 672 00:29:28,770 --> 00:29:29,910 nasledovne. 673 00:29:29,910 --> 00:29:31,730 >> Chystám sa niečo povedať pre užívateľa. 674 00:29:31,730 --> 00:29:34,490 Ja potom dostanem reťazec a nazývať to je. 675 00:29:34,490 --> 00:29:36,400 A teraz, robím túto kontrolu tu. 676 00:29:36,400 --> 00:29:37,990 Zmienili sme sa o to chvíľu späť. 677 00:29:37,990 --> 00:29:42,490 Ale keď mohol dostať reťazec vrátiť hodnotu NULL, iný špeciálny znak alebo zvláštne 678 00:29:42,490 --> 00:29:45,050 symbol povedzme. 679 00:29:45,050 --> 00:29:45,900 Ak je nedostatok pamäte. 680 00:29:45,900 --> 00:29:48,970 >> Napríklad, v prípade, že používateľ je skutočne je ťažké a typy otrasné 681 00:29:48,970 --> 00:29:51,220 počet znakov na klávesnice a hity Enter. 682 00:29:51,220 --> 00:29:54,580 Ak to počet znakov jednoducho nemôžem vojde do pamäte RAM, čo blázon 683 00:29:54,580 --> 00:29:57,820 Dôvodom, dobre sa reťazec by mohol veľmi dobre vrátiť hodnotu null. 684 00:29:57,820 --> 00:30:01,080 >> Alebo ak váš program sám o sebe robí veľa ďalších vecí, a tam je len 685 00:30:01,080 --> 00:30:03,790 nie je dostatok pamäte pre get string na úspech, mohlo by to skončiť 686 00:30:03,790 --> 00:30:05,240 sa vracia null. 687 00:30:05,240 --> 00:30:07,160 Ale buďme presnejší pokiaľ ide o to, čo je to. 688 00:30:07,160 --> 00:30:10,280 Čo je S typ dát naozaj? 689 00:30:10,280 --> 00:30:11,610 Char hviezda. 690 00:30:11,610 --> 00:30:14,560 >> Tak to dopadá teraz môžeme ošúpať späť vrstvu null. 691 00:30:14,560 --> 00:30:17,500 Ukázalo sa, že je null - áno, samozrejme špeciálny symbol. 692 00:30:17,500 --> 00:30:19,190 Ale čo je to naozaj? 693 00:30:19,190 --> 00:30:25,220 Naozaj, null je len symbol, ktorý sme ľudia používajú k reprezentácii na nulovej úrovni. 694 00:30:25,220 --> 00:30:29,010 >> Takže autorov C a počítačov všeobecnejšie, rozhodol rokmi 695 00:30:29,010 --> 00:30:30,010 to, že viete, čo. 696 00:30:30,010 --> 00:30:34,850 Prečo by sme zabezpečiť, aby žiadny užívateľ údaje nikdy, nikdy, nikdy 697 00:30:34,850 --> 00:30:36,730 uložené na bye nula? 698 00:30:36,730 --> 00:30:39,610 V skutočnosti, dokonca aj vo svojom ľubovoľnom príklade predtým som nezačal číslovanie 699 00:30:39,610 --> 00:30:40,390 byty na nulu. 700 00:30:40,390 --> 00:30:41,540 Začal som v jednom. 701 00:30:41,540 --> 00:30:44,950 Pretože som vedel, že ľudia vo svete sa rozhodli vyhradiť nula 702 00:30:44,950 --> 00:30:47,970 byte v niečí pamäti ako niečo zvláštne. 703 00:30:47,970 --> 00:30:52,020 >> Dôvodom je, kedykoľvek chcete signál, že nie je niečo v poriadku 704 00:30:52,020 --> 00:30:55,960 s ohľadom na adresy, je vrátená null - inak známy ako nula - 705 00:30:55,960 --> 00:30:59,410 a pretože viete, že nie je dôveryhodne dát na adrese nula, jasne 706 00:30:59,410 --> 00:31:00,400 Znamená to, že došlo k chybe. 707 00:31:00,400 --> 00:31:04,080 A to je dôvod, prečo sme sa podľa konvencie, skontrolujte, či pre nulové a spätné niečo 708 00:31:04,080 --> 00:31:06,260 ako jeden v týchto prípadoch. 709 00:31:06,260 --> 00:31:09,300 >> Takže keď prejdite nadol teraz, je to len potom niektoré kontrola chýb, len v prípade, 710 00:31:09,300 --> 00:31:10,610 niečo, čo sa stalo s [? kauciu?] 711 00:31:10,610 --> 00:31:13,470 dohromady a ukončiť program o predčasnom návrate. 712 00:31:13,470 --> 00:31:19,030 Táto rada teraz môže byť prepísaná , Pretože to, čo znamená, že to, čo? 713 00:31:19,030 --> 00:31:23,155 Na ľavej strane, daj mi ďalší ukazovateľ na znak, a nazývať to t 714 00:31:23,155 --> 00:31:26,935 Čo mám skladovanie vnútri t, na základe na tomto jednom riadku kódu? 715 00:31:26,935 --> 00:31:30,950 716 00:31:30,950 --> 00:31:32,170 >> Som uloženie umiestnenia. 717 00:31:32,170 --> 00:31:34,742 Konkrétne umiestnenie ktorá bola v sekundách. 718 00:31:34,742 --> 00:31:39,000 Takže ak užívateľ zadal v ahoj a že prvý ahoj stane, že skončí 719 00:31:39,000 --> 00:31:42,567 tu, potom číslo 123 je že sa vráti z dostať 720 00:31:42,567 --> 00:31:43,810 reťazca a uložiť - 721 00:31:43,810 --> 00:31:44,780 Ako sme už povedali skôr - 722 00:31:44,780 --> 00:31:45,440 v sekundách. 723 00:31:45,440 --> 00:31:50,560 >> Keď som teraz vyhlásiť ďalšie ukazovatele char a nazývať to t, čo je číslo 724 00:31:50,560 --> 00:31:53,940 doslova skončí v t podľa príbehu? 725 00:31:53,940 --> 00:31:55,420 Tak 123. 726 00:31:55,420 --> 00:32:00,310 >> Takže technicky teraz aj s a t ukazujú na presný 727 00:32:00,310 --> 00:32:02,410 Rovnaké kúsky pamäti. 728 00:32:02,410 --> 00:32:06,140 Tak zistíte, čo budem robiť teraz, aby dokazujú, že tento program je chybné. 729 00:32:06,140 --> 00:32:08,820 >> Najprv budem tvrdiť, s print f, zarábať 730 00:32:08,820 --> 00:32:10,080 kópiu reťazca. 731 00:32:10,080 --> 00:32:11,660 Potom budem robiť niečo Kontrola chýb. 732 00:32:11,660 --> 00:32:12,160 Idem sa uistiť. 733 00:32:12,160 --> 00:32:16,710 Poďme sa uistite, že reťazec je t aspoň väčšia ako nula na dĺžku, 734 00:32:16,710 --> 00:32:19,190 takže tam je nejaký znak, že skutočne využiť. 735 00:32:19,190 --> 00:32:22,840 >> A potom si možno pamätáte tento z predchádzajúcich príkladov. 736 00:32:22,840 --> 00:32:25,630 2 horné -, ktorý je v ctype.h súbor. 737 00:32:25,630 --> 00:32:30,800 T držiak nula mi dáva nulu znak reťazca t 738 00:32:30,800 --> 00:32:34,360 A 2 horné tej istej hodnoty, o Samozrejme, konvertuje ich na veľké písmená. 739 00:32:34,360 --> 00:32:38,230 >> Takže intuitívne, to zvýraznenou líniou kódu je zarábať prvý 740 00:32:38,230 --> 00:32:40,250 list vt. 741 00:32:40,250 --> 00:32:44,485 Ale to nie je zarábať, intuitívne, prvé písmeno v sekundách. 742 00:32:44,485 --> 00:32:48,130 Ale ak premýšľate nad tým, čo som asi vidieť, keď som spustiť tento program 743 00:32:48,130 --> 00:32:54,220 a vytlačiť ako pôvodné, s, a tzv copy, t? 744 00:32:54,220 --> 00:32:55,350 >> Sú to vlastne bude rovnaký. 745 00:32:55,350 --> 00:32:56,600 A prečo sa to bude rovnaké? 746 00:32:56,600 --> 00:32:58,970 747 00:32:58,970 --> 00:33:01,020 Obaja sú poukazom na presne to isté. 748 00:33:01,020 --> 00:33:01,610 Tak poďme na to. 749 00:33:01,610 --> 00:33:03,160 >> Vykonajte kopírovanie nulu. 750 00:33:03,160 --> 00:33:04,070 Zhŕňa OK. 751 00:33:04,070 --> 00:33:06,500 Dovoľte mi spustiť kopírovanie nulu. 752 00:33:06,500 --> 00:33:10,110 Nechaj ma písať niečo ako ahoj v všetko malými písmenami a stlačte Enter. 753 00:33:10,110 --> 00:33:16,520 A tvrdí, že tak pôvodná s a kópie sú naozaj totožné. 754 00:33:16,520 --> 00:33:17,920 >> Takže to, čo sa naozaj stalo tu? 755 00:33:17,920 --> 00:33:20,100 Dovoľte mi, aby som tento obrázok prekresliť len rozprávať príbeh 756 00:33:20,100 --> 00:33:21,340 mierne odlišným spôsobom. 757 00:33:21,340 --> 00:33:26,060 Čo sa naozaj deje pod kapucňa, keď som vyhlásil niečo ako 758 00:33:26,060 --> 00:33:30,410 char začiatok s, alebo reťazec s, Som stále ukazovateľ - 759 00:33:30,410 --> 00:33:33,090 ktorý sa stane, že je štyri byty v CS50 spotrebiče 760 00:33:33,090 --> 00:33:34,410 av mnohých počítačov. 761 00:33:34,410 --> 00:33:36,008 A budem volať toto s. 762 00:33:36,008 --> 00:33:39,810 A to má v súčasnej dobe nejaká neznáma hodnota. 763 00:33:39,810 --> 00:33:43,900 >> Keď deklarujete premennú, ak sami vložiť hodnotu tam, kto 764 00:33:43,900 --> 00:33:44,570 vie, čo tam je. 765 00:33:44,570 --> 00:33:48,110 Mohlo by to byť nejaký náhodný sled bitov z predchádzajúceho prevedenia. 766 00:33:48,110 --> 00:33:52,490 Takže keď som v mojom kóde do dostať reťazec, a potom uložiť návrat 767 00:33:52,490 --> 00:33:54,800 hodnota v sekundách sa reťazec nejako - 768 00:33:54,800 --> 00:33:58,520 A budeme nakoniec olúpte, ako dostať string práce, nejako prideľuje 769 00:33:58,520 --> 00:34:00,480 Pole, ktoré pravdepodobne vyzerá niečo ako toto. 770 00:34:00,480 --> 00:34:05,390 H-E-L-L-O, spätné lomítko nula. 771 00:34:05,390 --> 00:34:09,510 >> Dajme tomu, že to je adresa 123 len prvý konzistencie. 772 00:34:09,510 --> 00:34:13,000 Tak sa vráti reťazec, v zvýraznená linka tam, vráti 773 00:34:13,000 --> 00:34:15,000 číslo sme si povedali, 123. 774 00:34:15,000 --> 00:34:17,420 Takže to, čo sa naozaj deje vo vnútri je tu? 775 00:34:17,420 --> 00:34:26,590 >> No, čo sa naozaj deje vnútri s 123.. 776 00:34:26,590 --> 00:34:29,250 Ale úprimne povedané, ja som už trochu zmätení z týchto adries, 777 00:34:29,250 --> 00:34:30,320 všetky tieto ľubovoľných čísel. 778 00:34:30,320 --> 00:34:32,290 123, 124, 127. 779 00:34:32,290 --> 00:34:34,570 Takže poďme sa vlastne zjednodušenie svet trochu. 780 00:34:34,570 --> 00:34:38,800 >> Keď hovoríme o ukazovatele, úprimne povedané, na nás, ľudí, ktorí sa sakra zaujíma, kde 781 00:34:38,800 --> 00:34:39,870 veci sú v pamäti? 782 00:34:39,870 --> 00:34:41,080 To je úplne ľubovoľné. 783 00:34:41,080 --> 00:34:43,370 Bude to závisieť od toho, pamäte RAM má užívateľ. 784 00:34:43,370 --> 00:34:46,590 To bude závisieť od toho, kedy v priebehu dňa spustenie programu, snáď, a 785 00:34:46,590 --> 00:34:48,250 čo vstup používateľ vám dáva. 786 00:34:48,250 --> 00:34:50,060 Sme obydlia na nedôležitých detailov. 787 00:34:50,060 --> 00:34:54,230 >> Takže poďme abstraktné preč a hovoria, že, Pri spustení riadok kódu takhle, 788 00:34:54,230 --> 00:34:57,320 char hviezda je dostane návrat hodnota get reťazca. 789 00:34:57,320 --> 00:35:02,720 Prečo sa namiesto toho len kresliť to, čo sme držať volať ukazovateľ, ako by to 790 00:35:02,720 --> 00:35:04,140 ukazuje na niečo? 791 00:35:04,140 --> 00:35:07,000 Tak som teraz tvrdí, že je až je ukazovateľ - 792 00:35:07,000 --> 00:35:08,480 pod kapotou je to adresa. 793 00:35:08,480 --> 00:35:11,330 Ale je to len ukazuje na prvý bajt 794 00:35:11,330 --> 00:35:12,780 Reťazec, ktorý bol vrátený. 795 00:35:12,780 --> 00:35:16,710 >> Ak by som sa vrátiť do kódu tu čo sa deje na tejto linke? 796 00:35:16,710 --> 00:35:20,020 No, v tomto zvýraznenou líniou teraz, Ja som vyhlásil vraj ďalší 797 00:35:20,020 --> 00:35:21,070 premenná s názvom t 798 00:35:21,070 --> 00:35:25,700 Ale je to tiež ukazovateľ, takže budem k tomu, ako to, teoreticky, presné 799 00:35:25,700 --> 00:35:26,710 rovnakej veľkosti škatule. 800 00:35:26,710 --> 00:35:28,160 A budem to nazývať t 801 00:35:28,160 --> 00:35:33,500 >> A teraz, ak sa vrátime do kódu znova, keď uložím je vnútri t, 802 00:35:33,500 --> 00:35:36,920 čo som technicky uvedenie vnútri t? 803 00:35:36,920 --> 00:35:39,350 No technicky, to bolo číslo 123. 804 00:35:39,350 --> 00:35:42,270 Takže naozaj by som mala písať číslo 123 tam. 805 00:35:42,270 --> 00:35:43,900 Ale poďme to vyššiu úroveň. 806 00:35:43,900 --> 00:35:48,090 t, ak je to len ukazovateľ, intuitívne, je práve to. 807 00:35:48,090 --> 00:35:49,800 To je všetko, čo je sú v nich uložené. 808 00:35:49,800 --> 00:35:54,970 >> Takže teraz v posledných zaujímavé linky kódu, keď som vlastne ísť o 809 00:35:54,970 --> 00:36:00,680 zarábanie nulový znak v tonách, čo sa deje? 810 00:36:00,680 --> 00:36:06,310 No, t držiak nula je teraz ukazuje s tým, čo postava, pravdepodobne? 811 00:36:06,310 --> 00:36:07,460 >> Je to ukázal na hodiny. 812 00:36:07,460 --> 00:36:08,870 Vzhľadom k tomu, t držiak nula - 813 00:36:08,870 --> 00:36:12,490 spomínam, je to stará syntaxe. t držiak nula jednoducho znamená, že ak t je reťazec, t 814 00:36:12,490 --> 00:36:15,590 Držiak nula znamená dostať nulu Znak v tejto sile. 815 00:36:15,590 --> 00:36:18,650 Takže, čo to v skutočnosti znamená je ísť do tohto poľa - 816 00:36:18,650 --> 00:36:21,520 a áno, môže to byť 123, to môže byť 124. 817 00:36:21,520 --> 00:36:22,790 Ale je to všetko relatívne, pamätať. 818 00:36:22,790 --> 00:36:25,640 Kedykoľvek hovoríme o maticu, máme tú výhodu, že hovorí o 819 00:36:25,640 --> 00:36:27,000 relatívna indexy. 820 00:36:27,000 --> 00:36:31,120 >> A tak sa teraz môžeme len predpokladať, že t držiak h je nula. 821 00:36:31,120 --> 00:36:35,090 Takže keď zavolám 2 horné na to, čo to je naozaj robí, je zarábať 822 00:36:35,090 --> 00:36:38,290 malá h na veľké písmená H. Ale samozrejme, čo je to? 823 00:36:38,290 --> 00:36:41,010 Je to ukazuje na rovnaký zatratený reťazca. 824 00:36:41,010 --> 00:36:44,200 >> Tak to je všetko, čo sa deje v tomto kóde tak ďaleko. 825 00:36:44,200 --> 00:36:45,960 Takže to, čo je, potom implikácia? 826 00:36:45,960 --> 00:36:48,300 Ako opraviť tieto dva problémy? 827 00:36:48,300 --> 00:36:50,870 Ako môžeme porovnať so skutočnými reťazca? 828 00:36:50,870 --> 00:36:53,720 >> No intuitívne, ako by idete o porovnávanie dvoch 829 00:36:53,720 --> 00:36:55,090 struny pre skutočnej rovnosti? 830 00:36:55,090 --> 00:36:58,920 831 00:36:58,920 --> 00:37:00,750 >> Čo to znamená, keď dva reťazce sú rovnaké? 832 00:37:00,750 --> 00:37:04,330 Samozrejme, že nie, že ich adresy rovnať v pamäti, pretože to je nízka 833 00:37:04,330 --> 00:37:06,590 úrovni implementačnej detail. 834 00:37:06,590 --> 00:37:08,360 Všetky znaky sú rovnaké. 835 00:37:08,360 --> 00:37:12,810 Takže mi dovoľte navrhnúť, a dovoľte mi predstaviť vo verzii jedného z compare.c 836 00:37:12,810 --> 00:37:14,970 tu, tak porovnať, 1.c. 837 00:37:14,970 --> 00:37:19,590 >> Dovoľte mi navrhnúť, že sme ešte dostať ukazovateľ nazvaný s, a uložiť v ňom 838 00:37:19,590 --> 00:37:20,610 vráti hodnotu get reťazca. 839 00:37:20,610 --> 00:37:21,750 Poďme urobiť to isté s t. 840 00:37:21,750 --> 00:37:23,230 Žiadna z kódu sa líši. 841 00:37:23,230 --> 00:37:25,420 Chystám sa pridať trochu viac kontrolu chýb teraz. 842 00:37:25,420 --> 00:37:29,390 Takže teraz, že sme niečo peeling späť tejto vrstvy v CS50, čo reťazec 843 00:37:29,390 --> 00:37:33,520 vlastne je, musíme byť análny o tom, či sa nezneužívajú 844 00:37:33,520 --> 00:37:35,330 neplatné hodnoty, ako je null. 845 00:37:35,330 --> 00:37:36,440 >> Tak som len tak pre kontrolu. 846 00:37:36,440 --> 00:37:41,490 Ak to nie je rovnaké nulu a t nie je rovná null, to znamená, že si v poriadku. 847 00:37:41,490 --> 00:37:44,460 Získajte reťazec nemal pokaziť dostať jeden z týchto reťazcov. 848 00:37:44,460 --> 00:37:51,270 A môžete si snáď, že teraz, čo nemá STR CMP pravdepodobne robiť? 849 00:37:51,270 --> 00:37:52,000 String porovnanie. 850 00:37:52,000 --> 00:37:55,470 >> Takže ak ste program v Jave skôr, Je to ako rovná metóde 851 00:37:55,470 --> 00:37:56,490 Trieda String. 852 00:37:56,490 --> 00:37:57,890 Ale pre tých z vás, ktorí nemajú naprogramované, 853 00:37:57,890 --> 00:37:59,320 je to len funkcia c 854 00:37:59,320 --> 00:38:02,180 Stáva sa to prísť súbor s názvom string.h. 855 00:38:02,180 --> 00:38:03,830 To je miesto, kde je deklarovaná. 856 00:38:03,830 --> 00:38:05,110 >> A reťazec porovnať - 857 00:38:05,110 --> 00:38:07,530 Vlastne som zabudol jeho použitia, ale to nevadí. 858 00:38:07,530 --> 00:38:10,470 Pripomeňme si, že môžeme urobiť muž, zamiešať porovnanie. 859 00:38:10,470 --> 00:38:12,590 A to sa deje, aby sa Linux programátori manuálny. 860 00:38:12,590 --> 00:38:14,060 A to je, úprimne povedané, trochu záhadný. 861 00:38:14,060 --> 00:38:15,270 Ale vidím tu, že jo. 862 00:38:15,270 --> 00:38:17,570 Musím zahrnúť string.h. 863 00:38:17,570 --> 00:38:20,590 >> A tu sa píše v popise " string Funkcia compare porovná 864 00:38:20,590 --> 00:38:24,560 dva reťazce S1 a S2. "a S1 a S2 sú zrejme dva 865 00:38:24,560 --> 00:38:26,120 argumenty odovzdávané palcov 866 00:38:26,120 --> 00:38:28,650 Nemám naozaj spomenúť, čo const je, ale teraz všimnúť - 867 00:38:28,650 --> 00:38:31,480 a ste mohli vidieť to už pri ste používať manuálové stránky, ak sa 868 00:38:31,480 --> 00:38:32,390 to všetko - 869 00:38:32,390 --> 00:38:36,220 že znak hviezda je len synonymom povrázkom. 870 00:38:36,220 --> 00:38:40,440 >> Tak to porovnáva dva reťazce S1 a S2, a vráti celé číslo menšie 871 00:38:40,440 --> 00:38:44,930 ako alebo rovnajúcu sa alebo väčšia ako nula ak S1 sa nachádza, respektíve, aby sa 872 00:38:44,930 --> 00:38:47,450 menšie ako, alebo zodpovedajú, alebo byť väčšia než S2. 873 00:38:47,450 --> 00:38:51,220 To je len veľmi komplexný spôsob, ako hovoriť tento reťazec porovnať výnosy 874 00:38:51,220 --> 00:38:55,760 nula, ak sú dva reťazce intuitívne identické znak pre 875 00:38:55,760 --> 00:38:57,120 znak pre znak. 876 00:38:57,120 --> 00:38:59,970 >> Vracia záporné číslo, ak s, abecedne, má 877 00:38:59,970 --> 00:39:01,010 prísť pred t. 878 00:39:01,010 --> 00:39:05,300 Alebo vracia kladné číslo, ak s má prísť po t 879 00:39:05,300 --> 00:39:06,170 abecedne. 880 00:39:06,170 --> 00:39:08,360 Takže s týmto jednoduchým funkciu, môže dôjsť môžete napríklad zoradiť 881 00:39:08,360 --> 00:39:09,770 celá partia slová? 882 00:39:09,770 --> 00:39:13,984 >> Takže v tejto novej verzii, budem ísť ďalej a robiť compare1. 883 00:39:13,984 --> 00:39:15,750 Dot lomítko porovnať jeden. 884 00:39:15,750 --> 00:39:18,030 Budem písať v ahoj vo všetkých malými písmenami. 885 00:39:18,030 --> 00:39:20,300 Budem písať v ahoj vo všetkých malými písmenami znova. 886 00:39:20,300 --> 00:39:23,340 A našťastie teraz si uvedomuje, Napísal som to isté. 887 00:39:23,340 --> 00:39:27,520 >> Medzitým, keď som zadať ahoj v nižšej HELLO prípad a veľkými písmenami a 888 00:39:27,520 --> 00:39:29,710 porovnať ich, som napísal rôzne veci. 889 00:39:29,710 --> 00:39:32,530 Vzhľadom k tomu, sú nielen adresy odlišné, ale my sme nákupný 890 00:39:32,530 --> 00:39:35,350 odlišné charaktery znova a znova. 891 00:39:35,350 --> 00:39:37,320 >> Tak poďme na to a opraviť jednu iný problém teraz. 892 00:39:37,320 --> 00:39:41,590 Dovoľte mi otvoriť verziu jeden z kopírovanie, ktoré teraz rieši 893 00:39:41,590 --> 00:39:42,900 tento problém takto. 894 00:39:42,900 --> 00:39:45,650 A toto bude vyzerať trochu zložitejšie. 895 00:39:45,650 --> 00:39:49,320 Ale ak si myslíte, že o tom, čo problém, ktorý sme Potrebujete vyriešiť, dúfajme, že to bude 896 00:39:49,320 --> 00:39:51,870 jasné, za chvíľu teraz. 897 00:39:51,870 --> 00:39:57,280 >> Tak to prvý riadok, char začiatok t, v roku Laicky povedané niekto mohol navrhnúť 898 00:39:57,280 --> 00:39:59,450 Čo táto linka tu znamená? 899 00:39:59,450 --> 00:40:01,050 Char hviezda t, čo to robí? 900 00:40:01,050 --> 00:40:06,660 901 00:40:06,660 --> 00:40:07,210 >> Dobre. 902 00:40:07,210 --> 00:40:09,500 Vytvorte ukazovateľ na niektoré miesto v pamäti. 903 00:40:09,500 --> 00:40:10,930 A dovoľte mi upresniť to trochu. 904 00:40:10,930 --> 00:40:17,180 Deklarujete premennú, ktorá bude ukladať Adresa niektorých char v pamäti, rovnako 905 00:40:17,180 --> 00:40:18,480 byť trochu vhodnejšie. 906 00:40:18,480 --> 00:40:21,210 >> OK, takže teraz na pravej strane, som nikdy nevidel jednu z týchto funkcií 907 00:40:21,210 --> 00:40:22,660 pred, malloc. 908 00:40:22,660 --> 00:40:26,980 Ale čo by to mohlo znamenať? 909 00:40:26,980 --> 00:40:28,050 Pridelenie pamäte. 910 00:40:28,050 --> 00:40:29,410 Pridelenie pamäte. 911 00:40:29,410 --> 00:40:33,050 >> Tak to dopadá, až do teraz, máme sa naozaj mali účinný spôsob, ako 912 00:40:33,050 --> 00:40:36,210 žiada operačný systém, daj mi nejaké pamäte. 913 00:40:36,210 --> 00:40:39,980 Skôr máme teraz nazýva funkcia malloc, že ​​robí presne to. 914 00:40:39,980 --> 00:40:42,960 Aj keď je to trochu rozptýlenie teraz, všimnite si, že v 915 00:40:42,960 --> 00:40:46,200 medzi týmito dvoma zátvorkách len bude číslo. 916 00:40:46,200 --> 00:40:48,510 Kde som napísal v otázke značky môžu byť číslo. 917 00:40:48,510 --> 00:40:51,020 >> A toto číslo znamená, Daj mi 10 bajtov. 918 00:40:51,020 --> 00:40:52,320 Dajte mi 20 bajtov. 919 00:40:52,320 --> 00:40:53,820 Dajte mi 100 bajtov. 920 00:40:53,820 --> 00:40:56,500 A malloc urobí všetko pre to, aby požiadať operačný systém - 921 00:40:56,500 --> 00:40:57,630 Linux, v tomto prípade - 922 00:40:57,630 --> 00:40:59,630 hej, sú ich 100 bajtov na dostupnej pamäte RAM? 923 00:40:59,630 --> 00:41:04,320 Ak áno, vrátiť tieto bajty mi vrátenie adresu, ktorá z 924 00:41:04,320 --> 00:41:06,610 tie bajtov, možná? 925 00:41:06,610 --> 00:41:07,610 Úplne prvý. 926 00:41:07,610 --> 00:41:10,460 >> Takže aj tu - a to je prevládajúcou v C, kedykoľvek budete 927 00:41:10,460 --> 00:41:11,680 rokovania s adresami? 928 00:41:11,680 --> 00:41:15,830 Tie takmer vždy riešenie Prvá taká adresa, bez ohľadu na to, aký veľký 929 00:41:15,830 --> 00:41:19,490 kus pamäte, ktorú je odovzdaný späť, aby som tak povedal. 930 00:41:19,490 --> 00:41:20,880 >> Takže poďme sa ponoriť tu. 931 00:41:20,880 --> 00:41:23,940 Snažím sa prideliť ako veľa bajtov, presne? 932 00:41:23,940 --> 00:41:24,080 No. 933 00:41:24,080 --> 00:41:26,090 Dĺžka reťazca s - poďme to konkrétny príklad. 934 00:41:26,090 --> 00:41:30,700 Ak je s ahoj, H-E-L-L-O, čo je dĺžka reťazca s, samozrejme? 935 00:41:30,700 --> 00:41:32,010 Takže je to päť. 936 00:41:32,010 --> 00:41:34,590 Ale robím plus 1 na to, prečo? 937 00:41:34,590 --> 00:41:37,700 Prečo chcem šesť bajtov miesto piatich? 938 00:41:37,700 --> 00:41:38,790 Znak null. 939 00:41:38,790 --> 00:41:41,210 >> Nechcem odísť z tohoto špeciálny znak null. 940 00:41:41,210 --> 00:41:45,160 Pretože keď urobím kópiu Dobrý večer a len to H-E-L-L-O, ale nemyslím si, dať 941 00:41:45,160 --> 00:41:50,160 že osobitný charakter, počítač nemusí mať, náhodou, spätné lomítko 942 00:41:50,160 --> 00:41:51,730 nulu tam na mňa. 943 00:41:51,730 --> 00:41:55,570 A tak keď sa snažím prísť na to, Dĺžka kópie, môže si myslím, že 944 00:41:55,570 --> 00:41:59,360 je to 20 znakov, alebo milión znakov keby som sa nikdy nestane 945 00:41:59,360 --> 00:42:01,050 zasiahnuť spätné lomítko nula. 946 00:42:01,050 --> 00:42:05,780 >> Takže musíme šesť bajtov pre uloženie H-E-L-L-O, spätné lomítko nula. 947 00:42:05,780 --> 00:42:07,870 A potom je to len byť super análny. 948 00:42:07,870 --> 00:42:10,700 Dajme tomu, že som zabudol, čo veľkosť char je. 949 00:42:10,700 --> 00:42:12,020 Sme stále hovoríš, že je to jeden bajt. 950 00:42:12,020 --> 00:42:12,860 A to zvyčajne je. 951 00:42:12,860 --> 00:42:15,425 Teoreticky by to mohlo byť niečo inak, v inom Mac alebo 952 00:42:15,425 --> 00:42:16,250 iný PC. 953 00:42:16,250 --> 00:42:19,650 >> Tak to dopadá, že je tento operátor volal sizeof, že ak omdliete to na 954 00:42:19,650 --> 00:42:22,680 Názov dátového typu - ako char alebo int, float alebo - 955 00:42:22,680 --> 00:42:26,930 to vám povie, dynamicky, koľko bajtov char zaberá na túto tému 956 00:42:26,930 --> 00:42:28,090 konkrétny počítač. 957 00:42:28,090 --> 00:42:31,360 >> Tak to je v podstate len ako hovoriť krát 1 alebo 958 00:42:31,360 --> 00:42:32,440 Časy vôbec nič. 959 00:42:32,440 --> 00:42:36,340 Ale ja to robím len byť super anál, len v prípade, že sa líši char 960 00:42:36,340 --> 00:42:40,610 počítača proti bane, týmto spôsobom matematika je vždy vyskúšať. 961 00:42:40,610 --> 00:42:43,720 >> Konečne, tu som skontrolovať null, čo je vždy dobré praxe - opäť 962 00:42:43,720 --> 00:42:44,920 Kedykoľvek máme čo do činenia s ukazovateľmi. 963 00:42:44,920 --> 00:42:47,520 Ak malloc nebol schopný dať ma, že šesť byes - čo je 964 00:42:47,520 --> 00:42:49,210 nepravdepodobné, ale len v prípade, že - 965 00:42:49,210 --> 00:42:50,730 vrátiť jednu okamžite. 966 00:42:50,730 --> 00:42:53,290 A teraz, choďte do toho a kopírovanie reťazec nasledovne. 967 00:42:53,290 --> 00:42:57,240 A to je známa syntaxe, aj keď v inej úlohe. 968 00:42:57,240 --> 00:43:01,210 >> Chystám sa ísť dopredu a dostať reťazec Dĺžka s a uložte ho na n 969 00:43:01,210 --> 00:43:06,620 Ja potom bude prechádzať zo i rovná nulu až do a vrátane N, 970 00:43:06,620 --> 00:43:08,410 väčší alebo rovné. 971 00:43:08,410 --> 00:43:13,540 Takže pri každom opakovaní, dal som i-tý znak s-tej 972 00:43:13,540 --> 00:43:15,380 charakter t. 973 00:43:15,380 --> 00:43:18,190 >> Takže to, čo sa naozaj deje pod kapucňa tu? 974 00:43:18,190 --> 00:43:22,140 No, ak to, napríklad, je s - 975 00:43:22,140 --> 00:43:26,400 a ja som napísal v slove H-E-L-L-O a tam je spätné lomítko nula. 976 00:43:26,400 --> 00:43:29,020 A opäť, to je s polohovacie tu. 977 00:43:29,020 --> 00:43:30,830 A tu je t 978 00:43:30,830 --> 00:43:34,860 >> A to sa ukazuje teraz kópie pamäti, že jo? 979 00:43:34,860 --> 00:43:37,340 Malloc mi dala celý kus pamäte. 980 00:43:37,340 --> 00:43:41,440 Neviem, čo je spočiatku v každom z týchto umiestnení. 981 00:43:41,440 --> 00:43:44,340 Takže budem myslieť na to, ako celá partia otázniky. 982 00:43:44,340 --> 00:43:50,190 >> Ale akonáhle začnem opakovanie od nuly na hore cez dĺžku S, T 983 00:43:50,190 --> 00:43:52,790 držiak nuly a t držiak 1 - 984 00:43:52,790 --> 00:43:55,080 a ja dám teraz na strope - 985 00:43:55,080 --> 00:44:04,190 t držiak nuly a držiak s nulovou strednou že budem sa kopírovanie 986 00:44:04,190 --> 00:44:09,875 opakované h tu, E-L-L-O. Navyše, pretože som robil plus 987 00:44:09,875 --> 00:44:12,370 1, spätné lomítko nula. 988 00:44:12,370 --> 00:44:19,060 >> Takže teraz v prípade Porovnanie 1.C, Nakoniec, keď som vytlačiť 989 00:44:19,060 --> 00:44:24,760 kapitalizácie t, mali by sme vidieť, že to sa nemení. 990 00:44:24,760 --> 00:44:26,090 Nechaj ma ísť dopredu a hneď na to. 991 00:44:26,090 --> 00:44:28,630 Tak, aby Copy1. 992 00:44:28,630 --> 00:44:30,860 Dot lomítko Copy1. 993 00:44:30,860 --> 00:44:33,670 Budem písať v ahoj, Enter. 994 00:44:33,670 --> 00:44:37,430 A teraz nevšimol, iba kópie bolo aktivované. 995 00:44:37,430 --> 00:44:40,890 Pretože som naozaj majú dva kusy pamäti. 996 00:44:40,890 --> 00:44:44,390 >> Bohužiaľ, môžete to urobiť pekne zlé a celkom nebezpečné veci tu. 997 00:44:44,390 --> 00:44:49,290 Dovoľte mi vytiahnuť príklad tu, že nám dáva príklad niekoľkých 998 00:44:49,290 --> 00:44:51,540 odriadkovaním. 999 00:44:51,540 --> 00:44:56,040 Takže len intuitívne tu, prvý riadok kódu, int x hviezda, prehlasuje, 1000 00:44:56,040 --> 00:44:57,340 premennú s názvom x. 1001 00:44:57,340 --> 00:44:58,810 A čo je to dátový typ tejto premennej? 1002 00:44:58,810 --> 00:45:01,820 1003 00:45:01,820 --> 00:45:04,290 Čo je to dátový typ tejto premennej? 1004 00:45:04,290 --> 00:45:06,980 To nebolo Cliffhanger. 1005 00:45:06,980 --> 00:45:08,350 >> Dátový typ int je hviezda. 1006 00:45:08,350 --> 00:45:12,600 Takže čo to znamená? x bude uložiť adresu int. 1007 00:45:12,600 --> 00:45:13,520 Jednoduché, ako to. 1008 00:45:13,520 --> 00:45:16,220 Y sa bude ukladať adresa int. 1009 00:45:16,220 --> 00:45:18,390 Čo je na treťom riadku kódu tam robí? 1010 00:45:18,390 --> 00:45:21,850 Je to rozdelenie, koľko bytov, s najväčšou pravdepodobnosťou? 1011 00:45:21,850 --> 00:45:22,350 Štyri. 1012 00:45:22,350 --> 00:45:25,460 Vzhľadom k veľkosti int je spravidla štyri, malloc štyri dáva 1013 00:45:25,460 --> 00:45:29,950 mi adresu na kus pamäť, ktorého prvé bajtov 1014 00:45:29,950 --> 00:45:32,110 uložené teraz v x. 1015 00:45:32,110 --> 00:45:34,410 >> Teraz ideme trochu rýchlo. 1016 00:45:34,410 --> 00:45:35,760 Hviezdne x znamená čo? 1017 00:45:35,760 --> 00:45:38,480 1018 00:45:38,480 --> 00:45:42,590 To znamená prejsť na túto adresu a dal to číslo tam? 1019 00:45:42,590 --> 00:45:43,870 Dal číslo 42 tam. 1020 00:45:43,870 --> 00:45:47,590 Hviezda y znamená ísť do toho, čo je v y a dal číslo 13 tam. 1021 00:45:47,590 --> 00:45:48,600 >> Ale počkajte chvíľku. 1022 00:45:48,600 --> 00:45:51,640 To, čo je v súčasnej dobe v y? 1023 00:45:51,640 --> 00:45:54,950 Čo je adresa y skladovanie? 1024 00:45:54,950 --> 00:45:55,770 Nevieme, že jo? 1025 00:45:55,770 --> 00:45:59,230 Nikdy sme raz použiť priradenie Prevádzkovateľ zahŕňajúce y. 1026 00:45:59,230 --> 00:46:03,370 Tak y, ako je deklarované na druhom riadku Kód je len nejaký odpad hodnota, veľký 1027 00:46:03,370 --> 00:46:04,760 otáznik, aby som tak povedal. 1028 00:46:04,760 --> 00:46:07,230 Mohlo by sa ukazovať náhodne na niečo v pamäti, čo 1029 00:46:07,230 --> 00:46:08,340 je všeobecne zlé. 1030 00:46:08,340 --> 00:46:13,540 >> Takže akonáhle sa dostaneme tento riadok tam, hviezda y sa rovná 13, niečo zlé, 1031 00:46:13,540 --> 00:46:17,220 niečo veľmi zlé sa chystá stáť, aby Binky. 1032 00:46:17,220 --> 00:46:25,810 Takže poďme sa pozrieť, čo sa chystá skončiť Binky deje tu v tejto minúte 1033 00:46:25,810 --> 00:46:26,200 alebo tak vyzerajú. 1034 00:46:26,200 --> 00:46:26,490 >> [PLAYBACK] 1035 00:46:26,490 --> 00:46:26,745 >> -Hej, Binky. 1036 00:46:26,745 --> 00:46:27,000 Prebuďte sa. 1037 00:46:27,000 --> 00:46:29,296 Je čas na ukazovateľ zábavu. 1038 00:46:29,296 --> 00:46:30,680 >> -Čo je to? 1039 00:46:30,680 --> 00:46:31,980 Informácie o ukazovateli? 1040 00:46:31,980 --> 00:46:34,010 Oh, cukrovinka. 1041 00:46:34,010 --> 00:46:37,220 >> No, ako začať, myslím, že sme bude potrebovať pár rád. 1042 00:46:37,220 --> 00:46:37,930 >> -OK. 1043 00:46:37,930 --> 00:46:41,650 Kód prideľuje dva ukazovatele , Ktoré môžu ukazovať na celé čísla. 1044 00:46:41,650 --> 00:46:43,760 >> -OK, dobre, vidím dva ukazovatele. 1045 00:46:43,760 --> 00:46:45,850 Ale nezdá sa, že sa ukázal na čokoľvek. 1046 00:46:45,850 --> 00:46:46,490 >> -Presne tak. 1047 00:46:46,490 --> 00:46:48,630 Spočiatku, ukazovatele nie sú poukazujú na čokoľvek. 1048 00:46:48,630 --> 00:46:51,700 Veci, ktoré poukazujú na to, sa nazývajú pointees a ich nastavenie je 1049 00:46:51,700 --> 00:46:52,850 samostatný krok. 1050 00:46:52,850 --> 00:46:53,740 >> -Oh, dobre, dobre. 1051 00:46:53,740 --> 00:46:54,500 Vedel som, že. 1052 00:46:54,500 --> 00:46:56,270 V pointees sú oddelené. 1053 00:46:56,270 --> 00:46:58,553 Tak ako sa vám prideliť pointee? 1054 00:46:58,553 --> 00:46:59,480 >> -OK. 1055 00:46:59,480 --> 00:47:03,707 No, tento kód prideľuje nové celých čísel pointee, a táto časť nastaví x 1056 00:47:03,707 --> 00:47:05,520 poukázať na to. 1057 00:47:05,520 --> 00:47:06,760 >> -Hej, to vyzerá lepšie. 1058 00:47:06,760 --> 00:47:08,520 Tak, aby to niečo urobiť. 1059 00:47:08,520 --> 00:47:09,530 >> -OK. 1060 00:47:09,530 --> 00:47:14,110 Budem dereferencia ukazovateľ x ukladať číslo 42 na jeho pointee. 1061 00:47:14,110 --> 00:47:17,660 Pre tento trik, budem potrebovať svoju mágiu palička dereferencing. 1062 00:47:17,660 --> 00:47:20,695 >> -Vaša kúzelná palička z dereferencing? 1063 00:47:20,695 --> 00:47:22,632 No, to je skvelé. 1064 00:47:22,632 --> 00:47:24,620 >> -To je to, čo kód vyzerá. 1065 00:47:24,620 --> 00:47:27,526 Budem stačí nastaviť číslo a - 1066 00:47:27,526 --> 00:47:28,250 >> -Hej, pozri. 1067 00:47:28,250 --> 00:47:29,680 Tam to ide. 1068 00:47:29,680 --> 00:47:34,520 Takže robí dereferencování na x takto šípka prístup k jeho pointee. 1069 00:47:34,520 --> 00:47:36,690 V tomto prípade, pre uloženie 42 tam. 1070 00:47:36,690 --> 00:47:40,890 Hele, skúste ho uložíte číslo 13 cez druhý ukazovateľ, y. 1071 00:47:40,890 --> 00:47:42,125 >> -OK. 1072 00:47:42,125 --> 00:47:46,810 Pôjdem sem pre y a sa číslo 13 nastaviť. 1073 00:47:46,810 --> 00:47:50,890 A potom sa prútik dereferencing a len - 1074 00:47:50,890 --> 00:47:52,430 whoa! 1075 00:47:52,430 --> 00:47:53,030 >> -Oh, hej. 1076 00:47:53,030 --> 00:47:54,610 To nefungovalo. 1077 00:47:54,610 --> 00:47:58,200 Povedzme, Binky, ja si nemyslím, že dereferencing y je to dobrý nápad, 1078 00:47:58,200 --> 00:48:01,370 pretože nastavenia pointee je v samostatnom kroku. 1079 00:48:01,370 --> 00:48:03,460 A nemyslím si, že sme kedy urobili. 1080 00:48:03,460 --> 00:48:03,810 >> -Hmm. 1081 00:48:03,810 --> 00:48:05,160 Dobrý postreh. 1082 00:48:05,160 --> 00:48:07,410 >> -Jo, pridelené ukazovateľ y. 1083 00:48:07,410 --> 00:48:10,045 Ale my sme nikdy nastaviť tak, aby poukazujú na pointee. 1084 00:48:10,045 --> 00:48:10,490 >> -Hmm. 1085 00:48:10,490 --> 00:48:12,170 Veľmi pozorný. 1086 00:48:12,170 --> 00:48:13,790 >> -Hej, vy hľadáte tam dobre, Binky. 1087 00:48:13,790 --> 00:48:16,920 Môžete opraviť tak, že y body na rovnakej pointee ako X? 1088 00:48:16,920 --> 00:48:17,810 >> -Jasne. 1089 00:48:17,810 --> 00:48:20,300 Budem používať svoju kúzelnú paličku ukazovateľ úloha. 1090 00:48:20,300 --> 00:48:22,240 >> , Je, že bude problém ako predtým? 1091 00:48:22,240 --> 00:48:22,665 >> -No. 1092 00:48:22,665 --> 00:48:24,300 Tento nedotýkala pointees. 1093 00:48:24,300 --> 00:48:27,880 Je to len jeden ukazovateľ zmení na bod na to isté ako ďalší. 1094 00:48:27,880 --> 00:48:28,970 >> -Oh, chápem. 1095 00:48:28,970 --> 00:48:31,730 Teraz y poukazuje na rovnakom mieste ako x. 1096 00:48:31,730 --> 00:48:32,450 Tak počkať. 1097 00:48:32,450 --> 00:48:33,490 Teraz y je pevná. 1098 00:48:33,490 --> 00:48:34,630 Má pointee. 1099 00:48:34,630 --> 00:48:36,520 Takže si môžete vyskúšať prútik z dereferencing znova 1100 00:48:36,520 --> 00:48:39,200 poslať cez 13. 1101 00:48:39,200 --> 00:48:39,840 >> -OK. 1102 00:48:39,840 --> 00:48:41,570 Tu to je. 1103 00:48:41,570 --> 00:48:42,870 >> -Hej, pozri na to. 1104 00:48:42,870 --> 00:48:44,320 Teraz dereferencing práce na y. 1105 00:48:44,320 --> 00:48:47,020 A pretože ukazovatele sú zdieľanie že jeden pointee, že 1106 00:48:47,020 --> 00:48:48,585 ako vidieť 13. 1107 00:48:48,585 --> 00:48:49,040 >> -Jo. 1108 00:48:49,040 --> 00:48:49,670 Zdieľanie. 1109 00:48:49,670 --> 00:48:50,380 To je fuk. 1110 00:48:50,380 --> 00:48:52,290 Takže ideme vymení teraz? 1111 00:48:52,290 --> 00:48:52,970 >> -Oh, pozri. 1112 00:48:52,970 --> 00:48:54,150 Sme mimo čas. 1113 00:48:54,150 --> 00:48:55,200 >> -Ale - 1114 00:48:55,200 --> 00:48:57,060 >> -Len si spomeňte na tri ukazovateľ pravidlá. 1115 00:48:57,060 --> 00:49:00,100 Po prvé, základná štruktúra je, že máte ukazovateľ. 1116 00:49:00,100 --> 00:49:02,170 A poukazuje na na pointee. 1117 00:49:02,170 --> 00:49:04,160 Ale ukazovateľ a pointee sú oddelené. 1118 00:49:04,160 --> 00:49:06,460 A Častou chybou je, aby nastaviť ukazovateľ, ale 1119 00:49:06,460 --> 00:49:08,540 zabudol daný pointee. 1120 00:49:08,540 --> 00:49:12,460 >> Číslo dva, ukazovateľ dereferencing začína u ukazovateľa a nasleduje jeho 1121 00:49:12,460 --> 00:49:14,570 Šípka nad prístup k jeho pointee. 1122 00:49:14,570 --> 00:49:18,640 Ako všetci vieme, to funguje iba v prípade, že je pointee, ktorá sa dostane späť do 1123 00:49:18,640 --> 00:49:19,790 Pravidlo číslo jedna. 1124 00:49:19,790 --> 00:49:23,670 >> Číslo tri, ukazovateľ postúpením jeden ukazovateľ a zmeny, upozorniť na 1125 00:49:23,670 --> 00:49:25,850 rovnako ako ďalšie ukazovateľ pointee. 1126 00:49:25,850 --> 00:49:27,840 Takže po zadaní, dva ukazovatele budú 1127 00:49:27,840 --> 00:49:29,430 o ten istý pointee. 1128 00:49:29,430 --> 00:49:31,600 Niekedy sa hovorí, že zdieľanie. 1129 00:49:31,600 --> 00:49:33,430 A to je všetko, tam je to, naozaj. 1130 00:49:33,430 --> 00:49:33,840 Bye bye teraz. 1131 00:49:33,840 --> 00:49:34,300 >> [END PLAYBACK] 1132 00:49:34,300 --> 00:49:36,940 >> DAVID Malan: Takže viac na ukazovateli, viac na Binky budúci týždeň. 1133 00:49:36,940 --> 00:49:38,190 Uvidíme sa v pondelok. 1134 00:49:38,190 --> 00:49:42,187