1 00:00:00,000 --> 00:00:03,381 >> [მუსიკის დაკვრა] 2 00:00:03,381 --> 00:00:10,626 3 00:00:10,626 --> 00:00:11,610 >> [ვიდეო აღწარმოების] 4 00:00:11,610 --> 00:00:13,640 >> დააკავეს ცრუობს. 5 00:00:13,640 --> 00:00:14,380 >> გამოტოვებულია რა? 6 00:00:14,380 --> 00:00:17,182 >> მე არ ვიცი. 7 00:00:17,182 --> 00:00:19,990 >> ისე, რა ვიცით? 8 00:00:19,990 --> 00:00:23,145 >> -რომ 9:15, Ray Santoya იყო ბანკომატი. 9 00:00:23,145 --> 00:00:23,644 -ჰო. 10 00:00:23,644 --> 00:00:27,030 ასე რომ, კითხვა, რა იყო ის აკეთებს 9:16? 11 00:00:27,030 --> 00:00:29,720 >> -სროლა 9 მილიმეტრიანი ერთი რაღაც. 12 00:00:29,720 --> 00:00:31,540 შესაძლოა, მან დაინახა, სნაიპერი. 13 00:00:31,540 --> 00:00:33,412 >> ანუ იყო მასთან მუშაობა. 14 00:00:33,412 --> 00:00:34,340 >> -Wait. 15 00:00:34,340 --> 00:00:36,200 დავბრუნდეთ ერთი. 16 00:00:36,200 --> 00:00:36,975 >> რას ხედავთ? 17 00:00:36,975 --> 00:00:44,400 18 00:00:44,400 --> 00:00:47,805 >> -მოტანა მისი სახე up სრულ ეკრანზე. 19 00:00:47,805 --> 00:00:48,680 >> მოგვწერა სათვალე. 20 00:00:48,680 --> 00:00:50,060 >> -არის ასახვა. 21 00:00:50,060 --> 00:01:00,455 22 00:01:00,455 --> 00:01:02,280 >> -ეს არის Nuevitas ბეისბოლის გუნდი. 23 00:01:02,280 --> 00:01:03,110 სწორედ მათი ლოგო. 24 00:01:03,110 --> 00:01:05,820 >> და ის საუბარი, რომ ვინც ის ტარება რომ ქურთუკი. 25 00:01:05,820 --> 00:01:06,670 >> [END აღწარმოების] 26 00:01:06,670 --> 00:01:07,628 >> DAVID Malan ყველა უფლება. 27 00:01:07,628 --> 00:01:11,210 ეს არის CS50 და ეს არის ცოტა მეტი [INAUDIBLE], რომელიც თქვენ 28 00:01:11,210 --> 00:01:12,890 dabbling ერთად პრობლემა მითითებული ოთხი. 29 00:01:12,890 --> 00:01:16,606 დღეს ჩვენ განვუცხადეთ ცოტა მეტი ღრმად ეს რამ მოუწოდა მითითებას, 30 00:01:16,606 --> 00:01:18,480 რომელიც მიუხედავად იმისა, რომ საკმაოდ arcane თემაზე, 31 00:01:18,480 --> 00:01:20,813 აღმოჩნდება, რომ ის აპირებს უნდა იყოს საშუალება, რომლითაც ჩვენ 32 00:01:20,813 --> 00:01:24,320 შეგიძლიათ შეიქმენით და იკრიბებიან ბევრად უფრო დახვეწილი პროგრამები. 33 00:01:24,320 --> 00:01:28,150 მაგრამ ჩვენ ეს გავაკეთეთ გასულ ოთხშაბათს გზით ზოგიერთი claymation პირველი. 34 00:01:28,150 --> 00:01:30,190 ასე რომ, ეს, გავიხსენოთ, Binky და ჩვენ მას, 35 00:01:30,190 --> 00:01:33,148 უნდა შევხედოთ პროგრამა, რომელიც არ ნამდვილად არაფერი საინტერესო, 36 00:01:33,148 --> 00:01:34,950 მაგრამ ეს არ გამოავლენს რამდენიმე პრობლემა. 37 00:01:34,950 --> 00:01:38,570 ასე იწყება, რატომ არ დავდივართ სწრაფად მეშვეობით რამდენიმე ამ ნაბიჯებს, 38 00:01:38,570 --> 00:01:41,920 ცდილობენ გამოიხადოს ადამიანის პირობები ზუსტად რა ხდება აქ 39 00:01:41,920 --> 00:01:45,410 და რატომ არის ეს ცუდი, და შემდეგ გადაადგილება და რეალურად დაიწყოს მშენებლობის რაღაც 40 00:01:45,410 --> 00:01:46,309 ეს ტექნიკა? 41 00:01:46,309 --> 00:01:48,350 ასე რომ, ეს იყო პირველი ორი ხაზი ამ პროგრამაში 42 00:01:48,350 --> 00:01:51,340 და ერისკაცად წარმოგვიდგება მისი თვალსაზრისით, რა არიან ეს ორი ხაზი აკეთებს? 43 00:01:51,340 --> 00:01:55,600 ადამიანი, რომელიც გონივრულად კომფორტული თუ რა განაცხადა ეკრანზე? 44 00:01:55,600 --> 00:01:58,340 45 00:01:58,340 --> 00:02:00,120 რა არის ეს ორი ხაზი აკეთებს? 46 00:02:00,120 --> 00:02:02,070 ეს არ არის ყველა, რომ განსხვავებული კვირაში ერთი, 47 00:02:02,070 --> 00:02:03,611 მაგრამ არსებობს რამდენიმე ახალი სპეციალური სიმბოლო. 48 00:02:03,611 --> 00:02:04,152 ჰო? 49 00:02:04,152 --> 00:02:05,628 უკან არსებობს. 50 00:02:05,628 --> 00:02:07,092 >> აუდიტორია: გამოცხადების პოინტერები? 51 00:02:07,092 --> 00:02:08,050 დავით Malan: ამბობენ, რომ კიდევ ერთხელ? 52 00:02:08,050 --> 00:02:08,860 აუდიტორია: გამოცხადების პოინტერები? 53 00:02:08,860 --> 00:02:11,776 დავით Malan გამოცხადება მითითებას და მოდით დახვეწა, რომ ცოტა მეტი. 54 00:02:11,776 --> 00:02:14,050 აუდიტორია: [INAUDIBLE] მისამართი x და შემდეგ y. 55 00:02:14,050 --> 00:02:15,300 დავით Malan: მაშინ მიმართონ. 56 00:02:15,300 --> 00:02:18,550 ასე რომ, კონკრეტულად, რას ვაკეთებთ არის ჩვენ ვაცხადებთ ორი ცვლადი. 57 00:02:18,550 --> 00:02:21,252 ეს ცვლადები, თუმცა, ვაპირებთ იყოს ტიპის int ვარსკვლავი, რომელიც 58 00:02:21,252 --> 00:02:23,210 უფრო კონკრეტულად იმას ნიშნავს, ისინი აპირებენ შესანახად 59 00:02:23,210 --> 00:02:26,450 მისამართი int, შესაბამისად, x და y. 60 00:02:26,450 --> 00:02:27,660 ახლა არსებობს რაიმე ღირებულებები? 61 00:02:27,660 --> 00:02:32,621 არსებობს რაიმე ფაქტობრივი მისამართები ამ ორი ცვლადის ამ მომენტში? 62 00:02:32,621 --> 00:02:33,120 No. 63 00:02:33,120 --> 00:02:35,030 უბრალოდ ე.წ. ნაგვის ღირებულებებს. 64 00:02:35,030 --> 00:02:38,120 თუ თქვენ არ რეალურად მივანიჭოთ ცვლადი, რაც არ იყო RAM 65 00:02:38,120 --> 00:02:42,224 ადრე აპირებს შეავსოთ zeros და პირობა ორივე ცვლადი. 66 00:02:42,224 --> 00:02:44,140 მაგრამ ჩვენ ჯერ არ ვიცით, რასაც ისინი და რომ ის, 67 00:02:44,140 --> 00:02:47,060 იქნება გასაღები, თუ რატომ Binky დაკარგა თავის არეში გასულ კვირას. 68 00:02:47,060 --> 00:02:49,980 >> ასე რომ, ეს იყო claymation განსახიერება ამ 69 00:02:49,980 --> 00:02:53,580 რომლის დროსაც თქვენ გაქვთ მხოლოდ ორი ცვლადის, პატარა მრგვალი ცალი თიხის, 70 00:02:53,580 --> 00:02:57,330 რომ შეგიძლიათ შეინახოთ ცვლადები, მაგრამ, როგორც შეფუთული up ისრებით ვარაუდობენ, 71 00:02:57,330 --> 00:03:00,640 ისინი რეალურად არ მიუთითებს ყველგან ცნობილია, თავისთავად. 72 00:03:00,640 --> 00:03:03,670 ასე რომ, ჩვენ გვქონდა ამ ხაზი, და ეს ახალი იყო გასულ კვირას, malloc მეხსიერება 73 00:03:03,670 --> 00:03:07,130 გამოყოფა, რომელიც უბრალოდ ლამაზი გზა ვეუბნებოდი ოპერაციული სისტემა, Linux 74 00:03:07,130 --> 00:03:09,750 ან Mac OS და Windows, hey, მომეცი მეხსიერება, 75 00:03:09,750 --> 00:03:11,780 და ყველა თქვენ უნდა ვუთხრა ოპერაციული სისტემა 76 00:03:11,780 --> 00:03:14,699 არის ის, რაც, როდესაც სვამს ის მეხსიერებაში. 77 00:03:14,699 --> 00:03:16,990 ეს არ აპირებს მაინტერესებს, რა თქვენ აპირებს შუაშია, 78 00:03:16,990 --> 00:03:19,786 მაგრამ თქვენ უნდა ვუთხრა ოპერაციული სისტემა, რა გზით malloc. 79 00:03:19,786 --> 00:03:20,286 ჰო? 80 00:03:20,286 --> 00:03:21,078 >> აუდიტორია: რამდენი? 81 00:03:21,078 --> 00:03:21,994 დავით Malan: რამდენი? 82 00:03:21,994 --> 00:03:25,280 რამდენი ბაიტი, და ასე რომ, ეს, კიდევ ერთხელ, contrived მაგალითია, უბრალოდ ვამბობ, 83 00:03:25,280 --> 00:03:27,360 მომეცი ზომის int. 84 00:03:27,360 --> 00:03:30,550 ახლა, ზომის int არის ოთხი ბაიტი ან 32 ბიტი. 85 00:03:30,550 --> 00:03:32,850 ასე რომ, ეს უბრალოდ გზა ამბობდა, hey, ოპერაციული სისტემა, 86 00:03:32,850 --> 00:03:37,290 მომეცი ოთხი ბაიტი მეხსიერება რომ შემიძლია ჩემს განკარგულებაშია, 87 00:03:37,290 --> 00:03:40,560 და კონკრეტულად, რა malloc დაბრუნებას მიმართ 88 00:03:40,560 --> 00:03:41,795 რომ ბლოკი ოთხი ბაიტი? 89 00:03:41,795 --> 00:03:44,110 90 00:03:44,110 --> 00:03:44,860 აუდიტორია: მისამართი? 91 00:03:44,860 --> 00:03:45,901 დავით Malan: მისამართი. 92 00:03:45,901 --> 00:03:47,580 მისამართი, რომ ბლოკი ოთხი ბაიტი. 93 00:03:47,580 --> 00:03:48,190 ზუსტად. 94 00:03:48,190 --> 00:03:51,430 და ისე, რომ ის, რაც ინახება საბოლოო x და სწორედ ამიტომ, ჩვენ ნამდვილად არ 95 00:03:51,430 --> 00:03:55,240 მაინტერესებს, რა რაოდენობის, რომ მისამართი, თუ არა ის ox1 ან ox2 96 00:03:55,240 --> 00:03:57,110 ან რაღაც cryptic თექვსმეტობითი მისამართზე. 97 00:03:57,110 --> 00:03:59,850 ჩვენ, უბრალოდ, მაინტერესებს, ხატოვნად , რომ ცვლადი x არის 98 00:03:59,850 --> 00:04:01,630 მიუთითებს, რომ ბლოკი მეხსიერება. 99 00:04:01,630 --> 00:04:05,570 ასე ისარი წარმოადგენს მაჩვენებელი, ან უფრო კონკრეტულად, მეხსიერების მისამართზე. 100 00:04:05,570 --> 00:04:09,120 მაგრამ ერთხელ, ჩვენ არ, როგორც წესი, მაინტერესებს რა იმ ფაქტობრივი მისამართები. 101 00:04:09,120 --> 00:04:11,780 ახლა, ამ ხაზის ამბობს რა layman პირობები? 102 00:04:11,780 --> 00:04:14,330 Star x იღებს 42 მძიმით. 103 00:04:14,330 --> 00:04:17,390 რას ნიშნავს ეს? 104 00:04:17,390 --> 00:04:18,200 თქვენ გინდათ წასვლა? 105 00:04:18,200 --> 00:04:20,102 არ ნულიდან თქვენი კისრის. 106 00:04:20,102 --> 00:04:22,360 >> აუდიტორია: მისამართი x არის 42. 107 00:04:22,360 --> 00:04:24,300 >> დავით Malan: მისამართი x არის 42. 108 00:04:24,300 --> 00:04:25,190 მთლად ასე არა. 109 00:04:25,190 --> 00:04:28,485 ასე ახლოს, მაგრამ არა საკმაოდ, იმიტომ, რომ იქ ვარსკვლავი, რომელიც prefixing x. 110 00:04:28,485 --> 00:04:29,860 ასე რომ, ჩვენ უნდა tweak ცოტა. 111 00:04:29,860 --> 00:04:31,032 ჰო? 112 00:04:31,032 --> 00:04:36,044 >> აუდიტორია: ღირებულება, რომელიც მაჩვენებელი x მიუთითებს, რომ 42 წლისაა. 113 00:04:36,044 --> 00:04:36,710 დავით Malan: OK. 114 00:04:36,710 --> 00:04:40,840 ღირებულება რომ მომცეთ x არის მიუთითებს, ვთქვათ, უნდა იყოს 42, 115 00:04:40,840 --> 00:04:44,165 ან დააყენა სხვა გზა, ვარსკვლავი x ამბობს, გადადით რასაც მისამართი 116 00:04:44,165 --> 00:04:48,340 არის x, თუ არა ის 1 Oxford Street ან 33 Oxford Street 117 00:04:48,340 --> 00:04:51,850 ან ox1 ან ox33, რაც რომ რიცხვითი მისამართი, 118 00:04:51,850 --> 00:04:54,380 ვარსკვლავი x არის Dereferencing x. 119 00:04:54,380 --> 00:04:57,297 ასე რომ მისამართი და შემდეგ დააყენა ნომერი 42 არსებობს. 120 00:04:57,297 --> 00:04:59,380 ასე რომ, ეს იქნება ექვივალენტი გზას ვამბობ, რომ. 121 00:04:59,380 --> 00:05:01,860 ასე რომ, ყველა ჯარიმა და შემდეგ ჩვენ გვინდა წარმოადგენს სურათი 122 00:05:01,860 --> 00:05:05,370 ასეთია, სადაც ჩვენ დასძინა 42 რომ ბლოკი ოთხი 123 00:05:05,370 --> 00:05:09,370 bytes მარჯვენა მხარეს, მაგრამ ეს ხაზი, სადაც ყველაფერი წავიდა awry 124 00:05:09,370 --> 00:05:11,120 და Binky ხელმძღვანელი გამოჩნდა off ამ ეტაპზე, 125 00:05:11,120 --> 00:05:15,290 რადგან ცუდი რამ ხდება, როდესაც თქვენ dereference ნაგვის ღირებულებები 126 00:05:15,290 --> 00:05:18,210 ან თქვენ dereference ბათილად პოინტერები, და მე ვიტყვი, არასწორი 127 00:05:18,210 --> 00:05:21,020 იმიტომ, რომ ამ ეტაპზე ამბავი, რა არის შიგნით y? 128 00:05:21,020 --> 00:05:24,440 რა არის ღირებულება y დაფუძნებული წარსულში რამდენიმე ნაბიჯი? 129 00:05:24,440 --> 00:05:25,360 ჰო? 130 00:05:25,360 --> 00:05:26,115 რა არის ეს? 131 00:05:26,115 --> 00:05:26,990 >> აუდიტორია: მისამართი. 132 00:05:26,990 --> 00:05:28,460 დავით Malan: მისამართი. 133 00:05:28,460 --> 00:05:31,910 ეს უნდა იყოს მისამართი მაგრამ მე ინიციალიზაცია? 134 00:05:31,910 --> 00:05:32,800 ასე რომ, მე არ გაუკეთებია. 135 00:05:32,800 --> 00:05:35,430 ასე რომ, რა არის ცნობილი, რომ იქ? 136 00:05:35,430 --> 00:05:37,590 ეს არის რამოდენიმე ნაგვის ღირებულება. 137 00:05:37,590 --> 00:05:41,500 ეს შეიძლება იყოს ნებისმიერ მისამართზე ნულიდან 2 მილიარდი თუ თქვენ გაქვთ ორი gigs of RAM, 138 00:05:41,500 --> 00:05:44,289 ან ნულოვანი 4 მილიარდი, თუ თქვენ ოთხი გბ ოპერატიული მეხსიერება. 139 00:05:44,289 --> 00:05:46,080 ეს არის ზოგიერთი ნაგვის ღირებულება, მაგრამ პრობლემა ის არის, 140 00:05:46,080 --> 00:05:48,200 რომ ოპერაციული სისტემა, თუ ეს არ მიეცა თქვენ 141 00:05:48,200 --> 00:05:51,140 რომ ბლოკი მეხსიერება კონკრეტულად რომ თქვენ ცდილობთ წასვლა, 142 00:05:51,140 --> 00:05:54,650 ეს ზოგადად აპირებს გამოიწვიოს, რასაც ჩვენ ვნახეთ, როგორც სეგმენტაცია ბრალია. 143 00:05:54,650 --> 00:05:57,810 ასე რომ, ფაქტობრივად, ნებისმიერი, ვინც არ იბრძვის პრობლემები ოფისში საათი 144 00:05:57,810 --> 00:06:00,393 ან პრობლემა, რომელიც უფრო ზოგადად ცდილობენ გაერკვნენ 145 00:06:00,393 --> 00:06:02,150 სეგმენტაცია ბრალია, რომ ზოგადად ნიშნავს, 146 00:06:02,150 --> 00:06:05,017 თქვენ ეხება სეგმენტი მეხსიერება, რომ თქვენ არ უნდა იყოს. 147 00:06:05,017 --> 00:06:07,350 თქვენ ეხება მეხსიერება რომ ოპერაციული სისტემა არ აქვს 148 00:06:07,350 --> 00:06:10,450 საშუალებას გაძლევთ შეეხოთ, თუ არა ის ძალიან შორს წავიდნენ თქვენს მასივი 149 00:06:10,450 --> 00:06:12,870 ან დაწყებული ახლა, თუ არა ეს იმიტომ, რომ თქვენ ეხება 150 00:06:12,870 --> 00:06:14,780 მეხსიერების რომ მხოლოდ ზოგიერთი ნაგვის ღირებულება. 151 00:06:14,780 --> 00:06:18,230 >> ამით ვარსკვლავი x აქ სახის გაურკვეველი ქცევა. 152 00:06:18,230 --> 00:06:22,030 არასოდეს არ უნდა გააკეთოს, რადგან შანსები არიან, პროგრამა უბრალოდ აპირებს ავარიული, 153 00:06:22,030 --> 00:06:24,050 იმიტომ, რომ თქვენ და განაცხადა, გადადით ამ მისამართზე 154 00:06:24,050 --> 00:06:27,000 და თქვენ არ ვიცი სად რომ მისამართზე რეალურად არის. 155 00:06:27,000 --> 00:06:30,300 ასე რომ, ოპერაციული სისტემა, სავარაუდოდ, აპირებს Crash თქვენი პროგრამის 156 00:06:30,300 --> 00:06:33,840 შედეგად და მართლაც, რომ თუ რა მოხდა იქ Binky. 157 00:06:33,840 --> 00:06:37,210 ასე რომ, საბოლოო ჯამში, Binky დაფიქსირდა ეს პრობლემა. 158 00:06:37,210 --> 00:06:38,909 ასე რომ, თავად პროგრამის გაყალბდა. 159 00:06:38,909 --> 00:06:41,450 მაგრამ თუ სახის გაყალბებას წინ და შეასრულოს ამ ხაზის ნაცვლად, 160 00:06:41,450 --> 00:06:45,580 Y ტოლია x მხოლოდ იმას ნიშნავს, რასაც მისამართი x, ასევე, რომ ეს y. 161 00:06:45,580 --> 00:06:48,740 >> და ასე ხატოვნად, ჩვენ სწორედ ამ ორი ისრებით 162 00:06:48,740 --> 00:06:51,570 საწყისი x და y მიუთითებს ერთი და იგივე ადგილზე. 163 00:06:51,570 --> 00:06:55,760 ასე რომ, სემანტიკურად, x უდრის წ, რადგან ორივე 164 00:06:55,760 --> 00:07:00,300 შენახვის იგივე მისამართი, ergo მიუთითებს 42, 165 00:07:00,300 --> 00:07:04,910 და ახლა, როდესაც ამბობენ, რომ ვარსკვლავი y, გადადით მისამართზე წ, 166 00:07:04,910 --> 00:07:06,790 ეს საინტერესო გვერდითი ეფექტი. 167 00:07:06,790 --> 00:07:10,320 ასე რომ, მისამართი y არის იგივე, რაც მისამართი x. 168 00:07:10,320 --> 00:07:15,060 ასე რომ, თუ ვიტყვი, რომ წავიდეს მისამართი ამ y და შეცვლის ღირებულება 13, 169 00:07:15,060 --> 00:07:17,140 ვინ არის დაზარალებული? 170 00:07:17,140 --> 00:07:21,100 X არის, წერტილი D, ასე ვთქვათ, უნდა შეეხო ასევე. 171 00:07:21,100 --> 00:07:24,340 >> და მართლაც, როგორ Nick მიიპყრო ამ სურათს ამ claymation სწორედ ეს იყო. 172 00:07:24,340 --> 00:07:28,665 მიუხედავად იმისა, რომ დაიცვას მაჩვენებელი y, ჩვენ დასრულდა იმავე ადგილას, 173 00:07:28,665 --> 00:07:32,780 და ასე რომ, თუ ჩვენ უნდა ბეჭდვა გარეთ x და y ის pointee, 174 00:07:32,780 --> 00:07:35,720 მაშინ ჩვენ ვხედავთ ღირებულება 13. 175 00:07:35,720 --> 00:07:37,927 ახლა, მე ვიტყვი, pointee იყოს შეესაბამება ვიდეო. 176 00:07:37,927 --> 00:07:39,760 პროგრამისტები, ჩემი ცოდნა, არასოდეს რეალურად 177 00:07:39,760 --> 00:07:42,460 ამბობენ, რომ სიტყვა pointee, რომ რაც აღნიშნა 178 00:07:42,460 --> 00:07:44,650 დროს, მაგრამ თანმიმდევრულობა ვიდეო, გააცნობიეროს, 179 00:07:44,650 --> 00:07:47,520 ეს ყველაფერი, რომ იყო იგულისხმება, რომ სიტუაცია. 180 00:07:47,520 --> 00:07:54,190 ასე რომ, რაიმე შეკითხვები claymation ან მითითებას ან malloc უბრალოდ არ არის? 181 00:07:54,190 --> 00:07:54,850 არ არის? 182 00:07:54,850 --> 00:07:55,470 ყველა უფლება. 183 00:07:55,470 --> 00:07:58,560 >> ასე რომ, გარეშე ado, მოდით შევხედოთ 184 00:07:58,560 --> 00:08:00,700 , სადაც ეს ფაქტიურად გამოიყენება გარკვეული დროის განმავლობაში. 185 00:08:00,700 --> 00:08:03,580 ასე რომ, ჩვენ გვქონდა ამ CS50 ბიბლიოთეკა რომ მივიღე ყველა ამ ფუნქციას. 186 00:08:03,580 --> 00:08:06,810 ჩვენ გამოიყენება GetInt ბევრი, GetString, ალბათ GetLongLong ადრე 187 00:08:06,810 --> 00:08:09,840 ჩემი PSet ერთი ან ასე, მაგრამ რაც რეალურად უკვე მიმდინარეობს? 188 00:08:09,840 --> 00:08:12,920 ისე, მოდით მიიღოს სწრაფი შევხედოთ ქვეშ Hood პროგრამა, რომელიც 189 00:08:12,920 --> 00:08:17,017 შთააგონებს, რის გამოც ჩვენ გაძლევთ CS50 ბიბლიოთეკა, და მართლაც, როგორც გასულ კვირას, 190 00:08:17,017 --> 00:08:18,850 ჩვენ დავიწყე იმ სასწავლო თვლები off. 191 00:08:18,850 --> 00:08:21,080 ასე რომ, ეს არის გადანაწილებული ერთი სიკვდილის რა 192 00:08:21,080 --> 00:08:23,690 უკვე მიმდინარეობს შიგნით CS50 ბიბლიოთეკა, 193 00:08:23,690 --> 00:08:27,250 მიუხედავად იმისა, რომ ჩვენ ახლა დაიწყება მოძრავი დაშორებული, საუკეთესო პროგრამები. 194 00:08:27,250 --> 00:08:29,460 >> ასე რომ, ეს არის პროგრამის მოუწოდა scanf 0. 195 00:08:29,460 --> 00:08:30,510 ეს სუპერ მოკლე. 196 00:08:30,510 --> 00:08:33,909 უბრალოდ აქვს ამ მიმართულებით, მაგრამ ეს წარუდგენს ფუნქცია მოუწოდა scanf 197 00:08:33,909 --> 00:08:36,909 რომ ჩვენ რეალურად აპირებს ვხედავ მომენტი შიგნით CS50 ბიბლიოთეკა, 198 00:08:36,909 --> 00:08:38,600 თუმცა ოდნავ განსხვავებული ფორმით. 199 00:08:38,600 --> 00:08:41,330 ასე რომ ამ პროგრამის on line 16 არის გამოცხადების ცვლადი x. 200 00:08:41,330 --> 00:08:43,150 მომეცი ოთხი ბაიტი int. 201 00:08:43,150 --> 00:08:45,750 ეს უკვე ვეუბნებოდი შესახებ, ნომერი გთხოვთ, ხოლო შემდეგ 202 00:08:45,750 --> 00:08:49,010 ეს არის საინტერესო ხაზი, რომელიც რეალურად კავშირები ერთად გასულ კვირას 203 00:08:49,010 --> 00:08:49,790 და ეს. 204 00:08:49,790 --> 00:08:53,230 Scanf და შემდეგ შეამჩნევთ სჭირდება სტრიქონში, ისევე printf, 205 00:08:53,230 --> 00:08:57,480 % i ნიშნავს int, და მაშინ იგი იღებს მეორე არგუმენტი, რომელიც გამოიყურება ცოტა 206 00:08:57,480 --> 00:08:58,260 ხმაურიანი. 207 00:08:58,260 --> 00:09:01,880 ეს ampersand x, და გავიხსენოთ, ჩვენ მხოლოდ ის დავინახე, რომ ეს კიდევ ერთხელ გასულ კვირას. 208 00:09:01,880 --> 00:09:03,465 რას ampersand x წარმოადგენს? 209 00:09:03,465 --> 00:09:06,210 210 00:09:06,210 --> 00:09:08,450 რას ampersand გავაკეთოთ C? 211 00:09:08,450 --> 00:09:08,950 ჰო? 212 00:09:08,950 --> 00:09:10,024 >> აუდიტორია: მისამართი. 213 00:09:10,024 --> 00:09:11,190 დავით Malan: მისამართი. 214 00:09:11,190 --> 00:09:13,190 ასე რომ, პირიქით საქართველოს ვარსკვლავი ოპერატორი, 215 00:09:13,190 --> 00:09:17,270 იმის გამო, რომ ვარსკვლავი ოპერატორი ამბობს, გადადით ამ მისამართზე, ampersand ოპერატორი 216 00:09:17,270 --> 00:09:20,280 ამბობს, გაერკვნენ მისამართი ეს ცვლადი, 217 00:09:20,280 --> 00:09:23,530 და ეს ძალიან მნიშვნელოვანია, რადგან scanf მიზანი ცხოვრებაში 218 00:09:23,530 --> 00:09:26,320 არის სკანირებას მომხმარებლის შეიტანენ კლავიატურაზე, 219 00:09:26,320 --> 00:09:29,970 დამოკიდებულია რასაც იგი სახის, და მაშინ წავიკითხე, რომ მომხმარებლის შეყვანის 220 00:09:29,970 --> 00:09:32,970 შევიდა ცვლადი, მაგრამ ჩვენ დაინახა, რომ ბოლო ორი კვირის განმავლობაში 221 00:09:32,970 --> 00:09:36,080 , რომ swap ფუნქცია, რომ ჩვენ ცდილობდა ძალისხმევის განხორციელება 222 00:09:36,080 --> 00:09:37,110 მხოლოდ გატეხილი. 223 00:09:37,110 --> 00:09:42,470 შეგახსენებთ, რომ swap ფუნქციის, თუ ჩვენ უბრალოდ გამოაცხადა A და B ints, 224 00:09:42,470 --> 00:09:47,040 ჩვენ წარმატებით სვოპ ორი ცვლადის შიგნით swap 225 00:09:47,040 --> 00:09:50,080 უბრალოდ მინდა რძე და OJ, მაგრამ, როგორც კი swap დაბრუნდა, 226 00:09:50,080 --> 00:09:55,200 რა იყო შედეგი მიმართ რომ x და y, ორიგინალური ღირებულებებს? 227 00:09:55,200 --> 00:09:55,700 არაფერი. 228 00:09:55,700 --> 00:09:56,200 ჰო. 229 00:09:56,200 --> 00:09:59,754 არაფერი არ მომხდარა, რომ დრო, რადგან სვოპების შეცვლა მხოლოდ მისი ადგილობრივი ასლები, 230 00:09:59,754 --> 00:10:01,670 რაც უნდა ვთქვა, ყველა ამ დროს, როდესაც ჩვენ 231 00:10:01,670 --> 00:10:04,010 უკვე გადადის არგუმენტები ფუნქციები, ჩვენ 232 00:10:04,010 --> 00:10:05,939 მხოლოდ გავლით ასლები იმ არგუმენტებს. 233 00:10:05,939 --> 00:10:07,980 ამის გაკეთება შეგიძლიათ, რომ რაც გაგიხარდებათ, მათ შორის, 234 00:10:07,980 --> 00:10:10,890 მაგრამ ისინი აპირებენ, არ აქვთ ეფექტი ორიგინალური ღირებულებებს. 235 00:10:10,890 --> 00:10:13,650 ასე რომ, ეს პრობლემატურია, თუ გვინდა, რომ აქვს ფუნქცია, როგორიცაა scanf 236 00:10:13,650 --> 00:10:17,170 ცხოვრებაში, რომლის მიზანია სკანირების მომხმარებლის შეიტანენ კლავიატურა 237 00:10:17,170 --> 00:10:22,010 და შემდეგ შეავსოთ ბლანკები, ასე საუბარი, რომ არის, მისცეს ცვლადი, როგორიც x 238 00:10:22,010 --> 00:10:25,410 მნიშვნელობა, იმიტომ, რომ, თუ მე უბრალოდ გაივლის x to scanf, 239 00:10:25,410 --> 00:10:28,790 თუ გავითვალისწინებთ, ლოგიკა ბოლო კვირას, scanf შეუძლია გააკეთოს რაც არ სურს 240 00:10:28,790 --> 00:10:33,100 ასლი x, მაგრამ ეს ვერ მუდმივად შეცვალოს x, თუ ვაძლევთ 241 00:10:33,100 --> 00:10:37,120 scanf საგანძური რუკა, ასე ვთქვათ, სადაც x აღნიშნავს ადგილზე, რომლის დროსაც 242 00:10:37,120 --> 00:10:41,860 ჩვენ კორიდორი მისამართი x ისე, რომ scanf შეიძლება იქ და რეალურად ცვლილება 243 00:10:41,860 --> 00:10:42,920 ღირებულება x. 244 00:10:42,920 --> 00:10:45,080 ასე რომ, რა თქმა უნდა, ყველა რომ ეს პროგრამა აკეთებს 245 00:10:45,080 --> 00:10:53,180 თუ მე scanf 0, ჩემი წყარო 5m დირექტორია, რომ scanf 0, 246 00:10:53,180 --> 00:10:57,730 dot slash scanf, ნომერი გთხოვთ, 50, მადლობა 50. 247 00:10:57,730 --> 00:11:01,020 >> ასე რომ, ეს არ არის ყველა, რომ საინტერესო, მაგრამ რა მართლაც ხდება 248 00:11:01,020 --> 00:11:04,820 ის არის, რომ, როგორც კი მოვუწოდებ scanf აქ, ღირებულება x 249 00:11:04,820 --> 00:11:06,410 მიმდინარეობს მუდმივად იცვლება. 250 00:11:06,410 --> 00:11:08,335 ახლა, ეს, როგორც ჩანს, ლამაზი და კარგი, და, ფაქტობრივად, ეს 251 00:11:08,335 --> 00:11:11,200 როგორც ჩანს, ჩვენ ნამდვილად არ გვჭირდება CS50 ბიბლიოთეკა ყველა აღარაა. 252 00:11:11,200 --> 00:11:13,960 მაგალითად, მოდით აწარმოებს ეს კიდევ ერთხელ აქ. 253 00:11:13,960 --> 00:11:15,750 ნება მომეცით, რისთვისაც მას მეორე. 254 00:11:15,750 --> 00:11:20,600 შევეცადოთ ნომერი, გთხოვთ, და ნაცვლად ამბობდა 50 როგორც ადრე, 255 00:11:20,600 --> 00:11:22,810 მოდით უბრალოდ, ვამბობთ არ არის. 256 00:11:22,810 --> 00:11:24,000 OK, ეს ცოტა უცნაური. 257 00:11:24,000 --> 00:11:25,270 OK. 258 00:11:25,270 --> 00:11:28,680 და მხოლოდ რაღაც სისულელე აქ. 259 00:11:28,680 --> 00:11:31,170 ასე რომ, ეს არ ჩანს, გაუმკლავდეს მცდარი სიტუაციებში. 260 00:11:31,170 --> 00:11:33,620 ამიტომ, ჩვენ უნდა მინიმალურად დაწყება დამატებით რამდენიმე შეცდომის შემოწმება 261 00:11:33,620 --> 00:11:37,460 დარწმუნდით, რომ მომხმარებელს აქვს აკრეფილი ფაქტობრივი რაოდენობის, როგორიცაა 50, 262 00:11:37,460 --> 00:11:40,720 იმიტომ, რომ, როგორც ჩანს, აკრეფით სიტყვა არ არის აღმოჩენილი, როგორც პრობლემური, 263 00:11:40,720 --> 00:11:42,020 მაგრამ ეს, ალბათ უნდა იყოს. 264 00:11:42,020 --> 00:11:46,450 >> მოდით შევხედოთ ეს ვერსია არის, რომ ჩემი მცდელობა reimplement GetString. 265 00:11:46,450 --> 00:11:48,437 თუ scanf ყველა ამ ფუნქციონირება აშენდა, 266 00:11:48,437 --> 00:11:51,270 რატომ ჩვენ უკვე dabbling ამ სასწავლო დისკები GetString? 267 00:11:51,270 --> 00:11:55,450 ისე, აქ, ალბათ, ჩემი საკუთარი მარტივი ვერსია GetString 268 00:11:55,450 --> 00:12:00,766 რომლის დროსაც ერთი კვირის წინ, მე შეიძლება არ განაცხადა, მომეცი სიმებიანი და მას ბუფერში. 269 00:12:00,766 --> 00:12:03,390 დღეს, მე ვაპირებ, რომ დაიწყოს მხოლოდ ამბობდა char ვარსკვლავი, რომელიც, გავიხსენოთ, 270 00:12:03,390 --> 00:12:04,400 ეს უბრალოდ სინონიმი. 271 00:12:04,400 --> 00:12:06,629 როგორც ჩანს, scarier, მაგრამ ეს ზუსტად იგივე რამ. 272 00:12:06,629 --> 00:12:09,420 ასე რომ მომეცი ცვლადში ბუფერული რომ აპირებს შესანახად სიმებიანი, 273 00:12:09,420 --> 00:12:12,780 ვუთხრა შესახებ სიმებიანი გთხოვთ, და შემდეგ, ისევე, როგორც ადრე, 274 00:12:12,780 --> 00:12:17,760 მოდით ცდილობენ სესხება ეს გაკვეთილი scanf % s ამ დროს და შემდეგ გაივლის ბუფერული. 275 00:12:17,760 --> 00:12:19,310 ახლა, სწრაფი საღი აზრის ქვითარი. 276 00:12:19,310 --> 00:12:22,120 რატომ ვარ მე არ ვამბობ, ampersand ბუფერული ამ დროს? 277 00:12:22,120 --> 00:12:25,190 278 00:12:25,190 --> 00:12:26,625 დასკვნის წინა მაგალითი. 279 00:12:26,625 --> 00:12:28,000 აუდიტორია: Char ვარსკვლავი არის მაჩვენებელი. 280 00:12:28,000 --> 00:12:29,920 დავით Malan: ზუსტად, იმის გამო, რომ ამ დროს, char 281 00:12:29,920 --> 00:12:34,080 ვარსკვლავი უკვე მაჩვენებელი, მისამართი, ზოგადად, რომ ვარსკვლავი იქ ყოფნა. 282 00:12:34,080 --> 00:12:37,530 და თუ scanf ელოდება მისამართი, საკმარისია, უბრალოდ უნდა გაიაროს ბუფერული. 283 00:12:37,530 --> 00:12:39,260 მე არ უნდა ვთქვა, ampersand ბუფერული. 284 00:12:39,260 --> 00:12:42,177 იყიდება ცნობისმოყვარე, თქვენ შეიძლება რაღაც მოსწონს ეს. 285 00:12:42,177 --> 00:12:43,510 ეს იქნებოდა სხვადასხვა მნიშვნელობა აქვს. 286 00:12:43,510 --> 00:12:47,240 ეს გაძლევთ მაჩვენებელი მაჩვენებელი, რომელიც, ფაქტობრივად, 287 00:12:47,240 --> 00:12:50,050 მოქმედებს, რაც C, არამედ ახლა, მოდით შეინახოს იგი მარტივი 288 00:12:50,050 --> 00:12:51,750 და შენარჩუნება ამბავი თანმიმდევრული. 289 00:12:51,750 --> 00:12:54,100 მე უბრალოდ აპირებს გაიაროს ბუფერული და ეს სწორია. 290 00:12:54,100 --> 00:12:56,487 პრობლემა იმისა ამ. 291 00:12:56,487 --> 00:12:58,820 ნება მომეცით წავიდეთ წინ და აწარმოებს ამ პროგრამა შემდეგ შედგენა მას. 292 00:12:58,820 --> 00:13:00,902 ჩადება scanf 1. 293 00:13:00,902 --> 00:13:02,610 Damn, ჩემი შემდგენელი ის არეალიდან ჩემი შეცდომა. 294 00:13:02,610 --> 00:13:04,090 მომეცი ერთი მეორე. 295 00:13:04,090 --> 00:13:05,460 Clang. 296 00:13:05,460 --> 00:13:06,990 მოდით ვთქვათ scanf-1.გ. 297 00:13:06,990 --> 00:13:10,880 298 00:13:10,880 --> 00:13:11,380 OK. 299 00:13:11,380 --> 00:13:12,720 იქ ჩვენ წავიდეთ. 300 00:13:12,720 --> 00:13:14,280 მე სჭირდება. 301 00:13:14,280 --> 00:13:16,750 CS50 ID სხვადასხვა კონფიგურაციის პარამეტრები 302 00:13:16,750 --> 00:13:18,280 რომ დაიცავს თქვენ წინააღმდეგ თავს. 303 00:13:18,280 --> 00:13:21,300 მე საჭირო გამორთოთ ის მიერ გაშვებული clang ხელით ამ დროს. 304 00:13:21,300 --> 00:13:22,140 ასე რომ, სიმებიანი გთხოვთ. 305 00:13:22,140 --> 00:13:25,560 მე ვაპირებ წავიდეთ წინ და ტიპის ჩემი საყვარელი hello მსოფლიოში. 306 00:13:25,560 --> 00:13:26,490 OK, null. 307 00:13:26,490 --> 00:13:27,700 ეს არ არის ის, რაც მე აკრეფილი. 308 00:13:27,700 --> 00:13:29,690 ასე რომ, ეს მიუთითებს რაღაც რომ არასწორია. 309 00:13:29,690 --> 00:13:33,920 ნება მომეცით წავიდეთ წინ და ტიპის მართლაც ხანგრძლივი string. 310 00:13:33,920 --> 00:13:37,210 მადლობა null და მე არ ვიცი, თუ მე ვაპირებ შეძლებს ავარიის იგი. 311 00:13:37,210 --> 00:13:40,240 შევეცადოთ ცოტა ასლი პასტა და თუ ეს ეხმარება. 312 00:13:40,240 --> 00:13:43,290 უბრალოდ ჩასვით ბევრი ამ. 313 00:13:43,290 --> 00:13:47,310 ეს ნამდვილად დიდი სიმებიანი, ვიდრე ჩვეულებრივი. 314 00:13:47,310 --> 00:13:51,450 მოდით, უბრალოდ ნამდვილად დაწერა. 315 00:13:51,450 --> 00:13:51,950 No. 316 00:13:51,950 --> 00:13:52,650 რა იგი. 317 00:13:52,650 --> 00:13:53,480 ბრძანება არ არის ნაპოვნი. 318 00:13:53,480 --> 00:13:54,550 ასე რომ, არ უკავშირდება. 319 00:13:54,550 --> 00:13:56,440 ეს იმიტომ, რომ მე გაკრული ცუდი პერსონაჟი, 320 00:13:56,440 --> 00:13:59,780 მაგრამ ეს თურმე არ იმუშავებს. 321 00:13:59,780 --> 00:14:03,510 >> შევეცადოთ ეს კიდევ ერთხელ, იმიტომ, რომ ეს სიამოვნება, თუ ჩვენ რეალურად ავარიის იგი. 322 00:14:03,510 --> 00:14:09,116 მოდით აკრიფოთ ამ და ახლა, მე ვარ ვაპირებ კოპირება მართლაც ხანგრძლივი string 323 00:14:09,116 --> 00:14:10,990 და ახლა ვნახოთ, თუ ჩვენ ავარიული ამ რამ. 324 00:14:10,990 --> 00:14:14,235 ყურადღება მიაქციეთ, მე გამოტოვებული ფართები და ახალი ხაზები და semicolons 325 00:14:14,235 --> 00:14:16,035 და ყველა ხმაურიანი სიმბოლო. 326 00:14:16,035 --> 00:14:16,535 შეიტანეთ. 327 00:14:16,535 --> 00:14:21,090 328 00:14:21,090 --> 00:14:22,880 ახლა ქსელში უბრალოდ მიმდინარეობს ნელა. 329 00:14:22,880 --> 00:14:27,460 გავმართე ქვემოთ Command-V ძალიან დიდი ხანია, ნათლად. 330 00:14:27,460 --> 00:14:28,190 Damn it! 331 00:14:28,190 --> 00:14:29,260 ბრძანება არ არის ნაპოვნი. 332 00:14:29,260 --> 00:14:29,780 >> OK. 333 00:14:29,780 --> 00:14:32,240 ისე, საქმე ისაა, მიუხედავად ამისა, შემდეგი. 334 00:14:32,240 --> 00:14:36,910 ასე რომ, რა არის რეალურად აპირებს წლის ამ დეკლარაციას 335 00:14:36,910 --> 00:14:39,240 საქართველოს char ვარსკვლავი ბუფერული on line 16? 336 00:14:39,240 --> 00:14:41,820 ასე რომ, რა ვარ მე მისაღებად როდესაც მე განაცხადოს მაჩვენებელი? 337 00:14:41,820 --> 00:14:47,440 ყველა მე მიღების არის ოთხი ბაიტი მნიშვნელობა ბუფერული, მაგრამ რა არის შიგნით 338 00:14:47,440 --> 00:14:49,540 ამ მომენტში? 339 00:14:49,540 --> 00:14:50,930 ეს არის რამოდენიმე ნაგვის ღირებულება. 340 00:14:50,930 --> 00:14:54,170 იმის გამო, რომ ნებისმიერ დროს განაცხადოს ცვლადი დო, უბრალოდ ზოგიერთი ნაგვის ღირებულება, 341 00:14:54,170 --> 00:14:56,220 და ჩვენ ვიწყებთ მოგზაურობა მეტი ეს რეალობა. 342 00:14:56,220 --> 00:14:59,720 ახლა, როდესაც მე გეტყვით scanf, გადადით ამ მისამართზე 343 00:14:59,720 --> 00:15:01,520 და ამით რასაც მომხმარებლის ტიპის. 344 00:15:01,520 --> 00:15:06,400 იმ შემთხვევაში, თუ მომხმარებლის ტიპის მიესალმები მსოფლიოში, ისევე, სადაც მე ამას? 345 00:15:06,400 --> 00:15:07,750 ბუფერული არის ნაგვის ღირებულება. 346 00:15:07,750 --> 00:15:11,510 >> ასე რომ, სახის მოსწონს arrow რომელიც მიუთითებს, ვინ იცის, სად. 347 00:15:11,510 --> 00:15:13,880 იქნებ ეს მიუთითებს სწორედ აქ ჩემს მეხსიერებაში. 348 00:15:13,880 --> 00:15:16,560 ასე რომ, როდესაც მომხმარებელი სახეები hello მსოფლიოში, 349 00:15:16,560 --> 00:15:22,380 პროგრამა ცდილობს დააყენა სიმებიანი hello მსოფლიოში წარმატებული 0 350 00:15:22,380 --> 00:15:23,910 რომ ბლოკი მეხსიერება. 351 00:15:23,910 --> 00:15:27,070 მაგრამ დიდი ალბათობით, მაგრამ აშკარად არ 100% ალბათობით, 352 00:15:27,070 --> 00:15:30,440 კომპიუტერული აპირებს შემდეგ ავარიის პროგრამა, რადგან ეს არ არის 353 00:15:30,440 --> 00:15:32,490 მეხსიერების მე უნდა დაშვებული შეეხოთ. 354 00:15:32,490 --> 00:15:36,330 მოკლედ, ამ პროგრამის გაყალბდა ზუსტად რომ მიზეზი. 355 00:15:36,330 --> 00:15:38,070 მე ფუნდამენტურად არ აკეთებს რა? 356 00:15:38,070 --> 00:15:42,366 რა ნაბიჯები უნდა მე გამოტოვებული, ისევე, როგორც ჩვენ გამოტოვებული ერთად Binky პირველი მაგალითად? 357 00:15:42,366 --> 00:15:42,866 ჰო? 358 00:15:42,866 --> 00:15:43,710 >> აუდიტორია: მეხსიერების გამოყოფის? 359 00:15:43,710 --> 00:15:45,001 >> დავით Malan: მეხსიერების გამოყოფა. 360 00:15:45,001 --> 00:15:48,400 მე არ რეალურად გამოყოფილი ნებისმიერი მეხსიერების რომ სიმებიანი. 361 00:15:48,400 --> 00:15:50,270 ასე რომ, ჩვენ შეგვიძლია დაფიქსირება ამ რამდენიმე გზები. 362 00:15:50,270 --> 00:15:52,700 ერთ-ერთი, ჩვენ შეგვიძლია შევინარჩუნოთ ის მარტივი და რეალურად, ახლა თქვენ 363 00:15:52,700 --> 00:15:55,116 აპირებს დაიწყოს ვხედავ დაბინდვა ხაზები შორის რა 364 00:15:55,116 --> 00:15:58,520 მასივი, რა სიმებიანი, რა char ვარსკვლავი, რა მასივი სიმბოლო 365 00:15:58,520 --> 00:15:59,020 არის. 366 00:15:59,020 --> 00:16:02,450 აი მეორე მაგალითი ჩართვის და სიმები ცნობა 367 00:16:02,450 --> 00:16:05,690 ყველა მე ვაკეთებ ხაზი 16, ნაცვლად გამოთქმისა 368 00:16:05,690 --> 00:16:09,530 რომ ბუფერული იქნება char ვარსკვლავი, მომცეთ ბლოკი მეხსიერება, 369 00:16:09,530 --> 00:16:14,057 მე ვაპირებ ძალიან აქტიურად მისცეს თავს ბუფერული 16 პერსონაჟი, 370 00:16:14,057 --> 00:16:16,390 და სინამდვილეში, თუ თქვენ იცნობს ერთად ტერმინი buffering, 371 00:16:16,390 --> 00:16:20,570 ალბათ მსოფლიოში ვიდეო, სადაც ვიდეო შეფერხებებით, ბუფერულ, 372 00:16:20,570 --> 00:16:21,175 ბუფერული. 373 00:16:21,175 --> 00:16:22,550 ისე, რა კავშირი აქ? 374 00:16:22,550 --> 00:16:24,960 ისე, შიგნით YouTube და შიგნით ვიდეო მოთამაშე 375 00:16:24,960 --> 00:16:27,200 ზოგადად მასივი რომ უფრო დიდია, ვიდრე 16. 376 00:16:27,200 --> 00:16:30,340 ეს შეიძლება იყოს მასივი ზომა მეგაბაიტი, შესაძლოა, 10 მბ, 377 00:16:30,340 --> 00:16:34,330 და შევიდა, რომ მასივი აკეთებს თქვენი ბრაუზერის ჩამოტვირთვა მთელი bunch of bytes, 378 00:16:34,330 --> 00:16:37,500 მთელი bunch მბ ვიდეო და video player, 379 00:16:37,500 --> 00:16:40,930 YouTube- ის და ვინც არის, იწყება კითხულობს bytes რომ მასივი, 380 00:16:40,930 --> 00:16:43,530 და ნებისმიერ დროს ხედავთ სიტყვა buffering, ბუფერულ, 381 00:16:43,530 --> 00:16:46,350 ეს ნიშნავს, რომ მოთამაშეს აქვს მიღებული ბოლომდე რომ მასივი. 382 00:16:46,350 --> 00:16:50,430 ქსელი იმდენად ნელი რომ მას არ შევსება მასივი უფრო bytes 383 00:16:50,430 --> 00:16:55,610 და ასე რომ თქვენ გარეთ ბიტი არაა შესახებ. 384 00:16:55,610 --> 00:16:59,430 >> ასე რომ ბუფერული არის apt ტერმინი აქ, რომ ეს მხოლოდ მასივი, ბლოკი მეხსიერება. 385 00:16:59,430 --> 00:17:02,530 და ეს იქნება გაასწორონ ის იმიტომ, რომ თურმე 386 00:17:02,530 --> 00:17:07,410 რომ თქვენ შეიძლება მკურნალობა მასივები, თითქოს ისინი მისამართები, მიუხედავად იმისა, რომ ბუფერული 387 00:17:07,410 --> 00:17:10,710 უბრალოდ სიმბოლო, ეს არის თანმიმდევრობა გმირები, ბუფერული, 388 00:17:10,710 --> 00:17:14,760 რომ არის სასარგებლო ჩემთვის, პროგრამისტი, შეგიძლიათ გაიაროს მისი სახელი მთელს 389 00:17:14,760 --> 00:17:17,079 თითქოს ეს იყო მაჩვენებელი, თითქოს ეს 390 00:17:17,079 --> 00:17:21,000 იყვნენ მისამართი ბლოკი მეხსიერების 16 სიმბოლო. 391 00:17:21,000 --> 00:17:24,530 ასე რომ, უნდა ვთქვა, მე ვერ გაივლის scanf სწორედ ეს სიტყვა 392 00:17:24,530 --> 00:17:30,670 და ახლა, თუ მე ამ პროგრამას, რომ scanf 2, dot ხაზი scanf 2, 393 00:17:30,670 --> 00:17:35,386 და აკრიფოთ მიესალმები მსოფლიოში, შეიყვანეთ, რომელიც time-- 394 00:17:35,386 --> 00:17:37,590 >> Hmm, რა მოხდა? 395 00:17:37,590 --> 00:17:39,340 სიმებიანი გთხოვთ. 396 00:17:39,340 --> 00:17:41,430 რა დავაშავე? 397 00:17:41,430 --> 00:17:43,800 Hello world, ბუფერული. 398 00:17:43,800 --> 00:17:44,705 Hello world. 399 00:17:44,705 --> 00:17:48,201 400 00:17:48,201 --> 00:17:49,420 Ah, მე ვიცი, რასაც ის აკეთებს. 401 00:17:49,420 --> 00:17:49,920 OK. 402 00:17:49,920 --> 00:17:51,628 ასე რომ, ის კითხულობს მდე სანამ პირველი სივრცეში. 403 00:17:51,628 --> 00:17:55,680 მოდით მოტყუებას მხოლოდ ერთი წუთით და ამბობენ, მე უბრალოდ მინდოდა აკრიფოთ რაღაც 404 00:17:55,680 --> 00:18:01,408 მართლაც დიდი, როგორც ეს არის დიდი სასჯელი ერთი, ორი, სამი, ოთხი, ხუთი, 405 00:18:01,408 --> 00:18:04,420 ექვსი, შვიდი, რვა, ცხრა, 10, 11, 12, 13, 14, 15, 16. 406 00:18:04,420 --> 00:18:05,300 OK. 407 00:18:05,300 --> 00:18:07,600 ეს მართლაც დიდი ხნის სასჯელი. 408 00:18:07,600 --> 00:18:10,710 ასე რომ, ეს წინადადება არის უმეტეს 16 სიმბოლოს 409 00:18:10,710 --> 00:18:13,670 და ასე რომ, როდესაც მე დააჭიროთ რა მოხდება? 410 00:18:13,670 --> 00:18:16,940 ისე, ამ შემთხვევაში, ამბავი, მე გამოაცხადა ბუფერული 411 00:18:16,940 --> 00:18:22,190 რეალურად მიმდინარეობს მასივი 16 სიმბოლო მზად ვართ წავიდეთ. 412 00:18:22,190 --> 00:18:27,426 ასე რომ, ერთი, ორი, სამი, ოთხი, ხუთი, ექვსი, შვიდი, რვა, ცხრა, 10, 11, 12, 13, 14, 413 00:18:27,426 --> 00:18:29,440 15, 16. 414 00:18:29,440 --> 00:18:34,410 ასე რომ, 16 სიმბოლო, და ახლა, როდესაც მე წაიკითხონ რაღაც ეს არის დიდი ხნის 415 00:18:34,410 --> 00:18:43,950 წინადადება, რა მოხდება არის რომ მე ვაპირებ, რომ წაიკითხონ ეს ხანგრძლივი 416 00:18:43,950 --> 00:18:49,660 S-E-N-T-E-N-C-E, სასჯელი. 417 00:18:49,660 --> 00:18:52,270 >> ასე რომ, ეს არის მიზანმიმართულად ცუდი რამ, რომ მე 418 00:18:52,270 --> 00:18:55,060 შენარჩუნება წერილობით მიღმა საზღვრების ჩემი მასივი, 419 00:18:55,060 --> 00:18:56,660 საზღვრებს გარეთ ჩემი ბუფერული. 420 00:18:56,660 --> 00:19:00,100 მე ვერ გაუმართლა და პროგრამა გავაგრძელებთ გაშვებული და არ მაინტერესებს, 421 00:19:00,100 --> 00:19:03,450 მაგრამ ზოგადად, ამ მართლაც ავარიული ჩემი პროგრამა, 422 00:19:03,450 --> 00:19:06,440 და ეს არის bug ჩემი კოდექსის მომენტში მე ნაბიჯ 423 00:19:06,440 --> 00:19:08,576 საზღვრებს გარეთ რომ მასივი, იმიტომ, რომ მე 424 00:19:08,576 --> 00:19:10,450 არ ვიცი, თუ ის აუცილებლად აპირებს ავარიული 425 00:19:10,450 --> 00:19:12,120 ან თუ მე უბრალოდ აპირებს გაუმართლა. 426 00:19:12,120 --> 00:19:15,750 ასე რომ, ეს არის პრობლემატური, რადგან ამ შემთხვევაში, ეს არ ჩანს მუშაობა 427 00:19:15,750 --> 00:19:20,931 და მოდით ეცადა ბედი აქ, მიუხედავად იმისა, და IDE, როგორც ჩანს, შეეგუება საკმაოდ მწირი 428 00:19:20,931 --> 00:19:21,430 of-- 429 00:19:21,430 --> 00:19:22,040 >> იქ ჩვენ წავიდეთ. 430 00:19:22,040 --> 00:19:23,240 და ბოლოს. 431 00:19:23,240 --> 00:19:26,470 ასე რომ, მე მხოლოდ ერთი, რომ ხედავთ ამ. 432 00:19:26,470 --> 00:19:29,630 ასე რომ, მე მქონდა ბევრი fun აკრეფა out მართლაც დიდი ფაქტობრივი ფრაზა 433 00:19:29,630 --> 00:19:32,800 რომ ის ნამდვილად გადააჭარბა 16 ბაიტი, იმიტომ, რომ მე 434 00:19:32,800 --> 00:19:38,050 აკრეფილი ეს გიჟები ხანგრძლივი მრავალ ხაზის ფრაზა, და შემდეგ შეამჩნია, რა მოხდა. 435 00:19:38,050 --> 00:19:41,110 პროგრამა ცდილობდა ბეჭდვა და მაშინ მივიღე სეგმენტაცია ბრალია 436 00:19:41,110 --> 00:19:44,430 და სეგმენტაცია ხარვეზებით არის, როდესაც მსგავსი რამ ხდება 437 00:19:44,430 --> 00:19:47,650 და ოპერაციული სისტემის ამბობს არა, არ შეიძლება შეეხოთ, რომ მეხსიერებაში. 438 00:19:47,650 --> 00:19:49,570 ჩვენ ვაპირებთ, რომ კლავს პროგრამა საერთოდ. 439 00:19:49,570 --> 00:19:51,180 >> ასე რომ, ეს, როგორც ჩანს, პრობლემატურია. 440 00:19:51,180 --> 00:19:54,540 მე გაუმჯობესდა პროგრამა, რომლის მიხედვით მინიმუმ, მეხსიერება, 441 00:19:54,540 --> 00:19:58,000 მაგრამ ეს, როგორც ჩანს, შეუზღუდოს ფუნქციის GetString მიღების 442 00:19:58,000 --> 00:20:00,780 strings ზოგიერთი სასრულ სიგრძე 16. 443 00:20:00,780 --> 00:20:04,200 ასე რომ, თუ გსურთ მხარდაჭერა აღარ სასჯელს ვიდრე 16 პერსონაჟი, 444 00:20:04,200 --> 00:20:04,880 რა ვქნათ? 445 00:20:04,880 --> 00:20:07,970 ასევე, შეგიძლიათ გაზრდის ზომა ბუფერული 32 446 00:20:07,970 --> 00:20:09,190 ან, რომ, როგორც ჩანს, სახის მოკლე. 447 00:20:09,190 --> 00:20:12,260 რატომ არ გვაქვს მხოლოდ ის 1000 მაგრამ დააყენებს უკან. 448 00:20:12,260 --> 00:20:17,100 რა არის პასუხი ინტუიციურად of უბრალოდ თავიდან ეს პრობლემა მიღების 449 00:20:17,100 --> 00:20:20,660 ჩემი ბუფერული დიდია, 1000 სიმბოლო? 450 00:20:20,660 --> 00:20:23,470 განხორციელებით GetString ამ გზით. 451 00:20:23,470 --> 00:20:27,130 რა არის კარგი ან ცუდი აქ? 452 00:20:27,130 --> 00:20:28,033 ჰო? 453 00:20:28,033 --> 00:20:30,574 აუდიტორია: თუ სავალდებულოა ბევრი სივრცე და არ გამოიყენოს იგი, 454 00:20:30,574 --> 00:20:33,500 მაშინ არ გამოდის, რომ სივრცეში. 455 00:20:33,500 --> 00:20:34,500 დავით Malan: აბსოლუტურად. 456 00:20:34,500 --> 00:20:38,480 ეს არარაციონალური იმდენად, რამდენადაც, თუ თქვენ არ რეალურად უნდა 900 იმ bytes 457 00:20:38,480 --> 00:20:41,057 და კიდევ თქვენ ითხოვს 1,000 სულ მაინც, 458 00:20:41,057 --> 00:20:44,140 თქვენ მხოლოდ მოიხმარს უფრო მეხსიერება მომხმარებლის კომპიუტერში, ვიდრე თქვენ უნდა, 459 00:20:44,140 --> 00:20:45,740 და მას შემდეგ, რაც ყველა, ზოგიერთი თქვენ უკვე შეექმნა 460 00:20:45,740 --> 00:20:47,620 ცხოვრებაში, რომ, როდესაც თქვენ გაშვებული უამრავი პროგრამების 461 00:20:47,620 --> 00:20:50,470 და ისინი ჭამს უამრავი მეხსიერება, ეს შეიძლება რეალურად ზემოქმედება შესრულება 462 00:20:50,470 --> 00:20:52,220 და მომხმარებლის გამოცდილება კომპიუტერზე. 463 00:20:52,220 --> 00:20:56,090 ასე რომ, ერთგვარი ზარმაცი გადაწყვეტა, დარწმუნებული ვარ, და პირიქით, 464 00:20:56,090 --> 00:21:00,140 ეს არ არის მხოლოდ მფლანგველი, რა პრობლემა კვლავ რჩება, მაშინაც კი, თუ მე ჩემი ბუფერული 465 00:21:00,140 --> 00:21:02,100 1000? 466 00:21:02,100 --> 00:21:02,600 ჰო? 467 00:21:02,600 --> 00:21:04,475 >> აუდიტორია: სიმებიანი სიგრძე 1,001. 468 00:21:04,475 --> 00:21:05,350 დავით Malan: ზუსტად. 469 00:21:05,350 --> 00:21:08,280 თუ თქვენი სიმებიანი სიგრძე 1,001, თქვენ გაქვთ ზუსტად იგივე პრობლემა, 470 00:21:08,280 --> 00:21:10,705 და ჩემი არგუმენტი, მე მხოლოდ მაშინ, რომ მას 2000 წელს, 471 00:21:10,705 --> 00:21:12,830 მაგრამ თქვენ არ იცით წინასწარ, თუ რამდენად დიდი უნდა იყოს, 472 00:21:12,830 --> 00:21:16,890 და კიდევ, მე უნდა კომპილაციის ჩემი პროგრამა ადრე გაქირავების ადამიანი გამოიყენებს და ჩამოტვირთვა 473 00:21:16,890 --> 00:21:17,390 მას. 474 00:21:17,390 --> 00:21:21,490 ასე რომ, ეს არის ზუსტად სახის პერსონალის რომ CS50 ბიბლიოთეკა ლელო 475 00:21:21,490 --> 00:21:24,750 დაგვეხმაროს და ჩვენ მხოლოდ ერთი შეხედვით ზოგიერთი ძირითადი განხორციელებას 476 00:21:24,750 --> 00:21:29,790 აქ, მაგრამ ეს არის CS50 dot C. ეს არის ფაილი, რომელიც უკვე CS50 IDE 477 00:21:29,790 --> 00:21:31,420 ყველა ამ კვირის რომ თქვენ უკვე გამოყენებით. 478 00:21:31,420 --> 00:21:34,280 ეს წინასწარ შედგენილი და თქვენ იყენებს მას ავტომატურად 479 00:21:34,280 --> 00:21:38,780 ბუნების მქონე dash ლ CS50 დროშა clang, 480 00:21:38,780 --> 00:21:42,300 მაგრამ თუ მე გადახვევა ქვემოთ მთელი ეს ფუნქციები, აქ GetString, 481 00:21:42,300 --> 00:21:44,636 და მხოლოდ გადმოგცეთ გემოს რა ხდება, 482 00:21:44,636 --> 00:21:46,760 ავიღოთ სწრაფი შევხედოთ ნათესავი სირთულის. 483 00:21:46,760 --> 00:21:48,870 ეს არ არის სუპერ გრძელი ფუნქცია, მაგრამ ჩვენ არ 484 00:21:48,870 --> 00:21:52,530 უნდა ვიფიქროთ, რომ ყველა მძიმე შესახებ როგორ უნდა წავიდეს მიღებაზე სიმები. 485 00:21:52,530 --> 00:21:55,660 >> ასე რომ, აქ არის ჩემი ბუფერული და მე როგორც ჩანს, ვრთავ, რომ null. 486 00:21:55,660 --> 00:21:57,990 ეს, რა თქმა უნდა, არის იგივე, როგორც char ვარსკვლავი, 487 00:21:57,990 --> 00:22:00,585 მაგრამ მე გადავწყვიტე, ამ ახორციელებს CS50 ბიბლიოთეკა 488 00:22:00,585 --> 00:22:02,460 იმ შემთხვევაში, თუ ჩვენ ვაპირებთ იყოს სრულიად დინამიური, 489 00:22:02,460 --> 00:22:05,770 მე არ ვიცი, წინასწარ როგორ დიდი სიმებიანი წევრებს არ ვაპირებთ გსურთ მიიღოთ. 490 00:22:05,770 --> 00:22:08,140 ამიტომ, მე ვაპირებ, რომ დაიწყოს მხოლოდ ცარიელ ველს 491 00:22:08,140 --> 00:22:11,507 და მე ვაპირებ დაამყარონ იმდენი მეხსიერებაში, მე უნდა მოერგოს შესახებ string 492 00:22:11,507 --> 00:22:13,340 და თუ მე არ მაქვს საკმარისი, მე ვაპირებ ვკითხო 493 00:22:13,340 --> 00:22:15,010 ოპერაციული სისტემის უფრო მეხსიერების. 494 00:22:15,010 --> 00:22:17,510 მე ვაპირებ გადაადგილება მათი string შევიდა დიდი ბლოკი მეხსიერება 495 00:22:17,510 --> 00:22:21,847 და მე ვაპირებ გათავისუფლების ან გასათავისუფლებლად საკმარისად დიდი ბლოკი მეხსიერება 496 00:22:21,847 --> 00:22:23,680 და ჩვენ უბრალოდ აპირებს უნდა გავაკეთოთ ეს iteratively. 497 00:22:23,680 --> 00:22:25,570 >> ასე სწრაფად, ერთი შეხედვით, აქ მხოლოდ ცვლადი 498 00:22:25,570 --> 00:22:28,780 რომელიც მე ვაპირებ შენარჩუნება სიმღერა სიმძლავრის ჩემი ბუფერული. 499 00:22:28,780 --> 00:22:30,071 რამდენი ბაიტი შემიძლია ჯდება? 500 00:22:30,071 --> 00:22:32,070 აი ცვლადი n ერთად რომელიც მე ვაპირებ შენარჩუნება 501 00:22:32,070 --> 00:22:36,200 სიმღერა რამდენი ბაიტი რეალურად ბუფერული და რომ მომხმარებელს აქვს აკრეფილი. 502 00:22:36,200 --> 00:22:39,900 თუ თქვენ არ მინახავს ეს ადრე, თქვენ შეგიძლიათ მიუთითოთ, რომ ცვლადი როგორც int 503 00:22:39,900 --> 00:22:46,370 არის ხელმოუწერელი, რომელიც, როგორც სახელი ვარაუდობს, იმას ნიშნავს, რომ არასამთავრობო უარყოფითი, და რატომ 504 00:22:46,370 --> 00:22:50,590 მე ოდესმე მინდა შეწუხება მითითებით რომ int არ არის მხოლოდ int, 505 00:22:50,590 --> 00:22:52,540 მაგრამ ეს ხელმოუწერელი int? 506 00:22:52,540 --> 00:22:55,064 ეს არის არასამთავრობო უარყოფითი int. 507 00:22:55,064 --> 00:22:56,355 რას [INAUDIBLE] ნიშნავს? 508 00:22:56,355 --> 00:22:58,910 >> აუდიტორია: ეს აღწერილია თანხა მეხსიერება, რომელიც შეიძლება იყოს [INAUDIBLE]. 509 00:22:58,910 --> 00:22:59,660 >> დავით Malan: ჰო. 510 00:22:59,660 --> 00:23:03,710 ასე რომ, თუ მე ვიტყვი, ხელმოუწერელი, ეს არის რეალურად გაწვდით ერთი ცოტა დამატებითი მეხსიერება 511 00:23:03,710 --> 00:23:07,440 და როგორც ჩანს, სახის სულელური, მაგრამ თუ აქვს ერთი ცოტა დამატებითი მეხსიერება, რომელიც 512 00:23:07,440 --> 00:23:09,940 იმას ნიშნავს, თქვენ ორჯერ მეტი ღირებულებები შეგიძლიათ წარმოადგენს, 513 00:23:09,940 --> 00:23:11,570 იმიტომ, რომ ეს შეიძლება იყოს 0 ან 1. 514 00:23:11,570 --> 00:23:14,660 ასე რომ იყოს, int შეიძლება უხეშად უარყოფითი 2 მილიარდი ყველა გზა 515 00:23:14,660 --> 00:23:16,030 მდე დადებითი 2 მლრდ. 516 00:23:16,030 --> 00:23:18,540 ეს არის დიდი მერყეობს, მაგრამ ეს ჯერ კიდევ სახის არარაციონალური 517 00:23:18,540 --> 00:23:21,280 თუ თქვენ მხოლოდ აინტერესებს ზომის, რომელიც მხოლოდ ინტუიციურად 518 00:23:21,280 --> 00:23:24,620 უნდა იყოს არასამთავრობო უარყოფითი ან დადებითი ან 0, ასევე მაშინ, 519 00:23:24,620 --> 00:23:28,884 რატომ გაყვანაა 2 მილიარდი შესაძლებელია ღირებულებების უარყოფითი ნომრები 520 00:23:28,884 --> 00:23:30,300 თუ თქვენ არასდროს მათი გამოყენება? 521 00:23:30,300 --> 00:23:35,350 ასე განაცხადა ხელმოუწერელი, ახლა ჩემი int შეუძლია იყოს 0 და დაახლოებით 4 მილიარდი. 522 00:23:35,350 --> 00:23:39,280 >> ასე რომ, აქ მხოლოდ int C მიზეზების გამო ჩვენ არ მოხვდება მხოლოდ ახლა, როგორც 523 00:23:39,280 --> 00:23:42,280 თუ რატომ ეს int ნაცვლად char, მაგრამ აქ არის 524 00:23:42,280 --> 00:23:44,630 არსი რა ხდება , და ზოგიერთ თქვენგანს 525 00:23:44,630 --> 00:23:48,340 შეიძლება გამოყენებით, მაგალითად, fgetc ფუნქცია კი PSet ოთხ 526 00:23:48,340 --> 00:23:51,580 ან შემდგომში, ჩვენ დავინახავთ, ეს ერთხელ პრობლემა მითითებული ხუთ, 527 00:23:51,580 --> 00:23:55,410 fgetc არის კარგი, რადგან, როგორც სახელი სახის, სახის arcanely ვარაუდობს, 528 00:23:55,410 --> 00:23:57,940 ეს არის ფუნქცია, რომელიც იღებს ხასიათი და ასე შემდეგ, 529 00:23:57,940 --> 00:24:00,690 რა არის ფუნდამენტურად განსხვავებული ის, რაც ჩვენ ვაკეთებთ GetString 530 00:24:00,690 --> 00:24:03,110 არის ჩვენ არ იყენებს scanf იგივე გზით. 531 00:24:03,110 --> 00:24:07,550 ჩვენ, უბრალოდ, მცოცავი გასწვრივ ნაბიჯ ნაბიჯ მეტი, რასაც მომხმარებელს ჯერ აკრეფილი, 532 00:24:07,550 --> 00:24:10,970 იმიტომ, რომ ჩვენ ყოველთვის გამოყოფს ერთ char, და ამიტომ ჩვენ ყოველთვის უსაფრთხოდ 533 00:24:10,970 --> 00:24:15,599 შევხედოთ ერთი char დროს, და ჯადოსნური იწყება მოხდება აქ. 534 00:24:15,599 --> 00:24:17,890 მე ვაპირებ, გადაფურცლეთ ქვემოთ შუა ამ ფუნქციის 535 00:24:17,890 --> 00:24:20,360 უბრალოდ დანერგვა მოკლედ ამ ფუნქციას. 536 00:24:20,360 --> 00:24:22,670 ისევე, როგორც არ არის malloc ფუნქცია, არსებობს 537 00:24:22,670 --> 00:24:27,740 realloc ფუნქცია, სადაც realloc გაძლევთ გადაანაწილოს ბლოკი მეხსიერება 538 00:24:27,740 --> 00:24:29,570 და რათა ის უფრო დიდი ან პატარა. 539 00:24:29,570 --> 00:24:33,060 ცოტა ხნის ამბავი მოკლედ და ტალღის ჩემი ხელი, დღეს, 540 00:24:33,060 --> 00:24:35,620 ვიცი, რომ რა GetString აკეთებს ეს ერთგვარი 541 00:24:35,620 --> 00:24:39,720 საქართველოს magically იზრდება და მცირდება ბუფერული როგორც შესახებ 542 00:24:39,720 --> 00:24:41,440 სახის მისი სიმებიანი. 543 00:24:41,440 --> 00:24:43,962 >> ასე რომ, თუ მომხმარებლის ტიპის მოკლე ტექსტი, ეს კოდი 544 00:24:43,962 --> 00:24:45,920 მხოლოდ გამოყოფს საკმარისი მეხსიერება, რათა შეწყობოდა სიმებიანი. 545 00:24:45,920 --> 00:24:48,086 იმ შემთხვევაში, თუ შესახებ ინარჩუნებს აკრეფა როგორც მე ეს ისევ და ისევ 546 00:24:48,086 --> 00:24:50,330 და კიდევ ერთხელ, ასევე, თუ ბუფერული ის თავდაპირველად ამ დიდი 547 00:24:50,330 --> 00:24:53,310 და პროგრამა აცნობიერებს, რომ დაველოდოთ წუთში, მე გარეთ სივრცეში, 548 00:24:53,310 --> 00:24:55,410 ის აპირებს გაორმაგდება ზომა ბუფერული 549 00:24:55,410 --> 00:24:59,110 და შემდეგ ორჯერ ზომა ბუფერული და კოდი, რომელიც აკეთებს გაორმაგება, 550 00:24:59,110 --> 00:25:03,170 თუ დავაკვირდებით აქ, მხოლოდ ამ ჭკვიანი ერთი ლაინერი. 551 00:25:03,170 --> 00:25:06,830 თქვენ შეიძლება არ მინახავს ეს სინტაქსი ადრე, მაგრამ თუ ამბობენ, რომ ვარსკვლავი უდრის, 552 00:25:06,830 --> 00:25:10,470 ეს არის იგივე მნიშვნელობა, როგორც განაცხადა, მოცულობა 2-ჯერ. 553 00:25:10,470 --> 00:25:13,390 ასე რომ, ეს მხოლოდ ინარჩუნებს გაორმაგდა ტევადობის ბუფერული 554 00:25:13,390 --> 00:25:17,480 და შემდეგ ეუბნება realloc მისცეს თავად რომ ბევრად უფრო მეხსიერება. 555 00:25:17,480 --> 00:25:19,720 >> ახლა, როგორც განზე, არსებობს სხვა ფუნქციები აქ 556 00:25:19,720 --> 00:25:23,680 რომ ჩვენ არ შესასწავლად ნებისმიერი დეტალი გარდა ნახოთ GetInt, 557 00:25:23,680 --> 00:25:26,150 ჩვენ ვიყენებთ GetString წელს GetInt. 558 00:25:26,150 --> 00:25:28,192 ჩვენ შეამოწმოს, რომ ეს არ არის null, რომელიც, გავიხსენოთ, 559 00:25:28,192 --> 00:25:30,400 განსაკუთრებული მნიშვნელობა, რომელიც ნიშნავს რაღაც წავიდა არასწორია. 560 00:25:30,400 --> 00:25:31,233 ჩვენ მეხსიერება ღალატობს. 561 00:25:31,233 --> 00:25:32,310 უკეთესი შეამოწმოს, რომ. 562 00:25:32,310 --> 00:25:33,710 და ჩვენ დაუბრუნოს Sentinel ღირებულება. 563 00:25:33,710 --> 00:25:37,850 მაგრამ მე დაელოდება კომენტარები, როგორც რატომ და მაშინ ჩვენ გამოვიყენებთ ამ ბიძაშვილი scanf 564 00:25:37,850 --> 00:25:42,100 მოუწოდა sscanf და თურმე sscanf, ან სიმებიანი scanf, 565 00:25:42,100 --> 00:25:45,310 გაძლევთ შევხედოთ ხაზი, რომელიც მომხმარებელს აქვს აკრეფილი და მოგცემთ 566 00:25:45,310 --> 00:25:49,610 ანალიზი ეს არსებითად და რა ვარ აკეთებს აქ მე ვეუბნებოდი sscanf, 567 00:25:49,610 --> 00:25:54,440 ანალიზი, რასაც მომხმარებელს აქვს აკრეფილი და დარწმუნდით% i, 568 00:25:54,440 --> 00:25:59,250 არ არის მთელი რიცხვი, და ჩვენ არ შეღწევას დღეს, სწორედ ამიტომ არსებობს ასევე 569 00:25:59,250 --> 00:26:03,760 % გ აქ, მაგრამ მოკლედ საშუალებას ჩვენს აღმოაჩინოს თუ მომხმარებელს აქვს აკრეფილი 570 00:26:03,760 --> 00:26:06,050 რაღაც ყალბი შემდეგ ნომერზე. 571 00:26:06,050 --> 00:26:11,766 ასე რომ, იმ მიზეზით, რომ GetInt და GetString გითხრათ, გაიმეორეთ, გაიმეორეთ, გაიმეორეთ 572 00:26:11,766 --> 00:26:13,640 იმიტომ, რომ ყველა რომ კოდი დავწერეთ, 573 00:26:13,640 --> 00:26:17,900 ეს სახის ეძებს მომხმარებლის შეყვანის მიღების დარწმუნებული ვარ, ეს მთლიანად რიცხვითი 574 00:26:17,900 --> 00:26:21,700 ან ის ფაქტობრივი მცურავი წერტილი ღირებულება ან მოსწონს, 575 00:26:21,700 --> 00:26:24,233 დამოკიდებულია რა მნიშვნელობა ფუნქციონირებს თქვენ იყენებთ. 576 00:26:24,233 --> 00:26:25,060 >> ავე. 577 00:26:25,060 --> 00:26:25,710 OK. 578 00:26:25,710 --> 00:26:27,592 ეს იყო mouthful მაგრამ საქმე ისაა, რომ 579 00:26:27,592 --> 00:26:29,550 რომ მიზეზი გვქონდა იმ სასწავლო დისკები 580 00:26:29,550 --> 00:26:32,880 იმიტომ, რომ ყველაზე დაბალი დონე, არსებობს მხოლოდ ამდენი რამ რომ 581 00:26:32,880 --> 00:26:35,674 შეიძლება არასწორი, რომ გვინდოდა წინასწარ გაუმკლავდეს 582 00:26:35,674 --> 00:26:38,090 იმ რამ, რა თქმა უნდა, ადრეული კვირის კლასის, 583 00:26:38,090 --> 00:26:42,230 მაგრამ ახლა PSet ოთხი და PSet და ხუთ მიღმა ხედავთ, რომ ეს უფრო უთხრა 584 00:26:42,230 --> 00:26:45,570 თქვენ, არამედ თქვენ უფრო შეუძლია გადაჭრის იმ სახის პრობლემები 585 00:26:45,570 --> 00:26:47,180 თავს. 586 00:26:47,180 --> 00:26:51,770 ნებისმიერი კითხვები GetString და GetInt? 587 00:26:51,770 --> 00:26:52,630 ჰო? 588 00:26:52,630 --> 00:26:55,130 >> აუდიტორია: რატომ თქვენ ორმაგად ტევადობის ბუფერული 589 00:26:55,130 --> 00:26:57,630 ვიდრე უბრალოდ იზრდება ეს ზუსტი ოდენობა? 590 00:26:57,630 --> 00:26:58,100 >> დავით Malan: კარგი კითხვაა. 591 00:26:58,100 --> 00:27:00,474 რატომ ჩვენ ორჯერ მოცულობა ბუფერული როგორც ეწინააღმდეგებოდა 592 00:27:00,474 --> 00:27:02,800 უბრალოდ გაზრდა ზოგიერთი მუდმივი მნიშვნელობა? 593 00:27:02,800 --> 00:27:03,900 ეს იყო დიზაინი გადაწყვეტილება. 594 00:27:03,900 --> 00:27:08,590 ჩვენ უბრალოდ გადაწყვიტა, რომ რადგან ეს ტენდენცია შეიძლება ცოტა ძვირი დროის ბრძენი ვთხოვო 595 00:27:08,590 --> 00:27:10,440 ოპერაციული სისტემა მეხსიერება, ჩვენ არ 596 00:27:10,440 --> 00:27:13,210 მინდა დასრულდება მდე მისაღებად შევიდა სიტუაცია დიდი სიმები 597 00:27:13,210 --> 00:27:14,960 რომ ჩვენ ვიკვლევდით ოპერაციული ისევ და ისევ 598 00:27:14,960 --> 00:27:17,500 და ისევ და ისევ სწრაფი მემკვიდრეობას მეხსიერება. 599 00:27:17,500 --> 00:27:20,387 ასე რომ, ჩვენ უბრალოდ გადაწყვიტა, გარკვეულწილად თვითნებურად მაგრამ იმედი გვაქვს, გონივრულად, 600 00:27:20,387 --> 00:27:22,720 რომ თქვენ იცით, რა, მოდით ცდილობენ მიიღონ წინ საკუთარ თავს 601 00:27:22,720 --> 00:27:25,520 და უბრალოდ შეინახოს გააორმაგოს ისე, რომ ჩვენ შეამციროს ოდენობით ჯერ 602 00:27:25,520 --> 00:27:29,010 ჩვენ მოვუწოდებთ malloc ან realloc, მაგრამ სულ გადაწყვეტილება 603 00:27:29,010 --> 00:27:31,820 დარეკეთ არარსებობის იცის რა მომხმარებლებს დაგვჭირდება ჩაწერეთ. 604 00:27:31,820 --> 00:27:33,600 ორივე გზა შეიძლება იყოს სადავო. 605 00:27:33,600 --> 00:27:35,430 სავარაუდოდ კარგი. 606 00:27:35,430 --> 00:27:39,240 >> მოდით შევხედოთ რამდენიმე სხვა გვერდითი მოვლენები მეხსიერება, 607 00:27:39,240 --> 00:27:41,610 რამ, რაც შეიძლება წავიდეთ არასწორი და ინსტრუმენტები, რომ შეუძლია 608 00:27:41,610 --> 00:27:43,880 გამოყენება დაჭერა ამ სახის შეცდომები. 609 00:27:43,880 --> 00:27:47,800 გამოდის, რომ ყველა თქვენ, მიუხედავად იმისა, check50 არ უთხრა თქვენ, როგორც ბევრი, 610 00:27:47,800 --> 00:27:50,050 უკვე წერდა buggy კოდი წლიდან კვირაში ერთი, 611 00:27:50,050 --> 00:27:53,630 მაშინაც კი, თუ ყველა check50 ტესტები გავიდა და მაშინაც კი, თუ თქვენ და თქვენი TF 612 00:27:53,630 --> 00:27:56,010 სუპერ დარწმუნებულია, რომ თქვენი კოდი მუშაობს, როგორც გამიზნული. 613 00:27:56,010 --> 00:27:59,190 შენი კოდი უკვე buggy და გაყალბდა, რომ ყველა თქვენგანი, 614 00:27:59,190 --> 00:28:02,540 გამოყენებით CS50 ბიბლიოთეკა, უკვე ჩამოდის მეხსიერება. 615 00:28:02,540 --> 00:28:06,040 თქვენ უკვე სვამს ოპერაციული სისტემა მეხსიერება უმეტეს პროგრამები 616 00:28:06,040 --> 00:28:08,850 თქვენ წერილობითი, მაგრამ თქვენ არასოდეს რეალურად მისცა მას უკან. 617 00:28:08,850 --> 00:28:12,110 თქვენ მოუწოდა GetString და GetInt და GetFloat, 618 00:28:12,110 --> 00:28:15,270 მაგრამ GetString, თქვენ არასოდეს მოუწოდა ungetstring და მიეცით 619 00:28:15,270 --> 00:28:19,890 სიმებიანი უკან ან მოსწონს, მაგრამ ჩვენ ვნახეთ რომ GetString ამჯამად გამოყოს მეხსიერება 620 00:28:19,890 --> 00:28:22,810 გზით malloc ან ამ ფუნქცია realloc, რომელიც მხოლოდ 621 00:28:22,810 --> 00:28:25,670 ძალიან მსგავსი სულისკვეთება, და მაინც, ჩვენ უკვე 622 00:28:25,670 --> 00:28:28,629 გეკითხებით ოპერაციული სისტემა მეხსიერება და მეხსიერების ისევ და ისევ 623 00:28:28,629 --> 00:28:29,670 მაგრამ არასოდეს ვაძლევთ მას უკან. 624 00:28:29,670 --> 00:28:33,550 >> ახლა, როგორც განზე, გამოდის, რომ როდესაც პროგრამა ტოვებს, ყველა მეხსიერების 625 00:28:33,550 --> 00:28:34,870 ავტომატურად გათავისუფლდა. 626 00:28:34,870 --> 00:28:36,150 ასე რომ, ეს არ იყო დიდი გარიგება. 627 00:28:36,150 --> 00:28:38,590 ის არ აპირებს დაარღვიოს IDE და ნელი რამ down, 628 00:28:38,590 --> 00:28:40,670 მაგრამ როდესაც პროგრამების ზოგადად გაჟონვის მეხსიერება 629 00:28:40,670 --> 00:28:42,170 და ისინი გაშვებული დიდი ხანია. 630 00:28:42,170 --> 00:28:45,640 თუ თქვენ ოდესმე მინახავს სულელური პატარა beach ბურთი Mac OS ან hourglass 631 00:28:45,640 --> 00:28:51,160 on Windows, სადაც ეს არის სახის შენელებისა ან ფიქრი და აზროვნება 632 00:28:51,160 --> 00:28:53,770 ან უბრალოდ რეალურად იწყება ნელი Crawl, 633 00:28:53,770 --> 00:28:56,960 ეს ძალიან შესაძლოა შეიძლება იყოს შედეგად მეხსიერების გაჟონვის. 634 00:28:56,960 --> 00:28:59,970 პროგრამისტები, რომელმაც დაწერა პროგრამული უზრუნველყოფა თქვენ იყენებთ 635 00:28:59,970 --> 00:29:03,570 ვთხოვთ ოპერაციული სისტემის მეხსიერება ყოველ რამდენიმე წუთში, საათში ერთხელ. 636 00:29:03,570 --> 00:29:05,570 მაგრამ თუ თქვენ გაშვებული პროგრამული უზრუნველყოფა, მაშინაც კი, თუ ეს 637 00:29:05,570 --> 00:29:08,680 შემცირებით თქვენს კომპიუტერში საათი ან დღის ბოლოს, 638 00:29:08,680 --> 00:29:11,980 თქვენ შეიძლება ითხოვს უფრო და უფრო მეხსიერება და არასოდეს რეალურად გამოყენება 639 00:29:11,980 --> 00:29:15,180 და ასე რომ თქვენი კოდი შეიძლება იყოს, ან პროგრამები შეიძლება ჩამოდის მეხსიერება, 640 00:29:15,180 --> 00:29:18,350 და თუ დაიწყება გაჟონვის მეხსიერება, იქ ნაკლები მეხსიერების სხვა პროგრამები, 641 00:29:18,350 --> 00:29:21,220 და ეფექტი ნელი ყველაფერი ქვევით. 642 00:29:21,220 --> 00:29:23,600 >> ახლა, ეს არის გაცილებით ერთი ყველაზე სასტიკი პროგრამები 643 00:29:23,600 --> 00:29:26,350 თქვენ გექნებათ შესაძლებლობა აწარმოებს CS50 იმდენად, რამდენადაც 644 00:29:26,350 --> 00:29:31,650 როგორც მისი გამომავალი კიდევ უფრო ეზოთერულ ვიდრე clang ის ან ის ან რომელიმე ბრძანება 645 00:29:31,650 --> 00:29:35,930 ხაზის პროგრამების ჩვენ აწარმოებს ადრე, მაგრამ საბედნიეროდ, ჩართული მისი გამომუშავება 646 00:29:35,930 --> 00:29:39,810 არის რაღაც სუპერ სასარგებლო რჩევა, რომ სასარგებლო იქნება არც PSet ოთხ 647 00:29:39,810 --> 00:29:41,510 ან რა თქმა უნდა pset ხუთ. 648 00:29:41,510 --> 00:29:44,250 ასე რომ, valgrind არის ინსტრუმენტი რომელიც შეიძლება იქნას გამოყენებული უნდა ვეძებოთ 649 00:29:44,250 --> 00:29:46,930 მეხსიერების ტბები თქვენი პროგრამა. 650 00:29:46,930 --> 00:29:48,570 ეს შედარებით მარტივი აწარმოებს. 651 00:29:48,570 --> 00:29:51,420 თქვენ აწარმოებს valgrind და შემდეგ, მიუხედავად იმისა, მიუხედავად იმისა, რომ ეს არის პატარა verbose, 652 00:29:51,420 --> 00:29:54,440 dash dash გაჟონვის გამშვები უდრის სრული, და შემდეგ dot 653 00:29:54,440 --> 00:29:56,320 სლეში და სახელი თქვენი პროგრამა. 654 00:29:56,320 --> 00:30:00,010 ასე რომ, valgrind მაშინ აწარმოებს თქვენი პროგრამის და ძალიან დასასრულს თქვენი პროგრამა 655 00:30:00,010 --> 00:30:02,240 გაშვებული სანამ იგი ტოვებს და გაძლევთ კიდევ ერთი სწრაფი, 656 00:30:02,240 --> 00:30:04,980 ის აპირებს ანალიზი თქვენი პროგრამა ხოლო ის გაშვებული 657 00:30:04,980 --> 00:30:07,740 და გითხრათ, არც თქვენ გაჟონვის ნებისმიერი მეხსიერების და კიდევ უკეთესი, 658 00:30:07,740 --> 00:30:10,610 არ შეეხოთ მეხსიერება, არ გეკუთვნის? 659 00:30:10,610 --> 00:30:13,700 მას არ შეუძლია დაჭერა ყველაფერი, მაგრამ ეს საკმაოდ კარგად გამოჭერის საუკეთესო რამ. 660 00:30:13,700 --> 00:30:19,700 >> ასე რომ, აქ არის მაგალითი ჩემი რომელსაც პერსპექტივაში ეს პროგრამა, რომელსაც აწარმოებს valgrind, 661 00:30:19,700 --> 00:30:21,470 პროგრამას მოუწოდა მეხსიერება, და მე ვაპირებ 662 00:30:21,470 --> 00:30:24,730 ხაზი გავუსვა ხაზი, რომ საბოლოოდ ინტერესი ჩვენთვის. 663 00:30:24,730 --> 00:30:27,690 ასე რომ, კიდევ უფრო distractions რომ მე წაიშლება slide. 664 00:30:27,690 --> 00:30:30,930 მაგრამ მოდით უბრალოდ ვნახოთ რა ეს პროგრამა შეუძლია გვეუბნებოდა. 665 00:30:30,930 --> 00:30:34,800 ეს შეუძლია გვეუბნება, რამ როგორიცაა არასწორი ჩაწერის საქართველოს ზომა 4. 666 00:30:34,800 --> 00:30:38,020 სხვა სიტყვებით, თუ შეეხოთ მეხსიერება, კონკრეტულად 4 ბაიტი მეხსიერება 667 00:30:38,020 --> 00:30:40,350 რომ თქვენ არ უნდა ჰქონდეს, valgrind შემიძლია გითხრათ, რომ. 668 00:30:40,350 --> 00:30:41,660 არასწორი ჩაწერის საქართველოს ზომა 4. 669 00:30:41,660 --> 00:30:43,640 თქვენ შეეხო ოთხი ბაიტი რომ თქვენ არ უნდა ჰქონდეს. 670 00:30:43,640 --> 00:30:44,840 სად ამის გაკეთება? 671 00:30:44,840 --> 00:30:45,900 ეს არის სილამაზე. 672 00:30:45,900 --> 00:30:50,000 Memory dot გ ხაზი 21, სადაც თქვენ ბრალია და ამიტომ სასარგებლოა. 673 00:30:50,000 --> 00:30:53,410 ისევე GDB, მას შეუძლია დაეხმაროს აღვნიშნო, რომ თქვენ ფაქტობრივი შეცდომა. 674 00:30:53,410 --> 00:30:57,170 >> ახლა, ამ ერთი ცოტა მეტი verbose, თუ არა გაუგებარია. 675 00:30:57,170 --> 00:31:01,307 40 bytes in 1 ბლოკები ნამდვილად დაკარგული ზარალის ჩანაწერი 1 1. 676 00:31:01,307 --> 00:31:02,140 რას ნიშნავს ეს? 677 00:31:02,140 --> 00:31:05,920 ისე, ეს მხოლოდ იმას ნიშნავს, თქვენ სთხოვა 40 bytes და უკან არ დაუბრუნებიათ. 678 00:31:05,920 --> 00:31:08,930 თქვენ მოუწოდა malloc ან თქვენ მოუწოდა GetString და ოპერაციული სისტემა 679 00:31:08,930 --> 00:31:12,450 მისცა თქვენ 40 ბაიტი, მაგრამ თქვენ არასოდეს გამოთავისუფლებული ან გაათავისუფლეს, რომ მეხსიერება, 680 00:31:12,450 --> 00:31:15,400 და იყოს სამართლიანი, ჩვენ არასოდეს თუ როგორ, რათა უკან მეხსიერება. 681 00:31:15,400 --> 00:31:17,910 თურმე არსებობს სუპერ მარტივი ფუნქცია მოუწოდა უფასოდ. 682 00:31:17,910 --> 00:31:21,170 იღებს ერთი არგუმენტი, რაც გსურთ გასათავისუფლებლად და მისცეს უკან, 683 00:31:21,170 --> 00:31:23,430 მაგრამ 40 ბაიტი, როგორც ჩანს, ამ პროგრამაში 684 00:31:23,430 --> 00:31:27,300 დაიკარგა ხაზი 20 მეხსიერების dot გ. 685 00:31:27,300 --> 00:31:28,650 >> მოდით ვნახოთ ეს პროგრამა. 686 00:31:28,650 --> 00:31:31,020 ეს არის სუპერ აზრი არ აქვს. 687 00:31:31,020 --> 00:31:33,980 ეს მხოლოდ იმაზე მეტყველებს, ეს შეცდომა. 688 00:31:33,980 --> 00:31:34,920 მოდით შევხედოთ. 689 00:31:34,920 --> 00:31:39,920 აქ არის ძირითადი და მთავარი, შეტყობინება, ზარები ფუნქცია მოუწოდა ვ და შემდეგ ბრუნდება. 690 00:31:39,920 --> 00:31:41,550 ასე რომ, არ არის ყველა, რომ საინტერესო. 691 00:31:41,550 --> 00:31:42,664 რას ვ გავაკეთოთ? 692 00:31:42,664 --> 00:31:44,330 ყურადღება მიაქციეთ, მე არ გადაიტვირთოთ პროტოტიპი. 693 00:31:44,330 --> 00:31:46,520 მინდოდა, რომ შევინარჩუნოთ კოდი მინიმალური, რაც შეიძლება. 694 00:31:46,520 --> 00:31:49,530 ასე რომ, მე დააყენა f ზემოთ ძირითადი და ეს ჯარიმა, რა თქმა უნდა, 695 00:31:49,530 --> 00:31:51,500 მოკლე პროგრამების მოსწონს ეს. 696 00:31:51,500 --> 00:31:56,910 ასე რომ, ვ არ დაბრუნდება, და აკეთებს არა არაფერი, მაგრამ ეს არ გააკეთოს ეს. 697 00:31:56,910 --> 00:31:59,620 იგი აცხადებს, ჰგავს ამ Binky მაგალითად, 698 00:31:59,620 --> 00:32:02,682 მაჩვენებელი მოუწოდა x, რომ აპირებს შესანახად მისამართი int. 699 00:32:02,682 --> 00:32:03,890 ასე რომ მარცხენა მხარეს. 700 00:32:03,890 --> 00:32:07,230 ინგლისური, რა არის მარჯვენა მხარეს აკეთებს? 701 00:32:07,230 --> 00:32:09,770 ვინმე? 702 00:32:09,770 --> 00:32:13,665 რა არის ეს აკეთებენ? 703 00:32:13,665 --> 00:32:14,651 ჰო? 704 00:32:14,651 --> 00:32:16,623 >> აუდიტორია: [INAUDIBLE] ჯერ ზომა int 705 00:32:16,623 --> 00:32:19,175 რაც 10 ჯერ რომ [INAUDIBLE] 706 00:32:19,175 --> 00:32:20,800 დავით Malan: კარგი და ნება მომეცით შეაჯამებს. 707 00:32:20,800 --> 00:32:25,480 ასე რომ გამოყოს საკმარისი სივრცე 10 რიცხვებით ან 10, რა ზომის int, 708 00:32:25,480 --> 00:32:29,340 ეს ოთხი ბაიტი, ამიტომ 10 ჯერ 4 40, ისე, რომ მარჯვენა მხარეს, რომ მე 709 00:32:29,340 --> 00:32:33,930 ხაზგასმით მომეცი 40 bytes და შესანახად მისამართი პირველი byte 710 00:32:33,930 --> 00:32:34,940 შევიდა x. 711 00:32:34,940 --> 00:32:38,380 და ახლა, ბოლოს, და აქ, სადაც ამ პროგრამის buggy, რა არის 712 00:32:38,380 --> 00:32:41,540 არასწორი line 21 საფუძველზე, რომ ლოგიკა? 713 00:32:41,540 --> 00:32:45,197 714 00:32:45,197 --> 00:32:46,280 რა არის არასწორი ხაზი 21? 715 00:32:46,280 --> 00:32:46,780 ჰო? 716 00:32:46,780 --> 00:32:49,550 აუდიტორია: თქვენ ვერ ინდექსი შევიდა x [INAUDIBLE]. 717 00:32:49,550 --> 00:32:50,300 დავით Malan: ჰო. 718 00:32:50,300 --> 00:32:52,270 მე არ უნდა ინდექსი შევიდა x როგორიცაა, რომ. 719 00:32:52,270 --> 00:32:53,850 ასე რომ, სინტაქსურად, რომ კარგადაა. 720 00:32:53,850 --> 00:32:56,990 რა არის ლამაზი არის, ჰგავს თუ არა შეიძლება მკურნალობა სახელი მასივი 721 00:32:56,990 --> 00:33:01,080 თითქოს ეს მაჩვენებელი, ასეთივე შეგიძლიათ მკურნალობა მაჩვენებელი, თუმცა ეს 722 00:33:01,080 --> 00:33:06,425 მასივი, და ასე შემიძლია სინტაქსურად ამბობენ x bracket რაღაც, x bracket i, 723 00:33:06,425 --> 00:33:07,800 მაგრამ 10 არის პრობლემატური. 724 00:33:07,800 --> 00:33:09,096 რატომ? 725 00:33:09,096 --> 00:33:10,910 >> აუდიტორია: იმიტომ, რომ ეს არ არის შიგნით. 726 00:33:10,910 --> 00:33:12,390 >> დავით Malan: ეს არ არის შიგნით რომ ბლოკი მეხსიერება. 727 00:33:12,390 --> 00:33:15,306 რა არის უდიდესი მნიშვნელობა მე უნდა აყენებს იმ კვადრატულ ფრჩხილებში? 728 00:33:15,306 --> 00:33:16,870 9, 0 მეშვეობით 9. 729 00:33:16,870 --> 00:33:18,160 იმის გამო, რომ ნულოვანი ინდექსირებას. 730 00:33:18,160 --> 00:33:20,190 ასე რომ, 0 მეშვეობით 9 იქნება ჯარიმა. 731 00:33:20,190 --> 00:33:23,960 Bracket 10 არ არის კარგი და მაგრამ გავიხსენოთ, მიუხედავად იმისა, რომ, ყოველ ჯერზე 732 00:33:23,960 --> 00:33:27,017 მე, როგორც ჩანს ცდილობენ, რათა CS50 IDE ავარიის აკრეფით ყალბი ფასეულობების, 733 00:33:27,017 --> 00:33:29,100 ეს ყოველთვის არ ითანამშრომლებს, და მართლაც, ხშირად 734 00:33:29,100 --> 00:33:31,460 მიიღეთ გაუმართლა მხოლოდ იმიტომ, რომ ოპერაციული სისტემა არ 735 00:33:31,460 --> 00:33:35,467 შეამჩნია, რომ თქვენ ოდესმე ისე ოდნავ გაივლის რამდენიმე ბლოკი მეხსიერება, 736 00:33:35,467 --> 00:33:38,300 იმიტომ, რომ თქვენ დარჩა ფარგლებში ტექნიკურად თქვენი სეგმენტი, მაგრამ უფრო, რომ 737 00:33:38,300 --> 00:33:40,940 ოპერაციული სისტემები კლასი, და ამიტომ რაღაც ეს 738 00:33:40,940 --> 00:33:43,000 შეიძლება ძალიან ადვილად წავიდეს undetected. 739 00:33:43,000 --> 00:33:48,120 შენი პროგრამა არასდროს ავარიული თანმიმდევრულად, მაგრამ იქნებ ერთხელ awhile. 740 00:33:48,120 --> 00:33:50,610 >> ასე რომ, მოდით ცდილობენ valgrind ამ, და აქ არის 741 00:33:50,610 --> 00:33:52,870 სადაც ჩვენ კიდევ overwhelmed გამოშვება მომენტალურად. 742 00:33:52,870 --> 00:34:00,810 ასე რომ მეხსიერება valgrind გაჟონვის გამშვები შეადგენს სავსე dot ხაზი მეხსიერება. 743 00:34:00,810 --> 00:34:03,040 და აი რატომ მე გპირდებით, ეს ბევრად გადააჭარბებს. 744 00:34:03,040 --> 00:34:05,700 აი რა valgrind, აქ არის ის, რაც პროგრამისტი, რამდენიმე წლის წინ- 745 00:34:05,700 --> 00:34:08,469 გადაწყვიტა, რომ ეს იქნება კარგი იდეა გამომავალი გამოიყურებოდეს. 746 00:34:08,469 --> 00:34:09,750 მოდით აზრი ამ. 747 00:34:09,750 --> 00:34:13,120 ასე რომ, ყველა გზა მარცხენა მხარეს არ არის კარგი მიზეზი 748 00:34:13,120 --> 00:34:16,620 არის პროცესი ID პროგრამა ჩვენ მხოლოდ აწარმოებს, უნიკალური იდენტიფიკატორი 749 00:34:16,620 --> 00:34:18,030 იმ პროგრამას, უბრალოდ გაიქცა. 750 00:34:18,030 --> 00:34:19,738 ჩვენ წაიშალოს, რომ slide, მაგრამ არსებობს 751 00:34:19,738 --> 00:34:22,190 არის რამდენიმე სასარგებლო ინფორმაციას აქ. 752 00:34:22,190 --> 00:34:24,684 >> მოდით გადახვევა მდე ძალიან ზევით. 753 00:34:24,684 --> 00:34:25,600 აქ, სადაც ჩვენ დავიწყეთ. 754 00:34:25,600 --> 00:34:27,040 ასე რომ, ეს არ არის, რომ ბევრი გამომუშავება. 755 00:34:27,040 --> 00:34:30,429 აი, რომ არასწორი ჩაწერის ზომა 4 on line 21. 756 00:34:30,429 --> 00:34:31,760 ისე, რა იყო ხაზი 21? 757 00:34:31,760 --> 00:34:34,500 Line 21 იყო ზუსტად და ეს აზრი 758 00:34:34,500 --> 00:34:37,290 რომ მე საფუძვლიანად წერა 4 ბაიტი, რადგან მე ვარ 759 00:34:37,290 --> 00:34:40,389 ცდილობს, რომ ეს რიცხვი, რომელიც შეიძლება იყოს არაფერი, 760 00:34:40,389 --> 00:34:42,370 ეს რაღაც უნდა იყოს ნულოვანი, მაგრამ ვცდილობ 761 00:34:42,370 --> 00:34:44,940 იმისათვის, რომ ეს იმ ადგილას, რომ არ მეკუთვნის. 762 00:34:44,940 --> 00:34:50,900 უფრო მეტიც, აქ ქვემოთ, 40 bytes ერთ ბლოკის ნამდვილად წააგო ჩანაწერი 1. 763 00:34:50,900 --> 00:34:56,500 ეს იმიტომ, რომ, როდესაც მე მოვუწოდებ malloc აქ, მე არასოდეს რეალურად გასათავისუფლებლად მეხსიერება. 764 00:34:56,500 --> 00:34:58,140 >> ასე როგორ შეიძლება მოვაგვაროთ ეს პრობლემა? 765 00:34:58,140 --> 00:35:02,970 ნება მომეცით წავიდეთ წინ და იყოს ცოტა უფრო უსაფრთხო და ამის გაკეთება 9 იქ და მე აქ უფასოდ x. 766 00:35:02,970 --> 00:35:04,820 ეს არის ახალი ფუნქცია დღეს. 767 00:35:04,820 --> 00:35:11,520 თუ მე ახლა გამეორება მიიღოს მეხსიერება dot ხაზი, მოდით აწარმოებს valgrind on კიდევ ერთხელ, 768 00:35:11,520 --> 00:35:14,990 მაქსიმალურად ჩემი ფანჯრის და დააჭიროთ. 769 00:35:14,990 --> 00:35:16,900 ახლა, ეს არის კარგი. 770 00:35:16,900 --> 00:35:19,590 მათ დასამარხავად კარგი ამბავი ყველა ამ გამომავალი. 771 00:35:19,590 --> 00:35:20,810 ყველა ბევრი ბლოკად თავისუფალი იყო. 772 00:35:20,810 --> 00:35:23,604 ჩვენ დავბრუნდებით, თუ რა ბევრი არის, მაგრამ არ გაჟონვის შესაძლებელია. 773 00:35:23,604 --> 00:35:25,520 ასე რომ, ეს არის კიდევ ერთი ინსტრუმენტი თქვენი ინსტრუმენტი ნაკრები 774 00:35:25,520 --> 00:35:30,220 რომლითაც შეგიძლიათ დაიწყოს მოვძებნოთ ახლა შეცდომები, როგორიცაა, რომ. 775 00:35:30,220 --> 00:35:34,532 >> მაგრამ ვნახოთ, რა კიდევ შეიძლება წავიდეთ არასწორი აქ. 776 00:35:34,532 --> 00:35:38,890 მოდით გარდამავალი ახლა რეალურად გადაჭრის პრობლემას. 777 00:35:38,890 --> 00:35:42,440 როგორც განზე, თუ ეს იქნება გაათავისუფლოს ცოტა დაბნეულობა და დაძაბულობა, 778 00:35:42,440 --> 00:35:43,430 ეს არის სასაცილო. 779 00:35:43,430 --> 00:35:46,400 780 00:35:46,400 --> 00:35:46,900 ჰო. 781 00:35:46,900 --> 00:35:49,040 ეს არის საკმაოდ კარგი. 782 00:35:49,040 --> 00:35:50,890 იმის გამო, რომ მითითებები მისამართები და მისამართები 783 00:35:50,890 --> 00:35:53,098 ზოგადად კონვენციის დაწერილია თექვსმეტობითი. 784 00:35:53,098 --> 00:35:54,650 ჰა, ჰა, ეს არის სასაცილო ახლა. 785 00:35:54,650 --> 00:35:58,390 ყოველ შემთხვევაში, ასე რომ, მოდით ახლა რეალურად პრობლემის გადაჭრას. 786 00:35:58,390 --> 00:36:00,840 ეს უკვე სუპერ, სუპერ დაბალი დონის დღემდე, 787 00:36:00,840 --> 00:36:03,950 და ჩვენ შეგვიძლია რეალურად სასარგებლო რამ ამ დაბალი დონის დეტალები. 788 00:36:03,950 --> 00:36:06,710 >> ამიტომ, ჩვენ გააცნო რამდენიმე კვირის განმავლობაში წინ ცნება მასივი. 789 00:36:06,710 --> 00:36:09,177 მასივი იყო ლამაზი იმიტომ, რომ ძნელია გაწმენდა ჩვენი კოდი 790 00:36:09,177 --> 00:36:11,760 იმიტომ, რომ თუ ჩვენ მინდოდა დაწერა პროგრამა მრავალჯერადი სტუდენტები 791 00:36:11,760 --> 00:36:15,270 ან მრავალჯერადი სახელები და სახლები და dorms და კოლეჯებში და ყველა რომ, 792 00:36:15,270 --> 00:36:19,430 ჩვენ შეგვიძლია შესანახად ყველაფერი უფრო სუფთად შიგნით მასივი. 793 00:36:19,430 --> 00:36:23,039 მაგრამ შესთავაზოს ერთი downside მასივი დღემდე. 794 00:36:23,039 --> 00:36:26,080 მაშინაც კი, თუ თქვენ არ განიცადა, რომ საკუთარ თავს პროგრამა, მხოლოდ ინსტინქტურად, 795 00:36:26,080 --> 00:36:30,870 რა არის ცუდი რამ მასივი, ალბათ? 796 00:36:30,870 --> 00:36:32,337 მე მესმის, ზოგიერთი murmurs. 797 00:36:32,337 --> 00:36:34,170 აუდიტორია: ეს არის რთული შეცვალოს ზომა. 798 00:36:34,170 --> 00:36:36,128 დავით Malan: ეს არის რთული შეცვალოს ზომა. 799 00:36:36,128 --> 00:36:38,660 თქვენ არ შეგიძლიათ შეცვალოთ ზომა მასივი, ფაქტობრივად, თავისთავად 800 00:36:38,660 --> 00:36:43,040 C. თქვენ შეიძლება გამოიყოს ერთი მასივი, გადაადგილება ყველაფერი ძველის 801 00:36:43,040 --> 00:36:45,380 ახალ, და ახლა აქვს რამდენიმე დამატებითი ფართი, 802 00:36:45,380 --> 00:36:47,469 მაგრამ ეს იმას არ ნიშნავს, ენის როგორიცაა Java და Python 803 00:36:47,469 --> 00:36:49,760 ან ნებისმიერი რაოდენობის სხვა ენების რომელთანაც ზოგიერთ თქვენგანს 804 00:36:49,760 --> 00:36:52,070 შეიძლება იყოს ნაცნობი, სადაც თქვენ შეგიძლიათ უბრალოდ შეინახოს დასძინა რამ 805 00:36:52,070 --> 00:36:53,930 რეკლამა nauseam ბოლომდე მასივი. 806 00:36:53,930 --> 00:36:57,880 როდესაც თქვენ გაქვთ მასივი ზომა 6, რომ არის მისი ზომა, 807 00:36:57,880 --> 00:37:01,970 და იმდენად მოსწონს იდეა ადრე რომელსაც ბუფერული გარკვეული ზომა, 808 00:37:01,970 --> 00:37:05,940 თქვენ უნდა გამოვიცნოთ გარეთ კარიბჭე რა ზომა გინდა, რომ იყოს? 809 00:37:05,940 --> 00:37:07,880 თუ მიხვდები ძალიან დიდი, თქვენ გაყვანაა სივრცეში. 810 00:37:07,880 --> 00:37:10,950 თუ მიხვდები ძალიან მცირე, თქვენ ვერ შეინახავს, ​​რომ მონაცემები, მინიმუმ 811 00:37:10,950 --> 00:37:12,940 გარეშე გაცილებით მეტი მუშაობა. 812 00:37:12,940 --> 00:37:18,180 >> ასე რომ, დღეს, მადლობა მითითებას, ჩვენ შეგვიძლია დაიწყოს stitching ერთად ჩვენი საკუთარი 813 00:37:18,180 --> 00:37:20,989 მონაცემთა სტრუქტურები და ფაქტობრივად, აქ არის ის, 814 00:37:20,989 --> 00:37:23,030 რომ გამოიყურება ცოტა მეტი cryptic ერთი შეხედვით, 815 00:37:23,030 --> 00:37:26,440 მაგრამ ეს არის ის, რაც ჩვენ მოვუწოდებთ უკავშირდება სია, და მისი სახელი სახის შეაჯამა 816 00:37:26,440 --> 00:37:26,940 მას. 817 00:37:26,940 --> 00:37:29,550 ეს არის ჩამონათვალი ნომრები, ან ამ შემთხვევაში, სიაში ნომრები, 818 00:37:29,550 --> 00:37:33,480 მაგრამ ეს შეიძლება იყოს სიაში არაფერი, მაგრამ ის გაერთიანებულს გზა ისრებით, 819 00:37:33,480 --> 00:37:36,380 და უბრალოდ ვხვდები ერთად რა ტექნიკა 820 00:37:36,380 --> 00:37:38,310 ჩვენ ვაპირებთ, რომ შეძლებს სტიჩი ერთად, 821 00:37:38,310 --> 00:37:42,540 ერთგვარი მოსწონს პოპკორნი ძაფი, დაკავშირებული სიები ოთხკუთხედს აქ? 822 00:37:42,540 --> 00:37:43,936 მისი ნომრები? 823 00:37:43,936 --> 00:37:45,560 რა არის ძირითადი ენის ფუნქცია? 824 00:37:45,560 --> 00:37:46,350 >> აუდიტორია: A მაჩვენებელი. 825 00:37:46,350 --> 00:37:47,308 >> DAVID Malan: მაჩვენებელი. 826 00:37:47,308 --> 00:37:51,700 ასე რომ თითოეული ეს ისრები აქ წარმოადგენს მომცეთ ან უბრალოდ მისამართზე. 827 00:37:51,700 --> 00:37:54,590 სხვა სიტყვებით, თუ მინდა, შესანახად სიაში ნომრები, 828 00:37:54,590 --> 00:37:59,040 მე არ შემიძლია უბრალოდ შეინახოს იგი, თუ მინდა, უნარი იზრდება და მცირდება 829 00:37:59,040 --> 00:38:00,990 ჩემი მონაცემები სტრუქტურა მასივი. 830 00:38:00,990 --> 00:38:03,000 ასე რომ, მე უნდა ცოტა უფრო დახვეწილობის, 831 00:38:03,000 --> 00:38:05,720 მაგრამ შეამჩნია, რომ ეს სურათი სახის ვარაუდობს 832 00:38:05,720 --> 00:38:08,650 იმ შემთხვევაში, თუ თქვენ უბრალოდ მიიღო პატარა თემა დამაკავშირებელი ყველაფერი ერთად, 833 00:38:08,650 --> 00:38:13,100 ალბათ არ არის, რომ იმისთვის, რომ სივრცე შორის ორი ამ ოთხკუთხედს 834 00:38:13,100 --> 00:38:16,750 ან ორი იმ კვანძების, როგორც ჩვენ დავიწყებთ მოუწოდებდა მათ, დააყენა ახალი კვანძის, 835 00:38:16,750 --> 00:38:19,547 და შემდეგ რამდენიმე ახალი თემა, უბრალოდ ditch სამი კვანძების ერთად, 836 00:38:19,547 --> 00:38:22,880 პირველი, ბოლო ერთი, და ერთი რომ თქვენ უბრალოდ ჩასმული შევიდა შუა. 837 00:38:22,880 --> 00:38:26,000 >> და მართლაც უკავშირდება სია, განსხვავებით მასივი, არის დინამიური. 838 00:38:26,000 --> 00:38:27,840 ეს შეიძლება გაიზარდოს და მას შეუძლია შემცირება და თქვენ არ 839 00:38:27,840 --> 00:38:32,434 უნდა ვიცი და არც მაინტერესებს, წინასწარ როგორ რამდენად მონაცემები თქვენ ვაპირებთ იყოს შენახვის, 840 00:38:32,434 --> 00:38:35,600 მაგრამ აღმოჩნდება, რომ ჩვენ უნდა იყოს პატარა ფრთხილად, თუ როგორ უნდა განახორციელოს ეს. 841 00:38:35,600 --> 00:38:39,070 ასე რომ, პირველი მოდით განიხილავს, თუ როგორ განვახორციელოთ ერთი ამ პატარა ოთხკუთხედს. 842 00:38:39,070 --> 00:38:40,690 ეს არის მარტივი განხორციელება int. 843 00:38:40,690 --> 00:38:44,000 თქვენ უბრალოდ ამბობენ int n და შემდეგ თქვენ 4 ბაიტი int, 844 00:38:44,000 --> 00:38:49,089 მაგრამ როგორ მივიღებ int, ეძახით n, და მაშინ მაჩვენებელი, მოდით, მას შემდეგ. 845 00:38:49,089 --> 00:38:50,880 ჩვენ ხომ ამ რამ არაფერი გვინდა 846 00:38:50,880 --> 00:38:53,590 მაგრამ მე უნდა საბაჟო მონაცემთა სტრუქტურას. 847 00:38:53,590 --> 00:38:54,257 ჰო? 848 00:38:54,257 --> 00:38:57,020 >> აუდიტორია: Ampersand [INAUDIBLE]. 849 00:38:57,020 --> 00:39:00,940 >> დავით Malan: ასე ampersand ჩვენ გამოვიყენებთ მიიღეთ მისამართი კვანძის პოტენციურად. 850 00:39:00,940 --> 00:39:02,740 მაგრამ ჩვენ გვჭირდება კიდევ ერთი თვისება C, რათა 851 00:39:02,740 --> 00:39:06,700 მომეცი უნარი შექმნას ამ საბაჟო მართკუთხედი, ამ საბაჟო 852 00:39:06,700 --> 00:39:08,919 ცვლადი თუ გნებავთ, მეხსიერებაში. 853 00:39:08,919 --> 00:39:09,710 აუდიტორია: A struct. 854 00:39:09,710 --> 00:39:10,626 DAVID Malan: struct. 855 00:39:10,626 --> 00:39:14,310 შეგახსენებთ, გასულ კვირას, ჩვენ გააცნო struct, ეს შედარებით მარტივი სიტყვით 856 00:39:14,310 --> 00:39:16,254 რომელიც საშუალებას გვაძლევს, რათა მსგავსი რამ. 857 00:39:16,254 --> 00:39:18,420 C არ მოდის მონაცემები სტრუქტურა მოუწოდა სტუდენტი. 858 00:39:18,420 --> 00:39:22,190 მას გააჩნია int და ათწილადი და char და ასეთი, მაგრამ ეს არ მოვა სტუდენტი, 859 00:39:22,190 --> 00:39:26,750 მაგრამ ჩვენ შეგვიძლია შევქმნათ სტუდენტი მონაცემები ტიპის, სტუდენტი სტრუქტურა, ეს სინტაქსი 860 00:39:26,750 --> 00:39:27,250 აქ. 861 00:39:27,250 --> 00:39:28,350 და დაინახავთ ეს ისევ და ისევ. 862 00:39:28,350 --> 00:39:30,426 ასე რომ არ ინერვიულოთ შესახებ იმახსოვრებდა სიტყვა, 863 00:39:30,426 --> 00:39:33,300 მაგრამ სიტყვით რომ მნიშვნელოვანია, მხოლოდ ის ფაქტი, რომ ჩვენ განაცხადა struct 864 00:39:33,300 --> 00:39:37,590 და მაშინ ჩვენ მას სტუდენტი და შიგნით სტუდენტი იყო სახელი და სახლის 865 00:39:37,590 --> 00:39:39,390 ან საცხოვრებლის ან მოსწონს. 866 00:39:39,390 --> 00:39:41,980 >> ასე რომ, ახლა, დღეს, მოდით შესთავაზოს ამ. 867 00:39:41,980 --> 00:39:45,240 მე დასძინა რამდენიმე სიტყვა, მაგრამ მე მინდა, განახორციელოს ამ მართკუთხედის, რომ 868 00:39:45,240 --> 00:39:48,440 მივიღე ორივე int და მაჩვენებელი, თქვენ იცით, რა, მე ვარ 869 00:39:48,440 --> 00:39:51,540 აპირებს გამოაცხადოს struct მოუწოდა კვანძის. 870 00:39:51,540 --> 00:39:55,630 მე ასევე, შიგნით, ვაპირებ ვთქვა რომ კვანძის, ეს ოთხკუთხედი, აქვს int 871 00:39:55,630 --> 00:39:59,730 და ჩვენ ამას ეძახით n და მას აქვს შემდეგი მაჩვენებელი. 872 00:39:59,730 --> 00:40:02,540 ეს არის პატარა verbose, მაგრამ თუ თქვენ ფიქრობთ ამის შესახებ, 873 00:40:02,540 --> 00:40:07,300 ისრებით, რომლებიც სურათზე მომენტში წინ არიან რა მონაცემების ტიპის? 874 00:40:07,300 --> 00:40:12,330 სადაც თითოეული ისრებით მიუთითებს რა ტიპის სტრუქტურის მონაცემები? 875 00:40:12,330 --> 00:40:14,332 ეს არ მიუთითებს მხოლოდ int, თავისთავად. 876 00:40:14,332 --> 00:40:16,165 ეს მიუთითებს, რომ მთელი მართკუთხა რამ 877 00:40:16,165 --> 00:40:18,720 და რომ მართკუთხა რამ, ჩვენ ვთქვით, ეწოდება კვანძის. 878 00:40:18,720 --> 00:40:21,720 ასე რომ, ჩვენ ასეთი უნდა რეკურსიული განსაზღვრავს ასეთი 879 00:40:21,720 --> 00:40:26,270 რომ კვანძში, ჩვენ უნდა ვთქვა, შეიცავს int მოუწოდა N 880 00:40:26,270 --> 00:40:31,070 და კურსორი მოუწოდა შემდეგი და ტიპის მონაცემთა სტრუქტურის, რომლის 881 00:40:31,070 --> 00:40:35,770 რომ მაჩვენებელი მიუთითებს, როგორც ჩანს, იქნება struct კვანძში. 882 00:40:35,770 --> 00:40:41,550 >> ასე რომ, ეს არის annoyingly verbose და უბრალოდ უნდა იყოს pedantic, 883 00:40:41,550 --> 00:40:44,100 მიზეზი, რის გამოც ჩვენ არ შეგვიძლია უბრალოდ ვიტყვი, რომ ეს, რაც გულწრფელად 884 00:40:44,100 --> 00:40:46,860 გამოიყურება უფრო იკითხება, იმიტომ, რომ შეგახსენებთ, რომ C წაკითხული 885 00:40:46,860 --> 00:40:48,710 რამ ზემოდან, მარცხნიდან მარჯვნივ. 886 00:40:48,710 --> 00:40:54,120 ეს არ არის, სანამ ჩვენ მძიმით რომ სიტყვით კვანძის რეალურად არსებობს. 887 00:40:54,120 --> 00:40:57,980 ასე რომ, თუ ჩვენ გვინდა, რომ ამ სახის ციკლური მინიშნება შიგნით მონაცემთა 888 00:40:57,980 --> 00:41:02,120 სტრუქტურა, ჩვენ უნდა გავაკეთოთ ეს, სადაც ვთქვათ struct კვანძის ზედა, რომელიც 889 00:41:02,120 --> 00:41:06,770 გვაძლევს აღარ გზას აღწერს ამ რამ, მაშინ შიგნით ვთქვათ struct კვანძის, 890 00:41:06,770 --> 00:41:09,560 და შემდეგ ძალიან ბოლო ხაზი ჩვენ ვამბობთ, ყველა უფლება, C, სხვათა შორის, 891 00:41:09,560 --> 00:41:12,060 დარეკეთ მხოლოდ ამ მთელი რა რამ კვანძის და შეწყვიტოს 892 00:41:12,060 --> 00:41:14,360 გამოყენებით სიტყვით struct საერთოდ. 893 00:41:14,360 --> 00:41:18,030 ასე რომ, ეს მხოლოდ ერთგვარი სინტაქსური შეასრულა, რომელიც, საბოლოო ჯამში, საშუალებას გვაძლევს შევქმნათ 894 00:41:18,030 --> 00:41:21,370 რაღაც რომ გამოიყურება ზუსტად მოსწონს ეს. 895 00:41:21,370 --> 00:41:25,010 >> ასე რომ, თუ ჩვენ ვივარაუდოთ, ახლა ჩვენ შეგვიძლია განხორციელების რამ C, 896 00:41:25,010 --> 00:41:28,040 როგორ გავაკეთოთ ჩვენ, ფაქტობრივად დაიწყოს გადიოდა ეს? 897 00:41:28,040 --> 00:41:32,360 ისე, ფაქტია, რომ ყველა ჩვენ უნდა გავაკეთოთ არის iterate მარცხნიდან მარჯვნივ და მხოლოდ 898 00:41:32,360 --> 00:41:35,960 სახის ჩადეთ კვანძების ან წაშლა კვანძების ან მოძებნოთ ნივთები, სადაც ჩვენ გვინდა, 899 00:41:35,960 --> 00:41:39,560 მაგრამ ამის გაკეთება, მოდით, წავიდეთ წინ და რამ ცოტა უფრო რეალური, რადგან ეს 900 00:41:39,560 --> 00:41:42,560 უკვე სუპერ დაბალი დონის დღემდე. 901 00:41:42,560 --> 00:41:45,700 არავის სიტყვასიტყვით მინდა იყოს პირველი? 902 00:41:45,700 --> 00:41:46,200 OK. 903 00:41:46,200 --> 00:41:47,092 კარგით up. 904 00:41:47,092 --> 00:41:47,800 რა გქვია? 905 00:41:47,800 --> 00:41:48,499 >> DAVID: დავით. 906 00:41:48,499 --> 00:41:49,290 დავით Malan: დავით. 907 00:41:49,290 --> 00:41:49,998 კარგია თქვენთან შეხვედრა. 908 00:41:49,998 --> 00:41:50,960 მეც. 909 00:41:50,960 --> 00:41:52,450 ყველა უფლება. 910 00:41:52,450 --> 00:41:53,990 და ჩვენ გვჭირდება 9 ნომერი. 911 00:41:53,990 --> 00:41:55,240 არ არის, როგორც პირველი, ალბათ. 912 00:41:55,240 --> 00:41:56,430 OK, ნომერი 9. 913 00:41:56,430 --> 00:41:59,667 ნომერი 17, გთხოვთ. 914 00:41:59,667 --> 00:42:01,000 ნება მომეცით დაბრუნდეს მცირედ. 915 00:42:01,000 --> 00:42:03,980 ხმების 22, გთხოვთ, და როგორ შესახებ უფრო უკან 916 00:42:03,980 --> 00:42:06,344 თუ შემიძლია ვხედავ ხელში ყველა ნათელი და არ არის. 917 00:42:06,344 --> 00:42:08,010 ვინმეს მიმდინარეობს მოხალისეებად უფლება არსებობს. 918 00:42:08,010 --> 00:42:08,968 გსურთ ამუშავება? 919 00:42:08,968 --> 00:42:10,450 შენი მხარის მიერ იძულებით იზრდებოდა. 920 00:42:10,450 --> 00:42:12,340 OK, 17. 921 00:42:12,340 --> 00:42:13,690 22. 922 00:42:13,690 --> 00:42:15,120 26 მოდის ქვემოთ. 923 00:42:15,120 --> 00:42:18,450 განა ვინმეს მინდა forcefully-- ამოდი. 924 00:42:18,450 --> 00:42:21,030 ფაქტობრივი მოხალისე. 925 00:42:21,030 --> 00:42:23,330 >> ასე რომ ძალიან სწრაფად, თუ თქვენ ბიჭები შეიძლება მოეწყოს 926 00:42:23,330 --> 00:42:26,550 საკუთარი თავი, ისევე, როგორც კვანძების ეკრანზე. 927 00:42:26,550 --> 00:42:27,510 დიდი მადლობა. 928 00:42:27,510 --> 00:42:29,234 და თქვენ უნდა 26. 929 00:42:29,234 --> 00:42:30,650 ყველა უფლება და სწრაფი გაცნობა. 930 00:42:30,650 --> 00:42:32,139 ასე რომ, მე დავით თქვენ ასევე? 931 00:42:32,139 --> 00:42:32,680 DAVID: დავით. 932 00:42:32,680 --> 00:42:33,721 დავით Malan: თქვენ? 933 00:42:33,721 --> 00:42:34,229 Jake: Jake. 934 00:42:34,229 --> 00:42:34,729 SUE: Sue. 935 00:42:34,729 --> 00:42:35,229 ALEX: ალექს. 936 00:42:35,229 --> 00:42:36,475 RAPHAEL: რაფაელ. 937 00:42:36,475 --> 00:42:37,100 TAYLOR: Taylor. 938 00:42:37,100 --> 00:42:37,466 დავით Malan: Taylor. 939 00:42:37,466 --> 00:42:37,590 შესანიშნავი. 940 00:42:37,590 --> 00:42:39,810 ასე რომ, ეს არის ჩვენი მოხალისეები დღეს და წავიდეთ წინ 941 00:42:39,810 --> 00:42:43,090 და გადაიტანოს ცოტა რომ გზა, და მხოლოდ წავიდეთ წინ და შენარჩუნება 942 00:42:43,090 --> 00:42:47,024 ჩატარების თქვენი ნომრები, როგორც თქვენ და თქვენი პირველი ნიშანი და გამოყენებით თქვენი მარცხენა ხელის, 943 00:42:47,024 --> 00:42:48,940 წავიდეთ წინ და მხოლოდ განახორციელოს ამ ისრებით, უბრალოდ 944 00:42:48,940 --> 00:42:51,360 ისე, რომ თქვენი მარცხენა ხელის ფაქტიურად მიუთითებს, რასაც თქვენ უნდა აღვნიშნო, 945 00:42:51,360 --> 00:42:54,610 ზე, და მისცეს საკუთარ თავს გარკვეული ოთახში ისე, რომ ჩვენ შეგვიძლია ვიზუალურად ვხედავ თქვენი იარაღი რეალურად 946 00:42:54,610 --> 00:42:58,120 მიუთითებს, და თქვენ შეგიძლიათ უბრალოდ აღვნიშნო ერთგვარი ადგილზე კარგად არის. 947 00:42:58,120 --> 00:43:03,040 >> ასე რომ აქ გვაქვს უკავშირდება სიაში ერთი, ორი, სამი, ოთხი, ხუთი კვანძების თავდაპირველად, 948 00:43:03,040 --> 00:43:05,860 და შენიშნავს, ჩვენ ამ სპეციალური მაჩვენებელი დასაწყისში ვინ არის 949 00:43:05,860 --> 00:43:09,770 გასაღები იმიტომ, რომ ჩვენ უნდა შევინარჩუნოთ სიმღერა საქართველოს მთელ სიგრძეზე სიაში რატომღაც. 950 00:43:09,770 --> 00:43:13,590 ეს ბიჭები, მიუხედავად იმისა, რომ ისინი დატოვა მარჯვნივ, უკან დაბრუნება მეხსიერება, 951 00:43:13,590 --> 00:43:15,950 მათ შეუძლიათ რეალურად იყოს სადმე კომპიუტერის მეხსიერებაში. 952 00:43:15,950 --> 00:43:18,240 ასე რომ, ეს ბიჭები შეიძლება იდგა ყველგან სცენაზე 953 00:43:18,240 --> 00:43:20,960 და ეს ჯარიმა, ასე რომ სანამ ისინი რეალურად მიუთითებს ერთმანეთს, 954 00:43:20,960 --> 00:43:22,770 მაგრამ შენარჩუნება რამ სუფთა და მარტივი, ჩვენ გამოგიგზავნით 955 00:43:22,770 --> 00:43:25,728 უბრალოდ მიაპყროს მათ მარცხნიდან მარჯვნივ, როგორიცაა ეს, მაგრამ არ შეიძლება იყოს მასიური ხარვეზები 956 00:43:25,728 --> 00:43:26,790 შორის იმ კვანძების. 957 00:43:26,790 --> 00:43:30,710 >> ახლა, თუ გვინდა, რომ რეალურად ჩადეთ ზოგიერთი ახალი ღირებულება, მოდით წავიდეთ წინ და ამის გაკეთება. 958 00:43:30,710 --> 00:43:33,720 ჩვენ გვაქვს შესაძლებლობა ახლა აირჩიეთ სხვა კვანძის. 959 00:43:33,720 --> 00:43:39,820 ამბობენ, რომ დავიწყოთ off ერთად mallocing 55. 960 00:43:39,820 --> 00:43:41,320 ნუთუ ვინმე იბადება, რომ malloc? 961 00:43:41,320 --> 00:43:42,280 OK, მოდის up. 962 00:43:42,280 --> 00:43:42,992 რა გქვია? 963 00:43:42,992 --> 00:43:43,700 RAINBOW: Rainbow. 964 00:43:43,700 --> 00:43:44,050 დავით Malan: Rainbow? 965 00:43:44,050 --> 00:43:44,810 ყველა უფლება. 966 00:43:44,810 --> 00:43:46,600 Malloc Rainbow. 967 00:43:46,600 --> 00:43:47,450 კარგით up. 968 00:43:47,450 --> 00:43:51,610 ასე რომ, ახლა ჩვენ უნდა ვკითხოთ საკუთარ თავს, ალგორითმულად, სადაც ჩვენ შეგვიძლია ვთქვათ 55. 969 00:43:51,610 --> 00:43:53,610 ასე რომ, ყველამ იცის, ცხადია, სადაც ის, ალბათ, 970 00:43:53,610 --> 00:43:55,401 ეკუთვნის თუ ჩვენ ვცდილობთ, შენარჩუნება ამ დახარისხებული 971 00:43:55,401 --> 00:43:58,299 და თუ ბიჭები შეიძლება ერთი უკან დახევას ასე რომ, ჩვენ არ დაეცემა 972 00:43:58,299 --> 00:43:59,590 ეტაპზე, რომ კარგი იქნება. 973 00:43:59,590 --> 00:44:01,420 ასე რომ, რეალურად, Rainbow, დაიწყოს დასრულდა აქ ჩემთან ერთად, 974 00:44:01,420 --> 00:44:04,200 იმიტომ, რომ ჩვენ, როგორც კომპიუტერული ახლა შეუძლია მხოლოდ ერთი ცვლადის დროს. 975 00:44:04,200 --> 00:44:05,190 ასე რომ, თუ ეს არის პირველი კვანძი. 976 00:44:05,190 --> 00:44:07,160 გაითვალისწინეთ, ის არ არის კვანძი, ის მხოლოდ მაჩვენებელი, 977 00:44:07,160 --> 00:44:10,270 და ამიტომაც ის შედგენილი უნდა იყოს მხოლოდ ზომის მაჩვენებელი, არ 978 00:44:10,270 --> 00:44:11,780 ერთ-ერთი იმ სრული ოთხკუთხედს. 979 00:44:11,780 --> 00:44:16,650 ასე რომ, ჩვენ ვაპირებთ, რათა შეამოწმოს ყოველ იტერაციული 55 ნაკლებია, ვიდრე 9? 980 00:44:16,650 --> 00:44:17,150 No. 981 00:44:17,150 --> 00:44:19,060 55-ზე ნაკლები 17? 982 00:44:19,060 --> 00:44:19,720 No. 983 00:44:19,720 --> 00:44:20,800 ნაკლებია, ვიდრე 22? 984 00:44:20,800 --> 00:44:22,020 ნაკლებია, ვიდრე 26? 985 00:44:22,020 --> 00:44:23,390 ნაკლებია, ვიდრე 34? 986 00:44:23,390 --> 00:44:25,890 ასე რომ, ახლა, ცხადია, Rainbow ეკუთვნის დასასრულს. 987 00:44:25,890 --> 00:44:27,270 ასე უნდა იყოს მკაფიო და რა იყო თქვენი სახელი, Taylor? 988 00:44:27,270 --> 00:44:27,895 >> TAYLOR: Taylor. 989 00:44:27,895 --> 00:44:32,510 დავით Malan: ასე შორის ტეილორის მარცხენა და Rainbow ხელში აქ, 990 00:44:32,510 --> 00:44:38,324 რომლის მხრივ უნდა აღვნიშნო, რა შეკვეთა ჩადეთ 55 შევიდა ამ სიაში? 991 00:44:38,324 --> 00:44:39,240 ჩვენ რა უნდა გავაკეთოთ? 992 00:44:39,240 --> 00:44:39,700 ჰო? 993 00:44:39,700 --> 00:44:41,140 >> აუდიტორია: Taylor ხელი უნდა აღვნიშნო მარცხენა. 994 00:44:41,140 --> 00:44:41,680 >> დავით Malan: ზუსტად. 995 00:44:41,680 --> 00:44:43,800 ასე რომ ჩასმა კვანძის შევიდა ბოლოს სია 996 00:44:43,800 --> 00:44:47,140 არის საკმაოდ მარტივია, რადგან Taylor მხოლოდ უნდა აღვნიშნო, ნაცვლად ადგილზე 997 00:44:47,140 --> 00:44:49,640 ან ჩვენ მოვუწოდებთ მას null, null არის ერთგვარი არარსებობის 998 00:44:49,640 --> 00:44:51,640 მაჩვენებელი ან სპეციალური ნულოვანი მაჩვენებელი, თქვენ 999 00:44:51,640 --> 00:44:53,740 აპირებს აღვნიშნო თქვენი მარცხენა ხელი Rainbow და შემდეგ Rainbow, 1000 00:44:53,740 --> 00:44:55,910 სადაც უნდა თქვენი მარცხენა მხრივ, ალბათ, აღვნიშნო? 1001 00:44:55,910 --> 00:44:56,570 Down. 1002 00:44:56,570 --> 00:45:00,140 ეს არ არის კარგი, თუ თავის მხრივ, არის ერთგვარი მიუთითებს off აქ და სახის ნებისმიერი 1003 00:45:00,140 --> 00:45:00,640 რომელიც გზას. 1004 00:45:00,640 --> 00:45:02,407 რომ განიხილება ნაგვის ღირებულება, 1005 00:45:02,407 --> 00:45:04,240 მაგრამ თუ იგი მიუთითებს, რომ ზოგიერთი ცნობილი მნიშვნელობა, ჩვენ 1006 00:45:04,240 --> 00:45:07,360 ეძახით ნულოვანი ან null, რომ კარგადაა იმიტომ რომ ჩვენ გვაქვს ტერმინის ამ 1007 00:45:07,360 --> 00:45:09,390 და ჩვენ ვიცით, სიაში ახლა არის სრული. 1008 00:45:09,390 --> 00:45:11,550 >> ასე რომ, რა არის კიდევ ერთი შედარებით მარტივი საქმე? 1009 00:45:11,550 --> 00:45:13,125 შეიძლება ჩვენ malloc 5? 1010 00:45:13,125 --> 00:45:14,010 კარგით up. 1011 00:45:14,010 --> 00:45:14,782 რა გქვია? 1012 00:45:14,782 --> 00:45:15,490 TIFFANY: Tiffany. 1013 00:45:15,490 --> 00:45:16,000 დავით Malan: მე ბოდიში? 1014 00:45:16,000 --> 00:45:16,470 TIFFANY: Tiffany. 1015 00:45:16,470 --> 00:45:16,880 დავით Malan: Tiffany. 1016 00:45:16,880 --> 00:45:17,110 ყველა უფლება. 1017 00:45:17,110 --> 00:45:19,071 Tiffany უკვე malloced ღირებულების 5. 1018 00:45:19,071 --> 00:45:19,570 კარგით up. 1019 00:45:19,570 --> 00:45:23,820 ეს ერთ-ერთი შედარებით ადვილია, მაგრამ განვიხილოთ ბრძანებით ოპერაციების ახლა. 1020 00:45:23,820 --> 00:45:25,820 ეს საკმაოდ ადვილი იყო ტეილორი ბოლოს. 1021 00:45:25,820 --> 00:45:30,302 ნომერი 5, რა თქმა უნდა ნაკლები 9, და ამიტომ ჩვენ უნდა David, ჩვენ Tiffany, 1022 00:45:30,302 --> 00:45:31,260 და რა იყო თქვენი სახელი? 1023 00:45:31,260 --> 00:45:31,680 >> Jake: Jake. 1024 00:45:31,680 --> 00:45:32,470 >> დავით Malan: Jake. 1025 00:45:32,470 --> 00:45:34,300 Tiffany, Jake და დავით. 1026 00:45:34,300 --> 00:45:36,580 ვისი ხელით უნდა განახლდეს პირველი? 1027 00:45:36,580 --> 00:45:39,260 1028 00:45:39,260 --> 00:45:40,590 რა გინდა აქ? 1029 00:45:40,590 --> 00:45:45,244 არსებობს რამდენიმე შესაძლო გზები, მაგრამ არსებობს ასევე ერთი ან მეტი არასწორი გზა. 1030 00:45:45,244 --> 00:45:46,620 >> აუდიტორია: დაწყება leftmost. 1031 00:45:46,620 --> 00:45:47,800 >> დავით Malan: დაწყება leftmost. 1032 00:45:47,800 --> 00:45:49,008 ვინ არის leftmost აქ? 1033 00:45:49,008 --> 00:45:49,700 აუდიტორია: პირველი. 1034 00:45:49,700 --> 00:45:50,366 >> დავით Malan: OK. 1035 00:45:50,366 --> 00:45:53,781 ასე იწყება პირველი და სად გსურთ განაახლოთ დავითის ხელში უნდა იყოს? 1036 00:45:53,781 --> 00:45:54,780 აუდიტორია: Towards 5. 1037 00:45:54,780 --> 00:45:55,446 დავით Malan: OK. 1038 00:45:55,446 --> 00:45:59,026 დავითმა, პუნქტი ხუთ ან Tiffany აქ და ახლა? 1039 00:45:59,026 --> 00:46:01,072 >> აუდიტორია: Tiffany მიუთითებს 9? 1040 00:46:01,072 --> 00:46:04,030 დავით Malan: Perfect, გარდა Binky ს უფროსი უბრალოდ სახის დაეცა off, არა? 1041 00:46:04,030 --> 00:46:06,820 იმის გამო, რომ, რა არის ცუდი ამ სურათს ფაქტიურად? 1042 00:46:06,820 --> 00:46:08,070 აუდიტორია: არაფერი მიუთითებს. 1043 00:46:08,070 --> 00:46:09,945 დავით Malan: არაფერი არ არის მიუთითებს Jake ახლა. 1044 00:46:09,945 --> 00:46:13,360 ჩვენ სიტყვასიტყვით ობოლი 9 და 17 და ჩვენ ფაქტიურად 1045 00:46:13,360 --> 00:46:18,450 გაჟონა ყველა ამ მეხსიერების, რადგან ის მიერ განახლება დავითს ხელში პირველი, რომ 1046 00:46:18,450 --> 00:46:21,660 ჯარიმა იმდენად, რამდენადაც ეს არის სწორად მიუთითებს Tiffany ახლა, 1047 00:46:21,660 --> 00:46:25,410 მაგრამ თუ არავის ჰქონდა foresight აღვნიშნო Jake, 1048 00:46:25,410 --> 00:46:27,490 მაშინ ჩვენ დავკარგეთ მთლიანად რომ სიაში. 1049 00:46:27,490 --> 00:46:28,200 მოდით გაუქმება. 1050 00:46:28,200 --> 00:46:30,950 ასე რომ, კარგია მოგზაურობა დასრულდა მაგრამ მოდით გამოსწორებას ახლა. 1051 00:46:30,950 --> 00:46:33,624 რა უნდა გავაკეთოთ, პირველ ნაცვლად? 1052 00:46:33,624 --> 00:46:34,124 ჰო? 1053 00:46:34,124 --> 00:46:35,791 >> აუდიტორია: Tiffany უნდა აღვნიშნო 9? 1054 00:46:35,791 --> 00:46:37,582 დავით Malan: მე არ შემიძლია მიიღოს, რომ ახლოს თქვენ. 1055 00:46:37,582 --> 00:46:38,720 ვინ უნდა აღვნიშნო 9? 1056 00:46:38,720 --> 00:46:39,220 >> აუდიტორია: Tiffany. 1057 00:46:39,220 --> 00:46:39,390 >> DAVID Malan ყველა უფლება. 1058 00:46:39,390 --> 00:46:41,200 ასე რომ, Tiffany უპირველეს პუნქტი 9. 1059 00:46:41,200 --> 00:46:43,550 ასე რომ, Tiffany უნდა მიიღოს იდენტური მნიშვნელობა 1060 00:46:43,550 --> 00:46:45,820 დავით, რომელიც, როგორც ჩანს, გადაჭარბებული ერთი წუთით, 1061 00:46:45,820 --> 00:46:48,820 მაგრამ ეს ჯარიმა, რადგან ახლა, მეორე ნაბიჯი, ჩვენ შეგვიძლია განახლება დავითს ხელში 1062 00:46:48,820 --> 00:46:52,680 აღვნიშნო, Tiffany, და თუ ჩვენ უბრალოდ სახის სუფთა რამ up 1063 00:46:52,680 --> 00:46:55,740 იმისა, რომ ეს არის ერთგვარი გაზაფხულზე მსგავსი, ახლა, რომ სწორი ჩანართი. 1064 00:46:55,740 --> 00:46:56,700 ასე რომ, შესანიშნავი. 1065 00:46:56,700 --> 00:46:57,970 ასე რომ, ახლა ჩვენ თითქმის არ არსებობს. 1066 00:46:57,970 --> 00:47:01,075 მოდით ჩადეთ ერთი საბოლოო ღირებულება, როგორიცაა ღირებულება 20. 1067 00:47:01,075 --> 00:47:03,010 თუ ჩვენ ვერ malloc ერთი საბოლოო მოხალისე? 1068 00:47:03,010 --> 00:47:04,140 კარგით up. 1069 00:47:04,140 --> 00:47:06,224 ასე რომ, ეს ერთი არის ცოტა უფრო რთული. 1070 00:47:06,224 --> 00:47:08,390 მაგრამ რეალურად, კოდი ჩვენ წერილობით, თუმცა სიტყვიერი, 1071 00:47:08,390 --> 00:47:10,610 ისევე, როგორც მქონე bunch საქართველოს თუ პირობებს, უფლება? 1072 00:47:10,610 --> 00:47:12,318 ჩვენ გვქონდა მდგომარეობაში შემოწმების თუ მას ეკუთვნის 1073 00:47:12,318 --> 00:47:13,840 ბოლოს, შესაძლოა, დასაწყისია. 1074 00:47:13,840 --> 00:47:15,940 ჩვენ გვჭირდება გარკვეული სახის მარყუჟის მოძიების ადგილზე შუა. 1075 00:47:15,940 --> 00:47:17,400 ასე რომ, მოდით გავაკეთოთ, რომ, რა გქვია? 1076 00:47:17,400 --> 00:47:17,700 >> ERIC: Eric. 1077 00:47:17,700 --> 00:47:18,340 >> დავით Malan: ერიკ? 1078 00:47:18,340 --> 00:47:18,660 ერიკ. 1079 00:47:18,660 --> 00:47:19,368 კარგია თქვენთან შეხვედრა. 1080 00:47:19,368 --> 00:47:20,490 ასე რომ, ჩვენ გვაქვს 20. 1081 00:47:20,490 --> 00:47:21,220 ნაკლებია, ვიდრე ხუთი? 1082 00:47:21,220 --> 00:47:21,530 No. 1083 00:47:21,530 --> 00:47:22,160 ნაკლებია, ვიდრე ცხრა? 1084 00:47:22,160 --> 00:47:22,410 No. 1085 00:47:22,410 --> 00:47:23,050 ნაკლებია, ვიდრე 17? 1086 00:47:23,050 --> 00:47:23,550 No. 1087 00:47:23,550 --> 00:47:23,740 OK. 1088 00:47:23,740 --> 00:47:25,701 მას ეკუთვნის აქ და თქვენი სახელები ერთხელ არის? 1089 00:47:25,701 --> 00:47:26,200 SUE: Sue. 1090 00:47:26,200 --> 00:47:26,880 დავით Malan: Sue. 1091 00:47:26,880 --> 00:47:27,379 ALEX: ალექს. 1092 00:47:27,379 --> 00:47:28,790 დავით Malan: Sue, ალექსი და? 1093 00:47:28,790 --> 00:47:29,290 ERIC: Eric. 1094 00:47:29,290 --> 00:47:30,120 დავით Malan: ერიკ. 1095 00:47:30,120 --> 00:47:32,140 რომლის ხელში უნდა მიიღოს განახლებული პირველი? 1096 00:47:32,140 --> 00:47:32,930 >> აუდიტორია: ერიკ. 1097 00:47:32,930 --> 00:47:33,429 OK. 1098 00:47:33,429 --> 00:47:35,200 ასე რომ, ერიკ უნდა აღვნიშნო საიდან 1099 00:47:35,200 --> 00:47:35,930 22. 1100 00:47:35,930 --> 00:47:36,430 კარგი. 1101 00:47:36,430 --> 00:47:38,180 და ახლა რა არის შემდეგი? 1102 00:47:38,180 --> 00:47:40,800 Sue შემდეგ შეგიძლიათ აღვნიშნო ერიკ და ახლა, თუ ბიჭები მხოლოდ 1103 00:47:40,800 --> 00:47:44,077 გარკვეული ოთახი, რომელიც კარგად არის ვიზუალურად, ახლა ჩვენ გავაკეთეთ ჩასაგდები. 1104 00:47:44,077 --> 00:47:47,160 მოდით ახლა განიხილოს საკითხი, მაგრამ დიდი მადლობა, რომ ჩვენი მოხალისეები. 1105 00:47:47,160 --> 00:47:48,090 ძალიან კარგად გაკეთდეს. 1106 00:47:48,090 --> 00:47:50,831 თქვენ შეგიძლიათ შეინახოთ იმ შემთხვევაში, თუ გსურთ. 1107 00:47:50,831 --> 00:47:54,140 და ჩვენ გვაქვს ლამაზი განშორება საჩუქარი თუ ნეტავ თითოეული like მიიღოს სტრესი დაადასტურა. 1108 00:47:54,140 --> 00:47:56,030 ნება მომეცით, უბრალოდ გაივლის ამ ქვემოთ. 1109 00:47:56,030 --> 00:47:58,430 რა არის takeaway ეს? 1110 00:47:58,430 --> 00:48:02,430 როგორც ჩანს, ეს იქნება საოცარი იმდენად, რამდენადაც ჩვენ ახლა 1111 00:48:02,430 --> 00:48:06,360 გააცნო ალტერნატივა მასივი, რომ ასე არ არის შემოიფარგლება 1112 00:48:06,360 --> 00:48:07,780 მასივი გარკვეული ფიქსირებული ზომა. 1113 00:48:07,780 --> 00:48:09,380 მათ შეუძლიათ იზრდება დინამიურად ვითარდება. 1114 00:48:09,380 --> 00:48:13,220 >> მაგრამ ჰგავს ჩვენ ვნახეთ ამ კვირაში წარსულში, ჩვენ არასოდეს მიიღოთ რამე უფასო, 1115 00:48:13,220 --> 00:48:15,740 მოსწონს აუცილებლად არსებობს ვაჭრობის აქ. 1116 00:48:15,740 --> 00:48:18,890 ასე რომ, თავდაყირა უკავშირდება სია, ეს დინამიზმი? 1117 00:48:18,890 --> 00:48:21,590 ეს უნარი იზრდება და გულწრფელად, შეგვეძლო გავაკეთეთ წაშლა 1118 00:48:21,590 --> 00:48:23,570 და ჩვენ შეგვიძლია შემცირება, როგორც საჭიროა. 1119 00:48:23,570 --> 00:48:24,710 რა ფასი ჩვენ გადამხდელი? 1120 00:48:24,710 --> 00:48:28,510 1121 00:48:28,510 --> 00:48:30,340 ორჯერ იმდენი სივრცე, პირველ რიგში. 1122 00:48:30,340 --> 00:48:34,010 თუ გადავხედავთ სურათზე, აღარ ვარ შენახვის სიაში რიცხვებით. 1123 00:48:34,010 --> 00:48:36,740 მე შენახვის სია რიცხვებით პლუს მითითებას. 1124 00:48:36,740 --> 00:48:38,240 ასე რომ, მე გააორმაგოს თანხის სივრცეში. 1125 00:48:38,240 --> 00:48:40,740 ახლა, შესაძლოა, ეს არ არის ისეთი დიდი გარიგება 4 ბაიტი, 8 ბაიტი, 1126 00:48:40,740 --> 00:48:43,160 მაგრამ ეს შეიძლება რა თქმა უნდა დაემატოს up დიდი მონაცემები კომპლექტი. 1127 00:48:43,160 --> 00:48:45,570 რა არის კიდევ ერთი მინუსი? 1128 00:48:45,570 --> 00:48:46,070 ჰო? 1129 00:48:46,070 --> 00:48:48,010 >> აუდიტორია: ჩვენ უნდა კვეთენ მათ ერთ-by-ერთი. 1130 00:48:48,010 --> 00:48:48,760 დავით Malan: ჰო. 1131 00:48:48,760 --> 00:48:50,260 ჩვენ უნდა traverse მათ ერთ-by-ერთი. 1132 00:48:50,260 --> 00:48:53,860 იცით რა, ჩვენ დათმო ამ სუპერ მოსახერხებელი ფუნქცია კვადრატული ფრჩხილი 1133 00:48:53,860 --> 00:48:57,240 ნოტაცია, უფრო სწორად ცნობილია, როგორც შემთხვევითი წვდომის, 1134 00:48:57,240 --> 00:48:59,280 სადაც შეგვიძლია მხოლოდ ხტომა ინდივიდუალური ელემენტი 1135 00:48:59,280 --> 00:49:01,470 მაგრამ ახლა თუ მე მაინც ჰქონდა ჩემი მოხალისეები აქ, 1136 00:49:01,470 --> 00:49:04,660 თუ მინდოდა, რათა იპოვოს 22, მე არ შემიძლია მხოლოდ 1137 00:49:04,660 --> 00:49:06,620 გადადით bracket რაღაც რაღაც. 1138 00:49:06,620 --> 00:49:10,530 მე უნდა გამოიყურებოდეს მეტი სია, ბევრად ისევე როგორც ჩვენი სამძებრო მაგალითები ხაზოვანი, 1139 00:49:10,530 --> 00:49:12,260 მოვძებნოთ ნომერი 22. 1140 00:49:12,260 --> 00:49:14,340 ასე რომ, ჩვენ, როგორც ჩანს, არ გადაიხადა ფასი არსებობს. 1141 00:49:14,340 --> 00:49:16,430 მაგრამ ჩვენ მაინც სხვა ამოცანების ამოხსნას. 1142 00:49:16,430 --> 00:49:18,587 >> ფაქტობრივად, ნება მომეცით წარმოგიდგინოთ მხოლოდ რამდენიმე ვიზუალური. 1143 00:49:18,587 --> 00:49:20,920 ასე რომ, თუ თქვენ უკვე ქვემოთ Mather ის სასადილოს ცოტა ხნის წინ, 1144 00:49:20,920 --> 00:49:23,320 თქვენ გავიხსენოთ, რომ მათი stacks ქაღალდის, როგორც ეს, 1145 00:49:23,320 --> 00:49:26,300 ჩვენ ნასესხები ამ ქვეყნიდან Annenberg ადრე კლასის. 1146 00:49:26,300 --> 00:49:28,930 ასე რომ, ეს დასტის ქაღალდის, თუმცა, წარმომადგენელი რეალურად 1147 00:49:28,930 --> 00:49:30,860 კომპიუტერულ მეცნიერებათა მონაცემების სტრუქტურას. 1148 00:49:30,860 --> 00:49:32,910 არსებობს მონაცემები სტრუქტურა კომპიუტერულ მეცნიერებათა 1149 00:49:32,910 --> 00:49:38,010 ცნობილია როგორც დასტის, რომელიც ძალიან ლამაზად lends თავს სწორედ ამ ვიზუალური. 1150 00:49:38,010 --> 00:49:41,380 ასე რომ, თუ თითოეული ამ ქაღალდის არ არის უჯრა, მაგრამ ისევე როგორც მთელი რიგი და მინდოდა 1151 00:49:41,380 --> 00:49:45,010 შესანახად ნომრები, მე ვერ დააყენა ერთი ქვემოთ აქ, 1152 00:49:45,010 --> 00:49:48,320 და მე ვერ დააყენა მეორე ქვემოთ აქ, და გაგრძელდება დაწყობა ნომრები 1153 00:49:48,320 --> 00:49:53,180 თავზე ერთმანეთს და რა არის პოტენციურად სასარგებლო ამ 1154 00:49:53,180 --> 00:49:55,450 ის არის, რომ რა გავლენა ამ მონაცემების სტრუქტურას? 1155 00:49:55,450 --> 00:49:58,045 რომელი ნომერი შემიძლია გაიყვანოს პირველი ყველაზე მოხერხებულად? 1156 00:49:58,045 --> 00:50:00,640 1157 00:50:00,640 --> 00:50:03,030 ყველაზე ცოტა ხნის წინ ერთ-ერთი დააყენა იქ. 1158 00:50:03,030 --> 00:50:06,430 >> ასე რომ, ეს არის ის, რაც ჩვენ მოვუწოდებთ ამ კომპიუტერული მეცნიერების lifo მონაცემთა სტრუქტურას. 1159 00:50:06,430 --> 00:50:08,070 ბოლო წელს, პირველი out. 1160 00:50:08,070 --> 00:50:10,800 ჩვენ დავინახავთ, სანამ ხანგრძლივი რატომ რომ შეიძლება იყოს სასარგებლო, მაგრამ ახლა, 1161 00:50:10,800 --> 00:50:12,200 უბრალოდ განიხილოს ქონება. 1162 00:50:12,200 --> 00:50:15,158 და ეს არის ერთგვარი სულელური, თუ ფიქრობთ, იმაზე, თუ როგორ სასადილოს აკეთებს. 1163 00:50:15,158 --> 00:50:17,910 ყოველთვის, როდესაც ისინი სუფთა ქაღალდის და ბოლო უახლეს პირობა თავზე, 1164 00:50:17,910 --> 00:50:22,160 თქვენ შეიძლება ჰქონდეს ადრე სუფთა მაგრამ საბოლოოდ ძალიან ბინძური და მტვრიან 1165 00:50:22,160 --> 00:50:24,360 უჯრა ძალიან ბოლოში თუ თქვენ არასდროს პრაქტიკულად 1166 00:50:24,360 --> 00:50:26,820 მისაღებად ბოლოში რომ დასტის, იმიტომ, რომ თქვენ მხოლოდ 1167 00:50:26,820 --> 00:50:29,380 შენარჩუნება აყენებს ახალ და სუფთა, ვინც თავზე მას. 1168 00:50:29,380 --> 00:50:31,840 იგივე შეიძლება მოხდეს სუპერმარკეტში ძალიან. 1169 00:50:31,840 --> 00:50:35,450 თუ თქვენ გაქვთ ჩვენების შემთხვევაში რძე და ყოველ ჯერზე CVS 1170 00:50:35,450 --> 00:50:37,610 ან ვინც იღებს უფრო რძე, უბრალოდ მისწვდომოდა რძით 1171 00:50:37,610 --> 00:50:39,880 თქვენ უკვე გაქვთ უკან და დააყენა ახლის up წინ, 1172 00:50:39,880 --> 00:50:43,088 თქვენ ვაპირებთ აქვს ზოგიერთი საკმაოდ nasty რძე ბოლოს მონაცემთა სტრუქტურა, 1173 00:50:43,088 --> 00:50:46,390 რადგან ის ყოველთვის ბოლოში ან ექვივალენტური ის ყოველთვის უკან. 1174 00:50:46,390 --> 00:50:50,407 >> მაგრამ არსებობს კიდევ ერთი გზა ვიფიქროთ უგულებელყოფა მონაცემები და მაგალითად, ეს. 1175 00:50:50,407 --> 00:50:53,490 თუ თქვენ ერთი იმ ხალხს, ვისაც უყვარს გამოდიან გარეთ Apple მაღაზიები 1176 00:50:53,490 --> 00:50:55,610 როდესაც ახალი პროდუქტი მოდის გარეთ, თქვენ ალბათ 1177 00:50:55,610 --> 00:50:58,780 არ იყენებთ დასტის მონაცემები სტრუქტურა იმიტომ, რომ თქვენ 1178 00:50:58,780 --> 00:51:03,070 გასხვისების ყველას, ვინც არის უგულებელყოფა მდე შეძენა რაღაც ახალი სათამაშო. 1179 00:51:03,070 --> 00:51:06,610 უფრო მეტიც, თქვენ ალბათ გამოყენებით რა სახის მონაცემები სტრუქტურა 1180 00:51:06,610 --> 00:51:10,050 ან როგორი სისტემა რეალურ სამყაროში? 1181 00:51:10,050 --> 00:51:13,493 იმედია, რომ ეს ხაზი, ან მეტი სათანადოდ ან უფრო დიდი ბრიტანეთის მსგავსად, რიგიდან. 1182 00:51:13,493 --> 00:51:17,700 და აღმოჩნდება მდგომ ასევე მონაცემთა სტრუქტურის კომპიუტერული მეცნიერების, 1183 00:51:17,700 --> 00:51:19,700 მაგრამ რიგი აქვს ძალიან სხვადასხვა ქონება. 1184 00:51:19,700 --> 00:51:20,820 ეს არ არის LIFO. 1185 00:51:20,820 --> 00:51:21,990 ბოლო წელს, პირველი out. 1186 00:51:21,990 --> 00:51:22,800 ღმერთმა ნუ ქნას. 1187 00:51:22,800 --> 00:51:24,280 ეს ნაცვლად FIFO. 1188 00:51:24,280 --> 00:51:26,110 პირველი, პირველი გარეთ. 1189 00:51:26,110 --> 00:51:27,970 და ეს კარგია სამართლიანობისა გულისთვის 1190 00:51:27,970 --> 00:51:30,428 რა თქმა უნდა, როდესაც თქვენ უგულებელყოფა up super დილით ადრე. 1191 00:51:30,428 --> 00:51:33,400 თუ თქვენ იქ პირველი, თქვენ გსურთ გავიდნენ პირველი ისევე. 1192 00:51:33,400 --> 00:51:35,880 >> ასე რომ, ყველა ამ მონაცემების სტრუქტურები, რიგები და stacks 1193 00:51:35,880 --> 00:51:39,220 და მტევნების სხვები, თურმე, შეიძლება ვიფიქროთ, რომ ეს მხოლოდ მასივი. 1194 00:51:39,220 --> 00:51:41,820 ეს არის მასივი, შესაძლოა, ფიქსირებული ზომა 4, მაგრამ ეს მინდა 1195 00:51:41,820 --> 00:51:44,990 იქნება ერთგვარი ლამაზი თუ ჩვენ შეგვიძლია მხოლოდ წყობის ქაღალდის თითქმის უსასრულოდ სიმაღლის თუ ჩვენ 1196 00:51:44,990 --> 00:51:46,780 აქვს, რომ ბევრი ქაღალდის ან ციფრები. 1197 00:51:46,780 --> 00:51:48,840 ასე რომ, შესაძლოა, ჩვენ გვინდა გამოვიყენოთ დაკავშირებული სიაში აქ, 1198 00:51:48,840 --> 00:51:51,800 მაგრამ ვაჭრობის იქნება პოტენციურად, რომ ჩვენ გვჭირდება მეტი მეხსიერების, 1199 00:51:51,800 --> 00:51:55,930 იღებს ცოტა მეტი დრო, მაგრამ ჩვენ არ ზღუდავს სიმაღლე დასტის, 1200 00:51:55,930 --> 00:51:59,550 ჰგავს Mather ჩვენების შემთხვევაში შეიძლება შეზღუდოს ზომის დასტის, 1201 00:51:59,550 --> 00:52:03,117 და ასე რომ ეს არის დიზაინი გადაწყვეტილებები ან პარამეტრები ჩვენს ხელთ არსებული საბოლოოდ. 1202 00:52:03,117 --> 00:52:04,950 ასე რომ, ეს მონაცემები სტრუქტურები, ჩვენ დავიწყეთ 1203 00:52:04,950 --> 00:52:09,360 ხედავს ახალი ზედა საზღვრები პოტენციურად თუ რა ადრე იყო სუპერ სწრაფი 1204 00:52:09,360 --> 00:52:11,260 და სადაც ჩვენ დავტოვებთ off დღეს და სადაც 1205 00:52:11,260 --> 00:52:13,200 ჩვენ იმედი გვაქვს, რომ მიიღოს ოთხშაბათს, ჩვენ 1206 00:52:13,200 --> 00:52:15,740 დაიწყოს შევხედოთ მონაცემები სტრუქტურა, რომელიც საშუალებას გვაძლევს ძიება 1207 00:52:15,740 --> 00:52:18,260 მონაცემების ჟურნალის დასრულების დრო ერთხელ. 1208 00:52:18,260 --> 00:52:21,470 და ჩვენ ვნახეთ, რომ, გავიხსენოთ, კვირაში ნულოვანი და ერთი ორობითი ძებნა ან გათიშე 1209 00:52:21,470 --> 00:52:22,180 და დაიპყროთ. 1210 00:52:22,180 --> 00:52:26,240 ის ბრუნდება და კიდევ უკეთესი, წმინდა გრაალი ამ ოთხშაბათს 1211 00:52:26,240 --> 00:52:29,510 იქნება ამუშავება მონაცემთა სტრუქტურა, რომელიც ეშვება ნამდვილად 1212 00:52:29,510 --> 00:52:32,070 ან თეორიულად მუდმივი დროს, რომლის დროსაც 1213 00:52:32,070 --> 00:52:34,760 არა აქვს მნიშვნელობა, რამდენი მილიონობით და მილიარდობით რამ 1214 00:52:34,760 --> 00:52:38,470 ჩვენ ამ მონაცემების სტრუქტურას, ის მიიღოს ჩვენთვის მუდმივი დროს, შესაძლოა, ერთი ნაბიჯი 1215 00:52:38,470 --> 00:52:41,387 ან ორი ნაბიჯი და 10 ნაბიჯები, მაგრამ მუდმივი ნომრები ნაბიჯები 1216 00:52:41,387 --> 00:52:42,970 ძებნის მეშვეობით მონაცემების სტრუქტურას. 1217 00:52:42,970 --> 00:52:46,300 სწორედ ეს იქნება წმინდა გრაალი მაგრამ უფრო, რომ ოთხშაბათს. 1218 00:52:46,300 --> 00:52:49,045 იხილეთ ya შემდეგ. 1219 00:52:49,045 --> 00:52:53,704 >> [მუსიკის დაკვრა] 1220 00:52:53,704 --> 00:56:08,448