1 00:00:00,000 --> 00:00:10,970 >> [მუსიკალური სათამაშო] 2 00:00:10,970 --> 00:00:12,536 >> დევიდ ჯ Malan ყველა უფლება. 3 00:00:12,536 --> 00:00:13,392 >> [სიცილი] 4 00:00:13,392 --> 00:00:14,240 >> კეთილი იყოს. 5 00:00:14,240 --> 00:00:14,990 ეს არის CS50. 6 00:00:14,990 --> 00:00:16,890 ეს ბოლოს კვირაში ხუთი. 7 00:00:16,890 --> 00:00:20,020 და დღემდე, ჩვენ საკმაოდ ბევრი ხორციელდება თავისთავად, რომ არსებობს 8 00:00:20,020 --> 00:00:23,480 არსებობს ამ შემდგენელი, Clang, რომ თქვენ უკვე არა მარტო აპელირებს გზით ამ 9 00:00:23,480 --> 00:00:27,100 სხვა ინსტრუმენტი მოუწოდა გააკეთოს, რომ როგორმე magically გარდაქმნის თქვენი წყაროს კოდი 10 00:00:27,100 --> 00:00:31,350 შევიდა ობიექტის კოდი, zeros და პირობა რომ თქვენი კომპიუტერი CPU, ცენტრალური 11 00:00:31,350 --> 00:00:33,410 გადამამუშავებელი ერთეული, რეალურად ესმის. 12 00:00:33,410 --> 00:00:36,770 მაგრამ აღმოჩნდება, რომ არსებობს მთელი რიგი, რომ მიმდინარეობს ქვეშ hood in 13 00:00:36,770 --> 00:00:38,690 შორის შემავალი და გამომავალი. 14 00:00:38,690 --> 00:00:41,800 >> მინდა შესთავაზოს, რომ ჩვენ ხორცი რომ პატარა დეტალი შევიდა 15 00:00:41,800 --> 00:00:45,130 ამ ოთხი ნაბიჯი, რაღაც მოუწოდა წინასწარ დამუშავებას, რაღაც 16 00:00:45,130 --> 00:00:48,300 მოუწოდა შედგენა, რომელიც ჩვენ ვნახეთ, რაღაც მოუწოდა იკრიბებიან და 17 00:00:48,300 --> 00:00:49,420 რაღაც მოუწოდა აკავშირებს. 18 00:00:49,420 --> 00:00:53,270 ასე რომ, დღემდე, ზოგიერთ ჩვენი პროგრამები, ჩვენ გვქონდა მკვეთრი მოიცავს. 19 00:00:53,270 --> 00:00:56,650 ცოტა ხნის წინ ჩვენ გვქონდა გარკვეული მკვეთრი განსაზღვრავს for მუდმივები. 20 00:00:56,650 --> 00:01:00,660 გამოდის, რომ ის, რომ მათ prefixed ერთად hash სიმბოლო ან 21 00:01:00,660 --> 00:01:04,150 ფუნტი სიმბოლო არის წინასწარ პროცესორი დავალებები მისცა. 22 00:01:04,150 --> 00:01:07,960 ეს უბრალოდ ლამაზი გზა და განაცხადა, რომ ეს ხაზი კოდი, რომ, ფაქტობრივად, 23 00:01:07,960 --> 00:01:12,280 გარდაიქმნება სხვა რაიმე ადრე კომპიუტერული კი ცდილობენ გარდაქმნას თქვენი 24 00:01:12,280 --> 00:01:13,800 პროგრამა შევიდა zeros და პირობა. 25 00:01:13,800 --> 00:01:19,000 >> მაგალითად, მკვეთრი მოიცავს სტანდარტული I / O. სთ, საკმაოდ ბევრი მხოლოდ იმას ნიშნავს, წავიდეთ 26 00:01:19,000 --> 00:01:24,010 წინ, დაიბრუნოს შინაარსი ფაილი stdio.h და ჩასვით უფლება არსებობს. 27 00:01:24,010 --> 00:01:25,880 ასე რომ არ zeros და პირობა იმ ეტაპზე არ არის. 28 00:01:25,880 --> 00:01:27,470 ეს მართლაც მხოლოდ რიგებში. 29 00:01:27,470 --> 00:01:30,790 და ეს განმავლობაში განხორციელებული ე.წ. წინასწარი დამუშავების ეტაპზე, როდესაც თქვენ 30 00:01:30,790 --> 00:01:34,230 რეალურად აწარმოებს Clang ან კონკრეტულად სასტარტედ ხშირ შემთხვევაში. 31 00:01:34,230 --> 00:01:36,950 ასე რომ, ეს ყველაფერი მოხდა პირველი ავტომატურად დღემდე. 32 00:01:36,950 --> 00:01:38,800 >> შემდეგ მოდის შედგენაში ნაბიჯი. 33 00:01:38,800 --> 00:01:40,920 მაგრამ ჩვენ oversimplified კომპილაცია. 34 00:01:40,920 --> 00:01:45,060 შედგენა პროგრამა ნამდვილად ნიშნავს მას ეხლა რაღაც C, 35 00:01:45,060 --> 00:01:48,430 წყაროს კოდი ჩვენ წერდა, ქვემოთ რაღაც მოუწოდა ასამბლეის. 36 00:01:48,430 --> 00:01:52,900 ასამბლეის ენა ქვედა დონის ენა, რომელიც, საბედნიეროდ, ჩვენ არ 37 00:01:52,900 --> 00:01:55,480 ბევრი რამ გვაქვს შემთხვევა, დაწერა ამ სემესტრში. 38 00:01:55,480 --> 00:01:59,100 მაგრამ ეს ყველაზე დაბალი დონის გრძნობა, რომ თქვენ ფაქტიურად წერა 39 00:01:59,100 --> 00:02:04,270 დავამატებთ და სხვაობა და გამრავლების და დატვირთვის საწყისი მეხსიერების და შენახვა მეხსიერება, 40 00:02:04,270 --> 00:02:08,259 ძალიან რჩევები, რომ კომპიუტერი, ქვეშ Hood, 41 00:02:08,259 --> 00:02:09,639 რეალურად ესმის. 42 00:02:09,639 --> 00:02:14,930 >> და ბოლოს, შეკრებაზე იღებს, რომ ენა to zeros და პირობა, რომ ჩვენ 43 00:02:14,930 --> 00:02:16,190 სადაც აღწერილია დღემდე. 44 00:02:16,190 --> 00:02:19,270 და მართლაც ბოლოს, არსებობს ე.წ. აკავშირებს ეტაპი, რომელიც ჩვენ გამოგიგზავნით 45 00:02:19,270 --> 00:02:22,360 ვხედავ რაღაც მომენტში, რომელიც აერთიანებს თქვენი zeros და პირობა zeros და 46 00:02:22,360 --> 00:02:24,870 ვინც სხვა ადამიანების წინაშე თქვენ შექმენით. 47 00:02:24,870 --> 00:02:26,660 >> ამიტომ მიგვაჩნია, რომ ეს სუპერ მარტივი პროგრამა. 48 00:02:26,660 --> 00:02:27,560 ეს იყო კვირა 1. 49 00:02:27,560 --> 00:02:29,610 ეს უბრალოდ განაცხადა, Hello World, ეკრანზე. 50 00:02:29,610 --> 00:02:30,920 ჩვენ გაიქცა ამ გზით Clang. 51 00:02:30,920 --> 00:02:33,200 ან ჩვენ გაიქცა ის მეშვეობით სასტარტედ რომელიც გაიქცა Clang. 52 00:02:33,200 --> 00:02:36,170 და outputted დროს, როდესაც ზოგიერთი zeros და პირობა. 53 00:02:36,170 --> 00:02:38,100 მაგრამ აღმოჩნდება, რომ არსებობს შუალედური ნაბიჯი. 54 00:02:38,100 --> 00:02:40,460 თუ მე აქ - oops, არ გვინდა, რომ მას ამჟამად. 55 00:02:40,460 --> 00:02:44,800 თუ მე აქ, ჩემს მოწყობილობების მე და ქმნის hello.c, აქ 56 00:02:44,800 --> 00:02:46,160 ის არის, რომ იმავე პროგრამით. 57 00:02:46,160 --> 00:02:48,600 და რა მე ვაპირებ გავაკეთებ ტერმინალში ფანჯარა აქ მე ვაპირებ 58 00:02:48,600 --> 00:02:51,430 აწარმოებს Clang ვიდრე მიიღოს, რომელიც automates ოთხივე 59 00:02:51,430 --> 00:02:52,870 იმ ნაბიჯებს ჩვენთვის. 60 00:02:52,870 --> 00:02:58,620 და მე ვაპირებთ clang-S და შემდეგ hello.c და შემდეგ შევა. 61 00:02:58,620 --> 00:03:00,590 >> და მე მოციმციმე სწრაფი ერთხელ, რაც კარგია. 62 00:03:00,590 --> 00:03:05,280 ახლა კი ოდნავ უფრო დიდი ფანჯარა, მე ვაპირებ გახსნას gedit აქ. 63 00:03:05,280 --> 00:03:09,610 და მე ვაპირებ გახსნას ფაილი, რომელიც, აღმოჩნდება, ეწოდება hello.s ამ 64 00:03:09,610 --> 00:03:11,870 შეიცავს, რომ შეკრებისა ენა მე მოხსენიებული ადრე. 65 00:03:11,870 --> 00:03:15,060 ეს კი რასაც ასამბლეის ენა, საკმაოდ დაბალი დონე 66 00:03:15,060 --> 00:03:18,470 მითითებები, რომ თქვენი Intel CPU ან რასაც ის არის, რომ შიგნით 67 00:03:18,470 --> 00:03:19,350 ესმის. 68 00:03:19,350 --> 00:03:24,480 და mov არის ნაბიჯი. ზარი არის მოუწოდებს, ძალიან მაღალი დონის ფუნქცია. 69 00:03:24,480 --> 00:03:26,380 ქვე არის სხვაობა. 70 00:03:26,380 --> 00:03:30,370 >> ასე რომ, როდესაც თქვენ გაქვთ კონკრეტული CPU შიგნით თქვენს კომპიუტერში, რა ხდის 71 00:03:30,370 --> 00:03:34,300 მკაფიო, წინააღმდეგ სხვა პროცესორები წლის ბაზარზე, რომელიც რაც ინსტრუქციები იგი 72 00:03:34,300 --> 00:03:39,460 ესმის და ხშირად რამდენად ეფექტურია ეს არის, რამდენად სწრაფად იგი არის შესრულებაში გარკვეული 73 00:03:39,460 --> 00:03:40,380 იმ მითითებებს. 74 00:03:40,380 --> 00:03:45,150 ახლა მეტი ამ, თქვენ შეუძლია მომდევნო საშემოდგომო CS61 კოლეჯში. 75 00:03:45,150 --> 00:03:48,170 მაგრამ აქ ჩვენ გვაქვს, მაგალითად, რამდენიმე იდენტიფიკატორების, რომ შეიძლება ნაცნობი. 76 00:03:48,170 --> 00:03:50,150 hello.c არის პროგრამის სახელი. 77 00:03:50,150 --> 00:03:51,070 >> . ტექსტი - 78 00:03:51,070 --> 00:03:54,190 იქ არ არის ბევრი ინტერესი არსებობს ახლა, გავიხსენოთ, რომ ტექსტი 79 00:03:54,190 --> 00:03:59,190 სეგმენტი, როგორც ორშაბათს, არის სადაც მეხსიერების თქვენი პროგრამის რეალურად მთავრდება. 80 00:03:59,190 --> 00:04:01,330 ასე რომ, სულ ცოტა ბუნდოვნად ნაცნობი იქ. 81 00:04:01,330 --> 00:04:03,730 აქ, რა თქმა უნდა, ნახსენები ჩვენი მთავარი ფუნქცია. 82 00:04:03,730 --> 00:04:07,220 მოძრავი ქვემოთ, ეს ეხება რამ წ რეესტრი, ძალიან მცირე მოცულობით 83 00:04:07,220 --> 00:04:09,190 მეხსიერების შიგნით თქვენი ფაქტობრივი CPU. 84 00:04:09,190 --> 00:04:12,930 და თუ გადაფურცლეთ ქვემოთ კი შემდგომი, მე ვერ ვხედავ რაიმე სახის 85 00:04:12,930 --> 00:04:14,240 არაპირდაპირი ნახსენები ASCII. 86 00:04:14,240 --> 00:04:17,120 და იქ, რა თქმა უნდა, არის ის, რომ ტექსტი, hello, მძიმე, მსოფლიოში. 87 00:04:17,120 --> 00:04:20,079 >> ცოტა ხნის ამბავი მოკლედ, ეს იყო ხდება თქვენთვის, ავტომატურად, 88 00:04:20,079 --> 00:04:22,140 ქვეშ hood ყველა ამ დროს. 89 00:04:22,140 --> 00:04:26,450 და რაც ხდებოდა რეალურად ერთხელ თქვენ აწარმოებს Clang, ან გზით 90 00:04:26,450 --> 00:04:29,150 გააკეთოს, თქვენ მისაღებად პირველი, საწყისი კოდების, 91 00:04:29,150 --> 00:04:30,700 ე.წ. ასამბლეის ენაზე. 92 00:04:30,700 --> 00:04:35,210 მაშინ Clang არის კონვერტაცია ასამბლეას ენის ქვემოთ zeros და პირობა. 93 00:04:35,210 --> 00:04:38,340 და ეს არის slide, რომ ჩვენ დავიწყეთ ჩვენი განხილვის კვირა 0 on - 94 00:04:38,340 --> 00:04:39,840 და მაშინ კვირა 1. 95 00:04:39,840 --> 00:04:44,030 და მაშინ საბოლოოდ, იმ zeros და პირობა მათ ერთად zeros და პირობა 96 00:04:44,030 --> 00:04:47,190 იმ ბიბლიოთეკების ჩვენ ხორციელდება თავისთავად, როგორიცაა სტანდარტული I / O ან 97 00:04:47,190 --> 00:04:50,010 სიმებიანი ბიბლიოთეკა ან თუნდაც CS50 ბიბლიოთეკა. 98 00:04:50,010 --> 00:04:54,200 >> ასე ხატვა ამ სურათს მეტი ვიზუალურად, ჩვენ გვაქვს hello.c. 99 00:04:54,200 --> 00:04:57,220 და ეს, რა თქმა უნდა, იყენებს printf ფუნქციონირებს ვთქვა, Hello World. 100 00:04:57,220 --> 00:05:01,810 კრებული ნაბიჯი იღებს იგი ქვემოთ რომ ფაილი უბრალოდ დაინახა hello.s, მაშინაც კი, 101 00:05:01,810 --> 00:05:04,290 მიუხედავად იმისა, რომ ის, როგორც წესი, ამოღებულია ავტომატურად თქვენთვის. 102 00:05:04,290 --> 00:05:06,050 მაგრამ ეს შეკრების კოდი შუა ნაბიჯი. 103 00:05:06,050 --> 00:05:09,750 და მაშინ, როდესაც ჩვენ შეიკრიბება ასამბლეის ენა, ასე ვთქვათ, სწორედ მაშინ, როდესაც 104 00:05:09,750 --> 00:05:10,830 მიიღოს იმ zeros და პირობა. 105 00:05:10,830 --> 00:05:13,920 ასე რომ, ჩვენ zoomed ეფექტურად დღეს ის, რაც ჩვენ უკვე აღების მიანიჭა, 106 00:05:13,920 --> 00:05:16,430 ნიშნავს აპირებს წყაროს კოდი გააპროტესტებენ კოდი. 107 00:05:16,430 --> 00:05:18,850 >> მაგრამ ბოლოს, ახლა, რომ იგივე სურათი - მოდით shove გადასცემს მას 108 00:05:18,850 --> 00:05:20,020 მარცხენა მხარეს. 109 00:05:20,020 --> 00:05:22,880 და აღნიშნავენ, რომ ზედა არსებობს აღვნიშნე stdio.h. 110 00:05:22,880 --> 00:05:25,030 ეს არის ის, ფაილი, რომელიც ჩვენ შედის თითქმის ყველა 111 00:05:25,030 --> 00:05:26,250 პროგრამების ჩვენ დაწერილი. 112 00:05:26,250 --> 00:05:28,830 და ეს ფაილი, რომლის შინაარსი მიიღეთ ასლი გაკრული, 113 00:05:28,830 --> 00:05:30,350 ეფექტურად atop თქვენი კოდი. 114 00:05:30,350 --> 00:05:34,170 მაგრამ აღმოჩნდება, რომ, on კომპიუტერი სისტემაში სადღაც, იქ, სავარაუდოდ 115 00:05:34,170 --> 00:05:39,150 stdio.c ფაილი რომ ვინმე წერდა წლის წინ, რომ ახორციელებს ყველა 116 00:05:39,150 --> 00:05:41,870 ფუნქციები, რომელიც გამოცხადდა ამ stdio.h. 117 00:05:41,870 --> 00:05:45,465 >> ახლა რეალურად ეს, ალბათ არა თქვენი Mac ან თქვენი კომპიუტერის ან თუნდაც 118 00:05:45,465 --> 00:05:47,660 CS50 მოწყობილობების არის ნედლეული C კოდი. 119 00:05:47,660 --> 00:05:52,710 ვიღაცამ უკვე შედგენილი და შედის . O ფაილი ობიექტის კოდი ან. 120 00:05:52,710 --> 00:05:56,020 ფაილი, რომელიც ეხება გაუზიარეს ბიბლიოთეკა რომ უკვე წინასწარ დაყენებული და 121 00:05:56,020 --> 00:05:57,240 წინასწარ შედგენილი თქვენთვის. 122 00:05:57,240 --> 00:06:01,950 თუმცა ვივარაუდოთ, რომ იქ ნამდვილად არსებობს ჩვენს კომპიუტერში stdio.c პარალელურად 123 00:06:01,950 --> 00:06:02,650 ერთად Clang. 124 00:06:02,650 --> 00:06:04,960 შენი კოდექსის იქმნება და შეიკრიბება. 125 00:06:04,960 --> 00:06:09,200 stdio.c 's კოდი მიმდინარეობს შედგენილი და შეიკრიბნენ, რათა ეს ძალიან ბოლო 126 00:06:09,200 --> 00:06:13,730 ნაბიჯ, ქვემოთ, ჩვენ უნდა როგორღაც კავშირი, ასე ვთქვათ, თქვენი zeros და პირობა 127 00:06:13,730 --> 00:06:18,430 , მისივე zeros და პირობა ერთ მარტივი პროგრამა, რომელიც საბოლოოდ არის 128 00:06:18,430 --> 00:06:20,540 მოუწოდა მხოლოდ Hello. 129 00:06:20,540 --> 00:06:23,340 >> ასე რომ, ყველა ჯადოსნური, რომ ხდებოდა აქამდე. 130 00:06:23,340 --> 00:06:26,430 და ვაგრძელებთ ამ პროცესები თავისთავად, მაგრამ გააცნობიეროს 131 00:06:26,430 --> 00:06:28,750 არსებობს ბევრი წვნიანი ვრცლად მიმდინარეობს ქვეშ არსებობს. 132 00:06:28,750 --> 00:06:31,920 და ეს არის ის, რაც ხდის თქვენს კომპიუტერი Intel შიგნით 133 00:06:31,920 --> 00:06:33,940 განსაკუთრებით მკაფიო. 134 00:06:33,940 --> 00:06:37,020 >> ასე რომ შენიშვნა, თუ გსურთ შემოგვიერთდნენ ლანჩზე ამ პარასკევს, ამის წასვლა 135 00:06:37,020 --> 00:06:41,570 ჩვეულებრივი ადგილის cs50.net/rsvp, 1:15 PM ამ პარასკევს. 136 00:06:41,570 --> 00:06:43,400 ახლა კი რამდენიმე განცხადებები. 137 00:06:43,400 --> 00:06:44,670 ასე რომ, ჩვენ გვაქვს კარგი ამბავი. 138 00:06:44,670 --> 00:06:45,970 და ჩვენ გვაქვს ცუდი ამბავი. 139 00:06:45,970 --> 00:06:47,260 გადავიდეთ კარგი ამბავია აქ. 140 00:06:47,260 --> 00:06:52,038 141 00:06:52,038 --> 00:06:54,510 >> [Groaning] 142 00:06:54,510 --> 00:06:54,710 >> ყველა უფლება. 143 00:06:54,710 --> 00:06:56,670 ისე, ეს ტექნიკურად დღესასწაული, ასე ეს არ არის იმდენად საჩუქარი ჩვენგან. 144 00:06:56,670 --> 00:06:58,030 მაგრამ ცუდი ამბავი რა თქმა უნდა. 145 00:06:58,030 --> 00:07:00,550 146 00:07:00,550 --> 00:07:01,880 >> [Groaning] 147 00:07:01,880 --> 00:07:03,530 >> გავატარე ბევრი დრო აღნიშნულ ანიმაციები. 148 00:07:03,530 --> 00:07:04,690 >> [სიცილი] 149 00:07:04,690 --> 00:07:07,000 >> იქნება საანგარიშო სხდომამდე ამ მოდის ორშაბათს. 150 00:07:07,000 --> 00:07:08,340 ეს იქნება ერთი 5:30 საათზე. 151 00:07:08,340 --> 00:07:11,210 ჩვენ შეგახსენოთ ყველა ეს დეტალი ფოსტით on კურსის 152 00:07:11,210 --> 00:07:13,470 ნახვა მხოლოდ რამდენიმე დღის განმავლობაში. 153 00:07:13,470 --> 00:07:16,610 ეს იქნება გადაღებული და ხელმისაწვდომი ცოტა ხნის შემდეგ. 154 00:07:16,610 --> 00:07:19,200 ასე რომ, თუ თქვენ ვერ გააკეთოს, რომ ორშაბათს ღამის სლოტი, არ ინერვიულოთ. 155 00:07:19,200 --> 00:07:22,270 განყოფილებები ამ ერთი კვირის განმავლობაში ასევე ფოკუსირება მიმოხილვა ინტელექტუალური. 156 00:07:22,270 --> 00:07:25,670 თუ თქვენი მონაკვეთი, რომელიც ორშაბათს, რომელიც მართლაც უნივერსიტეტის დღესასწაული, ჩვენ 157 00:07:25,670 --> 00:07:26,920 მაინც შეხვდება ნაწილში. 158 00:07:26,920 --> 00:07:28,890 თუ თქვენ უბრალოდ ვერ გააკეთოს, რომ სექცია, რადგან თქვენ აპირებს 159 00:07:28,890 --> 00:07:29,860 მოშორებით, რომ ეს ჯარიმა. 160 00:07:29,860 --> 00:07:33,710 დაესწროს კვირა ან სამშაბათი სექციაში სრულყოფილი-in to ჯეისონ-ის მონაკვეთი, რომელიც 161 00:07:33,710 --> 00:07:35,110 ხელმისაწვდომი. 162 00:07:35,110 --> 00:07:37,490 >> ასე რომ, უფრო ცუდი ამბავი. 163 00:07:37,490 --> 00:07:41,960 ასე რომ, შესაბამისად სილაბუსი, ჩვენ გვაქვს ლექცია მომდევნო პარასკევს. 164 00:07:41,960 --> 00:07:43,690 მაგრამ კარგი ამბავი - 165 00:07:43,690 --> 00:07:44,860 აშკარად, გავატარე ძალიან ბევრი დრო ამ. 166 00:07:44,860 --> 00:07:45,280 >> [სიცილი] 167 00:07:45,280 --> 00:07:47,140 >> ჩვენ ყველაფერს გააუქმოს მომავალი პარასკევის ლექციებს. 168 00:07:47,140 --> 00:07:50,590 ასე რომ, იქნება საჩუქარი ჩვენთვის, ასე რომ თქვენ ნამდვილად აქვს ლამაზი შესვენების შემდეგ 169 00:07:50,590 --> 00:07:52,990 შორის ამ კვირაში და ორი კვირის აქედან გამომდინარე. 170 00:07:52,990 --> 00:07:57,460 ასე რომ არ ლექციების მომავალ კვირას, პატარა ცოტა ინტელექტუალური, რისთვისაც უნდა 171 00:07:57,460 --> 00:07:59,030 მიღების უფრო და უფრო აღფრთოვანებული. 172 00:07:59,030 --> 00:08:03,870 >> მოდით ახლა იქცეს ჩვენი ყურადღება რაღაც რომ მართლაც უფრო ვიზუალური 173 00:08:03,870 --> 00:08:06,990 და უფრო საინტერესო და შექმნას ეტაპზე იმისათვის, რაც იქნება ჰორიზონტზე ჩანს 174 00:08:06,990 --> 00:08:08,420 სულ რაღაც რამდენიმე კვირის განმავლობაში. 175 00:08:08,420 --> 00:08:12,160 მას შემდეგ, რაც ინტელექტუალური, ჩვენ იქცევა ფოკუსირება ჩვენი პრობლემა კომპლექტი სხვა 176 00:08:12,160 --> 00:08:16,710 domain კონკრეტული პრობლემა, რომ სასამართლო ექსპერტიზის ან უსაფრთხოებას ზოგადად. 177 00:08:16,710 --> 00:08:19,550 >> სინამდვილეში, ტრადიცია, ამ პრობლემის კომპლექტი არის ჩემთვის ერთ 178 00:08:19,550 --> 00:08:24,850 სწავლების თანამემამულე ან CAS ფეხით გასწვრივ campus გარკვეული ფოტოებით 179 00:08:24,850 --> 00:08:29,450 იდენტიფიცირება მაგრამ არა აშკარა ადამიანი, ადგილები, ან რამ, მაშინ ყოველ წელს I 180 00:08:29,450 --> 00:08:34,520 როგორღაც მოახერხა შემთხვევით წაშლა ან კორუმპირებული ციფრული მედია ანკეტა 181 00:08:34,520 --> 00:08:35,720 რომ შიგნით ჩვენი კამერა. 182 00:08:35,720 --> 00:08:36,860 თუმცა არ არის დიდი გარიგება. 183 00:08:36,860 --> 00:08:39,200 შემიძლია წავიდეთ წინ და plug რომ ჩემს კომპიუტერში. 184 00:08:39,200 --> 00:08:43,010 მე შემიძლია სასამართლო იმიჯი, ასე საუბარი, რომელსაც გადაწერა zeros და 185 00:08:43,010 --> 00:08:46,830 პირობა გამორთვა, რომ მეხსიერების ბარათი, თუ არა მისი SD ბარათის ან კომპაქტური ფლეშ ბარათი ან 186 00:08:46,830 --> 00:08:48,100 რასაც თქვენ ხართ იცნობს. 187 00:08:48,100 --> 00:08:49,300 და მაშინ ჩვენ შეგვიძლია ხელი, რომელიც გარეთ. 188 00:08:49,300 --> 00:08:53,190 >> ასე რომ, გამოწვევა წინ, სადაც სხვა რამ თქვენთვის, იქნება დაწერა 189 00:08:53,190 --> 00:08:58,630 C კოდი, რომელიც აღდგება მთელი bunch of JPEGs ჩემთვის და გამოვლენილი იქნება 190 00:08:58,630 --> 00:09:00,190 იმ ადამიანებს, ადგილები, ან რამ. 191 00:09:00,190 --> 00:09:03,340 და ჩვენ ასევე გაიგო, ამ პრობლემის მითითებული და უახლოეს მომავალში, დაახლოებით 192 00:09:03,340 --> 00:09:04,440 გრაფიკული ზოგადად. 193 00:09:04,440 --> 00:09:06,140 ჩვენ გამოიყენება, მათ, რა თქმა უნდა, ამისთვის წარმართულიყო. 194 00:09:06,140 --> 00:09:09,080 მაგრამ თქვენ ერთგვარი მიღებული მიანიჭა არსებობს ამ მაღალი დონის ცნებები 195 00:09:09,080 --> 00:09:10,680 საქართველოს ოთხკუთხედს და ovals. 196 00:09:10,680 --> 00:09:12,450 მაგრამ ქვეშ hood არსებობს pixels. 197 00:09:12,450 --> 00:09:14,370 თქვენ არ უნდა დაიწყოს ფიქრი იმ. 198 00:09:14,370 --> 00:09:18,800 ან თქვენ for P-ნაკრები 4 უნდა ვიფიქროთ შესახებ უფსკრული თქვენი აგურის, თუ როგორ 199 00:09:18,800 --> 00:09:21,990 სწრაფად თქვენ ბურთი გადაადგილდებიან ეკრანზე წარმართულიყო. 200 00:09:21,990 --> 00:09:24,830 ასე რომ, არსებობს ამ ცნება წერტილების თქვენს ეკრანზე, რომ 201 00:09:24,830 --> 00:09:26,290 მოვიდეს თამაში უკვე. 202 00:09:26,290 --> 00:09:29,430 >> ახლა რას ვხედავ, თუმცა, არის ის, რაც თქვენ შესახებ კომპიუტერის ეკრანზე. 203 00:09:29,430 --> 00:09:33,680 თუ თქვენ ოდესმე ნახეს რაღაც კარგი ან ცუდი TV, შანსი მათ საკმაოდ ბევრი 204 00:09:33,680 --> 00:09:36,280 მკურნალობა მაყურებელს მოსწონს technophobes ვინც ნამდვილად არ 205 00:09:36,280 --> 00:09:37,630 ვიცი ბევრი შესახებ კომპიუტერული. 206 00:09:37,630 --> 00:09:40,840 ასე რომ, ეს ძალიან ადვილია პოლიციის დეტექტივის ვთქვა, შეგიძლიათ 207 00:09:40,840 --> 00:09:41,710 გაწმენდა რომ ჩემთვის? 208 00:09:41,710 --> 00:09:42,710 ან გაძლიერება, არა? 209 00:09:42,710 --> 00:09:45,550 გაძლიერება ჰგავს ხმაურს სიტყვა ყველაზე ნებისმიერი დანაშაული დაკავშირებული შოუ. 210 00:09:45,550 --> 00:09:49,240 რეალობა არის თუ მიიღოს ძალიან blurry სურათს ეჭვმიტანილის აკეთებს 211 00:09:49,240 --> 00:09:51,620 რაღაც ცუდი, თქვენ ვერ მხოლოდ გაზრდის. 212 00:09:51,620 --> 00:09:53,080 თქვენ არ შეგიძლიათ გასადიდებლად უსასრულოდ. 213 00:09:53,080 --> 00:09:56,350 თქვენ ვერ ხედავთ ამ Glint სხვისი თვალი, რომლებმაც ჩაიდინეს, რომ 214 00:09:56,350 --> 00:09:59,860 კერძოდ დანაშაული, მიუხედავად გავრცელების ამ ტელევიზიით. 215 00:09:59,860 --> 00:10:04,110 >> ასე რომ, რომ მოდით მოტივაცია, რომ მომავალი პრობლემა მითითებული glimpse at 216 00:10:04,110 --> 00:10:05,765 ზოგიერთი შოუები, რომელიც თქვენ შეიძლება იყოს ნაცნობი. 217 00:10:05,765 --> 00:10:06,500 >> [ვიდეო აღწარმოების] 218 00:10:06,500 --> 00:10:07,835 >> -OK. 219 00:10:07,835 --> 00:10:09,956 ახლა მოდით კარგი შევხედოთ თქვენ. 220 00:10:09,956 --> 00:10:17,060 221 00:10:17,060 --> 00:10:17,766 >> -მოლაპარაკებათა მაგიდას. 222 00:10:17,766 --> 00:10:18,658 გაშვება, რომ უკან. 223 00:10:18,658 --> 00:10:19,550 >> -დაელოდეთ ერთი წუთით. 224 00:10:19,550 --> 00:10:21,580 წავიდეთ უფლება. 225 00:10:21,580 --> 00:10:21,800 >> -არსებობს. 226 00:10:21,800 --> 00:10:22,690 გაყინვას, რომ. 227 00:10:22,690 --> 00:10:23,692 >> -Full ეკრანზე. 228 00:10:23,692 --> 00:10:23,846 >> -OK. 229 00:10:23,846 --> 00:10:24,154 გაყინვას, რომ. 230 00:10:24,154 --> 00:10:25,140 >> გამკაცრდეს up აღნიშნულ საკითხზე, იქნება ya? 231 00:10:25,140 --> 00:10:27,090 >> -ვექტორი წელს, რომ ბიჭი by უკან საჭე. 232 00:10:27,090 --> 00:10:29,730 >> -ზომით უფლება აქ ამ ადგილას. 233 00:10:29,730 --> 00:10:33,700 >> -უფლების მქონე ტექნიკის, imaged შეიძლება გაფართოებული და sharpened. 234 00:10:33,700 --> 00:10:34,490 >> -რა არის რომ? 235 00:10:34,490 --> 00:10:35,870 >> -ის გაფართოება პროგრამა. 236 00:10:35,870 --> 00:10:36,793 >> -შეგიძლიათ მიანიშნა, რომ არავითარ? 237 00:10:36,793 --> 00:10:38,560 >> მე არ ვიცი. 238 00:10:38,560 --> 00:10:39,090 მოდით გაზრდის. 239 00:10:39,090 --> 00:10:41,690 >> -გაძლიერება მონაკვეთზე-6. 240 00:10:41,690 --> 00:10:43,510 >> -I გაუმჯობესებულია დეტალურად და - 241 00:10:43,510 --> 00:10:44,456 >> -ვფიქრობ, საკმარისია, რათა გაზარდოს. 242 00:10:44,456 --> 00:10:45,402 გაათავისუფლოს იგი ჩემს ეკრანზე. 243 00:10:45,402 --> 00:10:47,300 >> -გაძლიერება ასახვას მისი თვალი. 244 00:10:47,300 --> 00:10:49,330 >> -მოდით აწარმოებს ამ გზით ვიდეო გაფართოება. 245 00:10:49,330 --> 00:10:50,340 >> -Edgar, შეგიძლიათ გაზარდოს ეს? 246 00:10:50,340 --> 00:10:52,320 >> -Hang on. 247 00:10:52,320 --> 00:10:54,290 >> -I've მუშაობს ამ ასახვა. 248 00:10:54,290 --> 00:10:55,560 >> -ვიღაცის ასახვა. 249 00:10:55,560 --> 00:10:56,440 >> -ასახვა. 250 00:10:56,440 --> 00:10:57,940 >> -არის ასახვა საქართველოს ადამიანის სახე. 251 00:10:57,940 --> 00:10:58,860 >> -ასახვა. 252 00:10:58,860 --> 00:10:59,710 >> -არის ასახვა. 253 00:10:59,710 --> 00:11:00,900 >> -ზომით სარკეში. 254 00:11:00,900 --> 00:11:03,500 >> -შეგიძლიათ ასახვა. 255 00:11:03,500 --> 00:11:04,700 >> -შეგიძლიათ აძლიერებს იმიჯი აქედან? 256 00:11:04,700 --> 00:11:05,700 >> -შეგიძლიათ აძლიერებს მას უფლება აქ? 257 00:11:05,700 --> 00:11:06,500 >> -შეგიძლიათ გაზრდის? 258 00:11:06,500 --> 00:11:07,380 >> -შეგიძლიათ გაზრდის? 259 00:11:07,380 --> 00:11:08,190 >> -შეგვიძლია გავაძლიეროთ ეს? 260 00:11:08,190 --> 00:11:08,940 >> -შეგიძლიათ გაზრდის? 261 00:11:08,940 --> 00:11:10,280 >> -გაიმართება მეორე, მე გაზარდოს. 262 00:11:10,280 --> 00:11:11,570 >> -ზომით კარი. 263 00:11:11,570 --> 00:11:12,180 >> -X10. 264 00:11:12,180 --> 00:11:13,052 >> -Zoom. 265 00:11:13,052 --> 00:11:13,197 >> [სიცილი] 266 00:11:13,197 --> 00:11:14,360 >> -გადატანა შემოსული 267 00:11:14,360 --> 00:11:15,100 >> -მოითმინეთ, შეწყდეს. 268 00:11:15,100 --> 00:11:15,740 >> გაჩერების. 269 00:11:15,740 --> 00:11:16,290 >> -პაუზის იგი. 270 00:11:16,290 --> 00:11:19,390 >> -როტაცია 75 გრადუსია დაახლოებით ვერტიკალური გთხოვთ. 271 00:11:19,390 --> 00:11:19,886 >> [სიცილი] 272 00:11:19,886 --> 00:11:24,350 >> გაჩერების და უკან ნაწილი შესახებ კარი ერთხელ. 273 00:11:24,350 --> 00:11:26,330 >> -Got იმიჯი Enhancer რომელიც შეიძლება bitmap? 274 00:11:26,330 --> 00:11:28,990 >> -იქნებ ჩვენ შეგვიძლია გამოვიყენოთ Pradeep Sen მეთოდის სანახავად შევიდა ფანჯრები. 275 00:11:28,990 --> 00:11:30,680 >> -ეს პროგრამული უზრუნველყოფა არის დონით. 276 00:11:30,680 --> 00:11:31,676 >> -ხატი ღირებულება არის მოედანი. 277 00:11:31,676 --> 00:11:34,166 >> -უფლების მქონე კომბინაცია საქართველოს ალგორითმები. 278 00:11:34,166 --> 00:11:38,399 >> -ის გადაღებული განათება ალგორითმები to მომდევნო დონეზე და შემიძლია მათი გამოყენება 279 00:11:38,399 --> 00:11:38,648 აძლიერებს ამ ფოტოს. 280 00:11:38,648 --> 00:11:42,050 >> -დაბლოკვა და გაფართოების z-ღერძი. 281 00:11:42,050 --> 00:11:42,760 >> -გაძლიერება. 282 00:11:42,760 --> 00:11:43,060 >> -გაძლიერება. 283 00:11:43,060 --> 00:11:43,760 >> -გაძლიერება. 284 00:11:43,760 --> 00:11:45,010 >> -Freeze და აძლიერებს. 285 00:11:45,010 --> 00:11:47,470 286 00:11:47,470 --> 00:11:47,910 >> [END ვიდეო აღწარმოების] 287 00:11:47,910 --> 00:11:51,470 >> დევიდ ჯ Malan: ასე რომ პრობლემა Set 5 რა დევს წინ ანგარიშით არსებობს. 288 00:11:51,470 --> 00:11:55,260 ასე რომ, ჩვენ მალე უკეთ თუ როდის და რატომ შეგიძლიათ 289 00:11:55,260 --> 00:11:57,300 და ჩვენი ვერ შეუწყობს ამ გზით. 290 00:11:57,300 --> 00:12:00,090 მაგრამ პირველი, დავუბრუნდეთ ჩვენს ყურადღებას ზოგიერთი შენობა ბლოკად ჩვენ გამოგიგზავნით 291 00:12:00,090 --> 00:12:02,250 უნდა შეეძლოს გითხრათ, რომ ამბავი. 292 00:12:02,250 --> 00:12:05,580 >> ასე რომ გავიხსენოთ, რომ ჩვენ მიიპყრო ამ სურათს ორშაბათს და ცოტა გასულ კვირას. 293 00:12:05,580 --> 00:12:09,970 ეს აღწერს განლაგება რამ თქვენს კომპიუტერის მეხსიერების როდესაც 294 00:12:09,970 --> 00:12:11,000 გაშვებული ზოგიერთი პროგრამა. 295 00:12:11,000 --> 00:12:14,310 ტექნიკური სეგმენტი დასაწყისშივე, გაწვევას, ეხება ფაქტობრივად zeros და პირობა 296 00:12:14,310 --> 00:12:16,000 რომ დაკომპლექტებას თქვენი პროგრამა. 297 00:12:16,000 --> 00:12:19,340 აქ არის, ქვემოთ რომ, ზოგიერთი ინიციალიზაცია ან uninitialized მონაცემები, რომლებიც, როგორც წესი, 298 00:12:19,340 --> 00:12:22,910 ეხება რამ, როგორიცაა მუდმივები ან strings ან გლობალური ცვლადები, რომ აქვს 299 00:12:22,910 --> 00:12:24,200 გამოცხადდა წინასწარ. 300 00:12:24,200 --> 00:12:26,500 აქ არის ბევრი, მაგრამ ჩვენ მოვა უკან რომ ცოტა. 301 00:12:26,500 --> 00:12:27,410 >> და მაშინ იქ დასტის. 302 00:12:27,410 --> 00:12:30,660 ისევე, როგორც დასტის ქაღალდის in cafeteria, ეს არის სადაც მეხსიერება იღებს 303 00:12:30,660 --> 00:12:33,610 ფენიანი და ფენიანი როდესაც ეს თქვენ რა ამ პროგრამაში? 304 00:12:33,610 --> 00:12:36,380 305 00:12:36,380 --> 00:12:37,730 რა არის დასტის გამოყენება? 306 00:12:37,730 --> 00:12:39,320 >> ჰო? 307 00:12:39,320 --> 00:12:40,000 >> Call of ფუნქცია. 308 00:12:40,000 --> 00:12:42,890 ნებისმიერ დროს თქვენ მოვუწოდებთ ფუნქცია, ეს მიენიჭოს Sliver მეხსიერების მისი 309 00:12:42,890 --> 00:12:45,020 ადგილობრივი ცვლადები ან მისი პარამეტრები. 310 00:12:45,020 --> 00:12:48,810 და pictorially, ჩვენ ვხედავთ, რომ თითოეული თანმიმდევრული ფუნქცია მოუწოდა, როდესაც 311 00:12:48,810 --> 00:12:52,520 ზარები B ზარები C ზარები D, მათ მიიღეთ ფენიანი გადატანა დასტის. 312 00:12:52,520 --> 00:12:55,630 და თითოეულ მათგანს ნაჭერი მეხსიერება არსებითად უნიკალური ფარგლებს 313 00:12:55,630 --> 00:12:58,590 ამისათვის ფუნქცია, რომელიც, რა თქმა უნდა, პრობლემატურია, თუ გინდათ გადასცემს 314 00:12:58,590 --> 00:13:01,850 ერთი ფუნქცია კიდევ ერთი ცალი მონაცემთა, რომ გსურთ 315 00:13:01,850 --> 00:13:03,500 to mutate ან შეცვალოს. 316 00:13:03,500 --> 00:13:08,060 >> ასე რომ, რა იყო ჩვენი გადაწყვეტა, რომელიც უზრუნველყოფს ფუნქციის წარმოდგენილია ერთი დასტის 317 00:13:08,060 --> 00:13:11,390 ვიზრუნოთ შეცვალოს მეხსიერების შიგნით მეორე დასტის ჩარჩოში? 318 00:13:11,390 --> 00:13:14,590 როგორ ორი განხილვა ერთმანეთს? 319 00:13:14,590 --> 00:13:18,510 ამიტომ გზით მითითებას ან მისამართები, რომელიც, კიდევ ერთხელ, მხოლოდ აღწერს, სადაც 320 00:13:18,510 --> 00:13:22,280 მეხსიერება, გზით კონკრეტული bite ნომერი, კერძოდ 321 00:13:22,280 --> 00:13:23,830 ღირებულება შეიძლება მოიძებნოს. 322 00:13:23,830 --> 00:13:26,860 ასე რომ გავიხსენოთ, ბოლო დროს ძალიან გავაგრძელეთ ამბავი და უყურებდნენ 323 00:13:26,860 --> 00:13:28,280 საკმაოდ buggy პროგრამა. 324 00:13:28,280 --> 00:13:32,900 ეს პროგრამა არის buggy რამდენიმე მიზეზის გამო, მაგრამ ყველაზე შემაშფოთებელი ის არის, 325 00:13:32,900 --> 00:13:34,620 რადგან იგი არ შეამოწმოს რა? 326 00:13:34,620 --> 00:13:39,111 327 00:13:39,111 --> 00:13:40,450 >> ჰო, ის ვერ შეამოწმებს შეყვანა. 328 00:13:40,450 --> 00:13:41,870 ბოდიში? 329 00:13:41,870 --> 00:13:43,880 >> თუ ეს უფრო მეტია, ვიდრე 12 სიმბოლო. 330 00:13:43,880 --> 00:13:47,260 ასე რომ, ძალიან smartly, დარეკვისას memcopy, რაც, როგორც სახელი ვარაუდობს, უბრალოდ 331 00:13:47,260 --> 00:13:50,630 ასლები მეხსიერება თავისი მეორე არგუმენტი მისი პირველი არგუმენტი. 332 00:13:50,630 --> 00:13:54,730 მესამე არგუმენტი, ძალიან smartly, არის შეამოწმეს, რათა დავრწმუნდეთ, რომ თქვენ არ 333 00:13:54,730 --> 00:13:59,400 კოპირება ზე მეტი, ამ შემთხვევაში, სიგრძე საქართველოს ბარი, რაოდენობის პერსონაჟი, 334 00:13:59,400 --> 00:14:03,810 შევიდა დანიშნულების, რომელიც ამ მასივი C. მაგრამ პრობლემა ისაა, რომ რა 335 00:14:03,810 --> 00:14:07,230 თუ C თავად არ არის საკმარისი გაუმკლავდეს, რომ? 336 00:14:07,230 --> 00:14:09,900 თქვენ აპირებს რაოდენობის bytes რომ თქვენ მიეცა. 337 00:14:09,900 --> 00:14:13,040 მაგრამ რას რეალურად უფრო მეტი bytes ვიდრე თქვენ გაქვთ ოთახში? 338 00:14:13,040 --> 00:14:16,770 >> ასევე, ამ პროგრამით ძალიან foolishly მხოლოდ ბრმად ამისა მიიღოს რაც არ არის 339 00:14:16,770 --> 00:14:20,650 მოცემული მიესალმები წარმატებული 0 არის დიდი თუ სიმებიანი მოკლე 340 00:14:20,650 --> 00:14:22,040 საკმარისია, ისევე როგორც ხუთი სიმბოლო. 341 00:14:22,040 --> 00:14:26,470 მაგრამ თუ ეს რეალურად 12 სიმბოლო ან 1,200 პერსონაჟი, დავინახეთ, ბოლო დროს 342 00:14:26,470 --> 00:14:29,380 რომ თქვენ მხოლოდ აპირებს მთლიანად გადაწერა მეხსიერება, რაც 343 00:14:29,380 --> 00:14:30,470 არ ეკუთვნის თქვენ. 344 00:14:30,470 --> 00:14:34,390 ხოლო უარეს შემთხვევაში, თუ ჩაანაცვლებს, რომელიც წითელი ნაწილი იქ რომ ჩვენ მოუწოდა 345 00:14:34,390 --> 00:14:35,380 დაბრუნების მისამართი - 346 00:14:35,380 --> 00:14:38,370 ეს მხოლოდ, სადაც კომპიუტერული ავტომატურად, თქვენ, უკან 347 00:14:38,370 --> 00:14:43,130 სცენები, tucks მოშორებით 32-bit ღირებულება, რომელიც შეახსენებს, რომ ის, თუ რა მისამართი საჭიროა 348 00:14:43,130 --> 00:14:47,080 დაბრუნებას, როდესაც foo, ეს სხვა ფუნქცია, კეთდება შესრულებაში. 349 00:14:47,080 --> 00:14:49,320 ეს პური crumb ჯიშები რომელსაც იგი ბრუნდება. 350 00:14:49,320 --> 00:14:52,490 თუ თქვენ გადაწერა, რომ პოტენციურად, თუ თქვენ ცუდი ბიჭი, შეიძლება შესაძლებელი იქნებოდა 351 00:14:52,490 --> 00:14:54,750 პოტენციურად აღება ვიღაცის კომპიუტერი. 352 00:14:54,750 --> 00:14:58,020 და თქვენ ყველაზე, რა თქმა უნდა ავარიის იგი ხშირ შემთხვევაში. 353 00:14:58,020 --> 00:15:01,690 >> ახლა ეს პრობლემა მხოლოდ ამძაფრებს როგორც ჩვენ ალაპარაკდა მეხსიერება 354 00:15:01,690 --> 00:15:03,010 მართვის ზოგადად. 355 00:15:03,010 --> 00:15:07,150 და malloc, მეხსიერების გამოყოფის, არის ფუნქცია, რომ ჩვენ შეგვიძლია გამოვიყენოთ გამოყოფას 356 00:15:07,150 --> 00:15:11,260 მეხსიერება როდესაც ჩვენ არ ვიცით წინასწარ რომ ჩვენ შეიძლება საჭიროა გარკვეული. 357 00:15:11,260 --> 00:15:13,960 ასე მაგალითად, თუ მე დაბრუნდეს to მოწყობილობის აქ. 358 00:15:13,960 --> 00:15:21,010 და მე ქმნის ბოლო დროს hello2.c, გავიხსენოთ, ამ პროგრამის, რაც ჩანდა 359 00:15:21,010 --> 00:15:23,500 ცოტა რაღაც მსგავსი, მხოლოდ სამი ხაზი - 360 00:15:23,500 --> 00:15:27,940 განვაცხადო, თქვენი სახელი, შემდეგ სიმებიანი სახელი, მარცხენა შეადგენს getstring. 361 00:15:27,940 --> 00:15:29,690 და მერე ბეჭდვა ის, მომხმარებლის სახელი. 362 00:15:29,690 --> 00:15:31,170 >> ასე რომ, ეს იყო სუპერ მარტივი პროგრამა. 363 00:15:31,170 --> 00:15:34,870 იმისათვის რომ ნათელი, ნება მომეცით წავიდეთ წინ და მიიღოს Hello-2. 364 00:15:34,870 --> 00:15:36,680 მე ვაპირებ გაკეთებას dot ხაზი Hello-2. 365 00:15:36,680 --> 00:15:37,750 სახელმწიფო თქვენი სახელი - 366 00:15:37,750 --> 00:15:38,140 დავით. 367 00:15:38,140 --> 00:15:38,840 შეიტანეთ. 368 00:15:38,840 --> 00:15:39,540 გაუმარჯოს დავით. 369 00:15:39,540 --> 00:15:41,060 როგორც ჩანს მუშაობა OK. 370 00:15:41,060 --> 00:15:43,140 ახლა კი რა სინამდვილეში ქვეშ hood აქ? 371 00:15:43,140 --> 00:15:44,670 პირველი მოდით კანი უკან რაღაც ფენებს. 372 00:15:44,670 --> 00:15:48,380 სიმებიანი მხოლოდ სინონიმი ჩვენ მიხვდა, თუ რა? 373 00:15:48,380 --> 00:15:49,110 Char ვარსკვლავი. 374 00:15:49,110 --> 00:15:52,740 მოდით, რომ მას უფრო arcane მაგრამ უფრო ტექნიკურად ზუსტი რომ ეს 375 00:15:52,740 --> 00:15:55,570 არის char ვარსკვლავი, რაც ნიშნავს, რომ სახელი, დიახ, არის განსხვავებულია. 376 00:15:55,570 --> 00:15:59,920 მაგრამ რა სახელი მაღაზიებში არის მისამართი char, რომელიც გრძნობს ცოტა უცნაურია 377 00:15:59,920 --> 00:16:01,050 იმიტომ, რომ მე მისაღებად უკან სიმებიანი. 378 00:16:01,050 --> 00:16:03,580 მე მისაღებად უკან მრავალჯერადი სიმბოლო არ char. 379 00:16:03,580 --> 00:16:07,400 >> მაგრამ, რა თქმა უნდა, საჭიროა მხოლოდ პირველი char მისამართი უნდა გვახსოვდეს, სადაც 380 00:16:07,400 --> 00:16:08,870 მთელი სიმებიანი არის, რადგან რატომ? 381 00:16:08,870 --> 00:16:12,700 როგორ გაერკვნენ, სადაც ბოლოს სტრიქონს იცის, დასაწყისში? 382 00:16:12,700 --> 00:16:13,630 წარმატებული ნულოვანი. 383 00:16:13,630 --> 00:16:17,260 ასე რომ, იმ ორი წარმოშობა თქვენ გაერკვნენ დაწყებამდე და ბოლოს 384 00:16:17,260 --> 00:16:20,280 რომელიმე სიმებიანი არიან, ასე რომ, სანამ ისინი სათანადოდ გაფორმებული, რომ null 385 00:16:20,280 --> 00:16:22,110 terminator, რომ წარმატებული ნულოვანი. 386 00:16:22,110 --> 00:16:24,520 >> მაგრამ ეს მოუწოდებენ getstring. 387 00:16:24,520 --> 00:16:28,020 და აღმოჩნდება, რომ getstring მთელი ამ ხნის განმავლობაში ასეთი 388 00:16:28,020 --> 00:16:28,820 მოტყუების ჩვენთვის. 389 00:16:28,820 --> 00:16:32,460 ეს აკეთებდა ამ შრომას, რა თქმა უნდა, მიღების ნახატზე შესახებ. 390 00:16:32,460 --> 00:16:34,580 მაგრამ სად არის ის, რომ მეხსიერება უკვე მოდის? 391 00:16:34,580 --> 00:16:38,440 თუ ჩვენ დაბრუნდეს სურათზე აქ და ვრცელდება განმარტება მხოლოდ 392 00:16:38,440 --> 00:16:42,610 მომენტში წინ, რომ სტეკი არის სადაც მეხსიერება მიდის, როდესაც ფუნქციები უწოდებენ, 393 00:16:42,610 --> 00:16:45,370 იმ ლოგიკით, როცა რეკავთ getstring, და მერე აკრიფოთ 394 00:16:45,370 --> 00:16:50,900 D--V-I-D შეიტანეთ, სადაც D--V-I-D წარმატებული ნულოვანი ინახება, საფუძველზე 395 00:16:50,900 --> 00:16:53,480 ამბავი ჩვენ გვითხრა, შორს? 396 00:16:53,480 --> 00:16:55,190 >> როგორც ჩანს, ამ სტეკი, არა? 397 00:16:55,190 --> 00:16:58,120 როცა მოვუწოდებთ მიიღოს სიმებიანი თქვენ გაქვთ პატარა ნაჭერი მეხსიერება on დასტის. 398 00:16:58,120 --> 00:17:01,630 ასე რომ, იგი დგას, რომ მიზეზი, რომ D--V-I-D წარმატებული ნულოვანი ინახება 399 00:17:01,630 --> 00:17:02,770 იქ დასტის. 400 00:17:02,770 --> 00:17:07,680 მაგრამ დაველოდოთ ერთი წუთით, getstring ბრუნდება რომ სიმებიანი, ასე ვთქვათ, რაც იმას ნიშნავს, 401 00:17:07,680 --> 00:17:11,700 ეს უჯრა საწყისი cafeteria არის აღებული off დასტის. 402 00:17:11,700 --> 00:17:14,560 და ჩვენ ვთქვით, რომ ბოლო დროს, რომ როგორც კი ფუნქცია დააბრუნებს, და შენ რომ 403 00:17:14,560 --> 00:17:20,109 პანელში, ასე ვთქვათ, off დასტის, რა შეგიძლიათ ვივარაუდოთ შესახებ ნარჩენებისგან 404 00:17:20,109 --> 00:17:21,819 რომ მეხსიერება? 405 00:17:21,819 --> 00:17:25,160 მე სახის redrew მათ, როგორც კითხვის ნიშნები იმიტომ, რომ ისინი ეფექტურად გახდეს 406 00:17:25,160 --> 00:17:26,250 უცნობი ღირებულებებს. 407 00:17:26,250 --> 00:17:29,500 ისინი შეიძლება გამოყენებული, როდესაც რამდენიმე მომდევნო ფუნქცია ეწოდება. 408 00:17:29,500 --> 00:17:31,870 >> სხვა სიტყვებით, თუ მოხდება უნდა შენახვა - 409 00:17:31,870 --> 00:17:34,350 მე მიაპყროს სწრაფი სურათზე აქ დასტის. 410 00:17:34,350 --> 00:17:38,690 თუ ჩვენ არ უნდა იყოს ხატვის ბოლოში , ჩემი მეხსიერების სეგმენტი და ჩვენ ვთქვათ, 411 00:17:38,690 --> 00:17:42,230 რომ ეს არის ადგილი მეხსიერება ოკუპანტების მიერ ძირითადი და იქნებ Arg გ და 412 00:17:42,230 --> 00:17:46,790 Arg V და არაფერი ამ პროგრამაში, როდესაც getstring ეწოდება, 413 00:17:46,790 --> 00:17:51,120 სავარაუდოდ getstring იღებს ბლოკი მეხსიერება აქ. 414 00:17:51,120 --> 00:17:53,940 და მაშინ D--V-I-D რატომღაც მთავრდება ამ ფუნქციას. 415 00:17:53,940 --> 00:17:55,320 და მე ვაპირებ oversimplify. 416 00:17:55,320 --> 00:18:00,050 მაგრამ მოდით ვივარაუდოთ, რომ მის D--V-I-D წარმატებული ნულოვანი. 417 00:18:00,050 --> 00:18:03,500 ასე რომ, ეს ბევრი bytes გამოიყენება ჩარჩოს getstring. 418 00:18:03,500 --> 00:18:08,270 >> მაგრამ როგორც კი getstring ბრუნდება, ჩვენ განაცხადა ბოლო დროს, რომ ამ მეხსიერების მეტი 419 00:18:08,270 --> 00:18:11,340 აქ ყველა ხდება - woops - 420 00:18:11,340 --> 00:18:14,270 ყველა ხდება ეფექტურად წაშლილია. 421 00:18:14,270 --> 00:18:17,220 ჩვენ შეგვიძლია ვიფიქროთ, ეს ახლა კითხვის ნიშნები, რადგან, ვინც იცის 422 00:18:17,220 --> 00:18:18,720 რა უნდა გახდეს, რომ მეხსიერებაში. 423 00:18:18,720 --> 00:18:22,130 მართლაც, მე ძალიან ხშირად მოვუწოდებთ ფუნქციები გარდა getstring. 424 00:18:22,130 --> 00:18:24,750 და როგორც კი მოვუწოდებ ზოგიერთ სხვა ფუნქცია ვიდრე getstring, იქნებ არ 425 00:18:24,750 --> 00:18:28,860 ამ კონკრეტულ პროგრამას, უბრალოდ ჩანდა ზე, მაგრამ რაღაც სხვა, აუცილებლად რაღაც სხვა 426 00:18:28,860 --> 00:18:34,180 ფუნქცია შეიძლება დასრულდეს up აძლევენ ამ მომდევნო ადგილზე დასტის. 427 00:18:34,180 --> 00:18:39,410 >> ასე რომ, ეს არ შეიძლება იყოს, რომ getstring მაღაზიები D--V-I-D მე სტეკი, რადგან მე 428 00:18:39,410 --> 00:18:41,040 მაშინვე დაკარგავს ხელმისაწვდომობის იგი. 429 00:18:41,040 --> 00:18:43,720 მაგრამ ჩვენ ვიცით, რომ ისინი getstring მხოლოდ ბრუნდება რა? 430 00:18:43,720 --> 00:18:47,220 ეს არ ბრუნდებიან მე ექვსი სიმბოლო. 431 00:18:47,220 --> 00:18:51,090 რა არის ეს ნამდვილად დაბრუნების საერთოდ ვთვლით, ბოლო დროს? 432 00:18:51,090 --> 00:18:52,480 მისამართი პირველი. 433 00:18:52,480 --> 00:18:56,650 ასე რომ, რატომღაც, მაშინ, როდესაც მოუწოდა getstring, ის გამოყოფის ბლოკი მეხსიერების 434 00:18:56,650 --> 00:18:59,620 სიმებიანი რომ წევრებს ტიპისა და შემდეგ დაბრუნების მისამართი იგი. 435 00:18:59,620 --> 00:19:02,930 და აღმოჩნდება, რომ, როდესაც გსურთ ფუნქციონირებს გამოყოს მეხსიერება ამ 436 00:19:02,930 --> 00:19:08,390 გზა და დაბრუნების პირი, რომელსაც ეწოდება რომ ფუნქცია, მისამართი 437 00:19:08,390 --> 00:19:11,870 რომ ბლოკი მეხსიერება, თქვენ აბსოლუტურად ვერ დააყენა ეს დასტის ზე 438 00:19:11,870 --> 00:19:14,750 ბოლოში, რადგან ფუნქციურად უბრალოდ აპირებს არ გახდება თქვენი ძალიან 439 00:19:14,750 --> 00:19:17,800 სწრაფად, ასე რომ თქვენ ალბათ მისახვედრია, სადაც ჩვენ, ალბათ აპირებს toss it 440 00:19:17,800 --> 00:19:20,130 ნაცვლად, ე.წ. ბევრი. 441 00:19:20,130 --> 00:19:25,290 >> ამიტომ შორის ბოლოში თქვენი მეხსიერება ნახვა განლაგება და ყველაზე თქვენი მეხსიერება ნახვა 442 00:19:25,290 --> 00:19:26,820 განლაგება არიან მთელი bunch of სეგმენტები. 443 00:19:26,820 --> 00:19:29,270 ერთი არის დასტის, და მარჯვენა ზემოთ ეს ბევრი. 444 00:19:29,270 --> 00:19:33,680 და ბევრი უბრალოდ სხვადასხვა ბლოკი მეხსიერება, რომელიც არ გამოიყენება ფუნქციები 445 00:19:33,680 --> 00:19:34,770 როდესაც ისინი მოუწოდა. 446 00:19:34,770 --> 00:19:38,100 ეს გამოიყენება გრძელვადიანი მეხსიერება, როდესაც გსურთ ერთი ფუნქცია უნდა დაიბრუნოს ზოგიერთი 447 00:19:38,100 --> 00:19:42,700 მეხსიერება და შეძლებს გათიშეთ შესახებ, რომ იგი დაკარგვის გარეშე კონტროლი. 448 00:19:42,700 --> 00:19:45,550 >> ახლა თქვენ ალბათ, მაშინვე ვხედავთ, რომ ეს არ არის 449 00:19:45,550 --> 00:19:48,060 აუცილებელი სრულყოფილი დიზაინი. 450 00:19:48,060 --> 00:19:51,350 როგორც თქვენი პროგრამის გამოყოფილი მეხსიერება წლის დასტის, ან როგორც თქვენ მოვუწოდებთ უფრო და 451 00:19:51,350 --> 00:19:55,540 მეტი ფუნქციებს, ან როგორც თქვენ გამოუყოფს მეხსიერება on ბევრი ერთად malloc off როგორც 452 00:19:55,540 --> 00:20:00,690 getstring აკეთებს, რა ნათლად როგორც ჩანს, გარდაუვალი პრობლემა? 453 00:20:00,690 --> 00:20:00,860 >> Right. 454 00:20:00,860 --> 00:20:03,150 მსგავსად იმისა, რომ ეს ისრები მათ მიუთითებს ერთმანეთს 455 00:20:03,150 --> 00:20:04,380 კარგს არაფერს უქადის. 456 00:20:04,380 --> 00:20:08,630 მართლაც, ჩვენ შეგვიძლია ძალიან სწრაფად ავარიის გადაცემა ნებისმიერი რაოდენობის გზები. 457 00:20:08,630 --> 00:20:12,050 სინამდვილეში, ვფიქრობ, შესაძლოა, გაკეთდეს ამ შემთხვევით კიდევ ერთხელ. 458 00:20:12,050 --> 00:20:14,020 ან თუ არა, მოდით ეს შეგნებულად არის. 459 00:20:14,020 --> 00:20:21,330 ნება მომეცით წავიდეთ წინ და წერა სუპერ სწრაფად პროგრამა dontdothis.c. 460 00:20:21,330 --> 00:20:26,730 ახლა კი წავალ აქაც და ამის მკვეთრი მოიცავს stdio.h. 461 00:20:26,730 --> 00:20:32,620 მოდით განაცხადოს ფუნქციის foo იღებს არანაირი არგუმენტი, რომელიც 462 00:20:32,620 --> 00:20:34,040 აღნიშნა ასევე მიერ ბათილად. 463 00:20:34,040 --> 00:20:37,830 >> და ერთადერთი, რაც foo აპირებს არის ზარი foo, რაც ალბათ არ არის 464 00:20:37,830 --> 00:20:39,100 smartest იდეა, მაგრამ ასე იქნება ეს. 465 00:20:39,100 --> 00:20:40,490 ყელ მთავარი ბათილად. 466 00:20:40,490 --> 00:20:45,270 ახლა ერთადერთი, რაც მთავარია აპირებს ამისათვის არის მოვუწოდებთ foo ასევე. 467 00:20:45,270 --> 00:20:51,050 და მხოლოდ ჩათვლით, მე ვაპირებ წასვლა წინ გვაქვს აქ და აცხადებენ, printf "Hello from 468 00:20:51,050 --> 00:20:52,340 foo ". 469 00:20:52,340 --> 00:20:52,890 >> OK. 470 00:20:52,890 --> 00:21:00,160 ასე რომ, თუ არ რაიმე შეცდომებს, სასტარტედ dontdothis dot ხაზი. 471 00:21:00,160 --> 00:21:01,960 და მოდით ამას უფრო დიდი ფანჯარა - 472 00:21:01,960 --> 00:21:03,210 dot ხაზი, dontdothis. 473 00:21:03,210 --> 00:21:07,590 474 00:21:07,590 --> 00:21:08,840 კარგით. 475 00:21:08,840 --> 00:21:10,940 476 00:21:10,940 --> 00:21:11,890 Uh Oh. 477 00:21:11,890 --> 00:21:13,100 როგორც ჩანს, შეგიძლიათ ამის გაკეთება. 478 00:21:13,100 --> 00:21:15,190 Damn it. 479 00:21:15,190 --> 00:21:16,190 OK. 480 00:21:16,190 --> 00:21:16,580 დაველოდოთ. 481 00:21:16,580 --> 00:21:17,370 ლოდინის. 482 00:21:17,370 --> 00:21:18,270 მივიღეთ - 483 00:21:18,270 --> 00:21:20,110 ჩვენ გამოიყენოთ ეს გააკეთოს. 484 00:21:20,110 --> 00:21:22,050 >> [Sighs] 485 00:21:22,050 --> 00:21:25,110 >> მე ვიცი, მაგრამ მე ვფიქრობ, რომ ჩვენ უბრალოდ იშლება, რომ. 486 00:21:25,110 --> 00:21:28,410 Uh, ჰო. 487 00:21:28,410 --> 00:21:30,660 Damn it. 488 00:21:30,660 --> 00:21:32,640 მოსაგვარებლად Rob. 489 00:21:32,640 --> 00:21:34,678 რა? 490 00:21:34,678 --> 00:21:35,928 ეს ძალიან მარტივია. 491 00:21:35,928 --> 00:21:43,820 492 00:21:43,820 --> 00:21:47,360 ჰო, გადავედით ოპტიმიზაცია მოედანი. 493 00:21:47,360 --> 00:21:48,970 OK, დგანან bye. 494 00:21:48,970 --> 00:21:49,950 ახლა მე თავს კარგად გრძნობენ. 495 00:21:49,950 --> 00:21:51,390 OK. 496 00:21:51,390 --> 00:21:51,780 ყველა უფლება. 497 00:21:51,780 --> 00:21:53,430 >> მოდით recompile ამ - 498 00:21:53,430 --> 00:21:55,880 თქვენ dontdothis. 499 00:21:55,880 --> 00:22:00,090 ალბათ გადარქმევა ეს dothis.c რაღაც მომენტში. 500 00:22:00,090 --> 00:22:00,710 იქ ჩვენ წავიდეთ. 501 00:22:00,710 --> 00:22:01,240 დიდი მადლობა. 502 00:22:01,240 --> 00:22:02,050 OK. 503 00:22:02,050 --> 00:22:05,480 ასე რომ, ის ფაქტი, რომ მე დაბეჭდვის რაღაც იყო, ფაქტობრივად მხოლოდ 504 00:22:05,480 --> 00:22:08,150 შენელებისა პროცესი, რომლითაც ჩვენ იქნებოდა მიღწეული, რომ წერტილი. 505 00:22:08,150 --> 00:22:08,510 OK. 506 00:22:08,510 --> 00:22:08,870 Phew, 507 00:22:08,870 --> 00:22:11,180 >> ასე რომ, რა ხდება რეალურად ხდება? 508 00:22:11,180 --> 00:22:14,440 მიზეზი არ არსებობს, ისევე, როგორც განზე არის აკეთებს არაფერი თვალსაზრისით შემავალი და 509 00:22:14,440 --> 00:22:17,270 გამომავალი ტენდენცია იყოს უფრო ნელა იმიტომ, რომ თქვენ უნდა დაწეროს პერსონაჟს 510 00:22:17,270 --> 00:22:18,600 ეკრანზე, აქვე გადახვევა. 511 00:22:18,600 --> 00:22:21,720 ასე რომ გრძელი ამბავი მოკლედ, ჰქონდა მე რეალურად მოხდა ისე, მოუთმენელი, გვექნებოდა 512 00:22:21,720 --> 00:22:23,260 დრო საბოლოო ჯამში, ასევე. 513 00:22:23,260 --> 00:22:26,220 ახლა, როდესაც მე მივიღე ride ბეჭდური-ups, ჩვენ ვხედავთ, რომ დაუყოვნებლივ. 514 00:22:26,220 --> 00:22:28,410 რატომ ხდება ეს. 515 00:22:28,410 --> 00:22:31,300 ასევე, მარტივი ახსნა, რა თქმა უნდა, ის არის, რომ foo ალბათ არ უნდა 516 00:22:31,300 --> 00:22:32,500 უნდა მოუწოდებდა თავად. 517 00:22:32,500 --> 00:22:34,470 >> ახლა ზოგადად, ეს არის უკან. 518 00:22:34,470 --> 00:22:36,970 ჩვენ კი გვეგონა, რამდენიმე კვირის განმავლობაში წინ რეკურსიული არის კარგი. 519 00:22:36,970 --> 00:22:40,330 უკან არის ამ ჯადოსნური გზა გამომხატველი თავს სუპერ აღწეროთ. 520 00:22:40,330 --> 00:22:41,400 და ეს უბრალოდ მუშაობს. 521 00:22:41,400 --> 00:22:45,060 თუმცა, არსებობს ძირითადი ფუნქცია ყველა რეკურსიული პროგრამების ჩვენ ვილაპარაკეთ 522 00:22:45,060 --> 00:22:48,260 შესახებ და შევხედე ჯერჯერობით, რომელიც ის იყო, რომ მათ ჰქონდათ, თუ რა? 523 00:22:48,260 --> 00:22:52,610 ბაზის შემთხვევა, რომელიც გარკვეული რთული კოდირებული შემთხვევაში, რომ განაცხადა, ზოგიერთ სიტუაციაში 524 00:22:52,610 --> 00:22:56,210 არ ვუწოდებ foo, რომელიც აშკარად არ არის საქმე აქ. 525 00:22:56,210 --> 00:22:58,920 >> ანუ, რაც ნამდვილად ხდება თვალსაზრისით ამ სურათს? 526 00:22:58,920 --> 00:23:01,790 როცა მთავარ მოუწოდებს foo, იგი იღებს ნაჭერი მეხსიერება. 527 00:23:01,790 --> 00:23:04,150 როდესაც foo მოუწოდებს foo, ის იღებს ნაჭერი მეხსიერება. 528 00:23:04,150 --> 00:23:06,430 როდესაც foo მოუწოდებს foo, ის იღებს ნაჭრით. 529 00:23:06,430 --> 00:23:07,080 იგი იღებს ნაჭრით. 530 00:23:07,080 --> 00:23:08,120 იგი იღებს ნაჭრით. 531 00:23:08,120 --> 00:23:09,460 იმის გამო, რომ foo არასოდეს ბრუნდებიან. 532 00:23:09,460 --> 00:23:12,160 ჩვენ არასდროს erasing ერთი იმ ფარგლებში ეხლა დასტის. 533 00:23:12,160 --> 00:23:15,930 ასე რომ, ჩვენ აფეთქება მეშვეობით ბევრი, არ უნდა აღინიშნოს, ვინ იცის, რა და 534 00:23:15,930 --> 00:23:19,600 ჩვენ overstepping ფარგლებში ჩვენი ე.წ. სეგმენტი მეხსიერება. 535 00:23:19,600 --> 00:23:21,790 შეცდომა წასვლა სეგმენტაცია ყალბი. 536 00:23:21,790 --> 00:23:24,110 >> ასე რომ, გამოსავალი არსებობს აშკარად არ გააკეთებს. 537 00:23:24,110 --> 00:23:28,830 მაგრამ უფრო დიდი გავლენა არის, რომ, დიახ, იქ აბსოლუტურად გარკვეული ზღვარი, 538 00:23:28,830 --> 00:23:32,470 მაშინაც კი, თუ ეს არ ჩამოყალიბებული, თუ როგორ ბევრი ფუნქცია შეგიძლიათ ზარები 539 00:23:32,470 --> 00:23:34,970 პროგრამა, რამდენი ფუნქცია შეუძლიათ თავად. 540 00:23:34,970 --> 00:23:38,430 ასე რომ, მიუხედავად იმისა, რომ ჩვენ ეს იქადაგა უკან რადგან ეს პოტენციურად ჯადოსნური რამ 541 00:23:38,430 --> 00:23:41,870 რამდენიმე კვირის წინ, sigma ფუნქცია, და როცა მივიღებთ მონაცემები 542 00:23:41,870 --> 00:23:45,270 სტრუქტურებისა და CS50, დაინახავთ, სხვა განაცხადების, ეს ასე არ არის 543 00:23:45,270 --> 00:23:46,500 აუცილებლად საუკეთესო რამ. 544 00:23:46,500 --> 00:23:50,070 იმიტომ, რომ თუ ფუნქცია მოუწოდებს თავად, უწოდებს საკუთარ თავს, მაშინაც კი, თუ არსებობს ბაზა 545 00:23:50,070 --> 00:23:54,860 იმ შემთხვევაში, თუ არ მოხვდა, რომ ბაზა შემთხვევაში ამისთვის 1,000 ზარები 10,000 ზარი, მიერ 546 00:23:54,860 --> 00:23:58,800 იმ დროს თქვენ ალბათ ამოიწურა ოთახი თქვენს ე.წ. დასტის და მოხვდა 547 00:23:58,800 --> 00:24:00,400 ზოგიერთი სხვა სეგმენტების მეხსიერება. 548 00:24:00,400 --> 00:24:03,950 ასე რომ, ეს ძალიან არის დიზაინი ვაჭრობის შორის ელეგანტურობა და შორის 549 00:24:03,950 --> 00:24:06,920 robustness თქვენი კონკრეტული განხორციელებას. 550 00:24:06,920 --> 00:24:10,780 >> ასე რომ, კიდევ ერთი downside ან კიდევ ერთი GOTCHA თუ რა ჩვენ 551 00:24:10,780 --> 00:24:11,720 აკეთებდა აქამდე. 552 00:24:11,720 --> 00:24:12,980 როცა მოუწოდა getstring - 553 00:24:12,980 --> 00:24:15,120 ნება მომეცით დაბრუნდეს შევიდა Hello-2. 554 00:24:15,120 --> 00:24:18,170 გავითვალისწინოთ, რომ მე მოუწოდებენ getstring, რომელიც ბრუნდება მისამართი. 555 00:24:18,170 --> 00:24:20,730 და ჩვენ ვამბობთ, რომ მისამართი არის ბევრი. 556 00:24:20,730 --> 00:24:24,480 ახლა კი მე დაბეჭდვისას სიმებიანი იმ მისამართი. 557 00:24:24,480 --> 00:24:27,000 მაგრამ ჩვენ არ ჰქვია საპირისპირო getstring. 558 00:24:27,000 --> 00:24:30,850 ჩვენ არასდროს არ გვქონია, რომ calll ფუნქცია, როგორიცაა ungetstring, სადაც მხრივ უკან 559 00:24:30,850 --> 00:24:31,610 რომ მეხსიერებაში. 560 00:24:31,610 --> 00:24:33,250 მაგრამ გულწრფელად ჩვენ ალბათ უნდა ყოფილიყო. 561 00:24:33,250 --> 00:24:37,390 იმიტომ, რომ თუ ჩვენ შევინარჩუნოთ ითხოვს კომპიუტერული მეხსიერების, გზით ვინმეს მოსწონს 562 00:24:37,390 --> 00:24:40,830 getstring მაგრამ არ მისცეს მას უკან, აუცილებლად რომ ძალიან არის ვალდებული გამოიწვიოს 563 00:24:40,830 --> 00:24:42,970 პრობლემები, რომლის დროსაც ჩვენ ამოიწურა მეხსიერება. 564 00:24:42,970 --> 00:24:46,140 >> და სინამდვილეში, ჩვენ შეგვიძლია ვეძებოთ ეს პრობლემები ახალი ინსტრუმენტი, რომლის გამოყენება 565 00:24:46,140 --> 00:24:47,640 ცოტა cryptic შეიტანოთ. 566 00:24:47,640 --> 00:24:50,960 მაგრამ ნება მიბოძეთ წავიდეთ წინ და მისალმების ეს ეკრანზე რაღაც მომენტში. 567 00:24:50,960 --> 00:24:56,940 მე ვაპირებ წავიდეთ წინ და აწარმოებს Valgrind ერთად პარამეტრების რომლის პირველი ბრძანება 568 00:24:56,940 --> 00:25:00,260 ხაზი არგუმენტი სახელი იმ პროგრამის Hello-2. 569 00:25:00,260 --> 00:25:02,650 და სამწუხაროდ გამომავალი atrociously 570 00:25:02,650 --> 00:25:04,290 კომპლექსი არის კარგი მიზეზი. 571 00:25:04,290 --> 00:25:06,280 ასე რომ, ჩვენ ყველა რომ ხმაური. 572 00:25:06,280 --> 00:25:07,530 დავით მოგახსენებთ ჩემს სახელს. 573 00:25:07,530 --> 00:25:09,760 ასე რომ, პროგრამა რეალურად გაშვებული. 574 00:25:09,760 --> 00:25:11,180 ახლა ჩვენ მიიღოს ამ გამომავალი. 575 00:25:11,180 --> 00:25:13,400 >> ასე რომ Valgrind მსგავსი სულითა to GDB. 576 00:25:13,400 --> 00:25:14,950 ეს არ არის debugger თავისთავად. 577 00:25:14,950 --> 00:25:16,270 მაგრამ ეს მეხსიერების ქვა. 578 00:25:16,270 --> 00:25:20,140 ეს პროგრამა, რომელიც აწარმოებს თქვენი პროგრამა და გეტყვით, თუ თქვენ სთხოვა 579 00:25:20,140 --> 00:25:23,860 კომპიუტერული მეხსიერების და არასდროს გადასცა მას უკან, რითაც რაც იმას ნიშნავს, რომ თქვენ გაქვთ 580 00:25:23,860 --> 00:25:24,570 მეხსიერების გაჟონვის. 581 00:25:24,570 --> 00:25:26,240 მეხსიერების გაჟონვის ტენდენცია იყოს ცუდი. 582 00:25:26,240 --> 00:25:29,120 თქვენ არის წევრებს კომპიუტერების აქვს ალბათ იგრძნო ეს, თუ არა აქვს 583 00:25:29,120 --> 00:25:30,300 Mac ან PC. 584 00:25:30,300 --> 00:25:33,730 ოდესმე გამოიყენება თქვენი კომპიუტერი ხოლო და არა rebooted რამდენიმე 585 00:25:33,730 --> 00:25:36,820 დღის განმავლობაში, ან თქვენ უბრალოდ ბევრი პროგრამები გაშვებული და რა რამ 586 00:25:36,820 --> 00:25:42,360 slows to სახეხი შეჩერებას, ან თუნდაც ეს სუპერ შემაშფოთებელი გამოიყენოს, რადგან 587 00:25:42,360 --> 00:25:44,350 ყველაფერი მხოლოდ მიიღო სუპერ ნელი. 588 00:25:44,350 --> 00:25:46,260 >> ახლა, შეიძლება იყოს ნებისმიერი რიგი მიზეზების გამო. 589 00:25:46,260 --> 00:25:49,600 ეს შეიძლება იყოს უსასრულო ციკლი, ხარვეზების ვიღაცის კოდი, ან, უფრო მარტივად, ეს 590 00:25:49,600 --> 00:25:53,250 შეიძლება ნიშნავს, რომ თქვენ უფრო მეხსიერება, ან ცდილობს, თქვენი 591 00:25:53,250 --> 00:25:54,920 კომპიუტერული რეალურად აქვს. 592 00:25:54,920 --> 00:25:57,770 და, შესაძლოა, იქ ხარვეზების ზოგიერთი პროგრამა რომ შევინარჩუნოთ ითხოვს მეხსიერება. 593 00:25:57,770 --> 00:26:02,480 ბრაუზერები წლების განმავლობაში ცნობილია ეს ითხოვს მეტი და მეტი მეხსიერების 594 00:26:02,480 --> 00:26:03,870 მაგრამ გადაცემის უკან. 595 00:26:03,870 --> 00:26:07,220 რა თქმა უნდა, თუ თქვენ მხოლოდ სასრული თანხის მეხსიერებაში შეგიძლიათ არ ვთხოვ 596 00:26:07,220 --> 00:26:09,990 უსასრულოდ ბევრჯერ for ზოგიერთი, რომ მეხსიერებაში. 597 00:26:09,990 --> 00:26:13,070 >> ასე რომ, რას ვხედავ აქ, მიუხედავად იმისა, ერთხელ Valgrind ის გამომუშავება 598 00:26:13,070 --> 00:26:17,490 ზედმეტად კომპლექსი შეხედვით პირველი, ეს არის საინტერესო. 599 00:26:17,490 --> 00:26:18,890 ბევრი - 600 00:26:18,890 --> 00:26:20,060 გამოყენებულ გასასვლელი. 601 00:26:20,060 --> 00:26:22,810 ასე რომ, აქ არის, რამდენი მეხსიერება იყო გამოიყენება ბევრი at 602 00:26:22,810 --> 00:26:24,300 დროს ჩემი პროგრამის დასრულების - 603 00:26:24,300 --> 00:26:27,280 როგორც ჩანს, ექვსი bytes ერთ ბლოკში. 604 00:26:27,280 --> 00:26:28,710 ამიტომ, მე ვაპირებ ტალღა ხელები რა ბლოკი. 605 00:26:28,710 --> 00:26:31,270 წარმოიდგინეთ, ეს მხოლოდ ბლოკი, უფრო ტექნიკური სიტყვაა ბლოკი. 606 00:26:31,270 --> 00:26:33,140 მაგრამ ექვსი bytes - 607 00:26:33,140 --> 00:26:36,870 რა არის ექვსი bytes რომ ჯერ კიდევ გამოიყენება? 608 00:26:36,870 --> 00:26:37,390 >> ზუსტად. 609 00:26:37,390 --> 00:26:41,520 D--V-I-D წარმატებული ნულოვანი, ხუთი წერილი სახელი პლუს null terminator. 610 00:26:41,520 --> 00:26:46,350 ასე რომ ამ პროგრამის Valgrind შენიშნა, რომ მე სთხოვა ექვსი ბაიტი, ჩანს 611 00:26:46,350 --> 00:26:48,950 გზა getstring, მაგრამ არასოდეს მისცა მათ უკან. 612 00:26:48,950 --> 00:26:52,030 და სინამდვილეში, ეს არ შეიძლება იყოს ისე ცხადია, თუ ჩემი პროგრამა არ არის სამი 613 00:26:52,030 --> 00:26:53,590 ხაზების, მაგრამ ეს 300 ხაზები. 614 00:26:53,590 --> 00:26:56,920 ასე რომ, ჩვენ შეიძლება რეალურად მივცეთ კიდევ ერთი ბრძანება ხაზი არგუმენტი Valgrind to 615 00:26:56,920 --> 00:26:58,290 უფრო verbose. 616 00:26:58,290 --> 00:26:59,760 ეს პატარა შემაშფოთებელი უნდა გვახსოვდეს. 617 00:26:59,760 --> 00:27:01,580 მაგრამ, თუ ამის გაკეთება - 618 00:27:01,580 --> 00:27:01,930 ვნახოთ. 619 00:27:01,930 --> 00:27:03,540 გაჟონვის - 620 00:27:03,540 --> 00:27:05,030 იყო თუ არა გაჟონვის - 621 00:27:05,030 --> 00:27:07,580 კი არ მახსოვს რა არის off ხელში. 622 00:27:07,580 --> 00:27:08,550 >> - გაჟონვის შემოწმება შეადგენს სავსე. 623 00:27:08,550 --> 00:27:10,180 Yep, მადლობა. 624 00:27:10,180 --> 00:27:12,520 - გაჟონვის შემოწმება შეადგენს სავსე. 625 00:27:12,520 --> 00:27:13,800 შეიტანეთ. 626 00:27:13,800 --> 00:27:14,940 იგივე პროგრამა გაშვებული. 627 00:27:14,940 --> 00:27:16,180 ტიპის დავით ერთხელ. 628 00:27:16,180 --> 00:27:17,660 ახლა მე ვხედავ ცოტა უფრო დეტალურად. 629 00:27:17,660 --> 00:27:20,890 მაგრამ ქვემოთ ბევრი შემაჯამებელი, რომელიც იდენტურია ოთხი - ah, 630 00:27:20,890 --> 00:27:22,120 ეს არის ერთგვარი ლამაზი. 631 00:27:22,120 --> 00:27:25,460 ახლა Valgrind რეალურად ეძებს ცოტა რთული ჩემს კოდი. 632 00:27:25,460 --> 00:27:29,580 და ეს და განაცხადა, რომ, სავარაუდოდ, malloc დროს ხაზი - 633 00:27:29,580 --> 00:27:30,580 ჩვენ დააშორებს. 634 00:27:30,580 --> 00:27:31,980 ამასთან ხაზი - 635 00:27:31,980 --> 00:27:32,930 ჩვენ ვერ ვხედავთ, რასაც ხაზი ეს არის. 636 00:27:32,930 --> 00:27:35,110 მაგრამ malloc არის პირველი დამნაშავეებმა. 637 00:27:35,110 --> 00:27:38,630 აქ წაკითხვა in malloc. 638 00:27:38,630 --> 00:27:39,810 >> ყველა უფლება? 639 00:27:39,810 --> 00:27:40,450 OK, არ. 640 00:27:40,450 --> 00:27:40,940 არა? 641 00:27:40,940 --> 00:27:42,520 დავურეკე getstring. 642 00:27:42,520 --> 00:27:44,460 getstring სავარაუდოდ, მოუწოდებს malloc. 643 00:27:44,460 --> 00:27:47,800 ასე რომ, რა ხაზი კოდი აშკარად დამნაშავე, რომელსაც 644 00:27:47,800 --> 00:27:49,050 გამოყოფილი ამ მეხსიერების? 645 00:27:49,050 --> 00:27:51,560 646 00:27:51,560 --> 00:27:55,540 მოდით ვივარაუდოთ, რომ ვინც დაწერა malloc უკვე გარშემო ხანგრძლივი საკმარისი, რომ ეს 647 00:27:55,540 --> 00:27:56,390 მათი ბრალი არ. 648 00:27:56,390 --> 00:27:57,520 ასე რომ, ეს, ალბათ აფეთქდა. 649 00:27:57,520 --> 00:28:02,000 getstring in cs50.c - ისე, რომ ის წარადგინოს სადმე კომპიუტერი - 650 00:28:02,000 --> 00:28:05,210 შეესაბამება 286, როგორც ჩანს, დამნაშავეებმა. 651 00:28:05,210 --> 00:28:08,140 ახლა ვარაუდობენ, რომ cs50 უკვე გარშემო ღირსეული დროის, ისე 652 00:28:08,140 --> 00:28:09,720 ჩვენც ვართ infallible. 653 00:28:09,720 --> 00:28:14,080 ასე რომ, ეს, ალბათ, არ getstring რომ ხარვეზის მდგომარეობს, არამედ 654 00:28:14,080 --> 00:28:17,810 Hello-2.c ხაზი 18. 655 00:28:17,810 --> 00:28:20,670 >> მოდით შევხედოთ რა, რომ ხაზი 18 იყო. 656 00:28:20,670 --> 00:28:21,130 Oh. 657 00:28:21,130 --> 00:28:27,130 რატომღაც ამ ხაზის არ არის აუცილებელი buggy, თავისთავად, მაგრამ ეს არის მიზეზი 658 00:28:27,130 --> 00:28:28,630 უკან რომ მეხსიერების გაჟონვის. 659 00:28:28,630 --> 00:28:32,140 ასე რომ სუპერ უბრალოდ, რას ინტუიციურად იყოს გამოსავალი აქ? 660 00:28:32,140 --> 00:28:34,710 თუ ჩვენ ითხოვს მეხსიერება, არასდროს რაც მას უკან, და რომ, როგორც ჩანს, 661 00:28:34,710 --> 00:28:37,940 პრობლემა დროთა განმავლობაში ჩემი კომპიუტერი შესაძლოა ამოიწურა მეხსიერება, შესაძლოა შენელდება 662 00:28:37,940 --> 00:28:42,110 ქვემოთ, ცუდი შეიძლება მოხდეს, ისევე, რა არის მარტივი ინტუიციური გამოსავალი? 663 00:28:42,110 --> 00:28:43,140 უბრალოდ მისცეს მას უკან. 664 00:28:43,140 --> 00:28:44,770 >> როგორ გასათავისუფლებლად მდე რომ მეხსიერება? 665 00:28:44,770 --> 00:28:49,970 ისე, საბედნიეროდ ეს საკმაოდ მარტივი უბრალოდ say უფასო სახელწოდება. 666 00:28:49,970 --> 00:28:51,260 და ჩვენ არასოდეს კეთდება ეს ადრე იყო. 667 00:28:51,260 --> 00:28:55,890 მაგრამ შეგიძლიათ არსებითად ვფიქრობ უფასო როგორც საპირისპირო malloc. 668 00:28:55,890 --> 00:28:58,030 უფასო არის საპირისპირო გამოყოფის მეხსიერება. 669 00:28:58,030 --> 00:28:59,540 ასე რომ, ახლა ნება მომეცით recompile ამ. 670 00:28:59,540 --> 00:29:02,050 სასტარტედ Hello-2. 671 00:29:02,050 --> 00:29:04,620 ნება მომეცით აწარმოებს კიდევ ერთხელ. Hello-2 დავით. 672 00:29:04,620 --> 00:29:07,290 ასე რომ, როგორც ჩანს მუშაობა ზუსტად ისე. 673 00:29:07,290 --> 00:29:11,180 მაგრამ თუ დაბრუნდეს Valgrind და ხელახლა აწარმოებს იმავე ბრძანება ჩემს ახლად 674 00:29:11,180 --> 00:29:14,720 შედგენილი პროგრამა, აკრეფა ჩემი სახელით, როგორც ადრე - 675 00:29:14,720 --> 00:29:15,370 ლამაზი. 676 00:29:15,370 --> 00:29:16,760 ბევრი ინფორმაცია - 677 00:29:16,760 --> 00:29:17,740 გამოყენებულ გასასვლელი - 678 00:29:17,740 --> 00:29:19,370 ნულოვანი bytes in ნულოვანი ბლოკად. 679 00:29:19,370 --> 00:29:21,840 ეს არის სუპერ ლამაზი, ყველა ბევრი ბლოკად გათავისუფლდა. 680 00:29:21,840 --> 00:29:23,480 არ გაჟონვის შესაძლებელია. 681 00:29:23,480 --> 00:29:27,200 >> ასე რომ მალე, არა პრობლემა Set 4, მაგრამ პრობლემა Set 5, სასამართლო 682 00:29:27,200 --> 00:29:30,740 და შემდგომი, ესეც გახდება ღონისძიების სისწორეში თქვენი 683 00:29:30,740 --> 00:29:33,630 პროგრამა, თუ არა გაქვთ ან არ აქვთ მეხსიერების ტბები. 684 00:29:33,630 --> 00:29:36,900 მაგრამ საბედნიეროდ, არა მარტო შეგიძლიათ მიზეზი მათი საშუალებით ინტუიციურად, რომელიც 685 00:29:36,900 --> 00:29:40,430 არის, სავარაუდოდ, ადვილად მცირე პროგრამები მაგრამ უფრო რთული დიდი პროგრამების, 686 00:29:40,430 --> 00:29:43,860 Valgrind, მათთვის უფრო დიდი პროგრამების, შეგვიძლია დაგეხმაროთ იდენტიფიცირება 687 00:29:43,860 --> 00:29:45,360 კონკრეტული პრობლემა. 688 00:29:45,360 --> 00:29:47,500 >> მაგრამ არსებობს ერთი პრობლემა რომლებიც შეიძლება წარმოიშვას. 689 00:29:47,500 --> 00:29:51,245 ნება მომეცით გახსნა ამ ფაილის აქ, რომელიც, ერთხელ, გარკვეულწილად უბრალო მაგალითი. 690 00:29:51,245 --> 00:29:53,760 მაგრამ ფოკუსირება რა ამ პროგრამის აკეთებს. 691 00:29:53,760 --> 00:29:55,190 ამას უწოდებენ memory.c. 692 00:29:55,190 --> 00:29:58,380 ჩვენ ყველაფერს პოსტი ამ უკანასკნელს დღეს zip დღევანდელი წყაროს კოდი. 693 00:29:58,380 --> 00:30:01,610 და შეამჩნია, რომ მაქვს ფუნქცია მოუწოდა ვ რომ იღებს არანაირი არგუმენტი და 694 00:30:01,610 --> 00:30:02,800 ბრუნდება არაფერი. 695 00:30:02,800 --> 00:30:07,240 შესაბამისად 20, მე როგორც ჩანს გამოცხადების მომცეთ int და უწოდა x. 696 00:30:07,240 --> 00:30:09,570 მე მინიჭება არის დაბრუნების ღირებულება malloc. 697 00:30:09,570 --> 00:30:14,590 და მხოლოდ უნდა იყოს ნათელი, თუ რამდენი ბაიტი am მე ალბათ მიღების უკან malloc 698 00:30:14,590 --> 00:30:17,080 ამ სიტუაციაში? 699 00:30:17,080 --> 00:30:18,040 >> ალბათ 40. 700 00:30:18,040 --> 00:30:18,840 სად იღებთ რომ? 701 00:30:18,840 --> 00:30:22,410 კარგად, თუ გავიხსენებთ, რომ int ხშირად 4 ბაიტი, მაინც ეს არის 702 00:30:22,410 --> 00:30:25,110 მოწყობილობების, 10 ჯერ 4 აშკარად 40. 703 00:30:25,110 --> 00:30:28,920 ასე რომ malloc ბრუნდება მისამართი ბლოკი მეხსიერება და შენახვის, რომ 704 00:30:28,920 --> 00:30:30,800 სიტყვით საბოლოოდ in x. 705 00:30:30,800 --> 00:30:32,570 ასე რომ იყოს ნათელი, თუ რა შემდეგ ხდება? 706 00:30:32,570 --> 00:30:34,990 ასევე, ნება მომეცით გადართვის უკან ჩვენს სურათს აქ. 707 00:30:34,990 --> 00:30:38,150 ნება მომეცით არ არის მხოლოდ მიაპყროს ბოლოში ჩემი კომპიუტერის მეხსიერებაში, ნება მომეცით წავიდეთ წინ და 708 00:30:38,150 --> 00:30:42,990 მიაპყროს მთლიანი ოთხკუთხედი, რომ წარმოადგენს ყველა ჩემი ოპერატიული. 709 00:30:42,990 --> 00:30:44,790 >> ჩვენ ყველაფერს ამბობენ, რომ სტეკი არის ქვედა. 710 00:30:44,790 --> 00:30:47,010 და არ არსებობს ტექსტის სეგმენტის uninitialized მონაცემები. 711 00:30:47,010 --> 00:30:49,880 მაგრამ მე მხოლოდ აპირებს აბსტრაქტული იმ სხვა საკითხებთან ერთად, რადგან dot, dot dot. 712 00:30:49,880 --> 00:30:53,470 მე მხოლოდ აპირებს ეხება ეს როგორც ბევრი ზედა. 713 00:30:53,470 --> 00:30:57,070 და მაშინ ბოლოში ამ სურათზე, წარმოადგენს ძირითად, მე ვაპირებ 714 00:30:57,070 --> 00:30:59,880 მისცეს მას ნაჭერი მეხსიერება on დასტის. 715 00:30:59,880 --> 00:31:03,150 იყიდება ვ, მე ვაპირებ, რათა ეს ნაჭერი მეხსიერების on დასტის. 716 00:31:03,150 --> 00:31:05,140 ახლა, მე მივიღე კონსულტაციები ჩემი წყაროს კოდი კიდევ ერთხელ. 717 00:31:05,140 --> 00:31:07,170 რა არის ადგილობრივი ცვლადები ძირითად? 718 00:31:07,170 --> 00:31:10,710 როგორც ჩანს არაფერი, ისე, რომ ნაჭერი არის ეფექტურად ცარიელია ან არ კი როგორც დიდი 719 00:31:10,710 --> 00:31:11,600 როგორც მე შედგენილი იგი. 720 00:31:11,600 --> 00:31:15,730 მაგრამ ვ, მაქვს ადგილობრივი ცვლადი, რომელსაც x. 721 00:31:15,730 --> 00:31:20,410 ამიტომ, მე ვაპირებ წავიდეთ წინ და მისცეს ვ ბლოკი მეხსიერება, უწოდა x. 722 00:31:20,410 --> 00:31:24,680 >> ახლა კი malloc 10 ჯერ 4, ასე რომ malloc 40, სად, რომ 723 00:31:24,680 --> 00:31:25,430 მეხსიერების მოდის? 724 00:31:25,430 --> 00:31:27,530 ჩვენ არ ფორმდება სურათზე მინდა ეს ადრე იყო. 725 00:31:27,530 --> 00:31:31,140 მაგრამ მოდით ვივარაუდოთ, რომ ის ეფექტურად მოდის აქ, ასე რომ ერთი, 726 00:31:31,140 --> 00:31:33,170 ორი, სამი, ოთხი, ხუთი. 727 00:31:33,170 --> 00:31:34,680 ახლა კი გვჭირდება 40 ამ. 728 00:31:34,680 --> 00:31:37,540 ასე რომ, მე მხოლოდ ამის dot, dot, dot შევთავაზებთ რომ არსებობს კიდევ უფრო მეტი მეხსიერება 729 00:31:37,540 --> 00:31:39,350 მოდის უკან ბევრი. 730 00:31:39,350 --> 00:31:40,710 ახლა რა მისამართზე? 731 00:31:40,710 --> 00:31:42,620 მოდით ავირჩიოთ ჩვენი თვითნებური მისამართი, როგორც ყოველთვის - 732 00:31:42,620 --> 00:31:46,310 Ox123, მიუხედავად იმისა, ეს, ალბათ აპირებს რამ სრულიად განსხვავებული. 733 00:31:46,310 --> 00:31:50,420 ეს არის ის, მისამართი პირველი ბაიტი in მეხსიერება, რომ მე ითხოვს malloc ამისთვის. 734 00:31:50,420 --> 00:31:53,630 >> ასე რომ, მოკლედ, კიდევ ერთხელ ხაზი 20 გაუშვებს, რა არის ფაქტიურად 735 00:31:53,630 --> 00:31:57,170 ინახება შიგნით x აქ? 736 00:31:57,170 --> 00:31:58,730 Ox123. 737 00:31:58,730 --> 00:32:00,370 Ox123. 738 00:32:00,370 --> 00:32:01,550 და ხარი არის უინტერესო. 739 00:32:01,550 --> 00:32:03,200 ეს მხოლოდ იმას ნიშნავს, აქ არის რიცხვი. 740 00:32:03,200 --> 00:32:06,490 მაგრამ რა არის მთავარი არის, ის, რაც მე მაღაზიაში in x, რაც ადგილობრივი განსხვავებულია. 741 00:32:06,490 --> 00:32:10,260 მაგრამ მისი მონაცემები ტიპის, კიდევ ერთხელ, არის მისამართი int. 742 00:32:10,260 --> 00:32:12,710 ისე, მე ვაპირებ შესანახად Ox123. 743 00:32:12,710 --> 00:32:16,610 თუმცა ისევ და ისევ, თუ ეს ცოტა გართულებული ზედმეტად, თუ გადახვევა 744 00:32:16,610 --> 00:32:21,490 უკან, შეგვიძლია აბსტრაქტული ამ მოშორებით საკმაოდ გონივრულად და უბრალოდ, ვამბობთ, რომ x არის 745 00:32:21,490 --> 00:32:23,910 მომცეთ, რომ ბლოკი მეხსიერება. 746 00:32:23,910 --> 00:32:24,070 >> OK. 747 00:32:24,070 --> 00:32:26,230 ახლა კითხვა ხელთ ასეთია - 748 00:32:26,230 --> 00:32:29,910 ხაზი 21, თურმე არის buggy. 749 00:32:29,910 --> 00:32:31,160 რატომ? 750 00:32:31,160 --> 00:32:34,890 751 00:32:34,890 --> 00:32:36,930 >> ბოდიში? 752 00:32:36,930 --> 00:32:38,640 არა აქვს - 753 00:32:38,640 --> 00:32:40,390 ამბობენ, რომ კიდევ ერთხელ. 754 00:32:40,390 --> 00:32:41,240 ისე, ეს არ უფასო. 755 00:32:41,240 --> 00:32:42,350 ასე რომ, მეორე მაგრამ. 756 00:32:42,350 --> 00:32:45,000 ასე რომ, არსებობს ერთი, მაგრამ მაინც კონკრეტულად ერთი ხაზი 21. 757 00:32:45,000 --> 00:32:49,480 758 00:32:49,480 --> 00:32:50,040 >> ზუსტად. 759 00:32:50,040 --> 00:32:54,980 ეს მარტივი ხაზი კოდი მხოლოდ ბუფერული overflow, ბუფერული გაუსწრო. 760 00:32:54,980 --> 00:32:57,050 ბუფერული მხოლოდ იმას ნიშნავს, ბლოკი მეხსიერება. 761 00:32:57,050 --> 00:33:01,520 მაგრამ ეს ბლოკი მეხსიერება of ზომა 10, 10 რიცხვებით, რაც იმას ნიშნავს, თუ ჩვენ 762 00:33:01,520 --> 00:33:05,350 ინდექსი შევიდა ის გამოყენებით სინტაქსური შაქარი საქართველოს მასივი notation, მოედანი 763 00:33:05,350 --> 00:33:09,220 ფრჩხილებში, თქვენ გაქვთ x bracket 0 x bracket 1 x, 764 00:33:09,220 --> 00:33:10,390 bracket dot, dot, dot. 765 00:33:10,390 --> 00:33:13,270 x bracket 9 არის ყველაზე დიდი ერთი. 766 00:33:13,270 --> 00:33:17,680 ასე რომ, თუ გავაკეთო x bracket 10, სადაც მე რეალურად მიმდინარეობს მეხსიერების? 767 00:33:17,680 --> 00:33:19,120 >> ისე, თუ მე მაქვს 10 int - 768 00:33:19,120 --> 00:33:21,070 მოდით რეალურად მიაპყროს ყველა ამ აქ. 769 00:33:21,070 --> 00:33:22,700 ასე რომ, იყო პირველი ხუთი. 770 00:33:22,700 --> 00:33:24,660 აი დანარჩენი ხუთი ints. 771 00:33:24,660 --> 00:33:29,580 ასე რომ x bracket 0 აქ არის. x bracket 1 აქ. x bracket 9 აქ არის. x bracket 772 00:33:29,580 --> 00:33:37,960 10 აქ არის, რაც იმას ნიშნავს, მე ვეუბნებოდი, შეესაბამება 21, კომპიუტერული დააყენოს 773 00:33:37,960 --> 00:33:39,400 რომელშიც? 774 00:33:39,400 --> 00:33:42,010 ნომერი 0 რომელშიც? 775 00:33:42,010 --> 00:33:43,380 ისე, ეს 0, დიახ. 776 00:33:43,380 --> 00:33:45,460 მაგრამ ის ფაქტი, რომ მის 0 ერთგვარი დამთხვევა. 777 00:33:45,460 --> 00:33:47,140 ეს შეიძლება იყოს ნომერი 50, ყველა ჩვენ ზრუნვა. 778 00:33:47,140 --> 00:33:50,480 მაგრამ ჩვენ ვცდილობთ დააყენოს იგი x bracket 10, რომელიც, სადაც ეს 779 00:33:50,480 --> 00:33:53,700 კითხვის ნიშნის დგება, რომელიც არ არის კარგი რამ. 780 00:33:53,700 --> 00:33:57,070 ეს პროგრამა შეიძლება ძალიან კარგად ავარიის შედეგად. 781 00:33:57,070 --> 00:33:59,400 >> ახლა მოდით წავიდეთ წინ და თუ ეს ნამდვილად, რა მოხდება. 782 00:33:59,400 --> 00:34:02,600 სასტარტედ მეხსიერება, რადგან ფაილი ეწოდება memory.c. 783 00:34:02,600 --> 00:34:05,950 მოდით წავიდეთ წინ და აწარმოებს პროგრამის მეხსიერებაში. 784 00:34:05,950 --> 00:34:08,239 ასე რომ, ჩვენ მივიღეთ გაუმართლა, რეალურად, როგორც ჩანს. 785 00:34:08,239 --> 00:34:09,340 ჩვენ გაუმართლა. 786 00:34:09,340 --> 00:34:11,060 მაგრამ ვნახოთ, თუ ჩვენ ახლა აწარმოებს Valgrind. 787 00:34:11,060 --> 00:34:14,170 ერთი შეხედვით, ჩემი პროგრამა შეიძლება როგორც ჩანს, კარგად სწორი. 788 00:34:14,170 --> 00:34:18,010 მაგრამ ნება მიბოძეთ აწარმოებს Valgrind ერთად - გაჟონვის შემოწმება შეადგენს სრული სახით მეხსიერება. 789 00:34:18,010 --> 00:34:20,110 >> ახლა კი, როცა აწარმოებს ამ - 790 00:34:20,110 --> 00:34:21,030 საინტერესოა. 791 00:34:21,030 --> 00:34:26,800 არასწორი დაწერა of ზომა 4 ხაზი 21 memory.c. 792 00:34:26,800 --> 00:34:29,284 ხაზი 21 memory.c არის რომელი? 793 00:34:29,284 --> 00:34:30,340 ოჰ, საინტერესოა. 794 00:34:30,340 --> 00:34:31,080 მაგრამ დაველოდოთ. 795 00:34:31,080 --> 00:34:32,389 ზომა 4, რა არის, რომ მას მხედველობაში? 796 00:34:32,389 --> 00:34:34,969 მე მხოლოდ ერთი წერა, მაგრამ of ზომა 4. 797 00:34:34,969 --> 00:34:36,889 რატომ არის 4? 798 00:34:36,889 --> 00:34:39,280 ეს იმიტომ, რომ ეს int, რომელიც არის, კიდევ ერთხელ, ოთხი bytes. 799 00:34:39,280 --> 00:34:42,510 ასე რომ Valgrind რომ პროგრამაში შეცდომაა, რომ მე, glancing ჩემს კოდი, არა. 800 00:34:42,510 --> 00:34:45,040 და, შესაძლოა, თქვენი TF რომ ან არა. 801 00:34:45,040 --> 00:34:48,469 რა მაგრამ Valgrind დანამდვილებით დაადგინა, რომ ჩვენ გავაკეთეთ შეცდომა არსებობს, მაშინაც კი, 802 00:34:48,469 --> 00:34:52,719 თუმცა მივიღეთ გაუმართლა და კომპიუტერული გადაწყდა, eh, მე არ ვაპირებ მარცხი 803 00:34:52,719 --> 00:34:57,470 მხოლოდ იმიტომ, რომ შეეხო ერთ ნაწილად, ერთი int ის ღირს მეხსიერების და არ არის 804 00:34:57,470 --> 00:34:58,550 რეალურად საკუთარი. 805 00:34:58,550 --> 00:35:00,380 >> ისე, რა არის buggy აქ. 806 00:35:00,380 --> 00:35:01,180 მისამართი - 807 00:35:01,180 --> 00:35:03,190 ეს გიჟები ეძებს მისამართი ამ თექვსმეტობითი. 808 00:35:03,190 --> 00:35:06,890 ეს მხოლოდ იმას ნიშნავს, სადღაც ბევრი არის ნულოვანი ბაიტი შემდეგ ბლოკის ზომა 40 809 00:35:06,890 --> 00:35:07,620 გამოიყოფა. 810 00:35:07,620 --> 00:35:10,610 ნება მომეცით დააშორებს აქ და თუ ეს უფრო სასარგებლოა. 811 00:35:10,610 --> 00:35:11,410 საინტერესო. 812 00:35:11,410 --> 00:35:15,600 40 bytes ნამდვილად წააგო ამ ზარალის ჩანაწერი 1 1. 813 00:35:15,600 --> 00:35:17,840 კიდევ ერთხელ, უფრო სიტყვა, ვიდრე არის სასარგებლო აქ. 814 00:35:17,840 --> 00:35:21,350 მაგრამ საფუძველზე ხაზი გაუსვა ხაზი, სად უნდა ალბათ ფოკუსირება ჩემი 815 00:35:21,350 --> 00:35:24,070 ყურადღებას კიდევ bug? 816 00:35:24,070 --> 00:35:26,570 როგორც ჩანს, ხაზი 20 memory.c. 817 00:35:26,570 --> 00:35:30,990 >> ასე რომ, თუ ჩვენ დაბრუნდეს ხაზი 20 ეს არის ის, ერთი, რომ თქვენ გამოვლენილი ადრე. 818 00:35:30,990 --> 00:35:33,030 და ეს არ არის აუცილებელი buggy. 819 00:35:33,030 --> 00:35:35,160 მაგრამ ჩვენ ამ შეცვალა თავისი ეფექტი. 820 00:35:35,160 --> 00:35:38,790 ასე რომ, როგორ შემიძლია გამოსწორებას, სულ მცირე, ერთი იმ შეცდომების? 821 00:35:38,790 --> 00:35:42,240 რა შეიძლება გავაკეთო შემდეგ ხაზი 21? 822 00:35:42,240 --> 00:35:47,110 მე ვერ გააკეთებს თავისუფალი x, ასე მისცეს უკან რომ მეხსიერებაში. 823 00:35:47,110 --> 00:35:49,230 და როგორ უნდა დააფიქსიროს ეს ხარვეზი? 824 00:35:49,230 --> 00:35:52,120 მე უნდა აუცილებლად წავიდეთ არ შემდგომი ვიდრე 0. 825 00:35:52,120 --> 00:35:53,670 ნება მომეცით ცდილობენ და თავიდან გაუშვით ეს. 826 00:35:53,670 --> 00:35:56,080 სამწუხაროდ, აუცილებლად წავიდეთ არ შემდგომი ვიდრე 9. 827 00:35:56,080 --> 00:35:57,510 სასტარტედ მეხსიერება. 828 00:35:57,510 --> 00:36:00,650 ნება მომეცით გამეორება Valgrind ამ უფრო დიდი ფანჯარა. 829 00:36:00,650 --> 00:36:01,580 ახლა კი გამოიყურება. 830 00:36:01,580 --> 00:36:02,250 ლამაზი. 831 00:36:02,250 --> 00:36:03,270 ყველა ბევრი ბლოკად გათავისუფლდა. 832 00:36:03,270 --> 00:36:04,270 არ გაჟონვის შესაძლებელია. 833 00:36:04,270 --> 00:36:07,520 და ზემოთ აქ, იქ არის ნახსენები ნებისმიერი მეტი ინვალიდი უფლება. 834 00:36:07,520 --> 00:36:09,820 >> მხოლოდ მისაღებად ხარბ და მოდით თუ კიდევ ერთი აქცია 835 00:36:09,820 --> 00:36:11,050 არ მიდის როგორც განკუთვნილი - 836 00:36:11,050 --> 00:36:12,560 მე მისაღებად იღბლიანი მომენტი წინ. 837 00:36:12,560 --> 00:36:15,530 ხოლო ის ფაქტი, რომ ეს არის 0, ალბათ ზედმეტად შეცდომა. 838 00:36:15,530 --> 00:36:20,650 მოდით, უბრალოდ გაკეთება 50, გარკვეულწილად თვითნებური ნომერი, მიიღოს მეხსიერება dot ხაზი მეხსიერება - 839 00:36:20,650 --> 00:36:21,410 მაინც გაუმართლა. 840 00:36:21,410 --> 00:36:22,510 არაფერი ის crashing. 841 00:36:22,510 --> 00:36:26,150 დავუშვათ, მე უბრალოდ რაღაც სულელური, და მე 100. 842 00:36:26,150 --> 00:36:30,360 ნება მომეცით რიმეიკი მეხსიერება, dot ხაზი მეხსიერება - 843 00:36:30,360 --> 00:36:31,075 მივიღე გაუმართლა ერთხელ. 844 00:36:31,075 --> 00:36:32,800 როგორ შესახებ 1000? 845 00:36:32,800 --> 00:36:35,370 ints მის ფარგლებს გარეთ, უხეშად სადაც მე უნდა? 846 00:36:35,370 --> 00:36:37,410 სასტარტედ მეხსიერება - 847 00:36:37,410 --> 00:36:38,570 რა იგი. 848 00:36:38,570 --> 00:36:39,920 >> [სიცილი] 849 00:36:39,920 --> 00:36:41,270 >> OK. 850 00:36:41,270 --> 00:36:43,920 ნუ არეულობას გარშემო აღარ. 851 00:36:43,920 --> 00:36:45,120 გამეორება მეხსიერება. 852 00:36:45,120 --> 00:36:45,840 იქ ჩვენ წავიდეთ. 853 00:36:45,840 --> 00:36:46,410 ყველა უფლება. 854 00:36:46,410 --> 00:36:52,500 ასე რომ, როგორც ჩანს, თქვენ ინდექსი 100,000 ints მიღმა, სადაც თქვენ უნდა ყოფილიყო 855 00:36:52,500 --> 00:36:54,410 მეხსიერება, ცუდი რამ ხდება. 856 00:36:54,410 --> 00:36:56,430 ასე რომ, ეს აშკარად არ არის ხისტი, სწრაფი წესით. 857 00:36:56,430 --> 00:36:58,190 მე სახის გამოყენებით სასამართლო პროცესი და შეცდომა მისაღებად არსებობს. 858 00:36:58,190 --> 00:37:02,230 მაგრამ ეს იმიტომ, გრძელი ამბავი მოკლედ, თქვენი კომპიუტერის მეხსიერების ასევე იყოფა 859 00:37:02,230 --> 00:37:03,580 შევიდა ეს ყველაფერი მოუწოდა სეგმენტები. 860 00:37:03,580 --> 00:37:07,260 და ზოგჯერ, კომპიუტერი რეალურად მიერ მოცემული ცოტა მეტი მეხსიერება 861 00:37:07,260 --> 00:37:08,400 ვიდრე ითხოვენ. 862 00:37:08,400 --> 00:37:12,170 მაგრამ ეფექტურობა, უბრალოდ უფრო ადვილი მიიღეთ მეტი მეხსიერების მაგრამ მხოლოდ გითხრათ 863 00:37:12,170 --> 00:37:13,780 რომ თქვენ მისაღებად ნაწილის. 864 00:37:13,780 --> 00:37:16,370 >> და თუ თქვენ გაქვთ იღბლიანი ზოგჯერ, ამიტომ, თქვენ შესაძლოა შეეხოს 865 00:37:16,370 --> 00:37:17,795 მეხსიერება, რომელიც არ განეკუთვნება თქვენ. 866 00:37:17,795 --> 00:37:21,860 თქვენ არ გაქვთ იმის გარანტია, რომ თუ რა მნიშვნელობა დააყენა იქ დარჩება, რადგან 867 00:37:21,860 --> 00:37:25,080 კომპიუტერული დღემდე ფიქრობს, რომ ეს არ თქვენი, მაგრამ არა აუცილებლად აპირებს 868 00:37:25,080 --> 00:37:29,910 მოხვდა კიდევ ერთი სეგმენტი მეხსიერება კომპიუტერი და გამოიწვიოს შეცდომა მოსწონს 869 00:37:29,910 --> 00:37:31,710 ეს ერთი აქ. 870 00:37:31,710 --> 00:37:32,060 ყველა უფლება. 871 00:37:32,060 --> 00:37:37,240 ნებისმიერი კითხვებით შემდეგ მეხსიერება? 872 00:37:37,240 --> 00:37:37,590 >> ყველა უფლება. 873 00:37:37,590 --> 00:37:40,610 მოდით შევხედოთ აქ, მაშინ, ზე რაღაც ჩვენ უკვე აღების for 874 00:37:40,610 --> 00:37:48,361 მინიჭებული საკმაოდ გარკვეული დრო, რომელიც არის ამ ფაილი სახელად cs50.h. 875 00:37:48,361 --> 00:37:49,420 ასე რომ, ეს ფაილი. 876 00:37:49,420 --> 00:37:51,130 ეს არის მხოლოდ მთელი bunch კომენტარები up დასაწყისში. 877 00:37:51,130 --> 00:37:53,900 და შეიძლება არ ჩანდა, ამ შემთხვევაში თქვენ poked გარშემო მოწყობილობების. 878 00:37:53,900 --> 00:37:57,000 მაგრამ აღმოჩნდება, რომ ყველა დროის, როდესაც ჩვენ გამოყენებული უნდა გამოიყენოს სიმებიანი როგორც 879 00:37:57,000 --> 00:38:01,130 სინონიმი, საშუალება, რომლითაც ჩვენ განვაცხადეთ რომ სინონიმი იყო ამ 880 00:38:01,130 --> 00:38:03,990 სიტყვით typedef, ტიპის განსაზღვრას. 881 00:38:03,990 --> 00:38:07,500 და ჩვენ ფაქტობრივად ამბობდა, მიიღოს სიმებიანი სინონიმი char ვარსკვლავი. 882 00:38:07,500 --> 00:38:11,190 ეს საშუალება, რომლითაც დასტის შეიქმნა ეს სასწავლო დისკები ცნობილია, როგორც 883 00:38:11,190 --> 00:38:12,040 სიმებიანი. 884 00:38:12,040 --> 00:38:14,830 >> ახლა აქ მხოლოდ პროტოტიპის ამისთვის getchar. 885 00:38:14,830 --> 00:38:17,350 ჩვენ შეიძლება არ უნახავს ეს ადრე, მაგრამ ეს მართლაც, თუ რას აკეთებს. getchar 886 00:38:17,350 --> 00:38:19,070 იღებს არანაირი არგუმენტი, ბრუნდება char. 887 00:38:19,070 --> 00:38:21,340 getdouble იღებს არ არგუმენტები, დააბრუნებს ორმაგი. 888 00:38:21,340 --> 00:38:24,440 getfloat იღებს არანაირი არგუმენტი ბრუნდება float და სხვ. 889 00:38:24,440 --> 00:38:27,270 getint არის აქ. getlonglong არის აქ. 890 00:38:27,270 --> 00:38:28,820 და getstring არის აქ. 891 00:38:28,820 --> 00:38:29,420 და ეს არის ის. 892 00:38:29,420 --> 00:38:33,080 ეს purple ხაზი კიდევ ერთი preprocessor დირექტივა გამო 893 00:38:33,080 --> 00:38:35,550 hashtag დასაწყისში იგი. 894 00:38:35,550 --> 00:38:35,870 >> ყველა უფლება. 895 00:38:35,870 --> 00:38:38,380 ასე რომ, ახლა ნება მომეცით წასვლას cs50.c. 896 00:38:38,380 --> 00:38:40,400 და ჩვენ არ გაიგო დიდი ხნის მანძილზე ამ. 897 00:38:40,400 --> 00:38:43,280 მაგრამ გადმოგცეთ glimpse თუ რა რაც ხდება ეს ყველაფერი 898 00:38:43,280 --> 00:38:46,434 დრო, მინდა წასვლა - 899 00:38:46,434 --> 00:38:48,250 მოდით getchar. 900 00:38:48,250 --> 00:38:51,050 ასე რომ getchar ძირითადად კომენტარი. 901 00:38:51,050 --> 00:38:52,060 მაგრამ ეს ასე გამოიყურება. 902 00:38:52,060 --> 00:38:54,800 ასე რომ, ეს რეალური ფუნქცია getchar, რომ ჩვენ 903 00:38:54,800 --> 00:38:56,055 აღების თავისთავად ცხადად არსებობს. 904 00:38:56,055 --> 00:38:59,370 და მიუხედავად იმისა, რომ ჩვენ არ გამოიყენოს ეს ერთი რომ ხშირად, თუ ოდესმე, ეს სულ მცირე 905 00:38:59,370 --> 00:39:00,470 შედარებით მარტივი. 906 00:39:00,470 --> 00:39:02,580 ასე რომ, ღირს აღება სწრაფი შევხედოთ აქ. 907 00:39:02,580 --> 00:39:06,540 >> ასე რომ getchar აქვს უსასრულო ციკლი, შეგნებულად ასე როგორც ჩანს. 908 00:39:06,540 --> 00:39:10,050 ეს მაშინ უწოდებს - ეს კი ერთგვარი ლამაზი reuse კოდის ჩვენ თვითონ დაწერა. 909 00:39:10,050 --> 00:39:11,220 ის მოუწოდებს getstring. 910 00:39:11,220 --> 00:39:12,460 იმის გამო, რომ რას ნიშნავს, რომ მიიღოს char? 911 00:39:12,460 --> 00:39:14,730 ისე, თქვენ შესაძლოა, ასევე ცდილობენ მთელი ხაზი ტექსტის შესახებ და 912 00:39:14,730 --> 00:39:16,940 მაშინ მხოლოდ ვუყურებდეთ იმ სიმბოლოს. 913 00:39:16,940 --> 00:39:19,170 შესაბამისად 60, აქ არის პატარა ცოტა საღი აზრის ქვითარი. 914 00:39:19,170 --> 00:39:21,610 თუ getstring დაბრუნდა null, ნუ გაგრძელება. 915 00:39:21,610 --> 00:39:22,820 რაღაც გაფუჭდა. 916 00:39:22,820 --> 00:39:28,120 >> ახლა ეს გარკვეულწილად შემაშფოთებელი, მაგრამ ჩვეულებრივი in C. char მაქს ალბათ 917 00:39:28,120 --> 00:39:29,960 წარმოადგენს რა უბრალოდ საფუძველზე მისი სახელი? 918 00:39:29,960 --> 00:39:31,670 ეს მუდმივი. 919 00:39:31,670 --> 00:39:36,040 ეს იგივეა რიცხვითი ღირებულება ყველაზე დიდი char შეგიძლიათ წარმოადგენს ერთად 920 00:39:36,040 --> 00:39:40,370 ერთი bite, რომელიც სავარაუდოდ ამ ნომერზე 255, რომელიც არის ყველაზე დიდი ნომერი 921 00:39:40,370 --> 00:39:42,720 წარმოადგენს რვა ბიტი, დაწყებული ნულოვანი. 922 00:39:42,720 --> 00:39:47,460 ასე რომ, მე გამოიყენოს ეს, ამ ფუნქციას, როდესაც წერა ამ კოდექსით, მხოლოდ იმიტომ, 923 00:39:47,460 --> 00:39:51,753 თუ რამე მიდის არასწორი getchar მაგრამ მისი მიზანი ცხოვრების დაბრუნებას 924 00:39:51,753 --> 00:39:54,830 char, თქვენ უნდა როგორღაც შევძლებთ to ნიშანს შესახებ, რომ 925 00:39:54,830 --> 00:39:55,840 რაღაც გაფუჭდა. 926 00:39:55,840 --> 00:39:56,970 ჩვენ ვერ ბრუნდება null. 927 00:39:56,970 --> 00:39:58,480 გამოდის, რომ null არის მაჩვენებელი. 928 00:39:58,480 --> 00:40:01,030 ისევ და ისევ, getchar აქვს დაბრუნების char. 929 00:40:01,030 --> 00:40:04,760 >> ასე რომ, კონვენციის, თუ რამე მიდის არასწორია, თქვენ, პროგრამისტი, ან 930 00:40:04,760 --> 00:40:08,160 ამ შემთხვევაში, მე ბიბლიოთეკაში, მე მქონდა უბრალოდ გადაწყვიტოს თვითნებურად, თუ 931 00:40:08,160 --> 00:40:12,230 რაღაც მიდის არასწორი, მე ვაპირებ დაბრუნებას ნომერი 255, რომელიც ნამდვილად 932 00:40:12,230 --> 00:40:17,240 ნიშნავს, რომ ჩვენ არ შეგვიძლია, მომხმარებელს შეუძლია არა აკრიფოთ ხასიათი წარმოდგენილია მიერ 933 00:40:17,240 --> 00:40:21,410 ნომერი 255 იმიტომ რომ ჩვენ იპარავს მას როგორც ე.წ. Sentinel მნიშვნელობა 934 00:40:21,410 --> 00:40:23,410 წარმოადგენს პრობლემას. 935 00:40:23,410 --> 00:40:27,010 ახლა კი გამოდის, რომ ხასიათი 255 არ არის რაღაც თქვენ შეგიძლიათ ტიპის 936 00:40:27,010 --> 00:40:28,380 თქვენს კლავიატურაზე, ამიტომ არ არის დიდი გარიგება. 937 00:40:28,380 --> 00:40:30,910 მონაწილე არ შეამჩნია, რომ მე მოპარული ეს პერსონაჟი. 938 00:40:30,910 --> 00:40:34,620 მაგრამ თუ თქვენ ოდესმე ვხედავ ამ კაცს გვერდებზე კომპიუტერული სისტემის ზოგიერთი მინიშნება 939 00:40:34,620 --> 00:40:38,560 ყველა caps მუდმივი მსგავსი, რომელიც ამბობს, შემთხვევაში შეცდომა ამ მუდმივ სიძლიერეზე 940 00:40:38,560 --> 00:40:42,720 დაუბრუნდება, ეს ყველაფერი ადამიანის გააკეთა წლების წინ უკანონოდ გადაწყვიტა 941 00:40:42,720 --> 00:40:45,680 დაბრუნდეს ეს განსაკუთრებული მნიშვნელობა და მას მუდმივი შემთხვევაში 942 00:40:45,680 --> 00:40:46,840 რაღაც მიდის არასწორი. 943 00:40:46,840 --> 00:40:48,580 >> ახლა ჯადოსნური ხდება ქვემოთ აქ. 944 00:40:48,580 --> 00:40:52,600 პირველი, მე გამოცხადების შეესაბამება 67 ორი სიმბოლო, C1 და C2. 945 00:40:52,600 --> 00:40:57,080 ხოლო შემდეგ ხაზი 68, იქ რეალურად ხაზი კოდი, რომ თქვენში 946 00:40:57,080 --> 00:41:01,140 ჩვენი მეგობარი printf, იმის გათვალისწინებით, რომ ეს აქვს პროცენტით Cs in შეთავაზებებს. 947 00:41:01,140 --> 00:41:06,490 მაგრამ შეამჩნია, რა ხდება აქ. sscanf ნიშნავს სიმებიანი scan - 948 00:41:06,490 --> 00:41:11,690 ნიშნავს სკანირების ფორმატირებული სიმებიანი, Ergo sscanf. 949 00:41:11,690 --> 00:41:12,590 რას ნიშნავს ეს? 950 00:41:12,590 --> 00:41:16,310 ეს იმას ნიშნავს, თქვენ გაიაროს sscanf სიმებიანი. 951 00:41:16,310 --> 00:41:18,420 და ხაზი რაც არ უნდა შესახებ სახის სისტემაში 952 00:41:18,420 --> 00:41:23,520 თქვენ გაივლის sscanf სტრიქონში მოსწონს ეს რომ ეუბნება scanf რა 953 00:41:23,520 --> 00:41:25,870 თქვენ იმედით მომხმარებელს ჯერ აკრეფილი შემოსული 954 00:41:25,870 --> 00:41:29,730 თქვენ ისე მიეღო-in მისამართები ორი მოცულობით მეხსიერება, ამ შემთხვევაში, 955 00:41:29,730 --> 00:41:31,150 იმიტომ, რომ მე ორი placeholders. 956 00:41:31,150 --> 00:41:34,610 ამიტომ, მე ვაპირებ, რათა ეს მისამართი საქართველოს C1 და მისამართი C2. 957 00:41:34,610 --> 00:41:37,700 >> და გავიხსენოთ, რომ თქვენ ფუნქცია მისამართი ზოგიერთი ცვლადის, რა 958 00:41:37,700 --> 00:41:38,950 გავლენა? 959 00:41:38,950 --> 00:41:41,400 960 00:41:41,400 --> 00:41:45,050 რა შეიძლება, რომ ფუნქცია გავაკეთოთ შედეგად მინიჭების ეს მისამართი 961 00:41:45,050 --> 00:41:48,170 ცვლადი, როგორც ეწინააღმდეგებოდა ცვლადი თავად? 962 00:41:48,170 --> 00:41:49,450 მას შეუძლია შეცვალოს ის, არა? 963 00:41:49,450 --> 00:41:53,250 თითქოს ვინმე რუკაზე ფიზიკური მისამართი, მათ შეუძლიათ წავალთ და ამის გაკეთება 964 00:41:53,250 --> 00:41:54,750 რაც მათ უნდათ, რომ მისამართი. 965 00:41:54,750 --> 00:41:55,800 იგივე იდეა აქ. 966 00:41:55,800 --> 00:41:59,950 თუ ჩვენ გაიაროს sscanf, მისამართი ორი მოცულობით მეხსიერება, თუნდაც ეს პატარა 967 00:41:59,950 --> 00:42:03,585 პატარა მოცულობით მეხსიერება, C1 და C2, მაგრამ ჩვენ ვეუბნებით, რომ ეს მისამართი მათგანი, 968 00:42:03,585 --> 00:42:05,170 sscanf შეგიძლიათ შეცვლის. 969 00:42:05,170 --> 00:42:08,530 >> ასე რომ sscanf მიზანი ცხოვრებაში, თუ ჩვენ წაიკითხა კაცი გვერდზე, არის წაკითხვის რა 970 00:42:08,530 --> 00:42:13,420 მომხმარებლის აკრეფილი, იმედი შესახებ, რომელსაც აკრეფილი ხასიათი და იქნებ 971 00:42:13,420 --> 00:42:16,470 კიდევ ერთი გმირი, და მიუხედავად შესახებ აკრეფილი, პირველ სიმბოლოს მიდის 972 00:42:16,470 --> 00:42:19,310 აქ, მეორე სიმბოლო მიდის აქ. 973 00:42:19,310 --> 00:42:22,470 ახლა, როგორც განზე, და თქვენ მხოლოდ ვიცი ეს დოკუმენტაცია, 974 00:42:22,470 --> 00:42:25,570 ის ფაქტი, რომ მე ცარიელი სივრცე არსებობს მხოლოდ იმას ნიშნავს, რომ არ მაინტერესებს, თუ 975 00:42:25,570 --> 00:42:28,440 შესახებ ჰიტები ფართი ბარი რამდენიმე ჯერ ადრე იგი იღებს 976 00:42:28,440 --> 00:42:30,400 ხასიათი, მე ვაპირებ იგნორირება ნებისმიერ თეთრი სივრცეში. 977 00:42:30,400 --> 00:42:32,510 ასე რომ, მე ვიცი, დოკუმენტაცია. 978 00:42:32,510 --> 00:42:36,570 >> ის ფაქტი, რომ არსებობს მეორე% c მოჰყვა თეთრი სივრცე, ფაქტობრივად, 979 00:42:36,570 --> 00:42:37,410 განზრახ. 980 00:42:37,410 --> 00:42:41,190 მინდა შეძლებს აღმოაჩინოს თუ მომხმარებელი ბრალია ან არ ითანამშრომლებს. 981 00:42:41,190 --> 00:42:45,630 ასე რომ მე იმ იმედით, რომ მომხმარებელს მხოლოდ აკრეფილი ერთ ხასიათი, ამიტომ მე იმ იმედით, 982 00:42:45,630 --> 00:42:50,640 რომ sscanf მხოლოდ დაბრუნებას აპირებს ღირებულება 1, რადგან, კიდევ ერთხელ, თუ წავიკითხე 983 00:42:50,640 --> 00:42:55,400 დოკუმენტაცია, sscanf მიზანი in ცხოვრება დაუბრუნდნენ რაოდენობის 984 00:42:55,400 --> 00:42:59,170 ცვლადები, რომ ივსებოდა მქონე მომხმარებლის შეტანა. 985 00:42:59,170 --> 00:43:02,270 >> I გავიდა ორი ცვლადის მისამართები, C1 და C2. 986 00:43:02,270 --> 00:43:06,420 მე იმ იმედით, თუმცა, რომ მხოლოდ ერთი მათ იღებს მოკლეს, რადგან თუ sscanf 987 00:43:06,420 --> 00:43:11,130 ბრუნდება 2, რა სავარაუდოდ გავლენა ლოგიკურად? 988 00:43:11,130 --> 00:43:14,600 რომ მომხმარებელს არ მხოლოდ მაძლევს ერთი ხასიათი, როგორიც მე ვუთხარი მას. 989 00:43:14,600 --> 00:43:17,860 ალბათ აკრეფილი ზე არანაკლებ ორი სიმბოლო. 990 00:43:17,860 --> 00:43:22,430 ასე რომ, თუ მე ნაცვლად არ ჰქონდათ მეორე % C, მე მქონდა ერთი, რაც 991 00:43:22,430 --> 00:43:25,370 გულწრფელად იქნება უფრო ინტუიტიური მიდგომა, ვფიქრობ, ერთი შეხედვით, 992 00:43:25,370 --> 00:43:30,220 თქვენ არ აპირებს შეძლებს აღმოაჩინოს თუ მომხმარებელი უკვე გაძლევთ უფრო 993 00:43:30,220 --> 00:43:31,780 შეყვანის ვიდრე რეალურად სურდა. 994 00:43:31,780 --> 00:43:34,100 ასე რომ, ეს ფარული ფორმა შეცდომის შემოწმება. 995 00:43:34,100 --> 00:43:35,640 >> მაგრამ შეამჩნია რა მე. 996 00:43:35,640 --> 00:43:39,970 მას შემდეგ, რაც დარწმუნებული ვარ, რომ მომხმარებელს მომცა ერთი ხასიათი, მე გასათავისუფლებლად ხაზი, აკეთებს 997 00:43:39,970 --> 00:43:44,450 საპირისპირო getstring, რაც თავის მხრივ იყენებს malloc, და მერე დაბრუნდნენ 998 00:43:44,450 --> 00:43:51,030 C1, ხასიათი, რომ იმედი მქონდა მომხმარებლის გათვალისწინებული და მხოლოდ იმ პირობით. 999 00:43:51,030 --> 00:43:54,680 ასე სწრაფად glimpsed, არამედ ნებისმიერ შეკითხვებს getchar? 1000 00:43:54,680 --> 00:43:57,450 1001 00:43:57,450 --> 00:43:59,590 ჩვენ ყველაფერს დაბრუნდება ზოგიერთი სხვები. 1002 00:43:59,590 --> 00:44:03,770 >> ისე, მინდა გითხრათ, წავიდეთ წინ და გაკეთება - ვარაუდობენ, ახლა, უბრალოდ მოტივაცია ჩვენი 1003 00:44:03,770 --> 00:44:08,910 დისკუსიის ერთ კვირაში პლუს დროს, ეს არის ფაილი სახელად structs.h. 1004 00:44:08,910 --> 00:44:11,440 ისევ და ისევ, ეს მხოლოდ გემოვნების რაღაც რომ დევს წინ. 1005 00:44:11,440 --> 00:44:13,090 მაგრამ შეამჩნია, რომ ბევრი ეს არის კომენტარი. 1006 00:44:13,090 --> 00:44:17,440 ნება მომეცით ხაზი გავუსვა მხოლოდ საინტერესო იქნება. 1007 00:44:17,440 --> 00:44:18,020 typedef - 1008 00:44:18,020 --> 00:44:19,700 იქ იმავე სიტყვით კიდევ ერთხელ. 1009 00:44:19,700 --> 00:44:23,100 typedef ვიყენებთ განაცხადოს სიმებიანი როგორც სპეციალური მონაცემების ტიპის. 1010 00:44:23,100 --> 00:44:27,490 თქვენ შეგიძლიათ გამოიყენოთ typedef, რათა შეიქმნას ახალი მონაცემთა ტიპები, რომ არ არსებობდა, როდესაც 1011 00:44:27,490 --> 00:44:28,570 C გამოიგონეს. 1012 00:44:28,570 --> 00:44:32,520 მაგალითად, int მოდის C. char გააჩნია C. ორმაგი გააჩნია C. მაგრამ 1013 00:44:32,520 --> 00:44:34,000 არ არსებობს ცნება სტუდენტი. 1014 00:44:34,000 --> 00:44:37,230 და მაინც, ეს იქნება საკმაოდ სასარგებლო იქნება შეუძლია დაწეროს პროგრამა, რომელიც ინახავს 1015 00:44:37,230 --> 00:44:40,440 in ცვლადი, სტუდენტის პირადობის მოწმობის ნომერი, მათი სახელი და მათი სახლში. 1016 00:44:40,440 --> 00:44:42,890 სხვა სიტყვებით, სამი ცალი მონაცემთა, მინდა int და 1017 00:44:42,890 --> 00:44:44,420 სიმებიანი და სხვა სიმებიანი. 1018 00:44:44,420 --> 00:44:48,220 >> ერთად typedef, რაც საკმაოდ ძლიერი ამის შესახებ და სიტყვით sturct for 1019 00:44:48,220 --> 00:44:53,660 სტრუქტურა, თქვენ, programmer 2013 წელს, შეიძლება რეალურად განსაზღვროს საკუთარი 1020 00:44:53,660 --> 00:44:57,530 მონაცემთა ტიპები, რომ არ არსებობდა წლის წინ, მაგრამ, რომ მოერგოს თქვენი მიზნებისათვის. 1021 00:44:57,530 --> 00:45:01,910 ასე რომ, აქ, ხაზების 13 გზით 19, ჩვენ ვაცხადებთ ახალი მონაცემები ტიპის, ისევე როგორც 1022 00:45:01,910 --> 00:45:04,320 int, მაგრამ უწოდა სტუდენტი. 1023 00:45:04,320 --> 00:45:09,310 და შიგნით ამ ცვლადის აპირებს სამი რამ - int, ტექსტი, 1024 00:45:09,310 --> 00:45:09,930 და სიმებიანი. 1025 00:45:09,930 --> 00:45:13,040 ასე, რომ თქვენ შეიძლება ვიფიქროთ, თუ რა მართლაც აქ მოხდა, მიუხედავად იმისა, რომ ეს 1026 00:45:13,040 --> 00:45:17,160 ცოტა გამარტივებას დღეს, სტუდენტი არსებითად აპირებს 1027 00:45:17,160 --> 00:45:19,450 თვალი მოსწონს ეს. 1028 00:45:19,450 --> 00:45:22,580 მისი იქნება ბლოკი მეხსიერება ID, სახელი 1029 00:45:22,580 --> 00:45:25,580 მოედანზე და სახლში სფეროში. 1030 00:45:25,580 --> 00:45:30,670 და ჩვენ შევძლებთ გამოიყენოს იმ მოცულობით მეხსიერება და შეღწევის ასეთია. 1031 00:45:30,670 --> 00:45:38,870 >> თუ მე წასვლას struct0.c, აქ არის შედარებით ხანგრძლივი, მაგრამ შემდეგ 1032 00:45:38,870 --> 00:45:42,630 ნიმუში, კოდექსი, იყენებს ამ ახალი შეასრულა. 1033 00:45:42,630 --> 00:45:45,790 ასე რომ, პირველ რიგში, ნება მომეცით თქვენი ყურადღება გავამახვილო to საინტერესო ნაწილების up დასაწყისში. 1034 00:45:45,790 --> 00:45:49,670 Sharp განსაზღვრავს სტუდენტები 3, აცხადებს მუდმივი მოუწოდა სტუდენტებს და ასიგნებების 1035 00:45:49,670 --> 00:45:53,450 იგი თვითნებურად 3, უბრალოდ ასე რომ მე მაქვს სამი სტუდენტის გამოყენებით 1036 00:45:53,450 --> 00:45:54,830 ამ პროგრამის არის. 1037 00:45:54,830 --> 00:45:55,960 აქ მოდის მთავარი. 1038 00:45:55,960 --> 00:45:58,860 და შეამჩნია, როგორ უნდა განაცხადოს მასივი სტუდენტი? 1039 00:45:58,860 --> 00:46:00,480 მე უბრალოდ გამოიყენოთ იგივე სინტაქსი. 1040 00:46:00,480 --> 00:46:02,110 სიტყვა სტუდენტი აშკარად ახალი. 1041 00:46:02,110 --> 00:46:04,790 მაგრამ სტუდენტი, კლასის, bracket სტუდენტებს. 1042 00:46:04,790 --> 00:46:06,720 >> ასე რომ, სამწუხაროდ, არსებობს უამრავი საქართველოს reuse ვადების აქ. 1043 00:46:06,720 --> 00:46:07,660 ეს არის მხოლოდ ნომერი. 1044 00:46:07,660 --> 00:46:09,040 ასე რომ, ეს არის როგორც ამბობდა სამი. 1045 00:46:09,040 --> 00:46:11,430 კლასი არის მხოლოდ ის, რაც მე მინდა მოვუწოდებთ განსხვავებულია. 1046 00:46:11,430 --> 00:46:12,840 მე ვერ ვუწოდებ სტუდენტებს. 1047 00:46:12,840 --> 00:46:15,880 მაგრამ კლასში, ეს არ კლასი ობიექტის ორიენტირებული ჯავის სახის გზა. 1048 00:46:15,880 --> 00:46:17,220 უბრალოდ კლასი სტუდენტებს. 1049 00:46:17,220 --> 00:46:20,590 და მონაცემთა ტიპის ყველა ელემენტის ამ მასივი სტუდენტი. 1050 00:46:20,590 --> 00:46:23,040 ასე რომ, ეს ცოტა განსხვავებული და ამბობდა რაღაც 1051 00:46:23,040 --> 00:46:25,250 ასე, უბრალოდ - 1052 00:46:25,250 --> 00:46:29,500 მე ამბობდა მომეცი სამი სტუდენტის და მოვუწოდებთ, რომ მასივი კლასის. 1053 00:46:29,500 --> 00:46:29,800 >> ყველა უფლება. 1054 00:46:29,800 --> 00:46:30,680 ახლა აქ ოთხი ციკლი. 1055 00:46:30,680 --> 00:46:33,480 ეს ბიჭი ნახვა ნაცნობი - iterate ნულიდან მდე სამი. 1056 00:46:33,480 --> 00:46:35,160 აი ახალი ნაწილი სინტაქსი. 1057 00:46:35,160 --> 00:46:37,710 პროგრამის აპირებს გამოიწვიოს me, ადამიანური, რათა ეს სტუდენტი 1058 00:46:37,710 --> 00:46:39,200 პირადობის მოწმობა, რომელიც int. 1059 00:46:39,200 --> 00:46:44,650 აი syntax რომლითაც შეგიძლიათ შესანახად რაღაც ID დარგის 1060 00:46:44,650 --> 00:46:48,630 საიდან კლასი bracket I. ასე რომ, ამ syntax ახალი არ არის. 1061 00:46:48,630 --> 00:46:51,450 ეს მხოლოდ იმას ნიშნავს, მომეცი მერვე სტუდენტი კლასში. 1062 00:46:51,450 --> 00:46:52,940 მაგრამ ეს სიმბოლო არის ახალი. 1063 00:46:52,940 --> 00:46:56,320 აქამდე ჩვენ ვერ გამოიყენება dot, მაინც კოდი მოსწონს ეს. 1064 00:46:56,320 --> 00:47:01,490 ეს ნიშნავს წასვლა struct ცნობილია, როგორც სტუდენტი და ამით რაღაც არსებობს. 1065 00:47:01,490 --> 00:47:05,670 ანალოგიურად, ამ მეორე ხაზზე, 31, წავიდეთ წინ და დააყენა, რაც არ უნდა შესახებ ტიპები 1066 00:47:05,670 --> 00:47:10,530 ამისთვის სახელი აქ და რას აკეთებს ამისთვის სახლი, იგივე, წავიდეთ წინ და 1067 00:47:10,530 --> 00:47:13,230 ამას. სახლში. 1068 00:47:13,230 --> 00:47:15,955 >> რას ამ პროგრამის საბოლოოდ გავაკეთოთ? 1069 00:47:15,955 --> 00:47:17,220 თქვენ ხედავთ პატარა teaser არსებობს. 1070 00:47:17,220 --> 00:47:24,780 ნება მომეცით წავიდეთ წინ და არ მიიღოს structs 0 dot ხაზი struct 0, სტუდენტის ID 1, 1071 00:47:24,780 --> 00:47:28,250 ამბობენ, დავით Mather, სტუდენტი ID 2. 1072 00:47:28,250 --> 00:47:32,070 Rob KIRKLAND, სტუდენტი ID 3. 1073 00:47:32,070 --> 00:47:35,010 ლორენ Leverit - 1074 00:47:35,010 --> 00:47:38,380 და ერთადერთი, რაც ამ პროგრამის გააკეთა, რაც არის სრულიად უკანონო, არის 1075 00:47:38,380 --> 00:47:40,980 მინდოდა, რომ რამე ამ მონაცემებით, ახლა რომ მე გვასწავლა, თუ როგორ უნდა 1076 00:47:40,980 --> 00:47:43,450 გამოყენება structs, არის მე მქონდა ამ დამატებითი მარყუჟის აქ. 1077 00:47:43,450 --> 00:47:45,260 მე iterate მეტი მასივი სტუდენტებს. 1078 00:47:45,260 --> 00:47:49,170 მე ჩვენი, ალბათ ახლა ნაცნობი მეგობარი, სიმებიანი შედარება, stircomp to 1079 00:47:49,170 --> 00:47:53,780 ჩეკი არის მე -8 სტუდენტის სახლი ტოლია Mather? 1080 00:47:53,780 --> 00:47:56,760 და თუ, უბრალოდ ბეჭდვა რაღაც თვითნებურად მინდა, დიახ, ის არის. 1081 00:47:56,760 --> 00:47:59,430 თუმცა ისევ და ისევ, მხოლოდ მაძლევს შესაძლებლობები გამოყენება და reuse და 1082 00:47:59,430 --> 00:48:02,270 reuse ამ ახალი dot notation. 1083 00:48:02,270 --> 00:48:03,250 >> ასე რომ, ვინ ზრუნავს, არა? 1084 00:48:03,250 --> 00:48:06,270 მალე ერთად სტუდენტის პროგრამა გარკვეულწილად თვითნებური, მაგრამ აღმოჩნდება, 1085 00:48:06,270 --> 00:48:09,800 რომ ჩვენ შეგვიძლია გავაკეთოთ სასარგებლო რამ ერთად ამ მაგალითად ასეთია. 1086 00:48:09,800 --> 00:48:14,600 ეს არის ბევრად უფრო რთული struct in C. ეს მივიღე ათეული ან მეტი სფეროებში, 1087 00:48:14,600 --> 00:48:15,880 გარკვეულწილად cryptically დაასახელა. 1088 00:48:15,880 --> 00:48:20,110 მაგრამ თუ თქვენ ოდესმე გამიგია გრაფიკა ფორმატში მოუწოდა bitmap, BMP, ეს 1089 00:48:20,110 --> 00:48:22,830 გამოდის, რომ bitmap ფორმატში საკმაოდ ბევრი ჰგავს, რომ ეს. 1090 00:48:22,830 --> 00:48:24,200 ეს სულელური პატარა ღიმილი სახეზე. 1091 00:48:24,200 --> 00:48:27,840 ეს პატარა სურათი, რომელიც მე zoomed წელს მე საკმაოდ დიდი იმისთვის, რომ მე ვერ ვხედავ ყოველ 1092 00:48:27,840 --> 00:48:30,410 ინდივიდუალური წერტილების ან pixels. 1093 00:48:30,410 --> 00:48:33,800 ახლა, თურმე ჩვენ შეგვიძლია წარმოადგენს შავი dot, ვთქვათ, ნომერი 0. 1094 00:48:33,800 --> 00:48:35,520 და თეთრი dot ნომრით 1. 1095 00:48:35,520 --> 00:48:39,140 >> ასე რომ, სხვა სიტყვებით, თუ გსურთ მიაპყროს ღიმილი სახეზე და გადარჩენა, რომ იმიჯი 1096 00:48:39,140 --> 00:48:42,680 კომპიუტერი, ეს suffices შესანახად zeros და პირობა, რომ ასე გამოიყურება, სადაც, 1097 00:48:42,680 --> 00:48:45,250 ერთხელ, პირობა არის თეთრი და zeros არის შავი ფერის. 1098 00:48:45,250 --> 00:48:48,290 და ერთად, თუ ეფექტურად აქვს gird of პირობა და zeros, თქვენ გაქვთ 1099 00:48:48,290 --> 00:48:51,030 ქსელში პიქსელი, და თუ ქმნის მათ, თქვენ გაქვთ cute 1100 00:48:51,030 --> 00:48:52,560 ცოტა ღიმილი სახეზე. 1101 00:48:52,560 --> 00:48:58,150 ახლა, bitmap ფორმატში, BMP, არის ეფექტურად რომ ქვეშ Hood, 1102 00:48:58,150 --> 00:49:00,970 მაგრამ უფრო pixels sot, რომ თქვენ სინამდვილეში წარმოადგენს ფერები. 1103 00:49:00,970 --> 00:49:05,170 >> მაგრამ როდესაც თქვენ უფრო დახვეწილი ფაილი ფორმატში BMP და JPEG და GIF 1104 00:49:05,170 --> 00:49:09,360 რომელთანაც შეიძლება იყოს ნაცნობი, იმ ფაილი დისკზე, როგორც წესი, არა მხოლოდ 1105 00:49:09,360 --> 00:49:13,760 აქვს zeros და პირობა pixels, მაგრამ ისინი რაღაც მეტადატის, ასევე - 1106 00:49:13,760 --> 00:49:16,960 meta იმ გაგებით, რომ არ არის ნამდვილად მონაცემთა მაგრამ ეს სასარგებლოა აქვს. 1107 00:49:16,960 --> 00:49:21,370 ასე რომ, ამ სფეროში აქ გულისხმობს და ჩვენ დავინახავთ ამ დეტალურად P-ნაკრები 1108 00:49:21,370 --> 00:49:25,810 5, რომ მანამ, სანამ zeros და პირობა, რომ წარმოადგენს pixels in იმიჯი, 1109 00:49:25,810 --> 00:49:29,110 არსებობს რამოდენიმე მეტამონაცემების მოსწონს ზომის სურათი და 1110 00:49:29,110 --> 00:49:30,250 სიგანე იმიჯი. 1111 00:49:30,250 --> 00:49:32,910 და შეამჩნია მე plucking off რამდენიმე თვითნებური რამ აქ - 1112 00:49:32,910 --> 00:49:34,260 სიგანე და სიმაღლე. 1113 00:49:34,260 --> 00:49:36,160 Bit რაოდენობა და ზოგიერთი სხვა რამ. 1114 00:49:36,160 --> 00:49:37,840 ასე რომ ზოგიერთი მეტამონაცემების in ფაილი. 1115 00:49:37,840 --> 00:49:41,470 >> მაგრამ გაგება თუ როგორ ფაილი ასახული out ამ გზით, თქვენ შეგიძლიათ რეალურად 1116 00:49:41,470 --> 00:49:45,890 შემდეგ მანიპულირება გამოსახულება, ფეხზე images ეხლა დისკზე, შეცვლის images. 1117 00:49:45,890 --> 00:49:47,560 მაგრამ ვერ აუცილებლად აძლიერებს მათ. 1118 00:49:47,560 --> 00:49:48,480 მე საჭირო ფოტოსურათი. 1119 00:49:48,480 --> 00:49:52,840 ასე რომ, მე დაუბრუნდა RJ აქ, რომელიც თქვენ ნახეთ ეკრანზე საკმაოდ ცოტა ხნის წინ. 1120 00:49:52,840 --> 00:49:57,160 და თუ გახსნა კონფერენციის მონაწილეებს აქ არის, ეს რა მოხდება თუ თქვენ ცდილობენ მასშტაბის გასაზრდელად და 1121 00:49:57,160 --> 00:49:59,380 აძლიერებს RJ. 1122 00:49:59,380 --> 00:50:01,480 ის არ მიღების რაიმე უკეთესი ნამდვილად. 1123 00:50:01,480 --> 00:50:06,240 ახლა კონფერენციის მონაწილეებს ერთგვარი დაბინდვა ეს ცოტა, მხოლოდ სიპრიალის მეტი 1124 00:50:06,240 --> 00:50:11,040 ის ფაქტი, რომ RJ ვერ განსაკუთრებით გაძლიერებული როდესაც თქვენ zoom სისტემაში 1125 00:50:11,040 --> 00:50:13,310 და თუ ამის გაკეთება ამ გზით, ვხედავ მოედნებზე? 1126 00:50:13,310 --> 00:50:15,490 ჰო, შეგიძლიათ ნამდვილად ვხედავ სკვერების on პროექტორს. 1127 00:50:15,490 --> 00:50:17,690 >> ეს არის ის, რაც თქვენ, როდესაც თქვენ გაზარდოს. 1128 00:50:17,690 --> 00:50:22,570 მაგრამ გაგება, თუ როგორ ხდება RJ ან ღიმილი სახეზე ხორციელდება შევძლებთ 1129 00:50:22,570 --> 00:50:24,950 რეალურად დაწეროს კოდი, რომელიც მანიპულირებს ეს ყველაფერი. 1130 00:50:24,950 --> 00:50:29,970 და მეგონა, მე მინდა დასრულდება ეს შენიშვნა, რომელიც 55 წამი აძლიერებს, რომ, 1131 00:50:29,970 --> 00:50:31,230 მე გაბედავდა, ვთქვათ საკმაოდ შეცდომა. 1132 00:50:31,230 --> 00:50:32,990 >> [ვიდეო აღწარმოების] 1133 00:50:32,990 --> 00:50:34,790 >> -ის ცრუობს. 1134 00:50:34,790 --> 00:50:38,310 შესახებ, თუ რა, არ ვიცი. 1135 00:50:38,310 --> 00:50:41,200 >> ისე, რა ვიცით? 1136 00:50:41,200 --> 00:50:45,280 >> -რომ 9:15 Ray Santoya იყო ბანკომატების. 1137 00:50:45,280 --> 00:50:47,830 >> ისე კითხვა, რა იყო ის აკეთებს 9:16? 1138 00:50:47,830 --> 00:50:50,750 >> -სროლა ცხრა მილიმეტრიანი ერთი რაღაც. 1139 00:50:50,750 --> 00:50:52,615 შესაძლოა, მან დაინახა, სნაიპერი. 1140 00:50:52,615 --> 00:50:54,760 >> ან მუშაობდა მასთან ერთად. 1141 00:50:54,760 --> 00:50:56,120 >> -მოითმინეთ. 1142 00:50:56,120 --> 00:50:57,450 დაბრუნება ერთი. 1143 00:50:57,450 --> 00:50:58,700 >> რა ხედავთ? 1144 00:50:58,700 --> 00:51:05,530 1145 00:51:05,530 --> 00:51:09,490 >> -მოტანა მისი სახე up, სრულ ეკრანზე. 1146 00:51:09,490 --> 00:51:09,790 >> -მისი მინები. 1147 00:51:09,790 --> 00:51:11,040 >> -არის ასახვა. 1148 00:51:11,040 --> 00:51:21,790 1149 00:51:21,790 --> 00:51:23,520 >> -ეს Neuvitas ბეისბოლის გუნდი. 1150 00:51:23,520 --> 00:51:24,530 სწორედ მათი ლოგო. 1151 00:51:24,530 --> 00:51:27,040 >> და ის საუბარი, ვინც არ არის ტარება რომ jacket. 1152 00:51:27,040 --> 00:51:27,530 >> [END ვიდეო აღწარმოების] 1153 00:51:27,530 --> 00:51:29,180 >> დევიდ ჯ Malan: ეს იყოს პრობლემა Set 5. 1154 00:51:29,180 --> 00:51:30,720 ჩვენ ვნახავთ თქვენ მომავალ კვირას. 1155 00:51:30,720 --> 00:51:32,330 >> MALE სპიკერი: მომდევნო CS50. 1156 00:51:32,330 --> 00:51:39,240 >> [CRICKETS CHIRPING] 1157 00:51:39,240 --> 00:51:41,270 >> [მუსიკალური სათამაშო]