1 00:00:00,000 --> 00:00:11,320 2 00:00:11,320 --> 00:00:13,260 >> David Malan: Hallo, en Welkom terug na CS50. 3 00:00:13,260 --> 00:00:14,860 So dit is die einde van die week vier. 4 00:00:14,860 --> 00:00:16,680 Net een aankondiging eerste. 5 00:00:16,680 --> 00:00:19,600 So het die sogenaamde vyfde Maandag is kom eerskomende Maandag. 6 00:00:19,600 --> 00:00:22,800 Dit is die geleentheid om te verander van SAT / UNSAT 'n brief graad, of van 7 00:00:22,800 --> 00:00:24,130 brief graad SAT / UNSAT. 8 00:00:24,130 --> 00:00:27,130 Lastig, dat die proses verg 'n handtekening, want jy het om te vul 9 00:00:27,130 --> 00:00:28,770 uit een van daardie pienk add / drop vorms. 10 00:00:28,770 --> 00:00:31,680 >> Want tegnies is, die SAT / UNSAT weergawe en die brief graad weergawe 11 00:00:31,680 --> 00:00:33,320 het verskillende katalogus nommers. 12 00:00:33,320 --> 00:00:34,240 Maar nie 'n groot deal. 13 00:00:34,240 --> 00:00:36,620 Net kom na my of na Rob of om Lauren by enige punt. 14 00:00:36,620 --> 00:00:39,550 Of e-pos as jy nie die soort het van die papierwerk wat jy vandag nodig het, en ons 15 00:00:39,550 --> 00:00:43,410 sal seker wees om te help met die neem sorg dat voor Maandag. 16 00:00:43,410 --> 00:00:45,780 >> Alle reg, so vandag - 17 00:00:45,780 --> 00:00:47,630 Eintlik is daar 'n bietjie van 'n eggo. 18 00:00:47,630 --> 00:00:51,070 Kan ons toon my 'n bietjie? 19 00:00:51,070 --> 00:00:51,730 OK. 20 00:00:51,730 --> 00:00:54,850 So vandag, stel ons 'n onderwerp bekend as wysers. 21 00:00:54,850 --> 00:00:57,770 En ek sal erken dat dit een van die meer komplekse onderwerpe wat ons geneig is om te 22 00:00:57,770 --> 00:01:00,960 dek in hierdie klas, of eintlik enige inleidende kursus wat gebruik maak van C. 23 00:01:00,960 --> 00:01:05,510 >> Maar neem my woord vir dit, veral As jou gedagtes voel 'n bietjie meer gebuig 24 00:01:05,510 --> 00:01:07,100 vandag en in die komende weke. 25 00:01:07,100 --> 00:01:10,340 Dit is nie verteenwoordigend van wat jy kry 'n erger op hierdie beteken dit net dat 26 00:01:10,340 --> 00:01:13,360 dit is 'n besonder gesofistikeerde onderwerp dat ek belowe, 'n paar weke 27 00:01:13,360 --> 00:01:17,610 Dus, sal al te opvallend lyk eenvoudig in retrospek. 28 00:01:17,610 --> 00:01:18,720 >> Ek onthou nog tot vandag toe. 29 00:01:18,720 --> 00:01:22,190 Ek sit in Elliott eetsaal sit langs my TF NISHAT Mehta, 30 00:01:22,190 --> 00:01:24,070 wat 'n inwoner van Elliott huis. 31 00:01:24,070 --> 00:01:26,340 En vir een of ander rede, is hierdie onderwerp klik net. 32 00:01:26,340 --> 00:01:29,430 Dit is om te sê dat ek ook gesukkel met dit vir 'n geruime tyd, maar ek 33 00:01:29,430 --> 00:01:33,610 sal my bes doen om te help om enige sodanige vermy stryd oor 'n onderwerp wat uiteindelik 34 00:01:33,610 --> 00:01:34,580 is baie kragtig. 35 00:01:34,580 --> 00:01:37,350 >> Trouens, een van die onderwerpe wat ons sal bespreek in die komende weke is dat 36 00:01:37,350 --> 00:01:41,130 van veiligheid, en hoe kan jy eintlik ontgin masjiene in maniere 37 00:01:41,130 --> 00:01:42,320 wat nie bedoel is. 38 00:01:42,320 --> 00:01:45,850 En dié uitbuitery is tipies die gevolg van foute, foute wat ons 39 00:01:45,850 --> 00:01:49,740 mense maak deur nie die begrip van 'n paar van die onderliggende implementering 40 00:01:49,740 --> 00:01:52,250 besonderhede via watter programme gemaak word. 41 00:01:52,250 --> 00:01:55,410 >> Nou is dit te laat lyk al hoe meer gebruiker vriendelike, het ek gedink dat ek 'n 10 wil speel 42 00:01:55,410 --> 00:01:59,680 tweede voorbeeld van 'n bietjie Claymation figuur naam Binky wat gebring is 43 00:01:59,680 --> 00:02:03,020 lewe deur 'n vriend van ons op Stanford, professor Nick Parlante. 44 00:02:03,020 --> 00:02:06,753 So laat my toe om vir jou hierdie teaser van Binky hier. 45 00:02:06,753 --> 00:02:09,520 >> [Video speel] 46 00:02:09,520 --> 00:02:10,380 >> Hey, Binky. 47 00:02:10,380 --> 00:02:11,050 Wakker. 48 00:02:11,050 --> 00:02:13,610 Dit is tyd vir pret wyser. 49 00:02:13,610 --> 00:02:14,741 >> -Wat is dit? 50 00:02:14,741 --> 00:02:16,440 Meer inligting oor die riglyne? 51 00:02:16,440 --> 00:02:17,928 O, goodie. 52 00:02:17,928 --> 00:02:18,920 >> [Einde video-vertoning] 53 00:02:18,920 --> 00:02:20,670 >> David Malan: Dit is Stanford Rekenaarwetenskap. 54 00:02:20,670 --> 00:02:23,194 So meer oor dit te kom. 55 00:02:23,194 --> 00:02:24,930 >> [Applous] 56 00:02:24,930 --> 00:02:26,660 >> David Malan: Jammer, Nick. 57 00:02:26,660 --> 00:02:30,680 >> So onthou dat dit die laaste keer dat ons geëindig op hierdie baie opwindende fotonische lewe 58 00:02:30,680 --> 00:02:32,960 waardeur hierdie funksie net nie werk nie. 59 00:02:32,960 --> 00:02:34,960 Ten minste intuïtief, het dit gevoel soos dit moet werk. 60 00:02:34,960 --> 00:02:37,600 Bloot die uitruiling van die waardes van twee heelgetalle. 61 00:02:37,600 --> 00:02:40,915 Maar onthou dat wanneer ons gedruk uit die oorspronklike waardes in die belangrikste, een-en- 62 00:02:40,915 --> 00:02:44,210 twee, hulle was nog steeds een en twee en nie twee en een. 63 00:02:44,210 --> 00:02:46,070 >> So laat my eintlik skakel oor die toestel. 64 00:02:46,070 --> 00:02:50,180 En ek het 'n bietjie van skeletale kode in bevorder hier, waar ek beweer dat x 65 00:02:50,180 --> 00:02:52,500 1 sal wees, sal y 2. 66 00:02:52,500 --> 00:02:54,810 Ek druk dan beide van hulle waardes met die druk f. 67 00:02:54,810 --> 00:02:57,540 >> Ek het toe beweer hier dat ons gaan om dit te ruil. 68 00:02:57,540 --> 00:03:00,800 Ek het 'n leë kol hier vir ons om te vul in vandag in net 'n oomblik. 69 00:03:00,800 --> 00:03:03,380 Dan, ek gaan om te beweer dat die twee veranderlikes is omgeruil. 70 00:03:03,380 --> 00:03:04,770 Dan gaan ek te druk hulle weer uit. 71 00:03:04,770 --> 00:03:07,090 En so hopelik, moet ek sien 1, 2. 72 00:03:07,090 --> 00:03:07,380 2, 1. 73 00:03:07,380 --> 00:03:09,830 Dit is die super eenvoudige doel nou. 74 00:03:09,830 --> 00:03:12,430 >> So, hoe gaan ons oor uitruiling twee veranderlikes? 75 00:03:12,430 --> 00:03:17,220 Wel, as ek voor hier dat hierdie koppies kan verteenwoordig geheue in 'n rekenaar. 76 00:03:17,220 --> 00:03:19,070 Dit is 'n paar happies, hierdie is nog 'n paar happies. 77 00:03:19,070 --> 00:03:23,260 Kan ons 'n vrywilliger gekom het op en meng ons 'n paar drankies, as dit bekend? 78 00:03:23,260 --> 00:03:23,920 Kom up. 79 00:03:23,920 --> 00:03:24,815 Wat is jou naam? 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 Kom op, Jess. 83 00:03:26,540 --> 00:03:29,180 As jy nie omgee nie, het ons die te sit Google Glass op jou, sodat ons kan 84 00:03:29,180 --> 00:03:30,430 verewig hierdie. 85 00:03:30,430 --> 00:03:32,800 86 00:03:32,800 --> 00:03:34,670 OK, glas. 87 00:03:34,670 --> 00:03:37,250 'N video opneem. 88 00:03:37,250 --> 00:03:43,103 En OK, ons is goed om te gaan met Jess hier. 89 00:03:43,103 --> 00:03:43,810 Alle regte. 90 00:03:43,810 --> 00:03:45,120 Nice om jou te ontmoet. 91 00:03:45,120 --> 00:03:47,720 >> So wat ek wil julle hier doen - As jy kon, redelik vinnig - 92 00:03:47,720 --> 00:03:51,040 net gooi ons die helfte van 'n glas van oranje sap en 'n halwe glas melk, 93 00:03:51,040 --> 00:03:55,710 wat effektief die nommers 1 in 'n beker en 2 in die ander beker. 94 00:03:55,710 --> 00:04:01,380 95 00:04:01,380 --> 00:04:02,630 >> Dit gaan 'n goeie materiaal wees. 96 00:04:02,630 --> 00:04:04,910 97 00:04:04,910 --> 00:04:05,860 >> JESS: Jammer. 98 00:04:05,860 --> 00:04:06,330 >> David Malan: Nee, nee. 99 00:04:06,330 --> 00:04:08,703 Dit is OK. 100 00:04:08,703 --> 00:04:10,120 Nice. 101 00:04:10,120 --> 00:04:12,950 Alle reg, so ons het vier grepe waarde van lemoensap. 102 00:04:12,950 --> 00:04:14,460 Ons sal dit die waarde 1. 103 00:04:14,460 --> 00:04:16,579 Nou nog vier grepe waarde van melk. 104 00:04:16,579 --> 00:04:18,519 Sal noem dit waardeer 2. 105 00:04:18,519 --> 00:04:20,440 So x en y, onderskeidelik. 106 00:04:20,440 --> 00:04:23,450 >> Alle reg, so nou as die taak op hande - Vir jou, Jess, aan die voorkant van alle 107 00:04:23,450 --> 00:04:24,270 van jou klasmaats - 108 00:04:24,270 --> 00:04:28,510 is die waardes van x en y so te ruil dat ons wil hê dat die lemoensap in die 109 00:04:28,510 --> 00:04:32,070 ander beker en die melk in die beker, hoe kan jy - voordat jy eintlik doen 110 00:04:32,070 --> 00:04:34,020 dit - gaan om dit te doen? 111 00:04:34,020 --> 00:04:35,220 >> OK, wyse besluit. 112 00:04:35,220 --> 00:04:36,340 So moet jy 'n bietjie meer geheue. 113 00:04:36,340 --> 00:04:38,190 So laat ons ken 'n tydelike beker, as jy wil. 114 00:04:38,190 --> 00:04:40,540 En nou voortgaan x en y te ruil. 115 00:04:40,540 --> 00:04:52,950 116 00:04:52,950 --> 00:04:53,530 >> Uitstekend. 117 00:04:53,530 --> 00:04:54,420 So baie goed gedoen. 118 00:04:54,420 --> 00:04:55,670 Baie dankie, Jess. 119 00:04:55,670 --> 00:04:59,520 120 00:04:59,520 --> 00:05:00,020 Hier is jy. 121 00:05:00,020 --> 00:05:01,950 'N bietjie aandenking. 122 00:05:01,950 --> 00:05:04,350 >> OK, so natuurlik, super eenvoudige idee. 123 00:05:04,350 --> 00:05:07,500 Heeltemal intuïtief dat ons 'n bietjie meer stoorplek - in hierdie vorm, 124 00:05:07,500 --> 00:05:09,750 'n koppie - as ons werklik wil ruil die twee veranderlikes. 125 00:05:09,750 --> 00:05:11,110 So laat ons presies dit te doen. 126 00:05:11,110 --> 00:05:14,330 Hier in tussen waar ek beweer ek is gaan om te doen 'n paar uitruiling, ek sal 127 00:05:14,330 --> 00:05:15,720 gaan voort en verklaar temp. 128 00:05:15,720 --> 00:05:17,980 En ek sal stel dit gelyk aan, sê, x. 129 00:05:17,980 --> 00:05:21,110 >> Dan gaan ek die waarde van te verander x net soos Jess het hier met die 130 00:05:21,110 --> 00:05:23,200 melk en oranje sap gelyk aan y. 131 00:05:23,200 --> 00:05:27,460 En ek gaan y te verander om gelyk te wees om nie x nie, want nou is ons sou wees 132 00:05:27,460 --> 00:05:29,530 vas in 'n sirkel, maar eerder Temp. 133 00:05:29,530 --> 00:05:33,170 Waar ek tydelik - of waar Jess tydelik die lemoensap 134 00:05:33,170 --> 00:05:35,460 voor beuken wat beker met die melk. 135 00:05:35,460 --> 00:05:37,250 >> So laat my voort te gaan nou en maak hierdie. 136 00:05:37,250 --> 00:05:39,210 Dit is bekend as noswap.c. 137 00:05:39,210 --> 00:05:41,190 En nou, laat ek hardloop nie omruil. 138 00:05:41,190 --> 00:05:43,910 En ja, ek sien, as ek die uitbreiding van die venster 'n bietjie, wat 139 00:05:43,910 --> 00:05:45,160 x is 1, y is 2. 140 00:05:45,160 --> 00:05:47,230 En dan is x 2, y is 1. 141 00:05:47,230 --> 00:05:51,910 >> Maar onthou dat op Maandag het ons dinge gedoen het 'n bietjie anders waardeur ek 142 00:05:51,910 --> 00:05:56,760 plaas geïmplementeer 'n helper funksie, as jy wil, dit was eintlik nietig. 143 00:05:56,760 --> 00:05:58,010 Ek noem dit ruil. 144 00:05:58,010 --> 00:06:01,600 Ek het dit twee parameters, en ek het hulle 'n en Ek het hulle geroep b. 145 00:06:01,600 --> 00:06:04,380 >> Eerlik, kon ek noem dit x en y. 146 00:06:04,380 --> 00:06:06,040 Daar is niks stop my te doen nie. 147 00:06:06,040 --> 00:06:08,140 Maar ek sou argumenteer dit dan is 'n bietjie dubbelsinnig. 148 00:06:08,140 --> 00:06:11,910 Want onthou vir Maandag dat ons beweer dat hierdie parameters was 149 00:06:11,910 --> 00:06:13,650 afskrifte van die waardes wat in 150 00:06:13,650 --> 00:06:15,640 So dit is net gemors met jou gedagte, dink ek, as jy gebruik 151 00:06:15,640 --> 00:06:17,370 presies dieselfde veranderlikes. 152 00:06:17,370 --> 00:06:20,150 >> So ek sal plaas noem hulle 'n en b, net vir duidelikheid. 153 00:06:20,150 --> 00:06:21,840 Maar ons kan noem hulle die meeste enigiets wat ons wil hê. 154 00:06:21,840 --> 00:06:26,280 En ek gaan om te kopieer en plak effektief die kode van daar bo 155 00:06:26,280 --> 00:06:27,170 af in hier. 156 00:06:27,170 --> 00:06:29,110 Want ek het net gesien dat dit werk. 157 00:06:29,110 --> 00:06:30,790 So dit is in redelik goeie vorm. 158 00:06:30,790 --> 00:06:37,390 En ek sal my x verander na 'n, my x 'n, my y te b en my y te b. 159 00:06:37,390 --> 00:06:39,130 >> So met ander woorde, presies dieselfde logika. 160 00:06:39,130 --> 00:06:40,850 Presies dieselfde ding wat Jess het. 161 00:06:40,850 --> 00:06:44,350 En dan is die een ding wat ek moet doen om hier, natuurlik, is nou roep ons hierdie 162 00:06:44,350 --> 00:06:45,990 funksie, of bel hierdie funksie. 163 00:06:45,990 --> 00:06:50,430 So ek sal hierdie funksie noem met twee insette, x en y, en getref Slaan. 164 00:06:50,430 --> 00:06:52,300 >> Alle reg, so fundamenteel dieselfde ding. 165 00:06:52,300 --> 00:06:55,570 Trouens, ek het waarskynlik die program onnodig kompleks deur 166 00:06:55,570 --> 00:07:00,820 skryf van 'n funksie wat net neem sowat ses reëls van die kode terwyl ek 167 00:07:00,820 --> 00:07:02,970 voorheen geïmplementeer hierdie in net drie. 168 00:07:02,970 --> 00:07:06,230 >> So laat my voort te gaan nou en remake dit maak geen ruil. 169 00:07:06,230 --> 00:07:07,920 Alle reg, ek verfrommeld hier. 170 00:07:07,920 --> 00:07:11,290 Dit moet 'n fout wees dat jy dalk sien al hoe meer algemeen as jou 171 00:07:11,290 --> 00:07:12,380 programme kry meer kompleks. 172 00:07:12,380 --> 00:07:13,470 Maar daar is 'n maklike oplossing. 173 00:07:13,470 --> 00:07:15,650 Laat my terug blaai hier. 174 00:07:15,650 --> 00:07:18,190 >> En wat is die eerste fout wat ek sien? 175 00:07:18,190 --> 00:07:19,520 Implisiete verklaring. 176 00:07:19,520 --> 00:07:21,466 Wat beteken dit tipies aan? 177 00:07:21,466 --> 00:07:22,830 O, ek het vergeet om die prototipe. 178 00:07:22,830 --> 00:07:26,900 Ek het vergeet om die vertaler te leer dat omruil gaan bestaan, selfs al het hy 179 00:07:26,900 --> 00:07:28,920 bestaan ​​nie heel aan die begin van die program. 180 00:07:28,920 --> 00:07:35,780 So ek gaan net leemte, ruil om te sê, int, 'n int b, kommapunt. 181 00:07:35,780 --> 00:07:37,280 >> So ek is nie van plan om dit te reimplement. 182 00:07:37,280 --> 00:07:39,140 Maar nou is dit ooreenstem met wat is hier. 183 00:07:39,140 --> 00:07:42,530 En kennis, is die afwesigheid van 'n kommapunt hier, wat is nie nodig wanneer 184 00:07:42,530 --> 00:07:43,200 implementering. 185 00:07:43,200 --> 00:07:46,010 >> So laat my remake hierdie, maak nie ruil. 186 00:07:46,010 --> 00:07:46,910 Baie beter vorm. 187 00:07:46,910 --> 00:07:48,130 Hardloop nie omruil. 188 00:07:48,130 --> 00:07:48,740 En verdoem nie. 189 00:07:48,740 --> 00:07:51,650 Nou is ons terug waar ons was op Maandag, waar die ding het nie ruil. 190 00:07:51,650 --> 00:07:55,410 >> En wat is die intuïtiewe verduideliking waarom dit die geval is? 191 00:07:55,410 --> 00:07:56,380 Ja? 192 00:07:56,380 --> 00:07:57,630 >> STUDENT: [onhoorbaar]. 193 00:07:57,630 --> 00:08:04,140 194 00:08:04,140 --> 00:08:05,230 >> David Malan: Presies. 195 00:08:05,230 --> 00:08:07,330 So A en B is afskrifte van x en y. 196 00:08:07,330 --> 00:08:10,680 En in die feit, enige tyd wat jy het al roep 'n funksie so ver dat 197 00:08:10,680 --> 00:08:12,540 gaan veranderlikes soos ints - 198 00:08:12,540 --> 00:08:14,470 net soos ruil is hier verwag het - 199 00:08:14,470 --> 00:08:16,270 julle ouens is verby in kopieë. 200 00:08:16,270 --> 00:08:19,150 >> Nou wat beteken dat dit neem 'n bietjie van die tyd, 'n split sekonde, vir die 201 00:08:19,150 --> 00:08:23,270 rekenaar om die stukkies te kopieer van een veranderlike in die stukkies van 'n ander. 202 00:08:23,270 --> 00:08:24,610 Maar dit is nie so 'n groot deal. 203 00:08:24,610 --> 00:08:25,920 Maar dit is nietemin 'n kopie. 204 00:08:25,920 --> 00:08:30,020 >> En so het nou, in die konteks van ruil, Ek is in die feit suksesvol 205 00:08:30,020 --> 00:08:31,180 veranderende a en b. 206 00:08:31,180 --> 00:08:33,000 Trouens, kom ons doen 'n vinnige gesonde verstand gaan. 207 00:08:33,000 --> 00:08:36,830 Print f a is% i, 'n nuwe lyn. 208 00:08:36,830 --> 00:08:38,770 En laat ons plug in 'n. 209 00:08:38,770 --> 00:08:41,830 Nou kom ons doen dieselfde ding met b. 210 00:08:41,830 --> 00:08:43,640 En laat die dieselfde ding se hier doen. 211 00:08:43,640 --> 00:08:47,260 >> En nou, laat ek kopieer diegene wat dieselfde lyne weer aan die onderkant van die funksie 212 00:08:47,260 --> 00:08:51,250 na my drie reëls van die interessante kon voltrek het, en 213 00:08:51,250 --> 00:08:53,270 druk A en B weer. 214 00:08:53,270 --> 00:08:56,030 So nou laat ons dit maak geen ruil. 215 00:08:56,030 --> 00:08:58,430 Laat my toe om die terminale venster 'n bietjie langer, sodat ons kan sien 216 00:08:58,430 --> 00:08:59,520 meer van dit in 'n keer. 217 00:08:59,520 --> 00:09:00,860 >> En loop nie omruil. 218 00:09:00,860 --> 00:09:04,000 x is 1, y is 2. 'n 1 is, b is 2. 219 00:09:04,000 --> 00:09:06,070 En dan, 'n is 2, b is 1. 220 00:09:06,070 --> 00:09:09,390 So dit werk, net soos Jess het hier binne-in ruil. 221 00:09:09,390 --> 00:09:13,090 Maar natuurlik, is die feit dat dit geen effek op die veranderlikes in die belangrikste. 222 00:09:13,090 --> 00:09:15,360 >> So het ons 'n truuk waardeur ons kon dit regmaak, reg? 223 00:09:15,360 --> 00:09:19,560 Wanneer jy gekonfronteer word met hierdie bestekopname kwessie, kan jy net punt en maak x 224 00:09:19,560 --> 00:09:22,400 en y watter soort veranderlikes plaas? 225 00:09:22,400 --> 00:09:23,390 >> Jy kan maak hulle globale. 226 00:09:23,390 --> 00:09:27,560 Sit hulle op die top van die lêer soos ons gedoen het, selfs in die spel van die 15. 227 00:09:27,560 --> 00:09:28,890 Ons gebruik 'n globale veranderlike. 228 00:09:28,890 --> 00:09:32,420 Maar in die konteks van die spel 'n 15, dit is redelik 'n globale te hê 229 00:09:32,420 --> 00:09:37,170 veranderlike wat die raad, want die geheel van 15.c is al 230 00:09:37,170 --> 00:09:38,650 oor die implementering van die spel. 231 00:09:38,650 --> 00:09:41,470 Dit is wat die lêer bestaan ​​om dit te doen. 232 00:09:41,470 --> 00:09:44,170 >> Maar in hierdie geval hier, ek is roep 'n funksie ruil. 233 00:09:44,170 --> 00:09:45,380 Ek wil twee veranderlikes te ruil. 234 00:09:45,380 --> 00:09:48,950 En dit moet begin om te voel net slordig As die oplossing vir al ons 235 00:09:48,950 --> 00:09:51,300 probleme wanneer ons loop in omvang kwessies is globaal te maak. 236 00:09:51,300 --> 00:09:54,730 Omdat baie vinnig ons program gaan nogal 'n gemors word. 237 00:09:54,730 --> 00:09:57,760 En ons het dit baie spaarsamig as 'n gevolg in 15.c. 238 00:09:57,760 --> 00:10:00,470 >> Maar dit blyk daar is 'n beter manier om geheel en al. 239 00:10:00,470 --> 00:10:05,600 Laat my terug eintlik gaan en verwyder die druk f's, net hierdie kode te vereenvoudig. 240 00:10:05,600 --> 00:10:09,160 En laat my stel voor dat hierdie, inderdaad, is sleg. 241 00:10:09,160 --> 00:10:15,990 Maar as ek in plaas voeg in 'n paar sterretjies en die sterre, ek kan plaas draai dit 242 00:10:15,990 --> 00:10:18,670 funksie in een wat eintlik in werking is. 243 00:10:18,670 --> 00:10:25,020 >> So laat my gaan terug hier en erken te sê Sterre is altyd moeilik, 244 00:10:25,020 --> 00:10:26,170 so ek sal sê sterre. 245 00:10:26,170 --> 00:10:27,660 Ek sal net gesny tot op daardie een. 246 00:10:27,660 --> 00:10:28,190 Alle regte. 247 00:10:28,190 --> 00:10:30,190 En nou, wat verwag ek gaan te plaas nie? 248 00:10:30,190 --> 00:10:34,130 >> So in die eerste plek, ek gaan om te spesifiseer dat in plaas van verby 'n int in 249 00:10:34,130 --> 00:10:37,980 die ruil-funksie, ek is in plaas van gaan int ster te sê. 250 00:10:37,980 --> 00:10:39,170 Nou, wat sê die sterre aan te dui? 251 00:10:39,170 --> 00:10:41,970 Dit is dat die idee van 'n muis wat Binky, die Claymation karakter, was 252 00:10:41,970 --> 00:10:43,465 verwys na 'n oomblik gelede. 253 00:10:43,465 --> 00:10:47,610 >> So as ons sê int ster, die betekenis van Dit is nou dat 'n is nie van plan om te wees 254 00:10:47,610 --> 00:10:49,110 geslaag het deur sy waarde. 255 00:10:49,110 --> 00:10:50,350 Dit gaan nie om gekopieer te word in 256 00:10:50,350 --> 00:10:54,700 Inteendeel, die adres van 'n is gaan word geslaag in 257 00:10:54,700 --> 00:10:57,840 >> So onthou dat die binnekant van jou rekenaar is 'n hele klomp van die geheue, anders 258 00:10:57,840 --> 00:10:58,760 bekend as RAM. 259 00:10:58,760 --> 00:11:00,520 En dit is net 'n geheue hele klomp van die grepe. 260 00:11:00,520 --> 00:11:03,320 So as jou Mac of jou rekenaar het twee gigagrepe, het jy 2 261 00:11:03,320 --> 00:11:05,760 miljard grepe van die geheue. 262 00:11:05,760 --> 00:11:08,440 >> Nou laat ons net veronderstel dat net om te hou dinge mooi en ordelike, ons 263 00:11:08,440 --> 00:11:09,450 wys 'n adres - 264 00:11:09,450 --> 00:11:10,170 'n nommer - 265 00:11:10,170 --> 00:11:12,270 elke byte van die geheue in jou rekenaar. 266 00:11:12,270 --> 00:11:15,410 Die heel eerste byte van die 2 miljard is deur die getal nul. 267 00:11:15,410 --> 00:11:18,572 Die volgende een is byte nommer een, die aantal twee, al die pad op tot, dot dot 268 00:11:18,572 --> 00:11:20,530 dot, tot ongeveer 2 miljard gestyg. 269 00:11:20,530 --> 00:11:23,640 >> So kan jy die aantal grepe van die geheue in jou rekenaar. 270 00:11:23,640 --> 00:11:26,460 So laat ons aanvaar dat dit is wat ons bedoel met 'n adres. 271 00:11:26,460 --> 00:11:31,360 So toe ek sien int ster a, wat gaan geslaag moet word in ruil nou is die 272 00:11:31,360 --> 00:11:32,830 adres van 'n. 273 00:11:32,830 --> 00:11:37,150 Nie die waarde daarvan nie, maar alles wat sy pos adres, om so te praat - 274 00:11:37,150 --> 00:11:38,810 sy plek in die geheue. 275 00:11:38,810 --> 00:11:41,250 >> En soortgelyk vir b, ek gaan dieselfde ding om te sê. 276 00:11:41,250 --> 00:11:42,720 Int, ster, b. 277 00:11:42,720 --> 00:11:46,350 As 'n eenkant, tegnies die ster kon gaan op ander plekke. 278 00:11:46,350 --> 00:11:50,140 Maar ons sal standaardiseer op die ster om reg langs die data tipe. 279 00:11:50,140 --> 00:11:54,080 >> So ruil handtekening nou beteken, gee my die adres van 'n int, en bel 280 00:11:54,080 --> 00:11:55,400 dat 'n adres. 281 00:11:55,400 --> 00:11:58,690 En gee my 'n ander adres van 'n int en noem dat die adres b. 282 00:11:58,690 --> 00:12:01,120 >> Maar nou is my kode het hier te verander nie. 283 00:12:01,120 --> 00:12:03,470 Want as Ek verklaar int temp - 284 00:12:03,470 --> 00:12:05,580 wat nog van tipe int - 285 00:12:05,580 --> 00:12:08,700 maar ek stoor in dit 'n, watter soort van waarde? 286 00:12:08,700 --> 00:12:12,870 Om duidelik te wees, ek is om 'n 'n met die kode soos dit geskryf is reg nou? 287 00:12:12,870 --> 00:12:14,360 >> Ek stel die plek in 'n. 288 00:12:14,360 --> 00:12:16,500 Maar ek gee nie om oor die plek nou nie, reg? 289 00:12:16,500 --> 00:12:21,940 Temp bestaan ​​net Jess 'derde koppie bestaan ​​het, vir watter doel? 290 00:12:21,940 --> 00:12:23,090 'N waarde op te slaan. 291 00:12:23,090 --> 00:12:24,830 Melk of lemoensap. 292 00:12:24,830 --> 00:12:28,520 Nie eintlik die stoor van die adres van een van daardie dinge wat voel 'n 293 00:12:28,520 --> 00:12:31,200 bietjie nonsens in hierdie real wêreld konteks in elk geval. 294 00:12:31,200 --> 00:12:34,990 >> So regtig, wat ek wil om te sit in tydelike is nie die adres van 'n, maar die 295 00:12:34,990 --> 00:12:36,180 inhoud van 'n. 296 00:12:36,180 --> 00:12:41,930 So as 'n is 'n getal soos 123, is dit die 123 byte van geheue wat 'n regverdige 297 00:12:41,930 --> 00:12:45,090 gebeur om te wees besetting, wat die waarde in 'n gebeur om te wees besetting. 298 00:12:45,090 --> 00:12:49,040 >> As ek wil om te gaan na daardie adres, Ek het 'n ster te sê. 299 00:12:49,040 --> 00:12:52,610 Net so, as ek was om te verander wat is by die adres a, ek verander 300 00:12:52,610 --> 00:12:53,570 dit 'n te begin. 301 00:12:53,570 --> 00:12:58,185 As ek wil stoor in wat by die plek 'n met wat is op die plek 302 00:12:58,185 --> 00:13:02,180 by b, ster b ster. 303 00:13:02,180 --> 00:13:05,340 >> Dus, in kort, selfs al is dit nie heeltemal sink in nie - en ek sou nie verwag dat 304 00:13:05,340 --> 00:13:06,560 dat dit sou so vinnig - 305 00:13:06,560 --> 00:13:11,100 besef dat al wat ek doen is morfeem hierdie sterre aan my veranderlikes, 306 00:13:11,100 --> 00:13:13,350 gesegde gryp nie die waardes. 307 00:13:13,350 --> 00:13:14,520 Verander nie die waardes. 308 00:13:14,520 --> 00:13:17,600 Maar eerder, gaan na die adresse en kry die waarde. 309 00:13:17,600 --> 00:13:21,430 Gaan na daardie adres en verandering die waarde daar. 310 00:13:21,430 --> 00:13:25,500 >> So nou laat my terug blaai na die top, net hierdie lyn om hier te los, om te 311 00:13:25,500 --> 00:13:27,690 verander die prototipe te pas. 312 00:13:27,690 --> 00:13:30,280 Maar ek moet nou 'n ander ding om te doen. 313 00:13:30,280 --> 00:13:35,500 Intuïtief, as ek verander die tipes van die argumente wat ruil verwag, 314 00:13:35,500 --> 00:13:37,245 Wat anders moet ek verander in my kode? 315 00:13:37,245 --> 00:13:39,750 316 00:13:39,750 --> 00:13:40,840 >> Toe ek noem ruil. 317 00:13:40,840 --> 00:13:43,340 Want nou, wat is Ek slaag om stil te ruil? 318 00:13:43,340 --> 00:13:47,450 Die waarde x en die waarde van y, of die melk en die oranje sap. 319 00:13:47,450 --> 00:13:48,510 Maar ek wil nie hê om dit te doen. 320 00:13:48,510 --> 00:13:51,060 Ek plaas wil om te slaag in wat? 321 00:13:51,060 --> 00:13:53,050 Die plek van x en die plek van y. 322 00:13:53,050 --> 00:13:55,300 Wat is hul posadresse, om so te praat. 323 00:13:55,300 --> 00:13:57,600 >> So om dit te doen, daar is 'n ampersand. 324 00:13:57,600 --> 00:13:59,260 Ampersand soort van klink soos adres. 325 00:13:59,260 --> 00:14:03,240 so n, teken, die adres van x, en die adres van y. 326 00:14:03,240 --> 00:14:06,790 So is dit doelbewuste wat ons gebruik amper sand wanneer ek die funksie, 327 00:14:06,790 --> 00:14:10,230 en die sterre wanneer verklaar en wanneer die uitvoering van die funksie. 328 00:14:10,230 --> 00:14:14,220 >> En dink net aan ampersand as die adres van die operateur, en as die ster 329 00:14:14,220 --> 00:14:15,490 gaan daar operateur - 330 00:14:15,490 --> 00:14:18,640 of, meer korrek, die dereference operateur. 331 00:14:18,640 --> 00:14:23,480 So dit is 'n hele klomp van die woorde net om te sê dat dit nou hopelik ruil gaan 332 00:14:23,480 --> 00:14:24,440 korrek te wees. 333 00:14:24,440 --> 00:14:26,550 >> Laat my gaan voort en maak - 334 00:14:26,550 --> 00:14:30,940 Kom ons eintlik die naam van die lêer, sodat hierdie program nog genoem word nie omruil. 335 00:14:30,940 --> 00:14:33,240 Ek eis dat ons sal noem dit swap.c nou. 336 00:14:33,240 --> 00:14:35,670 So maak, ruil. 337 00:14:35,670 --> 00:14:37,520 Dot, streep, ruil. 338 00:14:37,520 --> 00:14:40,210 >> En nou ja, x is 1, y is 2. 339 00:14:40,210 --> 00:14:44,040 En dan, x is 2, y is een. 340 00:14:44,040 --> 00:14:46,500 Wel, laat ons kyk of ons kan dit nie 'n doen bietjie anders as om te wat is 341 00:14:46,500 --> 00:14:47,180 hier aan die gang. 342 00:14:47,180 --> 00:14:51,250 Eerste, laat my Zoom in op die teken skerm hier. 343 00:14:51,250 --> 00:14:54,160 En laat my voorstel vir 'n oomblik - en wanneer ek hier maak sal weerspieël word 344 00:14:54,160 --> 00:14:58,660 daar nou - laat my stel voor dat hier is 'n hele klomp van die geheue, of 345 00:14:58,660 --> 00:15:00,540 Geheue, binnekant van my rekenaar. 346 00:15:00,540 --> 00:15:04,140 >> En dit sal byt nommer wees, kom ons sê, 1. 347 00:15:04,140 --> 00:15:05,720 Dit sal grepe nommer 2 wees. 348 00:15:05,720 --> 00:15:08,220 En Ek sal 'n hele klomp meer te doen, en dan 'n klomp van dot dot punte te 349 00:15:08,220 --> 00:15:10,880 dui daarop dat daar is 2000000000 van hierdie dinge. 350 00:15:10,880 --> 00:15:13,520 4, 5, en so meer. 351 00:15:13,520 --> 00:15:17,055 >> So is daar die eerste vyf grepe van my rekenaar se geheue. 352 00:15:17,055 --> 00:15:17,560 Alle reg? 353 00:15:17,560 --> 00:15:19,060 Baie min van 2 miljard gestyg. 354 00:15:19,060 --> 00:15:21,120 Maar nou gaan ek te stel die volgende. 355 00:15:21,120 --> 00:15:27,490 Ek gaan om te stel dat X gaan slaan die nommer 1 en y gaan 356 00:15:27,490 --> 00:15:29,690 die nommer 2 te stoor. 357 00:15:29,690 --> 00:15:35,000 En laat my voort te gaan nou en verteenwoordig hierdie waardes soos volg. 358 00:15:35,000 --> 00:15:41,510 >> Kom ons doen dit soos volg. 359 00:15:41,510 --> 00:15:42,870 Gee my net 'n sekonde. 360 00:15:42,870 --> 00:15:44,150 Een sekonde. 361 00:15:44,150 --> 00:15:45,680 OK. 362 00:15:45,680 --> 00:15:47,560 Ek wil dit 'n bietjie te maak - 363 00:15:47,560 --> 00:15:50,440 Kom ons doen dit weer. 364 00:15:50,440 --> 00:15:53,250 Anders gaan ek en die gebruik van die dieselfde nommers, onbewustelik, 365 00:15:53,250 --> 00:15:54,230 verskeie kere. 366 00:15:54,230 --> 00:15:57,320 >> So net so ons het verskillende getalle om te praat oor, kom ons noem dit byte 367 00:15:57,320 --> 00:16:03,391 nommer 123, 124, 125, 126, en dot dot dot. 368 00:16:03,391 --> 00:16:08,400 En laat my nou beweer dat ek gaan het die waarde 1 hier, en die waarde 2 369 00:16:08,400 --> 00:16:11,990 hier, andersins bekend as x en y. 370 00:16:11,990 --> 00:16:15,300 Daarom is dit net so gebeur dat Dit is X, dit is y. 371 00:16:15,300 --> 00:16:18,180 >> En net deur 'n paar toeval, die rekenaar, die bedryfstelsel, 372 00:16:18,180 --> 00:16:21,890 gebeur x te sit op plek nommer 123. 373 00:16:21,890 --> 00:16:25,590 En y beland op plek 124 - 374 00:16:25,590 --> 00:16:26,330 damn dit. 375 00:16:26,330 --> 00:16:28,700 Ek moet vasgestel het hierdie. 376 00:16:28,700 --> 00:16:34,040 Ag man, ek het nie regtig wil om dit te doen? 377 00:16:34,040 --> 00:16:37,340 Ja, ek wil dit en op te los b behoorlike hieroor vandag. 378 00:16:37,340 --> 00:16:39,950 Jammer, nuut op hierdie. 379 00:16:39,950 --> 00:16:45,020 >> 127, 131, en ek het nie wil wees van hierdie kompleks, maar hoekom het ek die 380 00:16:45,020 --> 00:16:46,340 getalle is daar? 381 00:16:46,340 --> 00:16:48,360 Want ek wil die ints te eintlik vier grepe. 382 00:16:48,360 --> 00:16:49,810 So laat ons super anale hieroor. 383 00:16:49,810 --> 00:16:53,800 Sodat as 1 gebeur aangespreek word 123, is die 2 gaan wees by die adres 384 00:16:53,800 --> 00:16:55,730 127, want dit is net 4 byes weg. 385 00:16:55,730 --> 00:16:56,210 Dit is al. 386 00:16:56,210 --> 00:16:58,640 En ons sal vergeet van al die ander adresse in die wêreld. 387 00:16:58,640 --> 00:17:03,320 >> So x is by die plek 123, y is op plek 127. 388 00:17:03,320 --> 00:17:05,770 En nou, wat doen ek eintlik wil doen? 389 00:17:05,770 --> 00:17:10,099 Toe ek noem ruil nou, wat is eintlik gaan aan? 390 00:17:10,099 --> 00:17:14,920 Wel, as ek roep, ruil, ek is verby in die adres van x en die adres van y. 391 00:17:14,920 --> 00:17:18,540 So byvoorbeeld, as hierdie twee stukke papier verteenwoordig nou die twee 392 00:17:18,540 --> 00:17:23,510 argumente a en b te ruil, wat ek gaan skryf op die eerste van hierdie, 393 00:17:23,510 --> 00:17:27,720 wat ek gaan om te noem verwys na as 'n? 394 00:17:27,720 --> 00:17:30,610 >> Presies, 123. 395 00:17:30,610 --> 00:17:31,905 So het ek beweer is 'n. 396 00:17:31,905 --> 00:17:32,955 Dit is die parameter a. 397 00:17:32,955 --> 00:17:35,856 Ek plaas die adres van x in daar. 398 00:17:35,856 --> 00:17:38,152 >> Wat is dit? 399 00:17:38,152 --> 00:17:40,890 >> Wat is dit? 400 00:17:40,890 --> 00:17:41,190 >> Nee, nee. 401 00:17:41,190 --> 00:17:41,720 Dit is OK. 402 00:17:41,720 --> 00:17:42,570 Nog goed, nog steeds goed. 403 00:17:42,570 --> 00:17:43,530 So dit is 'n. 404 00:17:43,530 --> 00:17:46,240 En nou op die tweede stuk papier, dit gaan wees b, en wat is ek 405 00:17:46,240 --> 00:17:49,010 gaan skryf op hierdie stuk van papier? 406 00:17:49,010 --> 00:17:50,080 127. 407 00:17:50,080 --> 00:17:53,720 >> Dus is die enigste ding wat sedertdien verander ons vorige vertel van hierdie verhaal is, 408 00:17:53,720 --> 00:17:58,590 eerder as letterlik 1 en 2, is ek gaan om te slaag in 123 en 127. 409 00:17:58,590 --> 00:18:02,130 En Ek gaan nou dit binne te sit van hierdie vak, alles reg? 410 00:18:02,130 --> 00:18:04,640 Sodat black box verteenwoordig nou die ruil-funksie. 411 00:18:04,640 --> 00:18:07,230 >> Intussen, laat ons nou het iemand implementeer om die ruil-funksie. 412 00:18:07,230 --> 00:18:09,090 Sal iemand hier graag om vrywillig? 413 00:18:09,090 --> 00:18:09,560 Kom up. 414 00:18:09,560 --> 00:18:11,080 Wat is jou naam? 415 00:18:11,080 --> 00:18:11,460 Charlie. 416 00:18:11,460 --> 00:18:12,080 Alle reg, Charlie. 417 00:18:12,080 --> 00:18:14,810 Kom up. 418 00:18:14,810 --> 00:18:17,310 >> So Charlie gaan speel die rol van ons swart boks. 419 00:18:17,310 --> 00:18:21,460 En Charlie, wat ek wil om te doen nou implementeer ruil in so 'n manier 420 00:18:21,460 --> 00:18:25,320 dat, gegewe die twee adresse, jy was eintlik gaan 421 00:18:25,320 --> 00:18:26,330 die waardes te verander. 422 00:18:26,330 --> 00:18:28,290 En ek sal fluister in jou oor hoe die TV hier om te hardloop. 423 00:18:28,290 --> 00:18:29,930 >> So gaan voort, en jy is die swart boks. 424 00:18:29,930 --> 00:18:30,920 Bereik in daar. 425 00:18:30,920 --> 00:18:34,054 Watter waardes sien jy vir 'n, en watter waardes sien jy vir b? 426 00:18:34,054 --> 00:18:36,740 >> CHARLIE: 'n 123 is en b is 127. 427 00:18:36,740 --> 00:18:37,530 >> David Malan: OK, presies. 428 00:18:37,530 --> 00:18:38,940 Nou breek daar vir net 'n oomblik. 429 00:18:38,940 --> 00:18:41,680 Die eerste ding wat jy nou gaan doen, volgens die kode - wat 430 00:18:41,680 --> 00:18:43,220 Ek sal nou trek op die skerm - 431 00:18:43,220 --> 00:18:46,750 gaan om 'n bietjie te ken bietjie van die geheue genoem temp. 432 00:18:46,750 --> 00:18:48,850 So ek gaan om voort te gaan en gee dat die geheue. 433 00:18:48,850 --> 00:18:52,210 >> So dit gaan 'n derde veranderlike wees dat jy toeganklik te 434 00:18:52,210 --> 00:18:54,080 jy genoem temp. 435 00:18:54,080 --> 00:18:57,120 En wat gaan jy om te skryf op die tydelike stuk papier? 436 00:18:57,120 --> 00:19:02,524 437 00:19:02,524 --> 00:19:03,470 >> CHARLIE: Pointers, reg? 438 00:19:03,470 --> 00:19:04,790 >> David Malan: OK, goed nie noodwendig wysers. 439 00:19:04,790 --> 00:19:07,230 So het die reël van die kode wat ek uitgelig op die regterkant, 440 00:19:07,230 --> 00:19:07,900 Kom ons begin daar. 441 00:19:07,900 --> 00:19:08,890 Dit sê 'n ster. 442 00:19:08,890 --> 00:19:11,670 So 'n tans stoor die getal 123. 443 00:19:11,670 --> 00:19:16,660 En net intuïtief, wat het sterre 123 beteken? 444 00:19:16,660 --> 00:19:21,630 >> Maar spesifiek, as a 123, 'n ster beteken wat? 445 00:19:21,630 --> 00:19:22,560 Die waarde van a. 446 00:19:22,560 --> 00:19:24,580 Of meer terloops, daar gaan. 447 00:19:24,580 --> 00:19:28,620 So laat ek stel voor dat, wat die 'n in jou hand, voort te gaan en te behandel wat 448 00:19:28,620 --> 00:19:29,430 asof dit 'n kaart. 449 00:19:29,430 --> 00:19:32,940 En loop jouself oor aan die rekenaar se geheue, en ons vind wat 450 00:19:32,940 --> 00:19:36,520 op plek 123. 451 00:19:36,520 --> 00:19:37,720 Presies. 452 00:19:37,720 --> 00:19:41,100 >> So sien ons by die plek 123 is wat, natuurlik? 453 00:19:41,100 --> 00:19:44,240 OK, so wat waarde nou is jy gaan sit in temp? 454 00:19:44,240 --> 00:19:44,750 Presies. 455 00:19:44,750 --> 00:19:45,600 So gaan voort en doen. 456 00:19:45,600 --> 00:19:51,280 En skryf die nommer 1 op die stuk papier wat is tans temp titel. 457 00:19:51,280 --> 00:19:53,540 >> En nou is die volgende stap wat jy gaan om te implementeer 458 00:19:53,540 --> 00:19:54,310 gaan wees wat nie. 459 00:19:54,310 --> 00:19:57,820 Wel, op die regterkant van die volgende lyn van kode is ster b. b, van 460 00:19:57,820 --> 00:19:59,260 Natuurlik, slaan 'n adres. 461 00:19:59,260 --> 00:20:02,270 Wat fokus op 127. 462 00:20:02,270 --> 00:20:06,620 Star b beteken wat, terloops praat? 463 00:20:06,620 --> 00:20:08,700 >> Gaan na die plek. 464 00:20:08,700 --> 00:20:14,988 So gaan voort en ons vind wat is op plek 127. 465 00:20:14,988 --> 00:20:15,480 OK. 466 00:20:15,480 --> 00:20:19,170 Natuurlik, op plek 127, is nog steeds die waarde 2. 467 00:20:19,170 --> 00:20:24,060 So wat gaan jy nou winkel by alles is op die plek in 'n? 468 00:20:24,060 --> 00:20:26,860 So ster 'n manier om te gaan na die plek a. 469 00:20:26,860 --> 00:20:29,770 Wat is die plek 'n? 470 00:20:29,770 --> 00:20:30,430 >> Presies. 471 00:20:30,430 --> 00:20:34,190 So, as jy wil verander Wat is op die plek - 472 00:20:34,190 --> 00:20:36,470 Ek sal voort te gaan en uit te voer die uitveër is hier. 473 00:20:36,470 --> 00:20:37,760 En nou sit dit terug op die kwas. 474 00:20:37,760 --> 00:20:42,190 Watter getal is jy gaan om te skryf in daardie leë boks nou? 475 00:20:42,190 --> 00:20:42,850 >> Presies. 476 00:20:42,850 --> 00:20:46,470 So hierdie lyn van kode, duidelik te wees - laat my breek wat Charlie se doen en 477 00:20:46,470 --> 00:20:51,730 wys hier, wat hy gedoen het, is net skryf in daardie boks op plek 123 478 00:20:51,730 --> 00:20:55,150 die waarde wat voorheen by b. 479 00:20:55,150 --> 00:20:59,140 En so het ons nou geïmplementeer inderdaad hierdie tweede reël van die kode. 480 00:20:59,140 --> 00:21:01,920 >> Nou Ongelukkig is daar nog een reël bly. 481 00:21:01,920 --> 00:21:04,900 Nou wat is in temp, letterlik? 482 00:21:04,900 --> 00:21:06,200 Dit is natuurlik die nommer een. 483 00:21:06,200 --> 00:21:07,020 Dit is nie 'n adres. 484 00:21:07,020 --> 00:21:09,380 Dit is net 'n nommer, soort 'n veranderlike vanaf week een. 485 00:21:09,380 --> 00:21:13,520 >> En nou wanneer jy sê ster b, wat beteken gaan na die adres B, wat van 486 00:21:13,520 --> 00:21:15,090 Natuurlik hier. 487 00:21:15,090 --> 00:21:16,020 So as jy daar te kom - 488 00:21:16,020 --> 00:21:18,320 Ek sal voort te gaan en vee wat eintlik daar is - en wat is jy 489 00:21:18,320 --> 00:21:20,820 nou gaan skryf op plek 127? 490 00:21:20,820 --> 00:21:22,010 >> CHARLIE: Temp, wat een. 491 00:21:22,010 --> 00:21:23,430 >> David Malan: Temp, wat een. 492 00:21:23,430 --> 00:21:25,670 En wat gebeur met temp in die einde? 493 00:21:25,670 --> 00:21:26,600 Wel, ons het nie regtig weet. 494 00:21:26,600 --> 00:21:27,420 Ons het nie regtig omgee. 495 00:21:27,420 --> 00:21:31,090 Enige tyd het ons geïmplementeer 'n funksie tot dusver, 'n plaaslike veranderlikes wat jy het 496 00:21:31,090 --> 00:21:31,890 is inderdaad plaaslik. 497 00:21:31,890 --> 00:21:33,060 En hulle het net verdwyn. 498 00:21:33,060 --> 00:21:35,040 Hulle is herwin deur die bedryfstelsel stelsel uiteindelik. 499 00:21:35,040 --> 00:21:39,800 >> So die feit dat temp nog steeds die waarde 1 is 'n soort van fundamenteel 500 00:21:39,800 --> 00:21:41,150 oninteressant vir ons. 501 00:21:41,150 --> 00:21:43,100 Alle reg, so 'n rondte van applous As ons kon nie vir Charlie. 502 00:21:43,100 --> 00:21:46,400 Baie goed gedoen. 503 00:21:46,400 --> 00:21:51,520 >> Alle reg, so wat meer doen dit beteken dat ons dit kan doen? 504 00:21:51,520 --> 00:21:54,400 So dit blyk dat ons het al vertel van 'n paar wit lê 505 00:21:54,400 --> 00:21:55,540 vir 'n geruime tyd. 506 00:21:55,540 --> 00:21:59,990 Inteendeel, dit blyk dat 'n string, al hierdie tyd, is nie regtig 'n 507 00:21:59,990 --> 00:22:02,190 volgorde van die karakters per se. 508 00:22:02,190 --> 00:22:03,980 Dit is 'n soort van daardie intuïtief. 509 00:22:03,980 --> 00:22:08,270 >> Maar tegnies gesproke, is 'n string data tipe wat ons verklaar binnekant van 510 00:22:08,270 --> 00:22:12,170 die CS50 biblioteek om die wêreld te vereenvoudig vir die eerste paar weke van die klas. 511 00:22:12,170 --> 00:22:20,130 Wat 'n string werklik is, is die adres van 'n karakter iewers in die geheue. 512 00:22:20,130 --> 00:22:25,530 'N string is regtig 'n nommer, soos 123 of 127, wat gebeur te baken 513 00:22:25,530 --> 00:22:28,420 waar 'n string begin in jou rekenaar se geheue. 514 00:22:28,420 --> 00:22:31,870 >> Maar dit verteenwoordig nie die string, per se, self. 515 00:22:31,870 --> 00:22:33,460 En ons kan sien dit as volg. 516 00:22:33,460 --> 00:22:35,980 Laat my gaan voort en oop te maak kode wat is onder 517 00:22:35,980 --> 00:22:38,340 Vandag se bron-kode voorbeelde. 518 00:22:38,340 --> 00:22:42,225 En ek gaan om voort te gaan en maak up, kom ons sê, vergelyk-0.C. 519 00:22:42,225 --> 00:22:44,830 520 00:22:44,830 --> 00:22:48,790 Dit is 'n karretjie program wat gaan geïmplementeer moet word as volg. 521 00:22:48,790 --> 00:22:49,040 >> Eerste. 522 00:22:49,040 --> 00:22:50,420 Ek gaan om iets te sê. 523 00:22:50,420 --> 00:22:52,660 Toe ek gaan om voort te gaan en kry 'n string van die gebruiker 524 00:22:52,660 --> 00:22:53,750 in die volgende reël. 525 00:22:53,750 --> 00:22:55,370 Toe ek gaan dit weer sê. 526 00:22:55,370 --> 00:22:57,540 Dan gaan ek 'n ander te kry string van die gebruiker. 527 00:22:57,540 --> 00:23:00,390 >> En kennis, ek is wat een van die snare in 'n veranderlike genoem is, en 528 00:23:00,390 --> 00:23:03,040 'n ander van hierdie stringe in 'n veranderlike genaamd t. 529 00:23:03,040 --> 00:23:07,480 En nou gaan ek te eis, baie redelik, dat as s gelyk gelyk t, 530 00:23:07,480 --> 00:23:08,940 die snare is dieselfde. 531 00:23:08,940 --> 00:23:09,970 Jy tik dieselfde ding. 532 00:23:09,970 --> 00:23:11,830 Anders, die snare is nie dieselfde ding nie. 533 00:23:11,830 --> 00:23:15,440 >> Na alles, as ons insette twee ints, twee karakters, twee dryf, twee dubbels, enige van 534 00:23:15,440 --> 00:23:18,400 die data tipes ons gepraat het dusver om hulle te vergelyk - 535 00:23:18,400 --> 00:23:22,070 onthou ons het baie duidelik 'n ruk gelede dat jy dit nie doen nie, omdat 'n 536 00:23:22,070 --> 00:23:25,840 enkele gelyk teken is natuurlik die opdrag operateur. 537 00:23:25,840 --> 00:23:26,820 So wat sou 'n fout wees. 538 00:23:26,820 --> 00:23:29,260 >> Ons gebruik die gelyk teken is, Dit vergelyk inderdaad 539 00:23:29,260 --> 00:23:31,050 dinge vir ware gelykheid. 540 00:23:31,050 --> 00:23:32,275 Maar ek beweer dit is karretjie. 541 00:23:32,275 --> 00:23:37,400 As ek gaan voort en maak vergelyk nul, en dan vergelyk dot streep nie nul. 542 00:23:37,400 --> 00:23:39,700 En ek tik in, kom ons sê, hallo. 543 00:23:39,700 --> 00:23:41,590 En dan kom ons sê hallo weer. 544 00:23:41,590 --> 00:23:46,040 Letterlik dieselfde ding, die rekenaar eise wat ek getik verskillende dinge. 545 00:23:46,040 --> 00:23:47,640 >> Nou miskien is ek net verkeerd getik iets. 546 00:23:47,640 --> 00:23:49,910 Ek sal my naam tik hierdie tyd. 547 00:23:49,910 --> 00:23:52,580 Ek bedoel, hallo. 548 00:23:52,580 --> 00:23:54,770 Hello. 549 00:23:54,770 --> 00:23:57,360 Dit is verskillende elke keer. 550 00:23:57,360 --> 00:23:58,430 >> Wel, hoekom is dit? 551 00:23:58,430 --> 00:24:00,140 Wat is werklik aan die gang onder die enjinkap? 552 00:24:00,140 --> 00:24:03,270 Wel, eintlik wat aangaan onder die enjinkap is die string dan 553 00:24:03,270 --> 00:24:07,410 Ek getik in daardie eerste keer byvoorbeeld is die woord hallo, natuurlik. 554 00:24:07,410 --> 00:24:11,660 Maar as ons verteenwoordig dit onder die enjinkap, onthou dat 'n 555 00:24:11,660 --> 00:24:13,470 string is in 'n skikking. 556 00:24:13,470 --> 00:24:15,040 En ons het net soveel het gesê in die verlede. 557 00:24:15,040 --> 00:24:20,200 >> So as ek trek wat opgestel soos hierdie, is ek gaan iets heeltemal verteenwoordig 558 00:24:20,200 --> 00:24:23,030 soortgelyk aan wat ons het 'n oomblik gelede. 559 00:24:23,030 --> 00:24:25,390 En daar is eintlik iets spesiale ook hier. 560 00:24:25,390 --> 00:24:28,090 Wat het ons bepaal, is op die einde van elke string? 561 00:24:28,090 --> 00:24:30,760 Ja, dit agteroorskuisstreep nul, wat net die manier is, 562 00:24:30,760 --> 00:24:33,610 letterlik, 00000000. 563 00:24:33,610 --> 00:24:35,680 Agt 0 stukkies in 'n ry. 564 00:24:35,680 --> 00:24:37,610 >> Ek weet nie, eerlik, Wat is na hierdie. 565 00:24:37,610 --> 00:24:40,090 Dit is net 'n klomp meer geheue binnekant van my rekenaar. 566 00:24:40,090 --> 00:24:40,970 Maar dit is 'n skikking. 567 00:24:40,970 --> 00:24:42,260 Ons het gepraat oor skikkings voor. 568 00:24:42,260 --> 00:24:45,010 En ons gewoonlik praat oor skikkings as plek nul, 569 00:24:45,010 --> 00:24:46,580 dan een, dan twee. 570 00:24:46,580 --> 00:24:47,950 Maar dit is net vir die gerief. 571 00:24:47,950 --> 00:24:49,380 En dit is heeltemal relatief. 572 00:24:49,380 --> 00:24:53,010 >> Wanneer jy eintlik om die geheue van die rekenaar, dit is natuurlik 'n 573 00:24:53,010 --> 00:24:55,450 2000000000 paar vreemde grepe, moontlik. 574 00:24:55,450 --> 00:24:59,100 So regtig onder die enjinkap, al hierdie tyd, ja. 575 00:24:59,100 --> 00:25:01,670 Dit kan baie goed wees bracket nul. 576 00:25:01,670 --> 00:25:04,780 Maar as jy grawe nog dieper onder die enjinkap, dit is regtig 577 00:25:04,780 --> 00:25:07,000 spreek nommer 123. 578 00:25:07,000 --> 00:25:09,150 Dit is adres 124. 579 00:25:09,150 --> 00:25:11,040 Dit is adres 125. 580 00:25:11,040 --> 00:25:12,540 >> En ek het nie skroef hierdie tyd. 581 00:25:12,540 --> 00:25:15,840 Dit is nou een grepe afgesien om watter rede? 582 00:25:15,840 --> 00:25:17,930 Hoe groot is 'n kar? 583 00:25:17,930 --> 00:25:19,170 'N kar is net een byte. 584 00:25:19,170 --> 00:25:20,570 'N int is tipies vier grepe. 585 00:25:20,570 --> 00:25:24,850 So dit is waarom ek het dit 123, 127, 131 en so meer. 586 00:25:24,850 --> 00:25:27,560 Nou kan ek hou die wiskunde makliker en doen net plus 1. 587 00:25:27,560 --> 00:25:30,510 En dit is nou wat regtig aangaan op onder die kap. 588 00:25:30,510 --> 00:25:37,760 >> So wanneer jy verklaar iets soos hierdie, string s, dit is eintlik - 589 00:25:37,760 --> 00:25:39,170 dit blyk - 590 00:25:39,170 --> 00:25:41,190 kar ster. 591 00:25:41,190 --> 00:25:44,640 Ster, natuurlik, beteken adres, aka wyser. 592 00:25:44,640 --> 00:25:46,200 So dit is die adres van iets. 593 00:25:46,200 --> 00:25:47,510 Wat is dit die adres van? 594 00:25:47,510 --> 00:25:47,760 >> Wel - 595 00:25:47,760 --> 00:25:51,680 Ek is die enigste een wat kan sien die heel belangrike punt wat ek maak, of dink 596 00:25:51,680 --> 00:25:52,560 Ek maak. 597 00:25:52,560 --> 00:25:55,270 So string - 598 00:25:55,270 --> 00:25:57,180 Die hartseer ding is ek het 'n monitor net daar waar ek 599 00:25:57,180 --> 00:25:58,100 kon gesien het nie. 600 00:25:58,100 --> 00:26:00,990 >> Alle reg, so string s is wat Ek verklaar voorheen. 601 00:26:00,990 --> 00:26:04,600 Maar dit blyk, te danke aan 'n bietjie magic in die CS50 biblioteek, al hierdie 602 00:26:04,600 --> 00:26:08,780 tyd string het letterlik gewees kar ster. 603 00:26:08,780 --> 00:26:11,310 Die ster beteken weer wyser of adres. 604 00:26:11,310 --> 00:26:14,180 Die feit dat dit die is aan weerskante woord char beteken dit is die 605 00:26:14,180 --> 00:26:15,970 adres van 'n karakter. 606 00:26:15,970 --> 00:26:23,100 >> So as jy string genoem word, en ek tik in H-E-L-L-O, nou stel wat kry 607 00:26:23,100 --> 00:26:27,330 string letterlik terugkeer al hierdie tyd, selfs al het ons eerder 608 00:26:27,330 --> 00:26:29,980 oorvereenvoudig die wêreld? 609 00:26:29,980 --> 00:26:33,310 Wat beteken string eintlik kry terug te keer as sy terugkeer waarde? 610 00:26:33,310 --> 00:26:35,830 611 00:26:35,830 --> 00:26:38,720 >> 123 in hierdie geval, byvoorbeeld. 612 00:26:38,720 --> 00:26:42,630 Ons het voorheen gesê dat kry string eenvoudig 'n string, 'n ry 613 00:26:42,630 --> 00:26:43,300 karakters. 614 00:26:43,300 --> 00:26:44,790 Maar dit is 'n bietjie van 'n wit leuen. 615 00:26:44,790 --> 00:26:48,010 Die manier kry snaar regtig werk onder die enjinkap is dit kry 'n 616 00:26:48,010 --> 00:26:48,930 string van die gebruiker. 617 00:26:48,930 --> 00:26:51,530 Dit plops die karakters wat hy of sy vorme in die geheue. 618 00:26:51,530 --> 00:26:54,680 Dit plaas 'n agteroorskuisstreep nul aan die einde van die volgorde van die karakters. 619 00:26:54,680 --> 00:26:57,310 >> Maar wat beteken kry string letterlik terugkeer? 620 00:26:57,310 --> 00:27:02,710 Is dit terug letterlik die adres van die heel eerste grepe in die geheue wat 621 00:27:02,710 --> 00:27:04,130 dit gebruik word vir die krag. 622 00:27:04,130 --> 00:27:07,500 En dit blyk dat net deur die terugkeer 'n enkele adres van die 623 00:27:07,500 --> 00:27:12,120 eerste karakter in die string, wat voldoende vir die vind van die geheel van 624 00:27:12,120 --> 00:27:12,630 die string. 625 00:27:12,630 --> 00:27:16,930 >> Met ander woorde, kry string nie ' 123 en 124 en 125 om terug te keer. 626 00:27:16,930 --> 00:27:19,950 Dit hoef nie te gee vir my 'n lang lys van al die grepe wat 627 00:27:19,950 --> 00:27:20,740 my string word gebruik. 628 00:27:20,740 --> 00:27:22,670 Want 'n mens, hulle is almal terug na terug. 629 00:27:22,670 --> 00:27:28,160 En twee, wat gebaseer is op die eerste adres, ek kan uitvind waar die string eindig. 630 00:27:28,160 --> 00:27:29,910 Hoe? 631 00:27:29,910 --> 00:27:33,490 >> Die spesiale null karakter, die agteroorskuisstreep nul aan die einde. 632 00:27:33,490 --> 00:27:35,430 So met ander woorde, indien jy slaag om - 633 00:27:35,430 --> 00:27:36,530 binnekant van veranderlikes - 634 00:27:36,530 --> 00:27:41,300 die adres van 'n kar, en jy neem wat aan die einde van 'n string, enige 635 00:27:41,300 --> 00:27:45,040 volgorde van karakters soos ons mense dink van snare, as jy aanneem dat 636 00:27:45,040 --> 00:27:48,600 aan die einde van enige sodanige string daar 'n agteroorskuisstreep nul, jy is goue. 637 00:27:48,600 --> 00:27:52,430 Want jy kan altyd die einde van 'n string. 638 00:27:52,430 --> 00:27:54,870 >> Nou wat werklik dan gaan in hierdie program? 639 00:27:54,870 --> 00:27:59,990 Hoekom is hierdie program, vergelyk-0.C, karretjie? 640 00:27:59,990 --> 00:28:01,690 Wat is eintlik vergelyk word? 641 00:28:01,690 --> 00:28:02,420 Ja? 642 00:28:02,420 --> 00:28:05,000 >> STUDENT: [onhoorbaar]. 643 00:28:05,000 --> 00:28:05,730 >> David Malan: Presies. 644 00:28:05,730 --> 00:28:08,350 Dit is die vergelyking van die plekke van die snare. 645 00:28:08,350 --> 00:28:12,420 Dus, as die gebruiker getik het in hallo keer, soos ek gedoen het, kan die geheue beland 646 00:28:12,420 --> 00:28:13,430 soek soos hierdie. 647 00:28:13,430 --> 00:28:18,210 As die gebruiker dan tipes in hallo weer maar deur die roeping kry string weer, c is 648 00:28:18,210 --> 00:28:21,800 nie baie slim nie, tensy jy leer om dit te slim te wees deur te skryf kode. 649 00:28:21,800 --> 00:28:22,430 >> C - 650 00:28:22,430 --> 00:28:23,860 en rekenaars meer algemeen - 651 00:28:23,860 --> 00:28:27,370 As jy tik in die woord hallo weer jy weet wat jy gaan kry. 652 00:28:27,370 --> 00:28:31,480 Jy net gaan 'n tweede skikking te kry van die geheue, ja, dit gebeur te wees 653 00:28:31,480 --> 00:28:35,510 stoor H-E-L-L-O en so meer. 654 00:28:35,510 --> 00:28:38,240 >> Dit gaan om dieselfde te kyk na ons mense, maar hierdie adres 655 00:28:38,240 --> 00:28:39,460 dalk nie 123. 656 00:28:39,460 --> 00:28:42,470 Dit mag dalk net so gebeur dat die bedryfstelsel het 'n paar beskikbaar 657 00:28:42,470 --> 00:28:45,430 ruimte byvoorbeeld op plek - 658 00:28:45,430 --> 00:28:49,820 Kom ons sê iets arbitrêre, soos hierdie is plek 200. 659 00:28:49,820 --> 00:28:51,620 En dit is die plek 201. 660 00:28:51,620 --> 00:28:53,060 En dit is die plek 202. 661 00:28:53,060 --> 00:28:55,730 Ons het geen idee waar dit is gaan wees in die geheue. 662 00:28:55,730 --> 00:28:59,110 >> Maar wat dit beteken, is dat dit wat gaan uiteindelik gestoor in s? 663 00:28:59,110 --> 00:29:00,750 Die getal 123. 664 00:29:00,750 --> 00:29:04,860 Wat gaan word gestoor in t, in hierdie arbitrêre voorbeeld? 665 00:29:04,860 --> 00:29:06,300 Die getal 200. 666 00:29:06,300 --> 00:29:11,410 En alles wat beteken dan natuurlik, 123 is nie gelyk aan 200. 667 00:29:11,410 --> 00:29:14,940 En so gaan dit as voorwaarde nooit evalueer tot ware. 668 00:29:14,940 --> 00:29:18,430 Want get string is die gebruik van verskillende stukke van die geheue elke keer. 669 00:29:18,430 --> 00:29:20,360 >> Nou kan ons sien dit weer in nog 'n voorbeeld. 670 00:29:20,360 --> 00:29:23,764 Laat my gaan voort en oop te maak kopie-0.C. 671 00:29:23,764 --> 00:29:28,770 Ek beweer dat hierdie voorbeeld gaan probeer - maar versuim - twee snare te kopieer 672 00:29:28,770 --> 00:29:29,910 soos volg. 673 00:29:29,910 --> 00:29:31,730 >> Ek gaan om iets te sê aan die gebruiker. 674 00:29:31,730 --> 00:29:34,490 Ek is dan gaan 'n te kry string en noem dit 's. 675 00:29:34,490 --> 00:29:36,400 En nou, ek doen hierdie tjek hier. 676 00:29:36,400 --> 00:29:37,990 Ons het dit al 'n rukkie terug. 677 00:29:37,990 --> 00:29:42,490 Maar toe kan kry string terugkeer null, 'n spesiale karakter, of spesiale 678 00:29:42,490 --> 00:29:45,050 simbool Kom ons sê. 679 00:29:45,050 --> 00:29:45,900 As dit uit die geheue. 680 00:29:45,900 --> 00:29:48,970 >> Byvoorbeeld, as die gebruiker is regtig om moeilike en tipes 'n gruwelike 681 00:29:48,970 --> 00:29:51,220 aantal karakters op die klawerbord en treffers Tik. 682 00:29:51,220 --> 00:29:54,580 As dat die getal van die karakters kan net nie pas in die geheue vir alles wat mal 683 00:29:54,580 --> 00:29:57,820 rede, goed kry string mag baie goed terug null. 684 00:29:57,820 --> 00:30:01,080 >> Of as jou program self is besig met 'n baie van ander dinge, en daar is net 685 00:30:01,080 --> 00:30:03,790 nie genoeg geheue vir get string om suksesvol te wees, kan dit die einde 686 00:30:03,790 --> 00:30:05,240 up terugkeer null. 687 00:30:05,240 --> 00:30:07,160 Maar laat ons meer akkurate as wat dit is. 688 00:30:07,160 --> 00:30:10,280 Wat is s se data tipe regtig? 689 00:30:10,280 --> 00:30:11,610 Kar ster. 690 00:30:11,610 --> 00:30:14,560 >> So dit blyk nou kan ons skil terug laag null. 691 00:30:14,560 --> 00:30:17,500 Turns out, nietig is - ja, natuurlik 'n spesiale simbool. 692 00:30:17,500 --> 00:30:19,190 Maar wat is dit regtig? 693 00:30:19,190 --> 00:30:25,220 Regtig, nul is net 'n simbool dat ons mense gebruik zero so goed verteenwoordig. 694 00:30:25,220 --> 00:30:29,010 >> So het die skrywers van C en rekenaars meer in die algemeen, het besluit jaar gelede 695 00:30:29,010 --> 00:30:30,010 dat jy weet wat. 696 00:30:30,010 --> 00:30:34,850 Hoekom kan ons nie verseker dat geen gebruiker data is ooit, ooit, ooit 697 00:30:34,850 --> 00:30:36,730 gestoor bye nul? 698 00:30:36,730 --> 00:30:39,610 Trouens, selfs in my arbitrêre voorbeeld voor, ek het nie begin die nommers 699 00:30:39,610 --> 00:30:40,390 grepe op nul. 700 00:30:40,390 --> 00:30:41,540 Ek het begin by een. 701 00:30:41,540 --> 00:30:44,950 Want ek het geweet dat die mense in die wêreld het besluit om die nul te behou 702 00:30:44,950 --> 00:30:47,970 byte in iemand se geheue as iets besonders. 703 00:30:47,970 --> 00:30:52,020 >> Die rede hiervoor is, wanneer jy wil aandui dat iets verkeerd geloop het 704 00:30:52,020 --> 00:30:55,960 met betrekking tot die adresse, jy teruggekeer nul - andersins bekend as nul - 705 00:30:55,960 --> 00:30:59,410 en omdat jy weet dat daar is geen wettig data by adres nul, duidelik 706 00:30:59,410 --> 00:31:00,400 wat beteken dat 'n fout. 707 00:31:00,400 --> 00:31:04,080 En dit is die rede waarom ons, deur konvensie, kyk for null en terugkeer iets 708 00:31:04,080 --> 00:31:06,260 soos een van die gevalle. 709 00:31:06,260 --> 00:31:09,300 >> So as ons rol af nou, dit is net dan 'n paar foutopsporing, net in geval 710 00:31:09,300 --> 00:31:10,610 iets wat verkeerd geloop het met [? borgtog?] 711 00:31:10,610 --> 00:31:13,470 geheel en al en sluit die program deur terug te keer vroeg. 712 00:31:13,470 --> 00:31:19,030 Hierdie lyn kan nou herskryf word as hierdie, wat beteken wat? 713 00:31:19,030 --> 00:31:23,155 Op die linkerkant, gee my 'n ander wyser na 'n karakter, en noem dit t. 714 00:31:23,155 --> 00:31:26,935 Wat kan ek stoor binnekant van t, gebaseer op hierdie een lyn van kode? 715 00:31:26,935 --> 00:31:30,950 716 00:31:30,950 --> 00:31:32,170 >> Ek is 'n stoor plek. 717 00:31:32,170 --> 00:31:34,742 Spesifiek die plek dit was in s. 718 00:31:34,742 --> 00:31:39,000 Dus, as die gebruiker getik het in hallo, en wat die eerste keer gebeur hallo aan die einde 719 00:31:39,000 --> 00:31:42,567 hier, dan is die getal 123 is gaan om terug te kom uit kry 720 00:31:42,567 --> 00:31:43,810 tou en gestoor word - 721 00:31:43,810 --> 00:31:44,780 soos ons vroeër gesê het - 722 00:31:44,780 --> 00:31:45,440 in s. 723 00:31:45,440 --> 00:31:50,560 >> Toe ek verklaar nou 'n ander verwysing na 'n kar en noem dit t, watter getal is 724 00:31:50,560 --> 00:31:53,940 letterlik gaan aan die einde in t volgens die storie? 725 00:31:53,940 --> 00:31:55,420 So 123. 726 00:31:55,420 --> 00:32:00,310 >> So tegnies nou beide s en t is wat dui op die presiese 727 00:32:00,310 --> 00:32:02,410 dieselfde stukke van die geheue. 728 00:32:02,410 --> 00:32:06,140 So sien wat ek nou gaan doen om te bewys dat hierdie program is karretjie. 729 00:32:06,140 --> 00:32:08,820 >> Eerste gaan ek te eis, met 'n afdruk f, kapitaliseer 730 00:32:08,820 --> 00:32:10,080 'n afskrif van die string. 731 00:32:10,080 --> 00:32:11,660 Dan gaan ek 'n bietjie te doen foutopsporingstegniek. 732 00:32:11,660 --> 00:32:12,160 Ek gaan om seker te maak. 733 00:32:12,160 --> 00:32:16,710 Kom ons maak seker dat die string t is by minste groter as nul in lengte, 734 00:32:16,710 --> 00:32:19,190 So daar is 'n paar karakter daar om werklik te kapitaliseer. 735 00:32:19,190 --> 00:32:22,840 >> En dan kan jy dalk onthou hierdie van die vorige voorbeelde. 736 00:32:22,840 --> 00:32:25,630 2 bo - wat in die ctype.h lêer. 737 00:32:25,630 --> 00:32:30,800 T bracket zero gee my die nul karakter van die string t. 738 00:32:30,800 --> 00:32:34,360 En 2 boonste van dieselfde waarde, van Natuurlik, vat dit na 'n hoofletter. 739 00:32:34,360 --> 00:32:38,230 >> So intuïtief, hierdie uitgelig lyn van die kode is kapitaliseer die eerste 740 00:32:38,230 --> 00:32:40,250 brief in t. 741 00:32:40,250 --> 00:32:44,485 Maar dit is nie kapitaliseer, intuïtief, die eerste letter in s. 742 00:32:44,485 --> 00:32:48,130 Maar as jy vooruit te dink, wat ek om te sien wanneer ek hierdie program 743 00:32:48,130 --> 00:32:54,220 en die druk van beide die oorspronklike, s, en die sogenaamde kopie, t? 744 00:32:54,220 --> 00:32:55,350 >> Hulle is eintlik gaan om dieselfde te wees. 745 00:32:55,350 --> 00:32:56,600 En hoekom is hulle gaan dieselfde wees? 746 00:32:56,600 --> 00:32:58,970 747 00:32:58,970 --> 00:33:01,020 Hulle is albei verwys na presies dieselfde ding. 748 00:33:01,020 --> 00:33:01,610 So laat ons dit doen. 749 00:33:01,610 --> 00:33:03,160 >> Maak afskrif nul. 750 00:33:03,160 --> 00:33:04,070 Dit stel OK. 751 00:33:04,070 --> 00:33:06,500 Laat my toe hardloop kopie nul. 752 00:33:06,500 --> 00:33:10,110 Laat my tik iets soos hallo in al klein dan druk Enter. 753 00:33:10,110 --> 00:33:16,520 En dit beweer dat beide die oorspronklike s en die kopie is inderdaad identies. 754 00:33:16,520 --> 00:33:17,920 >> So wat regtig gebeur hier? 755 00:33:17,920 --> 00:33:20,100 Laat my teken hierdie foto net die storie in 'n te vertel 756 00:33:20,100 --> 00:33:21,340 effens ander manier. 757 00:33:21,340 --> 00:33:26,060 Wat is werklik aan die gang onder die kap toe ek verklaar iets soos 758 00:33:26,060 --> 00:33:30,410 kar begin is, of string s, Ek kry 'n wyser - 759 00:33:30,410 --> 00:33:33,090 wat gebeur om te wees vier grepe in die CS50 toestel 760 00:33:33,090 --> 00:33:34,410 en in 'n baie van rekenaars. 761 00:33:34,410 --> 00:33:36,008 En ek gaan hierdie s te bel. 762 00:33:36,008 --> 00:33:39,810 En dit het op die oomblik 'n onbekende waarde. 763 00:33:39,810 --> 00:33:43,900 >> Wanneer jy 'n veranderlike verklaar, tensy jy jouself sit 'n waarde daar, wat 764 00:33:43,900 --> 00:33:44,570 weet wat daar is. 765 00:33:44,570 --> 00:33:48,110 Dit kan 'n ewekansige volgorde van wees stukkies van die vorige uitvoering. 766 00:33:48,110 --> 00:33:52,490 So toe ek, in my lyn van die kode te doen kry string, en dan slaan die terugkeer 767 00:33:52,490 --> 00:33:54,800 waarde in s kry string een of ander manier - 768 00:33:54,800 --> 00:33:58,520 en sal ons uiteindelik terug skil hoe kry string werke, ken een of ander manier 'n 769 00:33:58,520 --> 00:34:00,480 skikking wat waarskynlik lyk 'n bietjie soos hierdie. 770 00:34:00,480 --> 00:34:05,390 H-E-L-L-O, agteroorskuisstreep nul. 771 00:34:05,390 --> 00:34:09,510 >> Kom ons veronderstel dat dit adres 123 net eerste konsekwentheid. 772 00:34:09,510 --> 00:34:13,000 So kry string opbrengste, in die uitgelig lyn daar, dit gee die 773 00:34:13,000 --> 00:34:15,000 die getal wat ons sê, 123. 774 00:34:15,000 --> 00:34:17,420 So, wat gaan regtig binnekant van s hier? 775 00:34:17,420 --> 00:34:26,590 >> Wel, wat gaan regtig binnekant van s is 123. 776 00:34:26,590 --> 00:34:29,250 Maar eerlik, ek kry 'n bietjie verwar deur al die adresse, 777 00:34:29,250 --> 00:34:30,320 al hierdie arbitrêre getalle. 778 00:34:30,320 --> 00:34:32,290 123, 124, 127. 779 00:34:32,290 --> 00:34:34,570 So laat ons eintlik vereenvoudig die wêreld 'n bietjie. 780 00:34:34,570 --> 00:34:38,800 >> Wanneer ons praat oor die wysers, eerlik, te ons mense, wat die heck omgee waar 781 00:34:38,800 --> 00:34:39,870 dinge in die geheue? 782 00:34:39,870 --> 00:34:41,080 Dit is heeltemal arbitrêr. 783 00:34:41,080 --> 00:34:43,370 Dit gaan afhang van hoe veel ram die gebruiker. 784 00:34:43,370 --> 00:34:46,590 Dit gaan afhang van wanneer die dag jy die program, miskien, en 785 00:34:46,590 --> 00:34:48,250 wat die invoer van die gebruiker gee. 786 00:34:48,250 --> 00:34:50,060 Ons is woning op onbelangrike besonderhede. 787 00:34:50,060 --> 00:34:54,230 >> So laat se abstrakte weg en sê dat, wanneer jy 'n lyn van die kode soos hierdie, 788 00:34:54,230 --> 00:34:57,320 kar ster s kry die terugkeer waarde van get string. 789 00:34:57,320 --> 00:35:02,720 Hoekom doen ons nie in plaas daarvan net trek wat ons hou die roeping om 'n wyser as al is dit 790 00:35:02,720 --> 00:35:04,140 wys na iets? 791 00:35:04,140 --> 00:35:07,000 So ek eis nou dat s up daar is 'n wyser - 792 00:35:07,000 --> 00:35:08,480 onder die enjinkap is dit 'n adres. 793 00:35:08,480 --> 00:35:11,330 Maar dit is nie net verwys na die eerste byte in die 794 00:35:11,330 --> 00:35:12,780 string wat al teruggekeer. 795 00:35:12,780 --> 00:35:16,710 >> As ek nou terug te keer na die kode hier, wat gaan aan in hierdie lyn? 796 00:35:16,710 --> 00:35:20,020 Wel, in hierdie uitgelig lyn nou, Ek glo 'n ander verklaar 797 00:35:20,020 --> 00:35:21,070 veranderlike genoem t. 798 00:35:21,070 --> 00:35:25,700 Maar dit is ook 'n wyser, so ek gaan om dit te trek as, in teorie, die presiese 799 00:35:25,700 --> 00:35:26,710 dieselfde grootte boks. 800 00:35:26,710 --> 00:35:28,160 En ek gaan om dit te noem t. 801 00:35:28,160 --> 00:35:33,500 >> En nou as ons gaan terug na die kode weer wanneer ek slaan s binnekant van t, 802 00:35:33,500 --> 00:35:36,920 wat moet ek tegnies om die binnekant van die t? 803 00:35:36,920 --> 00:35:39,350 Wel, tegnies, hierdie was die getal 123. 804 00:35:39,350 --> 00:35:42,270 So regtig ek moet skryf die getal 123 is daar. 805 00:35:42,270 --> 00:35:43,900 Maar laat ons neem dit hoër vlak. 806 00:35:43,900 --> 00:35:48,090 t, al is dit net 'n wyser, intuïtief, is net dat. 807 00:35:48,090 --> 00:35:49,800 Dit is al wat kort gestoor in daar. 808 00:35:49,800 --> 00:35:54,970 >> So nou in die laaste interessante lyne van die kode, toe ek eintlik gaan oor 809 00:35:54,970 --> 00:36:00,680 kapitaliseer die nul karakter in t, is wat gaan aan? 810 00:36:00,680 --> 00:36:06,310 Wel, t bracket zero is nou te wys wat karakter, vermoedelik? 811 00:36:06,310 --> 00:36:07,460 >> Dit is wys om te h. 812 00:36:07,460 --> 00:36:08,870 Omdat t bracket nul - 813 00:36:08,870 --> 00:36:12,490 onthou, dit is die ou sintaksis. t bracket nul beteken net as t is 'n string, t 814 00:36:12,490 --> 00:36:15,590 bracket nul beteken om die nul karakter in die krag. 815 00:36:15,590 --> 00:36:18,650 So wat dit regtig beteken word na hierdie verskeidenheid - 816 00:36:18,650 --> 00:36:21,520 En ja, kan dit wees 123, hierdie dalk wees 124. 817 00:36:21,520 --> 00:36:22,790 Maar dit is alles relatief, onthou. 818 00:36:22,790 --> 00:36:25,640 Wanneer praat oor 'n skikking, ons het die voordeel van praat 819 00:36:25,640 --> 00:36:27,000 relatiewe indekse. 820 00:36:27,000 --> 00:36:31,120 >> En so nou kan ons net aanvaar dat t bracket nul is h. 821 00:36:31,120 --> 00:36:35,090 So as ek roep 2 bo op dit, wat dit is regtig doen, is kapitaliseer 822 00:36:35,090 --> 00:36:38,290 die klein h in groot letters H. Maar natuurlik, wat s? 823 00:36:38,290 --> 00:36:41,010 Dit is wys om dieselfde darn string. 824 00:36:41,010 --> 00:36:44,200 >> So, dit is al wat daar gebeur in hierdie kode so ver. 825 00:36:44,200 --> 00:36:45,960 So, wat is dan die implikasie? 826 00:36:45,960 --> 00:36:48,300 Hoe los ons hierdie twee probleme? 827 00:36:48,300 --> 00:36:50,870 Hoe vergelyk ons ​​met die werklike snare? 828 00:36:50,870 --> 00:36:53,720 >> Wel intuïtief, hoe sou jy gaan oor die vergelyking van twee 829 00:36:53,720 --> 00:36:55,090 snare vir ware gelykheid? 830 00:36:55,090 --> 00:36:58,920 831 00:36:58,920 --> 00:37:00,750 >> Wat beteken dit as twee snare is gelyk? 832 00:37:00,750 --> 00:37:04,330 Duidelik nie dat hul adresse gelyk in die geheue, want dit is 'n lae 833 00:37:04,330 --> 00:37:06,590 vlak implementering detail. 834 00:37:06,590 --> 00:37:08,360 Al die karakters is dieselfde. 835 00:37:08,360 --> 00:37:12,810 So laat my stel, en laat my voer in die weergawe een van compare.c 836 00:37:12,810 --> 00:37:14,970 hier, so vergelyk-1.c. 837 00:37:14,970 --> 00:37:19,590 >> Laat my voor dat ons nog steeds 'n wyser genoem is, en die winkel in dit die 838 00:37:19,590 --> 00:37:20,610 terugkeer waarde van get string. 839 00:37:20,610 --> 00:37:21,750 Kom ons doen dieselfde ding met t. 840 00:37:21,750 --> 00:37:23,230 So geeneen van die kode is anders. 841 00:37:23,230 --> 00:37:25,420 Ek gaan 'n bietjie te voeg meer fout kontrole nou. 842 00:37:25,420 --> 00:37:29,390 So nou dat ons is soort van die skil terug hierdie lae in CS50 van wat 'n string 843 00:37:29,390 --> 00:37:33,520 eintlik is, ons moet meer anale oor die maak seker dat ons nie misbruik 844 00:37:33,520 --> 00:37:35,330 ongeldig waardes soos null. 845 00:37:35,330 --> 00:37:36,440 >> So ek gaan net om seker te maak. 846 00:37:36,440 --> 00:37:41,490 As s is nie gelyk aan nul en t nie gelyk nul, wat beteken ons is OK. 847 00:37:41,490 --> 00:37:44,460 Raak string nie skroef om een van daardie snare. 848 00:37:44,460 --> 00:37:51,270 En jy kan dalk nou dink, wat nie STR CMP vermoedelik te doen? 849 00:37:51,270 --> 00:37:52,000 String vergelyk. 850 00:37:52,000 --> 00:37:55,470 >> So as jy het program in Java voor, dit is soos die gelyk metode in die 851 00:37:55,470 --> 00:37:56,490 string klas. 852 00:37:56,490 --> 00:37:57,890 Maar vir dié van julle wat nog nie geprogrammeer voor, 853 00:37:57,890 --> 00:37:59,320 dit is net 'n C-funksie. 854 00:37:59,320 --> 00:38:02,180 Dit gebeur te kom in 'n lêer genaamd string.h. 855 00:38:02,180 --> 00:38:03,830 Dit is waar dit verklaar. 856 00:38:03,830 --> 00:38:05,110 >> En string vergelyk - 857 00:38:05,110 --> 00:38:07,530 Ek het eintlik vergeet die gebruik daarvan, maar never mind dat. 858 00:38:07,530 --> 00:38:10,470 Onthou dat ons dit kan doen man, roer vergelyk. 859 00:38:10,470 --> 00:38:12,590 En dit gaan om die ' Linux-programmeerders handleiding. 860 00:38:12,590 --> 00:38:14,060 En dit is, eerlik, 'n bietjie kripties. 861 00:38:14,060 --> 00:38:15,270 Maar ek kan hier sien dat, yep. 862 00:38:15,270 --> 00:38:17,570 Ek het string.h te sluit. 863 00:38:17,570 --> 00:38:20,590 >> En dit sê hier onder beskrywing, "het die string vergelyk funksie vergelyk 864 00:38:20,590 --> 00:38:24,560 Die twee stringe S1 en S2. "En S1 en S2 is glo die twee 865 00:38:24,560 --> 00:38:26,120 argumente geslaag in 866 00:38:26,120 --> 00:38:28,650 Ek het nie regtig onthou wat konst is, maar nou sien - 867 00:38:28,650 --> 00:38:31,480 en jy mag gesien het hierdie reeds toe jy gebruik om die man bladsye as jy 868 00:38:31,480 --> 00:38:32,390 het dit alles - 869 00:38:32,390 --> 00:38:36,220 dat kar ster is net sinoniem met 'n tou. 870 00:38:36,220 --> 00:38:40,440 >> So dit vergelyk die twee stringe, S1 en S2, en dit gee 'n heelgetal minder 871 00:38:40,440 --> 00:38:44,930 as of gelyk aan of groter as nul As S1 gevind is, onderskeidelik, te wees 872 00:38:44,930 --> 00:38:47,450 minder as of ooreenstem, of groter wees as S2. 873 00:38:47,450 --> 00:38:51,220 Dit is net 'n baie komplekse manier om te sê dat die snaar vergelyk opbrengste 874 00:38:51,220 --> 00:38:55,760 nul as twee stringe is intuïtief identies, karakter vir 875 00:38:55,760 --> 00:38:57,120 karakter vir karakter. 876 00:38:57,120 --> 00:38:59,970 >> Dit gee 'n negatiewe getal as s, alfabeties, is veronderstel 877 00:38:59,970 --> 00:39:01,010 om te kom voor t. 878 00:39:01,010 --> 00:39:05,300 Of stuur 'n positiewe getal as s veronderstel is om te kom na die t 879 00:39:05,300 --> 00:39:06,170 alfabeties. 880 00:39:06,170 --> 00:39:08,360 So met hierdie eenvoudige funksie, kon jy, byvoorbeeld, 'n sorteer 881 00:39:08,360 --> 00:39:09,770 hele klomp van die woorde? 882 00:39:09,770 --> 00:39:13,984 >> So in hierdie nuwe weergawe, ek gaan om voort te gaan en maak compare1. 883 00:39:13,984 --> 00:39:15,750 Dot streep vergelyk een. 884 00:39:15,750 --> 00:39:18,030 Ek sal tik in hallo in al laer geval. 885 00:39:18,030 --> 00:39:20,300 Ek gaan om te tik in Hello in al die klein weer. 886 00:39:20,300 --> 00:39:23,340 En gelukkig is dit nou besef Ek getik dieselfde ding. 887 00:39:23,340 --> 00:39:27,520 >> Intussen, as ek tik in hallo in laer geval en HELLO in hoofletters en 888 00:39:27,520 --> 00:39:29,710 vergelyk, ek getik verskillende dinge. 889 00:39:29,710 --> 00:39:32,530 Want nie net is die adresse anders, maar ons is te vergelyk 890 00:39:32,530 --> 00:39:35,350 verskillende karakters weer en weer. 891 00:39:35,350 --> 00:39:37,320 >> Wel, laat ons gaan en op te los een ander probleem nou. 892 00:39:37,320 --> 00:39:41,590 Laat my oopmaak weergawe een van afskrif, wat nou spreek 893 00:39:41,590 --> 00:39:42,900 hierdie kwessie soos volg. 894 00:39:42,900 --> 00:39:45,650 En hierdie een gaan om te kyk 'n bietjie meer ingewikkeld. 895 00:39:45,650 --> 00:39:49,320 Maar as jy dink oor die probleem wat ons nodig het op te los, hopelik sal dit 896 00:39:49,320 --> 00:39:51,870 duidelik in net 'n oomblik. 897 00:39:51,870 --> 00:39:57,280 >> So die eerste reël, teken begin t, in leketaal kan iemand voorstel 898 00:39:57,280 --> 00:39:59,450 wat hierdie lyn hier beteken? 899 00:39:59,450 --> 00:40:01,050 Kar ster t, wat gaan dit doen? 900 00:40:01,050 --> 00:40:06,660 901 00:40:06,660 --> 00:40:07,210 >> Goed. 902 00:40:07,210 --> 00:40:09,500 Skep 'n verwysing na 'n paar plek in die geheue. 903 00:40:09,500 --> 00:40:10,930 En laat my verfyn dit 'n bietjie. 904 00:40:10,930 --> 00:40:17,180 Verklaar 'n veranderlike wat die stoor van die adres van 'n paar kar in die geheue, net 905 00:40:17,180 --> 00:40:18,480 om 'n bietjie meer behoorlike. 906 00:40:18,480 --> 00:40:21,210 >> OK, so nou op die regterkant, het ek nog nooit gesien dat een van hierdie funksies 907 00:40:21,210 --> 00:40:22,660 voor, malloc. 908 00:40:22,660 --> 00:40:26,980 Maar wat sou dit beteken? 909 00:40:26,980 --> 00:40:28,050 Toekenning van die geheue. 910 00:40:28,050 --> 00:40:29,410 Geheue toekenning. 911 00:40:29,410 --> 00:40:33,050 >> So dit blyk uit, tot nou toe, ons het nie regtig 'n kragtige manier 912 00:40:33,050 --> 00:40:36,210 vra die bedryfstelsel, gee my 'n paar geheue. 913 00:40:36,210 --> 00:40:39,980 Inteendeel, ons het nou 'n funksie genoem malloc wat doen presies dit. 914 00:40:39,980 --> 00:40:42,960 Selfs al is dit 'n bietjie van 'n afleiding op die oomblik, sien dat in 915 00:40:42,960 --> 00:40:46,200 tussen die twee hakies is net gaan om 'n getal wees. 916 00:40:46,200 --> 00:40:48,510 Waar ek getik in vraag punte kan 'n getal wees. 917 00:40:48,510 --> 00:40:51,020 >> En dat die getal beteken, gee my 10 grepe. 918 00:40:51,020 --> 00:40:52,320 Gee my 20 grepe. 919 00:40:52,320 --> 00:40:53,820 Gee my 100 grepe. 920 00:40:53,820 --> 00:40:56,500 En malloc sal sy bes doen om vra die bedryfstelsel - 921 00:40:56,500 --> 00:40:57,630 Linux, in hierdie geval - 922 00:40:57,630 --> 00:40:59,630 hey, is hul 100 grepe RAM beskikbaar? 923 00:40:59,630 --> 00:41:04,320 As dit so is, terug te keer dié grepe aan my deur die terugkeer van die adres van die wat van 924 00:41:04,320 --> 00:41:06,610 diegene grepe, miskien? 925 00:41:06,610 --> 00:41:07,610 Die heel eerste een. 926 00:41:07,610 --> 00:41:10,460 >> So ook hier - en dit is oorheersend in C, enige tyd wat jy 927 00:41:10,460 --> 00:41:11,680 hantering van adresse? 928 00:41:11,680 --> 00:41:15,830 Jy is byna altyd die hantering van die eerste sodanige adres, maak nie saak hoe groot 929 00:41:15,830 --> 00:41:19,490 'n stuk van die geheue wat jy word terug oorhandig, om so te praat. 930 00:41:19,490 --> 00:41:20,880 >> So laat ons duik in hier. 931 00:41:20,880 --> 00:41:23,940 Ek probeer om te wys hoe baie grepe, presies? 932 00:41:23,940 --> 00:41:24,080 Goed. 933 00:41:24,080 --> 00:41:26,090 String lengte van s - laat se doen 'n konkrete voorbeeld. 934 00:41:26,090 --> 00:41:30,700 Indien s hallo, H-E-L-L-O, wat is die string lengte van s, natuurlik? 935 00:41:30,700 --> 00:41:32,010 So dit is vyf. 936 00:41:32,010 --> 00:41:34,590 Maar ek is besig met 'n plus 1 op daardie, hoekom? 937 00:41:34,590 --> 00:41:37,700 Hoekom wil ek ses grepe in plaas van vyf? 938 00:41:37,700 --> 00:41:38,790 Die nul karakter. 939 00:41:38,790 --> 00:41:41,210 >> Ek wil nie te laat uit hierdie spesiale null karakter. 940 00:41:41,210 --> 00:41:45,160 Want as ek 'n kopie van Hello and doen net H-E-L-L-O, maar ek het nie 941 00:41:45,160 --> 00:41:50,160 daardie spesiale karakter, die rekenaar miskien nie, deur die kans, 'n agteroorskuisstreep 942 00:41:50,160 --> 00:41:51,730 nul daar vir my. 943 00:41:51,730 --> 00:41:55,570 En so, as ek probeer om uit te vind die lengte van die kopie, sou ek gedink het dat 944 00:41:55,570 --> 00:41:59,360 Dit is 20 karakters lank wees, of 'n miljoen karakters lank as ek nooit net gebeur 945 00:41:59,360 --> 00:42:01,050 'n agteroorskuisstreep nul te tref. 946 00:42:01,050 --> 00:42:05,780 >> Dus moet ons ses grepe te stoor H-E-L-L-O, agteroorskuisstreep nul. 947 00:42:05,780 --> 00:42:07,870 En dan is dit net te wees super anale. 948 00:42:07,870 --> 00:42:10,700 Veronderstel dat ek vergeet wat die grootte van 'n kar is. 949 00:42:10,700 --> 00:42:12,020 Ons hou aan sê dit is een byte. 950 00:42:12,020 --> 00:42:12,860 En dit is gewoonlik. 951 00:42:12,860 --> 00:42:15,425 In teorie, kan dit iets wees anders, op 'n ander Mac of 'n 952 00:42:15,425 --> 00:42:16,250 verskillende PC. 953 00:42:16,250 --> 00:42:19,650 >> So dit blyk daar is dié operateur genoem sizeof dat as jy verby dit die 954 00:42:19,650 --> 00:42:22,680 naam van 'n data tipe - soos kar, of int, of float - 955 00:42:22,680 --> 00:42:26,930 dit sal jou vertel, dinamiese, hoeveel grepe n kar neem op hierdie 956 00:42:26,930 --> 00:42:28,090 spesifieke rekenaar. 957 00:42:28,090 --> 00:42:31,360 >> So dit is net effektief soos om te sê tye 1 of 958 00:42:31,360 --> 00:42:32,440 keer niks. 959 00:42:32,440 --> 00:42:36,340 Maar ek doen dit net om te super anale wees, wat net in die geval 'n kar verskil 960 00:42:36,340 --> 00:42:40,610 op jou rekenaar teenoor my, op hierdie manier die wiskunde is altyd iets om te sien. 961 00:42:40,610 --> 00:42:43,720 >> Ten slotte, hier Ek is so for null, Dit is altyd 'n goeie praktyk - weer, 962 00:42:43,720 --> 00:42:44,920 enige tyd wat ons te doen het met wysers. 963 00:42:44,920 --> 00:42:47,520 As malloc was nie in staat om te gee my ses byes - wat 964 00:42:47,520 --> 00:42:49,210 onwaarskynlik, maar net in geval - 965 00:42:49,210 --> 00:42:50,730 terug een onmiddellik. 966 00:42:50,730 --> 00:42:53,290 En nou, voort te gaan en 'n afskrif die string soos volg. 967 00:42:53,290 --> 00:42:57,240 En dit is bekend sintaksis, al is dit in 'n ander rol. 968 00:42:57,240 --> 00:43:01,210 >> Ek gaan om voort te gaan en die string kry lengte van s en stoor dit in n. 969 00:43:01,210 --> 00:43:06,620 Ek is dan gaan Itereer van i gelyk nul tot en met n, 970 00:43:06,620 --> 00:43:08,410 groter as of gelyk aan. 971 00:43:08,410 --> 00:43:13,540 Sodat op elke iterasie, het ek die et karakter van s in die i 972 00:43:13,540 --> 00:43:15,380 karakter van t. 973 00:43:15,380 --> 00:43:18,190 >> So, wat is werklik aan die gang onder die enjinkap hier? 974 00:43:18,190 --> 00:43:22,140 Wel, as dit, byvoorbeeld, is 's - 975 00:43:22,140 --> 00:43:26,400 en ek het getik in die woord H-E-L-L-O en daar is 'n agteroorskuisstreep nul. 976 00:43:26,400 --> 00:43:29,020 En weereens, dit is s wys hier. 977 00:43:29,020 --> 00:43:30,830 En hier is nou t. 978 00:43:30,830 --> 00:43:34,860 >> En dit is nou verwys na 'n afskrif van die geheue, reg? 979 00:43:34,860 --> 00:43:37,340 Malloc het my 'n hele stuk van die geheue. 980 00:43:37,340 --> 00:43:41,440 Ek weet nie eers wat is in enige van hierdie plekke. 981 00:43:41,440 --> 00:43:44,340 So ek gaan om te dink van hierdie as 'n hele klomp van die vraagtekens. 982 00:43:44,340 --> 00:43:50,190 >> Maar so gou as ek begin herhaling van nul op om deur middel van die lengte van s, t 983 00:43:50,190 --> 00:43:52,790 bracket nul en t bracket 1 - 984 00:43:52,790 --> 00:43:55,080 en ek sal dit nou op die oorhoofse - 985 00:43:55,080 --> 00:44:04,190 t bracket nul en s bracket nul beteken wat ek gaan word kopiëring 986 00:44:04,190 --> 00:44:09,875 iteratief h in hier, E-L-L-O. Plus, want ek het die plus 987 00:44:09,875 --> 00:44:12,370 1, agteroorskuisstreep nul. 988 00:44:12,370 --> 00:44:19,060 >> So nou in die geval van die vergelyk-1.c, in die einde, as ek die druk van die 989 00:44:19,060 --> 00:44:24,760 kapitalisasie van t, moet ons sien dat s is onveranderd. 990 00:44:24,760 --> 00:44:26,090 Laat my voort te gaan nou en doen dit. 991 00:44:26,090 --> 00:44:28,630 So maak copy1. 992 00:44:28,630 --> 00:44:30,860 Dot streep copy1. 993 00:44:30,860 --> 00:44:33,670 Ek gaan om te tik in hallo, Tik. 994 00:44:33,670 --> 00:44:37,430 En nou sien nie, net die kopie is gekapitaliseer. 995 00:44:37,430 --> 00:44:40,890 Omdat ek werklik het twee stukke van die geheue. 996 00:44:40,890 --> 00:44:44,390 >> Ongelukkig kan jy doen 'n paar mooi sleg en mooi gevaarlike dinge hier. 997 00:44:44,390 --> 00:44:49,290 Laat my toe om 'n voorbeeld hier en nou, Dit gee vir ons 'n voorbeeld van 'n paar 998 00:44:49,290 --> 00:44:51,540 verskillende lyne. 999 00:44:51,540 --> 00:44:56,040 Dus net intuïtief hier, die eerste reël van die kode, is int ster x, verklaar 1000 00:44:56,040 --> 00:44:57,340 'n veranderlike genaamd x. 1001 00:44:57,340 --> 00:44:58,810 En wat is die data tipe van daardie veranderlike? 1002 00:44:58,810 --> 00:45:01,820 1003 00:45:01,820 --> 00:45:04,290 Wat is die data tipe wat veranderlike? 1004 00:45:04,290 --> 00:45:06,980 Dit was nie die fotonische lewe. 1005 00:45:06,980 --> 00:45:08,350 >> Die data tipe is int ster. 1006 00:45:08,350 --> 00:45:12,600 So wat beteken dit? x sal slaan die adres van 'n int. 1007 00:45:12,600 --> 00:45:13,520 Eenvoudig soos dit. 1008 00:45:13,520 --> 00:45:16,220 Y gaan die te stoor adres van 'n int. 1009 00:45:16,220 --> 00:45:18,390 Wat is die derde lyn van die kode daar? 1010 00:45:18,390 --> 00:45:21,850 Dit is die toekenning van hoeveel grepe, waarskynlik? 1011 00:45:21,850 --> 00:45:22,350 Vier. 1012 00:45:22,350 --> 00:45:25,460 As gevolg van die grootte van 'n int is algemeen vier, malloc van vier gee 1013 00:45:25,460 --> 00:45:29,950 my teruggebring na die adres van 'n stuk van geheue, die eerste van wie grepe is 1014 00:45:29,950 --> 00:45:32,110 gestoor word nou in x. 1015 00:45:32,110 --> 00:45:34,410 >> Nou kan ons beweeg 'n bietjie vinniger. 1016 00:45:34,410 --> 00:45:35,760 Star x beteken wat? 1017 00:45:35,760 --> 00:45:38,480 1018 00:45:38,480 --> 00:45:42,590 Dit beteken dat na daardie adres en sit watter getal is daar? 1019 00:45:42,590 --> 00:45:43,870 Plaas die nommer 42 is daar. 1020 00:45:43,870 --> 00:45:47,590 Star y beteken na wat is op y en het die getal 13 is daar. 1021 00:45:47,590 --> 00:45:48,600 >> Maar wag 'n minuut. 1022 00:45:48,600 --> 00:45:51,640 Wat is in y op die oomblik? 1023 00:45:51,640 --> 00:45:54,950 Wat adres is y stoor? 1024 00:45:54,950 --> 00:45:55,770 Ons weet nie, reg? 1025 00:45:55,770 --> 00:45:59,230 Ons het nog nie een keer gebruik om die opdrag operateur wat y. 1026 00:45:59,230 --> 00:46:03,370 So y soos verklaar op die tweede lyn van kode is net 'n paar vullis waarde, 'n groot 1027 00:46:03,370 --> 00:46:04,760 vraagteken so te praat. 1028 00:46:04,760 --> 00:46:07,230 Dit kan lukraak wys om iets in die geheue, wat 1029 00:46:07,230 --> 00:46:08,340 is oor die algemeen sleg. 1030 00:46:08,340 --> 00:46:13,540 >> So gou as wat ons getref dat die lyn is daar, ster y is gelyk aan 13, iets wat sleg is, 1031 00:46:13,540 --> 00:46:17,220 iets wat baie sleg is ongeveer om te gebeur met Binky. 1032 00:46:17,220 --> 00:46:25,810 So laat ons sien wat gaan aan die einde gebeur hier Binky in hierdie minuut 1033 00:46:25,810 --> 00:46:26,200 of so lyk. 1034 00:46:26,200 --> 00:46:26,490 >> [Video speel] 1035 00:46:26,490 --> 00:46:26,745 >> Hey, Binky. 1036 00:46:26,745 --> 00:46:27,000 Wakker. 1037 00:46:27,000 --> 00:46:29,296 Dit is tyd vir pret wyser. 1038 00:46:29,296 --> 00:46:30,680 >> -Wat is dit? 1039 00:46:30,680 --> 00:46:31,980 Meer inligting oor die riglyne? 1040 00:46:31,980 --> 00:46:34,010 O, goodie. 1041 00:46:34,010 --> 00:46:37,220 >> -Wel, om te begin, ek dink ons ​​is gaan 'n paar wenke te nodig het. 1042 00:46:37,220 --> 00:46:37,930 >> -OK. 1043 00:46:37,930 --> 00:46:41,650 Hierdie kode ken twee wysers wat kan verwys na heelgetalle. 1044 00:46:41,650 --> 00:46:43,760 >> -OK, goed, ek sien die twee wysers. 1045 00:46:43,760 --> 00:46:45,850 Maar dit lyk asof hulle nie te wees nie wys na iets. 1046 00:46:45,850 --> 00:46:46,490 >> -Dit is reg. 1047 00:46:46,490 --> 00:46:48,630 Aanvanklik, wysers doen nie wys na iets. 1048 00:46:48,630 --> 00:46:51,700 Die dinge wat hulle wys te word geroep pointees, en die opstel van hulle op 'n 1049 00:46:51,700 --> 00:46:52,850 aparte stap. 1050 00:46:52,850 --> 00:46:53,740 >> -O, regs, regs. 1051 00:46:53,740 --> 00:46:54,500 Ek het geweet dat. 1052 00:46:54,500 --> 00:46:56,270 Die pointees is geskei. 1053 00:46:56,270 --> 00:46:58,553 So, hoe ken jy 'n pointee? 1054 00:46:58,553 --> 00:46:59,480 >> -OK. 1055 00:46:59,480 --> 00:47:03,707 Wel, hierdie kode ken 'n nuwe heelgetalle pointee, en hierdie deel sit x 1056 00:47:03,707 --> 00:47:05,520 om aan te dui nie. 1057 00:47:05,520 --> 00:47:06,760 >> Hey, wat lyk beter. 1058 00:47:06,760 --> 00:47:08,520 So maak dit iets te doen. 1059 00:47:08,520 --> 00:47:09,530 >> -OK. 1060 00:47:09,530 --> 00:47:14,110 Ek sal die wyser x dereference te stoor die getal 42 in sy pointee. 1061 00:47:14,110 --> 00:47:17,660 Vir hierdie truuk, sal ek moet my magie muur van ontwysing. 1062 00:47:17,660 --> 00:47:20,695 >> -Jou towerstaffie van ontwysing? 1063 00:47:20,695 --> 00:47:22,632 Uh, dit is groot. 1064 00:47:22,632 --> 00:47:24,620 >> -Dit is wat die kode lyk. 1065 00:47:24,620 --> 00:47:27,526 Ek sal net die opstel van die aantal, en - 1066 00:47:27,526 --> 00:47:28,250 >> Hey, kyk. 1067 00:47:28,250 --> 00:47:29,680 Daar gaan dit. 1068 00:47:29,680 --> 00:47:34,520 So doen 'n dereference op x volg die pyl sy pointee om toegang te verkry. 1069 00:47:34,520 --> 00:47:36,690 In hierdie geval, na 42 stoor in daar. 1070 00:47:36,690 --> 00:47:40,890 Hey, probeer om dit te gebruik om die getal te stoor 13 deur die ander wyser, y. 1071 00:47:40,890 --> 00:47:42,125 >> -OK. 1072 00:47:42,125 --> 00:47:46,810 Ek sal net gaan hier om y en Kry die nommer 13 opgestel. 1073 00:47:46,810 --> 00:47:50,890 En dan neem die muur van ontwysing en net - 1074 00:47:50,890 --> 00:47:52,430 whoa! 1075 00:47:52,430 --> 00:47:53,030 >> -O, hey. 1076 00:47:53,030 --> 00:47:54,610 Dit het nie gewerk nie. 1077 00:47:54,610 --> 00:47:58,200 Sê, Binky, dink ek nie die ontwysing y is 'n goeie idee, 1078 00:47:58,200 --> 00:48:01,370 omdat die opstel van die pointee is 'n aparte stap. 1079 00:48:01,370 --> 00:48:03,460 En ek dink nie ons sal ooit het dit gedoen. 1080 00:48:03,460 --> 00:48:03,810 >> -Hmm. 1081 00:48:03,810 --> 00:48:05,160 Goeie punt. 1082 00:48:05,160 --> 00:48:07,410 >> -Ja, ons het toegeken die wyser y. 1083 00:48:07,410 --> 00:48:10,045 Maar ons het nooit dit te verwys na 'n pointee. 1084 00:48:10,045 --> 00:48:10,490 >> -Hmm. 1085 00:48:10,490 --> 00:48:12,170 Baie oplettend. 1086 00:48:12,170 --> 00:48:13,790 >> Hey, jy soek goed daar, Binky. 1087 00:48:13,790 --> 00:48:16,920 Kan jy los dit so dat y punte aan dieselfde pointee as x? 1088 00:48:16,920 --> 00:48:17,810 >> -Seker nie. 1089 00:48:17,810 --> 00:48:20,300 Ek sal gebruik om my towerstaffie van wyser opdrag. 1090 00:48:20,300 --> 00:48:22,240 >> -Is dit gaan 'n probleem soos voor? 1091 00:48:22,240 --> 00:48:22,665 >> -No. 1092 00:48:22,665 --> 00:48:24,300 Dit beteken nie raak die pointees. 1093 00:48:24,300 --> 00:48:27,880 Dit verander net een wyser te wys na dieselfde ding as 'n ander. 1094 00:48:27,880 --> 00:48:28,970 >> -O, ek sien. 1095 00:48:28,970 --> 00:48:31,730 Nou y punte na dieselfde plek as x. 1096 00:48:31,730 --> 00:48:32,450 So wag. 1097 00:48:32,450 --> 00:48:33,490 Nou y is vasgestel. 1098 00:48:33,490 --> 00:48:34,630 Dit het 'n pointee. 1099 00:48:34,630 --> 00:48:36,520 Sodat jy kan probeer om die muur van ontwysing weer 1100 00:48:36,520 --> 00:48:39,200 die 13 te stuur oor. 1101 00:48:39,200 --> 00:48:39,840 >> -OK. 1102 00:48:39,840 --> 00:48:41,570 Hier gaan ons. 1103 00:48:41,570 --> 00:48:42,870 >> Hey, kyk na dit. 1104 00:48:42,870 --> 00:48:44,320 Nou ontwysing werke op y. 1105 00:48:44,320 --> 00:48:47,020 En omdat die wysers deel dat 'n mens pointee, het hulle 1106 00:48:47,020 --> 00:48:48,585 albei sien die 13. 1107 00:48:48,585 --> 00:48:49,040 >> -Ja. 1108 00:48:49,040 --> 00:48:49,670 Deel. 1109 00:48:49,670 --> 00:48:50,380 Wat ook al. 1110 00:48:50,380 --> 00:48:52,290 So gaan ons skakelaar plekke nou? 1111 00:48:52,290 --> 00:48:52,970 >> -O, kyk. 1112 00:48:52,970 --> 00:48:54,150 Ons is uit die tyd. 1113 00:48:54,150 --> 00:48:55,200 >> -Maar - 1114 00:48:55,200 --> 00:48:57,060 >> -Net onthou om die drie wyser reëls. 1115 00:48:57,060 --> 00:49:00,100 Nommer een, die basiese struktuur is dat jy 'n muis. 1116 00:49:00,100 --> 00:49:02,170 En dit wys oor 'n pointee. 1117 00:49:02,170 --> 00:49:04,160 Maar die muis en pointee is geskei. 1118 00:49:04,160 --> 00:49:06,460 En die algemene fout is om te die opstel van 'n wyser nie, maar om 1119 00:49:06,460 --> 00:49:08,540 vergeet om te kry 'n pointee. 1120 00:49:08,540 --> 00:49:12,460 >> Nommer twee, wyser ontwysing begin op die muis en volg sy 1121 00:49:12,460 --> 00:49:14,570 pyl oor sy pointee om toegang te verkry. 1122 00:49:14,570 --> 00:49:18,640 Soos ons almal weet, dit werk net as daar is 'n pointee, wat kry terug na 1123 00:49:18,640 --> 00:49:19,790 Reël nommer een. 1124 00:49:19,790 --> 00:49:23,670 >> Nommer drie, wyser opdrag in beslag neem 'n wyser en veranderinge om dit te wys op 1125 00:49:23,670 --> 00:49:25,850 dieselfde pointee as 'n wyser. 1126 00:49:25,850 --> 00:49:27,840 So na die opdrag, die twee wysers sal 1127 00:49:27,840 --> 00:49:29,430 wys na dieselfde pointee. 1128 00:49:29,430 --> 00:49:31,600 Soms is die naam wat deel. 1129 00:49:31,600 --> 00:49:33,430 En dit is al wat daar is om dit, regtig. 1130 00:49:33,430 --> 00:49:33,840 Bye bye nou. 1131 00:49:33,840 --> 00:49:34,300 >> [Einde video-vertoning] 1132 00:49:34,300 --> 00:49:36,940 >> David Malan: So meer op wysers, Meer oor Binky volgende week. 1133 00:49:36,940 --> 00:49:38,190 Ons sal sien dat jy op Maandag. 1134 00:49:38,190 --> 00:49:42,187