1 00:00:00,000 --> 00:00:02,520 [Powered by Google Translate] [Sezzjoni 4 - aktar komdi] 2 00:00:02,520 --> 00:00:04,850 [Rob Bowden - Università ta 'Harvard] 3 00:00:04,850 --> 00:00:07,370 [Dan huwa CS50. - CS50.TV] 4 00:00:08,920 --> 00:00:13,350 Għandna għada kwizz, fil-każ inti guys ma kinitx taf li. 5 00:00:14,810 --> 00:00:20,970 Huwa bażikament fuq kollox inti tista raw fil-klassi jew suppost li jidhru fil-klassi. 6 00:00:20,970 --> 00:00:26,360 Li tinkludi pointers, anki jekk dawn qed tema riċenti ħafna. 7 00:00:26,360 --> 00:00:29,860 Għandek inqas jifhmu l-livelli għolja ta 'minnhom. 8 00:00:29,860 --> 00:00:34,760 Kwalunkwe ħaġa li kienet marret fuq fil-klassi għandek tifhem għall-kwizz. 9 00:00:34,760 --> 00:00:37,320 Mela jekk għandek mistoqsijiet dwar minnhom, inti tista 'titlobhom issa. 10 00:00:37,320 --> 00:00:43,280 Iżda dan se jkun hemm sessjoni ferm student mmexxija fejn inti guys jistaqsu mistoqsijiet, 11 00:00:43,280 --> 00:00:45,060 hekk nisperaw nies ikollhom mistoqsijiet. 12 00:00:45,060 --> 00:00:48,020 Ħadd ma jkollu mistoqsijiet? 13 00:00:49,770 --> 00:00:52,090 Iva. >> [Student] Tista 'tmur fuq pointers mill-ġdid? 14 00:00:52,090 --> 00:00:54,350 I ser tmur fuq pointers. 15 00:00:54,350 --> 00:00:59,180 Kollha ta 'varjabbli tiegħek neċessarjament jgħixu fil-memorja, 16 00:00:59,180 --> 00:01:04,450 iżda ġeneralment inti ma joqogħdu jinkwetaw dwar dan u inti biss jgħidu x + 2 u + 3 y 17 00:01:04,450 --> 00:01:07,080 u l-kumpilatur se insemmu fejn l-affarijiet qed jgħixu għalik. 18 00:01:07,080 --> 00:01:12,990 Ladarba inti qed jittrattaw ma pointers, issa int espliċitament tuża dawk l-indirizzi tal-memorja. 19 00:01:12,990 --> 00:01:19,800 Allura varjabbli waħda biss qatt jgħixu f'indirizz wieħed fi kwalunkwe ħin partikolari. 20 00:01:19,800 --> 00:01:24,040 Jekk irridu li tiddikjara pointer, liema huwa t-tip se look like? 21 00:01:24,040 --> 00:01:26,210 >> Irrid li tiddikjara p pointer. Xi jfisser it-tip look like? 22 00:01:26,210 --> 00:01:33,530 [Student] int * p. >> Yeah. Allura int * p. 23 00:01:33,530 --> 00:01:38,030 U kif nista 'tagħmel dan punt li x? >> [Student] ampersand. 24 00:01:40,540 --> 00:01:45,300 [Bowden] Mela ampersand huwa litteralment msejjaħ l-indirizz tal-operatur. 25 00:01:45,300 --> 00:01:50,460 Allura meta I say & x huwa jkollna l-indirizz tal-memorja ta 'l-x varjabbli. 26 00:01:50,460 --> 00:01:56,790 Allura issa għandi l-pointer p, u kullimkien fl kodiċi tiegħi nista 'nuża * p 27 00:01:56,790 --> 00:02:02,960 jew I jistgħu jużaw x u ​​se jkun l-istess ħaġa eżatt. 28 00:02:02,960 --> 00:02:09,520 (* P). X'inhu dan tagħmel? Xi jfisser dan star jfisser? 29 00:02:09,520 --> 00:02:13,120 [Student] Dan ifisser valur f'dak il-punt. >> Yeah. 30 00:02:13,120 --> 00:02:17,590 Mela jekk inħarsu lejn din, jista 'jkun utli ħafna biex jiġbed l-dijagrammi 31 00:02:17,590 --> 00:02:22,230 fejn dan huwa kaxxa ftit ta 'memorja għal x, li jiġri li jkollhom il-valur 4, 32 00:02:22,230 --> 00:02:25,980 allura għandna ftit kaxxa ta 'memorja għall-p, 33 00:02:25,980 --> 00:02:31,590 u għalhekk il-punti p sa x, hekk aħna jiġbed vleġġa minn p għal x. 34 00:02:31,590 --> 00:02:40,270 Allura meta ngħidu * p aħna qed tgħid tmur għall-kaxxa li hija p. 35 00:02:40,270 --> 00:02:46,480 Star hu li ssegwi l-vleġġa u allura kulma trid ma 'dik il-kaxxa hemm dritt. 36 00:02:46,480 --> 00:03:01,090 Allura nista 'ngħid * p = 7; u li se jmorru għall-kaxxa li hija x u bidla li sa 7. 37 00:03:01,090 --> 00:03:13,540 Jew nista 'ngħid int z = * p * 2; Li konfuża għaliex huwa stilla, stilla. 38 00:03:13,540 --> 00:03:19,230 L-istilla wieħed huwa dereferencing p, l-istilla ieħor huwa mmultiplikat bi 2. 39 00:03:19,230 --> 00:03:26,780 Avviż I jista 'jkollhom biss kif ukoll post il-p * ma x. 40 00:03:26,780 --> 00:03:29,430 Inti tista 'tużahom bl-istess mod. 41 00:03:29,430 --> 00:03:38,000 U mbagħad aktar tard I jista 'jkollhom punt p għal xi ħaġa kompletament ġdida. 42 00:03:38,000 --> 00:03:42,190 I tista 'biss jgħidu p = &z; 43 00:03:42,190 --> 00:03:44,940 Allura issa p ebda punti aktar lejn x; hija tfakkar li z. 44 00:03:44,940 --> 00:03:50,510 U kull darba nagħmel * p huwa l-istess kif tagħmel z. 45 00:03:50,510 --> 00:03:56,170 Allura l-ħaġa utli dwar dan huwa darba nibdew jkollna fis funzjonijiet. 46 00:03:56,170 --> 00:03:59,790 >> Huwa tip ta 'inutli li tiddikjara pointer li l-punti għal xi ħaġa 47 00:03:59,790 --> 00:04:03,140 u allura int biss dereferencing dan 48 00:04:03,140 --> 00:04:06,060 meta inti jista 'jkun użat il-varjabbli oriġinali li tibda bil. 49 00:04:06,060 --> 00:04:18,190 Imma meta ikollok fis funzjonijiet - so ejja ngħidu li għandna xi funzjoni, int foo, 50 00:04:18,190 --> 00:04:32,810 li tieħu pointer u biss ma * p = 6; 51 00:04:32,810 --> 00:04:39,990 Bħal rajna qabel ma tpartit, inti ma tistax tagħmel tpartit effettiva u funzjoni separata 52 00:04:39,990 --> 00:04:45,180 bi ftit tgħaddi interi għaliex kollox fis-C huwa dejjem tgħaddi minn valur. 53 00:04:45,180 --> 00:04:48,360 Anke meta int tgħaddi pointers int tgħaddi minn valur. 54 00:04:48,360 --> 00:04:51,940 Huwa biss hekk jiġri li dawk il-valuri huma indirizzi memorja. 55 00:04:51,940 --> 00:05:00,770 Allura meta I say foo (p); jien tgħaddi l-pointer fil-funzjoni foo 56 00:05:00,770 --> 00:05:03,910 u mbagħad foo qed tagħmel * p = 6; 57 00:05:03,910 --> 00:05:08,600 Allura ġewwa ta 'dik il-funzjoni, * p għadu ekwivalenti għal x, 58 00:05:08,600 --> 00:05:12,720 I iżda ma tistax tuża x ġewwa ta 'dik il-funzjoni għaliex mhuwiex scoped fi ħdan dik il-funzjoni. 59 00:05:12,720 --> 00:05:19,510 Allura * p = 6 huwa l-uniku mod I tista 'aċċess varjabbli lokali minn funzjoni oħra. 60 00:05:19,510 --> 00:05:23,600 Or, ukoll, pointers huma l-uniku mod I tista 'aċċess varjabbli lokali minn funzjoni oħra. 61 00:05:23,600 --> 00:05:31,600 [Istudent] Ejja ngħidu li inti riedu li jirritornaw pointer. Kif eżattament do inti tagħmel dan? 62 00:05:31,600 --> 00:05:44,270 [Bowden] Ritorn pointer bħal fil xi ħaġa simili int y = 3; ritorn & y? >> [Student] Yeah. 63 00:05:44,270 --> 00:05:48,480 [Bowden] Okay. Inti qatt ma għandhom jagħmlu dan. Dan huwa ħażin. 64 00:05:48,480 --> 00:05:59,480 I think I raw f'dawn slides lecture bdejt tara dan dijagramma kollu ta 'memorja 65 00:05:59,480 --> 00:06:02,880 fejn up hawn inti stajt ltqajna l-indirizz tal-memorja 0 66 00:06:02,880 --> 00:06:09,550 u 'l isfel hawn ikollok l-indirizz tal-memorja 4 gigs jew 2 għall-32. 67 00:06:09,550 --> 00:06:15,120 Mela allura inti stajt ltqajna xi għalf u xi għalf u mbagħad għandek munzell tiegħek 68 00:06:15,120 --> 00:06:21,780 u inti stajt ltqajna borġ tiegħek, li inti biss bdiet tagħlim dwar, jikbru. 69 00:06:21,780 --> 00:06:24,390 [Student] Mhix-borġ fuq il-munzell? 70 00:06:24,390 --> 00:06:27,760 >> Yeah. Il-munzell hu fuq, hux? >> [Student] Ukoll, huwa poġġa 0 fuq nett. 71 00:06:27,760 --> 00:06:30,320 [Student] Oh, huwa poġġa 0 fuq nett. >> [Student] Oh, okay. 72 00:06:30,320 --> 00:06:36,060 Disclaimer: Kullimkien mal CS50 int ser tara dan il-mod. >> [Student] Okay. 73 00:06:36,060 --> 00:06:40,290 Huwa biss li meta int l-ewwel tara stacks, 74 00:06:40,290 --> 00:06:45,000 bħal meta taħseb ta 'munzell taħseb ta stivar affarijiet fuq quċċata ta' xulxin. 75 00:06:45,000 --> 00:06:50,810 Allura għandna t-tendenza li flip dan madwar sabiex il-munzell hu jikbru bħal munzell normalment kieku 76 00:06:50,810 --> 00:06:55,940 minflok il-munzell jiddendlu 'l isfel. >> [Student] Do mhux munzelli teknikament jikbru wisq, għalkemm? 77 00:06:55,940 --> 00:07:01,100 Hija tiddependi fuq dak li jfisser bi jikbru. 78 00:07:01,100 --> 00:07:04,010 Il-munzell u borġ dejjem jikbru f'direzzjonijiet opposti. 79 00:07:04,010 --> 00:07:09,420 A munzell hu dejjem jikbru fis-sens li huwa jikbru 80 00:07:09,420 --> 00:07:12,940 lejn indirizzi ogħla memorja, u l-borġ qed jikber isfel 81 00:07:12,940 --> 00:07:17,260 fis-sens li dejjem tikber lejn l-indirizzi tal-memorja aktar baxxi. 82 00:07:17,260 --> 00:07:20,250 Allura l-quċċata hija 0 u l-qiegħ huwa l-indirizzi tal-memorja għolja. 83 00:07:20,250 --> 00:07:26,390 Huma qed kemm tikber, biss f'direzzjonijiet opposti. 84 00:07:26,390 --> 00:07:29,230 [Student] I biss kien ifisser li minħabba li inti qal inti tpoġġi munzell fuq il-qiegħ 85 00:07:29,230 --> 00:07:33,640 minħabba li din tidher aktar intuwittivi għaliex għall-munzell li tibda fil-quċċata ta 'borġ, 86 00:07:33,640 --> 00:07:37,520 munzell l fuq quċċata ta nnifisha wisq, hekk that's - >> Yeah. 87 00:07:37,520 --> 00:07:44,960 Għandek ukoll jaħsbu tal-borġ bħala jikbru u akbar, iżda l-munzell aktar hekk. 88 00:07:44,960 --> 00:07:50,280 Allura l-munzell huwa dak li aħna tip ta 'tixtieq li juru jikbru. 89 00:07:50,280 --> 00:07:55,390 Imma kullimkien inti tfittex inkella se juri indirizz 0 fil-quċċata 90 00:07:55,390 --> 00:07:59,590 u l-indirizz tal-memorja ogħla fil-qiegħ, għalhekk dan huwa minħabba tas-soltu tiegħek ta 'memorja. 91 00:07:59,590 --> 00:08:02,100 >> Għandek xi mistoqsija? 92 00:08:02,100 --> 00:08:04,270 [Student] Tista 'tgħidilna aktar dwar il-munzell? 93 00:08:04,270 --> 00:08:06,180 Yeah. I ser jiksbu għal dak fit-tieni. 94 00:08:06,180 --> 00:08:12,220 L-ewwel, li tmur lura għal għaliex jirritornaw & y hija ħaġa ħażina, 95 00:08:12,220 --> 00:08:18,470 fuq il-munzell għandek mazz ta 'frejms munzell li jirrappreżentaw il-funzjonijiet kollha 96 00:08:18,470 --> 00:08:20,460 li ġew imsejħa. 97 00:08:20,460 --> 00:08:27,990 Allura jinjora l-affarijiet ta 'qabel, il-quċċata tal-munzell tiegħek huwa dejjem se tkun il-funzjoni prinċipali 98 00:08:27,990 --> 00:08:33,090 peress li l-funzjoni ewwel li l-jiġu msejħa. 99 00:08:33,090 --> 00:08:37,130 U allura meta inti sejħa funzjoni oħra, il-munzell hu ser jikbru l isfel. 100 00:08:37,130 --> 00:08:41,640 Mela jekk jien sejħa xi funzjoni, foo, u jiġrilha frejm tagħha munzell stess, 101 00:08:41,640 --> 00:08:47,280 hija tista 'tirrikorri xi funzjoni, bar; jiġrilha frejm tagħha munzell stess. 102 00:08:47,280 --> 00:08:49,840 U bar jistgħu jkunu rikursivi u jista 'sejħa nnifisha, 103 00:08:49,840 --> 00:08:54,150 u sabiex tieni sejħa għall-bar huwa se tikseb frejm tagħha munzell stess. 104 00:08:54,150 --> 00:08:58,880 U għalhekk dak li tmur fil dawn il-frejms munzell huma il-varjabbli kollha lokali 105 00:08:58,880 --> 00:09:03,450 u kollha ta 'l-argumenti funzjoni li - 106 00:09:03,450 --> 00:09:08,730 Kwalunkwe affarijiet li huma lokalment scoped għal din il-funzjoni tmur fil dawn il-frejms munzell. 107 00:09:08,730 --> 00:09:21,520 Allura dan ifisser meta għidt xi ħaġa bħal bar hija funzjoni, 108 00:09:21,520 --> 00:09:29,270 Jien biss ser tiddikjara integer u mbagħad jirritornaw pointer għal dak numru sħiħ. 109 00:09:29,270 --> 00:09:33,790 Għalhekk, fejn ma y jgħixu? 110 00:09:33,790 --> 00:09:36,900 [Student] y jgħix fil-bar. >> [Bowden] Yeah. 111 00:09:36,900 --> 00:09:45,010 X'imkien f'din kwadru ftit tal-memorja huwa kwadru littler li għandha y fiha. 112 00:09:45,010 --> 00:09:53,370 Meta I lura & y, jien jirritornaw pointer għal dan il-blokk ftit tal-memorja. 113 00:09:53,370 --> 00:09:58,400 Iżda mbagħad meta jerġa 'lura funzjoni, il-qafas munzell tagħha gets popped off-munzell. 114 00:10:01,050 --> 00:10:03,530 U hu għalhekk li huwa msejjaħ munzell. 115 00:10:03,530 --> 00:10:06,570 Huwa bħall-istruttura tad-data munzell, jekk taf dak li hu. 116 00:10:06,570 --> 00:10:11,580 Jew anki qisha munzell ta 'dixxijiet huwa dejjem l-eżempju, 117 00:10:11,580 --> 00:10:16,060 ewlieni huwa se jmorru fuq il-qiegħ, allura l-funzjoni ewwel inti sejħa se jmorru fuq quċċata ta 'dan, 118 00:10:16,060 --> 00:10:20,400 u inti ma tistax terġa 'lura għal main sakemm inti tirritorna minn kull funzjonijiet li jkunu ġew imsejħa 119 00:10:20,400 --> 00:10:22,340 li jkunu tqiegħdu fuq quċċata ta 'dan. 120 00:10:22,340 --> 00:10:28,650 >> [Student] Mela jekk inti ma tagħmel lura l-y &, dak il-valur huwa suġġett għal bidla mingħajr avviż. 121 00:10:28,650 --> 00:10:31,290 Iva, it's - >> [student] Jista 'jkun jinkiteb fuqhom. >> Yeah. 122 00:10:31,290 --> 00:10:34,660 Huwa kompletament - Jekk inti tipprova u - 123 00:10:34,660 --> 00:10:38,040 Dan ikun ukoll ta 'bar * int, għaliex dan huwa jirritorna pointer, 124 00:10:38,040 --> 00:10:41,310 hekk tip ritorn tiegħu huwa * int. 125 00:10:41,310 --> 00:10:46,500 Jekk inti tipprova tuża l-valur tar-ritorn ta 'din il-funzjoni, huwa imġieba mhux definiti 126 00:10:46,500 --> 00:10:51,770 minħabba li pointer jindika memorja ħażina. >> [Student] Okay. 127 00:10:51,770 --> 00:11:01,250 Allura dak li jekk, per eżempju, inti ddikjarat int * y = malloc (sizeof (int))? 128 00:11:01,250 --> 00:11:03,740 Dak aħjar. Iva. 129 00:11:03,740 --> 00:11:07,730 [Student] Aħna tkellimna dwar kif meta aħna drag affarijiet li riċiklu bin tagħna 130 00:11:07,730 --> 00:11:11,750 dawn mhux qed attwalment mħassra; aħna biss jitilfu pointers tagħhom. 131 00:11:11,750 --> 00:11:15,550 Allura f'dan il-każ nistgħu attwalment tħassar il-valur jew hija għadha hemm fil-memorja? 132 00:11:15,550 --> 00:11:19,130 Għall-parti l-kbira, li għaddej biex jibqa 'hemm. 133 00:11:19,130 --> 00:11:24,220 Imma ejja ngħidu aħna jiġri li sejħa xi funzjoni oħra, baz. 134 00:11:24,220 --> 00:11:28,990 Baz hija se tikseb frejm tagħha munzell stess hawn fuq. 135 00:11:28,990 --> 00:11:31,470 Huwa ser jiġi kitba fuq kollha ta 'dan il-għalf, 136 00:11:31,470 --> 00:11:34,180 u mbagħad jekk inti aktar tard tipprova u jużaw il-werrej li inti ltqajna qabel, 137 00:11:34,180 --> 00:11:35,570 mhuwiex ser tkun l-istess valur. 138 00:11:35,570 --> 00:11:38,150 Huwa ser inbidlu biss għaliex inti imsejjaħ il-baz funzjoni. 139 00:11:38,150 --> 00:11:43,080 [Student] Imma ma aħna ma, kieku aħna xorta jiksbu 3? 140 00:11:43,080 --> 00:11:44,990 [Bowden] Fil-probabbiltà kollha, inti. 141 00:11:44,990 --> 00:11:49,670 Imma inti ma tistax tibbaża ruħha fuq dan. C biss jgħid imġieba mhux definiti. 142 00:11:49,670 --> 00:11:51,920 >> [Student] Oh, ma. Okay. 143 00:11:51,920 --> 00:11:58,190 Allura meta inti tixtieq li jirritornaw pointer, din hija fejn malloc tidħol fl-użu. 144 00:12:00,930 --> 00:12:15,960 Jien bil-miktub attwalment biss jirritorna malloc (3 * sizeof (int)). 145 00:12:17,360 --> 00:12:24,050 Aħna ser jmorru fuq malloc aktar fit-tieni, iżda l-idea ta 'malloc hija kollha ta' varjabbli lokali tiegħek 146 00:12:24,050 --> 00:12:26,760 dejjem tmur fuq il-munzell. 147 00:12:26,760 --> 00:12:31,570 Kwalunkwe ħaġa li l-malloced tmur fuq il-borġ, u se dejjem u dejjem tkun fuq il-munzell 148 00:12:31,570 --> 00:12:34,490 sakemm inti espliċitament ħielsa minnha. 149 00:12:34,490 --> 00:12:42,130 Allura dan ifisser li meta inti malloc xi ħaġa, li għaddej biex jgħix wara l-prospetti funzjoni. 150 00:12:42,130 --> 00:12:46,800 [Student] Se jkampawx wara l-programm tieqaf taħdem? >> No 151 00:12:46,800 --> 00:12:53,180 Okay, hekk li għaddej biex tkun hemm sakemm il-programm huwa it-triq kollha magħmula running. >> Iva. 152 00:12:53,180 --> 00:12:57,510 Aħna tista 'tmur fuq dettalji ta' dak li jiġri meta l-programm tieqaf taħdem. 153 00:12:57,510 --> 00:13:02,150 Jista 'jkollok bżonn biex ifakkru lili, iżda li hija ħaġa separata għal kollox. 154 00:13:02,150 --> 00:13:04,190 [Student] Mela malloc joħloq pointer? >> Yeah. 155 00:13:04,190 --> 00:13:13,030 Malloc - >> [student] Naħseb malloc tinnomina blokk ta 'memorja li pointer jistgħu jużaw. 156 00:13:15,400 --> 00:13:19,610 [Bowden] Irrid li dijagramma mill-ġdid. >> [Student] Mela din il-funzjoni xogħlijiet, għalkemm? 157 00:13:19,610 --> 00:13:26,430 [Student] Yeah, malloc jindika blokk ta 'memorja li tista' tuża, 158 00:13:26,430 --> 00:13:30,470 u mbagħad jirritorna l-indirizz ta 'l-ewwel blokk ta' dak memorja. 159 00:13:30,470 --> 00:13:36,750 >> [Bowden] Yeah. Allura meta inti malloc, int ħtif xi blokk ta 'memorja 160 00:13:36,750 --> 00:13:38,260 dan huwa attwalment fil-borġ. 161 00:13:38,260 --> 00:13:43,040 Jekk il-borġ huwa żgħir wisq, allura l-borġ huwa biss se jikbru, u li tikber f'din id-direzzjoni. 162 00:13:43,040 --> 00:13:44,650 Mela ejja ngħidu l-borġ huwa żgħir wisq. 163 00:13:44,650 --> 00:13:49,960 Imbagħad huwa dwar li jikbru ftit u r-ritorn pointer għal dan il-blokk li biss kiber. 164 00:13:49,960 --> 00:13:55,130 Meta inti Jittieħed ħielsa, int tagħmel aktar spazju fil-borġ, 165 00:13:55,130 --> 00:14:00,030 hekk allura aktar tard sejħa biex malloc jistgħux jerġgħu li l-memorja li inti qabel kienu meħlusa. 166 00:14:00,030 --> 00:14:09,950 Il-ħaġa importanti dwar malloc u ħieles huwa li jagħtik kontroll sħiħ 167 00:14:09,950 --> 00:14:12,700 matul il-ħajja ta 'dawn il-blokok tal-memorja. 168 00:14:12,700 --> 00:14:15,420 Varjabbli globali huma dejjem ħajjin. 169 00:14:15,420 --> 00:14:18,500 Varjabbli lokali huma ħajjin fl-ambitu tagħhom. 170 00:14:18,500 --> 00:14:22,140 Hekk kif inti tmur passat Brace kaboċċi, il-varjabbli lokali huma mejta. 171 00:14:22,140 --> 00:14:28,890 Memorja Malloced huwa ħaj meta inti tixtieq li jkunu ħajjin 172 00:14:28,890 --> 00:14:33,480 u mbagħad huwa rilaxxat meta inti tgħid li din tiġi rilaxxata. 173 00:14:33,480 --> 00:14:38,420 Dawk huma attwalment l-uniċi 3 tipi ta 'memorja, verament. 174 00:14:38,420 --> 00:14:41,840 Hemm awtomatiku memorja ġestjoni, li huwa l-munzell. 175 00:14:41,840 --> 00:14:43,840 Things jiġri għalik awtomatikament. 176 00:14:43,840 --> 00:14:46,910 Meta inti tgħidli int x, memorja huwa allokat għall-x int. 177 00:14:46,910 --> 00:14:51,630 Meta x tmur barra mill-iskop, il-memorja huwa reklamati għall x. 178 00:14:51,630 --> 00:14:54,790 Imbagħad hemm dinamiku memorja ġestjoni, li huwa huwa malloc dak, 179 00:14:54,790 --> 00:14:56,740 li huwa meta inti għandek kontroll. 180 00:14:56,740 --> 00:15:01,290 Inti dinamiku jiddeċiedu meta memorja għandhom jew m'għandhomx jiġu allokati. 181 00:15:01,290 --> 00:15:05,050 U allura hemm statiku, li sempliċiment ifisser li jgħix għal dejjem, 182 00:15:05,050 --> 00:15:06,610 li huwa dak varjabbli globali huma. 183 00:15:06,610 --> 00:15:10,240 Huma qed biss dejjem fil-memorja. 184 00:15:10,960 --> 00:15:12,760 >> Mistoqsijiet? 185 00:15:14,490 --> 00:15:17,230 [Student] Tista tiddefinixxi blokk biss bl-użu ċineg kaboċċi 186 00:15:17,230 --> 00:15:21,220 imma li ma jkollhiex li jkollhom? jekk id-dikjarazzjoni jew dikjarazzjoni waqt jew xi ħaġa bħal dik 187 00:15:21,220 --> 00:15:29,130 Inti tista 'tiddefinixxi blokk kif fil-funzjoni, iżda li għandha braces kaboċċi wisq. 188 00:15:29,130 --> 00:15:32,100 [Student] Allura inti tista 'mhux biss ikollu bħal par każwali ta' ċineg kaboċċi fil-kodiċi tiegħek 189 00:15:32,100 --> 00:15:35,680 li għandhom varjazzjonijiet lokali? >> Iva, inti tista '. 190 00:15:35,680 --> 00:15:45,900 Ġewwa tal-bar int jista 'jkollna {int y = 3;}. 191 00:15:45,900 --> 00:15:48,440 Li suppost tkun dritt hawn. 192 00:15:48,440 --> 00:15:52,450 Iżda li kompletament jiddefinixxi l-ambitu ta 'int y. 193 00:15:52,450 --> 00:15:57,320 Wara li Brace kaboċċi 2, y ma jistgħux jintużaw aktar. 194 00:15:57,910 --> 00:16:00,630 Inti kważi qatt ma tagħmel dan, għalkemm. 195 00:16:02,940 --> 00:16:07,370 Getting lura għal dak li jiġri meta programm jintemm, 196 00:16:07,370 --> 00:16:18,760 hemm tip ta 'gidba kunċett żbaljat / nofs li nagħtu sabiex biss tagħmel affarijiet eħfef. 197 00:16:18,760 --> 00:16:24,410 Aħna jgħidlek li meta inti jallokaw memorja 198 00:16:24,410 --> 00:16:29,860 int talloka ftit blokki ta 'RAM għal dak varjabbli. 199 00:16:29,860 --> 00:16:34,190 Imma int ma verament jolqot direttament RAM qatt fil-programmi tiegħek. 200 00:16:34,190 --> 00:16:37,490 Jekk taħseb minnha, kif I ġibdet - 201 00:16:37,490 --> 00:16:44,330 U fil-fatt, jekk inti tmur permezz fil GDB int ser tara l-istess ħaġa. 202 00:16:51,120 --> 00:16:57,590 Indipendentement minn kif ħafna drabi inti tmexxi programm tiegħek jew dak il-programm qed taħdem, 203 00:16:57,590 --> 00:16:59,950 il-munzell hu dejjem se tibda - 204 00:16:59,950 --> 00:17:06,510 int dejjem se tara varjabbli madwar xi ħaġa oxbffff indirizz. 205 00:17:06,510 --> 00:17:09,470 Huwa ġeneralment x'imkien f'dak ir-reġjun. 206 00:17:09,470 --> 00:17:18,760 Imma kif tista '2 programmi possibbilment ikollu indikazzjonijiet li l-memorja istess? 207 00:17:20,640 --> 00:17:27,650 [Student] Hemm xi nomina arbitrarja ta 'fejn oxbfff suppost tkun fuq il-RAM 208 00:17:27,650 --> 00:17:31,320 li jista 'attwalment jiġi f'postijiet differenti li jiddependu fuq meta l-funzjoni kienet imsejħa. 209 00:17:31,320 --> 00:17:35,920 Yeah. It-terminu huwa memorja virtwali. 210 00:17:35,920 --> 00:17:42,250 L-idea hija li kull proċess wieħed, kull programm uniku li tkun qed taħdem fuq il-kompjuter tiegħek 211 00:17:42,250 --> 00:17:49,450 għandha tagħha stess - ejja nassumu 32 bit - ispazju indirizz kompletament indipendenti. 212 00:17:49,450 --> 00:17:51,590 Dan huwa l-ispazju indirizz. 213 00:17:51,590 --> 00:17:56,220 Hija stess kompletament indipendenti tagħha 4 gigabytes għall-użu. 214 00:17:56,220 --> 00:18:02,220 >> Mela jekk inti tmexxi 2 programmi simultanjament, dan il-programm jara 4 gigabytes għalih innifsu, 215 00:18:02,220 --> 00:18:04,870 dan il-programm jara 4 gigabytes għalih innifsu, 216 00:18:04,870 --> 00:18:07,720 u huwa impossibbli għal dan il-programm biex dereference pointer 217 00:18:07,720 --> 00:18:10,920 u tispiċċa bil-memorja minn dan il-programm. 218 00:18:10,920 --> 00:18:18,200 U dak memorja virtwali huwa huwa immappjar minn spazju indirizz proċessi 219 00:18:18,200 --> 00:18:20,470 għall-affarijiet attwali fuq RAM. 220 00:18:20,470 --> 00:18:22,940 Allura huwa sa sistema operattiva tiegħek li tkun taf li, 221 00:18:22,940 --> 00:18:28,080 ħej, meta dan Guy dereferences pointer oxbfff, li verament ifisser 222 00:18:28,080 --> 00:18:31,040 li jrid RAM byte 1000, 223 00:18:31,040 --> 00:18:38,150 billi jekk dan oxbfff dereferences programm, hu verament jixtieq RAM byte 10000. 224 00:18:38,150 --> 00:18:41,590 Huma jistgħu jkunu arbitrarjament bogħod. 225 00:18:41,590 --> 00:18:48,730 Dan huwa minnu anki ta 'affarijiet fi spazju indirizz wieħed proċessi. 226 00:18:48,730 --> 00:18:54,770 Allura bħal jidhrilha kollha gigabytes 4 għalih innifsu, imma ejja ngħidu - 227 00:18:54,770 --> 00:18:57,290 [Student] Il f'kull proċess wieħed - 228 00:18:57,290 --> 00:19:01,350 Ejja ngħidu ikollok kompjuter bil biss 4 gigabytes ta 'RAM. 229 00:19:01,350 --> 00:19:06,430 Ma kull proċess wieħed jara l-sħiħ 4 gigabytes? >> Iva. 230 00:19:06,430 --> 00:19:13,060 Iżda l-gigabytes 4 li jqis hija jimteddu. 231 00:19:13,060 --> 00:19:20,460 Huwa biss jidhirlu li għandu dan kollu memorja minħabba li ma jafux xi proċess ieħor jeżisti. 232 00:19:20,460 --> 00:19:28,140 Hija se jużaw biss memorja kemm fil-fatt għandha bżonn. 233 00:19:28,140 --> 00:19:32,340 Is-sistema operattiva mhux se tagħti RAM għal dan il-proċess 234 00:19:32,340 --> 00:19:35,750 jekk mhuwiex tuża kwalunkwe memorja f'dan ir-reġjun kollu. 235 00:19:35,750 --> 00:19:39,300 Huwa mhux ser tagħtiha memorja għal dak ir-reġjun. 236 00:19:39,300 --> 00:19:54,780 Iżda l-idea hija li - jien jippruvaw biex jaħsbu - I cannot think ta 'analoġija. 237 00:19:54,780 --> 00:19:56,780 Analoġiji huma diffiċli. 238 00:19:57,740 --> 00:20:02,700 Waħda mill-kwistjonijiet ta 'memorja virtwali jew waħda mill-affarijiet huwa soluzzjoni 239 00:20:02,700 --> 00:20:06,810 huwa li l-proċessi għandhom ikunu kompletament konxji ta 'xulxin. 240 00:20:06,810 --> 00:20:12,140 U għalhekk inti tista 'tikteb xi programm li biss dereferences kwalunkwe pointer, 241 00:20:12,140 --> 00:20:19,340 simili biss jiktbu program li tgħid * (ox1234), 242 00:20:19,340 --> 00:20:22,890 u li l-dereferencing memorja indirizz 1234. 243 00:20:22,890 --> 00:20:28,870 >> Iżda huwa f'idejn l-sistema operattiva li mbagħad tittraduċi dak 1234 mezz. 244 00:20:28,870 --> 00:20:33,960 Mela jekk 1234 jiġri li jkun l-indirizz tal-memorja valida għal dan il-proċess, 245 00:20:33,960 --> 00:20:38,800 bhalu fuq il-munzell jew xi ħaġa, allura dan se jirritorna l-valur ta 'dak l-indirizz tal-memorja 246 00:20:38,800 --> 00:20:41,960 safejn il-proċess jaf. 247 00:20:41,960 --> 00:20:47,520 Imma jekk 1234 mhuwiex indirizz validu, bħal ma jiġri l-art 248 00:20:47,520 --> 00:20:52,910 f'xi biċċa ftit tal-memorja hawnhekk li hija lil hinn mill-munzell u lil hinn mill-borġ 249 00:20:52,910 --> 00:20:57,200 u int ma verament użati li, allura li meta ikollok affarijiet simili segfaults 250 00:20:57,200 --> 00:21:00,260 għax int jmissu memorja li inti m'għandekx tkun tmiss. 251 00:21:07,180 --> 00:21:09,340 Dan huwa veru wkoll - 252 00:21:09,340 --> 00:21:15,440 Sistema 32-bit, 32 bit tfisser ikollok 32 bits biex jiddefinixxu l-indirizz tal-memorja. 253 00:21:15,440 --> 00:21:22,970 Huwa għalhekk li pointers huma 8 bytes għaliex 32 bits huma 8 bytes - jew 4 bytes. 254 00:21:22,970 --> 00:21:25,250 Pointers huma 4 bytes. 255 00:21:25,250 --> 00:21:33,680 Allura meta tara pointer bħal oxbfffff, jiġifieri - 256 00:21:33,680 --> 00:21:40,080 Fi ħdan kull programm partikolari inti tista 'sempliċement tibni xi pointer arbitrarja, 257 00:21:40,080 --> 00:21:46,330 kullimkien minn ox0 għall ox 8 f's - ffffffff. 258 00:21:46,330 --> 00:21:49,180 [Student] Ridt ma inti tgħid li qed 4 bytes? >> Yeah. 259 00:21:49,180 --> 00:21:52,730 [Student] Mbagħad kull byte se jkollu - >> [Bowden] hexadeċimali. 260 00:21:52,730 --> 00:21:59,360 Hexadecimal - 5, 6, 7, 8. Allura pointers int ser dejjem tara f'hexadecimal. 261 00:21:59,360 --> 00:22:01,710 Huwa biss kif aħna jikklassifikaw pointers. 262 00:22:01,710 --> 00:22:05,240 Kull ċifri 2 ta 'hexadeċimali huwa 1 byte. 263 00:22:05,240 --> 00:22:09,600 Allura hemm għaddej li jkun 8 numri hexadecimal għal 4 bytes. 264 00:22:09,600 --> 00:22:14,190 Allura kull pointer waħda fuq sistema 32-bit se tkun 4 bytes, 265 00:22:14,190 --> 00:22:18,550 li jfisser li fil-proċess tiegħek inti tista 'tibni xi arbitrarji 4 bytes 266 00:22:18,550 --> 00:22:20,550 u jagħmlu pointer barra minnu, 267 00:22:20,550 --> 00:22:32,730 li jfisser li safejn huwa konxju, jista 'jindirizza 2 kollu lill-bytes 32 tal-memorja. 268 00:22:32,730 --> 00:22:34,760 Anki jekk ma verament ikollhom aċċess għal dan, 269 00:22:34,760 --> 00:22:40,190 anki jekk il-kompjuter tiegħek biss għandha 512 megabytes, jidhirlu li jkun li l-memorja ħafna. 270 00:22:40,190 --> 00:22:44,930 U s-sistema operattiva tkun intelliġenti biżżejjed li din tikkonċerna biss talloka dak li attwalment bżonn. 271 00:22:44,930 --> 00:22:49,630 Ma jmurx biss, oh, proċess ġdid: 4 gigs. 272 00:22:49,630 --> 00:22:51,930 >> Yeah. >> [Student] X'jagħmel il-ox jfisser? Għaliex tikteb dan? 273 00:22:51,930 --> 00:22:54,980 Huwa biss is-simbolu għall-hexadeċimali. 274 00:22:54,980 --> 00:22:59,590 Meta tara bidu għadd ma ox, l-affarijiet suċċessivi huma hexadeċimali. 275 00:23:01,930 --> 00:23:05,760 [Student] Inti ġew tispjega dwar dak li jiġri meta programm jintemm. >> Iva. 276 00:23:05,760 --> 00:23:09,480 X'jiġri meta programm jintemm hija s-sistema operattiva 277 00:23:09,480 --> 00:23:13,600 biss erases l mappings li hija għandha għal dawn l-indirizzi, u li hu. 278 00:23:13,600 --> 00:23:17,770 Is-sistema operattiva tista 'issa biss jagħtu li l-memorja għal programm ieħor għall-użu. 279 00:23:17,770 --> 00:23:19,490 [Student] Okay. 280 00:23:19,490 --> 00:23:24,800 Allura meta inti jalloka xi ħaġa fuq il-borġ jew il-varjabbli munzell jew globali jew xejn, 281 00:23:24,800 --> 00:23:27,010 dawn kollha biss jisparixxu malli l-programm jintemm 282 00:23:27,010 --> 00:23:32,120 għaliex is-sistema operattiva hija issa ħielsa li jagħtu li l-memorja għal kwalunkwe proċess ieħor. 283 00:23:32,120 --> 00:23:35,150 [Student] Anki jekk hemm probabbilment għadu valuri miktubin? >> Yeah. 284 00:23:35,150 --> 00:23:37,740 Il-valuri huma probabbli għadhom hemm. 285 00:23:37,740 --> 00:23:41,570 Huwa biss li għaddej biex tkun diffiċli biex tikseb lejn lilhom. 286 00:23:41,570 --> 00:23:45,230 Huwa ħafna aktar diffiċli li tinkiseb fil minnhom milli huwa li tikseb fil-fajl imħassar 287 00:23:45,230 --> 00:23:51,450 minħabba t-tip fajl imħassar ta tiltaqa hemm għal żmien twil u l-hard drive hija ħafna akbar. 288 00:23:51,450 --> 00:23:54,120 Allura huwa għaddej biex jissostitwixxu partijiet differenti tal-memorja 289 00:23:54,120 --> 00:23:58,640 qabel ma jiġri li jissostitwixxu l-blokki ta 'memorja li dan il-fajl jintuża biex tkun fuq. 290 00:23:58,640 --> 00:24:04,520 Iżda memorja prinċipali, RAM, inti ċiklu permezz ħafna aktar malajr, 291 00:24:04,520 --> 00:24:08,040 hekk li għaddej biex malajr ħafna jinkitbu fuqhom. 292 00:24:10,300 --> 00:24:13,340 Mistoqsijiet dwar din jew xi ħaġa oħra? 293 00:24:13,340 --> 00:24:16,130 [Student] Għandi mistoqsijiet dwar tema differenti. Okay. >> 294 00:24:16,130 --> 00:24:19,060 Ħadd ma jkollu mistoqsijiet dwar dan? 295 00:24:20,170 --> 00:24:23,120 >> Okay. Differenti suġġett. >> [Student] Okay. 296 00:24:23,120 --> 00:24:26,550 I kienet għaddejja xi wħud mill-testijiet prattika, 297 00:24:26,550 --> 00:24:30,480 u wieħed minnhom huwa kien jitkellem dwar il-sizeof 298 00:24:30,480 --> 00:24:35,630 u l-valur li jmur lura jew tipi varjabbli differenti. >> Iva. 299 00:24:35,630 --> 00:24:45,060 U qal li kemm int u fit-tnejn ritorn 4, allura jkunu kemm bytes 4 twil. 300 00:24:45,060 --> 00:24:48,070 Hemm xi differenza bejn int u fit-tul, jew hija l-istess ħaġa? 301 00:24:48,070 --> 00:24:50,380 Iva, hemm differenza. 302 00:24:50,380 --> 00:24:52,960 L-istandard C - 303 00:24:52,960 --> 00:24:54,950 Jien probabbilment se mess up. 304 00:24:54,950 --> 00:24:58,800 L-istandard C huwa biss bħal dak Ċ hija, id-dokumentazzjoni uffiċjali ta 'C. 305 00:24:58,800 --> 00:25:00,340 Dan huwa dak li jgħid. 306 00:25:00,340 --> 00:25:08,650 Allura l-istandard C biss jgħid li char se dejjem u dejjem tkun l-1 byte. 307 00:25:10,470 --> 00:25:19,040 Kollox wara li - fil-qosor huwa dejjem biss ddefinit bħala li tkun ikbar minn jew ugwali għal char. 308 00:25:19,040 --> 00:25:23,010 Dan jista 'jkun strettament ikbar minn, iżda mhux pożittiv. 309 00:25:23,010 --> 00:25:31,940 L int huwa biss definit bħala li tkun ikbar minn jew ugwali għal qasir. 310 00:25:31,940 --> 00:25:36,210 U twil huwa biss definit bħala li tkun ikbar minn jew ugwali għal int. 311 00:25:36,210 --> 00:25:41,600 U fit-tul huwa aktar minn jew ugwali għal twil. 312 00:25:41,600 --> 00:25:46,610 Allura l-unika ħaġa l-istandard C jiddefinixxi l-ordni relattiva ta 'kollox. 313 00:25:46,610 --> 00:25:54,880 L-ammont attwali tal-memorja li l-affarijiet jibdew huwa ġeneralment sa implimentazzjoni, 314 00:25:54,880 --> 00:25:57,640 iżda huwa pjuttost definita sew f'dan il-punt. >> [Student] Okay. 315 00:25:57,640 --> 00:26:02,490 Allura shorts huma kważi dejjem se jkunu 2 bytes. 316 00:26:04,920 --> 00:26:09,950 Ints huma kważi dejjem se jkunu 4 bytes. 317 00:26:12,070 --> 00:26:15,340 Twal twal huma kważi dejjem se jkunu 8 bytes. 318 00:26:17,990 --> 00:26:23,160 U twal, li jiddependi fuq jekk inti qed tuża 32-bit jew sistema 64-bit. 319 00:26:23,160 --> 00:26:27,450 Allura twil se jikkorrispondu għall-tip ta 'sistema. 320 00:26:27,450 --> 00:26:31,920 Jekk inti qed tuża sistema 32-bit bħall-Appliance, li għaddej biex tkun 4 bytes. 321 00:26:34,530 --> 00:26:42,570 Jekk inti qed tuża 64-bit simili ħafna ta 'kompjuters reċenti, li għaddej biex tkun 8 bytes. 322 00:26:42,570 --> 00:26:45,230 >> Ints huma kważi dejjem 4 bytes f'dan il-punt. 323 00:26:45,230 --> 00:26:47,140 Twal twal huma kważi dejjem 8 bytes. 324 00:26:47,140 --> 00:26:50,300 Fil-passat, ints użati biex ikunu biss 2 bytes. 325 00:26:50,300 --> 00:26:56,840 Iżda avviż li din kompletament tissodisfa kollha ta 'dawn ir-relazzjonijiet ta' aktar minn u ugwali għal. 326 00:26:56,840 --> 00:27:01,280 Sakemm huwa perfettament li għandhom jiġu permessi l-istess daqs bħala numru sħiħ, 327 00:27:01,280 --> 00:27:04,030 u huwa wkoll permess li jkun l-istess daqs bħal fit-tul. 328 00:27:04,030 --> 00:27:11,070 U huwa biss hekk jiġri li jkun li fil 99.999% ta 'sistemi, huwa se jkun ugwali għal 329 00:27:11,070 --> 00:27:15,800 la int jew twil twil. Huwa biss tiddependi fuq 32-bit jew 64-bit. >> [Student] Okay. 330 00:27:15,800 --> 00:27:24,600 Fil sufruni, kif huwa l-punt deċimali indikat f'termini ta 'bits? 331 00:27:24,600 --> 00:27:27,160 Bħal kif binarja? >> Yeah. 332 00:27:27,160 --> 00:27:30,570 Inti ma għandekx bżonn tkun taf li għal CS50. 333 00:27:30,570 --> 00:27:32,960 Inti ma jitgħallmu li fl-61. 334 00:27:32,960 --> 00:27:37,350 Inti ma jitgħallmu li verament fi kwalunkwe kors. 335 00:27:37,350 --> 00:27:42,740 Huwa biss rappreżentazzjoni. 336 00:27:42,740 --> 00:27:45,440 I tinsa l-assenjazzjonijiet bit eżatti. 337 00:27:45,440 --> 00:27:53,380 L-idea tal-punt f'wiċċ l-ilma huwa li inti jallokaw numru speċifiku ta 'bits sabiex jirrappreżenta - 338 00:27:53,380 --> 00:27:56,550 Bażikament, kollox huwa notazzjoni xjentifika. 339 00:27:56,550 --> 00:28:05,600 Allura inti talloka numru speċifiku ta 'bits biex jirrappreżentaw in-numru innifsu, bħal 1.2345. 340 00:28:05,600 --> 00:28:10,200 I qatt ma jista 'jirrappreżenta numru bi numri aktar minn 5. 341 00:28:12,200 --> 00:28:26,300 Imbagħad inti wkoll talloka numru speċifiku ta 'bits b'tali mod li t-tendenza li jkun simili 342 00:28:26,300 --> 00:28:32,810 inti tista 'biss tmur sa ċertu numru, bħal dak l-esponent akbar inti jista' jkollhom, 343 00:28:32,810 --> 00:28:36,190 u inti tista 'biss tmur isfel għal esponent ċerti, 344 00:28:36,190 --> 00:28:38,770 bħal dan huwa l-esponent iżgħar inti jista 'jkollhom. 345 00:28:38,770 --> 00:28:44,410 >> I ma tiftakarx l-bits mod eżatti huma assenjati għall kollha ta 'dawn il-valuri, 346 00:28:44,410 --> 00:28:47,940 iżda ċertu numru ta 'bits huma ddedikati għall 1.2345, 347 00:28:47,940 --> 00:28:50,930 ieħor ċertu numru ta 'bits huma ddedikati għall-esponent, 348 00:28:50,930 --> 00:28:55,670 u huwa biss possibbli li jirrappreżentaw esponent ta 'ċertu daqs. 349 00:28:55,670 --> 00:29:01,100 [Student] U doppja? Hija li bħal float twil żejda? >> Yeah. 350 00:29:01,100 --> 00:29:07,940 Hu l-istess ħaġa bħala float ħlief issa inti qed tuża 8 bytes minflok 4 bytes. 351 00:29:07,940 --> 00:29:11,960 Issa inti ser tkun tista 'tuża 9 numri jew 10 numri, 352 00:29:11,960 --> 00:29:16,630 u dan se jkun jista 'jitla' sa 300 minflok 100. >> [Student] Okay. 353 00:29:16,630 --> 00:29:21,550 U sufruni huma wkoll 4 bytes. >> Iva. 354 00:29:21,550 --> 00:29:27,520 Ukoll, għal darb'oħra, hija probabbilment jiddependi ġenerali fuq l-implimentazzjoni ġenerali, 355 00:29:27,520 --> 00:29:30,610 iżda sufruni huma 4 bytes, jirdoppja huma 8. 356 00:29:30,610 --> 00:29:33,440 Doubles huma msejħa doppju minħabba li huma doppju tad-daqs ta 'sufruni. 357 00:29:33,440 --> 00:29:38,380 [Student] Okay. U huma hemmhekk doppja jirdoppja? >> Ma jkunx hemm. 358 00:29:38,380 --> 00:29:43,660 Naħseb - >> [student] Bħall twal twal? >> Yeah. Jien ma naħsibx. Iva. 359 00:29:43,660 --> 00:29:45,950 [Student] Fuq it-test tas-sena l kien hemm mistoqsija dwar il-funzjoni ewlenija 360 00:29:45,950 --> 00:29:49,490 wara li jkun parti mill-programm tiegħek. 361 00:29:49,490 --> 00:29:52,310 It-tweġiba kienet li ma għandhom ikunu parti mill-programm tiegħek. 362 00:29:52,310 --> 00:29:55,100 F'liema sitwazzjoni? Dan huwa dak li rajt. 363 00:29:55,100 --> 00:29:59,090 [Bowden] Jidher - >> [student] Liema sitwazzjoni? 364 00:29:59,090 --> 00:30:02,880 Għandek il-problema? >> [Student] Yeah, I jistgħu definittivament pull it up. 365 00:30:02,880 --> 00:30:07,910 Ma għandhom ikunu, teknikament, imma bażikament li għaddej biex tkun. 366 00:30:07,910 --> 00:30:10,030 [Student] Rajt wieħed fuq l-sena differenti. 367 00:30:10,030 --> 00:30:16,220 Kien bħal Veru jew Falz: A validu - >> Oh, fajl c.? 368 00:30:16,220 --> 00:30:18,790 . [Student] Kull file għandu jkollu ċ - [kemm jitkellmu f'daqqa - mhux intelliġibbli] 369 00:30:18,790 --> 00:30:21,120 Okay. Allura dak separat. 370 00:30:21,120 --> 00:30:26,800 >> A fajl c. Biss jeħtieġ li jkollhom funzjonijiet. 371 00:30:26,800 --> 00:30:32,400 Tista 'jikkompilaw fajl fis-kodiċi magna, binarju, tkun xi tkun, 372 00:30:32,400 --> 00:30:36,620 mingħajr ma jkun eżegwibbli s'issa. 373 00:30:36,620 --> 00:30:39,420 A eżekutibbli validu għandu jkollu funzjoni prinċipali. 374 00:30:39,420 --> 00:30:45,460 Tista 'tikteb 100 funzjonijiet 1 fajl iżda l-ebda ewlenin 375 00:30:45,460 --> 00:30:48,800 u mbagħad jiġbru l isfel għall binarju, 376 00:30:48,800 --> 00:30:54,460 allura inti tikteb fajl ieħor li għandha biss prinċipali iżda hija tappella mazz ta 'dawn il-funzjonijiet 377 00:30:54,460 --> 00:30:56,720 f'dan il-fajl binarju hawn fuq. 378 00:30:56,720 --> 00:31:01,240 U hekk meta int tagħmel il-eżekutibbli, dan huwa dak l-linker ma 379 00:31:01,240 --> 00:31:05,960 huwa li tgħaqqad dawn il-fajls binarji 2 fi eżekutibbli. 380 00:31:05,960 --> 00:31:11,400 Allura fajl c. Ma jeħtieġx li jkollhom funzjoni ewlenija fil-livelli kollha. 381 00:31:11,400 --> 00:31:19,220 U fuq bażijiet kodiċi kbar tkun taf tara eluf ta 'fajls c. U 1 fajl prinċipali. 382 00:31:23,960 --> 00:31:26,110 Mistoqsijiet Aktar? 383 00:31:29,310 --> 00:31:31,940 [Student] Ma kien hemm mistoqsija oħra. 384 00:31:31,940 --> 00:31:36,710 Huwa qal tagħmel huwa kompilatur. Veru jew Falz? 385 00:31:36,710 --> 00:31:42,030 U r-risposta kienet falza, u I mifhum għaliex mhuwiex simili clang. 386 00:31:42,030 --> 00:31:44,770 Imma dak li nsejħu jagħmluha jekk huwa ma? 387 00:31:44,770 --> 00:31:49,990 Għamla huwa bażikament biss - I jista 'jara eżattament dak li jitlob dan. 388 00:31:49,990 --> 00:31:52,410 Iżda hija biss tmur jikkmanda. 389 00:31:53,650 --> 00:31:55,650 Għamla. 390 00:31:58,240 --> 00:32:00,870 I tista 'pull dan up. Yeah. 391 00:32:10,110 --> 00:32:13,180 Oh, yeah. Kun wkoll ma dan. 392 00:32:13,180 --> 00:32:17,170 Dan jgħid il-għan tal-utilità għamla huwa li jiddetermina awtomatikament 393 00:32:17,170 --> 00:32:19,610 liema biċċiet ta 'programm kbir jeħtieġ li jiġu recompiled 394 00:32:19,610 --> 00:32:22,350 u joħroġ l-kmandi li recompile lilhom. 395 00:32:22,350 --> 00:32:27,690 Inti tista 'tagħmel tagħmel fajls li huma assolutament enormi. 396 00:32:27,690 --> 00:32:33,210 Agħmel tħares lejn il-ħin timbri ta 'fajls u, bħal għidna qabel, 397 00:32:33,210 --> 00:32:36,930 inti tista 'tiġbor fajls individwali isfel, u mhuwiex sakemm ikollok l-linker 398 00:32:36,930 --> 00:32:39,270 li dawn qed jitqiegħdu flimkien fi eżekutibbli. 399 00:32:39,270 --> 00:32:43,810 Mela jekk għandek 10-fajls differenti u inti tagħmel bidla għal 1 minnhom, 400 00:32:43,810 --> 00:32:47,870 allura dak għamla se tagħmel huwa biss recompile li 1-fajl 401 00:32:47,870 --> 00:32:50,640 u mbagħad relink kollox flimkien. 402 00:32:50,640 --> 00:32:53,020 Iżda huwa ħafna dumber minn dak. 403 00:32:53,020 --> 00:32:55,690 Huwa sa inti biex kompletament tiddefinixxi dak li huwa dak li għandha tkun qiegħda tagħmel. 404 00:32:55,690 --> 00:32:59,560 Hija b'mankanza għandu l-abbiltà li jirrikonoxxu dan il-għalf timbru iż-żmien, 405 00:32:59,560 --> 00:33:03,220 imma int tista 'tikteb fajl għamla li tagħmel xejn. 406 00:33:03,220 --> 00:33:09,150 Tista 'tikteb jagħmel fajl hekk li meta inti tip tagħmel biss l-cd għall-ieħor tad-direttorju. 407 00:33:09,150 --> 00:33:15,560 I kien jkollna frustrati għaliex kollox tindi I ġewwa tal Appliance tiegħi 408 00:33:15,560 --> 00:33:21,740 u mbagħad I tara l-PDF mill-Mac. 409 00:33:21,740 --> 00:33:30,720 >> So I mur Finder u nista do Go, Connect biex Server, 410 00:33:30,720 --> 00:33:36,950 u s-server I jgħaqqdu l huwa Appliance tiegħi, u mbagħad I tiftaħ il-PDF 411 00:33:36,950 --> 00:33:40,190 li gets miġbura minn latex. 412 00:33:40,190 --> 00:33:49,320 Imma I kien jkollna frustrati għaliex kull wieħed ħin I meħtieġa biex tiffriska l-PDF, 413 00:33:49,320 --> 00:33:53,900 I kellha kopja għal direttorju speċifiku li jista 'jkollhom aċċess 414 00:33:53,900 --> 00:33:57,710 u kien jkollna annoying. 415 00:33:57,710 --> 00:34:02,650 Allura minflok I kiteb fajl għamla, li inti għandek biex jiddefinixxu kif tagħmel l-affarijiet. 416 00:34:02,650 --> 00:34:06,130 Kif inti tagħmel f'dan huwa PDF latex. 417 00:34:06,130 --> 00:34:10,090 Eżatt bħal kull fajl għamla oħra - jew I raden inti ma bbenefikawx l-fajls għamla, 418 00:34:10,090 --> 00:34:13,510 iżda aħna għandna fil-Appliance fajl għamla globali li biss jgħid, 419 00:34:13,510 --> 00:34:16,679 jekk inti jinġabar il-fajl C, l-użu clang. 420 00:34:16,679 --> 00:34:20,960 U hekk hawn fil-fajl għamla tiegħi li nagħmel jien ngħid, 421 00:34:20,960 --> 00:34:25,020 dan il-fajl inti qed tmur jridu jikkompilaw ma PDF latex. 422 00:34:25,020 --> 00:34:27,889 U dan huwa latex PDF li qed jagħmel l-kompilazzjoni. 423 00:34:27,889 --> 00:34:31,880 Għamla mhix kumpilazzjoni. Huwa biss running dawn il-kmandijiet fis-sekwenza I speċifikat. 424 00:34:31,880 --> 00:34:36,110 Għalhekk runs latex PDF, huwa kopji lill-direttorju nixtieq li din tkun ikkupjata lill- 425 00:34:36,110 --> 00:34:38,270 huwa cd għall-direttorju u ma affarijiet oħra, 426 00:34:38,270 --> 00:34:42,380 iżda kollox ma huwa jirrikonoxxi meta bidliet fajl, 427 00:34:42,380 --> 00:34:45,489 u jekk tbiddel, allura se jimxu l-kmandi li huwa suppost li jimxu 428 00:34:45,489 --> 00:34:48,760 meta l-bidliet fajl. >> [Student] Okay. 429 00:34:50,510 --> 00:34:54,420 I do not know meta l-fajls għamla globali huma għalija biex jiċċekkjaw it out. 430 00:34:57,210 --> 00:35:04,290 Mistoqsijiet oħra? Xejn mill-passat kwizzijiet? Kwalunkwe affarijiet pointer? 431 00:35:06,200 --> 00:35:08,730 Hemm affarijiet sottili li jkollhom werrejja simili - 432 00:35:08,730 --> 00:35:10,220 Jien mhux ser ikunu jistgħu jsibu mistoqsija kwizz fuqha - 433 00:35:10,220 --> 00:35:16,250 iżda biss bħal dan it-tip ta 'ħaġa. 434 00:35:19,680 --> 00:35:24,060 Kun żgur li tifhem li meta ngħidilhom INT * x * y - 435 00:35:24,890 --> 00:35:28,130 Dan mhux eżattament xejn hawn, I raden. 436 00:35:28,130 --> 00:35:32,140 Iżda bħal * x * y, dawn huma 2-varjabbli li huma fuq il-munzell. 437 00:35:32,140 --> 00:35:37,220 Meta I say x = malloc (sizeof (int)), x għadu varjabbli fuq il-munzell, 438 00:35:37,220 --> 00:35:41,180 malloc xi blokk fuq fil-borġ, u qed ikollna punt x l-borġ. 439 00:35:41,180 --> 00:35:43,900 >> Allura xi ħaġa fuq il-punti munzell għall-borġ. 440 00:35:43,900 --> 00:35:48,100 Kull meta inti malloc xejn, int inevitabbilment maħżuna ġewwa ta 'pointer. 441 00:35:48,100 --> 00:35:55,940 Allura li pointer huwa fuq il-munzell, il-blokk malloced huwa fuq il-borġ. 442 00:35:55,940 --> 00:36:01,240 Ħafna nies jiksbu konfuż u jgħidu int * x = malloc; x huwa fuq il-borġ. 443 00:36:01,240 --> 00:36:04,100 No Liema x jindika huwa fuq il-borġ. 444 00:36:04,100 --> 00:36:08,540 x innifsu huwa fuq il-munzell, sakemm għal kwalunkwe raġuni inti x 'jkun fattur varjabbli globali, 445 00:36:08,540 --> 00:36:11,960 f'liema każ dan jiġri jkun f'reġjun ieħor tal-memorja. 446 00:36:13,450 --> 00:36:20,820 Allura iżżomm rekord, dawn dijagrammi kaxxa u l-vleġġa huma pjuttost komuni għall-kwizz. 447 00:36:20,820 --> 00:36:25,740 Jew jekk mhuwiex fuq kwizz 0, se tkun fuq kwizz 1. 448 00:36:27,570 --> 00:36:31,940 Inti għandek tkun taf kollha ta 'dawn, il-passi fil-kompilazzjoni 449 00:36:31,940 --> 00:36:35,740 peress li inti kellha twieġeb mistoqsijiet dwar dawk. Iva. 450 00:36:35,740 --> 00:36:38,940 [Student] Jista immorru fuq dawk il-passi - >> Sure. 451 00:36:48,340 --> 00:36:58,640 Qabel passi u kompilazzjoni għandna operazzjonijiet ta 'pretrattament, 452 00:36:58,640 --> 00:37:16,750 kompilazzjoni, assemblaġġ, u jgħaqqdu. 453 00:37:16,750 --> 00:37:21,480 Operazzjonijiet ta 'pretrattament. Xi jfisser li tagħmel? 454 00:37:29,720 --> 00:37:32,290 Huwa l-pass eħfef fil - ukoll, mhux simili - 455 00:37:32,290 --> 00:37:35,770 dan ma jfissirx li għandu jkun ovvju, iżda huwa l-pass eħfef. 456 00:37:35,770 --> 00:37:38,410 You guys tista timplimentaha infuskom. Yeah. 457 00:37:38,410 --> 00:37:43,410 [Student] Ħu dak li għandek fil tiegħek tinkludi bħal dan u kopji u allura wkoll jiddefinixxi. 458 00:37:43,410 --> 00:37:49,250 Huwa jistenna għal affarijiet bħall # Jinkludu u # jiddefinixxi, 459 00:37:49,250 --> 00:37:53,800 u dan biss kopji u pejst x'inhuma dawn fil-fatt tfisser. 460 00:37:53,800 --> 00:37:59,240 Allura meta inti tgħidli # Jinkludu cs50.h, il preprocessor qed ikkupjar u pasta cs50.h 461 00:37:59,240 --> 00:38:01,030 f'dak il-linja. 462 00:38:01,030 --> 00:38:06,640 Meta inti tgħidli # tiddefinixxi x li jkun 4, il-preprocessor tmur permezz tal-programm kollu 463 00:38:06,640 --> 00:38:10,400 u jissostitwixxi l-istanzi kollha ta 'x ma' 4. 464 00:38:10,400 --> 00:38:17,530 Allura l-preprocessor jieħu fajl C valida u outputs fajl C valida 465 00:38:17,530 --> 00:38:20,300 fejn l-affarijiet kienu kkupjati u pasted. 466 00:38:20,300 --> 00:38:24,230 Allura issa kumpilazzjoni. Xi jfisser li tagħmel? 467 00:38:25,940 --> 00:38:28,210 [Student] Huwa jmur minn C sa binarja. 468 00:38:28,210 --> 00:38:30,970 >> [Bowden] Ma tmur it-triq biex binarja. 469 00:38:30,970 --> 00:38:34,220 [Student] Li kodiċi magna allura? >> Mhuwiex kodiċi magna. 470 00:38:34,220 --> 00:38:35,700 [Student] Assemblea? . Assemblea >> 471 00:38:35,700 --> 00:38:38,890 Hija tmur għall-Assemblea qabel ma tmur it-triq kollha għall-kodiċi C, 472 00:38:38,890 --> 00:38:45,010 u l-lingwi l-aktar jagħmlu xi ħaġa bħal din. 473 00:38:47,740 --> 00:38:50,590 Pick kwalunkwe lingwa ta 'livell għoli, u jekk int ser josservawha, 474 00:38:50,590 --> 00:38:52,390 huwa probabbli li jikkompilaw fil-passi. 475 00:38:52,390 --> 00:38:58,140 L-ewwel li għaddej biex jikkompilaw Python sa C, allura huwa għaddej biex jikkompilaw C sa Assemblea, 476 00:38:58,140 --> 00:39:01,600 u mbagħad Assemblea hija se tikseb tradotti għall binarja. 477 00:39:01,600 --> 00:39:07,800 Allura kumpilazzjoni se iġġibu minn C sa Assemblea. 478 00:39:07,800 --> 00:39:12,130 Il-kelma kompilazzjoni normalment ifisser li jitla 'minn livell ogħla 479 00:39:12,130 --> 00:39:14,340 għal inqas lingwa ta 'programmar livell. 480 00:39:14,340 --> 00:39:19,190 Allura dan huwa l-pass biss kumpilazzjoni fejn inti tibda bil-lingwa ta 'livell għoli 481 00:39:19,190 --> 00:39:23,270 u jispiċċaw fil-lingwa ta 'livell baxx, u hu għalhekk li l-pass huwa msejjaħ kumpilazzjoni. 482 00:39:25,280 --> 00:39:33,370 [Student] Matul kompilazzjoni, ejja ngħidu li inti ghamilt # Jinkludu cs50.h. 483 00:39:33,370 --> 00:39:42,190 Se il-kompilatur recompile l cs50.h, bħall-funzjonijiet li huma fil hemm, 484 00:39:42,190 --> 00:39:45,280 u tittraduċi din fis-kodiċi Assemblea kif ukoll, 485 00:39:45,280 --> 00:39:50,830 jew ser kopja u paste xi ħaġa li kien pre-Assemblea? 486 00:39:50,830 --> 00:39:56,910 cs50.h se pretty ħafna qatt jispiċċaw fl-Assemblea. 487 00:39:59,740 --> 00:40:03,680 Għalf bħal prototipi funzjoni u l-affarijiet huma biss ghalik li tkun attenta. 488 00:40:03,680 --> 00:40:09,270 Din tiggarantixxi li l-kumpilatur tista 'tivverifika affarijiet simili int ssejjaħ funzjonijiet 489 00:40:09,270 --> 00:40:12,910 mat-tipi ritorn dritt u l-argumenti dritt u l-għalf. 490 00:40:12,910 --> 00:40:18,350 >> Allura cs50.h se preprocessed fil-fajl, u mbagħad meta huwa jikkompila 491 00:40:18,350 --> 00:40:22,310 huwa bażikament tintrema wara li jagħmel ċert li kollox qed jissejjaħ korrett. 492 00:40:22,310 --> 00:40:29,410 Iżda l-funzjonijiet definiti fil-librerija CS50, li huma separati minn cs50.h, 493 00:40:29,410 --> 00:40:33,610 dawk mhux se jkunu separatament kkompilati. 494 00:40:33,610 --> 00:40:37,270 Li fil-fatt se jiġu stabbiliti fil-pass li jgħaqqdu, hekk aħna ser jiksbu għal dak fit-tieni. 495 00:40:37,270 --> 00:40:40,100 Iżda l-ewwel, dak li huwa assemblaġġ? 496 00:40:41,850 --> 00:40:44,500 [Student] Assemblea binarju? >> Yeah. 497 00:40:46,300 --> 00:40:48,190 Armar. 498 00:40:48,190 --> 00:40:54,710 Aħna ma sejħa hija kumpilazzjoni minħabba Assemblea hija pjuttost traduzzjoni pura ta binarja. 499 00:40:54,710 --> 00:41:00,230 Hemm loġika ftit li xejn fil jmorru minn Assemblea binarja. 500 00:41:00,230 --> 00:41:03,180 Huwa biss bħal tfittex up fit-tabella, oh, aħna għandna din l-istruzzjoni; 501 00:41:03,180 --> 00:41:06,290 li jikkorrispondi għal binarju 01110. 502 00:41:10,200 --> 00:41:15,230 U għalhekk l-fajls li ġeneralment assemblaġġ outputs huma. Fajls o. 503 00:41:15,230 --> 00:41:19,020 U. Fajls o aħna dak li kienu jgħidu qabel, 504 00:41:19,020 --> 00:41:21,570 kif fajl ma jeħtieġx li jkollhom funzjoni prinċipali. 505 00:41:21,570 --> 00:41:27,640 Kull fajl jista 'jkun kompilat isfel għal fajl o. Sakemm huwa fajl C valida. 506 00:41:27,640 --> 00:41:30,300 Dan jista 'jkun kompilat sa. O. 507 00:41:30,300 --> 00:41:43,030 Issa, l-irbit huwa dak li attwalment ġġib mazz ta '. Fajls o u ġġibhom għall eżekutibbli. 508 00:41:43,030 --> 00:41:51,110 U hekk dak li jgħaqqdu ma huwa inti tista 'taħseb l-librerija CS50 bħala fajl o.. 509 00:41:51,110 --> 00:41:56,980 Huwa fajl binarju diġà miġbura. 510 00:41:56,980 --> 00:42:03,530 U hekk meta inti tiġbor fajl tiegħek, hello.c tiegħek, li jitlob GetString, 511 00:42:03,530 --> 00:42:06,360 hello.c gets miġbura sa hello.o, 512 00:42:06,360 --> 00:42:08,910 hello.o issa hija fil binarja. 513 00:42:08,910 --> 00:42:12,830 Hija tuża GetString, u għalhekk jeħtieġ li tmur fuq għal cs50.o, 514 00:42:12,830 --> 00:42:16,390 u l-linker smooshes flimkien u l-kopji GetString fis dan il-fajl 515 00:42:16,390 --> 00:42:20,640 u toħroġ ma 'eżekutibbli li għandu l-funzjonijiet li teħtieġ. 516 00:42:20,640 --> 00:42:32,620 Allura cs50.o ma tkunx attwalment fajl O, iżda huwa qrib biżżejjed li ma hemm ebda differenza fundamentali. 517 00:42:32,620 --> 00:42:36,880 Allura jgħaqqdu biss ġġib mazz ta 'fajls flimkien 518 00:42:36,880 --> 00:42:41,390 li separatament fihom kollha tal-funzjonijiet li għandi bżonn biex jużaw 519 00:42:41,390 --> 00:42:46,120 u toħloq l-eżekutibbli li se tmexxi effettivament. 520 00:42:48,420 --> 00:42:50,780 >> U hekk dan huwa wkoll dak li aħna kienu jgħidu qabel 521 00:42:50,780 --> 00:42:55,970 fejn inti jista 'jkollhom 1000. fajls c, inti jikkompilawha kollha biex. fajls o, 522 00:42:55,970 --> 00:43:00,040 li probabbilment se jieħu xi ftit, imbagħad inti bidla 1. fajl c. 523 00:43:00,040 --> 00:43:05,480 Ikollok bżonn biss li recompile li 1. Fajl ċ u mbagħad kollox relink ħaġa oħra, 524 00:43:05,480 --> 00:43:07,690 rabta kollox lura flimkien. 525 00:43:09,580 --> 00:43:11,430 [Student] Meta aħna qed jgħaqqdu aħna tikteb lcs50? 526 00:43:11,430 --> 00:43:20,510 Yeah, hekk lcs50. Li sinjali bandiera għall-linker li inti għandek tkun jgħaqqdu f'dak librerija. 527 00:43:26,680 --> 00:43:28,910 Mistoqsijiet? 528 00:43:41,310 --> 00:43:46,860 Have we marret fuq binarju għajr li 5 sekondi fl-ewwel lecture? 529 00:43:50,130 --> 00:43:53,010 Jien ma naħsibx. 530 00:43:55,530 --> 00:43:58,820 Inti għandek tkun taf kollha ta 'l Os kbir li konna marret fuq, 531 00:43:58,820 --> 00:44:02,670 u inti għandek tkun kapaċi li, jekk aħna ħadt funzjoni, 532 00:44:02,670 --> 00:44:09,410 inti għandek tkun tista 'tgħid huwa kbir O, bejn wieħed u ieħor. Jew ukoll, big O huwa rough. 533 00:44:09,410 --> 00:44:15,300 Mela jekk inti tara nested għal-linji looping fuq l-istess numru ta 'affarijiet, 534 00:44:15,300 --> 00:44:22,260 bħall INT i, i > [student] n kwadru. >> Hemm tendenza li jkun n kwadru. 535 00:44:22,260 --> 00:44:25,280 Jekk għandek triple nested, li għandha tendenza li tkun n kubiku. 536 00:44:25,280 --> 00:44:29,330 Allura li tip ta 'ħaġa inti għandek tkun kapaċi li jiġi rrilevat immedjatament. 537 00:44:29,330 --> 00:44:33,890 Inti għandek bżonn tkun taf it-tip inserzjoni u sort bużżieqa u jingħaqdu tip u kollha ta 'dawn. 538 00:44:33,890 --> 00:44:41,420 Huwa aktar faċli li wieħed jifhem għaliex huma dawk n kwadrat u n log n u kollha ta 'dak 539 00:44:41,420 --> 00:44:47,810 għaliex naħseb li kien hemm fuq kwizz sena fejn aħna bażikament ħadt 540 00:44:47,810 --> 00:44:55,050 implimentazzjoni ta 'tip bużżieqa u qal, "X'inhi l-running time ta' din il-funzjoni?" 541 00:44:55,050 --> 00:45:01,020 Mela jekk inti tirrikonoxxi dan bħala tip bużżieqa, allura inti tista 'immedjatament tgħid n kwadru. 542 00:45:01,020 --> 00:45:05,470 Imma jekk inti biss tħares lejn din, inti lanqas biss jeħtieġ li tirrealizza tip bużżieqa huwa; 543 00:45:05,470 --> 00:45:08,990 inti tista 'biss ngħid dan qed tagħmel dan u dan. Dan huwa n kwadru. 544 00:45:12,350 --> 00:45:14,710 [Student] Hemm xi eżempji iebsa inti tista 'toħroġ bi, 545 00:45:14,710 --> 00:45:20,370 qisha idea simili tal jidhru? 546 00:45:20,370 --> 00:45:24,450 >> Ma naħsibx li aħna se jagħtuk xi eżempji iebsa. 547 00:45:24,450 --> 00:45:30,180 Il-ħaġa tip bubble hija dwar kif iebsa kif aħna tmur, 548 00:45:30,180 --> 00:45:36,280 u anki li, sakemm inti tifhem li int mtennija fuq l-array 549 00:45:36,280 --> 00:45:41,670 għal kull element fil-firxa, li se tkun xi ħaġa li n kwadru. 550 00:45:45,370 --> 00:45:49,940 Hemm mistoqsijiet ġenerali, bħal dritt hawn għandna - Oh. 551 00:45:55,290 --> 00:45:58,530 Just-oħra jum, Doug qal, "I ivvintat algoritmu li jistgħu sort firxa 552 00:45:58,530 --> 00:46:01,780 "Ta 'numri n fil O (log n) iż-żmien!" 553 00:46:01,780 --> 00:46:04,900 Allura kif nafu li l-impossibbli? 554 00:46:04,900 --> 00:46:08,850 [Rispons istudent inaudible] >> Yeah. 555 00:46:08,850 --> 00:46:13,710 Għall-inqas, inti għandek tmissx kull element fil-firxa, 556 00:46:13,710 --> 00:46:16,210 hekk huwa impossibbli li sort firxa ta '- 557 00:46:16,210 --> 00:46:20,850 Jekk kollox huwa fl-ordni mhux magħżul, allura int se tkun tmiss kollox fil-firxa, 558 00:46:20,850 --> 00:46:25,320 hekk huwa impossibbli li tagħmel dan fil inqas minn O ta 'n. 559 00:46:27,430 --> 00:46:30,340 [Student] Inti wrewna li eżempju li tkun tista 'tagħmel dan fil O ta' n 560 00:46:30,340 --> 00:46:33,920 jekk tuża ħafna ta 'memorja. >> Yeah. 561 00:46:33,920 --> 00:46:37,970 U that's - ninsa dak that's - Huwa għadd sort? 562 00:46:47,360 --> 00:46:51,330 Hmm. Dan huwa algoritmu issortjar numru sħiħ. 563 00:46:59,850 --> 00:47:05,100 I kien qed ifittex l-isem speċjali għal dan li jien ma setgħux tiftakar ġimgħa li għaddiet. 564 00:47:05,100 --> 00:47:13,000 Yeah. Dawn huma t-tipi ta 'tipi li jistgħu jwettqu l-affarijiet fil-big O ta' n. 565 00:47:13,000 --> 00:47:18,430 Iżda hemm limitazzjonijiet, bħal inti tista 'tuża biss interi sa ċertu numru. 566 00:47:20,870 --> 00:47:24,560 Plus jekk inti qed tipprova issolvi that's xi ħaġa - 567 00:47:24,560 --> 00:47:30,750 Jekk firxa tiegħek huwa 012, -12, 151, 4 miljun, 568 00:47:30,750 --> 00:47:35,120 dak l-element waħdieni se kompletament rovina-tqassim kollu. 569 00:47:42,060 --> 00:47:44,030 >> Mistoqsijiet? 570 00:47:49,480 --> 00:47:58,870 [Student] Jekk ikollok xi funzjoni jirrikorri u hija biss jagħmel l-sejħiet rikursivi 571 00:47:58,870 --> 00:48:02,230 fi stqarrija ritorn, li l-denb rikursivi, 572 00:48:02,230 --> 00:48:07,360 u għalhekk tkun li ma jużawx memorja aktar matul runtime 573 00:48:07,360 --> 00:48:12,550 jew ikun inqas użu memorja komparabbli fir iterattiv soluzzjoni? 574 00:48:12,550 --> 00:48:14,530 [Bowden] Iva. 575 00:48:14,530 --> 00:48:19,840 Ikun probabbli jkun kemmxejn kajman, iżda mhux verament. 576 00:48:19,840 --> 00:48:23,290 Tail jirrikorri hija pjuttost tajba. 577 00:48:23,290 --> 00:48:32,640 Ħarsa mill-ġdid lejn frames munzell, ejja ngħidu li għandna prinċipali 578 00:48:32,640 --> 00:48:42,920 u għandna bar int (int x) jew xi ħaġa. 579 00:48:42,920 --> 00:48:52,310 Din mhix funzjoni jirrikorri perfetta, imma bar ritorn (x - 1). 580 00:48:52,310 --> 00:48:57,620 Allura ovvjament, dan huwa difettuż. Ikollok bżonn f'każi bażi u l-għalf. 581 00:48:57,620 --> 00:49:00,360 Iżda l-idea hija li dan huwa denb rikursivi, 582 00:49:00,360 --> 00:49:06,020 li jfisser meta prinċipali sejħiet bar li għaddej biex tikseb frame munzell tiegħu. 583 00:49:09,550 --> 00:49:12,440 F'dan il-qafas munzell hemm għaddej li jkun blokk ftit ta 'memorja 584 00:49:12,440 --> 00:49:17,490 li jikkorrispondi għal x argument tagħha. 585 00:49:17,490 --> 00:49:25,840 U hekk ejja ngħidu prinċipali jiġri li jsejħu bar (100); 586 00:49:25,840 --> 00:49:30,050 Allura x se jibdew bħala 100. 587 00:49:30,050 --> 00:49:35,660 Jekk il-kumpilatur jirrikonoxxi li dan huwa funzjoni rikursivi denb, 588 00:49:35,660 --> 00:49:38,540 allura meta bar jagħmel sejħa jirrikorri tagħha għall-bar, 589 00:49:38,540 --> 00:49:45,490 minflok ma jsir qafas munzell ġdid, li huwa fejn il-munzell jibda jikber aktar, 590 00:49:45,490 --> 00:49:48,220 eventwalment se jibda fis-borġ u mbagħad ikollok segfaults 591 00:49:48,220 --> 00:49:51,590 minħabba memorja jibda jaħbtu. 592 00:49:51,590 --> 00:49:54,830 >> Allura minflok tagħmel frejm tagħha munzell stess, jista 'realizzata, 593 00:49:54,830 --> 00:49:59,080 ħej, jien qatt ma verament bżonn li terġa 'lura għal dan il-qafas munzell, 594 00:49:59,080 --> 00:50:08,040 hekk minflok I ser biss jissostitwixxu dan l-argument ma 99 u mbagħad tibda bar kollha. 595 00:50:08,040 --> 00:50:11,810 U allura se tagħmel mill-ġdid u se tilħaq bar ritorn (x - 1), 596 00:50:11,810 --> 00:50:17,320 u minflok ma jsir qafas munzell ġdid, se biss jissostitwixxu l-argument preżenti tagħha ma '98 597 00:50:17,320 --> 00:50:20,740 u mbagħad jaqbżu lura għall-bidu nett tal-bar. 598 00:50:23,860 --> 00:50:30,430 Dawk l-operazzjonijiet, li tissostitwixxi dak il-valur 1 dwar il-munzell u jaqbeż lura għall-bidu, 599 00:50:30,430 --> 00:50:32,430 huma pjuttost effiċjenti. 600 00:50:32,430 --> 00:50:41,500 Allura mhux biss dan huwa l-użu tal-memorja istess funzjoni separata li iterattiv 601 00:50:41,500 --> 00:50:45,390 għax int biss bl-użu qafas munzell 1, imma int ma ssofrix-aspetti negattivi 602 00:50:45,390 --> 00:50:47,240 ta 'wara li sejħa funzjonijiet. 603 00:50:47,240 --> 00:50:50,240 Funzjonijiet Sejħat jista 'jkun pjuttost għalja minħabba li għandha tagħmel dan kollu setup 604 00:50:50,240 --> 00:50:52,470 u teardown u dan kollu Jittieħed. 605 00:50:52,470 --> 00:50:58,160 Allura dan recursion denb hija tajba. 606 00:50:58,160 --> 00:51:01,170 [Student] Għaliex hija ma toħloqx passi ġodda? 607 00:51:01,170 --> 00:51:02,980 Minħabba li jirrealizza li ma għandux bżonn li. 608 00:51:02,980 --> 00:51:07,800 Is-sejħa għall-bar huwa biss jirritorna l-sejħa rikursivi. 609 00:51:07,800 --> 00:51:12,220 Allura ma għandux bżonn li tagħmel xejn mal-valur tar-ritorn. 610 00:51:12,220 --> 00:51:15,120 Huwa biss se immedjatament lura. 611 00:51:15,120 --> 00:51:20,530 Hekk huwa biss se jissostitwixxi l-argument tagħha stess u tibda fuq. 612 00:51:20,530 --> 00:51:25,780 U wkoll, jekk inti ma għandekx il-verżjoni rikursivi denb, 613 00:51:25,780 --> 00:51:31,460 imbagħad ikollok dawn bars fejn meta dan il-bar tidħol lura 614 00:51:31,460 --> 00:51:36,010 għandu jirritorna valur tagħha għal dan wieħed, allura dik bar immedjatament jirritorna 615 00:51:36,010 --> 00:51:39,620 u dan jirritorna l-valur tiegħu għal dan wieħed, allura huwa biss se immedjatament lura 616 00:51:39,620 --> 00:51:41,350 u r-ritorn valur tiegħu għal dan wieħed. 617 00:51:41,350 --> 00:51:45,350 Allura int iffrankar dan popping kollha ta 'dawn l-affarijiet off tal-munzell 618 00:51:45,350 --> 00:51:48,730 billi l-valur tar-ritorn huwa biss se jkunu mgħoddija it-triq kollha back up xorta waħda. 619 00:51:48,730 --> 00:51:55,400 Allura għaliex mhux biss jissostitwixxu l-argument tagħna ma 'l-argument aġġornata u tibda fuq? 620 00:51:57,460 --> 00:52:01,150 Jekk il-funzjoni ma tkunx denb rikursivi, jekk inti tagħmel xi ħaġa simili - 621 00:52:01,150 --> 00:52:07,530 [Student] jekk bar (x + 1). >> Yeah. 622 00:52:07,530 --> 00:52:11,770 >> Mela jekk inti tpoġġi fil-kundizzjoni, allura int tagħmel xi ħaġa bil-valur tar-ritorn. 623 00:52:11,770 --> 00:52:16,260 Jew anki jekk inti biss tagħmel ritorn 2 * bar (x - 1). 624 00:52:16,260 --> 00:52:23,560 Allura issa bar (x - 1) jeħtieġ li jirritornaw sabiex ikun jista 'jiġi kkalkulat 2 darbiet dak ta' valur, 625 00:52:23,560 --> 00:52:26,140 hekk issa ma bżonn frejm tagħha stess munzell separata, 626 00:52:26,140 --> 00:52:31,180 u issa, l-ebda kwistjoni kif hard inti tipprova, int ser jeħtieġ li - 627 00:52:31,180 --> 00:52:34,410 Dan mhux denb rikursivi. 628 00:52:34,410 --> 00:52:37,590 [Student] Kieku nipprova li ġġib recursion li l-mira ta 'recursion denb - 629 00:52:37,590 --> 00:52:41,450 [Bowden] F'dinja ideali, iżda fil-CS50 inti ma għandekx. 630 00:52:43,780 --> 00:52:49,280 Sabiex tikseb recursion denb, ġeneralment, inti twaqqaf argument addizzjonali 631 00:52:49,280 --> 00:52:53,550 fejn bar se tieħu x int fis y 632 00:52:53,550 --> 00:52:56,990 u y jikkorrispondi għall-ħaġa aħħari inti tixtieq li jirritornaw. 633 00:52:56,990 --> 00:53:03,650 Mela allura dan int ser jirritorna bar (x - 1), 2 * y. 634 00:53:03,650 --> 00:53:09,810 Allura li jinsab biss ta 'livell għoli kif inti tittrasforma l-affarijiet li jkun denb rikursivi. 635 00:53:09,810 --> 00:53:13,790 Iżda l-argument extra - 636 00:53:13,790 --> 00:53:17,410 U mbagħad fl-aħħar meta inti tilħaq il-każ bażi tiegħek, inti biss ritorn y 637 00:53:17,410 --> 00:53:22,740 għaliex inti kont qed jakkumula l-ħin kollu l-valur tar-ritorn li tixtieq. 638 00:53:22,740 --> 00:53:27,280 Inti tip ta 'ġew nagħmilx hekk iteratively iżda bl-użu sejħiet rikursivi. 639 00:53:32,510 --> 00:53:34,900 Mistoqsijiet? 640 00:53:34,900 --> 00:53:39,890 [Student] Forsi dwar aritmetika pointer, bħal meta jużaw kordi. >> Sure. 641 00:53:39,890 --> 00:53:43,610 Aritmetika pointer. 642 00:53:43,610 --> 00:53:48,440 Meta jintużaw kordi huwa faċli għaliex kordi huma stilla char, 643 00:53:48,440 --> 00:53:51,860 Chars huma dejjem u dejjem f'byte wieħed, 644 00:53:51,860 --> 00:53:57,540 u għalhekk aritmetika pointer huwa ekwivalenti għal aritmetika regolari meta int jittrattaw kordi. 645 00:53:57,540 --> 00:54:08,790 Ejja ngħidu biss char * i = "hello". 646 00:54:08,790 --> 00:54:11,430 Allura aħna għandna blokk fil-memorja. 647 00:54:19,490 --> 00:54:22,380 Jeħtieġ 6 bytes għaliex inti dejjem bżonn l-terminatur null. 648 00:54:22,380 --> 00:54:28,620 U char * i se jindikaw il-bidu ta 'din array. 649 00:54:28,620 --> 00:54:32,830 Allura s punti hemmhekk. 650 00:54:32,830 --> 00:54:36,710 Issa, dan huwa bażikament kif kull firxa tax-xogħlijiet, 651 00:54:36,710 --> 00:54:40,780 irrispettivament minn jekk kienx għal ritorn minn malloc jew jekk huwa fuq il-munzell. 652 00:54:40,780 --> 00:54:47,110 Kull firxa hija bażikament pointer għall-bidu tal-firxa, 653 00:54:47,110 --> 00:54:53,640 u mbagħad kull operazzjoni firxa, xi indiċjar, huwa biss nidħlu li firxa ċertu offset. 654 00:54:53,640 --> 00:55:05,360 >> Allura meta I ngħid xi ħaġa simili i [3]; dan se iu għadd 3 Chars pulzieri 655 00:55:05,360 --> 00:55:12,490 Allura s [3], għandna 0, 1, 2, 3, hekk i [3] se tirreferi għal dan l. 656 00:55:12,490 --> 00:55:20,460 [Student] U aħna tista 'tilħaq l-istess valur billi jagħmel i + 3 u mbagħad parentesi star? 657 00:55:20,460 --> 00:55:22,570 Iva. 658 00:55:22,570 --> 00:55:26,010 Dan huwa ekwivalenti għal * (i + 3); 659 00:55:26,010 --> 00:55:31,240 u li huwa dejjem u dejjem ekwivalenti ebda kwistjoni dak li inti tagħmel. 660 00:55:31,240 --> 00:55:34,070 Inti qatt ma bżonn tuża l-sintassi kategorija. 661 00:55:34,070 --> 00:55:37,770 Inti tista 'dejjem jużaw l-* (i + 3) sintassi. 662 00:55:37,770 --> 00:55:40,180 Nies għandhom tendenza li bħall-sintassi parentesi, għalkemm. 663 00:55:40,180 --> 00:55:43,860 [Student] Mela kull matriċi huma attwalment biss pointers. 664 00:55:43,860 --> 00:55:53,630 Hemm distinzjoni żgħira meta ngħid int x [4]; >> [student] Does li joħolqu l-memorja? 665 00:55:53,630 --> 00:56:03,320 [Bowden] Li ser toħloq 4 ints fuq il-munzell, sabiex 16 bytes globali. 666 00:56:03,320 --> 00:56:05,700 Huwa ser joħloq 16 bytes fuq il-munzell. 667 00:56:05,700 --> 00:56:09,190 x ma tkunx maħżuna kullimkien. 668 00:56:09,190 --> 00:56:13,420 Huwa biss simbolu li jirreferu għall-bidu tal-ħaġa. 669 00:56:13,420 --> 00:56:17,680 Għaliex inti ddikjarat il-firxa ġewwa ta 'din il-funzjoni, 670 00:56:17,680 --> 00:56:22,340 dak l-kumpilatur se tagħmel huwa biss tissostitwixxi l-istanzi kollha tal-x varjabbli 671 00:56:22,340 --> 00:56:26,400 ma 'fejn ma ġara li jagħżlu li jpoġġu dawn bytes 16. 672 00:56:26,400 --> 00:56:30,040 Hija ma tistax tagħmel dan ma 'char * għax i huwa pointer attwali. 673 00:56:30,040 --> 00:56:32,380 Huwa ħieles li mbagħad punt għal affarijiet oħra. 674 00:56:32,380 --> 00:56:36,140 x hija kostanti. Ma jistax ikollok dan il-punt għal firxa differenti. >> [Student] Okay. 675 00:56:36,140 --> 00:56:43,420 Iżda din l-idea, dan indiċjar, huwa l-istess irrispettivament minn jekk din hija firxa tradizzjonali 676 00:56:43,420 --> 00:56:48,230 jew jekk huwa pointer għal xi ħaġa jew jekk huwa pointer għal firxa malloced. 677 00:56:48,230 --> 00:56:59,770 U fil-fatt, huwa tant ekwivalenti li dan huwa wkoll l-istess ħaġa. 678 00:56:59,770 --> 00:57:05,440 Hija fil-fatt biss jittraduċi x'hemm ġewwa tal-parentesi u dak ħalla ta 'l-parentesi, 679 00:57:05,440 --> 00:57:07,970 iżid flimkien, u dereferences. 680 00:57:07,970 --> 00:57:14,710 Allura dan huwa daqstant validi bħala * (i + 3) jew s [3]. 681 00:57:16,210 --> 00:57:22,090 [Student] Jista 'ikollok pointers tipponta lejn 2-dimensjonali arrays? 682 00:57:22,090 --> 00:57:27,380 >> Huwa aktar diffiċli. Tradizzjonalment, l-ebda. 683 00:57:27,380 --> 00:57:34,720 A array 2-dimensjonali hija biss firxa 1-dimensjonali ma 'xi sintassi konvenjenti 684 00:57:34,720 --> 00:57:54,110 għaliex meta I say int x [3] [3], dan huwa verament biss 1 array ma '9 valuri. 685 00:57:55,500 --> 00:58:03,000 U hekk meta I indiċi, il-kumpilatur jaf dak li jfisser. 686 00:58:03,000 --> 00:58:13,090 Jekk jiena ngħid x [1] [2], li jaf Irrid immur għal-tieni ringiela, u għalhekk għaddej biex jaqbżu l-ewwel 3, 687 00:58:13,090 --> 00:58:17,460 u allura trid l-ħaġa tieni li, hekk huwa se tikseb dan wieħed. 688 00:58:17,460 --> 00:58:20,480 Iżda huwa għadu biss firxa waħda tridimensjonali. 689 00:58:20,480 --> 00:58:23,660 U hekk jekk jien ridt li tassenja pointer għal dak array, 690 00:58:23,660 --> 00:58:29,770 Jien ngħid int * p = x; 691 00:58:29,770 --> 00:58:33,220 It-tip ta 'x hija biss - 692 00:58:33,220 --> 00:58:38,280 Huwa rough tip qal ta 'x peress li hija biss simbolu u mhuwiex xi varjabbli attwali, 693 00:58:38,280 --> 00:58:40,140 iżda huwa biss * int. 694 00:58:40,140 --> 00:58:44,840 x hija biss pointer għall-bidu ta 'dan. >> [Student] Okay. 695 00:58:44,840 --> 00:58:52,560 U so I mhux se tkun tista 'aċċess [1] [2]. 696 00:58:52,560 --> 00:58:58,370 Naħseb li hemm sintassi speċjali għal tiddikjara pointer, 697 00:58:58,370 --> 00:59:12,480 xi ħaġa redikola bħal int (* p [-. xi ħaġa assolutament redikola I lanqas biss jafu. 698 00:59:12,480 --> 00:59:17,090 Iżda hemm sintassi għad-dikjarazzjoni pointers bħal ma parenteżi u affarijiet. 699 00:59:17,090 --> 00:59:22,960 Ma jista 'anki let inti tagħmel dan. 700 00:59:22,960 --> 00:59:26,640 I jistgħu ħarsa lura lejn xi ħaġa li se tgħidli l-verità. 701 00:59:26,640 --> 00:59:34,160 I se tfittex aktar tard, jekk ikun hemm sintassi għall-punt. Imma qatt m'int se jarawha. 702 00:59:34,160 --> 00:59:39,670 U anki l-sintassi hija tant arkajka li jekk tuża dan, in-nies se jkunu baffled. 703 00:59:39,670 --> 00:59:43,540 Arrays multidimensjonali huma pjuttost rari kif inhi. 704 00:59:43,540 --> 00:59:44,630 Inti pretty ħafna - 705 00:59:44,630 --> 00:59:48,490 Ukoll, jekk int tagħmel affarijiet matriċi mhuwiex ser ikun rari, 706 00:59:48,490 --> 00:59:56,730 imma fis-C int rarament se tkun qed tuża arrays multidimensjonali. 707 00:59:57,630 --> 01:00:00,470 Yeah. >> [Istudent] Ejja ngħidu li għandek firxa verament twila. 708 01:00:00,470 --> 01:00:03,900 >> Allura fil-memorja virtwali jidher li tkun kollha konsekuttivi, 709 01:00:03,900 --> 01:00:05,640 bħall-elementi dritt ħdejn xulxin, 710 01:00:05,640 --> 01:00:08,770 iżda fil-memorja fiżika, ma jkun possibbli għal dik li tkun maqsuma? >> Iva. 711 01:00:08,770 --> 01:00:16,860 Kif virtwali xogħlijiet memorja hija biss jissepara - 712 01:00:19,220 --> 01:00:24,860 L-unità ta 'allokazzjoni hija paġna, li għandu tendenza li jkun 4 kilobytes, 713 01:00:24,860 --> 01:00:29,680 u għalhekk meta proċess jgħid, ħej, I jridu jużaw dan il-memorja, 714 01:00:29,680 --> 01:00:35,970 is-sistema operattiva se jallokawha 4 kilobytes għal dak blokk ftit tal-memorja. 715 01:00:35,970 --> 01:00:39,100 Anke jekk inti biss tuża byte ftit wieħed fil-blokk kollu ta 'memorja, 716 01:00:39,100 --> 01:00:42,850 is-sistema operattiva se jagħtiha l-sħiħ 4 kilobytes. 717 01:00:42,850 --> 01:00:49,410 Allura dak li dan ifisser huwa I jista 'jkollhom - ejja ngħidu li dan huwa munzell tiegħi. 718 01:00:49,410 --> 01:00:53,180 Dan munzell jista 'jiġi sseparat. Munzell My jista 'jkun megabytes u megabytes. 719 01:00:53,180 --> 01:00:55,020 Munzell My jista 'jkun enormi. 720 01:00:55,020 --> 01:01:00,220 Iżda l-munzell innifsu għandu jiġi maqsum paġni individwali, 721 01:01:00,220 --> 01:01:09,010 li jekk inħarsu lejn minn hawn ejja ngħidu li dan huwa RAM tagħna, 722 01:01:09,010 --> 01:01:16,600 jekk ikolli 2 gigabytes ta 'RAM, dan huwa proprju l-indirizz 0 bħall-byte 0 ta' RAM tiegħi, 723 01:01:16,600 --> 01:01:22,210 u din hija 2 gigabytes it-triq kollha stabbiliti hawn. 724 01:01:22,210 --> 01:01:27,230 Allura din il-paġna tista 'tikkorrispondi għal dan il-blokk hawn fuq. 725 01:01:27,230 --> 01:01:29,400 Din il-paġna tista 'tikkorrispondi għal dan il-blokk hawn fuq. 726 01:01:29,400 --> 01:01:31,560 Dan wieħed jista 'jikkorrispondi għal dan wieħed hawn fuq. 727 01:01:31,560 --> 01:01:35,540 Għalhekk is-sistema operattiva huwa liberu li tassenja memorja fiżika 728 01:01:35,540 --> 01:01:39,320 għal kull paġna individwali arbitrarju. 729 01:01:39,320 --> 01:01:46,180 U dan ifisser li jekk dan fruntiera jiġri li straddle firxa, 730 01:01:46,180 --> 01:01:50,070 firxa jiġri li titħalla ta 'dan u d-dritt ta' dan l-ordni ta 'paġna, 731 01:01:50,070 --> 01:01:54,460 allura dik array se tkun maqsuma fil-memorja fiżika. 732 01:01:54,460 --> 01:01:59,280 U allura meta inti nieqaf-programm, meta l-proċess jintemm, 733 01:01:59,280 --> 01:02:05,690 dawn mappings nikseb mħassra u allura huwa liberu li juża dawn il-blokok ftit għal affarijiet oħra. 734 01:02:14,730 --> 01:02:17,410 Mistoqsijiet Aktar? 735 01:02:17,410 --> 01:02:19,960 [Student] Il aritmetika pointer. >> Oh yeah. 736 01:02:19,960 --> 01:02:28,410 Strings kienu aktar faċli, iżda tħares lejn xi ħaġa bħal ints, 737 01:02:28,410 --> 01:02:35,000 hekk lura għall int x [4]; 738 01:02:35,000 --> 01:02:41,810 Jekk dan huwa firxa jew jekk huwa pointer għal firxa malloced '4 numri interi, 739 01:02:41,810 --> 01:02:47,060 li għaddej biex jiġu ttrattati bl-istess mod. 740 01:02:50,590 --> 01:02:53,340 [Student] Mela arrays huma fuq il-borġ? 741 01:03:01,400 --> 01:03:05,270 [Bowden] Arrays mhumiex fuq il-borġ. >> [Student] Oh. 742 01:03:05,270 --> 01:03:08,320 >> [Bowden] Dan it-tip ta 'firxa tendenza li jkun fuq il-munzell 743 01:03:08,320 --> 01:03:12,220 sakemm inti ddikjarat dan fid - jinjora varjabbli globali. Tużax varjabbli globali. 744 01:03:12,220 --> 01:03:16,280 Ġewwa ta 'funzjoni I say int x [4]; 745 01:03:16,280 --> 01:03:22,520 Huwa ser toħloq blokka 4-numru sħiħ fuq il-munzell ta 'din il-firxa. 746 01:03:22,520 --> 01:03:26,960 Iżda dan malloc (4 * sizeof (int)); se jmorru fuq il-borġ. 747 01:03:26,960 --> 01:03:31,870 Iżda wara dan il-punt I jistgħu jużaw x u ​​p fil pretty ħafna l-modi istess, 748 01:03:31,870 --> 01:03:36,140 għajr l-eċċezzjonijiet I said qabel dwarek tista jassenja mill-ġdid p. 749 01:03:36,140 --> 01:03:40,960 Teknikament, daqsijiet tagħhom huma kemmxejn differenti, iżda li l-kompletament irrilevanti. 750 01:03:40,960 --> 01:03:43,310 Inti qatt ma attwalment jużaw qisien tagħhom. 751 01:03:48,020 --> 01:03:56,810 Il p nista 'ngħid p [3] = 2, jew x [3] = 2; 752 01:03:56,810 --> 01:03:59,680 Tista 'tuża minnhom eżattament fl-istess mod. 753 01:03:59,680 --> 01:04:01,570 Allura pointer aritmetika issa - Iva. 754 01:04:01,570 --> 01:04:07,390 [Student] Inti ma għandekx tagħmel * p jekk għandek il-parentesi? 755 01:04:07,390 --> 01:04:11,720 Il-parentesi huma dereference impliċitu. Okay. >> 756 01:04:11,720 --> 01:04:20,200 Attwalment, ukoll dak li qed tgħid l-jistax ikollok arrays multidimensjonali 757 01:04:20,200 --> 01:05:02,650 ma pointers, x'tista 'tagħmel xi ħaġa simili, ejja ngħidu, int ** pp = malloc (sizeof (INT *) * 5); 758 01:05:02,650 --> 01:05:06,900 I ser biss jiktbu dan kollu l-ewwel. 759 01:05:37,880 --> 01:05:41,020 I ma riedx li wieħed. 760 01:05:41,020 --> 01:05:42,550 Okay. 761 01:05:42,550 --> 01:05:48,910 What I did hawnhekk huwa - Li għandhom ikunu pp [i]. 762 01:05:48,910 --> 01:05:53,680 Allura pp hija pointer għal pointer. 763 01:05:53,680 --> 01:06:02,420 Inti mallocing pp għall-punt għal firxa ta '5 stilel int. 764 01:06:02,420 --> 01:06:10,950 Allura fil-memorja li għandek fuq il-paġni munzell 765 01:06:10,950 --> 01:06:20,150 Huwa ser punt għal firxa ta '5 blokki li huma kollha infushom pointers. 766 01:06:20,150 --> 01:06:28,210 U mbagħad meta I malloc stabbiliti hawn, I malloc li kull waħda minn dawn pointers individwali 767 01:06:28,210 --> 01:06:32,080 għandu jindika blokk separat ta '4 bytes fuq il-borġ. 768 01:06:32,080 --> 01:06:35,870 Allura dan jindika 4 bytes. 769 01:06:37,940 --> 01:06:40,660 U dan jindika 1 sa A 4 bytes differenti. 770 01:06:40,660 --> 01:06:43,200 >> U kollha kemm huma jindikaw stess 4 bytes tagħhom. 771 01:06:43,200 --> 01:06:49,080 Dan jagħti me mod nagħmlu l-affarijiet multidimensjonali. 772 01:06:49,080 --> 01:06:58,030 Nista 'ngħid pp [3] [4], iżda issa dan ma jkunx l-istess ħaġa bħal arrays multidimensjonali 773 01:06:58,030 --> 01:07:05,390 minħabba arrays multidimensjonali li tradott [3] [4] f'Direttiva waħdanija offset fil-firxa x. 774 01:07:05,390 --> 01:07:14,790 Dan p dereferences, aċċessi l-indiċi 3, allura dereferences li 775 01:07:14,790 --> 01:07:20,790 u aċċessi - 4 ikunu invalidi - l-indiċi 2. 776 01:07:24,770 --> 01:07:31,430 Billi meta kellna l-int x [3] [4] qabel bħala firxa multidimensjonali 777 01:07:31,430 --> 01:07:35,740 u meta inti doppja bracket huwa verament biss dereference wieħed, 778 01:07:35,740 --> 01:07:40,490 int wara pointer waħda u mbagħad offset, 779 01:07:40,490 --> 01:07:42,850 dan huwa verament referenzi 2D. 780 01:07:42,850 --> 01:07:45,840 Inti ssegwi 2 pointers separati. 781 01:07:45,840 --> 01:07:50,420 Allura dan ukoll teknikament jippermettilek li jkollhom arrays multidimensjonali 782 01:07:50,420 --> 01:07:53,550 fejn kull firxa individwali hija daqsijiet differenti. 783 01:07:53,550 --> 01:07:58,000 So I think arrays multidimensjonali jagged huwa dak li sejjaħ 784 01:07:58,000 --> 01:08:01,870 peress li verament l-ewwel ħaġa jista 'punt għal xi ħaġa li għandha 10 elementi, 785 01:08:01,870 --> 01:08:05,540 l tieni ħaġa jista 'punt għal xi ħaġa li għandha 100 elementi. 786 01:08:05,540 --> 01:08:10,790 [Student] Hemm xi limitu għan-numru ta 'indikaturi inti jista' jkollhom 787 01:08:10,790 --> 01:08:14,290 tipponta lejn pointers oħra? >> No 788 01:08:14,290 --> 01:08:17,010 Inti jista 'jkollhom int ***** p. 789 01:08:18,050 --> 01:08:23,760 Lura għall aritmetika pointer - >> [student] Oh. >> Yeah. 790 01:08:23,760 --> 01:08:35,649 [Student] Jekk ikolli int *** p u mbagħad I do a dereferencing u jien ngħid * p hija ugwali għal dan il-valur, 791 01:08:35,649 --> 01:08:39,560 huwa biss se jagħmlu 1 livell ta 'dereferencing? >> Iva. 792 01:08:39,560 --> 01:08:43,340 Mela jekk irrid biex jaċċessaw il-ħaġa li l-pointer aħħar hija li tipponta lejn - 793 01:08:43,340 --> 01:08:46,210 Imbagħad inti do p. *** Okay. >> 794 01:08:46,210 --> 01:08:54,080 Allura dan huwa punt p sa blokka 1, il-punti għall-ieħor blokk, punti għall-ieħor blokk. 795 01:08:54,080 --> 01:09:02,010 Imbagħad jekk inti tagħmel * p = xi ħaġa oħra, allura inti qed jinbidlu dan 796 01:09:02,010 --> 01:09:13,640 li issa punt għal blokk differenti. Okay. >> 797 01:09:13,640 --> 01:09:17,649 >> [Bowden] U jekk dawn kienu malloced, imbagħad inti għandek issa nixxew memorja 798 01:09:17,649 --> 01:09:20,430 sakemm jiġri li jkollhom referenzi differenti ta 'dawn il- 799 01:09:20,430 --> 01:09:25,270 peress li inti ma tistax terġa 'lura għal dawk dawk li inti biss threw bogħod. 800 01:09:25,270 --> 01:09:29,550 Aritmetika pointer. 801 01:09:29,550 --> 01:09:36,310 int x [4]; se talloka firxa ta 'numri interi 4 802 01:09:36,310 --> 01:09:40,670 fejn x huwa se jindikaw il-bidu ta 'l-array. 803 01:09:40,670 --> 01:09:50,420 Allura meta I ngħid xi ħaġa simili x [1]; Irrid li jfisser tmur fil-numru sħiħ 2 fil-firxa, 804 01:09:50,420 --> 01:09:53,319 li jkun dan wieħed. 805 01:09:53,319 --> 01:10:04,190 Imma verament, li 4 bytes fil-firxa peress li dan integer jieħu 4 bytes. 806 01:10:04,190 --> 01:10:08,470 Allura offset ta '1 verament tfisser offset ta' 1 807 01:10:08,470 --> 01:10:12,030 darbiet id-daqs ta 'kwalunkwe tip ta' l-array huwa. 808 01:10:12,030 --> 01:10:17,170 Dan huwa firxa ta 'numri interi, u għalhekk jaf li tagħmel 1 darbiet daqs ta' int meta trid offset. 809 01:10:17,170 --> 01:10:25,260 Il-oħra sintassi. Ftakar li din hija ekwivalenti għal * (x + 1); 810 01:10:25,260 --> 01:10:35,250 Meta I say pointer + 1, dak li prospetti huwa l-indirizz li l-pointer huwa ħażna 811 01:10:35,250 --> 01:10:40,360 plus 1 darbiet id-daqs tat-tip tal-pointer. 812 01:10:40,360 --> 01:10:59,510 Mela jekk x = ox100, allura x + 1 = ox104. 813 01:10:59,510 --> 01:11:19,750 U inti tista 'abbuż dan u ngħid xi ħaġa simili char * c = (char *) x; 814 01:11:19,750 --> 01:11:23,050 u issa ċ se tkun l-istess indirizz x. 815 01:11:23,050 --> 01:11:26,040 c se tkun ugwali għal ox100, 816 01:11:26,040 --> 01:11:31,490 imma c + 1 se jkun ugwali għal ox101 817 01:11:31,490 --> 01:11:38,030 peress aritmetika pointer jiddependi mit-tip ta 'l-werrej li inti żżid li. 818 01:11:38,030 --> 01:11:45,390 Allura c + 1, jagħti ħarsa lejn c, huwa pointer char, hekk li għaddej biex żid 1 darbiet daqs tal char, 819 01:11:45,390 --> 01:11:48,110 li huwa dejjem se tkun l-1, hekk ikollok 101, 820 01:11:48,110 --> 01:11:54,890 billi jekk nagħmel x, li huwa wkoll għadu 100, x + 1 se tkun 104. 821 01:11:56,660 --> 01:12:06,340 [Student] Tista 'tuża ċ + + sabiex qabel pointer tiegħek sa l-1? 822 01:12:06,340 --> 01:12:09,810 Iva, inti tista '. 823 01:12:09,810 --> 01:12:16,180 Inti ma tistax tagħmel dan ma 'x minħabba x hija biss simbolu, huwa kostanti, inti ma tistax tbiddel x. 824 01:12:16,180 --> 01:12:22,610 >> Iżda ċ jiġri li jkun biss pointer, hekk c + + huwa perfettament validu u se inkrement minn 1. 825 01:12:22,610 --> 01:12:32,440 Jekk c kienu biss * int, allura ċ + + tkun 104. 826 01:12:32,440 --> 01:12:41,250 + + Aritmetika pointer ma biss bħala ċ + 1 ikollu jsir aritmetika pointer. 827 01:12:43,000 --> 01:12:48,870 Dan huwa attwalment kif ħafna affarijiet simili tip jingħaqdu - 828 01:12:49,670 --> 01:12:55,710 Minflok il-ħolqien kopji ta 'affarijiet, inti tista' minflok tgħaddi - 829 01:12:55,710 --> 01:13:02,400 Bħal jekk jien ridt li tgħaddi din nofs il-firxa - ejja iħassar xi ftit minn dan. 830 01:13:04,770 --> 01:13:10,520 Ejja ngħidu jien ridt li jgħaddu din in-naħa tal-firxa fi funzjoni. 831 01:13:10,520 --> 01:13:12,700 X'għandu I jgħaddu għal dik il-funzjoni? 832 01:13:12,700 --> 01:13:17,050 Jekk I jgħaddu x, jiena tgħaddi dan l-indirizz. 833 01:13:17,050 --> 01:13:23,780 Imma nixtieq li tgħaddi din l-indirizz partikolari. Allura dak li għandi jgħaddu? 834 01:13:23,780 --> 01:13:26,590 [Student] Pointer + 2? 835 01:13:26,590 --> 01:13:29,350 [Bowden] Mela x + 2. Iva. 836 01:13:29,350 --> 01:13:31,620 Li għaddej biex tkun f'dan l-indirizz. 837 01:13:31,620 --> 01:13:42,810 Int ser ikollok ukoll ħafna drabi tara dan bħala x [2] u allura l-indirizz ta 'dak. 838 01:13:42,810 --> 01:13:47,850 Allura ikollok bżonn tieħu l-indirizz ta 'dan minħabba li l-kategorija hija dereference impliċita. 839 01:13:47,850 --> 01:13:53,250 x [2] jirreferi għall-valur li huwa f'din il-kaxxa, u allura inti tixtieq l-indirizz ta 'dik il-kaxxa, 840 01:13:53,250 --> 01:13:56,850 sabiex inti tgħid & x [2]. 841 01:13:56,850 --> 01:14:02,880 Allura li kif xi ħaġa fil-tip jingħaqdu fejn inti tixtieq li jgħaddu nofs il-lista għal xi ħaġa 842 01:14:02,880 --> 01:14:08,790 inti verament ftit jgħaddu & x [2], u issa safejn is-sejħa rikursivi huwa kkonċernat, 843 01:14:08,790 --> 01:14:12,510 firxa ġdida tiegħi jibda hemmhekk. 844 01:14:12,510 --> 01:14:15,130 Mistoqsijiet aħħar minuta. 845 01:14:15,130 --> 01:14:20,050 [Student] Jekk aħna ma tpoġġi ampersand jew - x'hemm li imsejħa? >> Star? 846 01:14:20,050 --> 01:14:23,200 [Student] Star. >> Teknikament, l-operatur dereference, iżda - >> [student] Dereference. 847 01:14:23,200 --> 01:14:29,310 >> Jekk aħna ma jpoġġux stilla jew ampersand, x'jiġri jekk I biss jgħidu y = x u x hija pointer? 848 01:14:29,310 --> 01:14:34,620 X'inhu t-tip ta 'y? >> [Student] I ser biss jgħidu pointer huwa 2. 849 01:14:34,620 --> 01:14:38,270 Mela jekk inti biss jgħidu y = x, issa x u l-punt y għall-istess ħaġa. >> [Student] Punt għall-istess ħaġa. 850 01:14:38,270 --> 01:14:45,180 U jekk x huwa pointer int? >> Ikun jilmentaw għaliex inti ma tistax tassenja pointers. 851 01:14:45,180 --> 01:14:46,540 [Student] Okay. 852 01:14:46,540 --> 01:14:51,860 Ftakar li l-pointers, anke jekk aħna tiġbed minnhom bħala vleġeġ, 853 01:14:51,860 --> 01:15:02,010 verament kollha taħżen dawn - int * x - verament kollha x hija ħażna hija xi ħaġa simili ox100, 854 01:15:02,010 --> 01:15:06,490 li aħna jiġri li jirrappreżentaw bħala li tipponta lejn il-blokk maħżuna f'temperatura ta '100. 855 01:15:06,490 --> 01:15:19,660 Allura meta I say int * y = x; jien biss ikkupjar ox100 fis y, 856 01:15:19,660 --> 01:15:24,630 li aħna qed biss jmorru biex jirrappreżentaw bħala y, ukoll tipponta lejn ox100. 857 01:15:24,630 --> 01:15:39,810 U jekk jien ngħid i int = (int) x; imbagħad i se taħżen irrispettivament mill-valur tal-ox100 huwa 858 01:15:39,810 --> 01:15:45,100 ġewwa ta 'dan, iżda issa huwa għaddej biex jiġi interpretat bħala numru sħiħ minflok ta' pointer. 859 01:15:45,100 --> 01:15:49,310 Imma għandek bżonn l-mitfugħa jew inkella se jilmentaw. 860 01:15:49,310 --> 01:15:53,300 [Student] Mela taħseb jfisser li jitfa - 861 01:15:53,300 --> 01:16:00,290 Huwa ser jiġi ikkastjar int 'x jew ikkastjar int ta' y? 862 01:16:00,290 --> 01:16:03,700 [Bowden] What? 863 01:16:03,700 --> 01:16:07,690 [Student] Okay. Wara dawn parentesi huwa hemmhekk se tkun x jew ay hemm? 864 01:16:07,690 --> 01:16:11,500 >> [Bowden] Jew. xuy huma ekwivalenti. >> [Student] Okay. 865 01:16:11,500 --> 01:16:14,390 Minħabba li qed kemm pointers. >> Yeah. 866 01:16:14,390 --> 01:16:21,050 [Student] Għalhekk ikun jaħżen l-100 hexadeċimali f'forma numru sħiħ? >> [Bowden] Yeah. 867 01:16:21,050 --> 01:16:23,620 Iżda mhux il-valur ta 'kwalunkwe hija tirreferi għall. 868 01:16:23,620 --> 01:16:29,940 [Bowden] Yeah. >> [Student] Hekk biss l-indirizz fil-forma numru sħiħ. Okay. 869 01:16:29,940 --> 01:16:34,720 [Bowden] Jekk int riedu għal xi raġuni stramba, 870 01:16:34,720 --> 01:16:38,900 inti tista 'biss jittrattaw pointers u qatt jittrattaw interi 871 01:16:38,900 --> 01:16:49,240 u biss ikunu simili int * x = 0. 872 01:16:49,240 --> 01:16:53,000 Imbagħad int ser jiksbu verament konfuż meta aritmetika pointer jibda jiġri. 873 01:16:53,000 --> 01:16:56,570 Allura n-numri li huma jaħżnu huma bla sens. 874 01:16:56,570 --> 01:16:58,940 Huwa biss kif inti jispiċċaw interpretazzjoni tagħhom. 875 01:16:58,940 --> 01:17:02,920 Hekk jien liberu li kopja ox100 minn * int lil int, 876 01:17:02,920 --> 01:17:07,790 u jien ħielsa li tassenja - you're probabbilment se tikseb għajjat ​​fil għaliex ma ikkastjar - 877 01:17:07,790 --> 01:17:18,160 Jien liberi li tassenja xi ħaġa simili (INT *) ox1234 fis dan * int arbitrarju. 878 01:17:18,160 --> 01:17:25,480 Allura ox123 hija daqstant valida l-indirizz tal-memorja kif & y. 879 01:17:25,480 --> 01:17:32,060 & Y jiġri li jirritornaw xi ħaġa li hija pjuttost ox123. 880 01:17:32,060 --> 01:17:35,430 [Student] Ikun li jkun mod verament jibred biex imorru minn hexadeċimali għall-forma deċimali, 881 01:17:35,430 --> 01:17:39,230 simili jekk għandek pointer u inti mitfugħa dan bħala int? 882 01:17:39,230 --> 01:17:44,860 [Bowden] Inti tista 'verament biss print użu bħal printf. 883 01:17:44,860 --> 01:17:50,300 Ejja ngħidu għandi int y = 100. 884 01:17:50,300 --> 01:18:02,700 Allura printf (% d \ n - kif għandek diġà taf - jistampaw li bħala numru sħiħ x%,. 885 01:18:02,700 --> 01:18:05,190 Aħna ser biss print bħala hexadeċimali. 886 01:18:05,190 --> 01:18:10,760 Allura pointer ma tkunx maħżuna bħala hexadecimal, 887 01:18:10,760 --> 01:18:12,960 u integer ma tkunx maħżuna bħala deċimali. 888 01:18:12,960 --> 01:18:14,700 Kollox huwa maħżun bħala binarja. 889 01:18:14,700 --> 01:18:17,950 Huwa biss li għandna t-tendenza li juru pointers bħala hexadecimal 890 01:18:17,950 --> 01:18:23,260 għaliex naħsbu ta 'affarijiet fil dawn il-blokok 4-byte, 891 01:18:23,260 --> 01:18:25,390 u l-indirizzi tal-memorja tendenza li jkunu familjari. 892 01:18:25,390 --> 01:18:28,890 Aħna qed simili, jekk jibda bil bf, allura jiġri li jkun fuq il-munzell. 893 01:18:28,890 --> 01:18:35,560 Allura huwa biss l-interpretazzjoni tagħna ta 'pointers bħala hexadeċimali. 894 01:18:35,560 --> 01:18:39,200 Okay. Kwalunkwe mistoqsijiet aħħar? 895 01:18:39,200 --> 01:18:41,700 >> I ser tkun hawn għal ftit wara jekk għandek xi ħaġa oħra. 896 01:18:41,700 --> 01:18:46,070 U dan huwa l-aħħar ta 'dak. 897 01:18:46,070 --> 01:18:48,360 >> [Student]! Yay [Applause] 898 01:18:51,440 --> 01:18:53,000 >> [CS50.TV]