1 00:00:00,000 --> 00:00:11,200 2 00:00:11,200 --> 00:00:12,580 >> დავით Malan: ყველა უფლება, მივესალმებით უკან. 3 00:00:12,580 --> 00:00:13,290 ეს არის CS50. 4 00:00:13,290 --> 00:00:15,130 ეს არის დაწყების კვირაში შვიდი. 5 00:00:15,130 --> 00:00:18,890 ასე რომ, ეს იყო მაშინ, როდესაც, ასე მეგონა, ჩვენ მინდა მიიღოს whirlwind ტური, სადაც ჩვენ 6 00:00:18,890 --> 00:00:20,760 შეჩერდით და სადაც ჩვენ ახლა მიმდინარეობს. 7 00:00:20,760 --> 00:00:23,310 >> ასე რომ, ეს ისაა შესაძლოა, გამოიწვია angst დროს გააკეთა. 8 00:00:23,310 --> 00:00:27,680 მაგრამ იმედია, თქვენ იწყებს acclimate, თუ რა ეს ნიშნავს აქ - 9 00:00:27,680 --> 00:00:32,670 ვარსკვლავი წარმოადგენს მაჩვენებელი, რომელიც უბრალოდ, რა, უფრო layman პირობები? 10 00:00:32,670 --> 00:00:33,400 ასე რომ, მისამართი. 11 00:00:33,400 --> 00:00:35,490 >> ასე რომ, ეს მისამართი რაღაც მეხსიერებაში. 12 00:00:35,490 --> 00:00:38,260 და დავიწყეთ კანი უკან ფენების რამდენიმე კვირის წინ, რამ მინდა 13 00:00:38,260 --> 00:00:41,800 GetString და სხვა მსგავსი ფუნქციები მთელი ამ ხნის განმავლობაში დაბრუნების 14 00:00:41,800 --> 00:00:46,010 მისამართები რამ მეხსიერებაში, ისევე როგორც მისამართი პირველი პერსონაჟი 15 00:00:46,010 --> 00:00:46,990 ზოგიერთი თანმიმდევრობით. 16 00:00:46,990 --> 00:00:50,360 >> ასე რომ, ჩვენ ასევე გააცნო valgrind, რომელიც თქვენ დაიწყება გამოყენება ამ პრობლემის 17 00:00:50,360 --> 00:00:53,380 დადგენილი არ არის, განსაკუთრებით მომავალი პრობლემა მითითებული ასევე. 18 00:00:53,380 --> 00:00:54,980 და valgrind აკეთებს იმას, რასაც ჩვენთვის? 19 00:00:54,980 --> 00:00:57,520 20 00:00:57,520 --> 00:01:01,020 ის ამოწმებს მეხსიერების ტბები, და ეს აგრეთვე ამოწმებს ბოროტად მეხსიერება. 21 00:01:01,020 --> 00:01:05,890 >> მას შეუძლია, გარკვეული ალბათობით, აღმოაჩინოს, თუ თქვენი კოდი აპირებს შეეხოთ მეხსიერება 22 00:01:05,890 --> 00:01:07,100 რომ ეს უბრალოდ არ უნდა. 23 00:01:07,100 --> 00:01:10,410 ასე რომ, არ არის აუცილებელი გაჟონვის, მაგრამ თუ გასცდება საზღვრების ზოგიერთი 24 00:01:10,410 --> 00:01:14,730 მასივი, და რეალურად აწარმოებს valgrind და გამოიწვიოს, რომ ქცევის ხოლო 25 00:01:14,730 --> 00:01:17,870 valgrind არის გაშვებული თქვენი პროგრამა არის გაშვებული შიგნით მას, თქვენ შეძლებთ 26 00:01:17,870 --> 00:01:21,460 შეტყობინებები ასე - "ინვალიდი წერენ of ზომა 4 ", რომელიც, გავიხსენოთ რამოდენიმე 27 00:01:21,460 --> 00:01:25,880 კვირის წინ იმას ნიშნავდა, რომ მე მქონდა შემთხვევით მინდა ერთ int შორს 28 00:01:25,880 --> 00:01:27,250 საზღვრებს გარეთ მასივი. 29 00:01:27,250 --> 00:01:30,790 ასე რომ ზომით 4 ნიშნავს აქ ზომა კონკრეტული int. 30 00:01:30,790 --> 00:01:35,260 >> ასე რომ მიიღოს reassurance, რომ valgrind ის გამომუშავება, ფორმატი, რომ, 31 00:01:35,260 --> 00:01:36,170 მხოლოდ ბარბაროსულ. 32 00:01:36,170 --> 00:01:40,180 ეს მართლაც ძნელი ვხედავ მეშვეობით არეულობას საინტერესო ინფორმაცია. 33 00:01:40,180 --> 00:01:42,910 ასე რომ, ის, რაც ჩვენ გავაკეთეთ აქ მხოლოდ ნაწყვეტია ზოგიერთი რამოდენიმე უფრო 34 00:01:42,910 --> 00:01:43,850 საინტერესო ხაზები. 35 00:01:43,850 --> 00:01:46,760 მაგრამ გააცნობიეროს, რომ 80% valgrind ნახვა გამომავალი იქნება ცოტა 36 00:01:46,760 --> 00:01:47,650 განადგურების. 37 00:01:47,650 --> 00:01:52,820 >> უბრალოდ ვეძებთ ნიმუშების ასეთი - ბათილად უფლება, არასწორი წავიკითხე, 40 bytes 38 00:01:52,820 --> 00:01:56,690 და ზოგიერთი რაოდენობის ბლოკის ნამდვილად დაკარგული, საკვანძო სიტყვა იგრძნობა. 39 00:01:56,690 --> 00:02:01,920 და რა თქვენ იმედია ვხედავ რაღაც სახის კვალი რა ფუნქცია 40 00:02:01,920 --> 00:02:03,340 შეცდომა, ფაქტობრივად, სისტემაში 41 00:02:03,340 --> 00:02:07,195 ამ შემთხვევაში აქ, რა ხაზი ჩემი კოდი იყო შეცდომა როგორც ჩანს? 42 00:02:07,195 --> 00:02:09,729 43 00:02:09,729 --> 00:02:14,130 >> 26 ფაილი სახელად memory.c, რომელიც მაგალითად ჩვენ თამაშობს 44 00:02:14,130 --> 00:02:14,890 დროს. 45 00:02:14,890 --> 00:02:16,460 ასე რომ, ეს, ალბათ, არ malloc. 46 00:02:16,460 --> 00:02:18,630 ეს იყო, ალბათ, ჩემს კოდი ნაცვლად. 47 00:02:18,630 --> 00:02:20,910 ასე რომ, ჩვენ დავინახავთ, ეს კიდევ ერთხელ და კიდევ დიდი ხნის განმავლობაში. 48 00:02:20,910 --> 00:02:24,080 >> ასე რომ scanf, ეს გამოვიდა in რამდენიმე ფორმები დღემდე. 49 00:02:24,080 --> 00:02:26,410 ჩვენ ვნახეთ sscanf მოკლედ. 50 00:02:26,410 --> 00:02:28,330 ეს იყო რაღაც რაოდენობის თქვენ საპირისპირო მხარეს ბურთის შევიდა თქვენს 51 00:02:28,330 --> 00:02:29,535 მზადება ვიქტორინა. 52 00:02:29,535 --> 00:02:33,130 და scanf ფაქტიურად რა CS50 ბიბლიოთეკის იყენებს ქვეშ 53 00:02:33,130 --> 00:02:36,560 hood საკმაოდ გარკვეული დრო, რათა მიიღონ შეიტანენ შესახებ. 54 00:02:36,560 --> 00:02:40,420 >> მაგალითად, თუ მე გადაადგილება მეტი CS50 მოწყობილობის აქ, ნება მომეცით გახსნა 55 00:02:40,420 --> 00:02:45,315 მაგალითად დღეს, რომ ე.წ. scanf-0.c და ეს სუპერ მარტივია. 56 00:02:45,315 --> 00:02:46,590 ეს მხოლოდ რამდენიმე ხაზი კოდი. 57 00:02:46,590 --> 00:02:50,880 მაგრამ ეს მეტყველებს იმაზე, მართლა როგორ getInt მუშაობს ყველა ამ დროს. 58 00:02:50,880 --> 00:02:54,710 >> ამ პროგრამაში აქ, ხაზი 16 , ცნობა, რომ ვაცხადებ, int. 59 00:02:54,710 --> 00:02:57,270 ასე რომ არ მითითებას, არაფერი ჯადოსნური იქ, უბრალოდ int. 60 00:02:57,270 --> 00:03:00,330 შემდეგ ხაზი 17, მე შეგახსენებთ მომხმარებლის რიგი, გთხოვთ. 61 00:03:00,330 --> 00:03:02,930 მაშინ გვიან 18, მე scanf აქ. 62 00:03:02,930 --> 00:03:06,910 და მე მითითებული, სახის როგორც printf, რომ მე ველოდებით გაცემა 63 00:03:06,910 --> 00:03:08,110 unquote პროცენტს i. 64 00:03:08,110 --> 00:03:10,920 >> ასე პროცენტს i, რა თქმა უნდა, აღნიშნავს int. 65 00:03:10,920 --> 00:03:14,580 მაგრამ შეამჩნია რა მეორე არგუმენტი scanf არის. 66 00:03:14,580 --> 00:03:17,350 როგორ დაახასიათებდით მეორე არგუმენტი შემდეგ მძიმე? 67 00:03:17,350 --> 00:03:19,450 რა არის ეს? 68 00:03:19,450 --> 00:03:20,670 >> ეს მისამართი x. 69 00:03:20,670 --> 00:03:25,490 ასე რომ, ეს მოსახერხებელია, რადგან უზრუნველყოფით scanf ერთად მისამართი x, რას 70 00:03:25,490 --> 00:03:29,560 რომ მისცეს, რომ ფუნქცია უნდა გავაკეთოთ? 71 00:03:29,560 --> 00:03:33,010 და არა მარტო იქ დადიან, არამედ რა? 72 00:03:33,010 --> 00:03:34,060 >> გააკეთეთ შეცვლის მას. 73 00:03:34,060 --> 00:03:38,080 იმის გამო, რომ თქვენ შეიძლება იქ, ეს ერთგვარი ისევე როგორც რუკაზე ადგილმდებარეობის მეხსიერებაში. 74 00:03:38,080 --> 00:03:41,900 ასე რომ, სანამ თქვენ მიერ მოწოდებული scanf, ან ნებისმიერი ფუნქციის ასეთი რუკა, რომელიც 75 00:03:41,900 --> 00:03:45,840 ფუნქციის წავალთ, და არა მარტო შეხედეთ ღირებულება, მაგრამ ასევე 76 00:03:45,840 --> 00:03:49,670 შეცვლის ღირებულება, რომელიც სასარგებლოა, თუ მიზანი ცხოვრებაში scanf არის 77 00:03:49,670 --> 00:03:53,060 სკანირების შეიტანენ შესახებ, კერძოდ ეხლა კლავიატურაზე. 78 00:03:53,060 --> 00:03:57,830 და ვ აღნიშნავს ფორმატირებული, ისევე, როგორც printf, ვ აღნიშნავს ფორმატირებული 79 00:03:57,830 --> 00:03:58,930 სიმებიანი რომ გსურთ ბეჭდვა. 80 00:03:58,930 --> 00:04:04,430 >> ასე რომ, მოკლედ, ამ ხაზის 18 უბრალოდ ამბობს, ცდილობენ წაიკითხონ int ეხლა მომხმარებლის 81 00:04:04,430 --> 00:04:10,420 კლავიატურის და ჩაწერს მას შიგნით x, ზე რაც არ უნდა მისამართზე x მოხდება ცხოვრობს. 82 00:04:10,420 --> 00:04:14,860 და მაშინ ბოლოს, ხაზის 19 მხოლოდ ამბობს, მადლობა int, ამ შემთხვევაში. 83 00:04:14,860 --> 00:04:15,940 >> ნება მომეცით, წავიდეთ წინ და ეს. 84 00:04:15,940 --> 00:04:18,570 ასე რომ scanf 0. 85 00:04:18,570 --> 00:04:20,130 ნება მომეცით წავიდეთ წინ და მასშტაბის სისტემაში 86 00:04:20,130 --> 00:04:22,960 წავალ და აწარმოებს ამ მიზნით წერტილების სლეში scanf 0. 87 00:04:22,960 --> 00:04:24,020 პუნქტების გთხოვთ? 88 00:04:24,020 --> 00:04:24,720 50. 89 00:04:24,720 --> 00:04:25,730 მადლობა 50. 90 00:04:25,730 --> 00:04:27,270 ასე რომ, ეს საკმაოდ მარტივია. 91 00:04:27,270 --> 00:04:28,160 >> ახლა რა არის ეს არ ვაკეთებთ? 92 00:04:28,160 --> 00:04:29,940 ეს არ აკეთებს მთელი bunch შეცდომის შემოწმება. 93 00:04:29,940 --> 00:04:33,000 მაგალითად, თუ არ ითანამშრომლებენ და მე არ აკრიფოთ ნომერი, მაგრამ 94 00:04:33,000 --> 00:04:37,860 ნაცვლად ვწერ რაღაც "hello," ეს მხოლოდ სახის უცნაურია. 95 00:04:37,860 --> 00:04:41,130 ასე რომ, ერთი რამ CS50 ბიბლიოთეკა აკეთებდა ჩვენთვის გარკვეული 96 00:04:41,130 --> 00:04:43,440 დრო არის, რომ reprompting და reprompting. 97 00:04:43,440 --> 00:04:49,320 >> კვალვ ფრაზა გაწვევას იყო cs50.c, და ეს იმ მიზეზით, რომ getInt in 98 00:04:49,320 --> 00:04:51,670 CS50 ბიბლიოთეკა ფაქტიურად მთელი რამოდენიმე ხაზების ხანგრძლივი აღმოჩნდა, რადგან ჩვენ 99 00:04:51,670 --> 00:04:53,190 შემოწმების სულელური პერსონალი მოსწონს ეს. 100 00:04:53,190 --> 00:04:55,730 ხომ შესახებ არ აძლევს ჩვენთან, ფაქტობრივად, int? 101 00:04:55,730 --> 00:04:57,910 ნუთუ მას მოგვცეს რაღაც ისევე როგორც ანბანურ წერილი? 102 00:04:57,910 --> 00:05:01,410 თუ ეს ასეა, ჩვენ გვინდა, რომ აღმოაჩინოს რომ და დაწეროთ მათ. 103 00:05:01,410 --> 00:05:03,915 >> მაგრამ რამ უფრო საინტერესო ამ მორიგი მაგალითია. 104 00:05:03,915 --> 00:05:09,840 თუ მე scanf-1.c, რა არის ერთი რაც ძირეულად შეიცვალა 105 00:05:09,840 --> 00:05:11,135 ამ მომავალი მაგალითად? 106 00:05:11,135 --> 00:05:13,690 107 00:05:13,690 --> 00:05:16,010 მე გამოყენებით char *, რა თქმა უნდა, ნაცვლად int. 108 00:05:16,010 --> 00:05:19,210 >> ასე რომ, ეს საინტერესოა, ვინაიდან char *, გავიხსენოთ, მართლაც მხოლოდ 109 00:05:19,210 --> 00:05:20,190 იგივე როგორც სიმებიანი. 110 00:05:20,190 --> 00:05:23,840 ასე რომ, ეს იგრძნობა იქნებ ეს სუპერ მარტივი განხორციელება GetString. 111 00:05:23,840 --> 00:05:26,010 მაგრამ მე peeled უკან ფენის საქართველოს CS50 ბიბლიოთეკა, ასე რომ მე ვარ 112 00:05:26,010 --> 00:05:27,550 მოუწოდებდა ამ char * ახლა. 113 00:05:27,550 --> 00:05:30,070 მოდით ვნახოთ, სად, თუ სადმე ჩვენ არასწორია. 114 00:05:30,070 --> 00:05:30,840 >> ხაზი 17 - 115 00:05:30,840 --> 00:05:33,950 კიდევ ერთხელ ვთქვა, გთხოვთ, მომეცი რამე, ამ შემთხვევაში, მხოლოდ. 116 00:05:33,950 --> 00:05:37,940 და მაშინ შემდეგ ხაზზე, მოვუწოდებ scanf, ერთხელ, რაც მას ფორმატში კოდი, 117 00:05:37,940 --> 00:05:39,310 მაგრამ ამ დროს პროცენტს s. 118 00:05:39,310 --> 00:05:41,900 შემდეგ კი ამ დროს, მე ვარ რაც მას ბუფერულ. 119 00:05:41,900 --> 00:05:43,550 >> ახლა შეამჩნია, მე არ იყენებს ampersand. 120 00:05:43,550 --> 00:05:47,120 მაგრამ რატომ არის, რომ ალბათ კარგი აქ? 121 00:05:47,120 --> 00:05:49,760 იმის გამო, რომ ის, რაც ბუფერული უკვე? 122 00:05:49,760 --> 00:05:50,770 უკვე მაჩვენებელი. 123 00:05:50,770 --> 00:05:51,650 უკვე მისამართი. 124 00:05:51,650 --> 00:05:54,510 >> და მოდით ეს სიტყვა "აღრეული," ნება მომეცით მხოლოდ მას s, მაგალითად, for 125 00:05:54,510 --> 00:05:55,050 სიმარტივის. 126 00:05:55,050 --> 00:05:58,250 მაგრამ მე მას ბუფერში რადგან ზოგადად, პროგრამირებაში, თუ თქვენ გაქვთ 127 00:05:58,250 --> 00:06:02,130 ბლოკი მეხსიერება, რომელიც სიმებიანი ნამდვილად უბრალოდ, შეიძლება ეძახით ბუფერულ. 128 00:06:02,130 --> 00:06:04,460 ეს ადგილი ინფორმაციის შესანახად. 129 00:06:04,460 --> 00:06:07,400 >> მსგავსი რამ, როგორიცაა YouTube, როდესაც ისინი buffering, ასე ვთქვათ, რომ 130 00:06:07,400 --> 00:06:10,270 მხოლოდ იმას ნიშნავს რომ ჩამოტვირთვის bits დან ინტერნეტისა და შენახვა მათ 131 00:06:10,270 --> 00:06:14,160 ადგილობრივი მასივი, ადგილობრივი ბლოკი მეხსიერება ისე რომ თქვენ შეგიძლიათ ნახოთ მოგვიანებით გარეშე 132 00:06:14,160 --> 00:06:16,830 ეს skipping ან ჩამოკიდებული თქვენ თამაშის დროს უკან. 133 00:06:16,830 --> 00:06:20,930 >> ასე რომ პრობლემა იმისა, იმიტომ, რომ მე ვეუბნებოდი scanf, ველით 134 00:06:20,930 --> 00:06:22,320 ნახატზე შესახებ. 135 00:06:22,320 --> 00:06:24,410 აი მისამართი ბლოკი მეხსიერება. 136 00:06:24,410 --> 00:06:26,180 დააყენა, რომ სიმებიანი არსებობს. 137 00:06:26,180 --> 00:06:31,230 რატომ არის, რომ ბლოკნოტებს მისცეს ჩვენს უბედურება, თუმცა? 138 00:06:31,230 --> 00:06:33,490 >> რა არის ეს? 139 00:06:33,490 --> 00:06:35,510 მე დაშვებული წვდომის რომ ნაწილი მეხსიერება? 140 00:06:35,510 --> 00:06:36,250 თქვენ იცით, მე არ ვიცი. 141 00:06:36,250 --> 00:06:39,210 იმის გამო, რომ არ ბუფერული იქნა ინიციალიზაცია არაფერი? 142 00:06:39,210 --> 00:06:39,820 ნამდვილად არ. 143 00:06:39,820 --> 00:06:43,090 ასე რომ, ეს არის ის, რაც ჩვენ უკვე მოუწოდებენ ნაგვის ღირებულება, რომელიც 144 00:06:43,090 --> 00:06:44,040 ოფიციალურად არ სიტყვა. 145 00:06:44,040 --> 00:06:49,200 ეს უბრალოდ ნიშნავს, რომ ჩვენ არ ვიცი რა bits შიგნით ოთხი ბაიტი, რომ 146 00:06:49,200 --> 00:06:51,240 მე არ გამოუყო ბუფერულ. 147 00:06:51,240 --> 00:06:52,450 >> მე არ მოუწოდა malloc. 148 00:06:52,450 --> 00:06:53,940 მე ნამდვილად არ მოუწოდა GetString. 149 00:06:53,940 --> 00:06:56,380 ასე რომ, ვინ იცის, რა ხდება რეალურად შიგნით ბუფერული? 150 00:06:56,380 --> 00:07:00,550 და მაინც ეუბნება scanf ბრმად, იქ ჩასვლა და ამით რა შესახებ აკრეფილი. 151 00:07:00,550 --> 00:07:04,460 >> რა არის სავარაუდოდ გამოიწვევს ჩვენს კოდი თუ ჩვენ აწარმოებს იგი? 152 00:07:04,460 --> 00:07:05,700 ალბათ segfault. 153 00:07:05,700 --> 00:07:07,970 შესაძლოა, არა, მაგრამ ალბათ segfault. 154 00:07:07,970 --> 00:07:10,620 და მე ვიტყვი, შესაძლოა, არა იმიტომ, რომ ზოგჯერ თქვენ, ზოგჯერ 155 00:07:10,620 --> 00:07:11,380 თქვენ არ მიიღოს segfault. 156 00:07:11,380 --> 00:07:14,280 ხანდახან უბრალოდ გაუმართლა, მაგრამ ის მაინც იქნება 157 00:07:14,280 --> 00:07:15,340 ხარვეზების ჩვენი პროგრამა. 158 00:07:15,340 --> 00:07:17,060 >> ნება მომეცით, წავიდეთ წინ და შეადგინოს ამ. 159 00:07:17,060 --> 00:07:18,280 მე ვაპირებ ამის გაკეთება ძველი სკოლა გზა. 160 00:07:18,280 --> 00:07:23,825 ასე რომ clang ტირე 0, scanf-1, scanf-1.c, შეიტანეთ. 161 00:07:23,825 --> 00:07:24,720 ვაი, მოძველებულია სკოლა. 162 00:07:24,720 --> 00:07:26,550 ვნახოთ. 163 00:07:26,550 --> 00:07:28,440 სად წავიდე? 164 00:07:28,440 --> 00:07:29,700 Oh, char * ბუფერულ. 165 00:07:29,700 --> 00:07:33,595 166 00:07:33,595 --> 00:07:35,130 Oh, მადლობა - 167 00:07:35,130 --> 00:07:36,930 შენახვა, OK - 168 00:07:36,930 --> 00:07:37,690 ძალიან ძველი სკოლა. 169 00:07:37,690 --> 00:07:38,900 ყველა უფლება, ეს იყო, ხოლო. 170 00:07:38,900 --> 00:07:41,720 >> ასე რომ, მე მხოლოდ შენახული ფაილი შემდეგ მიღების, რომ დროებითი 171 00:07:41,720 --> 00:07:42,700 შეცვლის მომენტში წინ. 172 00:07:42,700 --> 00:07:46,090 ახლა კი არ შედგენილი ეს ხელით Clang. 173 00:07:46,090 --> 00:07:49,500 ახლა კი მე ვაპირებ წავიდეთ წინ და აწარმოებს scanf-1, შეიტანეთ. 174 00:07:49,500 --> 00:07:50,290 სიმებიანი გთხოვთ. 175 00:07:50,290 --> 00:07:51,600 მე აკრიფოთ "hello." 176 00:07:51,600 --> 00:07:54,070 >> ახლა კი, აქ, სადაც, გულახდილად, printf შეიძლება ცოტა შემაშფოთებელი. 177 00:07:54,070 --> 00:07:56,020 ეს რეალურად არ აპირებს segfault ამ შემთხვევაში. 178 00:07:56,020 --> 00:07:59,860 Printf ცოტა სპეციალური რადგან ასე სუპერ გამოიყენება, რომ 179 00:07:59,860 --> 00:08:03,570 არსებითად printf აკეთებს ჩვენს სასარგებლოდ და ხვდებიან, 180 00:08:03,570 --> 00:08:04,830 ეს არ არის სწორი მაჩვენებელი. 181 00:08:04,830 --> 00:08:09,080 ნება მომეცით მიიღოს ეს იმ თავს მხოლოდ ბეჭდვა out ფრჩხილებში null, მაშინაც კი, 182 00:08:09,080 --> 00:08:13,340 თუმცა ეს არ არის აუცილებელი, თუ რა ჩვენ თვითონ მოსალოდნელია. 183 00:08:13,340 --> 00:08:16,940 >> ასე რომ, ჩვენ ვერ ადვილად გამოიწვიოს segfault ერთად, მაგრამ აშკარაა, რომ ეს 184 00:08:16,940 --> 00:08:18,600 არ არის ქცევა მინდოდა. 185 00:08:18,600 --> 00:08:19,800 რა არის მარტივი გამოსავალი? 186 00:08:19,800 --> 00:08:25,650 ასევე, scanf-2, ნება მომეცით ინიციატივით კი, ნაცვლად რეალურად მხოლოდ განაწილების 187 00:08:25,650 --> 00:08:30,100 char *, ნება მომეცით პატარა ჭკვიანია შესახებ ეს, და ნება მომეცით გამოყოფს ბუფერული 188 00:08:30,100 --> 00:08:32,940 როგორც რიგითობა 16 სიმბოლო. 189 00:08:32,940 --> 00:08:34,200 >> ასე, რომ შეიძლება ამის გაკეთება რამდენიმე გზა არსებობს. 190 00:08:34,200 --> 00:08:35,610 მე ვერ აბსოლუტურად გამოიყენოთ malloc. 191 00:08:35,610 --> 00:08:38,980 მაგრამ მე დაბრუნდეს კვირაში ორი როდესაც უბრალოდ საჭიროა მთელი bunch of 192 00:08:38,980 --> 00:08:39,620 სიმბოლო. 193 00:08:39,620 --> 00:08:40,860 ეს მხოლოდ მასივი. 194 00:08:40,860 --> 00:08:44,870 ნება მომეცით, ნაცვლად განისაზღვროს ბუფერული უნდა იყოს მასივი 16 სიმბოლოს. 195 00:08:44,870 --> 00:08:47,340 >> ახლა, როდესაც მე გაივლის ბუფერული in - 196 00:08:47,340 --> 00:08:49,940 და ეს არის ის, რაც ჩვენ არ ვისაუბროთ ამ კვირაში ორი - 197 00:08:49,940 --> 00:08:53,730 მაგრამ შეგიძლიათ მკურნალობა წყობის თუმცა მისამართი. 198 00:08:53,730 --> 00:08:56,390 ტექნიკური თვალსაზრისით, როგორც ჩვენ ვნახეთ, ისინი ცოტა განსხვავებული. 199 00:08:56,390 --> 00:09:01,290 მაგრამ scanf არ იბადება, თუ თქვენ გაიაროს ეს სახელი მასივი, რადგან რა 200 00:09:01,290 --> 00:09:05,030 Clang გავაკეთებთ ჩვენთვის არსებითად მკურნალობა სახელით რომ მასივს როგორც 201 00:09:05,030 --> 00:09:08,280 მისამართი ბლოკი 16 ბაიტს. 202 00:09:08,280 --> 00:09:09,550 >> ასე რომ, ეს უკეთესია. 203 00:09:09,550 --> 00:09:12,110 ეს ნიშნავს, რომ მე არ შემიძლია იმედია გავაკეთოთ შემდეგ. 204 00:09:12,110 --> 00:09:16,800 ნება მომეცით დააშორებს ერთი წუთით და ამის გაკეთება გააკეთოს scanf-2, შედგენილი OK. 205 00:09:16,800 --> 00:09:19,390 ახლა ნება მომეცით არ მივიღე ხაზი scanf-2. 206 00:09:19,390 --> 00:09:22,430 სიმებიანი გთხოვთ. "Hello". და ეს როგორც ჩანს, მუშაობა ამ დროს. 207 00:09:22,430 --> 00:09:26,020 >> მაგრამ ვინმე შესთავაზოს სცენარი რომელშიც ის შეიძლება ჯერ კიდევ მუშაობს? 208 00:09:26,020 --> 00:09:28,550 ჰო? 209 00:09:28,550 --> 00:09:30,640 რაღაც უმეტეს 16 სიმბოლოს. 210 00:09:30,640 --> 00:09:32,020 და ფაქტობრივად, ჩვენ შეიძლება უფრო ზუსტი. 211 00:09:32,020 --> 00:09:36,540 რაღაც აღარ შემდეგ 15 პერსონაჟი, იმიტომ, რომ რეალურად ჩვენ უნდა გვახსოვდეს 212 00:09:36,540 --> 00:09:39,920 რომ ჩვენ გვჭირდება, რომ წარმატებული ნულოვანი ირიბად დასასრულს ტექსტი, 213 00:09:39,920 --> 00:09:42,950 რაც განზე scanf, როგორც წესი ვიზრუნოთ ჩვენთვის. 214 00:09:42,950 --> 00:09:46,210 >> ნება მომეცით, ამის გაკეთება რაღაც - 215 00:09:46,210 --> 00:09:48,040 ზოგჯერ ჩვენ უბრალოდ დატოვონ ეს იგრძნობა. 216 00:09:48,040 --> 00:09:50,630 OK, ასე რომ, ჩვენ ახლა გამოწვეული ჩვენი სეგმენტაცია ბრალი. 217 00:09:50,630 --> 00:09:51,000 რატომ? 218 00:09:51,000 --> 00:09:54,940 იმიტომ, რომ მე აკრეფილი, რომ 15 და მეტი გმირები და ა.შ. ჩვენ, ფაქტობრივად, 219 00:09:54,940 --> 00:09:58,280 შეეხო მეხსიერება, რაც მე რეალურად არ უნდა ჰქონდეს. 220 00:09:58,280 --> 00:10:00,180 >> რა არის რეალურად გადაწყვეტა აქ? 221 00:10:00,180 --> 00:10:02,210 ისე, რა, თუ ჩვენ გვჭირდება აღარ სიმებიანი? 222 00:10:02,210 --> 00:10:03,960 ასევე, ჩვენ, შესაძლოა, რომ მას 32 ბაიტს. 223 00:10:03,960 --> 00:10:05,160 ისე, რა, თუ ეს არ არის საკმაო? 224 00:10:05,160 --> 00:10:06,040 როგორ შესახებ 64 bytes? 225 00:10:06,040 --> 00:10:07,080 რა მოხდება, თუ ეს არ არის საკმაო? 226 00:10:07,080 --> 00:10:09,640 როგორ შესახებ 128 ან 200 bytes? 227 00:10:09,640 --> 00:10:12,660 რა არის გამოსავალი აქ ზოგადი შემთხვევაში, თუ ჩვენ არ ვიცით, 228 00:10:12,660 --> 00:10:14,460 რას შესახებ ხდება შეიტანოთ? 229 00:10:14,460 --> 00:10:20,000 230 00:10:20,000 --> 00:10:23,050 >> უბრალოდ ასეთი დიდი ტკივილი ass, მართალი გითხრათ, რის გამოც 231 00:10:23,050 --> 00:10:29,050 CS50 ბიბლიოთეკას აქვს რამდენიმე ათეული ხაზი კოდი, ერთობლივად განახორციელონ 232 00:10:29,050 --> 00:10:32,390 GetString სიმებიანი ისე, რომ ჩვენ არ უნდა ვიცოდეთ წინასწარ რა 233 00:10:32,390 --> 00:10:33,430 მომხმარებლის აპირებს ტიპის. 234 00:10:33,430 --> 00:10:37,370 კერძოდ, თუ თქვენ ვიხსენებთ cs50.c ორი კვირის წინ, დაინახავთ, 235 00:10:37,370 --> 00:10:40,480 რომ GetString რეალურად აკეთებს არ გამოიყენოთ scanf ამ გზით. 236 00:10:40,480 --> 00:10:43,720 უფრო მეტიც, ნათქვამია მოხსენებაში ერთი ხასიათი დროს. 237 00:10:43,720 --> 00:10:46,010 >> იმის გამო, რომ ერთი ლამაზი რამ კითხულობს ერთი გმირი შეგვიძლია 238 00:10:46,010 --> 00:10:48,490 გარანტიას თავს ყოველთვის აქვს მინიმუმ ერთი char. 239 00:10:48,490 --> 00:10:51,740 მე შემიძლია მხოლოდ განაცხადოს, char, და შემდეგ მიიღოს ეს მართლაც ბავშვი ნაბიჯები მხოლოდ 240 00:10:51,740 --> 00:10:54,380 წავიკითხე ერთ პერსონაჟს ზე დროს კლავიატურაზე. 241 00:10:54,380 --> 00:10:58,240 შემდეგ კი, რაც თქვენ დაინახავთ GetString აკეთებს ყოველ ჯერზე ეს ამოიწურება, 242 00:10:58,240 --> 00:11:02,280 ამბობენ, 16 ბაიტი მეხსიერების, იგი იყენებს malloc, ან დეიდაშვილი მისი, რათა 243 00:11:02,280 --> 00:11:06,810 გამოყოფს მეტი მეხსიერების, გადაწერა წლის მეხსიერება ახალ და შემდეგ მცოცავი 244 00:11:06,810 --> 00:11:09,900 გასწვრივ, მიღების ერთი ხასიათი დროს, და როდესაც ამოიწურება, რომ 245 00:11:09,900 --> 00:11:13,370 ბლოკი მეხსიერება, ისვრის ის დაშორებით, grabs უფრო დიდი ბლოკი მეხსიერება, ასლები წლის 246 00:11:13,370 --> 00:11:14,750 ახალ და იმეორებს. 247 00:11:14,750 --> 00:11:18,480 და ეს მართლაც ტკივილი, რეალურად განახორციელოს რაიმე ისეთი მარტივი, როგორც 248 00:11:18,480 --> 00:11:19,710 მიღების შეიტანენ შესახებ. 249 00:11:19,710 --> 00:11:21,090 >> ასე რომ, შეგიძლიათ გამოიყენოთ scanf. 250 00:11:21,090 --> 00:11:22,430 თქვენ შეგიძლიათ გამოიყენოთ სხვა მსგავსი ფუნქციები. 251 00:11:22,430 --> 00:11:25,420 და ბევრი სახელმძღვანელოები და ონლაინ მაგალითები, მაგრამ ისინი ყველა 252 00:11:25,420 --> 00:11:27,210 დაუცველი პრობლემების მოსწონს ეს. 253 00:11:27,210 --> 00:11:29,550 და საბოლოო ჯამში, არც segfault ერთგვარი შემაშფოთებელი. 254 00:11:29,550 --> 00:11:30,680 ეს არ არის კარგი შესახებ. 255 00:11:30,680 --> 00:11:33,560 >> მაგრამ უკიდურეს შემთხვევაში, რას ეს ფუნდამენტურად თქვენს 256 00:11:33,560 --> 00:11:37,160 კოდი რისკის ქვეშ? 257 00:11:37,160 --> 00:11:39,250 ზოგიერთი სახის თავდასხმა, პოტენციურად. 258 00:11:39,250 --> 00:11:41,680 ჩვენ ვისაუბრეთ ერთი ასეთი თავდასხმის - overflowing დასტის. 259 00:11:41,680 --> 00:11:44,660 მაგრამ ზოგადად, თუ თქვენ უფლება აქვთ overflow ბუფერული, ისე, როგორც 260 00:11:44,660 --> 00:11:48,070 რამდენიმე კვირის წინ, მხოლოდ წერილობით ზე მეტი "Hello" on დასტის, თქვენ 261 00:11:48,070 --> 00:11:52,330 შეიძლება მართლაც აღება, პოტენციურად, კომპიუტერული, ან თუნდაც მიიღოთ მონაცემები, 262 00:11:52,330 --> 00:11:53,510 არ ეკუთვნის თქვენ. 263 00:11:53,510 --> 00:11:55,970 >> ასე რომ, მოკლედ, სწორედ ამიტომ ჩვენ გვაქვს იმ სასწავლო დისკები. 264 00:11:55,970 --> 00:11:59,090 მაგრამ ახლა, ჩვენ ვიწყებთ მათ off, როგორც ჩვენი პროგრამების აღარ, 265 00:11:59,090 --> 00:12:00,610 აუცილებლად, შეიტანენ შესახებ. 266 00:12:00,610 --> 00:12:03,960 მაგრამ იმ შემთხვევაში, თუ პრობლემა მითითებული ექვსი, თქვენი შეტანის მოვა დიდი 267 00:12:03,960 --> 00:12:07,520 ლექსიკონის ფაილი 150 ზოგიერთ უცნაური ათასი სიტყვა. 268 00:12:07,520 --> 00:12:10,330 >> ასე რომ თქვენ არ უნდა ფიქრი მომხმარებლის თვითნებური შეყვანა. 269 00:12:10,330 --> 00:12:13,720 ჩვენ მოგაწვდით რამდენიმე ვარაუდები ამის შესახებ ფაილი. 270 00:12:13,720 --> 00:12:20,340 ნებისმიერი შეკითხვა მითითებას ან scanf ან მომხმარებელი შეტანის ზოგადად? 271 00:12:20,340 --> 00:12:24,450 >> ყველა უფლება, ასე სწრაფი, მაშინ ერთ არასასურველი თემა ორი კვირის წინ. 272 00:12:24,450 --> 00:12:28,590 და ეს იყო ამ ცნება struct. 273 00:12:28,590 --> 00:12:34,180 არა, რომ - ეს ცნება struct, რომელიც რა? 274 00:12:34,180 --> 00:12:35,430 რა struct ჩვენთვის? 275 00:12:35,430 --> 00:12:39,280 276 00:12:39,280 --> 00:12:39,860 >> განსაზღვრა - 277 00:12:39,860 --> 00:12:41,710 ბოდიში? 278 00:12:41,710 --> 00:12:42,820 განსაზღვრა ცვლადი ტიპის. 279 00:12:42,820 --> 00:12:44,410 ასე რომ, ერთგვარი. 280 00:12:44,410 --> 00:12:46,180 ჩვენ, ფაქტობრივად, რომელიც აერთიანებს ორი თემა. 281 00:12:46,180 --> 00:12:49,510 ამრიგად, typedef, გავიხსენოთ, რომ ჩვენ შეგვიძლია ვაცხადებ ტიპის ჩვენი, ისევე როგორც 282 00:12:49,510 --> 00:12:51,500 სინონიმი, ისევე როგორც სიმებიანი for char *. 283 00:12:51,500 --> 00:12:56,200 მაგრამ მისი გამოყენება typedef და struct, ჩვენ შეგვიძლია შექმნა ჭეშმარიტად ჩვენი საკუთარი მონაცემების სტრუქტურებში. 284 00:12:56,200 --> 00:12:59,600 >> მაგალითად, თუ მე ისევ gedit აქ მხოლოდ ერთი წუთით, და მე წავიდეთ წინ 285 00:12:59,600 --> 00:13:08,230 და ამის გაკეთება, რომ მსგავსი რამ, ნება მომეცით გადარჩენა ეს, ასე ვთქვათ, structs.c 286 00:13:08,230 --> 00:13:10,840 დროებით, მე მხოლოდ აპირებს წასვლა წინ და მოიცავს 287 00:13:10,840 --> 00:13:14,360 standardio.h, int მთავარი ბათილად. 288 00:13:14,360 --> 00:13:18,960 შემდეგ კი აქ, ვივარაუდოთ, რომ მინდა დაწერა პროგრამა, რომელიც ინახავს 289 00:13:18,960 --> 00:13:21,840 მრავალჯერადი სტუდენტები სხვადასხვა სახლები, მაგალითად. 290 00:13:21,840 --> 00:13:24,430 ასე რომ, ეს როგორც registrarial მონაცემთა ბაზის რაიმე სახის. 291 00:13:24,430 --> 00:13:29,550 >> ასე რომ, თუ მე უნდა სახელის ერთი სტუდენტი, I შეიძლება გავაკეთოთ, რომ მსგავსი რამ char * სახელი და გვარი, 292 00:13:29,550 --> 00:13:31,570 და გავაკეთებ, რაღაც - 293 00:13:31,570 --> 00:13:34,410 რეალურად, მოდით გამოვიყენოთ CS50 ბიბლიოთეკა მხოლოდ ერთი წუთით, რომ ეს 294 00:13:34,410 --> 00:13:38,380 ცოტა მარტივი, ასე რომ სესხი აიღონ იმ ათობით ხაზი კოდი. 295 00:13:38,380 --> 00:13:39,340 და მოდით უბრალოდ შეინახოს იგი მარტივია. 296 00:13:39,340 --> 00:13:42,610 ჩვენ გავაგრძელებთ ეს ტექსტი, და ახლა GetString. 297 00:13:42,610 --> 00:13:47,420 >> ასე რომ, პრეტენზია, რომ მე შენახული სახელი ზოგიერთი სტუდენტი, და სახლში 298 00:13:47,420 --> 00:13:50,240 ზოგიერთი სტუდენტი, უბრალოდ გამოყენებით ცვლადები ისე, როგორც და კვირაში ერთი. 299 00:13:50,240 --> 00:13:52,370 თუმცა ვივარაუდოთ, მე ახლა მინდა მხარდასაჭერად მრავალჯერადი სტუდენტებს. 300 00:13:52,370 --> 00:13:58,460 ყველა უფლება, ასე რომ ჩემი ინსტინქტები უნდა გააკეთოს სიმებიანი სახელი 2, იღებს GetString, სიმებიანი 301 00:13:58,460 --> 00:14:01,370 house2 იღებს GetString. 302 00:14:01,370 --> 00:14:05,850 შემდეგ კი, მესამე სტუდენტი, მოდით name3 GetString. 303 00:14:05,850 --> 00:14:09,170 >> ყველა უფლება, ასე რომ ეს არის იმედია ნათელი თქვენ, როგორც ასეთი სულელური, 304 00:14:09,170 --> 00:14:11,580 რადგან ეს პროცესი მართლაც არასდროს აპირებს დასრულდება და ეს მხოლოდ აპირებს 305 00:14:11,580 --> 00:14:13,130 რომ ჩემი კოდი გამოიყურება უარესი და უარესი და უარესი. 306 00:14:13,130 --> 00:14:14,810 მაგრამ ჩვენ მოგვარდება ეს ძალიან in კვირაში ორი. 307 00:14:14,810 --> 00:14:19,450 რა იყო ჩვენი შედარებით სუფთა გადაწყვეტა როცა მრავალი ცვლადი 308 00:14:19,450 --> 00:14:23,580 იგივე მონაცემების ტიპის, რომ ყველა დაკავშირებული, მაგრამ ჩვენ არ გვინდოდა ამ ბარბაროსულ არეულობას 309 00:14:23,580 --> 00:14:26,870 საქართველოს მსგავსად დაასახელა ცვლადები? 310 00:14:26,870 --> 00:14:30,060 რა ვაკეთებთ ნაცვლად? 311 00:14:30,060 --> 00:14:31,260 >> ამიტომ ვფიქრობ, მე მოვისმინე რამდენიმე ადგილას. 312 00:14:31,260 --> 00:14:32,590 ჩვენ გვქონდა მასივი. 313 00:14:32,590 --> 00:14:37,110 თუ გსურთ მრავალი ფაქტი რაღაც, რატომ არ გვაქვს გაწმენდა ეს ყველაფერი 314 00:14:37,110 --> 00:14:39,540 მდე და უბრალოდ, ვამბობთ, მომეცი მასივი მოუწოდა სახელები? 315 00:14:39,540 --> 00:14:41,640 >> და ახლა, მოდით მძიმე კოდი 3. 316 00:14:41,640 --> 00:14:44,450 და მაშინ მაძლევს კიდევ ერთი მასივი მოუწოდა სახლები, და მოდით ჩემთან 317 00:14:44,450 --> 00:14:45,800 ახლა მძიმე კოდი 3. 318 00:14:45,800 --> 00:14:49,220 და მე მასიურად დაასუფთავეს არეულობას, რომ უბრალოდ შეიქმნა. 319 00:14:49,220 --> 00:14:52,400 ახლა, მე ამ დრომდე მძიმეა კოდირებული 3, არამედ 3 შეიძლება დინამიურად მოდის 320 00:14:52,400 --> 00:14:54,350 შესახებ, ან argv, ან ანალოგიური. 321 00:14:54,350 --> 00:14:55,720 ასე რომ, ეს უკვე სუფთა. 322 00:14:55,720 --> 00:15:00,100 >> მაგრამ რა არის შემაშფოთებელი ის არის, რომ ახლა, მიუხედავად იმისა, რომ სახელი არის რატომღაც 323 00:15:00,100 --> 00:15:02,280 ფუნდამენტურად უკავშირდება სტუდენტის სახლი - 324 00:15:02,280 --> 00:15:04,720 ეს სტუდენტი, რომ მე ნამდვილად გვინდა წარმოადგენს - 325 00:15:04,720 --> 00:15:08,080 ახლა გვაქვს ორი მასივების, რომლებიც პარალელურად იმ გაგებით, რომ ისინი 326 00:15:08,080 --> 00:15:13,930 იგივე ზომა და სახელები bracket 0 სავარაუდოდ რუკების სახლები bracket 0, 327 00:15:13,930 --> 00:15:16,600 და სახელები bracket 1 რუკები სახლებში bracket 1. 328 00:15:16,600 --> 00:15:19,280 სხვა სიტყვებით, რომ სტუდენტთა ცხოვრობს ეს სახლი, და რომ სხვა სტუდენტურ 329 00:15:19,280 --> 00:15:20,530 სიცოცხლე ამ მეორე სახლი. 330 00:15:20,530 --> 00:15:23,720 მაგრამ ნამდვილად ეს შეიძლება გაკეთდა კიდევ უფრო cleanly. 331 00:15:23,720 --> 00:15:24,990 >> ასევე, ის შეიძლება, ფაქტობრივად. 332 00:15:24,990 --> 00:15:28,730 და ნება მომეცით წავიდეთ წინ და გახსნა up structs.h, და თქვენ 333 00:15:28,730 --> 00:15:31,130 რომ ეს იდეა აქ. 334 00:15:31,130 --> 00:15:34,905 გავითვალისწინოთ რომ მე გამოიყენება typedef, როგორც თქვენ გააკეთა მინიშნება მომენტში წინ გამოაცხადოს ჩვენი 335 00:15:34,905 --> 00:15:35,570 საკუთარი მონაცემების ტიპის. 336 00:15:35,570 --> 00:15:39,660 მაგრამ მე ასევე გამოყენებისას სხვა სიტყვით მოუწოდა struct რომელიც მაძლევს new 337 00:15:39,660 --> 00:15:40,790 მონაცემთა სტრუქტურას. 338 00:15:40,790 --> 00:15:43,980 >> ეს მონაცემთა სტრუქტურის I აცხადებენ, რომ აპირებს აქვს ორი რამ შიგნით 339 00:15:43,980 --> 00:15:47,060 ეს - სიმებიანი მოუწოდა სახელი და სიმებიანი მოუწოდა სახლში. 340 00:15:47,060 --> 00:15:49,820 და სახელი მე ვაპირებ მისცეს მონაცემთა ამ სტრუქტურის აპირებს 341 00:15:49,820 --> 00:15:51,005 ე.წ. სტუდენტი. 342 00:15:51,005 --> 00:15:54,030 მე ვერ ვუწოდებ არაფერი მინდა, მაგრამ ეს სემანტიკურად გააკეთოს 343 00:15:54,030 --> 00:15:55,810 აზრი ჩემს გონებაში. 344 00:15:55,810 --> 00:15:59,160 >> ასე რომ, ახლა, თუ გახსნა უკეთესი მობილური პროგრამის დავიწყე წერა 345 00:15:59,160 --> 00:16:00,390 იქ, ნება მომეცით გადახვევის დასაწყისში. 346 00:16:00,390 --> 00:16:03,190 წინ კიდევ რამდენიმე ხაზი კოდი აქ, მაგრამ ნება მიბოძეთ ყურადღება გავამახვილო იმ 347 00:16:03,190 --> 00:16:04,160 მომენტი ერთ. 348 00:16:04,160 --> 00:16:07,790 მე განაცხადა, მუდმივი წ სტუდენტები და მძიმე კოდირებული 3 ახლა. 349 00:16:07,790 --> 00:16:11,110 მაგრამ ახლა, შეამჩნია როგორ სუფთა ჩემი კოდი იწყება მისაღებად. 350 00:16:11,110 --> 00:16:15,030 >> შესაბამისად 22, ვაცხადებ მასივი სტუდენტებს. 351 00:16:15,030 --> 00:16:18,760 და შეამჩნია, რომ სტუდენტთა აშკარად ახლა მონაცემთა ტიპის. 352 00:16:18,760 --> 00:16:23,360 იმის გამო, რომ ზედა ფაილის შეამჩნია მე მოიცავს თავით ფაილი 353 00:16:23,360 --> 00:16:24,820 რომ მე გამოყვანილია მხოლოდ ერთი წუთით წინ. 354 00:16:24,820 --> 00:16:28,820 და ეს თავით ფაილი უბრალოდ იძულებული ამ განმარტებას სტუდენტი. 355 00:16:28,820 --> 00:16:32,470 >> ასე რომ, ახლა, მე შექმნა საკუთარი საბაჟო მონაცემთა ტიპის, რომ ავტორები C წელი 356 00:16:32,470 --> 00:16:33,890 წინ არ ვფიქრობ წინასწარ. 357 00:16:33,890 --> 00:16:34,570 მაგრამ არ არის პრობლემა. 358 00:16:34,570 --> 00:16:35,870 მე შემიძლია იგი თავს. 359 00:16:35,870 --> 00:16:39,050 ასე რომ, ეს მასივი მოუწოდა სტუდენტები, თითოეული რომლის წევრებიც 360 00:16:39,050 --> 00:16:41,100 არის სტუდენტი სტრუქტურა. 361 00:16:41,100 --> 00:16:44,270 და მე მინდა სამი მათგანი მასივში. 362 00:16:44,270 --> 00:16:46,030 >> ახლა კი, რას დანარჩენი ამ პროგრამის გაკეთება? 363 00:16:46,030 --> 00:16:47,550 მჭირდებოდა რაღაც პატარა თვითნებური. 364 00:16:47,550 --> 00:16:51,450 ასე რომ, ონლაინ 24 შემდგომი, მე iterate 0 დან 3. 365 00:16:51,450 --> 00:16:54,000 მე ვთხოვ შესახებ for სტუდენტის სახელი. 366 00:16:54,000 --> 00:16:56,110 და მაშინ მე GetString, როგორც ადრე. 367 00:16:56,110 --> 00:16:59,410 მერე ითხოვენ სტუდენტის სახლი, და მე GetString, როგორც ადრე. 368 00:16:59,410 --> 00:17:01,780 >> მაგრამ შეამჩნია - ოდნავ new ნაწილი syntax - 369 00:17:01,780 --> 00:17:07,010 მე მაინც ინდექსი, რომლებიც I-th სტუდენტი, მაგრამ როგორ მივიღებ ერთი კონკრეტული მონაცემები 370 00:17:07,010 --> 00:17:08,354 სფეროში შიგნით struct? 371 00:17:08,354 --> 00:17:11,770 ისე, რა როგორც ჩანს ახალი ნაწილი syntax? 372 00:17:11,770 --> 00:17:13,339 უბრალოდ dot ოპერატორი. 373 00:17:13,339 --> 00:17:14,510 >> ჩვენ ნამდვილად არ მინახავს ეს ადრე იყო. 374 00:17:14,510 --> 00:17:17,819 ვნახე ის pset ხუთ თუ თქვენ საპირისპირო მხარეს ბურთის უკვე bitmap ფაილი. 375 00:17:17,819 --> 00:17:22,372 მაგრამ dot მხოლოდ იმას ნიშნავს, შიგნით ამ struct ან მრავალჯერადი სფეროებში, მისცეს dot 376 00:17:22,372 --> 00:17:24,510 სახელი და გვარი, ან მომეცი dot სახლში. 377 00:17:24,510 --> 00:17:28,690 ეს იმას ნიშნავს, წავიდეთ შიგნით struct და მიიღოს იმ კონკრეტულ სფეროებში. 378 00:17:28,690 --> 00:17:30,200 >> რას დანარჩენი ამ პროგრამის გაკეთება? 379 00:17:30,200 --> 00:17:31,190 ეს არ არის ყველა, რომ სექსუალური. 380 00:17:31,190 --> 00:17:34,640 გავითვალისწინოთ, რომ მე iterate 0 დან 3 ერთხელ, და მე უბრალოდ ინგლისური 381 00:17:34,640 --> 00:17:40,500 ფრაზა, როგორიც ასე და ასე არის თუ ისე ასეთი სახლი, გადადის dot სახელი 382 00:17:40,500 --> 00:17:43,320 i-th სტუდენტი და მათი სახლი ასევე. 383 00:17:43,320 --> 00:17:47,560 >> და მაშინ ბოლოს, ახლა დავიწყებთ მისაღებად anal შესახებ, ახლა რომ ჩვენ 384 00:17:47,560 --> 00:17:49,580 იცნობს რა malloc და სხვა ფუნქციების ყოფილიყო 385 00:17:49,580 --> 00:17:50,570 აკეთებს ყველა ამ დროს. 386 00:17:50,570 --> 00:17:54,220 რატომ უნდა გავათავისუფლოთ ორივე სახელი და სახლში, მიუხედავად იმისა, რომ მე 387 00:17:54,220 --> 00:17:56,960 არ გამოიძახა malloc? 388 00:17:56,960 --> 00:17:58,020 >> GetString გააკეთა. 389 00:17:58,020 --> 00:18:00,930 და ეს იყო ბინძური პატარა საიდუმლო რამდენიმე კვირის განმავლობაში, მაგრამ GetString აქვს 390 00:18:00,930 --> 00:18:03,530 უკვე ჩამოდის მეხსიერების მთელი მიიტანეთ ყველა სემესტრში დღემდე. 391 00:18:03,530 --> 00:18:05,990 და valgrand საბოლოოდ გამოავლენს ამ ჩვენთვის. 392 00:18:05,990 --> 00:18:10,730 >> მაგრამ ეს არ არის დიდი გარიგება, რადგან ვიცი, რომ მე შემიძლია უბრალოდ გასათავისუფლებლად სახელი 393 00:18:10,730 --> 00:18:15,750 და სახლში, თუმცა ტექნიკურად, რათა იყოს სუპერ, სუპერ უსაფრთხო, ასეც უნდა იყოს 394 00:18:15,750 --> 00:18:17,890 აკეთებს რაიმე შეცდომა შემოწმების აქ. 395 00:18:17,890 --> 00:18:19,040 როგორია თქვენი ინსტინქტები გეუბნებით? 396 00:18:19,040 --> 00:18:22,480 რა უნდა იყოს შემოწმება სანამ გასათავისუფლებლად, რა არის 397 00:18:22,480 --> 00:18:25,470 სიმებიანი, aka რომელიც char *? 398 00:18:25,470 --> 00:18:33,460 >> მე ნამდვილად უნდა იყოს შემოწმების, თუ სტუდენტები bracket i dot სახელი არ 399 00:18:33,460 --> 00:18:34,840 თანაბარი null. 400 00:18:34,840 --> 00:18:40,400 მაშინ ეს იქნება კარგი, რომ წავიდეთ წინ და თავისუფალი რომ მაჩვენებელი და იმავე ან სხვა 401 00:18:40,400 --> 00:18:41,160 ერთი ასევე. 402 00:18:41,160 --> 00:18:46,860 თუ სტუდენტები bracket i dot სახლში არ არის ტოლია null, ეს ახლა დაიცავს 403 00:18:46,860 --> 00:18:52,520 წინააღმდეგ კუთხეში შემთხვევაში, რომელშიც GetString ბრუნდება რაღაც null. 404 00:18:52,520 --> 00:18:57,310 და დავინახეთ მომენტში წინ, printf იქნება მფარველი აქ მხოლოდ ამბობდა 405 00:18:57,310 --> 00:18:58,990 null, რომელიც აპირებს გამოიყურება უცნაურია. 406 00:18:58,990 --> 00:19:02,340 მაგრამ მაინც ეს არ segfault, როგორც ვნახეთ. 407 00:19:02,340 --> 00:19:05,990 >> ისე, მინდა გავაკეთოთ ერთი რამ აქ. structs-0 ერთგვარი სულელური პროგრამა 408 00:19:05,990 --> 00:19:09,700 იმიტომ, რომ მე შევა ყველა ამ მონაცემთა, შემდეგ კი ეს დაკარგული ერთხელ პროგრამა დასრულდება. 409 00:19:09,700 --> 00:19:10,940 მაგრამ ნება მიბოძეთ წავიდეთ წინ და ამის გაკეთება. 410 00:19:10,940 --> 00:19:12,830 ნება მომეცით მიიღოს ტერმინალში ფანჯარა ცოტა დიდია. 411 00:19:12,830 --> 00:19:17,000 ნება მომეცით მიიღოს structs-1, რომელიც ეს არის ახალი ვერსია ეს. 412 00:19:17,000 --> 00:19:18,520 >> მე გასადიდებლად ცოტა. 413 00:19:18,520 --> 00:19:21,620 ახლა კი ნება მომეცით აწარმოებს dot სლეში structs-1. 414 00:19:21,620 --> 00:19:22,590 სტუდენტური სახელი - 415 00:19:22,590 --> 00:19:31,500 დავით Mather, მოდით Rob KIRKLAND, მოდით ლორენ Leverett. 416 00:19:31,500 --> 00:19:33,650 რა არის საინტერესო ახლა არის შეტყობინება - 417 00:19:33,650 --> 00:19:35,540 და მე მხოლოდ ვიცი, რადგან დავწერე პროგრამა - 418 00:19:35,540 --> 00:19:38,930 არსებობს ფაილი ამიერიდან ჩემი მიმდინარე კატალოგი, სახელწოდებით students.csv. 419 00:19:38,930 --> 00:19:40,420 ზოგიერთ თქვენგანს შეიძლება მინახავს ამ რეალურ ცხოვრებაში. 420 00:19:40,420 --> 00:19:42,980 >> რა არის CSV ფაილი? 421 00:19:42,980 --> 00:19:44,170 Comma-გამოყოფილი ღირებულებებს. 422 00:19:44,170 --> 00:19:46,670 ეს ერთგვარი მოსწონს ღარიბი ადამიანის მობილური Excel ფაილი. 423 00:19:46,670 --> 00:19:50,580 ეს მაგიდასთან რიგები და სვეტები, რომ შეგიძლიათ გაიხსნება პროგრამა, როგორიცაა Excel, 424 00:19:50,580 --> 00:19:51,800 ან ნომრები Mac. 425 00:19:51,800 --> 00:19:55,180 >> და თუ ამ ფაილის გახსნის აქ gedit, გაფრთხილების - და ციფრები არ არის. 426 00:19:55,180 --> 00:19:57,360 ეს მხოლოდ gedit ვეუბნებოდი მე ხაზი ნომრები. 427 00:19:57,360 --> 00:19:59,740 ცნობას პირველი ხაზი ამ ფაილი დავით და Mather. 428 00:19:59,740 --> 00:20:01,450 შემდეგი ხაზი არის Rob მძიმე KIRKLAND. 429 00:20:01,450 --> 00:20:04,170 და მესამე ხაზი ლორენ მძიმე Leverett. 430 00:20:04,170 --> 00:20:05,480 >> მერე რა არ მე შევქმენი? 431 00:20:05,480 --> 00:20:09,580 მე ახლა დაწერილი C პროგრამა, რომელიც ეფექტურად შეიძლება ცხრილები 432 00:20:09,580 --> 00:20:11,840 , რომელიც შეიძლება გაიხსნა პროგრამა, როგორიცაა Excel. 433 00:20:11,840 --> 00:20:15,520 არ არის, რომ დამაჯერებელი მონაცემები ნაკრები, მაგრამ თუ თქვენ გაქვთ გაცილებით მოცულობით 434 00:20:15,520 --> 00:20:18,440 მონაცემები, რომ თქვენ ნამდვილად გინდათ მანიპულირება და მიიღოს გრაფიკის და 435 00:20:18,440 --> 00:20:21,260 მინდა, ეს, ალბათ ერთი გზა შექმნა, რომ მონაცემები. 436 00:20:21,260 --> 00:20:25,370 უფრო მეტიც, CSVs რეალურად სუპერ საერთო მხოლოდ შენახვის მარტივი მონაცემები - 437 00:20:25,370 --> 00:20:28,940 Yahoo Finance, მაგალითად, თუ თქვენ გაქვთ საფონდო ბრჭყალებში მეშვეობით მათი ე.წ. 438 00:20:28,940 --> 00:20:33,180 API, უფასო სერვისი, რომელიც საშუალებას გაძლევთ მიიღონ მიმდინარე თანამედროვე თანამედროვე საფონდო 439 00:20:33,180 --> 00:20:35,650 შესრულების შეთავაზება კომპანიებს, მათ მისცეს მონაცემთა უკან 440 00:20:35,650 --> 00:20:37,800 სუპერ მარტივი CSV ფორმატში. 441 00:20:37,800 --> 00:20:39,380 >> ასე რომ, როგორ მივიღეთ ეს? 442 00:20:39,380 --> 00:20:42,530 კარგად შეამჩნია, ყველაზე მეტად ეს პროგრამა თითქმის იგივე. 443 00:20:42,530 --> 00:20:46,870 მაგრამ შეამჩნია ქვემოთ აქ, ვიდრე ბეჭდვითი სტუდენტები out, ხაზი 35 444 00:20:46,870 --> 00:20:51,040 შემდგომი, მე კი აცხადებენ, რომ მე გადარჩენის სტუდენტები დისკზე, ასე რომ გადარჩენის ფაილი. 445 00:20:51,040 --> 00:20:53,630 >> ასე რომ შეამჩნია მე გამოცხადების ი * - 446 00:20:53,630 --> 00:20:57,260 ახლა, ეს არის ერთგვარი ანომალიაა in C. სხვადსხვა მიზეზის გამო, ფაილი ყველა caps, 447 00:20:57,260 --> 00:21:00,690 რაც არ მოსწონს ყველაზე სხვა მონაცემთა ტიპები in C. მაგრამ ეს ინტეგრირებული 448 00:21:00,690 --> 00:21:02,320 მონაცემთა ტიპის, ი *. 449 00:21:02,320 --> 00:21:05,900 და მე გამოცხადების მომცეთ SVG, არის, თუ როგორ შეიძლება ვიფიქროთ, რომ. 450 00:21:05,900 --> 00:21:08,070 >> fopen ნიშნავს ღია ფაილი. 451 00:21:08,070 --> 00:21:09,470 რა ფაილი გინდათ, გახსნას? 452 00:21:09,470 --> 00:21:12,620 მინდა გახსნა ფაილი, რომელიც მე თვითნებურად მოვუწოდებთ students.csv. 453 00:21:12,620 --> 00:21:14,480 მე ვერ ვუწოდებ, რომ არაფერი მინდა. 454 00:21:14,480 --> 00:21:15,200 >> და მერე ვხვდები. 455 00:21:15,200 --> 00:21:18,960 რას მეორე არგუმენტი to fopen ალბათ ნიშნავს? 456 00:21:18,960 --> 00:21:21,480 მარჯვენა, w for ჩაწერის, შესაძლებელი იქნებოდა იყოს r for წაკითხული. 457 00:21:21,480 --> 00:21:24,120 აქ არის ის დამატება, თუ მინდა დავამატო, რიგები და არა 458 00:21:24,120 --> 00:21:25,200 გადაწერა მთელი რამ. 459 00:21:25,200 --> 00:21:28,005 >> მაგრამ მინდა ამ ფაილის შექმნას ერთხელ, ასე რომ მე გამოიყენოთ გაცემა unquote w. 460 00:21:28,005 --> 00:21:31,880 და ვიცი, რომ მხოლოდ რომელმაც წაიკითხა დოკუმენტაცია, ან კაცი გვერდზე. 461 00:21:31,880 --> 00:21:35,100 თუ ფაილი არ null - სხვა სიტყვებით, თუ არაფერი არ მოხდა ისე იქ - 462 00:21:35,100 --> 00:21:37,820 ნება მომეცით iterate მეტი სტუდენტები 0 დან 3. 463 00:21:37,820 --> 00:21:40,410 >> ახლა კი შეამჩნია რაღაც ოდესმე ისე ოდნავ განსხვავებული 464 00:21:40,410 --> 00:21:42,110 შესახებ ხაზი 41 აქ. 465 00:21:42,110 --> 00:21:42,960 ეს არ არის printf. 466 00:21:42,960 --> 00:21:46,530 ეს fprintf for ფაილი printf. 467 00:21:46,530 --> 00:21:47,790 ასე რომ, ეს ხდება დაწერა შეიტანოს. 468 00:21:47,790 --> 00:21:48,860 რომელი ფაილი? 469 00:21:48,860 --> 00:21:53,630 ერთი, რომლის მაჩვენებელი თქვენს მიერ მითითებული როგორც პირველი არგუმენტი. 470 00:21:53,630 --> 00:21:55,940 >> მაშინ ჩვენ დააკონკრეტა სტრიქონში. 471 00:21:55,940 --> 00:21:59,660 მაშინ ჩვენ დააკონკრეტა, თუ რა სიმებიანი ჩვენ გვინდა plug in პირველად პროცენტს s, და 472 00:21:59,660 --> 00:22:04,320 შემდეგ კი ცვალებად და მეორე პროცენტს s. 473 00:22:04,320 --> 00:22:06,760 მაშინ ჩვენ ახლოს ფაილი fclose. 474 00:22:06,760 --> 00:22:09,380 ვიდრე მე გასათავისუფლებლად მეხსიერება, როგორც ადრე, თუმცა მე უნდა დავუბრუნდეთ და დამატება 475 00:22:09,380 --> 00:22:10,540 ზოგიერთი შეამოწმებს null. 476 00:22:10,540 --> 00:22:12,090 >> და ეს არის ის. 477 00:22:12,090 --> 00:22:16,960 fopen, fprintf, fclose მაძლევს უნარი შექმნას ტექსტი ფაილი. 478 00:22:16,960 --> 00:22:19,640 ახლა, დაინახავთ პრობლემების კომპლექტი ხუთი, რომელიც მოიცავს სურათები, თქვენ გამოიყენებთ 479 00:22:19,640 --> 00:22:20,990 ორობითი ფაილი ნაცვლად. 480 00:22:20,990 --> 00:22:24,200 თუმცა ფუნდამენტურად, იდეა იგივეა, მიუხედავად იმისა, რომ ფუნქციები თქვენ 481 00:22:24,200 --> 00:22:28,710 ვხედავ ცოტა განსხვავებული. 482 00:22:28,710 --> 00:22:32,580 >> ასე რომ, whirlwind ტური, მაგრამ თქვენ მიიღებს ძალიან კარგად იცნობს ფაილი I/O-- 483 00:22:32,580 --> 00:22:34,960 შემავალი და გამომავალი - ერთად pset ხუთ. 484 00:22:34,960 --> 00:22:38,607 და რაიმე შეკითხვები საწყის საფუძვლებს აქ? 485 00:22:38,607 --> 00:22:39,857 ჰო? 486 00:22:39,857 --> 00:22:41,880 487 00:22:41,880 --> 00:22:43,710 >> რა მოხდება, თუ თქვენ ცდილობენ გასათავისუფლებლად null მნიშვნელობა? 488 00:22:43,710 --> 00:22:48,880 მე მჯერა, თუ თავისუფალი არ მიღებული ცოტა უფრო მოსახერხებელი, შეგიძლიათ 489 00:22:48,880 --> 00:22:49,890 პოტენციურად segfault. 490 00:22:49,890 --> 00:22:54,160 გამსვლელი ეს null ცუდია რადგან არ გვჯერა, უფასო აწუხებს შესამოწმებლად თქვენ, 491 00:22:54,160 --> 00:22:57,330 რადგან ეს პოტენციურად ნარჩენების დროის ეს უნდა გააკეთოს თავად 492 00:22:57,330 --> 00:22:59,022 ყველას მსოფლიოში. 493 00:22:59,022 --> 00:23:00,590 კარგი კითხვა, თუმცა. 494 00:23:00,590 --> 00:23:04,300 >> ყველა უფლება, ასეთი ტიპის იღებს გვაძლევს საინტერესო თემაზე. 495 00:23:04,300 --> 00:23:07,010 თემა პრობლემა ნაკრები ხუთ არის სასამართლო. 496 00:23:07,010 --> 00:23:08,420 ყოველ შემთხვევაში, რომ ის ნაწილი პრობლემის ნაკრები. 497 00:23:08,420 --> 00:23:12,030 სასამართლო ექსპერტიზის ზოგადად ეხება აღდგენის ინფორმაცია, რომელიც ან 498 00:23:12,030 --> 00:23:14,110 შეიძლება არ წაიშალა შეგნებულად. 499 00:23:14,110 --> 00:23:18,680 ასე რომ მეგონა, მე მინდა გადმოგცეთ სწრაფი გემოს რა ხდება სინამდვილეში ყველა 500 00:23:18,680 --> 00:23:21,230 ამ დროს ქვეშ hood თქვენს კომპიუტერში. 501 00:23:21,230 --> 00:23:23,960 >> მაგალითად, თუ თქვენ გაქვთ შიგნით თქვენი ნოუთბუქი ან თქვენი კომპიუტერი 502 00:23:23,960 --> 00:23:28,040 დისკის, ეს არც მექანიკური მოწყობილობა, რომელიც რეალურად ტრიალებს - 503 00:23:28,040 --> 00:23:31,650 იქ მრგვალი რამ მოუწოდა platters რომ გამოიყურება საკმაოდ მსგავსად, რაც მე 504 00:23:31,650 --> 00:23:34,540 მქონდა up ეკრანზე აქ, თუმცა ეს სულ უფრო და უფრო ძველი სკოლა. 505 00:23:34,540 --> 00:23:37,370 ეს არის სამი და ნახევარი-inch ხისტ დისკზე. 506 00:23:37,370 --> 00:23:40,070 და სამ ნახევარი inches ეხება of ერთად საქართველოს კი ისაა, რომ დააინსტალიროთ 507 00:23:40,070 --> 00:23:40,890 ამ კომპიუტერს. 508 00:23:40,890 --> 00:23:44,890 >> ბევრი ბიჭებს თქვენს ლაპტოპები ახლა აქვს მყარი სახელმწიფო დისკები, ან SSDs, 509 00:23:44,890 --> 00:23:46,260 რომლებმაც არ მოძრავი ნაწილები. 510 00:23:46,260 --> 00:23:49,170 ისინი უფრო ოპერატიული მეხსიერება და ნაკლებად მოსწონს ეს მექანიკური მოწყობილობები. 511 00:23:49,170 --> 00:23:51,450 მაგრამ იდეები რჩება, რა თქმა უნდა, რადგან ისინი ეხება 512 00:23:51,450 --> 00:23:52,790 პრობლემის მითითებული ხუთ. 513 00:23:52,790 --> 00:23:57,400 >> და თუ ფიქრობთ ახლა მყარ დისკზე წარმოადგენს როგორც წრე, რომელიც 514 00:23:57,400 --> 00:23:58,930 მე მიაპყროს მსგავსი აქ. 515 00:23:58,930 --> 00:24:02,290 როდესაც ვქმნით ფაილი თქვენს კომპიუტერში, თუ არა ეს SSD, ან 516 00:24:02,290 --> 00:24:06,610 ამ შემთხვევაში, ძველი სკოლა დისკის, რომ ფაილი მოიცავს მრავალი ბიტი. 517 00:24:06,610 --> 00:24:10,510 ვთქვათ, რომ ეს ამ 0 და 1, მთელი bunch of 0S და 1s. 518 00:24:10,510 --> 00:24:11,660 ასე რომ, ეს მთელი ჩემი მყარ დისკზე. 519 00:24:11,660 --> 00:24:13,225 ეს აშკარად საკმაოდ დიდი ფაილი. 520 00:24:13,225 --> 00:24:18,080 და ეს არის გამოყენებით 0S და 1s იმ ნაწილი ფიზიკური platter. 521 00:24:18,080 --> 00:24:19,750 >> ისე, რა არის, რომ ფიზიკური ნაწილი? 522 00:24:19,750 --> 00:24:25,310 ასევე, ირკვევა, რომ დისკის, სულ მცირე, ამ ტიპის, იქ 523 00:24:25,310 --> 00:24:27,340 ეს პატარა მაგნიტური ნაწილაკების. 524 00:24:27,340 --> 00:24:32,630 ისინი არსებითად აქვს ჩრდილოეთით და სამხრეთ ბოძები მათ, ასე რომ თუ 525 00:24:32,630 --> 00:24:35,710 აქციოს ერთ იმ მაგნიტური ნაწილაკების ამ გზით, შეიძლება ითქვას, რომ ეს 526 00:24:35,710 --> 00:24:36,720 წარმოადგენს 1. 527 00:24:36,720 --> 00:24:39,340 და თუ ეს თავდაყირა სამხრეთით ჩრდილოეთით, შეიძლება ითქვას, რომ ეს 528 00:24:39,340 --> 00:24:40,390 წარმოადგენს 0. 529 00:24:40,390 --> 00:24:43,660 >> ასე რომ რეალურ ფიზიკურ სამყაროში, ეს არის ის, თუ როგორ შეიძლება წარმოადგენს რაღაც 530 00:24:43,660 --> 00:24:45,670 ორობითი მდგომარეობის 0 და 1. 531 00:24:45,670 --> 00:24:46,720 ასე რომ, ყველა ფაილი. 532 00:24:46,720 --> 00:24:49,300 აქ არის მთელი bunch მაგნიტური ნაწილაკების, რომლებიც მათ ამ გზით ან 533 00:24:49,300 --> 00:24:51,920 ამ გზით, ქმნის შაბლონებს საქართველოს 0S და 1s. 534 00:24:51,920 --> 00:24:56,760 >> მაგრამ აღმოჩნდება, როდესაც თქვენ გადარჩენა ფაილი, გარკვეული ინფორმაცია ინახება ცალკე. 535 00:24:56,760 --> 00:25:00,000 ასე რომ, ეს პატარა მაგიდა, დირექტორია, ასე ვთქვათ. 536 00:25:00,000 --> 00:25:05,810 და მე ამას დავარქმევთ სვეტი სახელი და მე მოვუწოდებ ამ სვეტის ადგილას. 537 00:25:05,810 --> 00:25:08,850 >> და მე ვაპირებ ვთქვა, ვარაუდობენ ეს არის ჩემი რეზიუმე. 538 00:25:08,850 --> 00:25:14,050 ჩემი resume.doc ინახება at მდებარეობა, ასე ვთქვათ 123. 539 00:25:14,050 --> 00:25:15,390 მე ყოველთვის წავიდეთ, რომ ნომერი. 540 00:25:15,390 --> 00:25:18,810 მაგრამ საკმარისია ითქვას, რომ ისევე, როგორც in RAM, თქვენ შეუძლია მყარ დისკზე 541 00:25:18,810 --> 00:25:22,350 ეს არის ის, Gigabyte ან 200 გიგაბაიტი ან terabyte, და შეგიძლიათ 542 00:25:22,350 --> 00:25:23,750 ნომერი ყველა bytes. 543 00:25:23,750 --> 00:25:26,480 შეგიძლიათ პუნქტების ყველა მოცულობით 8 ბიტი. 544 00:25:26,480 --> 00:25:29,030 >> ასე რომ, ჩვენ ვთქვა, რომ ეს არის ადგილმდებარეობა 123. 545 00:25:29,030 --> 00:25:32,070 ასე რომ, ამ დირექტორიის შიგნით ჩემს ოპერაციული სისტემის ახსოვს, რომ ჩემი 546 00:25:32,070 --> 00:25:34,250 რეზიუმე ზე ადგილმდებარეობა 123. 547 00:25:34,250 --> 00:25:36,850 მაგრამ ეს ხდება საინტერესო, როდესაც წაშლა ფაილი. 548 00:25:36,850 --> 00:25:37,820 >> ასე მაგალითად - 549 00:25:37,820 --> 00:25:40,790 და საბედნიეროდ, ყველაზე მსოფლიოში დაიჭირეს გადატანა ეს - რა ხდება, როდესაც 550 00:25:40,790 --> 00:25:45,040 თქვენ გადაიტანეთ ფაილი Mac OS Trash ან თქვენი Windows Recycle Bin? 551 00:25:45,040 --> 00:25:48,290 552 00:25:48,290 --> 00:25:50,510 რა მიზნით აკეთებს, რომ? 553 00:25:50,510 --> 00:25:53,860 ეს აშკარად თავი დაეღწია ფაილი, მაგრამ რას აქტი გადმოიყვანა და 554 00:25:53,860 --> 00:25:57,550 მითუმეტეს თქვენს Trash ან თქვენი Recycle Bin აკეთებთ კომპიუტერში? 555 00:25:57,550 --> 00:25:59,230 >> აბსოლუტურად არაფერი, ნამდვილად. 556 00:25:59,230 --> 00:26:00,320 ეს, ისევე, როგორც საქაღალდე. 557 00:26:00,320 --> 00:26:01,800 ეს არის განსაკუთრებული საქაღალდეში, რა თქმა უნდა. 558 00:26:01,800 --> 00:26:04,460 მაგრამ ის რეალურად წაშლის ფაილი? 559 00:26:04,460 --> 00:26:06,780 >> ისე, არა, იმიტომ რომ ზოგი ალბათ უკვე მოსწონს, რა რა, თქვენ არ 560 00:26:06,780 --> 00:26:07,420 ნიშნავს, რომ. 561 00:26:07,420 --> 00:26:09,130 ასე, რომ თქვენ ორჯერ დააწკაპუნეთ Trash ან Recycle Bin. 562 00:26:09,130 --> 00:26:11,630 თქვენ poked გარშემო და თქვენ ამოღებული ფაილი უბრალოდ გადმოიყვანა იგი 563 00:26:11,630 --> 00:26:12,110 გარეთ არსებობს. 564 00:26:12,110 --> 00:26:14,420 ასე ნათლად, რომ ეს არ არის აუცილებელი წაშალა. 565 00:26:14,420 --> 00:26:15,990 >> OK, თქვენ ჭკვიანები, ვიდრე. 566 00:26:15,990 --> 00:26:18,860 თქვენ იცით, რომ უბრალოდ გადმოიყვანა იგი Trash ან Recycle Bin არ ნიშნავს იმას, 567 00:26:18,860 --> 00:26:19,930 თქვენ ცლიან ნაგვის. 568 00:26:19,930 --> 00:26:24,110 ასე, რომ თქვენ ახვიდეთ მენიუს და აცხადებენ, ცარიელი სანაგვე ან ცარიელი Recycle Bin. 569 00:26:24,110 --> 00:26:25,360 მაშინ რა ხდება? 570 00:26:25,360 --> 00:26:29,070 571 00:26:29,070 --> 00:26:32,530 >> ჰო, ასე რომ ამოღებულია მით უმეტეს. 572 00:26:32,530 --> 00:26:37,660 მაგრამ ყველა ეს მოხდება ეს. 573 00:26:37,660 --> 00:26:45,350 კომპიუტერული დაავიწყდება, სადაც resume.doc იყო. 574 00:26:45,350 --> 00:26:47,400 >> მაგრამ რა არ შეცვლილა, როგორც ჩანს, ამ სურათზე? 575 00:26:47,400 --> 00:26:51,390 576 00:26:51,390 --> 00:26:55,570 Bits, 0S და 1s, რომ მე პრეტენზია არის საიტზე რამდენიმე ფიზიკური ასპექტი 577 00:26:55,570 --> 00:26:56,280 აპარატურა. 578 00:26:56,280 --> 00:26:57,110 ისინი ჯერ კიდევ არსებობს. 579 00:26:57,110 --> 00:26:58,930 უბრალოდ კომპიუტერი დავიწყებული რასაც ისინი. 580 00:26:58,930 --> 00:27:03,160 >> ამიტომ არსებითად გაათავისუფლა ფაილი ნახვა ბიტი ისე, რომ ისინი შეიძლება გამოყენებული. 581 00:27:03,160 --> 00:27:06,940 მაგრამ, სანამ თქვენ შექმნით მეტი ფაილი, და მეტი ფაილი და მეტი ფაილი იქნება 582 00:27:06,940 --> 00:27:12,150 probabilistically, იმ 0S და 1s, იმ მაგნიტური ნაწილაკების, მივიღებთ გამოყენებული, 583 00:27:12,150 --> 00:27:16,220 თავდაყირა ან მარჯვენა მხარეს up, for სხვა ფაილი, 0S და 1s. 584 00:27:16,220 --> 00:27:17,980 >> ასე რომ თქვენ გაქვთ ეს ფანჯარა დრო. 585 00:27:17,980 --> 00:27:19,860 და ეს არ არის პროგნოზირებადი სიგრძე, ნამდვილად. 586 00:27:19,860 --> 00:27:22,240 ეს დამოკიდებულია ზომა თქვენი მყარი დისკზე და რამდენი ფაილი გაქვთ და 587 00:27:22,240 --> 00:27:23,490 რამდენად სწრაფად შეგიძლიათ ახალი. 588 00:27:23,490 --> 00:27:27,050 მაგრამ ეს ფანჯარა დროის განმავლობაში რომელსაც ეს ფაილი ჯერ კიდევ კარგად 589 00:27:27,050 --> 00:27:27,770 ანაზღაურებადი. 590 00:27:27,770 --> 00:27:31,050 >> ასე რომ, თუ ოდესმე გამოიყენოთ პროგრამები, როგორიცაა McAfee ან Norton ცდილობენ ფეხზე 591 00:27:31,050 --> 00:27:35,680 მონაცემებით, ყველა ისინი ვაკეთებთ ცდილობს ფეხზე ამ ე.წ. დირექტორია 592 00:27:35,680 --> 00:27:37,340 გაერკვნენ, სადაც თქვენი ფაილი. 593 00:27:37,340 --> 00:27:40,605 და ზოგჯერ Norton და იტყვის, ფაილი 93% ანაზღაურებადი. 594 00:27:40,605 --> 00:27:42,020 ისე, რას ნიშნავს ეს? 595 00:27:42,020 --> 00:27:45,690 ეს მხოლოდ იმას ნიშნავს, რომ სხვა ფაილი ერთსა დასრულდა გამოყენებით, ვთქვათ, 596 00:27:45,690 --> 00:27:48,920 იმ bits თქვენი ორიგინალური ფაილი. 597 00:27:48,920 --> 00:27:51,950 >> ასე რომ, რა ხდება რეალურად ჩართული აღმოფხვრას მონაცემები? 598 00:27:51,950 --> 00:27:55,720 ისე, თუ არ აქვს რაღაც Norton წინასწარ დაყენებული თქვენს კომპიუტერში, 599 00:27:55,720 --> 00:27:59,510 საუკეთესო შეგიძლიათ ზოგჯერ არის გამოიყურება ერთი მთელი მყარი დისკის ეძებს 600 00:27:59,510 --> 00:28:00,510 ნიმუშების ბიტი. 601 00:28:00,510 --> 00:28:05,350 ხოლო ერთი თემებია პრობლემა ნაკრები ხუთ არის, რომ თქვენ ძებნის 602 00:28:05,350 --> 00:28:09,570 ეკვივალენტს დისკის, სასამართლო იმიჯი კომპაქტური ფლეშ ბარათი 603 00:28:09,570 --> 00:28:13,660 ციფრული კამერა, ეძებს 0S და 1s, რომ, როგორც წესი, მაღალი 604 00:28:13,660 --> 00:28:16,720 ალბათობა წარმოადგენს დაწყება JPEG გამოსახულება. 605 00:28:16,720 --> 00:28:21,120 >> და შენ შეიძლება ფეხზე იმ გამოსახულება თუ ვთქვათ, თუ მე ვერ ვხედავ ამ ნიმუში 606 00:28:21,120 --> 00:28:24,380 ბიტი წლის სასამართლო იმიჯი, რომელსაც დიდი ალბათობაა, რომ აღნიშნავს 607 00:28:24,380 --> 00:28:25,650 დაწყების JPEG. 608 00:28:25,650 --> 00:28:29,520 და თუ მე ვერ ვხედავ იგივე ხასიათს ატარებს, კიდევ ერთხელ, ეს, ალბათ აღნიშნავს დაწყების 609 00:28:29,520 --> 00:28:32,440 კიდევ ერთი JPEG, ხოლო მეორე JPEG და მეორე JPEG. 610 00:28:32,440 --> 00:28:34,970 ეს კი, როგორც წესი, თუ როგორ მონაცემების აღდგენა იმუშავებს. 611 00:28:34,970 --> 00:28:37,870 რა არის ლამაზი შესახებ JPEGs არის, მიუხედავად იმისა, ფორმატში თავისთავად გარკვეულწილად 612 00:28:37,870 --> 00:28:44,400 კომპლექსი, დასაწყისიდან ყველა ასეთი ფაილი რეალურად საკმაოდ იდენტიფიცირება 613 00:28:44,400 --> 00:28:47,370 და მარტივი, როგორც ნახავთ, თუ თქვენ არ უკვე. 614 00:28:47,370 --> 00:28:50,270 >> ასე რომ, მოდით უფრო ახლოს ქვეშ hood, თუ ზუსტად რა იყო 615 00:28:50,270 --> 00:28:53,360 მიმდინარეობს და, რაც ამ 0S და 1s არიან, გადმოგცეთ უფრო მეტს 616 00:28:53,360 --> 00:28:55,330 კონტექსტში ამ კონკრეტული გამო. 617 00:28:55,330 --> 00:28:55,510 >> [ვიდეო აღწარმოების] 618 00:28:55,510 --> 00:28:58,700 >> _ სად თქვენი კომპიუტერის ინახავს საუკეთესო მუდმივი მონაცემები. 619 00:28:58,700 --> 00:29:03,390 გავაკეთოთ, რომ მონაცემები მოგზაურობს ეხლა RAM ერთად პროგრამული სიგნალები რომ გითხრათ 620 00:29:03,390 --> 00:29:06,110 მყარი დისკი, თუ როგორ უნდა შეინახოს, რომ მონაცემები. 621 00:29:06,110 --> 00:29:09,410 მყარი დისკის სქემები თარგმნა იმ სიგნალები შევიდა ძაბვის 622 00:29:09,410 --> 00:29:10,870 რყევების. 623 00:29:10,870 --> 00:29:14,970 ეს, თავის მხრივ, აკონტროლებენ მყარ დისკზე ნახვა მოძრავი ნაწილები, ზოგი რამდენიმე 624 00:29:14,970 --> 00:29:17,910 მოძრავი ნაწილები დარჩა თანამედროვე კომპიუტერული. 625 00:29:17,910 --> 00:29:22,130 >> ზოგიერთი სიგნალები აკონტროლებენ საავტომობილო რომელიც ტრიალებს რკინის დაფარული platters. 626 00:29:22,130 --> 00:29:25,470 თქვენი მონაცემები რეალურად შენახული ამ platters. 627 00:29:25,470 --> 00:29:28,610 სხვა სიგნალები გადაადგილება წაკითხვის / ჩაწერის ხელმძღვანელები წაიკითხა ან 628 00:29:28,610 --> 00:29:30,710 წერენ მონაცემებს platters. 629 00:29:30,710 --> 00:29:35,450 ეს მანქანა ისე ზუსტი რომ ადამიანის თმის ვერ გაივლის შორის 630 00:29:35,450 --> 00:29:37,280 ხელმძღვანელები და spinning platters. 631 00:29:37,280 --> 00:29:40,316 თუმცა, ეს ყველაფერი მუშაობს შესანიშნავი სიჩქარით. 632 00:29:40,316 --> 00:29:40,660 >> [END ვიდეო აღწარმოების] 633 00:29:40,660 --> 00:29:42,190 >> დავით Malan: ზომით პატარა ღრმა ახლა რა 634 00:29:42,190 --> 00:29:44,360 რეალურად იმ platters. 635 00:29:44,360 --> 00:29:44,720 >> [ვიდეო აღწარმოების] 636 00:29:44,720 --> 00:29:47,660 >> -მოდით შევხედოთ რაც ჩვენ მხოლოდ ვნახე ნელი მოძრაობით. 637 00:29:47,660 --> 00:29:51,710 როდესაც მოკლე პულსი ელექტროენერგიის გაგზავნილი წაკითხვის / ჩაწერის ხელმძღვანელი, თუ შეიჭრება 638 00:29:51,710 --> 00:29:54,650 მე პატარა ელექტრომაგნიტური for ფრაქცია მეორე. 639 00:29:54,650 --> 00:29:58,970 Magnet ქმნის სფეროში, რომელიც ცვლილებების პოლარობის of პატარა, პატარა 640 00:29:58,970 --> 00:30:02,850 ნაწილი რკინის ნაწილაკების რომელიც ქურთუკი ყოველ platter ზედაპირზე. 641 00:30:02,850 --> 00:30:05,940 >> ნიმუში სერია ეს პატარა, ბრალად-up სფეროებში დისკზე 642 00:30:05,940 --> 00:30:08,470 წარმოადგენს ერთ ცოტა მონაცემების ორობითი რიცხვი 643 00:30:08,470 --> 00:30:10,530 სისტემის მიერ გამოყენებული კომპიუტერები. 644 00:30:10,530 --> 00:30:13,775 ახლა, თუ მიმდინარე იგზავნება ერთი გზა მეშვეობით წაკითხვის / ჩაწერის ხელმძღვანელი, ტერიტორია 645 00:30:13,775 --> 00:30:15,970 არის პოლარიზებული ერთი მიმართულებით. 646 00:30:15,970 --> 00:30:17,950 თუკი მოქმედი იგზავნება საპირისპირო მიმართულებით, 647 00:30:17,950 --> 00:30:19,930 პოლარიზაცია აღდგება. 648 00:30:19,930 --> 00:30:22,370 >> როგორ უნდა გაიტანოთ მონაცემთა off ხისტი? 649 00:30:22,370 --> 00:30:24,090 უბრალოდ გადახედოს პროცესში. 650 00:30:24,090 --> 00:30:26,550 ასე რომ, ეს ნაწილაკების დისკზე რომ მიიღოს მიმდინარე 651 00:30:26,550 --> 00:30:27,960 წაკითხვის / ჩაწერის ხელმძღვანელი მოძრაობს. 652 00:30:27,960 --> 00:30:30,700 ერთად მილიონობით ეს magnetized სეგმენტები, და 653 00:30:30,700 --> 00:30:32,160 თქვენ გაქვთ ფაილი. 654 00:30:32,160 --> 00:30:36,060 >> ახლა, ცალი ერთი ფაილი შეიძლება იყოს მიმოფანტული მთელს დისკზე ნახვა 655 00:30:36,060 --> 00:30:39,970 platters, სახის როგორც არეულობას ფურცლების თქვენს მაგიდასთან. 656 00:30:39,970 --> 00:30:43,500 ასე რომ, სპეციალური დამატებითი ფაილი ინახება საქართველოს, სადაც ყველაფერი. 657 00:30:43,500 --> 00:30:45,985 ხომ არ გისურვებთ ჰქონდა ასე რომ? 658 00:30:45,985 --> 00:30:46,470 >> [END ვიდეო აღწარმოების] 659 00:30:46,470 --> 00:30:47,820 >> დავით Malan: კარგი, ალბათ, არ. 660 00:30:47,820 --> 00:30:52,070 ასე რომ, თუ რამდენი ბიჭები გაიზარდა ეს? 661 00:30:52,070 --> 00:30:53,970 OK, ამიტომ ნაკლები და ნაკლები ხელში ყოველწლიურად. 662 00:30:53,970 --> 00:30:56,550 მაგრამ მოხარული ვარ, რომ თქვენ, სულ ცოტა, ნაცნობი მათთან, რადგან ეს და ჩვენივე 663 00:30:56,550 --> 00:31:00,520 წიგნის დემო, სამწუხაროდ, იხოცებიან ძალიან ნელი სიკვდილი აქ იცნობენ. 664 00:31:00,520 --> 00:31:04,010 >> მაგრამ ეს არის ის, რაც მე, როგორც მინიმუმ, უკან საშუალო სკოლა, გამოიყენება გამოყენების სარეზერვო. 665 00:31:04,010 --> 00:31:08,110 და ეს იყო საოცარი, იმიტომ, რომ თქვენ შეიძლება შესანახად 1.4 მბ წლის 666 00:31:08,110 --> 00:31:08,930 ამ კონკრეტულ დისკზე. 667 00:31:08,930 --> 00:31:12,260 და ეს იყო მაღალი სიხშირის ვერსია, როგორც მიერ მითითებულ HD, რომელსაც აქვს 668 00:31:12,260 --> 00:31:14,240 რაც იმას ნიშნავს, სანამ დღევანდელი HD ვიდეო. 669 00:31:14,240 --> 00:31:16,400 >> სტანდარტული სიმჭიდროვე იყო 800 kilobytes. 670 00:31:16,400 --> 00:31:18,640 მანამდე კი, იყო 400 kilobyte დისკები. 671 00:31:18,640 --> 00:31:23,120 მანამდე კი, იყო 5 და 1/4 inch დისკები, რომლებიც ნამდვილად დისკეტი, 672 00:31:23,120 --> 00:31:25,680 და ცოტა უფრო ფართო და taller ვიდრე ეს ყველაფერი აქ. 673 00:31:25,680 --> 00:31:29,150 მაგრამ შეგიძლიათ რეალურად ვხედავ ე.წ. ფლოპი ასპექტი ამ დისკები. 674 00:31:29,150 --> 00:31:32,630 >> და ფუნქციურად, ისინი რეალურად საკმაოდ მსგავსია დისკები ზე 675 00:31:32,630 --> 00:31:33,570 მინიმუმ ამ ტიპის. 676 00:31:33,570 --> 00:31:37,270 ისევ, SSDs წელს უფრო ახალი კომპიუტერი მუშაობა ცოტა განსხვავებულად. 677 00:31:37,270 --> 00:31:41,530 მაგრამ თუ თქვენ გადატანა, რომ პატარა რკინის tab, შეგიძლიათ რეალურად ვხედავ პატარა ფუნთუშა, 678 00:31:41,530 --> 00:31:42,560 ან platter. 679 00:31:42,560 --> 00:31:43,830 >> ეს არ არის ლითონის მოსწონს ეს. 680 00:31:43,830 --> 00:31:46,000 ეს ერთი, ფაქტობრივად, ზოგიერთი იაფია პლასტიკური მასალა. 681 00:31:46,000 --> 00:31:46,750 და შეგიძლიათ სახის wiggle იგი. 682 00:31:46,750 --> 00:31:50,310 და თქვენ Trully მხოლოდ წაშლილია off ზოგიერთი რაოდენობის ბიტი ან მაგნიტური ნაწილაკების 683 00:31:50,310 --> 00:31:51,220 ამ დისკზე. 684 00:31:51,220 --> 00:31:52,710 >> ასე რომ, საბედნიეროდ, იქ არაფერი იგი. 685 00:31:52,710 --> 00:31:55,790 თუ რამ არის ამ გზით - და მოიცავს შენი თვალები და იმ შენს მეზობელს - 686 00:31:55,790 --> 00:31:58,865 თქვენ შეგიძლიათ სახის გაიყვანოს ამ მთელი sheath off იგრძნობა. 687 00:31:58,865 --> 00:32:01,900 მაგრამ ცოტა გაზაფხულზე, ასე რომ იცის, რომ თქვენი თვალები. 688 00:32:01,900 --> 00:32:03,620 ასე რომ, ახლა თქვენ გაქვთ ჭეშმარიტად მაგნიტური დისკის. 689 00:32:03,620 --> 00:32:07,090 >> და რაც აღსანიშნავია შესახებ ის არის, რომ, როგორც ეს 690 00:32:07,090 --> 00:32:10,830 მცირე წარმომადგენლობა უფრო დიდი დისკის, ეს ყველაფერი არის სუპერ, 691 00:32:10,830 --> 00:32:11,590 სუპერ მარტივია. 692 00:32:11,590 --> 00:32:15,170 თუ თქვენ pinch სიღრმისეული შესწავლა, ახლა რომ რომ რკინის რამ არის, და კანი 693 00:32:15,170 --> 00:32:20,990 მათ გახსნას, ყველა იქ არის ორი ცალი იგრძნო და ე.წ. მაგნიტური დისკის 694 00:32:20,990 --> 00:32:22,930 ნაჭერი ლითონის ქვეყნის შიგნით. 695 00:32:22,930 --> 00:32:25,990 >> და იქ მიდის ნახევარი ჩემი დისკზე-ს შინაარსს. 696 00:32:25,990 --> 00:32:27,540 არსებობს მიდის ნახევარი მათგანი. 697 00:32:27,540 --> 00:32:31,375 მაგრამ ეს ყველაფერი, რაც იყო spinning შიგნით თქვენი კომპიუტერი yesteryear. 698 00:32:31,375 --> 00:32:35,220 699 00:32:35,220 --> 00:32:38,310 >> და ისევ, იმისათვის, რომ ამ გასვლის პერსპექტივა, რამდენად დიდი არის ყველაზე თქვენი 700 00:32:38,310 --> 00:32:39,560 დისკები ამ დღეებში? 701 00:32:39,560 --> 00:32:41,960 702 00:32:41,960 --> 00:32:46,230 500 გიგაბაიტი, terabyte, შესაძლოა კომპიუტერი, 2 terabytes, 3 703 00:32:46,230 --> 00:32:47,630 terabytes, 4 terabytes, არა? 704 00:32:47,630 --> 00:32:52,480 ეს არის ერთ megabyte, მისცეს ან, რომელიც კი არ ჯდება ტიპიური MP3 705 00:32:52,480 --> 00:32:55,310 აღარ ამ დღეებში, ან რაღაც მსგავსი მუსიკა ფაილი. 706 00:32:55,310 --> 00:32:59,500 >> ასე რომ პატარა სუვენირების თქვენთვის დღეს, და ასევე, რათა დაეხმაროს contextualize რა 707 00:32:59,500 --> 00:33:03,570 ჩვენ უნდა აღების მიანიჭა ახლა პრობლემა მითითებული ხუთ. 708 00:33:03,570 --> 00:33:04,820 ასე რომ, ეს არის თქვენი შენარჩუნება. 709 00:33:04,820 --> 00:33:07,340 710 00:33:07,340 --> 00:33:13,370 ნება მომეცით გადასვლა, სადაც იქნება ხარჯვის შემდეგი pset ასევე. 711 00:33:13,370 --> 00:33:18,470 ასე რომ, ჩვენ ახლა მითითებული ამ გვერდზე for - oh, რამდენიმე განცხადებები სწრაფად. 712 00:33:18,470 --> 00:33:21,730 >> ეს პარასკევს, თუ გსურთ შეუერთდება CS50 ლანჩზე, წასვლა ჩვეული ადგილი, 713 00:33:21,730 --> 00:33:23,610 cs50.net/rsvp. 714 00:33:23,610 --> 00:33:25,100 და საბოლოო პროექტის - 715 00:33:25,100 --> 00:33:28,520 ასე თითო სილაბუსის ჩვენ გამოქვეყნდა საბოლოო პროექტის დაზუსტება უკვე. 716 00:33:28,520 --> 00:33:31,410 გააცნობიეროს, რომ ეს არ ნიშნავს, ეს იმის გამო განსაკუთრებით მალე. 717 00:33:31,410 --> 00:33:33,990 ეს გამოქვეყნდა, მართლაც, მხოლოდ მისაღებად თქვენ ბიჭები ფიქრობდა ამის შესახებ. 718 00:33:33,990 --> 00:33:37,620 მართლაც, სუპერ მნიშვნელოვანი პროცენტული თქვენ უნდა ბრძოლა 719 00:33:37,620 --> 00:33:40,780 საბოლოო პროექტების მასალა, რომელიც ჩვენ არც კი შემოსული ამ კლასის, 720 00:33:40,780 --> 00:33:42,730 მაგრამ, როგორც ყოველთვის, ჯერ კიდევ მომავალ კვირას. 721 00:33:42,730 --> 00:33:45,530 >> შენიშვნა, თუმცა, რომ სპეც მოუწოდებს რამდენიმე სხვადასხვა კომპონენტების 722 00:33:45,530 --> 00:33:46,190 საბოლოო პროექტს. 723 00:33:46,190 --> 00:33:49,590 უპირველესად, რამდენიმე კვირის განმავლობაში, არის წინასწარი წინადადება საკმაოდ ჩვეულებრივი ელექტრონული 724 00:33:49,590 --> 00:33:52,760 თქვენი TF ვუთხრა მას ან რა თქვენ ფიქრი თქვენი პროექტი, რომლის 725 00:33:52,760 --> 00:33:53,650 არანაირ ვალდებულებას. 726 00:33:53,650 --> 00:33:56,710 წინადადების იქნება თქვენი კონკრეტული ერთგულება და განაცხადა, რომ აქ, ეს არის ის, 727 00:33:56,710 --> 00:33:57,770 მინდა გააკეთოს ჩემი პროექტი. 728 00:33:57,770 --> 00:33:58,250 როგორ ფიქრობთ? 729 00:33:58,250 --> 00:33:58,650 ძალიან დიდი? 730 00:33:58,650 --> 00:33:59,145 ძალიან მცირე? 731 00:33:59,145 --> 00:34:00,330 არის თუ არა მართვადი? 732 00:34:00,330 --> 00:34:02,230 და ხედავთ სპეც გამოსაყენებლად. 733 00:34:02,230 --> 00:34:05,060 >> რამდენიმე კვირის შემდეგ, რაც მდგომარეობა ანგარიშში, რომელიც ერთნაირად 734 00:34:05,060 --> 00:34:08,260 შემთხვევითი ელ TF ვთქვა, თუ რამდენად ჩამორჩება თქვენ თქვენი საბოლოო 735 00:34:08,260 --> 00:34:12,360 პროექტის განხორციელებას, რასაც მოჰყვება CS50 Hackathon რომლის ყველას 736 00:34:12,360 --> 00:34:17,520 არის მიწვეული, რომელიც იქნება მოვლენა 8:00 საათზე ერთ საღამოს ჩათვლით 7:00 737 00:34:17,520 --> 00:34:19,150 პოსტი დილით. 738 00:34:19,150 --> 00:34:22,560 პიცა, როგორც მე შეიძლება მოხსენიებული კვირაში ნულოვანი, Wil მოემსახურება 9:00 PM, 739 00:34:22,560 --> 00:34:24,120 ჩინეთის საკვები 1:00 სთ. 740 00:34:24,120 --> 00:34:27,929 და თუ თქვენ ჯერ კიდევ მეძინა at 5:00, ჩვენ გადაგიყვანთ IHOP საუზმე. 741 00:34:27,929 --> 00:34:31,310 >> ასე რომ Hackathon არის ერთი უფრო სამახსოვრო გამოცდილება კლასის. 742 00:34:31,310 --> 00:34:35,290 მაშინ განხორციელების გამო და შემდეგ climactic CS50 სამართლიანი. 743 00:34:35,290 --> 00:34:38,070 სხვა დეტალები ყველა ამ ამ კვირის განმავლობაში მოვა. 744 00:34:38,070 --> 00:34:40,739 >> მაგრამ მოდით დავუბრუნდეთ რაღაც ძველი სკოლა - 745 00:34:40,739 --> 00:34:41,920 ერთხელ, მასივი. 746 00:34:41,920 --> 00:34:45,040 ასე მასივი იყო ლამაზი, იმიტომ, რომ ეს წყვეტს საკითხები, როგორიც დავინახეთ მხოლოდ 747 00:34:45,040 --> 00:34:49,290 მომენტში წინ სტუდენტი სტრუქტურები მიღების პატარა კონტროლიდან, თუ ჩვენ 748 00:34:49,290 --> 00:34:52,405 გვინდა სტუდენტი ერთი სტუდენტის ორი, სტუდენტური სამი სტუდენტი dot dot dot, 749 00:34:52,405 --> 00:34:54,400 ზოგიერთი თვითნებური რაოდენობის სტუდენტებს. 750 00:34:54,400 --> 00:34:58,850 >> ასე რომ, მასივები, რამდენიმე კვირის წინ swooped in და მოგვარდება ყველა ჩვენი პრობლემები არ 751 00:34:58,850 --> 00:35:03,340 იცის, წინასწარ რამდენი რამ ზოგიერთი ტიპის ჩვენ დაგვჭირდება. 752 00:35:03,340 --> 00:35:07,390 და ჩვენ ვხედავთ, რომ structs დაგვეხმარება შემდგომი ორგანიზება ჩვენი კოდი და შენარჩუნება 753 00:35:07,390 --> 00:35:11,660 კონცეპტუალურად მსგავსი ცვლადები, ისევე როგორც სახელი და სახლში, ერთად, ისე, რომ ჩვენ 754 00:35:11,660 --> 00:35:15,570 შეიძლება მკურნალობა მათ ერთი პირი, შიგნით რომელიც არსებობს მცირე პიესა. 755 00:35:15,570 --> 00:35:17,810 >> მაგრამ მასივების გარკვეული უარყოფითი მხარეები. 756 00:35:17,810 --> 00:35:19,780 რა უარყოფითი მხარეები ჩვენ შეექმნა 757 00:35:19,780 --> 00:35:22,320 ერთად მასივების დღემდე? 758 00:35:22,320 --> 00:35:23,450 რა არის ეს? 759 00:35:23,450 --> 00:35:28,130 ფიქსირებული ზომა - ასე მიუხედავად იმისა, რომ თქვენ შეიძლება შეძლებს გამოყოფს მეხსიერების 760 00:35:28,130 --> 00:35:32,310 მასივი, კიდევ რამდენი სტუდენტები თქვენ გაქვთ, რამდენი სიმბოლოები აქვს 761 00:35:32,310 --> 00:35:35,460 ეხლა შესახებ, რომ ერთხელ თქვენ გამოყო მასივი, თქვენ სახის მოხატული 762 00:35:35,460 --> 00:35:36,740 თავს შევიდა კუთხეში. 763 00:35:36,740 --> 00:35:40,600 >> იმის გამო, რომ ვერ ჩადეთ ახალი ელემენტების შევიდა შუა მასივი. 764 00:35:40,600 --> 00:35:43,660 თქვენ არ შეგიძლიათ ჩადეთ მეტი ელემენტები დასასრულს მასივი. 765 00:35:43,660 --> 00:35:47,750 მართლაც, თქვენ უნდა მიმართოს ქმნის მთელი ახალ მასივებს, როგორც ჩვენ განვიხილეთ, 766 00:35:47,750 --> 00:35:49,320 გადაწერა ძველი შევიდა ახალი. 767 00:35:49,320 --> 00:35:52,610 ისევ და ისევ, ეს არის თავის ტკივილი, რომელიც GetString ეხება თქვენთვის. 768 00:35:52,610 --> 00:35:56,170 >> თუმცა ისევ და ისევ, თქვენ კი არ ჩადეთ რაღაც შევიდა შუა მასივი 769 00:35:56,170 --> 00:35:58,200 თუ კურსი არ არის მთლიანად სავსე. 770 00:35:58,200 --> 00:36:03,010 მაგალითად, თუ ამ მასივში აქ ზომა ექვსი მხოლოდ ხუთ რამ მას, 771 00:36:03,010 --> 00:36:06,080 ასევე, შეიძლება მხოლოდ Tack რაღაც გადატანა ბოლომდე. 772 00:36:06,080 --> 00:36:08,200 მაგრამ რა, თუ გსურთ ჩადეთ რამე შევიდა შუა 773 00:36:08,200 --> 00:36:11,280 მასივი, მიუხედავად იმისა, რომ შესაძლოა, ხუთ ექვსი რამ არის? 774 00:36:11,280 --> 00:36:14,250 >> ისე, რა მივიღეთ, როდესაც ჩვენ გვქონდა ყველა ჩვენი ადამიანის მოხალისეები სცენაზე in 775 00:36:14,250 --> 00:36:15,110 კვირის წარსულში? 776 00:36:15,110 --> 00:36:18,710 თუ ჩვენ მოინდომა ვინმე აქ, ან ამ ხალხს თუ როგორ უნდა გადავიდეს ამ 777 00:36:18,710 --> 00:36:22,540 სხვათა შორის, თუ ამ ხალხს, თუ როგორ უნდა გადავიდეს ამ სხვათა შორის, და რომელიც გახდა ძვირი. 778 00:36:22,540 --> 00:36:26,950 გადასვლის ადამიანი შიგნით მასივი დასრულდა დასძინა up და რაზეც 779 00:36:26,950 --> 00:36:31,240 ჩვენს დროს, აქედან გამომდინარე, უამრავი ჩვენი n კვადრატში გაშვებული ჯერ მსგავსად ჩანართი დალაგების, ამისთვის 780 00:36:31,240 --> 00:36:32,550 მაგალითად, უარეს შემთხვევაში. 781 00:36:32,550 --> 00:36:36,520 ასე რომ მასივების არის დიდი, მაგრამ უნდა წინასწარ რამდენად დიდი გსურთ მათ. 782 00:36:36,520 --> 00:36:38,030 >> ასე რომ, ბატონო, აქ არის გამოსავალი. 783 00:36:38,030 --> 00:36:43,860 თუ არ ვიცი, წინასწარ რამდენი სტუდენტები შეიძლება ჰქონდეს, და ვიცი, ერთხელ 784 00:36:43,860 --> 00:36:47,870 I გადაწყვეტენ, თუმცა, მე მოხდა, რომ ბევრი სტუდენტი, რატომ არ მე ყოველთვის 785 00:36:47,870 --> 00:36:51,740 გამოყოფს ორჯერ მეტი სივრცე როგორც მე ალბათ ფიქრობთ, მე? 786 00:36:51,740 --> 00:36:54,450 ის არის, რომ არ გონივრული გამოსავალი? 787 00:36:54,450 --> 00:36:58,240 >> რეალურად, მე არ ვფიქრობ, რომ ჩვენ აპირებთ უნდა მეტი 50 slots 788 00:36:58,240 --> 00:37:02,190 ამ მასივი for საშუალო კლასის, მოდით უბრალოდ გარშემო up. 789 00:37:02,190 --> 00:37:07,040 გავაკეთებ 100 slots ჩემს მასივი, უბრალოდ ასე რომ ჩვენ შეგვიძლია ნამდვილად მისაღებად 790 00:37:07,040 --> 00:37:10,330 სტუდენტთა რაოდენობის ველოდო იყოს ზოგიერთ საშუალო კლასის. 791 00:37:10,330 --> 00:37:14,320 რატომ არა მხოლოდ გარშემო up და გამოყოფა მეტი მეხსიერების, როგორც წესი, ამისთვის მასივი 792 00:37:14,320 --> 00:37:16,290 ვიდრე ფიქრობთ შეიძლება გვჭირდება? 793 00:37:16,290 --> 00:37:20,190 რა არის ეს მარტივი pushback რომ იდეა? 794 00:37:20,190 --> 00:37:21,440 >> თქვენ მხოლოდ გაყვანაა მეხსიერება. 795 00:37:21,440 --> 00:37:25,350 ფაქტიურად ყველა პროგრამა წერთ მაშინ არის იქნებ გამოყენებით ორჯერ მეხსიერებაში, 796 00:37:25,350 --> 00:37:26,680 თქვენ რეალურად სჭირდება. 797 00:37:26,680 --> 00:37:28,990 და ეს უბრალოდ არ გრძნობს, როგორც განსაკუთრებით დახვეწილი გადაწყვეტა. 798 00:37:28,990 --> 00:37:31,990 უფრო მეტიც, ეს მხოლოდ ამცირებს ალბათობა პრობლემა. 799 00:37:31,990 --> 00:37:35,300 თუ მოხდება აქვს პოპულარული რა თქმა უნდა ერთი სემესტრის და თქვენ 101 800 00:37:35,300 --> 00:37:39,610 სტუდენტები, თქვენი პროგრამა ჯერ კიდევ ფუნდამენტურად წინაშე დგას იგივე საკითხი. 801 00:37:39,610 --> 00:37:44,280 >> ასე რომ, საბედნიეროდ, არსებობს გამოსავალი განცხადებაზე ყველა ჩვენი პრობლემების ფორმა 802 00:37:44,280 --> 00:37:46,790 მონაცემთა სტრუქტურები, რომლებიც უფრო რთული, ვიდრე 803 00:37:46,790 --> 00:37:47,970 ჩვენ ვნახეთ დღემდე. 804 00:37:47,970 --> 00:37:50,530 ეს, მე პრეტენზია, არის დაკავშირებული სიაში. 805 00:37:50,530 --> 00:37:51,920 ეს არის ჩამონათვალი ნომრები - 806 00:37:51,920 --> 00:37:54,970 9, 17, 22, 26, და 34 - 807 00:37:54,970 --> 00:38:00,120 რომ უკვე გაერთიანებულს გზა თუ რა მე შედგენილი, როგორც ისრებით. 808 00:38:00,120 --> 00:38:03,580 >> სხვა სიტყვებით, თუ მინდოდა წარმოადგენს მასივი, მე ვერ გააკეთებს 809 00:38:03,580 --> 00:38:04,910 მსგავსი რამ. 810 00:38:04,910 --> 00:38:07,310 და მე დააყენა ეს ოვერჰედის რაღაც მომენტში. 811 00:38:07,310 --> 00:38:09,970 მე ვერ გააკეთებს - 812 00:38:09,970 --> 00:38:12,520 hello, ყველა უფლება. 813 00:38:12,520 --> 00:38:14,470 ლოდინის. 814 00:38:14,470 --> 00:38:17,360 ახალი კომპიუტერული აქ, წმინდა - 815 00:38:17,360 --> 00:38:18,090 ყველა უფლება. 816 00:38:18,090 --> 00:38:21,730 >> ასე რომ, თუ მაქვს ეს ნომრები მასივი - 817 00:38:21,730 --> 00:38:28,880 9, 17, 22, 26, 24 - 818 00:38:28,880 --> 00:38:30,530 არ არის აუცილებელი გავაფართოვოთ. 819 00:38:30,530 --> 00:38:33,730 ყველა უფლება, ასე რომ აქ არის ჩემი მასივი - 820 00:38:33,730 --> 00:38:34,980 ღმერთო ჩემო. 821 00:38:34,980 --> 00:38:38,700 822 00:38:38,700 --> 00:38:40,395 ყველა უფლება, ასე რომ აქ არის ჩემი მასივი. 823 00:38:40,395 --> 00:38:44,110 824 00:38:44,110 --> 00:38:45,050 ღმერთო ჩემო. 825 00:38:45,050 --> 00:38:48,820 >> [სიცილი] 826 00:38:48,820 --> 00:38:49,440 >> დავით Malan: პრეტენზია. 827 00:38:49,440 --> 00:38:52,330 ეს არის ძალიან დიდი ძალისხმევა უნდა დაბრუნდეს და დაფიქსირება, რომ, ასე რომ, - 828 00:38:52,330 --> 00:38:54,290 26. 829 00:38:54,290 --> 00:38:57,650 ასე რომ, ჩვენ გვაქვს ეს მასივი 9, 17, 22, 26, და 34. 830 00:38:57,650 --> 00:39:00,260 იმ თქვენ ხედავთ უხერხულ შეცდომის უბრალოდ გააკეთა, 831 00:39:00,260 --> 00:39:00,830 იქ ის არის. 832 00:39:00,830 --> 00:39:04,490 >> ასე რომ, ამტკიცებენ, რომ ეს არის ძალიან ეფექტური გადაწყვეტა. 833 00:39:04,490 --> 00:39:07,310 მე გამოყოფილი, როგორც ბევრი ints როგორც მე უნდა - ერთი, ორი, სამი, 834 00:39:07,310 --> 00:39:09,100 ოთხი, ხუთი, თუ ექვსი - 835 00:39:09,100 --> 00:39:11,660 და მე მაშინ შენახული ნომრები შიგნით ამ მასივი. 836 00:39:11,660 --> 00:39:15,220 თუმცა ვარაუდობენ, მაშინ, მინდა ჩადეთ ღირებულება, როგორიცაა 8? 837 00:39:15,220 --> 00:39:16,100 ისე, სად წავიდეს? 838 00:39:16,100 --> 00:39:18,530 დავუშვათ, მინდა ჩადეთ ნომერი, როგორიც 20. 839 00:39:18,530 --> 00:39:19,790 ისე, სად წავიდეს? 840 00:39:19,790 --> 00:39:23,160 სადღაც იქ ცენტრიდან, ან ნომერი 35 უნდა წავიდეს 841 00:39:23,160 --> 00:39:24,010 სადღაც ბოლოს. 842 00:39:24,010 --> 00:39:25,320 მაგრამ მე ყველა იმ სივრცეში. 843 00:39:25,320 --> 00:39:29,120 >> ასე რომ, ეს არის ფუნდამენტური გამოწვევა მასივი, რომელიც არ არის გამოსავალი. 844 00:39:29,120 --> 00:39:32,280 I მტკიცებით მომენტში წინ, GetString წყვეტს ამ პრობლემას. 845 00:39:32,280 --> 00:39:37,380 თუ გსურთ ჩადეთ მეექვსე ნომერი წინამდებარე მასივი, რა არის მინიმუმ ერთი 846 00:39:37,380 --> 00:39:40,090 გადაწყვეტა შეგიძლიათ დაეცემა უკან დარწმუნებული ვარ, ისევე, როგორც ჩვენ არ უკავშირდება GetString? 847 00:39:40,090 --> 00:39:44,340 848 00:39:44,340 --> 00:39:46,030 რა არის ეს? 849 00:39:46,030 --> 00:39:48,190 >> ისე, რომ მას, მით უფრო ადვილი განაცხადა, ვიდრე გაკეთდეს. 850 00:39:48,190 --> 00:39:52,810 ჩვენ არ შეგვიძლია აუცილებლად მასივი დიდი, მაგრამ რა ვქნათ? 851 00:39:52,810 --> 00:39:56,570 მიიღოს ახალი მასივი, რომ უფრო დიდი, რა ზომის 6, ან იქნებ ზომა 10, თუ გვინდა 852 00:39:56,570 --> 00:40:00,490 მიიღონ უსწრებს რამ და შემდეგ კოპირება ძველი მასივი ახალ, შემდეგ კი 853 00:40:00,490 --> 00:40:01,680 გასათავისუფლებლად წლის მასივი. 854 00:40:01,680 --> 00:40:05,770 >> მაგრამ რა არის ქრონომეტრაჟი ახლა იმ პროცესში? 855 00:40:05,770 --> 00:40:09,870 ეს დიდი ო ო, იმიტომ, რომ გადაწერა აპირებს დაგიჯდებათ რამდენიმე ერთეული 856 00:40:09,870 --> 00:40:13,480 დრო, ასე არც თუ ისე იდეალური, თუ ჩვენ უნდა გამოყოფს ახალ მასივებს, რომელიც აპირებს 857 00:40:13,480 --> 00:40:15,610 მოიხმარენ ორჯერ მეხსიერების დროებით. 858 00:40:15,610 --> 00:40:16,660 ასლი ძველ ახალ - 859 00:40:16,660 --> 00:40:18,800 ვგულისხმობ, უბრალოდ თავის ტკივილი, რომელიც არის, კიდევ ერთხელ, ამიტომ ჩვენ წერს 860 00:40:18,800 --> 00:40:19,920 GetString თქვენთვის. 861 00:40:19,920 --> 00:40:21,380 >> ასე რომ, თუ რა შეიძლება ჩვენ გავაკეთოთ ნაცვლად? 862 00:40:21,380 --> 00:40:25,000 ისე, რა, ჩვენი მონაცემებით სტრუქტურა რეალურად აქვს ხარვეზები იგი? 863 00:40:25,000 --> 00:40:30,790 დავუშვათ, რომ მე დაძაბულია ჩემი მიზანი, რომელსაც მომიჯნავე მოცულობით მეხსიერება, სადაც 9 864 00:40:30,790 --> 00:40:34,500 არის უფლება შემდეგ 17, რომელიც უფლება შემდეგ 22 და ასე შემდეგ. 865 00:40:34,500 --> 00:40:39,570 >> და ვარაუდობენ, რომ 9 შეიძლება მეტი აქ RAM და 17 შეიძლება მეტი აქ RAM, 866 00:40:39,570 --> 00:40:40,990 და 22 შეიძლება მეტი აქ მეხსიერება. 867 00:40:40,990 --> 00:40:43,610 სხვა სიტყვებით, მე არ გვჭირდება კიდევ დაუჭიროს მხარი დაუჭიროს აღარ. 868 00:40:43,610 --> 00:40:47,850 მე უბრალოდ უნდა როგორმე თემა ნემსი მეშვეობით თითოეული ამ ნომრებზე, ან 869 00:40:47,850 --> 00:40:51,010 ამ კვანძების, როგორც ჩვენ ამას დავარქმევთ rectangles როგორც მე შედგენილი მათ, 870 00:40:51,010 --> 00:40:55,670 მახსოვს, თუ როგორ უნდა ბოლო ასეთი კვანძის პირველი. 871 00:40:55,670 --> 00:40:59,940 >> რა არის პროგრამირების მშენებლობა ჩვენ ვნახეთ ცოტა ხნის წინ რომლითაც მე 872 00:40:59,940 --> 00:41:03,030 შეიძლება განახორციელოს, რომ თემა, ან შედგენილი აქ, რომელთანაც შემიძლია 873 00:41:03,030 --> 00:41:05,430 ძალისხმევა ამ ისრები? 874 00:41:05,430 --> 00:41:06,500 ასე რომ, მითითებას, არა? 875 00:41:06,500 --> 00:41:09,560 თუ მე გამოყოფას არა მხოლოდ int, მაგრამ კვანძის - და 876 00:41:09,560 --> 00:41:10,810 კვანძის, უბრალოდ ნიშნავს, კონტეინერი. 877 00:41:10,810 --> 00:41:12,900 და ვიზუალურად, ვგულისხმობ მართკუთხედი. 878 00:41:12,900 --> 00:41:16,420 ასე რომ, კვანძის, როგორც ჩანს, სჭირდება მასში ორი ფასეულობის - 879 00:41:16,420 --> 00:41:21,490 int თავად, შემდეგ კი, როგორც ითვალისწინებს ქვედა ნახევარში მართკუთხედი, 880 00:41:21,490 --> 00:41:23,010 საკმარისი სივრცე int. 881 00:41:23,010 --> 00:41:26,130 >> ასე რომ, მხოლოდ ფიქრი და ანგარიში გახდა აქ, რამდენად დიდია ამ კვანძის, ამ 882 00:41:26,130 --> 00:41:27,170 კონტეინერის კითხვა? 883 00:41:27,170 --> 00:41:29,250 რამდენი ბაიტი for int? 884 00:41:29,250 --> 00:41:31,310 სავარაუდოდ 4, თუ ეს იგივე, როგორც ყოველთვის. 885 00:41:31,310 --> 00:41:33,270 და მაშინ, თუ რამდენი ბაიტი ამისთვის მაჩვენებელი? 886 00:41:33,270 --> 00:41:33,650 4. 887 00:41:33,650 --> 00:41:37,940 ასე რომ, ეს კონტეინერი, ან ამ კვანძის, არის იქნება 8 ბიტიანი სტრუქტურა. 888 00:41:37,940 --> 00:41:41,760 ოჰ, და ეს ბედნიერი დამთხვევა, რომ ჩვენ უბრალოდ დანერგა ეს ცნება 889 00:41:41,760 --> 00:41:44,400 struct ან C სტრუქტურა. 890 00:41:44,400 --> 00:41:48,890 >> ასე, რომ ამბობენ, თითქოს მე მინდა მიიღოს ნაბიჯი მიმართ უფრო დახვეწილი 891 00:41:48,890 --> 00:41:52,560 განხორციელების ჩამონათვალი ნომრები, უკავშირდება ჩამონათვალი ნომრები, მე უნდა გავაკეთოთ 892 00:41:52,560 --> 00:41:56,920 ცოტა მეტი აზროვნების up წინა და ვაცხადებ, არა მხოლოდ int, მაგრამ struct 893 00:41:56,920 --> 00:41:58,620 რომ მე მოვუწოდებ, პირობითად აქ, კვანძის. 894 00:41:58,620 --> 00:42:01,630 ჩვენ ხომ მას არაფერი ჩვენ გვინდა, მაგრამ კვანძის იქნება თემატური ბევრი 895 00:42:01,630 --> 00:42:03,560 რამ ჩვენ ვიწყებთ ეძებს ახლა. 896 00:42:03,560 --> 00:42:06,480 >> შიგნით რომ კვანძის არის int n. 897 00:42:06,480 --> 00:42:09,350 და მაშინ ამ სინტაქსის, პატარა უცნაური ერთი შეხედვით - 898 00:42:09,350 --> 00:42:12,960 struct კვანძის * მომავალი. 899 00:42:12,960 --> 00:42:16,900 ისე pictorially, რა არის ეს? 900 00:42:16,900 --> 00:42:21,000 სწორედ ქვედა ნახევარში მართკუთხედი, რომ დავინახეთ 901 00:42:21,000 --> 00:42:22,730 მხოლოდ ერთი წუთით წინ. 902 00:42:22,730 --> 00:42:27,600 >> მაგრამ რატომ ვარ მე ამბობდა struct კვანძის * განსხვავებით მხოლოდ კვანძის *? 903 00:42:27,600 --> 00:42:31,370 იმის გამო, რომ თუ ეს მაჩვენებელი არის მიუთითებს მორიგ კვანძის, უბრალოდ 904 00:42:31,370 --> 00:42:32,760 მისამართი კვანძის. 905 00:42:32,760 --> 00:42:35,630 ეს არის ის, შეესაბამება თუ რა ჩვენ ისაუბრა მითითებას დღემდე. 906 00:42:35,630 --> 00:42:39,690 მაგრამ რატომ, თუ ადასტურებენ, რომ ამ სტრუქტურის მოუწოდა კვანძის, შემიძლია ვთქვა, struct 907 00:42:39,690 --> 00:42:42,660 კვანძის შიგნით აქ? 908 00:42:42,660 --> 00:42:43,190 >> ზუსტად. 909 00:42:43,190 --> 00:42:46,490 ეს ერთგვარი სულელური რეალობა C. Typedef, ასე ვთქვათ, არა აქვს 910 00:42:46,490 --> 00:42:47,220 მომხდარა. 911 00:42:47,220 --> 00:42:48,510 C არის სუპერ ლიტერატურული. 912 00:42:48,510 --> 00:42:51,050 პროგრამა კითხულობს თქვენი კოდი ყველაზე ბოლოში, მარცხნიდან მარჯვნივ. 913 00:42:51,050 --> 00:42:54,930 და ვიდრე იგი გაიტანა, რომ მძიმით წლის ქვედა ხაზი, ვხვდები რა არა 914 00:42:54,930 --> 00:42:57,590 არსებობს, როგორც მონაცემების ტიპის? 915 00:42:57,590 --> 00:42:59,060 Node, გაცემა unquote კვანძის. 916 00:42:59,060 --> 00:43:03,050 >> მაგრამ იმის გამო, რომ უფრო verbose დეკლარაციის მე პირველ ხაზზე - 917 00:43:03,050 --> 00:43:05,340 typedef struct კვანძის - 918 00:43:05,340 --> 00:43:08,790 იმიტომ, რომ მოვიდა პირველად, სანამ curly აფრთხილებს, რომ სახის მოსწონს 919 00:43:08,790 --> 00:43:11,800 წინასწარი განათლების Clang, რომ თქვენ იცით, რა, მომეცი struct 920 00:43:11,800 --> 00:43:13,570 მოუწოდა struct კვანძის. 921 00:43:13,570 --> 00:43:16,270 გულწრფელად ვამბობ, მე არ მომწონს მოუწოდებენ რამ struct კვანძის, struct კვანძის ყველა 922 00:43:16,270 --> 00:43:17,090 მთელი ჩემი კოდი. 923 00:43:17,090 --> 00:43:20,660 მაგრამ მე მხოლოდ ერთხელ, მხოლოდ შიგნით, ასე, რომ მე შემიძლია ეფექტურად 924 00:43:20,660 --> 00:43:25,010 შექმნა ერთგვარი წრიული მითითება, არ მაჩვენებელი, რომ პირადად თავისთავად, მაგრამ 925 00:43:25,010 --> 00:43:29,400 მომცეთ კიდევ ერთი იდენტური ტიპის. 926 00:43:29,400 --> 00:43:32,330 >> გამოდის, რომ მონაცემთა სტრუქტურის ასე, რომ არსებობს რამდენიმე 927 00:43:32,330 --> 00:43:34,470 ოპერაცია, შესაძლოა, საინტერესოა ჩვენთვის. 928 00:43:34,470 --> 00:43:37,460 ჩვენ დაგვჭირდება ჩადეთ შევიდა სიაში მოსწონს ეს. 929 00:43:37,460 --> 00:43:39,850 ჩვენ დაგვჭირდება წაშლა სიიდან მოსწონს ეს. 930 00:43:39,850 --> 00:43:43,490 ჩვენ დაგვჭირდება ძებნის სიაში ღირებულება, ან უფრო ზოგადად, ტრავერსზე. 931 00:43:43,490 --> 00:43:46,410 ხოლო გვერდის ავლით, უბრალოდ ლამაზი გზა ამბობდა იწყება მარცხენა გადავიდეს ყველა 932 00:43:46,410 --> 00:43:47,650 გზა მარჯვნივ. 933 00:43:47,650 --> 00:43:52,640 >> და შეამჩნია, თუნდაც ამ ოდნავ მეტი დახვეწილი მონაცემთა სტრუქტურის, ნება 934 00:43:52,640 --> 00:43:56,510 მე შესთავაზოს, რომ ჩვენ შეგვიძლია სესხება ზოგიერთი იდეების ბოლო ორი კვირის განმავლობაში და 935 00:43:56,510 --> 00:43:58,410 განახორციელოს ფუნქცია მოუწოდა ძებნის მოსწონს ეს. 936 00:43:58,410 --> 00:44:01,360 ეს დაბრუნებას აპირებს ჭეშმარიტი ან ყალბი, რაც მიუთითებს, დიახ ან 937 00:44:01,360 --> 00:44:03,390 არა, N არის სიაში. 938 00:44:03,390 --> 00:44:05,960 მეორე არგუმენტი მაჩვენებელი სიაში თავად, ასე 939 00:44:05,960 --> 00:44:07,920 მომცეთ კვანძის. 940 00:44:07,920 --> 00:44:10,350 >> ყველა მე ვაპირებ მაშინ არის განაცხადოს დროებითი განსხვავებულია. 941 00:44:10,350 --> 00:44:12,730 ჩვენ ამას ეძახით Ptr მიერ კონვენციის, ამისთვის მაჩვენებელი. 942 00:44:12,730 --> 00:44:15,220 და მე მივანიჭოთ მას ტოლი დასაწყისში სიაში. 943 00:44:15,220 --> 00:44:16,680 >> ახლა კი შეამჩნია, ხოლო ციკლი. 944 00:44:16,680 --> 00:44:20,640 ასე რომ, სანამ მაჩვენებელი არ არის თანაბარი to null, მე ვაპირებ, რათა შეამოწმოს. 945 00:44:20,640 --> 00:44:24,520 არის მაჩვენებელი ისარი n ტოლია ო, რომ იყო მიღებული? 946 00:44:24,520 --> 00:44:26,410 და დაველოდოთ წუთში - new ნაწილი სინტაქსი. 947 00:44:26,410 --> 00:44:29,324 რა არის ისარი უეცრად? 948 00:44:29,324 --> 00:44:30,574 ჰო? 949 00:44:30,574 --> 00:44:34,200 950 00:44:34,200 --> 00:44:34,810 >> ზუსტად. 951 00:44:34,810 --> 00:44:38,860 ასე რომ, ხოლო რამდენიმე წუთის წინ, ჩვენ dot notation წვდომის რაღაც 952 00:44:38,860 --> 00:44:43,080 შიგნით struct, თუ ცვლადი თქვენ არ არ არის struct 953 00:44:43,080 --> 00:44:47,420 თავისთავად, მაგრამ მომცეთ struct, საბედნიეროდ, ნაწილი სინტაქსი, რომ 954 00:44:47,420 --> 00:44:48,620 საბოლოოდ ხდის ინტუიციური გრძნობა. 955 00:44:48,620 --> 00:44:52,360 Arrow ნიშნავს, რომ დაიცვას მაჩვენებელი, როგორც ჩვენი ისრები, როგორც წესი, ნიშნავს 956 00:44:52,360 --> 00:44:56,570 pictorially, და წავიდეთ ზე მონაცემთა სფეროში შიგნით. 957 00:44:56,570 --> 00:44:59,700 ასე რომ arrow არის იგივე როგორც dot, მაგრამ თქვენ გამოიყენოს იგი როდესაც თქვენ მაჩვენებელი. 958 00:44:59,700 --> 00:45:05,270 >> ასე რომ, მხოლოდ იმიტომ, რომ Recap შემდეგ, თუ n სფეროში შიგნით struct მოუწოდა მაჩვენებელი 959 00:45:05,270 --> 00:45:07,760 შეადგენს შეადგენს ო, დაბრუნება ასეა. 960 00:45:07,760 --> 00:45:11,970 წინააღმდეგ შემთხვევაში, ამ ხაზის აქ - მაჩვენებელი შეადგენს მაჩვენებელი მომავალი. 961 00:45:11,970 --> 00:45:17,540 ასე რომ, თუ რას აკეთებს, შეტყობინება, არის თუ მე ამჟამად მიუთითებს struct 962 00:45:17,540 --> 00:45:21,430 შემცველი 9 და 9 არ არის ნომერი ვეძებ - ვივარაუდოთ, მე დიდი იმედით 963 00:45:21,430 --> 00:45:22,830 ამისთვის ო შეადგენს 50 - 964 00:45:22,830 --> 00:45:25,930 მე ვაპირებ: ჩემი დროებითი მაჩვენებელი რომ არ აღვნიშნო, რომ ამ კვანძის 965 00:45:25,930 --> 00:45:31,190 აღარ, მაგრამ მაჩვენებელი ისარი მომავალი, რომელიც გეგმავს ჩემთვის აქ. 966 00:45:31,190 --> 00:45:34,270 >> ახლა მივხვდი, არის whirlwind დანერგვა. 967 00:45:34,270 --> 00:45:37,380 ოთხშაბათს, ჩვენ რეალურად გაკეთება რამდენიმე ადამიანისა და კიდევ რამდენიმე 968 00:45:37,380 --> 00:45:38,900 კოდი ზე ნელა მიმდინარეობს. 969 00:45:38,900 --> 00:45:42,990 მაგრამ გააცნობიეროს, ჩვენ ახლა ჩვენი მონაცემები სტრუქტურები უფრო რთული ისე, რომ ჩვენი 970 00:45:42,990 --> 00:45:45,780 ალგორითმები შეუძლიათ მიიღონ უფრო ეფექტური, რომელიც იქნება საჭირო ამისთვის 971 00:45:45,780 --> 00:45:50,500 pset ექვსი, როდესაც ჩვენ ჩატვირთვა in, კიდევ ერთხელ, იმ 150,000 სიტყვა, მაგრამ უნდა გაკეთება 972 00:45:50,500 --> 00:45:55,650 ეფექტურად, და იდეალურად, შექმნა პროგრამა, რომელიც მუშაობს ჩვენი წევრებს არ 973 00:45:55,650 --> 00:46:00,460 წრფივი და არა n კვადრატში, მაგრამ მუდმივი დროს, იდეალური. 974 00:46:00,460 --> 00:46:02,300 >> ჩვენ დავინახავთ, თქვენ ოთხშაბათს. 975 00:46:02,300 --> 00:46:07,240 >> სპიკერი: მომდევნო CS50, დავით დაავიწყდა მისი ბაზა შემთხვევაში. 976 00:46:07,240 --> 00:46:12,770 >> დავით Malan: და ასე თქვენ ტექსტი შეტყობინებები ერთად C. რა - 977 00:46:12,770 --> 00:46:14,020 >> [სხვადასხვა ტექსტური შეტყობინება საფუძველზე ხმები] 978 00:46:14,020 --> 00:46:19,734