1 00:00:00,000 --> 00:00:11,320 2 00:00:11,320 --> 00:00:13,260 >> DAVID Malan: Saluton, kaj bonvenigas reen al CS50. 3 00:00:13,260 --> 00:00:14,860 Do tio estas la fino de semajno kvar. 4 00:00:14,860 --> 00:00:16,680 Nur unu anonco unua. 5 00:00:16,680 --> 00:00:19,600 Do la tn kvina lundo estas veni tien venas lundon. 6 00:00:19,600 --> 00:00:22,800 Ĉi tiu estas la ŝanco por ŝanĝi de SAT / UNSAT al letero grado, aŭ de 7 00:00:22,800 --> 00:00:24,130 letero lernojaro SAT / UNSAT. 8 00:00:24,130 --> 00:00:27,130 Annoyingly, tiu procezo faras postulas subskribo, ĉar vi devas plenigi 9 00:00:27,130 --> 00:00:28,770 unu el tiuj rozoj add / guto formoj. 10 00:00:28,770 --> 00:00:31,680 >> Ĉar teknike, la SAT / UNSAT versio kaj la letero lernojaro versio 11 00:00:31,680 --> 00:00:33,320 havas malsamajn katalogo nombroj. 12 00:00:33,320 --> 00:00:34,240 Sed ne estas granda interkonsento. 13 00:00:34,240 --> 00:00:36,620 Nur venis al mi aŭ al prirabu aŭ al Lauren en ajna punkto. 14 00:00:36,620 --> 00:00:39,550 Aŭ retpoŝtu al ni se vi ne havas la speco de paperoj vi bezonas hodiaŭ, kaj ni 15 00:00:39,550 --> 00:00:43,410 Estos certe helpos vin preni prizorgis ke antaŭ lundo. 16 00:00:43,410 --> 00:00:45,780 >> Bone, do hodiaŭ - 17 00:00:45,780 --> 00:00:47,630 fakte, ekzistas iom de eĥo. 18 00:00:47,630 --> 00:00:51,070 Ĉu ni tono min iomete? 19 00:00:51,070 --> 00:00:51,730 Akcepti. 20 00:00:51,730 --> 00:00:54,850 Do hodiaŭ, ni enkondukas temon konata kiel montriloj. 21 00:00:54,850 --> 00:00:57,770 Kaj mi agnoskas ke tio estas unu el la pli kompleksaj temoj kiuj ni emas 22 00:00:57,770 --> 00:01:00,960 kovri en ĉi tiu klaso, aŭ vere neniu enkonduka kurso, kiu uzas C. 23 00:01:00,960 --> 00:01:05,510 >> Sed gardu mian vorton por ĝi, aparte se via menso sentas iom pli fleksita 24 00:01:05,510 --> 00:01:07,100 hodiaŭ kaj en la semajnoj venonta. 25 00:01:07,100 --> 00:01:10,340 Ĝi ne estas reprezentanto de vi ricevas iu malbona en ĉi tio nur signifas ke 26 00:01:10,340 --> 00:01:13,360 ĝi estas aparte kompleksa temo ke mi promesas, kelkajn semajnojn 27 00:01:13,360 --> 00:01:17,610 sekve, similos tro okulfrape simpla en retrospekta. 28 00:01:17,610 --> 00:01:18,720 >> Mi ankoraŭ memoras ĝis la nuna tago. 29 00:01:18,720 --> 00:01:22,190 Mi sidis en Elliott Dining Hall, sidis apud mia TF Nishat Mehta, 30 00:01:22,190 --> 00:01:24,070 kiu estis loĝanto de Elliott domo. 31 00:01:24,070 --> 00:01:26,340 Kaj por iu kialo, tiu temon nur klakoj. 32 00:01:26,340 --> 00:01:29,430 Kiu estas diri, ke mi tro baraktis kun ĝi por iu kvanto de tempo, sed mi 33 00:01:29,430 --> 00:01:33,610 faros mian plejeblon por helpi eviti tiajn lukto kun temo kiu finfine 34 00:01:33,610 --> 00:01:34,580 estas sufiĉe potenca. 35 00:01:34,580 --> 00:01:37,350 >> Fakte, unu el la temoj ni diskutos en la semajnoj veni estas ke 36 00:01:37,350 --> 00:01:41,130 de sekureco, kaj kiel vi povas reale eksplodi maŝinoj en manieroj 37 00:01:41,130 --> 00:01:42,320 kiu ne estis intencita. 38 00:01:42,320 --> 00:01:45,850 Kaj tiuj ekspluatadoj estas tipe la rezulto de cimoj, erarojn, ke ni 39 00:01:45,850 --> 00:01:49,740 homoj faras por ne kompreni iujn de la subkuŝanta realigo 40 00:01:49,740 --> 00:01:52,250 detaloj vojo kiu programoj estas realigitaj. 41 00:01:52,250 --> 00:01:55,410 >> Nun fari ĉi ŝajnas des pli uzanto amika, mi pensis ke mi volonte ludos 10 42 00:01:55,410 --> 00:01:59,680 dua antaŭvido de iom Claymation figuro nomita Binky kiu estis alportita al 43 00:01:59,680 --> 00:02:03,020 vivo de nia amiko en Stanford, profesoro Nick Parlante. 44 00:02:03,020 --> 00:02:06,753 Do permesu al mi doni al vi tiun teaser de Binky tie. 45 00:02:06,753 --> 00:02:09,520 >> [VIDEO reprodukto] 46 00:02:09,520 --> 00:02:10,380 >> -He, Binky. 47 00:02:10,380 --> 00:02:11,050 Veki. 48 00:02:11,050 --> 00:02:13,610 Estas tempo por puntero amuzo. 49 00:02:13,610 --> 00:02:14,741 >> -Kio estas tio? 50 00:02:14,741 --> 00:02:16,440 Lernu pri indikoj? 51 00:02:16,440 --> 00:02:17,928 Ho, goodie. 52 00:02:17,928 --> 00:02:18,920 >> [FINO reprodukto de vídeo] 53 00:02:18,920 --> 00:02:20,670 >> DAVID Malan: Tio estas Stanford komputiko. 54 00:02:20,670 --> 00:02:23,194 Do pli en la venonta. 55 00:02:23,194 --> 00:02:24,930 >> [Aplaŭdo] 56 00:02:24,930 --> 00:02:26,660 >> DAVID Malan: Pardonu, Nick. 57 00:02:26,660 --> 00:02:30,680 >> Do memoru ke lasta tempo ni finis la ĉi tio vere ekscita cliffhanger 58 00:02:30,680 --> 00:02:32,960 per kio tiu funkcio simple ne funkcias. 59 00:02:32,960 --> 00:02:34,960 Almenaŭ intuicie, li sentis kiel ĝi devus funkcii. 60 00:02:34,960 --> 00:02:37,600 Simple interŝanĝi la valorojn de du entjeroj. 61 00:02:37,600 --> 00:02:40,915 Sed memoru, ke kiam ni presas el la originalaj valoroj en ĉefa, kaj 62 00:02:40,915 --> 00:02:44,210 du, ili ankoraŭ unu kaj du kaj ne du kaj unu. 63 00:02:44,210 --> 00:02:46,070 >> Do mi vere ŝanĝi super la aparato. 64 00:02:46,070 --> 00:02:50,180 Kaj mi redaktis iom de skeletaj kodo antaŭi tie, kie mi asertas ke x 65 00:02:50,180 --> 00:02:52,500 estos 1, y estos 2. 66 00:02:52,500 --> 00:02:54,810 Mi tiam presi ambaŭ de liaj valorojn kun presitaj f. 67 00:02:54,810 --> 00:02:57,540 >> Mi do asertas cxi tie, ke Ni tuj interŝanĝi ilin. 68 00:02:57,540 --> 00:03:00,800 Mi lasis malplenan lokon tie por ni plenigi hodiaŭ en nur momento. 69 00:03:00,800 --> 00:03:03,380 Tiam, mi iros al postuli, ke la du variabloj estas interŝanĝitaj. 70 00:03:03,380 --> 00:03:04,770 Tiam mi tuj presi ilin denove. 71 00:03:04,770 --> 00:03:07,090 Kaj tial mi esperas, mi devus vidi 1, 2. 72 00:03:07,090 --> 00:03:07,380 2, 1. 73 00:03:07,380 --> 00:03:09,830 Tio estas la super simpla celon nun. 74 00:03:09,830 --> 00:03:12,430 >> Nu do kiel ni irad swapping du variabloj? 75 00:03:12,430 --> 00:03:17,220 Nu, se mi proponas tie ĉi, ke tiuj tasoj povus reprezenti memoro en komputilo. 76 00:03:17,220 --> 00:03:19,070 Jen kelkaj pikoj, ĉi Estas alia malmultaj mordas. 77 00:03:19,070 --> 00:03:23,260 Ĉu ni volontulo veni tien kaj miksi nin iuj trinkaĵoj, se familiara? 78 00:03:23,260 --> 00:03:23,920 Venu supren. 79 00:03:23,920 --> 00:03:24,815 Kio estas via nomo? 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 Venu supren, Jess. 83 00:03:26,540 --> 00:03:29,180 Se vi ne gravas, ni devas meti la Google Vitra sur vi tiel ni povas 84 00:03:29,180 --> 00:03:30,430 senmortigi ĉi. 85 00:03:30,430 --> 00:03:32,800 86 00:03:32,800 --> 00:03:34,670 OK, vitro. 87 00:03:34,670 --> 00:03:37,250 Gravuri video. 88 00:03:37,250 --> 00:03:43,103 Kaj Bone, ni estas bonaj por iri kun Jess tie. 89 00:03:43,103 --> 00:03:43,810 Ĉio bone. 90 00:03:43,810 --> 00:03:45,120 Nice to meet you. 91 00:03:45,120 --> 00:03:47,720 >> Do kion mi ŝatus vi faras ĉi tie - se vi povus, sufiĉe rapide - 92 00:03:47,720 --> 00:03:51,040 nur verŝas ni duono glason da oranĝa suko kaj duono glason de lakto, 93 00:03:51,040 --> 00:03:55,710 reprezenti efike la nombroj 1 en unu taso kaj 2 en la aliaj taso. 94 00:03:55,710 --> 00:04:01,380 95 00:04:01,380 --> 00:04:02,630 >> Ĉi tuj estos bona materialo. 96 00:04:02,630 --> 00:04:04,910 97 00:04:04,910 --> 00:04:05,860 >> Jess: Pardonu. 98 00:04:05,860 --> 00:04:06,330 >> DAVID Malan: Ne, ne. 99 00:04:06,330 --> 00:04:08,703 Ĝi estas okej. 100 00:04:08,703 --> 00:04:10,120 Nice. 101 00:04:10,120 --> 00:04:12,950 Bone, do ni havas kvar bitokoj valoro de oranĝa suko. 102 00:04:12,950 --> 00:04:14,460 Ni nomis ĝin la valoro 1. 103 00:04:14,460 --> 00:04:16,579 Nun alia kvar bajtojn valoro de lakto. 104 00:04:16,579 --> 00:04:18,519 Nomos gxin taksos 2. 105 00:04:18,519 --> 00:04:20,440 Do x kaj y, respektive. 106 00:04:20,440 --> 00:04:23,450 >> Bone, do nun se la tasko ĉe manon - por vi, Jess, antaŭ ĉiuj 107 00:04:23,450 --> 00:04:24,270 de via samklasanoj - 108 00:04:24,270 --> 00:04:28,510 Estas por interŝanĝi la valorojn de x kaj y tiaj ke ni deziras ke la suko de oranĝo en la 109 00:04:28,510 --> 00:04:32,070 aliaj kaliko kaj de la lakto en ĉi tiu kaliko, kiel povus vin - antaŭ vi reale fari 110 00:04:32,070 --> 00:04:34,020 it - irad faras tion? 111 00:04:34,020 --> 00:04:35,220 >> OK, saĝaj decido. 112 00:04:35,220 --> 00:04:36,340 Do vi bezonas iom pli da memoro. 113 00:04:36,340 --> 00:04:38,190 Do ni rezervu temporal taso, se vi volas. 114 00:04:38,190 --> 00:04:40,540 Kaj nun procedi por interŝanĝi x kaj y. 115 00:04:40,540 --> 00:04:52,950 116 00:04:52,950 --> 00:04:53,530 >> Bonega. 117 00:04:53,530 --> 00:04:54,420 Do tre bone farita. 118 00:04:54,420 --> 00:04:55,670 Thank you so much, Jess. 119 00:04:55,670 --> 00:04:59,520 120 00:04:59,520 --> 00:05:00,020 Jen vi estas. 121 00:05:00,020 --> 00:05:01,950 Iom memoraĵo. 122 00:05:01,950 --> 00:05:04,350 >> Bone, do evidente, super simplan ideon. 123 00:05:04,350 --> 00:05:07,500 Tute intuicia ke ni bezonas iom pli stokado spaco - en ĉi tiu formo, 124 00:05:07,500 --> 00:05:09,750 taso - se ni vere volas interŝanĝi tiujn du variabloj. 125 00:05:09,750 --> 00:05:11,110 Do ni faru precize tion. 126 00:05:11,110 --> 00:05:14,330 Ĝis ĉi tie en inter kie mi asertas mi tuj estos faranta iu swapping, mi instruos vin 127 00:05:14,330 --> 00:05:15,720 antaŭeniri kaj deklari temp. 128 00:05:15,720 --> 00:05:17,980 Kaj Mi starigis gxin egala al, ni diru, x. 129 00:05:17,980 --> 00:05:21,110 >> Tiam mi tuj ŝanĝos la valoro de x nur kiel Jess faris tie kun la 130 00:05:21,110 --> 00:05:23,200 lakto kaj oranĝa suko esti egala al y. 131 00:05:23,200 --> 00:05:27,460 Kaj mi tuj ŝanĝos y al esti egala por ne x, ĉar nun ni estus 132 00:05:27,460 --> 00:05:29,530 metitaj en rondo, sed prefere temp. 133 00:05:29,530 --> 00:05:33,170 Kie mi provizore - aŭ kie Jess provizore metis la oranĝa suko 134 00:05:33,170 --> 00:05:35,460 antaŭ clobbering ke kaliko kun la lakto. 135 00:05:35,460 --> 00:05:37,250 >> Do lasu min iri antaŭen nun kaj faros tion. 136 00:05:37,250 --> 00:05:39,210 Ĝi nomiĝas noswap.c. 137 00:05:39,210 --> 00:05:41,190 Kaj nun mi kuros sen interŝanĝa. 138 00:05:41,190 --> 00:05:43,910 Kaj efektive mi vidas, se mi pligrandigi la fenestro iomete, por ke 139 00:05:43,910 --> 00:05:45,160 x estas 1, y estas 2. 140 00:05:45,160 --> 00:05:47,230 Kaj tiam x estas 2, y estas 1. 141 00:05:47,230 --> 00:05:51,910 >> Sed memoru ke lunde ni faris tion, iom malsame per kiu mi 142 00:05:51,910 --> 00:05:56,760 anstataŭ implementado helpanto funkcio, se vi volas, ke estis fakte nula. 143 00:05:56,760 --> 00:05:58,010 Mi vokis ĝin interŝanĝi. 144 00:05:58,010 --> 00:06:01,600 Mi donis ĝin du parametrojn, kaj mi nomis ili kaj mi nomis ilin b. 145 00:06:01,600 --> 00:06:04,380 >> Sincere, mi povus nomi ilin x kaj y. 146 00:06:04,380 --> 00:06:06,040 Estas nenio haltante min, por fari tion. 147 00:06:06,040 --> 00:06:08,140 Sed mi volas argumenti estas tiam iom ambigua. 148 00:06:08,140 --> 00:06:11,910 Pro memoro por lundo, ke ni asertis ke tiuj parametroj estis 149 00:06:11,910 --> 00:06:13,650 kopioj de la valoroj pasis in 150 00:06:13,650 --> 00:06:15,640 Do ĝuste salatoj kun via menso, mi pensas, se vi uzas 151 00:06:15,640 --> 00:06:17,370 ĝuste la sama variabloj. 152 00:06:17,370 --> 00:06:20,150 >> Do mi devos anstataŭ nomi ilin kaj b, nur por klareco. 153 00:06:20,150 --> 00:06:21,840 Sed ni povus nomi ilin plej ion ni volas. 154 00:06:21,840 --> 00:06:26,280 Kaj mi tuj kopii kaj almeti efektive tiu kodo de tie supre 155 00:06:26,280 --> 00:06:27,170 malsupren en ĉi tie. 156 00:06:27,170 --> 00:06:29,110 Ĉar mi ĵus vidis, ke ĝi funkcias. 157 00:06:29,110 --> 00:06:30,790 Do jen en sufiĉe bona formo. 158 00:06:30,790 --> 00:06:37,390 Kaj mi ŝanĝos mian x al mia x al mia y al b kaj mia y al b. 159 00:06:37,390 --> 00:06:39,130 >> Do alivorte, ĝusta sama logiko. 160 00:06:39,130 --> 00:06:40,850 La ĝusta sama afero ke Jess faris. 161 00:06:40,850 --> 00:06:44,350 Kaj tiam la afero mi devos fari supren ĉi tie, kompreneble, estas nun alpreĝi ĉi 162 00:06:44,350 --> 00:06:45,990 funkcio, aŭ nomas tiun funkcion. 163 00:06:45,990 --> 00:06:50,430 Do mi nomos tiun funkcion kun du enigoj, x kaj y, kaj sukceson Save. 164 00:06:50,430 --> 00:06:52,300 >> Bone, do funde la sama aĵo. 165 00:06:52,300 --> 00:06:55,570 Fakte, mi verŝajne faris la programon nenecese kompleksa por 166 00:06:55,570 --> 00:07:00,820 skribi funkcio kiu estas simple preni iuj ses linioj de kodo dum mi 167 00:07:00,820 --> 00:07:02,970 antaŭe estis implementado ĉi tio en nur tri. 168 00:07:02,970 --> 00:07:06,230 >> Do lasu min iri antaŭen nun kaj refari tiu, ne interŝanĝa. 169 00:07:06,230 --> 00:07:07,920 Bone, mi ŝraŭbita ĉi tien. 170 00:07:07,920 --> 00:07:11,290 Tio devus esti eraro, ke vi povus vidi pli komune kiel via 171 00:07:11,290 --> 00:07:12,380 programoj akiri pli kompleksa. 172 00:07:12,380 --> 00:07:13,470 Sed estas facila embaraso. 173 00:07:13,470 --> 00:07:15,650 Lasu min rulumi reen ĝis ĉi tie. 174 00:07:15,650 --> 00:07:18,190 >> Kaj kio estas la unua eraro mi vidas? 175 00:07:18,190 --> 00:07:19,520 Implicitan deklaron. 176 00:07:19,520 --> 00:07:21,466 Kion tio tipe indikas? 177 00:07:21,466 --> 00:07:22,830 Ho, mi forgesis la prototipo. 178 00:07:22,830 --> 00:07:26,900 Mi forgesis instrui la tradukilon, ke interŝanĝo tuj ekzistas kvankam li 179 00:07:26,900 --> 00:07:28,920 Ne ekzistas en la komenco de la programo. 180 00:07:28,920 --> 00:07:35,780 Do mi simple volis diri malplena, interŝanĝa, int, de int b, punktokomo. 181 00:07:35,780 --> 00:07:37,280 >> Do mi ne tuj reimplement ĝin. 182 00:07:37,280 --> 00:07:39,140 Sed nun egalas kio estas cxi tie. 183 00:07:39,140 --> 00:07:42,530 Kaj avizo, la foresto de punktokomo ĉi tie, kiu ne estas necesaj kiam 184 00:07:42,530 --> 00:07:43,200 apliki. 185 00:07:43,200 --> 00:07:46,010 >> Do lasu min refari tion, faru interŝanĝa. 186 00:07:46,010 --> 00:07:46,910 Multe pli bona formo. 187 00:07:46,910 --> 00:07:48,130 Kuru neniu interŝanĝa. 188 00:07:48,130 --> 00:07:48,740 Kaj damn it. 189 00:07:48,740 --> 00:07:51,650 Nun ni estas dorso kie ni estis en lundo, kie la afero ne interŝanĝi. 190 00:07:51,650 --> 00:07:55,410 >> Kaj kio estas la intuicia ekspliko cxar kial ĉi tiu estas la kazo? 191 00:07:55,410 --> 00:07:56,380 Jes? 192 00:07:56,380 --> 00:07:57,630 >> Lernanto: [inaudibles]. 193 00:07:57,630 --> 00:08:04,140 194 00:08:04,140 --> 00:08:05,230 >> DAVID Malan: Ĝuste. 195 00:08:05,230 --> 00:08:07,330 Do a kaj b estas kopioj de x kaj y. 196 00:08:07,330 --> 00:08:10,680 Kaj fakte, iam vi estis nomante funkcio tiel malproksime, ke 197 00:08:10,680 --> 00:08:12,540 pasas variabloj kiel ints - 198 00:08:12,540 --> 00:08:14,470 same kiel interŝanĝa atendas tie - 199 00:08:14,470 --> 00:08:16,270 you guys estis pasanta en kopioj. 200 00:08:16,270 --> 00:08:19,150 >> Nun tio signifas ke ghi prenas iom de tempo, la dua partio, por la 201 00:08:19,150 --> 00:08:23,270 komputilo kopii la bitoj de unu variablo en la bitojn de la alia. 202 00:08:23,270 --> 00:08:24,610 Sed tio ne estas tiom granda interkonsento. 203 00:08:24,610 --> 00:08:25,920 Sed ili estas tamen kopion. 204 00:08:25,920 --> 00:08:30,020 >> Kaj tial nun, en la kunteksto de interŝanĝa, Mi fakte sukcese 205 00:08:30,020 --> 00:08:31,180 ŝanĝanta a kaj b. 206 00:08:31,180 --> 00:08:33,000 Fakte, ni faros rapidan prudento kontroli. 207 00:08:33,000 --> 00:08:36,830 Presi f a estas% i, novan linion. 208 00:08:36,830 --> 00:08:38,770 Kaj ni konekti al. 209 00:08:38,770 --> 00:08:41,830 Nun ni faru la samon kun b. 210 00:08:41,830 --> 00:08:43,640 Kaj ni faru la samon ĉi tie. 211 00:08:43,640 --> 00:08:47,260 >> Kaj nun, lasu min kopii tiujn samajn liniojn denove ĉe la malsupro de la funkcio 212 00:08:47,260 --> 00:08:51,250 post miaj tri linioj de interesaj povus esti ekzekutitaj, kaj 213 00:08:51,250 --> 00:08:53,270 presi kaj b plue. 214 00:08:53,270 --> 00:08:56,030 Do nun ni faru tion, faru interŝanĝa. 215 00:08:56,030 --> 00:08:58,430 Lasu min fari la fina fenestro iom pli alta, tiel ke ni povu vidi 216 00:08:58,430 --> 00:08:59,520 pli pri tio samtempe. 217 00:08:59,520 --> 00:09:00,860 >> Kaj kuri sen interŝanĝa. 218 00:09:00,860 --> 00:09:04,000 x estas 1, y estas 2. a estas 1, b estas 2. 219 00:09:04,000 --> 00:09:06,070 Kaj tiam, estas 2, b estas 1. 220 00:09:06,070 --> 00:09:09,390 Do ĝi funkcias, kiel Jess faris ĉi tie ene de interŝanĝa. 221 00:09:09,390 --> 00:09:13,090 Sed kompreneble, ĝi estas havi nenian efikon sur la variabloj en ĉefa. 222 00:09:13,090 --> 00:09:15,360 >> Do ni vidis lertaĵo per kiu ni povus ripari tion, ĉu ne? 223 00:09:15,360 --> 00:09:19,560 Kiam vi alfrontas ĉi scoping afero, vi povus simple liberigas kaj fari x 224 00:09:19,560 --> 00:09:22,400 kaj y kia variabloj anstataŭ? 225 00:09:22,400 --> 00:09:23,390 >> Vi povus fari ilin tutmonda. 226 00:09:23,390 --> 00:09:27,560 Metu ilin en la plejsupro de la dosiero kiel ni faris, eĉ en la ludo de 15. 227 00:09:27,560 --> 00:09:28,890 Ni uzas malloka variablo. 228 00:09:28,890 --> 00:09:32,420 Sed en la kunteksto de la ludo 15, ĝi estas racia havi tutmondan 229 00:09:32,420 --> 00:09:37,170 variablo kiu reprezentas la tabulo, ĉar la tuteco de 15.c estas ĉio 230 00:09:37,170 --> 00:09:38,650 pri apliko de tiu ludo. 231 00:09:38,650 --> 00:09:41,470 Tion la dosiero ekzistas por fari. 232 00:09:41,470 --> 00:09:44,170 >> Sed en tiu kazo ĉi tie, mi estas nomante funkcio interŝanĝa. 233 00:09:44,170 --> 00:09:45,380 Mi volas interŝanĝi du variabloj. 234 00:09:45,380 --> 00:09:48,950 Kaj ĝi devas komenci senti nur fuŝa se la solvon por ĉiuj niaj 235 00:09:48,950 --> 00:09:51,300 problemoj kiam ni kolizios atingo demandoj estas fari ĝin tutmonda. 236 00:09:51,300 --> 00:09:54,730 Ĉar tre rapide nia programo estas tuj fariĝis sufiĉe salaton. 237 00:09:54,730 --> 00:09:57,760 Kaj ni faris tion tre ŝpareme kiel rezulto en 15.c. 238 00:09:57,760 --> 00:10:00,470 >> Sed rezultu ke estas bona maniero entute. 239 00:10:00,470 --> 00:10:05,600 Lasu min reale reiri kaj forigi la presi f estas, nur por faciligi tiun kodon. 240 00:10:05,600 --> 00:10:09,160 Kaj lasu min proponas ke tiu ja estas malbona. 241 00:10:09,160 --> 00:10:15,990 Sed se mi anstataŭ aldoni en iu asteriskoj kaj la steloj, Mi povas anstataŭ turni ĉi 242 00:10:15,990 --> 00:10:18,670 funkcio en kiu estas fakte operacio. 243 00:10:18,670 --> 00:10:25,020 >> Do lasu min reiri tien kaj akcepti dirante asteriskoj estas ĉiam malfacila, 244 00:10:25,020 --> 00:10:26,170 do mi dirus steloj. 245 00:10:26,170 --> 00:10:27,660 Mi nur Fess ĝis tiu. 246 00:10:27,660 --> 00:10:28,190 Ĉio bone. 247 00:10:28,190 --> 00:10:30,190 Kaj nun, kion mi povos fari anstataŭ? 248 00:10:30,190 --> 00:10:34,130 >> Do unue: mi iros al precizigi ke anstataŭ pasante int en 249 00:10:34,130 --> 00:10:37,980 la interŝanĝa funkcio, mi estas anstataŭ de dironta int stelo. 250 00:10:37,980 --> 00:10:39,170 Nun, kion signifas la stelo indiki? 251 00:10:39,170 --> 00:10:41,970 Tiu estas, ke nocio de puntero ke Binky, la Claymation karaktero, estis 252 00:10:41,970 --> 00:10:43,465 raportante al antaŭ momento. 253 00:10:43,465 --> 00:10:47,610 >> Do, se ni diras int stelo, la signifo de ĉi nun, ke ne tuj estos 254 00:10:47,610 --> 00:10:49,110 pasis tra lia valoro. 255 00:10:49,110 --> 00:10:50,350 Tio ne tuj estos kopiitaj in 256 00:10:50,350 --> 00:10:54,700 Pli ĝuste, la adreso de a estas tuj estos pasis in 257 00:10:54,700 --> 00:10:57,840 >> Do memoru, ke ene de via komputilo Estas tuta amaso de memoro, alie 258 00:10:57,840 --> 00:10:58,760 konata kiel RAM. 259 00:10:58,760 --> 00:11:00,520 Kaj tio RAM estas nur tutan faskon da bajtoj. 260 00:11:00,520 --> 00:11:03,320 Do, se via Mac aŭ via PC havas du gigabajtoj, vi havas 2 261 00:11:03,320 --> 00:11:05,760 miliardoj bajtoj da memoro. 262 00:11:05,760 --> 00:11:08,440 >> Nun ni simple supozu, ke nur por subteni la aĵojn bela kaj bonorda, ni 263 00:11:08,440 --> 00:11:09,450 atribui adreson - 264 00:11:09,450 --> 00:11:10,170 nombro - 265 00:11:10,170 --> 00:11:12,270 al ĉiu bajto de RAM en via komputilo. 266 00:11:12,270 --> 00:11:15,410 La unua bitoko de tiuj 2 biliono estas por numero nulo. 267 00:11:15,410 --> 00:11:18,572 La sekva estas bajto numero unu, numero du, la tuta vojo supren, dot dot 268 00:11:18,572 --> 00:11:20,530 punkto, al proksimume 2 milionoj. 269 00:11:20,530 --> 00:11:23,640 >> Do vi povos kalkuli la bajtoj de memoro en via komputilo. 270 00:11:23,640 --> 00:11:26,460 Do ni supozu, ke tio estas kion ni signifi per adreso. 271 00:11:26,460 --> 00:11:31,360 Do kiam mi vidas int stelo a, kio okazas esti aprobitaj en interŝanĝa nun estas la 272 00:11:31,360 --> 00:11:32,830 adreso de al. 273 00:11:32,830 --> 00:11:37,150 Ne lia valoro, sed estu lia bildkarto adreso estas, por tiel diri - 274 00:11:37,150 --> 00:11:38,810 lia situo en RAM. 275 00:11:38,810 --> 00:11:41,250 >> Kaj simile por b, mi tuj diri la samon. 276 00:11:41,250 --> 00:11:42,720 Mez, stelo, b. 277 00:11:42,720 --> 00:11:46,350 Kiel flanken, teknike la stelo povis iri en aliaj lokoj. 278 00:11:46,350 --> 00:11:50,140 Sed ni normigi sur la stelo estas dekstra flanko de la datumtipo. 279 00:11:50,140 --> 00:11:54,080 >> Do interŝanĝi subskribo nun signifas, donu al mi la adreso de int, kaj alvoko 280 00:11:54,080 --> 00:11:55,400 ke adreson al. 281 00:11:55,400 --> 00:11:58,690 Kaj donu al mi alian adreson de int kaj invitas ke adreso b. 282 00:11:58,690 --> 00:12:01,120 >> Sed nun mia kodo tie devas ŝanĝi. 283 00:12:01,120 --> 00:12:03,470 Ĉar se mi deklaras int temp - 284 00:12:03,470 --> 00:12:05,580 kiu estas ankoraŭ de tipo int - 285 00:12:05,580 --> 00:12:08,700 sed mi stoki en ĝi, kian valoron? 286 00:12:08,700 --> 00:12:12,870 Por esti klaraj, mi metante al kun la kodo kiel skribita ĝuste nun? 287 00:12:12,870 --> 00:12:14,360 >> Mi metas la situo en al. 288 00:12:14,360 --> 00:12:16,500 Sed mi ne zorgas pri la situo nun, ĉu ne? 289 00:12:16,500 --> 00:12:21,940 Temp ekzistas nur Jess 'tria tason ekzistis, por kiu celo? 290 00:12:21,940 --> 00:12:23,090 Stoki valoro. 291 00:12:23,090 --> 00:12:24,830 Lakto aŭ oranĝa suko. 292 00:12:24,830 --> 00:12:28,520 Ne vere stoki la adreso de ĉu de tiuj aferoj, kiuj sentas 293 00:12:28,520 --> 00:12:31,200 iom sensenca en ĉi tiu reala mondo kuntekston ĉiuokaze. 294 00:12:31,200 --> 00:12:34,990 >> Do vere, kion mi volas meti en temp ne estas la adreso de a, sed la 295 00:12:34,990 --> 00:12:36,180 enhavo de. 296 00:12:36,180 --> 00:12:41,930 Do, se a estas numero kiel 123, tio estas la 123rd bajto de memoro, ke nur 297 00:12:41,930 --> 00:12:45,090 hazarde estas okupanta, ke la valoro en hazarde estas okupanta. 298 00:12:45,090 --> 00:12:49,040 >> Se mi volas iri al tiu adreso, Mi bezonas diri stelo al. 299 00:12:49,040 --> 00:12:52,610 Simile, se mi ŝanĝus kio estas ĉe la adreso a, mi ŝanĝos 300 00:12:52,610 --> 00:12:53,570 ĉi por komenci. 301 00:12:53,570 --> 00:12:58,185 Se mi volas gardi en kio estas en la situo de kun kio estas en la loko 302 00:12:58,185 --> 00:13:02,180 je b, stelo b stelo. 303 00:13:02,180 --> 00:13:05,340 >> Do mallonge, eĉ se tiu ne estas sufiĉe enprofundigi en ankoraŭ - kaj mi ne volas atendi 304 00:13:05,340 --> 00:13:06,560 kiu estus tiom rapide - 305 00:13:06,560 --> 00:13:11,100 rimarki, ke ĉiuj mi faras estas prefixing tiujn stelojn al miaj variabloj, 306 00:13:11,100 --> 00:13:13,350 proverbo ne kaptu la valoroj. 307 00:13:13,350 --> 00:13:14,520 Ne ŝanĝu la valoroj. 308 00:13:14,520 --> 00:13:17,600 Sed ĝuste, iru al tiuj adresoj kaj akiri la valoron. 309 00:13:17,600 --> 00:13:21,430 Iru al tiu adreso kaj ŝanĝo la valoron tie. 310 00:13:21,430 --> 00:13:25,500 >> Do nun lasu min rulumi reen ĝis la supro, nur por ripari ĉi tiu linio tie, al 311 00:13:25,500 --> 00:13:27,690 ŝanĝi la prototipo por kongrui. 312 00:13:27,690 --> 00:13:30,280 Sed mi nun bezonas fari unu alia afero. 313 00:13:30,280 --> 00:13:35,500 Intuicie, se mi ŝanĝis la tipoj de argumentoj kion interŝanĝa atendas, 314 00:13:35,500 --> 00:13:37,245 kion alian mi bezonas ŝanĝi en mia kodo? 315 00:13:37,245 --> 00:13:39,750 316 00:13:39,750 --> 00:13:40,840 >> Kiam mi vokas interŝanĝa. 317 00:13:40,840 --> 00:13:43,340 Ĉar nun, kio estas Mi pasis por interŝanĝi ankoraŭ? 318 00:13:43,340 --> 00:13:47,450 La valoro x kaj la valoro de y, aŭ la lakto kaj la oranĝa suko. 319 00:13:47,450 --> 00:13:48,510 Sed mi ne volas fari tion. 320 00:13:48,510 --> 00:13:51,060 Mi anstataŭ volas Iam en kio? 321 00:13:51,060 --> 00:13:53,050 La situo de x kaj la situo de y. 322 00:13:53,050 --> 00:13:55,300 Kio estas ilia poŝta adresoj, por tiel diri. 323 00:13:55,300 --> 00:13:57,600 >> Do fari tion, estas kaj-simbolo. 324 00:13:57,600 --> 00:13:59,260 Ampersand klaso de sonoj kiel adreso. 325 00:13:59,260 --> 00:14:03,240 tial n, ampersand, la adreso de x, kaj la adreso de y. 326 00:14:03,240 --> 00:14:06,790 Do ĝi estas intenca, ke ni uzas ampersands nominte la funkcio, 327 00:14:06,790 --> 00:14:10,230 kaj la steloj al la deklari kaj kiam realiganta la funkcio. 328 00:14:10,230 --> 00:14:14,220 >> Kaj ĝuste pensi signon kiel la adreso de operatoro, kaj stelo kiel la 329 00:14:14,220 --> 00:14:15,490 iri tien operatoro - 330 00:14:15,490 --> 00:14:18,640 aŭ, pli ĝuste, la dereference operatoro. 331 00:14:18,640 --> 00:14:23,480 Do tio estas tuta loto de vortoj nur por diri, ke nun, mi esperas, interŝanĝa tuj 332 00:14:23,480 --> 00:14:24,440 esti ĝusta. 333 00:14:24,440 --> 00:14:26,550 >> Lasu min antaŭeniri kaj realigi - 334 00:14:26,550 --> 00:14:30,940 ni fakte renomigi la dosieron, por ke tiu programo ankoraŭ nomi neniu interŝanĝa. 335 00:14:30,940 --> 00:14:33,240 Mi asertas, ke ni nomas ĝin swap.c nun. 336 00:14:33,240 --> 00:14:35,670 Do, interŝanĝi. 337 00:14:35,670 --> 00:14:37,520 Dot, oblikvo, interŝanĝi. 338 00:14:37,520 --> 00:14:40,210 >> Kaj nun ja, x estas 1, y estas 2. 339 00:14:40,210 --> 00:14:44,040 Kaj tiam, x estas 2, y estas unu. 340 00:14:44,040 --> 00:14:46,500 Nu vidu, se ni ne povas fari ĉi tion iom malsame kiel al kio 341 00:14:46,500 --> 00:14:47,180 okazas ĉi tie. 342 00:14:47,180 --> 00:14:51,250 Unue, lasu min zomi en nia desegnante ekrano tie. 343 00:14:51,250 --> 00:14:54,160 Kaj lasu min proponi dum momento - kaj ĉiufoje kiam mi desegnas tie estos spegulita 344 00:14:54,160 --> 00:14:58,660 tien nun - mi proponas ke jen tutan faskon da memoro, aŭ 345 00:14:58,660 --> 00:15:00,540 RAM, interne de mia komputilo. 346 00:15:00,540 --> 00:15:04,140 >> Kaj ĉi tio estos mordo numeron, diru, 1. 347 00:15:04,140 --> 00:15:05,720 Ĉi tiu estos bitokoj numero 2. 348 00:15:05,720 --> 00:15:08,220 Kaj Mi faros tutan faskon pli, kaj tiam faskon da dot dot dots al 349 00:15:08,220 --> 00:15:10,880 indikas ke ekzistas 2 milionoj pri tiuj aferoj. 350 00:15:10,880 --> 00:15:13,520 4, 5, kaj tiel plu. 351 00:15:13,520 --> 00:15:17,055 >> Do estas la unuaj kvin bitokoj de mia komputilo memoro. 352 00:15:17,055 --> 00:15:17,560 Ĉio bone? 353 00:15:17,560 --> 00:15:19,060 Tre malmultaj el 2 miliardoj. 354 00:15:19,060 --> 00:15:21,120 Sed nun mi tuj proponi la jena. 355 00:15:21,120 --> 00:15:27,490 Mi tuj proponas ke x estas tuj stoki la numeron 1, kaj y tuj 356 00:15:27,490 --> 00:15:29,690 stoki la numero 2. 357 00:15:29,690 --> 00:15:35,000 Kaj lasu min iri antaŭen nun kaj reprezentas tiujn valorojn kiel sekvas. 358 00:15:35,000 --> 00:15:41,510 >> Ni faras tion kiel sekvas. 359 00:15:41,510 --> 00:15:42,870 Donu al mi nur unu sekundo. 360 00:15:42,870 --> 00:15:44,150 Unu sekundo. 361 00:15:44,150 --> 00:15:45,680 Akcepti. 362 00:15:45,680 --> 00:15:47,560 Mi volas fari ĉi iom - 363 00:15:47,560 --> 00:15:50,440 ni tion denove. 364 00:15:50,440 --> 00:15:53,250 Alie Mi tuj kaj uzante la samaj nombroj, senintence, 365 00:15:53,250 --> 00:15:54,230 plurfoje. 366 00:15:54,230 --> 00:15:57,320 >> Do ĝuste tial ni havas malsamajn numerojn paroli, ni nomas tion bajto 367 00:15:57,320 --> 00:16:03,391 numeron 123, 124, 125, 126, kaj dot dot dot. 368 00:16:03,391 --> 00:16:08,400 Kaj lasu min asertas nun ke mi iros al meti la valoro 1 tie, kaj la valoro 2 369 00:16:08,400 --> 00:16:11,990 ĉi tie, alie sciata kiel x kaj y. 370 00:16:11,990 --> 00:16:15,300 Do ĝuste tial okazas, ke tiu estas x, ĉi tiu estas y. 371 00:16:15,300 --> 00:16:18,180 >> Kaj ĝuste per iu hazarda hazardo, la komputilo, la mastruma sistemo, 372 00:16:18,180 --> 00:16:21,890 okazis meti x je situo numeron 123. 373 00:16:21,890 --> 00:16:25,590 Kaj y finis je situo 124 - 374 00:16:25,590 --> 00:16:26,330 damn it. 375 00:16:26,330 --> 00:16:28,700 Mi devus esti fiksita ĉi. 376 00:16:28,700 --> 00:16:34,040 Ho viro, mi vere volas fari ĉi tion? 377 00:16:34,040 --> 00:16:37,340 Jes, mi volas ripari tion kaj b pozitiva pri ĉi tiu hodiaŭ. 378 00:16:37,340 --> 00:16:39,950 Pardonu, nova ĉe ĉi. 379 00:16:39,950 --> 00:16:45,020 >> 127, 131, kaj mi ne volas esti ĉi kompleksa, sed kial mi ŝanĝi la 380 00:16:45,020 --> 00:16:46,340 nombroj ekzistas? 381 00:16:46,340 --> 00:16:48,360 Ĉar mi volis la ints al fakte kvar bajtoj. 382 00:16:48,360 --> 00:16:49,810 Do ni estu super anal pri tio. 383 00:16:49,810 --> 00:16:53,800 Por ke se 1 pasas al adresita 123, la 2 tuj estos ĉe adreso 384 00:16:53,800 --> 00:16:55,730 127 ĉar ĝi estas nur 4 byes for. 385 00:16:55,730 --> 00:16:56,210 Jen ĉio. 386 00:16:56,210 --> 00:16:58,640 Kaj ni forgesos pri ĉiuj de la aliaj adresoj en la mondo. 387 00:16:58,640 --> 00:17:03,320 >> Do x estas en loko 123, y estas en situo 127. 388 00:17:03,320 --> 00:17:05,770 Kaj nun, kion fari mi efektive volas fari? 389 00:17:05,770 --> 00:17:10,099 Kiam mi vokas interŝanĝa nun, kio estas efektive okazas? 390 00:17:10,099 --> 00:17:14,920 Nu, kiam mi vokas swap, mi pasis en la adreso de x kaj la adreso de y. 391 00:17:14,920 --> 00:17:18,540 Do ekzemple, se tiuj du pecoj de papero nun reprezentas la du 392 00:17:18,540 --> 00:17:23,510 argumentoj a kaj b por interŝanĝi, kion mi tuj skribos sur la unua el tiuj, 393 00:17:23,510 --> 00:17:27,720 kiun mi tuj vokos referi al kiel? 394 00:17:27,720 --> 00:17:30,610 >> Precize, 123. 395 00:17:30,610 --> 00:17:31,905 Do tio mi asertas estas. 396 00:17:31,905 --> 00:17:32,955 Ĉi tiu estas la parametro a. 397 00:17:32,955 --> 00:17:35,856 Mi metas la adreson de x en tie. 398 00:17:35,856 --> 00:17:38,152 >> Kio estas tio? 399 00:17:38,152 --> 00:17:40,890 >> Kio estas tio? 400 00:17:40,890 --> 00:17:41,190 >> Ne, ne. 401 00:17:41,190 --> 00:17:41,720 Tio estas okej. 402 00:17:41,720 --> 00:17:42,570 Ankoraŭ bone, ankoraŭ bona. 403 00:17:42,570 --> 00:17:43,530 Do tiu estas. 404 00:17:43,530 --> 00:17:46,240 Kaj nun la dua peco de papero, tiu tuj estos b, kaj kion mi 405 00:17:46,240 --> 00:17:49,010 tuj estos skribi sur ĉi tiu peco de papero? 406 00:17:49,010 --> 00:17:50,080 127. 407 00:17:50,080 --> 00:17:53,720 >> Do la sola afero, kiu estas ŝanĝis ekde nia antaŭa rakonto de ĉi tiu historio estas, 408 00:17:53,720 --> 00:17:58,590 anstataŭ laŭvorte 1 kaj 2, mi tuj pasos en 123 kaj 127. 409 00:17:58,590 --> 00:18:02,130 Kaj mi nun tuj metos tiuj ene de ĉi tiu skatolo, en ordo? 410 00:18:02,130 --> 00:18:04,640 Por ke nigra skatolo nun reprezentas la interŝanĝa funkcio. 411 00:18:04,640 --> 00:18:07,230 >> Dume, ni nun havas iu apliki la interŝanĝa funkcio. 412 00:18:07,230 --> 00:18:09,090 Ĉu iu ĉi tien kiel volontulon? 413 00:18:09,090 --> 00:18:09,560 Venu supren. 414 00:18:09,560 --> 00:18:11,080 Kio estas via nomo? 415 00:18:11,080 --> 00:18:11,460 Charlie. 416 00:18:11,460 --> 00:18:12,080 Bone, Charlie. 417 00:18:12,080 --> 00:18:14,810 Venu supren. 418 00:18:14,810 --> 00:18:17,310 >> Do Charlie tuj ludos la rolo de nia nigra skatolo. 419 00:18:17,310 --> 00:18:21,460 Kaj Charlie, kion mi ŝatus ke vi faru nun estas apliki interŝanĝa en tia maniero 420 00:18:21,460 --> 00:18:25,320 kiu, donita de tiuj du adresoj, vi fakte tuj 421 00:18:25,320 --> 00:18:26,330 ŝanĝi la valorojn. 422 00:18:26,330 --> 00:18:28,290 Kaj mi flustri en via orelo kiel ruli la televido tie. 423 00:18:28,290 --> 00:18:29,930 >> Do iru antaŭen, kaj vi estas la nigra skatolo. 424 00:18:29,930 --> 00:18:30,920 Atingi tien. 425 00:18:30,920 --> 00:18:34,054 Kio valoroj vi vidas por, kaj kio valoroj vi vidas por b? 426 00:18:34,054 --> 00:18:36,740 >> Charlie: a estas 123 kaj b estas 127. 427 00:18:36,740 --> 00:18:37,530 >> DAVID Malan: OK, ĝuste. 428 00:18:37,530 --> 00:18:38,940 Nun paŭzo ekzistas por nur momento. 429 00:18:38,940 --> 00:18:41,680 La unua afero, kiun vi faros nun, laŭ la kodo - kiu 430 00:18:41,680 --> 00:18:43,220 Mi nun tiri supren sur la ekrano - 431 00:18:43,220 --> 00:18:46,750 tuj estos atribui iom iom da memoro nomata temp. 432 00:18:46,750 --> 00:18:48,850 Do mi tuj iros antaŭen kaj doni al vi, ke memoro. 433 00:18:48,850 --> 00:18:52,210 >> Do tiu tuj estos la tria variablo ke vi havas atingebla al 434 00:18:52,210 --> 00:18:54,080 vi nomis temp. 435 00:18:54,080 --> 00:18:57,120 Kaj kion vi intencas skribi en la temp peco de papero? 436 00:18:57,120 --> 00:19:02,524 437 00:19:02,524 --> 00:19:03,470 >> Charlie: Pointers, ĉu ne? 438 00:19:03,470 --> 00:19:04,790 >> DAVID Malan: Bone, bone ne nepre montriloj. 439 00:19:04,790 --> 00:19:07,230 Do la linio de kodo, ke mi havas reliefigis dekstre mana flanko, 440 00:19:07,230 --> 00:19:07,900 ni komencu tie. 441 00:19:07,900 --> 00:19:08,890 Ĝi diras stelo al. 442 00:19:08,890 --> 00:19:11,670 Do nuntempe stokante la nombro 123. 443 00:19:11,670 --> 00:19:16,660 Kaj ĝuste intuicie, kion faris stelon 123 signifi? 444 00:19:16,660 --> 00:19:21,630 >> Sed konkrete, se a estas 123, stelo de signifas kion? 445 00:19:21,630 --> 00:19:22,560 La valoro de a. 446 00:19:22,560 --> 00:19:24,580 Aŭ pli hazarde, iru tien. 447 00:19:24,580 --> 00:19:28,620 Do mi proponas ke, tenante la a en via mano, iru antaŭen kaj trakti ke 448 00:19:28,620 --> 00:19:29,430 kvazaŭ ĝi estas mapo. 449 00:19:29,430 --> 00:19:32,940 Kaj iros mem transiris al la komputilo memoro, kaj trovi nin kio estas 450 00:19:32,940 --> 00:19:36,520 ĉe situo 123. 451 00:19:36,520 --> 00:19:37,720 Ekzakte. 452 00:19:37,720 --> 00:19:41,100 >> Do ni vidas en situo 123 Estas kio, evidente? 453 00:19:41,100 --> 00:19:44,240 Bone, do kion valoro nun vi tuj metos en temp? 454 00:19:44,240 --> 00:19:44,750 Ekzakte. 455 00:19:44,750 --> 00:19:45,600 Do iru antaŭen kaj fari tion. 456 00:19:45,600 --> 00:19:51,280 Kaj skribi la numero 1 en la peco de papero kiu estas aktuale titolita temp. 457 00:19:51,280 --> 00:19:53,540 >> Kaj nun la sekva paŝo, ke vi tuj apliki 458 00:19:53,540 --> 00:19:54,310 tuj estos kion. 459 00:19:54,310 --> 00:19:57,820 Nu, sur la dekstra flanko de la sekvanta linio de kodo estas stelo b. b, de 460 00:19:57,820 --> 00:19:59,260 Kompreneble, stokas adreson. 461 00:19:59,260 --> 00:20:02,270 Tio adresoj 127. 462 00:20:02,270 --> 00:20:06,620 Stelo b signifas kio, hazarde parolanta? 463 00:20:06,620 --> 00:20:08,700 >> Iru al tiu loko. 464 00:20:08,700 --> 00:20:14,988 Do iru antaŭen kaj trovi nin kio estas ĉe situo 127. 465 00:20:14,988 --> 00:20:15,480 Akcepti. 466 00:20:15,480 --> 00:20:19,170 Kompreneble, en loko 127, ankoraŭ estas la valoro 2. 467 00:20:19,170 --> 00:20:24,060 Do kion vi iras nun tendencas al kion ajn estas ĉe la situo en? 468 00:20:24,060 --> 00:20:26,860 Do stelo rimedon iri al la situon al. 469 00:20:26,860 --> 00:20:29,770 Kio estas la situo de? 470 00:20:29,770 --> 00:20:30,430 >> Ekzakte. 471 00:20:30,430 --> 00:20:34,190 Do nun, se vi volas ŝanĝi kio estas en tiu loko - 472 00:20:34,190 --> 00:20:36,470 Mi iros antaŭen kaj ruli la eraser estas ĉi tie. 473 00:20:36,470 --> 00:20:37,760 Kaj nun remetis ĝin sur la peniko. 474 00:20:37,760 --> 00:20:42,190 Kio nombro vi intencas skribi en tiu blanka skatolo nun? 475 00:20:42,190 --> 00:20:42,850 >> Ekzakte. 476 00:20:42,850 --> 00:20:46,470 Do ĉi tiu linio de kodo, por esti klara - lasu mi paŭzo kio Charlie faras kaj 477 00:20:46,470 --> 00:20:51,730 atentigi tie, kion li ĵus farita estas skribi en tiun skatolon je situo 123 478 00:20:51,730 --> 00:20:55,150 la valoro kiu estis antaŭe je b. 479 00:20:55,150 --> 00:20:59,140 Kaj tial ni nun implementado ja tiu dua linio de kodo. 480 00:20:59,140 --> 00:21:01,920 >> Nun bedaŭrinde, ekzistas ankoraŭ unu linio restanton. 481 00:21:01,920 --> 00:21:04,900 Nun kio estas en temp, laŭvorte? 482 00:21:04,900 --> 00:21:06,200 Estas evidente la numero unu. 483 00:21:06,200 --> 00:21:07,020 Tio ne adreson. 484 00:21:07,020 --> 00:21:09,380 Estas nur numeron, ia variablo de semajno unu. 485 00:21:09,380 --> 00:21:13,520 >> Kaj nun, kiam vi diras stelo b, tio signifas iru al la adreso b, kiu estas de 486 00:21:13,520 --> 00:21:15,090 Kompreneble ĉi tie. 487 00:21:15,090 --> 00:21:16,020 Do iam vi ricevas tie - 488 00:21:16,020 --> 00:21:18,320 Mi iros antaŭen kaj viŝi kio estas reale tie - kaj kion vi estas 489 00:21:18,320 --> 00:21:20,820 tuj skribos nun situo 127? 490 00:21:20,820 --> 00:21:22,010 >> Charlie: Temp, kiu estas unu. 491 00:21:22,010 --> 00:21:23,430 >> DAVID Malan: Temp, kiu estas unu. 492 00:21:23,430 --> 00:21:25,670 Kaj kio okazas al temp en la fino? 493 00:21:25,670 --> 00:21:26,600 Nu, ni ne vere scias. 494 00:21:26,600 --> 00:21:27,420 Ni ne vere gravas. 495 00:21:27,420 --> 00:21:31,090 Ajna tempo ni implementado funkcio ĝis nun, neniu lokajn variablojn vi havas 496 00:21:31,090 --> 00:21:31,890 estas efektive loka. 497 00:21:31,890 --> 00:21:33,060 Kaj ili simple malaperos. 498 00:21:33,060 --> 00:21:35,040 Ili rekuperita de la mastruma sistemo fine. 499 00:21:35,040 --> 00:21:39,800 >> Do la fakto ke temp ankoraŭ havas la valoro 1 estas speco de funde 500 00:21:39,800 --> 00:21:41,150 neinteresa al ni. 501 00:21:41,150 --> 00:21:43,100 Bone, do ronda da aplaŭdoj se ni povis por Charlie. 502 00:21:43,100 --> 00:21:46,400 Tre bone farita. 503 00:21:46,400 --> 00:21:51,520 >> Bone, do kion faras pli tio signifas ke ni povas fari? 504 00:21:51,520 --> 00:21:54,400 Do rezultas ke ni estis rakontante kelkajn blankajn mensogoj 505 00:21:54,400 --> 00:21:55,540 por sufiĉe tempo. 506 00:21:55,540 --> 00:21:59,990 Efektive, ĝi rezultas ke ĉeno, ĉio ĉi momento, ne estas vere 507 00:21:59,990 --> 00:22:02,190 vico de signoj per si mem. 508 00:22:02,190 --> 00:22:03,980 Ĉio estas ke intuicie. 509 00:22:03,980 --> 00:22:08,270 >> Sed teknike parolante, kordo estas datumtipo, ke ni deklaris ene de 510 00:22:08,270 --> 00:22:12,170 la CS50 biblioteko por simpligi la mondo por la unuaj semajnoj de klaso. 511 00:22:12,170 --> 00:22:20,130 Kia string vere estas la adreso de gravulo ie en RAM. 512 00:22:20,130 --> 00:22:25,530 Kordo estas vere nombro, kiel 123 aŭ 127, kiu okazas al demarcar 513 00:22:25,530 --> 00:22:28,420 kie a string komencas en via komputilo memoro. 514 00:22:28,420 --> 00:22:31,870 >> Sed ĝi ne reprezentas la kordo, per, mem. 515 00:22:31,870 --> 00:22:33,460 Kaj ni povas vidi ĉi tion kiel sekvas. 516 00:22:33,460 --> 00:22:35,980 Lasu min kaj malfermu iu kodo kiu estas inter 517 00:22:35,980 --> 00:22:38,340 hodiaŭa fontkodon ekzemploj. 518 00:22:38,340 --> 00:22:42,225 Kaj mi tuj iros antaŭen kaj malfermi ĝis, ni diru, komparu-0.c. 519 00:22:42,225 --> 00:22:44,830 520 00:22:44,830 --> 00:22:48,790 Tio ĉi estas kalesxon programo kiu tuj esti implementado kiel sekvas. 521 00:22:48,790 --> 00:22:49,040 >> Unua. 522 00:22:49,040 --> 00:22:50,420 Mi intencis diri ion. 523 00:22:50,420 --> 00:22:52,660 Tiam mi tuj iros antaŭen kaj akiri kordo de la uzanto 524 00:22:52,660 --> 00:22:53,750 en tiu sekva linio. 525 00:22:53,750 --> 00:22:55,370 Tiam mi tuj diros ĝin denove. 526 00:22:55,370 --> 00:22:57,540 Tiam mi iros por atingi alian kordoj de la uzanto. 527 00:22:57,540 --> 00:23:00,390 >> Kaj avizo, mi montras unu el la kordoj en variablo nomita s, kaj 528 00:23:00,390 --> 00:23:03,040 alia de tiuj kordoj en variablo nomas t. 529 00:23:03,040 --> 00:23:07,480 Kaj nun mi iras al postuli, tre prudente, ke se s egalas egalas t, 530 00:23:07,480 --> 00:23:08,940 la ŝnuroj estas la sama. 531 00:23:08,940 --> 00:23:09,970 Vi tajpas la saman aferon. 532 00:23:09,970 --> 00:23:11,830 Alie, la kordoj estas ne la sama aĵo. 533 00:23:11,830 --> 00:23:15,440 >> Post ĉiu, se ni enigo du ints, du signoj, du flosoj, du duobloj, iu el 534 00:23:15,440 --> 00:23:18,400 la datumtipoj ni parolis pri ĝis nun por kompari ilin - 535 00:23:18,400 --> 00:23:22,070 Recall ni faris tre klara tempon ke vi ne fari tion, ĉar 536 00:23:22,070 --> 00:23:25,840 sola egala signo estas kompreneble la atribuo operatoro. 537 00:23:25,840 --> 00:23:26,820 Do kiu estus eraro. 538 00:23:26,820 --> 00:23:29,260 >> Ni uzas la egalaj egala signo, kio efektive komparas 539 00:23:29,260 --> 00:23:31,050 aĵoj por vera egaleco. 540 00:23:31,050 --> 00:23:32,275 Sed mi asertas ĉi estas kalesxo. 541 00:23:32,275 --> 00:23:37,400 Se mi iras antaŭen kaj fari kompari nulo, kaj do skalara oblikvo kompari nulo. 542 00:23:37,400 --> 00:23:39,700 Kaj mi tajpas en, ni diru, saluton. 543 00:23:39,700 --> 00:23:41,590 Kaj tiam diru saluton denove. 544 00:23:41,590 --> 00:23:46,040 Laŭvorte la sama afero, la komputilo asertas mi tajpis malsamaj aĵoj. 545 00:23:46,040 --> 00:23:47,640 >> Nun eble mi simple mistyped ion. 546 00:23:47,640 --> 00:23:49,910 Mi tajpas mian nomon ĉi tiu tempo. 547 00:23:49,910 --> 00:23:52,580 Mi volas diri, saluton. 548 00:23:52,580 --> 00:23:54,770 Saluton. 549 00:23:54,770 --> 00:23:57,360 Estas malsamaj ĉiun solan fojon. 550 00:23:57,360 --> 00:23:58,430 >> Nu, kial estas tio? 551 00:23:58,430 --> 00:24:00,140 Kio vere okazas sub la kapuĉo? 552 00:24:00,140 --> 00:24:03,270 Nu, kio vere okazas sube la kapuĉo estas la kordo tiam 553 00:24:03,270 --> 00:24:07,410 Mi tajpis en tiu unua momento ekzemple estas la vorto saluton, kompreneble. 554 00:24:07,410 --> 00:24:11,660 Sed se ni reprezentas ĉi sube la kapuĉo, memoru, ke 555 00:24:11,660 --> 00:24:13,470 cxeno estas en tabelo. 556 00:24:13,470 --> 00:24:15,040 Kaj ni diris tiel en la estinteco. 557 00:24:15,040 --> 00:24:20,200 >> Do se mi desegnas tiu tabelo kiel ĉi tio, mi iri por reprezenti iun sufiĉe 558 00:24:20,200 --> 00:24:23,030 simila al kion ni faris antaŭ momento. 559 00:24:23,030 --> 00:24:25,390 Kaj estas vere io speciala ĉi tie ankaŭ. 560 00:24:25,390 --> 00:24:28,090 Kion ni determini estis ĉe la fino de ĉiu kordo? 561 00:24:28,090 --> 00:24:30,760 Jes, tiu backslash nulo, kiu estas nur la maniero reprezenti, 562 00:24:30,760 --> 00:24:33,610 laŭvorte, 00000000. 563 00:24:33,610 --> 00:24:35,680 Ok 0 bitoj en unu vico. 564 00:24:35,680 --> 00:24:37,610 >> Mi ne scias, sincere, kio estas post tio. 565 00:24:37,610 --> 00:24:40,090 Tio estas nur plenmano pli RAM ene de mia komputilo. 566 00:24:40,090 --> 00:24:40,970 Sed tio estas tabelo. 567 00:24:40,970 --> 00:24:42,260 Ni parolis pri arrays antaŭe. 568 00:24:42,260 --> 00:24:45,010 Kaj ni tipe paroli pri matricoj kiel situo nulo, 569 00:24:45,010 --> 00:24:46,580 tiam unu, tiam du. 570 00:24:46,580 --> 00:24:47,950 Sed tio estas nur por oportuneco. 571 00:24:47,950 --> 00:24:49,380 Kaj tio estas tute relativaj. 572 00:24:49,380 --> 00:24:53,010 >> Kiam vi efektive atingi memoron de la komputilo, estas kompreneble neniu 573 00:24:53,010 --> 00:24:55,450 2 miliardoj iuj neparaj bajtoj, potenciale. 574 00:24:55,450 --> 00:24:59,100 Do vere sub la kapuĉo, tiu tuta tempo, jes. 575 00:24:59,100 --> 00:25:01,670 Tiu povus tre bone esti krampo nulo. 576 00:25:01,670 --> 00:25:04,780 Sed se vi fosas eĉ pli profunda sube la kapuĉo, tio estas vere 577 00:25:04,780 --> 00:25:07,000 trakti numeron 123. 578 00:25:07,000 --> 00:25:09,150 Jen adreso 124. 579 00:25:09,150 --> 00:25:11,040 Jen adreso 125. 580 00:25:11,040 --> 00:25:12,540 >> Kaj mi ne firmigu ĝis tiu tempo. 581 00:25:12,540 --> 00:25:15,840 Tiuj estas nun unu bitokoj aparte pro kio? 582 00:25:15,840 --> 00:25:17,930 Kiom grandaj estas char? 583 00:25:17,930 --> 00:25:19,170 A char estas nur unu bajto. 584 00:25:19,170 --> 00:25:20,570 An int estas tipe kvar bajtoj. 585 00:25:20,570 --> 00:25:24,850 Tial estas kial mi faris 123, 127, 131 kaj tiel plu. 586 00:25:24,850 --> 00:25:27,560 Nun mi povas gardi la math simpla kaj nur faru plus 1. 587 00:25:27,560 --> 00:25:30,510 Kaj jen estas nun kio vere tuj sur sub la kapuĉo. 588 00:25:30,510 --> 00:25:37,760 >> Do kiam vi deklaras iun kiel ĉi tio, kordo s, ĉi tiu estas fakte - 589 00:25:37,760 --> 00:25:39,170 rezultas - 590 00:25:39,170 --> 00:25:41,190 char stelo. 591 00:25:41,190 --> 00:25:44,640 Stelo, kompreneble, signifas adreso, aka puntero. 592 00:25:44,640 --> 00:25:46,200 Do estas la adreso de io. 593 00:25:46,200 --> 00:25:47,510 Kio estas la adreso de? 594 00:25:47,510 --> 00:25:47,760 >> Nu - 595 00:25:47,760 --> 00:25:51,680 Mi estas la sola kiu povas vidi la tre Grava punkto mi faras, aŭ pensi 596 00:25:51,680 --> 00:25:52,560 Mi faras. 597 00:25:52,560 --> 00:25:55,270 Do kordo - 598 00:25:55,270 --> 00:25:57,180 la malĝoja afero estas Mi havas monitoron Dekstre, kie mi 599 00:25:57,180 --> 00:25:58,100 povus esti vidinta tion. 600 00:25:58,100 --> 00:26:00,990 >> Bone, do string s estas kion Mi deklaris antaŭe. 601 00:26:00,990 --> 00:26:04,600 Sed rezultas, danke al iom magio en la CS50 biblioteko, ĉiuj ĉi 602 00:26:04,600 --> 00:26:08,780 tempo ŝnuro havas laŭvorte estis char stelo. 603 00:26:08,780 --> 00:26:11,310 La stelo denove signifas puntero aŭ adreson. 604 00:26:11,310 --> 00:26:14,180 La fakto ke ĝi estas flanqueándola la vorto char signifas tio estas la 605 00:26:14,180 --> 00:26:15,970 adreso de gravulo. 606 00:26:15,970 --> 00:26:23,100 >> Do se akiri kordoj estas nomita, kaj mi tajpas en H-E-L-L-O, proponas nun kio akiri 607 00:26:23,100 --> 00:26:27,330 kordo laŭvorte estis reveni ĉiuj ĉi tiu tempo, ecx kvankam ni prefere 608 00:26:27,330 --> 00:26:29,980 trosimpligita la mondo? 609 00:26:29,980 --> 00:26:33,310 Kion akiri string reale revenu kiel lia reveno valoro? 610 00:26:33,310 --> 00:26:35,830 611 00:26:35,830 --> 00:26:38,720 >> 123 en ĉi tiu kazo, ekzemple. 612 00:26:38,720 --> 00:26:42,630 Ni antaŭe diris, ke atingi kordo simple resendas kordo, sekvenco de 613 00:26:42,630 --> 00:26:43,300 gravuloj. 614 00:26:43,300 --> 00:26:44,790 Sed tio iom de blanka mensogo. 615 00:26:44,790 --> 00:26:48,010 La maniero akiri ŝnuro vere laboras sub la kapuĉo estas ricevas 616 00:26:48,010 --> 00:26:48,930 kordoj de la uzanto. 617 00:26:48,930 --> 00:26:51,530 Ĝi plops la karakteroj kiuj li aŭ ŝi tipoj en memoro. 618 00:26:51,530 --> 00:26:54,680 Ĝi metas backslash nulo je la fino de tiuj vico de signoj. 619 00:26:54,680 --> 00:26:57,310 >> Sed tiam kion signifas akiri kordo laŭvorte reveni? 620 00:26:57,310 --> 00:27:02,710 Ĝi laŭvorte redonas la adreson de la tre unua bajtoj en la RAM ke 621 00:27:02,710 --> 00:27:04,130 ĝi uzis por tiu forto. 622 00:27:04,130 --> 00:27:07,500 Kaj ĝi rezultas ke nur reveninte sola adreso de la 623 00:27:07,500 --> 00:27:12,120 unua gravulo en la ĉenon, tio estas sufiĉa por trovi la tuteco de 624 00:27:12,120 --> 00:27:12,630 la kordo. 625 00:27:12,630 --> 00:27:16,930 >> En aliaj vortoj, get kordo ne havas reveni 123 kaj 124 kaj 125. 626 00:27:16,930 --> 00:27:19,950 Ĝi ne devas doni al mi longan Listo de ĉiuj bitokoj ke 627 00:27:19,950 --> 00:27:20,740 miaj ŝnuroj estas uzanta. 628 00:27:20,740 --> 00:27:22,670 Ĉar unu, ili ĉiuj estas malantaŭo al malantaŭo. 629 00:27:22,670 --> 00:27:28,160 Kaj du, bazita sur la unua adreso, mi povas diveni kie la kordo finiĝas. 630 00:27:28,160 --> 00:27:29,910 Kiel? 631 00:27:29,910 --> 00:27:33,490 >> La speciala nula karaktero, la backslash nulo je la fino. 632 00:27:33,490 --> 00:27:35,430 Do, en aliaj vortoj, se sekvinberoj ĉirkaŭ - 633 00:27:35,430 --> 00:27:36,530 ene de variabloj - 634 00:27:36,530 --> 00:27:41,300 la adreso de char, kaj vi supozos ke je la fino de ĉiu linio, ĉiu 635 00:27:41,300 --> 00:27:45,040 vico de signoj kiel ni homoj pensi pri kordoj, se vi supozas ke 636 00:27:45,040 --> 00:27:48,600 fine de tia ĉeno ekzistas a backslash nulo, vi estas ora. 637 00:27:48,600 --> 00:27:52,430 Ĉar vi povas ĉiam trovi la finon de ŝnuro. 638 00:27:52,430 --> 00:27:54,870 >> Nun kio vere tiam tuj en ĉi tiu programo? 639 00:27:54,870 --> 00:27:59,990 Kial estas ĉi programo, kompari-0.c, kalesxo? 640 00:27:59,990 --> 00:28:01,690 Kio estas fakte esti komparitaj? 641 00:28:01,690 --> 00:28:02,420 Jes? 642 00:28:02,420 --> 00:28:05,000 >> Lernanto: [inaudibles]. 643 00:28:05,000 --> 00:28:05,730 >> DAVID Malan: Ĝuste. 644 00:28:05,730 --> 00:28:08,350 Oni komparas la lokoj de la kordoj. 645 00:28:08,350 --> 00:28:12,420 Do, se la uzanto tajpas en saluton fojo, kiel mi agis, memoro povus fini 646 00:28:12,420 --> 00:28:13,430 rigardante kiel ĉi tio. 647 00:28:13,430 --> 00:28:18,210 Se la uzanto poste tipoj en saluton denove, sed nomante akiri kordo denove, c estas 648 00:28:18,210 --> 00:28:21,800 ne estas aparte lerta se vi instruas ĝin esti ruza per skribanta kodo. 649 00:28:21,800 --> 00:28:22,430 >> C - 650 00:28:22,430 --> 00:28:23,860 kaj komputiloj pli ĝenerale - 651 00:28:23,860 --> 00:28:27,370 se vi tajpas en la vorto saluton denove, vi scias kion vi ricevos. 652 00:28:27,370 --> 00:28:31,480 Vi nur ricevos duan tabelo de memoro, ke, jes, okazas esti 653 00:28:31,480 --> 00:28:35,510 stokante H-E-L-L-O kaj tiel plu. 654 00:28:35,510 --> 00:28:38,240 >> Ĝi tuj serĉos la sama al ni homoj, sed tiu adreso 655 00:28:38,240 --> 00:28:39,460 povus ne esti 123. 656 00:28:39,460 --> 00:28:42,470 Eble ĝuste tiel okazi, ke la mastruma sistemo havas kelkajn havebla 657 00:28:42,470 --> 00:28:45,430 spaco ekzemple en loko - 658 00:28:45,430 --> 00:28:49,820 diru ion arbitraj, kiel tiu estas situo 200. 659 00:28:49,820 --> 00:28:51,620 Kaj jen estas situo 201. 660 00:28:51,620 --> 00:28:53,060 Kaj jen estas situo 202. 661 00:28:53,060 --> 00:28:55,730 Ni ne havas ideon kie tio tuj estos en la memoro. 662 00:28:55,730 --> 00:28:59,110 >> Sed kion tio signifas estas ke kio estas tuj estos stokitaj finfine en s? 663 00:28:59,110 --> 00:29:00,750 La nombro 123. 664 00:29:00,750 --> 00:29:04,860 Kio okazas al esti stokita en t, en ĉi arbitra ekzemplo? 665 00:29:04,860 --> 00:29:06,300 La nombro 200. 666 00:29:06,300 --> 00:29:11,410 Kaj cxiuj, kiuj signifas do estas evidente, 123 ne egalas 200. 667 00:29:11,410 --> 00:29:14,940 Kaj tiel ĉi se kondiĉo neniam taksas al vera. 668 00:29:14,940 --> 00:29:18,430 Ĉar get string uzas malsamajn pecoj de memoro ĉiufoje. 669 00:29:18,430 --> 00:29:20,360 >> Nun ni povas vidi ĉi denove en alia ekzemplo. 670 00:29:20,360 --> 00:29:23,764 Lasu min kaj malfermu kopio-0.c. 671 00:29:23,764 --> 00:29:28,770 Mi asertas ke ĉi tiu ekzemplo tuj provu - sed malsukcesos - kopii du kordoj 672 00:29:28,770 --> 00:29:29,910 kiel sekvas. 673 00:29:29,910 --> 00:29:31,730 >> Mi intencis diri ion al la uzanto. 674 00:29:31,730 --> 00:29:34,490 Mi tiam tuj akiri kordo kaj nomas ĝin s. 675 00:29:34,490 --> 00:29:36,400 Kaj nun, mi faras ĉi ĉekon tie. 676 00:29:36,400 --> 00:29:37,990 Ni menciis tiun momenton dorso. 677 00:29:37,990 --> 00:29:42,490 Sed kiam oni eble string reveno nula, alia speciala karaktero, aŭ speciala 678 00:29:42,490 --> 00:29:45,050 simbolo Diru. 679 00:29:45,050 --> 00:29:45,900 Se ĝi estas el memoro. 680 00:29:45,900 --> 00:29:48,970 >> Ekzemple, se la uzanto estas vere esti malfacila kaj tipoj atroz 681 00:29:48,970 --> 00:29:51,220 nombro da signoj en la klavaro kaj sukcesojn Eniru. 682 00:29:51,220 --> 00:29:54,580 Se tiu numero de karakteroj nur ne povas konformi RAM por ajn freneza 683 00:29:54,580 --> 00:29:57,820 Tial, bone akiri kordoj povus tre bone reveni nula. 684 00:29:57,820 --> 00:30:01,080 >> Aŭ se via programo mem faras multan de aliaj aĵoj kaj tie estas nur 685 00:30:01,080 --> 00:30:03,790 Ne sufiĉas la memoro por get kordo sukcesos, ĝi povus fini 686 00:30:03,790 --> 00:30:05,240 supren reveni nula. 687 00:30:05,240 --> 00:30:07,160 Sed ni esti pli preciza pri kio tio estas. 688 00:30:07,160 --> 00:30:10,280 Kio estas s la datumtipo vere? 689 00:30:10,280 --> 00:30:11,610 Char stelo. 690 00:30:11,610 --> 00:30:14,560 >> Do rezultas nun ni povas senŝeligi apogi la mantelo de nula. 691 00:30:14,560 --> 00:30:17,500 Rezultas, nula estas - jes, evidente speciala simbolo. 692 00:30:17,500 --> 00:30:19,190 Sed kio estas vero? 693 00:30:19,190 --> 00:30:25,220 Vere, nula estas nur simbolo, ke ni homoj uzas por reprezenti nulo kiel bone. 694 00:30:25,220 --> 00:30:29,010 >> Do la aŭtoroj de C, kaj komputiloj pli ĝenerale, decidis jarojn 695 00:30:29,010 --> 00:30:30,010 ke, vi scias kion. 696 00:30:30,010 --> 00:30:34,850 Kial ni ne garantias ke neniu uzanto datenoj estas eterne, eterne, iam 697 00:30:34,850 --> 00:30:36,730 stokita ĉe bye nulo? 698 00:30:36,730 --> 00:30:39,610 Fakte, eĉ en mia arbitra ekzemplo antaŭe, mi ne komencu kalkuli la 699 00:30:39,610 --> 00:30:40,390 bajtoj je nulo. 700 00:30:40,390 --> 00:30:41,540 Mi komencis je unu. 701 00:30:41,540 --> 00:30:44,950 CXar Mi sciis, ke homoj en la mondo decidis rezervi la nula 702 00:30:44,950 --> 00:30:47,970 bajto en ies memoro RAM kiel io speciala. 703 00:30:47,970 --> 00:30:52,020 >> La kialo estas, iam ajn vi volas signalas ke iu iris malbone 704 00:30:52,020 --> 00:30:55,960 rilate al adresoj, vi revenis nula - alie sciata kiel nulo - 705 00:30:55,960 --> 00:30:59,410 kaj ĉar vi scias, ke tie estas neniu Legit datumojn al adreso nulo, klare 706 00:30:59,410 --> 00:31:00,400 tio signifas eraron. 707 00:31:00,400 --> 00:31:04,080 Kaj jen kial ni, per konvencio, kontrolu por nulaj kaj reveno ion 708 00:31:04,080 --> 00:31:06,260 kiel en tiuj kazoj. 709 00:31:06,260 --> 00:31:09,300 >> Do, se ni rulumu malsupren nun, ĉi tio estas nur tiam iu eraro kontrolanta, ĉiaokaze 710 00:31:09,300 --> 00:31:10,610 io estis malbone kun [? garantiaĵo?] 711 00:31:10,610 --> 00:31:13,470 entute kaj forlasis la programon per reveni frue. 712 00:31:13,470 --> 00:31:19,030 Ĉi tiu linio nun povus esti reskribita kiel tiu, kiu signifas kion? 713 00:31:19,030 --> 00:31:23,155 Maldekstre mana flanko, donu al mi alian puntero al gravulo, kaj nomas ĝin t. 714 00:31:23,155 --> 00:31:26,935 Kion mi provizon ene de t, bazita sur ĉi tiu linio de kodo? 715 00:31:26,935 --> 00:31:30,950 716 00:31:30,950 --> 00:31:32,170 >> Mi stokante a loko. 717 00:31:32,170 --> 00:31:34,742 Specife la situo kiu estis en s. 718 00:31:34,742 --> 00:31:39,000 Do, se la uzanto tajpas en saluton, kaj tiu unua saluton okazas por fini 719 00:31:39,000 --> 00:31:42,567 ĉi tie, tiam la nombro 123 estas tuj revenis el akiri 720 00:31:42,567 --> 00:31:43,810 String kaj stoki - 721 00:31:43,810 --> 00:31:44,780 kiel ni diris antaŭe - 722 00:31:44,780 --> 00:31:45,440 en s. 723 00:31:45,440 --> 00:31:50,560 >> Kiam mi nun rakontos alian sagon al oni char kaj nomas ĝin t, kion nombro estas 724 00:31:50,560 --> 00:31:53,940 laŭvorte tuj finos en t laŭ la rakonto? 725 00:31:53,940 --> 00:31:55,420 Do 123. 726 00:31:55,420 --> 00:32:00,310 >> Do teknike nun ambaŭ s kaj t notas al la ĝusta 727 00:32:00,310 --> 00:32:02,410 samajn pecojn de memoro. 728 00:32:02,410 --> 00:32:06,140 Do rimarkas kion mi faros nun al pruvi ke ĉi tiu programo estas kalesxo. 729 00:32:06,140 --> 00:32:08,820 >> Unue mi iros al postuli, kun impreso f, capitalizando 730 00:32:08,820 --> 00:32:10,080 la kopio de la kordo. 731 00:32:10,080 --> 00:32:11,660 Tiam Mi faros iom Eraro checking. 732 00:32:11,660 --> 00:32:12,160 Mi iros por certiĝi. 733 00:32:12,160 --> 00:32:16,710 Ni certigu ke la kordo t estas en Almenaŭ pli granda ol nulo en longeco 734 00:32:16,710 --> 00:32:19,190 tial ekzistas iuj karaktero tie por fakte profiti. 735 00:32:19,190 --> 00:32:22,840 >> Kaj tiam vi eble memoras tiun el antaŭaj ekzemploj. 736 00:32:22,840 --> 00:32:25,630 2 supran - kiu estas en la ctype.h dosiero. 737 00:32:25,630 --> 00:32:30,800 T krampo nulo donas al mi la nulo karaktero de la kordo t. 738 00:32:30,800 --> 00:32:34,360 Kaj 2 supra de tiu sama valoro, de Kompreneble, konvertas ĝin al majuskle. 739 00:32:34,360 --> 00:32:38,230 >> Do intuicie, ĉi emfazita linio de kodo estas capitalizando la unua 740 00:32:38,230 --> 00:32:40,250 letero en t. 741 00:32:40,250 --> 00:32:44,485 Sed gxi ne capitalizando, intuicie, la unua litero en s. 742 00:32:44,485 --> 00:32:48,130 Sed se vi pensas antaŭe, kion mi por vidi kiam mi kuros ĉi programo 743 00:32:48,130 --> 00:32:54,220 kaj presi ambaŭ la originalo, s, kaj la tiel nomataj kopio, t? 744 00:32:54,220 --> 00:32:55,350 >> Ili estas vere tuj estos la sama. 745 00:32:55,350 --> 00:32:56,600 Kaj kial ili tuj estos la sama? 746 00:32:56,600 --> 00:32:58,970 747 00:32:58,970 --> 00:33:01,020 Ili ambaŭ montras al precize la sama afero. 748 00:33:01,020 --> 00:33:01,610 Do ni faru tion. 749 00:33:01,610 --> 00:33:03,160 >> Faru kopion nulo. 750 00:33:03,160 --> 00:33:04,070 Ĝi kompilas OK. 751 00:33:04,070 --> 00:33:06,500 Permesu al mi kuri kopio nulo. 752 00:33:06,500 --> 00:33:10,110 Lasu min tajpi iun kiel saluton en ĉiuj minuskla tiam batis Eniru. 753 00:33:10,110 --> 00:33:16,520 Kaj asertas ke ambaŭ la originala s kaj la kopio estas ja identaj. 754 00:33:16,520 --> 00:33:17,920 >> Do kio vere okazis tie? 755 00:33:17,920 --> 00:33:20,100 Lasu min redesegni tiu bildo nur por rakonti la historion en 756 00:33:20,100 --> 00:33:21,340 iomete malsama maniero. 757 00:33:21,340 --> 00:33:26,060 Kio vere okazas sub la kapuĉo kiam mi deklaras ion kiel 758 00:33:26,060 --> 00:33:30,410 char komenco s, aŭ kordo s, Mi prenanta puntero - 759 00:33:30,410 --> 00:33:33,090 kio okazas al esti kvar bitokoj en la CS50 aparato 760 00:33:33,090 --> 00:33:34,410 kaj en multaj komputiloj. 761 00:33:34,410 --> 00:33:36,008 Kaj mi tuj nomas tiun ejon. 762 00:33:36,008 --> 00:33:39,810 Kaj tion nuntempe havas iu nekonata valoro. 763 00:33:39,810 --> 00:33:43,900 >> Kiam vi deklaras variablon, se vi vi mem metas valoron tie, kiu 764 00:33:43,900 --> 00:33:44,570 scias, kio estas tie. 765 00:33:44,570 --> 00:33:48,110 Ĝi povus esti iu hazarda vico de bitoj de la antaŭa ekzekuto. 766 00:33:48,110 --> 00:33:52,490 Do, kiam mi, en mia linio de kodo fari akiri ŝnuro, kaj poste stokas la reveno 767 00:33:52,490 --> 00:33:54,800 valoro en s akiri string iel - 768 00:33:54,800 --> 00:33:58,520 kaj ni fine senŝeligas reen kiel akiri kordo verkoj, iel atribuas al 769 00:33:58,520 --> 00:34:00,480 tabelo kiu probable aspektas iom kiel ĉi tio. 770 00:34:00,480 --> 00:34:05,390 H-Kaj-L-L-O, backslash nulo. 771 00:34:05,390 --> 00:34:09,510 >> Ni supozu, ke tio estas adreso 123 ĝuste unua konsekvenca. 772 00:34:09,510 --> 00:34:13,000 Do nepre string revenas, en la emfazita linio tie, ĝi redonas la 773 00:34:13,000 --> 00:34:15,000 numeron ni diris, 123. 774 00:34:15,000 --> 00:34:17,420 Do kio vere iras ene de s here? 775 00:34:17,420 --> 00:34:26,590 >> Nu, kio vere iras ene de s estas 123. 776 00:34:26,590 --> 00:34:29,250 Sed sincere, mi ricevas iom konfuzita de ĉiuj el tiuj adresoj, 777 00:34:29,250 --> 00:34:30,320 ĉiuj el tiuj arbitraj nombroj. 778 00:34:30,320 --> 00:34:32,290 123, 124, 127. 779 00:34:32,290 --> 00:34:34,570 Do ni vere simpligi la mondo iom. 780 00:34:34,570 --> 00:34:38,800 >> Kiam ni parolas pri indikoj, sincere, al ni homoj, kiu la heck zorgas kie 781 00:34:38,800 --> 00:34:39,870 aĵoj estas en memoro? 782 00:34:39,870 --> 00:34:41,080 Tio estas tute arbitra. 783 00:34:41,080 --> 00:34:43,370 Ĝi tuj dependos de kiom multe virsxafo la uzanto havas. 784 00:34:43,370 --> 00:34:46,590 Ĝi tuj dependas de kiam en la tago vi ruli la programaron, eble, kaj 785 00:34:46,590 --> 00:34:48,250 kio enigo la uzanto donas al vi. 786 00:34:48,250 --> 00:34:50,060 Ni logxis en negrava detaloj. 787 00:34:50,060 --> 00:34:54,230 >> Do ni abstrakta for kaj diri ke, kiam vi kuras linion de kodo kiel oriento, 788 00:34:54,230 --> 00:34:57,320 char stelo s ricevas la reveno valoro de get kordo. 789 00:34:57,320 --> 00:35:02,720 Kial ni ne anstataŭ ĝuste desegni kion ni teni nomante puntero kvazaŭ ĝi estas 790 00:35:02,720 --> 00:35:04,140 montrante iun? 791 00:35:04,140 --> 00:35:07,000 Do mi asertas nun ke s supren estas puntero - 792 00:35:07,000 --> 00:35:08,480 sub la kapuĉo ĝi estas adreso. 793 00:35:08,480 --> 00:35:11,330 Sed ĝi estas ĝuste montrante la unua bitoko en la 794 00:35:11,330 --> 00:35:12,780 ĉeno kiu estas estinta revenis. 795 00:35:12,780 --> 00:35:16,710 >> Se mi nun revenu al la kodo tie ĉi, kio okazas ĉe ĉi tiu linio? 796 00:35:16,710 --> 00:35:20,020 Nu, en ĉi emfazita linio nun, Mi deklarante ŝajne alia 797 00:35:20,020 --> 00:35:21,070 variablo nomas t. 798 00:35:21,070 --> 00:35:25,700 Sed estas ankaŭ pointer, do mi tuj desegni ĝin kiel, en teorio, la ĝusta 799 00:35:25,700 --> 00:35:26,710 samgrandaj skatolo. 800 00:35:26,710 --> 00:35:28,160 Kaj mi tuj nomas ĝin t. 801 00:35:28,160 --> 00:35:33,500 >> Kaj nun se ni reiru al la kodo denove, kiam mi stoki s ene de t, 802 00:35:33,500 --> 00:35:36,920 kion mi teknike metante ene de t? 803 00:35:36,920 --> 00:35:39,350 Nu teknike, tiu estis la numero 123. 804 00:35:39,350 --> 00:35:42,270 Do vere mi devus skribi la nombro 123 tie. 805 00:35:42,270 --> 00:35:43,900 Sed ni prenu ĝin pli alta nivelo. 806 00:35:43,900 --> 00:35:48,090 t, se ĝi estas nur pointer, intuicie, estas ĝuste tio. 807 00:35:48,090 --> 00:35:49,800 Tio estas ĉio tio, kio estas stokita en tie. 808 00:35:49,800 --> 00:35:54,970 >> Do nun en la lastaj interesaj linioj de kodo, kiam mi vere irad 809 00:35:54,970 --> 00:36:00,680 capitalizando la nula karaktero en t, kio okazas? 810 00:36:00,680 --> 00:36:06,310 Nu, t krampo nulo estas nun notas al kio karaktero, supozeble? 811 00:36:06,310 --> 00:36:07,460 >> Ĝi estas indikante h. 812 00:36:07,460 --> 00:36:08,870 Ĉar t krampo nulo - 813 00:36:08,870 --> 00:36:12,490 memoras, tiu estas maljuna sintakso. t krampo nulo nur signifas se t estas ĉeno, t 814 00:36:12,490 --> 00:36:15,590 krampo nulo signifas atingi la nula karakteron en tiu forto. 815 00:36:15,590 --> 00:36:18,650 Do kion tio vere signifas estas iri al tiu tabelo - 816 00:36:18,650 --> 00:36:21,520 kaj jes, tiu povus esti 123, povas esti tiu 124. 817 00:36:21,520 --> 00:36:22,790 Sed estas tute relativaj, memori. 818 00:36:22,790 --> 00:36:25,640 Kiam ajn parolas tabelo, ni havas la avantaĝo de parolas 819 00:36:25,640 --> 00:36:27,000 relativa indeksoj. 820 00:36:27,000 --> 00:36:31,120 >> Kaj tial ni nun povas nur supozi ke t krampo nulo estas h. 821 00:36:31,120 --> 00:36:35,090 Do se mi nomas 2 supra sur ĝi, kio tio estas vere faras estas capitalizando 822 00:36:35,090 --> 00:36:38,290 la minuskla h al majuskle H. Sed kompreneble, kio estas s? 823 00:36:38,290 --> 00:36:41,010 Ĝi montris la saman Darn kordo. 824 00:36:41,010 --> 00:36:44,200 >> Do tio estas ĉio tio, kio estis okazante en ĉi tiu kodo ĝis nun. 825 00:36:44,200 --> 00:36:45,960 Do kio estas do la implico? 826 00:36:45,960 --> 00:36:48,300 Kiel ni ripari tiujn du problemojn? 827 00:36:48,300 --> 00:36:50,870 Kiel ni komparu al reala kordoj? 828 00:36:50,870 --> 00:36:53,720 >> Nu intuicie, kiel farus vi ĉirkaŭiras komparas du 829 00:36:53,720 --> 00:36:55,090 kordoj por vera egaleco? 830 00:36:55,090 --> 00:36:58,920 831 00:36:58,920 --> 00:37:00,750 >> Kion tio signifas se du kordoj estas egalaj? 832 00:37:00,750 --> 00:37:04,330 Klare ne ke iliaj adresoj estas egali en memoro, ĉar tio estas malalta 833 00:37:04,330 --> 00:37:06,590 nivelo efektivigo detalo. 834 00:37:06,590 --> 00:37:08,360 Ĉiuj signoj estas la samaj. 835 00:37:08,360 --> 00:37:12,810 Do mi proponas, kaj lasu min enkonduki en la versio de compare.c 836 00:37:12,810 --> 00:37:14,970 ĉi tie, do kompari-1.c. 837 00:37:14,970 --> 00:37:19,590 >> Permesu al mi proponi ke ni ankoraŭ akiri pointer nomita s, kaj vendejo en tio la 838 00:37:19,590 --> 00:37:20,610 redoni valoro de get kordo. 839 00:37:20,610 --> 00:37:21,750 Ni faros la samon kun t. 840 00:37:21,750 --> 00:37:23,230 Do neniu el la kodo estas malsamaj. 841 00:37:23,230 --> 00:37:25,420 Mi tuj aldonos iom pli eraron kontrolinte nun. 842 00:37:25,420 --> 00:37:29,390 Do nun ke ni estas speco de senŝeligante reen ĉi tavoloj en CS50 de kia kordo 843 00:37:29,390 --> 00:37:33,520 efektive estas, ni devas esti pli anal pri certigi ke ni ne trouzi 844 00:37:33,520 --> 00:37:35,330 nevalida valoroj kiel nula. 845 00:37:35,330 --> 00:37:36,440 >> Do mi simple tuj kontroli. 846 00:37:36,440 --> 00:37:41,490 Se s ne egala nula kaj t ne egala nula, tio signifas ke ni estas okej. 847 00:37:41,490 --> 00:37:44,460 Get kordo ne firmigu ĝis atingi ĉu de tiuj ŝnuroj. 848 00:37:44,460 --> 00:37:51,270 Kaj vi povas eble diveni nun, kion ne STR CMP supozeble faras? 849 00:37:51,270 --> 00:37:52,000 String kompari. 850 00:37:52,000 --> 00:37:55,470 >> Do se vi havas programon en java antaŭ, ĉi tio estas kiel la egalaj metodo en la 851 00:37:55,470 --> 00:37:56,490 kordo klaso. 852 00:37:56,490 --> 00:37:57,890 Sed por tiuj el vi, kiuj ne havas planita antaŭ, 853 00:37:57,890 --> 00:37:59,320 ĉi tio estas nur c funkcio. 854 00:37:59,320 --> 00:38:02,180 Ĝi okazas veni en dosiero nomata string.h. 855 00:38:02,180 --> 00:38:03,830 Tie estas kie ĝi estas deklarita. 856 00:38:03,830 --> 00:38:05,110 >> Kaj string kompari - 857 00:38:05,110 --> 00:38:07,530 Mi fakte forgesis lian uzadon, sed ne gravas tio. 858 00:38:07,530 --> 00:38:10,470 Memoru ke ni povas fari homo, instigi kompari. 859 00:38:10,470 --> 00:38:12,590 Kaj jen tuj alportu la Linukso programistoj manlibro. 860 00:38:12,590 --> 00:38:14,060 Kaj estas, sincere, iom kamufla. 861 00:38:14,060 --> 00:38:15,270 Sed mi povas vidi ĉi tie ke, yep. 862 00:38:15,270 --> 00:38:17,570 Mi devas inkluzivi string.h. 863 00:38:17,570 --> 00:38:20,590 >> Kaj ĝi diras ĉi tie sub priskribon, "la kordo Komparu funkcio komparas 864 00:38:20,590 --> 00:38:24,560 la du kordoj S1 kaj S2. "Kaj S1 kaj S2 estas ŝajne la du 865 00:38:24,560 --> 00:38:26,120 argumentoj pasis in 866 00:38:26,120 --> 00:38:28,650 Mi ne vere memoras kio const estas, sed nun rimarkas - 867 00:38:28,650 --> 00:38:31,480 kaj vi vidas cxi tiun jam kiam vi jam uzas la paĝoj de man se vi 868 00:38:31,480 --> 00:38:32,390 havi ĉion - 869 00:38:32,390 --> 00:38:36,220 ke char stelo estas simple sinonimo kun kordoj. 870 00:38:36,220 --> 00:38:40,440 >> Do ĝi komparas la du kordoj, S1 kaj S2, kaj denove entjero malpli 871 00:38:40,440 --> 00:38:44,930 ol aŭ egala al aŭ pli granda ol nulo se S1 estas trovita, respektive, por esti 872 00:38:44,930 --> 00:38:47,450 malpli ol, aŭ kongruas, aŭ esti pli granda ol S2. 873 00:38:47,450 --> 00:38:51,220 Tio estas nur tre kompleksa maniero diri ke kordo kompari revenas 874 00:38:51,220 --> 00:38:55,760 nulo se du kordoj estas intuicie identa, karaktero por 875 00:38:55,760 --> 00:38:57,120 karakteron por karaktero. 876 00:38:57,120 --> 00:38:59,970 >> Denove negativa nombro se s, alfabete, supozas 877 00:38:59,970 --> 00:39:01,010 veni antaux t. 878 00:39:01,010 --> 00:39:05,300 Aŭ redonas pozitiva nombro se s supozas veni post t 879 00:39:05,300 --> 00:39:06,170 alfabete. 880 00:39:06,170 --> 00:39:08,360 Do kun tiu simpla funkcio, povis vi, ekzemple, ordigi 881 00:39:08,360 --> 00:39:09,770 tutan faskon da vortoj? 882 00:39:09,770 --> 00:39:13,984 >> Do, en tiu nova versio, mi tuj por antaŭeniri kaj realigi compare1. 883 00:39:13,984 --> 00:39:15,750 Dot oblikvo kompari unu. 884 00:39:15,750 --> 00:39:18,030 Mi tajpas en saluton en ĉiuj minuskloj. 885 00:39:18,030 --> 00:39:20,300 Mi tuj tajpi en saluton en la tuta minuskla denove. 886 00:39:20,300 --> 00:39:23,340 Kaj dankeme nun rimarkas Mi tajpis la saman aferon. 887 00:39:23,340 --> 00:39:27,520 >> Dume, se mi tajpas en saluton en suba kazo kaj SALUTON en majusklo kaj 888 00:39:27,520 --> 00:39:29,710 kompari ilin, mi tajpis malsamaj aferoj. 889 00:39:29,710 --> 00:39:32,530 Ĉar ne nur estas la adresoj malsamaj, sed ni komparas 890 00:39:32,530 --> 00:39:35,350 malsamaj karakteroj denove kaj denove. 891 00:39:35,350 --> 00:39:37,320 >> Nu ni iru kaj fiksi unu alia problemo nun. 892 00:39:37,320 --> 00:39:41,590 Permesu al mi malfermi versio unu el kopio, kiu nun direktas 893 00:39:41,590 --> 00:39:42,900 ĉi tiu afero kiel sekvas. 894 00:39:42,900 --> 00:39:45,650 Kaj ĉi tiu tuj rigardi iom pli kompleksa. 895 00:39:45,650 --> 00:39:49,320 Sed se vi pensas pri kio problemo oni bezonas solvi, espereble tio estos 896 00:39:49,320 --> 00:39:51,870 certe en nur momento nun. 897 00:39:51,870 --> 00:39:57,280 >> Do tiu unua linio, char komenco t, en lego de terminoj povus iu proponi 898 00:39:57,280 --> 00:39:59,450 kio estas tiu linio tie signifas? 899 00:39:59,450 --> 00:40:01,050 Char stelo t, kio estas tio faras? 900 00:40:01,050 --> 00:40:06,660 901 00:40:06,660 --> 00:40:07,210 >> Bona. 902 00:40:07,210 --> 00:40:09,500 Krei puntero al iu loko en memoro. 903 00:40:09,500 --> 00:40:10,930 Kaj lasu min rafini gxin iomete. 904 00:40:10,930 --> 00:40:17,180 Deklari variablon kiu stokas la adreso de iu char en memoro, nur 905 00:40:17,180 --> 00:40:18,480 esti iom pli ĝentila. 906 00:40:18,480 --> 00:40:21,210 >> Bone, do nun la dekstra flanko, mi havas neniam vidis unu de tiuj funkcioj 907 00:40:21,210 --> 00:40:22,660 antaŭe, malloc. 908 00:40:22,660 --> 00:40:26,980 Sed kio povus signifas? 909 00:40:26,980 --> 00:40:28,050 Atribuo de memoro. 910 00:40:28,050 --> 00:40:29,410 Memoro atribuo. 911 00:40:29,410 --> 00:40:33,050 >> Do rezultas, ĝis nun, ni ne vere havis potencan vojo de 912 00:40:33,050 --> 00:40:36,210 petante la mastruma sistemo, donu al mi iom memoro. 913 00:40:36,210 --> 00:40:39,980 Pli ĝuste, ni nun havas funkcion nomita malloc kiu faras ĝuste tion. 914 00:40:39,980 --> 00:40:42,960 Kvankam tio estas iom de distro ĝuste nun, rimarki ke en 915 00:40:42,960 --> 00:40:46,200 inter la du parentezoj nur tuj estos numeron. 916 00:40:46,200 --> 00:40:48,510 Kie mi tajpis en demando markoj povas esti numero. 917 00:40:48,510 --> 00:40:51,020 >> Kaj tiu numero signifas, donu al mi 10 bajtoj. 918 00:40:51,020 --> 00:40:52,320 Donu al mi 20 bajtoj. 919 00:40:52,320 --> 00:40:53,820 Donu al mi 100 bajtoj. 920 00:40:53,820 --> 00:40:56,500 Kaj malloc faros lian best demandas la mastruma sistemo - 921 00:40:56,500 --> 00:40:57,630 Linukso, en ĉi tiu kazo - 922 00:40:57,630 --> 00:40:59,630 bona, estas ilia 100 bitokoj de RAM disponebla? 923 00:40:59,630 --> 00:41:04,320 Se jes, revenu tiuj bajtoj al mi per redonante la adreso de kiu el 924 00:41:04,320 --> 00:41:06,610 tiuj bitokoj, eble? 925 00:41:06,610 --> 00:41:07,610 La tre unua. 926 00:41:07,610 --> 00:41:10,460 >> Do jen ankaŭ - kaj tio estas superreganta en C, iam vi 927 00:41:10,460 --> 00:41:11,680 kontraktanta kun adresoj? 928 00:41:11,680 --> 00:41:15,830 Vi preskaŭ ĉiam traktas la unua tia adreso, kiel ajn granda 929 00:41:15,830 --> 00:41:19,490 eron de memoro vi esti enmanigis dorso, por tiel diri. 930 00:41:19,490 --> 00:41:20,880 >> Do ni plonĝi en ĉi tie. 931 00:41:20,880 --> 00:41:23,940 Mi klopodas destini kiel multaj bajtoj, ekzakte? 932 00:41:23,940 --> 00:41:24,080 Nu. 933 00:41:24,080 --> 00:41:26,090 String longo de s - ni fari konkretan ekzemplon. 934 00:41:26,090 --> 00:41:30,700 Se s estas saluton, H-E-L-L-Ho, kio estas la korda longeco de s, evidente? 935 00:41:30,700 --> 00:41:32,010 Do ĝi estas kvin. 936 00:41:32,010 --> 00:41:34,590 Sed mi faras plus 1 en tio, kial? 937 00:41:34,590 --> 00:41:37,700 Kial mi volas ses bitokoj anstataŭ kvin? 938 00:41:37,700 --> 00:41:38,790 La nula karaktero. 939 00:41:38,790 --> 00:41:41,210 >> Mi ne volas forlasi cxi tiun speciala nula karaktero. 940 00:41:41,210 --> 00:41:45,160 Ĉar se mi faras kopion de Saluton kaj nur faru H-E-L-L-Ho, sed mi ne metas 941 00:41:45,160 --> 00:41:50,160 tiu speciala karaktero, la komputilo ne havu, por hazardo, backslash 942 00:41:50,160 --> 00:41:51,730 nulo tie por mi. 943 00:41:51,730 --> 00:41:55,570 Kaj do se mi provas eltrovi la longeco de la teksto, mi povus pensi, ke 944 00:41:55,570 --> 00:41:59,360 ĝi estas 20 signojn longa, aŭ de miliono signojn longa se mi simple neniam okazi 945 00:41:59,360 --> 00:42:01,050 bati backslash nulo. 946 00:42:01,050 --> 00:42:05,780 >> Do ni bezonas ses bitokoj por stoki H-Kaj-L-L-O, backslash nulo. 947 00:42:05,780 --> 00:42:07,870 Kaj tiam ĉi tio estas nur esti super anal. 948 00:42:07,870 --> 00:42:10,700 Supozu ke mi forgesos, kion la grandeco de char estas. 949 00:42:10,700 --> 00:42:12,020 Ni parolas tiele ĝi estas unu bajto. 950 00:42:12,020 --> 00:42:12,860 Kaj ĝi kutime estas. 951 00:42:12,860 --> 00:42:15,425 En teorio, ĝi povus esti io malsama, en malsama Mac aŭ 952 00:42:15,425 --> 00:42:16,250 malsamaj PC. 953 00:42:16,250 --> 00:42:19,650 >> Do rezultas tie estas tio operatoro vokis sizeof ke se vi transpasxas la 954 00:42:19,650 --> 00:42:22,680 nomo de datumtipo - kiel char, aŭ int, aŭ float - 955 00:42:22,680 --> 00:42:26,930 ĝin rakontos al vi, dinamike, kiom da bajtoj a char prenas sur tiu 956 00:42:26,930 --> 00:42:28,090 aparta komputilo. 957 00:42:28,090 --> 00:42:31,360 >> Do tiu estas efektive nur kiel diri fojojn 1 aŭ 958 00:42:31,360 --> 00:42:32,440 fojoj nenion. 959 00:42:32,440 --> 00:42:36,340 Sed mi faras ĝin nur por esti super anal, ke ĉiaokaze oni char diferencas 960 00:42:36,340 --> 00:42:40,610 en via komputilo kontre mia, tiamaniere la matematiko estas ĉiam tuj ekiri. 961 00:42:40,610 --> 00:42:43,720 >> Fine, cxi tie mi kontroli por nula, kiu estas ĉiam bona praktiko - denove, 962 00:42:43,720 --> 00:42:44,920 iam ni pritraktas montriloj. 963 00:42:44,920 --> 00:42:47,520 Se malloc ne povis doni mi ses byes - kiu estas 964 00:42:47,520 --> 00:42:49,210 neverŝajna, sed ĉiaokaze - 965 00:42:49,210 --> 00:42:50,730 reveni unu tuj. 966 00:42:50,730 --> 00:42:53,290 Kaj nun iru antaŭen kaj kopii la kordo kiel sekvas. 967 00:42:53,290 --> 00:42:57,240 Kaj tio estas familiara sintakso, kvankam en malsama papero. 968 00:42:57,240 --> 00:43:01,210 >> Mi tuj iros antaŭen kaj akiri la kordo longo de s kaj konservas ĝin en n. 969 00:43:01,210 --> 00:43:06,620 Mi tiam tuj persisti de i egalas nulo ĝis kaj inkluzive de n, 970 00:43:06,620 --> 00:43:08,410 pli granda ol aŭ egala al. 971 00:43:08,410 --> 00:43:13,540 Por ke en ĉiu ripeto, mi metis la th,-a karaktero de s en la th,-a 972 00:43:13,540 --> 00:43:15,380 karaktero de t. 973 00:43:15,380 --> 00:43:18,190 >> Do kio vere okazas sube la kapuĉo tie? 974 00:43:18,190 --> 00:43:22,140 Nu, se tio, ekzemple, estas s - 975 00:43:22,140 --> 00:43:26,400 kaj mi tajpis en la vorto H-E-L-L-O kaj tie estas backslash nulo. 976 00:43:26,400 --> 00:43:29,020 Kaj denove, ĉi tiu estas s indikante tie. 977 00:43:29,020 --> 00:43:30,830 Kaj ĉi tie nun estas t. 978 00:43:30,830 --> 00:43:34,860 >> Kaj tion notas nun al kopion de memoro, ĉu ne? 979 00:43:34,860 --> 00:43:37,340 Malloc donis al mi tuta eron de memoro. 980 00:43:37,340 --> 00:43:41,440 Mi ne scias komence kio estas en iu el tiuj lokoj. 981 00:43:41,440 --> 00:43:44,340 Do mi tuj pensas pri tiuj kiel tutan faskon da demando markoj. 982 00:43:44,340 --> 00:43:50,190 >> Sed tuj kiam mi komencas looping de nulo plu supren tra la longo de s, t 983 00:43:50,190 --> 00:43:52,790 krampo nulo kaj t krampo 1 - 984 00:43:52,790 --> 00:43:55,080 kaj mi metos ĉi nun en la supre - 985 00:43:55,080 --> 00:44:04,190 t krampo nulo kaj s krampo nulo signifas ke mi iros al kopiado 986 00:44:04,190 --> 00:44:09,875 ripete h en tie, E-L-L-O. Plus, ĉar mi faris pli 987 00:44:09,875 --> 00:44:12,370 1, backslash nulo. 988 00:44:12,370 --> 00:44:19,060 >> Do nun en la kazo de komparu-1.c, en la fino, se mi elprinti la 989 00:44:19,060 --> 00:44:24,760 kapitaligo de t, ni devus vidi, ke s estas neŝanĝita. 990 00:44:24,760 --> 00:44:26,090 Lasu min nun kaj faros cxi tion. 991 00:44:26,090 --> 00:44:28,630 Do fari copy1. 992 00:44:28,630 --> 00:44:30,860 Dot oblikvo copy1. 993 00:44:30,860 --> 00:44:33,670 Mi tuj tajpi en saluton, Enter. 994 00:44:33,670 --> 00:44:37,430 Kaj nun rimarkas, nur la kopion estis majuskloj. 995 00:44:37,430 --> 00:44:40,890 Ĉar mi vere havas du pecoj de memoro. 996 00:44:40,890 --> 00:44:44,390 >> Bedaŭrinde, vi povas fari iu bela malbona kaj sufiĉe danĝeraj aferoj ĉi tie. 997 00:44:44,390 --> 00:44:49,290 Lasu min eltiri supren ekzemplo tie nun, kiu donas al ni ekzemplon de kelkaj 998 00:44:49,290 --> 00:44:51,540 malsamaj linioj. 999 00:44:51,540 --> 00:44:56,040 Do simple intuicie tie, la unua linio de kodo, int stelo x, deklarante 1000 00:44:56,040 --> 00:44:57,340 variablo nomata x. 1001 00:44:57,340 --> 00:44:58,810 Kaj kio estas la datumtipo de tiu variablo? 1002 00:44:58,810 --> 00:45:01,820 1003 00:45:01,820 --> 00:45:04,290 Kio estas la datumtipon de tiu variablo? 1004 00:45:04,290 --> 00:45:06,980 Tio ne estis la cliffhanger. 1005 00:45:06,980 --> 00:45:08,350 >> La datumtipo estas int stelo. 1006 00:45:08,350 --> 00:45:12,600 Do kion tio signifas? x volo stoki la adreso de int. 1007 00:45:12,600 --> 00:45:13,520 Simpla. 1008 00:45:13,520 --> 00:45:16,220 Y estas tuj stoki la adreso de int. 1009 00:45:16,220 --> 00:45:18,390 Kio estas la tria linio de kodo faras tie? 1010 00:45:18,390 --> 00:45:21,850 Ĝi estas atribuo kiom da bajtoj, plej verŝajne? 1011 00:45:21,850 --> 00:45:22,350 Kvar. 1012 00:45:22,350 --> 00:45:25,460 Pro la grandeco de int estas ĝenerale kvar, malloc de kvar donas 1013 00:45:25,460 --> 00:45:29,950 mi apogi la adreso de eron de memoro, la unua de kies bajtoj estas 1014 00:45:29,950 --> 00:45:32,110 stokita nun en x. 1015 00:45:32,110 --> 00:45:34,410 >> Nun ni movi iom rapide. 1016 00:45:34,410 --> 00:45:35,760 Stelo x signifas kion? 1017 00:45:35,760 --> 00:45:38,480 1018 00:45:38,480 --> 00:45:42,590 Ĝi signifas iri al tiu adreso kaj metis kio numero tie? 1019 00:45:42,590 --> 00:45:43,870 Metu la numero 42 tie. 1020 00:45:43,870 --> 00:45:47,590 Stelo y signifas iri al kio estas ĉe y kaj metis la numero 13 tie. 1021 00:45:47,590 --> 00:45:48,600 >> Sed atendu momenton. 1022 00:45:48,600 --> 00:45:51,640 Kio estas en y en la momento? 1023 00:45:51,640 --> 00:45:54,950 Kio adreso estas y provizon? 1024 00:45:54,950 --> 00:45:55,770 Ni ne scias, ĉu ne? 1025 00:45:55,770 --> 00:45:59,230 Ni neniam iam uzi la atribuo operatoro engaĝante y. 1026 00:45:59,230 --> 00:46:03,370 Do y kiel deklaritaj en la dua linio de kodo estas nur iuj rubo valoro, granda 1027 00:46:03,370 --> 00:46:04,760 demandosigno por tiel diri. 1028 00:46:04,760 --> 00:46:07,230 Ĝi povus indikante hazarde al nenio en la memoro, kiu 1029 00:46:07,230 --> 00:46:08,340 estas ĝenerale malbona. 1030 00:46:08,340 --> 00:46:13,540 >> Tuj, kiam ni batis tiu linio tie, stelo y estas 13, io malbona, 1031 00:46:13,540 --> 00:46:17,220 iu tre malbona estas okazi al Binky. 1032 00:46:17,220 --> 00:46:25,810 Do ni vidu kio okazas por fini pasante al Binky tie en ĉi tiu minuto 1033 00:46:25,810 --> 00:46:26,200 aŭ tiel rigardi. 1034 00:46:26,200 --> 00:46:26,490 >> [VIDEO reprodukto] 1035 00:46:26,490 --> 00:46:26,745 >> -He, Binky. 1036 00:46:26,745 --> 00:46:27,000 Veki. 1037 00:46:27,000 --> 00:46:29,296 Estas tempo por puntero amuzo. 1038 00:46:29,296 --> 00:46:30,680 >> -Kio estas tio? 1039 00:46:30,680 --> 00:46:31,980 Lernu pri indikoj? 1040 00:46:31,980 --> 00:46:34,010 Ho, goodie. 1041 00:46:34,010 --> 00:46:37,220 >> -Nu, por komenci, mi supozas ke ni estas tuj bezonos paron montriloj. 1042 00:46:37,220 --> 00:46:37,930 >> -Akcepti. 1043 00:46:37,930 --> 00:46:41,650 Ĉi tiu kodo atribuas du montriloj kiu povas noti al entjeroj. 1044 00:46:41,650 --> 00:46:43,760 >> -Bone, bone, mi vidas la du montriloj. 1045 00:46:43,760 --> 00:46:45,850 Sed ili ne ŝajnas esti indikante nenion. 1046 00:46:45,850 --> 00:46:46,490 >> -Tio estas prava. 1047 00:46:46,490 --> 00:46:48,630 Komence, montriloj ne indikas nenion. 1048 00:46:48,630 --> 00:46:51,700 La aferoj oni indikas nomiĝas pointees, kaj fiksante ilin estas 1049 00:46:51,700 --> 00:46:52,850 aparta paŝo. 1050 00:46:52,850 --> 00:46:53,740 >> -Ho, dekstra, rajto. 1051 00:46:53,740 --> 00:46:54,500 Mi sciis tion. 1052 00:46:54,500 --> 00:46:56,270 La pointees estas apartaj. 1053 00:46:56,270 --> 00:46:58,553 Do kiel vi rezervu pointee? 1054 00:46:58,553 --> 00:46:59,480 >> -Akcepti. 1055 00:46:59,480 --> 00:47:03,707 Nu, tiu kodo atribuas nova entjeroj pointee, kaj tiu parto aroj x 1056 00:47:03,707 --> 00:47:05,520 atentigi al ĝi. 1057 00:47:05,520 --> 00:47:06,760 >> -He, kiu aspektas pli bone. 1058 00:47:06,760 --> 00:47:08,520 Do faru ĝin fari ion. 1059 00:47:08,520 --> 00:47:09,530 >> -Akcepti. 1060 00:47:09,530 --> 00:47:14,110 Mi dereference la puntero x stoki la nombro 42 en gxian pointee. 1061 00:47:14,110 --> 00:47:17,660 Por ĉi tiu lertaĵo, mi bezonas mian magion sceptron de dereferencing. 1062 00:47:17,660 --> 00:47:20,695 >> -Via magio sceptron de dereferencing? 1063 00:47:20,695 --> 00:47:22,632 Uh, tio estas granda. 1064 00:47:22,632 --> 00:47:24,620 >> -Ĉi tio estas kion la kodo aspektas. 1065 00:47:24,620 --> 00:47:27,526 Mi ĵus instalis la numero, kaj - 1066 00:47:27,526 --> 00:47:28,250 >> -He, rigardu. 1067 00:47:28,250 --> 00:47:29,680 Tie iras. 1068 00:47:29,680 --> 00:47:34,520 Do fari dereference sur x sekvas la sago por aliri lia pointee. 1069 00:47:34,520 --> 00:47:36,690 En ĉi tiu kazo, por stoki 42 en tie. 1070 00:47:36,690 --> 00:47:40,890 Hej, provu uzi ĝin stoki la nombro 13 tra la alia puntero, y. 1071 00:47:40,890 --> 00:47:42,125 >> -Akcepti. 1072 00:47:42,125 --> 00:47:46,810 Mi nur volas transiri ĉi tie al y kaj get la numero 13 starigis. 1073 00:47:46,810 --> 00:47:50,890 Kaj tiam prenu la sceptron de dereferencing kaj ĝuste - 1074 00:47:50,890 --> 00:47:52,430 whoa! 1075 00:47:52,430 --> 00:47:53,030 >> -Ho, bona. 1076 00:47:53,030 --> 00:47:54,610 Tio ne funkcios. 1077 00:47:54,610 --> 00:47:58,200 Diru, Binky, mi ne kredas ke la dereferencing y estas bona ideo, 1078 00:47:58,200 --> 00:48:01,370 ĉar la starigadon de la pointee estas aparta paŝo. 1079 00:48:01,370 --> 00:48:03,460 Kaj mi ne kredas ke ni iam faris. 1080 00:48:03,460 --> 00:48:03,810 >> -Hmm. 1081 00:48:03,810 --> 00:48:05,160 Bona punkto. 1082 00:48:05,160 --> 00:48:07,410 >> -Jes, ni atribuis la puntero y. 1083 00:48:07,410 --> 00:48:10,045 Sed ni neniam starigis ĝin atentigi al pointee. 1084 00:48:10,045 --> 00:48:10,490 >> -Hmm. 1085 00:48:10,490 --> 00:48:12,170 Tre observanto. 1086 00:48:12,170 --> 00:48:13,790 >> -He, vi serĉas bona tie, Binky. 1087 00:48:13,790 --> 00:48:16,920 Ĉu vi povas ripari ĝin tiel ke y punktoj al la sama pointee kiel x? 1088 00:48:16,920 --> 00:48:17,810 >> -Certe. 1089 00:48:17,810 --> 00:48:20,300 Mi uzas mian magian bastonon de pointer farita. 1090 00:48:20,300 --> 00:48:22,240 >> -Ĉu tiu tuj estos problemo kiel antaŭe? 1091 00:48:22,240 --> 00:48:22,665 >> -No. 1092 00:48:22,665 --> 00:48:24,300 Ĉi tio ne tuŝas la pointees. 1093 00:48:24,300 --> 00:48:27,880 Ĝi nur ŝanĝas unu puntero atentigi al la sama afero kiel alia. 1094 00:48:27,880 --> 00:48:28,970 >> -Ho, mi vidas. 1095 00:48:28,970 --> 00:48:31,730 Nun y poentojn al la sama loko kiel x. 1096 00:48:31,730 --> 00:48:32,450 Do atendu. 1097 00:48:32,450 --> 00:48:33,490 Nun y estas fiksita. 1098 00:48:33,490 --> 00:48:34,630 Ĝi havas pointee. 1099 00:48:34,630 --> 00:48:36,520 Do vi povas provi la sceptron de dereferencing denove 1100 00:48:36,520 --> 00:48:39,200 por sendi la 13an super. 1101 00:48:39,200 --> 00:48:39,840 >> -Akcepti. 1102 00:48:39,840 --> 00:48:41,570 Jen iras. 1103 00:48:41,570 --> 00:48:42,870 >> -He, rigardu tion. 1104 00:48:42,870 --> 00:48:44,320 Nun dereferencing laboroj sur y. 1105 00:48:44,320 --> 00:48:47,020 Kaj ĉar la indikoj estas dividi ke oni pointee, ili 1106 00:48:47,020 --> 00:48:48,585 ambaŭ vidas la 13. 1107 00:48:48,585 --> 00:48:49,040 >> -Jes. 1108 00:48:49,040 --> 00:48:49,670 Dividi. 1109 00:48:49,670 --> 00:48:50,380 Kion ajn. 1110 00:48:50,380 --> 00:48:52,290 Do ni iras ŝaltilo lokoj nun? 1111 00:48:52,290 --> 00:48:52,970 >> -Ho, rigardu. 1112 00:48:52,970 --> 00:48:54,150 Ni estas el la tempo. 1113 00:48:54,150 --> 00:48:55,200 >> -Sed - 1114 00:48:55,200 --> 00:48:57,060 >> -Nur memoru la tri pointer regulojn. 1115 00:48:57,060 --> 00:49:00,100 Numero unu, la baza strukturo estas, ke vi havas puntero. 1116 00:49:00,100 --> 00:49:02,170 Kaj ĝi notas pli al pointee. 1117 00:49:02,170 --> 00:49:04,160 Sed la puntero kaj pointee estas apartaj. 1118 00:49:04,160 --> 00:49:06,460 Kaj la komuna eraro estas starigi pointer, sed por 1119 00:49:06,460 --> 00:49:08,540 forgesu donita pointee. 1120 00:49:08,540 --> 00:49:12,460 >> Numero du, pointer dereferencing startas ĉe la puntero kaj sekvas lian 1121 00:49:12,460 --> 00:49:14,570 sago super aliri lia pointee. 1122 00:49:14,570 --> 00:49:18,640 Kiel ni ĉiuj scias, tiu nur funkcias se Estas pointee, kiu alvenas al 1123 00:49:18,640 --> 00:49:19,790 regi numero unu. 1124 00:49:19,790 --> 00:49:23,670 >> Numero tri, pointer atribuo prenas unu puntero kaj ŝanĝoj al punkto al 1125 00:49:23,670 --> 00:49:25,850 la sama pointee kiel alia puntero. 1126 00:49:25,850 --> 00:49:27,840 Do post la farita, la du montriloj volo 1127 00:49:27,840 --> 00:49:29,430 indikas la saman pointee. 1128 00:49:29,430 --> 00:49:31,600 Foje, ke nomiĝas dividi. 1129 00:49:31,600 --> 00:49:33,430 Kaj jen ĉio estas al ĝi, vere. 1130 00:49:33,430 --> 00:49:33,840 Bye bye nun. 1131 00:49:33,840 --> 00:49:34,300 >> [FINO reprodukto de vídeo] 1132 00:49:34,300 --> 00:49:36,940 >> DAVID Malan: Do pli en montriloj, pli en Binky proksima semajno. 1133 00:49:36,940 --> 00:49:38,190 Ni vidos vin lunde. 1134 00:49:38,190 --> 00:49:42,187