[MÜZİK OYUN] DAVID J. MALAN: Bu gibi Bir çaylak seminer bugün. TAMAM. Dışarı Yani çok yağışlı. Bu Çarşamba meydana eğilimindedir, ama daha fırsatı sorular bugün. Yani aslında başlamak edelim sadece bir an film ile. Ama biz her zaman olduğu gibi görkemli başlayacağız. Bu CS50 ve bu Haftanın 4 sonudur. Hiç izledim Yani eğer Tv ya da film burada Bazı bilgisayar uzmanları var ve Polis ya da FBI, ya da bazı ajans Bazı yakalamaya çalışıyor düşman, iyi, sen ettik Muhtemelen ", geliştirmek" ifadesini duydu bu sayede o teknisyen nasılsa sihirli sonsuz yakınlaştırır suçluları görmek kadar kimlik veya plaka numarası Bir ayna bile ışıltı içinde ya da birinin gözünün ışıltı. Yani aslında, en az bir göz atalım Hollywood'dan birkaç tür sahneleri. [VİDEO OYNATMA] -Tamam, Şimdi sana iyi bir görünüm alır. Bunu tut. Onu geri çalıştırın. -Bir dakika bekle. Sağa git. -Orada Bu dondurma. -Tam ekran. -Tamam, Bu dondurma. Eğer, bu konuda olacak kadar -Tighten? Bu üzerinde -Vector arka tekerleği ile adam. Burada bu noktada üzerinde -Zoom. Doğru ekipman -with görüntü genişlemiş ve bilenmiş olabilir. -Bu da ne? -Bu Bir donanım program. Bu kadar net bir sen misin? -Bilmiyorum. Şunu geliştirmek edelim. -Enhance Bölüm A6. -I Detay geliştirilmiş, ve-- ben olduğunu düşünüyorum geliştirmek için yeterli, Benim ekrana bırakın. -Ben Onun gözünde yansımasını gelişmiş. -Hadi Ile bu çalıştırıldığı video geliştirme. -Edgar, Bunu artırabilirsiniz? -Dayan. Bu yansıması üzerinde çalışıyor -Ben. -Biri Yansıması. -Reflection. Adamın yüzünün bir yansıması -İşte bu. -The Yansıması. Bir yansıması -İşte bu. Aynaya üzerinde -Zoom. -Bir Yansıma görebilirsiniz. Buradan imajını geliştirmek miyiz? Eğer burada onu geliştirmek miyiz? Bunu geliştirmek miyiz? Bunu geliştirmek misin? Bunu geliştirmek miyiz? Bunu geliştirmek miyiz? -Bekle Bir saniye, ben geliştirmek gerekir. Kapı üzerinde -Zoom. 10 -Times. -Zoom. -Taşınmak. -Daha. Bekle, dur. -Dur. Bunu -Pause. Bize 75 derece -Döndür Dikey etrafında, lütfen. -Dur. Kısmına geri dön Yine kapı, yaklaşık. Bitmap bir görüntü artırıcı Yakaladım? -Hey, Belki Pradeep kullanabilirsiniz Sen yöntemi pencerelere görmek için. -Bu Yazılım sanat halidir. -The Özdeğer kapalıdır. Sağ -Kendinle algorithm-- kombinasyonu -Sigara Alınan eliminasyon sonraki seviyeye algoritmaları, ve ben bunları kullanabilirsiniz bu fotoğrafı geliştirmek. Üzerine -Lock ve z-eksenini büyütmek. -Enhance. -Enhance. -Enhance. -freeze Ve geliştirmek. [SON OYNATMA] DAVID J. MALAN: Pekala, Bunların hepsi aslında kelimelerdir. Onlar sadece bir araya sinirli konum Aslında mantıklı değil yol. Bunun gibi Ve aslında, CS50 ve kurslar TV ve filmler bir sürü berbat eğilimi senin için. Ne zaman o bilgisayar uzmanları Çünkü terimleri kapalı tehdidi ve diyorsun gibi fantezi şeyler özvektörler ve z-ekseni, ve diğer herhangi bir sayıda aslında daha teknik terimler, Onlar gerçekten sadece çekimi ediyoruz kelimeler birbirine çok sık. Bizim umutları biri olduğunu olduğunu, alma derslerin bir yan etkisi olarak Bu gibi olacak daha fazla kişi dünya aslında tartmak mümkün ve sadece çok hafif etkilemek Kalite ve bu filmlerin doğruluğu? Aslında, en gerçeklik bir göz atalım. Yani burada personel fotoğraf Meryem, bizim eğitim arkadaşlarının biri. Ve o olduğunu varsayalım bir şey şüpheli. Ve yine, bir ışığı var Onun gözünde kanıt bazı parça, ya da onu gözlük yansımasında. Peki, biz filmlerde tam olarak yaparsanız Biz yakınlaştırmak ve "geliştirmek" burada, teklif, Bu ne kadar bilgi olduğunu Mary yüzüne olduğu Bir görüntü çekerken orijinal çözünürlükte. Ve aslında, bu noktalar görebilirsiniz. Ve bunlar ne vardır adı piksel, P-I-X-E-L-S, hangi tipik bir kare Bu görüntüyü oluşturan bir noktadır. Ve geri gün ve aslında hatta Bugünün LED TV ile bazı Bugün veya LCD TV'ler, sen var ise Odanızda veya evde bir tane, ona süper yakın gitmek, ve eğer o biraz eski TV var, özellikle muhtemelen hatta bu noktalar görebilirsiniz ve bu bir görüntüyü kompoze budur. Ve artık orada Bu daha bilgiler. Biz anlamında, "geliştirmek" olabilir üzerinde ve çeşit şeyler yumuşatma tür, çeşit, ne çıkarım Renk Mary'nin gözüne yanında olmalı Böylece aslında o kadar pikselli değil. Ama yakınlaştırma devam edersen, orada Onun gözünde kötü adam olduğunu. Bunun gibi hepsi bilgi elimizde. Sen oluşturamazsınız yoktan bilgiler. Sadece bir sonlu var Orada bit sayısı. Problem Set 4, So Eğer bir fırsat var Dünyada bu tür oynamak için. Problem Set 4, sen ele alacağız grafik ve adli tıp dünyası, ve aslında kod yazmak Bu kayıp görüntüleri kurtarır. Sen kod yazmak edeceğiz mevcut görüntüleri manipüle ve sonuçta ne anlama başlık altında oluyor. Ve, o aslında, çıkıyor tüm bu karmaşık değil. Örneğin, eğer biz istedik Bir gülen yüz nerede temsil Bu siyah pikseller ile veya bu siyah noktalar, Evet, biz sadece temsil edebilecek Onları da gerçekten bir bitmap. Ve eğer hiç duymuştu ifade bitmap belki şimdi bir yapmaya başlar Biraz daha anlamda bugün. Biz zaten biraz ne olduğunu biliyorum. 0 veya 1 var. Ve bir harita sadece bir şeydir bir kağıt parçası gibi Bu size yön verir ve sahip belki x ve y koordinatları bir tablo. Yani burada bir bit eşlem. Bu bit haritası bulunuyor böylece, bir 1 görünüşte beyaz pikseli temsil edecek ve 0 siyah pikseli temsil edecek. Ama biz kesinlikle bunu etrafında çevirmek olabilir. O gerçekten önemi yapar Biz tutarlı konum sürece. Ve burada iç binary-- olarak, nasıl Bir bilgisayar belleği, hatta içeride Sabit bir dosyanın drive-- saklamak olabilir gülen yüz görüntülerinin basit. Ama biz ne, tabii ki, Bu görüntüde eksik? Renk, değil mi? Bu bariz bir sonraki adım ya da geliştirme renk ile bu geliştirmek. Yani maalesef sadece tek bir tıklama ile bit, 0 ya da 1, Rengini temsil edebilir. Yani, kırmızı veya mavi olabilir, ya da olabilir Siyah ya da beyaz veya yeşil veya pembe, veya renk herhangi çiftleri. Ama basitlik aşkına, biz olacak Sadece siyah ve beyaz varsayalım. Yani mantıklı biz eğer ihtiyacımız ne biz Bir görüntüdeki renk uygulamak ister misin? Ne yapmalıyız? Burada sınırlayıcı faktör eğer gibi bu bir bit ile sadece can olduğunu iki devlet, 0 veya 1 beyaz temsil ya da siyah, ne yapmak istiyorsun? HEDEF KİTLE: Daha fazla veri. DAVID J. MALAN: Daha bit, evet daha fazla veri, daha fazla bit. Ve aslında, tam olarak nasıl Renkli görüntülerin temsil edilmektedir. Tek bir bit kullanmak yerine, bir 0 veya her piksel için 1, her nokta, Sadece birden fazla kullanın. Belki, belki daha yaygın, 8 kullanın Problem Set, aslında 24 kullanın ve 4, bir dosya ile oynayacak tipik olarak 24 bit kullanır biçimi. Ama çoğunuz muhtemelen JPEG aşina. Hiç geçtiniz Telefonunuza bir fotoğraf, veya yüklenen veya bir şey görüldü Facebook'tan veya fiske, herhangi bir sayıda fotoğraf tabanlı web siteleri, sen ettik Muhtemelen daha önce JPEG görüntü görüldü. Ve bu dosya, çıkıyor biçimi biz Pset 4 kullanmak için gidiyoruz böylece sen gidiyorsun görüntüleri kurtarmak zorunda Yanlışlıkla bir sildiğiniz olduğunu Kamerada bozuk hafıza kartı, eğer sen. Ve çıkıyor ki olsa bile JPEG oldukça sophisticated-- olduğunu çok daha sofistike siyah ve beyaz noktalardan daha var çünkü biz bir an önce gördüm aslında fantezi algoritmaları bu nedenle, bir JPEG sıkıştırmak için kullanılır Eğer gerçekten güzel bir olabileceğini, kaliteli resim ama kullanan görece az sayıda bit. Ve biz geri geleceğiz uzun zaman önce sıkıştırma. İlk çıkıyor JPEG image-- üç bayt olursa olsun bir fotoğrafı çekilen kadarıyla of-- değerleri 255, 216, 255 bulunmaktadır. Diğer bir deyişle, eğer sadece bit o desen bakın, üç olarak burada temsil bayt veya 24 bit, toplam yüksek olasılıkla bunu çıkarabiliriz Bu ilk üç ona bakıyor Bir JPEG bayt. Ve bu nedir bilinen olmasıdır Bir JPEG imza olarak. Dosya formatları bir çok başlatmak için orada eğilimi dışında 0 ve 1 belirli desenleri ile, Bu, Windows ve Mac OS ve iOS yüzden, Android biliyorum dosyanın ne tür Sözde dosyasına ek olarak, bulunmaktadır uzantılı dosyaların bir sürü var. Eğer .jpg varsa, işte bilgisayara başka ipucu. Yani şimdi bu bak diyelim daha teknik biraz. Biz biliyoruz ondalık Sistem 0 ile 9 arasında olduğunu. Biz ikili 0 ve 1 olduğunu biliyorum. Ve Pset geri düşünüyorsanız 0, biz sizinle güreş vardı Biraz, bir şey için onaltılık olarak adlandırılan, 16 basamak var burada, 10 yerine veya 2 yerine. Ve bu rakam, kongre tarafından, Daha sonra 9 ve 0 ile f ne temsil f aracılığıyla sadece hızlı aklı olarak ondalık sayı, kontrol ettiniz mi? Yani, 15. Ve adil tarafından, 10 temsil etmelidir Ben verdiğim sipariş doğası. Bu, sadece bir keyfi var kongre ama oldukça standart. Bu desen bakmak Yani eğer Üç atalım bytes-- sadece bakmak başlar nasıl tutarlı bir şekilde Genellikle bilgisayar bilimcileri bakmak ve dosyalar hakkında düşünüyorum. Kesinlikle düşünmek olabilir 0s dosyalar ve 1'ler ve ondalık, ama gerçekte, biz ikili kullanma eğiliminde ya da daha fazla, tipik olarak hexadecimal-- geri Pset 0 dan. Bu yüzden bana teklif izin vermenizi 255, 216, 255 ve 0 ve 1 sadece bu kalıpları vardır. Ve sen bu olmadığını kontrol edebilirsiniz Hafta 0 dan matematik yapmak istiyorum. Ama, şimdi, sadece varsayalım bu gerçekten doğrudur. Ben sadece üç ondalık yeniden yazıldı ettik Üç ikili değerler olarak sayılar. Şimdi ne yapacağım ise sadece bazı beyaz boşluk eklemek, Sadece okunabilirliği aşkına. Ve haber, ben sadece gidiyorum şeyleri birbirinden hareket etmek için. Yani önce, sonra daha önce, sonra. Ben diğer ilginç bir şey yapıyorum sadece bu yüzden şeyler yayılan daha Bu haber sekiz her set bit artık dört bitlik iki takım olduğunu. Bu onaltılı nedeniyle yararlıdır Özellikle moda Çünkü her onaltılık basamak 0 ile f, ya da daha özel olarak 0 ile 15, temsil edilebilir Tam dört bit ile. Bir başka deyişle, onaltılık eğer Sadece 0000 var, bir 0 temsil etmek istiyorum, Dört sıfır. Ve 15 temsil etmek istiyorsanız, Bu dört bit olan, 1111 var. Ve sen matematik yaparsanız, Bu olanlar yer ise, Bu, 16s yerdir Bu sen-- vermek için gidiyor yerine o gidiyor Özür aşağıdaki amaçlara, ikili, Bu 15 size vermek için gidiyor, olanları yer, twos yer, ayak ve sekizli yer. Bu yüzden bana o teklif izin solundaki dört bit dizisi Biz f aramak için gidiyoruz budur. En büyük sayı sen Dört bit ile temsil edebilir. Ve biz zaten onaltılık biliyoruz, f onaltılık en büyük rakamdır. Biz, orada başka bir f var İki oraya daha. Ve şimdi, sadece inanç almak Ben matematik hakkı yapmış ve sol yarım bu bit, 1101, onaltılık d aynı şeydir. Ve sağ el, 1000, sadece 8'dir. Ve o kadar kolay kimse sağ görmek için? 8 represents-- doğru bu Sekiz yer altında. Bu yüzden eights sütununda bir tane var ve ayak, ikişer veya olanları hiçbir şey. Yani şimdi daha geleneksel, insanlar eğilimi Böyle onaltılık basamak yazmak için, Sadece birlikte onları ezmek ve sonra 0x onları öneki. Bu başka bir şey ifade Bir human-- görsel ipucu Burada onaltılık value-- çünkü geliyor aksi takdirde açık olmayabilir. Hangi ki sonuçta söylemek için sıfırlar ve olanları desen, veya onaltılık modeli basamak eşdeğer sen o aramaya başlamak için gidiyoruz Sorun Set 4 bu-- olduğunu ve Problem Set 4 spec yürüyecek Daha fazla detail-- Bu yoluyla size ancak Arcane tür olarak gerçekleştirmek Bu, ilk bakışta görünebilir Bu çok görmeye başlamak için gidiyoruz. Ve aslında, hatta GDB içinde, ayıklayıcı biz Pazartesi günü tanıtıldı ve Dan Pset 3, gidiyor tanıttı sık sık size onaltılık değerler göstermek için Sadece onlar daha olma eğilimindedir, çünkü ondalık veya ikili daha geleneksel bilgisayar dünyasında. Şimdi bağlam içine bu etsinler. Birçoğunuz bu hatırlayabilir ve Neyden geldiği, burada hayal? Vista, bu yüzden bile daha önce Bu, Windows XP, bu ilk yaptı. Yani bu güzel bir manzara olduğunu. Ve aslında, online-- etrafında kurcalamak ise Ben bir Wikipedia makalesi olduğunu düşünüyorum, burada birileri çok şaşırtıcı dışarı gitti Bulunan Dünyada bu konum kurmak Onun ya da onu kamera içinde tam doğru duymak yüzden ve bu bugün öyle gözüküyor ki-- ama tam olarak aynı ayar var. Bu görüntü olsa da, bir dosyada ise format bitmap, b-m-s. Ve biz bir süper almaya gidiyoruz Bunun ne anlama geldiğini de hızlı bir bakış. Ama bitmap sadece farklı bir yoludur temsil eden görüntüler hala pikselleri kullanarak 0 ve 1 de sonuçta. Ama hızlı bir bakışta, sahip olduğu Bir daha ilginç imza Dosyanın başında. Sadece üç değil bayt yerine var bayt desen bir sürü Bu anlam önceden belirlenmiş oylandı. Örneğin, bir yerde Bir bitmap görüntüsünün ilk birkaç bayt boyutu olacak Görüntü, görüntü genişliği, Resim yüksekliği, yani kullanışlı meta, eğer sen. Faydalı bilgiler olduğunu Photoshop veya herhangi bir grafik kullandığınız programı Aslında umurumda olabilir. Bu konuda Böylece daha fazla Problem 4 Set, ancak bu demek sadece günün sonunda Eğer kullanmakta olduğunuz tüm dosya biçimlerini senedir Microsoft Word dosyaları için, Sayılar dosyaları, Excel dosyaları, dosya formatları herhangi bir sayı Bazı olabilir Bilinen dosya uzantısı Kaputun altında sadece 0'lar ve 1'ler vardır. Ve insanlar karar verdik sözleşmeler ne, Ne 0 ve 1 desenleri temsil Word, Excel dosyası karşı dosyası diğer dosya formatlarını herhangi bir sayı karşı. Pset 4 Yani, bir gerekecek fırsat bu ile oynamak. Ama ne bir yapı var demek. Bu artık gerçekten güzel bir segue olduğunu Sadece bir çift vardır içine C, ek özellikleri olduğunu Henüz bakmadım. Oldukça küçük bir dil ve biri C hakkında güzel özellikleri olan bir yapıdır. Örneğin, eğer haydi represent-- istedim Eğer bir değişken var istedim söylüyorlar Bazı programda bir öğrenci temsil eder. Belki bir ders yazarken Kayıt program veya çekirdek alışveriş aracı, ya da onun gibi bir şey. Ilgili verilerin parçaları nelerdir akla gelen bir öğrenciye? Bir öğrenci gibi hangi değerleri temsil? Evet? Bir öğrenci olarak bir isim var. Tipik bir öğrenci başka ne var? HEDEF KİTLE: [duyulamaz] DAVID J. MALAN: Peki, özür dilerim. HEDEF KİTLE: Yaş. DAVID J. MALAN: Bir yaş ya da doğum günü eşdeğer, evet. Başka? HEDEF KİTLE: Kimlik numarası? DAVID J. MALAN: belki Yani bir kimlik numarası, Bir telefon numarası, belki bir yurt veya ev, kolej, ya da onun gibi bir şey ya. Veri parçalarının herhangi bir sayı olduğunu Eğer kişi listenizde olabilir Bir öğrenci tanımlayabilirsiniz budur. Biz kodda, bunu yapmak istedim eğer öyleyse, Bu gibi basit bir şey yapmak gerekebilir. Biz böylece bir program olabilir vardır, diyelim int main (void) izin verin. Ve ben bir temsil etmek istiyorsanız Ben mesela, olabilir öğrenci, Bu öğrenci için isim adında bir dize, Bu öğrenci için yurt adında bir dize, Belki bir int o öğrenci için kimliğini çağırdı. Ve ben dize kullanıyorum, çünkü CS50.h. geri dönün ve yukarı koymak gerekir Belki stdio.h ihtiyacım gidiyorum. Bu yüzden bana preemptively olanlar yapalım ve ben Şimdilik bu student.c arayacağım ve bu kaydedin. Ve şimdi ben bir şey yapabilirim Bu değişkenler ile. Ve biz sadece yazmak için gidiyoruz Bu sözde kodda bir açıklama olarak, ilginç değil çünkü şimdi için ne. Tamam, bu bir program olduğunu nasılsa bir öğrenci saklar. Ben ne yapmalı istiyorsun ben iki öğrenci depolamak istiyor? Yani benim ilk içgüdüsü gidiyor Bir dakika bekleyin, tamam olmak, Başka bir öğrenci varsa neden yok Sadece dize adı 2, dize yurt 2 yapın int id2. Ve biz gitmiş yaptık Bu yolda önce aşağı ve ne gibi görünüyor bizim çözüm neydi Bir hackish kopya macun tür olarak Burada iş? HEDEF KİTLE: bir dizi. DAVID J. MALAN: Evet, Biz bir dizi kullanabilirsiniz. Tam bu çok hızlı bir şekilde hantal hale gelir. Sen keyfi sıralamak zorunda tüm bu değişkenler adlandırma başlar. Ve sen, insan, tutmak zorunda Tamam name2 tekabül izlemek dorm2 ile ID2 karşılık gelir. Bu sadece bir karışıklık olur. Bu yüzden, çok daha kolay Bir kaç hafta önce hatırlarsanız, aradı dize isimlere sahip olmaya ve belki de bize bu üç ver. Ve sonra belki var Dize Yurtlar ve sahip Bu üç ya da bir sabit ile, kimlikleri int ve bu üç var. Ama şimdi bile bu hissediyor Biraz özensiz, doğru. Henüz öğrenci ve hakkında konuşuyor Ben gerçekten düşük seviyede konut ediyorum uygulama detayları. Öğrenci bir isim ve yurt ve kimliğidir. Neden sadece bir değişken bildirmek olamaz Öğrenci denir ve s diyoruz. Ve ben başka bir öğrenciyi istiyorsanız, neden sadece t demiyorlar. Ya ben bir sürü istiyorsanız Öğrencilerin, neden sadece yok Ben bütün bir sınıf var demek Öğrenciler ve üçü var. Başka bir deyişle, neden gelemiyorum denilen benim kendi veri türü, ile Öğrenci içinde olan bir Bir isim, bir kimliği bir yurt olduğunu, Diğer alanlarda herhangi bir sayıdır. Ve seni çıkıyor tam olarak bunu yapabilirsiniz. Yani C yapı olarak adlandırılan bu özellik vardır. Bu bir dil özelliği olduğunu Bize tam olarak bunu yapmak için izin verir. Ben devam edeceğim ve structs.h açmak biz görmek nereye gidiyoruz Bir öğrencinin tanımı aşağıdaki. Bu çıkıyor - ve bu bile var bir kimlik kapsayan bir daha basit az önce. Eğer ile gelmek isterseniz Ev yapımı veri türü, ve int ek ve char ve , mevcut ve tüm bu diğerlerini yüzer kelimenin tam anlamıyla bunu yapabilirsiniz typedef struct yazma, sonra bazı kaşlı, Hangi içinde size İstediğiniz değişkenleri listelemek Bu yeni özel verileri ile ilişkilendirmek Bir isim ve bir yatakhane gibi yazın ve daha sonra kaşlı ayraçlar sonra Yeni veri türü için bir ad verin. Yani, örneğin, öğrenci. Ve şimdi ne bu konuda güzel olduğunu Biz gelen kod bakarsanız, İlk kongre, Tüm bu koymak için Bir dosya diye bir şey nokta h, biz değil bir başlık dosyası, Çok fazla kendimizi kullanmaya başladı. Ama biz başlatmak için gidiyoruz Şimdi biraz kullanarak. Ve biz bu ile neler yapabileceğinizi, sonuçta, bu kod birkaç satırlık tam beyan edilir veri türü, bir öğrenci. Ve şimdi bunu kullanalım. Ben şimdi gitmek için gidiyorum Bir dosya structs1.c çağırdı. Ve en bir göz atalım Burada birkaç özellikleri. Yani buraya şeyler Çoğunlukla tanıdık ve yaparız ne değildir geri gelmek sadece bir an tanıdık. Bu tabii benim kendi de dahil olmak üzere yanı sıra yeni başlık dosyası, Pset 3 hariç olmak üzere, hatırlama, biz helpers.h var. Yani #include helpers.h çağırmak olabilir. Neden olsa tırnak kullanıyorum yerine açılı parantez içinde? Ne zaman aralarında seçmeliyim? Neredeyse her zaman görünüyor açılı parantez kullanmak için. Ve sonra, bir bütün aniden üzerinde çizgi altı Ben çift tırnak kullanıyorum. Neden olabilir? Evet? HEDEF KİTLE: [duyulamaz] DAVID J. MALAN: Yani, ne gerçek bir değil mi? HEDEF KİTLE: Bu senin IDE var. DAVID J. MALAN: Evet, O benim gerçek IDE içinde. Ve, çünkü en IDE üzerinde durmak vermeyelim sadece ben kullanıyorum bir araçtır. Bu benim akımı var Dizin, özellikle. Yani structs.h kendi dosya IDE yüklü değil, işletim sisteminin kendisi, daha ziyade benim geçerli dizinde var. Yani kongre isterseniz olduğunu Kendi başlık dosyası dahil, Sadece çift tırnak kullanın. Biz bu şeyi diyorsunuz ne hat 8, genel anlamda? Bu nedir? #define şey. Bu hak, sabitleri temsil? Eğer olmasını istiyorsanız Programda, değer Eğer bütün kullanmanızı kez demet, bu kadar o dışarı faktör kongre iyi karma sembolü ile, beyan Sonuç olarak, kongre tarafından, daha sonra, tanımlamak o değil ama word-- harfe kesinlikle gerekli fakat İnsan kongre var sabitleri yararlanmak için Onlar dışarı atlamak böylece Eğer boşluk visually-- at ve sonra istediğiniz değeri olduğu Bu sabitin adını eşdeğer. Hiçbir noktalı virgül, ama sadece sen Oradaki desen izleyin. Peki bu gerçek kod yapıyor duyuyorum. Yani bir göz atalım Burada ana program. Hat 12 çünkü ben structs.h dahil ettik, Ben şimdi de sihirli var benim bertaraf yeni bir veri türü. Ben sadece, int erişiminiz yok ve kömür ve şamandıra ve dize, ve mavi ve diğerleri. Şimdi erişimi Bir öğrenci veri türü. Hat 12, ben ikisini birleştiren ediyorum Yani , bir özel veri tipi ve iki ideas-- bir dizi kullanarak. Ve böylece bu programda eğer Aslında desteklemek istiyorum Üç farklı öğrenciler Benim programda, ben Bana bir değişken vermek demek sadece edebilirsiniz her biri adlandırılan öğrencilerin, tip öğrencileri, hangi benim özel veri türüdür. Ve özellikle, bana ver Benim dizide olanların üç. Yani şimdi bu programda ne iş yapıyorsun? İşte sadece bir döngü iterating için var çünkü o, 0 ila 3 arasında Öğrencilerin değeri nedir. Ben sadece kullanıcıya sorulmadan ediyorum Bana öğrencinin ismini verin. Sonra hattı 17, biz çoğunlukla tanıdık bir çizgi var. Bizim eski dostumuz var Sağdaki getString. Sözdizimi ve hangi parça , görünüşe göre yeni Eğer daha önce C programlanmış hiç eğer, ve yapılar kullanılmış hiç? Evet? HEDEF KİTLE: .name. DAVID J. MALAN: .name. Ama bu, bir sıçrama çok fazla değil Şimdi öğrenciler i paranteze çünkü Size i-inci öğrenci verir. Ve dalmak istiyorsanız bu yapının içinde Eğer sadece tek bir süre kullanmak ve Daha sonra iç değişkenin adı, ya da iç mülkiyet Eğer erişmek istiyorum. Benzer sonra, ben o zaman soracak eğer Kullanıcı, bana öğrencinin yurt verin Eğer benzer o saklayabilirsiniz içeride yurt değişkeni string O öğrenci yapısının. Ve şimdi işler biraz fantezi olsun. Ve bu bakmaya gidiyor belki bir sürü çok yakında. Ama Pset bu çok daha görürsünüz 4, bu yüzden şimdi ona sadece bakışta gelelim. Bu hat 23 yoluyla çıkıyor 38, ben belki yapıyorum ne düşünüyorsunuz? Ben yorum kaldırdık Bugün, ancak versiyonu için online kod referans Tüm yorumları vardır. Ben yapıyor olması ne görünüyor? HEDEF KİTLE: Tüm dosyayı kaydetme kullanıcının girdiği bilgiler. DAVID J. MALAN: Evet, tam olarak bu yeni bir yoludur biz iki görüyorsanız o, C bir diğer özelliği, bu sayede kendim dosyaları oluşturabilirsiniz. Bugüne kadar hemen hemen her program yazdım seni vatansız olduğunu. En kısa sürede çalışmakta bitti gibi o kadar. Bellek veya onun hatırlama var. Kaydedilen bir dosya var. Ama istiyorsun eğer sahip girişi kaydetmek Bir oyun veya program gibi oldu, Bu gibi biz bunu yapabilirsiniz çıkıyor. Ve bunu daha göreceksiniz Pset 4 ve Bölüm. Ama bu hat 23 esasen students.csv adlı bir dosya oluşturur. Ve daha önce bu görmüş olabilir. Daha önce CS okudu hiç olsanız bile, CSV virgülle ayrılmış değişkenler olduğunu. Bu çok kötü bir adam gibi Bir Excel dosyasının sürümü, bu da açılabilir demektir Excel'de ve Apple Sayılarla, ve satır ve sütun vardır. Ama bu özel bir değil Microsoft veya Apple'ın gibi biçimi. Bu ayıran sadece virgül var Biz bir an görürsünüz değerler. Ve sadece bir tahmin almak. Çok satırında 23 yılında sonunda, benim ikinci argüman olarak adlandırılan bu yeni işlev f dosya açıkken açık w. W Ne göstermek olabilir? Evet? HEDEF KİTLE: Bu dosyaya yazabilirsiniz? DAVID J. MALAN: Bu sağlar Dosyaya yazma. Yani varyantları bir çift var biz burada takabilirsiniz. Ama sadece okumak istiyorsanız Dosya, o bakmak olduğunu ve belleğe sizi okumak Sadece alıntı Alıntı sonu "r" kullanın. Eğer yazmak isterseniz Dosya, "w" unquote alıntı kullanın. Orada da eklemek var ve Diğer şeylerin bir çift Varolan dosyaları değiştirmek istiyorum. Şimdi bu görmeye devam edeceğiz 24 satır bir şey, o zaman biz geri geleceğiz. NULL, o çıkıyor, bir Özel bir değer olduğunu belirli işlevleri tarafından iade edilebilir bir şey wrong-- gitti eğer Dosya yoksa, bellek tükendi ettik, Diğer hatalar veya bir demet. Ama şimdi, hadi bu varsayalım Sadece konvansiyonel hata denetleme olduğunu. İşte hat 26, ben yineleme ediyorum 0'dan tüm öğrenciler üzerinde 3. Ve bu tür tür Yeni işlev, fprintf, ama sadece bir tahmin almak. Printf sadece baskı ise biçimlendirilmiş bir dize fprintf muhtemelen ne anlama geliyor? HEDEF KİTLE: Dosyaya yazdırın. DAVID J. MALAN: Yazdır Bir dosyaya formatlanmış dize. Bu ek ne var f aracı dosyasıdır. Ve yeni ilk argüman olmak zorunda Dosyanızı temsil eden değişken. Sonra biz sadece bir formata sahip sadece printf gibi dize. Ve hatta bu olsa sözdizimi, bu sadece, yeni Öğrencinin adına fiş demektir, Öğrenci yurt plug-in ve daha sonra fclose ile dosyayı kapatın. Sonra, bu yeni lastly-- ve biz bu geri geleceğiz Ben azat ediyorum long-- önce nedenlerle Öğrenci orada kadar yukarıda oldu. Ama biz geri geleceğiz edilene long-- önce çünkü GetString kadar bir bulunuyor Aslında başlık altında çalışan. Yani burada hızlı bir göz atalım. Benim dizinde ls yazarsanız, I do not fark , students.csv adında bir dosya var Sadece orada değil, yok. Ben şimdi bu programı derlemek Yani, , yapılar-1 yapın. / yapılar-1, ve ben devam edin ve yazın gidiyorum Yale'de Berkeley yaşayan Andi. Biz Rob zorunda gidiyoruz kim Bugünlerde Thayer yaşıyor. Ve en nerede ile gelip izin , sanırım, Maria, Mather ise eğer doğru hatırladım. Yani hiçbir şey olmuyor. Ama şimdi ls yazarsanız, students.csv vardır. En önde ve açık students.csv gidelim. Bu yine çok olduğunu Hafif dosya biçimi. Ama ben sadece bir kongre kabul ettik ben burada iki satır ve sütunları vardır. İlk sütun İnsanların ilk isimler. İkinci sütun öğrencinin ise yurt, veya üniversite ya da ev veya etajer. Ve şimdi ben bu biriktirdim kalıcı bir dosya. Yani tüm bu ilginç değil. Ama bu sadece bir atlama taşı artık bilgi devam edememek kalıcı. Peki şimdi ne daha biz görelim Bu ve diğer özellikleri ile yapmak. Ama önce, herhangi bir sorunuz var mı? O çok oldu, ve bu kadar hızlı oldu. Ama bir sürü görürsünüz Pset 4 daha, hem de. Evet? HEDEF KİTLE: bir yolu var mı Bu dosyaya isim ekleyerek devam edecek mi? DAVID J. MALAN: İyi bir soru. Devam etmek için bir yolu var mı Bu dosyaya isim ekleyerek? Evet. Ve aslında, sen sonuna eğer yukarı, dosyayı yeniden açarak Eğer teklifi kullanmak istiyorsunuz unquote "a" Append için, hangi sadece yeni bir satır eklemek istiyorum, bir Yeni hat tekrar ve tekrar, kesinlikle. İyi soru. Diğer sorular? Evet? HEDEF KİTLE: kaçtın ise Program yine şimdi, o isimler eklemeye devam ediyorum dosya veya yeni bir dosya açmak istiyorum? DAVID J. MALAN: Ah, iyi bir soru. Yine doğru programı çalıştırdıysanız Şimdi, belki de yeni isimler yazdığınız, o dosyaya eklemek istiyorum ya da dosyanın üzerine? İkincisi, ben olduğum için Ekleme modunu kullanarak değil. Ve ben sadece körü körüne olduğum için yazma dosyasını açarken, Sadece dosyanın üzerine yazmak için gidiyor. Yani gerçekten eklemek yapmanız gerekir, Ben aslında uzun vadeli olmasını istiyorsanız veri tabanı. Şimdi CSV bile, açıkçası, yararlıdır için gibi iseniz writing-- ve sonunda bu göreceğiz Daha sonra ne zaman yarıyılda diğer amaçlar için CSV'leri kullanımı. Eğer tüm insanlar saklamak istiyorsanız Kim, kimi olay için kayıt yaptırdı ya da öğrenci için kaydoldum grup, veya böyle bir şey, Bu tür bir veri saklamak biçimi süper uygundur. Kelimenin tam anlamıyla Çünkü ben eğer Bu dosyayı indirmek için vardı. Ben double-- olabilir ve en doğrusu bu deneyelim Ben burada Excel veya Numaraları varsa. Doğru tıklama gidiyorum ya da benim dosyayı kontrol tıklayın. Whoops. Sağ tıklayın veya dosyamı kontrolü tıklatın. Hadi, benim fare işbirliği değil. Ben gidiyorum Download-- işte tüm dosyaları indirmek Sadece bu yüzden bu bir yakalayabilir. Ve bu işler bakalım students.csv-- ilk kez Ben aktif ettik. Şimdi onlar benim kişileri görmek istiyorum. Şimdi, ben kayıt olmanız gerekmektedir. O CSV'leri kullanmanın ne kadar kolay olduğunu görmek? Evet, bunu güncel tutmak. Tamam, şimdi biz sınıf için hazırız. Oh, tamam, yeni ne var? Tamam, yakındır. O büyülü oldu. Tamam, şimdi biz güncellemeniz gerekir. Ve şimdi, ne unuttum Ben başlangıçta açılan dosya, ama orada A- ne gitmek. Tamam, şimdi biz bir Excel dosyası var. Teşekkür ederim. Tamam, ben yaptım yani ne kolay kısmıydı. Tabii ki önceden yüklenmiş olabilir Excel veya Sayılar, ya da her neyse programı. Ama bu, çünkü güzel şimdi işleyebilirsiniz standart bir formatta veri. Bu yüzden şimdi diyelim bağlam Biz kaldığı yerden geçmek başlatmak için son kez Eğitim tekerlekleri çıkarmak. Ama önce, değil mi Bu erken öğle bakın Yine Ateş burada oluyor ve New Haven Cambridge, Sitar Buz. Asap CS50s web sitesinde kaydol CS50 öğrenci ve personel katılmak için. Bu yüzden eğitim jantlar aldı Pazartesi günü kapalı olarak follows-- Dize ilan edildi Bir süre CS50s kütüphanesi. O verdiğinden Ve bu güzel Bize varlık olarak değişkenlere hakkında konuşmak tam kelime ve cümleler ve daha fazlası. Ama yok dize çıkıyor. Bu sadece bir eş anlamlısı, ya da diğer adıdır, Biz bir şey için oluşturduğunuz o aslında biraz daha fazla Teknik * bir char çağırdı. Ve gerçekten biz bir örnek gördüm Pazartesi günü bir program biz beklendiği gibi davranmasına oldukça etmedi. Bu karşılaştırma-0, dosya oldu. Ve eğer, o karşılaştırmak-0 hatırlama Ben Pazartesi günkü programını yeniden derleyin ve run-0 karşılaştırmak ve annemi yazın Yine küçük harflerle küçük ve anne. Program I ısrar farklı şeyler yazın Hatta anne, tüm gerçi küçük, görsel aynıdır. Yani kısa cevap neydi Bilgisayar düşünüyor niçin Bu iki dizeleri farklı? Evet? HEDEF KİTLE: [duyulamaz] DAVID J. MALAN: Doğru. Yani, anne, ilk kez Ben ediliyor, o yazdığınız Bilgisayarımın yıllarda yerde saklanan Bellek ama farklı bir konumda İkinci kez daha ben anne yazın. Şimdi kesinlikle optimize edilebilir. Bilgisayar akıllı olabilir ve hey, bu iki dizeleri gerçekleştirmek onlar aynılar. Bana yedekli saklayın vermeyelim. Ama bilgisayarlar bunu yapma optimizasyon onlara anlatmak edilmiştir. Yani, varsayılan olarak, onlar Sadece sonuna kadar gidiyor bellekte iki farklı yerde. Ve böylece, ne zaman daha net olması için biz iki dizeleri karşılaştırıldığında İlk denirdi s, İkinci çağrıldı t, özellikle ben ne hat 13 burada karşılaştırarak? Evet. HEDEF KİTLE: Bu bellekte yer Değişken işaret edeceği. DAVID J. MALAN: Kesinlikle, ben belleğinde yer karşılaştırırken o değişkenlerin işaret etti. Yani özellikle eğer anne oldu byte numarası 1 ve 2 ve 3, ve 4-- çünkü ters eğik çizgi hatırlıyorum 0 sonunda tüm yol olması gerekiyor. Ve anne, m-o-m diğer örneği, adresi 10, 11, 12 ve 13 idi. Ben 1 karşılaştırarak oldu, o adres, belleğinde bu konumu, 10'a karşı, ki bu Açıkçası değil aynı. 1 10 değildir. Yani bu ki güzel oldukça basittir. Ama o kadar sürece sorunlu Biz dizeleri karşılaştırmak için görünmüyor olabilir. Yani fundamentally-- ve bu düşük seviyede, Eğer uygulamak istedim Bir program karşılaştırmak iki ayrı kelime olduğunu Kullanıcı, kalite yazdığınız etti onlar için kömürü sıraya do Sadece genel anlamda karakter, ne görünüşe yapmak gerekiyor? Sadece yeterli değil Bu iki adreslerine bak. Ne yapmamız gerekiyor? Evet? HEDEF KİTLE: yineleme string [duyulamaz]. DAVID J. MALAN: Evet, haydi dize üzerinden yineleme. En döngü, bir süre döngü için bir kullanma izin veya Kendinizi en rahat konum ne olursa olsun. Ve biz bir yerde iki dizeleri var eğer bellekte, birbirlerinin yıllardan bakalım İlk karakter, sonra her saniye var karakter, daha sonra üçüncü ve dördüncü, ve beşinci biz girene kadar Ne özel Sentinel değeri var mı? HEDEF KİTLE: [duyulamaz] DAVID J. MALAN: Evet, ters eğik çizgi Sıfır ya dizesinde hangi noktada Biz işte bu karar verebilirsiniz. Biz her karakter eşleşti mı? Değilse, return false. Eğer öyleyse, doğru dönmek. Ve böylece bu ne bu sürümü tam olarak Programın karşılaştırmak-1.c yapar. Bu aynıdır ne ben oldum hariç Pazartesi baktı gerçi kelimesinin string-- kurtulmak kazanılmış tüm fonksiyonel impact-- sahip Ben şimdi yapıyorum kaldırıyor Bazı görsel eğitim jantlar, ama açıkça görmek için s ve t adresleri. Ve bu ne yıldızı Yıldız işareti temsil eder, Bir adres normalde bilinen olduğunu daha teknik bir işaretçi olarak. Yani ben s bildirirken hat 9 ve char * s demek, Bu bana bir dize vermek anlamına gelmez. Bu bana olan bir değişken vermek anlamına gelir Hayatta amaç bir adres saklamaktır. Ben koymak üzereyim çünkü içine bir dize adresi. Gerçekten de, GetString olmak net bir dize dönmez. Bu Annemi dönmez eğik sıfır, per se olarak. Özellikle ne getString yok ve hassas dönmek? HEDEF KİTLE: [duyulamaz] DAVID J. MALAN: Bir adres, İlk karakterin adresi Bazı dize o aldı. Ve şimdi biz görüyoruz Yine bir özel anahtar kelime. Ve ben bu daha önce değindiğim. Bu iyi bir kongre olacak Şimdi tekrar görürsünüz. Ben emin olmak için kontrol ediyorum s boş değildir ve t boş değil. Gerçekten kız kardeşimle dayalı olduğundan Hızlı Mansiyon önce, GetString değil dönerse ne anlama geldiğini Bir adres ama yine, N-U-L-L, Bazı özel değeri var mı? HEDEF KİTLE: Hata. DAVID J. MALAN: Bu bir hata değil. Bir şeyler yanlış gitti. Peki tipik Özellikle, meydana gelebilecek strings-- hangi olabilir advance-- bilinmeyen uzunluğunun belki bilgisayarların bellek yetersiz, belki Böyle a yazdığınız Uzun bir kelime veya cümle ya da büyük bir deneme yapıştırılan Sadece yeterli bellek var. Ve böylece GetString geri dönemezsiniz her şeyi adresi, bu yüzden sadece bir şey verir. Ve bu bir hata oldu diyor Özel NULL değeri döndürerek. Tabiri caizse, sıfır adresi. Şimdi çıkıyor C ile geliyor Bu yineleme yapar işlevi. Biz bu uygulamak zorunda değilsiniz döngü veya while döngüsüne kendimiz için. Biz işlevini kullanabilirsiniz, özlü denilen kimin, comp karıştırın, veya dize karşılaştırmak Hayatta amaç tam olarak yapmaktır. Bunu iki işaretçiler, iki adres vermek, ve bu adreslere gidecek ve daha sonra da mektubu karşılaştırmak kalite harfi için harf, Gerçek nedir yalnızca durdurma? Sezgisel comp karıştırın ne zaman Sadece net ilerlerken olmak durdurmak? O bir ters eğik çizgi 0 çarptığında ya Dize, bu noktada o karar verebilirsiniz Her şey, uyumlu olan veya Bir tutarsızlık olmuştur? Şimdi bu çalışma ve eğer öyleyse, denemek Bizim küçük harf oyunu, bu yüzden karşılaştırmak-1, ./compare-1 yapmak ve küçük harflerle iki kere annemi yazın. Şimdi aynı şey. Ve ben tekrar yapmak durumunda küçük ve belki büyük. Şimdi gerçekten ayırt üst ve küçük arasındadır. Yani bütün o sert veya büyülü, ama şimdi açıklıyor Ne başlık altında oluyor. Bu yüzden daha fazla biz özü ne Dersin bu tür? Yani bu bir göz atalım. Devam edin ve bir yazmak için gidiyorum Hızlı programı burada kopya 0 çağırdı. Ve şimdi önde aslında gidelim , kopyasını-0 ile bu-- yapalım Burada ne var bir göz atın. Ben ilk kullanıcı anlatmak, bir şey söyle. Sonra bir dize almak ve ben s onu saklanır. S eşitse Sonra kontrol NULL eşittir, sadece 1 döndürür. Yani bu sadece standart hata denetimi olduğunu. Ilginç bir şey oldu. Ve aslında, biz hata kurtulmak eğer kontrol, bu hafta 1 kod gibi görünüyor o anda. Ama olsun başladım Bu konuda biraz daha iyi. Şimdi hattı 16, bir hafta önce, belki Hatta bir kaç gün veya dakika önce, Eğer çizgi 16 diyebilirsiniz Değişken olarak adlandırılan t oluşturma ve kopyalama içine s. Ve bu mükemmel var: Makul paket. Ama şimdi daha hassas olması. 16 hattı neler oluyor? Ne kopyalanan oluyor sağa sola doğru? Evet? HEDEF KİTLE: t s adresini alıyor mu? DAVID J. MALAN: Kesinlikle, t s adresini oluyor. Ben gidersem Yani, şimdi açık olmak geri o erken örnek ve ben yazdığınız şeyi çizin. Ve ben yazdıklarınızla açmayız burada s, ve burada Ben bir yere yazdığınız ne hafıza, anne ve ardından ters eğik çizgi Benim için eklenen oluyor 0. Ne ben burada saklanan, hatırlama Bu, konum 1, 2, 3, 4, olduğu Bu s şu anda ne olduğunu. Hat 16 Yani, eğer beni vermek demek Başka bir değişken olarak adlandırılan t ve mağaza s değerinde de ne Burada saklanan gets anne olmaz ama yerine sadece 1 numara. Bu programda ileriyi Yani eğer Şimdi, ne olacak ki? Yani orada olduğunu fark Bu fonksiyon olabilir Sezar için bir süre önce bu kullanmışlardır, veya Vigenere, ya da belki de değil. Ben değilim, benim printf ile iddia Kopya t yararlanmak için gidiyor. İlk satır 19, hızlı aklı içinde , t strlen kontrolleri uzunluğunu kontrol edebilirsiniz. Çünkü ben .... istemiyorum bir şey yararlanmak için çalışın eğer orada hiçbir dize var. Kullanıcı sadece Enter vurursanız, yararlanmak için bir şey yok. Yani çizgi 21 yapmak istemiyorum. Yani line 21 birikiminden hangi görünüşte mektup, t? HEDEF KİTLE: m? DAVID J. MALAN: görünüyor gibi kopyalama hangi biri? HEDEF KİTLE: m. DAVID J. MALAN: Ah, m. Tamam, ilk m yüzden, Ben olduğumu haber çünkü , işlev toupper geçen hangi Bunu hiç görmedim eğer var sadece bir işlev girdi olarak yararlanmak. t dirseği sıfır vermek anlamına gelir Bana t sıfır karakteri. Ve böylece bu nasıl yapar resim değişikliği, açık olması? Ne yeniden yazılamaz veya değiştirilmiş almak gerekiyor s saygı ve t ve anne ile Ters eğik çizgi sıfır. HEDEF KİTLE: [duyulamaz] DAVID J. MALAN: Evet, bu yüzden bu bir burada sadece bu-- düzeltmek aşağıdaki amaçlara değişmiş ihtiyacı sermaye m değiştirildi almak gerekiyor. Ama şimdi, daha sonra bakmak Program, ben çıktısını eğer Burada temiz olarak s ve t, ne izle s ve t yazdırmak olacağını. Yani kopya 0, ./copy-0 olun. Beni go ahead ve yazın bakalım Bütün küçük harflerle anne olarak. Uyarı hem orijinal ve Kopya harfle oylandı. Neden? Eh, s ve t her ikisi de işaret ediyor, eğer sen, hafıza aynı yığın. Ve açıkçası, bu oluyor Gerçekten gerçeğini uninteresting-- Burada adres sıfır kullandığınızı. Yani, ben gerçekten umurumda değil nerede şeyler bellekte olduğunu. Üzgünüm biraz fazla siliyorum. Ama ben gerçekten umurumda değil şeyler hafızada olduğu. Ve böylece, gerçekten ne programcılar düşünmek eğilimindedir hakkında konuşmak ne zaman olduğunu bir adres ya da bir işaretçi, bellekte olduğu kimin umurunda. En eğer umrumda değil Bayt bir ya da bir milyar. Ben sadece bu umurumda Değişken etkili bir şekilde bir belleğin o öbek işaret. Ve böylece, bundan böyle, yerine kelime oyunu keyfi bellek adresleri üzerinden, diyelim Sadece işaretçileri çizmek başlar oklar olarak işaretçiler olarak. Yani t gerçekten ne s Bu programa göre, Ben t oluşturulan nasıl nedeniyle Sadece iki ayrı değişken var bellek aynı yığın işaret. Nerede olduklarını Ve biz umurumda değil. Bu yüzden soyut uzakta o ayrıntı olabilir. Peki nasıl bu düzeltebilirim? Ben kopya bir sürümünü yazmak istiyorsanız Program aslında kopya dize ve tek istifade kopyalama, sadece sezgisel, Ne var bir olmak Bizim çözüm bileşen? HEDEF KİTLE: [duyulamaz] DAVID J. MALAN: Bir Neyi mı ihtiyacınız var? HEDEF KİTLE: Hafıza Chunk. DAVID J. MALAN: We need bellek başka öbek, değil mi? Biz bilmiyoruz nasıl mutlaka, ama bunu. Ama ben biraz bu yüzden gerçekleşmesi için bu ihtiyaç Bu küçük harf orijinal anne bellek bu ekstra öbek biter. Ve sonra kopya değiştirdiğinizde, ben Burada bu kopyayı değiştirmek istemiyorum. Bunun yerine sadece bunu değiştirmek istiyorum Kopya böylece orijinal değişmez. Yani, biz bunu nasıl görelim. Kopyalama-1, zaten yorumun soyulduğunu, ancak çevrimiçi yorumladı edilir. Biz bunun yerine following-- bu do çizgiler aynıdır, bana bir dize almak ve s diyoruz. Ama şimdi en en birine bakalım karmaşık ama karmaşıklığı son süre, satır 16 tam yapar. Ile rahat Yani resim biz sadece drew-- Bana yeni bir bellek yığın vermek içine her şeyi kopyalayın en koda o çevirmek nasıl görelim. Yani çizgi 16, sol tarafta, char * t buraya bana bu kutuyu veriyor. Yani öyle hepsi bu. Sağ tarafta, m alloc veya malloc, süper fantezi bellek ayırma, bir Sadece demenin bir yolu şifreli Bana belleğin bir öbek verir. Ne kadar hafıza ihtiyacınız var? Peki, büyük bir ifadenin türüdür. Ama burada ne diyor bakalım. Yani bu, elbette, vermek Bana s dize uzunluğu. Yani, anne ne olmalıdır? Yani sadece üç, değil mi? Annem üç karakterdir. Sen sayılmaz Ters eğik çizgi sıfır seni bu kadar bir dize uzunluğu hakkında konuşmak Aslında insan görünür harfler. Yani anne, bu nedenle bu 3 bana veriyor. Ama şimdi 1 ekleyerek kulüpler, bir dakika bekleyin. Neden ben aslında istiyorsun 4 bayt ve sadece 3 tahsis? Evet? HEDEF KİTLE: Sentinel değeri için? DAVID J. MALAN: Kesinlikle, Bu Nöbetçi değeri. Ters eğik çizgi sıfır için, Ben 4 bayt toplam gerekir. Yani uzunluk ihtiyacım dize artı 1. Ve sonra sadece iyi measure-- için Hatta bu sistemde de, Her zaman diyorum 1-- olacak char büyüklüğüne göre bu çarpın. Sizeof olduğunu çıkıyor C bir operatör olduğunu Sadece seni söyler bu bayt sayısı Belirli bir veri türü için gerekli. Bu diziler için çalışmıyor, tipik bazen öyle. Ancak genel durumda, hayır. Birçok bayt nasıl Ama bana anlatacak çıkıyor char, her zaman 1'dir. Yani bu 1 ile çarpılarak gibidir. Kod Yani süper şifreli görünümlü hattı. Ama yaptığı tüm verir ise Bana bellek yığın. Ama kopyalama gibi görünüyor Bu belleğe şey var mı? Henüz değil. Ve böylece on line 22 ben ne ve 23, 24, 25, kuyu, ben sadece bunu. Ve bu tür bir Şimdi eski okul şeyler. Bu Pset 2, gibi Sadece bir şeyler taşıyoruz etrafında bellekte, ya da daha doğrusu dizeleri. Yani 0'dan yineleme yaşıyorum Dize s uzunluğu. Ve ben-inci karakteri taklit ediyorum t i-inci bir karakter haline s. Ve ben, çünkü programcı, yapılan tam olarak birçok bayt tahsis emin İhtiyacım olduğu gibi, mükemmel Bire bir ilişki. Ve ben anneni kopya yenisine küçük harfe. Ve sonra son olarak, ben bu çizgiyi yok. Ve böylece etkisi sadece Burada bu t yararlanmak. Yani bir sürü absorbe, ancak Sadece düşünün Gerçekten ne oluyor başlık altında üzerinde Sadece bu hareket ediyor Tüm bu, etrafında bayt Bu sorunun çözümü için gerekli olan Sadece bize belleğin bu yığın vermek. Şimdi riski ezici, bana göstereyim Neredeyse bu bir başka örnek, Bu biri hariç, özdeş kod satırı. Yani bu korsan versiyonu Bu programın, eğer sen. Ama sadece damıtmak edelim o ne oluyor içine. Satır 24 bu t olarak kullanılan dirsek i s i dirseğini alır. Şimdi, ben bu değişen ediyorum daha şifreli yıldız t artı 1 yıldız s artı 1 eşittir. Peki ne oluyor ve neden Biz bir yıldız karakteri var mı? Biz daha önce yıldızı gördüm ve o farklı Burada kullanılan ediliyor. Biz daha önce şimdi görüyorum, char * gördüm Bir başında yıldız ve bu sorun değil. O biz çıkıyor çünkü tür sadece çıkarabiliriz Bu birinci ilkeler neler oluyor. Dolayısıyla, sadece temiz olması için, s nedir? Geçen hafta, bir dize oldu. Bu artık yeterli değildir. Özellikle, s nedir? HEDEF KİTLE: [duyulamaz] DAVID J. MALAN: Bu bir işaretçi var. Bu adresi var İlk karakter biz yazdınız. Tamam, t nedir? HEDEF KİTLE: [duyulamaz] DAVID J. MALAN: ilk byte adresi t, bellek o yığın tahsis. Bu yüzden çıkıyor zaman dize kadar üzerinde 0'dan yineleme length-- her şeyden önce, i Çünkü 0, başlar loop şey için bu eski okul. Yani sadece basitlik için, diyelim kod bu ilk satırı varsayalım Gerçekten sadece bu, doğru. Ben sıfır ekleyerek, sıfır ise şey muhtemelen bir etkiye sahip gitmiyor. Peki bu söz ne? Bu yıldızın çıkıyor Bu bağlamda kullanıcı dereference olduğunu sadece operatör, gitmek söylemenin süslü yolu aşağıdaki adrese. Yani s eğer ilk adresi bellek bu öbekte karakter, * s araçlar oraya gitmek. Ve biz boğuldum çünkü Bu şekilde resmi, Eğer kabul edebilirsiniz zihinsel modeli takip. Bu s ve * s * s derseniz tür oluklar ve merdivenleri gibi, Eğer çocukluk oyun hatırlamıyorsam, O ok takip ve gitmek gibi adrese. * t aynı şeydir. Yani burada başlar, kendi öbek gidin. Ben sadece çekemez Bu ekran bu şekilde. * Buraya gitmek anlamına gelir. Ve sonra, döngü sadece bir Burada bu karakter hareket söyleyerek Burada bu karakteri taşımak, Burada bu karakter taşıyın. Ama bunu nasıl incrementation yapmalıyım? Ben sadece silinen neyi geri almak gerekir. Bu genellikle denir ne işaretçi aritmetiği, hangi adresleri ile matematik demektir. Eğer bu döngü için, Ben, i artırılmıyor devam ve s bir adres ve t bir olduğu adres, sadece 1 ekleyerek devam edersen, bu sadece ilerlemeye devam anlamına gelir, ve ileriye ve hafızada ileri. Bu Oxford Caddesi'nden gibi, CS bina üzerinde sokak. CS binaları 33 Oxford Street'teki olduğunu. Yani eğer 33 yapmak vardı Oxford Street artı 1, Bu 34 Oxford getiriyor Sokak, daha sonra 35 Oxford Street, Daha sonra 36 Oxford Street, ne olursa olsun o Binalar aslında - eğer varsa. Ve böylece, biz yapıyoruz hepsi Burada işaretçi aritmetiği ile. Yani süper gizli yolu kendimizi ifade. Ama bütün bu oluyor başlık altında sadece bu adresleri takip ediyor, Bir harita aşağıdaki gibi eğer sen, ya da bu gibi okları Aşağıdaki Biz ekranda boğuldum. Tamam, çok sindirmek için. Sözdizimi üzerinde herhangi bir soru, kavramlar, işaretçiler, Malloc veya benzerlerini içerir. Evet, buraya ilk. HEDEF KİTLE: Peki o * t * t toupper eşittir diyor yararlanmak için gidiş olduğunu Tüm harfler veya sadece-- DAVID J. MALAN: Ah, Gerçekten iyi bir soru. Burada bu hat Yani, 31, Bu yararlanmak için gidiyor İlk harf veya harfleri. Yani giderek o cevap vereyim tekrar ilk ilkelere. Ve burada ilk prensipler demek Sadece temel tanımlar gitmek ilgili ne. Yani toupper bir işlev var Bu bir char aktifleştirmektedir. Bu kadar. * t birinci-- gitmek demektir t adrese gidin. Yani, resimde, bu öbek ise bellek Biz malloc ile ayrılmış, ve bu t * t buraya gitmek anlamına gelir olduğunu. Bu arada, geçen ediyoruz Bu değer, küçük m ToUpper için geri alıyoruz Sermaye M, nereye koyuyoruz? O aynı konumda koyuyorlar. Ve böylece o bu mantık tarafından temel tanımlar sadece var birinci harfini büyük harf Eğer i veya a ile yineleme sürece döngü veya bir while döngüsü için, bu gitmiyor Bunu sormak daha fazla bir şey yapmak. İyi soru. Evet? HEDEF KİTLE: Neden kullandınız yöntemi yerine KQUEUE dizi? DAVID J. MALAN: Ah, iyi bir soru. Neden dereference kullanmak istiyorsunuz yerine dizi yöntemi yöntemi? Özel bir nedeni yok, dürüst olmak gerekirse. Ve aslında, bunun için Örneğin tür, sağ, Ben sadece yapım savunarak ediyorum daha karmaşık bir program Daha fazla gözler, üzerinde cam vardır insanlar kontrol Bu, süper gizemli görünüyor çünkü ancak Hatta aynı şeyi yapıyor olsa. Ve böylece, açıkçası, bu bir gereksiz görsel karmaşık bir çözümdür soruna. O, yine de iyi bir tasarım Beş tasarımı için beş üzerinden, o parantez içinde olsun notasyonu veya işaretçi gösterimde. Aldığımız zaman özellikle ama- Daha sonra ders Pset 5 biz bu sözlüğü uygulamak o zaman Ben times-- bir çift söz ettik biz aslında umurumda edeceğiz düşük seviye bellek adresleri biz gerçekten anlıyorum nasıl gidiyor. Ama, şimdi, bu çıkıyor Kod burada köşeli parantez hattı Gerçekten yok. Onlar diyorlar sözdizimsel şeker, hangi demenin bir esrarlı serin bir yoludur derleyici köşeli parantezler olmak dönüştürür matematiksel ifadesi. Yani bir insan kongre var Sadece yazmak mümkün Bu derece kullanıcı dostu parantez. Ama ne derleyici, clang, Gerçekten her zaman yapıyor satır vurgulanan ne yazmak 24 başlık altında gerçekten var Bu dönüştürülmesi. Bir insan olarak sadece daha zevkli olduğunu okuma ve hat 24 gibi kod yazmak. Ama sonunda o Eğitim tekerlekleri de dökülmek Kişinin kendi konfor güçlendiği zaman. Pekâlâ, o zaman bu hatırlamak En büyük sorunun sıralama oldu Biz koştu. Ve bu bütün yol açtı ne işaretçileri hakkında lanet konuşma, ve adresleri, ve kopyalama şeyler. Biz takıldı çünkü öyleydi Bu aptal, aptal bir konu, bu sayede Ben Lauren ile logically-- uygulamaya Burada demo ve portakal suyu kadar milk-- mükemmel bir şekilde algoritmik doğru işlev iki değişken 'pompalanması amaçlı değerler, ama lanet şey Herhangi bir kalıcı olması, ya da yoktu Benim kod kalıcı etkisi. Ve neden oldu? Özetle, bu yüzden swap uygulanması mantıksal olarak doğru, ama hiçbir etkisi yoktur kendisine geçirilen değişkenlere, Ana için x ve y gibi? Sorunun özü neydi? Evet? HEDEF KİTLE: Değişken yapılan Çünkü geçişte değişken kopyaları fonksiyonu sayesinde. DAVID J. MALAN: Kesinlikle, ne zaman geçmesine Bir işlev değişkenleri veya argümanlar bir işlev, onlar kopya, geçti ki Aradığınız özdeş olsun anlamına gelir x ve y her ikisi için bitlerin paterni, a ve b burada çağırdı. Ve sen her şeyi yapabilir O kopyaları ile istediğiniz ama onlar hayır için gidiyoruz Çağıran fonksiyonu üzerine etkisi. Ve, aslında, bu çekti Ekran, hatırlama resim son kez, bu sayede eğer Gerçekten ne düşünmek eğer hood-- altında oluyor Bu, bilgisayarınızın bellek ve burada aşağı yığınıdır Bellek, ana için kullanılan Bu yığınıdır Bellek, takas için kullanılan ve bu yüzden bile ana vardır iki değişken, x ve y, takas özdeş görünümlü olabilir 1 ve 2 her ikisi de değerleri, ancak tamamen değil belleğin farklı parçalar. Yani biz bu bir çözüm gerekir. Ve açıkçası, şimdi biz bu gibi görünüyor Doğru, bu soruna bir çözüm var. Şimdi yeteneği varsa adresleri yoluyla şeyleri manipüle ve, sıralama oluklar ve merdivenleri stil, bu okları takip edin ve istediğimiz yere gitmek bellekte, biz could not Bu sorunu çözmek Ana geçen takas değil değerler istiyoruz swap, ama sadece sezgisel ne yerine takas geçebileceği? [SESLER interposing] DAVID J. MALAN: Neden sadece yok Doğru, adresler geçmektedir? Neden swap a vermeyin define haritası, eğer sen, Bu içine yönlendirir gerçek değerleri, x ve y. Diyelim takas, aslında değiştirmek Bu orijinal bit yerine sadece bit kopyalarını geçen. Ve böylece, aslında, işte budur gidiş çözüm olarak. Bu sürüm burada açıkça kötü ve kusurlu. Ve şimdi, ilk bakışta, sadece görünüyor gibi rastgele yıldızlı bir demet eklendi ve bizim parmak çarpı işareti derlemek söyledi. Ama, şimdi derlemek olacaktır. Ama bunlar ne anlama geldiğini görelim. Ve ne yazık ki, yazarlar C başka bir sembol seçmiş Bu küçük hale getirmek için net, ancak yıldız operatörü farklı bir anlamı vardır İki farklı bağlamlarda. Ve ikimiz de gördüm, ama en ayırt edelim. Orada üst kısmında yukarıya Yani Ben a ve b değişti zaman Kötü int 's olmaktan Sürüm yıldız, a ve b int, Daha önce, tam sayılar idi. Şimdi a ve b nelerdir İyi, yeşil versiyonu? Onlar adresleri konum. Neyin, adresleri açık olması? Tamsayılar Adresleri. Ben gerçeği Yani int yıldızı araçları söyleyerek Bu adresi bir tamsayıdır, özellikle. Yani şimdi kod satırları fark, başka bir şey de değişti. tmp, çünkü aynı kalır Sadece geçici bir tamsayı var, hiçbir hafıza büyüsü. Ama şimdi bir yıldız ihtiyacı var. Ve, aslında, her a ve b diğer söz, Tüm bu olduğunu fark kırmızıdan yeşile değişen Ben önek olmam yıldızlı olan değişkenler. Ben a ve b kopyalamak istemiyorum. Çünkü ben sadece a ve b ve takas kopyalarsanız a ve b, ben aslında ne takas ediyorum? Sadece adresler, ben takas istiyorum Ne o adreslere var. Oraya gitmek istiyorum. Ve böylece yıldız operatörü Benim işlev içinde, değil parametre listesi içinde, Eğer bu adreslere gidin demektir ve aslında bu değerleri değiştirmek. Peki resmi yapar Şimdi yerine benziyor. Eh, bunun yerine eğer ben geçiyorum Bir için de değil, 1 ve b 2-- Aslında eklemeniz gerekir Burada bir başka tanım. Yani bu öbekte varsayalım bellek yeri 10 yer almaktadır. Bu konumda 11 olan, fakat bu Bir basitleştirme biraz, Ben şimdi x iki seçenek Ben geçmesi yapmak zorunda ve y veya onların adreslerini geçmek? Ben onların adreslerini geçirirseniz Bu gibi ben sadece Şimdi uygulamak gerekir Yeşil kod başına takas o gördüğünde böylece ve ne zaman b, sadece a ve b kopyalamaz görür süt ve portakal suyu taşıyın. Süt ve portakal suyu metafor, şimdi yıkar Bu çünkü bardak vardır Sıvı ve haritaların. Biz bunun yerine gitmek gerekir 10 ve biz çözmek için 11 adrese gitmek gerekir, ve o takas mantığı gerçekleştirin. Yani mantık, aynı ama Biz biraz farklı bir yol gerekir bu değişkenleri erişirken. Ve böylece sonunda ne Program bu gibi bakmak zorunda. Swap.c tam anlamıyla kopyalanan ve yeşil versiyonu yapıştırılan. Ama tek değişiklik yapmak gerekir. Bu sadece takas değiştirmek için yeterli değil. Ne kod satırı diğer Ben değiştirmek gerekiyor? Evet? HEDEF KİTLE: Bu argüman alır. DAVID J. MALAN: onun argüman alır. Yani ana kadar ilerleyin, ben sadece x ve y geçemez, ve ben, son söz Yeni sözdizimi parçası bugün. Ben x geçmesi gerekiyor ve y, ancak, x ve y adresi. Ve bu, sembol çıkıyor C yazarları seçti Burada bir işareti kullanırsanız değil, bir Bitwise işareti ile karıştırılmamalıdır, Eğer bir ve işareti kullanırsanız burada ve burada bir işareti, Bu, sizin için dışarı rakamlar x adresi nedir, belki de 10 var, ne y adresi, belki de var 11, ve bunun yerine, bu geçer. Yani bir sürü bir kerede tüm emmek için. Ama hızlı bir şekilde şimdi görelim bizim kalan dört dakika nereye işler ters gidebilir. Ve bir kenara, aslında olduğu gibi Ben bu resmi aldı, TF bir veya iki yıl önce bu resmi aldı. Yani bu arka köşe Eliot Yemek Hall. Göstericiler belki zor olan Biz CS50 örtmek konu. Sıralama Merak Yani eğer belki gibi yamaç olduğu Bir hokey sopası daha Bu gibi fark biz tür bir zirve olarak yaklaşıyor konum kavramsal karmaşıklık açısından. Ve ben bu getirmek Fotoğraf, yemin ederim çünkü sonbaharda 1996 yılında tanrı için, ne zaman aldı Benim öğretim görevlisi ile CS50, Nishat Mehta, o beni oturdu öğle yemeğinde Eliot D. Hall köşesi, ya da akşam yemeği, ya da bir şey denemek için Bana işaretçileri anlamalarına yardımcı olmak. Ben hafta sonra nerede Ve bu o dersin ne zaman tanıtıldı Sonunda işaretçiler anladım. Ve ben bu umutlu değilim çok erken senin için tıklayınız olacaktır. Ama kesinlikle arasında bu fark Daha sofistike konular Biz baktım. Ama en güçlü arasında bulunuyor. Bunu alınca Ve, gerçekten hepsi sadece nihayet bir araya gelip gidiyor. Yani geri kalan öyle değil güvence Bugün tüm lavabo gerekir. Yani burada geçen program biz bakmak için gidiyoruz. Ve biz birlikte sonuna kadar gidiyoruz claymation hızlı üç dakika Bizim arkadaş, Nick Parlante tarafından yapılan. İşte bir program ilk iki o, var çizgiler değişken x ve y bildirir. Her ikisi de adresleri tamsayılar, AKA işaretçiler. Daha sonra yeterli tahsis Bellek bir int depolamak ve adresi saklamak x, bellek. Yani, hatta basittir daha önce, örneğin daha. Bana hafıza dört bayt ver Bu bir int büyüklüğünde, ve x bu adresi koydu. Bu hat burada demektir x adrese gitmek ve anlamını koymak Hayat, orada numarası 42. Ama bu çizgi beni endişelendiriyor. Y y adrese gitmek demektir yıldız, ve orada şanssız sayı 13 koyun. Neden bu noktada, bu tehlikeli story-- de olsa hızlı söylendi Bizim azalan dakikada burada-- neden kötü bana söylemek için, y adrese gidilir? HEDEF KİTLE: Sen yok [duyulamaz]. DAVID J. MALAN: I have not y şey koymak. Yani y nin değeri nedir, Hikayenin bu noktasında? Biz hiçbir fikrim yok. Bazı çöp değer ve de Binky biliyor. Bu kayda göre sonuna gelebilir. [VİDEO OYNATMA] -Hey, Binky, uyan. Bu işaretçi eğlenmek için zamanı geldi. -Bu da ne? Işaretçileri hakkında bilgi edinin? Oh, goody. -Peki, Başlamak için, biz sanırım Birkaç işaretçileri ihtiyacımız olacak. -TAMAM. Bu kod iki işaretçiler ayırır Hangi tamsayılar işaret edebilir. -Tamam, Iyi görüyorum İki işaretçiler, ama onlar bir şey işaret olmak görünmemektedir. -Bu doğru. Başlangıçta değineği bir şey işaret etmemektedir. Onlar işaret şeyler pointees çağırdı ve onları kurma Ayrı bir adımdır. Sağ, sağ, Oh. Bunu biliyordum. Pointees ayrıdır. Peki nasıl bir pointee tahsis edebilirim? -Tamam, Iyi bu kod ayırır Yeni tamsayı pointee, ve bu parça setleri x buna işaret etmek. -Hey, O daha iyi görünüyor. Yani bir şeyler yapmak istiyorum. -Tamam, Ben olacak işaretçi x inceleyebilirsiniz onun pointee içine sayısını 42 depolar. Bu hile için, ben gerekir benim çözümleyecek sihirli değnek. Çözümleyecek -Senin sihirli değnek? Ah, o, bu harika. -Bu Kod neye benzediğini olduğunu. Ben sadece numara ayarlamak gerekir ve- [POP SES] Hey, nereye giderse oraya bak. Yani, x bir dereference yapıyor izler ok onun pointee erişmek için. Bu durumda, orada 42 saklamak için. Hey, numarayı saklamak için kullanmayı deneyin Diğer işaretçi 13, y. -TAMAM. Ben sadece y buraya gidersiniz, ve sayı 13 set up olsun. Ve daha sonra değnek almak dereferencing ve sadece-- [SİNYAL SESİ] Oh, hey bu işe yaramadı. Binky uh, I do not Say dereferencing düşünüyorum ayarı nedeniyle y iyi bir fikir pointee kadar ayrı bir adımdır. Ve biz hiç yaptım sanmıyorum. -Hmm, Iyi bir nokta. -Evet, Biz gösterici, y tahsis ama Biz pointee işaret ayarlayın asla. -Hmm, Çok dikkatli. -Hey, Sen orada Binky iyi arıyoruz. O yüzden bunu düzeltmek Can y noktaları x aynı pointee için. -Tabii, Benim sihirli değnek kullanmak işaretçi atama. Bir olacak o -Bu Sorun, daha önce benzeri? -Hayır, Bu pointees dokunmaz. Sadece bir işaretçiyi değiştirir Aynı thing-- işaret [Patlama sesi] Başka resmedildiği gibi. Oh, anladım. X aynı yere şimdi y noktaları. Yani, şimdi y sabit bekleyin. Bir pointee sahiptir. Yani bir değnek deneyebilirsiniz 13 over göndermek için yeniden dereferencing. Oh, tamam, buraya. -Hey, Şuna bak. Şimdi y çalışmaları dereferencing. Ve göstericiler paylaşan çünkü tek pointee ki her ikisi de 13 bkz. -Evet, Paylaşma, ah, ne olursa olsun. Peki, şimdi yerlerini değiştirmek için gidiyorsun? Oh, biz zaman bitti bak. -Ama-- Üç gösterici kurallarını hatırlamak -Sadece. Sayı 1, temel yapısı Eğer bir işaretçi olması, ve bir pointee üzerinde işaret ediyor. Ama işaretçi ve pointee ayrıdır. Ve yaygın hata bir işaretçi kurmak için ama bir pointee vermek unutmak. Sayı 2, işaretçiyi kaldırma işaretçi başlar ve üzerindeki ok takip onun pointee erişmek için. Hepimizin bildiği gibi, bu sadece orada çalışır tür geri alır bir pointee olduğunu 1 numaralı kural. Sayı 3, işaretçi atama tek işaretçi alır ve işaret değiştirir Başka bir işaretçi olarak aynı pointee. Atama sonrası Yani, İki işaretçileri Aynı pointee işaret eder, bazen bu paylaşım denir. Ve bu gerçekten, ona orada hepsi bu. Güle güle şimdi. [SON OYNATMA] DAVID J. MALAN: İşte CS50 için var. Profesör Nick Parlante teşekkürler. Gelecek hafta görüşürüz. [ELEKTRONİK MÜZİK OYUN]