1 00:00:00,000 --> 00:00:01,110 >> [მუსიკის დაკვრა] 2 00:00:01,110 --> 00:00:10,567 3 00:00:10,567 --> 00:00:11,650 დევიდ ჯ Malan: ყველა უფლება. 4 00:00:11,650 --> 00:00:15,610 ეს არის CS50, და ეს ბოლოს კვირა ოთხი. 5 00:00:15,610 --> 00:00:19,420 და ერთი თემა დღეს ის არის, რომ ციფრული სასამართლო ექსპერტიზის, 6 00:00:19,420 --> 00:00:20,989 ხელოვნების ანაზღაურების ინფორმაციას. 7 00:00:20,989 --> 00:00:22,780 და მართლაც, მიუხედავად იმისა, თქვენ შუაგულში 8 00:00:22,780 --> 00:00:25,070 ახლა მშვიდობის სამ და Breakout, მომავალ კვირას, 9 00:00:25,070 --> 00:00:27,880 აქცენტი იქნება ზუსტად ამ სფეროში. 10 00:00:27,880 --> 00:00:30,686 >> ასე რომ, ერთი coolest სამუშაო მე ოდესმე ის იყო, უკან ასპირანტურაში, 11 00:00:30,686 --> 00:00:33,560 როდესაც მე მუშაობა ადგილობრივი MIDDLESEX ქვეყნის რაიონული ადვოკატმა 12 00:00:33,560 --> 00:00:34,950 ოფისი, აკეთებს ექსპერტიზის მუშაობა. 13 00:00:34,950 --> 00:00:37,450 ასე რომ, არსებითად, Massachusetts სახელმწიფო პოლიციის, ხანდახან, 14 00:00:37,450 --> 00:00:40,100 როდესაც მუშაობა შემთხვევებში იქნებოდა რათა რამ, როგორიცაა მყარი დისკები 15 00:00:40,100 --> 00:00:42,185 და ფლოპი დისკები და ბარათები და ასე შემდეგ. 16 00:00:42,185 --> 00:00:44,060 და ისინი გადასცემს მე და ჩემი მენტორი, 17 00:00:44,060 --> 00:00:48,070 და ჩვენი მიზანი იყო, რომ მტკიცებულება, იყო თუ არა, ამ მედიაში. 18 00:00:48,070 --> 00:00:50,700 ახლა, თქვენ შეიძლება არ მინახავს glimpses ამ სამყაროში კრიმინალისტთა 19 00:00:50,700 --> 00:00:53,000 მედია, ტელე და ფილმები. 20 00:00:53,000 --> 00:00:55,730 მაგრამ სამუშაო არ მქონდა და daresay, რომ მსოფლიოში, 21 00:00:55,730 --> 00:00:57,550 არ არის საკმაოდ, როგორც თქვენ მისი დანახვა. 22 00:00:57,550 --> 00:01:00,794 მოდით შევხედოთ, თუ რა თქვენ ალბათ მინახავს. 23 00:01:00,794 --> 00:01:01,460 [ვიდეო აღწარმოების] 24 00:01:01,460 --> 00:01:02,930 -OK. 25 00:01:02,930 --> 00:01:05,380 ახლა, მოდით, კარგი შევხედოთ თქვენ. 26 00:01:05,380 --> 00:01:06,850 >> [მუსიკის დაკვრა] 27 00:01:06,850 --> 00:01:12,260 28 00:01:12,260 --> 00:01:12,932 >> -Hold იგი. 29 00:01:12,932 --> 00:01:13,657 აწარმოებს, რომ უკან. 30 00:01:13,657 --> 00:01:14,733 >> -Wait წუთი. 31 00:01:14,733 --> 00:01:15,233 წავიდეთ უფლება. 32 00:01:15,233 --> 00:01:16,371 33 00:01:16,371 --> 00:01:16,870 მიზნით,. 34 00:01:16,870 --> 00:01:17,369 გაყინვას, რომ. 35 00:01:17,369 --> 00:01:17,930 -Full ეკრანზე. 36 00:01:17,930 --> 00:01:18,376 >> -OK. 37 00:01:18,376 --> 00:01:18,875 გაყინვას, რომ. 38 00:01:18,875 --> 00:01:20,160 -Tighten Up on რომ, იქნება თქვენ? 39 00:01:20,160 --> 00:01:22,126 >> -Vector წელს, რომ ბიჭი, რომელსაც უკანა წამყვანი. 40 00:01:22,126 --> 00:01:24,435 >> -Zoom უფლება აქ, ამ ადგილას. 41 00:01:24,435 --> 00:01:28,580 >> გამოიძიე უფლება აღჭურვილობა, გამოსახულება შეიძლება გაიზარდოს და კიდევ უფრო. 42 00:01:28,580 --> 00:01:29,330 >> რა არის ეს? 43 00:01:29,330 --> 00:01:30,780 >> -ეს გაფართოება პროგრამა. 44 00:01:30,780 --> 00:01:32,170 >> იქნებ ნათელია, რომ up რაიმე? 45 00:01:32,170 --> 00:01:33,070 >> მე არ ვიცი. 46 00:01:33,070 --> 00:01:34,150 მოდით გაზრდის. 47 00:01:34,150 --> 00:01:35,440 >> -Enhance განყოფილება A6. 48 00:01:35,440 --> 00:01:36,570 49 00:01:36,570 --> 00:01:38,562 I გაუმჯობესებულია დეტალურად and-- 50 00:01:38,562 --> 00:01:40,020 მე ვფიქრობ, რომ არსებობს საკმარისი იმისათვის, რომ გაზარდოს. 51 00:01:40,020 --> 00:01:40,976 გათავისუფლების ეს ჩემი ეკრანზე. 52 00:01:40,976 --> 00:01:42,559 >> მე გაუმჯობესებულია ასახვა მისი თვალი. 53 00:01:42,559 --> 00:01:44,322 -Let აწარმოებს ამ გზით ვიდეო გაფართოება. 54 00:01:44,322 --> 00:01:45,210 >> -Edgar, შეგიძლიათ გაზარდოს ეს? 55 00:01:45,210 --> 00:01:45,710 >> -Hang შესახებ. 56 00:01:45,710 --> 00:01:47,570 57 00:01:47,570 --> 00:01:49,458 >> -I've მუშაობენ ამ ასახვა. 58 00:01:49,458 --> 00:01:50,402 >> მიზნით, ის ვიღაცის ასახვა. 59 00:01:50,402 --> 00:01:50,902 >> -Reflection. 60 00:01:50,902 --> 00:01:52,870 -არის ასახვა ადამიანის სახე. 61 00:01:52,870 --> 00:01:53,694 >> ანუ ასახვა? 62 00:01:53,694 --> 00:01:54,610 მიზნით, ასახვა. 63 00:01:54,610 --> 00:01:55,880 -Zoom წელს სარკეში. 64 00:01:55,880 --> 00:01:57,860 თქვენ ხედავთ, ასახვა. 65 00:01:57,860 --> 00:01:59,630 >> იქნებ აძლიერებს იმიჯი აქ? 66 00:01:59,630 --> 00:02:00,377 67 00:02:00,377 --> 00:02:01,210 იქნებ გაზრდის? 68 00:02:01,210 --> 00:02:02,190 იქნებ გაზრდის? 69 00:02:02,190 --> 00:02:03,066 -შეიძლება ჩვენ გააძლიეროს ეს? 70 00:02:03,066 --> 00:02:03,898 იქნებ გაზრდის? 71 00:02:03,898 --> 00:02:04,740 -Hold მეორე. 72 00:02:04,740 --> 00:02:05,281 მე გაღრმავებას. 73 00:02:05,281 --> 00:02:06,470 -Zoom In კარზე. 74 00:02:06,470 --> 00:02:06,970 ჯერ უფრო 10. 75 00:02:06,970 --> 00:02:08,009 -Zoom. 76 00:02:08,009 --> 00:02:08,509 -MOVE In. 77 00:02:08,509 --> 00:02:09,340 -იმაზე. 78 00:02:09,340 --> 00:02:10,094 -Wait, შეწყვიტოს. 79 00:02:10,094 --> 00:02:10,750 -Stop. 80 00:02:10,750 --> 00:02:11,250 -Pause იგი. 81 00:02:11,250 --> 00:02:13,542 -როტაცია Us 75 გრადუსი გარშემო ვერტიკალური, გთხოვთ. 82 00:02:13,542 --> 00:02:14,750 83 00:02:14,750 --> 00:02:16,127 >> -Stop. 84 00:02:16,127 --> 00:02:19,330 დავუბრუნდეთ ნაწილი კართან ერთხელ. 85 00:02:19,330 --> 00:02:21,420 >> -Got იმიჯი Enhancer, რომელიც შეიძლება bitmap? 86 00:02:21,420 --> 00:02:24,420 >> -Maybe ჩვენ შეგვიძლია გამოვიყენოთ Pradeep Singh საშუალებას ვხედავ შევიდა ფანჯრები. 87 00:02:24,420 --> 00:02:25,902 >> ანუ პროგრამა არის დონით. 88 00:02:25,902 --> 00:02:26,866 >> ანუ eigenvalue გამორთულია. 89 00:02:26,866 --> 00:02:29,758 >> გამოიძიე უფლება კომბინაცია ალგორითმები 90 00:02:29,758 --> 00:02:32,168 >> დიაგნოზი დაუსვეს მიერ მიღებული განათება ალგორითმები, რათა მომდევნო დონეზე, 91 00:02:32,168 --> 00:02:34,110 და მე შეიძლება მათი გამოყენება აძლიერებს ამ ფოტოს. 92 00:02:34,110 --> 00:02:36,840 >> -Lock On და გაფართოების z ღერძი. 93 00:02:36,840 --> 00:02:37,351 >> -Enhance. 94 00:02:37,351 --> 00:02:37,850 გაზარდოს. 95 00:02:37,850 --> 00:02:38,720 -Enhance. 96 00:02:38,720 --> 00:02:40,070 -Freeze და აძლიერებს. 97 00:02:40,070 --> 00:02:43,420 [END ვიდეო აღწარმოების] 98 00:02:43,420 --> 00:02:45,830 დევიდ ჯ Malan: ასე რომ ეს ყველა სიტყვა, მაგრამ ისინი არ იყვნენ 99 00:02:45,830 --> 00:02:47,870 გამოიყენება სასჯელს სწორად. 100 00:02:47,870 --> 00:02:52,370 და მართლაც, რომ მომავალში, ნებისმიერ დროს, გთხოვთ, გესმით ვინმეს ამბობენ, რომ სიტყვა, 101 00:02:52,370 --> 00:02:54,250 "ამაღლება" chuckle უბრალოდ ცოტა. 102 00:02:54,250 --> 00:02:57,190 რადგან, როდესაც თქვენ ცდილობენ გააძლიერონ, მაგალითად, ეს არის ის, რაც ხდება. 103 00:02:57,190 --> 00:02:58,580 >> ასე რომ აქ gorgeous photo. 104 00:02:58,580 --> 00:02:59,720 ეს არის CS50 საკუთარი Daven. 105 00:02:59,720 --> 00:03:03,740 და ვფიქრობ, რომ ჩვენ გვინდოდა ფოკუსირება წელს twinkle მისი თვალი, 106 00:03:03,740 --> 00:03:05,870 ან ასახვა ცუდი ბიჭი, რომელიც აშკარად 107 00:03:05,870 --> 00:03:07,820 მიტაცებული უსაფრთხოების კამერა. 108 00:03:07,820 --> 00:03:10,330 ეს არის ის, რაც ხდება, როდესაც თქვენ მიუახლოვდით, რომ გამოსახულება 109 00:03:10,330 --> 00:03:14,060 მხოლოდ სასრულ ნომერი ბიტი მასთან. 110 00:03:14,060 --> 00:03:15,420 >> რომ არის, რას დაიჭერს. 111 00:03:15,420 --> 00:03:19,190 და მართლაც, Daven თვალი არის, მაგრამ ოთხი, შესაძლოა, ექვსი pixels 112 00:03:19,190 --> 00:03:22,110 რომ დაკომპლექტებას ზუსტად რა იყო ჟუჟუნა არსებობს. 113 00:03:22,110 --> 00:03:25,890 ასე რომ, პრობლემა მითითებული ოთხი საბოლოოდ თქვენ შეისწავლონ ამ სამყაროში, განსაკუთრებით 114 00:03:25,890 --> 00:03:28,090 ბუნების რაღაც ჩვენ მოვუწოდებთ ფაილის I / O, სადაც 115 00:03:28,090 --> 00:03:31,000 i / o მხოლოდ ლამაზი გზა განაცხადა, რომ შემავალი და გამომავალი. 116 00:03:31,000 --> 00:03:34,280 >> ასე რომ, ჯერჯერობით, ყველა ურთიერთქმედების ჩვენ გვქონდა კომპიუტერი 117 00:03:34,280 --> 00:03:36,770 დიდწილად თქვენი კლავიატურა და ეკრანი, 118 00:03:36,770 --> 00:03:40,770 მაგრამ არა იმდენად ხისტი, ან გადარჩენის ფაილი მიღმა პირობა 119 00:03:40,770 --> 00:03:41,620 თავს წერენ. 120 00:03:41,620 --> 00:03:44,570 თქვენი პროგრამების დღემდე არ ქმნის, და გადარჩენის, 121 00:03:44,570 --> 00:03:46,270 და განახლება საკუთარ ფაილი. 122 00:03:46,270 --> 00:03:47,150 >> ისე, რა ფაილი? 123 00:03:47,150 --> 00:03:48,105 ისე, რაღაც JPEG. 124 00:03:48,105 --> 00:03:50,520 ეს არის იმიჯი ალბათ აქვს ან ატვირთოს Facebook, 125 00:03:50,520 --> 00:03:51,690 ან ვხედავ სადმე ინტერნეტში. 126 00:03:51,690 --> 00:03:54,460 მართლაც, რომ სურათი, ჩვენ მხოლოდ ხერხი of Daven იყო JPEG. 127 00:03:54,460 --> 00:03:57,570 და რა არის საინტერესო ფაილი, როგორიცაა JPEGs 128 00:03:57,570 --> 00:04:02,170 არის ის, რომ შესაძლებელია მისი იდენტიფიცირება როგორც წესი, გარკვეული ნიმუში ბიტი. 129 00:04:02,170 --> 00:04:05,200 >> სხვა სიტყვებით რომ ვთქვათ, არის ის, რომ განასხვავებს JPEG საწყისი GIF 130 00:04:05,200 --> 00:04:08,109 საწყისი PING საწყისი სიტყვა დოკუმენტის Excel ფაილი? 131 00:04:08,109 --> 00:04:09,900 ისე, ეს მხოლოდ სხვადასხვა ნიმუში ბიტი. 132 00:04:09,900 --> 00:04:12,820 და იმ სხვადასხვა ნიმუშებია როგორც წესი, დასაწყისში იმ ფაილებს. 133 00:04:12,820 --> 00:04:18,200 >> ასე რომ, როდესაც თქვენი კომპიუტერი ხსნის Word doc, ან მაშინ, როცა კომპიუტერი ხსნის JPEG, 134 00:04:18,200 --> 00:04:20,940 ეს გამოიყურება, როგორც წესი, პირველი რამდენიმე ბიტი ფაილში. 135 00:04:20,940 --> 00:04:24,059 და თუ ის აღიარებს, ნიმუში, ის ამბობს, ო, ეს არის იმიჯი. 136 00:04:24,059 --> 00:04:25,850 მიადევნე თვალი ცარიელია მას მომხმარებლის გრაფიკული. 137 00:04:25,850 --> 00:04:27,870 ან, oh, ეს ჰგავს Word doc. 138 00:04:27,870 --> 00:04:30,480 მიადევნე თვალი აჩვენებს, რომ მომხმარებელს, როგორც ესსე. 139 00:04:30,480 --> 00:04:33,020 >> ასე მაგალითად, JPEGs, გამოდის, რომ არის 140 00:04:33,020 --> 00:04:35,460 საკმაოდ დახვეწილი ქვევმოთ hood. 141 00:04:35,460 --> 00:04:40,140 მაგრამ პირველი სამი ბაიტი უმეტეს ყოველ JPEG იწყება ამ სამი ნომრები. 142 00:04:40,140 --> 00:04:44,680 ასე რომ byte ნულოვანი, ერთი, და ორი არიან, ყველაზე ყველა JPEG, 255, შემდეგ ნომერი 143 00:04:44,680 --> 00:04:46,675 216, მაშინ ნომერი 255. 144 00:04:46,675 --> 00:04:48,990 >> და რა თქვენ გექნებათ უნდა დაიწყოს ამით მომავალ კვირას 145 00:04:48,990 --> 00:04:52,920 რეალურად გააღიზიანოს ქვეშ hood ფაილი როგორიცაა JPEGs 146 00:04:52,920 --> 00:04:57,210 და როგორც bitmap ფაილი და ხედავს, რა ყოველთვის არსებობს მანამ, 147 00:04:57,210 --> 00:04:58,650 როგორც თქვენ უკვე გამოყენებით კომპიუტერი. 148 00:04:58,650 --> 00:05:01,860 >> მაგრამ რა არის არ არის, როგორც წესი, იწერებოდეს ათობითი ნომრები მოსწონს ეს. 149 00:05:01,860 --> 00:05:04,620 კომპიუტერული მეცნიერები არ ტენდენცია საუბარი ათობითი. 150 00:05:04,620 --> 00:05:06,139 ისინი ნამდვილად არ არის საუბარი ორობითი. 151 00:05:06,139 --> 00:05:07,930 როგორც წესი, როდესაც გვინდა, გამოხატოს ნომრები, 152 00:05:07,930 --> 00:05:10,710 რეალურად გამოვიყენოთ თექვსმეტობითი, რომელიც თქვენ შეიძლება გავიხსენოთ 153 00:05:10,710 --> 00:05:13,027 , ვთქვათ, პრობლემა Set ერთი, რომელიც დაუპირისპირდა 154 00:05:13,027 --> 00:05:14,610 თქვენ უნდა ვიფიქროთ იმაზე, სხვადასხვა სისტემის. 155 00:05:14,610 --> 00:05:17,170 >> ჩვენ, რა თქმა უნდა, იცის ერთად ათობითი, ნულოვანი მეშვეობით ცხრა. 156 00:05:17,170 --> 00:05:18,215 ჩვენ ვისაუბრეთ ორობითი. 157 00:05:18,215 --> 00:05:20,710 და ჩვენ ნამდვილად არა აქვს უნდა გამოვიყენოთ, რომ ბევრი აქ 158 00:05:20,710 --> 00:05:22,470 on, იმიტომ, რომ კომპიუტერი გამოვიყენოთ რომ. 159 00:05:22,470 --> 00:05:24,900 მაგრამ პროგრამისტები კი ძალიან ხშირად, მაგრამ არა ყოველთვის, 160 00:05:24,900 --> 00:05:29,360 გამოყენება თექვსმეტობითი, რომელიც მხოლოდ იმას ნიშნავს, თქვენ გაქვთ 16 ასოების ანბანი, 161 00:05:29,360 --> 00:05:31,330 ნაცვლად ორი ან 10. 162 00:05:31,330 --> 00:05:34,530 >> ასე რომ, როგორ ითვლიან უმაღლესი ცხრა თექვსმეტობითი? 163 00:05:34,530 --> 00:05:41,120 მიდიხარ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, a, b, c, d, e, f, მხოლოდ კონვენციას. 164 00:05:41,120 --> 00:05:43,540 მაგრამ რა არის გასაღები, რომ თითოეული ეს არის ერთი სიმბოლო. 165 00:05:43,540 --> 00:05:44,340 არ არსებობს 10. 166 00:05:44,340 --> 00:05:48,400 არსებობს 11, თავისთავად, იმიტომ, რომ თითოეული თქვენი ციფრები, ისევე, როგორც ათობითი 167 00:05:48,400 --> 00:05:51,940 და ისევე, როგორც ორობითი, უნდა მხოლოდ იქნება ერთი ხასიათი, კონვენციას. 168 00:05:51,940 --> 00:05:55,280 >> ასე რომ მაშინ არის ანბანი გვაქვს ჩვენს ხელთ ამისთვის თექვსმეტობითი. 169 00:05:55,280 --> 00:05:58,600 რას JPEG გამოიყურება ასე, თუ თქვენ დაწერა იმ პირველი სამი 170 00:05:58,600 --> 00:06:01,980 ბაიტი არ როგორც ათობითი მაგრამ, მაგალითად, როგორც თექვსმეტობითი? 171 00:06:01,980 --> 00:06:03,640 და რატომ არის hex ყველაფერს, რაც სასარგებლოა? 172 00:06:03,640 --> 00:06:05,290 >> ასევე, სწრაფი შევხედოთ მაგალითს. 173 00:06:05,290 --> 00:06:09,030 ასე რომ, თუ წერენ, რომ ბიტი, წარმოადგენს ამ ათობითი ნომრები 174 00:06:09,030 --> 00:06:12,450 ეს შეიძლება იყოს პატარა დაჟანგული ახლა რამდენიმე კვირის უკან, 175 00:06:12,450 --> 00:06:14,820 მაგრამ მარცხენა და უფლება ერთი საკმაოდ მარტივია. 176 00:06:14,820 --> 00:06:17,990 255 ყველაზე დიდი რაოდენობის ჩვენ შეიძლება წარმოადგენს რვა ბიტი. 177 00:06:17,990 --> 00:06:18,820 ეს იყო ყველა პირობა. 178 00:06:18,820 --> 00:06:21,320 ასე რომ, მხოლოდ ერთი, რომ რბილად საინტერესო ის არის, შუა ერთი. 179 00:06:21,320 --> 00:06:24,700 და თუ ასეთი გავაკეთებთ მათემატიკის, თქვენ დავასკვნათ, რომ, მართლაც, 180 00:06:24,700 --> 00:06:27,949 რომ ნიმუში ერთი და zeros წარმოადგენს 216. 181 00:06:27,949 --> 00:06:30,240 მოდით უბრალოდ ითვალისწინებს ახლა, რომ ეს არის სწორი. 182 00:06:30,240 --> 00:06:31,730 მაგრამ რატომ არის ეს საინტერესო? 183 00:06:31,730 --> 00:06:33,970 >> ასევე, byte, რა თქმა უნდა, არის რვა ბიტი. 184 00:06:33,970 --> 00:06:38,980 და აღმოჩნდება, რომ თუ თქვენ ფიქრობთ ერთი byte როგორც ორი მოცულობით ოთხი ბიტი, 185 00:06:38,980 --> 00:06:39,500 მოსწონს ეს. 186 00:06:39,500 --> 00:06:41,000 ნება მომეცით უბრალოდ დაამატოთ გარკვეული სივრცე. 187 00:06:41,000 --> 00:06:42,550 ასე რომ, სანამ მას შემდეგ, რაც. 188 00:06:42,550 --> 00:06:46,520 მე უბრალოდ დასძინა ზოგიერთი თეთრი სივრცე ვიზუალიზაცია გულისთვის აქ. 189 00:06:46,520 --> 00:06:51,840 როგორ შეიძლება ჩვენ ახლა წარმოადგენენ, ვთქვათ, თექვსმეტობითი ყოველი quad ბიტი, 190 00:06:51,840 --> 00:06:52,880 თითოეული კომპლექტი ოთხი ბიტი? 191 00:06:52,880 --> 00:06:56,420 >> ასე მაგალითად, მარცხენა ახლა, ჩვენ გვაქვს 1111 წელს ორობითი. 192 00:06:56,420 --> 00:07:00,420 რა არის ეს ნომერი ათობითი, თუ გარეთ მათემატიკის? 193 00:07:00,420 --> 00:07:03,780 თქვენ უნდა პირობა ადგილი, twos ადგილი, ოთხივე ადგილი, და მერვე ადგილი. 194 00:07:03,780 --> 00:07:04,341 >> აუდიტორია: 15. 195 00:07:04,341 --> 00:07:05,340 დევიდ ჯ Malan: ეს 15. 196 00:07:05,340 --> 00:07:08,340 ასე რომ, თუ ჩვენ გავაკეთებთ რვა პლუს ოთხი პლუს ორი პლუს ერთი, მივიღებთ 15. 197 00:07:08,340 --> 00:07:11,790 ასე რომ მე ვერ დაწერეთ 15 ქვემოთ 1111, არამედ მთელი საქმე აქ 198 00:07:11,790 --> 00:07:13,190 არის თექვსმეტობითი, არ ათობითი. 199 00:07:13,190 --> 00:07:17,310 ასე რომ ნაცვლად წერა ქვემოთ 15, 1-5, მე ვაპირებ წერენ, რომ hex, 200 00:07:17,310 --> 00:07:22,311 რომელიც, თუ თქვენ ფიქრობთ, თუ თქვენ გაქვთ ნულოვანი მეშვეობით f, რა არის 15 იქნება? 201 00:07:22,311 --> 00:07:22,810 აუდიტორია: ვ. 202 00:07:22,810 --> 00:07:24,434 დევიდ ჯ Malan: ასე რომ, აღმოჩნდება, რომ ეს ის F. 203 00:07:24,434 --> 00:07:29,140 და შეგიძლიათ მუშაობა, რომ, სწორედ ამაზე კარგად, თუ არის 10, მაშინ OK, f არის 15. 204 00:07:29,140 --> 00:07:33,250 ასე რომ, რა თქმა უნდა, ჩვენ ვერ გადაწერა ეს იგივე კომპლექტი ნომრები f f. 205 00:07:33,250 --> 00:07:35,750 და შემდეგ, თუ ჩვენ ცოტა მათემატიკის, ჩვენ დავასკვნათ, რომ სწორედ დ. 206 00:07:35,750 --> 00:07:38,650 რვა საკმაოდ მარტივია, რადგან ჩვენ გაქვთ ერთი მერვე ადგილი. 207 00:07:38,650 --> 00:07:40,620 და მაშინ, ჩვენ გვაქვს რამდენიმე f f ს. 208 00:07:40,620 --> 00:07:44,669 >> ასე რომ, რასაც ადამიანები, როგორც წესი, ამის გაკეთება კონვენციის როდესაც ისინი თექვსმეტობითი არის, რომ ისინი უბრალოდ 209 00:07:44,669 --> 00:07:47,710 წერენ რომ ეს ცოტა უფრო მოკლედ, მოშორება ყველაზე მეტად, რომ თეთრი სივრცე. 210 00:07:47,710 --> 00:07:50,890 და მხოლოდ სუპერ ნათელი მკითხველს, რომ ეს არის თექვსმეტობითი, 211 00:07:50,890 --> 00:07:54,670 მარტივი კონვენციის შორის ადამიანებში წერთ zero 212 00:07:54,670 --> 00:07:58,000 x, რომელსაც არ აქვს მნიშვნელობა სხვა ვიდრე ვიზუალური იდენტიფიკატორი, 213 00:07:58,000 --> 00:07:59,590 აქ მოდის hex ნომერი. 214 00:07:59,590 --> 00:08:04,210 >> და შემდეგ, თქვენ დააყენა ორი ციფრი, f f ამ შემთხვევაში, მაშინ d, მაშინ f f. 215 00:08:04,210 --> 00:08:06,700 ასე მოკლედ, თექვსმეტობითი მხოლოდ tends 216 00:08:06,700 --> 00:08:11,990 უნდა იყოს სასარგებლო, რადგან მისი თითოეული ციფრები, ნულოვანი მეშვეობით f, შესანიშნავად ხაზები 217 00:08:11,990 --> 00:08:13,880 ერთად ნიმუში ოთხი ბიტი. 218 00:08:13,880 --> 00:08:18,080 >> ასე რომ, თუ თქვენ გაქვთ ორი თექვსმეტობითი ციფრები, ნულოვანი მეშვეობით F, ისევ და ისევ, 219 00:08:18,080 --> 00:08:20,256 რომელიც გაძლევთ სრულყოფილად რვა ბიტი ან ერთი ბაიტი. 220 00:08:20,256 --> 00:08:22,380 ასე რომ, ამიტომ ეს ტენდენცია შეიძლება პირობითად სასარგებლო. 221 00:08:22,380 --> 00:08:24,990 არ არსებობს ინტელექტუალური content ნამდვილად მიღმა, 222 00:08:24,990 --> 00:08:27,010 გარდა მისი ფაქტობრივი სასარგებლო. 223 00:08:27,010 --> 00:08:29,310 >> ახლა JPEGs არ არიან მხოლოდ ფაილის ფორმატების გრაფიკა. 224 00:08:29,310 --> 00:08:33,230 თქვენ ალბათ გახსოვთ, რომ არსებობს ფაილები მოსწონს ეს მსოფლიოში, 225 00:08:33,230 --> 00:08:34,830 თუნდაც რამდენიმე წლის უკან. 226 00:08:34,830 --> 00:08:37,580 >> ასე რომ, ეს იყო, ფაქტობრივად, დაყენებული Windows XP 227 00:08:37,580 --> 00:08:39,960 მილიონობით ები მთელს მსოფლიოში. 228 00:08:39,960 --> 00:08:43,000 და ეს იყო Bitmap ფაილი, BMP. 229 00:08:43,000 --> 00:08:47,690 და Bitmap ფაილი, როგორც თქვენ იხილეთ შემდეგი კვირას, მხოლოდ იმას ნიშნავს, წერტილების წყობა, 230 00:08:47,690 --> 00:08:51,710 pixels, როგორც ისინი უწოდებენ, რუკა ბიტი, ნამდვილად. 231 00:08:51,710 --> 00:08:55,160 >> რა საინტერესოა, თუმცა, ამ ფაილის ფორმატი, BMP, არის 232 00:08:55,160 --> 00:08:58,590 რომ ქვეშ Hood, ეს მეტი, ვიდრე უბრალოდ სამი ბაიტი 233 00:08:58,590 --> 00:09:01,020 რომ დაკომპლექტებას თავისი თავით, ისე ვთქვათ, პირველი რამდენიმე ნაკბენები. 234 00:09:01,020 --> 00:09:03,330 ის რეალურად გამოიყურება პატარა ართულებს ერთი შეხედვით. 235 00:09:03,330 --> 00:09:04,704 და თქვენ ვხედავთ ამ P კომპლექტი. 236 00:09:04,704 --> 00:09:06,810 და სულ რაღაც განსაკუთრებით, ეს ახლა 237 00:09:06,810 --> 00:09:10,720 ასე არ არის მნიშვნელოვანი, რადგან მხოლოდ ის ფაქტი, დასაწყისში ყველა bitmap 238 00:09:10,720 --> 00:09:13,823 ფაილი, გრაფიკული ფორმატი, არსებობს მთელი bunch of ნომრები. 239 00:09:13,823 --> 00:09:14,980 240 00:09:14,980 --> 00:09:16,720 >> ახლა Microsoft, ავტორი ამ ფორმატში, 241 00:09:16,720 --> 00:09:18,820 ტენდენცია მოვუწოდებთ მათ, რამ არ ints და სიმბოლო 242 00:09:18,820 --> 00:09:22,259 და მოძრავი, მაგრამ სიტყვა და d სიტყვა და longs და ბაიტი. 243 00:09:22,259 --> 00:09:23,800 ასე რომ, ისინი უბრალოდ სხვადასხვა ტიპის მონაცემები. 244 00:09:23,800 --> 00:09:25,170 ისინი სხვადასხვა სახელები იგივე რამ. 245 00:09:25,170 --> 00:09:26,740 მაგრამ დაინახავთ, რომ P კომპლექტი ოთხი. 246 00:09:26,740 --> 00:09:31,450 >> მაგრამ ეს არის მხოლოდ იმის თქმა, რომ, თუ ადამიანს ორმაგი დაწკაპუნებით რამოდენიმე .BMP ფაილი მისი 247 00:09:31,450 --> 00:09:35,015 ან მისი მყარ დისკზე, და ფანჯარა იხსნება აჩვენებს მას, რომ გამოსახულება, 248 00:09:35,015 --> 00:09:38,500 რომ მოხდა იმიტომ, რომ ოპერაციული სისტემის სავარაუდოდ შენიშნა არა მხოლოდ 249 00:09:38,500 --> 00:09:41,460 .BMP გაფართოება ფაილის სახელი, 250 00:09:41,460 --> 00:09:45,010 არამედ ის ფაქტი, რომ არსებობს გარკვეული კონვენციის ნიმუში ბიტი 251 00:09:45,010 --> 00:09:47,490 თავიდანვე რომ bitmap ფაილი. 252 00:09:47,490 --> 00:09:50,270 >> მაგრამ მოდით ახლა ფოკუსირება ასეთი რთული ფაილი, 253 00:09:50,270 --> 00:09:52,120 მაგრამ ნაცვლად რაღაც მსგავსი. 254 00:09:52,120 --> 00:09:55,190 დავუშვათ, აქ gedit, I უბრალოდ დასაწყისი 255 00:09:55,190 --> 00:09:57,070 პროგრამა, რომელიც საკმაოდ მარტივია. 256 00:09:57,070 --> 00:09:58,860 მაქვს რამდენიმე მდე დაბრუნება. 257 00:09:58,860 --> 00:10:02,120 ახლა მაქვს # include "structs.h", მაგრამ მე დავბრუნდები, რომ ამ მომენტში. 258 00:10:02,120 --> 00:10:03,974 მაგრამ ეს სასარგებლო არ არის. 259 00:10:03,974 --> 00:10:05,890 ასე რომ ეს არის პროგრამა, რომ აპირებს განახორციელოს 260 00:10:05,890 --> 00:10:07,335 როგორიცაა რეგისტრატორის მონაცემთა ბაზაში. 261 00:10:07,335 --> 00:10:09,710 მონაცემთა ბაზის სტუდენტები, და ყველა სტუდენტს მსოფლიოში 262 00:10:09,710 --> 00:10:13,190 აქვს სახელი და სახლი და ალბათ ზოგიერთი სხვა პერსონალი, მაგრამ ამას შენარჩუნება ეს მარტივი. 263 00:10:13,190 --> 00:10:15,140 ყველა სტუდენტს აქვს სახელი და სახლი. 264 00:10:15,140 --> 00:10:17,700 >> თუ მინდოდა დაწერა პროგრამა, რომლის მიზანი ცხოვრებაში 265 00:10:17,700 --> 00:10:19,860 იყო მხოლოდ iterate საწყისი ნულოვანი სამ, 266 00:10:19,860 --> 00:10:22,070 თუ არსებობს სამი სტუდენტები ჰარვარდის უნივერსიტეტი. 267 00:10:22,070 --> 00:10:25,350 და მინდა მიიღოთ გამოყენებით GetString, თითოეული სტუდენტის სახელი და სახლი, 268 00:10:25,350 --> 00:10:26,600 და შემდეგ უბრალოდ ბეჭდვა იმ. 269 00:10:26,600 --> 00:10:28,630 >> ეს არის სახის მოსწონს კვირა ერთი, კვირა ორი პერსონალის ახლა, 270 00:10:28,630 --> 00:10:30,810 სადაც მე უბრალოდ for მარყუჟი ან რამე მაგდაგვარს. 271 00:10:30,810 --> 00:10:34,500 და მინდა მოვუწოდო GetString რამდენიმე ჯერ, და შემდეგ ამობეჭდოთ f რამდენჯერმე. 272 00:10:34,500 --> 00:10:37,340 ასე როგორ შეიძლება მე ამის გაკეთება, თუმცა, როდესაც ორივე სახელი და სახლი 273 00:10:37,340 --> 00:10:39,070 ჩართული თითოეული სტუდენტი? 274 00:10:39,070 --> 00:10:42,830 >> ასე რომ, ჩემი პირველი ინსტიქტი შეიძლება უნდა გავაკეთოთ მსგავსი რამ. 275 00:10:42,830 --> 00:10:49,620 მე პირველ რიგში ვთქვათ, რომ მომეცი, ამბობენ, მასივი სიმები მოუწოდა სახელები. 276 00:10:49,620 --> 00:10:51,530 და მე არ მინდა, რომ hardcode სამი აქ. 277 00:10:51,530 --> 00:10:53,064 რა მინდა იქ? 278 00:10:53,064 --> 00:10:55,730 ასე რომ სტუდენტებს, იმიტომ, რომ მხოლოდ მუდმივი გამოცხადდა ზედა, 279 00:10:55,730 --> 00:10:57,860 უბრალოდ მე არ უნდა hardcode სამი სხვადასხვა ადგილებში. 280 00:10:57,860 --> 00:11:00,859 ეს გზა, მე შეუძლია შეცვალოს ის ერთი ადგილი, და ეს გავლენას ახდენს ცვლილება ყველგან. 281 00:11:00,859 --> 00:11:04,470 და შემდეგ, შეიძლება ამის გაკეთება string ტიპის სახლები სტუდენტებს. 282 00:11:04,470 --> 00:11:10,250 >> და ახლა, მე შეიძლება რაღაც მოსწონს (int i = 0; i <სტუდენტები, i ++. 283 00:11:10,250 --> 00:11:14,390 ამიტომ მე აკრეფით სწრაფად, მაგრამ ეს ალბათ იცნობს სინტაქსი არის. 284 00:11:14,390 --> 00:11:17,030 >> და ახლა, ეს იყო ბოლოდროინდელი. 285 00:11:17,030 --> 00:11:22,890 თუ მინდა, რომ დააყენა i-th სტუდენტის სახელი, მე ვფიქრობ, რომ ამის გაკეთება. 286 00:11:22,890 --> 00:11:26,480 და მაშინ, არა სახელები მაგრამ სახლების bracket i. 287 00:11:26,480 --> 00:11:29,930 მე ამის გაკეთება, GetString, და მოდით ჩემთვის უკან დაბრუნება და ამ ხაზის. 288 00:11:29,930 --> 00:11:30,430 ეთანხმებით? 289 00:11:30,430 --> 00:11:31,200 არ ვეთანხმები? 290 00:11:31,200 --> 00:11:32,366 ეს არ არის ძალიან მოსახერხებელი. 291 00:11:32,366 --> 00:11:33,890 მე არ უთხრა შესახებ, რაც უნდა გააკეთოს. 292 00:11:33,890 --> 00:11:36,520 >> მაგრამ ახლა, თუ მე ასევე სასურველი შემდეგ, მოდით 293 00:11:36,520 --> 00:11:40,060 ვთქვათ, ბეჭდვა ეს ყველაფერი აღმოჩნდა, ასე რომ TODO შემდეგ. 294 00:11:40,060 --> 00:11:42,330 მე ვაპირებ უფრო მეტი ამას ეს სავარაუდოდ არის 295 00:11:42,330 --> 00:11:45,970 სწორი განხორციელება მიღების სახელები და სახლები, სამი 296 00:11:45,970 --> 00:11:48,870 მათ შორის სულ ყოველი, საწყისი მომხმარებელს. 297 00:11:48,870 --> 00:11:51,280 >> მაგრამ ეს არ არის ძალიან კარგი დიზაინი, არა? 298 00:11:51,280 --> 00:11:55,220 რა მოხდება, თუ სტუდენტი აქვს არა მხოლოდ სახელი და სახლი, არამედ პირადობის მოწმობის ნომერი, 299 00:11:55,220 --> 00:11:57,770 და ტელეფონის ნომერი, და ელექტრონული ფოსტის მისამართი, 300 00:11:57,770 --> 00:12:00,280 და შესაძლოა მთავარ გვერდზე და იქნებ Twitter სახელური, 301 00:12:00,280 --> 00:12:03,730 და ნებისმიერი რაოდენობის სხვა დეტალები ასოცირებული სტუდენტი ან პირი, 302 00:12:03,730 --> 00:12:04,610 ზოგადად. 303 00:12:04,610 --> 00:12:07,720 როგორ გვინდა დაიწყოს დაამატოთ ფუნქციონირება ამ პროგრამაში? 304 00:12:07,720 --> 00:12:14,080 >> ისე, მე ვგრძნობ, როგორიცაა მარტივი გზა შეიძლება უნდა გავაკეთოთ რაღაც, ასე ვთქვათ, 305 00:12:14,080 --> 00:12:16,490 int პირადობის სტუდენტებს. 306 00:12:16,490 --> 00:12:18,380 ასე, რომ შეიძლება დააყენოს ყველა მათი პირადობის მოწმობების არსებობს. 307 00:12:18,380 --> 00:12:22,240 და შემდეგ, რაღაც როგორიცაა ტელეფონის ნომრები, 308 00:12:22,240 --> 00:12:24,400 მე არ ვარ დარწმუნებული, თუ როგორ უნდა წარმოადგენს, რომ უბრალოდ არ არის. 309 00:12:24,400 --> 00:12:30,280 მოდით წავიდეთ წინ და უბრალოდ დარეკეთ ამ Twitters სტუდენტი, რომელიც 310 00:12:30,280 --> 00:12:33,550 ცოტა უცნაურია, but-- და bunch სხვა სფეროებში. 311 00:12:33,550 --> 00:12:36,360 >> მე დაიწყო ეფექტურად დააკოპირეთ და ჩასვით აქ. 312 00:12:36,360 --> 00:12:39,416 და ეს აპირებს იზრდება საკმაოდ unwieldy საკმაოდ სწრაფად, არა? 313 00:12:39,416 --> 00:12:42,290 არ იქნება ლამაზი თუ იყო მსოფლიოში მონაცემები სტრუქტურა ცნობილია 314 00:12:42,290 --> 00:12:45,600 არა როგორც int ან string, მაგრამ რაღაც მაღალ დონეზე, აბსტრაქცია, ისე 315 00:12:45,600 --> 00:12:47,570 საუბარი, რომელიც ცნობილია როგორც სტუდენტი? 316 00:12:47,570 --> 00:12:50,220 C არ მოდის ჩაშენებული ფუნქციონალური სტუდენტები, 317 00:12:50,220 --> 00:12:52,260 მაგრამ რა, თუ მინდოდა მისცეს მას ასეთი? 318 00:12:52,260 --> 00:12:55,640 >> ასევე, თურმე, მე ვაპირებ გახსნა ფაილი სახელად structs.h აქ, 319 00:12:55,640 --> 00:12:57,090 და შეგიძლიათ ზუსტად რომ. 320 00:12:57,090 --> 00:12:58,290 და ჩვენ ვაპირებთ დავიწყოთ ამით არის. 321 00:12:58,290 --> 00:13:01,490 და ქვეშ hood of P კომპლექტი სამი, თქვენ უკვე აკეთებს ეს ახლა. 322 00:13:01,490 --> 00:13:05,920 არ არსებობს ასეთი რამ, როგორც g rect ან გ ოვალური პროგრამირების ენა C. 323 00:13:05,920 --> 00:13:10,570 >> ეგ სტენფორდის ხორციელდება იმ მონაცემთა ტიპები გამოყენებით ეს მიდგომა აქ, 324 00:13:10,570 --> 00:13:13,900 გამოცხადების საკუთარი ახალი მონაცემები ტიპის გამოყენებით ახალი სიტყვით 325 00:13:13,900 --> 00:13:16,744 ე.წ. struct და სხვა ერთი ე.წ. typedef. 326 00:13:16,744 --> 00:13:19,660 და მართლაც, მიუხედავად იმისა, რომ სინტაქსი გამოიყურება ცოტა განსხვავებული პერსონალი 327 00:13:19,660 --> 00:13:23,550 ჩვენ ვნახეთ ადრე, პრინციპში, ეს სუპერ მარტივი. 328 00:13:23,550 --> 00:13:25,297 >> ეს უბრალოდ ნიშნავს "განსაზღვროს ტიპის." 329 00:13:25,297 --> 00:13:27,255 რომ იქნება სტრუქტურა და სტრუქტურა 330 00:13:27,255 --> 00:13:29,400 ისევე, როგორც საკონტეინერო მრავალჯერადი რამ. 331 00:13:29,400 --> 00:13:31,780 და რომ ის აპირებს აქვს სიმებიანი მოუწოდა სახელი, 332 00:13:31,780 --> 00:13:33,210 და სიმებიანი მოუწოდა სახლში. 333 00:13:33,210 --> 00:13:37,520 და მოდით მოვუწოდებთ, უბრალოდ მოხერხებულობის, მთელი ამ მონაცემების სტრუქტურას სტუდენტი. 334 00:13:37,520 --> 00:13:40,320 >> ასე რომ, ამ მომენტში თქვენ მისაღებად მძიმით, თქვენ ახლა 335 00:13:40,320 --> 00:13:43,280 შექმენით თქვენი საკუთარი მონაცემები ტიპი ე.წ. სტუდენტი 336 00:13:43,280 --> 00:13:46,420 რომელიც ახლა დგას ერთად int, და float და char, და სიმებიანი, 337 00:13:46,420 --> 00:13:50,270 და გ rect და გ ოვალური, და ნებისმიერი რაოდენობის სხვა რამ ადამიანი გამოიგონეს. 338 00:13:50,270 --> 00:13:53,340 >> ასე რომ, რა არის სასარგებლო ამ ახლა ის არის, რომ, თუ მე დაბრუნდეს 339 00:13:53,340 --> 00:13:57,430 to struct 0 და დასრულდება ეს განხორციელება, რომელიც მე დავწერე 340 00:13:57,430 --> 00:14:02,080 წინასწარ აქ შეამჩნევთ, რომ ყველა გარდაუვალი messiness, რომ 341 00:14:02,080 --> 00:14:05,490 ვიყავი დაახლოებით უნდა დაიწყოს ხდება, როგორც მე დასძინა ტელეფონის ნომრები და Twitters და ყველა 342 00:14:05,490 --> 00:14:07,370 ეს სხვა რამ სტუდენტის განმარტება, 343 00:14:07,370 --> 00:14:11,810 ახლა კი მოკლედ დაასრულა როგორც მხოლოდ ერთი მასივი სტუდენტებს. 344 00:14:11,810 --> 00:14:15,500 >> და თითოეული მათგანი, სტუდენტები აქვს მრავალი რამ შიგნით მას. 345 00:14:15,500 --> 00:14:16,930 ასე რომ ტოვებს ერთი შეკითხვა. 346 00:14:16,930 --> 00:14:19,700 როგორ იღებთ at სახელი, და სახლი, და ID, 347 00:14:19,700 --> 00:14:21,640 და რიცხვში შიგნით სტუდენტი? 348 00:14:21,640 --> 00:14:22,930 სუპერ მარტივია, ისევე. 349 00:14:22,930 --> 00:14:25,730 ახალი სინტაქსი, მაგრამ მარტივი იდეა. 350 00:14:25,730 --> 00:14:29,239 >> თქვენ უბრალოდ შევიდა მასივი, როგორც ჩვენ გავაკეთეთ გასულ კვირას და ეს. 351 00:14:29,239 --> 00:14:31,030 და რაც აშკარად ახალი ნაჭერი სინტაქსი? 352 00:14:31,030 --> 00:14:32,590 353 00:14:32,590 --> 00:14:35,880 მხოლოდ., რაც ნიშნავს "შევსულიყავით სტრუქტურა და კიდევ სფეროში მოუწოდა 354 00:14:35,880 --> 00:14:39,030 სახელი, კიდევ სფეროში მოუწოდა სახლი, კიდევ სფეროში მოუწოდა სტუდენტი. " 355 00:14:39,030 --> 00:14:41,940 >> ასე რომ, P კომპლექტი სამი, თუ თქვენ ჯერ კიდევ მუშაობს, რომ, 356 00:14:41,940 --> 00:14:44,020 და ყველაზე ეგ მაინც არიან, გააცნობიეროს, რომ, როგორც თქვენ 357 00:14:44,020 --> 00:14:46,130 დაიწყოს გამოყენებით რამ, როგორიცაა გ rects და გ ovals 358 00:14:46,130 --> 00:14:50,201 და სხვა რამ, რაც არ ჩანს მოდის კვირეული Zero, ერთი, ან ორი, 359 00:14:50,201 --> 00:14:52,950 გააცნობიეროს, რომ სწორედ იმიტომ, რომ სტენფორდის განაცხადა რამდენიმე ახალი ტიპის მონაცემები. 360 00:14:52,950 --> 00:14:56,160 >> და მართლაც, სწორედ ის, რაც ჩვენ გამოგიგზავნით ამის გაკეთება, ისევე, P კომპლექტი ოთხი, როდესაც 361 00:14:56,160 --> 00:14:59,880 ჩვენ ვიწყებთ, უნდა მოგვარდეს რამ როგორიცაა სურათები, bitmaps, და სხვა. 362 00:14:59,880 --> 00:15:02,882 ასე რომ მხოლოდ teaser და გონებრივი მოდელი რა არის მოვა. 363 00:15:02,882 --> 00:15:04,590 ახლა, მე არ წარადგინეს ცოტა ამ დილით. 364 00:15:04,590 --> 00:15:09,560 მე ასეთი საინტერესოა რა Microsoft ფონი რეალურად 365 00:15:09,560 --> 00:15:10,310 ჰგავს დღეს. 366 00:15:10,310 --> 00:15:15,200 და თურმე ვიღაცას 2006 რეალურად წავიდა თითქმის ზუსტად 367 00:15:15,200 --> 00:15:19,210 იმავე ადგილზე ფოტოს სინამდვილეში როგორც ჩანს, რომ ამ დღეებში. 368 00:15:19,210 --> 00:15:21,380 სფეროში არის პატარა overgrown. 369 00:15:21,380 --> 00:15:24,850 >> ასე ვსაუბრობთ, სურათებით, მოდით, რათა დაიბრუნოს Daven აქ 370 00:15:24,850 --> 00:15:26,890 ეკრანზე და ნიკოლოზი, და მხოლოდ შეგახსენოთ 371 00:15:26,890 --> 00:15:30,540 რომ თუ მინდა შემოგვიერთდით ლანჩზე ამ პარასკევს, ხელმძღვანელი ჩვენი ჩვეულებრივი URL 372 00:15:30,540 --> 00:15:31,440 აქ. 373 00:15:31,440 --> 00:15:33,530 >> ასე რომ, სად ჩვენ დატოვონ off ორშაბათს? 374 00:15:33,530 --> 00:15:35,140 ჩვენ გააცნო ამ პრობლემა, არა? 375 00:15:35,140 --> 00:15:37,610 ეს, როგორც ჩანს, სწორი განხორციელების swap, 376 00:15:37,610 --> 00:15:40,460 რომლის დროსაც თქვენ აღების ორი ints, ერთი ე.წ., ერთი მოუწოდა b, 377 00:15:40,460 --> 00:15:44,130 სვოპ მათ, ისევე, როგორც Laura გააკეთა აქ სცენაზე ერთად რძე და წყალი, 378 00:15:44,130 --> 00:15:46,820 გამოყენებით დროებითი ცვლადი, ან ცარიელი ჭიქა, 379 00:15:46,820 --> 00:15:50,540 ისე, რომ ჩვენ შეგვიძლია b წლის და წელს b გარეშე მიღების სასადილო რამ. 380 00:15:50,540 --> 00:15:51,560 ჩვენ ძალიან განსხვავებულია. 381 00:15:51,560 --> 00:15:52,870 ეს ე.წ. დროებითი. 382 00:15:52,870 --> 00:15:55,520 >> მაგრამ რა იყო ფუნდამენტური პრობლემა კოდი ორშაბათს? 383 00:15:55,520 --> 00:15:57,700 384 00:15:57,700 --> 00:15:58,870 რა იყო პრობლემა აქ? 385 00:15:58,870 --> 00:16:00,106 386 00:16:00,106 --> 00:16:00,605 Yeah. 387 00:16:00,605 --> 00:16:01,970 >> აუდიტორია: ეს იკავებს მეტი სივრცე. 388 00:16:01,970 --> 00:16:04,719 >> დევიდ ჯ Malan: იკავებს მეტი სივრცეში, რადგან მე გამოყენებით ცვლადი, 389 00:16:04,719 --> 00:16:05,400 და ეს OK. 390 00:16:05,400 --> 00:16:07,300 ეს მართლაც ასეა, მაგრამ მე ვაპირებ ვთქვა, რომ კარგადაა. 391 00:16:07,300 --> 00:16:10,030 ის მხოლოდ 32 ბიტი გრანდიოზული სქემა რამ, ასე რომ არ არის დიდი გარიგება. 392 00:16:10,030 --> 00:16:10,655 სხვა აზრები? 393 00:16:10,655 --> 00:16:12,572 აუდიტორია: ეს მხოლოდ სვოპ ცვლადები ადგილობრივად. 394 00:16:12,572 --> 00:16:13,571 დევიდ ჯ Malan: ზუსტად. 395 00:16:13,571 --> 00:16:15,090 ეს მხოლოდ სვოპების ცვლადები ადგილობრივად. 396 00:16:15,090 --> 00:16:18,173 რადგან ნებისმიერ დროს რეკავთ ფუნქცია როდესაც მქონდა ქაღალდის საწყისი Annenberg 397 00:16:18,173 --> 00:16:19,840 ბოლო დროს, თქვენ უნდა main ბოლოში. 398 00:16:19,840 --> 00:16:23,560 როგორც კი რეკავთ ფუნქცია მოუწოდა swap, swap არ მიიღოთ x და y, 399 00:16:23,560 --> 00:16:24,400 ორიგინალური ღირებულებებს. 400 00:16:24,400 --> 00:16:26,392 რას აკეთებს swap მიიღოს, ჩვენ არ მოითხოვოს? 401 00:16:26,392 --> 00:16:27,100 აუდიტორია: ასლები. 402 00:16:27,100 --> 00:16:28,090 დევიდ ჯ Malan: ასე რომ ასლები მათ. 403 00:16:28,090 --> 00:16:31,120 ამიტომ იგი იღებს ერთი და ორი, თუ გავიხსენოთ ბოლო დროს, 404 00:16:31,120 --> 00:16:34,730 მაგრამ ასლი ერთი და ორი წარმატებულად გაცვალეს. 405 00:16:34,730 --> 00:16:38,550 მაგრამ, სამწუხაროდ, ბოლოს და ბოლოს, ეს ღირებულებები რჩება. 406 00:16:38,550 --> 00:16:41,880 ასე რომ, ჩვენ ვხედავთ ამ ჩვენს ახალ მეგობარს, იმედია GDB, 407 00:16:41,880 --> 00:16:45,180 რომ თქვენ ან TFs და Ca-ს აქვს უკვე სახელმძღვანელო თქვენ მიმართ ასეთია. 408 00:16:45,180 --> 00:16:51,210 >> ასე რომ არ swap გაწვევას გამოიყურება მოსწონს მოდით გახსნას ამას ასე გამოიყურება. 409 00:16:51,210 --> 00:16:54,160 ჩვენ ინიციალიზაცია x ერთი, y ორი. 410 00:16:54,160 --> 00:16:55,620 მქონდა bunch of ბეჭდვითი ვ ს. 411 00:16:55,620 --> 00:16:58,080 მაგრამ შემდეგ, გასაღები დარეკეთ აქ იყო სვოპ, რომელიც 412 00:16:58,080 --> 00:17:00,260 არის ზუსტად კოდი ჩვენ უბრალოდ დაინახა მომენტში წინ. 413 00:17:00,260 --> 00:17:03,180 რომელიც არის სწორი თავდაპირველად ერთი შეხედვით, მაგრამ ფუნქციურად 414 00:17:03,180 --> 00:17:06,800 ეს პროგრამა არ იმუშავებს, რადგან ის მუდმივად არ სვოპ x და y. 415 00:17:06,800 --> 00:17:10,190 >> მოდით ვნახოთ ეს, სწრაფი თბილი აქ GDB, ./noswap. 416 00:17:10,190 --> 00:17:11,867 417 00:17:11,867 --> 00:17:15,200 რამოდენიმე დიდი ინფორმაცია, რომ მე მოშორება კონტროლის L ახლა. 418 00:17:15,200 --> 00:17:17,516 და ახლა, მე ვაპირებ წავიდეთ წინ და აწარმოებს მას. 419 00:17:17,516 --> 00:17:19,349 და სამწუხაროდ, რომ არ იყო, რომ სასარგებლოა. 420 00:17:19,349 --> 00:17:22,355 ის გაიქცა პროგრამა შიგნით პროგრამა მოუწოდა GDB, debugger, 421 00:17:22,355 --> 00:17:23,730 მაგრამ ეს არ მინდა poke გარშემო. 422 00:17:23,730 --> 00:17:26,229 >> ასე როგორ შეიძლება მე რეალურად პაუზის აღსრულების შიგნით ამ პროგრამის? 423 00:17:26,229 --> 00:17:27,410 424 00:17:27,410 --> 00:17:28,329 ასე შესვენება. 425 00:17:28,329 --> 00:17:32,340 და მე შეიძლება დაარღვიოს ნებისმიერი ხაზის ნომერი, ერთი, 10, 15. 426 00:17:32,340 --> 00:17:35,530 მაგრამ მე ასევე შეუძლია დაარღვიოს სიმბოლურად განაცხადა შესვენების მთავარი. 427 00:17:35,530 --> 00:17:38,980 და რომ აპირებს შექმნას შესვენების წერტილი, როგორც ჩანს, შეესაბამება 16 მთავარი. 428 00:17:38,980 --> 00:17:40,050 და სად არის line 16? 429 00:17:40,050 --> 00:17:42,960 მოდით ახვიდეთ კოდი და ახვიდეთ noswap. 430 00:17:42,960 --> 00:17:46,930 და მართლაც, ხაზი 16 არის პირველი პროგრამა. 431 00:17:46,930 --> 00:17:52,130 >> ახლა, თუ მე წავიდეთ წინ და ტიპის აწარმოებს ამ დროს, Enter, ის ათვისება. 432 00:17:52,130 --> 00:17:53,080 ასე რომ, მოდით poke გარშემო. 433 00:17:53,080 --> 00:17:55,716 ბეჭდვა x-- რატომ არის x ნულოვანი? 434 00:17:55,716 --> 00:17:56,705 435 00:17:56,705 --> 00:17:57,830 და იგნორირება დოლარის ნიშანი. 436 00:17:57,830 --> 00:17:59,725 ეს მხოლოდ fancier გამოყენება პროგრამა. 437 00:17:59,725 --> 00:18:00,780 438 00:18:00,780 --> 00:18:03,140 რატომ არის x ნულოვანი მომენტში? 439 00:18:03,140 --> 00:18:03,640 Yeah. 440 00:18:03,640 --> 00:18:07,061 >> აუდიტორია: ეს ათვისება სწორი, სანამ line 16, რეალურად არ on line 16. 441 00:18:07,061 --> 00:18:08,060 დევიდ ჯ Malan: ზუსტად. 442 00:18:08,060 --> 00:18:11,630 GDB, ჩვეულებრივ, უკვე შეჩერებულია შესრულების ადრე line 16. 443 00:18:11,630 --> 00:18:14,820 ასე რომ, ეს არ შეასრულა, რომელიც ნიშნავს x არის რაღაც უცნობი ღირებულება. 444 00:18:14,820 --> 00:18:17,150 და მივიღეთ გაუმართლა, რომ ეს რაღაც სუფთა, როგორიცაა ნულოვანი. 445 00:18:17,150 --> 00:18:20,310 ახლა თუ მე აკრიფოთ შემდეგი, ახლა მას შესრულებული 16. 446 00:18:20,310 --> 00:18:22,000 ის ელოდება ჩემთვის შეასრულოს 17. 447 00:18:22,000 --> 00:18:23,400 ნება მომეცით წავიდეთ წინ და ბეჭდვა x. 448 00:18:23,400 --> 00:18:24,094 ეს არის ერთ ერთი. 449 00:18:24,094 --> 00:18:25,260 ნება მომეცით წავიდეთ წინ და ბეჭდვა y. 450 00:18:25,260 --> 00:18:26,176 რა უნდა ახლა ვხედავ? 451 00:18:26,176 --> 00:18:27,660 452 00:18:27,660 --> 00:18:28,560 >> აუდიტორია: [INAUDIBLE] 453 00:18:28,560 --> 00:18:29,165 >> დევიდ ჯ Malan: ცოტა ხმამაღალი. 454 00:18:29,165 --> 00:18:30,040 >> აუდიტორია: [INAUDIBLE] 455 00:18:30,040 --> 00:18:30,537 456 00:18:30,537 --> 00:18:32,120 დევიდ ჯ Malan: არ საკმაოდ კონსენსუსის საფუძველზე. 457 00:18:32,120 --> 00:18:34,760 ასე რომ, დიახ, ჩვენ ვხედავთ, ზოგიერთი ნაგვის ღირებულება. 458 00:18:34,760 --> 00:18:37,862 ახლა, y 134514064 არსებობს. 459 00:18:37,862 --> 00:18:39,320 კარგად, უბრალოდ ზოგიერთი ნაგვის ღირებულება. 460 00:18:39,320 --> 00:18:41,350 ჩემი პროგრამა იყენებს RAM სხვადასხვა მიზნით. 461 00:18:41,350 --> 00:18:42,350 არსებობს სხვა ფუნქციებს. 462 00:18:42,350 --> 00:18:44,040 სხვა ადამიანი წერდა შიგნით ჩემი კომპიუტერი. 463 00:18:44,040 --> 00:18:46,789 ასე რომ, იმ ბიტი გამოიყენება სხვა ფასეულობები, და რა მე ხედავს 464 00:18:46,789 --> 00:18:49,470 არის ნარჩენებისგან გარკვეული ადრე გამოყენებით, რომ მეხსიერებაში. 465 00:18:49,470 --> 00:18:53,350 >> ასე რომ, არ არის დიდი გარიგება, რადგან როგორც კი როგორც მე აკრიფოთ შემდეგი და შემდეგ ბეჭდვა Y, 466 00:18:53,350 --> 00:18:55,640 ის ინიციალიზაცია ღირებულება, რომელიც მინდა. 467 00:18:55,640 --> 00:18:57,400 ახლა, მოდით, წავიდეთ წინ ცოტა უფრო სწრაფად. 468 00:18:57,400 --> 00:18:58,540 N მომავალი. 469 00:18:58,540 --> 00:18:59,570 მოდით ეს კიდევ ერთხელ. 470 00:18:59,570 --> 00:19:00,530 მოდით ეს კიდევ ერთხელ. 471 00:19:00,530 --> 00:19:02,404 მაგრამ მე არ მინდა მოხვდა აქ, იმიტომ, რომ, თუ მე 472 00:19:02,404 --> 00:19:05,110 გვინდა ვნახოთ, რა ხდება შიგნით swap, რა ბრძანება? 473 00:19:05,110 --> 00:19:05,520 >> აუდიტორია: ნაბიჯი. 474 00:19:05,520 --> 00:19:06,436 >> დევიდ ჯ Malan: ნაბიჯი. 475 00:19:06,436 --> 00:19:09,800 ასე რომ, ეს ნაბიჯები ჩემთვის შევიდა ფუნქცია, ვიდრე მას. 476 00:19:09,800 --> 00:19:12,270 და ახლა, ცოტა cryptic პატიოსნად, მაგრამ ეს მხოლოდ 477 00:19:12,270 --> 00:19:14,581 მეუბნებოდა, მე ხაზი 33 არის. 478 00:19:14,581 --> 00:19:15,580 და მოდით ეს კიდევ ერთხელ გავაკეთოთ. 479 00:19:15,580 --> 00:19:16,080 Print temp. 480 00:19:16,080 --> 00:19:17,129 481 00:19:17,129 --> 00:19:20,170 ნაგვის ღირებულება, ამჯერად უკვე ნეგატიური, მაგრამ ეს მხოლოდ კიდევ ნაგვის მნიშვნელობა. 482 00:19:20,170 --> 00:19:22,810 ასე რომ, მოდით შემდეგი, ბეჭდვითი temp. 483 00:19:22,810 --> 00:19:27,130 ის ინიციალიზაცია რომ 1, რაც იყო ღირებულება x, აკა. 484 00:19:27,130 --> 00:19:29,110 >> ახლა, სად არიან ჩვენი და X მოდის? 485 00:19:29,110 --> 00:19:32,510 ყურადღება მიაქციეთ, მთავარ, ჩვენ მოუწოდა ამ ღირებულებებს x და y. 486 00:19:32,510 --> 00:19:34,740 ჩვენ მაშინ გადასცა სვოპ ასეთია. 487 00:19:34,740 --> 00:19:37,010 X მოვიდა პირველი, მძიმე y. 488 00:19:37,010 --> 00:19:40,020 და შემდეგ, გაცვლა შეიძლება მოვუწოდებთ მათ x და y. 489 00:19:40,020 --> 00:19:42,630 მაგრამ სიწმინდე, ის უწოდა და ბ. 490 00:19:42,630 --> 00:19:45,970 მაგრამ და ბ ახლა იქნება ასლები x და y, შესაბამისად. 491 00:19:45,970 --> 00:19:50,660 >> ასე რომ, თუ მე უკან GDB, temp არის ერთი და არის ერთი. 492 00:19:50,660 --> 00:19:56,130 მაგრამ, თუ მომდევნო და ახლა ბეჭდვითი , უკვე გადავიდა. 493 00:19:56,130 --> 00:20:00,030 რძე შეედინება ყოფილი ფორთოხლის წვენი მინის, ან პირიქით. 494 00:20:00,030 --> 00:20:04,750 >> და თუ მომდევნო ერთხელ და ახლა თუ ამობეჭდოთ როგორც საღი აზრის შემოწმება, 495 00:20:04,750 --> 00:20:07,687 ჯერ კიდევ ორი, მაგრამ ბ არის ერთი. 496 00:20:07,687 --> 00:20:08,770 გულწრფელად ვამბობ, რომ ჯერ კიდევ არსებობს. 497 00:20:08,770 --> 00:20:10,670 მე არ მაინტერესებს, რა დროებითი. 498 00:20:10,670 --> 00:20:16,850 მაგრამ როგორც კი მე ახლა აკრიფოთ, ასე ვთქვათ, კვლავაც დაბრუნდეს, ახლა მე ბოლოს 499 00:20:16,850 --> 00:20:17,480 პროგრამა. 500 00:20:17,480 --> 00:20:20,730 და სამწუხაროდ, x არის კიდევ ერთი და y ჯერ კიდევ ორი. 501 00:20:20,730 --> 00:20:22,272 >> რა იყო სასარგებლო GDB იქ? 502 00:20:22,272 --> 00:20:23,980 ეს არ დამეხმარება გაასწორონ პრობლემა თავისთავად, 503 00:20:23,980 --> 00:20:26,265 მაგრამ ეს იმედია დამეხმარება მესმის, რომ ეს ხვდებიან 504 00:20:26,265 --> 00:20:30,000 დიახ, ჩემი ლოგიკა არის სწორი, მაგრამ ჩემი კოდი არ საბოლოოდ მქონე 505 00:20:30,000 --> 00:20:31,450 მუდმივი ზემოქმედება. 506 00:20:31,450 --> 00:20:34,570 ასე რომ, ეს პრობლემა ჩვენ ვაპირებ ახლა გადაწყვიტოს დღეს. 507 00:20:34,570 --> 00:20:37,870 >> მაგრამ მოდით კიდევ არსებობს გზა ამ. 508 00:20:37,870 --> 00:20:39,230 სიმებიანი არის ტყუილი. 509 00:20:39,230 --> 00:20:41,860 ეს, ძალიან, არ არის მონაცემები ტიპის რომ არსებობს C. ეს 510 00:20:41,860 --> 00:20:44,750 უკვე სინონიმი გარკვეული დრო რაღაც, 511 00:20:44,750 --> 00:20:47,300 და ჩვენ შეიძლება გამოავლინოს, რომ ასეთია. 512 00:20:47,300 --> 00:20:53,282 >> ნება მომეცით წავიდეთ წინ და ქმნის პროგრამას სახელწოდებით შედარების 0. 513 00:20:53,282 --> 00:20:56,240 და ვიდრე ამას ერთი, ჩვენ დავიწყებთ გავლა კოდი 514 00:20:56,240 --> 00:20:58,040 მე უკვე წერდა, მაგრამ ეს მხოლოდ რამდენიმე ხაზი. 515 00:20:58,040 --> 00:20:59,570 ასე რომ, ეს არის შედარება-0. 516 00:20:59,570 --> 00:21:02,380 და პირველი, რაც მე ვაკეთებ დღითიდღე ტექსტი. 517 00:21:02,380 --> 00:21:05,610 >> მაგრამ შეამჩნია რა მე ამით პირველად. 518 00:21:05,610 --> 00:21:07,910 რა არის ნათლად line 21? 519 00:21:07,910 --> 00:21:10,020 520 00:21:10,020 --> 00:21:11,402 რეალურად, დაველოდოთ წუთში. 521 00:21:11,402 --> 00:21:12,110 ეს არის ასლი ორი. 522 00:21:12,110 --> 00:21:13,568 რომ არ არის სწორი პროგრამა. 523 00:21:13,568 --> 00:21:14,780 ყველა უფლება spoiler alert. 524 00:21:14,780 --> 00:21:16,890 ყველა უფლება, ასე არასოდეს იბადება, რომ. 525 00:21:16,890 --> 00:21:18,520 რომ არის პასუხი, რომ მომავალში საკითხი. 526 00:21:18,520 --> 00:21:21,450 >> აქ არის შედარება-0, და მე იმის შესახებ, რომ ტექსტი. 527 00:21:21,450 --> 00:21:22,435 პროგრამის ბევრად უფრო მარტივია. 528 00:21:22,435 --> 00:21:23,560 ასე რომ, ეს არის უშუალო. 529 00:21:23,560 --> 00:21:28,070 ეს არის, როგორც კვირა ერთი, კვირა ორი პერსონალი მომენტში. string s = GetString. 530 00:21:28,070 --> 00:21:29,700 ახლა, ამას კიდევ ერთხელ, აქ ქვემოთ. 531 00:21:29,700 --> 00:21:31,830 string t = GetString. 532 00:21:31,830 --> 00:21:35,300 და შემდეგ, ბოლო რამ ამ პროგრამა, როგორც მისი სახელი ვარაუდობს, 533 00:21:35,300 --> 00:21:37,090 არის მე ვაპირებ ცდილობენ შედარება. 534 00:21:37,090 --> 00:21:40,709 >> ასე რომ, თუ, პირველი ტექსტი, უდრის = t, მაშინ მე 535 00:21:40,709 --> 00:21:42,250 აპირებს ვთქვა თქვენ აკრიფოთ იგივე. 536 00:21:42,250 --> 00:21:44,291 სხვაგან, მე ვაპირებ ვთქვა, თქვენ აკრიფოთ სხვადასხვა რამ. 537 00:21:44,291 --> 00:21:45,880 მოდით კომპილირება და აწარმოებს ამ პროგრამის. 538 00:21:45,880 --> 00:21:48,481 ასე რომ შედარება ნულოვანი. 539 00:21:48,481 --> 00:21:48,980 კარგად გამოიყურება. 540 00:21:48,980 --> 00:21:50,490 არარის კოლექცია შეცდომები. 541 00:21:50,490 --> 00:21:52,386 >> ნება მომეცით წავიდეთ წინ ახლა და ტიპის ./compare-0. 542 00:21:52,386 --> 00:21:55,230 543 00:21:55,230 --> 00:21:59,220 ნება მომეცით წავიდეთ წინ და ვთქვათ რაღაც : Daven და რაღაც: Rob. 544 00:21:59,220 --> 00:22:00,450 და მე აკრიფოთ სხვადასხვა რამ. 545 00:22:00,450 --> 00:22:01,250 ჯერჯერობით, იმდენად კარგი. 546 00:22:01,250 --> 00:22:02,680 პროგრამა, როგორც ჩანს, სწორი. 547 00:22:02,680 --> 00:22:03,880 >> მაგრამ მოდით გაუშვით ერთხელ. 548 00:22:03,880 --> 00:22:05,800 ვთქვათ რაღაც: Gabe. 549 00:22:05,800 --> 00:22:07,140 ვთქვათ რაღაც: Gabe. 550 00:22:07,140 --> 00:22:08,520 551 00:22:08,520 --> 00:22:09,020 ყველა უფლება. 552 00:22:09,020 --> 00:22:10,851 იქნებ მე მოხვდა სივრცეში ბარი ან რაიმე ხმაურიანი. 553 00:22:10,851 --> 00:22:11,600 მოდით ეს კიდევ ერთხელ. 554 00:22:11,600 --> 00:22:13,020 ასე Zamyla. 555 00:22:13,020 --> 00:22:13,970 556 00:22:13,970 --> 00:22:14,470 Zamyla. 557 00:22:14,470 --> 00:22:15,740 558 00:22:15,740 --> 00:22:17,330 სხვადასხვა რამ. 559 00:22:17,330 --> 00:22:19,430 ასე რომ, რა ხდება? 560 00:22:19,430 --> 00:22:23,200 >> ასე რომ, ჩვენ გვაქვს ამ ორ წყებას კოდი, GetString მიმდინარეობს მოუწოდა ორჯერ. 561 00:22:23,200 --> 00:22:25,760 და მაშინ, მე უბრალოდ ვედრებით და ტ. 562 00:22:25,760 --> 00:22:28,370 მაგრამ რა მერე ხდება? 563 00:22:28,370 --> 00:22:31,180 ისე, ჩემი ხელწერა ს შესახებ ჯალათიც ეს მაგალითი გარკვეულწილად. 564 00:22:31,180 --> 00:22:34,630 და მოდით რეალურად სახიფათოა ამ მეტი აქ, ისევე. 565 00:22:34,630 --> 00:22:37,390 566 00:22:37,390 --> 00:22:45,712 >> ამიტომ, ჩვენ უნდა ხაზი მოსწონს string s = GetString. 567 00:22:45,712 --> 00:22:48,295 ასე რომ, ეს უბრალოდ პირველი საინტერესო ხაზი, რომ პროგრამა. 568 00:22:48,295 --> 00:22:49,920 569 00:22:49,920 --> 00:22:52,974 მაგრამ, რა ყველა ამ დროს უკვე ხდება ქვეშ hood? 570 00:22:52,974 --> 00:22:55,890 ასევე, მარცხენა მხარეს არის string, რომელიც გარკვეული ტიპის ცვლადი, 571 00:22:55,890 --> 00:22:56,785 და ეს ე.წ. s. 572 00:22:56,785 --> 00:23:00,019 ასე რომ, მე ვიცი, რომ ეს იყენებს მეხსიერების, ან RAM, ჩემი კომპიუტერი რატომღაც. 573 00:23:00,019 --> 00:23:02,060 ამიტომ, მე ვაპირებ აბსტრაქტულად მიაპყროს, რომ, როგორც მოედანზე. 574 00:23:02,060 --> 00:23:04,820 32 ბიტი, თურმე, მაგრამ უფრო, რომ მომავალში. 575 00:23:04,820 --> 00:23:06,410 და მაშინ, რა ხდება აქ? 576 00:23:06,410 --> 00:23:08,700 >> ისე, GetString აშკარად იღებს string საწყისი მომხმარებელს. 577 00:23:08,700 --> 00:23:11,360 და GetString მიიღო Zamyla ან Gabe ან Daven. 578 00:23:11,360 --> 00:23:14,640 ასე რომ, მოდით ავირჩიოთ პირველი იმ, რომელიც Daven. 579 00:23:14,640 --> 00:23:19,174 იმდენად ეფექტურად, რა GetString მიიღო მე რომ პირველ შემთხვევაში იყო D-a-v-e-n. 580 00:23:19,174 --> 00:23:22,690 581 00:23:22,690 --> 00:23:25,045 და მაშინ, რა გააკეთა ის მომეცი ფარულად? 582 00:23:25,045 --> 00:23:25,920 აუდიტორია: [INAUDIBLE] 583 00:23:25,920 --> 00:23:28,720 დევიდ ჯ Malan: ჰო, / 0 ან null ხასიათი. 584 00:23:28,720 --> 00:23:30,550 ასე რომ ეფექტურად მომცა სიმებიანი. 585 00:23:30,550 --> 00:23:34,550 მაგრამ ჩვენ უკვე ვიცით წინა გამოიყურება, რომ სიმებიანი მხოლოდ მასივი 586 00:23:34,550 --> 00:23:37,895 გმირები და ის წყდება ამ სპეციალური sentinel ხასიათი, / 0. 587 00:23:37,895 --> 00:23:39,220 588 00:23:39,220 --> 00:23:42,310 >> მაგრამ თუ ეს მართლაც ასეა, და ეს არის მოედანი, 589 00:23:42,310 --> 00:23:44,160 ეს აშკარად ბევრად უფრო დიდი მართკუთხედი. 590 00:23:44,160 --> 00:23:46,830 და მართლაც, ეს არის, მე პრეტენზია, მხოლოდ 32 ბიტი. 591 00:23:46,830 --> 00:23:49,500 და ეს არის აშკარად მეტია, ვიდრე 32 ბიტი, იმიტომ, რომ ეს არის, ალბათ, 592 00:23:49,500 --> 00:23:51,583 რვა პლუს რვა პლუს რვა პლუს რვა პლუს რვა, 593 00:23:51,583 --> 00:23:53,320 მხოლოდ იმიტომ, რომ bytes in ASCII. 594 00:23:53,320 --> 00:23:57,030 როგორ heck, ჩვენ ვაპირებთ, რათა შეწყობოდა Daven ამ პატარა ყუთს? 595 00:23:57,030 --> 00:23:59,880 >> ისე, რა არის GetString რეალურად აკეთებს? 596 00:23:59,880 --> 00:24:03,680 ასევე, ამ ქსელის აქ წარმოადგენს ჩემი კომპიუტერის მეხსიერების ან RAM. 597 00:24:03,680 --> 00:24:07,564 ასე რომ, მოდით თვითნებურად ამბობენ, რომ თუ თითოეული ეს წარმოადგენს byte, 598 00:24:07,564 --> 00:24:09,730 მაშინ ჩვენ შეგვიძლია ვიფიქროთ, თითოეულ byte, როგორც მისამართი, 599 00:24:09,730 --> 00:24:13,830 როგორიცაა 33 Oxford Street, ან 34 Oxford Street, ან 35 Oxford Street. 600 00:24:13,830 --> 00:24:16,700 >> ასე რომ, ისევე სახლებში მისამართები და შენობა მისამართები, 601 00:24:16,700 --> 00:24:19,810 ასე რომ ინდივიდუალური ბაიტი მეხსიერების აქვს მისამართები და ნომრები 602 00:24:19,810 --> 00:24:21,042 რომ ცალსახად ამოცნობა. 603 00:24:21,042 --> 00:24:22,000 ახლა, ეს არის უკანონო. 604 00:24:22,000 --> 00:24:25,370 მაგრამ შენარჩუნება ეს მარტივი, მე ვაპირებ გამოყენება თექვსმეტობითი მხოლოდ კონვენციის, 605 00:24:25,370 --> 00:24:28,200 მაგრამ 0x არაფერს ნიშნავს სხვა ვიდრე "ეს არის თექვსმეტობითი." 606 00:24:28,200 --> 00:24:31,030 და მე ვაპირებ იმის მტკიცებას, რომ "D" მთავრდება Byte ერთი მეხსიერებაში. 607 00:24:31,030 --> 00:24:34,210 >> მე მივიღე არაფერი ხდება ამ მეხსიერება, ასე Daven მიიღო პირველ ადგილზე 608 00:24:34,210 --> 00:24:35,509 at Byte ერთი. 609 00:24:35,509 --> 00:24:36,800 აი, ეს იქნება 0x2. 610 00:24:36,800 --> 00:24:37,831 611 00:24:37,831 --> 00:24:38,705 ეს ხდება 0x3. 612 00:24:38,705 --> 00:24:39,840 613 00:24:39,840 --> 00:24:41,800 ეს იქნება 0x4. 614 00:24:41,800 --> 00:24:43,025 ეს ხდება 0x5. 615 00:24:43,025 --> 00:24:44,025 ეს იქნება 0x6. 616 00:24:44,025 --> 00:24:45,560 617 00:24:45,560 --> 00:24:48,290 >> მაგრამ ერთხელ თქვენ დაიწყოს ფიქრი იმაზე, თუ რა კომპიუტერული აკეთებს 618 00:24:48,290 --> 00:24:50,710 ქვევმოთ hood, თქვენ შეგიძლიათ დაიწყოს ითქვას, 619 00:24:50,710 --> 00:24:54,960 როგორ, რამდენიმე წლის წინ, რომ განვახორციელეთ C თავად. 620 00:24:54,960 --> 00:24:58,360 რა არის GetString ალბათ returning--, რადგან იგი 621 00:24:58,360 --> 00:25:00,946 იგრძნობა, რომ ეს არ არის დაბრუნების Daven, თავისთავად, 622 00:25:00,946 --> 00:25:03,320 იმიტომ, რომ ის აუცილებლად არ აპირებს შეესაბამება ამ პატარა box-- 623 00:25:03,320 --> 00:25:05,090 რა არის GetString ალბათ დაბრუნების? 624 00:25:05,090 --> 00:25:07,958 625 00:25:07,958 --> 00:25:08,920 >> აუდიტორია: [INAUDIBLE] 626 00:25:08,920 --> 00:25:10,540 >> დევიდ ჯ Malan: ადგილმდებარეობა Daven. 627 00:25:10,540 --> 00:25:12,770 და ის აკეთებდა ამ მას შემდეგ, რაც კვირა ერთი. 628 00:25:12,770 --> 00:25:16,150 რა GetString მართლაც დაბრუნების არ არის ტექსტი, თავისთავად. 629 00:25:16,150 --> 00:25:17,780 ეს არის ერთ ერთი პატარა თეთრი ტყუილი. 630 00:25:17,780 --> 00:25:22,520 ეს დაბრუნების მისამართი სიმებიანი მეხსიერებაში, უნიკალური მისამართი. 631 00:25:22,520 --> 00:25:24,820 Daven ცხოვრობს 33 Oxford Street. 632 00:25:24,820 --> 00:25:29,310 მაგრამ უფრო მოკლედ, Gavin ცხოვრობს at 0x1, მისამართი Number One. 633 00:25:29,310 --> 00:25:32,280 >> მერე რა ხდება, რომ ამ პატარა ყუთი მაშინ, უნდა იყოს ნათელი, 634 00:25:32,280 --> 00:25:35,930 უბრალოდ მისამართი რომ სიმებიანი. 635 00:25:35,930 --> 00:25:38,110 ასე რომ, ყველა ამ დროს, უკვე მიმდინარეობს. 636 00:25:38,110 --> 00:25:41,650 მაგრამ რა მიანიშნებს, ახლა ის არის, რომ, თუ ყველა ის აქვს 637 00:25:41,650 --> 00:25:44,710 არის მთელი რიგი შიგნით, ვინ არის შეჩერება, პროგრამისტი, 638 00:25:44,710 --> 00:25:47,970 აყენებს ნებისმიერი ნომერი ნებისმიერი ცვლადი და უბრალოდ jumping 639 00:25:47,970 --> 00:25:49,080 რომ ბლოკი მეხსიერება? 640 00:25:49,080 --> 00:25:51,320 და მართლაც, ჩვენ დავინახავთ, რომ არის საფრთხის დროს. 641 00:25:51,320 --> 00:25:53,500 >> მაგრამ ახლა, ამ გრძნობს არასაკმარისია. 642 00:25:53,500 --> 00:25:55,630 თუ მე ვიტყვი, ჩემთვის სიმებიანი, თქვენ მომეცი Daven. 643 00:25:55,630 --> 00:25:57,230 მაგრამ თქვენ ნამდვილად არ მომეცი Daven. 644 00:25:57,230 --> 00:25:59,310 ყველა მომეცი არის Daven მისამართი. 645 00:25:59,310 --> 00:26:04,310 როგორ მერე ზუსტად ვიცი, სადაც Daven იწყება და ends-- 646 00:26:04,310 --> 00:26:07,140 ამბავი მიღების weird-- სადაც Daven იწყება და მთავრდება, 647 00:26:07,140 --> 00:26:10,435 და შემდეგ, მომდევნო სიმებიანი მეხსიერებაში იწყება? 648 00:26:10,435 --> 00:26:11,520 649 00:26:11,520 --> 00:26:13,620 >> ასევე, თუ თქვენ გადაცემის მე დასაწყისში Daven, 650 00:26:13,620 --> 00:26:17,230 არსებითად, თუ როგორ ვიცი სადაც ბოლოს მისი სახელი? 651 00:26:17,230 --> 00:26:20,550 რომ სპეციალური null ხასიათი, რომელიც მით უფრო მნიშვნელოვანია, 652 00:26:20,550 --> 00:26:23,040 თუ სიმები ქვეშ hood უბრალოდ განსაზღვრული 653 00:26:23,040 --> 00:26:25,820 ცალსახად მათი ადგილმდებარეობა მეხსიერებაში. 654 00:26:25,820 --> 00:26:28,130 ასე რომ, ყველა ამ დროს, რომ რა ხდება შემდეგ. 655 00:26:28,130 --> 00:26:32,470 >> ამიტომ, როდესაც ჩვენ ახლა დავაკვირდეთ კოდი აქ, ახსნას 656 00:26:32,470 --> 00:26:35,790 თუ გვინდა, რომ შეცდომის შეესაბამება 26. 657 00:26:35,790 --> 00:26:39,560 რატომ არის Zamyla და Zamyla განსხვავებული? 658 00:26:39,560 --> 00:26:41,330 რატომ არის Gabe და Gabe სხვადასხვა? 659 00:26:41,330 --> 00:26:42,154 ჰო, წელს უკან. 660 00:26:42,154 --> 00:26:43,390 >> აუდიტორია: მათ სხვადასხვა მისამართები. 661 00:26:43,390 --> 00:26:45,931 >> დევიდ ჯ Malan: უბრალოდ იმიტომ, მათ სხვადასხვა მისამართები. 662 00:26:45,931 --> 00:26:48,820 რადგან როცა რეკავთ GetString ერთხელ, რაც მე ამის სწრაფად, 663 00:26:48,820 --> 00:26:52,870 თუ ეს არის მეორე ხაზი, string t, როგორც მე, რომ პროგრამა, 664 00:26:52,870 --> 00:26:55,030 უდრის ერთი ზარი GetString. 665 00:26:55,030 --> 00:26:56,370 666 00:26:56,370 --> 00:26:58,670 მომავალი დრო მოვუწოდებ GetString, მე ვაპირებ 667 00:26:58,670 --> 00:27:00,190 მიიღოს სხვადასხვა ბლოკი მეხსიერება. 668 00:27:00,190 --> 00:27:02,220 >> GetString ნებადართულია ვთხოვო ოპერაციული 669 00:27:02,220 --> 00:27:03,800 სისტემა უფრო და უფრო მეტი მეხსიერება. 670 00:27:03,800 --> 00:27:07,894 ის არ აპირებს reuse იგივე ექვსი ბაიტი თითოეული დრო. 671 00:27:07,894 --> 00:27:09,810 ის აპირებს მიიღოს ახალი ბლოკი მეხსიერება, რომელიც 672 00:27:09,810 --> 00:27:12,780 ნიშნავს t აპირებს სხვა ღირებულება, მეტი აქ. 673 00:27:12,780 --> 00:27:15,380 >> ასე რომ, როდესაც მე ტოლია = t, თქვენ არ შედარება 674 00:27:15,380 --> 00:27:17,880 D წინააღმდეგ და წინააღმდეგ და V წინააღმდეგ. 675 00:27:17,880 --> 00:27:19,588 თქვენ შედარებით ეს წინააღმდეგ, რომელიც 676 00:27:19,588 --> 00:27:24,020 გულწრფელად საკმაოდ useful-- useless-- საკმაოდ აზრი, იმიტომ, რომ ვინც ნამდვილად 677 00:27:24,020 --> 00:27:25,830 ზრუნავს, სადაც სტრიქონები მეხსიერებაში? 678 00:27:25,830 --> 00:27:26,850 >> და მართლაც, ჩვენ არ გვაქვს. 679 00:27:26,850 --> 00:27:28,980 და ჩვენ არ ვაპირებთ დაიწყოს განსაკუთრებით ზრუნავენ. 680 00:27:28,980 --> 00:27:34,180 მხოლოდ იმდენად, რამდენადაც, რომ შეცდომები შეიძლება წარმოიშვას და უსაფრთხოების შეიძლება წარმოიშვას ნების 681 00:27:34,180 --> 00:27:36,100 ჩვენ რეალურად დაიწყოს ზრუნვა შესახებ. 682 00:27:36,100 --> 00:27:37,230 მოდით დაფიქსირება ამ პრობლემას. 683 00:27:37,230 --> 00:27:39,650 თურმე, გაასწორონ ის super უბრალოდ. 684 00:27:39,650 --> 00:27:42,600 >> და მოდით რეალურად, სანამ ცხადყოფს, რომ კიდევ ერთხელ, თუ რა 685 00:27:42,600 --> 00:27:47,170 თქვენ თუ ამ CS50 კლასი, და თქვენ უნდა განახორციელოს 686 00:27:47,170 --> 00:27:48,600 შედარებით წინააღმდეგ ორი სიმები. 687 00:27:48,600 --> 00:27:51,440 თქვენ ნათლად შეგიძლიათ არა მხოლოდ გამოიყენოს ტოლია = ტ. 688 00:27:51,440 --> 00:27:54,090 მაგრამ მხოლოდ ლოგიკურად, თუ როგორ შეადარებდით ამ სტრიქონს 689 00:27:54,090 --> 00:27:56,370 წინააღმდეგ string გამოყენებით C კოდი? 690 00:27:56,370 --> 00:27:56,880 Yeah. 691 00:27:56,880 --> 00:27:58,780 >> აუდიტორია: უბრალოდ ამისთვის loop [INAUDIBLE] 692 00:27:58,780 --> 00:28:00,670 693 00:28:00,670 --> 00:28:01,670 დევიდ ჯ Malan: Perfect. 694 00:28:01,670 --> 00:28:02,900 აუდიტორია: [INAUDIBLE] 695 00:28:02,900 --> 00:28:03,310 დევიდ ჯ Malan: ჰო. 696 00:28:03,310 --> 00:28:05,390 უბრალოდ გამოიყენოთ ამისთვის მარყუჟი ან ხოლო მარყუჟის ან რასაც. 697 00:28:05,390 --> 00:28:08,710 მაგრამ ვრცელდება ძირითადი იდეა, რომ თუ ეს არის ბლოკი მეხსიერება ან მასივი 698 00:28:08,710 --> 00:28:11,590 და ეს არის, iterate ორივე ერთსა და იმავე დროს. 699 00:28:11,590 --> 00:28:12,960 და უბრალოდ შედარება წერილებს. 700 00:28:12,960 --> 00:28:14,260 >> და თქვენ მოხვდით იყოს ცოტა ფრთხილად, რადგან თქვენ 701 00:28:14,260 --> 00:28:16,247 არ მინდა, ერთი თითი წავიდეთ წარსულში სხვა 702 00:28:16,247 --> 00:28:18,080 იმიტომ, რომ ერთი სტრიქონი არის უმეტეს სხვა. 703 00:28:18,080 --> 00:28:21,380 ასე რომ, თქვენ აპირებს გვინდა შევამოწმოთ ამ სპეციალური ღირებულება, ბოლოს null. 704 00:28:21,380 --> 00:28:24,017 მაგრამ ეს ნამდვილად არის, ბოლოს, როგორც მარტივია, რომ. 705 00:28:24,017 --> 00:28:26,100 და სიმართლე გითხრათ, ჩვენ არ გვჭირდება ხელახლა რომ წამყვანი. 706 00:28:26,100 --> 00:28:27,960 აქ არის ორი ვერსია. 707 00:28:27,960 --> 00:28:32,910 და რა მე ვაპირებ ვთქვა, ისაა, რომ ნაცვლად შედარებით ტოლია = t, 708 00:28:32,910 --> 00:28:38,964 მე ნაცვლად თქმას, თუ string შედარება s მძიმე t უდრის = 0. 709 00:28:38,964 --> 00:28:40,130 ახლა, რა სიმებიანი შედარების? 710 00:28:40,130 --> 00:28:43,046 >> თურმე, ის ფუნქცია, რომელიც გააჩნია C, რომლის მიზანი ცხოვრებაში 711 00:28:43,046 --> 00:28:44,650 შედარება ორი სიმები. 712 00:28:44,650 --> 00:28:48,300 და აურიეთ შედარება, თუ ჩვენ წაიკითხა მისი კაცი ან დოკუმენტაცია ან CS50 713 00:28:48,300 --> 00:28:50,630 მითითება, ის უბრალოდ გეტყვით, რომ აჟიოტაჟი 714 00:28:50,630 --> 00:28:55,730 შედარების ბრუნდება ან უარყოფითი ნომერი ან დადებითი რიცხვი ან ნულოვანი, 715 00:28:55,730 --> 00:28:57,660 სადაც ნულოვანი იმას ნიშნავს, ისინი თანაბარი. 716 00:28:57,660 --> 00:28:58,570 >> ასე რომ მხოლოდ ვარაუდი. 717 00:28:58,570 --> 00:29:00,390 რა შეიძლება იყოს ეს ნიშნავს, თუ აურიეთ შედარების ბრუნდება 718 00:29:00,390 --> 00:29:02,110 უარყოფითად ან დადებითი მნიშვნელობა? 719 00:29:02,110 --> 00:29:02,785 720 00:29:02,785 --> 00:29:04,285 აუდიტორია: მეტი ან ნაკლები. 721 00:29:04,285 --> 00:29:05,570 დევიდ ჯ Malan: ჰო, მეტია ან ნაკლები. 722 00:29:05,570 --> 00:29:08,640 ასე რომ, თუ თქვენ სურდა დასალაგებლად მთელი bunch of სიმებისათვის dictionary-- 723 00:29:08,640 --> 00:29:12,975 როგორც ჩვენ საბოლოოდ ქვემოთ road-- სრულყოფილი ფუნქცია გამოიყენოს პოტენციურად, 724 00:29:12,975 --> 00:29:15,850 იმიტომ, რომ ის აპირებს, რომ შედარება სიმები თქვენთვის, და ვუთხრა 725 00:29:15,850 --> 00:29:20,060 თქვენ არ მოდის, სანამ ბ, ან არ ბ მოვიდეს წინაშე ალფავიტის. 726 00:29:20,060 --> 00:29:21,490 ჩვენ შეგვიძლია გავაკეთოთ ზუსტად რომ. 727 00:29:21,490 --> 00:29:23,620 >> და შეამჩნია მე ერთი სხვა რაც ამ მაგალითს. 728 00:29:23,620 --> 00:29:26,870 სხვას რას შეიცვალა უმაღლესი up ამ მთავარი ფუნქცია? 729 00:29:26,870 --> 00:29:28,500 730 00:29:28,500 --> 00:29:29,350 Char *. 731 00:29:29,350 --> 00:29:31,150 და ეს არის ის, რომ სხვა თეთრი ტყუილი. 732 00:29:31,150 --> 00:29:33,750 ამ დროს, როდესაც თქვენ წერდა string, 733 00:29:33,750 --> 00:29:38,350 ჩვენ უკვე ფარულად გადაწერა სიმებიანი char * ისე, რომ clang რეალურად 734 00:29:38,350 --> 00:29:39,270 ესმის. 735 00:29:39,270 --> 00:29:42,450 >> სხვა სიტყვებით რომ ვთქვათ, CS50.h და როგორც ჩვენ საბოლოოდ ვხედავთ, 736 00:29:42,450 --> 00:29:45,950 ჩვენ მივიღეთ სინონიმი მოუწოდა სიმებიანი ეს არის იგივე მნიშვნელობა, როგორც char *. 737 00:29:45,950 --> 00:29:49,910 და ახლა, ვიცით მხოლოდ ის, რომ * ამ კონტექსტში, როგორც მინიმუმ, 738 00:29:49,910 --> 00:29:51,286 ნიშნავს მისამართი. 739 00:29:51,286 --> 00:29:52,210 >> მისამართი რა? 740 00:29:52,210 --> 00:29:56,390 ისე, ის ფაქტი, რომ მე ვთქვი char *, და არ არის int * ან ათწილადი * 741 00:29:56,390 --> 00:30:00,820 იმას ნიშნავს, რომ char * მისამართი char. 742 00:30:00,820 --> 00:30:06,770 ასე რომ, პატარა ყუთს, aka ტექსტი, მართლაც ტიპის char *, 743 00:30:06,770 --> 00:30:10,490 რომელიც უბრალოდ ლამაზი გზა ამბობდა, ამ ყუთში წავა მისამართზე. 744 00:30:10,490 --> 00:30:12,430 და რას ნიშნავს ეს მისამართი ეხება? 745 00:30:12,430 --> 00:30:13,780 როგორც ჩანს, char. 746 00:30:13,780 --> 00:30:16,410 >> თუმცა შეგვიძლია აბსოლუტურად აქვს int * და სხვა ნივთები. 747 00:30:16,410 --> 00:30:20,790 მაგრამ ახლა, char * მართლაც ყველაზე პირდაპირი და ერთი ინტერესი. 748 00:30:20,790 --> 00:30:23,310 ასე რომ, ეს პრობლემა იქნება მოიმატებს, თუმცა, კიდევ ერთხელ. 749 00:30:23,310 --> 00:30:24,830 >> დავუშვათ, რომ გაიხსნას ეს პროგრამა. 750 00:30:24,830 --> 00:30:27,670 მოდით ვნახოთ, თუ ახლა ჩვენ შეგვიძლია პროგნოზირება რა არის არასწორი ამ კოდექსით. 751 00:30:27,670 --> 00:30:31,140 ასე რომ ამ პროგრამის, ასლი-0, მე ვაპირებ წავიდეთ წინ და კიდევ ერთხელ მოვუწოდებთ 752 00:30:31,140 --> 00:30:34,190 GetString და შესანახად ღირებულების s. 753 00:30:34,190 --> 00:30:38,800 >> და მაშინ, რატომ აკეთებს ამას, ისევე როგორც შეგახსენებთ კვირის წარსულში? 754 00:30:38,800 --> 00:30:40,960 ჩვენ ვიტყვი, რომ GetString ზოგჯერ ბრუნდება null. 755 00:30:40,960 --> 00:30:42,793 რას ნიშნავს ეს, თუ GetString ბრუნდება null? 756 00:30:42,793 --> 00:30:45,040 757 00:30:45,040 --> 00:30:46,034 რაღაც წავიდა არასწორი. 758 00:30:46,034 --> 00:30:48,950 ეს ალბათ იმას ნიშნავს სიმებიანი ძალიან დიდი, კომპიუტერის მეხსიერება ღალატობს. 759 00:30:48,950 --> 00:30:51,724 ეს ხდება სუპერ, სუპერ, სუპერ იშვიათად, მაგრამ ეს შეიძლება მოხდეს. 760 00:30:51,724 --> 00:30:53,890 ჩვენ გვინდა შევამოწმოთ იგი, და რომ ყველა ვაკეთებთ. 761 00:30:53,890 --> 00:30:57,910 >> რადგან ჩვენ ვხედავთ, თუ არ დაიწყოს შემოწმების, ჩვეულებად რამ 762 00:30:57,910 --> 00:31:00,870 როგორიცაა null, თქვენ შეიძლება რეალურად დაიწყოს წასვლა 763 00:31:00,870 --> 00:31:03,106 მისამართები მეხსიერებაში, რომ არასწორია. 764 00:31:03,106 --> 00:31:05,980 და თქვენ ვაპირებთ დავიწყოთ იწვევს უფრო და უფრო მეტი სეგმენტაცია ხარვეზი. 765 00:31:05,980 --> 00:31:08,360 ან Mac ან PC, მხოლოდ რამაც კომპიუტერული გათიშეთ 766 00:31:08,360 --> 00:31:10,340 ან პროგრამა გაყინვას, პოტენციურად. 767 00:31:10,340 --> 00:31:14,930 >> ახლა, მე აცხადებენ ასლი 0.c, რომ მე ვაპირებ კოპირება ამ strings გზით 768 00:31:14,930 --> 00:31:15,685 ხაზი 28. 769 00:31:15,685 --> 00:31:16,850 770 00:31:16,850 --> 00:31:18,750 და შემდეგ მე ვაპირებ აცხადებენ, ბოლოში 771 00:31:18,750 --> 00:31:21,430 აქ რომ მე ვაპირებ შეცვალოს ერთი მათგანი. 772 00:31:21,430 --> 00:31:22,330 >> ასე რომ შეამჩნია ეს. 773 00:31:22,330 --> 00:31:24,370 მე ამას ჩვენი ძველი მეგობარი strlen. 774 00:31:24,370 --> 00:31:28,960 და მხოლოდ განმარტავენ, ინგლისური რა ამ ხაზის 34 აკეთებს? 775 00:31:28,960 --> 00:31:32,480 რას აკეთებს t bracket 0 წარმოადგენს მარცხენა. 776 00:31:32,480 --> 00:31:32,980 Yeah. 777 00:31:32,980 --> 00:31:34,339 >> აუდიტორია: პირველი ხასიათი t? 778 00:31:34,339 --> 00:31:35,880 დევიდ ჯ Malan: პირველი ხასიათი ტ. 779 00:31:35,880 --> 00:31:36,379 ეს არის ის. 780 00:31:36,379 --> 00:31:40,024 პირველი ხასიათი t, მე მინდა დაავალოს ზედა მობილური 781 00:31:40,024 --> 00:31:41,190 პირველი პერსონაჟი t. 782 00:31:41,190 --> 00:31:43,200 ასე რომ, ეს capitalizing პირველი წერილი. 783 00:31:43,200 --> 00:31:46,340 და შემდეგ, ძალიან ბოლო რამ გავაკეთო ამ პროგრამის მე პრეტენზია აქ არის 784 00:31:46,340 --> 00:31:50,340 ორიგინალური, s, და აქ არის ასლი, ტ. 785 00:31:50,340 --> 00:31:54,610 >> მაგრამ საფუძველზე ამბავი ჩვენ უბრალოდ ამის შესახებ, რა strings ნამდვილად არის, 786 00:31:54,610 --> 00:31:57,520 რა არის ხაზი 28 ნამდვილად აკეთებს და რა არის 787 00:31:57,520 --> 00:31:59,405 შედეგად bug აპირებს უნდა იყოს ეკრანზე? 788 00:31:59,405 --> 00:32:01,300 789 00:32:01,300 --> 00:32:03,500 >> ასე რომ, პირველი, პირველი კითხვა, 28. 790 00:32:03,500 --> 00:32:09,040 რა არის string t = s ნამდვილად აკეთებს? 791 00:32:09,040 --> 00:32:16,430 თუ ჩვენ გვაქვს მარცხენა მხარეს აქ string t = s; 792 00:32:16,430 --> 00:32:19,400 რომელიც მაძლევს ერთი ყუთი აქ და ერთი ყუთი აქ. 793 00:32:19,400 --> 00:32:25,530 და ვფიქრობ ეს მისამართი 0x, ვთქვათ, 50 ამ დროს, თვითნებურად. 794 00:32:25,530 --> 00:32:28,847 რას აკეთებს სიმებიანი t = s ამის გაკეთება ქვეშ hood? 795 00:32:28,847 --> 00:32:30,340 >> აუდიტორია: [INAUDIBLE] 796 00:32:30,340 --> 00:32:34,100 >> დევიდ ჯ Malan: იგი ინახავს მეხსიერება მიმართოს არსებობს, ამიტომ 0x50 მიდის იქ. 797 00:32:34,100 --> 00:32:37,980 ასე რომ, თუ ახლა, მე კი პირველი პერსონაჟი t და ზედა იგი, 798 00:32:37,980 --> 00:32:39,535 რა ვარ მე ეფექტურად აკეთებს, რათა s? 799 00:32:39,535 --> 00:32:41,300 800 00:32:41,300 --> 00:32:43,450 მე ნამდვილად აკეთებს იმავეს, არა? 801 00:32:43,450 --> 00:32:47,680 იმიტომ, რომ თუ Address 0x50-- და უბრალოდ, მე არ გვაქვს ბევრი ოთახი ფორუმში აქ, 802 00:32:47,680 --> 00:32:51,750 მაგრამ ვარაუდობენ, რომ ეს არის 0x50 ქვემოთ აქ, სადღაც ჩემი კომპიუტერის მეხსიერებაში. 803 00:32:51,750 --> 00:32:55,825 >> და მე, მაგალითად, Gabe ამას აქ, მოსწონს ეს. 804 00:32:55,825 --> 00:32:57,120 805 00:32:57,120 --> 00:33:01,980 და მე ვთქვი, t bracket 0 ხდება კაპიტალიზაცია. 806 00:33:01,980 --> 00:33:04,860 ასევე, t bracket 0 პირველი ასო ტ. 807 00:33:04,860 --> 00:33:07,840 ასე რომ ცოტა გ აპირებს დიდი გახდა G. მაგრამ პრობლემა 808 00:33:07,840 --> 00:33:09,410 არის, რას არის ასევე აღვნიშნო, რომ? 809 00:33:09,410 --> 00:33:10,300 >> აუდიტორია: იგივე. 810 00:33:10,300 --> 00:33:11,841 >> დევიდ ჯ Malan: ზუსტად იგივე რამ. 811 00:33:11,841 --> 00:33:16,342 ასე მარტივი ახსნა, ალბათ, მაშინაც კი, თუ სინტაქსი არის ცოტა უცნაურია. 812 00:33:16,342 --> 00:33:17,050 ასე რომ, მოდით ეს. 813 00:33:17,050 --> 00:33:20,210 მიიღოს ასლი 0 და შემდეგ ./copy-0. 814 00:33:20,210 --> 00:33:21,820 815 00:33:21,820 --> 00:33:24,110 ვთქვათ რაღაც: Gabe. 816 00:33:24,110 --> 00:33:26,760 და, სამწუხაროდ, ორივე მათ უკვე კაპიტალიზირდება, 817 00:33:26,760 --> 00:33:29,500 მაგრამ, რომ უდევს მიზეზი იმისა, რომ ჩვენ უბრალოდ 818 00:33:29,500 --> 00:33:32,350 ახლა საქმე მისამართები. 819 00:33:32,350 --> 00:33:36,470 >> ასე რომ, ჩვენ ვიწყებთ address-- არ pun intended-- 820 00:33:36,470 --> 00:33:39,270 როგორ უნდა დაიწყოს მივმართო ამ პრობლემის? 821 00:33:39,270 --> 00:33:44,400 ასევე, copy1.c, რამ ვაპირებთ ცოტა უფრო რთული. 822 00:33:44,400 --> 00:33:49,310 მაგრამ მე მინდა, მოითხოვოს კონცეპტუალურად მარტივი გამოსავალი. 823 00:33:49,310 --> 00:33:50,852 >> იმისთვის, რომ მიიღოთ ერთი შეხედვით. 824 00:33:50,852 --> 00:33:53,560 არ იქნება ადვილი პირველი დროს თქვენ აკრიფოთ ის, ალბათ, 825 00:33:53,560 --> 00:33:57,440 მაგრამ თუ პრობლემა ისაა, რომ უბრალოდ აკეთებს t = s მხოლოდ 826 00:33:57,440 --> 00:33:59,694 ასლები მისამართი, რა, კიდევ ერთხელ, თუ შემიძლია აირჩიოთ თქვენ, 827 00:33:59,694 --> 00:34:02,110 იქნება გამოსავალი რეალურად კოპირება სიმებიანი? 828 00:34:02,110 --> 00:34:04,906 829 00:34:04,906 --> 00:34:06,770 >> აუდიტორია: ჩვენ ალბათ გამოვიყენოთ loop ერთხელ. 830 00:34:06,770 --> 00:34:06,890 >> დევიდ ჯ Malan: ჰო. 831 00:34:06,890 --> 00:34:08,390 ამიტომ, ჩვენ ვაპირებთ გვჭირდება loop ერთხელ. 832 00:34:08,390 --> 00:34:11,800 და იმიტომ, რომ თუ ჩვენ გვინდა კოპირება სიმებიანი შევიდა სხვა სიმებიანი, 833 00:34:11,800 --> 00:34:14,120 ჩვენ ალბათ სურთ ამის გაკეთება ხასიათი ხასიათი. 834 00:34:14,120 --> 00:34:17,199 მაგრამ პრობლემა ის არის, თუ ეს არის თავდაპირველად s, 835 00:34:17,199 --> 00:34:22,159 ახლა ჩვენ უნდა დავიწყოთ პირდაპირ გამოყოფის მეხსიერების ტ. 836 00:34:22,159 --> 00:34:24,320 >> სხვა სიტყვებით, მოდით გადაიხედება, ამ ბოლო დროს. 837 00:34:24,320 --> 00:34:28,659 თუ ეს არის string s = GetString. 838 00:34:28,659 --> 00:34:30,956 839 00:34:30,956 --> 00:34:32,455 და მოდით დააყენა ამ მდე აქ, ისევე. 840 00:34:32,455 --> 00:34:36,639 841 00:34:36,639 --> 00:34:37,420 ეს არის GetString. 842 00:34:37,420 --> 00:34:39,070 843 00:34:39,070 --> 00:34:43,860 და შემდეგ, სურათზე რაღაც მინდა, რომ იქნება, როგორც ადრე, 844 00:34:43,860 --> 00:34:44,360 g-a-b-ელ / 0. 845 00:34:44,360 --> 00:34:47,294 846 00:34:47,294 --> 00:34:48,960 რომ გამოიყურება პატარა რაღაც მსგავსი. 847 00:34:48,960 --> 00:34:53,650 და ის შესაბამისად, ჩვენ მოვუწოდებთ ამ 0x50, და რომ იქნება 51, 52. 848 00:34:53,650 --> 00:34:54,409 >> ასე რომ, ეს არის 0x50. 849 00:34:54,409 --> 00:34:55,679 850 00:34:55,679 --> 00:34:59,690 და მაშინ, მე სიმებიანი ტ. 851 00:34:59,690 --> 00:35:02,450 მეხსიერება, რომელიც მხოლოდ აპირებს მომეცი ცოტა მოედანზე მოსწონს ეს. 852 00:35:02,450 --> 00:35:04,080 რა არის გადამწყვეტი ახლა? 853 00:35:04,080 --> 00:35:09,870 თუ მინდა კოპირება s შევიდა t, რა ცარიელი გვჭირდება შევსება აქ? 854 00:35:09,870 --> 00:35:12,050 ან რას უნდა გავაკეთოთ მაღალ დონეზე? 855 00:35:12,050 --> 00:35:14,101 856 00:35:14,101 --> 00:35:14,600 ჰო? 857 00:35:14,600 --> 00:35:16,200 858 00:35:16,200 --> 00:35:17,020 ვინმე? 859 00:35:17,020 --> 00:35:17,690 Yeah. 860 00:35:17,690 --> 00:35:19,214 >> აუდიტორია: ჩვენ უნდა [INAUDIBLE]. 861 00:35:19,214 --> 00:35:21,380 დევიდ ჯ Malan: ჰო, ჩვენ უნდა შეავსონ ცარიელი. 862 00:35:21,380 --> 00:35:24,340 მე ვერ დააკოპირეთ და შემდეგ ესარგებლა Gabe სახელი 863 00:35:24,340 --> 00:35:28,120 სანამ მე ვთხოვთ ოპერაციული სისტემა სხვა ბლოკი მეხსიერება 864 00:35:28,120 --> 00:35:30,640 ეს არის ის, მინიმუმ, როგორც დიდი, როგორც ორიგინალური. 865 00:35:30,640 --> 00:35:32,130 ასე რომ ტოვებს us კითხვაზე. 866 00:35:32,130 --> 00:35:36,080 >> როგორ შემიძლია ვთხოვო ოპერაციული სისტემის არა მხოლოდ მარტივი პატარა მაჩვენებელი 867 00:35:36,080 --> 00:35:38,530 როგორც ეს ეწოდება, მისამართი, მაჩვენებელი არ 868 00:35:38,530 --> 00:35:40,980 მარტივი პატარა ყუთი მოსწონს ეს მოუწოდა სიმებიანი? 869 00:35:40,980 --> 00:35:44,200 როგორ შემიძლია ვთხოვო ოპერაციული სისტემა დიდი ბლოკი მეხსიერება? 870 00:35:44,200 --> 00:35:48,430 ჯერჯერობით, მე მხოლოდ მიღებული, რომ უკან არაპირდაპირი მოუწოდებს GetString. 871 00:35:48,430 --> 00:35:50,740 ასე რომ, როგორ არის GetString კი მიღების მისი მეხსიერება? 872 00:35:50,740 --> 00:35:53,430 >> ისე, გამოდის, რომ არსებობს ეს სხვა ფუნქცია აქ 873 00:35:53,430 --> 00:35:55,160 რომ ჩვენ ახლა დაიწყება გამოყენება. 874 00:35:55,160 --> 00:35:59,780 ახლა, ეს გამოიყურება ისე, უფრო cryptic than-- მე ვარ ერთადერთი, ვინც შეგიძლიათ ნახოთ it-- 875 00:35:59,780 --> 00:36:03,150 ეს ხაზი გამოიყურება გზა უფრო cryptic მაშინ ეს უნდა ერთი შეხედვით. 876 00:36:03,150 --> 00:36:04,650 მაგრამ მოდით აჯავრებენ გარდა. 877 00:36:04,650 --> 00:36:07,950 >> მარცხენა მხარეს, მე char * t. 878 00:36:07,950 --> 00:36:13,280 ასე რომ, ინგლისური, დავიწყოთ ფორმულირება სათანადო სასჯელს ტექნიკური jargon. 879 00:36:13,280 --> 00:36:19,757 ასე რომ, ეს გამოყოფაზე ცვლადი ტიპის char * მოუწოდა ტ. 880 00:36:19,757 --> 00:36:21,090 ახლა, რა, რომ ნამდვილად ნიშნავს? 881 00:36:21,090 --> 00:36:23,881 >> ისე, რაც იმას ნიშნავს, რა ვარ მე აპირებს იმისათვის, რომ ამ ცვლადში t? 882 00:36:23,881 --> 00:36:24,780 883 00:36:24,780 --> 00:36:26,402 მისამართი char. 884 00:36:26,402 --> 00:36:28,360 ასე რომ მხოლოდ მარტივი, უფრო გონივრული გზა 885 00:36:28,360 --> 00:36:29,930 აღწერს მარცხენა მხარეს. 886 00:36:29,930 --> 00:36:32,890 ისე, რომ ქმნის ეს ყუთი აქ მხოლოდ. 887 00:36:32,890 --> 00:36:34,760 ასე რომ, მარჯვენა მხარეს, სავარაუდოდ, აპირებს 888 00:36:34,760 --> 00:36:37,170 გამოყოს, რომ უფრო ბლოკი მეხსიერება, როგორ? 889 00:36:37,170 --> 00:36:38,340 ასე რომ, მოდით აჯავრებენ ამ გარდა. 890 00:36:38,340 --> 00:36:41,131 >> ეს აბსოლუტური ერთი შეხედვით, მაგრამ რა ხდება შიგნით აქ? 891 00:36:41,131 --> 00:36:43,740 პირველი, malloc, რომელიც როგორც ჩანს, ჩვენი ახალი მეგობარი, 892 00:36:43,740 --> 00:36:45,450 "მეხსიერების გამოყოფას." 893 00:36:45,450 --> 00:36:49,560 ასე რომ, ეს არგუმენტი გავიდა ეს, ასე რომ საკმაოდ დიდი არგუმენტი. 894 00:36:49,560 --> 00:36:50,970 ასე რომ, მოდით აჯავრებენ ამ გარდა. 895 00:36:50,970 --> 00:36:53,410 >> strlen of, რა თქმა უნდა, წარმოადგენს the-- 896 00:36:53,410 --> 00:36:54,142 897 00:36:54,142 --> 00:36:55,600 აუდიტორია: რაოდენობის სიმბოლოებს. 898 00:36:55,600 --> 00:36:56,710 დევიდ ჯ Malan: Just რაოდენობის სიმბოლოების s. 899 00:36:56,710 --> 00:36:59,040 ამიტომ სიგრძით s, ორიგინალური ტექსტი. 900 00:36:59,040 --> 00:37:00,350 ასე რომ G-a-b-e. 901 00:37:00,350 --> 00:37:02,320 ასე რომ, ალბათ ოთხი ამ შემთხვევაში. 902 00:37:02,320 --> 00:37:05,485 რატომ ვაკეთებ +1 შემდეგ მოუწოდებდა strlen s? 903 00:37:05,485 --> 00:37:06,360 აუდიტორია: [INAUDIBLE] 904 00:37:06,360 --> 00:37:07,590 დევიდ ჯ Malan: იმისათვის, რომ სპეციალური null ხასიათი. 905 00:37:07,590 --> 00:37:11,260 მე თუ მკითხავთ, რა არის ხანგრძლივობა Gabe სახელი, მე ვაპირებ ვთქვა, ოთხი. 906 00:37:11,260 --> 00:37:14,480 ქვევმოთ hood, თუმცა, მე უნდა რომ მეხუთე byte for null ხასიათი. 907 00:37:14,480 --> 00:37:16,100 ასე რომ, ამიტომ მე ვაკეთებ +1. 908 00:37:16,100 --> 00:37:21,730 >> ახლა მხოლოდ იმ შემთხვევაში თუ თქვენ გაშვებული ეს პროგრამა კომპიუტერის გარდა, ამბობენ, 909 00:37:21,730 --> 00:37:24,610 CS50 ელექტრო მოწყობილობების, სადაც ზომა char 910 00:37:24,610 --> 00:37:26,350 შეიძლება იყოს სხვადასხვა ჩემი საკუთარი კომპიუტერი 911 00:37:26,350 --> 00:37:30,590 გამოდის, რომ მე შემიძლია ამ ოპერატორი sizeof, ჰკითხეთ კომპიუტერი, 912 00:37:30,590 --> 00:37:32,870 რა არის ზომა char კომპიუტერი? 913 00:37:32,870 --> 00:37:37,400 >> და გამრავლებით ხუთ ამ მაგალითად ზომა char, რომელიც 914 00:37:37,400 --> 00:37:40,440 საუკეთესო კომპიუტერები იქნება მხოლოდ ერთი, malloc 915 00:37:40,440 --> 00:37:44,830 აპირებს გამოყოს ჩემთვის ეს დიდი ბლოკი მეხსიერების მეტი აქ უფლება. 916 00:37:44,830 --> 00:37:47,140 და ის აპირებს დაბრუნდეს ეს არის ფუნქცია, ასე რომ 917 00:37:47,140 --> 00:37:48,265 დაბრუნებას აპირებს რა? 918 00:37:48,265 --> 00:37:50,914 919 00:37:50,914 --> 00:37:51,830 აუდიტორია: მისამართი? 920 00:37:51,830 --> 00:37:53,709 დევიდ ჯ Malan: მისამართი რა? 921 00:37:53,709 --> 00:37:55,250 აუდიტორია: მეხსიერების გამოყოფილი? 922 00:37:55,250 --> 00:37:56,450 დევიდ ჯ Malan: რა მეხსიერების გამოყოფილი. 923 00:37:56,450 --> 00:37:59,189 ასე რომ, მე არ ვიცი, გულწრფელად, სადაც ეს ხდება დასრულდება. 924 00:37:59,189 --> 00:38:01,480 მე ვაპირებ, რომ შესთავაზოს ის აპირებს დასრულდება up at 0x88. 925 00:38:01,480 --> 00:38:02,770 926 00:38:02,770 --> 00:38:06,009 სრულიად უკანონო, მაგრამ სადღაც, გარდა 0x50, 927 00:38:06,009 --> 00:38:08,800 იმიტომ, რომ ოპერაციული სისტემა, რა Windows და Mac OS გააკეთებს ჩემთვის, 928 00:38:08,800 --> 00:38:11,230 დარწმუნდით, რომ იგი აძლევდა me სხვადასხვა მოცულობით მეხსიერება. 929 00:38:11,230 --> 00:38:14,210 >> ასე რომ, ეს ღირებულება, სადაც ეს ბლოკი მეხსიერება შეიძლება დასრულდება მდე. 930 00:38:14,210 --> 00:38:16,060 ასე რომ, ეს არის ის, რაც მთავრდება აქ, 0x88. 931 00:38:16,060 --> 00:38:17,480 932 00:38:17,480 --> 00:38:21,570 ასე რომ, ახლა აშკარად, მე მესმის, რომ ეს არ არის იგივე, რაც ამ, 933 00:38:21,570 --> 00:38:23,960 იმიტომ, რომ ისინი მიუთითებს სხვადასხვა მოცულობით მეხსიერება. 934 00:38:23,960 --> 00:38:29,980 ასე რომ, თუ მე ახლა რეალურად გვინდა კოპირება ამ in, მოდით თქვენი შემოთავაზებული გადაწყვეტა. 935 00:38:29,980 --> 00:38:36,870 >> მოდით უბრალოდ, შევქმნათ ამისთვის მარყუჟის, და ამის t bracket i იღებს s bracket i. 936 00:38:36,870 --> 00:38:39,760 იმის გამო, რომ ახლა შემიძლია, ამ მასივი მსგავსი ჩანაწერები, 937 00:38:39,760 --> 00:38:43,390 იმიტომ, რომ მიუხედავად იმისა, რომ malloc ძალიან generically გამოყოფს me მეხსიერება, 938 00:38:43,390 --> 00:38:45,290 მეხსიერების მხოლოდ მომიჯნავე bytes. 939 00:38:45,290 --> 00:38:47,240 Byte, byte, byte, უკან დაბრუნება თავში დაბრუნება. 940 00:38:47,240 --> 00:38:50,030 >> დანამდვილებით შემიძლია, როგორც პროგრამისტი, მკურნალობა, როგორც მასივი, რომელიც 941 00:38:50,030 --> 00:38:55,090 იმას ნიშნავს, რომ შეგიძლიათ გამოიყენოთ ეს საბოლოოდ ნაცნობი notation რამოდენიმე კვადრატულ ფრჩხილებში. 942 00:38:55,090 --> 00:38:56,462 943 00:38:56,462 --> 00:39:00,020 >> ნება მომეცით პაუზის არსებობს, იმიტომ, რომ ეს არის ბევრი ერთდროულად, მაშინაც კი, 944 00:39:00,020 --> 00:39:03,530 მიუხედავად იმისა, რომ ძირითადი იდეა recap არის, რომ ტექსტი, მთელი ამ დროის განმავლობაში, 945 00:39:03,530 --> 00:39:05,550 არ არის ახალი მონაცემები ტიპის თავისთავად. 946 00:39:05,550 --> 00:39:10,150 უბრალოდ ე.წ. მაჩვენებელი, მისამართი ხასიათი, 947 00:39:10,150 --> 00:39:12,650 რაც მხოლოდ იმას ნიშნავს, რომ ეს ნომერი რომ ადამიანის კონვენცია 948 00:39:12,650 --> 00:39:15,350 ჩვენ, როგორც წესი, წერენ, როგორც 0x რაღაც. 949 00:39:15,350 --> 00:39:18,590 >> მაგრამ ეს მხოლოდ ნომერი, როგორიცაა 33 Oxford Street, 950 00:39:18,590 --> 00:39:20,530 რომელიც ხდება უნდა იყოს CS შენობის მისამართზე. 951 00:39:20,530 --> 00:39:22,000 952 00:39:22,000 --> 00:39:23,545 ნებისმიერი შეკითხვა ამ დეტალების? 953 00:39:23,545 --> 00:39:24,790 954 00:39:24,790 --> 00:39:25,289 ჰო? 955 00:39:25,289 --> 00:39:28,530 >> აუდიტორია: რატომ ჩვენ შეამოწმოს ტ ტოლი null? 956 00:39:28,530 --> 00:39:30,740 >> დევიდ ჯ Malan: რატომ შემოწმება t ტოლია null? 957 00:39:30,740 --> 00:39:33,250 თუ გადავხედავთ documentation-- დიდი question-- ამისთვის malloc, 958 00:39:33,250 --> 00:39:37,020 ის აპირებს ამბობენ ჯარიმა ბეჭდვითი, ზოგჯერ malloc შესაძლოა დაბრუნდეს null, 959 00:39:37,020 --> 00:39:38,080 ისევე GetString. 960 00:39:38,080 --> 00:39:41,820 და მართლაც, GetString ბრუნდება null თუ კი, თავის მხრივ, malloc ბრუნდება null, 961 00:39:41,820 --> 00:39:43,130 რადგან GetString იყენებს malloc. 962 00:39:43,130 --> 00:39:46,400 >> და რომ შეიძლება მოხდეს, თუ OS, Mac OS, Windows, რასაც, უბრალოდ, 963 00:39:46,400 --> 00:39:48,130 გარეთ მეხსიერების თქვენთვის. 964 00:39:48,130 --> 00:39:49,820 ასე რომ, რა მოხდა იქ. 965 00:39:49,820 --> 00:39:52,910 >> და მოდით, გაგიმხელთ ერთი რამ რომ შეიძლება უბრალოდ აფეთქება თქვენი გონება 966 00:39:52,910 --> 00:39:55,100 ან მთლიანად იქნება შორს მეტი ხაზი. 967 00:39:55,100 --> 00:39:59,770 მაგრამ ნება მომეცით დახევის up იგივე loop კოპირება, 968 00:39:59,770 --> 00:40:05,480 რომელიც მომენტში წინ, გაწვევა ეს. t bracket i იღებს s bracket i. 969 00:40:05,480 --> 00:40:06,740 >> ლამაზი და მოსახერხებელი. 970 00:40:06,740 --> 00:40:09,330 იგრძნობა კვირა ორი ერთხელ. 971 00:40:09,330 --> 00:40:14,920 მაგრამ ეს ვერსია რეალურად შეიძლება იყოს გადაწერილი, როგორც ეს, რომელიც გამოიყურება cryptic. 972 00:40:14,920 --> 00:40:18,280 ეს ტექნიკა მოუწოდა მაჩვენებელი არითმეტიკა, მისამართი არითმეტიკული. 973 00:40:18,280 --> 00:40:19,600 მაგრამ რატომ აკეთებს ამას მუშაობა? 974 00:40:19,600 --> 00:40:22,220 >> ახლა annoyingly, ავტორები C გადაწყვიტა გამოეყენებინა 975 00:40:22,220 --> 00:40:25,070 * სიმბოლო სხვადასხვა მიზნით. 976 00:40:25,070 --> 00:40:29,020 ჩვენ ვნახეთ, რომ გამოყენებული ერთხელ უკვე, char *, რაც ნიშნავს "მომეცი ცვლადი 977 00:40:29,020 --> 00:40:31,210 რომ აპირებს შეიცავს მისამართი char ". 978 00:40:31,210 --> 00:40:33,990 ასე რომ char *, ამ კონტექსტში, ნიშნავს "მომეცი ცვლადი". 979 00:40:33,990 --> 00:40:40,050 >> სამწუხაროდ, თუ თქვენ იყენებთ * გარეშე სიტყვის წინ მას, როგორც char, 980 00:40:40,050 --> 00:40:41,905 ის ახლა მოუწოდა dereference ოპერატორი. 981 00:40:41,905 --> 00:40:43,530 და ჩვენ ვხედავთ, ეს ადრე უფრო დიდი ხნის განმავლობაში. 982 00:40:43,530 --> 00:40:44,930 მაგრამ ეს მხოლოდ იმას ნიშნავს, "იქ". 983 00:40:44,930 --> 00:40:49,070 ეს იგივეა, თითქოს ამბობდა, თუ ვინმე გადასცა ნაჭერი ქაღალდი "33 Oxford Street," 984 00:40:49,070 --> 00:40:53,830 თუ მე "* 33 Oxford Street," რაც იმას ნიშნავს, "ქვევით გზის CS შენობაში." 985 00:40:53,830 --> 00:40:57,220 >> ასე * მხოლოდ იმას ნიშნავს, რომ თუ არ არსებობს სიტყვა წინ. 986 00:40:57,220 --> 00:40:59,100 რა არის t, უნდა იყოს ნათელი? 987 00:40:59,100 --> 00:41:03,250 t არის მისამართი ბლოკი მეხსიერება, რომელიც გადაეცა უკან ჩემთვის. 988 00:41:03,250 --> 00:41:06,650 s არის მისამართი რა, უნდა იყოს ნათელი, მაგალითად ჩვენ განხილვას, 989 00:41:06,650 --> 00:41:07,500 ამას Gabe? 990 00:41:07,500 --> 00:41:08,990 991 00:41:08,990 --> 00:41:10,005 s არის მისამართი of-- 992 00:41:10,005 --> 00:41:11,585 993 00:41:11,585 --> 00:41:12,460 აუდიტორია: სიმებიანი. 994 00:41:12,460 --> 00:41:14,126 დევიდ ჯ Malan: რა Gabe ორიგინალური სახელი. 995 00:41:14,126 --> 00:41:16,660 ასე რომ, ეს მისამართი ბლოკი მეხსიერება. 996 00:41:16,660 --> 00:41:22,220 ასე რომ, თუ მე ვიტყვი, t + შევიდე i, განცხადებების, მხოლოდ ჩვენი ძველი მეგობარი. 997 00:41:22,220 --> 00:41:24,770 უბრალოდ ინდექსი ცვლადი რომ iterating ნულიდან on up 998 00:41:24,770 --> 00:41:26,960 ხანგრძლივობა სიმებიანი. 999 00:41:26,960 --> 00:41:30,367 ასე რომ, ეს უნდა იყოს ნულოვანი, მაშინ ერთი, შემდეგ ორი, სამი, მაშინ ოთხი. 1000 00:41:30,367 --> 00:41:33,200 ასე რომ, მოდით შეიკრიბება ეს ახალი Scratch-like თავსატეხი ცალი, თუ გნებავთ, 1001 00:41:33,200 --> 00:41:36,140 მიუხედავად იმისა, ერთხელ, სინტაქსი ბევრად უფრო arcane ვიდრე Scratch. 1002 00:41:36,140 --> 00:41:39,522 ასე t არის მისამართი + მე აპირებს მომეცი 1003 00:41:39,522 --> 00:41:42,480 ნომერი, იმიტომ, რომ ეს არის ყველა ციფრები, რომ ჩვენ უკვე ხატვის hex. 1004 00:41:42,480 --> 00:41:43,560 მაგრამ ისინი უბრალოდ ნომრები. 1005 00:41:43,560 --> 00:41:49,960 >> ასე რომ, თუ მისამართი t ჩვენ ვთქვით, იყო 0x88, რა 0x88 plus ნულოვანი. 1006 00:41:49,960 --> 00:41:51,564 1007 00:41:51,564 --> 00:41:53,980 მაშინაც კი, თუ თქვენ არ კომფორტული ერთად hex არ არის, მიიღოს ამოიცნობთ. 1008 00:41:53,980 --> 00:41:54,410 >> აუდიტორია: ორიგინალური. 1009 00:41:54,410 --> 00:41:55,850 >> დევიდ ჯ Malan: Still 0x88. 1010 00:41:55,850 --> 00:41:58,910 ასე რომ, რა * 0x88 ნიშნავს? 1011 00:41:58,910 --> 00:42:02,670 ეს ნიშნავს, რომ "იქ" რაც იმას ნიშნავს, ეფექტურად, "დააყენა თითის აქ." 1012 00:42:02,670 --> 00:42:06,930 და ახლა მარჯვენა მხარეს ეს გამოთქმა, და შემდეგ parens, 1013 00:42:06,930 --> 00:42:11,586 s + i ნიშნავს ის, რომელიც არის მისამართი აქ პატარა გ. 1014 00:42:11,586 --> 00:42:16,220 s + 0, რა თქმა უნდა, ის, რაც წინ არის. 1015 00:42:16,220 --> 00:42:21,230 >> ასე რომ, ახლა, ეს * s, რომელიც ისევე, როგორც * 33 Oxford Street ნიშნავს წასვლა მისამართი 1016 00:42:21,230 --> 00:42:22,010 s. 1017 00:42:22,010 --> 00:42:24,170 ასე რომ, აქ ამ თითი მარჯვენა ხელი. 1018 00:42:24,170 --> 00:42:26,050 რა ვარ მე აპირებს შევიდა რა? 1019 00:42:26,050 --> 00:42:30,260 რამ უფლება, რომელიც Gabe, პატარა გ აქ, შევიდა აქ. 1020 00:42:30,260 --> 00:42:32,750 >> და ასე ეფექტი რომ პირველი iteration of loop, 1021 00:42:32,750 --> 00:42:36,200 როგორც თქვენ შესთავაზა, მიუხედავად იმისა, რომ იგი გამოიყურება გიჟები უფრო რთული, ვიდრე არაფერი 1022 00:42:36,200 --> 00:42:42,110 ჩვენ ვნახეთ ადრე, უბრალოდ ვამბობ, აქ და ასლი, რომ ხასიათი აქ. 1023 00:42:42,110 --> 00:42:44,700 ის გაწვდით რუკა ორივე ადგილას. 1024 00:42:44,700 --> 00:42:46,130 >> და ჩვენ ვხედავთ, ბევრად უფრო ეს. 1025 00:42:46,130 --> 00:42:50,600 მაგრამ ახლა, იმედი მაქვს, უბრალოდ, დანერგვა ზოგიერთი ძირითადი იდეები. 1026 00:42:50,600 --> 00:42:53,550 და მართლაც, მოდით შევხედოთ ერთი საბოლოო პროგრამა აქ, 1027 00:42:53,550 --> 00:42:57,480 და შემდეგ დაპირებული claymation, რომელიც ყველაფერს ყველა უფლება. 1028 00:42:57,480 --> 00:42:57,980 ყველა უფლება. 1029 00:42:57,980 --> 00:43:01,680 ნება მომეცით გახსნა up-- იქ წასვლა. 1030 00:43:01,680 --> 00:43:02,850 1031 00:43:02,850 --> 00:43:05,440 ასე რომ, ნება მომეცით, ჩვენ დავბრუნდებით ამ სურათს ადრე ხანგრძლივი. 1032 00:43:05,440 --> 00:43:08,360 ნება მომეცით გახსენით საბოლოო მაგალითად აქ. 1033 00:43:08,360 --> 00:43:09,440 1034 00:43:09,440 --> 00:43:12,710 >> ასე რომ, აქ არის სუპერ, სუპერ პროგრამა, რომელიც ახორციელებს 1035 00:43:12,710 --> 00:43:15,050 არაფერი ცხოვრებაში, რომელიც აკეთებს შემდეგ. 1036 00:43:15,050 --> 00:43:18,740 ეს პირველი აცხადებს ორი ცვლადის, x და y, რომელიც არ არის ნომრები ამ დროს, 1037 00:43:18,740 --> 00:43:19,240 თავისთავად. 1038 00:43:19,240 --> 00:43:20,448 ისინი არ რიცხვებით, თავისთავად. 1039 00:43:20,448 --> 00:43:22,899 ისინი, როგორც ჩანს, int *. 1040 00:43:22,899 --> 00:43:25,690 ასე რომ მხოლოდ ვინმეს, რას ნიშნავს ეს თუ თქვენი მონაცემები ტიპის, თქვენი ცვლადი, 1041 00:43:25,690 --> 00:43:26,860 ტიპის int * ვარსკვლავი? 1042 00:43:26,860 --> 00:43:30,240 რომ არის მისამართი int. 1043 00:43:30,240 --> 00:43:31,990 >> ასე რომ, მე არ ვიცი, სად არის ის ამჟამად. 1044 00:43:31,990 --> 00:43:35,150 ეს უბრალოდ ნიშნავს "დააყენა, საბოლოოდ, მისამართი int აქ. " 1045 00:43:35,150 --> 00:43:38,340 0x50, 0x88, სადაც არ არის მეხსიერება, მისამართი მიმდინარეობს. 1046 00:43:38,340 --> 00:43:40,200 და ეს რა y არის იქნება, ასევე. 1047 00:43:40,200 --> 00:43:44,920 >> თუ მე ახლა ვიტყვი, x = malloc (sizeof (int)), ეს არის ლამაზი გზა ამბობდა, 1048 00:43:44,920 --> 00:43:49,000 hey ოპერაციული სისტემის მეშვეობით malloc, მომეცი საკმარისი მეხსიერება ზომა 1049 00:43:49,000 --> 00:43:52,370 int, რომელიც, სავარაუდოდ, იქნება 32 ბიტი ან ოთხი ბაიტი. 1050 00:43:52,370 --> 00:43:53,680 >> ასე რომ, რას malloc დაბრუნებას? 1051 00:43:53,680 --> 00:43:55,250 Malloc ბრუნდება მისამართზე. 1052 00:43:55,250 --> 00:43:57,020 ასე რომ, რა ხდება მისაღებად ინახება x? 1053 00:43:57,020 --> 00:44:00,600 მისამართი ბლოკი მეხსიერება, ოთხი ბაიტი, რომელიც malloc 1054 00:44:00,600 --> 00:44:03,360 უბრალოდ ი ჩემთვის მიერ გეკითხებით ოპერაციული სისტემა. 1055 00:44:03,360 --> 00:44:08,240 >> ახლა იმავდროულად, ხაზი ოთხ აქ, * x = 42. 1056 00:44:08,240 --> 00:44:09,990 უბრალოდ უნდა იყოს წმინდა, რა ხდება ქვემოთ იქ? 1057 00:44:09,990 --> 00:44:11,530 მარცხენა მხარეს, * x. 1058 00:44:11,530 --> 00:44:13,610 ასეთი * 33 Oxford Street. 1059 00:44:13,610 --> 00:44:15,523 ასე * x რას ნიშნავს? 1060 00:44:15,523 --> 00:44:16,450 >> აუდიტორია: გადასვლა. 1061 00:44:16,450 --> 00:44:17,908 >> დევიდ ჯ Malan: გადადით ამ მისამართზე. 1062 00:44:17,908 --> 00:44:20,466 იქ, სადაც ბლოკი მეხსიერების, წავიდეს იგი. 1063 00:44:20,466 --> 00:44:21,979 და თუ არსებობს, რა თქმა უნდა? 1064 00:44:21,979 --> 00:44:22,520 აუდიტორია: 42. 1065 00:44:22,520 --> 00:44:23,580 დევიდ ჯ Malan: 42. 1066 00:44:23,580 --> 00:44:25,650 ყველა უფლება, * Y, იგივე იდეა. 1067 00:44:25,650 --> 00:44:26,860 გადადით მისამართზე წ. 1068 00:44:26,860 --> 00:44:31,740 განათავსეთ ნომერი 13 იქ, მაგრამ რა არის y მომენტში? 1069 00:44:31,740 --> 00:44:33,172 1070 00:44:33,172 --> 00:44:34,630 აუდიტორია: არ არის მეხსიერების y. 1071 00:44:34,630 --> 00:44:35,710 დევიდ ჯ Malan: არსებობს არის მეხსიერების y. 1072 00:44:35,710 --> 00:44:38,215 ასე რომ, რას y ალბათ შეიცავდეს, როგორც ჩვენ ვამბობდით? 1073 00:44:38,215 --> 00:44:38,520 >> აუდიტორია: Garbage. 1074 00:44:38,520 --> 00:44:39,480 >> დევიდ ჯ Malan: ზოგიერთი ნაგვის ღირებულება. 1075 00:44:39,480 --> 00:44:41,320 ახლა, ნაგვის ღირებულება, ჯერ კიდევ არის. 1076 00:44:41,320 --> 00:44:43,160 ის მაინც უნდა იყოს ცდება მისამართზე. 1077 00:44:43,160 --> 00:44:45,160 ის თითქოს ვიღაცამ scribbled რაღაც ქვემოთ 1078 00:44:45,160 --> 00:44:48,002 მე და არასწორი ინტერპრეტაცია მას აზრი რამდენიმე შენობა ქვემოთ ქუჩაში. 1079 00:44:48,002 --> 00:44:50,460 და თუ უბრალოდ ცდილობენ წასვლას რამდენიმე შენობა არ ფლობენ, 1080 00:44:50,460 --> 00:44:53,710 ან ზოგიერთი ბლოკი მეხსიერება თქვენ არ მიეცა, ცუდი რამ შეიძლება მოხდეს. 1081 00:44:53,710 --> 00:44:57,740 კომპიუტერი შეიძლება ავარიის ან რაიმე სხვა დაუდგენელი ქცევა შეიძლება მოხდეს. 1082 00:44:57,740 --> 00:45:01,310 >> ასე რომ, intro, მაშინ, Binky არის. 1083 00:45:01,310 --> 00:45:04,290 მე მაინც მახსოვს, 20 რაღაც უცნაური წლის შემდეგ, 1084 00:45:04,290 --> 00:45:07,200 სადაც მე ვიყავი, როცა ბოლოს და ბოლოს, მიხვდა მითითებას. 1085 00:45:07,200 --> 00:45:09,520 >> რაც უნდა ითქვას, რომ, თუ დატოვონ აქ სამ წუთში 1086 00:45:09,520 --> 00:45:12,170 და ვფიქრობ, რომ არ გვესმის პოინტერები, გააცნობიეროს 1087 00:45:12,170 --> 00:45:14,410 მახსოვს 20 ახალი რაიმე გიჟები მიზეზი 1088 00:45:14,410 --> 00:45:17,140 როდის და რატომ საბოლოოდ ჩაიძირა in, სხდომაზე ჩემი სწავლების 1089 00:45:17,140 --> 00:45:19,501 თანამემამულე, Nishat Mehta in უკან Eliot სასადილო დარბაზი. 1090 00:45:19,501 --> 00:45:21,250 ახლა, მე გაიხსენა იმიტომ, რომ ეს იყო 1091 00:45:21,250 --> 00:45:23,920 ერთი თემა მე, კერძოდ, ბრძოლა. 1092 00:45:23,920 --> 00:45:26,470 და მაშინ, საბოლოოდ დააწკაპებთ, როგორც მე ვერ გაბედავს ამბობენ ბევრი თემები 1093 00:45:26,470 --> 00:45:27,460 საბოლოო ჯამში. 1094 00:45:27,460 --> 00:45:32,590 და ახლა, იმისათვის, რომ ეს გრძნობს ყველა ბედნიერი და ყველა უფრო დამაჯერებელი, 1095 00:45:32,590 --> 00:45:35,360 მოდით საბოლოო სახეს ჩვენი ბოლო სამი წუთი აქ Binky, 1096 00:45:35,360 --> 00:45:37,675 ჩვენი მეგობარი, ნიკ Parlante სტენფორდის. 1097 00:45:37,675 --> 00:45:38,910 1098 00:45:38,910 --> 00:45:41,580 >> [ვიდეო აღწარმოების] 1099 00:45:41,580 --> 00:45:42,750 >> -Hey, Binky. 1100 00:45:42,750 --> 00:45:43,500 ვიღვიძებ! 1101 00:45:43,500 --> 00:45:45,960 დროა მაჩვენებელი fun. 1102 00:45:45,960 --> 00:45:47,012 >> რა არის ეს? 1103 00:45:47,012 --> 00:45:48,723 ბუნებაში პოინტერები? 1104 00:45:48,723 --> 00:45:50,580 Oh, გუდი, 1105 00:45:50,580 --> 00:45:53,563 >> -Well, უნდა დავიწყოთ, ვფიქრობ, ჩვენ სჭირდება რამდენიმე მითითებას. 1106 00:45:53,563 --> 00:45:54,390 >> -OK. 1107 00:45:54,390 --> 00:45:57,930 ეს კოდი გამოყოფს ორ მითითებას, რომელიც შეიძლება აღვნიშნო, რომ რიცხვებით. 1108 00:45:57,930 --> 00:45:58,430 -OK. 1109 00:45:58,430 --> 00:46:02,140 ისე, მე ვხედავ ორი ​​პოინტერები, მაგრამ ისინი არ ჩანს, მიუთითებს, რომ არაფერი. 1110 00:46:02,140 --> 00:46:02,980 >> ანუ უფლება. 1111 00:46:02,980 --> 00:46:05,100 თავდაპირველად, პოინტერები არ აღვნიშნო, რომ არაფერი. 1112 00:46:05,100 --> 00:46:08,030 რამ მათ აღვნიშნო, რომ უწოდებენ pointees და დახურეს ის 1113 00:46:08,030 --> 00:46:09,370 ცალკე ნაბიჯი. 1114 00:46:09,370 --> 00:46:10,220 >> -Oh,, უფლება. 1115 00:46:10,220 --> 00:46:10,950 ვიცოდი, რომ. 1116 00:46:10,950 --> 00:46:12,385 Pointees ცალკე. 1117 00:46:12,385 --> 00:46:14,315 Er, ასე როგორ გამოყოფს pointee? 1118 00:46:14,315 --> 00:46:15,340 1119 00:46:15,340 --> 00:46:15,960 >> -OK. 1120 00:46:15,960 --> 00:46:18,970 ისე, ეს კოდი გამოყოფს ახალი რიცხვი pointee, 1121 00:46:18,970 --> 00:46:20,950 და ეს ნაწილი ადგენს x აღვნიშნო მას. 1122 00:46:20,950 --> 00:46:22,050 1123 00:46:22,050 --> 00:46:23,230 >> -Hey, რომ უკეთესია. 1124 00:46:23,230 --> 00:46:25,060 ასე რომ ეს რაღაც. 1125 00:46:25,060 --> 00:46:25,990 >> -OK. 1126 00:46:25,990 --> 00:46:30,455 მე dereference მაჩვენებელი x to შესანახად ხმების 42 თავის pointee. 1127 00:46:30,455 --> 00:46:32,830 ამ ნომრის, მე უნდა ჩემი ჯადოსნური ჯოხი of dereferencing. 1128 00:46:32,830 --> 00:46:34,130 1129 00:46:34,130 --> 00:46:36,080 >> -Your Magic Wand dereferencing? 1130 00:46:36,080 --> 00:46:37,357 1131 00:46:37,357 --> 00:46:38,190 That-- რომ დიდი. 1132 00:46:38,190 --> 00:46:39,340 1133 00:46:39,340 --> 00:46:41,080 >> _ ეს რა კოდი ჰგავს. 1134 00:46:41,080 --> 00:46:44,110 მე უბრალოდ შეიქმნა ნომერი, და [POP] 1135 00:46:44,110 --> 00:46:44,700 >> -Hey, გამოიყურება. 1136 00:46:44,700 --> 00:46:46,140 იქ მიდის. 1137 00:46:46,140 --> 00:46:50,980 >> ანუ, ამით dereference on x შემდეგნაირად arrow წვდომისათვის მისი pointee. 1138 00:46:50,980 --> 00:46:53,160 ამ შემთხვევაში, მაღაზია 42 იქ. 1139 00:46:53,160 --> 00:46:57,710 Hey სცადეთ ეს შესანახად ნომერი 13 გზით სხვა მაჩვენებელი, y. 1140 00:46:57,710 --> 00:46:58,760 >> -OK. 1141 00:46:58,760 --> 00:47:03,270 მე უბრალოდ მეტი აქ Y, და მიიღეთ ხმების 13 შეიქმნა. 1142 00:47:03,270 --> 00:47:07,930 და მაშინ, მიიღოს კვერთხის Dereferencing და მხოლოდ [BUZZ] 1143 00:47:07,930 --> 00:47:08,960 >> -Oh! 1144 00:47:08,960 --> 00:47:09,500 >> -Oh, Hey! 1145 00:47:09,500 --> 00:47:11,090 ეს არ იმუშავებს. 1146 00:47:11,090 --> 00:47:15,630 ამბობენ, Binky, არა მგონია, dereferencing Y არის კარგი იდეა, რადგან თქვენ იცით, 1147 00:47:15,630 --> 00:47:17,850 შექმნის pointee არის ცალკე ნაბიჯი. 1148 00:47:17,850 --> 00:47:20,450 და არა მგონია, ჩვენ ოდესმე ეს. 1149 00:47:20,450 --> 00:47:21,480 >> , კარგი წერტილი. 1150 00:47:21,480 --> 00:47:21,980 -Yeah. 1151 00:47:21,980 --> 00:47:25,680 ჩვენ გამოყოფილი მაჩვენებელი y, მაგრამ ჩვენ არასოდეს ვაყენებთ მას აღვნიშნო, რომ pointee. 1152 00:47:25,680 --> 00:47:27,190 1153 00:47:27,190 --> 00:47:28,616 >> -ძალიან დაკვირვებულობა. 1154 00:47:28,616 --> 00:47:30,240 -Hey, თქვენ ეძებთ კარგი იქ, Binky. 1155 00:47:30,240 --> 00:47:33,400 შეგიძლიათ დაფიქსირება ისე, რომ y რაოდენობა იმავე pointee როგორც x? 1156 00:47:33,400 --> 00:47:34,000 >> -Sure. 1157 00:47:34,000 --> 00:47:36,780 მე გამოიყენოს ჩემს Magic Wand საქართველოს მაჩვენებელი საბუთი. 1158 00:47:36,780 --> 00:47:38,740 >> რამდენად დიდია, რომ იქნება პრობლემა, როგორც ადრე? 1159 00:47:38,740 --> 00:47:39,240 არა. 1160 00:47:39,240 --> 00:47:40,660 ეს არ შეეხოთ pointees. 1161 00:47:40,660 --> 00:47:44,450 უბრალოდ ცვლის ერთ მომცეთ აღვნიშნო, რომ იგივე რამ, როგორც სხვა. 1162 00:47:44,450 --> 00:47:45,450 >> -Oh, მე ვერ ვხედავ. 1163 00:47:45,450 --> 00:47:48,200 ახლა Y რაოდენობა იმავე ადგილას, როგორც x. 1164 00:47:48,200 --> 00:47:48,910 ასე რომ დაველოდოთ. 1165 00:47:48,910 --> 00:47:49,950 ახლა, Y დაფიქსირდა. 1166 00:47:49,950 --> 00:47:51,120 მას აქვს pointee. 1167 00:47:51,120 --> 00:47:54,510 ასე რომ თქვენ შეგიძლიათ სცადოთ კვერთხის Dereferencing კვლავ გამოაგზავნოს 13 დასრულდა. 1168 00:47:54,510 --> 00:47:56,510 >> -Uh, OK. 1169 00:47:56,510 --> 00:47:58,160 აქ გადის. [POP] 1170 00:47:58,160 --> 00:47:59,340 >> -Hey, შევხედოთ, რომ. 1171 00:47:59,340 --> 00:48:00,750 ახლა dereferencing სამუშაოები y. 1172 00:48:00,750 --> 00:48:04,991 და რადგან მითითებები გაზიარებას რომ ერთი pointee, ორივე ვხედავთ 13. 1173 00:48:04,991 --> 00:48:05,490 -Yeah. 1174 00:48:05,490 --> 00:48:06,870 გაზიარებას, რასაც. 1175 00:48:06,870 --> 00:48:08,820 ასე რომ, ჩვენ ვაპირებთ გადართვის ადგილებში ახლა? 1176 00:48:08,820 --> 00:48:09,440 >> Oh, შეხედეთ. 1177 00:48:09,440 --> 00:48:10,830 ჩვენ გარეთ დრო. 1178 00:48:10,830 --> 00:48:11,570 >> -But-- 1179 00:48:11,570 --> 00:48:13,530 >> -Just მახსოვს სამი მაჩვენებელი წესები. 1180 00:48:13,530 --> 00:48:16,560 Number One, ძირითადი სტრუქტურა არის, რომ თქვენ უნდა მომცეთ, 1181 00:48:16,560 --> 00:48:18,680 და ეს მიუთითებს იმ pointee. 1182 00:48:18,680 --> 00:48:20,640 მაგრამ კურსორი და pointee ცალკე, 1183 00:48:20,640 --> 00:48:22,610 და საერთო შეცდომა შეიქმნას მაჩვენებელი, 1184 00:48:22,610 --> 00:48:25,000 მაგრამ დავიწყება მისცეს მას pointee. 1185 00:48:25,000 --> 00:48:28,170 >> ნომერი ორი, კურსორი dereferencing იწყება მაჩვენებელი 1186 00:48:28,170 --> 00:48:31,050 და შემდეგნაირად arrow მეტი წვდომისათვის მისი pointee. 1187 00:48:31,050 --> 00:48:33,400 როგორც ვიცით, ამ მუშაობს მხოლოდ მაშინ თუ არსებობს 1188 00:48:33,400 --> 00:48:36,270 pointee, რაც ერთგვარი უბრუნდება წესი ნომერი ერთი. 1189 00:48:36,270 --> 00:48:39,000 >> ნომერი სამი, მაჩვენებელი დავალება იღებს ერთ კურსორი 1190 00:48:39,000 --> 00:48:42,320 და ცვლის მას უნდა აღვნიშნო, რომ იგივე pointee მორიგ მაჩვენებელი. 1191 00:48:42,320 --> 00:48:44,160 ამიტომ მას შემდეგ, რაც დავალება, ორი პოინტერები 1192 00:48:44,160 --> 00:48:45,910 აღვნიშნავთ, რომ იგივე pointee. 1193 00:48:45,910 --> 00:48:47,990 ზოგჯერ, რომ ე.წ. გაზიარების. 1194 00:48:47,990 --> 00:48:49,740 და ეს ყველაფერი არ არის, ნამდვილად. 1195 00:48:49,740 --> 00:48:50,277 Bye-bye არის. 1196 00:48:50,277 --> 00:48:51,110 [END ვიდეო აღწარმოების] 1197 00:48:51,110 --> 00:48:52,568 დევიდ ჯ Malan: ეს არის ის, CS50. 1198 00:48:52,568 --> 00:48:55,110 ჩვენ, თქვენ მომავალ კვირას. 1199 00:48:55,110 --> 00:48:56,064