1 00:00:00,000 --> 00:00:02,520 [Powered by Google Translate] [Artikulua 4 - erosoagoa] 2 00:00:02,520 --> 00:00:04,850 [Rob Bowden - Harvard Unibertsitatea] 3 00:00:04,850 --> 00:00:07,370 [Hau CS50 da. - CS50.TV] 4 00:00:08,920 --> 00:00:13,350 Quiz bihar dugu, kasu horretan, ez duzu guys ezagutzen. 5 00:00:14,810 --> 00:00:20,970 Funtsean, dena dute klasean ikusi edo klasean ikusi behar da. 6 00:00:20,970 --> 00:00:26,360 Biltzen dituen erakusleak, nahiz eta duela gutxi gai bat ari dira. 7 00:00:26,360 --> 00:00:29,860 Ulertu behar duzu, gutxienez, horietako maila altua. 8 00:00:29,860 --> 00:00:34,760 Ezer baino gehiago desagertu zen klasean galdetegia ulertu behar duzu. 9 00:00:34,760 --> 00:00:37,320 Beraz, horiei buruzko galderak izanez gero, eskatu ahal izango duzu orain. 10 00:00:37,320 --> 00:00:43,280 Baina hau ez da oso ikasle-zuzendutako saio bat izango da non guys galderak, 11 00:00:43,280 --> 00:00:45,060 beraz, espero dugu jendeak galderak. 12 00:00:45,060 --> 00:00:48,020 Does Edozeinek galdera? 13 00:00:49,770 --> 00:00:52,090 Bai. >> [Ikasleak] erakusle baino gehiago duzu berriro? 14 00:00:52,090 --> 00:00:54,350 Erakusle baino gehiago dut. 15 00:00:54,350 --> 00:00:59,180 Zure aldagai guztiak nahitaez memorian bizi, 16 00:00:59,180 --> 00:01:04,450 baina normalean, ez duzu kezkatu eta esatea besterik ez duzu x + 2 y + 3 17 00:01:04,450 --> 00:01:07,080 eta konpiladore irudikatu gauzak ari zaren non bizi. 18 00:01:07,080 --> 00:01:12,990 Behin erakusleak aurre ari zaren, esplizituki ari zaren memoria helbideak erabiliz. 19 00:01:12,990 --> 00:01:19,800 Beraz, aldagai bakar bat soilik izango da inoiz, edozein momentutan bakar helbidea batean bizi dira. 20 00:01:19,800 --> 00:01:24,040 Erakuslea aldarrikatu nahi dugu bada, zer motako itxura? 21 00:01:24,040 --> 00:01:26,210 >> Erakuslea p bat aldarrikatu nahi dut. Zer mota ez du itxura? 22 00:01:26,210 --> 00:01:33,530 [Ikasleen] int * p. >> Bai. Beraz, int * p. 23 00:01:33,530 --> 00:01:38,030 Eta nola ez, seinalatzen x egin dut? >> [Ikasleak] Ampersand. 24 00:01:40,540 --> 00:01:45,300 [Bowden] Beraz, ampersand literalki operadorea helbidea deitzen zaio. 25 00:01:45,300 --> 00:01:50,460 Beraz, eta esan dut x x aldagaia helbidea memoria lortzean. 26 00:01:50,460 --> 00:01:56,790 Beraz, gaur egun erakuslea p dut, eta nire kodea edonon * p erabili ahal izango dut 27 00:01:56,790 --> 00:02:02,960 edo x erabili izan dut, eta zehatza izango da gauza bera izango da. 28 00:02:02,960 --> 00:02:09,520 (* P). Zer da hau egiten? Zer esan nahi du izar hori? 29 00:02:09,520 --> 00:02:13,120 [Ikasleak] puntu horretan balio bat esan nahi du. >> Bai. 30 00:02:13,120 --> 00:02:17,590 Begiratuz gero, oso erabilgarria izan daiteke diagramak marrazteko 31 00:02:17,590 --> 00:02:22,230 non memoria kutxa txiki bat x 4 balioa dute, eta hori gertatzen da, 32 00:02:22,230 --> 00:02:25,980 gero, memoria kutxa p apur bat behar dugu, 33 00:02:25,980 --> 00:02:31,590 eta, beraz, p x puntu, eta, beraz, p x gezi bat marraztu dugu. 34 00:02:31,590 --> 00:02:40,270 Beraz, esan genezake * p joan dela p koadroan esaten ari gara. 35 00:02:40,270 --> 00:02:46,480 Star gezi jarraitu eta, ondoren, edozein dela ere kutxa nahi duzu bertan. 36 00:02:46,480 --> 00:03:01,090 Beraz, esan * p = 7; eta hori izango da x eta 7 aldaketa koadroan. 37 00:03:01,090 --> 00:03:13,540 Edo esan izan dut int z = * p * 2; Hori da nahasgarria da izar, star delako. 38 00:03:13,540 --> 00:03:19,230 Izar bat da p dereferencing, beste izar 2 biderkatuz. 39 00:03:19,230 --> 00:03:26,780 Ohartu besterik ez baita * p x ordezkatu nuen. 40 00:03:26,780 --> 00:03:29,430 Era berean, erabil ditzakezu. 41 00:03:29,430 --> 00:03:38,000 Eta gero I p puntu bat izan daiteke gauza guztiz berri bat. 42 00:03:38,000 --> 00:03:42,190 Besterik ez dut esan daiteke p = &z; 43 00:03:42,190 --> 00:03:44,940 Beraz, gaur egun, P x puntu luzeagoa ez; puntu z da. 44 00:03:44,940 --> 00:03:50,510 Eta edozein unetan egin dut * p z egiten bezala da. 45 00:03:50,510 --> 00:03:56,170 Beraz, honi buruz gauza erabilgarria da hasten gara funtzioak sartzeko behin. 46 00:03:56,170 --> 00:03:59,790 >> Ezertarako mota da erakuslea puntu bat aldarrikatu duten zerbait 47 00:03:59,790 --> 00:04:03,140 eta, ondoren, bakarrik ari zaren dereferencing 48 00:04:03,140 --> 00:04:06,060 denean erabili dituzte jatorrizko aldagai hasteko. 49 00:04:06,060 --> 00:04:18,190 Baina funtzioak duzun - esan funtzio batzuk, int foo dugu, beraz, 50 00:04:18,190 --> 00:04:32,810 erakuslea bat hartzen du eta, besterik gabe, ez * p = 6; 51 00:04:32,810 --> 00:04:39,990 Swap aurretik ikusi bezala, ezin duzu swap eraginkorra eta beste funtzio bat 52 00:04:39,990 --> 00:04:45,180 Osoko zenbaki besterik ez pasatzen C guztia beti balio pasatuz. 53 00:04:45,180 --> 00:04:48,360 Nahiz eta erakusleak balio zaren pasatzen ari zaren pasatzerakoan. 54 00:04:48,360 --> 00:04:51,940 Beraz, zerbait gertatzen da, balore horiek dira memoria-helbideak. 55 00:04:51,940 --> 00:05:00,770 Beraz, esango dizut foo (p); erakusleak funtzio foo sartu naiz pasatzen 56 00:05:00,770 --> 00:05:03,910 eta, ondoren, foo * p = 6 egiten ari da; 57 00:05:03,910 --> 00:05:08,600 Beraz, barruan funtzio hori, * p oraindik x baliokideak, 58 00:05:08,600 --> 00:05:12,720 baina ezin dut erabili x funtzio hori barruan ez delako funtzio horren barruan scoped. 59 00:05:12,720 --> 00:05:19,510 Beraz, * p = 6 modu bakarra funtzio beste aldagai lokal bat sartu ahal izango dut. 60 00:05:19,510 --> 00:05:23,600 Edo, ondo, erakusleak modu bakarra funtzio beste aldagai lokal bat sartu ahal izango dut. 61 00:05:23,600 --> 00:05:31,600 [Ikasleak] dezagun esan erakuslea itzuli nahi duzun. Zer egin nahi duzu hori? 62 00:05:31,600 --> 00:05:44,270 [Bowden] itzuli erakuslea antzeko zerbait int y = 3; bueltan & y? >> [Ikasleak] Bai. 63 00:05:44,270 --> 00:05:48,480 [Bowden] Larreina. Inoiz egin beharko zenuke hau. Txarra da. 64 00:05:48,480 --> 00:05:59,480 Hitzaldia diapositiba horiek ikusi dudala uste dut memoria diagrama osoa hau ikusten hasi 65 00:05:59,480 --> 00:06:02,880 non Hemen duzun got memoria-helbide 0 66 00:06:02,880 --> 00:06:09,550 eta behera, hemen duzu memoria-helbide 4 kontzertuak edo 2 32. 67 00:06:09,550 --> 00:06:15,120 Orduan duzun got stuff batzuk eta gauza batzuk, eta, ondoren, zure pila duzu. 68 00:06:15,120 --> 00:06:21,780 eta nik zure zeure, hasi besterik ez duzu buruz ikasteko, gero eta handiagoa. 69 00:06:21,780 --> 00:06:24,390 [Ikasleak] pila gainetik ez zeure? 70 00:06:24,390 --> 00:06:27,760 >> Bai. Zeure gainean dago, ez da? >> [Ikasleak] Beno, 0 jarri zuen gainean. 71 00:06:27,760 --> 00:06:30,320 [Ikasleak] Oh, 0 jarri zuen gainean. >> [Ikasleak] Oh, ados. 72 00:06:30,320 --> 00:06:36,060 Ezespena: Anywhere CS50 Modu honetan ikusi duzu. >> [Ikasleak] Larreina. 73 00:06:36,060 --> 00:06:40,290 Hori besterik ez da aurreneko zaren pila ikusita, 74 00:06:40,290 --> 00:06:45,000 nahi pila bat bata bestearen gainean gauzak pilatzeko uste duzu uste duzun. 75 00:06:45,000 --> 00:06:50,810 Beraz, hau irauli pila da, beraz, gero eta handiagoa pila bat normalean egiten bezala inguruan ohi dugu 76 00:06:50,810 --> 00:06:55,940 pilaren ordez behera zintzilik. >> [Ikasleak] Ez heaps teknikoki hazi ere, nahiz eta? 77 00:06:55,940 --> 00:07:01,100 Eta zer esan nahi duzu hazten by sortu da. 78 00:07:01,100 --> 00:07:04,010 Pila eta zeure beti hazten kontrako norabideetan. 79 00:07:04,010 --> 00:07:09,420 Pila bat dago beti hazi dela zentzu hazi 80 00:07:09,420 --> 00:07:12,940 goi mailako memoria helbideak, eta zeure behera hazten ari 81 00:07:12,940 --> 00:07:17,260 memoria txikiagoa helbideak bidean hazten ari da. 82 00:07:17,260 --> 00:07:20,250 Beraz, goiko 0 izango da, eta beheko altua da memoria helbideak. 83 00:07:20,250 --> 00:07:26,390 Biak ari dira, gero eta handiagoa da, norabide kontrajarriak. 84 00:07:26,390 --> 00:07:29,230 [Ikasleak] esan nahi dut esan duzu pila jarri behean delako 85 00:07:29,230 --> 00:07:33,640 badirudi intuitiboago delako pila zeure goialdean delako hasteko, 86 00:07:33,640 --> 00:07:37,520 zeure beraren gainean ere, eta, beraz, that's - >> Bai. 87 00:07:37,520 --> 00:07:44,960 Gainera, hazi eta handiagoa zeure uste duzu, baina pila gehiago. 88 00:07:44,960 --> 00:07:50,280 Beraz, pila bat mota nahi dugun hazi erakusteko. 89 00:07:50,280 --> 00:07:55,390 Baina nonahi bestela ikusten da helbidea 0 erakusteko goialdean 90 00:07:55,390 --> 00:07:59,590 eta, behealdean memoria helbidea handiena, eta, beraz, hau da zure memoria ohiko ikuspegia da. 91 00:07:59,590 --> 00:08:02,100 >> Galdera bat izan al duzu? 92 00:08:02,100 --> 00:08:04,270 [Ikasleak] diguzu zeure buruz gehiago? 93 00:08:04,270 --> 00:08:06,180 Bai. Bigarren bat lortu dut. 94 00:08:06,180 --> 00:08:12,220 Lehenik eta behin, zergatik eta y itzuli atzera joan txarra da, 95 00:08:12,220 --> 00:08:18,470 pila pila markoak funtzio guztiak ordezkatzen sorta bat duzu 96 00:08:18,470 --> 00:08:20,460 zein dira deitu du. 97 00:08:20,460 --> 00:08:27,990 Aurreko gauzak ikusi egingo zaio, eta, beraz, zure pilaren goiko beti funtzio nagusia izango 98 00:08:27,990 --> 00:08:33,090 lehen funtzioa deitzen ari da geroztik. 99 00:08:33,090 --> 00:08:37,130 Eta gero, deitu funtzioa beste, pila behera hazten joan. 100 00:08:37,130 --> 00:08:41,640 Beraz, bada funtzio batzuk, foo, deitzen dut, eta bere pila-markoa lortzen da, 101 00:08:41,640 --> 00:08:47,280 zenbait funtzio, taberna deitu daiteke; bere pila-markoa lortzen da. 102 00:08:47,280 --> 00:08:49,840 Eta taberna errekurtsiboa izan liteke, eta bere burua dei dezake, 103 00:08:49,840 --> 00:08:54,150 eta, beraz, bigarren barra dei hori bere pila-markoa lortzeko. 104 00:08:54,150 --> 00:08:58,880 Eta beraz, zer pila fotograma horiek doan tokian tokiko aldagai guztiak dira 105 00:08:58,880 --> 00:09:03,450 eta funtzioa argumentuak guztiak - 106 00:09:03,450 --> 00:09:08,730 Lokalean dira funtzio hau scoped duen edozein gauza pila fotograma horiek. 107 00:09:08,730 --> 00:09:21,520 Beraz, horrek esan nahi du bar antzeko zerbait funtzio bat da, esan nuen, 108 00:09:21,520 --> 00:09:29,270 Besterik ez dut zenbaki oso bat aldarrikatu du, eta, ondoren, erakuslea osokoa hori itzuli egingo da. 109 00:09:29,270 --> 00:09:33,790 Beraz, non ez y bizi? 110 00:09:33,790 --> 00:09:36,900 [Ikasleen] y bar bizi da. >> [Bowden] Bai. 111 00:09:36,900 --> 00:09:45,010 Somewhere memoria plaza txiki honetan littler plazan bertan y que tiene da. 112 00:09:45,010 --> 00:09:53,370 Eta itzultzeko I y, erakusle bat dut itzuli memoria bloke txiki hau. 113 00:09:53,370 --> 00:09:58,400 Baina orduan, funtzioak bat, bere pila-markoa lortzen popped off pila. 114 00:10:01,050 --> 00:10:03,530 Eta hori da zergatik deitzen pila. 115 00:10:03,530 --> 00:10:06,570 Pila datuak egitura bezalakoa da, badakizu zer esan bada. 116 00:10:06,570 --> 00:10:11,580 Edo erretiluak pila bat bezala, nahiz eta beti Adibidez, 117 00:10:11,580 --> 00:10:16,060 nagusia beheraino joango da eta, ondoren, lehenengo funtzioa deitzen duzun horren gainean joango gara, 118 00:10:16,060 --> 00:10:20,400 eta ezin duzu atzera nagusira deitu duten funtzio guztiak itzuli arte 119 00:10:20,400 --> 00:10:22,340 gainean jartzen dira. 120 00:10:22,340 --> 00:10:28,650 >> [Ikasleak] Beraz, egin ez bada itzultzeko & y, balio hori da, aldez aurretik abisatu gabe aldatzeko gaia. 121 00:10:28,650 --> 00:10:31,290 Bai, it's - >> [ikasleak] gainidatzi daiteke. >> Bai. 122 00:10:31,290 --> 00:10:34,660 Guztiz da saiatu baduzu eta 123 00:10:34,660 --> 00:10:38,040 Hau ere int * bar bat izan da erakuslea delako itzuli 124 00:10:38,040 --> 00:10:41,310 beraz, bere itzulera mota int *. 125 00:10:41,310 --> 00:10:46,500 Saiatu behar baduzu funtzio honen balioa itzultzeko erabili nahi izanez gero, portaera undefined 126 00:10:46,500 --> 00:10:51,770 erakuslea duten memoria txarra seinalatzen duelako. >> [Ikasleak] Larreina. 127 00:10:51,770 --> 00:11:01,250 Beraz, zer bada, adibidez, deklaratu int * y = malloc (sizeof (int))? 128 00:11:01,250 --> 00:11:03,740 Hori da hobea. Bai. 129 00:11:03,740 --> 00:11:07,730 [Ikasleak] hitz egiten nola gara gauzak arrastatu dugu gure recycle bin 130 00:11:07,730 --> 00:11:11,750 ezabatu ez dira galduko dugu bere erakusleak. 131 00:11:11,750 --> 00:11:15,550 Beraz, kasu honetan ez ezabatuko dugu balioa edo da oraindik ez dago memoria? 132 00:11:15,550 --> 00:11:19,130 Gehienak, oraindik ere hor egon da. 133 00:11:19,130 --> 00:11:24,220 Baina demagun funtzio batzuk, baz deitu gertatuko dugu. 134 00:11:24,220 --> 00:11:28,990 Baz hemen bere pila-markoa lortzeko. 135 00:11:28,990 --> 00:11:31,470 Gainidatziz to stuff hau guztia egingo da, 136 00:11:31,470 --> 00:11:34,180 eta gero saiatu bada, eta erabili baino lehen you got erakuslea 137 00:11:34,180 --> 00:11:35,570 balio bera ez da izango. 138 00:11:35,570 --> 00:11:38,150 Aldatu egin izeneko funtzio baz delako joan. 139 00:11:38,150 --> 00:11:43,080 [Ikasleak] Baina izan, ez genuke dugu oraindik lortu 3? 140 00:11:43,080 --> 00:11:44,990 [Bowden] aukera guztiak, nahi duzun. 141 00:11:44,990 --> 00:11:49,670 Baina ezin dela oinarritzen. C undefined portaera dio. 142 00:11:49,670 --> 00:11:51,920 >> [Ikasleak] Oh, ez. Ongi da. 143 00:11:51,920 --> 00:11:58,190 Beraz, erakuslea itzuli nahi duzu, hau da, non malloc erabilera dator. 144 00:12:00,930 --> 00:12:15,960 Benetan idazten ari naiz itzultzeko malloc (3 * sizeof (int)). 145 00:12:17,360 --> 00:12:24,050 Malloc baino gehiago dugu bigarren bat gehiago, baina malloc ideia da zure tokiko aldagaiak 146 00:12:24,050 --> 00:12:26,760 beti pilaketan joan. 147 00:12:26,760 --> 00:12:31,570 Ezer malloced zeure gainean doa, eta betiko, eta beti izango da zeure buruzko 148 00:12:31,570 --> 00:12:34,490 esplizituki askatu arte. 149 00:12:34,490 --> 00:12:42,130 Beraz, horrek esan nahi du zerbait malloc duzu, funtzioak ondoren bizirik irauteko da. 150 00:12:42,130 --> 00:12:46,800 [Ikasleak] programa gelditzen exekutatzen ondoren bizirik irauteko? >> N º. 151 00:12:46,800 --> 00:12:53,180 Ados, beraz, ez da programa guztiak egin exekutatzen ari arte egingo da. >> Bai. 152 00:12:53,180 --> 00:12:57,510 Joan ahal izango dugu zer gertatzen den programa gelditzen exekutatzen xehetasunak. 153 00:12:57,510 --> 00:13:02,150 Behar me gogorarazi behar izatea, baina hori beste gauza bat da, oso-osorik. 154 00:13:02,150 --> 00:13:04,190 [Ikasleak] Beraz malloc erakuslea bat sortzen? >> Bai. 155 00:13:04,190 --> 00:13:13,030 Malloc - >> [ikasleak] malloc erakuslea erabil dezakeen memoria-bloke bat izendatzen dela uste dut. 156 00:13:15,400 --> 00:13:19,610 [Bowden] diagrama nahi dut berriro. >> [Ikasleak] Beraz, funtzio honetan lan egiten du, nahiz eta? 157 00:13:19,610 --> 00:13:26,430 [Ikasleen] Yeah, malloc memoria erabili ahal izango duzu bloke izendatzen, 158 00:13:26,430 --> 00:13:30,470 eta, ondoren, memoria hori lehen blokea helbidea itzultzen du. 159 00:13:30,470 --> 00:13:36,750 >> [Bowden] Bai. Beraz, duzunean malloc, memoria bloke grabbing ari zaren 160 00:13:36,750 --> 00:13:38,260 hori da gaur egun zeure en. 161 00:13:38,260 --> 00:13:43,040 Zeure txikiegia bada, orduan zeure besterik ez da hazten, hazten da, eta norabide horretan. 162 00:13:43,040 --> 00:13:44,650 Beraz, demagun zeure txikiegia da. 163 00:13:44,650 --> 00:13:49,960 Ondoren, pixka bat hazten eta erakuslea itzultzeko Bloke honetan bakarrik hazi da. 164 00:13:49,960 --> 00:13:55,130 Duzunean free stuff, zeure, gela gehiago egiten ari zaren, 165 00:13:55,130 --> 00:14:00,030 beraz, ondoren, geroago malloc deitu memoria zela aldez aurretik libratuko berrerabiltzeko. 166 00:14:00,030 --> 00:14:09,950 Malloc eta free buruzko gauza garrantzitsua da, ematen dion kontrol osoa 167 00:14:09,950 --> 00:14:12,700 memoria bloke horietan bizitzan zehar. 168 00:14:12,700 --> 00:14:15,420 Global aldagaiak dira beti bizirik. 169 00:14:15,420 --> 00:14:18,500 Aldagai lokalak dira beren esparruan bizirik. 170 00:14:18,500 --> 00:14:22,140 Kizkur giltza bat iraganean gisa joan bezain laster, aldagai lokalak dira hildakoak. 171 00:14:22,140 --> 00:14:28,890 Malloced memoria bizirik dago, izan ere, izango bizirik nahi duzun 172 00:14:28,890 --> 00:14:33,480 eta, ondoren, kaleratu kontatzeko kaleratu dira. 173 00:14:33,480 --> 00:14:38,420 Horiek dira benetan memoria 3 mota bakarra, benetan. 174 00:14:38,420 --> 00:14:41,840 Memorien kudeaketa automatikoa, eta horrek pila da. 175 00:14:41,840 --> 00:14:43,840 Things gertatuko automatikoki. 176 00:14:43,840 --> 00:14:46,910 Int x esaten duzunean, memoria-x int banatzen da. 177 00:14:46,910 --> 00:14:51,630 Noiz x jokoz kanpo esparrua da x, memoria berreskuratzen. 178 00:14:51,630 --> 00:14:54,790 Ondoren, memoria kudeaketa dinamikoa, eta hori da malloc da, 179 00:14:54,790 --> 00:14:56,740 hau da, kontrol duzu. 180 00:14:56,740 --> 00:15:01,290 Dinamikoki erabaki duzu memoria behar du, eta behar ez da esleitu. 181 00:15:01,290 --> 00:15:05,050 Eta gero, ez da estatikoa, besterik gabe esan nahi du bizi dela betiko, 182 00:15:05,050 --> 00:15:06,610 hau da, zer aldagai global dira. 183 00:15:06,610 --> 00:15:10,240 Besterik ez dira beti memorian. 184 00:15:10,960 --> 00:15:12,760 >> Zalantzak dituzu? 185 00:15:14,490 --> 00:15:17,230 [Ikasleak] bloke bat definitzen kortxeteak kurtsibak erabiliz 186 00:15:17,230 --> 00:15:21,220 baina ez behar izatea, adierazpen edo bitartean adierazpen edo horrelako ezer bada? bat 187 00:15:21,220 --> 00:15:29,130 Bloke bat definitzen dezakezu funtzio baten gisa, baina hori giltza kizkur gehiegi ditu. 188 00:15:29,130 --> 00:15:32,100 [Ikasleak] Beraz, ezin duzu kortxeteak kurtsibak ausazko pare bat bezalakoa izan zure kodea 189 00:15:32,100 --> 00:15:35,680 duten aldagai lokalak? >> Bai, egin dezakezu. 190 00:15:35,680 --> 00:15:45,900 Bar int Inside {int y = 3;} izan dugu. 191 00:15:45,900 --> 00:15:48,440 Hori ustezko hementxe. 192 00:15:48,440 --> 00:15:52,450 Baina hori guztiz int y esparrua definitzen du. 193 00:15:52,450 --> 00:15:57,320 Horretarako, kizkur bigarren giltza ondoren, y ezin da erabili jada. 194 00:15:57,910 --> 00:16:00,630 Ia inoiz egin duzu hori, baina. 195 00:16:02,940 --> 00:16:07,370 Atzera eskuratzen denean zer gertatzen den programa bat da eta ondorioz, 196 00:16:07,370 --> 00:16:18,760 misconception / erdia gezurra ematen ditugu, besterik ez gauzak errazago mota da. 197 00:16:18,760 --> 00:16:24,410 Esango dugu, memoria esleitu 198 00:16:24,410 --> 00:16:29,860 RAM zatia batzuk ari zaren aldagaia esleitzean. 199 00:16:29,860 --> 00:16:34,190 Hala ere, ez duzu benetan zuzenean RAM ukitu zure programak inoiz. 200 00:16:34,190 --> 00:16:37,490 Uste baduzu, nola marraztu dut - 201 00:16:37,490 --> 00:16:44,330 Eta, benetan, joan bidez bada GDB gauza bera ikusiko duzu. 202 00:16:51,120 --> 00:16:57,590 Kontuan hartu gabe zure programa edo zer programa ari zaren zenbat aldiz exekutatzen baduzu, 203 00:16:57,590 --> 00:16:59,950 pila da beti hasteko 204 00:16:59,950 --> 00:17:06,510 Beti ari zaren helbidea oxbffff zerbait inguruko aldagaiak ikusteko. 205 00:17:06,510 --> 00:17:09,470 Izan ohi da nonbait eskualde horretan. 206 00:17:09,470 --> 00:17:18,760 Baina, nola 2 programak, ziurrenik memoria bera erakusleak? 207 00:17:20,640 --> 00:17:27,650 [Ikasleak] non oxbfff ustezko RAM izendapena arbitrarioak batzuk 208 00:17:27,650 --> 00:17:31,320 benetan funtzioa deitzen zen arabera leku ezberdinetan egon daiteke. 209 00:17:31,320 --> 00:17:35,920 Bai. Epe memoria birtuala da. 210 00:17:35,920 --> 00:17:42,250 Ideia bakoitza bakar-prozesua, behin programa bakar hori ordenagailuan exekutatzen 211 00:17:42,250 --> 00:17:49,450 bere - Demagun 32 bit - erabat helbide-espazio independentea. 212 00:17:49,450 --> 00:17:51,590 Helbide-espazio honek. 213 00:17:51,590 --> 00:17:56,220 Bere erabat independentea 4 gigabyte erabili ditu. 214 00:17:56,220 --> 00:18:02,220 >> Beraz, 2 programak exekutatzen duzun bada, aldi berean, programa hau, 4 gigabyte bera ikusten, 215 00:18:02,220 --> 00:18:04,870 programa hau, 4 gigabyte bera ikusten, 216 00:18:04,870 --> 00:18:07,720 eta ezinezkoa da programa hau dereference erakuslea 217 00:18:07,720 --> 00:18:10,920 eta, azkenean, programa honen memoria. 218 00:18:10,920 --> 00:18:18,200 Eta zer memoria birtuala da, prozesu helbide-espazio kartografia 219 00:18:18,200 --> 00:18:20,470 RAM benetako gauza. 220 00:18:20,470 --> 00:18:22,940 Beraz, sortu da, zure sistema eragilearen jakin, 221 00:18:22,940 --> 00:18:28,080 hey, hau lasaia dereferences erakuslea oxbfff, benetan esan nahi du 222 00:18:28,080 --> 00:18:31,040 nahi zuela RAM byte 1000, 223 00:18:31,040 --> 00:18:38,150 Horrela programa dereferences oxbfff nahi izanez gero, benetan, berriz, RAM byte 10000. 224 00:18:38,150 --> 00:18:41,590 Arbitrarioki urrun izan daitezke. 225 00:18:41,590 --> 00:18:48,730 Hau da, are gehiago, gauza bat prozesu helbide-espazio bakarra benetako barruan. 226 00:18:48,730 --> 00:18:54,770 Horrela 4 gigabyte guztiak ikusten du bere burua, baina demagun 227 00:18:54,770 --> 00:18:57,290 [Ikasleen] single prozesu guztiak Does - 228 00:18:57,290 --> 00:19:01,350 Demagun soilik 4 RAM gigabyte ordenagailu bat behar duzu. 229 00:19:01,350 --> 00:19:06,430 Single prozesu guztiak ez du ikus osoa 4 gigabyte? >> Bai. 230 00:19:06,430 --> 00:19:13,060 Baina 4 gigabyte ikusten gezur bat da. 231 00:19:13,060 --> 00:19:20,460 Besterik ez da pentsatzen, memoria hori guztia du, ez duelako jakin, beste edozein prozesu badago. 232 00:19:20,460 --> 00:19:28,140 Bakarrik erabili izango da askoz memoria da benetan behar bezala. 233 00:19:28,140 --> 00:19:32,340 Sistema eragilea ez da RAM emateko prozesu honetan 234 00:19:32,340 --> 00:19:35,750 ez bada edozein eskualde osoa honetan memoria erabiliz. 235 00:19:35,750 --> 00:19:39,300 Ez da ematen eskualde memoria joan. 236 00:19:39,300 --> 00:19:54,780 Baina ideia dela uste saiatzen ari naiz, ezin dut analogia bat pentsatzea. 237 00:19:54,780 --> 00:19:56,780 Analogiak gogorra da. 238 00:19:57,740 --> 00:20:02,700 Memoria birtual gai bat edo gauzak konpontzeko da bat 239 00:20:02,700 --> 00:20:06,810 prozesuak beste bat guztiz ezjakin izan behar du. 240 00:20:06,810 --> 00:20:12,140 Eta beraz, edozein programa idatzi dezakezu besterik ez da dereferences erakuslea edozein, 241 00:20:12,140 --> 00:20:19,340 gustatzen besterik ez dioen * (ox1234) programa bat idatzi, 242 00:20:19,340 --> 00:20:22,890 eta hori dereferencing memoria-helbide 1234. 243 00:20:22,890 --> 00:20:28,870 >> Baina sistema eragilea sortu da, ondoren, itzultzeko zer 1234 bitartez. 244 00:20:28,870 --> 00:20:33,960 Beraz, 1234 bada gertatzen da baliozko memoria-helbide bat izan behar du prozesu honetan, 245 00:20:33,960 --> 00:20:38,800 pila edo zerbait bezala eta, ondoren, memoria-helbide horren balioa itzuliko da 246 00:20:38,800 --> 00:20:41,960 den neurrian, prozesu dakiten bezala. 247 00:20:41,960 --> 00:20:47,520 Baina 1234 bada, ez da baliozko helbide bat gertatzen da, lur bezala 248 00:20:47,520 --> 00:20:52,910 memoria hemen pieza txiki batzuk pila haratago eta zeure haratago 249 00:20:52,910 --> 00:20:57,200 eta benetan ez duzu erabili, orduan hori segfaults bezalako gauzak 250 00:20:57,200 --> 00:21:00,260 ari zaren memoria delako ukitu behar duzula ez da ukitu. 251 00:21:07,180 --> 00:21:09,340 Hori ere egia 252 00:21:09,340 --> 00:21:15,440 32-bit-sistema, memoria-helbide bat zehazteko 32 bit 32 bit esan nahi duzu. 253 00:21:15,440 --> 00:21:22,970 Zergatik erakusle dira 8 byte da 32 bit dira, 8 byte delako edo 4 bytes. 254 00:21:22,970 --> 00:21:25,250 Erakusleak 4 byte dira. 255 00:21:25,250 --> 00:21:33,680 Erakuslea oxbfffff atsegin bat ikusiko duzu, hau da, 256 00:21:33,680 --> 00:21:40,080 Edozein programaren barruan arbitrarioa besterik ez dezakezu eraikitzeko erakuslea edozein 257 00:21:40,080 --> 00:21:46,330 edozein lekutan, ox0 ox 8 f's - ffffffff. 258 00:21:46,330 --> 00:21:49,180 [Ikasleak] Ez al da 4 bytes Oraindik esaten duzu? >> Bai. 259 00:21:49,180 --> 00:21:52,730 [Ikasleak] Ondoren byte bakoitzak izango - >> [Bowden] hamaseitarra. 260 00:21:52,730 --> 00:21:59,360 Hamaseitar - 5, 6, 7, 8. Erakusleak Beraz hamaseitarrean beti ikusi duzu. 261 00:21:59,360 --> 00:22:01,710 Besterik ez da nola erakusleak sailkatzeko dugu. 262 00:22:01,710 --> 00:22:05,240 Hamaseitar bakoitzak 2 digituak 1 byte da. 263 00:22:05,240 --> 00:22:09,600 Beraz, ez da, 8 4 bytes digituak hamaseitarra izango. 264 00:22:09,600 --> 00:22:14,190 Beraz, 32-bit sistema bat erakuslea single bakoitzak 4 bytes izango, 265 00:22:14,190 --> 00:22:18,550 Horrek esan nahi du zure prozesuan edozein arbitrarioak 4 bytes eraikitzeko dezakezu 266 00:22:18,550 --> 00:22:20,550 eta erakuslea da, 267 00:22:20,550 --> 00:22:32,730 Horrek esan nahi du, orain arte bezala jakitun, memoria 32 byte 2 oso bat aurre dezake. 268 00:22:32,730 --> 00:22:34,760 Nahiz eta ez du benetan izan duten sarbidea, 269 00:22:34,760 --> 00:22:40,190 nahiz eta zure ordenagailuan bakarrik 512 megabyte ditu, askoz ere memoria hori du uste. 270 00:22:40,190 --> 00:22:44,930 Eta sistema eragilearen smart nahikoa izango dela soilik esleitu zer behar duzu benetan. 271 00:22:44,930 --> 00:22:49,630 Ez da bakarrik, oh, prozesu berri bat: 4 kontzertuak. 272 00:22:49,630 --> 00:22:51,930 >> Bai. >> [Ikasleak] Zer idi esan nahi du? Zergatik idatzi duzu? 273 00:22:51,930 --> 00:22:54,980 Hamaseitarrean ikurra besterik ez da. 274 00:22:54,980 --> 00:22:59,590 Zenbaki Irteeran bat ikusiko duzu idi, ondoz gauza hamaseitarra dira. 275 00:23:01,930 --> 00:23:05,760 [Ikasleak] programa bat amaitzen denean, zer gertatzen ziren azalduz. >> Bai. 276 00:23:05,760 --> 00:23:09,480 Zer gertatzen da programa bat eta ondorioz, sistema eragilearen 277 00:23:09,480 --> 00:23:13,600 besterik ez ezabatzen mapaketa helbide hauek ditu, eta hori da. 278 00:23:13,600 --> 00:23:17,770 Sistema eragilearen eman memoria hori beste programa bat erabili. 279 00:23:17,770 --> 00:23:19,490 [Ikasleak] Larreina. 280 00:23:19,490 --> 00:23:24,800 Beraz, zerbait esleitu zeure edo pilaketa edo aldagai global edo ezer, 281 00:23:24,800 --> 00:23:27,010 besterik gabe desagertu egingo dira ahalik eta azkarren programa amaitu gisa 282 00:23:27,010 --> 00:23:32,120 sistema eragilea da gaur egun delako free memoria ematen dioten beste edozein prozesu. 283 00:23:32,120 --> 00:23:35,150 [Ikasleak] Nahiz eta ziur aski oraindik idatzi balioak? >> Bai. 284 00:23:35,150 --> 00:23:37,740 Balioak baliteke oraindik ez. 285 00:23:37,740 --> 00:23:41,570 Besterik ez da eta horiek zaila izango da. 286 00:23:41,570 --> 00:23:45,230 Askoz zailagoa da horiek da ezabatu fitxategi batean baino 287 00:23:45,230 --> 00:23:51,450 ezabatutako fitxategia mota eseri ez delako denbora luzez, eta disko gogor bat asko handiagoa da. 288 00:23:51,450 --> 00:23:54,120 Beraz, memoria zati ezberdinetan gainidatzi egingo 289 00:23:54,120 --> 00:23:58,640 gertatzen da fitxategi hori erabili ahal izango da memoria zatia gainidatzi aurretik. 290 00:23:58,640 --> 00:24:04,520 Baina memoria, RAM, ziklo asko azkarrago bidez, 291 00:24:04,520 --> 00:24:08,040 beraz, oso azkar izan gainidatzi egingo da. 292 00:24:10,300 --> 00:24:13,340 Hau edo beste ezer galderak? 293 00:24:13,340 --> 00:24:16,130 [Ikasleen] buruzko galderak gai desberdin bat daukat. >> Ados. 294 00:24:16,130 --> 00:24:19,060 Does Edozeinek honi buruzko galderak? 295 00:24:20,170 --> 00:24:23,120 >> Ongi da. Desberdinak gaia. >> [Ikasleak] Larreina. 296 00:24:23,120 --> 00:24:26,550 Praktika probak batzuen bidez izan dut, 297 00:24:26,550 --> 00:24:30,480 eta horietako bat sizeof buruz hitz egiten 298 00:24:30,480 --> 00:24:35,630 eta balioa itzultzen du, edo beste mota aldakorra. >> Bai. 299 00:24:35,630 --> 00:24:45,060 Eta bai int luze eta bai bueltan 4, eta, beraz, 4 byte bi luze daudela esan du. 300 00:24:45,060 --> 00:24:48,070 Ba al dago int bat eta luze bat edozein arteko diferentzia, edo gauza bera da? 301 00:24:48,070 --> 00:24:50,380 Bai, ez dago diferentzia bat da. 302 00:24:50,380 --> 00:24:52,960 C estandarra - 303 00:24:52,960 --> 00:24:54,950 Ziurrenik dut nahastea sortu. 304 00:24:54,950 --> 00:24:58,800 C estandarra da, zer da C, C. dokumentazio ofiziala 305 00:24:58,800 --> 00:25:00,340 Hau da, esaten du. 306 00:25:00,340 --> 00:25:08,650 Beraz, C estandarra besterik ez dio char bat egingo dute betirako eta beti 1 byte. 307 00:25:10,470 --> 00:25:19,040 Ondoren Everything - labur bat da beti baino handiagoa edo karakterra bat berdinak bezala definitzen da. 308 00:25:19,040 --> 00:25:23,010 Zorrozki baino handiagoa da, baina ez da positiboa izan daiteke. 309 00:25:23,010 --> 00:25:31,940 Int bat besterik ez da, labur bat baino handiagoa edo berdina bezala definitzen da. 310 00:25:31,940 --> 00:25:36,210 Eta luze bat besterik ez da int bat baino handiagoa edo berdina bezala definitzen da. 311 00:25:36,210 --> 00:25:41,600 Eta luze luze bat baino handiagoa edo berdina da. 312 00:25:41,600 --> 00:25:46,610 Beraz, gauza bakarra C estandarra definitzen dena ordena erlatiboa da. 313 00:25:46,610 --> 00:25:54,880 Memoria zenbatekoa benetako gauza hartzen dute, oro har, up to ezartzea, 314 00:25:54,880 --> 00:25:57,640 baina puntu honetan nahiko ongi definitzen du. >> [Ikasleak] Larreina. 315 00:25:57,640 --> 00:26:02,490 Beraz, film laburrak dira, ia beti 2 bytes izango. 316 00:26:04,920 --> 00:26:09,950 Ints dira ia beti 4 bytes izango. 317 00:26:12,070 --> 00:26:15,340 Long Longs 8 byte dira ia beti izango da. 318 00:26:17,990 --> 00:26:23,160 Eta Longs araberakoa ari zaren 32-bit edo 64-bit sistema bat erabiltzen den ala ez. 319 00:26:23,160 --> 00:26:27,450 Beraz, luze bat sistema mota dagozkio. 320 00:26:27,450 --> 00:26:31,920 Zaren 32-bit sistema bat erabiltzen ari bazara Appliance bezala, 4 byte da. 321 00:26:34,530 --> 00:26:42,570 Zaren 64-bit erabiliz gero asko ordenagailu azken bezala, 8 byte izan dute. 322 00:26:42,570 --> 00:26:45,230 >> Ints dira ia beti 4 byte puntu honetan. 323 00:26:45,230 --> 00:26:47,140 Long Longs dira ia beti 8 byte. 324 00:26:47,140 --> 00:26:50,300 Iraganean, ints 2 byte bakarrik erabili. 325 00:26:50,300 --> 00:26:56,840 Baina hori erabat baino handiagoa, eta berdin harreman horiek guztiak betetzen. 326 00:26:56,840 --> 00:27:01,280 Beraz, luze ezin hobeto onartzen osoko gisa tamaina berdina izango da, 327 00:27:01,280 --> 00:27:04,030 eta, halaber, onartzen luze jo tamaina berdina izango da. 328 00:27:04,030 --> 00:27:11,070 Eta, beraz, besterik ez da gertatzen% 99,999 sistemak, berdinak izan da 329 00:27:11,070 --> 00:27:15,800 bai int bat edo luze bat. 32-bit edo 64-bit araberakoa da. >> [Ikasleak] Larreina. 330 00:27:15,800 --> 00:27:24,600 Karroza, bit dagokionez, izendatutako dezimal nola? 331 00:27:24,600 --> 00:27:27,160 Binary bezala? >> Bai. 332 00:27:27,160 --> 00:27:30,570 Ez duzu behar jakin nahi CS50. 333 00:27:30,570 --> 00:27:32,960 Nahiz eta ez duzu ikasten 61. 334 00:27:32,960 --> 00:27:37,350 Ez duzu ikasten, benetan, edozein ikastarotan. 335 00:27:37,350 --> 00:27:42,740 Ordezkaritza bat besterik ez da. 336 00:27:42,740 --> 00:27:45,440 Zehatza bit baratzeak ahaztu dut. 337 00:27:45,440 --> 00:27:53,380 Puntu mugikorreko ideia da esleitu bit kopuru jakin bat irudikatzeko. 338 00:27:53,380 --> 00:27:56,550 Funtsean, dena idazkera zientifikoan. 339 00:27:56,550 --> 00:28:05,600 Beraz, zenbaki bera,, 1,2345 bezala irudikatzeko bit kopuru zehatza esleitu behar duzu. 340 00:28:05,600 --> 00:28:10,200 Ezin da inoiz I zenbaki bat ordezkatzen 5 baino gehiago digituak. 341 00:28:12,200 --> 00:28:26,300 Orduan ere bit kopuru jakin bat esleitu eta horrela izan ohi da 342 00:28:26,300 --> 00:28:32,810 bakarrik joan ahal izango duzu kopuru jakin bat, berretzailea handiena izan dezakezu bezala, 343 00:28:32,810 --> 00:28:36,190 eta bakarrik joan zaitezke, zenbait adierazle bat 344 00:28:36,190 --> 00:28:38,770 gustatzen adierazgarri txikiena izan dezakezu. 345 00:28:38,770 --> 00:28:44,410 >> Ez dut gogoratzen modu zehatza bit dira balio horiek guztiak esleitutako 346 00:28:44,410 --> 00:28:47,940 baina bit kopuru jakin bat dira 1,2345 eskainitako 347 00:28:47,940 --> 00:28:50,930 bit beste kopuru jakin bat berretzailea eskainitako dira, 348 00:28:50,930 --> 00:28:55,670 eta tamaina jakin baten adierazle bat ordezkatzen bakarrik da posible. 349 00:28:55,670 --> 00:29:01,100 [Ikasleak] Eta bikoitz bat? Dela extra karroza luze bat bezala? >> Bai. 350 00:29:01,100 --> 00:29:07,940 8 byte 4 bytes ordez erabiltzen ari zara izan ezik mugikor bat gauza bera da. 351 00:29:07,940 --> 00:29:11,960 Orain 9 digituak edo 10 digituak erabili ahal izango duzu, 352 00:29:11,960 --> 00:29:16,630 eta hau 300 ordez 100 joateko gai izango da. >> [Ikasleak] Larreina. 353 00:29:16,630 --> 00:29:21,550 Eta karroza ere 4 bytes. >> Bai. 354 00:29:21,550 --> 00:29:27,520 Beno, berriro, araberakoa izango da ziur aski, oro har ezartzeko, oro har, 355 00:29:27,520 --> 00:29:30,610 baina karroza 4 bytes, bikoitzak 8 dira. 356 00:29:30,610 --> 00:29:33,440 Bikotekako bikoitza deitzen ari dira, bikoitza delako karroza tamaina. 357 00:29:33,440 --> 00:29:38,380 [Ikasleak] Larreina. Eta daude bikoitza bikoizten? >> Ez daude. 358 00:29:38,380 --> 00:29:43,660 Nik uste dut - >> [ikasleak] Longs luze bezala? >> Bai. Ez dut uste. Bai. 359 00:29:43,660 --> 00:29:45,950 [Ikasleak] iaz proba On buruzko galdera bat izan zen funtzio nagusia 360 00:29:45,950 --> 00:29:49,490 programaren zati izan beharrik. 361 00:29:49,490 --> 00:29:52,310 Erantzuna ez dela programaren zati izan zen. 362 00:29:52,310 --> 00:29:55,100 Zer egoera? Hori da, zer ikusi nuen. 363 00:29:55,100 --> 00:29:59,090 [Bowden] Badirudi - >> [ikasleak] Zer egoera? 364 00:29:59,090 --> 00:30:02,880 Arazoa izan al duzu? >> [Ikasleen] Bai, zalantzarik gabe ezin dut tira it up. 365 00:30:02,880 --> 00:30:07,910 Ez izatea, teknikoki, baina funtsean izango da. 366 00:30:07,910 --> 00:30:10,030 [Ikasleak] bat ikusi nuen bat urte hainbat. 367 00:30:10,030 --> 00:30:16,220 True edo False izan zen bezalakoa da: A baliozko >> Oh, c file.? 368 00:30:16,220 --> 00:30:18,790 [Ikasleak] Any c fitxategia izan behar - [biak aldi berean hitz egiten - ulertezina] 369 00:30:18,790 --> 00:30:21,120 Ongi da. Beraz, bereizita. 370 00:30:21,120 --> 00:30:26,800 >> A c file besterik ez funtzio eduki behar da. 371 00:30:26,800 --> 00:30:32,400 Makina kodea fitxategia, 'binary, edozein konpilatu ahal izango duzu, 372 00:30:32,400 --> 00:30:36,620 exekutagarri gabe izatea oraindik. 373 00:30:36,620 --> 00:30:39,420 Exekutagarriaren baliozko funtzio nagusi bat izan behar da. 374 00:30:39,420 --> 00:30:45,460 100 1 fitxategi batean funtzioak, baina nagusia ez idatzi ditzakezu 375 00:30:45,460 --> 00:30:48,800 eta, ondoren, konpilatu behera bitarra 376 00:30:48,800 --> 00:30:54,460 ondoren, beste fitxategi nagusiak bakarrik du idazten duzun, baina funtzio horiek sorta bat deitzen da 377 00:30:54,460 --> 00:30:56,720 hemen fitxategi bitar honetan. 378 00:30:56,720 --> 00:31:01,240 Eta beraz, exekutagarriaren egiten ari zaren, zer da estekatzailearen du 379 00:31:01,240 --> 00:31:05,960 horiek 2 fitxategi bitarrak exekutagarri bat konbinatzen ditu. 380 00:31:05,960 --> 00:31:11,400 Beraz, c fitxategia ez da beharrezkoa funtzio nagusia dute. 381 00:31:11,400 --> 00:31:19,220 Eta kodea big oinarriak milaka c fitxategiak eta fitxategi 1 nagusia ikusiko duzu. 382 00:31:23,960 --> 00:31:26,110 Galdera gehiago? 383 00:31:29,310 --> 00:31:31,940 [Ikasleak] Ez dago beste galdera bat izan zen. 384 00:31:31,940 --> 00:31:36,710 Konpiladore bat egin esan du. Egia ala gezurra? 385 00:31:36,710 --> 00:31:42,030 Eta erantzun faltsua izan da, eta zergatik ez da Clang bezala ulertu nuen. 386 00:31:42,030 --> 00:31:44,770 Baina zer egin ez bada deitu dugu? 387 00:31:44,770 --> 00:31:49,990 Egin da, funtsean, just - zehazki zer deiak dezaket. 388 00:31:49,990 --> 00:31:52,410 Baina komandoak exekutatzen besterik ez da. 389 00:31:53,650 --> 00:31:55,650 Egin. 390 00:31:58,240 --> 00:32:00,870 Honen tira ahal izango dut. Bai. 391 00:32:10,110 --> 00:32:13,180 Oh, bai. Egin ere jasotzen du. 392 00:32:13,180 --> 00:32:17,170 Dio egiteko lanabesaren helburua da automatikoki zehazteko 393 00:32:17,170 --> 00:32:19,610 handi bat programa zuzenak behar konpilatzen 394 00:32:19,610 --> 00:32:22,350 eta igorriko komandoak konpilatu. 395 00:32:22,350 --> 00:32:27,690 Egin diren fitxategiak erabat izugarria egin dezakezu. 396 00:32:27,690 --> 00:32:33,210 Fitxategiak denbora-zigiluak eta etorkizunari begira, eta, esan bezala egin aurretik, 397 00:32:33,210 --> 00:32:36,930 banakako fitxategiak konpilatu ditzakezu behera, eta ez da behar estekatzailearen iritsi arte 398 00:32:36,930 --> 00:32:39,270 dute elkarrekin jartzen ari exekutagarri batean. 399 00:32:39,270 --> 00:32:43,810 Beraz, bada, 10 fitxategiak duzu eta aldaketa bat egiten duzun horietako 1, 400 00:32:43,810 --> 00:32:47,870 orduan zer egiteko egingo da, besterik birkonpilatu 1 fitxategi 401 00:32:47,870 --> 00:32:50,640 eta berriro estekatzeko guztia elkarrekin. 402 00:32:50,640 --> 00:32:53,020 Baina hori baino askoz dumber da. 403 00:32:53,020 --> 00:32:55,690 Da duzu guztiz definitu hori, eta zer egiten ari izan beharko luke. 404 00:32:55,690 --> 00:32:59,560 Default by denbora zigilua stuff hau ezagutzeko gaitasuna, 405 00:32:59,560 --> 00:33:03,220 baina marka fitxategi bat idatzi dezakezu ezer egin. 406 00:33:03,220 --> 00:33:09,150 Idatzi bat egin file egiteko cd besterik ez da beste direktorio bat idatzi duzu. Dezakezu 407 00:33:09,150 --> 00:33:15,560 I zen lortzean frustrated I Tack nire Appliance barruan dena delako 408 00:33:15,560 --> 00:33:21,740 eta, ondoren, Mac PDF ikusteko. 409 00:33:21,740 --> 00:33:30,720 >> Beraz, joan Finder dut, eta ez dut joan daiteke, zerbitzarira konektatu, 410 00:33:30,720 --> 00:33:36,950 eta zerbitzariarekin konektatu nahi dut nire Appliance da, eta, ondoren, ireki I PDF 411 00:33:36,950 --> 00:33:40,190 lortzen LaTeX konpilatua izan da. 412 00:33:40,190 --> 00:33:49,320 Baina I zen lortzean frustrated PDF freskatzeko behar nuen denbora bakoitza delako, 413 00:33:49,320 --> 00:33:53,900 Kopiatu direktorioa atzitu ezin dela jakin bat izan nuen 414 00:33:53,900 --> 00:33:57,710 eta gogaikarriak izan zen lortzean. 415 00:33:57,710 --> 00:34:02,650 Beraz, bat egin, gauzak nola egiten du zehaztu behar duzu fitxategia ordez idatzi nuen. 416 00:34:02,650 --> 00:34:06,130 Nola egin duzu hau PDF LaTeX da. 417 00:34:06,130 --> 00:34:10,090 Just egiteko beste edozein fitxategi bezala edo ez duzu ikusi marka fitxategiak uste dut, 418 00:34:10,090 --> 00:34:13,510 baina Tresnaren marka global bat fitxategi besterik ez dio, 419 00:34:13,510 --> 00:34:16,679 C fitxategi bat konpilatzean, erabili Clang. 420 00:34:16,679 --> 00:34:20,960 Eta beraz, hemen nire marka fitxategi batean egiten dut esaten, 421 00:34:20,960 --> 00:34:25,020 Fitxategi hau PDF LaTeX konpilatu nahi duzu. 422 00:34:25,020 --> 00:34:27,889 Eta horrela LaTeX PDF den konpilazioaren egiten da. 423 00:34:27,889 --> 00:34:31,880 Egin ez da konpilatzeko. Besterik ez da komando hauek exekutatzen sekuentzia zehaztu I. 424 00:34:31,880 --> 00:34:36,110 Beraz, PDF LaTeX exekutatzen du, kopiatzen direktoriora kopiatu nahi dut, 425 00:34:36,110 --> 00:34:38,270 cd direktorioa da eta beste gauza batzuk ez, 426 00:34:38,270 --> 00:34:42,380 baina guztiak ere ez da ezagutzen fitxategi aldaketa bat, 427 00:34:42,380 --> 00:34:45,489 eta aldatzen bada, orduan dela suposatzen exekutatu komandoak exekutatu egingo du 428 00:34:45,489 --> 00:34:48,760 aldaketak. >> [Ikasleak] Larreina. 429 00:34:50,510 --> 00:34:54,420 Ez dakit non marka global fitxategiak Niri ikusteko. 430 00:34:57,210 --> 00:35:04,290 Beste galdera? Iraganeko ezer galdetegiak? Erakuslea gauza Any? 431 00:35:06,200 --> 00:35:08,730 Erakusleak bezala, gauza sotil daude 432 00:35:08,730 --> 00:35:10,220 Ez dut galdetegiaren galdera bat aurkitzeko gai da izango - 433 00:35:10,220 --> 00:35:16,250 baina gauza sort hau atsegin dute. 434 00:35:19,680 --> 00:35:24,060 Ziurtatu dut esango ulertzen duzula int * x * y - 435 00:35:24,890 --> 00:35:28,130 Hau ez da zehazki hemen ezer, I guess. 436 00:35:28,130 --> 00:35:32,140 Bezalako Baina * x * y, 2 aldagai pila horiek. 437 00:35:32,140 --> 00:35:37,220 When I say x = malloc (sizeof (int)), x pila aldagai bat da oraindik, 438 00:35:37,220 --> 00:35:41,180 malloc, zeure en bloke bat da, eta x puntu izatea eta zeure ari gara. 439 00:35:41,180 --> 00:35:43,900 >> Beraz, zerbait on to zeure puntu pila. 440 00:35:43,900 --> 00:35:48,100 Bakoitzean ezer malloc duzu ari bazara, ezinbestean erakuslea barruan gordetzeko. 441 00:35:48,100 --> 00:35:55,940 Erakuslea duten pila da, beraz, bloke malloced zeure gainean. 442 00:35:55,940 --> 00:36:01,240 Jende asko lortzen nahastu eta esan int * x = malloc x zeure gainean. 443 00:36:01,240 --> 00:36:04,100 N º Zer x puntu zeure gainean. 444 00:36:04,100 --> 00:36:08,540 x bera pila da, edozein arrazoigatik x ez baduzu global aldagai bat izango da, 445 00:36:08,540 --> 00:36:11,960 Kasu horietan, memoria eskualdeko beste gertatzen da. 446 00:36:13,450 --> 00:36:20,820 Jarraipena Beraz, koadroa, eta gezi diagrama horiek dira pretty galdetegia. 447 00:36:20,820 --> 00:36:25,740 Edo ez bada, 1 quiz quiz 0 izango da. 448 00:36:27,570 --> 00:36:31,940 Horiek guztiak jakin behar duzu, konpilatzean urrats 449 00:36:31,940 --> 00:36:35,740 izan horietan galderak erantzun geroztik. Bai. 450 00:36:35,740 --> 00:36:38,940 [Ikasleak] Ezin izan joan urrats horietan zehar, - >> Sure. 451 00:36:48,340 --> 00:36:58,640 Urrats eta konpilatzean aurretik preprocessing dugu, 452 00:36:58,640 --> 00:37:16,750 konpilatzean, muntaia, eta lotzen ditu. 453 00:37:16,750 --> 00:37:21,480 Preprocessing. Zer ari da hori egiten? 454 00:37:29,720 --> 00:37:32,290 Errazena urratsean da ondo, ez bezala - 455 00:37:32,290 --> 00:37:35,770 horrek ez du esan nahi, begi-bistakoa izan beharko luke,, baina errazena urratsa da. 456 00:37:35,770 --> 00:37:38,410 Zaudete ezartzea izan zuek. Bai. 457 00:37:38,410 --> 00:37:43,410 [Ikasleak] Hartu, zer zure atsegin dute hau barne hartzen ditu eta, ondoren kopiatzen ere definitzen. 458 00:37:43,410 --> 00:37:49,250 # Include bezalako gauzak itxura eta # define 459 00:37:49,250 --> 00:37:53,800 eta zerbait kopiak eta pastak zer horiek benetan esan nahi. 460 00:37:53,800 --> 00:37:59,240 Beraz, # include cs50.h diozu, preprocessor da kopiatu eta cs50.h itsasteko 461 00:37:59,240 --> 00:38:01,030 Ildo horretan. 462 00:38:01,030 --> 00:38:06,640 Noiz, # define x 4 izango diozu, preprocessor programa osoa pasatzen 463 00:38:06,640 --> 00:38:10,400 eta 4 x instantzia guztiak ordezkatzen du. 464 00:38:10,400 --> 00:38:17,530 Beraz preprocessor C baliozko fitxategia hartu eta baliozko fitxategia C irteerak 465 00:38:17,530 --> 00:38:20,300 non gauzak dira kopiatu eta itsatsi. 466 00:38:20,300 --> 00:38:24,230 Beraz, gaur egun konpilatzean. Zer ari da hori egiten? 467 00:38:25,940 --> 00:38:28,210 [Ikasleak] C bitar doan da. 468 00:38:28,210 --> 00:38:30,970 >> [Bowden] ez du modu guztiak joan bitarra. 469 00:38:30,970 --> 00:38:34,220 [Ikasleak] makina kodea orduan? >> Ez da makina kodea. 470 00:38:34,220 --> 00:38:35,700 [Ikasleen] Batzar? >> Batzar. 471 00:38:35,700 --> 00:38:38,890 Batzarrari doan doan bide guztiak aurretik C kodea 472 00:38:38,890 --> 00:38:45,010 eta hizkuntza gehienetan zerbait hau atsegin dute. 473 00:38:47,740 --> 00:38:50,590 Aukeratu goi-mailako edozein hizkuntzatan, eta ari zaren konpilatu bada, 474 00:38:50,590 --> 00:38:52,390 litekeena urratsetan konpilatu da. 475 00:38:52,390 --> 00:38:58,140 Lehenengoa Python biltzeko C da eta, ondoren, C Batzarrari biltzeko da, 476 00:38:58,140 --> 00:39:01,600 eta, ondoren, Batzar binary itzulirik egingo. 477 00:39:01,600 --> 00:39:07,800 Beraz konpilatzean da ekarri C Batzarrari. 478 00:39:07,800 --> 00:39:12,130 Hitza konpilatzean normalean esan nahi du goi-mailako jarriz 479 00:39:12,130 --> 00:39:14,340 maila txikiagoa programazio-lengoaia. 480 00:39:14,340 --> 00:39:19,190 Beraz, hau konpilazio urrats bakarra non goi-mailako hizkuntza batekin hasiko da 481 00:39:19,190 --> 00:39:23,270 eta, azkenean, behe-mailako hizkuntza batean, eta horregatik urrats konpilatzean deritzo. 482 00:39:25,280 --> 00:39:33,370 [Ikasleak] konpilatzean zehar, demagun # include egin duzula cs50.h. 483 00:39:33,370 --> 00:39:42,190 Konpiladore konpilatu cs50.h da, ez dira funtzio bezala, 484 00:39:42,190 --> 00:39:45,280 eta sartzen Batzar kodea itzuli baita, 485 00:39:45,280 --> 00:39:50,830 edo kopiatu eta itsatsi pre-Batzar den zerbait? 486 00:39:50,830 --> 00:39:56,910 cs50.h egingo pretty much inoiz ez amaitzeko Batzar. 487 00:39:59,740 --> 00:40:03,680 Stuff funtzioa prototipoak eta gauzak bezala dira besterik ez, kontuz ibili ahal izango duzu. 488 00:40:03,680 --> 00:40:09,270 Konpiladorea gauza egiaztatu ahal zaren funtzio bezala deituz bermatzen du 489 00:40:09,270 --> 00:40:12,910 itzulerako eskubidea motak eta argumentuak eta stuff eskubidea. 490 00:40:12,910 --> 00:40:18,350 >> Beraz cs50.h fitxategi sartu egingo da preprocessed, eta orduan, konpilatzean da 491 00:40:18,350 --> 00:40:22,310 du, batez ere, bota egiten du ziurtatu dena ari da deitu behar bezala ondoren. 492 00:40:22,310 --> 00:40:29,410 Baina CS50 liburutegia definitutako funtzioak diren cs50.h urrun 493 00:40:29,410 --> 00:40:33,610 horiek ez dira bereizita konpilatua izan da. 494 00:40:33,610 --> 00:40:37,270 Hau izango da benetan llegado lotzen dituen urratsa, eta, beraz, bigarren bat egingo dugu. 495 00:40:37,270 --> 00:40:40,100 Baina, lehenik eta behin, zer da muntaia? 496 00:40:41,850 --> 00:40:44,500 [Ikasleen] Batzar bitarra? >> Bai. 497 00:40:46,300 --> 00:40:48,190 Muntaia. 498 00:40:48,190 --> 00:40:54,710 Ez dugu deitu konpilatzean Batzar pretty da askoz bitar itzulpen hutsa dela. 499 00:40:54,710 --> 00:41:00,230 Batzar bitarraren joan logika oso txikia da. 500 00:41:00,230 --> 00:41:03,180 Besterik ez da nahi taula bat sortu bilatzen, oh, Instrukzio hau dugu; 501 00:41:03,180 --> 00:41:06,290 bitarra 01110 dagokio. 502 00:41:10,200 --> 00:41:15,230 Eta, beraz, fitxategiak, oro har, muntaia irteerak o fitxategiak. 503 00:41:15,230 --> 00:41:19,020 Eta o fitxategiak dira aurretik ginen esaten, 504 00:41:19,020 --> 00:41:21,570 fitxategi bat nola ez funtzio nagusia izan behar. 505 00:41:21,570 --> 00:41:27,640 Edozein fitxategi behera. O fitxategia luze bat baliozko fitxategia C konpila daitezke. 506 00:41:27,640 --> 00:41:30,300 Konpila daitezke. O. 507 00:41:30,300 --> 00:41:43,030 Orain, lotzen ditu, eta zer benetan sorta bat dakar. O fitxategiak eta exekutagarri bat ekartzen. 508 00:41:43,030 --> 00:41:51,110 Eta beraz, zer esteka ez da CS50 liburutegi dezakezu uste o fitxategi gisa. 509 00:41:51,110 --> 00:41:56,980 Dagoeneko konpilatuta fitxategi bitarra da. 510 00:41:56,980 --> 00:42:03,530 Eta, beraz, zure koadernoan, zure hello.c, deiak GetString konpilatu duzu, 511 00:42:03,530 --> 00:42:06,360 hello.c lortzen konpilatu behera hello.o 512 00:42:06,360 --> 00:42:08,910 hello.o da gaur egun bitar. 513 00:42:08,910 --> 00:42:12,830 -GetString erabiltzen ditu, eta, beraz baino gehiago joan cs50.o behar da, 514 00:42:12,830 --> 00:42:16,390 eta estekatzailearen smooshes elkarrekin eta GetString kopiatzen fitxategi horretan txertatu 515 00:42:16,390 --> 00:42:20,640 eta funtzio guztiak behar ditu, exekutagarri bat ateratzen. 516 00:42:20,640 --> 00:42:32,620 Beraz cs50.o ez da benetan O fitxategi bat, baina hurbil nahikoa ez dagoela funtsezko desberdintasuna ez da. 517 00:42:32,620 --> 00:42:36,880 Beraz, fitxategi estekatzeko sorta bat biltzen ditu 518 00:42:36,880 --> 00:42:41,390 bereizita eduki duten funtzio guztiak erabili behar dut 519 00:42:41,390 --> 00:42:46,120 eta benetan exekutatu exekutagarria sortzen da. 520 00:42:48,420 --> 00:42:50,780 >> Eta, beraz, hori ere aurretik genuen esaten 521 00:42:50,780 --> 00:42:55,970 non 1000 izan dezakezu. c fitxategiak, horiek guztiak konpilatu duzun o fitxategiak, 522 00:42:55,970 --> 00:43:00,040 Ziurrenik pixka bat hartu eta, ondoren, 1 aldatzeko aukera ematen dizu. c file. 523 00:43:00,040 --> 00:43:05,480 Konpilatu 1. C fitxategia eta berriro estekatzeko, beste guztia, bakarrik behar duzu 524 00:43:05,480 --> 00:43:07,690 lotzeko guztia atzera elkarrekin. 525 00:43:09,580 --> 00:43:11,430 [Ikasleak] lotzen dituen lcs50 idazten ari gara? 526 00:43:11,430 --> 00:43:20,510 Bai, eta, beraz, lcs50. Estekatzailearen, liburutegi horretan seinaleak Ez duzula behar lotzen dituen hori. 527 00:43:26,680 --> 00:43:28,910 Zalantzak dituzu? 528 00:43:41,310 --> 00:43:46,860 Igaro bitarra segundotan lehenengo hitzaldia 5 baino beste gainean dugu? 529 00:43:50,130 --> 00:43:53,010 Ez dut uste. 530 00:43:55,530 --> 00:43:58,820 Big Os ditudan desagertu baino gehiago jakin behar duzu, 531 00:43:58,820 --> 00:44:02,670 eta hau egin ahal izango duzu behar, eman dugu funtzio bat izanez gero, 532 00:44:02,670 --> 00:44:09,410 big O da, gutxi gorabehera, esan ahal izango duzu behar. Edo ondo, big O zakarra da. 533 00:44:09,410 --> 00:44:15,300 Beraz, ikusten baduzu, loops, gauza bera kopurua begizta habiaratuak, 534 00:44:15,300 --> 00:44:22,260 >> [ikasleen] n karratu - int j, j > N karratu ohi da. 535 00:44:22,260 --> 00:44:25,280 Duzu habiaratuak hirukoitza bada, n cubed izan ohi da. 536 00:44:25,280 --> 00:44:29,330 Beraz, gauza sort hori ahal izango da berehala behar duzu. 537 00:44:29,330 --> 00:44:33,890 Txertatzeko-sort eta burbuila sort ezagutu eta sort eta horiek guztiak batu behar duzu. 538 00:44:33,890 --> 00:44:41,420 Errazagoa da ulertzen zergatik duten n karratu eta n log n, eta hori guztia dira 539 00:44:41,420 --> 00:44:47,810 Nik uste dut galdetegi bat egin zuen, urtebete eman funtsean dizugu delako 540 00:44:47,810 --> 00:44:55,050 burbuila sort ezartzeko, eta hau esan: "Zer da funtzio honen iraupena?" 541 00:44:55,050 --> 00:45:01,020 Beraz, bada ezagutzen duzu burbuila sort gisa, eta gero, berehala dezakezu esan n karratu. 542 00:45:01,020 --> 00:45:05,470 Baina bada besterik ez duzu begiratzen, ez duzu, nahiz eta behar burbuila sort konturatzen; 543 00:45:05,470 --> 00:45:08,990 bakarrik esan dezakezu, hau da, hau eta hau egiten. Hau da, karratu n. 544 00:45:12,350 --> 00:45:14,710 [Ikasleak] Ba al dago edozein adibide gogorra etorri dezakezu, 545 00:45:14,710 --> 00:45:20,370 out kalkulatzen antzeko ideia bat? 546 00:45:20,370 --> 00:45:24,450 >> Ez dut uste edozein gogorra adibide emango genuke. 547 00:45:24,450 --> 00:45:30,180 Burbuila sort gauza da gogorra litzateke gara, 548 00:45:30,180 --> 00:45:36,280 eta, are gehiago, betiere, ulertzen duzun bezala ari array zehar errepikatzean 549 00:45:36,280 --> 00:45:41,670 array elementu bakoitza, hau da, zerbait n karratu izango. 550 00:45:45,370 --> 00:45:49,940 Galdera daude, oro har, hemen bezala dugu - Oh. 551 00:45:55,290 --> 00:45:58,530 Just beste egunean, Doug erreklamatu, "asmatu dut array bat ordenatzeko algoritmo bat 552 00:45:58,530 --> 00:46:01,780 "O (log n) denbora! Zenbakiak n" 553 00:46:01,780 --> 00:46:04,900 Beraz, nola ez da hori ezinezkoa ezagutzen dugu? 554 00:46:04,900 --> 00:46:08,850 [Inaudible ikaslearen erantzuna] >> Bai. 555 00:46:08,850 --> 00:46:13,710 Oso gutxienez, elementu bakoitzaren ukitu array duzu 556 00:46:13,710 --> 00:46:16,210 array bat ordenatzen, beraz, ezinezkoa da 557 00:46:16,210 --> 00:46:20,850 Ordena Unsorted guztia bada, eta, ondoren, ukitu guztia array ari zaren, 558 00:46:20,850 --> 00:46:25,320 n O baino gutxiago, beraz, ezinezkoa da. 559 00:46:27,430 --> 00:46:30,340 [Ikasleak] n O egin ahal izatea adibidez hori erakutsi duzu 560 00:46:30,340 --> 00:46:33,920 memoria asko erabiltzen bada. >> Bai. 561 00:46:33,920 --> 00:46:37,970 Eta that's ahazten dut zer that's kontatuta sort da? 562 00:46:47,360 --> 00:46:51,330 Hmm. Osoko Ordenatzeko algoritmoa da. 563 00:46:59,850 --> 00:47:05,100 Hau izen berezi nintzen azken astean ez dut gogoratzen bila. 564 00:47:05,100 --> 00:47:13,000 Bai. Hauek ordenatzen mota big n O gauzak betetzeko dira. 565 00:47:13,000 --> 00:47:18,430 Baina ez dira mugak, bezala erabili dezakezu soil-soilik zenbaki osoen kopuru jakin bat. 566 00:47:20,870 --> 00:47:24,560 Plus zerbait that's ordenatzeko saiatzen ari zaren bada - 567 00:47:24,560 --> 00:47:30,750 Zure array 012, -12, 151, 4 milioi bada, 568 00:47:30,750 --> 00:47:35,120 ondoren, elementu bakar hori guztiz hondatu ordena osoa joan. 569 00:47:42,060 --> 00:47:44,030 >> Zalantzak dituzu? 570 00:47:49,480 --> 00:47:58,870 [Ikasleak] recursive funtzioa bada, eta horregatik besterik ez ditu dei errekurtsiboak 571 00:47:58,870 --> 00:48:02,230 bueltan adierazpen baten barruan, buztana recursive 572 00:48:02,230 --> 00:48:07,360 eta, beraz, hori ez da memoria gehiago erabili exekuzio bitartean 573 00:48:07,360 --> 00:48:12,550 edo, gutxienez, izango litzateke erabili konpara memoria bat etorriko irtenbide gisa? 574 00:48:12,550 --> 00:48:14,530 [Bowden] Bai. 575 00:48:14,530 --> 00:48:19,840 Seguruenik litzateke pixka bat motelagoa, baina ez benetan. 576 00:48:19,840 --> 00:48:23,290 Tail recursive nahiko ona da. 577 00:48:23,290 --> 00:48:32,640 Berriro Looking pila markoak, demagun nagusia dugu 578 00:48:32,640 --> 00:48:42,920 eta int bar (int x) edo zerbait egin behar dugu. 579 00:48:42,920 --> 00:48:52,310 Hau ez da perfektua recursive funtzioa, baina bueltan bar (x - 1). 580 00:48:52,310 --> 00:48:57,620 Beraz, jakina, hau da flawed. Oinarri kasu eta stuff behar duzu. 581 00:48:57,620 --> 00:49:00,360 Baina hemen ideia hau buztana recursive da, 582 00:49:00,360 --> 00:49:06,020 nagusia deiak bar bere pila-markoa lortzeko esan nahi du. 583 00:49:09,550 --> 00:49:12,440 Pila marko honetan ez da memoria bloke txiki bat izango 584 00:49:12,440 --> 00:49:17,490 bere argumentua x dagokio. 585 00:49:17,490 --> 00:49:25,840 Eta, beraz, demagun nagusia gertatzen bar (100) deitu; 586 00:49:25,840 --> 00:49:30,050 Beraz, x 100 hasteko. 587 00:49:30,050 --> 00:49:35,660 Konpilatzailea aitortzen recursive funtzio hori buztana bada, 588 00:49:35,660 --> 00:49:38,540 orduan, bar, bere dei errekurtsiboa bar, 589 00:49:38,540 --> 00:49:45,490 pila marko berri bat, hau da, non pila hasiko da, neurri handi batean, gero eta handiagoa egin beharrean, 590 00:49:45,490 --> 00:49:48,220 azkenean, zeure sartu egingo da eta, ondoren, segfaults lortuko duzu 591 00:49:48,220 --> 00:49:51,590 memoria talka hasten delako. 592 00:49:51,590 --> 00:49:54,830 >> Beraz, bere pila-markoa egiteko ordez, konturatu ahal izango da, 593 00:49:54,830 --> 00:49:59,080 hey, benetan inoiz ez dut itzuli beharko pila fotograma honetan, 594 00:49:59,080 --> 00:50:08,040 ordez besterik ez dut 99 argumentua hau ordezkatu eta, ondoren, osoan zehar barra hasteko. 595 00:50:08,040 --> 00:50:11,810 Eta gero egingo da berriro, eta itzulera bar helduko da (x - 1), 596 00:50:11,810 --> 00:50:17,320 eta pila marko berri bat egin ordez, aski izango da ordezkatu gaur egungo argumentu 98 597 00:50:17,320 --> 00:50:20,740 eta, ondoren, salto itzuli bar hasieran. 598 00:50:23,860 --> 00:50:30,430 Eragiketa horiek, pila 1 balioa ordezkatuz, eta atzera jauzi hasieran, 599 00:50:30,430 --> 00:50:32,430 nahiko eraginkorrak dira. 600 00:50:32,430 --> 00:50:41,500 Beraz, ez soilik, hau da, aparteko funtzio gisa memoria berean erabilera, hau da, joan-etorriko 601 00:50:41,500 --> 00:50:45,390 1 pilaren markoa ari zaren bakarrik erabiliz, baina ez duzu downsides jasaten 602 00:50:45,390 --> 00:50:47,240 funtzioak deitu beharrik. 603 00:50:47,240 --> 00:50:50,240 Deitzen funtzioak zertxobait garestia izan daiteke konfigurazio hau guztia egin behar delako 604 00:50:50,240 --> 00:50:52,470 eta teardown eta stuff hori guztia. 605 00:50:52,470 --> 00:50:58,160 Beraz, buztana errekurtsio honen ona da. 606 00:50:58,160 --> 00:51:01,170 [Ikasleen] Zergatik ez sortu du urrats berria? 607 00:51:01,170 --> 00:51:02,980 Konturatuko da ez delako behar du. 608 00:51:02,980 --> 00:51:07,800 Bar deia besterik ez da dei errekurtsiboa itzuli. 609 00:51:07,800 --> 00:51:12,220 Beraz, ez du ezer egin beharko Itzultzen den balioa. 610 00:51:12,220 --> 00:51:15,120 Besterik ez da berehala itzultzeko. 611 00:51:15,120 --> 00:51:20,530 Beraz, besterik ez da bere argumentua ordezkatu eta berriro hasi. 612 00:51:20,530 --> 00:51:25,780 Eta gainera, buztana recursive bertsioan ez baduzu, 613 00:51:25,780 --> 00:51:31,460 ondoren taberna horiek non bar hau itzultzen 614 00:51:31,460 --> 00:51:36,010 bere balioa itzuliko da, hau da, gero barra berehala itzultzen ditu 615 00:51:36,010 --> 00:51:39,620 eta bere balioa itzultzen du, hau da, ondoren, besterik ez da berehala itzultzeko 616 00:51:39,620 --> 00:51:41,350 itzuli eta bere balioa hau. 617 00:51:41,350 --> 00:51:45,350 Beraz, gauza horiek guztiak leihoa off pila ari zaren aurrezteko 618 00:51:45,350 --> 00:51:48,730 Itzultzen den balioa besterik ez da igaro behar guztiak kopiak hala ere joan. 619 00:51:48,730 --> 00:51:55,400 Beraz, zergatik ez bakarrik ordezkatu gure argudioa eguneratu argumentua eta berriro hasi? 620 00:51:57,460 --> 00:52:01,150 Funtzioa ez da buztana recursive badu, antzeko zerbait bada, - 621 00:52:01,150 --> 00:52:07,530 [Ikasleak] bar (x + 1). >> Bai. 622 00:52:07,530 --> 00:52:11,770 >> Beraz, bada baldintza jarri duzu eta, ondoren, zerbait ari zaren Itzultzen den balioa. 623 00:52:11,770 --> 00:52:16,260 Edo, nahiz eta ez besterik ez duzu bueltan 2 * bar (x - 1). 624 00:52:16,260 --> 00:52:23,560 Beraz, gaur egun bar behar du (x - 1) 2 veces duten balioa kalkulatu ahal izateko itzultzeko, 625 00:52:23,560 --> 00:52:26,140 beraz, gaur egun, bere aparteko pila markoa behar du, 626 00:52:26,140 --> 00:52:31,180 eta, gaur egun, ez du axola nola gogor saiatu, behar zaren joan 627 00:52:31,180 --> 00:52:34,410 Hau ez da buztana errekurtsibitatean. 628 00:52:34,410 --> 00:52:37,590 [Ikasleak] buztana errekurtsio helburua errekurtsio ekartzea saiatzen naiz 629 00:52:37,590 --> 00:52:41,450 [Bowden] mundu ideal bat, baina CS50 ez duzu. 630 00:52:43,780 --> 00:52:49,280 Buztana errekurtsio, oro har, sortu argumentu bat gehiago 631 00:52:49,280 --> 00:52:53,550 non bar int x hartuko y sartu 632 00:52:53,550 --> 00:52:56,990 eta y itzuli nahi duzun azken gauza dagokio. 633 00:52:56,990 --> 00:53:03,650 (1 - x), 2 * y Orduan itzuli bar ari zaren joan. 634 00:53:03,650 --> 00:53:09,810 Beraz, hori da besterik gabe, goi-mailako gauzak nola buztana recursive eraldatu duzu. 635 00:53:09,810 --> 00:53:13,790 Baina argumentu estra - 636 00:53:13,790 --> 00:53:17,410 Eta gero, azkenean, zure base kasuan helduko zara, itzultzeko besterik ez duzu y 637 00:53:17,410 --> 00:53:22,740 duzun izan delako, denbora osoa metatu nahi duzun Itzultzen den balioa. 638 00:53:22,740 --> 00:53:27,280 Duzu mota horretako egiten iteratively baina dei errekurtsiboak erabiliz. 639 00:53:32,510 --> 00:53:34,900 Zalantzak dituzu? 640 00:53:34,900 --> 00:53:39,890 Agian erakuslea aritmetika [ikasleak], kateak erabiliz. >> Sure. 641 00:53:39,890 --> 00:53:43,610 Erakuslea aritmetika. 642 00:53:43,610 --> 00:53:48,440 Kateak erabiltzen erraza da kateak char ko delako, 643 00:53:48,440 --> 00:53:51,860 karakteretan dira betiko, eta, beti ere, single byte 644 00:53:51,860 --> 00:53:57,540 eta, beraz, erakuslea aritmetika aritmetika erregularra kateak ari zaren aurre baliokidea. 645 00:53:57,540 --> 00:54:08,790 Dezagun, besterik gabe esan char * s = "hello". 646 00:54:08,790 --> 00:54:11,430 Beraz, memoria bloke bat behar dugu. 647 00:54:19,490 --> 00:54:22,380 6 byte behar da, beti behar duzu, null amaierako. 648 00:54:22,380 --> 00:54:28,620 Eta char * s array honen hasieran seinalatu. 649 00:54:28,620 --> 00:54:32,830 Beraz, puntu s. 650 00:54:32,830 --> 00:54:36,710 Orain, hau da, funtsean, array edozein nola funtzionatzen du, 651 00:54:36,710 --> 00:54:40,780 , malloc edo pilan ote itzulera bat izan zen ala ez kontuan hartu gabe. 652 00:54:40,780 --> 00:54:47,110 Array Edozein array Irteeran erakuslea da, funtsean, 653 00:54:47,110 --> 00:54:53,640 eta, ondoren, array edozein eragiketa, indexatzeko edozein, besterik ez da array horretan jakin bat desplazamendua. 654 00:54:53,640 --> 00:55:05,360 >> Beraz, s [3] antzeko zerbait esan dut; hau da, s eta 3 karakteretan kontatuta sartu 655 00:55:05,360 --> 00:55:12,490 Beraz, s [3], 0 dugu, 1, 2, 3, beraz, s [3] l hau aipatzeko. 656 00:55:12,490 --> 00:55:20,460 [Ikasleak] Eta balio bera s + 3 egiteko eta, ondoren, parentesi star iritsiko izan dugu? 657 00:55:20,460 --> 00:55:22,570 Bai. 658 00:55:22,570 --> 00:55:26,010 * (S + 3) baliokidea da; 659 00:55:26,010 --> 00:55:31,240 eta hori betirako eta beti baliokide ez du axola zer egin nahi duzu. 660 00:55:31,240 --> 00:55:34,070 Bracket sintaxia erabili behar duzu, inoiz ez. 661 00:55:34,070 --> 00:55:37,770 Erabili ahal izango duzu beti * (s + 3) sintaxia. 662 00:55:37,770 --> 00:55:40,180 Pertsonak izaten bracket sintaxia nahi, baina. 663 00:55:40,180 --> 00:55:43,860 [Ikasleak] Beraz, array guztiak benetan besterik ez dira erakusleak. 664 00:55:43,860 --> 00:55:53,630 Arina bereizketa dut esan int x [4]; >> [ikasleak] sortzeko memoria? 665 00:55:53,630 --> 00:56:03,320 [Bowden] Hau da, 4 ints sortu pila, eta, beraz, 16 byte orokorra. 666 00:56:03,320 --> 00:56:05,700 Pilaketan 16 byte sortu da. 667 00:56:05,700 --> 00:56:09,190 x ez da gordetzen edonora joateko. 668 00:56:09,190 --> 00:56:13,420 Besterik ez da ikurra gauza Irteeran buruzkoa. 669 00:56:13,420 --> 00:56:17,680 Deklaratu duzu, array delako funtzio honen barruan, 670 00:56:17,680 --> 00:56:22,340 konpilatzailea da zer egingo da, besterik gabe, ordezkatu x aldagaia instantzia guztiak 671 00:56:22,340 --> 00:56:26,400 non aukeratu 16 byte horiek jarri gertatu da. 672 00:56:26,400 --> 00:56:30,040 Ezin da egin char * s s benetako erakusle bat delako. 673 00:56:30,040 --> 00:56:32,380 Free ondoren beste gauza batzuk seinalatu da. 674 00:56:32,380 --> 00:56:36,140 x konstante bat da. Beste array bat puntu ezin duzu. >> [Ikasleak] Larreina. 675 00:56:36,140 --> 00:56:43,420 Baina, indexatzeko hau, ideia hau bera da kontuan hartu gabe ote den array bat tradizionala 676 00:56:43,420 --> 00:56:48,230 edo da zerbait edo erakuslea bada, array bat malloced erakuslea da. 677 00:56:48,230 --> 00:56:59,770 Eta hain zuzen ere, eta, beraz, baliokideak hori dela ere gauza bera da. 678 00:56:59,770 --> 00:57:05,440 Besterik ez da benetan giltzen barruan zer itzuli eta zer parentesi artean utzi, 679 00:57:05,440 --> 00:57:07,970 gehitzen elkarrekin, eta dereferences. 680 00:57:07,970 --> 00:57:14,710 Beraz, hori besterik ez da baliozko * (s + 3) edo s [3]. 681 00:57:16,210 --> 00:57:22,090 [Ikasleak] erakusleak 2 dimentsioko array erakusten duzu? 682 00:57:22,090 --> 00:57:27,380 >> Zailagoa da. Orain arte, ez. 683 00:57:27,380 --> 00:57:34,720 2 dimentsiotako array bat besterik ez da, batzuk eroso sintaxia array 1-dimentsioko 684 00:57:34,720 --> 00:57:54,110 dut esan int x [3] [3], hau da, benetan 9 balioak array 1 besterik ez. 685 00:57:55,500 --> 00:58:03,000 Eta beraz, I indizea, konpiladore daki zer esan nahi dut. 686 00:58:03,000 --> 00:58:13,090 Diot x [1] [2], bigarren ilaran joan nahi dut badaki, beraz, lehen 3 saltatzeko, bada 687 00:58:13,090 --> 00:58:17,460 eta, ondoren, bigarren gauza dela, eta, beraz, hau da joan nahi duen. 688 00:58:17,460 --> 00:58:20,480 Baina oraindik ez da bakarra-dimentsioko array bat. 689 00:58:20,480 --> 00:58:23,660 Eta, beraz, nahi nuen erakuslea bat esleitzeko array hori bada, 690 00:58:23,660 --> 00:58:29,770 Esan int * p = x I izango du; 691 00:58:29,770 --> 00:58:33,220 X mota besterik ez da 692 00:58:33,220 --> 00:58:38,280 Zakarra esaten x mota da sinbolo bat da geroztik, eta ez da benetako aldagai bat, 693 00:58:38,280 --> 00:58:40,140 baina int * bat besterik ez da. 694 00:58:40,140 --> 00:58:44,840 x honen hasieran erakuslea bat besterik ez da. >> [Ikasleak] Larreina. 695 00:58:44,840 --> 00:58:52,560 Eta, beraz, ez dut ahal izango du [1] [2] sartzeko. 696 00:58:52,560 --> 00:58:58,370 Sintaxia berezia da erakuslea geratuko dela uste dut, 697 00:58:58,370 --> 00:59:12,480 int bezalako zerbait barregarria (* p [- zerbait erabat barregarria ez dakite. 698 00:59:12,480 --> 00:59:17,090 Baina parentesi eta gauzak bezala erakusleak geratuko sintaxia da. 699 00:59:17,090 --> 00:59:22,960 Agian ez da, nahiz eta utzi egiten duzu. 700 00:59:22,960 --> 00:59:26,640 Atzera begiratu nuen zerbait egia esango luke. 701 00:59:26,640 --> 00:59:34,160 Begiratu egingo dut geroago, puntu sintaxia bada. Baina inoiz ez dira ikusten. 702 00:59:34,160 --> 00:59:39,670 Eta are sintaxia da, beraz, arkaikoa erabiltzen baduzu, jendeak baffled egingo da. 703 00:59:39,670 --> 00:59:43,540 Multidimentsionala array nahiko arraroa da. 704 00:59:43,540 --> 00:59:44,630 Duzu pretty askoz 705 00:59:44,630 --> 00:59:48,490 Beno, ari zaren matrize gauzak egiten bada ez da arraroa izan da, 706 00:59:48,490 --> 00:59:56,730 baina C oso gutxitan ari zaren erabiliz array multidimensional. 707 00:59:57,630 --> 01:00:00,470 Bai. >> [Ikasleak] dezagun esan benetan luzea array duzu. 708 01:00:00,470 --> 01:00:03,900 >> Beraz, memoria birtual agertzen guztiak partiduko izango litzateke, 709 01:00:03,900 --> 01:00:05,640 elementuak bata bestearen ondoan bezala, 710 01:00:05,640 --> 01:00:08,770 baina memoria fisiko, ahalik eta horretarako sortu zatitu behar da? >> Bai. 711 01:00:08,770 --> 01:00:16,860 Nola memoria birtuala lanak bereizten besterik ez da - 712 01:00:19,220 --> 01:00:24,860 Esleipena unitate orri bat, 4 kilobyteko izan ohi da, 713 01:00:24,860 --> 01:00:29,680 eta, beraz, prozesu bat dio, hey, memoria hau erabili ahal izateko egin nahi dut, 714 01:00:29,680 --> 01:00:35,970 sistema eragilearen esleitzeko, memoria pixka bloke 4 kilobyteko. 715 01:00:35,970 --> 01:00:39,100 Nahiz eta erabili besterik ez duzu memoria bloke osoa gutxi single byte 716 01:00:39,100 --> 01:00:42,850 sistema eragilearen 4 kilobyteko emateko. 717 01:00:42,850 --> 01:00:49,410 Beraz, zer esan nahi izan nuen demagun hau da nire pila. 718 01:00:49,410 --> 01:00:53,180 Pila bereizita litezke. Nire pila megabyte eta megabyte izan daiteke. 719 01:00:53,180 --> 01:00:55,020 Nire pila izugarria izan daiteke. 720 01:00:55,020 --> 01:01:00,220 Baina pila bera orriak banakako zatitu izan behar du, 721 01:01:00,220 --> 01:01:09,010 esan dugu hemen dezagun gure RAM da, 722 01:01:09,010 --> 01:01:16,600 2 RAM gigabyte bada, uneko helbidea hau nire RAM zeroth byte bezalako 0 da, 723 01:01:16,600 --> 01:01:22,210 eta 2 gigabyteko guztiak hemen. 724 01:01:22,210 --> 01:01:27,230 Beraz, baliteke orri hau bloke honetan dagozkie hemen. 725 01:01:27,230 --> 01:01:29,400 Orri hau agian bloke honetan dagozkie hemen. 726 01:01:29,400 --> 01:01:31,560 Hori hemen dagozkie. 727 01:01:31,560 --> 01:01:35,540 Sistema eragilea doakoa da Beraz, fisiko memoria esleitu 728 01:01:35,540 --> 01:01:39,320 edozein arbitrarioki. 729 01:01:39,320 --> 01:01:46,180 Eta horrek esan nahi du mugan gertatzen array bat straddle nahi izanez gero, 730 01:01:46,180 --> 01:01:50,070 array bat gertatzen da, hau utzi eta eskubidea orrialde baten ordena honetan, 731 01:01:50,070 --> 01:01:54,460 ondoren, array hori memoria fisikoa zatitu behar. 732 01:01:54,460 --> 01:01:59,280 Eta orduan, programatik irten duzunean, prozesua bukatzen denean, 733 01:01:59,280 --> 01:02:05,690 mapaketa hauek ezabatu, eta gero beste gauza blokeak apur hauek erabiltzeko free da. 734 01:02:14,730 --> 01:02:17,410 Galdera gehiago? 735 01:02:17,410 --> 01:02:19,960 [Ikasleak] erakuslea aritmetika. >> Oh yeah. 736 01:02:19,960 --> 01:02:28,410 Strings errazagoa izan ziren, baina ints antzeko zerbait begiratzeko, 737 01:02:28,410 --> 01:02:35,000 beraz, itzuli int x [4]; 738 01:02:35,000 --> 01:02:41,810 Array bat da ala ez adierazten du edo 4 zenbaki osoen array malloced erakuslea bat da ala ez, 739 01:02:41,810 --> 01:02:47,060 modu berean tratatu behar da. 740 01:02:50,590 --> 01:02:53,340 [Ikasleak] Beraz, array zeure gainean daude? 741 01:03:01,400 --> 01:03:05,270 [Bowden] Arrayak ez dira zeure gainean. >> [Ikasleak] Oh. 742 01:03:05,270 --> 01:03:08,320 >> [Bowden] array-mota ugari pilaketan 743 01:03:08,320 --> 01:03:12,220 deklaratu ezean - global aldagai jaramonik ez. Ez erabili aldagai global. 744 01:03:12,220 --> 01:03:16,280 Funtzio bat esango dizut Inside int x [4]; 745 01:03:16,280 --> 01:03:22,520 Array honetan pilaketan bloke 4-zenbaki oso bat sortu da. 746 01:03:22,520 --> 01:03:26,960 Baina malloc (4 * sizeof (int)); zeure gainean joango da. 747 01:03:26,960 --> 01:03:31,870 Baina puntu honen ondoren, x eta p erabili ahal izango dut pretty askoz ere modu berean, 748 01:03:31,870 --> 01:03:36,140 buruz aurretik p berriro ezar ditzakezu esan dut salbuespenak baino beste. 749 01:03:36,140 --> 01:03:40,960 Teknikoki, bere tamaina zertxobait ezberdinak dira, baina hori guztiz garrantzirik. 750 01:03:40,960 --> 01:03:43,310 Egia esan, inoiz ez duzu erabili beren tamaina. 751 01:03:48,020 --> 01:03:56,810 P esan izan dut p [3] = 2; edo x [3] = 2; 752 01:03:56,810 --> 01:03:59,680 Zehazki modu berean erabil ditzakezu. 753 01:03:59,680 --> 01:04:01,570 Beraz, erakuslea aritmetika - Bai. 754 01:04:01,570 --> 01:04:07,390 [Ikasleak] ez dute egin behar duzu parentesi artean bada p *? 755 01:04:07,390 --> 01:04:11,720 Parentesi artean inplizitu dereference dira. >> Ados. 756 01:04:11,720 --> 01:04:20,200 Gaur egun, gainera, esaten ari zaren array multidimensional lortuko duzu 757 01:04:20,200 --> 01:05:02,650 erakusleak, zer egin dezakezu zerbait, demagun, int ** pp = malloc (sizeof (int *) * 5); 758 01:05:02,650 --> 01:05:06,900 Besterik ez dut idazteko guztiak izarrekin lehen. 759 01:05:37,880 --> 01:05:41,020 Ez nuen nahi bat. 760 01:05:41,020 --> 01:05:42,550 Ongi da. 761 01:05:42,550 --> 01:05:48,910 Zer egin nuen - pp [i] izan behar du. 762 01:05:48,910 --> 01:05:53,680 Beraz, pp erakuslea erakuslea da. 763 01:05:53,680 --> 01:06:02,420 Pp ari zara mallocing, 5 stars int array bat seinalatu. 764 01:06:02,420 --> 01:06:10,950 Beraz, memoria pila págs 765 01:06:10,950 --> 01:06:20,150 5 blokeak diren guztiak bere burua erakusleak array bat seinalatu. 766 01:06:20,150 --> 01:06:28,210 Eta orduan, behera malloc dut hemen, I malloc horiek banakako erakusle bakoitzak 767 01:06:28,210 --> 01:06:32,080 zeure gainean 4 byte bloke bereizi bat seinalatu behar da. 768 01:06:32,080 --> 01:06:35,870 Beraz, 4 byte puntu honetan. 769 01:06:37,940 --> 01:06:40,660 Eta beste modu batean 4 bytes bat puntu honetan. 770 01:06:40,660 --> 01:06:43,200 >> Eta horiek guztiak bere 4 bytes. 771 01:06:43,200 --> 01:06:49,080 Honek ematen dit multidimensional Gauzak egiteko modu bat. 772 01:06:49,080 --> 01:06:58,030 Pp [3] [4], baina gaur egun, hau da, ez da gauza bera multidimensional gisa array esan izan dut 773 01:06:58,030 --> 01:07:05,390 multidimensional array [3] [4] x array sartu desplazamendu bakar bat sartu. itzulitako delako 774 01:07:05,390 --> 01:07:14,790 Dereferences p honek, hirugarren indizea sartzen, gero dereferences 775 01:07:14,790 --> 01:07:20,790 eta sarbideak - 4 baliogabea izango litzateke bigarren indizea. 776 01:07:24,770 --> 01:07:31,430 Genuen int x [3] [4] gisa aurretik multidimensional array bat, berriz, 777 01:07:31,430 --> 01:07:35,740 eta bracket bikoiztu benetan dereference bakarra, 778 01:07:35,740 --> 01:07:40,490 single erakuslea ari zaren jarraituz eta, ondoren, desplazamendu 779 01:07:40,490 --> 01:07:42,850 hau da, benetan 2D erreferentziak. 780 01:07:42,850 --> 01:07:45,840 2 aparteko erakusleak jarraitzen duzu. 781 01:07:45,840 --> 01:07:50,420 Hau ere, teknikoki Beraz, aukera ematen du multidimensional array izan behar duzu 782 01:07:50,420 --> 01:07:53,550 non banakako array bakoitzak tamaina da. 783 01:07:53,550 --> 01:07:58,000 Beraz, uste dut zorrotzak multidimensional array zer deitzen 784 01:07:58,000 --> 01:08:01,870 Lehenik eta behin, benetan 10 elementu ditu zerbait seinalatu geroztik, 785 01:08:01,870 --> 01:08:05,540 bigarren gauza izan 100 elementu ditu zerbait seinalatu. 786 01:08:05,540 --> 01:08:10,790 [Ikasleak] erakusle izan dezakezu edozein muga 787 01:08:10,790 --> 01:08:14,290 beste erakusleak erakusten? >> N º. 788 01:08:14,290 --> 01:08:17,010 Int ***** p dezakezu. 789 01:08:18,050 --> 01:08:23,760 Atzera erakuslea aritmetika - >> [ikasleak] Oh. >> Bai. 790 01:08:23,760 --> 01:08:35,649 [Ikasleak] daukat int *** p bada eta orduan dereferencing bat egin dut, eta esan dut p * balio hau berdina da, 791 01:08:35,649 --> 01:08:39,560 maila 1 dereferencing bakarrik egin behar da? >> Bai. 792 01:08:39,560 --> 01:08:43,340 Beraz, bada, gauza da azken erakuslea apuntatzen sartu nahi dut - 793 01:08:43,340 --> 01:08:46,210 Ondoren, *** p. >> Ados. 794 01:08:46,210 --> 01:08:54,080 Beraz, p 1 blokea, bloke beste puntu, beste bloke puntu puntu da. 795 01:08:54,080 --> 01:09:02,010 Orduan ez duzu * bada p = beste zerbait, eta gero hau duzun bezala, aldatzen 796 01:09:02,010 --> 01:09:13,640 beste bloke bat seinalatu. >> Ados. 797 01:09:13,640 --> 01:09:17,649 >> [Bowden] Eta horiek malloced bada, ondoren, gaur egun dituzun leaked memoria 798 01:09:17,649 --> 01:09:20,430 gertatuko horien erreferentziak desberdinak izan ezean 799 01:09:20,430 --> 01:09:25,270 dezakezu, ez baita itzuli dira horiek besterik gabe bota urruntzen. 800 01:09:25,270 --> 01:09:29,550 Erakuslea aritmetika. 801 01:09:29,550 --> 01:09:36,310 int x [4]; 4 zenbaki osoen array bat esleitu 802 01:09:36,310 --> 01:09:40,670 non x array-hasieratik seinalatu. 803 01:09:40,670 --> 01:09:50,420 Beraz, x [1] antzeko zerbait esan dut; array osokoa bigarren joan esan nahi du nahi dut, 804 01:09:50,420 --> 01:09:53,319 ko hau izango litzateke. 805 01:09:53,319 --> 01:10:04,190 Baina, benetan, 4 byte array sartu osokoa hartzen du geroztik, 4 bytes. 806 01:10:04,190 --> 01:10:08,470 1-desplazamendua benetan esan nahi du, beraz, 1 desplazamendu 807 01:10:08,470 --> 01:10:12,030 aldiz tamaina edozein array-mota da. 808 01:10:12,030 --> 01:10:17,170 Zenbaki osoen array bat da, beraz, 1 aldiz int tamaina daki desplazamendu nahi. 809 01:10:17,170 --> 01:10:25,260 Beste sintaxia. Gogoratu hau * (x + 1) baliokidea da; 810 01:10:25,260 --> 01:10:35,250 Erakuslea esan I + 1, zer itzultzen duten erakusleak gordetzeko helbidea 811 01:10:35,250 --> 01:10:40,360 gehi 1 aldiz erakuslea mota tamaina. 812 01:10:40,360 --> 01:10:59,510 Beraz, bada, x = ox100, gero x + 1 = ox104. 813 01:10:59,510 --> 01:11:19,750 Eta hau gehiegi erabili ahal izango duzu, eta zerbait esan bezala char * c = (char *) x; 814 01:11:19,750 --> 01:11:23,050 eta, gaur egun, c x helbide bera izango da. 815 01:11:23,050 --> 01:11:26,040 c ox100 berdinak izango, 816 01:11:26,040 --> 01:11:31,490 baina c + 1 ox101 berdinak izango 817 01:11:31,490 --> 01:11:38,030 erakuslea aritmetika erakuslea mota duzun gehituz araberakoa baita. 818 01:11:38,030 --> 01:11:45,390 Beraz, c + 1, itxura c, char erakuslea da, eta, beraz, 1 aldiz char tamaina gehitzeko, joan 819 01:11:45,390 --> 01:11:48,110 den beti 1 izan behar du eta, beraz, 101 lortuko duzu, 820 01:11:48,110 --> 01:11:54,890 do I x ere, hau da, oraindik ere 100 bada, x + 1, berriz, 104 izango da. 821 01:11:56,660 --> 01:12:06,340 [Ikasleak] c + + ordena zure erakuslea aurrera 1 erabili nahi duzun? 822 01:12:06,340 --> 01:12:09,810 Bai, ahal duzu. 823 01:12:09,810 --> 01:12:16,180 Ezin duzu egin x x sinbolo bat besterik ez da delako, konstante bat da, ezin duzu aldatu x. 824 01:12:16,180 --> 01:12:22,610 >> Baina c gertatzen erakuslea besterik ez izan, beraz, c + + primeran baliozko eta Kontatzailea 1 izango da. 825 01:12:22,610 --> 01:12:32,440 C balitz, int * bat, eta, ondoren, c + + 104 izango litzateke. 826 01:12:32,440 --> 01:12:41,250 + + Erakuslea aritmetika ez bezala, c + 1 egin beharko lukete erakuslea aritmetika. 827 01:12:43,000 --> 01:12:48,870 Hau da, benetan nola merge sort bezala gauza asko - 828 01:12:49,670 --> 01:12:55,710 Gauza kopiak sortzeko beharrean, ordez dezakezu gainditu 829 01:12:55,710 --> 01:13:02,400 Atsegin dut nahi nuen array Zati hau gainditu nahi baduzu utzi hau batzuk ezabatuko da. 830 01:13:04,770 --> 01:13:10,520 Dezagun, array, alde honetan funtzio bat pasatzeko esan nahi nuen. 831 01:13:10,520 --> 01:13:12,700 Zer izango litzateke funtzio hori gainditu behar dut? 832 01:13:12,700 --> 01:13:17,050 Igaroko I x izanez gero, helbide honetara joan naiz pasatzen. 833 01:13:17,050 --> 01:13:23,780 Baina helbide hau gainditu nahi dut. Beraz, zer egin behar igaroko da? 834 01:13:23,780 --> 01:13:26,590 [Ikasleen] erakuslea + 2? 835 01:13:26,590 --> 01:13:29,350 [Bowden] Beraz, x + 2. Bai. 836 01:13:29,350 --> 01:13:31,620 Hau da helbide honetan izango da. 837 01:13:31,620 --> 01:13:42,810 Aukera izango duzu maiz ikusten x [2], eta, ondoren, horren helbidea. 838 01:13:42,810 --> 01:13:47,850 Beraz, helbidea hartu behar duzu parentesi inplizitu dereference bat delako. 839 01:13:47,850 --> 01:13:53,250 x [2] balioa koadro honetan aipatzen da, eta, ondoren, kutxa helbidea nahi duzun, 840 01:13:53,250 --> 01:13:56,850 Beraz, esan & x [2]. 841 01:13:56,850 --> 01:14:02,880 Beraz, nola merge sailkatu zerbait non zerrendan erdi pasa behar zerbait nahi duzun 842 01:14:02,880 --> 01:14:08,790 besterik ez duzula gainditu & x [2], eta, orain, dei errekurtsiboa dagokionez, 843 01:14:08,790 --> 01:14:12,510 nire array berria hasten du. 844 01:14:12,510 --> 01:14:15,130 Azken orduko galderak. 845 01:14:15,130 --> 01:14:20,050 [Ikasleak] ampersand bat jarri ez badugu edo zer da hori deitzen? >> Star? 846 01:14:20,050 --> 01:14:23,200 [Ikasleak] Star. >> Teknikoki, dereference operadorea, baina - >> [ikasleak] Dereference. 847 01:14:23,200 --> 01:14:29,310 >> Ampersand bat edo izar bat jarri ez badugu, zer gertatzen da, besterik ez dut esaten bada y = x eta x erakuslea da? 848 01:14:29,310 --> 01:14:34,620 Zer da y mota? >> [Ikasleak] besterik ez dut esango da erakuslea 2. 849 01:14:34,620 --> 01:14:38,270 Beraz, bada esan duzu y = x, gaur egun, x eta y puntu gauza bera. >> [Ikasleak] Point gauza bera. 850 01:14:38,270 --> 01:14:45,180 Eta x int erakusle bat bada? >> Kexatu, ezin delako esleitzeko erakusle litzateke. 851 01:14:45,180 --> 01:14:46,540 [Ikasleak] Larreina. 852 01:14:46,540 --> 01:14:51,860 Gogoratu erakusle hori, nahiz eta horiek marraztu dugu geziak, 853 01:14:51,860 --> 01:15:02,010 benetan duten denda guztiak - int * x - x guztiak benetan gordetzeko ox100 antzeko zerbait da, 854 01:15:02,010 --> 01:15:06,490 100 gordetako blokea seinalatuz irudikatzeko gertatuko. 855 01:15:06,490 --> 01:15:19,660 Beraz, esango dizut int * y = x; besterik ez dut ox100 kopiatzeko y, 856 01:15:19,660 --> 01:15:24,630 besterik ez ari gara y gisa irudikatzeko ere, ox100 seinalatuz. 857 01:15:24,630 --> 01:15:39,810 Eta esaten badut int i = (int) x; gero edozein ox100 balioa gorde egingo da i 858 01:15:39,810 --> 01:15:45,100 barruan, baina gaur egun, erakuslea ordez osoko gisa interpretatu behar da joan. 859 01:15:45,100 --> 01:15:49,310 Baina cast behar duzu, edo, bestela, kexatu egingo da. 860 01:15:49,310 --> 01:15:53,300 [Ikasleak] Beraz, ez bota nahi al duzu 861 01:15:53,300 --> 01:16:00,290 Va x edo casting y int int galdaketa? 862 01:16:00,290 --> 01:16:03,700 [Bowden] Zer da? 863 01:16:03,700 --> 01:16:07,690 [Ikasleak] Larreina. Parentesi hauen ondoren da hor x edo ay han izango? 864 01:16:07,690 --> 01:16:11,500 >> [Bowden] Edo. x eta y baliokideak dira. >> [Ikasleak] Larreina. 865 01:16:11,500 --> 01:16:14,390 Oraindik erakusleak bi delako. >> Bai. 866 01:16:14,390 --> 01:16:21,050 [Ikasleak] Beraz, hamaseitarra 100 gordetzeko litzateke inprimaki osokoaren? >> [Bowden] Bai. 867 01:16:21,050 --> 01:16:23,620 Baina ez da edozein dela ere adierazi du balio. 868 01:16:23,620 --> 01:16:29,940 [Bowden] Bai. >> [Ikasleak] Beraz, inprimaki osokoaren helbidea. Ongi da. 869 01:16:29,940 --> 01:16:34,720 [Bowden] arrazoi batzuk bitxi bada nahi duzun, 870 01:16:34,720 --> 01:16:38,900 esklusiboki izan duzu erakusle aurre egiteko eta ez du inoiz zenbaki osoen aurre egiteko 871 01:16:38,900 --> 01:16:49,240 eta, int * x = 0 bezalakoa izango da. 872 01:16:49,240 --> 01:16:53,000 Ondoren, benetan nahastu erakuslea aritmetika hasten da gertatzen ari dena behin duzu. 873 01:16:53,000 --> 01:16:56,570 Beraz gordetzen dituzten zenbakiak dira zentzugabeak. 874 01:16:56,570 --> 01:16:58,940 Besterik ez amaitzeko nola sortu dituzu interpretatzeko da. 875 01:16:58,940 --> 01:17:02,920 Beraz, free ox100 kopiatu int * int bat naiz, 876 01:17:02,920 --> 01:17:07,790 you're ziurrenik ez galdaketa eskuratzeko yelled joan eta free esleitzeko naiz 877 01:17:07,790 --> 01:17:18,160 Free zerbait esleitzeko (int *) int * arbitrarioak sartu ox1234 atsegin dut. 878 01:17:18,160 --> 01:17:25,480 Beraz ox123 bezala baliozko memoria-helbide bat da, eta y. 879 01:17:25,480 --> 01:17:32,060 & Y gertatzen den zerbait pretty askoz ox123 itzultzeko. 880 01:17:32,060 --> 01:17:35,430 [Ikasleen] litzaizuke izatea hamaseitarrean hamartar inprimaki joateko modu benetan cool, 881 01:17:35,430 --> 01:17:39,230 nahi duzu erakuslea bada, eta int bat bota duzu? 882 01:17:39,230 --> 01:17:44,860 [Bowden] benetan bakarrik inprima ditzakezu printf bezala erabiliz. 883 01:17:44,860 --> 01:17:50,300 Demagun int y = 100 daukat. 884 01:17:50,300 --> 01:18:02,700 Beraz, printf (% d \ n - dagoeneko jakin behar duzun bezala - inprimatu zenbaki oso bat,% x. 885 01:18:02,700 --> 01:18:05,190 Besterik ez dugu inprimatu hamaseitar bezala. 886 01:18:05,190 --> 01:18:10,760 Beraz, erakuslea ez da hamaseitar bezala gordetzen dira, 887 01:18:10,760 --> 01:18:12,960 eta zenbaki oso bat ez da hamartar gisa gordetzen dira. 888 01:18:12,960 --> 01:18:14,700 Dena bitar gisa gordetzen da. 889 01:18:14,700 --> 01:18:17,950 Besterik ez da izan ohi dugun hamaseitar bezala erakusleak erakusteko 890 01:18:17,950 --> 01:18:23,260 4-byte bloke horietan gauza dela uste duelako, 891 01:18:23,260 --> 01:18:25,390 eta memoria helbideak joera ezagutu behar dira. 892 01:18:25,390 --> 01:18:28,890 BF hasten bada, esate baterako, gero pila gertatzen gara. 893 01:18:28,890 --> 01:18:35,560 Beraz, besterik ez da gure hamaseitar bezala erakusleak interpretazioa. 894 01:18:35,560 --> 01:18:39,200 Ongi da. Azken edozein galdera? 895 01:18:39,200 --> 01:18:41,700 >> Hemen egongo naiz apur bat, eta ondoren beste ezer behar duzu. 896 01:18:41,700 --> 01:18:46,070 Eta hori amaieran. 897 01:18:46,070 --> 01:18:48,360 >> [Ikasleak] Yay! [Txalo] 898 01:18:51,440 --> 01:18:53,000 >> [CS50.TV]