>> [TEMA MÜZİK]
>> HOPARLÖR 1: Merhaba, herkes.
Bölümüne hoş geldiniz.
, Ben neden güzel bir gün bir konrtol Emin, burada sadece dört sizin vardır
ve bizim her zamanki paketi.
Ben bu hafta sonu hasta olmuştur.
Bu yüzden çocuklar için Yıldız patlaması yok.
Ve ben öksürük başlayabilir korkunç bu boyunca.
Yani sadece benimle ayı.
Gerçekten denemek için gidiyorum ve, ilk olarak bu geçmek
olsa, önce bir öksürük krizi var.
Ama sadece benim bir kolay olacak Bu bit-- az soruyorum hepsi.
>> Today-- Yani bizim gündemi sadece bir reminder-- sizin yarışması önümüzdeki hafta.
Ben bu yüzden bu son hafta anlattı gafil sen yakalamak olmaz.
Bu yüzden tekrar hatırlatan ediyorum.
Sonraki hafta da sınav.
Bu amaçla, önümüzdeki hafta en bölüm daha olacak
of-- ben denemek ve bazı inceleme çalışmaları olacak.
Siz eğer olabilir Yani Beni göndererek bana yardım
Eğer rahat konum şeyler , hakkında endişeli olduğunu, birlikte
sizin için istediğiniz konular Bana bu harika olurdu, kapsayacak.
Yani denemek ve onları çalışabilirsiniz Bizim bölümüne önümüzdeki hafta içine
veya size ekstra malzeme veya hazırlık göndermek Eğer başka bir yerde olsun olmayabilir.
>> Evet!
Daha fazla kişi geliyor!
Ben kötü geçen bunu yaptım, düşündüm hafta, kimse geri gelmek istiyor?
Korkuyorum.
Diğer üç şey Yani Biz gitmek için gidiyoruz
olan yönlendirme, dosya I / O ve Daha sonra göstericiler ve dinamik bellek.
Hepinizin hakkında süper heyecan eminim pointers-- herkesin en sevdiği konu,
anlamak için çok basit.
Ben hepiniz doğru, o var eminim?
>> Yani ilk şeylerden ilk, redirection-- Bu temelde sadece bir yoludur
nasıl size giriş kontrol etmek için Programınızın içine şeyler,
nasıl programdan çıktı şeyler.
ana yolu siz bununla etkileşimde olan
Sadece standart aracılığıyla dışarı olduğunu Burada baskı ekran.
Ama yolları vardır Burada gördüğünüz gibi pipe--
Bizim Kelimelerden-- tür biridir Boru o bilgilerin
veya bir dosyadan bir dosyaya veri.
Bu sadece farklı yolları var Programınızın içine şeyler almak
ve programın dışında, yerine sadece bu ekranda onları baskı
veya şeyler girerek Komut satırından.
>> Yani ilk biraz şapka daha büyük olmasıdır.
Sadece çıkış yazdırır output-- Yani yerine ekranın bir dosyaya.
Eğer baskılı bir şey vardı Yani eğer "Selam Dünya!" ekrana,
yerine koyarsanız , çıktıyı edilene
çıktıyı adlandırılan bu dosyayı oluşturur.
Açtığınızda Ve, o olacak "Merhaba dünya!" demek Orada.
Bu süper yararlı olabilir Eğer hatalar bir ton varsa
Aslında, biz bu birinde gördüğünüz gibi.
İki şapka yaparsanız, o olacak Hata iletileri yazdırın.
>> Eğer bir sorun yaşıyorsanız eğer öyleyse derleme, bu hataların bir yeri vardır
ve çalışırken batağa saplanmış alıyoruz Komut satırında ilerlemek için
Tüm bunlar aracılığıyla yapabilirsiniz Sadece bir dosyaya yazdırmak,
böylece bu dosyayı açmak için içlerinden daha kolay gezinebilirsiniz.
Ben aslında bir o kullanılan çok zaman hata ayıklama
Makine öğrenme için benim 181 psets.
Bu yüzden daha sonra süper yararlı olabilir.
Eğer bir program varsa o da yararlıdır belki bir kütüphane oluşturuyor
ya da bir kümesinin üretilmesi dizeleri, ve
olduğunu görmek için gerekiyor düzgün onları üretiyor.
Bu bunu yoludur.
>> Yani bunları bir dosyaya yazdırmak varsa, daha kolay inceleyebilirsiniz, değil mi?
Kaydırmak için çalışıyor Karşı Komut satırı üzerinden.
Ve sonra bir şey nota sadece büyük ile
şapka yerine, yazıyorsanız eğer Zaten exists-- bir dosyaya
bu yüzden bu ilk koştu gibi zaman, biz, çıktıyı koyun
ve sonra ikinci bir program vardı Programın iki olarak bu basılı olduğu
ve çıktıyı göre daha büyük bir yaptığı o kadar ki- üzerine yazılır
hiç ne üzerine bu dosya ile başlayacak.
>> Eğer eklemek istiyorsanız Bir dosyaya, burada gördüğünüz gibi,
Sadece işaretleri iki büyük yapmak.
Ve bunun için ekler.
Bunu üzerine yazmaz.
Birden çalıştırmak için gereken Yani eğer programlar tür tutmak ve
Bunların hepsi ne iz Bir dosyaya size dönen,
bunu yapmak için bir yoldur.
Eğer umurumda değil Eğer dosyada ne var ve, üzerine yazılmasına izin var
sadece daha tek bir büyüktür kullanabilirsiniz.
Bu herkese mantıklı mı?
>> İZLEYİCİ: gibi nokta daha merhaba çizgi Çıkış nokta metinden daha, gibi iki,
sadece sadece çıkışta göstereceğim nokta metin ikinci seferinde--
>> HOPARLÖR 1: Sağ.
Yani sadece tamamen temelde olur ile başlayan orada ne üzerine.
Burada, bu dosya varsa Zaten çıktıyı
Aradığınızda temelde olursa olsun, var yine bir tek daha sonra ile
Eğer sadece aklınıza gelebilecek daha gibi dosyayı yerini aldı.
Bir Kelime tasarrufu yaparken gibi Eğer gibi tasarruf yapmak belge ve,
ve aynı adı tutmak ve tamamen Durdur-- yazar
Bu şey aynı tür.
Herkes herhangi bir sorunuz varsa Sadece bir dosyaya çıkış?
Korku.
>> Yani açıkçası, sen ters eğer yön ok, bu giriş yapabilirsiniz.
Yani siz varken Sezar veya Visioneer gibi
ve giriş şey vardı, Eğer bir komut satırı argümanı vardı
o aslında girdi.
Bu bunu başka bir yoludur.
Bunun yerine bekleyen Komut istemine için,
için sorulduğunda gibi senin Sezar veya Visioneer mesaj,
Bir metin dosyası olsaydı Bu, senin mesajı vardı
Eğer sadece içine yazabilirsiniz.
Bu nokta gibi olsaydı >> Yani Sezar yırtmaç 3 ok giriş metin, daha az olan
Mesajınız yani, sadece iyi çalışır.
Ne zaman Sezar program aslında kullanıcı girişi istedi,
zaten çünkü olurdu Bu dosyada yazdığınız.
Bu sadece başka bir yolu var.
Output-- Sadece ters verileriniz için sadece giriş.
>> Ve sonra son bir borudur.
Yani bu kişinin oldukça serin.
O size izin verdiğinden biri çıktı almak
Program ve gibi koydu başka bir programa giriş.
Seni varsa bilmiyorum Deşifre ile oynanır
Bu CS50 sahip olabilir o olur size verilen, ancak
Eğer bazı örnek almasına izin , dosya şifreleme senin içine yazın,
ve daha sonra oradan yazın senin şifre çözme içine
yaptığınızdan emin aynı çıktı.
Yani bu tür üç-yollu döngü gibi.
Göreyim seni.
>> İZLEYİCİ: Eğer bir program Birden fazla girişe sahiptir
hangi girdi onu anlamanın bir yolu var metin dosyası veya çıkış kullanmak için?
>> HOPARLÖR 1: Birden fazla girişi vardır.
Bu kadar zaman input-- dosya olursa olsun giriş için ilk defa soran, bu kadar
gidiş bu, bence, varsaymak Tüm dosya boruya gidiyor.
Eğer birden fazla giriş varsa, sen Yani birden fazla dosya boru olacak.
Yani sen mesajlar için soruyorsun kodunuzu üç kez,
Eğer koyarak gidiyoruz Üç farklı dosyalarda.
Ve bu çılgın alır.
Ve sen olmamalıdır Şu anda bu konuda endişe.
Ama bu fikir.
>> Yani evet, boru birinin sadece çıkışını ise Program diğer girdi kullanır.
Herkes orada iyi?
Serin.
TAMAM MI.
Muhtemelen olmaz onunla çok fazla yapmak.
Ama anlamak gerekir yolları bunu kullanabilirsiniz.
Ve bazı durumlar vardır ki bunu kullanmak isteyebilirsiniz.
>> Yani / O- ben sen ne biliyorsun dosya saying-- biz okuma alışık
ve orada bizim ekrana yazma, hangi standart ve standart dışı olduğunu.
Ve bu adamlar olmuştur ne Burada sınıfın başından beri yapıyor.
Ama aynı zamanda okuma ve dosyaları yazabilir, Ben / O- yüzden giriş dosyası tüm dosya olan,
çıktısı için duruyor hepsi.
Yani bu temelde anlamına gelir Şimdi verilerinizi saklayabilirsiniz.
>> Sadece bunu yazdırmak zaman Ekran, temelde, doğru gitti?
En kısa sürede size Merhaba "yapmak gibi dünya "ve koşmak" Merhaba dünya "
ekrana "Merhaba dünya" yazdırır.
Ama gerçekten yapamaz oradan onunla bir şey.
Bir metinde saklamak durumunda Dosya, sonra aniden
Eğer izin verilir bu verileri işlemek veya bir dosyaya koymak için,
veya daha sonra bir program koydu.
Bunun nedenlerinden biri Neden yaptığımız bu sadece bir
daha sonra kullanmak için veri saklamak için bir yol olarak.
>> Ben burada birkaç adım var Sadece standart yürürken
I / O. Birinci aşamada, sen Bir başvuru oluşturmanız gerekir
tüm dosya kapaklar yıldız dosyasını DOSYA.
Yani bir dosyaya bir işaretçi oluşturur.
Öyleyse bunu açmak istiyorum.
Ve sen, kelimenin tam anlamıyla, demek Sadece dosya fopen eşittir.
Ve bu bir geri gidiyor Sadece açılan dosyaya işaretçisi.
Sana bir çift gördüm Mesai saatleri adamlar.
>> Ama şeylerden biri unutma-- göstericiler ise
Sağ bazı adres veya boş olabilir?
Biz hiç bir dava nerede varsa şey, boş dönebilirsiniz
yapmamız gereken ne biz hiç kullanmadan önce?
Biz kontrol etmek gerekir null ya da değil, doğru değil mi?
Size bazı vardı olabilir çünkü Sorun nerede olursa olsun nesne
koparma döndürülen ediliyordu boş oldu.
Sen gerçekleştirmek için çalıştı Bunun üzerine bazı fonksiyon.
Ve bilgisayar sitesi hatalı.
Doğru?
Sana bir çift bahis bu sorunu olmuş olabilir.
Fopen So >> fopen Ya dosyaya bir işaretçi döndürür,
ya da bir şey yanlış giderse, o null adlı dönmek için gidiyor.
Yani her zaman kontrol etmeniz gerekir null dönmedi o
Eğer başka bir şey yapmak çalışmadan önce.
Bu standart bir paradigma gibi Burada ihtiyacınız için gidiyoruz.
Bir şans hiç varsa o şey, boş geri dönebilirler
Emin bunu yapmak için kontrol Devam değil önce.
Aksi takdirde, gidiyoruz güzel yer hatalarını almak için.
Ve hiç kimse bu başa seviyor.
>> Biz ilk argüman burada gördüğünüz gibi Yani dosyaya sadece yoludur.
Bu dosya yoksa, bu dosya oluşturmak için gidiyor.
Ve bu sadece boş olacak.
Ve daha sonra ikinci argüman İstediğiniz modu.
Bu dosyadan okumak ister misiniz?
Eğer ondan yazmak istiyor musunuz?
Eğer eklemek istiyor musunuz?
Yani aslında ben sadece ki-- ne Dosya yoksa
ve okumak için çalışıyoruz o, bir hata atmak için gidiyor.
Dosya eğer gibi aşkına-- Eğer file.text henüz mevcut değil
ve yazmak istiyorum ona, o yaratacak
Sizin için file.text adında boş bir dosya.
Ve sen eklemek istiyorsanız, Eğer aynı şeyi yapmalıyız.
Mantıklı mı?
Eğer okumak için çalışıyorsanız Henüz var olmayan bir dosya,
bir hata atacağım.
Aksi takdirde, bu dosyayı oluşturur sizin için bunu istediğini yapmak.
Serin.
Şimdi dosyadan okuyabilir.
Ve bu sadece gidiş tür bir Farklı fonksiyonları ile
Biz dosya I / O için var. Bu irade Bu haftaki pset gerekli olacak
Yanlış hatırlamıyorsam eğer.
Evet, kesinlikle olacak Bu haftaki pset gerekli.
Yani fgetc sonraki karakteri döndürür.
Sadece metin satırı döndürür fgets.
Bu şey kadar dönecektir Yeni bir satır, ve kıracak.
Böylece fread belirli okur bayt ve yerlerde onları sayısı
Bir dizi halinde olan bir şey mi olduğunu olabilir
Yeniden size-- ile yapmak istiyorum yararlı olabilir.
>> Kaç kişi okudum Bu arada pset spec?
TAMAM MI.
[Duyulamaz]
>> HOPARLÖR 1: Tamam.
Tamam.
Eğlenceli bir pset var ki- Kesinlikle okuyun.
Sen bir silinmiş hafıza kurtarmak için olsun o çalışır gerçekten heyecan verici card--.
Ama kesinlikle, bu okumaya başlayabilirsiniz.
Bana konuşmak gel eğer Bu konuda sorularım var.
>> Tamam, böylece ben diyordum, fread bayt belirli sayıda okur.
Bu keyfi sayı ayarlamak için gidiyoruz.
Ve sonra sadece hamle fseek belirli bir pozisyona.
Yani belki umurumda değil Gelecek 10 bayt hakkında.
Sen sadece önde atlamak istiyorum.
Sen o umurumda değil.
Sen bayt 11 başlayan okumak istiyorum.
fseek bunu yapmanızı sağlar.
Bu yüzden seçici olmasını sağlar Okuduğunuz ne.
Fgetc, fgets ve fread okuma Çünkü dosyada belli bir yerden.
>> Bu düşünmek bir yolu varsa olduğunu Bizim dosya, ilk açtığınızda,
Eğer dosyada bu pozisyonu var O başında başlar.
Ne zaman çağrı fgetc, fgetf veya fread,
o başlamak için gidiyor Bu pozisyon işaretleyici.
Diyelim ki sadece okumak istediğinizi varsayalım Burada belleğin bu yığın.
Sadece çağrı yapamazsınız.
Burada üzerinde aramak zorunda ve oradan okunan
veya okumak, alır, ya da getc, Ne istediğinizi bağlı.
Yani sadece size izin verir aramak bellek bölümlerini atlayın.
Ve bu sadece şeyleri atlayabilirsiniz yolu
senin tampon içine okumadan.
Bu herkese mantıklı mı?
>> Açıkçası, bir var Paralel ötürü-- sürü
Bizim çıkış veya giriş yönlendirme, okuma ve yazma var.
Yani fputc sadece yazar dosyaya karakter.
fputs bir çizgi yazar.
Fprintf bir biçimlendirilmiş çıktı yazdırır.
Eğer sekmeleri var ise, veya boşluk, ya da etajer.
Sonra fwrite bir yazar Bir dosyanın bayt dizisi.
Yani bu aynı şekilde fwrite ve fread benzerdir
opposites-- fgets, fputs ve Daha sonra fputc ve fgetc-- çok
çılgın, hızlı şeyler.
>> Sadece biraz bu handy-- tutmak Farklı kez olacak
nerede belki sadece istediğiniz Bir kerede bir karakter.
Belki bir bütün çizgi istiyorum.
Senin Sözlük pset-- ile bu iki psets olduğu,
Ben size bir bütün vermek, inanıyorum Bir metin biçiminde Sözlük
hangi her kelimeyi vardır Bir çizgi ile ayrılmış.
Eğer okumak istedim Yani eğer Bir seferde tek kelimeyle,
Eğer okuyorsanız ne kullanabilirsiniz ve hepsi, yeni hatlarda ayrıldık
ve sadece bir defada bir sözcük istiyor?
>> İZLEYİCİ: fgets
>> HOPARLÖR 1: Sağ.
Fgets-- o döndürür çünkü ne olursa olsun bir satırda.
Ve her kelime onunki ise Kendi çizgi, biz fgets kullanabilirsiniz.
Serin.
Bu anlamda, herkesi yapar mı?
Serin?
Evet, biz almak için gidiyoruz işaretçileri ile eğlenceli kısmı
çok yakında, nereye Bazı matematik yapmak olsun.
Ve harika olacak.
>> Son dosyanızı kapatın step--.
Burada çok şeyler, Bizim paradigmaların biri
o dönebilirsiniz eğer olduğunu null, null edin.
Eğer bir şey açarsanız, daha iyi kapatmak olur.
Sen kadar Tamam, bu yüzden bitmedi Bunu kapattığınız sürece yapılır.
Tür bitmedi gibi şişman kadın şarkı söyleyene kadar.
Bu dosya kapanış gibi.
Burada, dediği gibi sadece Her zaman, yinelemek için
sen önce dosyayı açmak okuma ya da yazma.
Eğer açtığınız takdirde ve her zaman kapatın.
Tamam?
Serin.
>> Yani burada bir örnek.
Bilmiyorum tiny-- Yani eğer adamlar çok iyi olduğunu görebilirsiniz.
Sadece biz artabileceğini Eğer nasılsa parlaklık.
Ben eğer bana gerçekten bunu yapalım.
Tamam, siz yapamazsınız gerçekten Eğer, o hiç edebilirsiniz görüyor musun?
Tamam, biz o zaman, bu yapmak için gidiyoruz.
[Duyulamaz]
>> Ben bu görmek için çok daha iyi olduğunu varsayalım.
Herkes nerede görebilirsiniz benim Soru fare gitti mi?
Ah, işte o mücadele ne bu--!
>> Tamam.
Temelde, siz tür olmalıdır bu ne bir fikrin yapıyor.
Mükemmel değil.
Harcama daha Ama doğrusu bunu açıklamak istiyorum daha fazla zaman düzgün biçimlendirmek için çalışıyor.
Temelde, burada gördüğünüz gibi, Biz dosya açıkken başlar.
Ve bazı var biz veritabanı dosyası
Bu açılış bizim öğrenciler olduğunu söylüyor.
Ve biz bunu yazmak için gidiyoruz.
Yani tabii ki, boş dönmek.
Yani biz null denetlemek zorunda.
Ve öyle değil o takdirde null, biz geçmesi.
Gördüğünüz gibi, biz konum Burada döngü.
Öğrenci bulunmaktadır.
Öğrenciler üç olarak tanımlanan karma.
Ve ne yapıyoruz biz ise Doğru, dosyaya yazdırma?
Peki bizim dosyaya dışarı yazdırıyorsunuz?
>> İZLEYİCİ: puanları dizide bu mi?
>> HOPARLÖR 1: Evet.
olan skorları Tam array--.
Yani biz bu açılıyor veritabanı dosyası, hangi
Ben varsayıyorum çeşit sınıflarda veritabanı.
Ve biz sadece dışarı yazdırırken Bu dosyaya her öğrencinin puanları.
Serin?
İyi.
Korku.
TAMAM MI.
Amaçlara yönelik geri dönelim
>> İZLEYİCİ: Ben hızlı bir sorum var.
Döngü için printf değil mi?
Bu sadece eğer döngü var?
HOPARLÖR 1: Hayır, bu döngü için öyle.
Ben burada çok iyi benim fare göremiyorum.
Yani mücadele ediyorum düzgün biçimi söyledi.
Bu braket gitmiş olmalıdır.
Burada aşağı olmalıdır.
Bu döngü için Gözlerinde ne olduğunu.
Orada.
Şimdi güzel.
Yani o hariç göre-- nasıl var Ben işten son braket için.
TAMAM MI.
Bu herkese mantıklı mı?
TAMAM MI.
Biz geçmek için gidiyoruz Bir sonraki şey zaten--
hangi aslında, sen gidiyorsun kodunu görmek için ihtiyacımız.
Ben sadece gidiyorum Bu üzerinde şu anda kopyalayın.
TAMAM MI.
Yani bu kod sizi göstermek için gidiyorum.
Ve ben denemek ve şekil istiyorum o gerekiyordu ne yapmak.
>> Yani bir dakika ya da öylesine almak ki- verilen.
Deneyin ve burada neler olup bittiğini anlamaya.
>> Herhangi bir fikir?
>> Biz var biliyoruz en az iki Komut satırında argümanlar, değil mi?
Ben biri olacak varsayalım Bu [duyulamaz] program değildir
ve daha sonra başka bir şey.
[Inaudible] az ise Çünkü ikiden, biz onlara bağırma.
Doğru?
Ve kullanımdan, bu gibi görünüyor bu dosyanın bir tür olacak.
Hepimiz kabul?
Şimdi, yaptığını döngü ne?
Ne geçiyor?
>> İZLEYİCİ: Tüm dosyalar.
HOPARLÖR 1: Kesinlikle.
Bu geçiyor tüm Biz orada giriş ettik dosyaları.
Yani her dosya için, bu kadar Orada bazı dize açılması.
O dosyayı açıyor.
Doğru?
Ve ondan okuyor.
Null ise tabii, kontrol.
Ve sonra baskı var.
Null ise, sadece bize söylüyor o var olan bir dosya değil.
Ile, hatırlıyorum çünkü bizim dosya var zorundadır okuyun.
Doğru?
Yazma ve append ile, Eğer onunla uzak alabilirsiniz.
Ama okuma ile, bizim dosya var zorundadır.
>> Sonra eğer var, Burada ne yapıyoruz?
Sadece burada başlayalım.
Bu ne var bu ilk karakteri sanıyor-.
Ne işe yarar?
Haklı, bir karakter alır?
Peki bu yapıyor?
İlk karakteri oluyor.
Herkes EOF biliyor musun?
>> İZLEYİCİ: dosyanın sonu?
>> HOPARLÖR 1: tam file-- sonu.
Yani geçmesi için gidiyor tüm dosya, değil mi?
Ve sonra tarafından güncelleştirmek için gidiyor sonraki her karakter alıyorum.
Doğru?
Ve o ne yapıyor?
HEDEF KİTLE: Bu koyarak in--
>> HOPARLÖR 1: putchar baskılar Ekran koruyucu için.
[Duyulamaz] karakter.
Ve sonra zaman [duyulamaz] Bu dosyayı kapanacak.
>> İZLEYİCİ: Eğer değil [ihtiyacınız var mı? Başka? ?]
>> HOPARLÖR 1: İlle.
Ben bu tür bu ima ediyor, demek.
Bu sürece, olsa, döner Çünkü bu yakalamak değil, sen iyisin.
Ben muhtemelen iyi demek else yapmak için pratik.
Ama hep başka değil Gerekli özellikle
Eğer bir şey varsa Bir dönüş gibi hangi
bu durumda yakalarsa demektir o, program sona gidiyor
ve bu olsun asla.
Bu konum durumunda daha var mutlaka bir şey dönen değil.
Bu değildi Çünkü eğer şey dönen,
o, bu doğru olsaydı anlamına gelir Bu geri kalanı hala çalışır.
Ve bu durumda, siz Bir yanlış isterim.
O dönen eğer, ve Programınızın biten,
Bir şeyin gerekli değildir Zaman, çerçeveye bağlı olarak.
Jacob, bir soru var mıydı?
HEDEF KİTLE: Evet.
Yani bir sonraki karakteri almak fgetc yapar?
Karakter nasıl artar?
HOPARLÖR 1: Evet.
Yani fgetc sonraki karakteri alır.
Bir anlamda C ++ gibi düşünebiliriz.
>> İZLEYİCİ: EOF ne Yani oldu?
>> HOPARLÖR 1: EOF dosyanın sonu.
Sadece bilmenizi sağlar bir işaretleyici bulunuyor Eğer dosyanın sonuna olduğunu.
Yani bu yazdırmak için gidiyor senin standart dışarı.
Ve sonra kapatmak için gidiyor bitti dosyası.
Ve sonra en gidelim Sonraki resme, değil mi?
Yani genel olarak, bu program ne işe yarıyor?
>> [Duyulamaz]
>> HOPARLÖR 1: Evet.
Bu sadece orada her şeyi yazdırır.
Siz hiç kullandıysanız CAT Yani Bazı file-- ve daha sonra adı
Sizden varsa ben bilmiyorum Hiç terminalde o yapılır.
Ama hiç kullanıyorsanız Komut CAT-- Cı-A-T-
ve sonra ne olursa olsun dosya Bunu orada-- var
senin terminale, onu yazdırır hangi Bazı şeyler için süper kullanışlı olabilir.
Ben bir çok kullanırım.
Bu herkese mantıklı mı?
Serin?
>> Tamam, böylece görev şimdi-- biri tarafından kendiniz veya sen-- çevresindeki insanlarla
sadece basit bir program yazmak için sadece "Merhaba, dünya!" yazacak
Bir dosyaya dışarı.
>> [Duyulamaz]
>> HOPARLÖR 1: Ben, böyle yaptım Ben kötü geçen hafta ne?
Ben o kötü olduğunu düşünmüyordu.
Hepinizin burada olmana sevindim.
Gerçekten beni mutlu ediyor.
Ben basit zevkleri bir kızım.
Benim bölüm katılır zaman sadece seviyorum.
Yani sadece bu başlandı alıyorum Siz birlikte kod böylece.
Ben kimseyi koyarak sevmiyorum nokta olmak istediğiniz sürece.
>> İZLEYİCİ: yarışması için, do Biz bir program yazmak zorunda?
>> HOPARLÖR 1: istenebilir elle basit programlar yazmak.
Evet.
>> İZLEYİCİ: yarışması sağ, gelecek hafta?
>> HOPARLÖR 1: yarışması önümüzdeki Çarşamba.
Bu güzel [var demektir? CSE?] , daha sonra parti sınıflandırma hangi
Eğer puanları alırsınız anlamına gelir geri ne zaman akşam-- ki?
Kim bilir?
Ama o gece olacak.
>> Tamam.
Bunu nasıl başlamak istiyorsun?
Sana bu bir hint-- başlar vereceğiz.
>> İZLEYİCİ: Bir dosyayı açmak zorunda.
>> HOPARLÖR 1: Evet.
Peki bu aramak istiyorsun?
Sadece "dosya" diyoruz istiyorsunuz?
En kolay yapalım.
Peki ne fopen-- bizim olacak çıkış testi?
"Merhaba." Deyin
Ve bizim mod nedir?
Bu dosyaya ne yapıyorsun?
>> İZLEYİCİ: Oku.
Yazma.
HOPARLÖR 1: Biz ona yazıyoruz.
Güzel.
Tamam, bu yüzden şimdi bu dosya var.
Ne yapmamız gerekiyor?
HEDEF KİTLE: null olup olmadığını kontrol edin.
HOPARLÖR 1: tam olarak null-- olmadığını kontrol edin.
Duymak istediğim buydu.
Bu, özellikle, otomatik olmalı Bu noktadan itibaren oldukça fazla.
Eğer segfaulting, muhtemelen başlatırsanız yerde boş kontrol etmedi.
On üzerinden dokuz kat, işte Hata olacak.
Sadece alabilir Yani eğer null ise alışkanlık, her zaman, kontrol
senin hayatın olacak güzel ve easy-- veya daha kolay.
>> Yani boş olup olmadığını görmek için kontrol edin.
Null değilse, hangi Yani patlama eşittir nedir
means-- geçerli olduğunu null-- değil.
Ne yapmak istiyorsun?
Biz sadece yazdırmak istiyorum Bu dosyaya, değil mi?
Peki biz kullanmak için gidiyoruz?
>> İZLEYİCİ: fprintf
>> HOPARLÖR 1: Fprintf-- güzel.
Ve fprintf iki arguments-- nerede alır gidiyor ve ne baskılı istiyoruz bulunuyor.
Yani ilk ne?
O nereye gidiyor?
>> İZLEYİCİ: Dosya.
>> HOPARLÖR 1: Bu dosya için gidiyor.
Ve biz baskılı ne istiyorsun?
"Selam Dünya!"
Tamam.
Biz son bir şey-- var Burada başka bir büyük paradigma.
HEDEF KİTLE: Kapat.
HOPARLÖR 1: Kapat.
Orada gitmek.
>> İZLEYİCİ: Bu olay mı Dosya null ise?
HOPARLÖR 1: null değilse Hayır, bu.
HEDEF KİTLE: Ah, eğer Ben- Tamam.
Daha sonra fopen ve için içeri iki argüman,
İlk argüman tekrar ne demek?
>> HOPARLÖR 1: argüman sadece dosya adı gibi
Gitmek istediğiniz.
Bu çalıştıktan sonra Yani, olur "merhaba" olarak adlandırılan bazı dosya
Bu onun içinde "Merhaba, dünya" vardı.
Hepsi bu.
Sadece isim.
>> İZLEYİCİ: Ve bu yana yazma, Dosya zaten var zorunda değildir.
Ne dedi mi?
>> HOPARLÖR 1: Sağ.
Kesinlikle.
"Merhaba" bir dosya olarak ise henüz yok, bu kadar
adlı bir dosya oluşturmak için gidiyor Merhaba "ve sizin için yazmak.
>> İZLEYİCİ: Eğer söylüyorsun Program, dosyaya yazdı
neden yazıyorsunuz "dosyası" yerine do dosya ve fprintf-- adı
>> HOPARLÖR 1: Bu durumda, var olduğundan tüm caps-- yıldız o büyük FILE--,
dosya.
Yani dosyaya bir işaretçi var Bu Bahsettiğin.
Bu şekilde olduğu Biz sadece ona bakın.
Bu durumda Yani, file-- AHA düşünebilirsiniz,
Burada bu-- dosyayı kullanabilirsiniz "Merhaba" açılması anlamına gelir
ve yazma icar.
>> İZLEYİCİ: Biz "Merhaba" koyabilir misiniz yerine [? sadece?] f dosyası?
HOPARLÖR 1: Hayır, çünkü "Merhaba" açık ve yazılabilir olması gerekiyor.
Burada Dosyası gibi Tamam diyor designator, biz
Bu file-- hello-- var Biz bakıyoruz ki.
Bu açılmıştır.
Ve biz bunu yazacağız.
Sadece "Merhaba" kullanırsanız, Bu onun özetlenmiştir.
Bu yüzden korkutmaya gidiyor.
Bunu adlı olabilir, demek.
Sen, dosyayı yapmış olabilir Yıldız, "Merhaba", yani eşittir.
Ama bütün mesele senin olduğunu için bir dosya yıldız işaretçisi gerekir
Bu işlevleri kullanmak edebilmek için.
HEDEF KİTLE: Eğer yapabilir misin Dosya, yıldız, dosya, "Merhaba"
ya koymak zorunda onun tarafından, dosyayı yıldızı dosya?
HOPARLÖR 1: Yapabilirsin "Merhaba.", dosya, yıldız yapmak
Sen bu değiştirebilirsiniz adı ne olursa olsun istediğiniz.
Tamamen keyfi var Bu isim ne.
Sen herhangi bir isim olabilir.
Eğer isteseydi, spagetti uçan adlandırın.
>> İZLEYİCİ: için tırnak içinde "w" nedir?
>> HOPARLÖR 1: "w" sadece modu.
Yani biz bu dosyaya yazıyoruz.
Herkes iyi?
Temizle?
Evet.
>> İZLEYİCİ: Yani bu yazdığında nerede o dosyayı buluyorsun, dosya?
>> HOPARLÖR 1: Aynı olacak Şu anda konum dizin.
Eğer pset üç iseniz ve Eğer pset içinde bu, koşmak
Üç klasör olacak olarak adlandırılan bu dosya "Merhaba."
Serin?
Herkes iyi?
Tüm konum gibi hissediyorum hangi büyük, bunu alıyorum.
TAMAM MI.
Yani geri slayt show-- için Işlerin ne zaman seviyorum.
Tamam, siz heyecanlı pointers-- mı?
Göstericiler büyük.
Onlar biraz almak Başını etrafında sarmak için.
Bu benim ikinci yıl öğretim işaretçileri.
Ve ben nihayet var düşünüyorum.
Eğer mücadele varsa Yani, tamam.
Daha önce de söylediğim gibi, resim çizim , CS şeyler çok olur
kadar insanların eğilimi düşünüyorum oh, biz bilgisayar başında olduğunu düşünüyorum.
Biz sadece kod gerekir.
Hayır-- çizim resimleri Gerçekten size yardımcı olacaktır.
Ve ben gerçekten sizi teşvik Kindergartner tarafına dokunun
ve boya kalemleri getirmek veya işaretleri ve beraberlik.
O size yardımcı olacaktır çünkü.
Ve ofis saat beni görürsem, ben kağıt yığınlarının etrafında taşıma olacak
kalem şeyler çizim ile.
>> Yani özellikle birlikte resim çizmek pointers--.
Ve ben aslında gidiyoruz eminim burada da bazı resimler çizim olacak.
>> Yani siz tüm Binky görmek lazım Bu serin claymation şey.
Ve biz ne zaman gerçekten komik olduğunu düşünüyorum O parçaları bir demet haline patlar.
Bu sınıf için bazı komik rahatlama var.
C [duyulamaz] bu büyük yetenek bellek kontrol edebilmek için.
Ve o gerçekten şeylerden biri o denli güçlü bir dil yapar.
Ama büyük güç geliyor ile büyük sorumluluk.
Ve çılgın şeyler olabilir Eğer dikkatli değilseniz.
Yani kullandığınız zaman işaretçiler, yapmak istediğiniz
emin gerçekten anlamak Tam olarak ne yaptığınızı.
Umarım bir sonraki biraz Zaman gerçekten anlamanıza yardımcı olacaktır
işaretçiler, nasıl kullanılacağını, ve bunları işlemek için nasıl.
>> Yani biz ettik eminim memory-- daha önce bu diyagramı görülmektedir.
Yani bu sadece basit bir diyagram olan nasıl işler bellek depolanmış olabilir.
Yani temelde bu var bir byte bloklar büyük diziler
Biz ötürü-- hafif ne var birer Zaman artışlarla.
Bu onaltılık içinde [duyulamaz] yani sekiz bitlik bloklar.
Ve her blok ilişkilidir Bazı onaltılık adresi.
Hiç görürseniz Yani 0 x, sadece işleme işaretleri var
Bir onaltılık adresi olduğunu.
Bu demektir varsayabiliriz bellekte adresi.
Biz bellek adresleri hakkında konuşuyor ne zaman onaltılık bakın.
>> Biz int değişkenler sahip yüzen saklamak değişkenler.
Int mağaza ints Yani.
Şamandıralar mağazası yüzer.
Yani biz de işaretçileri var Bu mağaza bellek adresleri.
Bu haritalama bir çeşit.
İşaretçiler münhasıran bellek adresleri için.
Yani orada tip gibi.
Cihazınız 32-bit, hangi anlamına gelir Bellek adresi dört bayt olduğunu.
Yani sahip olduğunuz herhangi bir işaretçi Ayrıca dört bayt olacak.
Ya da dört bayt olduğunu else if, Hafıza dört bayt.
İşaretçiler mağaza bellek.
Bu nedenle, dört bayt konum.
Cool-- sadece güçlendirmek istiyoruz.
>> Şimdi bu çizgi roman almalısınız.
Sana kaç bilmiyorum xkcd fanlar, ama xkcd seviyorum.
Bu harika.
>> Tamam.
Dediğim gibi Yani bu, pointers-- oluşturma hemen hemen sadece başka bir şey gibi.
Bir türü var.
Sen bir isim var.
Doğru?
Yani biz orada ne var. [? Hex?] Yıldız, bir işaretçi demektir
ve sonra onu aramak istediğiniz ne olursa olsun.
Yani tipi temsil saklayabilirsiniz ne.
Tamam?
Aynı şekilde biz ints yaparsak, biz orada bir int depolamak biliyorum.
Bir işaretçi ile, bu Bir bellek adresini tutar.
Ama ne anlama geldiğini burada nerede ki- olduğunu Bir çizim kullanışlı gelip gidiyor.
Yani bu durumda, biz var Bazı en dört diyelim value--.
Dört adresinde bir yer almaktadır.
TAMAM MI?
>> Bu ilki terimi burada Bir işaretçi 2x olduğunu.
Doğru?
Bazı işaretçi x var.
x neyse bir şey olabilir.
Ne olursa olsun x x dört olduğunu söylüyorlar o--.
Bu saklamak için gidiyor Burada bellek adresi.
Yani int, yıldız, x-- bu memory-- diğer bazı yuva
kim bu ne bilir.
Ama burada bir adres saklamak için gidiyor.
Yani bu da-- olurdu bu durumda, ne olursa olsun,
depolanır ne 0x1-- saklanır Bizim işaretçi tutan adreste,
ile maç var ne biz tayin ettik.
Yani 0x1, bu durumda, söz konusu x.
Bu sadece hiç bir olabilir Bu kullanırken yaparken int.
>> Benzer şekilde, varsa Başka 1y, ne olursa olsun
y vardır ile adresi saklanır z ile bir char-- aynı şey olması.
Aynı şekilde, her da deneyin ve INTX 0.4 eşittir yapmak,
size bağırma ve olacak hayır gibi, size bir int istediğini söyledi.
Bu bir int olması gerekiyordu.
Bir şamandıra yapmaya çalışıyorum durdurun.
>> Peki şeyler onlar istediklerini olsun.
Şeyler kendilerini olsun.
Yani büyük bir şey, sadece bir işaretçi türü ne olursa olsun
o sadece var olduğunu Orada saklayabilirsiniz şey.
TAMAM MI?
Uygulama ile, gibi Geçen hafta, her şeyi
gerçekten tür soyut görünüyor.
Biz bazı pratik yapmak için gidiyoruz.
Bu daha mantıklı olmalıdır.
>> Yani referans ve bu kadar dereferencing-- gerçekten önemli bu düz olsun.
Ben hala yenilemek zorunda her şimdi ve sonra.
Ve ben hangisini istiyorsun beklemek gibi değilim?
Yani işareti aslında verecek Eğer referans veya adres.
Bu yüzden adresini döndürür Değişken bellek saklanır.
Yani aslında sizin dönmek için gidiyor onaltılık, çözümleyecek ise
Aslında size verecek orada saklanır veri.
TAMAM MI?
Yani biz bir örneğe bakmak için gidiyoruz gerçekten hızlı, ya da aslında yukarı gelecek.
>> Tamam.
Yani biz gerçekten düşünmek zorunda dikkatle bu konuda.
Yani burada bazı tamsayı x var.
Ben denemek ve bu çizmek için gidiyorum benim yeteneklerini en iyi dışarı.
Yani biz bu yuva x zorunda gidiyoruz.
Ve bu beş saklamak ediyor.
Onun adres 0x4 olduğunu.
Serin?
Tüm iyi.
>> Peki şimdi bu işaretçi var.
Burada üzerinde oldu.
Ve işareti bize verir şey adresi.
Yani, bu durumda, X 'in adresi.
X adresi nedir?
04-- ve bu gösterici 0x08 yer almaktadır.
Serin?
Yani bu konuda düşünmek olabilir gösterici, 04, sadece burada işaret.
Ve onlar işaretçileri denilen konum Bu daha fazla olsun çünkü,
Eğer şeyler işaret görmek için gidiyoruz.
Ve bir bloğu başka bir işaret blok çok daha mantıklı olacaktır.
Yani burada ikisidir.
Ve sonra bazı var ne- 0x0c olan kopya.
Ve gidiyor Bizim işaretçi inceleyebilirsiniz.
>> Peki ne söylüyor olduğunu Tamam, burada bizim işaretçi var.
depoladığı değer ne 0x04, Ve Bu adrese gitmek olduğunu söylüyor
ve bunun içinde ne söyle.
Yani etkin bir var Bu ok ne yapıyor.
Sen yıldız gibi bu düşünebilirsiniz.
Biz yıldız ne zaman Yani tamam, bunu takip anlamına gelir.
Bu adrese gidin.
Ve bu sadece aşağıdaki temelde Bu bellek öbek bu ok.
Ve 5 olan, içinde ne bize ver.
Bizim kopya 5'e eşit olmasının nedeni bu.
Mantıklı mı?
Herkes geçmesi bana ihtiyacın var mı Bir daha, ya da daha yavaş?
Beni gitmek istiyorum o bir kez daha içinden?
TAMAM MI.
Biz tekrar yeniden çizmek için gidiyoruz.
Biz başlattığınızda, hepimiz var katılıyorum bir değişken belleğin bazı öbek
Biz 5 eşit set x.
Bellekte nerede biz kontrol etmiyoruz.
Yani bu nokta sadece bir keyfi atanmış.
Orada iyi?
TAMAM MI.
Sonra bir int için bir işaretçi başlatılamıyor.
Yani işaret izin yüzden var x burada bir int var çünkü.
Biz başka bir öbek var Bellek çünkü bu işaretçi
sadece başka bir şey gibi bir değişkendir.
Bu keyfi atanmış bellekte biraz boşluk.
Ve ne saklar x adresidir.
Ve işareti x adresi anlamına gelir.
Yani x adresi nedir?
>> İZLEYİCİ: Bu zero-- var
HOPARLÖR 1: 0x04.
Yani zaten-- sonuncusu.
Biz yine bazı copy-- var sadece başka bir değişken.
Yani bazı keyfi yere atamak verelim.
Bizim işaretçi inceleyebilirsiniz Ve biz.
Yıldız gidin demektir adres benim işaretçi saklanan.
Orada ne söyle.
Yani adres saklanan Bizim işaretçi olarak 0x04 olduğunu.
Yani biz bu adrese gidin.
O adrese işaret ediyor.
Bu bellek bloğu içinde ne var?
Bu beş var.
Yani bizim kopyasını atamak ne.
Herkes iyi?
Serin.
Again-- resimler.
>> Yani ben ötürü-- değerleri izleme Siz bu konuda düşünelim olacak.
Biz başka bir resim çizebilirsiniz.
Ama denemek ve neden istiyorum Bir dakika için kendi bu aracılığıyla.
>> Onlar vermediler yana Bize bir örnek adresi,
Ben sadece işareti x-- yapacağım hangi eve götürmek yardımcı olmalıdır.
Ve işareti adresi anlamına gelir.
>> Yani birincisinde, herkes İlk satırda ile gitmek.
Bazı x seti en five-- bazı bellekte rastgele yuvası.
Int yıldız işaretçi eşittir x adrese, değil mi?
Int yıldız işaretçi oluşturur Bu blok, bu işaretçisi çağırır,
ve x adresine tahsis eder.
Ben 'işareti de korkunç değilim.
>> Şimdi demek ne yapıyoruz olduğunu Tamam, bizim işaretçi inceleyebilirsiniz.
Yani tamam, bizim pointer ne gitmek?
Bu işareti x var.
Işareti x gidin ve onu yeniden atayabilirsiniz.
>> Peki şimdi, işareti x 35 olacak.
Yani temelde, ne zaman konum kaldırma, Tamam gidin.
Sen çizim için gidiyoruz Bu gibi resimler.
Sen çizim için gidiyoruz Nerede üzerinde oklar.
Yani bellekte bu yuvaya gitmek ve ya Bana bu değer geri ver, ya da değiştirmek.
Bu durumda, çünkü bu konum Biz bunu atıyorsanız değeri 35 olmak.
Son olarak ise bir, fark varsa, biz
ne atama yapıldı Burada başka bir şey için.
>> Peki bu müthiş tablo var.
O kadar da kötü değil.
Siz üzerinde çalışmak.
Ben gemide dışarı çekmek için gidiyorum.
Biz tamam, birlikte doldurmak için gidiyoruz?
Yani bazı kağıt, kapmak kapmak Bir ortak, çalışmaya başlamak.
Ben bir alacağım tebeşir büyük parçası.
Bir çok olacak çünkü.
TAMAM MI.
PROFESÖR: Tamam.
Ilk satır ile başlayalım.
Daha sonra, orada çocuklar başlayacağız belki biraz daha üzerinden çalışabilir.
TAMAM MI.
a ne yani b kez c eşittir?
Bu hileli bir soru değil, ben söz veriyorum.
>> ÖĞRENCİ: 4 kere 5.
>> PROFESÖR: 4 kere 5.
20.
Yani b nedir?
ÖĞRENCİ: 4.
>> PROFESÖR: Ve c?
Öğrenci: 5 arasındadır.
PROFESÖR: 5 arasındadır.
Ve sonra bu sadece gidiyor Bir, işareti b ve imi olmak,
işareti c değil mi?
Fena değil.
Yeterince basit.
TAMAM MI.
Bir sonraki Yani.
Bir durumda, bir kere c eşittir Herkes bu aşina oldu.
Herkes tanıdık mı Zaman eşittir ile?
Tamam, bütün bu olup means-- Bir için kestirme bir kere c eşittir.
Ayrıca bölümü ile bunu yapabilirsiniz, Çıkarma ile eklenmesi ile.
Bir eşittir yapabilirsiniz, veya artı c eşittir Bir artı c, eşit bir eksi eşittir anlamına gelir
c eksi c eşittir olacaktır.
Sadece sözdizimsel şeker var.
>> Yani, bu durumda, bir eşittir Bir kere c bize ne verecek?
Yine, bir hileli bir soru.
>> ÖĞRENCİ: 100.
>> PROFESÖR: 100.
Başka bir şey değiştirmek mi?
Hayır.
Belki sonunda alacak Benim adet ve işareti daha iyi.
>> ÖĞRENCİ: Tamam, üzgünüm, nasıl 100 aldın?
PROFESÖR: Tamam.
Bu yüzden, bir eşittir Zaman c nedenle bir kere c.
ÖĞRENCİ: Ah, kullandığınız previous-- bir
PROFESÖR: Evet.
Peki bu bizim en son değerlerdir.
Bunlar sizin olmalı ne Biz aşağı hareket ettikçe Tamam kullanarak.
Yani, b tek şey değişiyor, değil mi?
Yani her şeyin doldurun verelim.
B. Ne b olacak?
Olmak ya da olmamak için.
Peki bu yapıyor?
Pa yapıyor yıldızı nedir?
>> ÖĞRENCİ: pa yere kodlayın.
>> ÖĞRENCİ: Hayır, oldukça.
Yani bu bir d referanstır.
>> ÖĞRENCİ: Yani b pa elle değeridir.
>> PROFESÖR: Evet, yani pa Bir adresi, değil mi?
Yani bir olduğu için gitmek söylüyor saklanır ve bunu bu değer vermek.
Yani b nedir?
ÖĞRENCİ: 100.
PROFESÖR: 100.
Mükemmel.
Tamam, bu yüzden pc ne değişiyor edilir.
Her şey aynı kalır.
Ne pc olacak?
Basit atama.
Pc pa eşittir, ve pa nedir?
>> ÖĞRENCİ: Bir ve işareti.
PROFESÖR: Mükemmel.
Şimdi ilginç alıyoruz.
Tamam, aşağı bunu kırmasına izin.
Bu çünkü Birincisi, ne b kez c var Bu bir kolay kısmı, değil mi?
B süreleri c o--
>> ÖĞRENCİ: 500.
>> Profesörü: Evet, yani Bu kimse ne yapıyor,
's yıldızı pb ise, ne değişiyor?
>> ÖĞRENCİ: Neyle-- içinde bulunuyor
PROFESÖR: b nedir?
ÖĞRENCİ: uzayda neler Bu pb işaret ediyor.
PROFESÖR: Ve pb amaçlara yönelik işaret ediyor
ÖĞRENCİ: B.
PROFESÖR: B. Geriye tek şey değişiyor doğru, b.
Yani b kez c 500.
Yani şimdi ne gibi değişiklikler var.
Serin.
Güzel.
Siz büyük yapıyorsunuz.
Bu bir aşağı kırılma Pekala,.
C sağ değişiyor?
Bu yüzden her şeyin doldurabilirsiniz.
Görelim.
TAMAM MI.
Biz c olacak biliyorum iki sayının ürünü, değil mi?
Ne iki sayı olsa?
>> ÖĞRENCİ: A ve C?
>> PROFESÖR: Yani bir Sağ ilki için.
Bu yüzden doğru bir bir p başvuran d mi?
Bir bir puan P, bu yüzden biz biliyoruz Bu 100 kat ne olacak?
Pc noktasını ne Times?
Bir işaret.
Yani 100 kere 100 10.000 olduğunu.
Bu mantıklı mı?
Serin.
Ev streç, çocuklar, son satır.
TAMAM MI.
Burada ne değişiyor?
>> ÖĞRENCİ: A.
PROFESÖR: A. Mükemmel, bu yüzden her şey aynı kalabilir.
TAMAM MI.
Ve bir nedir?
Yani bir kere ne var?
Bu yıldız pb olduğunu.
Yani yıldız pb burada demektir pb, pb puan b.
>> ÖĞRENCİ: 500.
>> PROFESÖR: 500.
Bu yüzden 500 kez 100 var.
Bu 50.000.
Vay!
Şuna bak.
>> ÖĞRENCİ: Neden var Last-- için ve C
PROFESÖR: Üzgünüm.
ÖĞRENCİ: Tamam, evet.
PROFESÖR: Benim kötü.
Yazma sürü.
Herkes iyi?
Çok kötü değil, değil mi?
Sadece biraz sürer süre ile çalışmak.
Eğer yıkmak ise, ne her parçası anlamak
olarak aşağıdaki amaçlara söz ediyor bu kadar her şeyi ile,
Biraz onu yıkmak Evet-- Daha sonra yeniden birleşirler ve sorunlar,
ve bazı harika şeyler yapabilirsiniz.
Orada yanıtlar, ama biz bunu yaptık.
Pointer aritmetiği.
Ah.
Ellerim tüm kireçli vardır.
Yani ekleyerek veya çıkararak int işaretçisi ayarlar
işaretçi Çeşidi boyutuna göre.
Nasıl her tür hatırla Farklı bir boyutu vardır?
Bir çift veya uzun uzun isimli benzeri Yani Sekiz ve int dört ama karakter biridir.
>> Peki ne yapmak istediğinizi hatırlamak için bir şey bu--
ne kadar, sizin o kadar işaretçi değeri aslında değiştirir
bağlıdır işaretçi tipi öyle.
Bu iyi Herkes?
Ben silebilir miyim?
Biz iyiyiz?
Korku.
>> Bazı işaretçi var ise Bu oluyor ki- ben şey olmak
bir int işaretçi yapacağım.
Bu depolar.
İşaretçiyi söylemek olsaydı artı bir, bunu yapmak için neler
güncellemek için gidiyor edilir Bir int boyutuna göre bu
Bu çünkü işaretçi tipi öyle.
>> C ile, her şey Çok sıkı ve düzenlenmiş.
int işaretçi tarafından güncellemek için gidiyor bir int alacağını alan miktarı.
Bir int dört bayt.
>> Peki bu dönüşecekti?
Sadece bu dört üzerine ekliyoruz.
Şimdi gösterici Tamam göre-- olur.
Yani eğer >> bir karakter oldu ve biz işaretçi yaptım artı bir, şimdi ne olacak?
O biz davranarak started-- ise bu 0x08 var şimdi started--.
Şimdi bu olduğunu söyleyelim işaretçi, char, ve biz yenisini daha ekledi.
Ne değiştirmek istiyorsunuz?
Bir karakter Kaç bayt?
>> İZLEYİCİ: Bir.
>> HOPARLÖR 1: biri.
HEDEF KİTLE: Yani 0x09.
HOPARLÖR 1: Yani dokuz olacaktır.
Yani sadece bir şey hatırlamak.
Eğer bir tane eklemek Sadece zaman, öyle değil Bir karakter olmadıkça bir ekleme.
Bu kaç atıyor , o tür bayt
hangi biz neden buraya bu denklem.
Yani bu int kez boyutu işaretçi Çeşidi.
>> Yani biz burada örnek var.
y, bu değer, 0x4 atandı Biz y yaptım artı bir eşittir zaman.
Ne o öyle, ne x, değişmez.
Ne değişikliği yaptığı y ne olduğunu.
y saklanan adres dört tarafından güncellendi dört bayt bir int var çünkü
ve bir int işaretçi var.
>> Tamam.
Yani şimdi biz başka bir egzersiz var.
Yani soru yazdırmak ne olduğunu.
Herhangi bir fikir?
>> İZLEYİCİ: sayısı mutlu kedi karakterleri?
HOPARLÖR 1: Kesinlikle.
Yani dize ile seviyorum.
Herkes olsun mu?
Biz bunun üzerinden yürümek istiyor musunuz?
>> Evet, tamam.
Bu yüzden ben ötürü-- ne çok daha bunun gibi.
Ben gerek yok [Duyulamaz] gülünç.
>> Yani biz burada bizim dize, mutlu kedi var.
Güzel.
Biz bazı sayaç var biz takip ediyoruz.
Bu yüzden bazı karakter * işaretçisi var sadece str eşit ayarlanır.
Bu ne yapıyor bu kadar olduğunu Bazı işaretçi atama
senin dize başlangıcına.
Ben eminim, çünkü o kadar derste sözü edilen,
Bu sizi verdim dize denilen veri türü.
>> Ama gerçekten dizeleri sadece birkaçı Bir dizi * karakter gibi of--.
Bu karakter, bir demet bir işaretçi var bellekte bitişik olduğu.
Yani bu sadece setleri herhangi bir dize eşittir
Nerede tarafından belirlenen ilk karakterdir.
Yani bu sadece bazı noktayı ayarlıyor dizenin başından eşit.
Herkes orada iyi?
Serin.
>> Yani bu bizim işaretçi kaldırma edilir.
Yani aslında gidiyor Burada bize bazı değer vermek,
Bizim dizesinde konuştuğumuz söyledi.
Ve biz sürece söylüyorsun null terminatör değil.
Yani elde edene kadar devam dizenin sonuna.
Biri tarafından işaretçi güncelleyin.
Yani r, aslında birer güncellenir Her zaman bu bir karakter olduğu için,
karakter *.
>> Yani geçmesi için gidiyor.
Bu güncelleme gidiyor.
Bu çalışan ilk kez Yani, o saatte burada olacak.
Bu güncelleme gidiyor.
>> Bir de olurum.
O kadar ve benzeri bir p, y olacak ve olacak.
Biz sayacı güncelleme olacak.
O sonuna ulaştığında, onu sadece kazanılmış ne kadar yazdırır.
Evet.
>> İZLEYİCİ: Yani bu sayar Sağ olarak uzay,?
TAMAM MI.
>> HOPARLÖR 1: yani düşünün.
Bir question-- mı
>> İZLEYİCİ: [duyulamaz].
>> HOPARLÖR 1: Endişeye gerek yok.
Bu benim bunu.
Pekala, bir şey anlamak bir dizi ki,
Ayrıca, bir şekilde onu tedavi edebilir işaretçi dizileri sadece çünkü
belleğin sürekli noktalar.
>> Peki bunu aynı şekilde davranabilirsiniz.
Onları işleyebilirsiniz işaretçileri ile, çok.
Yani yerine bu yapıyor durum, benzer şey
olacağını dizi 0 1 eşittir.
>> Ancak aynı şekilde bu Bir dize belirlenir
başından itibaren ilk karakteri, bir
Bir dizi belirlenir nerede ilk unsurdur.
Çünkü biliyoruz, biz konum garanti, bu bu
Sürekli olacak hafıza blokları.
Yani bize bunu sağlar budur.
Biz sürekli biliyorum hafıza blokları.
>> Bu durumda, kaldırma So bize sadece dizi,
Tamam, başına gitmek burada senin dizi.
Yani birine eşit ayarlayabilirsiniz.
Ve bu durumda, ne olursa olsun dizi Eğer biri bunu güncelleme yaparken tipi, bir
sadece güncelleme gibi sonraki indeksi.
Bunu yapabilirim sizin için senin dizide ne olduğunu biliyorum.
Bu yüzden ne kadar biliyor işaretçinizi tarafından güncelleyin
Bunu böylece güncellemek için hangi adres Bir sonraki yuvaya konum olduğunu.
>> Yani bu sadece farklı bir yoludur dizi 0 1 eşittir yazma,
dizi 1 2, dizi eşittir dirsek 2 3 eşittir.
Bu konuda düşünmek için sadece başka bir yoludur.
Bunlar sürekli olduğundan bellekte blokları,
ya onlara başvurabilirsiniz dizi notation-- tarafından
Hangi Ben şahsen easier-- bulmak ama belki
bunu işlemek gerekir kesinlikle bellek adreslerine göre.
Ve bu o yapardı yoludur.
Benzer bir tür daha Yapabileceğiniz serin şey
sen belki bir şey karşısında Aslında hayata geçireceğiz.
>> Ben 61 kullanabilirsiniz.
Siz muhtemelen gerek yok bu konuda çok fazla endişelenmenize gerek.
Ama ilgileniyorsanız, 61 gelecek yıl alır.
Biz ev streç çocuklar konum.
Biliyorum, uzun değil.
Dinamik Bellek Allocation-- bu yüzden o birini tanıyorum
şeyler biz sırasında konuştuk Birlikte ilk bölüm,
Biz takas baktı fonksiyonu nerede oldu
Bizim ana işlevi kapsamı dışında.
Ve biz bu değerleri geçerken Bu etkili bir kopya vardı.
>> Ve takas kez bitmiş yürütülmesi, sadece bir yığın bıraktı.
Unutmayın, biz bir takas için çerçeve yığını.
Bu bırakır ve bu değerleri onunla bırakın.
Ve onlar gitmişti.
Biz bir şey yapamadık onlarla biz ve üzücü
bizim değerlerini takas edemez çünkü.
>> Ama, söz C'li olarak belleğin üzerinde çok fazla güç var.
Yani ne yapabilirim yapabilirsiniz olduğunu Burada öbek şeyler tahsis
Bu kadar orada kalacak aksi takdirde onlara.
>> Onlar iyi çocuklar gibiler.
Onlar orada kalmak.
Onlar bırakmayın.
Sen gelene kadar orada kalacağım gibi, tamam, sen uzakta gidebilirsiniz.
>> Yığına şeyler, Kim-- Oysa Onlar yaramaz çocuklar gibi değilsin.
İstediğiniz zaman Onlar sadece kaçacağız orada olmak ve sonra gittiler.
Onları geri alamıyorum.
>> Yani biz gidiyoruz o-- yığın malloc ve ücretsiz hakkında konuşmak hangi
Ben emin değilim çocuklar konuşmasında duydum.
Ve bu temelde bir yolu var çok kalıcı veri var.
Yani verileri tutabilir etrafında sürece istediğiniz kadar.
Mhm.
>> İZLEYİCİ: Eğer yığın tanımlayabilir ve yığını miyim?
Onlar şeyler koymak için yerleri gibi misin?
>> HOPARLÖR 1: Yani sen temelde konum sadece--
biz sadece belleğe bakın yolu.
Yani yığın sadece burada yerleştirmektedir Bellek, dinamik tahsis edilir
yığın atıfta bulunmaktadır çerçeveleri yığını daha
daha merkezi olduğunu Aslında çalışan fonksiyonlar.
Gerçekten denetim yok.
>> Büyük fark, sen kontrole sahip yığın üzerinde isterseniz.
Sen yığını üzerinde daha az kontrole sahip.
yığını bağlıdır fonksiyonları çalıştıran,
ve düzen içinde oldukları çalıştırın ve işler nasıl iade edilir.
Öbek ile Oysa, gibi Biz size söyleyebilirim, göreceksiniz
Tamam, ben bu değer olmak istiyorum etrafında kadar aksini söyleyeyim.
Sen ondan kurtulmak için izin verilmez.
Bunu geçersiz kılmak için izin yok.
Sen etrafında tutmak için gidiyoruz sürece sana söyleyeyim olarak için.
Siz, yığın patron olmak olsun eğer belki stack-- ise
gibi yolunuzu finagle Eğer patron olabilir.
Ama oldukça.
Ve gerçekten sadece bellek bulunuyor.
Sadece farklı yollar var anısına atıfta.
>> Serin.
Için, nasıl ki So Hafızanızı kontrol.
Bu malloc ile var olan Kullanmak almak için gidiyoruz.
Yani sadece kısa var bellek tahsisi için.
Yani tüm bu.
Diğer serin bir sürü var sonunda alloc sahip fonksiyonlar,
ve onlar farklı şeyler için stand.
Eğer depolama gerektiğinde >> Böylece ihtiyacı böylece mevcut fonksiyonu dayanmak
zaman geçerli olduğunu fonksiyonu, kaçar
Eğer hala veri var olduğunu ondan aldım, sen malloc kullanmak istiyorum.
Bu öbek üzerinde başlatmak gerekir.
Ve dediğim gibi ve tutmak Eğer orada devam edeceğiz, diyerek
yoksa bunu söylemek kadar, hangi Burada önemli şeydir.
>> Yani bir şey fark, ve Bu, tipik gerçekten önemli
Bu sizeOf olmasıdır süper kullanımı yararlıdır
tipine bağlı olarak, çünkü Makinenin çalıştırıyorsanız,
o değişen miktarlarda olabilir alır bellek.
Yani her zaman boyutunu kullanmak istiyorum Eğer bağımlı makine değilsin ki,
böylece kod olacak herhangi bir makinede çalıştırın.
>> Ve bu sadece bir parçası iyi kod yazma.
O bir makine üzerinde çalışıyorsa, ancak başkalarının,
Program ne kadar yararlı oldu?
Yani her zaman istediğiniz emin olun ve sizeof kullanın.
>> İZLEYİCİ: Yani böyle bir 10 inç [Inaudible] boyutu?
>> HOPARLÖR 1: 10 ints boyutudur.
evet.
Böylece ints boyutu döndürür bir int ne kadar sürer.
Veya karakter boyutu, nasıl çok bir karakter take yapar.
Ve sonra kaç blok Bunun istiyorsun?
>> Peki bu durumda, biz bir şey istiyorum biz 10 ints için saklayabilirsiniz.
Ve ne olursa olsun çalışacak Makinenin, hangi serin.
Peki kaç bayt olacak aslında size?
Hızlı matematik.
>> İZLEYİCİ: 40.
HOPARLÖR 1: 40.
Kesinlikle.
Yani başka büyük bir şey.
Pointer veya malloc boş dönebilirsiniz.
>> Yani yine, her zaman kontrol null döndü görmek
Eğer denemek ve onunla bir şey yapmadan önce.
Denemek ve inceleyebilirsiniz Eğer Şimdi bu işaretçi,
sadece segfault gidiyor Eğer gitti ve denedim çünkü
Eğer olmamalıdır null dokunmak.
Bu nedenle her zaman null edin.
Yine, tüm yapabilirsiniz.
>> Null döndürebilir.
Ya sen eğer boş dönersiniz alanı dışında veya herhangi bir nedenle
bazı bellek hata koştu.
Bazen sadece null döndürür.
Yani sadece bunun için kontrol etmelisiniz.
İşte tüm bu slayt söyleyerek bu.
Ve sonra ne Burada ücretsiz bir çağrıdır.
Aynı şekilde bu yüzden eğer Bir dosyayı kapatın gereken bir dosyayı açmak,
eğer malloc bellek, sen O belleği serbest gerekir.
Ve siz alacaksınız gerçekten harika şeyler yapmak.
>> Ve sen çalıştırabilirsiniz bir program var Hiç bellek sızıntısı olmadığını görmek.
Ama bellek sızdırıyor istemiyorum.
Gerçekten kötü.
Hemen pisliği şeyler.
>> Sadece programlama gibi yapmak kötü tasarım verimliliği için akıllı.
Ama sadece tür de var Bilgisayarınız için kötü.
Yani sadece ücretsiz şeyler Onları Malloc zaman.
>> Siz burada simetri görüyorum.
Süper basit.
Sadece ücretsiz ve sonra ne olursa olsun gösterici,
ne olursa olsun ismi senin gösterici olduğunu ve
Senin için onu azat ilgilenir.
Serin.
>> Sonra bu var.
Yani biz sadece gidiyoruz Bu program sayesinde yürümek.
Ve sonra siz yapılır.
>> Peki [duyulamaz] sadece ana.
Bu yüzden bazı int * işaretçisi var.
Yani bir işaretçi var Bu ints tutmak için gidiyor.
Ve kaç int o tutmak için gidiyor?
Sadece bir.
Bir int boyutu.
>> Biz görmek için kontrol edin işaretçisi nedeniyle null
Biz bir şey yapmıyoruz söylemek istiyorum, olduğunu.
Bu kötü.
Bu yüzden dışarı bazı hata yazdırmak Bellek, genellikle 1, geri
Siz olarak kullanılır.
>> Ve sonra biz, burada var Bizim işaretçi inceleyebilirsiniz.
Yani biz saklamak için gidiyoruz demektir Bize verilen yerde bir şey.
Int * işaretçi veya malloc, döner Bu kenara nerede adresi
Sizin için bellek.
Yani temelde Eğer eğer da-- veren
Bir demet düşünmek Bir mahallede evler
Eğer koymak istiyorum ki sizin mobilya olarak, malloc
Tamam gibi, sen olsun üç ev gitmek için.
Ve size verir Evin üç adresi.
>> Yani bu şu anda, bu işaretçi saklar adres,
Evinizin adresini saklar.
* Ptr araçları, tamam, ben evimde yaşıyorum.
Serin.
Ben biraz tamsayı almak gerekiyor.
>> Yani birisi için soruyorsun Şimdi size mobilya vermek.
Yani biraz int olsun.
Ve sizin işaretçi koyar nereye işaret ediyor.
>> Ve sonra sadece baskılar dışarı, sen yerde girdi.
Ve yine, referans.
Yani bu, bu gitti gibi adres ve orada ne olduğunu gördük.
Serin?
>> Ve sonra tabii bizim işaretçi özgür.
Işaretçinizi serbest unutmayın.
Null kontrol etmeyi unutmayın.
Işaretçinizi serbest unutmayın.
Sen hatırlıyorum iki şey var Bu, ya hatırlamak gerektiğini söyledi.
Evet.
HEDEF KİTLE: [duyulamaz] şeyler böyle, char * s.
Biz bu nasıl serbest hiç söylemedin?
>> HOPARLÖR 1: Hımm?
>> İZLEYİCİ: dizeleri gibi bu misiniz?
Sen dizeleri olduğunu söyledi sadece char * s gibi, değil mi?
Peki neden biz dizeleri serbest değil mi?
>> HOPARLÖR 1: sadece ücretsiz Eğer mallocing eğer.
HEDEF KİTLE: Oh, mallocing eğer.
HOPARLÖR 1: Yani malloc ve ücretsiz iki şey vardır
Eğer her zaman birlikte olması gerektiğini söyledi.
f açık, f yakın iki şey birlikte olmalıdır.
Hem bu durumda, boş olup olmadığını kontrol edin.
Evet.
>> İZLEYİCİ: Yani ücretsiz adildir Başka bir şey izin
sonra depolanacakları Bu program, onu kullandı?
>> HOPARLÖR 1: Sadece söylüyor, Tamam, ben bu işim bitti.
Bunu etrafında tutmak gerekmez.
Aksi halde, bilgisayarınız olacak sadece denemek gibi ve orada tutun.
Ve o zaman çalışır gidemem- Daha sonra bellek sorunları.
Her zaman çünkü özgür istiyorum Tamam, ben, bilgisayarınızı söyler
bellek bu nokta ile yapılır.
Bunu geri alabilirsin Benim için daha sonra kullanmak üzere.
Serin?
Evet.
>> İZLEYİCİ: Yani biz sadece% d kullanılan Bir çift çünkü geri geliyor,
ya da neden [duyulamaz] bu--.
>> İZLEYİCİ: Eğer% i kullanabilir miyim?
>> HOPARLÖR 1:% i kullanabilirsiniz.
Herhangi bir son dakika soru?
Devam et.
HEDEF KİTLE: Ben sadece bir sorum var.
Yani ptr değişken, bu- gibi, int * ptr = malloc ile,
Bu sadece olduğunu söylüyor memory-- bir yeri göstermektedir
HOPARLÖR 1: [duyulamaz] istiyor musunuz?
HEDEF KİTLE: -Öyle var boyut of-- hayır, tamam.
Ama bu sadece bir yerde işaret ediyor sadece dört bayt gibi bellek.
HOPARLÖR 1: Sağ.
Int diyor Yani boyutunu malloc, Tamam, ben kaçıp gitmek için gidiyorum,
Sizin için bellek dört bayt bulabilirsiniz.
Bu dört bulur zaman hafıza olduğunu, bu
Eğer adresi geri verir nerede başlar ve,
ve depolanan ne işaretçi, ya ptr.
İyi.
Siz çok daha az karışık bakmak Ben işaretçi hakkında konuşmak insanlar,
bu yüzden şimdi oldukça iyi hissediyorum.
>> Tamam.
Her zaman olduğu gibi, hepiniz olmalıdır Şimdi tarafından pset2 notlar aldık.
Biliyorum bazı sakat olmuştur diyor şeyler geçerli değil formülü
falan.
Eğer, tüm alıyorsanız Notların benim tarafımda geçerlidir.
Yani seni gönderebilir senin notlarının ekran.
Sadece beni de sen eğer bildirin Herhangi bir not veya bir şey eksik
mantıklı görünmüyor.
Bana gel.
>> Seninle gurur süper oldum adamlar zaten, bu yüzden o kadar tutun.
Ve haftanın iyi bir dinlenme var.
Bazı göreceksiniz eminim ofis saat Eğer.