1 00:00:00,000 --> 00:00:00,500 2 00:00:00,500 --> 00:00:11,137 [მუსიკის დაკვრა] 3 00:00:11,137 --> 00:00:12,220 დევიდ ჯ Malan: ყველა უფლება. 4 00:00:12,220 --> 00:00:13,950 ეს არის CS50. 5 00:00:13,950 --> 00:00:18,560 ეს არის კვირაში ხუთი გაგრძელდება და ჩვენ რამდენიმე კარგი ამბავი და ზოგიერთი ცუდი ამბავი. 6 00:00:18,560 --> 00:00:21,140 ასე რომ, კარგი ისაა, რომ CS50 იწყებს ამ პარასკევს. 7 00:00:21,140 --> 00:00:24,430 თუ გსურთ, რომ შემოგვიერთდნენ, უხელმძღვანელებს ჩვეულებრივი URL აქ. 8 00:00:24,430 --> 00:00:28,670 კარგი ამბავია, არ ლექცია ამ მომავალ ორშაბათს, 13. 9 00:00:28,670 --> 00:00:31,970 ოდნავ ნაკლებად კარგი ამბავია, ვიქტორინა ნულოვანი შემდეგი კვირა. 10 00:00:31,970 --> 00:00:33,840 უფრო დეტალურად შეიძლება იყოს ი ამ URL აქ. 11 00:00:33,840 --> 00:00:36,340 და მომდევნო რამდენიმე დღის განმავლობაში ჩვენ უნდა შევსების ბლანკები 12 00:00:36,340 --> 00:00:39,234 რაც შეეხება ოთახი , რომ ჩვენ ყველაფერს დაცულია. 13 00:00:39,234 --> 00:00:41,400 უკეთესი ისაა, რომ იქ შეიძლება რა თქმა უნდა, ფართო განხილვის 14 00:00:41,400 --> 00:00:43,570 სხდომაზე მომავალი ორშაბათს საღამოს. 15 00:00:43,570 --> 00:00:46,270 ადევნეთ თვალყური, რა თქმა უნდა ვებ ადგილმდებარეობა და დეტალები. 16 00:00:46,270 --> 00:00:49,290 სექციები, მიუხედავად იმისა, რომ ეს არის დღესასწაული, ასევე შეხვდება ასევე. 17 00:00:49,290 --> 00:00:50,490 18 00:00:50,490 --> 00:00:52,940 ახალი ამბები, ლექცია შემდეგი პარასკევი. 19 00:00:52,940 --> 00:00:56,220 ასე რომ, ეს ტრადიცია ჩვენ აქვს, როგორც პოსტი სილაბუსი. 20 00:00:56,220 --> 00:00:58,100 Just-- ეს იქნება საოცარი. 21 00:00:58,100 --> 00:01:02,510 თქვენ ნახავთ, რამ, როგორიცაა მუდმივი დროს მონაცემთა სტრუქტურები 22 00:01:02,510 --> 00:01:04,730 და hash მაგიდები და ხეები ლელო. 23 00:01:04,730 --> 00:01:07,150 და ჩვენ ვსაუბრობთ დაბადების პრობლემები. 24 00:01:07,150 --> 00:01:09,440 მთელი bunch პერსონალის ელის მომდევნო პარასკევს. 25 00:01:09,440 --> 00:01:11,212 26 00:01:11,212 --> 00:01:12,200 OK. 27 00:01:12,200 --> 00:01:13,190 ყოველ შემთხვევაში. 28 00:01:13,190 --> 00:01:17,080 >> ასე რომ გავიხსენოთ, ჩვენ აქცენტი ამ სურათს რა არის 29 00:01:17,080 --> 00:01:18,980 შიგნით ჩვენი კომპიუტერის მეხსიერებაში. 30 00:01:18,980 --> 00:01:22,875 ასე მეხსიერების ან RAM სადაც პროგრამების არსებობს ხოლო თქვენ გაშვებული მათ. 31 00:01:22,875 --> 00:01:25,215 თუ ორჯერ დააწკაპუნეთ icon აწარმოებს ზოგიერთი პროგრამა 32 00:01:25,215 --> 00:01:27,520 ან ორჯერ დააწკაპუნეთ Icon გახსნა რამოდენიმე ფაილი, 33 00:01:27,520 --> 00:01:30,430 ის დატვირთული თქვენს ხისტ დისკზე ან მყარი დისკის 34 00:01:30,430 --> 00:01:34,190 შევიდა RAM, ოპერატიული მეხსიერება, სადაც ის ცხოვრობს, სანამ ძალა მიდის off, 35 00:01:34,190 --> 00:01:36,700 ლეპტოპი სახურავი ხურავს, ან დატოვა პროგრამა. 36 00:01:36,700 --> 00:01:38,960 >> ახლა, მეხსიერება, საქართველოს რომელიც თქვენ ალბათ 37 00:01:38,960 --> 00:01:41,950 1 გბ ამ დღეებში, 2 გიგაბაიტი, ან კიდევ უფრო, 38 00:01:41,950 --> 00:01:44,420 ზოგადად ასახული მოცემული პროგრამა 39 00:01:44,420 --> 00:01:47,170 ამ სახის მართკუთხა კონცეპტუალური მოდელი 40 00:01:47,170 --> 00:01:50,860 რომლითაც ჩვენ დასტის ბოლოში და bunch სხვა პერსონალი ზედა. 41 00:01:50,860 --> 00:01:53,140 რამ ძალიან ზევით ჩვენ ვნახეთ ამ სურათს 42 00:01:53,140 --> 00:01:55,670 ადრე, მაგრამ არასოდეს მითქვამს არის ე.წ. ტექსტი სეგმენტი. 43 00:01:55,670 --> 00:01:58,419 ტექსტი სეგმენტი არის მხოლოდ ლამაზი გზა ვამბობ zeros და პირობა, რომ 44 00:01:58,419 --> 00:02:01,150 შესაქმნელად თქვენი ფაქტობრივი შედგენილი პროგრამა. 45 00:02:01,150 --> 00:02:03,910 >> ასე რომ, როდესაც თქვენ ორმაგი დაწკაპუნება Microsoft Word თქვენს Mac ან PC, 46 00:02:03,910 --> 00:02:08,030 ან როდესაც თქვენ აწარმოებს dot slash Mario on Linux კომპიუტერზე თქვენი ტერმინალის ფანჯარა, 47 00:02:08,030 --> 00:02:12,460 zeros და პირობა, რომ დაკომპლექტებას სიტყვა ან Mario ინახება დროებით 48 00:02:12,460 --> 00:02:16,610 თქვენი კომპიუტერის RAM, რომ ე.წ. ტექსტის სეგმენტის კონკრეტული პროგრამა. 49 00:02:16,610 --> 00:02:19,080 ქვემოთ რომ მიდის ინიციალიზაცია და uninitialized მონაცემები. 50 00:02:19,080 --> 00:02:22,655 ეს არის პერსონალის როგორიცაა გლობალური ცვლადები, რომ ჩვენ არ გამოიყენება მრავალი, 51 00:02:22,655 --> 00:02:24,910 მაგრამ ხანდახან ჩვენ ჰქონდა გლობალური ცვლადები 52 00:02:24,910 --> 00:02:28,819 ან statically განსაზღვრული strings რომ არის მყარი კოდირებული სიტყვები, როგორიცაა "გამარჯობა" 53 00:02:28,819 --> 00:02:31,860 რომ არ გაითვალისწინებს ეხლა შესახებ რომ მყარი კოდირებული თქვენი პროგრამა. 54 00:02:31,860 --> 00:02:34,230 >> ახლა ქვევით ბოლოში ჩვენ აქვს ე.წ. დასტის. 55 00:02:34,230 --> 00:02:37,665 და დასტის, ჯერჯერობით, ჩვენ გამოყენებით, თუ რა სახის მიზნებისათვის? 56 00:02:37,665 --> 00:02:39,706 57 00:02:39,706 --> 00:02:40,997 რა დასტის გამოიყენება? 58 00:02:40,997 --> 00:02:41,160 ჰო? 59 00:02:41,160 --> 00:02:42,070 >> აუდიტორია: ფუნქციები. 60 00:02:42,070 --> 00:02:43,320 >> დევიდ ჯ Malan: ფუნქციები? 61 00:02:43,320 --> 00:02:44,980 რა გაგებით ფუნქციები? 62 00:02:44,980 --> 00:02:48,660 >> აუდიტორია: როცა რეკავთ ფუნქცია, არგუმენტები გადაწერილი გადატანა დასტის. 63 00:02:48,660 --> 00:02:49,660 >> დევიდ ჯ Malan: ზუსტად. 64 00:02:49,660 --> 00:02:52,650 როცა რეკავთ ფუნქცია, მისი არგუმენტები გადაწერილი გადატანა დასტის. 65 00:02:52,650 --> 00:02:56,330 ასე რომ, ნებისმიერ X ან Y ან ან B-ს რომ თქვენ გადადის შევიდა ფუნქცია 66 00:02:56,330 --> 00:02:58,680 დროებით დააყენა ე.წ. დასტის, 67 00:02:58,680 --> 00:03:02,000 ისევე, როგორც ერთი Annenberg სასადილოს ქაღალდის, და ასევე რამ 68 00:03:02,000 --> 00:03:03,190 როგორიცაა ადგილობრივი ცვლადები. 69 00:03:03,190 --> 00:03:06,290 თუ თქვენი foo ფუნქცია ან თქვენი swap ფუნქცია აქვს ადგილობრივი ცვლადები, 70 00:03:06,290 --> 00:03:08,602 როგორიცაა temp, ამ ორი დასრულდება up on Stack. 71 00:03:08,602 --> 00:03:11,560 ახლა, ჩვენ არ გაიგო ძალიან ბევრი შესახებ მათ, მაგრამ ამ გარემოს ცვლადები 72 00:03:11,560 --> 00:03:15,690 ბოლოში ჩვენ ვნახეთ ცოტა ხნის წინ, როდესაც მე futzing კლავიატურის ერთ დღეს 73 00:03:15,690 --> 00:03:20,050 და დავიწყე წვდომის რამ როგორიცაა argv 100 ან argv 1000, 74 00:03:20,050 --> 00:03:22,320 უბრალოდ ელემენტები მე დაგვავიწყდეს ნომრები, მაგრამ ეს 75 00:03:22,320 --> 00:03:24,330 არ უნდა იქნეს ჩემთვის. 76 00:03:24,330 --> 00:03:26,581 ჩვენ დაიწყო ხედავს ზოგიერთი ხმაურიანი სიმბოლოები ეკრანზე. 77 00:03:26,581 --> 00:03:28,330 ისინი იყვნენ ე.წ. გარემოს ცვლადები 78 00:03:28,330 --> 00:03:32,390 ისევე გლობალური პარამეტრების ჩემი პროგრამა ან ჩემი კომპიუტერი, არ 79 00:03:32,390 --> 00:03:37,090 უკავშირდება ბოლო შეცდომა, რომელიც ჩვენ განვიხილეთ, 80 00:03:37,090 --> 00:03:39,670 Shellshock, რომ უკვე დიდად აწუხებს საკმაოდ კომპიუტერი. 81 00:03:39,670 --> 00:03:42,960 >> ახლა ბოლოს, დღევანდელ აქცენტი ჩვენ, საბოლოო ჯამში, იქნება ბევრი. 82 00:03:42,960 --> 00:03:44,864 ეს არის კიდევ ერთი ბლოკი მეხსიერება. 83 00:03:44,864 --> 00:03:47,030 და ფუნდამენტურად ეს ყველაფერი მეხსიერება არის იგივე პერსონალი. 84 00:03:47,030 --> 00:03:48,040 ეს იგივეა, ტექნიკა. 85 00:03:48,040 --> 00:03:49,956 ჩვენ უბრალოდ სახის მკურნალობის სხვადასხვა მტევანი 86 00:03:49,956 --> 00:03:51,460 ბაიტი სხვადასხვა მიზნით. 87 00:03:51,460 --> 00:03:56,540 ბევრი ასევე იქნება, სადაც ცვლადები და მეხსიერება, რომ თქვენ მოითხოვოს 88 00:03:56,540 --> 00:03:58,810 ოპერაციული სისტემა დროებით შენახული. 89 00:03:58,810 --> 00:04:01,890 >> მაგრამ არსებობს ასეთი პრობლემა აქ, როგორც სურათზე გულისხმობს. 90 00:04:01,890 --> 00:04:05,261 ჩვენ ერთგვარი აქვს ორი გემების შესახებ დაეჯახება. 91 00:04:05,261 --> 00:04:08,010 იმის გამო, რომ, როგორც თქვენ იყენებთ უფრო და უფრო დასტის, და როგორც დღეს ვხედავთ 92 00:04:08,010 --> 00:04:11,800 მოყოლებული, როგორც თქვენ გამოიყენოთ უფრო და უფრო ბევრი, აუცილებლად ცუდი რამ შეიძლება მოხდეს. 93 00:04:11,800 --> 00:04:15,054 და მართლაც, ჩვენ შეიძლება გამოიწვიოს, რომ ნებსით თუ უნებლიეთ. 94 00:04:15,054 --> 00:04:16,970 ასე რომ, cliffhanger ბოლო დრო იყო ამ პროგრამაში, 95 00:04:16,970 --> 00:04:20,570 რომელიც არ ემსახურება რაიმე ფუნქციური სხვა მიზნით, ვიდრე იმის დემონსტრირება, 96 00:04:20,570 --> 00:04:24,750 თუ როგორ, როგორც ცუდი ბიჭი შეგიძლიათ რეალურად მიიღოს უპირატესობა შეცდომებს სხვისი პროგრამა 97 00:04:24,750 --> 00:04:28,460 და მიიღოს პროგრამა ან თუნდაც მთელი კომპიუტერული სისტემა ან სერვერზე. 98 00:04:28,460 --> 00:04:31,660 ასე რომ მხოლოდ ერთი შეხედვით მოკლედ, თქვენ შეამჩნევთ, რომ ძირითად ბოლოში 99 00:04:31,660 --> 00:04:34,510 იღებს ბრძანების არგუმენტები, როგორც ერთ argv. 100 00:04:34,510 --> 00:04:38,480 და მას აქვს ზარი ფუნქცია f, არსებითად უსახელო ფუნქცია მოუწოდა 101 00:04:38,480 --> 00:04:40,250 f, და ის გადადის argv [1]. 102 00:04:40,250 --> 00:04:43,960 >> ასე რომ, რასაც სიტყვა მომხმარებლის ტიპების ზე სწრაფი შემდეგ ამ პროგრამის სახელი, 103 00:04:43,960 --> 00:04:49,310 და შემდეგ ამ თვითნებური ფუნქცია up ზედა, f, იღებს ტექსტი, AKA char *, 104 00:04:49,310 --> 00:04:51,720 როგორც ჩვენ დავიწყეთ, რათა განიხილონ, და ეს მხოლოდ მას უწოდებს "ბარი". 105 00:04:51,720 --> 00:04:53,310 მაგრამ ჩვენ შეგვიძლია ეძახით არაფერი. 106 00:04:53,310 --> 00:04:57,470 და შემდეგ იგი აცხადებს, შიგნით F, მასივი სიმბოლო 107 00:04:57,470 --> 00:04:59,930 მოუწოდა, C 12 ასეთი გმირები. 108 00:04:59,930 --> 00:05:03,580 >> ახლა, ამბავი ვეუბნებოდი მომენტში წინ, სადაც მეხსიერება 109 00:05:03,580 --> 00:05:06,720 გ, ან იმ 12 ჩარები აპირებს დასრულდება up? 110 00:05:06,720 --> 00:05:07,570 უბრალოდ უნდა იყოს წმინდა. 111 00:05:07,570 --> 00:05:08,070 ჰო? 112 00:05:08,070 --> 00:05:08,590 >> აუდიტორია: On Stack. 113 00:05:08,590 --> 00:05:09,420 >> დევიდ ჯ Malan: On Stack. 114 00:05:09,420 --> 00:05:10,720 ასე რომ გ ადგილობრივი ცვლადი. 115 00:05:10,720 --> 00:05:14,079 ჩვენ ითხოვს 12 chars და 12 ბაიტი. 116 00:05:14,079 --> 00:05:16,120 იმ ვაპირებთ დასრულდება მდე on ე.წ. დასტის. 117 00:05:16,120 --> 00:05:18,530 ახლა საბოლოოდ ამ სხვა ფუნქცია ეს რეალურად საკმაოდ სასარგებლო, 118 00:05:18,530 --> 00:05:20,571 მაგრამ ჩვენ ნამდვილად არ გამოიყენება ის საკუთარ თავს, strncopy. 119 00:05:20,571 --> 00:05:21,550 120 00:05:21,550 --> 00:05:25,200 ეს იმას ნიშნავს, string ასლი, მაგრამ მხოლოდ ო წერილები, n სიმბოლო. 121 00:05:25,200 --> 00:05:31,990 ასე რომ, ო გმირები იქნება გადაწერა ბარი შევიდა გ. 122 00:05:31,990 --> 00:05:32,980 და რამდენი? 123 00:05:32,980 --> 00:05:34,110 სიგრძეზე ბარი. 124 00:05:34,110 --> 00:05:36,330 ასე რომ, სხვა სიტყვებით, რომ ერთი ხაზი, strncopy, 125 00:05:36,330 --> 00:05:39,500 აპირებს კოპირება ეფექტურად ბარი გ. 126 00:05:39,500 --> 00:05:42,340 >> ახლა, მხოლოდ სახის მოსალოდნელია მორალური ამ ამბავი, 127 00:05:42,340 --> 00:05:44,750 რა არის პოტენციურად პრობლემური აქ? 128 00:05:44,750 --> 00:05:49,710 მიუხედავად იმისა, რომ ჩვენ შემოწმების ხანგრძლივობა ბარი და ჩაბარების ის strncopy, 129 00:05:49,710 --> 00:05:53,145 რა არის თქვენი gut გეუბნებოდით არის კვლავ დაარღვიეს ამ პროგრამის შესახებ? 130 00:05:53,145 --> 00:05:54,410 131 00:05:54,410 --> 00:05:55,220 ჰო? 132 00:05:55,220 --> 00:05:57,491 >> აუდიტორია: არ მოიცავს ოთახი null ხასიათი. 133 00:05:57,491 --> 00:05:59,990 დევიდ ჯ Malan: არ მოიცავს ოთახი null ხასიათი. 134 00:05:59,990 --> 00:06:02,073 პოტენციურად, განსხვავებით წარსული პრაქტიკა ჩვენ კი არა, 135 00:06:02,073 --> 00:06:04,810 აქვს იმდენად, როგორც პლუს 1 გადაიდგა, რომ null ხასიათი. 136 00:06:04,810 --> 00:06:06,649 მაგრამ კიდევ უარესი რომ. 137 00:06:06,649 --> 00:06:07,940 რა ჩვენ ვერ გააკეთებს? 138 00:06:07,940 --> 00:06:08,432 ჰო? 139 00:06:08,432 --> 00:06:09,307 >> აუდიტორია: [INAUDIBLE] 140 00:06:09,307 --> 00:06:15,440 141 00:06:15,440 --> 00:06:16,440 დევიდ ჯ Malan: Perfect. 142 00:06:16,440 --> 00:06:18,490 ჩვენ რთული კოდირებული 12 საკმაოდ თვითნებურად. 143 00:06:18,490 --> 00:06:19,497 144 00:06:19,497 --> 00:06:21,330 რომ არ არის იმდენად პრობლემა, მაგრამ ის ფაქტი, 145 00:06:21,330 --> 00:06:25,630 რომ ჩვენ კი არ შემოწმების სიგრძეზე ბარი ნაკლებია, ვიდრე 12, 146 00:06:25,630 --> 00:06:28,530 ამ შემთხვევაში ეს იქნება უსაფრთხო რომ იგი ხსოვნას 147 00:06:28,530 --> 00:06:30,260 ე.წ. c რომ ჩვენ გამოყოფილი. 148 00:06:30,260 --> 00:06:32,960 მართლაც, თუ ბარი, როგორიცაა 20 სიმბოლომდე 149 00:06:32,960 --> 00:06:39,010 ეს ფუნქცია, როგორც ჩანს, გადაწერა 20 სიმბოლოებს ბარი შევიდა გ, რითაც 150 00:06:39,010 --> 00:06:41,310 აღების მინიმუმ 8 bytes რომ ეს არ უნდა იყოს. 151 00:06:41,310 --> 00:06:42,690 რომ გავლენა აქ. 152 00:06:42,690 --> 00:06:44,347 >> ასე მოკლედ, გატეხილი პროგრამა. 153 00:06:44,347 --> 00:06:45,180 არ არის ისეთი დიდი გარიგება. 154 00:06:45,180 --> 00:06:46,360 იქნებ თქვენ გაქვთ სეგმენტაცია ბრალია. 155 00:06:46,360 --> 00:06:47,651 ჩვენ გვქონდა შეცდომები პროგრამები. 156 00:06:47,651 --> 00:06:50,196 ალბათ ყველა აქვს შეცდომები პროგრამების ახლა. 157 00:06:50,196 --> 00:06:51,320 მაგრამ რა გავლენა? 158 00:06:51,320 --> 00:06:54,390 ისე, აქ zoomed-in მობილური ეს სურათი ჩემი კომპიუტერის მეხსიერებაში. 159 00:06:54,390 --> 00:06:56,230 ეს არის ბოლოში ჩემი Stack. 160 00:06:56,230 --> 00:06:59,644 და მართლაც, ძალიან ბოლოში არის ის, რაც მოუწოდა მშობელი რუტინული დასტის, ლამაზი გზა 161 00:06:59,644 --> 00:07:00,560 განაცხადა, რომ მთავარ. 162 00:07:00,560 --> 00:07:03,772 ასე რომ, ვინც მოუწოდა ფუნქცია f, რომ ჩვენ ვსაუბრობთ. 163 00:07:03,772 --> 00:07:05,230 ასე რომ, ეს ბოლოში დასტის. 164 00:07:05,230 --> 00:07:06,640 დაბრუნების მისამართი არის რაღაც ახალი. 165 00:07:06,640 --> 00:07:08,810 ის ყოველთვის არსებობს, ყოველთვის, რომ სურათი. 166 00:07:08,810 --> 00:07:10,440 ჩვენ უბრალოდ არ ჰქვია ამას ყურადღებას. 167 00:07:10,440 --> 00:07:15,290 იმიტომ, რომ ეს თურმე გზა C მუშაობს არის რომ როდესაც ერთი ფუნქცია მოუწოდებს სხვა, 168 00:07:15,290 --> 00:07:18,780 არა მარტო არგუმენტები, რომ ფუნქცია მივიღებთ გადატანა დასტის, 169 00:07:18,780 --> 00:07:22,470 არა მარტო ფუნქციის ადგილობრივი ცვლადები მივიღებთ გადატანა დასტის, 170 00:07:22,470 --> 00:07:26,820 რაღაც მოუწოდა დაბრუნების მისამართი ასევე იღებს გადატანა დასტის. 171 00:07:26,820 --> 00:07:33,330 კერძოდ, თუ მთავარ მოუწოდებს foo, ძირითად საკუთარ მეხსიერებაში, ox რაღაც, 172 00:07:33,330 --> 00:07:38,240 ეფექტურად იღებს დააყენა გადატანა დასტის ასე რომ, როცა f კეთდება შესრულებაში მას 173 00:07:38,240 --> 00:07:43,630 იცის, სად უნდა ხტომა უკან ტექსტში სეგმენტი, რათა გაგრძელდება შესრულებაში. 174 00:07:43,630 --> 00:07:47,760 >> ასე რომ, თუ ჩვენ აქ, კონცეპტუალურად, მთავარი, მაშინ f იღებს მოუწოდა. 175 00:07:47,760 --> 00:07:50,200 როგორ ამჯამად f იცის, ვინ მხრივ კონტროლის უკან? 176 00:07:50,200 --> 00:07:52,020 ისე, ეს პატარა breadcrumb წითელი აქ, 177 00:07:52,020 --> 00:07:54,978 მოუწოდა დაბრუნების მისამართი, ეს მხოლოდ ამოწმებს, რა არის, რომ დაბრუნების მისამართი? 178 00:07:54,978 --> 00:07:57,039 ოჰ, ნება მომეცით გადასვლა უკან to main აქ. 179 00:07:57,039 --> 00:07:59,080 და რომ ცოტა oversimplification, 180 00:07:59,080 --> 00:08:00,750 რადგან zeros და პირობა ძირითადი ტექნიკურად 181 00:08:00,750 --> 00:08:01,967 აქ ტექნიკური სეგმენტი. 182 00:08:01,967 --> 00:08:03,800 მაგრამ ეს იდეა. ვ უბრალოდ უნდა იცოდეს, რას 183 00:08:03,800 --> 00:08:06,680 სადაც კონტროლი საბოლოოდ ბრუნდება. 184 00:08:06,680 --> 00:08:09,790 >> მაგრამ გზა კომპიუტერები დიდი ხანია ასახული რამ 185 00:08:09,790 --> 00:08:12,320 როგორიცაა ადგილობრივი ცვლადები და არგუმენტები მოსწონს ეს. 186 00:08:12,320 --> 00:08:17,180 ასე რომ ზედა ამ სურათს ლურჯი არის დასტის ჩარჩო f, ასე რომ ყველა 187 00:08:17,180 --> 00:08:19,630 მეხსიერების რომ f კონკრეტულად გამოყენებით. 188 00:08:19,630 --> 00:08:22,990 ასე რომ, შესაბამისად, შეამჩნევთ, რომ ბარი ამ სურათს. 189 00:08:22,990 --> 00:08:23,980 ბარი იყო მისი არგუმენტი. 190 00:08:23,980 --> 00:08:27,240 და ჩვენ აცხადებდა, რომ არგუმენტები ფუნქციები მივიღებთ გადატანა Stack. 191 00:08:27,240 --> 00:08:29,910 და c, რა თქმა უნდა, ასევე ამ სურათს. 192 00:08:29,910 --> 00:08:33,520 >> და მხოლოდ notational მიზნით, შეამჩნია ზედა მარცხენა კუთხეში 193 00:08:33,520 --> 00:08:37,020 არის რა იქნება c bracket 0 და შემდეგ ოდნავ ქვემოთ მარჯვენა 194 00:08:37,020 --> 00:08:38,220 გ bracket 11. 195 00:08:38,220 --> 00:08:41,240 სხვა სიტყვებით, თქვენ წარმოიდგინეთ, რომ არსებობს ქსელის bytes 196 00:08:41,240 --> 00:08:44,380 არსებობს, პირველი არის ზედა მარცხენა, ბოლოში, რომელიც 197 00:08:44,380 --> 00:08:48,360 უკანასკნელი იმ 12 ბაიტი. 198 00:08:48,360 --> 00:08:49,930 >> მაგრამ ახლა ცდილობენ სწრაფად გადასახვევად. 199 00:08:49,930 --> 00:08:55,580 ის, რაც უნდა მოხდეს, თუ ჩვენ გაიაროს სიმებიანი ბარი, რომ უფრო მეტია, ვიდრე გ? 200 00:08:55,580 --> 00:08:59,130 და ჩვენ არ შესამოწმებლად, თუ ეს მართლაც უმეტეს 12. 201 00:08:59,130 --> 00:09:03,146 რომელი ნაწილი ამ სურათს აპირებს მიიღოს ინსტალერის ბაიტი 0, 1, 2, 3, 202 00:09:03,146 --> 00:09:07,890 dot dot dot, 11, და შემდეგ ცუდი, 12, 13 გზით 19? 203 00:09:07,890 --> 00:09:11,820 რა მოხდება აქ, თუ ითქვას, შეკვეთით 204 00:09:11,820 --> 00:09:14,790 რომ გ bracket 0 არის ზედა და c bracket 11 არის ერთგვარი down 205 00:09:14,790 --> 00:09:15,812 მარჯვნივ? 206 00:09:15,812 --> 00:09:16,796 ჰო? 207 00:09:16,796 --> 00:09:19,260 >> აუდიტორია: Well, ის აპირებს გადავაწერო char * ბარი. 208 00:09:19,260 --> 00:09:22,260 >> დევიდ ჯ Malan: ჰო, როგორც ჩანს, თქვენ აპირებს გადავაწერო char * ბარი. 209 00:09:22,260 --> 00:09:26,245 და უარესი, თუ თქვენ მართლაც ხანგრძლივი სიმებიანი, თქვენ შეიძლება გადაწერა რა? 210 00:09:26,245 --> 00:09:27,460 211 00:09:27,460 --> 00:09:28,570 დაბრუნების მისამართზე. 212 00:09:28,570 --> 00:09:31,380 რაც კიდევ ერთხელ, ისევე, როგორც breadcrumb გითხრათ პროგრამა, რომელშიც 213 00:09:31,380 --> 00:09:34,060 დაბრუნდეს, როცა f კეთდება მიმდინარეობს მოუწოდა. 214 00:09:34,060 --> 00:09:37,140 >> ასე რომ, რა ცუდები, როგორც წესი, იმ შემთხვევაში, თუ ისინი გვხვდება პროგრამა 215 00:09:37,140 --> 00:09:41,290 რომ ისინი აინტერესებდა არის exploitable, buggy ისე, 216 00:09:41,290 --> 00:09:43,550 რომ მას შეუძლია უპირატესობა რომ bug, 217 00:09:43,550 --> 00:09:45,720 ზოგადად, ისინი არ ეს უფლება პირველად. 218 00:09:45,720 --> 00:09:48,590 ისინი უბრალოდ დაიწყოს გაგზავნის, მაგალითად, შემთხვევითი strings თქვენი პროგრამა, 219 00:09:48,590 --> 00:09:50,260 არა კლავიატურის, ან გულახდილად ისინი, ალბათ, 220 00:09:50,260 --> 00:09:52,740 წერენ პატარა პროგრამა მხოლოდ ავტომატურად წარმოქმნის strings, 221 00:09:52,740 --> 00:09:55,430 და დაიწყოს ბრახუნი თქვენი პროგრამის მიერ გაგზავნის უამრავი სხვადასხვა საშუალებებით 222 00:09:55,430 --> 00:09:56,340 სხვადასხვა lengths. 223 00:09:56,340 --> 00:09:58,990 >> როგორც კი თქვენი პროგრამის დამსხვრევაზე, რომ საოცარი რამ. 224 00:09:58,990 --> 00:10:01,020 რადგან ეს იმას ნიშნავს, ან მან აღმოაჩინა 225 00:10:01,020 --> 00:10:02,660 რა არის, ალბათ მართლაც bug. 226 00:10:02,660 --> 00:10:05,830 და მაშინ მათ შეუძლიათ მიიღონ უფრო ჭკვიანი და დაიწყოს ფოკუსირება უფრო ვიწროდ 227 00:10:05,830 --> 00:10:07,420 როგორ უნდა გამოეყენებინათ, რომ შეცდომა. 228 00:10:07,420 --> 00:10:11,480 კერძოდ, ის, რაც მას შეიძლება გავაკეთოთ არის გაგზავნას, საუკეთესო შემთხვევაში, hello. 229 00:10:11,480 --> 00:10:12,210 არ არის დიდი გარიგება. 230 00:10:12,210 --> 00:10:14,750 ის ტექსტი, რომელიც არის საკმაოდ მოკლე. 231 00:10:14,750 --> 00:10:18,100 მაგრამ რა, თუ იგი აგზავნის, და ჩვენ განზოგადება, როგორც, 232 00:10:18,100 --> 00:10:20,890 თავდასხმა კოდი ისე zeros და პირობა, რომ გავაკეთოთ რამ, 233 00:10:20,890 --> 00:10:25,150 როგორიცაა rm-rf, რომ ამოიღონ ყველაფერი დისკის და სპამის 234 00:10:25,150 --> 00:10:27,000 ან რაიმე შეტევა მანქანა? 235 00:10:27,000 --> 00:10:29,570 >> ასე რომ, თუ თითოეული ამ წერილები უბრალოდ წარმოადგენს, 236 00:10:29,570 --> 00:10:32,380 კონცეპტუალურად, თავდასხმა, თავდასხმა, ზოგიერთი ცუდი კოდი 237 00:10:32,380 --> 00:10:36,410 რომელიც სხვისი დაწერა, მაგრამ თუ ეს პირი არის ჭკვიანი საკმარისი 238 00:10:36,410 --> 00:10:40,790 არა მხოლოდ მოიცავს ყველა იმ rm-გადატანაში, არამედ 239 00:10:40,790 --> 00:10:46,100 აქვს მისი ბოლო რამდენიმე bytes იქნება მთელი რიგი, რომელიც შეესაბამება 240 00:10:46,100 --> 00:10:50,540 მისამართს მისი ან საკუთარი შეტევის კოდი 241 00:10:50,540 --> 00:10:53,820 რომ მას გადაეცემა მხოლოდ უზრუნველყოფს, რომ ეს ყველაზე სწრაფი, 242 00:10:53,820 --> 00:10:58,760 შეგიძლიათ ეფექტურად შეასრულა კომპიუტერული შევიდა დაენახა, როდესაც f კეთდება შესრულებაში, 243 00:10:58,760 --> 00:11:02,400 oh, დროა ჩემთვის ხტომა თავში წითელი დაბრუნების მისამართზე. 244 00:11:02,400 --> 00:11:06,070 არამედ იმიტომ, რომ მას არ აქვს რატომღაც გადაფარა, რომ დაბრუნების მისამართი 245 00:11:06,070 --> 00:11:09,602 საკუთარი ნომერი, და ისინი არიან ძალიან გონიერები 246 00:11:09,602 --> 00:11:11,560 არ კონფიგურაცია, რომ ნომერი ეხება, როგორც თქვენ 247 00:11:11,560 --> 00:11:13,740 იხილეთ სუპერ დაბრუნება მარცხენა კუთხეში არსებობს, 248 00:11:13,740 --> 00:11:18,020 ფაქტობრივი მისამართი კომპიუტერის მეხსიერების ზოგიერთი მათი თავდასხმა კოდი 249 00:11:18,020 --> 00:11:21,740 ცუდი ბიჭი შეასრულა კომპიუტერული სიკვდილით დაესაჯა თავისი კოდი. 250 00:11:21,740 --> 00:11:23,700 >> და რომ კოდი, კიდევ ერთხელ, შეიძლება ასეც იყოს. 251 00:11:23,700 --> 00:11:26,120 ეს ზოგადად მოუწოდა shell კოდი, რაც არის 252 00:11:26,120 --> 00:11:29,030 გზას ვამბობ, რომ ეს არ არის ზოგადად რაღაც იმდენად მარტივია, rm-rf. 253 00:11:29,030 --> 00:11:32,340 ეს რეალურად რაღაც Bash, ან ფაქტობრივი პროგრამა, რომელიც აძლევს მას 254 00:11:32,340 --> 00:11:37,230 ან მისი პროგრამული კონტროლის შეასრულოს არაფერი, რომ მათ სურთ. 255 00:11:37,230 --> 00:11:40,210 ასე მოკლედ, ეს ყველაფერი გამომდინარეობს მარტივი ფაქტი 256 00:11:40,210 --> 00:11:44,490 რომ ეს შეცდომა იყო არა შემოწმების საზღვრების თქვენი მასივი. 257 00:11:44,490 --> 00:11:47,250 და რადგან გზა კომპიუტერები მუშაობენ არის, რომ ისინი 258 00:11:47,250 --> 00:11:49,430 გამოყენება დასტის საწყისი ეფექტურად, კონცეპტუალურად, 259 00:11:49,430 --> 00:11:54,830 ბოლოში, მაგრამ შემდეგ ელემენტებს თქვენ დააყენებს გადატანა დასტის იზრდება ზემოდან ქვემოთ, 260 00:11:54,830 --> 00:11:56,624 ეს არის ძალიან პრობლემატურია. 261 00:11:56,624 --> 00:11:58,290 ახლა, არსებობს გზები, რათა მუშაობა გარშემო. 262 00:11:58,290 --> 00:12:00,800 და გულწრფელად ვამბობ, არსებობს ენები რომლის მუშაობა გარშემო. 263 00:12:00,800 --> 00:12:03,100 Java იმუნური, მაგალითად, ამ კონკრეტულ საკითხთან დაკავშირებით. 264 00:12:03,100 --> 00:12:04,110 იმიტომ, რომ ისინი არ მოგცემთ მითითებას. 265 00:12:04,110 --> 00:12:05,943 ისინი არ მოგცემთ პირდაპირი მეხსიერების მისამართები. 266 00:12:05,943 --> 00:12:08,560 ასე რომ, ეს ძალა, რომელიც ჩვენ გვაქვს შეეხოთ არაფერი მეხსიერება 267 00:12:08,560 --> 00:12:11,580 გვინდა საქმე, მართლაც, დიდი რისკი. 268 00:12:11,580 --> 00:12:12,430 >> ასე რომ, ადევნეთ თვალი გარეთ. 269 00:12:12,430 --> 00:12:14,596 თუ გულწრფელად რომ ვთქვათ, რამდენიმე თვის განმავლობაში, ან წლის განმავლობაში, ნებისმიერ დროს 270 00:12:14,596 --> 00:12:17,740 თქვენ წაიკითხოთ ზოგიერთი ექსპლუატაციის პროგრამა ან სერვერზე, 271 00:12:17,740 --> 00:12:22,370 თუ თქვენ ოდესმე ვხედავ მინიშნება რაღაც ისევე როგორც ბუფერული overflow თავდასხმა, 272 00:12:22,370 --> 00:12:25,390 ან დასტის overflow არის სხვა ტიპის თავდასხმა, მსგავსი სულისკვეთებით, 273 00:12:25,390 --> 00:12:28,770 ისევე როგორც შთააგონებს საიტის ასახელებს, თუ იცით, 274 00:12:28,770 --> 00:12:33,170 ეს ყველაფერი ლაპარაკი მხოლოდ ადიდებულმა ზომა ზოგიერთი ხასიათი 275 00:12:33,170 --> 00:12:36,200 მასივში ან გარკვეული მასივი ზოგადად. 276 00:12:36,200 --> 00:12:38,822 ნებისმიერი კითხვები, მაშინ, ამ? 277 00:12:38,822 --> 00:12:39,780 ნუ ეცდებით ამ სახლში. 278 00:12:39,780 --> 00:12:41,620 279 00:12:41,620 --> 00:12:42,300 >> ყველა უფლება. 280 00:12:42,300 --> 00:12:47,270 ასე malloc დღემდე ჩვენი ახალი მეგობარს, რომ ჩვენ შეგვიძლია გამოყოს მეხსიერება 281 00:12:47,270 --> 00:12:50,540 რომ ჩვენ არ ვიცით, აუცილებლად in წინასწარ, რომ ჩვენ გვინდა, ამიტომ ჩვენ არ გვაქვს 282 00:12:50,540 --> 00:12:52,920 მძიმე კოდი ჩვენი პროგრამა ნომრები, როგორიცაა 12. 283 00:12:52,920 --> 00:12:55,550 მას შემდეგ, შესახებ გვეუბნება, თუ რამდენად მონაცემები მას სურს შეყვანა, 284 00:12:55,550 --> 00:12:58,000 ჩვენ შეგვიძლია malloc რომ ბევრი რამ მეხსიერებაში. 285 00:12:58,000 --> 00:13:01,484 >> ასე malloc ირკვევა, რომ რამდენად ჩვენ უკვე იყენებს, 286 00:13:01,484 --> 00:13:03,900 პირდაპირ ბოლო დროს და შემდეგ თქვენ ბიჭები არ იყენებს 287 00:13:03,900 --> 00:13:08,160 განთავსების GetString unknowingly for რამდენიმე კვირის განმავლობაში, ყველა malloc ხსოვნას 288 00:13:08,160 --> 00:13:09,820 მოდის ე.წ. ბევრი. 289 00:13:09,820 --> 00:13:13,852 და ამიტომ GetString, მაგალითად, შეიძლება გამოყოს მეხსიერება დინამიურად 290 00:13:13,852 --> 00:13:16,060 გარეშე იცის, თუ რა თქვენ ვაპირებ აკრიფოთ წინასწარ, 291 00:13:16,060 --> 00:13:21,520 გადმოგცეთ უკან მომცეთ, რომ მეხსიერება, და რომ მეხსიერების კვლავ თქვენი შეინახოს, 292 00:13:21,520 --> 00:13:24,080 მას შემდეგ, რაც GetString დააბრუნებს. 293 00:13:24,080 --> 00:13:27,450 იმიტომ, რომ გავიხსენოთ ამ ყველაფრის შემდეგ დასტის მუდმივად მიდის და ქვემოთ, 294 00:13:27,450 --> 00:13:27,950 up და down. 295 00:13:27,950 --> 00:13:30,230 და როგორც კი იგი მიდის down, ეს ნიშნავს, რომ ნებისმიერი მეხსიერების 296 00:13:30,230 --> 00:13:33,030 ეს ფუნქცია გამოიყენება, უნდა არ უნდა იქნას გამოყენებული ვინმეს. 297 00:13:33,030 --> 00:13:34,570 ეს ნაგვის ღირებულებებს. 298 00:13:34,570 --> 00:13:36,120 >> მაგრამ ბევრი არის აქ. 299 00:13:36,120 --> 00:13:39,360 და რა არის ლამაზი შესახებ malloc არის, როდესაც malloc გამოყოფს მეხსიერება აქ, 300 00:13:39,360 --> 00:13:42,070 ის არ იმოქმედა, რომ ყველაზე ნაწილი, Stack. 301 00:13:42,070 --> 00:13:46,000 და ნებისმიერი ფუნქცია შეუძლიათ მეხსიერება, რომელიც უკვე malloc'd, 302 00:13:46,000 --> 00:13:49,120 თუნდაც ფუნქცია, როგორიცაა GetString, მას შემდეგ, რაც იგი დაბრუნდა. 303 00:13:49,120 --> 00:13:51,700 >> ახლა, პირიქით malloc არის უფასო. 304 00:13:51,700 --> 00:13:53,900 და მართლაც, წესით უნდა დავიწყოთ მიღებით 305 00:13:53,900 --> 00:13:58,950 ნებისმიერი, ნებისმიერი, ნებისმიერ დროს თქვენ იყენებთ malloc თქვენ უნდა თავს გამოიყენოს თავისუფალი, საბოლოოდ, 306 00:13:58,950 --> 00:14:00,280 იმავე მაჩვენებელი. 307 00:14:00,280 --> 00:14:03,289 ყველა ამ დროს ჩვენ არ წერდა buggy, buggy კოდი, მრავალი მიზეზის გამო. 308 00:14:03,289 --> 00:14:05,580 მაგრამ ერთი, რომელიც უკვე გამოყენებით CS50 ბიბლიოთეკა, რომელიც 309 00:14:05,580 --> 00:14:09,010 თავად შეგნებულად buggy, იგი გაჟონვის მეხსიერება. 310 00:14:09,010 --> 00:14:11,410 ნებისმიერ დროს თქვენ მოუწოდა GetString უკანასკნელი რამდენიმე კვირის განმავლობაში 311 00:14:11,410 --> 00:14:13,870 ჩვენ გეკითხებით ოპერაციული სისტემა, Linux, მეხსიერება. 312 00:14:13,870 --> 00:14:15,780 და თქვენ არასდროს ერთხელ ეძლევა უკან. 313 00:14:15,780 --> 00:14:17,730 და ეს არ არის, პრაქტიკაში, კარგია. 314 00:14:17,730 --> 00:14:20,330 >> და Valgrind, ერთი ინსტრუმენტები გააცნო pset 4, 315 00:14:20,330 --> 00:14:22,900 ყველაფერი ეხმარება თქვენ ახლა შეცდომები, როგორიცაა, რომ. 316 00:14:22,900 --> 00:14:27,060 მაგრამ საბედნიეროდ, ამისთვის pset 4 თქვენ არ გჭირდებათ გამოიყენოს CS50 ბიბლიოთეკაში ან GetString. 317 00:14:27,060 --> 00:14:31,220 ასე რომ, ნებისმიერი შეცდომები დაკავშირებული მეხსიერების საბოლოოდ იქნება თქვენი საკუთარი. 318 00:14:31,220 --> 00:14:34,060 >> ასე malloc უფრო მეტია ვიდრე მოსახერხებელი ამ მიზნით. 319 00:14:34,060 --> 00:14:37,420 ჩვენ შეგვიძლია რეალურად ახლა გადაწყვიტოს ფუნდამენტურად განსხვავებული პრობლემები, 320 00:14:37,420 --> 00:14:41,640 და ფუნდამენტურად პრობლემების უფრო ეფექტურად კვირაში ნულოვანი დაპირება. 321 00:14:41,640 --> 00:14:44,720 ჯერჯერობით ეს არის ყველაზე სექსუალური მონაცემები სტრუქტურა ჩვენ გვქონდა. 322 00:14:44,720 --> 00:14:47,804 და მონაცემთა სტრუქტურის უბრალოდ ნიშნავს, გზა conceptualizing მეხსიერება 323 00:14:47,804 --> 00:14:50,720 ისე, რომ სცილდება უბრალოდ ამბობდა, ეს არის int, ეს არის char. 324 00:14:50,720 --> 00:14:52,930 ჩვენ შეგვიძლია დავიწყოთ კასეტური რამ ერთად. 325 00:14:52,930 --> 00:14:54,460 >> ამიტომ მასივი ჩანდა მოსწონს ეს. 326 00:14:54,460 --> 00:14:57,270 და რა იყო გასაღები შესახებ array არის ის, რომ გაძლევთ 327 00:14:57,270 --> 00:14:59,724 back-to-back მოცულობით მეხსიერება, რომელთაგან თითოეული 328 00:14:59,724 --> 00:15:02,765 იქნება იგივე ტიპის, int, int, int, int, ან char, char, char, 329 00:15:02,765 --> 00:15:03,330 char. 330 00:15:03,330 --> 00:15:04,496 მაგრამ არსებობს რამდენიმე downsides. 331 00:15:04,496 --> 00:15:06,570 ამ მაგალითად, მასივი ზომა ექვსი. 332 00:15:06,570 --> 00:15:10,650 დავუშვათ, რომ თქვენ შეავსოთ ამ მასივი ექვსი ნომრები და შემდეგ, გარკვეული მიზეზების გამო, 333 00:15:10,650 --> 00:15:13,187 თქვენი მომხმარებლის სურს თქვენ მეშვიდე ნომერი. 334 00:15:13,187 --> 00:15:14,020 სად დააყენა ეს? 335 00:15:14,020 --> 00:15:15,490 336 00:15:15,490 --> 00:15:18,990 >> რა არის გამოსავალი, თუ თქვენ გაქვთ განთავსებულია მასივი დასტის, 337 00:15:18,990 --> 00:15:22,030 მაგალითად, მხოლოდ კვირაში ორი notation, რომ ჩვენ გააცნო, 338 00:15:22,030 --> 00:15:23,730 კვადრატულ ფრჩხილებში რიგ შიგნით? 339 00:15:23,730 --> 00:15:25,160 340 00:15:25,160 --> 00:15:27,260 კარგად, თქვენ მოხვდით ექვსი ნომრები ამ ყუთები. 341 00:15:27,260 --> 00:15:28,530 რა თქვენი ინსტინქტები იყოს? 342 00:15:28,530 --> 00:15:29,973 სადაც გინდათ ამას? 343 00:15:29,973 --> 00:15:30,860 >> აუდიტორია: [INAUDIBLE] 344 00:15:30,860 --> 00:15:31,315 >> დევიდ ჯ Malan: უკაცრავად? 345 00:15:31,315 --> 00:15:32,380 >> აუდიტორია: ამას ბოლომდე. 346 00:15:32,380 --> 00:15:33,796 >> დევიდ ჯ Malan: ამას ბოლომდე. 347 00:15:33,796 --> 00:15:35,880 ასე რომ, მხოლოდ მეტი უფლება, გარეთ ამ ყუთში. 348 00:15:35,880 --> 00:15:38,710 რომელიც იქნებოდა, მაგრამ ეს გამოდის, რომ თქვენ ამის გაკეთება არ შეუძლიათ, რომ. 349 00:15:38,710 --> 00:15:41,350 იმიტომ, რომ თუ თქვენ არ სთხოვა ამ ბლოკი მეხსიერება, 350 00:15:41,350 --> 00:15:44,490 ეს შეიძლება იყოს შემთხვევითი, რომ ამ რომელიც გამოიყენება რაიმე სხვა ცვლადი 351 00:15:44,490 --> 00:15:45,030 საერთოდ. 352 00:15:45,030 --> 00:15:49,210 ვფიქრობ, უკან ერთი კვირის ან ასე რომ, როდესაც ჩვენ ჩაუყარა out Zamyla და Davin და Gabe სახელები 353 00:15:49,210 --> 00:15:49,930 მეხსიერებაში. 354 00:15:49,930 --> 00:15:51,638 მათ პირდაპირი გაგებით უკან დაბრუნება თავში დაბრუნება. 355 00:15:51,638 --> 00:15:53,550 ასე რომ ჩვენ შეგვიძლია არ არის აუცილებელი ენდობა, რომ ყველაფერს, რაც 356 00:15:53,550 --> 00:15:55,800 აქ არის შესაძლებელი ჩემთვის გამოყენება. 357 00:15:55,800 --> 00:15:56,990 >> ასე რომ, რა შეიძლება გავაკეთოთ? 358 00:15:56,990 --> 00:16:00,282 ისე, ერთხელ ხვდებიან უნდა მასივი ზომა შვიდი, 359 00:16:00,282 --> 00:16:02,490 შეიძლება მხოლოდ შექმნა მასივი ზომა შვიდი შემდეგ გამოიყენოთ 360 00:16:02,490 --> 00:16:05,950 ამისთვის მარყუჟი ან ხოლო მარყუჟის, კოპირება ახალი მასივი, 361 00:16:05,950 --> 00:16:09,680 და მერე რაღაცნაირად უბრალოდ, თავი დაეღწია ამ მასივი ან უბრალოდ შეწყვიტოს გამოყენება. 362 00:16:09,680 --> 00:16:12,130 მაგრამ ეს არ არის განსაკუთრებით ეფექტური. 363 00:16:12,130 --> 00:16:15,340 მოკლედ, კოლექტორები არ მისცეს თქვენ დინამიურად პასუხის. 364 00:16:15,340 --> 00:16:17,900 >> ასე რომ, ერთი მხრივ, თქვენ მიიღებთ წვდომის, რომელიც არის საოცარი. 365 00:16:17,900 --> 00:16:20,108 იმიტომ, რომ ეს საშუალებას გვაძლევს გავაკეთოთ რამ, როგორიცაა გათიშე და იბატონე, 366 00:16:20,108 --> 00:16:23,100 ორობითი ძებნა, რაც ჩვენ ისაუბრა ეკრანზე აქ. 367 00:16:23,100 --> 00:16:24,950 მაგრამ თქვენ ხატავს თავის კუთხეში. 368 00:16:24,950 --> 00:16:27,810 როგორც კი მოხვდა ბოლოს თქვენი მასივი, 369 00:16:27,810 --> 00:16:29,980 თქვენ უნდა გავაკეთოთ ძალიან ძვირადღირებული ოპერაცია 370 00:16:29,980 --> 00:16:33,910 ან ჩაწერის მთელი bunch of კოდი ახლა საქმე, რომ პრობლემა. 371 00:16:33,910 --> 00:16:36,680 >> მერე რა, რომ ნაცვლად გვქონდა რაღაც მოუწოდა სიაში, 372 00:16:36,680 --> 00:16:38,820 ან დაკავშირებული სიაში, კერძოდ? 373 00:16:38,820 --> 00:16:41,930 რა მოხდება, თუ ნაცვლად, რომელმაც მართკუთხედების დაბრუნება უკან, 374 00:16:41,930 --> 00:16:45,730 ჩვენ მართკუთხედების რომ დატოვოთ პატარა ცოტა wiggle ოთახი მათ შორის? 375 00:16:45,730 --> 00:16:49,670 და მიუხედავად იმისა, რომ მე შედგენილი ამ სურათი ან ადაპტირებული ამ სურათს 376 00:16:49,670 --> 00:16:54,696 ერთი ტექსტები აქ იქნება უკან უკან დაბრუნება ძალიან მოწესრიგებული, რეალურად, 377 00:16:54,696 --> 00:16:56,820 ერთ იმ მართკუთხედების შეიძლება აქ მეხსიერებაში. 378 00:16:56,820 --> 00:16:58,028 ერთი მათგანი შეიძლება იყოს აქ. 379 00:16:58,028 --> 00:17:00,420 ერთი მათგანი შეიძლება იყოს აქ, აქ და სხვ. 380 00:17:00,420 --> 00:17:02,910 >> მაგრამ რა, თუ ჩვენ მიიპყრო, ამ შემთხვევაში, ისრები 381 00:17:02,910 --> 00:17:05,650 რომ როგორმე დაუკავშირონ ეს მართკუთხედების ერთად? 382 00:17:05,650 --> 00:17:08,170 მართლაც, ჩვენ ვხედავთ, ტექნიკური განსახიერება ისარი. 383 00:17:08,170 --> 00:17:09,839 384 00:17:09,839 --> 00:17:13,710 რა გვაქვს გამოიყენება უკანასკნელ დღის განმავლობაში, რომ, ქვევმოთ hood, 385 00:17:13,710 --> 00:17:15,210 წარმომადგენელი arrow? 386 00:17:15,210 --> 00:17:16,290 387 00:17:16,290 --> 00:17:17,349 მაჩვენებელი, არა? 388 00:17:17,349 --> 00:17:19,780 >> მერე რა, რომ ნაცვლად მხოლოდ შენახვის ნომრები, 389 00:17:19,780 --> 00:17:23,130 როგორიცაა 9, 17, 22, 26, 34, თუ ჩვენ ინახება არა 390 00:17:23,130 --> 00:17:27,079 მხოლოდ რამდენიმე, მაგრამ მაჩვენებელი შემდეგი თითოეული ასეთი ნომერი? 391 00:17:27,079 --> 00:17:30,690 ასე, რომ ბევრი რამ, როგორც თქვენ თემა ნემსის მეშვეობით მთელი bunch of ქსოვილზე, 392 00:17:30,690 --> 00:17:32,950 რატომღაც გამათანაბრებელი რამ ერთად, ასევე შეგიძლიათ 393 00:17:32,950 --> 00:17:35,550 ჩვენ ერთად პოინტერები, როგორც incarnated მიერ ისრებით აქ, 394 00:17:35,550 --> 00:17:38,550 სახის ერთმანეთთან აკავშირებს, ეს ინდივიდუალური მართკუთხედების 395 00:17:38,550 --> 00:17:41,780 მიერ ეფექტურად გამოყენების მაჩვენებელი შემდეგი თითოეული ნომერი, რომელიც 396 00:17:41,780 --> 00:17:46,065 , გარკვეული შემდეგი ნომერი, რომელიც მიუთითებს, თავის მხრივ, გარკვეული შემდეგი ნომერი? 397 00:17:46,065 --> 00:17:47,940 ასე რომ, სხვა სიტყვებით რომ ვთქვათ, თუ ჩვენ რეალურად სურდა 398 00:17:47,940 --> 00:17:49,820 განახორციელოს მსგავსი რამ? 399 00:17:49,820 --> 00:17:53,610 ასევე, სამწუხაროდ, ამ მართკუთხედების, მინიმუმ ერთი 9, 17, 22, 400 00:17:53,610 --> 00:17:57,040 და ა.შ., ეს აღარ არის ლამაზი სკვერების ერთი ნომრები. 401 00:17:57,040 --> 00:17:59,960 ბოლოში, მართკუთხედი ქვემოთ 9, მაგალითად, 402 00:17:59,960 --> 00:18:04,330 წარმოადგენს რა უნდა კურსორი, 32 ბიტი. 403 00:18:04,330 --> 00:18:09,460 ახლა, მე ჯერ კიდევ არ იცის ნებისმიერი ტიპის მონაცემის C რომ გაძლევთ არა მხოლოდ int 404 00:18:09,460 --> 00:18:11,630 მაგრამ მაჩვენებელი საერთოდ. 405 00:18:11,630 --> 00:18:15,020 >> ასე რომ, რა არის გამოსავალი, თუ გვინდა, გამოგონება ჩვენი საკუთარი პასუხი ამ? 406 00:18:15,020 --> 00:18:15,760 ჰო? 407 00:18:15,760 --> 00:18:16,640 >> აუდიტორია: [INAUDIBLE] 408 00:18:16,640 --> 00:18:17,360 >> დევიდ ჯ Malan: რა არის ეს? 409 00:18:17,360 --> 00:18:17,880 >> აუდიტორია: New სტრუქტურა. 410 00:18:17,880 --> 00:18:19,590 >> დევიდ ჯ Malan: ჰო, რატომ არ უნდა შეიქმნას ახალი სტრუქტურა, 411 00:18:19,590 --> 00:18:20,920 ან C, struct? 412 00:18:20,920 --> 00:18:25,990 ჩვენ ვნახეთ structs ადრე, თუ მოკლედ, სადაც ჩვენ გვქონდა სტუდენტი სტრუქტურა 413 00:18:25,990 --> 00:18:27,780 მოსწონს ეს, რომელმაც სახელი და სახლი. 414 00:18:27,780 --> 00:18:31,980 In pset 3 ბრეაკოუტ გამოყენებულია მთელი bunch of structs-- GRect და GOvals 415 00:18:31,980 --> 00:18:34,810 რომ სტენფორდის შექმნა, რათა კასეტური ერთად. 416 00:18:34,810 --> 00:18:38,580 მერე რა, რომ ჩვენ ეს იგივე იდეა საკვანძო სიტყვები "typedef" და "struct," 417 00:18:38,580 --> 00:18:42,890 და შემდეგ რამდენიმე სტუდენტმა კონკრეტული პერსონალის, და განვითარება ამ შევიდა შემდეგი: 418 00:18:42,890 --> 00:18:46,210 typedef struct კვანძის და კვანძის უბრალოდ ძალიან generic კომპიუტერულ მეცნიერებათა 419 00:18:46,210 --> 00:18:49,980 ტერმინი რაღაც მონაცემები სტრუქტურა, კონტეინერის მონაცემები სტრუქტურა. 420 00:18:49,980 --> 00:18:53,900 კვანძი მე პრეტენზია ექნება int n, სრულიად მარტივია, 421 00:18:53,900 --> 00:18:58,810 და შემდეგ ცოტა მეტი cryptically, ეს მეორე ხაზი, struct კვანძის * შემდეგი. 422 00:18:58,810 --> 00:19:01,300 მაგრამ ნაკლებად ტექნიკურ ტერმინებში, რა არის, რომ მეორე ხაზი 423 00:19:01,300 --> 00:19:02,980 კოდი შიგნით Curly braces? 424 00:19:02,980 --> 00:19:03,737 ჰო? 425 00:19:03,737 --> 00:19:04,851 >> აუდიტორია: [INAUDIBLE] 426 00:19:04,851 --> 00:19:06,600 დევიდ ჯ Malan: მაჩვენებელი სხვა კვანძის. 427 00:19:06,600 --> 00:19:09,910 ასე რომ, მართლაც, სინტაქსი ცოტა cryptic. 428 00:19:09,910 --> 00:19:13,250 მაგრამ თუ თქვენ ეს ფაქტიურად, შემდეგი არის სახელი ცვლადი. 429 00:19:13,250 --> 00:19:14,410 რა არის მისი მონაცემები ტიპის? 430 00:19:14,410 --> 00:19:18,206 ეს პატარა verbose ამ დროს, მაგრამ ეს ტიპის struct კვანძის *. 431 00:19:18,206 --> 00:19:22,960 ნებისმიერ დროს, ჩვენ ვხედავთ, რომ რაღაც ვარსკვლავი, რომ ეს იმას ნიშნავს რომ მომცეთ, რომ მონაცემები ტიპის. 432 00:19:22,960 --> 00:19:26,810 ასე რომ, მომავალი, როგორც ჩანს, მომცეთ struct კვანძში. 433 00:19:26,810 --> 00:19:28,310 >> ახლა, რა არის struct კვანძის? 434 00:19:28,310 --> 00:19:31,044 ყურადღება მიაქციეთ, ხედავთ იმ იგივე სიტყვები, ზედა მარჯვენა. 435 00:19:31,044 --> 00:19:33,960 და მართლაც, თქვენ აგრეთვე სიტყვა "კვანძის" ქვემოთ აქ ბოლოში მარცხენა. 436 00:19:33,960 --> 00:19:35,640 და ეს არის რეალურად მხოლოდ მოხერხებულობისთვის. 437 00:19:35,640 --> 00:19:39,930 გაითვალისწინეთ, რომ ჩვენი სტუდენტური განმარტება არსებობს სიტყვა "სტუდენტი" მხოლოდ ერთხელ. 438 00:19:39,930 --> 00:19:42,510 და ეს იმიტომ, სტუდენტი ობიექტი არ იყო თვითმმართველობის რეფერენტული. 439 00:19:42,510 --> 00:19:45,340 არაფერია შიგნით სტუდენტი რომ სჭირდება აღვნიშნო, რომ ერთი სტუდენტი, 440 00:19:45,340 --> 00:19:45,610 persay. 441 00:19:45,610 --> 00:19:47,630 რომ იქნება ერთგვარი უცნაური რეალურ სამყაროში. 442 00:19:47,630 --> 00:19:50,880 >> მაგრამ კვანძი უკავშირდება სია, ჩვენ გვინდა კვანძის 443 00:19:50,880 --> 00:19:53,970 უნდა იყოს რეფერენტული მსგავსი ობიექტი. 444 00:19:53,970 --> 00:19:57,900 და ასე შეამჩნია ცვლილება აქ არ არის უბრალოდ, რა არის შიგნით Curly braces. 445 00:19:57,900 --> 00:20:00,800 მაგრამ ჩვენ სიტყვა "კვანძის" ზედა ასევე 446 00:20:00,800 --> 00:20:02,930 და დასძინა, რომ ბოლოში ნაცვლად "სტუდენტი". 447 00:20:02,930 --> 00:20:06,000 და ეს არის მხოლოდ ტექნიკური დეტალია ასე რომ, კიდევ ერთხელ, თქვენი მონაცემები სტრუქტურა 448 00:20:06,000 --> 00:20:11,380 შეიძლება თვითმმართველობის რეფერენტული, ისე, რომ კვანძის შეიძლება აღვნიშნო, რომ ერთი ასეთი კვანძის. 449 00:20:11,380 --> 00:20:13,840 >> რა არის ეს, საბოლოო ჯამში, აპირებს ნიშნავს ეს ჩვენთვის? 450 00:20:13,840 --> 00:20:17,560 ასევე, ერთი, ეს პერსონალის შიგნით არის შინაარსი ჩვენი კვანძში. 451 00:20:17,560 --> 00:20:19,360 ეს რამ აქ, მარჯვენა ზედა, მხოლოდ ისე, 452 00:20:19,360 --> 00:20:20,860 , კიდევ ერთხელ, ჩვენ შეგვიძლია ეხება საკუთარ თავს. 453 00:20:20,860 --> 00:20:23,401 და შემდეგ outermost პერსონალი, მიუხედავად იმისა, რომ კვანძის არის ახალი ტერმინი, 454 00:20:23,401 --> 00:20:25,500 ალბათ, მაინც იგივე როგორც სტუდენტი და რა 455 00:20:25,500 --> 00:20:27,520 იყო ქვევმოთ hood in SPL. 456 00:20:27,520 --> 00:20:31,095 >> ასე რომ, თუ ჩვენ ახლა უნდოდა ახორციელებს ამ დაკავშირებული სიაში, 457 00:20:31,095 --> 00:20:33,220 როგორ შეიძლება ჩვენ ვთარგმნით მსგავსი რამ კოდექსში? 458 00:20:33,220 --> 00:20:35,350 კარგად, მოდით უბრალოდ ვხედავ მაგალითად პროგრამა, რომელიც 459 00:20:35,350 --> 00:20:36,840 რეალურად იყენებს უკავშირდება სიაში. 460 00:20:36,840 --> 00:20:40,870 შორის დღევანდელი განაწილების კოდი არის პროგრამის მოუწოდა სია Zero. 461 00:20:40,870 --> 00:20:44,980 და თუ მე აწარმოებს ამ იქმნება super მარტივი GUI, გრაფიკული ინტერფეისი, 462 00:20:44,980 --> 00:20:46,460 მაგრამ ეს მართლაც მხოლოდ printf. 463 00:20:46,460 --> 00:20:50,930 და ახლა მე, თავს რამდენიმე მენიუ options-- წაშლა, ჩასმა, ძიება, 464 00:20:50,930 --> 00:20:51,750 და Traverse. 465 00:20:51,750 --> 00:20:52,630 და დატოვეს. 466 00:20:52,630 --> 00:20:55,970 ეს არის მხოლოდ საერთო ოპერაციების მონაცემები სტრუქტურა ცნობილია, როგორც ლინკი სიაში. 467 00:20:55,970 --> 00:20:58,409 >> ახლა, წაშლა აპირებს წაშალოთ ნომერი სიიდან. 468 00:20:58,409 --> 00:21:00,200 Insert აპირებს დაამატოთ რიგი სიაში. 469 00:21:00,200 --> 00:21:02,181 ძებნა აპირებს გამოიყურებოდეს რიგი სიაში. 470 00:21:02,181 --> 00:21:04,930 და გვერდის ავლით არის მხოლოდ ლამაზი გზა ამბობდა, გავლა სია, 471 00:21:04,930 --> 00:21:06,245 ბეჭდვა ეს, მაგრამ ეს არის ის. 472 00:21:06,245 --> 00:21:07,720 არ შეცვლის არანაირად. 473 00:21:07,720 --> 00:21:08,570 >> მოდით ცდილობენ ამ. 474 00:21:08,570 --> 00:21:10,160 მოდით წავიდეთ წინ და ტიპის 2. 475 00:21:10,160 --> 00:21:12,710 და შემდეგ მე ვაპირებ ჩადეთ ნომერი, ვთქვათ, 9. 476 00:21:12,710 --> 00:21:13,620 შევა. 477 00:21:13,620 --> 00:21:17,480 და ახლა ჩემი პროგრამა უბრალოდ დაპროგრამებული თქმა უნდა, სიაში არის 9. 478 00:21:17,480 --> 00:21:20,190 ახლა, თუ წავიდეთ წინ და არ ჩადეთ კიდევ ერთხელ, მოდით 479 00:21:20,190 --> 00:21:23,680 მომეცით წავიდეთ წინ და დააშორებს და ჩაწერეთ 17. 480 00:21:23,680 --> 00:21:25,770 ახლა ჩემს სიაში არის 9, მაშინ 17. 481 00:21:25,770 --> 00:21:27,750 თუ ამის გაკეთება ჩასმა ერთხელ, მოდით გამოტოვოთ ერთი. 482 00:21:27,750 --> 00:21:32,400 იმის ნაცვლად, რომ 22, თითო სურათს ჩვენ უკვე ეძებს აქ, ნება მომეცით გადასვლა წინ 483 00:21:32,400 --> 00:21:34,630 და ჩადეთ 26 შემდეგი. 484 00:21:34,630 --> 00:21:36,230 ამიტომ, მე ვაპირებ აკრიფოთ 26. 485 00:21:36,230 --> 00:21:37,755 სიაში არის როგორც ველოდები. 486 00:21:37,755 --> 00:21:40,630 მაგრამ ახლა, უბრალოდ, თუ ამ კოდექსით იქნება მოქნილი, ნება მომეცით, ახლა 487 00:21:40,630 --> 00:21:43,520 ტიპი 22, რომელიც, სულ მცირე, კონცეპტუალურად, თუ ჩვენ 488 00:21:43,520 --> 00:21:46,520 შენახვა ეს დახარისხებული, რაც მართლაც იქნება კიდევ ერთი მიზანი სწორედ ახლა, 489 00:21:46,520 --> 00:21:48,690 უნდა წავიდეს შორის 17 და 26. 490 00:21:48,690 --> 00:21:50,270 ასე რომ, მე დააჭიროთ. 491 00:21:50,270 --> 00:21:51,380 მართლაც, რომ მუშაობს. 492 00:21:51,380 --> 00:21:54,950 და ახლა ნება მომეცით ჩადეთ და ბოლოს, ერთ სურათზე, 34. 493 00:21:54,950 --> 00:21:55,450 >> ყველა უფლება. 494 00:21:55,450 --> 00:21:58,980 ასე რომ, ახლა ნება მომეცით ითვალისწინებს, რომ წაშლა და Traverse და ძიება ამის გაკეთება, 495 00:21:58,980 --> 00:21:59,760 ფაქტობრივად, მუშაობა. 496 00:21:59,760 --> 00:22:04,180 ფაქტობრივად, თუ მე აწარმოებს ძებნა, მოდით მოძებნოთ ნომერი 22, შეიყვანეთ. 497 00:22:04,180 --> 00:22:05,010 გაირკვა, 22. 498 00:22:05,010 --> 00:22:07,580 ასე რომ, სწორედ ამ პროგრამის მიხედვით Zero აკეთებს. 499 00:22:07,580 --> 00:22:10,230 >> მაგრამ რა არის რეალურად აპირებს on, რომელიც ახორციელებს ამ? 500 00:22:10,230 --> 00:22:14,530 პირველ რიგში, მე შეიძლება, და მართლაც მე არ, ფაილი სახელად list0.h. 501 00:22:14,530 --> 00:22:16,540 502 00:22:16,540 --> 00:22:20,690 და სადღაც არსებობს ამ ხაზი, typedef, struct კვანძის, 503 00:22:20,690 --> 00:22:24,850 მაშინ მე მაქვს ჩემი Curly braces, int n, და მაშინ struct-- რა განმარტება იყო? 504 00:22:24,850 --> 00:22:26,530 505 00:22:26,530 --> 00:22:28,545 Struct კვანძის შემდეგი. 506 00:22:28,545 --> 00:22:29,920 507 00:22:29,920 --> 00:22:31,045 ასე რომ, ჩვენ უნდა ვარსკვლავი. 508 00:22:31,045 --> 00:22:33,420 ახლა ტექნიკურად ჩვენ შეღწევას ჩვევა გრაფიკა აქ. 509 00:22:33,420 --> 00:22:35,670 თქვენ შეიძლება ნახოთ სახელმძღვანელოები და ონლაინ ცნობას ამის გაკეთება არის. 510 00:22:35,670 --> 00:22:36,660 ეს ფუნქციურად ექვივალენტური. 511 00:22:36,660 --> 00:22:37,980 ფაქტობრივად, ეს არის უფრო დამახასიათებელი. 512 00:22:37,980 --> 00:22:40,563 მაგრამ მე ვიქნები შეესაბამება იმას, რასაც ჩვენ ბოლო დროს, და ამის გაკეთება. 513 00:22:40,563 --> 00:22:42,350 და მერე ბოლოს, მე ვაპირებ ამის გაკეთება. 514 00:22:42,350 --> 00:22:45,550 >> ასე რომ header ფაილი სადღაც, list0.h 515 00:22:45,550 --> 00:22:49,200 დღეს არის ამ struct განმარტება, და იქნებ რაიმე სხვა პერსონალი. 516 00:22:49,200 --> 00:22:52,580 ამასობაში list0c არსებობს იქნება რამდენიმე რამ. 517 00:22:52,580 --> 00:22:54,740 მაგრამ ჩვენ ვაპირებთ დაიწყოს და არ დასრულდება ეს. 518 00:22:54,740 --> 00:22:59,690 List0.h ფაილი მინდა მოიცავს ჩემს C ფაილი. 519 00:22:59,690 --> 00:23:03,910 და მერე რაღაც მომენტში მე ვაპირებთ აქვს int, მთავარი, ბათილად. 520 00:23:03,910 --> 00:23:06,530 და შემდეგ მე ვაპირებ აქვს გარკვეული დავალებების აქ. 521 00:23:06,530 --> 00:23:10,620 მე ასევე აპირებს პროტოტიპი, როგორც ბათილად, ძიების, int, 522 00:23:10,620 --> 00:23:13,610 n, რომლის მიზანი ცხოვრებაში არის მოძიება ელემენტს. 523 00:23:13,610 --> 00:23:18,310 და შემდეგ ქვევით აქ I აცხადებენ, დღევანდელ კოდი, ბათილად, ძიების, int, N, 524 00:23:18,310 --> 00:23:21,020 არ მძიმით, მაგრამ ღია Curly braces. 525 00:23:21,020 --> 00:23:25,049 და ახლა მინდა, რომ როგორმე ძიება ელემენტის ამ სიაში. 526 00:23:25,049 --> 00:23:27,340 მაგრამ ჩვენ არ გვაქვს საკმარისი ინფორმაცია ეკრანზე ამჟამად. 527 00:23:27,340 --> 00:23:29,800 მე არ რეალურად წარმოდგენილია სიაში თავად. 528 00:23:29,800 --> 00:23:33,070 ასე რომ ერთი გზა ჩვენ შეგვიძლია განვახორციელოთ უკავშირდება სიაში პროგრამა 529 00:23:33,070 --> 00:23:37,520 არის მე ასეთი მინდა, რომ რამე ისევე როგორც აცხადებენ უკავშირდება სია აქ. 530 00:23:37,520 --> 00:23:40,520 სიმარტივის, მე ვაპირებ, რათა ამ გლობალურ, მიუხედავად იმისა, რომ ზოგადად, ჩვენ 531 00:23:40,520 --> 00:23:41,645 არ უნდა გავაკეთოთ ეს ძალიან ბევრი. 532 00:23:41,645 --> 00:23:43,260 მაგრამ ეს გაამარტივებს ამ მაგალითს. 533 00:23:43,260 --> 00:23:45,890 ასე რომ, მინდა განვაცხადო, უკავშირდება სიაში აქ. 534 00:23:45,890 --> 00:23:47,010 ახლა, როგორ შეიძლება ამის გაკეთება? 535 00:23:47,010 --> 00:23:48,810 536 00:23:48,810 --> 00:23:50,750 >> აი სურათს უკავშირდება სიაში. 537 00:23:50,750 --> 00:23:53,030 და მე ნამდვილად არ ვიცი იმ მომენტში როგორ 538 00:23:53,030 --> 00:23:56,710 მე ვაპირებ წასვლა შესახებ წარმოადგენს ამდენი რამ მხოლოდ ერთი 539 00:23:56,710 --> 00:23:58,040 ცვლადი მეხსიერებაში. 540 00:23:58,040 --> 00:23:59,160 მაგრამ ვფიქრობ, უკან ერთი წუთით. 541 00:23:59,160 --> 00:24:00,830 მთელი ამ ხნის განმავლობაში ჩვენ გვქონდა სტრიქონები, რომელიც ჩვენ მაშინ 542 00:24:00,830 --> 00:24:02,913 გამოვლენილი იქნება კოლექტორები პერსონაჟი, რომელიც ჩვენ მაშინ 543 00:24:02,913 --> 00:24:05,740 გამოვლინდა, რომ მხოლოდ კურსორი პირველი ხასიათი 544 00:24:05,740 --> 00:24:08,890 მასივი გმირები რომ null წყდება. 545 00:24:08,890 --> 00:24:13,530 ასე რომ, ლოგიკა, და ამ სურათი სახის სათესლე თქვენი აზრები, 546 00:24:13,530 --> 00:24:17,964 რა საჭიროა ჩვენ რეალურად წერენ ჩვენს კოდი წარმოადგენს უკავშირდება სიაში? 547 00:24:17,964 --> 00:24:21,130 რამდენად ეს ინფორმაცია გვჭირდება ხელში C კოდი, იტყვით? 548 00:24:21,130 --> 00:24:22,654 549 00:24:22,654 --> 00:24:23,154 ჰო? 550 00:24:23,154 --> 00:24:24,738 >> აუდიტორია: ჩვენ უნდა მომცეთ კვანძში. 551 00:24:24,738 --> 00:24:26,237 დევიდ ჯ Malan: A მომცეთ კვანძის. 552 00:24:26,237 --> 00:24:29,320 კერძოდ, რომელიც კვანძის რომ თქვენი ინსტინქტები იყოს შენარჩუნება მომცეთ? 553 00:24:29,320 --> 00:24:30,026 >> აუდიტორია: პირველი კვანძი. 554 00:24:30,026 --> 00:24:31,942 >> დევიდ ჯ Malan: ჰო, ალბათ მხოლოდ პირველი. 555 00:24:31,942 --> 00:24:34,030 და შენიშნავს, პირველი კვანძი სხვადასხვა ფორმის. 556 00:24:34,030 --> 00:24:37,690 ეს მხოლოდ ნახევარი ზომა struct, იმიტომ, რომ ეს მართლაც მხოლოდ კურსორი. 557 00:24:37,690 --> 00:24:44,650 რა შეგიძლიათ მართლაც არ არის განაცხადოს, უკავშირდება სიაში იყოს ტიპის კვანძის *. 558 00:24:44,650 --> 00:24:47,780 და მოდით ეძახით პირველი და ინიციალიზაცია იგი null. 559 00:24:47,780 --> 00:24:49,910 ასე რომ, null, კიდევ ერთხელ მოდის იმ სურათს აქ. 560 00:24:49,910 --> 00:24:53,620 არა მხოლოდ null გამოიყენება, როგორც, როგორც სპეციალური დაბრუნების ღირებულება რამ, როგორიცაა GetString 561 00:24:53,620 --> 00:24:57,770 და malloc, null, ასევე ნულოვანი მაჩვენებელი, ნაკლებობა მაჩვენებელი, 562 00:24:57,770 --> 00:24:58,430 თუ გნებავთ. 563 00:24:58,430 --> 00:25:00,309 ეს უბრალოდ ნიშნავს, არაფერი არ აქ. 564 00:25:00,309 --> 00:25:02,100 ახლა პირველად, მე ვერ მოვისმინეთ უწოდა არაფერი. 565 00:25:02,100 --> 00:25:04,200 მე შეეძლო მას "სია" ან ნებისმიერი რაოდენობის სხვა რამ. 566 00:25:04,200 --> 00:25:06,960 მაგრამ მე ამას "პირველი", ისე, რომ ეს ხაზები ამ სურათს. 567 00:25:06,960 --> 00:25:10,280 ასე რომ, როგორც სიმებიანი გამოისახება მისამართს პირველი byte, 568 00:25:10,280 --> 00:25:11,280 ასე რომ შეგიძლიათ უკავშირდება სიაში. 569 00:25:11,280 --> 00:25:13,480 და ჩვენ ვხედავთ, სხვა მონაცემები სტრუქტურები, წარმოდგენილი იყოს 570 00:25:13,480 --> 00:25:16,700 მხოლოდ ერთი მაჩვენებელი, 32-bit arrow, მიუთითებს 571 00:25:16,700 --> 00:25:18,740 პირველივე კვანძის სტრუქტურა. 572 00:25:18,740 --> 00:25:20,340 >> მაგრამ ახლა მოდით მოსალოდნელია პრობლემა. 573 00:25:20,340 --> 00:25:23,230 თუ მე მხოლოდ დამახსოვრების ჩემი პროგრამა მისამართი 574 00:25:23,230 --> 00:25:27,220 პირველი კვანძი, პირველი ოთხკუთხედი ამ მონაცემების სტრუქტურას, 575 00:25:27,220 --> 00:25:31,760 რა ჰქონდა უკეთესი იქნება საქმე, განხორციელების დანარჩენი ჩემს სიაში? 576 00:25:31,760 --> 00:25:35,820 რა არის მთავარი დეტალი, რომელიც აპირებს იმისათვის, რათა ეს რეალურად მუშაობს? 577 00:25:35,820 --> 00:25:39,250 და "რეალურად მუშაობს" მე ნიშნავს, ისევე როგორც სიმებიანი, 578 00:25:39,250 --> 00:25:42,180 მოდით წავიდეთ პირველი ხასიათი in Davin სახელზე მეორე, 579 00:25:42,180 --> 00:25:44,755 მესამე, იმ მეოთხე, ბოლომდე, 580 00:25:44,755 --> 00:25:47,880 ვიცით, როდესაც ჩვენ ბოლოს უკავშირდება სია, რომელიც ასე გამოიყურება? 581 00:25:47,880 --> 00:25:50,035 582 00:25:50,035 --> 00:25:50,660 მაშინ, როდესაც ეს null. 583 00:25:50,660 --> 00:25:53,640 და მე სწორედ ამ სახის როგორც როგორიცაა ელექტრო ინჟინერი ძალა, 584 00:25:53,640 --> 00:25:56,420 პატარა დამიწების სიმბოლო, სახის. 585 00:25:56,420 --> 00:25:58,246 მაგრამ ეს მხოლოდ იმას ნიშნავს, null ამ შემთხვევაში. 586 00:25:58,246 --> 00:26:00,370 თქვენ შეგიძლიათ დახაზოთ იგი ნებისმიერი რაოდენობის გზები, მაგრამ ამ ავტორის 587 00:26:00,370 --> 00:26:02,800 მოხდა გამოიყენოს ეს სიმბოლო აქ. 588 00:26:02,800 --> 00:26:06,260 >> ასე რომ, სანამ ჩვენ კაბელის ყველა ამ კვანძების ერთად, 589 00:26:06,260 --> 00:26:08,600 მხოლოდ დამახსოვრების, სადაც პირველი არის ის, ცოტა ხნის 590 00:26:08,600 --> 00:26:11,760 როგორც ჩვენ დააყენა სპეციალური სიმბოლო ძალიან ბოლო კვანძის სიაში, 591 00:26:11,760 --> 00:26:15,130 და ჩვენ ვიყენებთ null, იმიტომ, რომ ის, რაც ჩვენ გვაქვს ჩვენს ხელთ არსებული, 592 00:26:15,130 --> 00:26:16,480 ამ სიაში არის სრული. 593 00:26:16,480 --> 00:26:20,190 და მაშინაც კი, თუ მე მხოლოდ მოგცემთ მომცეთ პირველ ელემენტს, თქვენ, პროგრამისტი, 594 00:26:20,190 --> 00:26:22,486 რა თქმა უნდა, შეამოწმონ დანარჩენი მას. 595 00:26:22,486 --> 00:26:24,360 მაგრამ მოდით მოდით, რომ თქვენი გონება wander ცოტა, 596 00:26:24,360 --> 00:26:26,140 თუ ისინი არ უკვე საკმაოდ wandered-- რა არის 597 00:26:26,140 --> 00:26:28,723 იქნება გაშვებული დრო მოძიებაში არაფერი ამ სიაში? 598 00:26:28,723 --> 00:26:30,450 599 00:26:30,450 --> 00:26:33,470 Damn it, ეს დიდი O of n, რაც ცუდი არ არის, რომ სამართლიანობა. 600 00:26:33,470 --> 00:26:34,800 მაგრამ ეს არის სწორხაზოვანი. 601 00:26:34,800 --> 00:26:37,980 ჩვენ უარი რა ფუნქცია მასივები მოძრავი მეტი 602 00:26:37,980 --> 00:26:43,130 მიმართ ამ სურათს დინამიურად ნაქსოვი ერთად ან დაკავშირებულია კვანძების? 603 00:26:43,130 --> 00:26:44,970 604 00:26:44,970 --> 00:26:46,687 ჩვენ მოცემული შემთხვევითი წვდომის. 605 00:26:46,687 --> 00:26:48,770 მასივი არის ლამაზი, რადგან მათემატიკურად ყველაფერი 606 00:26:48,770 --> 00:26:50,340 უკან დაბრუნება თავში დაბრუნება. 607 00:26:50,340 --> 00:26:52,370 მიუხედავად იმისა, რომ ამ სურათს გამოიყურება საკმაოდ, და კიდევ 608 00:26:52,370 --> 00:26:55,830 იმისა, რომ ჰგავს ეს კვანძების ლამაზად Spaced გარდა, რეალურად 609 00:26:55,830 --> 00:26:56,830 ისინი შეიძლება იყოს სადმე. 610 00:26:56,830 --> 00:27:01,590 OX1, Ox50, Ox123, Ox99, ამ კვანძების შეიძლება იყოს სადმე. 611 00:27:01,590 --> 00:27:05,960 იმის გამო, რომ malloc არ გამოყოს მეხსიერება საწყისი ბევრი, მაგრამ სადმე ბევრი. 612 00:27:05,960 --> 00:27:09,080 აუცილებელი არ არის, ვიცით, რომ ეს იქნება თავში დაბრუნება თავში დაბრუნება. 613 00:27:09,080 --> 00:27:12,460 და ასე ამ სურათის რეალობაში არ იქნება საკმაოდ საკმაოდ. 614 00:27:12,460 --> 00:27:16,140 >> ასე რომ, ის აპირებს ცოტა მუშაობა განახორციელოს ამ ფუნქციას. 615 00:27:16,140 --> 00:27:17,880 მოდით განახორციელოს ძიების არის. 616 00:27:17,880 --> 00:27:20,250 და ვნახავთ, როგორი ჭკვიანი გზა ამით. 617 00:27:20,250 --> 00:27:24,660 ასე რომ, თუ მე ვარ ძებნის ფუნქცია და მე მოცემული ცვლადი, რიცხვი n 618 00:27:24,660 --> 00:27:28,490 უნდა ვეძებოთ, მე უნდა იცოდეს ახალი სინტაქსი ეძებს შიგნით 619 00:27:28,490 --> 00:27:32,400 სტრუქტურა, რომელიც არის მიუთითა, რათა იპოვოს n. 620 00:27:32,400 --> 00:27:33,210 ასე რომ, მოდით ეს. 621 00:27:33,210 --> 00:27:36,030 >> ასე რომ, პირველ რიგში, მე ვაპირებ წავიდეთ წინ და აცხადებენ კვანძის *. 622 00:27:36,030 --> 00:27:39,400 და მე ვაპირებ მოვუწოდო მას მაჩვენებელი, მხოლოდ კონვენციას. 623 00:27:39,400 --> 00:27:41,710 და მე ვაპირებ ინიციალიზაცია მას პირველი. 624 00:27:41,710 --> 00:27:43,770 და ახლა მე შემიძლია ამის გაკეთება რიგ გზები. 625 00:27:43,770 --> 00:27:45,436 მაგრამ მე ვაპირებ მიიღოს საერთო მიდგომა. 626 00:27:45,436 --> 00:27:50,180 მიუხედავად იმისა, რომ მაჩვენებელი არ არის ტოლი, null, და ეს მოქმედებს სინტაქსი. 627 00:27:50,180 --> 00:27:54,550 და ეს მხოლოდ იმას ნიშნავს, ამის შემდეგ, ასე რომ სანამ თქვენ არ მიუთითებს არაფერი. 628 00:27:54,550 --> 00:27:55,800 რა მინდა ამის გაკეთება? 629 00:27:55,800 --> 00:28:01,939 >> თუ მაჩვენებელი dot n, ნება მომეცით მოდის უკან რომ, შეადგენს შეადგენს რა? 630 00:28:01,939 --> 00:28:03,105 რა ღირებულება მე ეძებს? 631 00:28:03,105 --> 00:28:04,920 632 00:28:04,920 --> 00:28:06,590 ფაქტობრივი n მიღებულ იქნა. 633 00:28:06,590 --> 00:28:09,020 ასე რომ, აქ არის კიდევ ერთი ფუნქცია C და მრავალ ენაზე. 634 00:28:09,020 --> 00:28:13,705 მიუხედავად იმისა, რომ სტრუქტურა მოუწოდა კვანძის აქვს მნიშვნელობა n, სრულიად ლეგიტიმური 635 00:28:13,705 --> 00:28:17,530 ასევე აქვს ადგილობრივი არგუმენტი ან ცვლადში n. 636 00:28:17,530 --> 00:28:20,085 იმიტომ, რომ თუნდაც ჩვენ კი, ადამიანის თვალში, შეიძლება გამოიყოს 637 00:28:20,085 --> 00:28:22,087 რომ ეს n სავარაუდოდ განსხვავდება ამ n. 638 00:28:22,087 --> 00:28:23,420 იმის გამო, რომ სინტაქსი არის სხვადასხვა. 639 00:28:23,420 --> 00:28:26,211 თქვენ მოხვდით dot და მაჩვენებელი, იმის გამო, რომ ამ ერთი არსებობს ასეთი რამ. 640 00:28:26,211 --> 00:28:27,290 ასე რომ, ეს არის OK. 641 00:28:27,290 --> 00:28:29,120 რომ კარგადაა მოვუწოდებთ მათ, რომ იგივე რამ. 642 00:28:29,120 --> 00:28:32,380 >> თუ მე ეს არ ვარ, აპირებს მინდა, რომ რამე 643 00:28:32,380 --> 00:28:35,000 როგორიცაა განვაცხადო, რომ ჩვენ ი n. 644 00:28:35,000 --> 00:28:37,930 და ჩვენ დავტოვებთ, როგორც კომენტარის ან pseudocode კოდი. 645 00:28:37,930 --> 00:28:40,190 სხვაგან, და აქ არის საინტერესო ნაწილი, რა 646 00:28:40,190 --> 00:28:47,320 არ მინდა ამის გაკეთება, თუ მიმდინარე კვანძის არ შეიცავს ო, რომ აღელვებს? 647 00:28:47,320 --> 00:28:50,700 როგორ შემიძლია მიღწევის შემდეგ? 648 00:28:50,700 --> 00:28:53,710 თუ ჩემი თითი მომენტი, არის PTR, და ეს 649 00:28:53,710 --> 00:28:55,920 მიუთითებს, რასაც პირველი მიუთითებს, 650 00:28:55,920 --> 00:28:59,290 როგორ გადავინაცვლოთ my finger შემდეგი კვანძის კოდი? 651 00:28:59,290 --> 00:29:01,915 ისე, რა breadcrumb ჩვენ აპირებს დაიცვას ამ შემთხვევაში? 652 00:29:01,915 --> 00:29:03,464 653 00:29:03,464 --> 00:29:04,380 აუდიტორია: [INAUDIBLE]. 654 00:29:04,380 --> 00:29:05,630 დევიდ ჯ Malan: ჰო, ასე შემდეგ. 655 00:29:05,630 --> 00:29:06,640 656 00:29:06,640 --> 00:29:09,824 ასე რომ, თუ მე დაბრუნდეს ჩემი კოდი აქ, მართლაც, მე 657 00:29:09,824 --> 00:29:12,990 ვაპირებ წავიდეთ წინ და აცხადებენ, მაჩვენებელი, რომელიც არის მხოლოდ დროებითი ცვლადი ეს 658 00:29:12,990 --> 00:29:15,320 უცნაური სახელი, ptr, მაგრამ ის ისევე temp-- 659 00:29:15,320 --> 00:29:19,234 მე ვაპირებ მითითებული მაჩვენებელი უდრის რასაც მაჩვენებელი is-- 660 00:29:19,234 --> 00:29:22,150 და ისევ, ეს იქნება ცოტა buggy for მომენტში dot შემდეგ. 661 00:29:22,150 --> 00:29:23,551 662 00:29:23,551 --> 00:29:26,550 სხვა სიტყვებით, მე ვაპირებ, რომ ჩემი finger რომ მიუთითებს ამ კვანძში 663 00:29:26,550 --> 00:29:31,247 და მე ვაპირებ ვთქვა, თქვენ იცით, რა, შევხედოთ მომდევნო სფეროში 664 00:29:31,247 --> 00:29:33,330 და გადაადგილება თითის რასაც ის მიუთითებს. 665 00:29:33,330 --> 00:29:35,163 და ამ აპირებს ვიმეორებ, ვიმეორებ, ვიმეორებ. 666 00:29:35,163 --> 00:29:37,630 მაგრამ როდის my finger შეწყვიტოს აკეთებს არაფერს? 667 00:29:37,630 --> 00:29:40,095 როგორც კი რა ხაზი კოდი ჩათვლით წელს? 668 00:29:40,095 --> 00:29:40,970 აუდიტორია: [INAUDIBLE] 669 00:29:40,970 --> 00:29:43,060 დევიდ ჯ Malan: თუ წერტილი, ხოლო მაჩვენებელი არ არის ტოლი null. 670 00:29:43,060 --> 00:29:44,900 რაღაც მომენტში ჩემი თითი იქნება მიუთითებს null 671 00:29:44,900 --> 00:29:47,070 და მე ვაპირებ უნდა გააცნობიეროს ეს ბოლომდე ამ სიაში. 672 00:29:47,070 --> 00:29:48,910 ახლა, ეს არის პატარა თეთრი ტყუილი სიმარტივის. 673 00:29:48,910 --> 00:29:51,580 გამოდის, რომ მიუხედავად იმისა, რომ გავიგე, ამ dot ნოტაცია 674 00:29:51,580 --> 00:29:55,220 სტრუქტურები, მაჩვენებელი არ არის struct. 675 00:29:55,220 --> 00:29:56,580 ptr რა? 676 00:29:56,580 --> 00:29:58,350 უბრალოდ უნდა იყოს უფრო nitpicky. 677 00:29:58,350 --> 00:29:59,720 678 00:29:59,720 --> 00:30:01,360 ეს მაჩვენებელი კვანძის. 679 00:30:01,360 --> 00:30:03,120 ეს არ არის კვანძის თავად. 680 00:30:03,120 --> 00:30:06,650 თუ არ მქონდა ვარსკვლავი აქ, მაჩვენებელი absolutely-- ეს კვანძი. 681 00:30:06,650 --> 00:30:08,650 ეს არის, როგორც კვირას დეკლარაცია ცვლადი, 682 00:30:08,650 --> 00:30:10,120 მიუხედავად იმისა, რომ სიტყვა "კვანძის" არის ახალი. 683 00:30:10,120 --> 00:30:13,860 >> მაგრამ როგორც კი ჩვენ გააცნობს ვარსკვლავი, ეს არის მომცეთ კვანძში. 684 00:30:13,860 --> 00:30:17,960 და სამწუხაროდ, თქვენ არ შეგიძლიათ გამოიყენოთ dot ნოტაცია მაჩვენებელი. 685 00:30:17,960 --> 00:30:21,070 თქვენ უნდა გამოვიყენოთ arrow ნოტაცია, რომელიც, საოცრად, 686 00:30:21,070 --> 00:30:23,470 არის პირველი შემთხვევა, ნებისმიერი ნაჭერი სინტაქსი გამოიყურება ინტუიციური. 687 00:30:23,470 --> 00:30:25,245 ეს სიტყვა ჰგავს arrow. 688 00:30:25,245 --> 00:30:26,370 და ისე, რომ კარგია. 689 00:30:26,370 --> 00:30:28,995 და ქვემოთ აქ ფაქტიურად ჰგავს arrow. 690 00:30:28,995 --> 00:30:31,870 ასე რომ, მე ვფიქრობ, რომ ის la-- მე არ ვფიქრობ მე ზედმეტად ჩადენილი აქ მე 691 00:30:31,870 --> 00:30:34,120 ვფიქრობ, რომ ბოლო ახალი ნაჭერი სინტაქსი ჩვენ ვაპირებთ ვხედავ. 692 00:30:34,120 --> 00:30:36,500 და საბედნიეროდ, ეს მართლაც უფრო ინტუიტიური. 693 00:30:36,500 --> 00:30:40,090 >> ახლა, იმ თქვენ, რომლებიც ალბათ ურჩევნია ძველი გზა, 694 00:30:40,090 --> 00:30:42,550 თქვენ შეგიძლიათ კვლავ გამოიყენოთ dot ნოტაცია. 695 00:30:42,550 --> 00:30:45,380 მაგრამ როგორც პოსტი ორშაბათს საუბრის პირველი 696 00:30:45,380 --> 00:30:50,530 უნდა წავიდეთ იქ, წასვლა, რომ მიმართოს და შემდეგ მიმართონ სფეროში. 697 00:30:50,530 --> 00:30:51,897 ასე რომ, ეს სწორია. 698 00:30:51,897 --> 00:30:53,730 და გულწრფელად ვამბობ, რომ ეს არის ცოტა მეტი pedantic. 699 00:30:53,730 --> 00:30:56,530 თქვენ ფაქტიურად განაცხადა, რომ dereference მაჩვენებელი და იქ. 700 00:30:56,530 --> 00:30:59,320 შემდეგ აითვისებდა .n, სფეროში მოუწოდა n. 701 00:30:59,320 --> 00:31:01,370 მაგრამ გულწრფელად ვამბობ, არავის არ სურს აკრიფოთ ან წაიკითხა ეს. 702 00:31:01,370 --> 00:31:03,620 და ასე, რომ მსოფლიო გამოგონილი arrow ნოტაცია, რომელიც 703 00:31:03,620 --> 00:31:06,980 უდრის, იდენტური, ეს მხოლოდ სინტაქსური შაქარი. 704 00:31:06,980 --> 00:31:10,570 ასე ლამაზი გზა ამბობდა ამ უკეთესია, ან გამოიყურება მარტივი. 705 00:31:10,570 --> 00:31:12,296 >> ასე რომ, ახლა მე ვაპირებ, რომ ერთი რამ. 706 00:31:12,296 --> 00:31:15,420 მე ვაპირებ ვთქვა, "შესვენების" ერთხელ მე აღმოჩნდა, რომ ეს ასე რომ არ შეინახოს ეძებს მას. 707 00:31:15,420 --> 00:31:17,620 მაგრამ ეს არის არსი საძიებო ფუნქცია. 708 00:31:17,620 --> 00:31:21,710 მაგრამ ეს არის ბევრი ადვილია, და ბოლოს, არ გავლა კოდი. 709 00:31:21,710 --> 00:31:25,570 ეს მართლაც ფორმალური განხორციელება ძებნა დღევანდელ განაწილების კოდი. 710 00:31:25,570 --> 00:31:30,530 მე ვერ გაბედავს ამბობენ, რომ ჩანართით არ არის განსაკუთრებით fun ფეხით გაიარა 711 00:31:30,530 --> 00:31:33,180 ვიზუალურად, არც წაშლა, მაშინაც კი, თუმცა იმ დღის ბოლოს, 712 00:31:33,180 --> 00:31:35,460 ისინი მოვხარშოთ ქვემოთ საკმაოდ მარტივი heuristics. 713 00:31:35,460 --> 00:31:36,330 >> ასე რომ, მოდით ეს. 714 00:31:36,330 --> 00:31:39,250 თუ თქვენ იუმორი ჩემთვის აქ, მე რათა bunch of სტრესი ბურთები. 715 00:31:39,250 --> 00:31:40,620 მოუტანა bunch of ნომრები. 716 00:31:40,620 --> 00:31:46,562 და შესაძლოა მივიღებთ რამდენიმე მოხალისეები წარმოადგენს 9, 17, 20, 22, 29, 34? 717 00:31:46,562 --> 00:31:48,270 ასე რომ, არსებითად, ყველას ვინ არის დღეს აქ. 718 00:31:48,270 --> 00:31:50,170 719 00:31:50,170 --> 00:31:52,760 რომ იყო ერთი, ორი, სამი, ოთხი, ხუთი, ექვსი ადამიანი. 720 00:31:52,760 --> 00:31:55,740 და მე უკვე ვთხოვე წასვლა ვხედავთ, ერთი უკან ბადებს ხელში. 721 00:31:55,740 --> 00:32:01,910 OK, ერთი, ორი, სამი, ოთხი, ხუთ მიადევნე თვალი ჩატვირთვა balance-- ექვსი. 722 00:32:01,910 --> 00:32:03,051 OK, თქვენ ექვსი მოდის up. 723 00:32:03,051 --> 00:32:04,050 ჩვენ გვჭირდება სხვა ადამიანები. 724 00:32:04,050 --> 00:32:05,460 ჩვენ მოუტანა დამატებითი სტრესი ბურთები. 725 00:32:05,460 --> 00:32:08,200 და თუ შეიძლება, რაღაც მომენტში, ხაზი 726 00:32:08,200 --> 00:32:10,490 საკუთარი თავი, ისევე, როგორიცაა ამ სურათს აქ. 727 00:32:10,490 --> 00:32:15,200 728 00:32:15,200 --> 00:32:15,959 >> ყველა უფლება. 729 00:32:15,959 --> 00:32:17,125 ვნახოთ, რა გქვია? 730 00:32:17,125 --> 00:32:17,550 >> აუდიტორია: Andrew. 731 00:32:17,550 --> 00:32:18,800 >> დევიდ ჯ Malan: Andrew, თქვენ ხართ ნომერი 9. 732 00:32:18,800 --> 00:32:19,540 კარგია თქვენთან შეხვედრა. 733 00:32:19,540 --> 00:32:20,400 აქ თქვენ. 734 00:32:20,400 --> 00:32:21,593 735 00:32:21,593 --> 00:32:22,176 აუდიტორია: Jen. 736 00:32:22,176 --> 00:32:22,662 დევიდ ჯ Malan: Jen. 737 00:32:22,662 --> 00:32:23,162 დავით. 738 00:32:23,162 --> 00:32:23,765 ნომერი 17. 739 00:32:23,765 --> 00:32:24,950 740 00:32:24,950 --> 00:32:25,450 დიახ? 741 00:32:25,450 --> 00:32:26,400 >> აუდიტორია: მე Julia. 742 00:32:26,400 --> 00:32:26,980 >> დევიდ ჯ Malan: Julia, დავით. 743 00:32:26,980 --> 00:32:27,545 ნომერი 20. 744 00:32:27,545 --> 00:32:28,507 745 00:32:28,507 --> 00:32:29,340 აუდიტორია: ქრისტიანი. 746 00:32:29,340 --> 00:32:30,715 დევიდ ჯ Malan: Christian, დავით. 747 00:32:30,715 --> 00:32:31,541 ნომერი 22. 748 00:32:31,541 --> 00:32:32,040 და? 749 00:32:32,040 --> 00:32:32,649 >> აუდიტორია: JP. 750 00:32:32,649 --> 00:32:33,440 დევიდ ჯ Malan: JP. 751 00:32:33,440 --> 00:32:34,880 29. 752 00:32:34,880 --> 00:32:37,080 ასე რომ, წავიდეთ წინ და მიიღოს in-- Uh oh. 753 00:32:37,080 --> 00:32:38,486 754 00:32:38,486 --> 00:32:38,985 Uh oh. 755 00:32:38,985 --> 00:32:39,650 756 00:32:39,650 --> 00:32:40,150 ლოდინის. 757 00:32:40,150 --> 00:32:41,360 758 00:32:41,360 --> 00:32:42,390 20. 759 00:32:42,390 --> 00:32:43,682 ვინმეს აქვს მარკერი? 760 00:32:43,682 --> 00:32:44,890 აუდიტორია: მე მაქვს Sharpie. 761 00:32:44,890 --> 00:32:45,660 დევიდ ჯ Malan: შენ Sharpie? 762 00:32:45,660 --> 00:32:46,159 OK. 763 00:32:46,159 --> 00:32:47,577 764 00:32:47,577 --> 00:32:49,160 და ვინმეს აქვს ნაჭერი ქაღალდი? 765 00:32:49,160 --> 00:32:51,562 766 00:32:51,562 --> 00:32:52,270 გადარჩენა ლექცია. 767 00:32:52,270 --> 00:32:53,810 768 00:32:53,810 --> 00:32:55,362 მოდის. 769 00:32:55,362 --> 00:32:56,320 აუდიტორია: ჩვენ მივიღეთ ეს. 770 00:32:56,320 --> 00:32:57,600 დევიდ ჯ Malan: ჩვენ მივიღეთ ის? 771 00:32:57,600 --> 00:32:58,577 ყველა უფლება, მადლობა. 772 00:32:58,577 --> 00:33:01,380 773 00:33:01,380 --> 00:33:02,520 აქ ჩვენ მივდივართ. 774 00:33:02,520 --> 00:33:03,582 იყო ეს თქვენ? 775 00:33:03,582 --> 00:33:04,540 თქვენ უბრალოდ გადაარჩინა დღეში. 776 00:33:04,540 --> 00:33:05,670 777 00:33:05,670 --> 00:33:07,220 ასე რომ, 29. 778 00:33:07,220 --> 00:33:10,510 779 00:33:10,510 --> 00:33:11,110 ყველა უფლება. 780 00:33:11,110 --> 00:33:13,360 781 00:33:13,360 --> 00:33:14,890 მე misspelled 29, მაგრამ OK. 782 00:33:14,890 --> 00:33:15,720 წავიდეთ წინ. 783 00:33:15,720 --> 00:33:18,114 ყველა უფლება, მე გაძლევთ თქვენი კალამი უკან მომენტალურად. 784 00:33:18,114 --> 00:33:19,280 ამიტომ, ჩვენ უნდა ეგ აქ. 785 00:33:19,280 --> 00:33:20,330 მოდით ერთი სხვა. 786 00:33:20,330 --> 00:33:23,750 Gabe, არ გსურთ, რომ ითამაშოს პირველ ელემენტს აქ? 787 00:33:23,750 --> 00:33:25,705 ჩვენ გვჭირდება თქვენ აღვნიშნო ამ შესანიშნავი ადამიანი. 788 00:33:25,705 --> 00:33:26,930 789 00:33:26,930 --> 00:33:31,030 ასე რომ, 9, 17, 20, 22, ერთგვარი 29 და შემდეგ 34. 790 00:33:31,030 --> 00:33:32,160 791 00:33:32,160 --> 00:33:33,325 ჩვენ არ დაკარგავს ვინმე? 792 00:33:33,325 --> 00:33:33,950 მე მაქვს 34. 793 00:33:33,950 --> 00:33:36,730 სადაც did-- OK, რომელსაც სურს იყოს 34? 794 00:33:36,730 --> 00:33:37,605 OK, მოდის up, 34. 795 00:33:37,605 --> 00:33:39,280 796 00:33:39,280 --> 00:33:41,220 ყველა უფლება, ეს იქნება კარგად ღირს მეტისმეტი იყო. 797 00:33:41,220 --> 00:33:41,550 რა გქვია? 798 00:33:41,550 --> 00:33:42,040 >> აუდიტორია: პეტრე. 799 00:33:42,040 --> 00:33:43,456 >> დევიდ ჯ Malan: პეტრე, მოდის up. 800 00:33:43,456 --> 00:33:46,810 ყველა უფლება, ასე რომ, აქ არის მთელი bunch of კვანძების. 801 00:33:46,810 --> 00:33:49,060 თითოეული თქვენგანი წარმოადგენს ერთი ამ ოთხკუთხედს. 802 00:33:49,060 --> 00:33:51,930 და Gabe, ოდნავ უცნაური კაცი, წარმოადგენს პირველი. 803 00:33:51,930 --> 00:33:54,850 ასე რომ, მისი მაჩვენებელი არის პატარა ეკრანზე, ვიდრე ყველას. 804 00:33:54,850 --> 00:33:58,120 და ამ შემთხვევაში, თითოეული თქვენი მარცხენა ხელში აპირებს ან აღვნიშნო ქვემოთ, 805 00:33:58,120 --> 00:34:01,085 ამით წარმოადგენს null, ამიტომ მხოლოდ არარსებობის მაჩვენებელი, 806 00:34:01,085 --> 00:34:03,210 ან ეს იქნება მიუთითებს კვანძში შემდეგი თქვენ. 807 00:34:03,210 --> 00:34:05,440 >> ასე რომ, ახლა თუ adorn საკუთარი თავი, როგორც სურათზეა 808 00:34:05,440 --> 00:34:07,585 აქ, წავიდეთ წინ და წერტილი ერთმანეთს, ერთად Gabe 809 00:34:07,585 --> 00:34:11,030 კერძოდ მიუთითებს ნომერი 9 წარმოადგენს სიაში. 810 00:34:11,030 --> 00:34:14,050 OK და ნომერი 34, თქვენი მარცხენა ხელის უბრალოდ უნდა მიუთითებს სართული. 811 00:34:14,050 --> 00:34:15,750 >> OK, ასე რომ, ეს უკავშირდება სიაში. 812 00:34:15,750 --> 00:34:17,580 ასე რომ, ეს არის სცენარი კითხვა. 813 00:34:17,580 --> 00:34:20,210 და მართლაც, ეს არის წარმომადგენლობითი კლასი პრობლემები 814 00:34:20,210 --> 00:34:21,929 რომ თქვენ შეიძლება ცდილობენ მოგვარებას კოდი. 815 00:34:21,929 --> 00:34:25,020 გსურთ საბოლოოდ ჩადეთ ახალ ელემენტს სიაში. 816 00:34:25,020 --> 00:34:27,494 ამ შემთხვევაში, ჩვენ ვაპირებთ ცდილობენ ჩასმა ნომერი 55. 817 00:34:27,494 --> 00:34:28,500 818 00:34:28,500 --> 00:34:30,860 მაგრამ იქ უნდა იყოს სხვადასხვა შემთხვევებში განიხილავს. 819 00:34:30,860 --> 00:34:34,409 და მართლაც, ეს იქნება ერთი საქართველოს დიდი სურათი takeaways აქ, არის, 820 00:34:34,409 --> 00:34:35,659 რა არის სხვადასხვა შემთხვევებში. 821 00:34:35,659 --> 00:34:39,120 რა არის სხვადასხვა პირობები და ფილიალები, რომ თქვენი პროგრამა შეიძლება ჰქონდეს? 822 00:34:39,120 --> 00:34:42,024 >> კარგად, თქვენ ცდილობთ კულტურა, რომელიც ჩვენ ვიცით, ახლა 55, 823 00:34:42,024 --> 00:34:44,650 მაგრამ თუ თქვენ არ იცით, წინასწარ კი, ვფიქრობ 824 00:34:44,650 --> 00:34:47,840 იყოფა მინიმუმ სამი შესაძლო სიტუაციაში. 825 00:34:47,840 --> 00:34:49,717 სად შეიძლება ახალი ელემენტი უნდა იყოს? 826 00:34:49,717 --> 00:34:51,050 აუდიტორია: და ბოლოს ან შუა. 827 00:34:51,050 --> 00:34:54,150 დევიდ ჯ Malan: ბოლოს კი, შუა, ან დასაწყისში. 828 00:34:54,150 --> 00:34:56,650 ასე, რომ აცხადებენ, არსებობს მინიმუმ სამი პრობლემა უნდა მოგვარდეს. 829 00:34:56,650 --> 00:34:58,691 მოდით აირჩიოს, რა, ალბათ, ალბათ უმარტივესი 830 00:34:58,691 --> 00:35:01,090 ერთი, სადაც ახალი ელემენტი ეკუთვნის დასაწყისში. 831 00:35:01,090 --> 00:35:04,040 ამიტომ, მე ვაპირებ, რომ აქვს კოდი, საკმაოდ როგორიცაა ძებნა, რომელიც მე დავწერე. 832 00:35:04,040 --> 00:35:07,670 და მე ვაპირებ აქვს ptr, რომელიც მე წარმოვადგენ ჩემი თითი, 833 00:35:07,670 --> 00:35:08,370 როგორც ყოველთვის. 834 00:35:08,370 --> 00:35:12,430 >> და მახსოვს, რა ღირებულება ჩვენ არ ვრთავ ptr to? 835 00:35:12,430 --> 00:35:15,300 ასე რომ, ჩვენ ინიციალიზაცია null თავდაპირველად. 836 00:35:15,300 --> 00:35:16,410 837 00:35:16,410 --> 00:35:19,770 მაგრამ მაშინ რა ვქნათ, როდესაც ჩვენ შიგნით ჩვენი ძებნის ფუნქცია? 838 00:35:19,770 --> 00:35:20,940 839 00:35:20,940 --> 00:35:24,870 ჩვენ ვაყენებთ მას ტოლი პირველი, რაც არ ნიშნავს, ამით. 840 00:35:24,870 --> 00:35:25,890 841 00:35:25,890 --> 00:35:30,570 თუ მე მითითებული ptr ტოლია პირველი, რასაც უნდა ჩემი მხრივ ნამდვილად იქნება მიუთითებს? 842 00:35:30,570 --> 00:35:31,070 უფლება. 843 00:35:31,070 --> 00:35:33,290 ასე რომ, თუ Gabe და მე ვაპირებთ თანაბარი უნდა იყოს ღირებულებების აქ, 844 00:35:33,290 --> 00:35:34,760 ჩვენ უნდა ორივე პუნქტი, ნომერი 9. 845 00:35:34,760 --> 00:35:36,420 >> ასე რომ, ეს იყო დასაწყისში ჩვენი ამბავი. 846 00:35:36,420 --> 00:35:38,700 და ახლა ეს მხოლოდ პირდაპირი, მიუხედავად იმისა, რომ სინტაქსი არის ახალი. 847 00:35:38,700 --> 00:35:40,580 კონცეპტუალურად, ეს უბრალოდ, ხაზოვანი ძებნა. 848 00:35:40,580 --> 00:35:42,750 55 უდრის 9? 849 00:35:42,750 --> 00:35:45,559 უფრო სწორად, ასე ვთქვათ, ნაკლები 9. 850 00:35:45,559 --> 00:35:47,600 იმიტომ, რომ მე ვცდილობ გაერკვნენ, სადაც დააყენოს 55. 851 00:35:47,600 --> 00:35:51,270 ნაკლებია, ვიდრე 9, არანაკლებ 17, ნაკლები მეტი 20, ნაკლები 22, ნაკლები 29, 852 00:35:51,270 --> 00:35:52,510 ნაკლებია, ვიდრე 34, არ. 853 00:35:52,510 --> 00:35:55,080 ასე რომ, ახლა ჩვენ საქმე ერთი მინიმუმ სამი. 854 00:35:55,080 --> 00:35:59,910 >> თუ მინდა ჩადეთ 55 ზე მეტი აქ, რა ხაზი კოდი უნდა მიიღონ შესრულებული? 855 00:35:59,910 --> 00:36:01,890 როგორ ამჯამად ამ სურათს ადამიანები უნდა შეიცვალოს? 856 00:36:01,890 --> 00:36:03,181 რა გავაკეთო ჩემი მარცხენა ხელი? 857 00:36:03,181 --> 00:36:04,530 858 00:36:04,530 --> 00:36:07,360 ეს უნდა იყოს null, თავდაპირველად, იმიტომ, რომ მე ბოლოს სიაში. 859 00:36:07,360 --> 00:36:09,318 და რა უნდა მოხდეს აქ პეტრე, იყო ის? 860 00:36:09,318 --> 00:36:10,520 861 00:36:10,520 --> 00:36:12,430 ის აშკარად აპირებს აღვნიშნო, რომ ჩემთვის. 862 00:36:12,430 --> 00:36:15,580 ასე, რომ აცხადებენ, არსებობს მინიმუმ ორი ხაზი კოდის ნიმუში კოდი, დღეს 863 00:36:15,580 --> 00:36:18,570 რომ აპირებს განახორციელოს ამ სცენარი დასძინა 55 კუდი. 864 00:36:18,570 --> 00:36:20,950 და შეიძლება მე ვინმე hop და მხოლოდ წარმოადგენს 55? 865 00:36:20,950 --> 00:36:22,200 ყველა უფლება, თქვენ ახალი 55. 866 00:36:22,200 --> 00:36:23,580 867 00:36:23,580 --> 00:36:27,054 >> ასე რომ, ახლა რა, თუ მომავალ სცენარი მოდის, 868 00:36:27,054 --> 00:36:29,720 და ჩვენ გვინდა ჩადეთ ზე დასაწყისში ან ხელმძღვანელი ამ სიაში? 869 00:36:29,720 --> 00:36:31,100 და რა არის თქვენი სახელი, ნომერი 55? 870 00:36:31,100 --> 00:36:31,420 >> აუდიტორია: Jack. 871 00:36:31,420 --> 00:36:32,295 >> დევიდ ჯ Malan: Jack? 872 00:36:32,295 --> 00:36:33,585 OK, კარგია თქვენთან შეხვედრა. 873 00:36:33,585 --> 00:36:34,210 სტუმარს ბორტზე. 874 00:36:34,210 --> 00:36:36,640 ასე რომ, ახლა ჩვენ ვაპირებთ ჩადეთ, ვთქვათ, ნომერი 5. 875 00:36:36,640 --> 00:36:39,840 აი მეორე შემთხვევაში სამი მოვედით აქამდე. 876 00:36:39,840 --> 00:36:43,050 ასე რომ, თუ 5 ეკუთვნის დასაწყისში, ვნახოთ, თუ როგორ ჩვენ ვხედავთ, რომ გარეთ. 877 00:36:43,050 --> 00:36:46,310 მე ინიციალიზაცია ჩემი ptr მომცეთ ნომერი 9 ერთხელ. 878 00:36:46,310 --> 00:36:49,140 და მივხვდი, რა, 5 ნაკლებია 9. 879 00:36:49,140 --> 00:36:50,880 ასე დაფიქსირება ამ სურათს გვაძლევს. 880 00:36:50,880 --> 00:36:54,820 ვის ხელშია, Gabe ან დავითის or-- რა არის 9 ნომერი სახელი? 881 00:36:54,820 --> 00:36:55,740 >> აუდიტორია: Jen. 882 00:36:55,740 --> 00:36:58,406 >> დევიდ ჯ Malan: Jen-ს hands-- რომელიც ჩვენს ხელში უნდა შეიცვალოს? 883 00:36:58,406 --> 00:36:58,905 884 00:36:58,905 --> 00:37:00,970 OK, ასე რომ Gabe მიუთითებს თუ რა არის? 885 00:37:00,970 --> 00:37:01,640 ჩემთვის. 886 00:37:01,640 --> 00:37:02,750 მე ვარ ახალი კვანძში. 887 00:37:02,750 --> 00:37:04,870 ამიტომ მე მხოლოდ სახის ნაბიჯი აქ, ვიზუალურად. 888 00:37:04,870 --> 00:37:06,435 და ამავე დროს რა აღვნიშნო, რომ? 889 00:37:06,435 --> 00:37:07,910 890 00:37:07,910 --> 00:37:09,020 ჯერ კიდევ, სადაც მე მიუთითებს. 891 00:37:09,020 --> 00:37:10,000 ასე რომ, ეს არის ის. 892 00:37:10,000 --> 00:37:13,717 ასე რომ, ნამდვილად ერთი ხაზი კოდი აფიქსირებს ამ კონკრეტულ საკითხთან დაკავშირებით, როგორც ჩანს. 893 00:37:13,717 --> 00:37:14,800 ყველა უფლება, ასე რომ კარგია. 894 00:37:14,800 --> 00:37:17,580 და შეიძლება ვინმეს შეიძლება placeholder 5? 895 00:37:17,580 --> 00:37:18,080 მოდის up. 896 00:37:18,080 --> 00:37:20,270 897 00:37:20,270 --> 00:37:21,320 ჩვენ კიდევ თქვენ მომავალი დრო. 898 00:37:21,320 --> 00:37:24,280 >> ყველა უფლება, ასე ახლა და როგორც განზე, სახელები 899 00:37:24,280 --> 00:37:28,510 მე არ მიღების გამოკვეთილ ნახსენები უფლება ახლა, Pred მაჩვენებელი, წინამორბედის მაჩვენებელი 900 00:37:28,510 --> 00:37:31,260 და ახალი მაჩვენებელი, რომ უბრალოდ სახელები მოცემულია 901 00:37:31,260 --> 00:37:35,280 ნიმუში კოდი მითითებას ან ჩემი ხელები, რომ სახის მიუთითებს გარშემო. 902 00:37:35,280 --> 00:37:36,060 რა გქვია? 903 00:37:36,060 --> 00:37:36,700 >> აუდიტორია: Christine. 904 00:37:36,700 --> 00:37:37,100 >> დევიდ ჯ Malan: Christine. 905 00:37:37,100 --> 00:37:38,090 სტუმარს ბორტზე. 906 00:37:38,090 --> 00:37:42,180 ყველა უფლება, მოდით ახლა განვიხილოთ ოდნავ უფრო შემაშფოთებელი სიტუაცია, 907 00:37:42,180 --> 00:37:46,350 რომლის დროსაც მინდა ჩადეთ რაღაც 26 ამ. 908 00:37:46,350 --> 00:37:47,090 20? 909 00:37:47,090 --> 00:37:47,590 რა? 910 00:37:47,590 --> 00:37:50,510 ამ are-- კარგია გვაქვს ამ კალამი. 911 00:37:50,510 --> 00:37:51,955 ყველა უფლება, 20. 912 00:37:51,955 --> 00:37:53,640 913 00:37:53,640 --> 00:37:57,570 თუ ვინმე ვერ ერთი ნაჭერი ქაღალდის მზად, უბრალოდ case-- ყველა უფლება. 914 00:37:57,570 --> 00:37:58,370 ოჰ, საინტერესოა. 915 00:37:58,370 --> 00:37:59,760 916 00:37:59,760 --> 00:38:02,390 კარგად, ეს არის მაგალითი ლექცია შეცდომა. 917 00:38:02,390 --> 00:38:03,894 OK, ასე რომ, რა არის თქვენი სახელი კვლავ? 918 00:38:03,894 --> 00:38:04,560 აუდიტორია: Julia. 919 00:38:04,560 --> 00:38:07,559 დევიდ ჯ Malan: Julia, შეგიძლიათ პოპ out და ვითომ თქვენ არასოდეს არსებობდა? 920 00:38:07,559 --> 00:38:09,040 OK, ეს არ მოხდა. 921 00:38:09,040 --> 00:38:09,680 დიდი მადლობა. 922 00:38:09,680 --> 00:38:12,180 ამიტომ ვარაუდობენ, რომ ჩვენ გვინდა ჩადეთ Julia ამ ბმის სიაში. 923 00:38:12,180 --> 00:38:13,780 იგი არის ნომერი 20. 924 00:38:13,780 --> 00:38:15,530 და რა თქმა უნდა, ის აპირებს მიეკუთვნება 925 00:38:15,530 --> 00:38:17,521 begin-- არ აღვნიშნო, არაფერი გაუკეთებია. 926 00:38:17,521 --> 00:38:20,020 ასე რომ, თქვენი მხრივ სახის იყოს ქვემოთ null ან რაღაც ნაგავი ღირებულება. 927 00:38:20,020 --> 00:38:21,210 მოდით გეტყვით სწრაფი ამბავი. 928 00:38:21,210 --> 00:38:22,980 მე მიუთითებს ნომერი 5 ამ დროს. 929 00:38:22,980 --> 00:38:23,880 მერე შეამოწმეთ 9. 930 00:38:23,880 --> 00:38:25,130 მერე შეამოწმეთ 17. 931 00:38:25,130 --> 00:38:26,247 მერე შეამოწმეთ 22. 932 00:38:26,247 --> 00:38:27,650 933 00:38:27,650 --> 00:38:32,485 და ვხვდები, Ooh, Julia უნდა წავიდეს, სანამ 22. 934 00:38:32,485 --> 00:38:33,580 935 00:38:33,580 --> 00:38:34,660 ასე რომ, რა უნდა მოხდეს? 936 00:38:34,660 --> 00:38:35,786 937 00:38:35,786 --> 00:38:36,910 რომლის ხელში უნდა შეიცვალოს? 938 00:38:36,910 --> 00:38:38,360 იულია, ჩემია, or-- რა არის თქვენი სახელი კვლავ? 939 00:38:38,360 --> 00:38:39,230 >> აუდიტორია: ქრისტიანი. 940 00:38:39,230 --> 00:38:40,060 >> დევიდ ჯ Malan: Christian ან? 941 00:38:40,060 --> 00:38:40,560 >> აუდიტორია: Andy. 942 00:38:40,560 --> 00:38:40,905 >> დევიდ ჯ Malan: Andy. 943 00:38:40,905 --> 00:38:41,654 ქრისტიანული და ენდი? 944 00:38:41,654 --> 00:38:44,280 945 00:38:44,280 --> 00:38:45,690 Andy საჭიროებს აღვნიშნო? 946 00:38:45,690 --> 00:38:46,780 947 00:38:46,780 --> 00:38:47,341 Julia. 948 00:38:47,341 --> 00:38:47,840 ყველა უფლება. 949 00:38:47,840 --> 00:38:48,960 ასე რომ, ენდი, გსურთ აღვნიშნო Julia? 950 00:38:48,960 --> 00:38:50,120 მაგრამ დაველოდოთ წუთში. 951 00:38:50,120 --> 00:38:53,260 ამბავი ჯერჯერობით, მე სახის ერთი 952 00:38:53,260 --> 00:38:56,800 პასუხისმგებელი, იმ გაგებით, რომ მაჩვენებელი არის ის, რომ ის, 953 00:38:56,800 --> 00:38:57,850 მოძრავი მეშვეობით სიაში. 954 00:38:57,850 --> 00:39:00,800 ჩვენ შეიძლება გვქონდეს სახელი ენდი, მაგრამ არ არსებობს ცვლადში Andy. 955 00:39:00,800 --> 00:39:04,320 მხოლოდ სხვა ცვლადი, ჩვენ გვაქვს არის პირველი, ვინც წარმოდგენილია Gabe. 956 00:39:04,320 --> 00:39:07,690 >> ასე რომ, ეს არის რეალურად რატომ ამით შორს ჩვენ არ სჭირდებოდა ეს. 957 00:39:07,690 --> 00:39:10,846 მაგრამ ახლა ეკრანზე არსებობს ვთქვათ ისევ Pred მაჩვენებელი. 958 00:39:10,846 --> 00:39:11,970 ნება მომეცით, უფრო ზუსტად. 959 00:39:11,970 --> 00:39:14,820 არის თუ არა ეს მაჩვენებელი, მე უკეთესი ცოტა უფრო ჭკვიანი 960 00:39:14,820 --> 00:39:15,950 , ჩემი iteration. 961 00:39:15,950 --> 00:39:19,580 თუ არ იბადება ჩემი გადის აქ ერთხელ, მიუთითებს აქ, მიუთითებს აქ. 962 00:39:19,580 --> 00:39:22,500 მაგრამ ნება მომეცით აქვს Pred მაჩვენებელი, წინამორბედის მაჩვენებელი, რომ 963 00:39:22,500 --> 00:39:24,740 სახის მიუთითებს ელემენტის I იყო მხოლოდ. 964 00:39:24,740 --> 00:39:27,330 ასე რომ, როდესაც მე აქ, ახლა ჩემი მარცხენა ხელის განახლება. 965 00:39:27,330 --> 00:39:29,370 როდესაც მე აქ ჩემი მარცხენა ხელის განახლება. 966 00:39:29,370 --> 00:39:33,090 და ახლა არა მხოლოდ მომცეთ ელემენტი, რომელიც მიდის შემდეგ Julia, 967 00:39:33,090 --> 00:39:36,300 მე მაინც უნდა მომცეთ Andy ელემენტს ადრე. 968 00:39:36,300 --> 00:39:39,430 ასე რომ თქვენ გაქვთ, არსებითად, breadcrumbs, თუ გნებავთ, 969 00:39:39,430 --> 00:39:41,500 ყველა საჭირო მითითებები. 970 00:39:41,500 --> 00:39:43,710 >> ასე რომ, თუ მე მიუთითებს ენდი და მე ასევე მიუთითებს 971 00:39:43,710 --> 00:39:47,105 ქრისტიანულ, რომლის ხელში უნდა აღინიშნოს სხვაგან? 972 00:39:47,105 --> 00:39:48,770 973 00:39:48,770 --> 00:39:51,960 ასე რომ, ენდი შეგიძლიათ აღვნიშნო Julia. 974 00:39:51,960 --> 00:39:54,460 Julia შეგიძლიათ აღვნიშნო ქრისტიანი. 975 00:39:54,460 --> 00:39:56,950 იმის გამო, რომ მას შეუძლია კოპირება ჩემი მარჯვენა ხელის მაჩვენებელი. 976 00:39:56,950 --> 00:40:00,044 და რომ ეფექტურად აყენებს თქვენ ისევ ამ ადგილას აქ. 977 00:40:00,044 --> 00:40:02,460 ასე მოკლედ, მიუხედავად იმისა, რომ ამ გვაძლევს სახის forever 978 00:40:02,460 --> 00:40:04,510 რეალურად განახლება დაკავშირებული სიაში, გააცნობიეროს 979 00:40:04,510 --> 00:40:06,580 რომ ოპერაციების შედარებით მარტივია. 980 00:40:06,580 --> 00:40:10,030 ეს ერთი, ორი, სამი ხაზების კოდი საბოლოოდ. 981 00:40:10,030 --> 00:40:12,780 მაგრამ გახვეული გარშემო იმ ხაზების კოდი, სავარაუდოდ, 982 00:40:12,780 --> 00:40:16,350 ცოტა ლოგიკა, რომელიც ეფექტურად სვამს კითხვას, სად ვართ ჩვენ? 983 00:40:16,350 --> 00:40:18,970 ვართ ჩვენ დასაწყისში, შუა, ან ბოლომდე? 984 00:40:18,970 --> 00:40:21,890 >> ახლა, რა თქმა უნდა, ზოგიერთი სხვა ოპერაციები შეიძლება განახორციელოს. 985 00:40:21,890 --> 00:40:24,880 და ეს სურათები აქ მხოლოდ ასახავს რაც ჩვენ გავაკეთეთ ადამიანები. 986 00:40:24,880 --> 00:40:26,080 რაც შეეხება მოხსნა? 987 00:40:26,080 --> 00:40:30,650 თუ მინდა, რომ, მაგალითად, ამოიღონ ნომერი 34 ან 55, 988 00:40:30,650 --> 00:40:34,680 მე ალბათ იგივე სახის კოდი, მაგრამ მე ვაპირებ ერთი ან ორი ნაბიჯი. 989 00:40:34,680 --> 00:40:36,110 იმიტომ, რომ რა არის ახალი? 990 00:40:36,110 --> 00:40:40,460 თუ წაშლა ვიღაცას დასასრულს, ისევე როგორც ნომერი 55 და შემდეგ 34, 991 00:40:40,460 --> 00:40:42,995 რაც ასევე უნდა შეიცვალოს როგორც მე, რომ? 992 00:40:42,995 --> 00:40:44,870 მე უნდა არ evict-- რა არის თქვენი სახელი კვლავ? 993 00:40:44,870 --> 00:40:45,380 >> აუდიტორია: Jack. 994 00:40:45,380 --> 00:40:46,255 >> დევიდ ჯ Malan: Jack. 995 00:40:46,255 --> 00:40:49,770 მე უნდა არა მხოლოდ evict-- უფასო Jack, ასე სიტყვასიტყვით მოვუწოდებთ თავისუფალი Jack, ან თუნდაც 996 00:40:49,770 --> 00:40:53,530 მაჩვენებელი არსებობს, მაგრამ ახლა რა უნდა შეიცვალოს, პიტერ? 997 00:40:53,530 --> 00:40:55,510 თავის მხრივ უკეთესი დაიწყება მიუთითებს ქვემოთ. 998 00:40:55,510 --> 00:40:59,300 რადგან, როგორც კი მოვუწოდებ უფასოდ ჯეკ, თუ პეტრეს კვლავ მიუთითებს ჯეკ 999 00:40:59,300 --> 00:41:02,530 და მე ამიტომ შენარჩუნება გადიოდა სია და ხელმისაწვდომობის ეს მაჩვენებელი, 1000 00:41:02,530 --> 00:41:05,650 ეს მაშინ, როცა ჩვენი ძველი მეგობარი სეგმენტაცია ბრალია, შესაძლოა, რეალურად დარტყმა. 1001 00:41:05,650 --> 00:41:07,860 იმიტომ, რომ ჩვენ, მეხსიერების თავში Jack. 1002 00:41:07,860 --> 00:41:10,760 >> შეგიძლიათ იქ უხერხულად მხოლოდ ერთი წუთით. 1003 00:41:10,760 --> 00:41:13,410 იმიტომ, რომ ჩვენ მხოლოდ რამდენიმე საბოლოო ოპერაცია განიხილოს. 1004 00:41:13,410 --> 00:41:15,600 მოხსნის ხელმძღვანელი სია, ან beginning-- და ამ ერთი 1005 00:41:15,600 --> 00:41:16,349 ცოტა შემაშფოთებელი. 1006 00:41:16,349 --> 00:41:19,640 იმიტომ, რომ ჩვენ უნდა ვიცოდეთ, რომ Gabe სახის განსაკუთრებული ამ პროგრამაში. 1007 00:41:19,640 --> 00:41:21,440 რადგან მართლაც, მას აქვს თავისი მაჩვენებელი. 1008 00:41:21,440 --> 00:41:24,860 ის არ არის მხოლოდ მიმდინარეობს მიუთითა, როგორც თითქმის ყველას აქ. 1009 00:41:24,860 --> 00:41:28,112 >> ასე რომ, როდესაც სიის სათავეში არის ამოღებულია, რომლის ხელში უნდა შეცვალოს? 1010 00:41:28,112 --> 00:41:29,070 რა არის თქვენი სახელი კვლავ? 1011 00:41:29,070 --> 00:41:29,450 >> აუდიტორია: Christine. 1012 00:41:29,450 --> 00:41:31,408 >> დევიდ ჯ Malan: მე ვარ საშინელი at სახელები, როგორც ჩანს. 1013 00:41:31,408 --> 00:41:34,011 ასე რომ, ქრისტინე და Gabe, რომლის ხელში უნდა შეიცვალოს 1014 00:41:34,011 --> 00:41:36,510 როდესაც ჩვენ ამოიღონ Christine, ნომერი 5, სურათზე? 1015 00:41:36,510 --> 00:41:37,550 1016 00:41:37,550 --> 00:41:38,820 OK, ასე რომ მოდით Gabe. 1017 00:41:38,820 --> 00:41:40,950 Gabe აპირებს აღვნიშნო, სავარაუდოდ, ერთი ნომერი 9. 1018 00:41:40,950 --> 00:41:42,230 1019 00:41:42,230 --> 00:41:44,642 მაგრამ შემდეგ რა უნდა მოხდეს? 1020 00:41:44,642 --> 00:41:46,600 აუდიტორია: Christine უნდა იყოს null [INAUDIBLE]. 1021 00:41:46,600 --> 00:41:50,244 დევიდ ჯ Malan: OK, ჩვენ, ალბათ make-- გავიგე "null" სადღაც. 1022 00:41:50,244 --> 00:41:51,410 აუდიტორია: Null და თავისუფალი მისი. 1023 00:41:51,410 --> 00:41:51,855 დევიდ ჯ Malan: null რა? 1024 00:41:51,855 --> 00:41:53,074 აუდიტორია: Null და თავისუფალი მისი. 1025 00:41:53,074 --> 00:41:54,490 დევიდ ჯ Malan: Null და თავისუფალი მისი. 1026 00:41:54,490 --> 00:41:55,422 ასე რომ, ეს ძალიან მარტივია. 1027 00:41:55,422 --> 00:41:58,380 და ეს შესანიშნავია, რომ თქვენ ახლა დალაგების იდგა იქ, არ, რომლებიც. 1028 00:41:58,380 --> 00:42:00,430 იმიტომ, რომ თქვენ უკვე decoupled სიიდან. 1029 00:42:00,430 --> 00:42:02,820 თქვენ ეფექტურად იქნა ობოლი სიიდან. 1030 00:42:02,820 --> 00:42:07,770 ასე რომ, ჩვენ უკეთესი მოვუწოდებთ თავისუფალი ამიერიდან Christine მისცეს, რომ მეხსიერების უკან. 1031 00:42:07,770 --> 00:42:10,240 წინააღმდეგ შემთხვევაში, ყოველ ჯერზე ჩვენ წაშლა კვანძის სიაში 1032 00:42:10,240 --> 00:42:14,230 ჩვენ შეიძლება მიღების სიაში მოკლე, მაგრამ არა რეალურად მცირდება 1033 00:42:14,230 --> 00:42:15,096 ზომა მეხსიერებაში. 1034 00:42:15,096 --> 00:42:17,720 ასე რომ, თუ ჩვენ შევინარჩუნოთ და დასძინა დასძინა, დასძინა რამ სიაში, 1035 00:42:17,720 --> 00:42:19,280 ჩემი კომპიუტერი შეიძლება ნელა და ნელა და ნელა, 1036 00:42:19,280 --> 00:42:21,740 რადგან მე გაშვებული out of მეხსიერება, მაშინაც კი, თუ მე არ ვარ რეალურად 1037 00:42:21,740 --> 00:42:25,580 გამოყენებით ქრისტინე bytes მეხსიერების უქმნით. 1038 00:42:25,580 --> 00:42:28,500 >> ამიტომ, საბოლოოდ, არსებობს სხვა სცენარი, რა თქმა უნდა მოხსნა 1039 00:42:28,500 --> 00:42:30,640 შუა, მოხსნის ბოლოს, როგორც დავინახეთ. 1040 00:42:30,640 --> 00:42:32,348 მაგრამ უფრო საინტერესო ახლა მთავარია, 1041 00:42:32,348 --> 00:42:34,770 იქნება განიხილოს ზუსტად რა ქრონომეტრაჟი არის. 1042 00:42:34,770 --> 00:42:36,640 ასე რომ, არა მარტო შეგიძლიათ შეინახოთ თქვენი ცალი ქაღალდის, თუ, Gabe, 1043 00:42:36,640 --> 00:42:38,640 თქვენ არ იბადება მიცემა ყველას სტრესი დაადასტურა. 1044 00:42:38,640 --> 00:42:42,100 დიდი მადლობა, რომ ჩვენი დაკავშირებული სიაში მოხალისეები აქ, თუ ეს შესაძლებელი იქნებოდა. 1045 00:42:42,100 --> 00:42:45,320 >> [ტაში] 1046 00:42:45,320 --> 00:42:46,700 >> დევიდ ჯ Malan: ყველა უფლება. 1047 00:42:46,700 --> 00:42:51,110 ასე რომ, რამდენიმე ანალიტიკური კითხვები მაშინ, თუ შეიძლება. 1048 00:42:51,110 --> 00:42:59,670 ჩვენ ვნახეთ ამ notation ადრე, დიდი O და ომეგა, ზედა საზღვრები 1049 00:42:59,670 --> 00:43:02,520 და ქვედა საზღვრები შესახებ ქრონომეტრაჟი ზოგიერთი ალგორითმი. 1050 00:43:02,520 --> 00:43:04,950 ასე რომ, მოდით მიაჩნიათ რამოდენიმე კითხვას. 1051 00:43:04,950 --> 00:43:07,090 >> ერთი, და ვუთხარით, ადრე, რა არის გაშვებული 1052 00:43:07,090 --> 00:43:10,647 დრო ძიება სიაში თვალსაზრისით დიდი O? 1053 00:43:10,647 --> 00:43:13,480 რა არის ზედა ზღვარი, რომელიც გაშვებული დრო ძებნას უკავშირდება სიაში 1054 00:43:13,480 --> 00:43:16,340 მიერ განხორციელებულ ჩვენი მოხალისეები აქ? 1055 00:43:16,340 --> 00:43:17,820 ეს დიდი O of n, წრფივი. 1056 00:43:17,820 --> 00:43:20,630 რადგან უარეს შემთხვევაში, ელემენტს, როგორიცაა 55, 1057 00:43:20,630 --> 00:43:23,830 ჩვენ შეიძლება ეძებს შეიძლება იყოს, სადაც ჯეკ იყო, ყველა გზა ბოლომდე. 1058 00:43:23,830 --> 00:43:28,250 და სამწუხაროდ, განსხვავებით მასივი ჩვენ ვერ მიეცით ამ დროს. 1059 00:43:28,250 --> 00:43:31,820 მიუხედავად იმისა, რომ ყველა ჩვენი ადამიანებს დალაგებულია მცირე ელემენტები, 5, 1060 00:43:31,820 --> 00:43:35,900 ყველა გზა მდე უფრო დიდი ელემენტი, 55, რომელიც, როგორც წესი, კარგია. 1061 00:43:35,900 --> 00:43:38,815 მაგრამ რა ვარაუდს აღარ მოგვცემს გავაკეთოთ? 1062 00:43:38,815 --> 00:43:39,775 1063 00:43:39,775 --> 00:43:40,650 აუდიტორია: [INAUDIBLE] 1064 00:43:40,650 --> 00:43:40,920 დევიდ ჯ Malan: ასე უთხარი ერთხელ? 1065 00:43:40,920 --> 00:43:41,800 აუდიტორია: შემთხვევითი წვდომის. 1066 00:43:41,800 --> 00:43:43,049 დევიდ ჯ Malan: შემთხვევითი წვდომის. 1067 00:43:43,049 --> 00:43:46,330 და, თავის მხრივ, ეს ნიშნავს, რომ არ შეუძლია აღარ გამოიყენოს სუსტი zeros, ინტუიცია, 1068 00:43:46,330 --> 00:43:49,365 და obviousness გამოყენებით ორობითი ძიება და გათიშე და დაიპყროთ. 1069 00:43:49,365 --> 00:43:51,240 იმის გამო, რომ მიუხედავად იმისა, რომ ადამიანები შეიძლება აშკარად 1070 00:43:51,240 --> 00:43:54,610 , რომ ენდი და ქრისტიანი უხეშად შუა სიაში, 1071 00:43:54,610 --> 00:43:57,670 ჩვენ მხოლოდ ვიცით, რომ, როგორც კომპიუტერი skimming სია 1072 00:43:57,670 --> 00:43:59,029 თავიდანვე. 1073 00:43:59,029 --> 00:44:00,570 ასე რომ, ჩვენ,, რომ წვდომის. 1074 00:44:00,570 --> 00:44:04,380 >> ასე რომ, დიდი O of n ახლა არის ზედა შეკრული ჩვენი ძებნის დროს. 1075 00:44:04,380 --> 00:44:07,920 რაც შეეხება omega ჩვენი ძებნის? 1076 00:44:07,920 --> 00:44:11,535 რა არის ქვედა შეკრული მოძიება გარკვეული რაოდენობის ამ სიაში? 1077 00:44:11,535 --> 00:44:12,410 აუდიტორია: [INAUDIBLE] 1078 00:44:12,410 --> 00:44:13,040 დევიდ ჯ Malan: ასე უთხარი ერთხელ? 1079 00:44:13,040 --> 00:44:13,420 აუდიტორია: One. 1080 00:44:13,420 --> 00:44:13,800 დევიდ ჯ Malan: One. 1081 00:44:13,800 --> 00:44:14,760 ასე რომ, მუდმივი დრო. 1082 00:44:14,760 --> 00:44:17,020 საუკეთესო შემთხვევაში, ქრისტინე არის მართლაც დასაწყისში სიაში. 1083 00:44:17,020 --> 00:44:19,020 და ჩვენ ვეძებთ ნომერი 5, ამიტომ ჩვენ აღმოვაჩინეთ მისი. 1084 00:44:19,020 --> 00:44:19,787 ასე რომ, არ არის დიდი გარიგება. 1085 00:44:19,787 --> 00:44:22,370 მაგრამ ის რაღაც უნდა იყოს დასაწყისში სიაში ამ შემთხვევაში. 1086 00:44:22,370 --> 00:44:23,745 რაც შეეხება რაღაც წაშლა? 1087 00:44:23,745 --> 00:44:24,717 1088 00:44:24,717 --> 00:44:26,300 რა მოხდება, თუ გსურთ წაშალოთ ელემენტს? 1089 00:44:26,300 --> 00:44:29,200 რა არის ზედა ზღვარი და ქვედა შეკრული წაშლისას რაღაც უკავშირდება 1090 00:44:29,200 --> 00:44:29,699 სიაში? 1091 00:44:29,699 --> 00:44:35,195 1092 00:44:35,195 --> 00:44:36,070 აუდიტორია: [INAUDIBLE] 1093 00:44:36,070 --> 00:44:36,420 დევიდ ჯ Malan: ასე უთხარი ერთხელ? 1094 00:44:36,420 --> 00:44:37,067 აუდიტორია: n. 1095 00:44:37,067 --> 00:44:38,900 დევიდ ჯ Malan: n არის მართლაც ზედა შეკრული. 1096 00:44:38,900 --> 00:44:41,700 იმიტომ, რომ ყველაზე ცუდ შემთხვევაში, ჩვენ ვცდილობთ წაშლა Jack, როგორც ჩვენ გავაკეთეთ. 1097 00:44:41,700 --> 00:44:43,050 ის ყველა გზა ბოლომდე. 1098 00:44:43,050 --> 00:44:45,419 იღებს us სამუდამოდ, ან N ნაბიჯები, რათა იპოვოს იგი. 1099 00:44:45,419 --> 00:44:46,460 ისე, რომ ზედა ზღვარი. 1100 00:44:46,460 --> 00:44:47,430 რომ არის წრფივი, დარწმუნებული ვარ. 1101 00:44:47,430 --> 00:44:50,970 და საუკეთესო შემთხვევაში ქრონომეტრაჟი, ან ქვედა საზღვრები, საუკეთესო შემთხვევაში, 1102 00:44:50,970 --> 00:44:51,975 იქნება მუდმივი დრო. 1103 00:44:51,975 --> 00:44:54,600 რადგან შესაძლოა, ჩვენ ვცდილობთ წაშლა ქრისტინე, და ჩვენ უბრალოდ გაუმართლა 1104 00:44:54,600 --> 00:44:55,558 ის დასაწყისში. 1105 00:44:55,558 --> 00:44:56,350 ახლა დაველოდოთ წუთში. 1106 00:44:56,350 --> 00:44:59,370 Gabe იყო დასაწყისში, და ჩვენ ასევე განაახლოთ Gabe. 1107 00:44:59,370 --> 00:45:01,150 ასე რომ, ეს არ იყო მხოლოდ ერთი ნაბიჯია. 1108 00:45:01,150 --> 00:45:04,210 ასე რომ მართლაც მუდმივი დროს, საუკეთესო შემთხვევაში, 1109 00:45:04,210 --> 00:45:06,345 უნდა ამოიღონ პატარა ელემენტს? 1110 00:45:06,345 --> 00:45:07,360 1111 00:45:07,360 --> 00:45:10,960 ეს არის, მიუხედავად იმისა, რომ ეს შეიძლება იყოს ორი, სამი, ან თუნდაც 100 ხაზების კოდი, 1112 00:45:10,960 --> 00:45:14,000 თუ ეს ერთი და იგივე ნომერი ხაზები, არ მარყუჟის, 1113 00:45:14,000 --> 00:45:16,577 და დამოუკიდებელი ზომა სია, აბსოლუტურად. 1114 00:45:16,577 --> 00:45:18,660 წაშლის ელემენტს დასაწყისში სიაში, 1115 00:45:18,660 --> 00:45:21,940 მაშინაც კი, თუ ჩვენ უნდა გაუმკლავდეთ Gabe, ჯერ კიდევ მუდმივი დროს. 1116 00:45:21,940 --> 00:45:24,220 >> ასე რომ, ეს, როგორც ჩანს, მასიური ნაბიჯი უკან. 1117 00:45:24,220 --> 00:45:27,000 და რა ნარჩენები დრო თუ, კვირაში ერთი და კვირას 1118 00:45:27,000 --> 00:45:30,250 ნულოვანი ჩვენ გვქონდა არა მხოლოდ pseudocode კოდი, მაგრამ ფაქტობრივი კოდი 1119 00:45:30,250 --> 00:45:35,780 განახორციელოს ის, რასაც ჟურნალი ბაზის n, ან შეხვიდეთ, უფრო სწორად, N, ბაზა 2, 1120 00:45:35,780 --> 00:45:37,150 თვალსაზრისით მისი ქრონომეტრაჟი. 1121 00:45:37,150 --> 00:45:40,710 რატომ heck გვინდა, რომ დაიწყოს გამოყენებით რაღაც უკავშირდება სიაში? 1122 00:45:40,710 --> 00:45:41,517 Yeah. 1123 00:45:41,517 --> 00:45:44,022 >> აუდიტორია: ასე რომ თქვენ შეგიძლიათ დაამატოთ ელემენტების მასივი. 1124 00:45:44,022 --> 00:45:46,230 დევიდ ჯ Malan: ასე რომ თქვენ შეგიძლიათ რჩეულებში ელემენტების მასივი. 1125 00:45:46,230 --> 00:45:47,550 და ესეც თემატური. 1126 00:45:47,550 --> 00:45:49,740 და ჩვენ კვლავაც ვხედავთ ეს არის, ეს ვაჭრობის, ბევრი 1127 00:45:49,740 --> 00:45:51,573 ისევე, როგორც ჩვენ ვნახეთ ვაჭრობის შერწყმა დალაგების. 1128 00:45:51,573 --> 00:45:54,606 ჩვენ შეიძლება მართლაც დააჩქაროს მოძიება ან დახარისხება, უფრო სწორად, 1129 00:45:54,606 --> 00:45:57,480 თუ ჩვენ დახარჯოს ცოტა მეტი სივრცე და დამატებითი ბლოკი მეხსიერება 1130 00:45:57,480 --> 00:45:58,760 ან მასივი შერწყმა დალაგების. 1131 00:45:58,760 --> 00:46:01,270 მაგრამ ჩვენ უფრო მეტი სივრცეში, მაგრამ ჩვენ დროის. 1132 00:46:01,270 --> 00:46:04,820 ამ შემთხვევაში, ჩვენ უარს დრო, მაგრამ ჩვენ 1133 00:46:04,820 --> 00:46:08,170 იძენს მოქნილობა, დინამიკას თუ გნებავთ, 1134 00:46:08,170 --> 00:46:10,280 რომელიც სავარაუდოდ დადებითი თვისება. 1135 00:46:10,280 --> 00:46:11,520 >> ჩვენ ასევე ხარჯავს სივრცეში. 1136 00:46:11,520 --> 00:46:13,710 რა გაგებით არის დაკავშირებული სიაში უფრო ძვირი 1137 00:46:13,710 --> 00:46:15,700 თვალსაზრისით სივრცეში, ვიდრე მასივი? 1138 00:46:15,700 --> 00:46:18,379 1139 00:46:18,379 --> 00:46:19,920 სად არის დამატებითი ფართი მოდის? 1140 00:46:19,920 --> 00:46:20,460 ჰო? 1141 00:46:20,460 --> 00:46:21,800 >> აუდიტორია: [INAUDIBLE] მაჩვენებელი. 1142 00:46:21,800 --> 00:46:23,310 >> დევიდ ჯ Malan: ჰო, ჩვენ ასევე აქვს მაჩვენებელი. 1143 00:46:23,310 --> 00:46:25,560 ასე რომ, ეს minorly შემაშფოთებელი რომ აღარ ვარ 1144 00:46:25,560 --> 00:46:27,780 მე შენახვა მხოლოდ int წარმოადგენენ int. 1145 00:46:27,780 --> 00:46:30,990 მე შენახვის int და მაჩვენებელი, რომელიც ასევე 32 ბიტი. 1146 00:46:30,990 --> 00:46:33,470 ასე რომ, მე სიტყვასიტყვით გაორმაგდა თანხის სივრცეში ჩართული. 1147 00:46:33,470 --> 00:46:36,040 ასე რომ, ვაჭრობის, მაგრამ რომელიც არის ამ შემთხვევაში int. 1148 00:46:36,040 --> 00:46:39,580 დავუშვათ, რომ თქვენ არ შენახვა int, მაგრამ ვარაუდობენ, თითოეულ ამ მართკუთხედების 1149 00:46:39,580 --> 00:46:43,290 ან თითოეული ეს ადამიანები არ წარმოადგენს ერთი სიტყვით, ინგლისური სიტყვა, რომელიც 1150 00:46:43,290 --> 00:46:46,430 შეიძლება იყოს ხუთი პერსონაჟი, 10 პერსონაჟები, იქნებ კიდევ უფრო. 1151 00:46:46,430 --> 00:46:49,940 შემდეგ დასძინა მხოლოდ 32 მეტი ბიტი შესაძლოა ნაკლები იყოს დიდი გარიგება. 1152 00:46:49,940 --> 00:46:52,160 >> რა მოხდება, თუ თითოეული სტუდენტები მიტინგზე 1153 00:46:52,160 --> 00:46:55,107 პირდაპირი გაგებით სტუდენტი structs რომ აქვს სახელები და სახლები და შესაძლოა 1154 00:46:55,107 --> 00:46:57,065 ტელეფონის ნომრები და Twitter ამუშავებს და ასე შემდეგ. 1155 00:46:57,065 --> 00:46:59,564 ასე რომ, ყველა სფეროებში დავიწყეთ ვსაუბრობთ მეორე დღეს, 1156 00:46:59,564 --> 00:47:02,410 ნაკლებად დიდი გარიგება, როგორც ჩვენი კვანძების უფრო საინტერესო 1157 00:47:02,410 --> 00:47:05,972 და დიდი გასატარებლად, eh, დამატებითი მხოლოდ კურსორი, რათა მათ ერთად. 1158 00:47:05,972 --> 00:47:07,180 მაგრამ ის ფაქტი, რომ ვაჭრობის. 1159 00:47:07,180 --> 00:47:09,560 და მართლაც, კოდი არის უფრო რთული, როგორც თქვენ 1160 00:47:09,560 --> 00:47:11,770 ვხედავ skimming მეშვეობით რომ კონკრეტულ მაგალითს. 1161 00:47:11,770 --> 00:47:14,302 მაგრამ რა, თუ იყო ზოგიერთი წმინდა გრაალი აქ. 1162 00:47:14,302 --> 00:47:17,010 რა მოხდება, თუ ჩვენ არ მიიღოს ნაბიჯი უკან მაგრამ მასიური წინ გადადგმული ნაბიჯია 1163 00:47:17,010 --> 00:47:19,180 და განახორციელოს მონაცემები სტრუქტურა მეშვეობით, რომელიც ჩვენ 1164 00:47:19,180 --> 00:47:22,870 შეგიძლიათ ელემენტებს, როგორიცაა ჯეკ ან ქრისტინე და სხვა ელემენტების 1165 00:47:22,870 --> 00:47:25,870 ამ მასივი ჭეშმარიტი მუდმივი დროს? 1166 00:47:25,870 --> 00:47:26,920 ძებნა მუდმივი. 1167 00:47:26,920 --> 00:47:28,320 წაშალე არის მუდმივი. 1168 00:47:28,320 --> 00:47:29,570 კულტურა არის მუდმივი. 1169 00:47:29,570 --> 00:47:32,260 ყველა ეს ოპერაცია მუდმივი. 1170 00:47:32,260 --> 00:47:33,750 რომ იქნება ჩვენი წმინდა გრაალი. 1171 00:47:33,750 --> 00:47:36,690 და ეს არის, სადაც ჩვენ გააშუქა მომავალი დრო. 1172 00:47:36,690 --> 00:47:38,600 აგრეთვე შეგიძლიათ შემდეგ. 1173 00:47:38,600 --> 00:47:39,371