1 00:00:00,000 --> 00:00:11,320 2 00:00:11,320 --> 00:00:13,260 >> DAVID Malan: Tere, ja tere tulemast tagasi CS50. 3 00:00:13,260 --> 00:00:14,860 Nii et see on nädala lõpuks neli. 4 00:00:14,860 --> 00:00:16,680 Lihtsalt üks teadaanne esimene. 5 00:00:16,680 --> 00:00:19,600 Nii niinimetatud viienda esmaspäev on tulemas tuleval esmaspäeval. 6 00:00:19,600 --> 00:00:22,800 See on võimalus muutuda SAT / UNSAT et kirja klassi, või 7 00:00:22,800 --> 00:00:24,130 kirja klassi SAT / UNSAT. 8 00:00:24,130 --> 00:00:27,130 Tüütult, et protsess ei nõua allkiri, sest sa pead täitma 9 00:00:27,130 --> 00:00:28,770 välja üks neist roosa add / drop vorme. 10 00:00:28,770 --> 00:00:31,680 >> Kuna tehniliselt, SAT / UNSAT versioon ja kirja klassi versioon 11 00:00:31,680 --> 00:00:33,320 on erinevad kataloogi numbrid. 12 00:00:33,320 --> 00:00:34,240 Aga pole hullu. 13 00:00:34,240 --> 00:00:36,620 Tule minu juurde või röövida või Lauren üheski kohas. 14 00:00:36,620 --> 00:00:39,550 Või saatke meile kui teil ei ole sellist paberimajandust vajate täna ja me 15 00:00:39,550 --> 00:00:43,410 on kindel, et aidata teil teha hoolt, et enne esmaspäeva. 16 00:00:43,410 --> 00:00:45,780 >> Olgu, täna - 17 00:00:45,780 --> 00:00:47,630 Tegelikult on natuke kaja. 18 00:00:47,630 --> 00:00:51,070 Kas me toon mind natuke? 19 00:00:51,070 --> 00:00:51,730 OK. 20 00:00:51,730 --> 00:00:54,850 Nii et täna tutvustame teema tuntud vihjeid. 21 00:00:54,850 --> 00:00:57,770 Ja ma tunnistan, et see on üks keerulisemad teemad, mis me kaldume 22 00:00:57,770 --> 00:01:00,960 katta selle klassi või tegelikult mis tahes sissejuhatav kursus, mis kasutab C. 23 00:01:00,960 --> 00:01:05,510 >> Aga võta minu sõna see, eriti kui meelt tunneb veidi rohkem painutatud 24 00:01:05,510 --> 00:01:07,100 Täna ja lähinädalatel. 25 00:01:07,100 --> 00:01:10,340 See ei ole esindaja Jäätkö halvemaks selles see lihtsalt tähendab, et 26 00:01:10,340 --> 00:01:13,360 see on eriti keeruline teema et ma luban, paar nädalat 27 00:01:13,360 --> 00:01:17,610 seega tundub kõik liiga silmatorkavalt lihtne tagantjärele. 28 00:01:17,610 --> 00:01:18,720 >> Mäletan veel, et sellel päeval. 29 00:01:18,720 --> 00:01:22,190 Istusin Elliott söögisaal, istub minu TF Nishat Mehta, 30 00:01:22,190 --> 00:01:24,070 kes oli resident Elliott maja. 31 00:01:24,070 --> 00:01:26,340 Ja mingil põhjusel, see teema lihtsalt klikke. 32 00:01:26,340 --> 00:01:29,430 Mis tähendab, et ka mina võitlesid koos ta mõnda aega, kuid ma 33 00:01:29,430 --> 00:01:33,610 annan endast parima, et aidata vältida sellise võitlevad teema, mis lõppkokkuvõttes 34 00:01:33,610 --> 00:01:34,580 on üsna võimas. 35 00:01:34,580 --> 00:01:37,350 >> Tegelikult üks teemadest saame arutada aastal lähinädalatel on see, et 36 00:01:37,350 --> 00:01:41,130 julgeoleku ja kuidas tegelikult võite kasutada masinaid viisil 37 00:01:41,130 --> 00:01:42,320 mis ei ole ette nähtud. 38 00:01:42,320 --> 00:01:45,850 Ja need exploitations on tavaliselt tulemusel vead, vead, mida me 39 00:01:45,850 --> 00:01:49,740 inimesed teevad, mida ei mõista mõned alusvara rakendamine 40 00:01:49,740 --> 00:01:52,250 detailid, mille kaudu programmid on tehtud. 41 00:01:52,250 --> 00:01:55,410 >> Nüüd, et muuta see tundub veelgi kasutajasõbralikumaks sõbralik, Ma arvasin, et mängida 10 42 00:01:55,410 --> 00:01:59,680 Teine eelvaade vähe claymation näitaja nimega Binky kes toodi 43 00:01:59,680 --> 00:02:03,020 elu meie sõber Stanfordi, professor Nick parlante. 44 00:02:03,020 --> 00:02:06,753 Seega lubage mul anda teile selle teaser Binky siin. 45 00:02:06,753 --> 00:02:09,520 >> [VIDEO PLAYBACK] 46 00:02:09,520 --> 00:02:10,380 >> -Hei, Binky. 47 00:02:10,380 --> 00:02:11,050 Ärka üles. 48 00:02:11,050 --> 00:02:13,610 See on aeg, pointer lõbus. 49 00:02:13,610 --> 00:02:14,741 >> -Mis see on? 50 00:02:14,741 --> 00:02:16,440 Lugege vihjeid? 51 00:02:16,440 --> 00:02:17,928 Oh, goodie. 52 00:02:17,928 --> 00:02:18,920 >> [END VIDEO PLAYBACK] 53 00:02:18,920 --> 00:02:20,670 >> DAVID Malan: See on Stanford arvutiteadus. 54 00:02:20,670 --> 00:02:23,194 Seega rohkem, et tulla. 55 00:02:23,194 --> 00:02:24,930 >> [APLAUS] 56 00:02:24,930 --> 00:02:26,660 >> DAVID Malan: Vabandust, Nick. 57 00:02:26,660 --> 00:02:30,680 >> Nii meelde, et viimane kord, kui me lõppes see on tõesti põnev pinge 58 00:02:30,680 --> 00:02:32,960 kusjuures see funktsioon lihtsalt ei tööta. 59 00:02:32,960 --> 00:02:34,960 Vähemalt intuitiivselt, tundus nagu see peaks toimima. 60 00:02:34,960 --> 00:02:37,600 Lihtsalt Vahetatakse väärtused kahe täisarvu. 61 00:02:37,600 --> 00:02:40,915 Aga meelde tuletada, et kui me välja trükkida originaal väärtuste peamine üks ja 62 00:02:40,915 --> 00:02:44,210 kaks, nad olid ikka üks ja kaks ja mitte kaks ja üks. 63 00:02:44,210 --> 00:02:46,070 >> Nii et lubage mul tegelikult minna üle seadme. 64 00:02:46,070 --> 00:02:50,180 Ja ma kirjutasin natuke skeleti kood edasi siin, kus ma väita, et x 65 00:02:50,180 --> 00:02:52,500 on 1, y on 2. 66 00:02:52,500 --> 00:02:54,810 Ma siis välja printida nii nende väärtused print f. 67 00:02:54,810 --> 00:02:57,540 >> Ma siis väidavad siia et me ei kavatse vahetada neid. 68 00:02:57,540 --> 00:03:00,800 Jätsin tühi koht siin meid täitke täna vaid hetk. 69 00:03:00,800 --> 00:03:03,380 Siis ma lähen paluvad kahe muutuja on vahetatud. 70 00:03:03,380 --> 00:03:04,770 Siis ma lähen printida neid uuesti. 71 00:03:04,770 --> 00:03:07,090 Ja nii et loodetavasti ma nägema 1, 2. 72 00:03:07,090 --> 00:03:07,380 2, 1. 73 00:03:07,380 --> 00:03:09,830 See on super lihtne eesmärk praegu. 74 00:03:09,830 --> 00:03:12,430 >> Niisiis, kuidas me läheme vahetada kahe muutuja? 75 00:03:12,430 --> 00:03:17,220 Noh, kui pakun siin, et need tassid võib esindada mälu arvutis. 76 00:03:17,220 --> 00:03:19,070 See on paar hammustab, see on veel mõned hammustused. 77 00:03:19,070 --> 00:03:23,260 Kas meil on vabatahtlike tule üles ja segada meile mõned joogid, kui tuttav? 78 00:03:23,260 --> 00:03:23,920 Tule üles. 79 00:03:23,920 --> 00:03:24,815 Mis su nimi on? 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 Tule üles, Jess. 83 00:03:26,540 --> 00:03:29,180 Kui sa ei pahanda, me peame panema Google Klaas teile, et saaksime 84 00:03:29,180 --> 00:03:30,430 põlistama see. 85 00:03:30,430 --> 00:03:32,800 86 00:03:32,800 --> 00:03:34,670 OK, klaas. 87 00:03:34,670 --> 00:03:37,250 Salvestada video. 88 00:03:37,250 --> 00:03:43,103 Ja OK, meil on hea minna Jess siin. 89 00:03:43,103 --> 00:03:43,810 Hea küll. 90 00:03:43,810 --> 00:03:45,120 Meeldiv kohtuda. 91 00:03:45,120 --> 00:03:47,720 >> Niisiis, mida ma tahan, et sa midagi teha - kui sa saaksid, üsna kiiresti - 92 00:03:47,720 --> 00:03:51,040 lihtsalt valab meie poole klaasi oranž mahla ja pool klaasi piima, 93 00:03:51,040 --> 00:03:55,710 esindab tõhusalt numbrid 1 aastal üks tass ja 2 teises voorus. 94 00:03:55,710 --> 00:04:01,380 95 00:04:01,380 --> 00:04:02,630 >> See saab olema hea materjali. 96 00:04:02,630 --> 00:04:04,910 97 00:04:04,910 --> 00:04:05,860 >> JESS: Vabandust. 98 00:04:05,860 --> 00:04:06,330 >> DAVID Malan: Ei, ei. 99 00:04:06,330 --> 00:04:08,703 See on OK. 100 00:04:08,703 --> 00:04:10,120 Nice. 101 00:04:10,120 --> 00:04:12,950 Olgu, meil on neli baiti väärt apelsinimahla. 102 00:04:12,950 --> 00:04:14,460 Me kutsus ta väärtus 1. 103 00:04:14,460 --> 00:04:16,579 Nüüd veel neli baiti väärt piima. 104 00:04:16,579 --> 00:04:18,519 Kutsume seda Maksumus 2. 105 00:04:18,519 --> 00:04:20,440 Nii x ja y vastavalt. 106 00:04:20,440 --> 00:04:23,450 >> Olgu, nüüd kui ülesanne käepärast - teid, Jess, ees kõik 107 00:04:23,450 --> 00:04:24,270 oma klassikaaslastega - 108 00:04:24,270 --> 00:04:28,510 on vahetustehingu väärtused x ja y sellised et me tahame, et apelsinimahla 109 00:04:28,510 --> 00:04:32,070 teiste tass ja piima karikast kuidas võib teile - enne seda tegelikult 110 00:04:32,070 --> 00:04:34,020 see - minna seda teed? 111 00:04:34,020 --> 00:04:35,220 >> OK, tark otsus. 112 00:04:35,220 --> 00:04:36,340 Nii et sa pead natuke rohkem mälu. 113 00:04:36,340 --> 00:04:38,190 Teeme osadele ajutise tassi, kui soovite. 114 00:04:38,190 --> 00:04:40,540 Ja nüüd suunduda vahetada x ja y. 115 00:04:40,540 --> 00:04:52,950 116 00:04:52,950 --> 00:04:53,530 >> Suurepärane. 117 00:04:53,530 --> 00:04:54,420 Nii väga hästi tehtud. 118 00:04:54,420 --> 00:04:55,670 Tänan sind nii palju, Jess. 119 00:04:55,670 --> 00:04:59,520 120 00:04:59,520 --> 00:05:00,020 Palun. 121 00:05:00,020 --> 00:05:01,950 Väike meene. 122 00:05:01,950 --> 00:05:04,350 >> OK, nii et ilmselt super lihtne idee. 123 00:05:04,350 --> 00:05:07,500 Täiesti arusaadav, et me peame natuke rohkem ruumi - sellisel kujul, 124 00:05:07,500 --> 00:05:09,750 tass - kui me tegelikult tahame swap nende kahe muutuja. 125 00:05:09,750 --> 00:05:11,110 Teeme just nii. 126 00:05:11,110 --> 00:05:14,330 Up siin vahel, kus ma väita, ma olen kavatse olla teeme mõned vahetada, ma 127 00:05:14,330 --> 00:05:15,720 minna ja kuulutada temp. 128 00:05:15,720 --> 00:05:17,980 Ja ma seadke see võrdub, ütleme, x. 129 00:05:17,980 --> 00:05:21,110 >> Siis ma lähen väärtuse muutmiseks x nagu Jess tegid siin 130 00:05:21,110 --> 00:05:23,200 piim ja apelsinimahl võrdne y. 131 00:05:23,200 --> 00:05:27,460 Ja ma lähen muuta y on võrdne mitte x, sest nüüd me oleks 132 00:05:27,460 --> 00:05:29,530 ummikus ring, vaid Temp. 133 00:05:29,530 --> 00:05:33,170 Kus ma ajutiselt - kui Jess ajutiselt panna apelsinimahl 134 00:05:33,170 --> 00:05:35,460 enne clobbering et tass piima. 135 00:05:35,460 --> 00:05:37,250 >> Nii et lubage mul minna nüüd ja teha see. 136 00:05:37,250 --> 00:05:39,210 Seda nimetatakse noswap.c. 137 00:05:39,210 --> 00:05:41,190 Ja nüüd andke mulle joosta ei swap. 138 00:05:41,190 --> 00:05:43,910 Ja tõesti ma näen, kui ma laiendada aken natuke, et 139 00:05:43,910 --> 00:05:45,160 x on 1, y 2. 140 00:05:45,160 --> 00:05:47,230 Ja siis x on 2, y on 1. 141 00:05:47,230 --> 00:05:51,910 >> Aga meelde, et esmaspäeval me tegime asjad natuke teistmoodi, kus ma 142 00:05:51,910 --> 00:05:56,760 selle asemel rakendada abistaja funktsiooni kui soovite, et oli tegelikult tühine. 143 00:05:56,760 --> 00:05:58,010 Ma kutsusin ta vahetada. 144 00:05:58,010 --> 00:06:01,600 Ma andsin talle kaks parameetrit, ja ma helistasin neid ja ma helistasin neile b. 145 00:06:01,600 --> 00:06:04,380 >> Ausalt, ma ei helista neile x ja y. 146 00:06:04,380 --> 00:06:06,040 Ei ole midagi peatusteta mul seda tehes. 147 00:06:06,040 --> 00:06:08,140 Aga ma väidan, et see on siis natuke ebamäärane. 148 00:06:08,140 --> 00:06:11,910 Kuna turult esmaspäeval, et me väitis, et need näitajad olid 149 00:06:11,910 --> 00:06:13,650 koopiad väärtused möödunud sisse 150 00:06:13,650 --> 00:06:15,640 Nii see lihtsalt jama oma meeles, ma arvan, et kui te kasutate 151 00:06:15,640 --> 00:06:17,370 täpselt samad muutujad. 152 00:06:17,370 --> 00:06:20,150 >> Nii et ma selle asemel kutsuda neid ja b, lihtsalt selguse huvides. 153 00:06:20,150 --> 00:06:21,840 Aga me võime neid kutsuda kõige midagi tahame. 154 00:06:21,840 --> 00:06:26,280 Ja ma lähen kopeeri ja kleebi tõhusalt seda koodi seal 155 00:06:26,280 --> 00:06:27,170 ette võtta siin. 156 00:06:27,170 --> 00:06:29,110 Sest ma nägin, et see toimib. 157 00:06:29,110 --> 00:06:30,790 Nii et päris heas seisus. 158 00:06:30,790 --> 00:06:37,390 Ja ma muudan x, mu x et, minu y b ja mu y b. 159 00:06:37,390 --> 00:06:39,130 >> Nii teisisõnu, täpselt sama loogika. 160 00:06:39,130 --> 00:06:40,850 Täpselt sama asi, et Jess tegi. 161 00:06:40,850 --> 00:06:44,350 Ja siis üks asi, mida ma pean tegema üles siin muidugi on nüüd tugineda käesoleva 162 00:06:44,350 --> 00:06:45,990 funktsioon või nimetame seda funktsiooni. 163 00:06:45,990 --> 00:06:50,430 Seega ma kutsun selle funktsiooni kaks sisendite, x ja y, ja vajuta Save. 164 00:06:50,430 --> 00:06:52,300 >> Olgu, põhimõtteliselt sama asi. 165 00:06:52,300 --> 00:06:55,570 Tegelikult, ma olen arvatavasti programmi tarbetult keerulisemaks 166 00:06:55,570 --> 00:07:00,820 kirjutamise funktsioon, mis on lihtsalt võttes umbes kuus rida koodi et ma 167 00:07:00,820 --> 00:07:02,970 varem on rakendanud see vaid kolm. 168 00:07:02,970 --> 00:07:06,230 >> Nii et lubage mul minna nüüd ja uusversioon seda teha ei swap. 169 00:07:06,230 --> 00:07:07,920 Olgu, ma silmamunad siin. 170 00:07:07,920 --> 00:07:11,290 See peaks olema viga, mida võib vaata üha sagedamini oma 171 00:07:11,290 --> 00:07:12,380 programme saada keerulisem. 172 00:07:12,380 --> 00:07:13,470 Aga seal on lihtne lahendus. 173 00:07:13,470 --> 00:07:15,650 Lubage mul kerida tagasi siin. 174 00:07:15,650 --> 00:07:18,190 >> Ja mis on esimene viga, et ma käin? 175 00:07:18,190 --> 00:07:19,520 Kaudsed deklaratsioon. 176 00:07:19,520 --> 00:07:21,466 Mis, mis tavaliselt näitavad? 177 00:07:21,466 --> 00:07:22,830 Oh, ma unustasin prototüüp. 178 00:07:22,830 --> 00:07:26,900 Ma unustasin, et õpetada koostaja et swap läheb endiselt, kuigi ta 179 00:07:26,900 --> 00:07:28,920 ei ole alguses programmi. 180 00:07:28,920 --> 00:07:35,780 Nii et ma olen lihtsalt kavatse öelda tühine, swap, int, int b, semikoolon. 181 00:07:35,780 --> 00:07:37,280 >> Nii, et ma ei kavatse implementeerid ta. 182 00:07:37,280 --> 00:07:39,140 Aga nüüd see sobib, mida on siin. 183 00:07:39,140 --> 00:07:42,530 Ja teate puudumisel semikoolon siin, mis ei ole vajalik, kui 184 00:07:42,530 --> 00:07:43,200 rakendamisel. 185 00:07:43,200 --> 00:07:46,010 >> Nii et lubage mul uusversioon see, ei tee swap. 186 00:07:46,010 --> 00:07:46,910 Palju parem. 187 00:07:46,910 --> 00:07:48,130 Jooks ei swap. 188 00:07:48,130 --> 00:07:48,740 Ja kurat. 189 00:07:48,740 --> 00:07:51,650 Nüüd oleme tagasi, kus me olime esmaspäeval, kui asi ei vaheta. 190 00:07:51,650 --> 00:07:55,410 >> Ja mis on intuitiivne seletus , miks see nii on? 191 00:07:55,410 --> 00:07:56,380 Jah? 192 00:07:56,380 --> 00:07:57,630 >> Õpilane: [kuuldamatu]. 193 00:07:57,630 --> 00:08:04,140 194 00:08:04,140 --> 00:08:05,230 >> DAVID Malan: Täpselt. 195 00:08:05,230 --> 00:08:07,330 Seega a ja b on koopiad x ja y. 196 00:08:07,330 --> 00:08:10,680 Ja tegelikult, iga kord, kui sa oled olnud helistades funktsioon siiani, et 197 00:08:10,680 --> 00:08:12,540 möödub muutujad nagu ints - 198 00:08:12,540 --> 00:08:14,470 nagu swap ootab siin - 199 00:08:14,470 --> 00:08:16,270 kutid on möödaminnes koopiad. 200 00:08:16,270 --> 00:08:19,150 >> Nüüd, tähendab see võtab natuke aega, split teiseks 201 00:08:19,150 --> 00:08:23,270 kopeerimiseks arvuti bitid ühest muutuja arvesse bitti teise. 202 00:08:23,270 --> 00:08:24,610 Aga see pole nii suur asi. 203 00:08:24,610 --> 00:08:25,920 Aga nad on siiski koopia. 204 00:08:25,920 --> 00:08:30,020 >> Ja nüüd, seoses swap, Ma olen tegelikult edukalt 205 00:08:30,020 --> 00:08:31,180 muutuv ja b. 206 00:08:31,180 --> 00:08:33,000 Tegelikult, teeme kiire meelerahu vaadata. 207 00:08:33,000 --> 00:08:36,830 Prindi f on% i, uus liin. 208 00:08:36,830 --> 00:08:38,770 Ja olgem pistik. 209 00:08:38,770 --> 00:08:41,830 Nüüd teeme sama asja b. 210 00:08:41,830 --> 00:08:43,640 Ja teeme sama asja siin. 211 00:08:43,640 --> 00:08:47,260 >> Ja nüüd andke mulle kopeerida samad read jälle allosas funktsioon 212 00:08:47,260 --> 00:08:51,250 pärast minu kolm rida huvitavaid oleks täidetud, ning 213 00:08:51,250 --> 00:08:53,270 printida ja b taas. 214 00:08:53,270 --> 00:08:56,030 Nüüd teeme seda, ei tee swap. 215 00:08:56,030 --> 00:08:58,430 Lubage mul teha terminal window natuke kõrgemaks, nii et me näeme, 216 00:08:58,430 --> 00:08:59,520 rohkem seda korraga. 217 00:08:59,520 --> 00:09:00,860 >> Ja joosta ei swap. 218 00:09:00,860 --> 00:09:04,000 x on 1, y 2. 1, b on 2. 219 00:09:04,000 --> 00:09:06,070 Ja siis on 2, b = 1. 220 00:09:06,070 --> 00:09:09,390 Nii, et see töötab, nagu Jess tegin siin sees swap. 221 00:09:09,390 --> 00:09:13,090 Aga muidugi, see, millel ei ole mõju muutujate kohta peamistes. 222 00:09:13,090 --> 00:09:15,360 >> Nii nägime trikk, millega me võiks kinnitada seda, eks? 223 00:09:15,360 --> 00:09:19,560 Kui olete silmitsi selle kindlaksmääramisest küsimus, siis võiks lihtsalt punt ja teha x 224 00:09:19,560 --> 00:09:22,400 ja y milliseid muutujaid asemel? 225 00:09:22,400 --> 00:09:23,390 >> Sa võid teha neid maailma. 226 00:09:23,390 --> 00:09:27,560 Pane need ülaservas toimiku nagu tegime isegi mängu 15. 227 00:09:27,560 --> 00:09:28,890 Me kasutame globaalse muutuja. 228 00:09:28,890 --> 00:09:32,420 Aga kontekstis mäng 15 see on mõistlik luua ülemaailmne 229 00:09:32,420 --> 00:09:37,170 muutujale esindab juhatus, sest kogu 15. c on kõik 230 00:09:37,170 --> 00:09:38,650 kohta rakendatakse seda mängu. 231 00:09:38,650 --> 00:09:41,470 Seda see fail on olemas, et teha. 232 00:09:41,470 --> 00:09:44,170 >> Aga sel juhul, ma olen helistades funktsioon swap. 233 00:09:44,170 --> 00:09:45,380 Ma tahan, et vahetada kahe muutuja. 234 00:09:45,380 --> 00:09:48,950 Ja see peaks algama tunda lihtsalt lohakas kui lahendus kõigile meie 235 00:09:48,950 --> 00:09:51,300 probleeme, kui me joosta ulatus küsimused on teha seda maailma. 236 00:09:51,300 --> 00:09:54,730 Sest väga kiiresti meie programm on hakkab muutuma täiesti jama. 237 00:09:54,730 --> 00:09:57,760 Ja me tegime seda väga kokkuhoidlikult tulemusena on 15.c. 238 00:09:57,760 --> 00:10:00,470 >> Aga selgub, seal on paremini kokku. 239 00:10:00,470 --> 00:10:05,600 Lubage mul tegelikult tagasi minna ja kustutada prindi f on, just seda lihtsustada kood. 240 00:10:05,600 --> 00:10:09,160 Ja las ma ettepaneku, et see tõepoolest on halb. 241 00:10:09,160 --> 00:10:15,990 Aga kui ma selle asemel lisada mõned tärnid ja tähed, võin selle asemel muuta see 242 00:10:15,990 --> 00:10:18,670 funktsiooni ühte, mis on tegelikult toimib. 243 00:10:18,670 --> 00:10:25,020 >> Nii et lubage mul minna tagasi siin ja tunnistan, öeldes tärnid on alati raske, 244 00:10:25,020 --> 00:10:26,170 nii et ma ütlen tähte. 245 00:10:26,170 --> 00:10:27,660 Ma lihtsalt fess kuni selle. 246 00:10:27,660 --> 00:10:28,190 Hea küll. 247 00:10:28,190 --> 00:10:30,190 Ja nüüd, mida ma kavatsen teha selle asemel? 248 00:10:30,190 --> 00:10:34,130 >> Nii kõigepealt, ma lähen, et täpsustada et lähitulede asemel int sisse 249 00:10:34,130 --> 00:10:37,980 swap funktsiooni, ma olen selle asemel ning ütlen int star. 250 00:10:37,980 --> 00:10:39,170 Nüüd, mida see täht näidata? 251 00:10:39,170 --> 00:10:41,970 See on see, et mõistet pointer et Binky, claymation iseloomu, oli 252 00:10:41,970 --> 00:10:43,465 viidates hetk tagasi. 253 00:10:43,465 --> 00:10:47,610 >> Nii et kui me ütleme, int star, mõistes see nüüd on, et ei kavatse olla 254 00:10:47,610 --> 00:10:49,110 möödunud aastal oma väärtusest. 255 00:10:49,110 --> 00:10:50,350 See ei kavatse olla kopeeritud sisse 256 00:10:50,350 --> 00:10:54,700 Pigem aadress on saab olema möödunud sisse 257 00:10:54,700 --> 00:10:57,840 >> Nii meenutavad, et sees arvuti on terve hunnik mälu, muidu 258 00:10:57,840 --> 00:10:58,760 tuntud RAM. 259 00:10:58,760 --> 00:11:00,520 Ja et RAM on lihtsalt terve hunnik baiti. 260 00:11:00,520 --> 00:11:03,320 Seega, kui teie Mac või arvuti on kaks gigabaiti, siis on 2 261 00:11:03,320 --> 00:11:05,760 miljard baiti mälu. 262 00:11:05,760 --> 00:11:08,440 >> Nüüd lihtsalt arvan, et just hoida asjad kena ja korrapärane, me 263 00:11:08,440 --> 00:11:09,450 anna aadress - 264 00:11:09,450 --> 00:11:10,170 number - 265 00:11:10,170 --> 00:11:12,270 iga bait RAM arvuti. 266 00:11:12,270 --> 00:11:15,410 Kõige esimene bait need 2 miljardit arvu nulli. 267 00:11:15,410 --> 00:11:18,572 Järgmise üks on bait number üks, number kaks, kogu tee peal üles, dot dot 268 00:11:18,572 --> 00:11:20,530 dot, et umbes 2 miljardit eurot. 269 00:11:20,530 --> 00:11:23,640 >> Nii saate mitu baiti mälu arvutisse. 270 00:11:23,640 --> 00:11:26,460 Nii oletame, et see on see, mida mean aadress. 271 00:11:26,460 --> 00:11:31,360 Nii et kui ma näen, int täht, mis toimub tuleb läinud swap nüüd on 272 00:11:31,360 --> 00:11:32,830 aadress. 273 00:11:32,830 --> 00:11:37,150 Ei oma väärtust, kuid mis iganes selle posti aadress on niiöelda - 274 00:11:37,150 --> 00:11:38,810 selle asukoht RAM. 275 00:11:38,810 --> 00:11:41,250 >> Ja samamoodi b, ma lähen öelda sama asja. 276 00:11:41,250 --> 00:11:42,720 Keskmine, star, b. 277 00:11:42,720 --> 00:11:46,350 Nagu kõrvale, tehniliselt star võiks minna mujal. 278 00:11:46,350 --> 00:11:50,140 Aga me standardiseerida täht on kõrval andmetüübi. 279 00:11:50,140 --> 00:11:54,080 >> Nii swap allkiri tähendab nüüd, anna mulle aadress int ja kõne 280 00:11:54,080 --> 00:11:55,400 et aadress. 281 00:11:55,400 --> 00:11:58,690 Ja anna mulle teine ​​aadress int ja helistada sellele aadressile b. 282 00:11:58,690 --> 00:12:01,120 >> Aga nüüd minu kood on siin muuta. 283 00:12:01,120 --> 00:12:03,470 Sest kui ma kuulutada int temp - 284 00:12:03,470 --> 00:12:05,580 mis on ikka tüübi int - 285 00:12:05,580 --> 00:12:08,700 kuid ma salvestada see, millist väärtust? 286 00:12:08,700 --> 00:12:12,870 Et oleks selge, ma olen Putting koos koodi kirjutada kohe? 287 00:12:12,870 --> 00:12:14,360 >> Panen asukohta. 288 00:12:14,360 --> 00:12:16,500 Aga ma ei hooli asukoht nüüd, eks? 289 00:12:16,500 --> 00:12:21,940 Temp olemas lihtsalt Jess kolmas tass olemas, mis eesmärgil? 290 00:12:21,940 --> 00:12:23,090 Salvestada raha. 291 00:12:23,090 --> 00:12:24,830 Piim või apelsinimahl. 292 00:12:24,830 --> 00:12:28,520 Ei tegelikult säilitada aadress kas need asjad, mis tundub 293 00:12:28,520 --> 00:12:31,200 natuke absurdne selles reaalne maailma kontekstis ikkagi. 294 00:12:31,200 --> 00:12:34,990 >> Nii et tõesti, mida ma tahan panna temp ei ole aadressi, kuid 295 00:12:34,990 --> 00:12:36,180 sisu. 296 00:12:36,180 --> 00:12:41,930 Nii et kui on number nagu 123, see on 123. baiti mälu, mis lihtsalt 297 00:12:41,930 --> 00:12:45,090 juhtub olema istuvad, et väärtus aastal juhtub olema istuvad. 298 00:12:45,090 --> 00:12:49,040 >> Kui ma tahan minna, et aadress, Ma pean ütlema, täht. 299 00:12:49,040 --> 00:12:52,610 Samamoodi, kui ma muuta seda, mis aadressil, muudan 300 00:12:52,610 --> 00:12:53,570 Selle käivitamiseks. 301 00:12:53,570 --> 00:12:58,185 Kui ma tahan salvestada mis kell asukoht, mida on kohas 302 00:12:58,185 --> 00:13:02,180 kell B täht b star. 303 00:13:02,180 --> 00:13:05,340 >> Nii lühike, isegi kui see ei ole päris hukku veel - ja ma ei oota 304 00:13:05,340 --> 00:13:06,560 et see oleks nii kiire - 305 00:13:06,560 --> 00:13:11,100 aru, et kõik, mida ma teen on prefixing need tähed mu muutujad, 306 00:13:11,100 --> 00:13:13,350 ütlus ei haara väärtused. 307 00:13:13,350 --> 00:13:14,520 Ärge muutke väärtusi. 308 00:13:14,520 --> 00:13:17,600 Aga pigem minge need aadressid ja saada raha. 309 00:13:17,600 --> 00:13:21,430 Mine sellele aadressile ja muutus väärtus olemas. 310 00:13:21,430 --> 00:13:25,500 >> Nüüd lubage mul kerida tagasi kuni top, lihtsalt määrata see joon siin, et 311 00:13:25,500 --> 00:13:27,690 muuta prototüüp sobitada. 312 00:13:27,690 --> 00:13:30,280 Aga ma nüüd vaja teha üks asi. 313 00:13:30,280 --> 00:13:35,500 Intuitiivselt kui ma olen muutunud tüüpi argumentide swap ootab, 314 00:13:35,500 --> 00:13:37,245 Mida ma veel vaja muuta oma koodi? 315 00:13:37,245 --> 00:13:39,750 316 00:13:39,750 --> 00:13:40,840 >> Kui ma kutsun swap. 317 00:13:40,840 --> 00:13:43,340 Sest just nüüd, mida olen I tõmmatakse vahetada ikka? 318 00:13:43,340 --> 00:13:47,450 Väärtuse x ja y väärtus, või piim ja apelsinimahl. 319 00:13:47,450 --> 00:13:48,510 Aga ma ei taha seda teha. 320 00:13:48,510 --> 00:13:51,060 I asemel tahavad läbida mida? 321 00:13:51,060 --> 00:13:53,050 Asukoht x ja asukoht y. 322 00:13:53,050 --> 00:13:55,300 Mis on nende postiaadressid, nii rääkida. 323 00:13:55,300 --> 00:13:57,600 >> Niisiis, mida teha, et seal ampersand. 324 00:13:57,600 --> 00:13:59,260 Ampersand omamoodi kõlab aadress. 325 00:13:59,260 --> 00:14:03,240 nii n, ampersand, aadress x, ja aadress y. 326 00:14:03,240 --> 00:14:06,790 Nii et see on tahtlik, et me kasutame sümboliga, kui kutsutakse funktsioon, 327 00:14:06,790 --> 00:14:10,230 ja tähed deklareerimisel ja kui rakendamisel funktsioon. 328 00:14:10,230 --> 00:14:14,220 >> Ja mõelge ampersand kui aadress operaator ja staar 329 00:14:14,220 --> 00:14:15,490 minna operaator - 330 00:14:15,490 --> 00:14:18,640 või rohkem õigesti, dereference operaator. 331 00:14:18,640 --> 00:14:23,480 Nii et terve hulk sõnu lihtsalt öelda, et nüüd, loodetavasti, swap läheb 332 00:14:23,480 --> 00:14:24,440 õige. 333 00:14:24,440 --> 00:14:26,550 >> Lubage mul minna ja teha - 334 00:14:26,550 --> 00:14:30,940 olgem tegelikult failile, muidu Selle programmi veel nimetada ei swap. 335 00:14:30,940 --> 00:14:33,240 Väidan, et me nimetame seda swap.c nüüd. 336 00:14:33,240 --> 00:14:35,670 Seega veenduge, vahetada. 337 00:14:35,670 --> 00:14:37,520 Dot, slash, vahetada. 338 00:14:37,520 --> 00:14:40,210 >> Ja nüüd tõesti, x 1, y 2. 339 00:14:40,210 --> 00:14:44,040 Ja siis x on 2, y on üks. 340 00:14:44,040 --> 00:14:46,500 Noh vaatame, kas me ei saa seda teha natuke erinevalt sellest, mida on 341 00:14:46,500 --> 00:14:47,180 siin toimub. 342 00:14:47,180 --> 00:14:51,250 Esiteks lubage mul suumida meie joonistus ekraan siin. 343 00:14:51,250 --> 00:14:54,160 Ja las ma pakun hetkel - ja kui juhin siin kajastuma 344 00:14:54,160 --> 00:14:58,660 seal nüüd - las ma ettepaneku, et siin on terve hunnik mälu või 345 00:14:58,660 --> 00:15:00,540 RAM, sees minu arvuti. 346 00:15:00,540 --> 00:15:04,140 >> Ja see on hammustada number, oletame, 1. 347 00:15:04,140 --> 00:15:05,720 See saab olema baiti number 2. 348 00:15:05,720 --> 00:15:08,220 Ja ma teen terve hulga rohkem, ja siis hunnik dot dot ringile 349 00:15:08,220 --> 00:15:10,880 näitavad, et seal on 2 miljardit need asjad. 350 00:15:10,880 --> 00:15:13,520 4, 5, ja nii edasi. 351 00:15:13,520 --> 00:15:17,055 >> Seega on esimese viie baiti minu arvuti mällu. 352 00:15:17,055 --> 00:15:17,560 Olgu? 353 00:15:17,560 --> 00:15:19,060 Väga vähesed välja 2 miljardit. 354 00:15:19,060 --> 00:15:21,120 Aga nüüd ma lähen ettepaneku järgmised. 355 00:15:21,120 --> 00:15:27,490 Ma lähen ettepaneku x läheb salvestada number 1 ja y läheb 356 00:15:27,490 --> 00:15:29,690 salvestada number 2. 357 00:15:29,690 --> 00:15:35,000 Ja lubage mul minna nüüd ja esindab need väärtused järgmiselt. 358 00:15:35,000 --> 00:15:41,510 >> Teeme seda järgmiselt. 359 00:15:41,510 --> 00:15:42,870 Anna mulle üks sekund. 360 00:15:42,870 --> 00:15:44,150 Üks hetk. 361 00:15:44,150 --> 00:15:45,680 OK. 362 00:15:45,680 --> 00:15:47,560 Ma tahan teha seda vähe - 363 00:15:47,560 --> 00:15:50,440 Teeme seda uuesti. 364 00:15:50,440 --> 00:15:53,250 Muidu ma lähen ja kasutades samad numbrid, tahtmatult 365 00:15:53,250 --> 00:15:54,230 mitu korda. 366 00:15:54,230 --> 00:15:57,320 >> Nii lihtsalt nii meil on erinevad numbrid rääkida, olgem nimetame seda bait 367 00:15:57,320 --> 00:16:03,391 number 123, 124, 125, 126, ja dot dot dot. 368 00:16:03,391 --> 00:16:08,400 Ja las ma väita, et nüüd, ma lähen pane väärtus 1 siin ja väärtus 2 369 00:16:08,400 --> 00:16:11,990 siin, muidu tuntud x ja y. 370 00:16:11,990 --> 00:16:15,300 Nii see lihtsalt nii juhtub, see on x, see on y. 371 00:16:15,300 --> 00:16:18,180 >> Ja just mõned juhuslik kokkusattumus, arvuti, operatsioonisüsteem, 372 00:16:18,180 --> 00:16:21,890 juhtus panna x saabus number 123. 373 00:16:21,890 --> 00:16:25,590 Ja y sattus asukoht 124 - 374 00:16:25,590 --> 00:16:26,330 kurat. 375 00:16:26,330 --> 00:16:28,700 Ma oleks pidanud kindlaks seda. 376 00:16:28,700 --> 00:16:34,040 Oh, ma tõesti tahan seda teha? 377 00:16:34,040 --> 00:16:37,340 Jah, ma tahan, et määrata see ja b õige sellest täna. 378 00:16:37,340 --> 00:16:39,950 Vabandust, uus selles. 379 00:16:39,950 --> 00:16:45,020 >> 127, 131, ja ma ei taha olla see keeruline, kuid miks ma muuta 380 00:16:45,020 --> 00:16:46,340 numbrid on? 381 00:16:46,340 --> 00:16:48,360 Sest ma tahan ints kuni tegelikult on neli baiti. 382 00:16:48,360 --> 00:16:49,810 Niisiis olgem super anal sellest. 383 00:16:49,810 --> 00:16:53,800 Nii et kui 1. juhtub olema adresseeritud 123, 2 saab olema aadressil 384 00:16:53,800 --> 00:16:55,730 127, kuna see on vaid 4 bye'dest kaugusel. 385 00:16:55,730 --> 00:16:56,210 See on kõik. 386 00:16:56,210 --> 00:16:58,640 Ja me unustame kõik muud aadressid kogu maailmas. 387 00:16:58,640 --> 00:17:03,320 >> Nii x on asukoht 123, y on asukohast 127. 388 00:17:03,320 --> 00:17:05,770 Ja nüüd, mida ma tegelikult tahad? 389 00:17:05,770 --> 00:17:10,099 Kui ma kutsun swap nüüd, mis on tegelikult toimub? 390 00:17:10,099 --> 00:17:14,920 Noh, kui ma kutsun swap, ma möödaminnes aadress x ja aadress y. 391 00:17:14,920 --> 00:17:18,540 Nii näiteks, kui need kaks tükki Paberist nüüd moodustavad kaks 392 00:17:18,540 --> 00:17:23,510 argumendid ja b vahetada, mida ma olen kavatse kirjutada Esimene neist, 393 00:17:23,510 --> 00:17:27,720 mis ma lähen helistada nimetame? 394 00:17:27,720 --> 00:17:30,610 >> Täpselt, 123. 395 00:17:30,610 --> 00:17:31,905 Nii et see Väidan on. 396 00:17:31,905 --> 00:17:32,955 See on parameeter. 397 00:17:32,955 --> 00:17:35,856 Panen aadress x sinna. 398 00:17:35,856 --> 00:17:38,152 >> Mis see on? 399 00:17:38,152 --> 00:17:40,890 >> Mis see on? 400 00:17:40,890 --> 00:17:41,190 >> Ei, ei. 401 00:17:41,190 --> 00:17:41,720 See on OK. 402 00:17:41,720 --> 00:17:42,570 Ikka hea, ikka hea. 403 00:17:42,570 --> 00:17:43,530 Nii et see on. 404 00:17:43,530 --> 00:17:46,240 Ja nüüd teisel paberile, see saab olema b, ja see, mida ma olen 405 00:17:46,240 --> 00:17:49,010 saab olema kirjalikult see tükk paberit? 406 00:17:49,010 --> 00:17:50,080 127. 407 00:17:50,080 --> 00:17:53,720 >> Nii et ainus asi, mis on muutunud meie eelmine Ütlen seda lugu on, 408 00:17:53,720 --> 00:17:58,590 mitte sõna-sõnalt 1 ja 2, ma olen läheb läbida 123 ja 127. 409 00:17:58,590 --> 00:18:02,130 Ja ma nüüd panen need sees Selle kasti, eks? 410 00:18:02,130 --> 00:18:04,640 Nii et must kast moodustab nüüd swap funktsiooni. 411 00:18:04,640 --> 00:18:07,230 >> Vahepeal teeme nüüd on keegi rakendada swap funktsiooni. 412 00:18:07,230 --> 00:18:09,090 Kas keegi siin meeldib töötada vabatahtlikuna? 413 00:18:09,090 --> 00:18:09,560 Tule üles. 414 00:18:09,560 --> 00:18:11,080 Mis su nimi on? 415 00:18:11,080 --> 00:18:11,460 Charlie. 416 00:18:11,460 --> 00:18:12,080 Olgu, Charlie. 417 00:18:12,080 --> 00:18:14,810 Tule üles. 418 00:18:14,810 --> 00:18:17,310 >> Nii Charlie läheb mängima rolli meie must kast. 419 00:18:17,310 --> 00:18:21,460 Ja Charlie, mida ma tahan, et sa teeksid nüüd on rakendada swap selliselt 420 00:18:21,460 --> 00:18:25,320 , et arvestades nende kahe aadressid, sa olid tegelikult toimub 421 00:18:25,320 --> 00:18:26,330 Väärtuste muutmiseks. 422 00:18:26,330 --> 00:18:28,290 Ja ma sosistada kõrva kuidas juhtida teleri siin. 423 00:18:28,290 --> 00:18:29,930 >> Nii et laske käia, ja sa oled must kast. 424 00:18:29,930 --> 00:18:30,920 Jõuda sinna. 425 00:18:30,920 --> 00:18:34,054 Mis väärtused näete, ja mis väärtused näete b? 426 00:18:34,054 --> 00:18:36,740 >> Charlie on 123 ja b on 127. 427 00:18:36,740 --> 00:18:37,530 >> DAVID Malan: OK, täpselt. 428 00:18:37,530 --> 00:18:38,940 Nüüd peatume seal hetkeks. 429 00:18:38,940 --> 00:18:41,680 Esimene asi, mida sa nüüd tegema hakkad, vastavalt kood - mis 430 00:18:41,680 --> 00:18:43,220 Ma nüüd tõmba ekraanil - 431 00:18:43,220 --> 00:18:46,750 saab olema eraldada vähe natuke mälu nimega temp. 432 00:18:46,750 --> 00:18:48,850 Nii et ma lähen edasi minna ja teile, et mälu. 433 00:18:48,850 --> 00:18:52,210 >> Nii et see saab olema kolmanda muutuja et teil on kättesaadav 434 00:18:52,210 --> 00:18:54,080 helistasite temp. 435 00:18:54,080 --> 00:18:57,120 Ja mida te kavatsete kirjutada on temp paberile? 436 00:18:57,120 --> 00:19:02,524 437 00:19:02,524 --> 00:19:03,470 >> CHARLIE: lähtekohad, eks? 438 00:19:03,470 --> 00:19:04,790 >> DAVID Malan: OK, hästi ei tingimata suunanäitajaks. 439 00:19:04,790 --> 00:19:07,230 Nii rida koodi, mis ma olen märgituna löögile, 440 00:19:07,230 --> 00:19:07,900 Alustame siis. 441 00:19:07,900 --> 00:19:08,890 Ta ütleb täht. 442 00:19:08,890 --> 00:19:11,670 Nii on praegu ladustamiseks number 123. 443 00:19:11,670 --> 00:19:16,660 Ja just intuitiivselt, mida ei star 123 tähendab? 444 00:19:16,660 --> 00:19:21,630 >> Aga just, kui on 123, star tähendab mida? 445 00:19:21,630 --> 00:19:22,560 Väärtus. 446 00:19:22,560 --> 00:19:24,580 Või rohkem juhuslikult, sinna minna. 447 00:19:24,580 --> 00:19:28,620 Nii et lubage mul ettepanek, et kellel on oma käsi, et edasi minna ja ravida, et 448 00:19:28,620 --> 00:19:29,430 nii nagu see on kaardil. 449 00:19:29,430 --> 00:19:32,940 Ja käige ise üle arvuti mälu ja leida meile, mis on 450 00:19:32,940 --> 00:19:36,520 Kohapeal 123. 451 00:19:36,520 --> 00:19:37,720 Täpselt. 452 00:19:37,720 --> 00:19:41,100 >> Nii näeme saabus 123 on see, mida ilmselt? 453 00:19:41,100 --> 00:19:44,240 OK, nii et mida väärtus nüüd on teil kavatse panna temp? 454 00:19:44,240 --> 00:19:44,750 Täpselt. 455 00:19:44,750 --> 00:19:45,600 Nii et laske käia ja teha. 456 00:19:45,600 --> 00:19:51,280 Ja kirjutage number 1 tükk paber, mis on praegu nimega temp. 457 00:19:51,280 --> 00:19:53,540 >> Ja nüüd järgmine samm, et sa lähed, et rakendada 458 00:19:53,540 --> 00:19:54,310 saab olema, mida. 459 00:19:54,310 --> 00:19:57,820 Noh, paremal küljel Järgmine rida koodi on täht b. b, ja 460 00:19:57,820 --> 00:19:59,260 Loomulikult salvestab aadress. 461 00:19:59,260 --> 00:20:02,270 See käsitleb 127. 462 00:20:02,270 --> 00:20:06,620 Star b tähendab mida, juhuslikult rääkida? 463 00:20:06,620 --> 00:20:08,700 >> Mine sellesse asukohta. 464 00:20:08,700 --> 00:20:14,988 Nii et laske käia ja leida meile, mida on Kohapeal 127. 465 00:20:14,988 --> 00:20:15,480 OK. 466 00:20:15,480 --> 00:20:19,170 Muidugi, asukoht 127, on ikka väärtus 2. 467 00:20:19,170 --> 00:20:24,060 Mida sa nüüd poe kõike, mis on asukohale? 468 00:20:24,060 --> 00:20:26,860 Nii star abil minge asukohta. 469 00:20:26,860 --> 00:20:29,770 Mis on asukoht? 470 00:20:29,770 --> 00:20:30,430 >> Täpselt. 471 00:20:30,430 --> 00:20:34,190 Nüüd, kui soovite muuta Mis selles kohas - 472 00:20:34,190 --> 00:20:36,470 Ma minna ja joosta kustutuskumm siin. 473 00:20:36,470 --> 00:20:37,760 Ja nüüd pane see tagasi pintsliga. 474 00:20:37,760 --> 00:20:42,190 Mis number sa lähed kirjutada selles tühi kast nüüd? 475 00:20:42,190 --> 00:20:42,850 >> Täpselt. 476 00:20:42,850 --> 00:20:46,470 Nii et see rida koodi, et oleks selge - las mind mõtlema, mida Charlie teed ja 477 00:20:46,470 --> 00:20:51,730 siinkohal tähelepanu, mida ta on teinud hiljuti on kirjuta sinna kasti asukohta 123 478 00:20:51,730 --> 00:20:55,150 väärtust, mis oli varem kell b. 479 00:20:55,150 --> 00:20:59,140 Ja nii oleme nüüdseks küll see teine ​​rida koodi. 480 00:20:59,140 --> 00:21:01,920 >> Nüüd kahjuks pole veel üks rida jäänud. 481 00:21:01,920 --> 00:21:04,900 Nüüd sellest, mis on temp, sõna otseses mõttes? 482 00:21:04,900 --> 00:21:06,200 See on ilmselt number üks. 483 00:21:06,200 --> 00:21:07,020 See pole aadressi. 484 00:21:07,020 --> 00:21:09,380 See on lihtsalt number, omamoodi muutuja nädal üks. 485 00:21:09,380 --> 00:21:13,520 >> Ja nüüd, kui te ütlete täht b, mis tähendab, minge aadressile b, mis on 486 00:21:13,520 --> 00:21:15,090 Muidugi siin. 487 00:21:15,090 --> 00:21:16,020 Nii et kui teil seal - 488 00:21:16,020 --> 00:21:18,320 Ma lähen edasi ja kustutada, mis tegelikult seal - ja mida sa 489 00:21:18,320 --> 00:21:20,820 kavatsen kirjutada praegu asukohas 127? 490 00:21:20,820 --> 00:21:22,010 >> CHARLIE: Temp, mis on üks. 491 00:21:22,010 --> 00:21:23,430 >> DAVID Malan: Temp, mis on üks. 492 00:21:23,430 --> 00:21:25,670 Ja mis juhtub temp lõpuks? 493 00:21:25,670 --> 00:21:26,600 Noh, me tegelikult ei tea. 494 00:21:26,600 --> 00:21:27,420 Me tõesti ei hooli. 495 00:21:27,420 --> 00:21:31,090 Iga kord, kui me oleme rakendanud funktsioon Siiani kõik kohalikud muutujad, mida 496 00:21:31,090 --> 00:21:31,890 on tõepoolest kohalikud. 497 00:21:31,890 --> 00:21:33,060 Ja nad lihtsalt kaovad. 498 00:21:33,060 --> 00:21:35,040 Nad taastatud tegutsevalt süsteem lõpuks. 499 00:21:35,040 --> 00:21:39,800 >> Nii, et temp veel väärtus 1 on justkui fundamentaalselt 500 00:21:39,800 --> 00:21:41,150 ebahuvitav meile. 501 00:21:41,150 --> 00:21:43,100 Olgu, aplaus kui saaksime Charlie. 502 00:21:43,100 --> 00:21:46,400 Väga hästi tehtud. 503 00:21:46,400 --> 00:21:51,520 >> Olgu, mida enam ei see tähendab, et me saame teha? 504 00:21:51,520 --> 00:21:54,400 Nii selgub, et me oleme olnud ütlen mõne valge valesid 505 00:21:54,400 --> 00:21:55,540 juba mõnda aega. 506 00:21:55,540 --> 00:21:59,990 Tõepoolest, selgub, et string, kõik see aeg, ei ole tegelikult 507 00:21:59,990 --> 00:22:02,190 märgijada iseenesest. 508 00:22:02,190 --> 00:22:03,980 See liik on see, et intuitiivselt. 509 00:22:03,980 --> 00:22:08,270 >> Aga tehniliselt rääkides string andmetüüp, mis me kuulutasime sees 510 00:22:08,270 --> 00:22:12,170 CS50 raamatukogu lihtsustada maailma esimese paari nädala klassis. 511 00:22:12,170 --> 00:22:20,130 Mis string tõesti on aadress on märk kuskil RAM. 512 00:22:20,130 --> 00:22:25,530 String on tegelikult number, nagu 123 või 127, mis juhtub piiritlevad 513 00:22:25,530 --> 00:22:28,420 kus string algab arvuti mällu. 514 00:22:28,420 --> 00:22:31,870 >> Aga see ei esinda string iseenesest ise. 515 00:22:31,870 --> 00:22:33,460 Ja me näeme seda järgmiselt. 516 00:22:33,460 --> 00:22:35,980 Lubage mul minna ja avada mõned kood, mis on vahel 517 00:22:35,980 --> 00:22:38,340 Tänapäeva lähtekoodi näiteid. 518 00:22:38,340 --> 00:22:42,225 Ja ma lähen edasi minna ja avada up, oletame, võrrelda-0.c. 519 00:22:42,225 --> 00:22:44,830 520 00:22:44,830 --> 00:22:48,790 See on lollakas programmi, mis läheb rakendatakse järgmiselt. 521 00:22:48,790 --> 00:22:49,040 >> Esimene. 522 00:22:49,040 --> 00:22:50,420 Ma lähen ütlen midagi. 523 00:22:50,420 --> 00:22:52,660 Siis ma lähen edasi minna ja saada string kasutaja 524 00:22:52,660 --> 00:22:53,750 aastal, et järgmisel real. 525 00:22:53,750 --> 00:22:55,370 Siis ma lähen ütlen seda uuesti. 526 00:22:55,370 --> 00:22:57,540 Siis ma lähen teise string kasutaja. 527 00:22:57,540 --> 00:23:00,390 >> Ja teate, ma olen näidates üks stringid muutuja nimega s ja 528 00:23:00,390 --> 00:23:03,040 teine ​​neist stringid aastal muutuja nimega t. 529 00:23:03,040 --> 00:23:07,480 Ja nüüd ma lähen väidavad, väga põhjendatult, et kui s võrdub võrdub t, 530 00:23:07,480 --> 00:23:08,940 stringid on ühesugused. 531 00:23:08,940 --> 00:23:09,970 Kirjutad sama asi. 532 00:23:09,970 --> 00:23:11,830 Else, stringid on ei ole sama asi. 533 00:23:11,830 --> 00:23:15,440 >> Lõppude lõpuks, kui me sisestada kaks ints kaks tähemärki, mõlemad ujukid, kaks kahekohalist, ükskõik 534 00:23:15,440 --> 00:23:18,400 andmetüübid oleme rääkinud seni kuni neid võrrelda - 535 00:23:18,400 --> 00:23:22,070 mäletan tegime väga selgeks aega tagasi et te ei saa seda teha, sest 536 00:23:22,070 --> 00:23:25,840 ühe võrdusmärk on muidugi omistamisoperaatorile. 537 00:23:25,840 --> 00:23:26,820 Nii et oleks viga. 538 00:23:26,820 --> 00:23:29,260 >> Me kasutame võrdne võrdusmärk, mis tõepoolest võrdleb 539 00:23:29,260 --> 00:23:31,050 asjad tõelise võrdsuse. 540 00:23:31,050 --> 00:23:32,275 Aga ma väita, et see on lollakas. 541 00:23:32,275 --> 00:23:37,400 Kui ma edasi minna ja teha võrrelda null, ja siis ei dot kaldkriipsuga võrrelda null. 542 00:23:37,400 --> 00:23:39,700 Ja ma kirjutada, ütleme tere. 543 00:23:39,700 --> 00:23:41,590 Ja siis ütleme tere jälle. 544 00:23:41,590 --> 00:23:46,040 Sõna-sõnalt sama asi, arvuti väidete ma kirjutada erinevaid asju. 545 00:23:46,040 --> 00:23:47,640 >> Nüüd võib-olla ma lihtsalt valesti kirjutatud midagi. 546 00:23:47,640 --> 00:23:49,910 Ma kirjuta mu nimi seekord. 547 00:23:49,910 --> 00:23:52,580 Ma mõtlen, tere. 548 00:23:52,580 --> 00:23:54,770 Tere. 549 00:23:54,770 --> 00:23:57,360 See on erinev iga kord. 550 00:23:57,360 --> 00:23:58,430 >> Noh, miks see nii on? 551 00:23:58,430 --> 00:24:00,140 Mis tegelikult toimub all kapuuts? 552 00:24:00,140 --> 00:24:03,270 Noh, mis tegelikult toimub all kapuuts on stringi siis 553 00:24:03,270 --> 00:24:07,410 Ma kirjutada, et esimest korda näiteks on sõna, tere, muidugi. 554 00:24:07,410 --> 00:24:11,660 Aga kui me esindame seda all kapuuts, meelde tuletada, et 555 00:24:11,660 --> 00:24:13,470 string on massiiv. 556 00:24:13,470 --> 00:24:15,040 Ja me oleme öelnud nii palju kui varem. 557 00:24:15,040 --> 00:24:20,200 >> Nii et kui ma joonistan selle massiivi nagu see, ma olen läheb esindama midagi täiesti 558 00:24:20,200 --> 00:24:23,030 sarnane sellele, mida me tegime hetk tagasi. 559 00:24:23,030 --> 00:24:25,390 Ja seal on tegelikult midagi eriline ka siin. 560 00:24:25,390 --> 00:24:28,090 Mida me teeme kindlaks, oli aasta lõpus iga string? 561 00:24:28,090 --> 00:24:30,760 Jah, see Kenoviiva null, mis on just nii, esindavad, 562 00:24:30,760 --> 00:24:33,610 sõna-sõnalt, 00000000. 563 00:24:33,610 --> 00:24:35,680 Kaheksa 0 bitti järjest. 564 00:24:35,680 --> 00:24:37,610 >> Ma ei tea, ausalt, Mis pärast seda. 565 00:24:37,610 --> 00:24:40,090 See on lihtsalt hunnik rohkem RAM sees minu arvuti. 566 00:24:40,090 --> 00:24:40,970 Aga see on massiiv. 567 00:24:40,970 --> 00:24:42,260 Rääkisime massiivid enne. 568 00:24:42,260 --> 00:24:45,010 Ja me tavaliselt räägime massiivid nagu oleks asukoha null, 569 00:24:45,010 --> 00:24:46,580 siis üks, siis kaks. 570 00:24:46,580 --> 00:24:47,950 Aga see on lihtsalt mugavamaks. 571 00:24:47,950 --> 00:24:49,380 Ja see on täiesti suhteline. 572 00:24:49,380 --> 00:24:53,010 >> Kui sa tegelikult saada mälu arvuti, see on muidugi iga 573 00:24:53,010 --> 00:24:55,450 2000000000 mõned kummalised baite potentsiaalselt. 574 00:24:55,450 --> 00:24:59,100 Nii et tõesti alla kapuuts, Kogu selle aja, jah. 575 00:24:59,100 --> 00:25:01,670 See võib väga hästi olla sulg null. 576 00:25:01,670 --> 00:25:04,780 Aga kui sa kaevama veelgi sügavamale all kapuuts, mis on tõesti 577 00:25:04,780 --> 00:25:07,000 tegeleda number 123. 578 00:25:07,000 --> 00:25:09,150 See on aadress 124. 579 00:25:09,150 --> 00:25:11,040 See on aadress 125. 580 00:25:11,040 --> 00:25:12,540 >> Ja ma ei keera seekord. 581 00:25:12,540 --> 00:25:15,840 Need on nüüd üks baiti peale, mis põhjusel? 582 00:25:15,840 --> 00:25:17,930 Kui suur on char? 583 00:25:17,930 --> 00:25:19,170 Char on üks bait. 584 00:25:19,170 --> 00:25:20,570 Int on tavaliselt neli baiti. 585 00:25:20,570 --> 00:25:24,850 Nii et miks ma tegin seda 123, 127, 131 ja nii edasi. 586 00:25:24,850 --> 00:25:27,560 Nüüd ma saan hoida matemaatika lihtsam ja just seda pluss 1. 587 00:25:27,560 --> 00:25:30,510 Ja see on nüüd see, mis tegelikult toimub on alla kapuuts. 588 00:25:30,510 --> 00:25:37,760 >> Nii et kui te kuulutada midagi sellist, string s, see on tegelikult - 589 00:25:37,760 --> 00:25:39,170 Selgub - 590 00:25:39,170 --> 00:25:41,190 char star. 591 00:25:41,190 --> 00:25:44,640 Star muidugi tähendab, aadress, aka pointer. 592 00:25:44,640 --> 00:25:46,200 Nii et see on aadress, midagi. 593 00:25:46,200 --> 00:25:47,510 Mis on see aadress? 594 00:25:47,510 --> 00:25:47,760 >> Noh - 595 00:25:47,760 --> 00:25:51,680 Ma olen ainus, kes näeb väga Oluline Ma teen, või arvate, et 596 00:25:51,680 --> 00:25:52,560 Ma teen. 597 00:25:52,560 --> 00:25:55,270 Nii string - 598 00:25:55,270 --> 00:25:57,180 Kurb on see, et mul on monitor seal, kus ma 599 00:25:57,180 --> 00:25:58,100 oleks seda näinud. 600 00:25:58,100 --> 00:26:00,990 >> Olgu, nii string s on see, mida Kuulutasin ma varem. 601 00:26:00,990 --> 00:26:04,600 Aga selgub, tänu vähe magic CS50 raamatukogu, kõik see 602 00:26:04,600 --> 00:26:08,780 aeg string on sõna otseses mõttes olnud char star. 603 00:26:08,780 --> 00:26:11,310 Star jälle tähendab osuti või aadress. 604 00:26:11,310 --> 00:26:14,180 Asjaolu, et see on kõrval- sõna char tähendab see 605 00:26:14,180 --> 00:26:15,970 aadress iseloomu. 606 00:26:15,970 --> 00:26:23,100 >> Nii et kui saad string nimetatakse, ja writing H-E-L-L-O, ettepaneku nüüd see, mis on saada 607 00:26:23,100 --> 00:26:27,330 string sõna otseses mõttes on tagasi kõik Sel ajal, kuigi oleme üsna 608 00:26:27,330 --> 00:26:29,980 lihtsustatult maailmas? 609 00:26:29,980 --> 00:26:33,310 Mis saada string tegelikult tagastama selle tagastatav väärtus? 610 00:26:33,310 --> 00:26:35,830 611 00:26:35,830 --> 00:26:38,720 >> 123 Käesolevas asjas, näiteks. 612 00:26:38,720 --> 00:26:42,630 Me oleme varem öelnud, et saada string lihtsalt tagastab stringi, jada 613 00:26:42,630 --> 00:26:43,300 tähemärki. 614 00:26:43,300 --> 00:26:44,790 Aga see on natuke valge vale. 615 00:26:44,790 --> 00:26:48,010 Viis saada string tõesti toimib all kapuuts on see läheb 616 00:26:48,010 --> 00:26:48,930 string kasutaja. 617 00:26:48,930 --> 00:26:51,530 See puudutab pinda märkide ta tüüpi mälu. 618 00:26:51,530 --> 00:26:54,680 See asetab längkriipsu null lõpus nende märgijada. 619 00:26:54,680 --> 00:26:57,310 >> Aga mida ei saa string sõna otseses mõttes tagasi? 620 00:26:57,310 --> 00:27:02,710 Ta sõna otseses mõttes tagastab aadress Kõige esimene baiti RAM, et 621 00:27:02,710 --> 00:27:04,130 seda kasutatakse, et jõudu. 622 00:27:04,130 --> 00:27:07,500 Ja selgub, et lihtsalt tagastades ühe aadressi 623 00:27:07,500 --> 00:27:12,120 esimene märk string, mis on piisav selleks, et kogu 624 00:27:12,120 --> 00:27:12,630 string. 625 00:27:12,630 --> 00:27:16,930 >> Teisisõnu, saada string ei ole tagasi 123 ja 124 ja 125. 626 00:27:16,930 --> 00:27:19,950 See ei ole mulle pikk nimekirja kõikide baitide et 627 00:27:19,950 --> 00:27:20,740 minu string kasutades. 628 00:27:20,740 --> 00:27:22,670 Sest üks, nad kõik tagasi tagasi. 629 00:27:22,670 --> 00:27:28,160 Ja kaks, mis põhineb esimesel aadress, ma saate aru saada, kus string lõpeb. 630 00:27:28,160 --> 00:27:29,910 Kuidas? 631 00:27:29,910 --> 00:27:33,490 >> Eriline null iseloomu, Längkriipsu null lõpus. 632 00:27:33,490 --> 00:27:35,430 Nii teisisõnu, kui te kaotate umbes - 633 00:27:35,430 --> 00:27:36,530 sees muutujate - 634 00:27:36,530 --> 00:27:41,300 aadress char ja sa endale et lõpus iga string, iga 635 00:27:41,300 --> 00:27:45,040 märgijada nagu meie, inimesed mõtle stringid, kui eeldada, et 636 00:27:45,040 --> 00:27:48,600 aasta lõpus selline string seal längkriipsu null, sa oled kuldne. 637 00:27:48,600 --> 00:27:52,430 Sest sa võid alati leida lõpuks string. 638 00:27:52,430 --> 00:27:54,870 >> Nüüd sellest, mis on tõesti siis läheb on see programm? 639 00:27:54,870 --> 00:27:59,990 Miks on see programm, võrrelda-0.c, lollakas? 640 00:27:59,990 --> 00:28:01,690 Mida on tegelikult võrreldes? 641 00:28:01,690 --> 00:28:02,420 Jah? 642 00:28:02,420 --> 00:28:05,000 >> Õpilane: [kuuldamatu]. 643 00:28:05,000 --> 00:28:05,730 >> DAVID Malan: Täpselt. 644 00:28:05,730 --> 00:28:08,350 See võrdleb asukohad on stringid. 645 00:28:08,350 --> 00:28:12,420 Nii et kui kasutaja on trükitud tere kord, nagu mina tegin, mälu sattuda 646 00:28:12,420 --> 00:28:13,430 niimoodi välja. 647 00:28:13,430 --> 00:28:18,210 Kui kasutaja seejärel liigid tere jälle, kuid helistades saada stringi, c on 648 00:28:18,210 --> 00:28:21,800 ei ole eriti tark, kui sa õpetada see oleks tark kirjutada koodi. 649 00:28:21,800 --> 00:28:22,430 >> C - 650 00:28:22,430 --> 00:28:23,860 ja arvutid üldisemalt - 651 00:28:23,860 --> 00:28:27,370 kui sa kirjutad sõna tere jälle, sa tead, mida sa hakka. 652 00:28:27,370 --> 00:28:31,480 Sa lihtsalt hakka teise massiivi mälu, et jah, juhtub olema 653 00:28:31,480 --> 00:28:35,510 ladustamiseks H-E-L-L-O ja nii edasi. 654 00:28:35,510 --> 00:28:38,240 >> Ta läheb otsima sama meile inimesi, kuid see aadress 655 00:28:38,240 --> 00:28:39,460 ei pruugi olla 123. 656 00:28:39,460 --> 00:28:42,470 See võib just nii juhtuda, et operatsioonisüsteem on mõned saadaval 657 00:28:42,470 --> 00:28:45,430 ruumi näiteks kell location - 658 00:28:45,430 --> 00:28:49,820 ütleme midagi meelevaldne, nagu see on asukohast 200. 659 00:28:49,820 --> 00:28:51,620 Ja see on asukohast 201. 660 00:28:51,620 --> 00:28:53,060 Ja see on asukohast 202. 661 00:28:53,060 --> 00:28:55,730 Me ei tea, kus see on saab olema mälus. 662 00:28:55,730 --> 00:28:59,110 >> Aga mida see tähendab, et see, mida on kavatse hoida lõppkokkuvõttes s? 663 00:28:59,110 --> 00:29:00,750 Number 123. 664 00:29:00,750 --> 00:29:04,860 Mis saab olema salvestatud t, selles meelevaldne näide? 665 00:29:04,860 --> 00:29:06,300 Number 200. 666 00:29:06,300 --> 00:29:11,410 Ja kõik see tähendab, siis on ilmselt 123 ei võrdu 200. 667 00:29:11,410 --> 00:29:14,940 Ja nii see, kui tingimus ei TRUE. 668 00:29:14,940 --> 00:29:18,430 Sest get string kasutades erinevaid tükkideks mälu iga kord. 669 00:29:18,430 --> 00:29:20,360 >> Nüüd me näeme seda jälle Teises näites. 670 00:29:20,360 --> 00:29:23,764 Lubage mul minna ja avada copy-0.c. 671 00:29:23,764 --> 00:29:28,770 Väidan, et see näide ei kavatse proovida - aga ei - teost kopeerida kaks stringi 672 00:29:28,770 --> 00:29:29,910 järgmiselt. 673 00:29:29,910 --> 00:29:31,730 >> Ma lähen midagi öelda kasutaja. 674 00:29:31,730 --> 00:29:34,490 Ma siis hakka string ja nimetame seda s. 675 00:29:34,490 --> 00:29:36,400 Ja nüüd, ma teen seda kontrolli siin. 676 00:29:36,400 --> 00:29:37,990 Me mainis seda aega tagasi. 677 00:29:37,990 --> 00:29:42,490 Aga kui võid saada string tagasi null, teine ​​eripära või spetsiaalsed 678 00:29:42,490 --> 00:29:45,050 sümbol oletame. 679 00:29:45,050 --> 00:29:45,900 Kui see on mälu. 680 00:29:45,900 --> 00:29:48,970 >> Näiteks, kui kasutaja ei ole tegelikult on raske ja liigid jõle 681 00:29:48,970 --> 00:29:51,220 märkide arv on klaviatuur ja hits Enter. 682 00:29:51,220 --> 00:29:54,580 Kui see arv märke lihtsalt ei saa mahtuda RAM mingil hull 683 00:29:54,580 --> 00:29:57,820 põhjus, samuti saada string võib väga hästi tagasi null. 684 00:29:57,820 --> 00:30:01,080 >> Või kui teie programm ise on teinud palju muid asju ja seal on lihtsalt 685 00:30:01,080 --> 00:30:03,790 ei piisa mälu get string õnnestub, võib see lõpuks 686 00:30:03,790 --> 00:30:05,240 üles tagasi null. 687 00:30:05,240 --> 00:30:07,160 Aga olgem täpsemad et mis see on. 688 00:30:07,160 --> 00:30:10,280 Mis on s andmete tüüp tõesti? 689 00:30:10,280 --> 00:30:11,610 Char star. 690 00:30:11,610 --> 00:30:14,560 >> Nii selgub nüüd saame koor tagasi kiht null. 691 00:30:14,560 --> 00:30:17,500 Selgub, null on - jah, loomulikult eriline sümbol. 692 00:30:17,500 --> 00:30:19,190 Aga milline on see tõesti? 693 00:30:19,190 --> 00:30:25,220 Tõesti, null on lihtsalt sümbol, mida me inimestel kasutada esindama null samuti. 694 00:30:25,220 --> 00:30:29,010 >> Nii autorite C ja arvutid üldisemalt otsustas aastat tagasi 695 00:30:29,010 --> 00:30:30,010 , et sa tead, mis. 696 00:30:30,010 --> 00:30:34,850 Miks me ei võiks tagada, et ükski kasutaja andmed on kunagi, kunagi, kunagi 697 00:30:34,850 --> 00:30:36,730 säilitatakse bye null? 698 00:30:36,730 --> 00:30:39,610 Isegi minu meelevaldne näide enne, ma ei hakanud numeratsiooni 699 00:30:39,610 --> 00:30:40,390 bytes null. 700 00:30:40,390 --> 00:30:41,540 Hakkasin üks. 701 00:30:41,540 --> 00:30:44,950 Sest ma teadsin, et inimesed maailmas on otsustanud endale null 702 00:30:44,950 --> 00:30:47,970 bait kellegi RAM midagi erilist. 703 00:30:47,970 --> 00:30:52,020 >> Põhjus on selles, millal soovite märku, et midagi on valesti läinud 704 00:30:52,020 --> 00:30:55,960 seoses aadresse, siis tagastatakse null - muidu tuntud zero - 705 00:30:55,960 --> 00:30:59,410 ja kuna sa tead, et ei ole legit andmed aadressil null, selgelt 706 00:30:59,410 --> 00:31:00,400 see tähendab, et viga. 707 00:31:00,400 --> 00:31:04,080 Ja sellepärast me, kokkuleppeliselt, kontrollige for null ja tagasi midagi 708 00:31:04,080 --> 00:31:06,260 nagu üks juhtudel. 709 00:31:06,260 --> 00:31:09,300 >> Nii et kui me keri nüüd, see on lihtsalt siis mõned vigade kontrolli igaks juhuks 710 00:31:09,300 --> 00:31:10,610 Midagi läks valesti [? päästmiseks?] 711 00:31:10,610 --> 00:31:13,470 kokku ja sulgege programm tagastades varakult. 712 00:31:13,470 --> 00:31:19,030 See rida nüüd saab ümber kui see, mis tähendab mida? 713 00:31:19,030 --> 00:31:23,155 Vasakul pool, anna mulle veel kursor iseloomu, ja nimetame seda t. 714 00:31:23,155 --> 00:31:26,935 Mida ma ladustamiseks sees t, mis põhineb see üks rida koodi? 715 00:31:26,935 --> 00:31:30,950 716 00:31:30,950 --> 00:31:32,170 >> Ma ladustamiseks asukohta. 717 00:31:32,170 --> 00:31:34,742 Täpsemalt asukoha mis oli s. 718 00:31:34,742 --> 00:31:39,000 Nii et kui kasutaja on trükitud tere, ja et esimene tere juhtub lõpuks 719 00:31:39,000 --> 00:31:42,567 siin, siis number 123 on tulemas tagasi saada 720 00:31:42,567 --> 00:31:43,810 nöörid ja säilitatakse - 721 00:31:43,810 --> 00:31:44,780 nagu me varem ütles - 722 00:31:44,780 --> 00:31:45,440 s. 723 00:31:45,440 --> 00:31:50,560 >> Kui ma nüüd deklareerima teine ​​kursor char ja nimetame seda t, mis number on 724 00:31:50,560 --> 00:31:53,940 sõna otseses mõttes läheb sattuda t vastavalt lugu? 725 00:31:53,940 --> 00:31:55,420 Nii 123. 726 00:31:55,420 --> 00:32:00,310 >> Nii tehniliselt nüüd nii s ja t on suunatud täpset 727 00:32:00,310 --> 00:32:02,410 sama tükkideks mälu. 728 00:32:02,410 --> 00:32:06,140 Nii teate, mida ma lähen tegema nüüd tõestada, et see programm on vigane. 729 00:32:06,140 --> 00:32:08,820 >> Esiteks ma väita, koos print f, ära 730 00:32:08,820 --> 00:32:10,080 koopia string. 731 00:32:10,080 --> 00:32:11,660 Siis ma lähen teen natuke Vigade kontrollimine. 732 00:32:11,660 --> 00:32:12,160 Ma lähen veenduda. 733 00:32:12,160 --> 00:32:16,710 Teeme kindlaks, et string t on vähemalt on suurem kui null, mille pikkus 734 00:32:16,710 --> 00:32:19,190 nii on mingi tegelane seal tegelikult kasu. 735 00:32:19,190 --> 00:32:22,840 >> Ja siis võiks meenutada seda Eelmiste näidetega. 736 00:32:22,840 --> 00:32:25,630 2 ülemine - mis on ctype.h faili. 737 00:32:25,630 --> 00:32:30,800 T sulg null annab mulle null iseloomu string t. 738 00:32:30,800 --> 00:32:34,360 Ja 2 ülemine sama väärtus, ning Muidugi muudab see suureks. 739 00:32:34,360 --> 00:32:38,230 >> Nii intuitiivselt, see esile rida kood on ära esimene 740 00:32:38,230 --> 00:32:40,250 kirja t. 741 00:32:40,250 --> 00:32:44,485 Aga see ei ole ära, intuitiivselt, Esimene täht s. 742 00:32:44,485 --> 00:32:48,130 Aga kui sa oled mõtlemine, mida ma olen kohta, et näha, kui ma saan selle programmi 743 00:32:48,130 --> 00:32:54,220 ja välja printida nii originaal, s ja nn koopia, t? 744 00:32:54,220 --> 00:32:55,350 >> Nad tegelikult saab olema sama. 745 00:32:55,350 --> 00:32:56,600 Ja miks nad saab olema sama? 746 00:32:56,600 --> 00:32:58,970 747 00:32:58,970 --> 00:33:01,020 Nad mõlemad osutades täpselt sama asi. 748 00:33:01,020 --> 00:33:01,610 Teeme seda. 749 00:33:01,610 --> 00:33:03,160 >> Tee koopia null. 750 00:33:03,160 --> 00:33:04,070 Ta koostab OK. 751 00:33:04,070 --> 00:33:06,500 Lubage mul joosta koopia null. 752 00:33:06,500 --> 00:33:10,110 Las ma kirjuta midagi tere kõik väiketähed siis Enter. 753 00:33:10,110 --> 00:33:16,520 Ja ta väidab, et nii esialgne s ja koopia on tõepoolest identsed. 754 00:33:16,520 --> 00:33:17,920 >> Mis siis tegelikult juhtus? 755 00:33:17,920 --> 00:33:20,100 Lubage mul tõmmata see pilt lihtsalt öelda lugu 756 00:33:20,100 --> 00:33:21,340 veidi teistmoodi. 757 00:33:21,340 --> 00:33:26,060 Mis tegelikult toimub all hood, kui ma kuulutada midagi 758 00:33:26,060 --> 00:33:30,410 char start s või string s, Saan pointer - 759 00:33:30,410 --> 00:33:33,090 mis juhtub olema neli baiti aastal CS50 seade 760 00:33:33,090 --> 00:33:34,410 ja palju arvuteid. 761 00:33:34,410 --> 00:33:36,008 Ja ma lähen kutsun seda s. 762 00:33:36,008 --> 00:33:39,810 Ja see on praegu mõne tundmatu väärtus. 763 00:33:39,810 --> 00:33:43,900 >> Kui deklareerida muutuja, kui te ise panna raha sinna, kes 764 00:33:43,900 --> 00:33:44,570 teab, mis seal on. 765 00:33:44,570 --> 00:33:48,110 See võib olla mõne juhusliku jada bits eelmisest täitmine. 766 00:33:48,110 --> 00:33:52,490 Nii et kui ma, minu rida koodi ei saada string, ja siis hoidke tagasi 767 00:33:52,490 --> 00:33:54,800 väärtus s saada string kuidagi - 768 00:33:54,800 --> 00:33:58,520 ja me lõpuks koor tagasi kuidas saada string teoste kuidagi eraldab 769 00:33:58,520 --> 00:34:00,480 massiivi tõenäoliselt välja natuke nagu see. 770 00:34:00,480 --> 00:34:05,390 H-E-L-L-O, Kenoviiva null. 771 00:34:05,390 --> 00:34:09,510 >> Oletame, et see on aadress 123 lihtsalt esimene järjepidevus. 772 00:34:09,510 --> 00:34:13,000 Nii et saada string naaseb, on esile rida olemas, siis tagastab 773 00:34:13,000 --> 00:34:15,000 number ütlesime, 123. 774 00:34:15,000 --> 00:34:17,420 Mis siis tegelikult läheb sees on siin? 775 00:34:17,420 --> 00:34:26,590 >> Noh, mis tõesti läheb sees s on 123. 776 00:34:26,590 --> 00:34:29,250 Aga ausalt, ma saan veidi segaduses kõik need aadressid, 777 00:34:29,250 --> 00:34:30,320 kõik need meelevaldsed numbrid. 778 00:34:30,320 --> 00:34:32,290 123, 124, 127. 779 00:34:32,290 --> 00:34:34,570 Teeme tegelikult lihtsustada maailma natuke. 780 00:34:34,570 --> 00:34:38,800 >> Kui me räägime suunanäitajaks, öeldes, et meile inimestele, kes kuradit see huvitab, kus 781 00:34:38,800 --> 00:34:39,870 asjad on mälu? 782 00:34:39,870 --> 00:34:41,080 See on täiesti meelevaldne. 783 00:34:41,080 --> 00:34:43,370 See läheb sõltub sellest, kuidas palju RAM'i kasutaja. 784 00:34:43,370 --> 00:34:46,590 See hakkab sõltuma kui päeval sa käivitada programmi ehk ja 785 00:34:46,590 --> 00:34:48,250 mida sisend kasutaja annab. 786 00:34:48,250 --> 00:34:50,060 Oleme eluruumi ebaolulised detailid. 787 00:34:50,060 --> 00:34:54,230 >> Niisiis olgem abstraktne ära ja öelda, et kui sa jooksed koodirida niimoodi, 788 00:34:54,230 --> 00:34:57,320 char täht s saab tagasi väärtus get string. 789 00:34:57,320 --> 00:35:02,720 Miks me ei võiks selle asemel lihtsalt teha, mida me hoida helistades osuti nii, nagu see on 790 00:35:02,720 --> 00:35:04,140 juhtides midagi? 791 00:35:04,140 --> 00:35:07,000 Nii et ma väita, et nüüd, s up seal on viit - 792 00:35:07,000 --> 00:35:08,480 all kapuuts see aadress. 793 00:35:08,480 --> 00:35:11,330 Aga see on lihtsalt osutades esimene bait 794 00:35:11,330 --> 00:35:12,780 string, mis on tagastatud. 795 00:35:12,780 --> 00:35:16,710 >> Kui ma nüüd naasta kood siia mis toimub selles rida? 796 00:35:16,710 --> 00:35:20,020 Noh, selles märgitud rea nüüd, Teatan ilmselt teine 797 00:35:20,020 --> 00:35:21,070 muutuja nimega t. 798 00:35:21,070 --> 00:35:25,700 Aga see on ka osuti, nii et ma lähen juhtida seda teoreetiliselt täpne 799 00:35:25,700 --> 00:35:26,710 sama suur kast. 800 00:35:26,710 --> 00:35:28,160 Ja ma lähen kutsun seda t. 801 00:35:28,160 --> 00:35:33,500 >> Ja nüüd, kui me tagasi minna kood uuesti kui ma salvestada s sees t, 802 00:35:33,500 --> 00:35:36,920 mida ma olen tehniliselt pannes sees t? 803 00:35:36,920 --> 00:35:39,350 Noh tehniliselt see oli number 123. 804 00:35:39,350 --> 00:35:42,270 Nii et tõesti ma tuleks kirjalikult number 123 seal. 805 00:35:42,270 --> 00:35:43,900 Aga võtame seda kõrgemal tasemel. 806 00:35:43,900 --> 00:35:48,090 t, kui see on lihtsalt pointer, intuitiivselt, on just nii. 807 00:35:48,090 --> 00:35:49,800 See on kõik, mis on salvestatakse sinna. 808 00:35:49,800 --> 00:35:54,970 >> Nüüd viimase huvitav read koodi, kui ma tegelikult minna 809 00:35:54,970 --> 00:36:00,680 ära null iseloomu t, mis toimub? 810 00:36:00,680 --> 00:36:06,310 Noh, t sulg null on nüüd suunatud mis märk, arvatavasti? 811 00:36:06,310 --> 00:36:07,460 >> See osutab, et h. 812 00:36:07,460 --> 00:36:08,870 Kuna t sulg null - 813 00:36:08,870 --> 00:36:12,490 mäletan, et see on vana süntaks. t sulg null tähendab lihtsalt, kui t on string, t 814 00:36:12,490 --> 00:36:15,590 sulg null tähendab saada null märk, et jõudu. 815 00:36:15,590 --> 00:36:18,650 Niisiis, mida see tegelikult tähendab on minna seda massiivi - 816 00:36:18,650 --> 00:36:21,520 ja jah, see võib olla 123, see võiks olla 124. 817 00:36:21,520 --> 00:36:22,790 Aga see kõik on suhteline, mäletan. 818 00:36:22,790 --> 00:36:25,640 Kui räägime array oleme ära räägi 819 00:36:25,640 --> 00:36:27,000 suhteline indekseid. 820 00:36:27,000 --> 00:36:31,120 >> Ja nüüd me lihtsalt eeldada, et t sulg null on h. 821 00:36:31,120 --> 00:36:35,090 Nii et kui ma kutsun 2 ülemine see, mis see on tegelikult teeme, on ära 822 00:36:35,090 --> 00:36:38,290 väiketähed h suureks H. Aga muidugi, mis on s? 823 00:36:38,290 --> 00:36:41,010 See osutab, et sama darn string. 824 00:36:41,010 --> 00:36:44,200 >> Nii et see on kõik, mis on juhtunud Selles kood siiani. 825 00:36:44,200 --> 00:36:45,960 Nii et mis siis tähendas? 826 00:36:45,960 --> 00:36:48,300 Kuidas me kindlaks need kaks probleemi? 827 00:36:48,300 --> 00:36:50,870 Kuidas võrrelda tegelik stringid? 828 00:36:50,870 --> 00:36:53,720 >> Noh intuitiivselt, kuidas oleks te lähete võrrelda kahe 829 00:36:53,720 --> 00:36:55,090 stringid tõelist võrdsust? 830 00:36:55,090 --> 00:36:58,920 831 00:36:58,920 --> 00:37:00,750 >> Mis see tähendab, kui kaks stringid on võrdsed? 832 00:37:00,750 --> 00:37:04,330 Ilmselgelt ei ole, et nende aadressid on võrdne mälu, sest see on madal 833 00:37:04,330 --> 00:37:06,590 tasandil rakendamise üksikasju. 834 00:37:06,590 --> 00:37:08,360 Kõik tegelased on samad. 835 00:37:08,360 --> 00:37:12,810 Nii et lubage mul pakkuda, ja lubage mul tutvustada versioonis üks compare.c 836 00:37:12,810 --> 00:37:14,970 siin, nii et võrrelda-1.c. 837 00:37:14,970 --> 00:37:19,590 >> Lubage mul ettepanek, et me ikka pointer nimega s ning kaupluse see 838 00:37:19,590 --> 00:37:20,610 tagastatav väärtus get string. 839 00:37:20,610 --> 00:37:21,750 Teeme sama asja t. 840 00:37:21,750 --> 00:37:23,230 Seega ükski kood on erinev. 841 00:37:23,230 --> 00:37:25,420 Ma lähen lisada natuke rohkem veakontrollifunktsioon nüüd. 842 00:37:25,420 --> 00:37:29,390 Nüüd, et me oleme omamoodi koorimine tagasi see kihtidesse CS50 mida string 843 00:37:29,390 --> 00:37:33,520 tegelikult on, peame olema rohkem anal hoolitsedes me ei kuritarvita 844 00:37:33,520 --> 00:37:35,330 kehtetu väärtused nagu null. 845 00:37:35,330 --> 00:37:36,440 >> Nii et ma lähen lihtsalt kontrollida. 846 00:37:36,440 --> 00:37:41,490 Kui te ei ole võrdne null ja t ei võrdne null, mis tähendab, et me oleme OK. 847 00:37:41,490 --> 00:37:44,460 Hangi string ei kägardama saada kas neid stringe. 848 00:37:44,460 --> 00:37:51,270 Ja sa võid olla arvan nüüd, mida ei STR CMP arvatavasti teha? 849 00:37:51,270 --> 00:37:52,000 String võrrelda. 850 00:37:52,000 --> 00:37:55,470 >> Nii et kui olete programmi java enne, see on nagu võrdne meetodi 851 00:37:55,470 --> 00:37:56,490 string klass. 852 00:37:56,490 --> 00:37:57,890 Aga neile, kes ei ole programmeeritud enne, 853 00:37:57,890 --> 00:37:59,320 see on lihtsalt c funktsioon. 854 00:37:59,320 --> 00:38:02,180 See juhtub, et tulla fail nimega string. 855 00:38:02,180 --> 00:38:03,830 See, kui see on deklareeritud. 856 00:38:03,830 --> 00:38:05,110 >> Ja string võrrelda - 857 00:38:05,110 --> 00:38:07,530 Ma tegelikult unustada selle kasutamine, kuid ei ole kunagi meeles, et. 858 00:38:07,530 --> 00:38:10,470 Tuletame meelde, et me saame teha mees, sega võrrelda. 859 00:38:10,470 --> 00:38:12,590 Ja see läheb üles tuua Linux programmeerijad kasutusjuhendi. 860 00:38:12,590 --> 00:38:14,060 Ja see on ausalt öeldes veidi segasena. 861 00:38:14,060 --> 00:38:15,270 Aga ma näen siin, et jah. 862 00:38:15,270 --> 00:38:17,570 Mul on lisada string. 863 00:38:17,570 --> 00:38:20,590 >> Ja ta ütleb, et siin all kirjeldus, " string Võrdlusfunktsioon võrdleb 864 00:38:20,590 --> 00:38:24,560 kaks stringi S1 ja S2. "Ja S1 ja S2 on ilmselt kaks 865 00:38:24,560 --> 00:38:26,120 argumentide sisse 866 00:38:26,120 --> 00:38:28,650 Ma tõesti ei mäleta, mida const on, kuid nüüd teate - 867 00:38:28,650 --> 00:38:31,480 ja olete näinud seda juba siis, kui olete kasutada man kui te 868 00:38:31,480 --> 00:38:32,390 on see kõik - 869 00:38:32,390 --> 00:38:36,220 et char täht on lihtsalt sünonüüm nööriga. 870 00:38:36,220 --> 00:38:40,440 >> Seega võrdleb kahe strings, S1 ja S2 ja tagastab täisarvu vähem 871 00:38:40,440 --> 00:38:44,930 kui või võrdne või suurem kui null kui S1 on leitud vastavalt olema 872 00:38:44,930 --> 00:38:47,450 väiksem või segu või olema suurem kui S2. 873 00:38:47,450 --> 00:38:51,220 See on lihtsalt väga keeruline viis öelda et string võrrelda tulu 874 00:38:51,220 --> 00:38:55,760 null, kui kaks stringi on intuitiivselt identsed, hieroglüüf 875 00:38:55,760 --> 00:38:57,120 tegelane iseloomu. 876 00:38:57,120 --> 00:38:59,970 >> Ta naaseb negatiivne, kui s, tähestikulises järjekorras, mis peaks 877 00:38:59,970 --> 00:39:01,010 tulema enne t. 878 00:39:01,010 --> 00:39:05,300 Või naaseb positiivne number, kui s peaks tulema pärast t 879 00:39:05,300 --> 00:39:06,170 tähestikulises järjekorras. 880 00:39:06,170 --> 00:39:08,360 Nii et see lihtne ülesanne, võiks te, näiteks järjestada 881 00:39:08,360 --> 00:39:09,770 terve hunnik sõnu? 882 00:39:09,770 --> 00:39:13,984 >> Nii selle uue versiooni, ma lähen minna ja teha compare1. 883 00:39:13,984 --> 00:39:15,750 Dot kaldkriipsuga võrrelda ühe. 884 00:39:15,750 --> 00:39:18,030 Ma kirjuta tere kõik väiketähed. 885 00:39:18,030 --> 00:39:20,300 Ma lähen kirjuta tere kõik väiketähed uuesti. 886 00:39:20,300 --> 00:39:23,340 Ja õnneks nüüd ta mõistab, Ma sisestasin sama asja. 887 00:39:23,340 --> 00:39:27,520 >> Vahepeal, kui ma kirjutada tere madalama puhul ja tere suur ja 888 00:39:27,520 --> 00:39:29,710 võrrelda neid, ma kirjutada erinevaid asju. 889 00:39:29,710 --> 00:39:32,530 Sest mitte ainult ei aadressid erinevad, kuid me võrrelda 890 00:39:32,530 --> 00:39:35,350 erinevaid märke ja jälle. 891 00:39:35,350 --> 00:39:37,320 >> Noh lähme ja määrata üks Teine probleem nüüd. 892 00:39:37,320 --> 00:39:41,590 Lubage mul avada versiooni üks koopia, mis nüüd käsitleb 893 00:39:41,590 --> 00:39:42,900 seda küsimust järgmiselt. 894 00:39:42,900 --> 00:39:45,650 Ja see läheb otsima veidi keerulisem. 895 00:39:45,650 --> 00:39:49,320 Aga kui sa arvad, mida probleemi me vaja lahendada, loodetavasti see olema 896 00:39:49,320 --> 00:39:51,870 selge hetk nüüd. 897 00:39:51,870 --> 00:39:57,280 >> Nii et see esimene liin, char start t, on üldarusaadavat mõttes võiks keegi teha ettepaneku 898 00:39:57,280 --> 00:39:59,450 mida see joon siin tähendab? 899 00:39:59,450 --> 00:40:01,050 Char täht t, mis see teeb? 900 00:40:01,050 --> 00:40:06,660 901 00:40:06,660 --> 00:40:07,210 >> Hea. 902 00:40:07,210 --> 00:40:09,500 Loo kursor mõnele koht mällu. 903 00:40:09,500 --> 00:40:10,930 Ja lubage mul täpsustada seda natuke. 904 00:40:10,930 --> 00:40:17,180 Tuvastada muutuja, mis salvestab aadress mõned char mälu, lihtsalt 905 00:40:17,180 --> 00:40:18,480 olema veidi rohkem õige. 906 00:40:18,480 --> 00:40:21,210 >> OK, nüüd paremal pool, ma olen kunagi näinud üks neist funktsioonidest 907 00:40:21,210 --> 00:40:22,660 enne, malloc. 908 00:40:22,660 --> 00:40:26,980 Aga mida võiks tähendada? 909 00:40:26,980 --> 00:40:28,050 Jaotamine mälu. 910 00:40:28,050 --> 00:40:29,410 Mälu jaotus. 911 00:40:29,410 --> 00:40:33,050 >> Nii selgub, siiani oleme ei ole tõesti olnud võimas 912 00:40:33,050 --> 00:40:36,210 paludes operatsioonisüsteemi, anna mulle mällu. 913 00:40:36,210 --> 00:40:39,980 Pigem on meil funktsioon nimega malloc et just selline. 914 00:40:39,980 --> 00:40:42,960 Kuigi see on natuke häireta praegu märgata, et 915 00:40:42,960 --> 00:40:46,200 Kahe Sulgudes on lihtsalt saab olema number. 916 00:40:46,200 --> 00:40:48,510 Kus ma olen kirjutatud küsimus märgid võib olla mitmeid. 917 00:40:48,510 --> 00:40:51,020 >> Ja see number tähendab, anna mulle 10 baiti. 918 00:40:51,020 --> 00:40:52,320 Anna mulle 20 baiti. 919 00:40:52,320 --> 00:40:53,820 Anna mulle 100 baiti. 920 00:40:53,820 --> 00:40:56,500 Ja malloc teeme oma parima, et küsida operatsioonisüsteemi - 921 00:40:56,500 --> 00:40:57,630 Linux, käesoleval juhul - 922 00:40:57,630 --> 00:40:59,630 hei, on oma 100 baiti RAM saadaval? 923 00:40:59,630 --> 00:41:04,320 Kui jah, siis tagastab need baidid mulle tagasi mille aadress on 924 00:41:04,320 --> 00:41:06,610 need baiti, ehk? 925 00:41:06,610 --> 00:41:07,610 Kõige esimene. 926 00:41:07,610 --> 00:41:10,460 >> Nii ka siin - ja see on peamine C, iga kord, kui sa oled 927 00:41:10,460 --> 00:41:11,680 tegelevad aadresse? 928 00:41:11,680 --> 00:41:15,830 Sa peaaegu alati tegemist Esimene selline aadress, ükskõik kui suur 929 00:41:15,830 --> 00:41:19,490 tüki mälu teid on kätega tagasi, nii rääkida. 930 00:41:19,490 --> 00:41:20,880 >> Niisiis olgem sukelduda siin. 931 00:41:20,880 --> 00:41:23,940 Püüan jaotada kuidas palju baite, täpselt? 932 00:41:23,940 --> 00:41:24,080 Noh. 933 00:41:24,080 --> 00:41:26,090 String pikkusega s - olgem teha konkreetne näide. 934 00:41:26,090 --> 00:41:30,700 Kui te ei tere, H-E-L-L-O, mis on string pikkusega s, ilmselt? 935 00:41:30,700 --> 00:41:32,010 Nii et see on viis. 936 00:41:32,010 --> 00:41:34,590 Aga ma teen pluss 1 on, et miks? 937 00:41:34,590 --> 00:41:37,700 Miks ma tahan kuus baiti asemel viis? 938 00:41:37,700 --> 00:41:38,790 Null iseloomu. 939 00:41:38,790 --> 00:41:41,210 >> Ma ei taha jätta välja käesoleva eriline null iseloomu. 940 00:41:41,210 --> 00:41:45,160 Sest kui ma teen koopia Tere ja lihtsalt teha H-E-L-L-O, aga ma ei pane 941 00:41:45,160 --> 00:41:50,160 et erimärgi arvuti ei pruugi olla juhus, längkriipsu 942 00:41:50,160 --> 00:41:51,730 null minu jaoks olemas. 943 00:41:51,730 --> 00:41:55,570 Ja nii kui ma üritan nuputada pikkus koopia, ma võiks arvata, et 944 00:41:55,570 --> 00:41:59,360 see on 20 tähemärki või miljon märki, kui ma just ei juhtu 945 00:41:59,360 --> 00:42:01,050 lüüa längkriipsu null. 946 00:42:01,050 --> 00:42:05,780 >> Seega on meil vaja kuus baiti salvestada H-E-L-L-O, Kenoviiva null. 947 00:42:05,780 --> 00:42:07,870 Ja siis on see lihtsalt olema super anal. 948 00:42:07,870 --> 00:42:10,700 Oletame, et ma unustan, mida suurus char on. 949 00:42:10,700 --> 00:42:12,020 Me ütleme, et on üks bait. 950 00:42:12,020 --> 00:42:12,860 Ja see tavaliselt on. 951 00:42:12,860 --> 00:42:15,425 Teoreetiliselt võiks see olla midagi erinevad, on erinevad või Mac 952 00:42:15,425 --> 00:42:16,250 erinevate PC. 953 00:42:16,250 --> 00:42:19,650 >> Nii selgub seal selle korraldaja nimetatakse sizeof et kui te kaotate seda 954 00:42:19,650 --> 00:42:22,680 nimi andmetüüp - nagu char või int või veepinnal - 955 00:42:22,680 --> 00:42:26,930 see ütleb teile, dünaamiliselt, kuidas paljud baiti char kulub selle 956 00:42:26,930 --> 00:42:28,090 konkreetse arvutiga. 957 00:42:28,090 --> 00:42:31,360 >> Nii et see on tegelikult lihtsalt nagu öelda korda 1 või 958 00:42:31,360 --> 00:42:32,440 korda midagi. 959 00:42:32,440 --> 00:42:36,340 Aga ma teen seda ainult selleks, et olla super anal, et igaks juhuks char erineb 960 00:42:36,340 --> 00:42:40,610 arvuti versus minu, nii matemaatika alati saab kontrollida. 961 00:42:40,610 --> 00:42:43,720 >> Lõpuks siia ma kontrollida null, mis on alati hea tava - jälle 962 00:42:43,720 --> 00:42:44,920 igal ajal me tegeleme suunanäitajaks. 963 00:42:44,920 --> 00:42:47,520 Kui malloc ei olnud võimeline andma mulle kuus bye'dest - mis on 964 00:42:47,520 --> 00:42:49,210 ebatõenäoline, kuid igaks juhuks - 965 00:42:49,210 --> 00:42:50,730 tagasi üks kohe. 966 00:42:50,730 --> 00:42:53,290 Ja nüüd, et edasi minna ja kopeerida string järgmiselt. 967 00:42:53,290 --> 00:42:57,240 Ja see on tuttav süntaks, kuigi erinev roll. 968 00:42:57,240 --> 00:43:01,210 >> Ma lähen edasi minna ja saada string pikkus s ja hoidke seda n. 969 00:43:01,210 --> 00:43:06,620 Ma siis lähen korrata alates i võrdub null kuni n, 970 00:43:06,620 --> 00:43:08,410 suurem või võrdne. 971 00:43:08,410 --> 00:43:13,540 Nii et iga iteratsiooni, panin nda iseloomu s-nda 972 00:43:13,540 --> 00:43:15,380 iseloomu t. 973 00:43:15,380 --> 00:43:18,190 >> Mis siis tegelikult toimub all kapuuts siin? 974 00:43:18,190 --> 00:43:22,140 Noh, kui see, näiteks, on s - 975 00:43:22,140 --> 00:43:26,400 ja mul on kirjutatud sõna H-E-L-L-O ja seal on längkriipsu null. 976 00:43:26,400 --> 00:43:29,020 Ja veel, see on s juhtides siin. 977 00:43:29,020 --> 00:43:30,830 Ja nüüd siin on t. 978 00:43:30,830 --> 00:43:34,860 >> Ja see on suunatud nüüd koopia mälu, eks? 979 00:43:34,860 --> 00:43:37,340 Malloc on andnud mulle terve tüki mälu. 980 00:43:37,340 --> 00:43:41,440 Ma ei tea, esialgu mis mõni neist kohtades. 981 00:43:41,440 --> 00:43:44,340 Nii et ma lähen mõtlema need on terve hunnik küsimärke. 982 00:43:44,340 --> 00:43:50,190 >> Aga niipea, kui ma hakkan silmukoiminen nullist püsti piki s, t 983 00:43:50,190 --> 00:43:52,790 sulg null ja t sulg 1 - 984 00:43:52,790 --> 00:43:55,080 ja ma panen selle nüüd on üldkulud - 985 00:43:55,080 --> 00:44:04,190 t sulg null ja s sulg null tähendab et ma lähen kopeerimine 986 00:44:04,190 --> 00:44:09,875 korduvalt h siin, E-L-L-O. Plus, sest ma tegin pluss 987 00:44:09,875 --> 00:44:12,370 1 Kenoviiva null. 988 00:44:12,370 --> 00:44:19,060 >> Nüüd, kui tegemist on võrrelda-1.c, aasta lõpus, kui ma välja printida 989 00:44:19,060 --> 00:44:24,760 kapitaliseerimine t, me peaks näen, et te ei ole muutunud. 990 00:44:24,760 --> 00:44:26,090 Lubage mul minna nüüd ja seda teha. 991 00:44:26,090 --> 00:44:28,630 Nii et copy1. 992 00:44:28,630 --> 00:44:30,860 Dot kaldkriipsuga copy1. 993 00:44:30,860 --> 00:44:33,670 Ma lähen kirjuta tere, Enter. 994 00:44:33,670 --> 00:44:37,430 Ja nüüd teate, ainult koopia on kapitaliseeritud. 995 00:44:37,430 --> 00:44:40,890 Sest ma tõesti on kaks tükkideks mälu. 996 00:44:40,890 --> 00:44:44,390 >> Kahjuks saab teha päris halb ja päris ohtlik asjad siin. 997 00:44:44,390 --> 00:44:49,290 Las ma tõmba näiteks siin nüüd, mis annab meile näiteks mõne 998 00:44:49,290 --> 00:44:51,540 erinevates ridades. 999 00:44:51,540 --> 00:44:56,040 Nii lihtsalt intuitiivselt siin, esimene rida koodi, int täht x, kuulutab 1000 00:44:56,040 --> 00:44:57,340 muutuja nimega x. 1001 00:44:57,340 --> 00:44:58,810 Ja mis on andmetüüp Selle muutuja? 1002 00:44:58,810 --> 00:45:01,820 1003 00:45:01,820 --> 00:45:04,290 Milline on andmete tüüpi muutuja? 1004 00:45:04,290 --> 00:45:06,980 See ei olnud pinge. 1005 00:45:06,980 --> 00:45:08,350 >> Andmetüüp on int star. 1006 00:45:08,350 --> 00:45:12,600 Mida see tähendab? X hoidke aadress int. 1007 00:45:12,600 --> 00:45:13,520 Nii lihtne see ongi. 1008 00:45:13,520 --> 00:45:16,220 Y läheb hoidke aadress int. 1009 00:45:16,220 --> 00:45:18,390 Mis on kolmas rida koodi seal teed? 1010 00:45:18,390 --> 00:45:21,850 See eraldamise mitu baiti, kõige tõenäolisemalt? 1011 00:45:21,850 --> 00:45:22,350 Neli. 1012 00:45:22,350 --> 00:45:25,460 Kuna suurus int on tavaliselt neli malloc nelja annab 1013 00:45:25,460 --> 00:45:29,950 mulle tagasi aadress tüki mälu, mis on esimene kelle baiti 1014 00:45:29,950 --> 00:45:32,110 salvestatakse nüüd x. 1015 00:45:32,110 --> 00:45:34,410 >> Nüüd liigume veidi kiiremini. 1016 00:45:34,410 --> 00:45:35,760 Star x tähendab mida? 1017 00:45:35,760 --> 00:45:38,480 1018 00:45:38,480 --> 00:45:42,590 See tähendab, minge sellele aadressile ja panna mida number on? 1019 00:45:42,590 --> 00:45:43,870 Pane number 42 olemas. 1020 00:45:43,870 --> 00:45:47,590 Star y tähendab minna mis on y ja pane number 13 olemas. 1021 00:45:47,590 --> 00:45:48,600 >> Kuid oodake minut. 1022 00:45:48,600 --> 00:45:51,640 Mis on y hetkel? 1023 00:45:51,640 --> 00:45:54,950 Mis aadress on y ladustamiseks? 1024 00:45:54,950 --> 00:45:55,770 Me ei tea, eks? 1025 00:45:55,770 --> 00:45:59,230 Me ei ole kunagi kunagi kasutage loovutamine operaator kaasates y. 1026 00:45:59,230 --> 00:46:03,370 Seega y deklareeritud teisel real kood on vaid mõned prügi väärtus, suur 1027 00:46:03,370 --> 00:46:04,760 küsimärk nii rääkida. 1028 00:46:04,760 --> 00:46:07,230 Võiks osutades juhuslikult midagi mällu, mis 1029 00:46:07,230 --> 00:46:08,340 on üldiselt halb. 1030 00:46:08,340 --> 00:46:13,540 >> Seega niipea, kui oleme tabanud, et liin on, star y võrdub 13, midagi halba, 1031 00:46:13,540 --> 00:46:17,220 midagi väga halba on umbes juhtub Binky. 1032 00:46:17,220 --> 00:46:25,810 Vaatame, mis läheb lõpuks juhtub binky siin minut 1033 00:46:25,810 --> 00:46:26,200 või nii vaadata. 1034 00:46:26,200 --> 00:46:26,490 >> [VIDEO PLAYBACK] 1035 00:46:26,490 --> 00:46:26,745 >> -Hei, Binky. 1036 00:46:26,745 --> 00:46:27,000 Ärka üles. 1037 00:46:27,000 --> 00:46:29,296 See on aeg, pointer lõbus. 1038 00:46:29,296 --> 00:46:30,680 >> -Mis see on? 1039 00:46:30,680 --> 00:46:31,980 Lugege vihjeid? 1040 00:46:31,980 --> 00:46:34,010 Oh, goodie. 1041 00:46:34,010 --> 00:46:37,220 >> -Noh, alustada, ma arvan, et me oleme läheb vaja paar osuti. 1042 00:46:37,220 --> 00:46:37,930 >> -OK. 1043 00:46:37,930 --> 00:46:41,650 See kood eraldab kaks viiteid mis võib tuua täisarvud. 1044 00:46:41,650 --> 00:46:43,760 >> -OK, hästi, ma näen kaks suunanäitajaks. 1045 00:46:43,760 --> 00:46:45,850 Aga nad ei tundu olevat osutades midagi. 1046 00:46:45,850 --> 00:46:46,490 >> -Just nii. 1047 00:46:46,490 --> 00:46:48,630 Esialgu vihjeid ei käsk midagi. 1048 00:46:48,630 --> 00:46:51,700 Asju, mida nad osutavad, nimetatakse pointees ja millega neid on 1049 00:46:51,700 --> 00:46:52,850 eraldi samm. 1050 00:46:52,850 --> 00:46:53,740 >> -Oh, jah, muidugi. 1051 00:46:53,740 --> 00:46:54,500 Ma teadsin seda. 1052 00:46:54,500 --> 00:46:56,270 Pointees eraldi. 1053 00:46:56,270 --> 00:46:58,553 Niisiis, kuidas sa jaotada pointee? 1054 00:46:58,553 --> 00:46:59,480 >> -OK. 1055 00:46:59,480 --> 00:47:03,707 Noh, see kood eraldab uus täisarvud pointee ning see osa sätestatakse x 1056 00:47:03,707 --> 00:47:05,520 juhtida seda. 1057 00:47:05,520 --> 00:47:06,760 >> -Kuule, see tundub parem. 1058 00:47:06,760 --> 00:47:08,520 Nii et see midagi. 1059 00:47:08,520 --> 00:47:09,530 >> -OK. 1060 00:47:09,530 --> 00:47:14,110 Ma endid kursor x salvestada number 42 sisse oma pointee. 1061 00:47:14,110 --> 00:47:17,660 Sel trikk, ma vajan oma võlu võlukepp viite mahavõtmine. 1062 00:47:17,660 --> 00:47:20,695 >> -Teie võlukeppi ning viite mahavõtmine? 1063 00:47:20,695 --> 00:47:22,632 Uh, see on tore. 1064 00:47:22,632 --> 00:47:24,620 >> -See on see kood välja näeb. 1065 00:47:24,620 --> 00:47:27,526 Ma lihtsalt loodud number, ja - 1066 00:47:27,526 --> 00:47:28,250 >> -Hei, vaata. 1067 00:47:28,250 --> 00:47:29,680 Seal ta läheb. 1068 00:47:29,680 --> 00:47:34,520 Seejuures endid on x järgmiselt nool juurdepääsu oma pointee. 1069 00:47:34,520 --> 00:47:36,690 Sel juhul salvestada 42 sinna. 1070 00:47:36,690 --> 00:47:40,890 Hei, proovige see salvestada number 13 läbi teise osuti, y. 1071 00:47:40,890 --> 00:47:42,125 >> -OK. 1072 00:47:42,125 --> 00:47:46,810 Ma lihtsalt minna üle siin y ja saada number 13 looma. 1073 00:47:46,810 --> 00:47:50,890 Ja siis võtta võlukepp viite mahavõtmine ja lihtsalt - 1074 00:47:50,890 --> 00:47:52,430 vau! 1075 00:47:52,430 --> 00:47:53,030 >> -Oh, hei. 1076 00:47:53,030 --> 00:47:54,610 See ei õnnestunud. 1077 00:47:54,610 --> 00:47:58,200 Ütle, Binky, ma ei usu, viite mahavõtmine y on hea mõte, 1078 00:47:58,200 --> 00:48:01,370 sest loomise pointee on eraldi samm. 1079 00:48:01,370 --> 00:48:03,460 Ja ma ei usu, et me kunagi tegime seda. 1080 00:48:03,460 --> 00:48:03,810 >> -Hmm. 1081 00:48:03,810 --> 00:48:05,160 Hea punkt. 1082 00:48:05,160 --> 00:48:07,410 >> -Jah, me eraldada kursor y. 1083 00:48:07,410 --> 00:48:10,045 Aga me ei sea see osutada pointee. 1084 00:48:10,045 --> 00:48:10,490 >> -Hmm. 1085 00:48:10,490 --> 00:48:12,170 Väga tähelepanelik. 1086 00:48:12,170 --> 00:48:13,790 >> -Hei, mida otsid hea on, Binky. 1087 00:48:13,790 --> 00:48:16,920 Kas sa seda parandada nii, et y punktid sama pointee kui x? 1088 00:48:16,920 --> 00:48:17,810 >> -Muidugi. 1089 00:48:17,810 --> 00:48:20,300 Ma kasutan oma võlukeppi kohta pointer loovutamine. 1090 00:48:20,300 --> 00:48:22,240 >> Kas see saab olema probleem nagu enne? 1091 00:48:22,240 --> 00:48:22,665 >> -Ei. 1092 00:48:22,665 --> 00:48:24,300 See ei puuduta pointees. 1093 00:48:24,300 --> 00:48:27,880 See lihtsalt muudab üks pointer punkti sama asi nagu teine. 1094 00:48:27,880 --> 00:48:28,970 >> -Oh, ma näen. 1095 00:48:28,970 --> 00:48:31,730 Nüüd y osutab samas kohas kui x. 1096 00:48:31,730 --> 00:48:32,450 Niisiis oota. 1097 00:48:32,450 --> 00:48:33,490 Nüüd y on fikseeritud. 1098 00:48:33,490 --> 00:48:34,630 See on pointee. 1099 00:48:34,630 --> 00:48:36,520 Nii saad proovida võlukepp ning viite mahavõtmine uuesti 1100 00:48:36,520 --> 00:48:39,200 saata 13 üle. 1101 00:48:39,200 --> 00:48:39,840 >> -OK. 1102 00:48:39,840 --> 00:48:41,570 Siin läheb. 1103 00:48:41,570 --> 00:48:42,870 >> -Hei, vaata seda. 1104 00:48:42,870 --> 00:48:44,320 Nüüd viite mahavõtmine töötab y. 1105 00:48:44,320 --> 00:48:47,020 Ja kuna viiteid jagavad et üks pointee, nad 1106 00:48:47,020 --> 00:48:48,585 nii näha 13. 1107 00:48:48,585 --> 00:48:49,040 >> -Jah. 1108 00:48:49,040 --> 00:48:49,670 Jagamine. 1109 00:48:49,670 --> 00:48:50,380 Mida iganes. 1110 00:48:50,380 --> 00:48:52,290 Nii me siis lüliti kohad nüüd? 1111 00:48:52,290 --> 00:48:52,970 >> -Oh, vaata. 1112 00:48:52,970 --> 00:48:54,150 Meil on aeg otsas. 1113 00:48:54,150 --> 00:48:55,200 >> -Aga - 1114 00:48:55,200 --> 00:48:57,060 >> -Pea meeles kolm pointer reegleid. 1115 00:48:57,060 --> 00:49:00,100 Number üks, põhistruktuur on see, et teil on kursor. 1116 00:49:00,100 --> 00:49:02,170 Ja see toob üle pointee. 1117 00:49:02,170 --> 00:49:04,160 Aga osuti ja pointee eraldi. 1118 00:49:04,160 --> 00:49:06,460 Ja ühine viga on loodud pointer, vaid 1119 00:49:06,460 --> 00:49:08,540 unustage antud pointee. 1120 00:49:08,540 --> 00:49:12,460 >> Number kaks, pointer viite mahavõtmine hakkab kell osuti ja järgib oma 1121 00:49:12,460 --> 00:49:14,570 nool üle pääseda oma pointee. 1122 00:49:14,570 --> 00:49:18,640 Nagu me kõik teame, see toimib ainult siis, kui on pointee, mis läheb tagasi 1123 00:49:18,640 --> 00:49:19,790 reegel number üks. 1124 00:49:19,790 --> 00:49:23,670 >> Number kolm, pointer loovutamine võtab üks osuti ja muutusi see käsk 1125 00:49:23,670 --> 00:49:25,850 Samal pointee teise osuti. 1126 00:49:25,850 --> 00:49:27,840 Nii pärast üleminekut, kaks lähtekohad 1127 00:49:27,840 --> 00:49:29,430 viitavad samale pointee. 1128 00:49:29,430 --> 00:49:31,600 Mõnikord nimetatakse jagamine. 1129 00:49:31,600 --> 00:49:33,430 Ja see kõik on seda, tõesti. 1130 00:49:33,430 --> 00:49:33,840 Bye bye nüüd. 1131 00:49:33,840 --> 00:49:34,300 >> [END VIDEO PLAYBACK] 1132 00:49:34,300 --> 00:49:36,940 >> DAVID Malan: Nii rohkem viiteid, rohkem Binky järgmisel nädalal. 1133 00:49:36,940 --> 00:49:38,190 Näeme esmaspäeval. 1134 00:49:38,190 --> 00:49:42,187