[მუსიკის დაკვრა] დევიდ ჯ Malan: ეს არის, როგორც გამგებლის სემინარი დღეს. OK. ასე რომ, ძალიან წვიმიანი out. ეს ტენდენცია მოხდეს ოთხშაბათს, მაგრამ ყველა მეტი შესაძლებლობა შეკითხვებზე დღეს. მოდით დავიწყოთ off რეალურად ფილმი რაღაც მომენტში. მაგრამ ჩვენ დავიწყებთ გრანდიოზულად, როგორც ყოველთვის. ეს არის CS50, და ეს არის ბოლომდე კვირაში 4. ასე რომ, თუ თქვენ ოდესმე ნახეს სატელევიზიო ან ფილმის, სადაც არსებობს გარკვეული კომპიუტერული ექსპერტები და პოლიცია, ან FBI, ან რაღაც სააგენტო ცდილობს დაჭერა ზოგიერთი მოწინააღმდეგის, ასევე, თქვენ ალბათ მოვისმინეთ გამოხატვის "გავაძლიეროთ," რომლის დროსაც, რომ ტექნიკოსი როგორმე magically zooms უსასრულოდ შორს რომ ნახოთ კრიმინალები პირადობის ან სანომრე კი მბზინავი სარკე ან Glint სხვისი თვალით. ასე რომ, მართლაც, მოდით შევხედოთ რამდენიმე ასეთი სცენები პერსონაჟები. [ვიდეო აღწარმოების] -OK, ახლა მოდით მისაღებად კარგი შევხედოთ თქვენ. -Hold იგი. აწარმოებს, რომ უკან. -Wait წუთში. ტურიზმი უფლება. -არის, გაყინვას, რომ. სრული ეკრანზე. -OK, გაყინვას, რომ. გამკაცრდეს up, იქნება თუ არა? -Vector წელს, რომ ბიჭი, რომელსაც უკანა წამყვანი. -ზომით უფლება აქ, ამ ადგილას. -უფლების ტექნიკა, იმიჯი შეიძლება გაფართოვდა და დახვეწა. რა არის ეს? -ეს გაფართოება პროგრამა. -შეგიძლიათ ნათელია, რომ ნებისმიერი? მე არ ვიცი. მოდით გაზრდის. -გაძლიერება მონაკვეთზე A6. -I გაუმჯობესებულია დეტალურად, and-- მე ვფიქრობ, რომ საკმარისია, რათა გაზარდოს, გაათავისუფლოს იგი ჩემს ეკრანზე. -I გაუმჯობესებულია ასახვას მისი თვალი. -მოდით აწარმოებს ამ გზით ვიდეო გაფართოება. -Edgar, შეგიძლიათ გაზარდოს ეს? -Hang შესახებ. -I've უკვე მუშაობს ამ ასახვა. -Someone ასახვა. -Reflection. -არის ასახვა იმ კაცის სახე. -The ასახვა. -არის ასახვა. -ზომით სარკეში. -შეგიძლიათ ასახვა. -შეგიძლიათ აძლიერებს იმიჯი აქედან? -შეგიძლიათ აძლიერებს მას უფლება აქ? -შეგიძლიათ აძლიერებს მას? შეგიძლიათ გაზარდოს ეს? -შეიძლება ჩვენ გაზარდოს ეს? -შეგიძლიათ აძლიერებს მას? -Hold მეორე, მე გაზარდოს. -ზომით კარზე. ჯერ უფრო 10. -ზომით. -Move წელს. -იმაზე. -Wait, შეწყვიტოს. გაჩერების. -Pause იგი. -როტაცია Us 75 გრადუსი გარშემო ვერტიკალური, გთხოვთ. გაჩერების. დაბრუნება ნაწილი შესახებ კარი, კიდევ ერთხელ. -Got იმიჯი Enhancer, რომელიც შეიძლება bitmap? -ეი, შესაძლოა, ჩვენ შეგვიძლია გამოვიყენოთ Pradeep Sen მეთოდის სანახავად შევიდა ფანჯრები. -ეს პროგრამა არის დონით. -The Eigenvalue გამორთულია. -უფლების კომბინაცია ალგორითმი დააკავეს ის მიღებული აღმოფხვრის ალგორითმები, რათა მომდევნო დონეზე, მე და მათი გამოყენება აძლიერებს ამ ფოტოს. -Lock და გაფართოების z ღერძი. -გაძლიერება. -გაძლიერება. -გაძლიერება. -Freeze და აძლიერებს. [END აღწარმოების] დევიდ ჯ Malan: ყველა უფლება, ყველა იმ რეალურად სიტყვა. ისინი უბრალოდ დაძაბულია ერთად გზა, რომელიც არ არის რეალურად მოაზროვნე. და, ფაქტობრივად, CS50 და კურსების, როგორც ეს ტენდენცია ჩაშლის ბევრი ტელევიზია და ფილმები თქვენთვის. იმის გამო, რომ მაშინ, როცა იმ კომპიუტერული ექსპერტები არიან rattling off ვადები და განაცხადა, ლამაზი რამ, როგორიცაა საკუთრივი ვექტორი, და z ღერძი, და ნებისმიერი რაოდენობის სხვა რეალურად უფრო ტექნიკური თვალსაზრისით, ისინი ნამდვილად ჩაწყობის სიტყვა ერთად ძალიან ხშირად. ის არის, რომ ერთ-ერთი ჩვენი იმედები არის, რომ, როგორც გვერდითი ეფექტი აღების კურსები როგორც ეს, იქნება უფრო მეტი ადამიანი მსოფლიოში რეალურად შეძლებს მოხდეს და მხოლოდ ოდესმე ისე ოდნავ გავლენა იქონიოს ხარისხი და სიზუსტე იმ ფილმების? ფაქტობრივად, მოდით შევხედოთ რეალობას. ასე რომ, აქ არის აპარატის ფოტო მერი, ერთ-ერთი ჩვენი სწავლების პრაქტიკის. და ვფიქრობ, რომ ის არის ეჭვმიტანილი რაღაც. და მაინც, არსებობს ერთგვარი ზოგიერთი მტკიცებულება მისი თვალი, ან ასახვა მისი სათვალე. ისე, თუ ჩვენ ზუსტად როგორც ფილმების შესთავაზოს, სადაც ჩვენ მიუახლოვდით და "გაზარდოს", ეს არის, თუ რამდენად ინფორმაციას არის მარიამის სახე როცა ხელში იმიჯი რომ ორიგინალური რეზოლუცია. და, ფაქტობრივად, თქვენ ხედავთ, ეს წერტილები. და ეს არის ის, რაც არის მოუწოდა პიქსელი, P-I-X-E-L-S, რომელიც მხოლოდ მოედანზე, როგორც წესი, რომ არის dot, რომელიც შეადგენს იმიჯი. და უკან დღეში, და რეალურად კი დღეს ზოგიერთ დღევანდელ LED TVs ან LCD ტელევიზორები, თუ თქვენ მოხვდით ერთი თქვენს ოთახში ან სახლში, თუ თქვენ ახვიდეთ სუპერ ახლოს, და მით უმეტეს, თუ ეს არის გარკვეულწილად ძველი ტელევიზორი, თქვენ ალბათ კი ვხედავ ამ წერტილების და რომ ის, რაც დაკომპლექტებას გამოსახულება. და არ არსებობს უფრო ინფორმაცია, ვიდრე ეს. ჩვენ შეგვიძლია "გაზარდოს", იმ გაგებით, დამარბილებელი რამ მეტი და სახის inferring სახის, ერთგვარი რა ფერი უნდა იყოს შემდეგი მერი თვალი ასე, რომ ეს არ არის რეალურად ასე pixelated. მაგრამ თუ მე შენარჩუნება მასშტაბირება, არსებობს არის ცუდი ბიჭი მისი თვალი. მომწონს, რომ არის ყველა ინფორმაცია გვაქვს. თქვენ არ შეგიძლიათ ინფორმაცია არსაიდან. არსებობს მხოლოდ სასრული რაოდენობის ბიტი არსებობს. ასე რომ პრობლემა Set 4, სადაც თქვენ გაქვთ შესაძლებლობა ითამაშოს ამ სახის მსოფლიოში. პრობლემა კომპლექტი 4, თქვენ შეისწავლონ მსოფლიოს გრაფიკა, და სასამართლო, და რეალურად დაწეროს კოდი რომ აღდგება დაკარგული images. თქვენ დაწერა კოდი, რომელიც მანიპულირებს არსებული სურათები და საბოლოო ჯამში, გვესმოდეს, რა არის მიმდინარეობს ქვეშ hood. და, თურმე, ეს, ფაქტობრივად, არ არის, რომ რთულია. მაგალითად, თუ გვინდოდა წარმოადგენს smiley face, სადაც ამ შავი პიქსელი, ან ეს შავი წერტილები, ასევე, ჩვენ უბრალოდ წარმოადგენს მათ, როგორც ჭეშმარიტად bitmap. და თუ ოდესმე გამიგია, რომ გამოხატვის bitmap, ალბათ ის ახლა იწყება, რათა ცოტა მეტი აქვს დღეს. ჩვენ უკვე კარგად ვიცით, თუ რა ცოტა არის. ეს არის 0 ან 1. და რუკა არის რაღაც როგორიცაა ნაჭერი ქაღალდი რომელიც გაძლევთ მიმართულებები და აქვს იქნებ ქსელის x- და y-კოორდინატები. ასე რომ, აქ არის Bitmap. ეს რუკა ბიტი რომლის დროსაც 1 როგორც ჩანს, აპირებს წარმოადგენს თეთრი pixel, და 0 აპირებს წარმოადგენს შავი pixel. მაგრამ ჩვენ ნამდვილად Flip ირგვლივ. ეს ნამდვილად არ აქვს მნიშვნელობა, ასე რომ სანამ ჩვენ თანმიმდევრული. და აი, როგორ, წელს ორობითი შიგნით კომპიუტერის მეხსიერებაში, ან თუნდაც ქვეყნის შიგნით ფაილი თქვენს ხისტ drive-- შეიძლება თქვენ შესანახად უმარტივესი smiley face images. მაგრამ რა არის, ჩვენ, რა თქმა უნდა, აკლია ამ იმიჯი? ფერი, არა? ეს აშკარა შემდეგი ნაბიჯი ან გაფართოება, რათა გაუმჯობესდეს ეს ფერი. ასე რომ, სამწუხაროდ მხოლოდ ერთი ცოტა, 0 და 1, ჩვენ ვერ წარმოადგენს ფერის. ეს შეიძლება იყოს წითელი ან ლურჯი, ან შავი, ან თეთრი, ან მწვანე ან ვარდისფერი, ან წყვილი ფერები. მაგრამ სიმარტივის გამო, ჩვენ გამოგიგზავნით მხოლოდ ვივარაუდოთ, შავი და თეთრი. ასე რომ, რა ლოგიკურად გვჭირდება, თუ ჩვენ სურთ განახორციელონ ფერი გამოსახულება? ჩვენ რა უნდა გავაკეთოთ? Like თუ შეზღუდვის ფაქტორი აქ ის არის, რომ ერთი bit შეგიძლიათ მხოლოდ წარმოადგენს ორ ქვეყანას 0 ან 1, თეთრი ან შავი, რას უნდა გავაკეთოთ? აუდიტორია: სხვა მონაცემები. დევიდ ჯ Malan: მეტი ბიტი, ჰო მეტი მონაცემები, უფრო მეტი ბიტი. და, მართლაც, რომ ზუსტად როგორ ფერადი სურათები წარმოდგენილი. იმის ნაცვლად, რომ ერთი bit, 0 ან 1 ყოველი პიქსელის, თითოეული dot, თქვენ უბრალოდ გამოიყენოთ მრავალი. შესაძლოა გამოიყენოთ 8, შესაძლოა, უფრო ხშირად გამოყენება 24, და მართლაც, პრობლემა მითითებული 4, რომელიც თქვენ თამაშობთ ფაილი ფორმატი, რომელიც იყენებს 24 ბიტს, როგორც წესი. მაგრამ ყველაზე მეტად თქვენ, ალბათ, იცნობს JPEGs. თუ თქვენ ოდესმე მიღებული ფოტო თქვენი ტელეფონი, ან ატვირთული ან ჩანს რაღაც Facebook, ან Flickr, ნებისმიერი რაოდენობის ფოტო დაფუძნებული საიტებზე, თქვენ ალბათ გინახავთ JPEG image ადრე. და აღმოჩნდება, რომ ეს არის ფაილი ფორმატი ჩვენ ვაპირებთ გამოვიყენოთ pset 4, რომლის დროსაც თქვენ აპირებს აქვს ფეხზე სურათები რომ მე შემთხვევით წაშლილი საწყისი კორუმპირებული მეხსიერების ბარათი კამერა, თუ გნებავთ. და აღმოჩნდება, რომ მიუხედავად იმისა, JPEG საკმაოდ sophisticated-- ეს ბევრად უფრო დახვეწილი ვიდრე შავი და თეთრი წერტილების დავინახეთ მომენტში წინ, იმიტომ, რომ იქ რეალურად ლამაზი ალგორითმები, გამოიყენება შეკუმშოს JPEG, ასე რომ რომ თქვენ შეგიძლიათ აქვს ძალიან ლამაზი, ხარისხის სურათს მაგრამ მისი გამოყენება შედარებით რამდენიმე ბიტი. ჩვენ დავბრუნდებით შეკუმშვის ადრე ხანგრძლივი. გამოდის, რომ პირველი სამი ბაიტი წელს JPEG image-- არ აქვს მნიშვნელობა რა თქვენ გადაღებული ფოტოს of-- არის ის ღირებულებები, 255, 216, 255. სხვა სიტყვებით, თუ უბრალოდ ვხედავთ, რომ ნიმუში ბიტი, აქ წარმოდგენილია როგორც სამი ბაიტი, ან 24 ბიტი სულ, მაღალი ალბათობით შეგიძლიათ დავასკვნათ, რომ თქვენ ეძებს ის ამ პირველი სამი bytes JPEG. და ეს არის ის, რაც ცნობილია როგორც ხელმოწერა JPEG. ბევრი ფორმატის იქ, როგორც წესი, იწყება გარკვეული ნიმუშების 0S და 1s, ისე, რომ Windows და Mac OS და iOS, და Android, თუ რა სახის ფაილში არიან, გარდა ამისა, ე.წ. ფაილი გაფართოება, რომ ბევრი ფაილი აქვს. თუ თქვენ არ .jpg, რომ კიდევ ნახავ, კომპიუტერი. მოდით ახლა შევხედოთ ამ ცოტა უფრო ტექნიკურად. ჩვენ ვიცით ათობითი სისტემის 0 მეშვეობით 9. ჩვენ ვიცით, ორობითი არის 0 და 1. და თუ ფიქრობთ, უკან PSet 0, გვქონდა თუ არა ჭიდაობა, ცოტა, რაღაც მოუწოდა თექვსმეტობითი, სადაც თქვენ გაქვთ 16 ციფრები, ნაცვლად 10 ან 2-ის ნაცვლად. და იმ ციფრები, კონვენციის, არის 0 მეშვეობით 9 და შემდეგ ვ, სადაც f წარმოადგენს რა ათობითი რიცხვი, ისევე, როგორც სწრაფი საღი აზრის შეამოწმეთ? ასე რომ, 15. და უნდა წარმოადგენს 10 მხოლოდ ბუნება შეკვეთის რომ მე მოცემული. ეს არის მხოლოდ თვითნებური კონვენცია, მაგრამ ეს საკმაოდ სტანდარტული. ასე რომ, თუ დავაკვირდებით ამ ნიმუში სამი ბაიტი მოდით დავიწყო შევხედოთ მას ისე შეესაბამება, თუ როგორ კომპიუტერული მეცნიერები ზოგადად შევხედოთ და ვიფიქროთ ფაილი. თქვენ რა თქმა უნდა ვიფიქროთ ფაილი 0s და 1s, და ათწილადის მაგრამ სინამდვილეში, ჩვენ, როგორც წესი იყენებენ ორობითი ან მეტი, როგორც წესი, hexadecimal-- უკან PSet 0. ნება მომეცით, შესთავაზოს, რომ 255, 216 და 255 მხოლოდ ამ ნიმუშების 0S და 1s. და თქვენ შეგიძლიათ ნახოთ, თუ თქვენ გვინდა, რომ მათემატიკის საწყისი კვირა 0. მაგრამ, ახლა, მხოლოდ ვივარაუდოთ, რომ ეს მართლაც სწორი. მე უბრალოდ გადაწერილი სამი ათობითი ციფრები, სამი ორობითი ღირებულებებს. ახლა რა მე ვაპირებ ამის გაკეთება არის უბრალოდ დაამატოთ ზოგიერთი თეთრი სივრცე, მხოლოდ readability გულისთვის. და შეამჩნია, რომ მე უბრალოდ აპირებს გადაადგილება რამ გარდა. ასე რომ, სანამ მას შემდეგ, რაც ადრე, მას შემდეგ. მე არაფერს აკეთებს საინტერესო სხვა მეტი, ვიდრე უბრალოდ გავრცელების რამ, ასე რომ რომ გაფრთხილების თითოეული კომპლექტი რვა ბიტი არის ორი კომპლექტი ოთხი ბიტი. ეს არის სასარგებლო, რადგან თექვსმეტობითი განსაკუთრებით მოდური იმიტომ, რომ თითოეული თექვსმეტობითი ციფრი 0-დან f, ან უფრო კონკრეტულად 0 მეშვეობით 15, შეიძლება წარმოდგენილი ზუსტად ოთხი ბიტი. სხვა სიტყვებით, თექვსმეტობითი თუ გვინდა წარმოადგენენ 0, უბრალოდ 0000, ოთხი zeros. და თუ გვინდა, რომ წარმოადგენს 15 ეს 1111, რომელიც არის ოთხი ბიტი. და თუ მათემატიკის, თუ ეს პირობა ადგილი, ეს არის 16s ადგილი, რომ აპირებენ you-- უფრო სწორად, რომ აპირებს რომელთა მიზანია უკაცრავად, ორობითი, რომ აპირებს გაძლევთ 15 ადგილას, twos ადგილი, fours და მერვე ადგილი. ნება მომეცით, შესთავაზოს, რომ მითითებული ოთხი ბიტი მარცხენა არის ის, რაც ჩვენ ვაპირებთ, რომ მოვუწოდო ვ. ეს არის ყველაზე დიდი ნომერი შეგიძლიათ წარმოადგენს ოთხი ბიტი. ჩვენ უკვე ვიცით, თექვსმეტობითი, f არის ყველაზე დიდი ციფრი თექვსმეტობითი. ჩვენ მივიღეთ კიდევ ერთი f იქ, ორი უფრო მეტი არსებობს. და ახლა, უბრალოდ იღებს რწმენა რომ მე არ კეთდება მათემატიკის უფლება და რომ მარცხენა ნახევარში იმ ბიტი, 1101, არის იგივე როგორც დ თექვსმეტობითი. და მარჯვენა ხელის, 1000, მხოლოდ 8. და რომ ერთი ადვილად ვხედავ, არა? 8 represents-- არის სწორი ქვევმოთ რომ მერვე ადგილი. ასე რომ, ჩვენ გვაქვს ერთი მერვე სვეტი და არაფერი fours, ორს და პირობა. ასე რომ, ახლა უფრო პირობითად, ადამიანები, როგორც წესი, დაწერა თექვსმეტობითი ციფრები, როგორც ეს, თქვენ უბრალოდ გაუქმება მათ ერთად, და მაშინ პრეფიქსი მათ 0x. ეს სხვა არაფერია, ვიზუალური ნახავ რომ human-- აქ მოდის თექვსმეტობითი value-- რადგან ეს შეიძლება არ სხვაგვარად ცხადია. რომელი ვთქვა, საბოლოო ჯამში, რომ ნიმუში zeros და პირობა, ან ნიმუში თექვსმეტობითი ციფრები ექვივალენტური რომ თქვენ აპირებს დაიწყოს ეძებს პრობლემა Set 4 არის ამ და პრობლემა Set 4 სპეც ფეხით თქვენ მეშვეობით ამ უფრო detail-- მაგრამ გვესმის, როგორც ერთგვარი arcane როგორც ეს შეიძლება ერთი შეხედვით, თქვენ აპირებს დაიწყება ვხედავთ ამ ბევრი. და სინამდვილეში, თუნდაც GDB, debugger ჩვენ გააცნო ორშაბათს და დენ წარუდგენს ამ PSet 3, აპირებს ხშირად გაჩვენებთ თექვსმეტობითი ღირებულებებს მხოლოდ იმიტომ, რომ უფრო ჩვეულებრივი, ვიდრე ათობითი ან ორობითი მსოფლიოში კომპიუტერი. ახლა მოდით დააყენა ამ კონტექსტში. ბევრ თქვენგანს ალბათ გახსოვთ ეს ფოტოზე აქ, რომელიც მოვიდა რა? Vista, უფრო ადრე, ვიდრე რომ, Windows XP გააკეთა ეს დებიუტი. ასე რომ, ეს არის ლამაზი პეიზაჟი. და სინამდვილეში, თუ poke გარშემო online-- მე ვფიქრობ, რომ ეს სტატია, სადაც ვინმე ძალიან საოცრად გამოვიდა ი ამ ადგილას მსოფლიოში შეიქმნა მისი კამერა ზუსტად უფლება მივალ სოფელში და ეს დღესაც მოსწონს, მაგრამ ეს არის ზუსტად იგივე ჭრილში. ეს სურათი, თუმცა, არის ფაილი ფორმატი მოუწოდა bitmap, ბ-m-გვ. და ჩვენ ვაპირებთ, რომ მიიღოს super სწრაფი შეხედვით, რას ნიშნავს. მაგრამ bitmap უბრალოდ სხვადასხვა გზით წარმოადგენს გამოსახულებები ჯერ კიდევ გამოყენებით პიქსელი in 0S და 1s, საბოლოო ჯამში. მაგრამ სწრაფი შეხედვით, მას აქვს უფრო საინტერესო ხელმოწერა დასაწყისში ფაილი. ეს არ არის მხოლოდ სამი bytes, არამედ იქ მთელი bunch of ნიმუშების bytes რომ არ წინასწარ განსაზღვრული მნიშვნელობა. მაგალითად, სადღაც პირველი რამდენიმე ბაიტი bitmap გამოსახულება იქნება ზომა გამოსახულება, სიგანე გამოსახულება, სიმაღლე იმიჯი, ამიტომ სასარგებლო მეტადატის, თუ გნებავთ. სასარგებლო ინფორმაცია, რომ Photoshop ან ნებისმიერი გრაფიკული პროგრამა თქვენ იყენებთ შეიძლება რეალურად აინტერესებს. ასე რომ, მეტი ამ წელს პრობლემა Set 4, მაგრამ ეს მხოლოდ იმის თქმა, რომ ბოლოს დღეს ყველა ფორმატის თქვენ უკვე გამოყენებით ამისთვის years-- Microsoft Word ფაილი, ნომრები ფაილი, Excel ფაილი, ნებისმიერი რაოდენობის ფორმატის რომ, შესაძლოა, გარკვეული ცნობილია, ფაილის გაფართოება არის მხოლოდ 0S და 1s ქვეშ hood. და ადამიანები გადავწყვიტეთ რა კონვენციების არიან, რა ნიმუში 0S და 1s წარმოადგენს Word ფაილი წინააღმდეგ Excel ფაილი, წინააღმდეგ ნებისმიერი რაოდენობის სხვა ფორმატის. ასე რომ, PSet 4, თქვენ გაქვთ შესაძლებლობა, რომ ითამაშოს, რომ. მაგრამ რას ნიშნავს, რომ გვაქვს struct. ეს არის, ფაქტობრივად, ლამაზი segue ახლა შევიდა C, რომელსაც აქვს მხოლოდ რამდენიმე დამატებითი ფუნქციები რომ ჩვენ არ შევხედე ამჟამად. ეს არის საკმაოდ პატარა ენაზე და ერთ-ერთი ლამაზი თვისებების შესახებ C არის struct. მაგალითად, იმ შემთხვევაში, თუ სურდა represent-- მოდით ამბობენ, თუ მინდოდა ცვლადი, რომელიც წარმოადგენს სტუდენტის ზოგიერთი პროგრამა. იქნებ წერდნენ, რა თქმა უნდა რეგისტრაციის პროგრამა, ან ძირითადი სავაჭრო ინსტრუმენტი, ან რაღაც მსგავსი. რა ცალი დაკავშირებული მონაცემები სტუდენტი რომ მოდის იბადება? ისევე როგორც სტუდენტი წარმოდგენილი, რასაც აფასებს? ჰო? თქვენ გაქვთ სახელი, როგორც სტუდენტი. რა ამჯამად ტიპური სტუდენტის აქვს? აუდიტორია: [INAUDIBLE] დევიდ ჯ Malan: ასე რომ, ბოდიში. აუდიტორია: ასაკი. დევიდ ჯ Malan: ასაკის ან დაბადების დღე ექვივალენტური, yep. კიდევ რა? აუდიტორია: ID ნომერი? დევიდ ჯ Malan: ასე რომ, პირადობის მოწმობის ნომერი, იქნებ ტელეფონის ნომერი, იქნებ საერთო საცხოვრებელი, ან სახლში, ან კოლეჯის ან რამე მაგდაგვარს. ნებისმიერი რაოდენობის ცალი მონაცემები, რომ ალბათ თქვენს კონტაქტების სიაში არის ის, რაც შეიძლება განისაზღვროს სტუდენტი. ასე რომ, თუ გვინდოდა ამის გაკეთება, კოდი, ჩვენ შეიძლება რაღაც მარტივი მოსწონს ეს. ჩვენ შეიძლება პროგრამა ისე, რომ აქვს ვთქვათ, int ძირითადი (void). და თუ მინდა, წარმოადგენს სტუდენტი შეიძლება ჰქონდეს, მაგალითად, სიმებიანი მოუწოდა სახელი რომ სტუდენტი, სიმებიანი მოუწოდა საერთო საცხოვრებელში რომ სტუდენტი, იქნებ int მოუწოდა ID, რომ სტუდენტი. და რადგან მე გამოყენებით სიმებიანი, უნდა დაბრუნდეს და დაფასოებული cs50.h. იქნებ მე ვაპირებ უნდა stdio.h. ნება მომეცით, წინასწარ გავაკეთოთ იმ და მე ვაპირებ მოვუწოდო ამ student.c ახლა და გადარჩენა ეს. და ახლა შემიძლია რაღაც ამ ცვლადებს. და ჩვენ უბრალოდ აპირებს დაწეროს რომ როგორც კომენტარი ფსევდო კოდი, იმიტომ, რომ ეს არ არის საინტერესო რას ვაკეთებთ ახლა. OK, ასე რომ ეს არის პროგრამა, რომელიც რატომღაც ინახავს სტუდენტი. რა მინდა გავაკეთო, თუ მე მინდა შესანახად ორი სტუდენტი? ასე რომ, ჩემი პირველი ინსტიქტი აპირებს იყოს ყველა უფლება, დაველოდოთ წუთში, თუ მე მაქვს კიდევ ერთი სტუდენტი, თუ რატომ არ მინდა მხოლოდ ამის სიმებიანი სახელი 2, სიმებიანი საერთო საცხოვრებელში 2, int id2. და ჩვენ გავაკეთეთ წავიდა ამ გზაზე, სანამ და რა იყო ჩვენი გადაწყვეტა, რაც, როგორც ჩანს უნდა იყოს ერთგვარი hackish ასლი პასტა სამუშაო აქ? აუდიტორია: მასივი. დევიდ ჯ Malan: ჰო, ჩვენ შეგვიძლია გამოვიყენოთ მასივი. სწორედ ეს ძალიან სწრაფად ხდება unwieldy. თქვენ უნდა დასალაგებლად თვითნებურად შევუდგები ამ ცვლადებს. და თქვენ, ადამიანური, უნდა შევინარჩუნოთ აკონტროლოთ, რომ OK name2 შეესაბამება ერთად dorm2 შეესაბამება id2. ეს უბრალოდ ხდება სასადილო. ასე რომ, ეს ბევრი ადვილია, გავიხსენოთ რამდენიმე კვირის წინ, უბრალოდ მქონე სიმებიანი სახელები და შესაძლოა მოგვცეს სამი იმ. და მაშინ იქნებ ჩვენ სიმებიანი dorms და სამი იმ, ან მუდმივი, int პირადობის და სამი იმ. მაგრამ ახლა ეს გრძნობს ცოტა დაუდევარი, მარჯვნივ. ჩვენ ვსაუბრობთ სტუდენტები და ამჟამად მე ნამდვილად საცხოვრებელი დაბალი დონე განხორციელების დეტალები. სტუდენტი სახელი და საერთო საცხოვრებელში და პირადობის მოწმობა. რატომ არ შემიძლია უბრალოდ განაცხადოს ცვლადი ე.წ. სტუდენტი და ეძახით s. და თუ მინდა კიდევ ერთი სტუდენტი, რატომ არ მე უბრალოდ ეძახით ტ. ან თუ მინდა, მთელი bunch სტუდენტების, რატომ არ მე უბრალოდ მე მაქვს მთელი კლასი სტუდენტები, და ეს სამი მათგანი. სხვა სიტყვებით რომ ვთქვათ, რატომ არ შეიძლება მე მოვდივარ მდე საკუთარი მონაცემები ტიპის, ე.წ. სტუდენტები, შიგნით რაც არის სახელი, არის ID, არის საერთო საცხოვრებელი, არის ნებისმიერი რაოდენობის სხვა სფეროებში. და აღმოჩნდება, რომ თქვენ შეიძლება ზუსტად რომ. ასე რომ, C აქვს ეს ფუნქცია მოუწოდა struct. სწორედ ენის ფუნქცია, რომელიც საშუალებას გვაძლევს გავაკეთოთ სწორედ ეს არის. მე ვაპირებ წავიდეთ წინ და გახსენით structs.h სადაც ჩვენ ვაპირებთ, რომ შემდეგ განმარტებას სტუდენტი. გამოდის, - და ეს ერთი კი მარტივია, ვიდრე ერთი ჩართვის ID მომენტში წინ. თუ გსურთ ამუშავება თქვენი ხელნაკეთი მონაცემები ტიპის, და გარდა ამისა, int, და char და float და ყველა ამ სხვები, რომ არსებობს, თქვენ შეგიძლიათ ამის გაკეთება ფაქტიურად წერა typedef struct, შემდეგ რამდენიმე Curly braces, შიგნით, რომელიც ჩამოვთვალოთ ცვლადები გსურთ ასოცირებული ამ ახალი საბაჟო მონაცემთა ჩაწერეთ ისევე როგორც სახელი და საერთო საცხოვრებელში, და შემდეგ curly აფრთხილებს მივცეთ სახელი ახალი მონაცემების ტიპის. ასე, მაგალითად, სტუდენტი. და რა არის ლამაზი ამ ახლა ის არის, რომ თუ დავაკვირდებით შესაბამისი კოდი, კონვენცია, პირველი ყოვლისა, იმისათვის, რომ ეს ფაილი სახელად რაღაც dot h, header ფაილი, რომელიც ჩვენ არ გვაქვს დაიწყო საკუთარ თავს ძალიან ბევრი. მაგრამ ჩვენ ვაპირებთ დავიწყოთ გამოყენებით საკმაოდ მწირი ახლა. და რა შეგვიძლია გავაკეთოთ ეს, საბოლოო ჯამში, ამ რამდენიმე ხაზი კოდი არის განაცხადოს, რომ სწორედ ეს მონაცემები ტიპის, სტუდენტი. და ახლა მოდით გამოიყენოს იგი. მე ვაპირებ ახლა წასვლას ფაილი სახელად structs1.c. და მოდით შევხედოთ რამდენიმე მახასიათებლები აქ. ასე რომ, პერსონალის აქ არის ძირითადად ნაცნობი, და ჩვენ დაბრუნდება თუ რა არ არის ნაცნობი რაღაც მომენტში. ეს, რა თქმა უნდა, მათ შორის ჩემი საკუთარი header ფაილი, რომელიც არის ახალი, ასევე, გარდა PSet 3, სადაც, გავიხსენოთ, რომ ჩვენ გვაქვს helpers.h. ასე, რომ თქვენ შეიძლება გავიხსენოთ # include helpers.h. რატომ, თუმცა მე გამოყენებით შეთავაზებები ნაცვლად დახრილი ფრჩხილები? როდესაც შემიძლია აირჩიოს მათ შორის? თითქმის ყოველთვის მე, როგორც ჩანს გამოიყენოთ დახრილი ფრჩხილები. და მაშინ, უეცრად on ხაზი ექვსი მე გამოყენებით ორმაგი შეთავაზებები. რატომ შეიძლება რომ იყოს? ჰო? აუდიტორია: [INAUDIBLE] დევიდ ჯ Malan: ეს არის ფაქტობრივი, რა? აუდიტორია: ეს არის თქვენი IDE. დევიდ ჯ Malan: ჰო, რომ არის ჩემი ფაქტობრივი IDE. და მოდით არ დაეფუძნება IDE, რადგან ეს მხოლოდ ინსტრუმენტი, რომელიც მე გამოყენებით. ეს არის ჩემი მიმდინარე კატალოგი, კონკრეტულად. ასე რომ, structs.h არის ჩემი საკუთარი ფაილი არ არის დაყენებული IDE, ოპერაციული სისტემა თავად, პირიქით, ეს არის ჩემი მიმდინარე დირექტორია. ასე რომ, კონვენციის არის, თუ გნებავთ მოიცავს საკუთარი header ფაილი, უბრალოდ ორმაგ ბრჭყალებში. რას ვუწოდებთ ჩვენ ამ რამ line 8, ზოგადად? ეს არის რა? განსაზღვრავს რაღაც. ეს წარმოადგენს მუდმივები, არა? თუ გსურთ აქვს მნიშვნელობა თქვენს პროგრამაში რომ თქვენ გამოიყენოთ მთელი რამოდენიმე ჯერ, ეს კარგი კონვენციის ფაქტორის, გამოაცხადოს ის, ერთად hash სიმბოლო განსაზღვრავს, მაშინ, მიერ კონვენციის ყველა ზედა word-- თუმცა ეს არ არის მკაცრად აუცილებელი, მაგრამ ეს ადამიანის კონვენცია უნდა ესარგებლა მუდმივები ისე, რომ ისინი გადმოხტა თქვენ ვიზუალურად სივრცე და მაშინ ღირებულება გსურთ იყოს ექვივალენტური რომ მუდმივი სახელი. არარის მძიმით, მაგრამ თქვენ უბრალოდ დაიცვას, რომ ნიმუში არსებობს. ასე რომ, რას ვაკეთებ ამ ფაქტობრივი კოდი. მოდით შევხედოთ ძირითადი პროგრამის აქ. ხაზი 12 იმიტომ, რომ მე არ შედის structs.h, მე ახლა magically ჩემი განკარგულებაშია ახალი მონაცემები ტიპის. მე არ გაქვთ წვდომა int, და char და float, და სიმებიანი, და ლურჯი და სხვები. მე ახლა ჰქონდეს სტუდენტი მონაცემები ტიპის. ასე რომ ხაზი 12, მე აერთიანებს ორ იდეები ერთი საბაჟო მონაცემთა ტიპის და ორი, გამოყენებით მასივი. ასე რომ, ამ პროგრამის შესახებ, თუ მე მინდა, რომ რეალურად მხარს სამი სხვადასხვა სტუდენტები ჩემი პროგრამა, მე შეგიძლიათ უბრალოდ ამბობენ, მომეცი ცვლადი ე.წ. სტუდენტები, რომელთაგან თითოეული არის ტიპის სტუდენტები, რომლებიც ჩემი საბაჟო მონაცემთა ტიპის. და, კონკრეტულად, მომეცი სამი მათგანი ჩემი მასივი. ასე რომ, ახლა რა ვქნათ ამ პროგრამაში? აი უბრალოდ ამისთვის მარყუჟი iterating 0-დან 3, იმიტომ, რომ რა ღირებულება სტუდენტები არის. მე უბრალოდ რითაც შესახებ მომეცი სტუდენტის სახელი. ხოლო შემდეგ ხაზი 17, ჩვენ აქვს ძირითადად ნაცნობი ონლაინ. ჩვენ გვაქვს ჩვენი ძველი მეგობარი GetString უფლება. და რა ნაჭერი სინტაქსი როგორც ჩანს, ახალი, თუ თქვენ არ პროგრამირდება in C ადრე, და არასდროს არ გამოიყენა structs? ჰო? აუდიტორია: .სახელი. დევიდ ჯ Malan: .სახელი. მაგრამ ეს არ არის ძალიან ბევრი ნახტომი, რადგან ახლა სტუდენტები bracket i გაძლევთ i-th სტუდენტი. და თუ გვინდა, რომ ჩაყვინთვის შიგნით რომ სტრუქტურა, უბრალოდ გამოიყენოთ ერთი პერიოდი და მაშინ სახელწოდება ცვლადი შიგნით, ან ქონების შიგნით რომ გსურთ მიიღოთ დაშვება. ანალოგიურად მაშინ, თუ მე მაშინ შეეკითხება შესახებ, მომეცი სტუდენტის საერთო საცხოვრებელი, თქვენ შეგიძლიათ მსგავსად შესანახად, რომ სიმებიანი სტუდქალაქის ცვლადი შიგნით რომ სტუდენტი სტრუქტურა. და ახლა რამ პატარა ლამაზი. და ეს აპირებს გამოიყურებოდეს განთავსებულია ალბათ ბევრი საკმაოდ მალე. მაგრამ დაინახავთ ამ ბევრად უფრო PSet 4, მოდით უბრალოდ, ერთი შეხედვით ეს არის. გამოდის, რომ შეესაბამება 23 გზით 38, რას ფიქრობთ, მე ალბათ აკეთებს? მე ამოღებულ კომენტარი დღეს, მაგრამ ვერსია კოდი, ონლაინ მინიშნება აქვს ყველა კომენტარი. რა, როგორც ჩანს, აკეთებს? აუდიტორია: შენახვა ფაილი ყველა ინფორმაცია, რომ მომხმარებელი შევიდა. დევიდ ჯ Malan: ჰო, ზუსტად, ეს არის ახალი გზა რომ ჩვენ ვხედავთ ორი, კიდევ ერთი თვისება C, რომლის დროსაც მე შეგიძლიათ შექმნათ საკუთარი ფაილი. ჯერჯერობით, თითქმის ყველა პროგრამა თქვენ წერილობითი არის მოქალაქეობის არმქონე. როგორც კი ეს კეთდება გაშვებული, რომ არის ის. არ არსებობს მეხსიერების ან მეხსიერებაში იგი. არ არსებობს ფაილი შენახული. მაგრამ თუ თქვენ გსურთ გადარჩენა input, რომელსაც აქვს მოხდა, ისევე როგორც თამაში ან პროგრამა როგორც ეს, გამოდის, რომ ჩვენ შეგვიძლია ამის გაკეთება. და დაინახავთ, რომ ეს უფრო pset 4 და სექცია. მაგრამ ეს line 23 არსებითად ქმნის ფაილს სახელწოდებით students.csv. და თქვენ შეიძლება არ მინახავს ეს ადრე. მაშინაც კი, თუ თქვენ არასდროს სწავლობდა CS ადრე, CSV არის მძიმით გამოყოფილი ცვლადები. ეს იგივეა, ძალიან ღარიბი ადამიანის მობილური Excel ფაილი, რაც იმას ნიშნავს, რომ ეს შეიძლება გახსნა in Excel და Apple ნომრები, და მას აქვს რიგები და სვეტები. მაგრამ ეს არ არის საკუთრების ფორმატი მოსწონს Microsoft და Apple- ის. ეს მხოლოდ მძიმეები ჰყოფს ფასეულობები, რომელიც ჩვენ დავინახავთ, ამ მომენტში. და უბრალოდ ვხვდები. In line 23, ძალიან და ბოლოს, ჩემი მეორე არგუმენტი ამ ახალი ფუნქცია მოუწოდა ვ ღია ფაილი ღია w. რა შეიძლება w აღინიშნოს? ჰო? აუდიტორია: ეს გაძლევთ ვწერ ფაილი? დევიდ ჯ Malan: ეს საშუალებას წერთ ფაილი. ასე რომ, არსებობს რამდენიმე ვარიანტი რომ ჩვენ შეგვიძლია დანამატის აქ. მაგრამ თუ უბრალოდ გსურთ წაკითხული ფაილი, რომელიც არის შევხედოთ მას და წაიკითხეთ ის მეხსიერება, თქვენ უბრალოდ გამოიყენოთ ციტირებით unquote "რ". თუ გსურთ ვწერ ფაილი, თქვენ გამოიყენოთ გაცემა unquote "ღ". არსებობს ასევე დამატება და რამდენიმე სხვა რამ თუ გვინდა, რომ შეცვალოს არსებული ფაილი. ახლა ჩვენ ვაპირებთ, რომ ხედავს ამ რამ, მაშინ ჩვენ დავბრუნდებით გამოდიან 24. NULL, თურმე, არის სპეციალური მნიშვნელობა, შეიძლება დაბრუნდა გარკვეული ფუნქციები თუ რამე წავიდა wrong-- იმ შემთხვევაში, თუ ფაილი არ არსებობს, თუ თქვენ ამოიწურა მეხსიერება, ან bunch სხვა შეცდომები. მაგრამ ახლა, მოდით უბრალოდ ვივარაუდოთ, რომ ეს მხოლოდ ჩვეულებრივი შეცდომა შემოწმება. აქ ხაზი 26, მე iterating 0-დან 3 მთელი ჩემი სტუდენტებს. და ეს არის ერთგვარი სახის ახალი ფუნქცია, fprintf, მაგრამ უბრალოდ ვხვდები. თუ printf მხოლოდ ბეჭდვა ფორმატირებული სიმებიანი, რას fprintf ალბათ ნიშნავს? აუდიტორია: ბეჭდვა ფაილი. დევიდ ჯ Malan: ბეჭდვა ფორმატირებული სიმებიანი ფაილი. ეს არის ის, თუ რა დამატებითი ვ საშუალებით ფაილი. და ახალი პირველი არგუმენტი უნდა იყოს ცვლადი, რომელიც წარმოადგენს თქვენი ფაილი. მაშინ ჩვენ უბრალოდ ფორმატში სიმებიანი ისევე printf. და მიუხედავად იმისა, სინტაქსი არის ახალი, ეს მხოლოდ ნიშნავს დანამატის სტუდენტის სახელი, plug-in სტუდენტი საერთო საცხოვრებელში, და მაშინ ერთად fclose, დახურეთ ფაილი. და მაშინ lastly-- ეს არის ახალი და ჩვენ დავბრუნდებით ამ ადრე long-- მე ათავისუფლებს სტუდენტი მიზეზები რაც მოხდა, ზემოთ არსებობს. მაგრამ ჩვენ დავბრუნდებით რომ ადრე long-- ეს იმიტომ, რომ, თუ როგორ GetString არის რეალურად მუშაობს ქვეშ hood. მოდით მიიღოს სწრაფი შევხედოთ აქ. თუ მე აკრიფოთ ls ჩემი დირექტორია, შეამჩნია, რომ მე არ ფაილი სახელად students.csv, უბრალოდ არ არსებობს, არ არსებობს. ასე რომ, თუ მე ახლა შეადგინონ ამ პროგრამის, მიიღოს structs-1,. / structs-1, და მე ვაპირებ წავიდეთ წინ და აკრიფოთ Andi, რომელიც ცხოვრობს Berkeley იელის. ჩვენ ვაპირებთ, რომ რობ რომელიც ცხოვრობს Thayer ამ დღეებში. და მოდით ამუშავება, სადაც არის, მე ვფიქრობ, მარია არის Mather, თუ მახსოვს სწორად. ასე რომ, არაფერი ჩანს, უნდა მოხდეს. მაგრამ თუ მე აკრიფოთ ls ახლა, არ არის students.csv. მოდით წავიდეთ წინ და ღია students.csv. ეს არის კიდევ ერთი ძალიან მსუბუქი ფორმატში. მაგრამ მე უბრალოდ მიიღო კონვენცია რომ მე მაქვს ორი რიგები და სვეტები აქ. პირველი სვეტი ხალხის პირველი სახელები. მეორე სვეტის სტუდენტის საერთო საცხოვრებელი, ან კოლეჯის ან სახლს, ან whatnot. ახლა მე გადაარჩინა ეს მუდმივად ფაილი. ასე რომ, ეს არ არის ყველა, რომ საინტერესო. მაგრამ ეს მხოლოდ სტეპინგზე ქვის ახლა მიმდინარეობს შეუძლია, არსებობს ინფორმაცია მუდმივად. ასე რომ, ვნახოთ ახლა რა უფრო ჩვენ შეგვიძლია გააკეთოს, ამ და სხვა თვისებები. მაგრამ პირველი, ნებისმიერი კითხვები? ეს იყო ბევრი, და ეს იყო სწრაფი. მაგრამ დაინახავთ ბევრი მეტი PSet 4, ისევე. ჰო? აუდიტორია: არის გზა გაგრძელდება და დასძინა სახელები, რომ ფაილი? დევიდ ჯ Malan: კარგი კითხვაა. არის გზა, რათა გაგრძელდეს დამატებით სახელები რომ ფაილი? დიახ. და, ფაქტობრივად, თუ თქვენ დასრულდება მდე ხელახლა გახსნას ფაილი, თქვენ უნდა გამოიყენოთ ციტირება unquote "" ამისთვის დამატება, რომელიც, უბრალოდ, დაამატოთ ახალი ხაზი, ახალი ხაზი ისევ და ისევ, ზუსტად. კარგი კითხვაა. სხვა კითხვები? ჰო? აუდიტორია: თუ გაიქცა პროგრამა ერთხელ ახლა, იქნებოდა ეს დამემატებინა სახელები შეიტანოს ან რომ ეს ქმნის ახალ ფაილს? დევიდ ჯ Malan: Ah, კარგი კითხვა. თუ თქვენ გაიქცა პროგრამა ერთხელ მარჯვენა ახლა, შესაძლოა აკრეფილი ახალი სახელები იქნებოდა ეს რჩეულებში ფაილი ან გადაწერის ფაილი? ამ უკანასკნელს, იმიტომ, რომ მე არ იყენებთ დამატება რეჟიმში. და რადგან მე ვარ უბრალოდ ბრმად გახსნას ფაილი წერა, ის უბრალოდ აპირებს გადავაწერო ფაილი. ასე რომ, მე მართლაც უნდა გავაკეთოთ არის დამატება, თუ მინდა, რომ რეალურად აქვს გრძელვადიანი მონაცემთა ბაზაში. ახლა CSV არის სასარგებლო, სიმართლე გითხრათ, მაშინაც კი, მოსწონს თუ თქვენ writing-- და ჩვენ საბოლოოდ ვხედავთ ამ მოგვიანებით წელს სემესტრის როდესაც ჩვენ ვიყენებთ CSVs სხვა მიზნებისთვის. თუ გსურთ შეინახოთ ყველა ადამიანი რომლებიც რეგისტრირებულია რამდენიმე ღონისძიება, ან მოაწერა ხელი თქვენი სტუდენტი ჯგუფი, ან რამე მაგდაგვარს, შენახვა მონაცემები ამ სახის ფორმატის სუპერ მოსახერხებელი. იმის გამო, რომ, ფაქტიურად, თუ მე იყო ჩამოტვირთოთ ფაილი. მე ვერ ორმაგი და მოდით რეალურად ცდილობენ ეს თუ მაქვს Excel ან ნომრები აქ. მე ვაპირებ მარჯვენა ღილაკის ან კონტროლის დააწკაპუნეთ ჩემი ფაილი. Whoops. მარჯვენა ღილაკით და კონტროლის დააწკაპუნეთ ჩემი ფაილი. კარგით, ჩემი მაუსი არ თანამშრომლობს. Download-- მე ვაპირებ ჩამოტვირთვა ყველა ფაილი აქ ასე მხოლოდ ასე შემიძლია დაიბრუნოს ეს ერთი. მოდით ვნახოთ, თუ ეს სამუშაოები students.csv-- პირველად მე გააქტიურებულია. ახლა უნდათ, რომ ნახოთ ჩემი კონტაქტები. ახლა, მე უნდა დარეგისტრირდეთ. აგრეთვე, თუ როგორ ადვილი არის გამოიყენოს CSVs? დიახ, შეინახოს იგი დღემდე. OK, ახლა მზად ვართ კლასის. OK, oh, რა არის ახალი? OK, ახლოს. ეს იყო ჯადოსნური. OK, ახლა ჩვენ უნდა განახლდეს. და ახლა, დაავიწყდა რა წარადგინოს მე თავდაპირველად გაიხსნა, მაგრამ რა a-- იქ ჩვენ წავიდეთ. OK, ასე რომ, ახლა ჩვენ გვაქვს Excel ფაილი. დიდი მადლობა. OK, ასე რომ, რა გავაკეთე იყო ადვილი ნაწილი. რა თქმა უნდა, მე ვერ წინასწარ დაყენებული Excel, ან ნომრები, ან რასაც პროგრამა. მაგრამ ეს არის ლამაზი, რადგან ახლა შემიძლია მანიპულირება მონაცემები სტანდარტის ფორმატში. ახლა მოდით კონტექსტში გადავიდეს, სადაც ჩვენ შეჩერდით ბოლო დროს, რომელიც უნდა დაიწყოს მიიღოს off სასწავლო დისკები. მაგრამ პირველი, თქვენ არ იხილეთ ეს ადრე ლანჩი ისევ აქ ხდება, ცეცხლი და Ice კემბრიჯში, Sitar in New Haven. შესვლა up on CS50s ნახვა ASAP შეუერთდეს CS50 სტუდენტები და თანამშრომლები. ამიტომ ავიღეთ სასწავლო დისკები off ორშაბათს შემდეგი რედაქციით სიმებიანი გამოცხადდა CS50s ბიბლიოთეკა გარკვეული დროის განმავლობაში. და ეს კარგია, რადგან იგი საშუალებას იძლევა ჩვენს ვისაუბროთ ცვლადების როგორც სრული სიტყვა და სასჯელი და სხვა. მაგრამ აღმოჩნდება, რომ სიმებიანი არ არსებობს. ეს არის მხოლოდ სინონიმი, ან იგივე, რომ ჩვენ შევქმენით, რომ რაღაც რეალურად არის უფრო ტექნიკური მოუწოდა char *. და მართლაც, ჩვენ ვნახეთ, მაგალითად პროგრამის ორშაბათს რომ არ იქცევიან საკმაოდ როგორც ჩვენ გვგონია. ეს იყო ფაილი, შედარება 0. და გავიხსენოთ, რომ შედარების 0, თუ მე recompile ორშაბათის პროგრამა და აწარმოებს შედარების 0 და ჩაწერეთ დედა ამას, და დედა ამას კიდევ ერთხელ. პროგრამა ამტკიცებდა, რომ სხვადასხვა რამ, მიუხედავად იმისა, რომ დედა, ყველა ამას, იდენტურია ვიზუალურად. რა იყო მოკლე პასუხი რატომ კომპიუტერული ფიქრობს, იმ ორი სიმები არიან განსხვავებული? ჰო? აუდიტორია: [INAUDIBLE] დევიდ ჯ Malan: მარჯვენა. ასე რომ, დედა, პირველად მე აკრიფოთ ის, მიმდინარეობს შენახული სადღაც ჩემი კომპიუტერის მეხსიერების მაგრამ სხვადასხვა ადგილას ვიდრე მეორედ მე აკრიფოთ დედა. ახლა, რა თქმა უნდა შეიძლება ოპტიმიზირებულია. კომპიუტერული შეიძლება იყოს ჭკვიანი და გააცნობიეროს ეს ორი სიმები, hey, ისინი იდენტურია. ნება მომეცით არ redundantly შესანახად იგი. მაგრამ კომპიუტერი არ გააკეთებს, რომ ოპტიმიზაცია თუ არ ვუთხრა, რომ. ასე რომ, ჩვეულებრივ, ისინი უბრალოდ აპირებს დასრულდება მდე ორ სხვადასხვა ადგილას მეხსიერებაში. და ასე უნდა იყოს უფრო ნათელი, როდესაც ჩვენ შედარებით ორი სიმები, პირველი ეწოდა s, მეორე ეწოდა t, რა კონკრეტულად მე შედარებით აქ on line 13? ჰო. აუდიტორია: ეს არის ადგილი მეხსიერებაში რომ ცვლადი იქნება აღვნიშნო, რომ. დევიდ ჯ Malan: ზუსტად, მე შედარებით ადგილი მეხსიერებაში რომ იმ ცვლადების მიუთითა. ასე რომ, კონკრეტულად, თუ დედა იყო byte ნომერი 1 და 2 და 3, 4-- რადგან მახსოვს წარმატებული 0 უნდა იყოს ყველა გზა ბოლოს. და სხვა, მაგალითად, დედა, მ-o-მ, იყო მისამართზე 10, 11, 12 და 13. მე შედარებით 1, რომ მისამართი, იმ ადგილას მეხსიერება, წინააღმდეგ 10, რომელიც არის აშკარად არ არის იგივე. 1 არ არის 10. ასე რომ, ეს არის ლამაზი, რომ ეს საკმაოდ მარტივია. მაგრამ ეს პრობლემატური იმდენად, რამდენადაც ჩვენ არ შეგვიძლია, როგორც ჩანს, შედარების სტრიქონები. ასე რომ, fundamentally-- და ამ დაბალი დონე, თუ უნდოდა განახორციელოს პროგრამა შედარების ორი დამოუკიდებელი სიტყვა, რომ მომხმარებელს ჯერ აკრეფილი ხარისხის, ისინი გამოდიან char for char, უბრალოდ, ზოგადად, რას უნდა გავაკეთოთ, როგორც ჩანს? ეს არ არის საკმარისი მხოლოდ შევხედოთ ამ ორი მისამართები. ჩვენ რა უნდა გავაკეთოთ? ჰო? აუდიტორია: Iterate მეშვეობით სიმებიანი [INAUDIBLE]. დევიდ ჯ Malan: ჰო, მოდით iterate მეშვეობით სიმებიანი. მოდით გამოვიყენოთ ამისთვის მარყუჟის, ხოლო მარყუჟის, ან რასაც თქვენ ყველაზე კომფორტულად. და თუ ჩვენ მივიღეთ ორი სიმები სადღაც მეხსიერება, მოდით შევხედოთ თითოეული ის პირველი ხასიათი, თითოეული ის მეორე ხასიათი, მაშინ მესამე და მეოთხე, და მეხუთე, სანამ ჩვენ მოხვდა რა განსაკუთრებული Sentinel ღირებულება? აუდიტორია: [INAUDIBLE] დევიდ ჯ Malan: ჰო, წარმატებული ნულოვანი, სადაც წერტილი ან string ჩვენ შეუძლია გადაწყვიტოს, რომ ეს არის ის. არ ჩვენ შესაბამისი თითოეული ხასიათი? თუ არა, დაბრუნების ცრუ. თუ ასეა, დაბრუნდება ნამდვილი. ასე რომ, სწორედ ის, რაც ეს ვერსია პროგრამის შედარების 1.გ აკეთებს. იგი იდენტურია, რაც ჩვენ შევხედე ორშაბათი გარდა იმისა, რომ მე მიღებული ჩამოშორებას სიტყვა სიმებიანი იმისა, რომ არ აქვს ფუნქციური impact-- ყველა მე ვაკეთებ ახლა მოხსნის ვიზუალური სასწავლო დისკები, მაგრამ ნათლად ვხედავ, რომ და ტ მისამართები. და რომ ის, რაც ვარსკვლავი, ვარსკვლავით, წარმოადგენს არის მისამართი, წინააღმდეგ შემთხვევაში, ცნობილია უფრო ტექნიკურად მაჩვენებელი. ასე რომ, როცა ვაცხადებ ს შესახებ line 9 და აცხადებენ, char * s, ეს არ ნიშნავს, მომეცი სიმებიანი. ეს იმას ნიშნავს, მომეცი ცვლადი, რომლის მიზანი ცხოვრებაში არის შესანახად მისამართზე. იმის გამო, რომ მე ვარ იმისათვის, რომ მისამართი სიმებიანი შევიდა. და მართლაც, GetString, უნდა იყოს გასაგებია, არ დაბრუნების სიმებიანი. ის არ დაბრუნდება დედა წარმატებული ნულოვანი, თავისთავად. რას GetString კონკრეტულად და ზუსტად დაბრუნებას? აუდიტორია: [INAUDIBLE] დევიდ ჯ Malan: მისამართი, მისამართი პირველი ხასიათი ზოგიერთ სიმებიანი მას აქვს მიღებული. ასე რომ, ახლა ჩვენ ვხედავთ სპეციალური სიტყვით კიდევ ერთხელ. და, მე მიანიშნა, რომ ეს ადრე. ეს იქნება კარგი კონვენცია რომ ჩვენ დავინახავთ, ისევ და ისევ არის. მე შემოწმების დავრწმუნდეთ, რომ s არ არის ბათილად და უ არ null. იმის გამო, რომ ეფუძნება ჩემი ნამდვილად სწრაფი ნახსენები ადრე, რას ნიშნავს, თუ GetString ბრუნდება არა მისამართი არამედ N-U-L-L, რომელიც კიდევ ერთხელ, რაღაც განსაკუთრებული მნიშვნელობა? აუდიტორია: შეცდომა. დევიდ ჯ Malan: ეს არის შეცდომა. რაღაც წავიდა არასწორი. და რა, როგორც წესი, შეიძლება მოხდეს, განსაკუთრებით ერთად strings--, რომელიც შეიძლება იყოს უცნობი სიგრძე advance-- იქნებ კომპიუტერების მეხსიერება ღალატობს, შესაძლოა, თქვენ აკრეფილი ასეთ ხანგრძლივი სიტყვა ან წინადადება ან გაკრული ამხელა ესსე იქ უბრალოდ არ არის საკმარისი მეხსიერება. და ასე GetString დაბრუნებას ვერ ახერხებენ მისამართი მთელი რამ, ასე რომ მხოლოდ ბრუნდება არაფერი. ის ამბობს შეცდომა მოხდა დაბრუნების სპეციალური NULL მნიშვნელობა. ეს არის ნულოვანი მისამართი, ასე ვთქვათ. ახლა ირკვევა, C გააჩნია ფუნქცია, რომელიც აკეთებს, რომ მცდელობაა. ჩვენ არ უნდა განახორციელოს ამ ამისთვის მარყუჟი ან ხოლო loop თავს. ჩვენ შეგვიძლია გამოვიყენოთ ფუნქცია, მოუწოდა მოკლედ, აურიეთ comp, ან სიმებიანი შედარება, რომლის მიზანი ცხოვრებაში არის ის, რომ ზუსტად რომ. თქვენ ეს ორი მითითებას, ორი მისამართები, და ეს წავა იმ მისამართები და შემდეგ შევადარებთ წერილი წერილი წერილი ხარისხის, შეჩერების მხოლოდ მაშინ, როდესაც, რა არის ჭეშმარიტი? როდესაც ინტუიციურად უნდა გაღვივება comp შეწყვიტოს iterating, უბრალოდ უნდა იყოს მკაფიო? როდესაც ის იგებს წარმატებული 0 ან სიმებიანი, სადაც წერტილი მას შეუძლია გადაწყვიტოს აქვს ყველაფერი შესაბამისი, ან ყოფილა განსხვავება? ასე რომ, თუ ჩვენ აწარმოებს ამ და ცდილობენ ჩვენი პატარა კაპიტალიზაცია თამაში, ასე რომ შედარება-1, ./compare-1 და ტიპი დედა ამას ორივე ჯერ. ახლა ეს არის იგივე. და თუ ეს ისევ და ისევ ამას და მერე იქნებ ზედა. ახლა ეს მართლაც განასხვავებს შორის ზედა და ამას. ასე არ არის, რომ მძიმე ან ჯადოსნური, მაგრამ ეს იმას ახლა ახსნას რა ხდება ქვეშ hood. ასე რომ, რა უფრო შეგვიძლია ამონაწერი ამ სახის გაკვეთილი? მოდით შევხედოთ ეს. მე ვაპირებ წავიდეთ წინ და დაწეროთ სწრაფი პროგრამა სახელწოდებით ასლი 0. და ახლა მოდით წავიდეთ წინ და რეალურად მოდით გავაკეთოთ ამას ასლი-0, შევხედოთ რა მაქვს აქ. მე პირველად ვუთხრა შესახებ, ამბობენ, რომ რაღაც. მაშინ მივიღებ string და მე ინახება იგი s. მერე შეამოწმეთ თუ ტოლია უდრის NULL, დააბრუნებს 1. ასე რომ, ეს მხოლოდ სტანდარტული შეცდომა შემოწმება. არაფერი საინტერესო მოხდა. და სინამდვილეში, თუ ჩვენ დავაღწიოთ შეცდომა შემოწმების, ეს ჰგავს კვირაში 1 კოდი მომენტში. მაგრამ მე დავიწყე მისაღებად ცოტა უკეთესი რომ. ახლა ხაზი 16, ერთი კვირის წინ, შესაძლოა, კიდევ რამდენიმე დღის ან წუთის წინ, შეიძლება ითქვას, რომ ხაზი 16 შექმნა ცვლადში ტ კოპირება და ის შევიდა. და ეს მშვენივრად გონივრული takeaway. მაგრამ უფრო სწორედ ახლა. რა ხდება line 16? რა ხდება გადაწერა მარჯვნიდან მარცხნივ? ჰო? აუდიტორია: t მიღების მისამართი s? დევიდ ჯ Malan: ზუსტად, t დღითიდღე მისამართი s. ასე რომ, ახლა ნათელია, თუ მე უკან რომ ადრე მაგალითად და მე შემუშავება, რაც მე აკრეფილი. და რა მე აკრეფილი შიგნით აქ s, და აქ არის ის, რაც მე აკრეფილი სადღაც მეხსიერება, დედა და შემდეგ წარმატებული 0 რომ დაემატა ჩემთვის. რა მე ინახება აქ, გავიხსენოთ, ეს არის ადგილმდებარეობა 1, 2, 3, 4, ეს არის ის, რაც ამჟამად s. ასე რომ, თუ on line 16, მე ვიტყვი, მომეცი კიდევ ერთი ცვლადში ტ და მაღაზია ამ დროს ღირებულება s, რა ხდება აქ ინახება არა დედა არამედ მხოლოდ ნომერი 1. ასე რომ, თუ ჩვენ მოველით ამ პროგრამაში ახლა, რა მოხდება? ასე რომ შეამჩნია, რომ არსებობს ამ ფუნქციის თქვენ შეიძლება არ გამოიყენება ამ რამდენიმე ხნის წინ, ცეზარ, ან Vigenere, ან იქნებ არ არის. I აცხადებენ, რომ ჩემს printf, მე აპირებს კაპიტალიზაცია ასლი ტ. პირველი ხაზი 19, სწრაფი საღი აზრის შეამოწმეთ, strlen ამოწმებს სიგრძე ტ. იმიტომ, რომ მე არ მინდა, რომ ცდილობენ ესარგებლა რაღაც თუ არ სიმებიანი არსებობს. თუ მომხმარებელს მხოლოდ Enter, არაფერი ესარგებლა. ასე რომ, მე არ მინდა ამის გაკეთება line 21. ამიტომ ხაზი 21 capitalizing რომელიც წერილში, როგორც ჩანს, t? აუდიტორია: მ? დევიდ ჯ Malan: ეს გამოიყურება როგორც ეს გადაწერა რომელი? აუდიტორია: მ. დევიდ ჯ Malan: Uh, მ. OK, ასე რომ, პირველი მ, იმიტომ, რომ შეამჩნია, რომ მე ვარ გავლის toupper, რომელიც თუ თქვენ არასოდეს მინახავს ეს ის უბრალოდ ფუნქცია ესარგებლა როგორც მისი შეყვანის. ტ bracket ნულოვანი ნიშნავს მისცეს მე ნულოვანი ხასიათი ტ. ასე რომ, როგორ აკეთებს ამას სურათი ცვლილება, უნდა იყოს ნათელი? რა სჭირდება მისაღებად გადაწერილი ან შეიცვალა მიმართებაში და ტ და დედა წარმატებული ნულოვანი. აუდიტორია: [INAUDIBLE] დევიდ ჯ Malan: ჰო, ასე რომ, ეს ერთი აქ, უბრალოდ, უნდა მიიღოს შეიცვალა, რომელთა მიზანია დაფიქსირება ამას უნდა მიიღოს შეიცვალა დედაქალაქში მ. ახლა კი, მოგვიანებით, პროგრამა, თუ ამობეჭდოთ და ტ როგორც მე გაწმენდა აქ, უყურებს, რა არის მოხდება ბეჭდვა და ტ. ასე რომ ასლი 0, ./copy-0. ნება მომეცით წავიდეთ წინ და ტიპის ამ დედა ყველა ამას. გაითვალისწინეთ ორივე ორიგინალური და ასლი უკვე კაპიტალიზაცია. რატომ? ისე, და ტ როგორც მიუთითებს, თუ გნებავთ, იმავე ბლოკი მეხსიერება. და გულწრფელად, ეს ხდება ნამდვილად uninteresting-- იმისა, რომ ჩვენ გამოყენებით მისამართი ნულოვანი აქ. მე ვგულისხმობ, მე ნამდვილად არ მაინტერესებს, სადაც პერსონალის მეხსიერებაში. ბოდიში მე წაშლისა ცოტა ზედმეტად. მაგრამ მე ნამდვილად არ მაინტერესებს, სადაც რამ მეხსიერებაში. ასე რომ, მართლაც რა პროგრამისტები, როგორც წესი, უნდა ვიფიქროთ იმაზე, ის არის, რომ როდესაც თქვენ საუბრობთ მისამართი, ან მაჩვენებელი, ვინ ზრუნავს, სადაც იგი მეხსიერებაში. მე არ მაინტერესებს, თუ ეს byte ერთი ან ერთი მილიარდი. მე უბრალოდ მაინტერესებს, რომ ეს ცვლადი ეფექტურად მიუთითებს, რომ ბლოკი მეხსიერება. ასე რომ, ამიერიდან, ვიდრე quibble მეტი თვითნებური მეხსიერების მისამართები, მოდით დავიწყო მიაპყროს პოინტერები როგორც მითითებას, რადგან ისრებით. ასე რომ, რა და ტ ნამდვილად არის, შესაბამისად, ეს პროგრამა, იმის გამო, რომ მე ის t, ეს მხოლოდ ორი ცალკე ცვლადები მიუთითებს, რომ იგივე ბლოკი მეხსიერება. და ჩვენ არ მაინტერესებს, სად არიან. ასე რომ ჩვენ შეგვიძლია აბსტრაქტული მოშორებით, რომელიც დეტალურად. ასე რომ, მე დაფიქსირება ამ? თუ მინდა დაწერა მობილური ასლი პროგრამა, რომელიც სინამდვილეში ასლები სიმებიანი და კაპიტალიზაციას მხოლოდ ასლი, უბრალოდ ინტუიციურად, რა რაღაც უნდა იყოს ნივთიერება ჩვენი გამოსავალი? აუდიტორია: [INAUDIBLE] დევიდ ჯ Malan: ჩვენ გვჭირდება, რა? აუდიტორია: ბლოკი მეხსიერება. დევიდ ჯ Malan: ჩვენ გვჭირდება მეორე ბლოკი მეხსიერება, არა? ჩვენ არ ვიცით, როგორ უნდა ამის გაკეთება არ არის, აუცილებლად. მაგრამ მე სახის უნდა ეს უნდა მოხდეს, რათა რომ ორიგინალური დედა ქვედა შემთხვევაში მთავრდება, რომ ზედმეტი ბლოკი მეხსიერება. და მაშინ, როდესაც მე შეცვლის ასლი, მე არ მინდა, რომ შეიცვალოს ეს ასლი აქ. მე მინდა ნაცვლად შეცვალოს მხოლოდ ამ ასლი, ისე, რომ ორიგინალური უცვლელია. ასე რომ, მოდით ვნახოთ, როგორ შეიძლება ამის გაკეთება. ასლი-1, რომელიც უკვე უკვე გაშიშვლებულ კომენტარი, მაგრამ კომენტარს ონლაინ რეჟიმში. ჩვენ ნაცვლად ასეთია ეს ხაზები იდენტურია, get me სიმებიანი და მას s. მაგრამ ახლა მოდით შევხედოთ ჩვენი ერთ-ერთი ყველაზე რთული, მაგრამ ბოლო სირთულის ამისთვის awhile, ხაზი 16 ჯერ ზუსტად ეს. ასე რომ, თუ თქვენი კომფორტული ერთად სურათი ჩვენ უბრალოდ მიიპყრო მომეცი ახალი ბლოკი მეხსიერება, ასლი ყველაფერი ის, მოდით ვნახოთ, როგორ თარგმნოს, რომ კოდი. ასე რომ ხაზი 16, მარცხენა მხარეს, char * t მაძლევს ამ ყუთში აქ. რომ ყველა ის აკეთებს. მარჯვენა მხარეს, მ alloc, ან malloc, არის მეხსიერების გამოყოფის, სუპერ ლამაზი, რომელიც cryptic გზა უბრალოდ ვამბობ, მომეცი ბლოკი მეხსიერება. რამდენი მეხსიერება გვჭირდება? ისე, ასეთი დიდი გამოხატულება. მაგრამ ვნახოთ, რა წერია აქ. ასე რომ, ეს, რა თქმა უნდა, არის მისცეს მე სიმებიანი ხანგრძლივობა s. ასე რომ, დედა, ეს უნდა იყოს რა? ასე რომ, მხოლოდ სამი, არა? დედა სამი გმირები. თქვენ არ ითვლიან წარმატებული ნულოვანი, როდესაც თქვენ ვისაუბროთ სიგრძეზე სიმებიანი ეს რეალურად ადამიანის ჩანს წერილები. ასე რომ, დედა, ასე რომ ეს მაძლევს 3. მაგრამ დაველოდოთ წუთში, მე ახლა დასძინა 1. რატომ მე მართლა მინდა გამოყოფს 4 ბაიტი და არა მხოლოდ 3? ჰო? აუდიტორია: იყიდება Sentinel ღირებულება? დევიდ ჯ Malan: ზუსტად, რომ Sentinel ღირებულება. იყიდება წარმატებული ნულოვანი, მე უნდა 4 ბაიტი სულ. ასე რომ, მე უნდა სიგრძე სიმებიანი პლუს 1. და მაშინ უბრალოდ კარგი measure-- მიუხედავად იმისა, რომ ამ სისტემაში, ის ყოველთვის იქნება 1- მე ვამბობ, გავამრავლოთ ეს ზომა char. თურმე ზომის არის ოპერატორი C, რომ მხოლოდ გიჩვენებთ ბაიტების რაოდენობას, რომ საჭირო გარკვეული მონაცემები ტიპის. ეს არ მუშაობს მასივები, როგორც წესი, ზოგჯერ ეს ასეა. მაგრამ ზოგადად შემთხვევაში, არ არსებობს. მაგრამ ეს იქნება მითხრათ რამდენი bytes char არის, რომელიც აღმოჩნდება ყოველთვის 1. ასე რომ, ეს არის, როგორც მრავლდება 1. ასე რომ სუპერ cryptic ეძებს ხაზი კოდი. მაგრამ ყველა ის არ არის აძლევს ჩემთვის ბლოკი მეხსიერება. მაგრამ იგი, როგორც ჩანს, გადაწერა არაფერს რომ მეხსიერება? ჯერ არ არის. ასე რომ, რა შემიძლია on line 22 და 23, 24, 25, ასევე, მე უბრალოდ ამის გაკეთება. და ეს არის ერთგვარი ძველი სკოლის პერსონალის ახლა. ეს არის, როგორც PSet 2, სადაც თქვენ მხოლოდ მოძრავი ნივთები გარშემო მეხსიერების, უფრო სწორად სიმები. ასე რომ, მე iterating საწყისი 0 სიგრძეზე სიმებიანი s. და მე გადაწერა i-th ხასიათი მდე შევიდა i-th ხასიათი ტ. და რადგან მე, პროგრამისტი, გააკეთა დარწმუნებული ვარ, რომ გამოყოს ზუსტად ისე, როგორც ბევრი bytes როგორც მე მჭირდება, ეს არის სრულყოფილი ერთ-ერთი ურთიერთობისათვის. და მე ასლი დედა ამას უნდა ახალი. და მერე ბოლოს, მე ამის გაკეთება ონლაინ. ასე რომ, ეფექტი მხოლოდ უნდა ესარგებლა ამ t აქ. ასე რომ, ბევრი უნდა აღიქვას, მაგრამ თუ უბრალოდ განიხილოს რა ხდება სინამდვილეში ქვეშ hood მხოლოდ მოძრავი ამ bytes გარშემო, რომ ყველა საჭიროა, რათა ამ პრობლემის მოსაგვარებლად არის უბრალოდ მოგვცეს ბლოკი მეხსიერება. ახლა რისკის აბსოლუტური, ნება მომეცით კიდევ ერთი მაგალითია, რომ თითქმის იდენტურია, გარდა ამ ერთი ხაზი კოდი. ასე რომ, ეს არის ჰაკერი ვერსია ეს პროგრამა, თუ გნებავთ. მაგრამ მოდით უბრალოდ გამოიხადოს ის, თუ რა ხდება. Line 24 უნდა იყოს ამ t bracket i იღებს s bracket i. ახლა, მე შეცვლის ეს ბევრად უფრო cryptic ვარსკვლავი t პლუს 1 უდრის ვარსკვლავი s plus 1. ასე რომ, რა ხდება და რატომ ხდება გვაქვს ვარსკვლავი ხასიათი? ჩვენ ვნახეთ ვარსკვლავი ადრე, და ის გამოიყენება განსხვავებულად აქ. ჩვენ ადრე დაინახა char *, ახლა მე ხედავს ვარსკვლავი დასაწყისში, და რომ კარგადაა. იმის გამო, რომ თურმე ჩვენ შეგიძლიათ სახის infer მხოლოდ იმ პირველი პრინციპები, რა ხდება. ასე რომ, უბრალოდ უნდა იყოს მკაფიო, რა არის s? გასულ კვირას, რომ ეს იყო სიმებიანი. ეს არ არის საკმარისი აღარაა. რა არის s, კონკრეტულად? აუდიტორია: [INAUDIBLE] დევიდ ჯ Malan: ეს არის მაჩვენებელი. ეს არის მისამართი პირველი ხასიათი ჩვენ აკრეფილი. მაშ, რა არის უ? აუდიტორია: [INAUDIBLE] დევიდ ჯ Malan: მისამართი პირველი byte t, რომ ბლოკი მეხსიერება გადანაწილდა. გამოდის, რომ როდესაც ჩვენ iterate 0 მდე string სიგრძის, პირველ რიგში, მე იწყება 0, იმიტომ, რომ ამ ძველი სკოლა for loop რამ. ასე რომ, მხოლოდ სიმარტივის, მოდით ვივარაუდოთ, რომ პირველი ხაზი კოდი მართლაც სწორედ ამ, მარჯვნივ. თუ არის ნულოვანი და დასძინა, ნულოვანი რაღაც, სავარაუდოდ, არ აპირებს აქვს ეფექტი. რა არის ეს გამონათქვამი? გამოდის, რომ ვარსკვლავი ოპერატორი ამ კონტექსტში არის dereference ოპერატორი, რომელიც მხოლოდ ლამაზი გზა ამბობდა წავიდეთ შემდეგ მისამართზე. ასე რომ, თუ არის მისამართი პირველი გმირი ამ ბლოკი მეხსიერება, * s ნიშნავს წავალთ. და იმიტომ, რომ ჩვენ შედგენილი სურათზე ამ გზით, თქვენ შეგიძლიათ მიიღოს შემდეგი გონებრივი მოდელი. თუ ეს არის ის, და თქვენ ამბობთ * s * s სახის მოსწონს chutes და კიბეები, თუ გახსოვთ თამაში ბავშვობიდან, ჰგავს დაიცვას, რომ arrow და წავიდეთ მისამართი. * t არის იგივე. ასე იწყება აქ, გადადით მისი ბლოკი. მე არ შემიძლია უბრალოდ გამოიყენოს ამ ეკრანზე, რომ გზა. * t ნიშნავს აქ. და მაშინ, ამისთვის loop მხოლოდ განაცხადა, რომ გადავიდეს ეს ხასიათი აქ, გადაადგილება ამ ხასიათი აქ, გადაადგილება ამ ხასიათი აქ. მაგრამ როგორ შემიძლია ამის გაკეთება incrementation? მე უნდა გაუქმება, რაც მე უბრალოდ მკვდარია. ეს არის ის, რაც ზოგადად მოუწოდა მაჩვენებელი არითმეტიკა, რომელიც ნიშნავს მათემატიკის მისამართები. იმ შემთხვევაში, თუ ეს ციკლი, მე შენარჩუნება დამატება i, და თუ არის მისამართი და t არის მისამართი, თუ მე უბრალოდ შეინახოს დასძინა 1, ეს მხოლოდ იმას ნიშნავს შევინარჩუნოთ წინსვლის, და ველით, და ველით მეხსიერებაში. ეს იგივეა, ოქსფორდის ქუჩაზე, ქუჩის, რომ CS შენობა. დასაქმების ხელმისაწვდომობის შენობების 33 ოქსფორდის ქუჩაზე. ასე რომ, თუ თქვენ უნდა გავაკეთოთ 33 Oxford Street + 1 რომ მოაქვს თქვენ 34 Oxford Street, მაშინ 35 ოქსფორდის ქუჩაზე, მაშინ 36 Oxford Street, რაც იმ შენობები რეალურად არიან - თუ ისინი არსებობს. ასე რომ, ეს არის ის, რომ ყველა ვაკეთებთ აქ მაჩვენებელი არითმეტიკული. ასე რომ, ეს არის სუპერ arcane გზა გამოხატავს საკუთარ თავს. მაგრამ ყველა რომ ხდება ქვეშ hood მხოლოდ შემდეგ ამ მისამართები, როგორც ირკვევა, რუკა, თუ გნებავთ, ან შემდეგ ისრებით, როგორიცაა ჩვენ შედგენილი ეკრანზე. OK, ბევრი დაიჯესტს. ნებისმიერ შეკითხვას, სინტაქსი, ცნებები, მითითებას, malloc, ან მოსწონს. ჰო, აი აქ პირველი. აუდიტორია: ასე რომ, სადაც ეს ამბობს * t = toupper * t, არის, რომ აპირებს ესარგებლა ყველა ასო და just-- დევიდ ჯ Malan: Ah, კარგი კითხვა. ასე რომ, ამ ხაზის აქ, 31, არის ეს აპირებს ესარგებლა პირველი წერილი და ყველა ასო. მოდით უპასუხოს, რომ აპირებს უკან პირველი პრინციპებს. და პირველი პრინციპი აქ ვგულისხმობ უბრალოდ წასვლა ძირითადი განმარტებები რა ჩართული. ასე რომ, toupper ფუნქცია რომ კაპიტალიზაციას char. ეს არის ყველა. * t ნიშნავს, რომ წავიდეს, პირველი წასვლა მისამართი ტ. ასე რომ, სურათი, თუ ეს არის ბლოკი მეხსიერების ჩვენ გამოიყოფა malloc, და ეს არის t, * t ნიშნავს აქ. ამასობაში, თქვენ გადადის ღირებულება, ამას მ რომ toupper, თქვენ დავუბრუნდეთ კაპიტალის M, სადაც თქვენ აყენებს მას? თქვენ აყენებს მას, რომ იმავე ადგილას. ასე რომ, იმ ლოგიკით იმ ძირითადი ცნებები, რომ ეს მხოლოდ capitalizing პირველი წერილი თუ თქვენ iterate ერთად i ან ამისთვის მარყუჟი ან ხოლო მარყუჟის, ის არ აპირებს რომ არაფერი მეტი, ვიდრე თქვენ ვთხოვო მას. კარგი კითხვაა. ჰო? აუდიტორია: რატომ გამოვიყენოთ dereference მეთოდი, ვიდრე მასივი? დევიდ ჯ Malan: Ah, კარგი კითხვა. რატომ გამოვიყენოთ dereference მეთოდი ნაცვლად მასივი მეთოდი? არარის კონკრეტული მიზეზი, რომ იყოს პატიოსანი. და, ფაქტობრივად, ამ სახის მაგალითად, უფლება, მე უბრალოდ კამათი მიღების პროგრამა უფრო რთული, უფრო თვალები მინის მეტი, ხალხი შემოწმების გარეთ იმიტომ, რომ ეს გამოიყურება სუპერ arcane, მაგრამ მიუხედავად იმისა, რომ ის აკეთებს იგივე. ასე რომ, სიმართლე გითხრათ, ეს არის ზედმეტად ვიზუალურად კომპლექსური გადაწყვეტა პრობლემა. ეს ჯერ კიდევ კარგი დიზაინი, ხუთი ხუთიდან დიზაინი, თუ არა ეს კონსოლი notation და მაჩვენებელი ნოტაცია. But-- განსაკუთრებით მაშინ, როდესაც მივიღებთ შემდეგ რა თქმა უნდა, PSet 5 როდესაც ჩვენ განახორციელოს, რომ ლექსიკონი, რომელიც მე აღნიშნა რამდენიმე times-- ჩვენ რეალურად აინტერესებს დაბალი დონე მეხსიერების მისამართები რომ ნამდვილად გავიგოთ რა ხდება. მაგრამ, ახლა, აღმოჩნდება, რომ ამ ხაზი კოდი აქ კვადრატულ ფრჩხილებში ნამდვილად არ არსებობს. ისინი რასაც სინტაქსური შაქარი, რომელიც მხოლოდ საბედისწეროდ cool გზა ამბობდა შემდგენელი აკონვერტებს კვადრატულ ფრჩხილებში უნდა იყოს რომ მათემატიკური გამოხატვის. ასე რომ, ეს ადამიანის კონვენცია შეძლებს უბრალოდ დაწერა ეს ძალიან მოსახერხებელი ფრჩხილებში. მაგრამ რა კომპილატორი, clang, მართლაც აკეთებს ნებისმიერ დროს წერთ რა გამოკვეთილი ხაზი 24, ქვეშ Hood ეს მართლაც კონვერტაცია მას ამ. ეს უბრალოდ უფრო სასიამოვნო, როგორც ადამიანის წაიკითხოთ და დაწეროთ კოდი, ხაზი 24. თუმცა, საბოლოოდ, იმ სასწავლო დისკები ძალიან მოვა off როდესაც ერთი საკუთარი კომფორტი ძლიერდება. ყველა უფლება, გავიხსენოთ, რომ მაშინ ეს იყო ერთგვარი ყველაზე დიდი პრობლემა ჩვენ შეუვარდნენ. და რომ ის, რაც გამოიწვია მთელი ეს რა საუბარი პოინტერები, და მისამართები, და გადაწერა რამ. იმიტომ, რომ ჩვენ იმყოფებოდა მეტი ეს სულელური, სულელური საკითხი, რომლის დროსაც მე განხორციელდა logically-- ერთად ლორენ აქ დემო და ფორთოხლის წვენი ამ milk-- შესანიშნავად ალგორითმულად სწორი ფუნქცია შევცვალე ორი ცვლადის " ღირებულებები, მაგრამ რა რამ არ აქვს რაიმე მუდმივი, ან მუდმივი, გავლენა ჩემი კოდი. და რატომ იყო ეს? მოკლედ, რატომ არის ეს განხორციელების swap ლოგიკურად სწორი, მაგრამ არ აქვს გავლენა ცვლადები, რომლებიც გავიდა მას, როგორიც x და y ძირითად? რა იყო არსი ამ საკითხთან დაკავშირებით? ჰო? აუდიტორია: იმიტომ, ცვლადი გააკეთა ასლები ცვლადი უღელტეხილზე მეშვეობით ფუნქცია. დევიდ ჯ Malan: ზუსტად, როცა გაივლის ცვლადი ფუნქცია, ან არგუმენტები ფუნქცია, ისინი გაიარა ასლი, რომელიც იმას ნიშნავს, თქვენ იდენტური ეძებს ნიმუში ბიტი ორივე x და y, აქ უწოდებენ და ბ. და თქვენ არაფერი გსურთ ეგზემპლარი, მაგრამ ისინი აპირებენ, არ აქვთ გავლენა მოუწოდებდა ფუნქცია. და, ფაქტობრივად, ჩვენ გაამახვილა, რომ სურათი ეკრანზე, გავიხსენოთ ბოლო დროს, რომლის მიხედვითაც, თუ თქვენ ნამდვილად ვფიქრობ იმაზე, თუ რა არის მიმდინარეობს ქვეშ hood-- თუ ეს არის თქვენი კომპიუტერის მეხსიერებაში, და ქვევით აქ არის ბლოკი მეხსიერების გამოიყენება, ძირითადად, ეს არის ბლოკი მეხსიერების გამოიყენება swap, და ისე კი, თუ მთავარ ორი ცვლადი, x და y, swap შეიძლება იდენტური ეძებს ღირებულებები, რომლებიც არიან 1 და 2, მაგრამ ისინი სრულიად სხვადასხვა მოცულობით მეხსიერება. ამიტომ, ჩვენ უნდა მოგვარდეს ეს. და გულწრფელად, როგორც ჩანს, რომ ჩვენ ახლა აქვს ამ პრობლემის მოგვარების, მარჯვნივ. თუ ჩვენ ახლა აქვს უნარი მანიპულირება რამ გზით მისამართები და, ერთგვარი chutes და კიბეები სტილი, აღნიშნულ ისრებით და წავიდეთ სადმე ჩვენ გვინდა მეხსიერება, ვერ ჩვენ ამ პრობლემის მოგვარებას გავლის მთავარი სვოპ არ ღირებულებების ჩვენ გვინდა swap, მაგრამ უბრალოდ ინტუიციურად რა შეიძლება ჩვენ გაივლის სვოპ ნაცვლად? [INTERPOSING ხმები] დევიდ ჯ Malan: რატომ არ გვაქვს მხოლოდ გაიაროს ეს მისამართები, არა? რატომ არ ვაძლევთ გაცვლა საგანძური რუკა, თუ გნებავთ, რომელიც იწვევს ის, რომ რეალურ ღირებულებებს x და y. მოდით swap, რეალურად შეცვალოს იმ ორიგინალური ბიტი, ვიდრე მხოლოდ გავლით ასლები ბიტი. ასე რომ, ის ფაქტი, რომ ის, რაც არის იქნება გამოსავალი. ეს ვერსია აქ არის აშკარად ცუდი და ყალბი. და ახლა, ერთი შეხედვით, ეს უბრალოდ გამოიყურება როგორც ჩვენ დასძინა რამოდენიმე ვარსკვლავს შემთხვევით და გადაკვეთა ჩვენი თითების ის, რომ შეადგინოს. მაგრამ, ეს იქნებოდა ახლა ადგენენ. მაგრამ ვნახოთ, რას ნიშნავს ეს. და სამწუხაროდ, ავტორები C ვერ ავირჩიეთ კიდევ ერთი სიმბოლო იმისათვის, რომ ეს პატარა ნათელი, მაგრამ ვარსკვლავი ოპერატორი აქვს სხვადასხვა მნიშვნელობა ორი სხვადასხვა კონტექსტში. და ჩვენ ვნახეთ, ორივე, მაგრამ მოდით გამოირჩეოდნენ. ასე რომ, ზედა არსებობს, როდესაც მე შეიცვალა და ბ მიმდინარეობს int ის ცუდი ვერსია int ვარსკვლავი, და ბ, ადრე იყო, რიცხვებით. რა არის და ბ ახლა კარგი, მწვანე ვერსია? ისინი მისამართები. მისამართები, რა, უნდა იყოს ნათელი? მისამართები რიცხვებით. ასე რომ ის ფაქტი, რომ მე ვარ ამბობდა int ვარსკვლავი საშუალება ეს არის მისამართი რიცხვი, კონკრეტულად. ასე რომ, ახლა შეამჩნია, რომ ხაზი კოდი, რაღაც შეიცვალა. tmp რჩება იგივე, იმიტომ, რომ ეს მხოლოდ დროებითი რიცხვი, მეხსიერების ჯადოსნური არსებობს. მაგრამ ახლა სჭირდება ვარსკვლავი. და, ფაქტობრივად, ყოველ სხვა ნახსენები და ბ, შეამჩნია, რომ ყველა, რომ შეცვლის წითელი მწვანე ის არის, რომ მე prefixing იმ ცვლადების ვარსკვლავი. იმიტომ, რომ მე არ მინდა, რომ ასლი და ბ. იმიტომ, რომ თუ მე უბრალოდ დააკოპირეთ და ბ და swap a და b, რა ვარ მე რეალურად შევცვალე? უბრალოდ მისამართები, მე მინდა, რომ სვოპ რა არის იმ მისამართებზე. მინდა იქ წასვლა. ასე რომ, ვარსკვლავი ოპერატორი შიგნით ჩემი ფუნქცია, არ არის შიგნით პარამეტრის სია, იმას ნიშნავს, თქვენ წავიდეთ იმ მისამართები და პრაქტიკულად შეცვლის იმ ღირებულებებს. ასე რომ, რას სურათი ახლა ასე გამოიყურება ნაცვლად. ისე, თუ ნაცვლად მე გავლით in A და B არ არის 1 და მე -2 ბლოკის მე რეალურად უნდა დაემატოს ერთი სხვა განმარტება აქ. ასე რომ, ვფიქრობ, რომ ეს ბლოკი მეხსიერების საიდან 10. ეს არის ადგილმდებარეობა 11, მაგრამ ეს არის ცოტა გამარტივებას, მე ახლა გვაქვს ორი არჩევანი გააკეთოს მე გაივლის x და y ან მე გაივლის მათი მისამართები? თუ მე გაივლის მათი მისამართები ასე, მე მხოლოდ ახლა უნდა განახორციელოს swap პოსტი მწვანე კოდი ასე რომ, როდესაც ის ხედავს და როდესაც ეს ხედავს ბ, ეს არ არის მხოლოდ ასლი და ბ და გადატანა რძე და ფორთოხლის წვენი. რძე და ფორთოხლის წვენი მეტაფორა ახლა თანხიდან, იმიტომ, რომ ეს არის ის ჭიქა თხევადი და არ რუკები. ჩვენ ნაცვლად უნდა წავიდეს მიმართოს 10 და ჩვენ უნდა წასვლა მივმართო 11 და მაშინ ასრულებს, რომ შევცვალე ლოგიკა. ასე რომ, ლოგიკა არის იგივე, მაგრამ ჩვენ უნდა ოდნავ განსხვავებული გზა წვდომის იმ ცვლადების. ასე რომ, საბოლოოდ, რა პროგრამა უნდა გამოიყურებოდეს ეს. In swap.c სიტყვასიტყვით გადაწერა და გაკრული მწვანე ვერსია. მაგრამ მე უნდა მიიღოს ერთი ცვლილება. ეს არ არის საკმარისი მხოლოდ შეცვალოს swap. სხვა რა ხაზი კოდი მე უნდა შეცვალოს? ჰო? აუდიტორია: სად სჭირდება არგუმენტები. დევიდ ჯ Malan: სად იგი იღებს მისი არგუმენტი. ასე რომ, თუ მე გადახვევა up to main, მე არ შეუძლიათ უბრალოდ გაივლის x და y, და, მე გპირდებით, ბოლო ნაჭერი ახალი სინტაქსის დღეს. მე უნდა გაიაროს არა x და y მაგრამ მისამართი x და y. და აღმოჩნდება, სიმბოლო რომ ავტორები C აირჩია არის, თუ თქვენ იყენებთ ampersand აქ, არ უნდა აგვერიოს bitwise ampersand, თუ თქვენ იყენებთ ampersand აქ და ampersand აქ, ამ გათვლით, თქვენ, რა არის მისამართი x, შესაძლოა, ეს 10, რა მისამართი შ, იქნებ ეს 11, და გადის იმ ნაცვლად. ასე რომ, ბევრი აღიქვას ერთდროულად. მაგრამ ვნახოთ, ახლა სწრაფად ჩვენი დარჩენილი ოთხი წუთი სადაც რამ შეიძლება წავიდეთ awry. და როგორც განზე, რეალურად მე ეს სურათი, TF ეს სურათი გადაიღო ერთი ან ორი წლის წინ. ასე რომ, ეს არის უკან კუთხეში ელიოტის სასადილოს. პოინტერები ალბათ უმძიმესი თემა, რომელიც ჩვენ მოიცავს CS50. ასე რომ, თუ თქვენ ფიქრი ერთგვარი ფერდობის ჰგავს, შესაძლოა, ეს მეტი ჰოკეის ჯოხი როგორც ეს, გააცნობიეროს, ჩვენ ერთგვარი დასასრულს უახლოვდება პიკი პირობები კონცეპტუალური სირთულის. და მე ზრდიან ამ ფოტო, რადგან ვფიცავ ღმერთს, 1996 წლის შემოდგომაზე, როდესაც მე მივიღე CS50 ჩემი სწავლების თანამემამულე, Nishat Mehta, ის იჯდა ჩემს ქვემოთ კუთხეში Eliot დ Hall ლანჩზე, ან ვახშამი, ან რაღაც ცდილობენ დამეხმარება მესმის მითითებას. ეს არის სადაც მე ვიყავი კვირის შემდეგ იგი შემოღებულ იქნა ლექცია როდესაც საბოლოოდ დავრწმუნდი მითითებას. და მე იმედი მაქვს, რომ ამ დააჭირეთ გაცილებით ადრე თქვენთვის. მაგრამ გააცნობიეროს ეს აბსოლუტურად შორის უფრო დახვეწილი თემა ჩვენ შევხედე. მაგრამ ეს მათ შორის ყველაზე ძლიერი. და როდესაც თქვენ, რომ ეს, მართლაც ყველა უბრალოდ აპირებს საბოლოოდ გავერთიანდეთ. ასე რომ, დანარჩენი დავრწმუნდი, რომ ეს არ უნდა ყველა რადიატორის დღეს. ასე რომ, აქ არის ბოლო პროგრამა ჩვენ ვაპირებთ შევხედოთ. და ჩვენ ვაპირებთ დასრულდება სწრაფი სამი წუთის claymation ჩვენს მიერ დამზადებული მეგობარი, ნიკ Parlante. აი პროგრამა, რომელიც ზედა ორ ხაზები აცხადებს ცვლადი x და y. ორივე მათგანი მისამართები რიცხვებით, AKA მითითებას. ჩვენ მაშინ გამოყოფს საკმარისი მეხსიერების შესანახად int და შესანახად მისამართი რომ მეხსიერების x. ასე რომ, ეს კი მარტივი ვიდრე მაგალითად ადრე. მომეცი ოთხი ბაიტი მეხსიერების, ეს არის ის, ზომა int, და რომ მისამართი x. ეს ხაზი აქ ნიშნავს წასვლა მისამართი x და მნიშვნელობა ცხოვრება, ნომერი 42 არსებობს. მაგრამ ამ ხაზის მაწუხებს. Star y ნიშნავს წასვლა მისამართი y, და ამით უიღბლო ნომერი 13 არსებობს. რატომ არის საშიში, ამ ეტაპზე ამ story-- თუმცა სწრაფად განუცხადა ჩვენი დასუსტების-ე აქ რატომ არის ეს ცუდი ჩემთვის ვთქვა, გადადით მისამართზე წ? აუდიტორია: თქვენ არ [INAUDIBLE]. დევიდ ჯ Malan: მე არ დააყენა არაფერი y. ასე რომ, რა არის ღირებულება y, ამ ეტაპზე ამბავი? ჩვენ არ გვაქვს იდეა. ეს არის რაღაც ნაგავი ღირებულება და არც იმას Binky ვიცი. თუ ჩვენ ვერ დასრულდება ეს შენიშვნა. [ვიდეო აღწარმოების] -ეი, Binky, ვიღვიძებ. დროა მაჩვენებელი fun. რა არის ეს? ბუნებაში პოინტერები? ოჰ, გადასარევი. -Well, უნდა დავიწყოთ, მე ვფიქრობ, რომ ჩვენ ვართ აპირებთ უნდა რამდენიმე მითითებას. -OK. ეს კოდი გამოყოფს ორ მითითებას რომელიც შეიძლება აღვნიშნო, რომ რიცხვებით. -OK, ასევე მე ვხედავ ორ მითითებას, მაგრამ ისინი არ ჩანს, მიუთითებს, რომ არაფერი. -სწორედ უფლება. თავდაპირველად პოინტერები არ აღვნიშნო, რომ არაფერი. რამ მათ აღვნიშნო, რომ მზად უწოდებენ pointees და დახურეს არის ცალკე ნაბიჯი. -Oh, უფლება, უფლება. ვიცოდი. Pointees ცალკე. ასე რომ, როგორ გამოყოფს pointee? -OK, ასევე ეს კოდი გამოყოფს ახალი რიცხვი pointee, და ეს ნაწილი ადგენს x აღვნიშნო, რომ ეს. -ეი, რომ უკეთესია. ასე რომ, ეს რაღაც. -OK, მე dereference მაჩვენებელი x შესანახად ნომერი 42 მის pointee. ამ შეასრულა, მე უნდა ჩემი ჯადოსნური ჯოხი of dereferencing. -თქვენი ჯადოსნური ჯოხი of dereferencing? Uh, რომ ეს არის დიდი. -ეს არის ის, რაც კოდი ჰგავს. მე უბრალოდ შეიქმნა ნომერი and-- [POP ხმის] -Hey, შეხედეთ იქ მიდის. ასე რომ, აკეთებს dereference on x შემდეგნაირად arrow წვდომისათვის მისი pointee. ამ შემთხვევაში, შესანახად 42 იქ. Hey, სცადეთ ეს შესანახად ნომერი 13 გზით სხვა მაჩვენებელი, შ. -OK. მე უბრალოდ მეტი აქ Y, და მიიღეთ ხმების 13 შეიქმნა. და მერე ჯოხი dereferencing და just-- [BUZZER ხმის] -Oh, Hey, რომ არ მუშაობს. ამბობენ, uh, Binky, მე არ ვფიქრობ, dereferencing Y არის კარგი იდეა, რადგან შექმნის pointee არის ცალკე ნაბიჯი. მე არ ვფიქრობ, რომ ჩვენ ოდესმე ეს. -Hmm, კარგი წერტილი. -ჰო, ჩვენ გამოყოფილი მაჩვენებელი, y, მაგრამ ჩვენ არასოდეს ვაყენებთ მას აღვნიშნო, რომ pointee. -Hmm, ძალიან დაკვირვებათა. -ეი, თქვენ ეძებთ კარგი იქ, Binky. შეგიძლიათ დაფიქსირება ისე, რომ Y რაოდენობა იგივე pointee როგორც x. -Sure, მე, ჩემი ჯადოსნური ჯოხი of მაჩვენებელი საბუთი. -ის არის, რომ იყოს პრობლემა, როგორც ადრე? არა, ეს არ შეეხოთ pointees. ეს უბრალოდ ცვლის ერთ მომცეთ უნდა აღვნიშნო, რომ იმავეს [Popping sound] --as სხვა. -Oh, მე ვერ ვხედავ. ახლა Y რაოდენობა იმავე ადგილას, როგორც x. ასე რომ, დაველოდოთ, ახლა Y დაფიქსირდა. მას აქვს pointee. ასე რომ თქვენ შეგიძლიათ სცადოთ კვერთხის of dereferencing კვლავ გამოაგზავნოს 13 დასრულდა. -Oh, OK, აქ გადის. -ეი, შევხედოთ, რომ. ახლა dereferencing სამუშაოები y. და რადგან მითითებები გაზიარებას, რომ ერთი pointee, ორივე ვხედავთ 13. -ჰო, გაზიარებას, uh, რასაც. ასე რომ, ჩვენ ვაპირებთ გადართვის ადგილებში ახლა? -Oh, გამოიყურება ჩვენ გარეთ დრო. -But-- -უბრალოდ გვახსოვდეს, სამი მაჩვენებელი წესები. ხმების 1, ძირითადი სტრუქტურა არის, რომ თქვენ უნდა მომცეთ, და ეს მიუთითებს, რომ pointee. მაგრამ კურსორი და pointee ცალკე. ხოლო საერთო შეცდომა შექმნას მომცეთ მაგრამ დავიწყება მისცეს მას pointee. ხმების 2, კურსორი dereferencing იწყება მაჩვენებელი და შეასრულებს arrow მეტი წვდომისათვის მისი pointee. როგორც ყველამ ვიცით, რომ ეს მუშაობს მხოლოდ იმ შემთხვევაში, თუ pointee, რაც სახის იღებს უკან გამორიცხავს ნომერი 1. ხმების 3, კურსორი დავალება იღებს ერთი მაჩვენებელი და ცვლის მას უნდა აღვნიშნო, რომ იგივე pointee მორიგ მაჩვენებელი. ასე რომ დავალების, ორ მითითებას იქნება აღვნიშნო, რომ იგივე pointee, ზოგჯერ, რომ ე.წ. გაზიარება. და ეს ყველაფერი არ არის, რომ ეს, მართლაც. Bye-bye ახლა. [END აღწარმოების] დევიდ ჯ Malan: ეს არის ის CS50. მადლობა პროფესორი ნიკ Parlante. ჩვენ დავინახავთ, თქვენ მომავალ კვირას. [ელექტრონული მუსიკის დაკვრა]