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