ANDI PENG: Baiklah.
Selamat datang ke minggu empat bahagian.
Ia adalah hari yang indah di sini di New Haven
jadi saya benar-benar berfikir jarang hamburan anak-anak yang
menyertai saya untuk seksyen hari ini, terima kasih.
>> Begitu cepat, sebelum kita memulakan, agenda untuk hari ini.
Kami akan pergi ke satu Beberapa pengumuman ringkas.
Kami mempunyai jadual yang benar-benar aneh datang dalam dua minggu akan datang
atau lebih jadi kita akan pergi ke atas itu.
Kedua, saya tahu topic-- kegemaran semua orang
Saya pasti ini cair fikiran anda semasa kuliah, jangan bimbang,
Saya masih jenis tidak mendapatkannya.
Tidak mengapa.
Itu adalah jenaka.
Saya benar-benar melakukan mendapatkannya.
Tetapi saya akan memastikan bahawa anda semua mendapatkannya, juga.
Jadi, kita akan menghabiskan benar-benar, benar-benar baik jumlah
masa bercakap mengenai penunjuk hari ini.
Seperti yang anda lihat, gula-gula bercakap adalah besar hari ini.
Kami benar-benar akan menjaga bahawa- yeah, betul.
Terus mengambil gula-gula.
Saya akan lulus mereka di sekitar sekarang.
Tidak risau.
Kita akan benar-benar cuba untuk menjaga gula darah rakyat
sehingga kerana otak yang akan membakar sedikit oksigen hari ini kerana petunjuk
benar-benar, benar-benar keras.
Kemudian kita akan bercakap tentang pengurusan ingatan yang jenis adalah
dalam bidang yang sama.
Dan kami akan bergerak ke penghalaan semula dan fail
I / O yang hanya sintaks, nice perkara-perkara yang kita perlu bercakap tentang.
Dan kemudian akhir sekali, saya akan sekali lagi cuba
untuk meninggalkan seperti 10, 15 minit untuk pset4.
Itulah kerana dalam beberapa hari jadi kami akan benar-benar sejenis memberikan anda
beberapa petunjuk membantu jika anda sudah mendapat bermula pada itu.
Sejuk.
OKAY.
Jadi beberapa pengumuman untuk minggu ini akan datang.
Penggredan.
Saya sebenarnya tidak tahu pada ketika ini berapa ramai daripada anda
lelaki yang sebenarnya dalam saya seksyen ini- anda OK di sana?
OKAY.
Tetapi, bagi anda yang berada di bahagian saya,
hanya pasangan Komen pada penggredan.
>> Pertama, kerja benar-benar baik mengulas.
Orang-orang yang tidak mengulas, anda tahu siapa anda kerana anda mungkin
mendapat beberapa mata gaya dinged minggu ini.
Pastikan bahawa dalam semua anda program menambah beberapa komen.
Benar-benar, gaya adalah benar-benar mudah untuk mendapatkan mata betul skop yang.
Jadi bagi kita, hanya membuat memastikan bahawa anda jenis
menambah penerangan ringkas dalam semua program anda tentang apa yang anda lakukan.
>> Secondly-- ini adalah isu besar bagi banyak daripada TA week-- yang lepas
jadi pastikan anda memuat naik ke folder yang betul dengan betul
dinamakan program.
Dan sebab mengapa kami meminta untuk ini adalah kerana kita, dalam perjalanan penggredan,
sebenarnya menjalankan skrip pada anda Kod yang memuat turun secara automatik
semua psets anda, berjalan ujian betulnya pada semua daripada mereka,
dan kemudian memuat naik skor anda terus ke dalam gradebook itu.
Walau bagaimanapun, pada bila-bila, jika anda dinamakan program anda dengan tidak betul,
ia skru sehingga keseluruhan program untuk semua orang.
>> Dan sebagainya, secara sah, skrip yang indah ini
bahawa kita telah menulis yang tidak semua ini bagi kami, benar-benar
crash jika anda tidak mempunyai program anda dinamakan dengan betul.
Jadi hanya memuat naik ke yang betul folder, telah mereka dinamakan dengan betul,
dan kemudian kehidupan yang baik.
Saya mendapat psets anda kembali kepada anda semua sebelum ini
kerana saya dapat gred mereka dengan cepat.
Yeah.
OKAY.
Dan juga kita akan bercakap about-- Yale mempunyai benar-benar, benar-benar
jadual aneh dalam dua minggu akan datang.
Maka orang-orang di antara kamu seorang lelaki di Harvard, ini tidak terpakai.
Tetapi bagi kami anak-anak yang indah di Yale kita ada sesuatu yang dinamakan jatuh break-- maaf,
Harvard-- di mana kita mempunyai lima hari cuti sekolah.
Dan selama ini adalah indah, ia jenis messes irama pset kami
kerana psets adalah disebabkan Khamis, Jumaat.
Dan jadi jika kita tidak di sini Khamis, Jumaat, kita
tidak boleh mempunyai kerja-kerja untuk anda semua kerana pada hari Khamis, Jumaat.
>> Jadi apa yang kita akan lakukan is-- kami seperti 99% pasti ini adalah apa yang berlaku,
mungkin ada beberapa berubah tetapi saya fikir ia adalah
subtle-- ini kita akan ada-- minggu ini adalah normal.
Oleh itu, kita mempunyai bahagian kami pada Selasa diikuti dengan waktu pejabat
di seluruh negara lain dalam seminggu dan kemudian pset4 adalah kerana pada hari Jumaat.
Kemudian, seperti yang anda semua sedia maklum, sebagai Saya mengingatkan anda semua minggu lepas,
kita ada kuiz kami 0 datang pada hari Rabu.
>> Dan sebagainya, menjadi seorang pelajar saya, Saya tahu sangat sedikit daripada anda
seorang lelaki benar-benar akan bekerja pada pset5 dua hari sebelum kuiz anda.
Jadi apa yang kita akan mungkin akhirnya melakukan iaitu,
malam Isnin, kita akan untuk benar-benar, 5:30-7:00,
mempunyai kajian ringkas sesi mengenai topik yang dibincangkan.
Jelas jika ia adalah satu sesi atau Q & A mengkaji semula.
Ia akan menjadi beberapa jenis kajian bentuk yang kita akan buat
beberapa topik yang relevan untuk anda semua.
>> Dan kemudian Isnin dan Selasa malam minggu yang 8:00-11:00,
kita akan mempunyai waktu pejabat.
Waktu-waktu pejabat akan paling mungkin lebih daripada hanya datang,
meminta TA soalan anda mengenai konsep-konsep kedudukan yang keliru,
dan mereka jenis akan pergi dengan anda dan konsep ulasan kuiz.
Kuiz 0, jika anda berada dalam Isnin, seksyen Rabu,
akan rabu semasa class-- pada hari Rabu semasa kelas.
Dan kemudian jika anda berada dalam Selasa, seksyen Khamis,
akan juga semasa kelas pada hari Khamis.
Anda tidak boleh benar-benar memilih yang mana yang anda pergi ke.
Jika anda seorang Isnin, Rabu, anda perlu pergi ke hari ini.
Jika anda berada di Selasa, Khamis anda perlu pergi hingga Khamis.
Tetapi pada malam itu, kami kakitangan indah, akan
mempunyai kuiz gergasi penggredan pihak dalam yang kita akan mendapat markah itu kepadamu,
malam itu.
Pada waktu apa?
Tidak jelas, siapa tahu, tetapi ia akan kembali kepada anda dalam tempoh 24 jam
supaya anda semua mudah-mudahan mempunyai beberapa maklum balas pada hari Jumaat.
>> Dan kemudian kita mempunyai seminggu benar-benar aneh.
Jadi pset5 adalah salah satu psets paling sukar tahun.
Lelaki minta maaf.
Apa yang kami akan cuba untuk lakukan ialah kita akan mempunyai
sedikit sokongan sebenar hujung minggu itu.
Kerana, seperti yang anda semua boleh lihat, Serangga adalah kerana sebelum rehat jatuh.
Kami tidak mempunyai sokongan untuk anda semua semasa cuti musim gugur
dan dengan itu kita benar-benar jenis mahu frasa seperti ini,
mari kita ini lebih dengan, mari kita bekerja benar-benar, benar-benar keras
dua minggu akan datang, dapatkan kuiz ini dan menambah kedua-dua psets dilakukan dengan
dan kemudian kamu semua mempunyai bagus santai tujuh hari tanpa memikirkan CS.
>> Jadi untuk itu kepada berlaku, kita mungkin
akan bergerak seksyen saya untuk petang Ahad.
Ia akan difilemkan sehingga tidak ada bimbang jika anda tidak boleh datang.
Tetapi penggambaran dalam talian akan berada di sana dan boleh diakses
supaya anda semua mempunyai hari Ahad, Isnin, Selasa, untuk bekerja pada pset5.
Dan kemudian ia jatuh memecahkan dan tiada CS dan kemudian
kita kembali dan belakang dalam mengisar.
>> Tetapi ia akan menjadi minggu yang indah untuk percutian kejatuhan
dan kita benar-benar mahu menjadikannya sebagai tekanan percuma untuk semua orang yang mungkin yang
Sebab itu kita berpindah pset sebagai kena dibayar sebelum rehat kejatuhan dan bukan selepas.
Kerana it's-- Maksud saya, saya jenis rasa seperti ia membawa makna yang mempunyai
tarikh akhir selepas rehat jatuh jika ada tiada sokongan anyways semasa cuti jatuh.
Jadi ia rather-- saya fikir kita lebih suka memberi tumpuan kepada sekarang.
Adakah sesiapa yang mempunyai soalan mengenai jadual itu?
Apa-apa sahaja mengelirukan?
Yeah.
>> PENONTON: Adakah kita masih mempunyai syarahan mengenai ke-21?
ANDI PENG: Ya.
Maka pada 21, terdapat akan menjadi syarahan yang secara langsung dari Harvard.
Saya tidak tahu jika David adalah penggambaran atau jika dia benar-benar syarahan,
tetapi ia akan boleh didapati dalam talian untuk anda semua untuk mengakses.
Jadi pastikan anda mengukir sebuah jam di suatu tempat di rehat kejatuhan
supaya anda semua boleh menangkap pada kuliah itu.
Ya?
>> PENONTON: Ya.
Maaf.
Saya sampai di sini couple-- yang
>> ANDI PENG: Tidak perlu risau.
Di sini, mengambil gula-gula.
>> PENONTON: Hei, saya ditangkap itu.
Jadi hanya untuk menggulung, bukan esok tetapi Rabu selepas itu, kami mempunyai kuiz.
ANDI PENG: Betul.
PENONTON: Dan ia akan adalah- apa yang format kuiz?
ANDI PENG: Oh.
Jadi kami akan menghantar e-mel yang meliputi semua yang lebih mendalam.
Tetapi, pada dasarnya, ia hanya meliputi topik asas telah dilindungi
pada separuh pertama semester.
Kami akan mempunyai sesi kajian dan soalan dan jawapan jadi tidak ada kebimbangan tentang itu.
Tetapi kita akan pergi ke atas itu juga.
PENONTON: Adakah ia akan menjadi, kita membawa komputer dan kod kami there--
ANDI PENG: No.
Ia akan menjadi kamu menulis dan menjawab soalan dengan tangan.
>> PENONTON: Oh.
>> ANDI PENG: Jadi kami akan memberikan amalan keluar dan barangan
supaya anda semua mungkin mahu mungkin pergi kembali dan menulis semula Mario dengan tangan hanya
memastikan anda semua mempunyai idea bagaimana untuk melakukannya.
Kerana kadang-kadang apabila anda menulis dengan tangan anda
lupa koma bertitik dan barangan dan itu benar-benar buruk.
PENONTON: Tidak akan yang menjadi [didengar]?
Seperti, anda mendapat koma bertitik pada your--
>> ANDI PENG: Ya dan tidak.
Kami akan bercakap lebih mendalam mengenai bagaimana susun atur kuiz adalah
dan bagaimana kita akan gred.
Tetapi pada dasarnya, hanya tahu bahawa format umum akan menjadi anda
seorang lelaki sama ada mentafsirkan code-- menjawab soalan-soalan asas.
Jika saya bertanya kepada anda, apakah perpustakaan?
Kalian harus tahu apa yang perpustakaan tidak dan tuliskannya.
Atau saya boleh katakan, menulis program yang mencetak Hello World pada skrin.
Kalian akan menulis, int utama tidak sah printf hello koma bertitik dunia.
Yeah.
>> PENONTON: Jadi ia tidak akan berada dimana-mana [didengar]
tahap kesukaran masalah yang ditetapkan?
>> ANDI PENG: No.
No.
Kami won't-- yeah.
Tulis keseluruhan daripada permainan 15 dalam 20 minit, pergi.
Tidak, ia tidak akan itu.
No.
PENONTON: OK.
Jadi itulah Rabu.
Sepanjang minggu kami juga telah masalah yang paling sukar ditetapkan?
ANDI PENG: No.
Jadi masalah yang ditetapkan ia disebabkan hari sebelum rehat jatuh.
The schedule-- e-mel sebenarnya menghantar
20 minit yang lalu mengenai semua ini.
Jadi anda semua hanya memeriksa e-mel anda.
Ia akan berada di sana.
Yeah.
Tidak risau.
Sejuk.
>> Sebarang pertanyaan umum mengenai pengumuman, penggredan, kuiz,
sebelum kita menyelam terus ke dalam petunjuk yang akan menghabiskan makanan
majoriti seksyen zaman kita hari ini?
Sejuk.
Baiklah.
Begitu juga kalian semua menonton lovely-- ini Saya tidak tahu apa yang mereka memanggilnya.
Perkara yang mana claymation yang meniup sendiri sehingga kerana ia
tidak menggunakan penunjuk dengan betul.
Nah, program anda akan mungkin meletupkan dirinya sehingga jika anda
tidak menggunakan petunjuk betul juga.
Oleh itu, kita akan membuat memastikan bahawa tidak berlaku.
>> Hari ini kita akan melakukan berseronok penunjuk.
Saya akan pergi ke atas perkara-perkara lancar seperti yang saya fikir
mungkin dalam tempoh masa yang kecil.
Tetapi terdapat hanya begitu banyak untuk menampung bahawa saya benar-benar mahu anda semua,
jika anda tidak memahami sesuatu, untuk tidak hanya beritahu saya terus pergi.
Kerana jika anda tidak memahami sesuatu,
anda mungkin tidak akan memahami apa-apa yang saya katakan selepas itu.
Oleh itu, sila berhenti saya dan bertanya soalan.
Kerana ia semua jenis daripada bola salji bersama-sama.
Seperti, petunjuk mengarah ke memori utama ke dalam perkara-perkara lain.
Dan jadi jika anda tidak memahami petunjuk, menghalang saya dan kami akan mencari penyelesaiannya
dan kehidupan akan menjadi halus.
>> Sejuk.
Jadi berapa ramai daripada anda semua dalam kuliah, Ketika Daud disebut petunjuk,
otak anda jenis bertukar menjadi Jell-O?
Yeah.
Yang baik.
Kami akan cuba untuk de-agar-agar otak anda hari ini.
Kita akan benar-benar secara sistematik melalui apa sebenarnya penunjuk adalah,
apa yang ia lakukan, dan bagaimana kita menggunakannya.
>> Jadi semua pointers-- supaya biasanya dengan pembolehubah
kita telah menggunakan dalam coding, seperti pembolehubah seperti integer atau tali
atau terapung, mereka semua pada dasarnya nilai yang diberikan kepada mereka
dan juga sebagai alamat menunjuk kepada nilai itu.
Jadi, saya akan menarik ini sekarang.
Kami mempunyai hampir tidak ada kapur tetapi itu OK.
>> Jadi, sebagai contoh, biasanya jalan yang kita ada
telah menggunakan pembolehubah ialah kita mewujudkan nama pembolehubah jenis int, mari kita
katakan.
Jadi di sini kami ada int x dan kami Memulakan int bahawa untuk 50.
Jadi di sini dalam blok ini ingatan pada kita komputer kami telah disimpan beberapa 50.
Jadi di mana petunjuk mula bermain adalah bahawa komputer anda itself-- seperti di sini,
fizikal di dalam pemacu keras dalam RAM computer-- saya
ia hanya mempunyai jumlah terhad memori.
Anda tidak boleh hanya terus menyimpan perkara di atas perkara di atas perkara
dan mereka semua.
>> Jadi cara kita dinamik memperuntukkan memori dapat menyimpan apa yang kita mahu
dan akses, adalah dengan mempunyai petunjuk.
Cuba bayangkan, dalam ruang ingatan anda, betul.
Jika ini adalah RAM anda komputer, anda mempunyai ini bit sedikit
atau blok atau bait memori dalam yang- ini adalah hanya sedikit
blok yang telah diperuntukkan pada cakera keras atau RAM komputer anda,
dan dalam setiap orang-orang blok anda boleh menyimpan perkara yang berbeza.
Jadi, sebagai contoh, satu pelbagai dalam contoh ini
di sini ialah satu bait yang yang terdiri daripada lapan bit.
Bilangan ini berubah berdasarkan kepada sistem operasi komputer anda.
Sebagai contoh, berapa ramai daripada anda mempunyai mendengar 32-bit berbanding 64-bit operasi
sistem?
Tepat sekali.
>> Jadi semua yang berkata adalah bahawa memory-- yang
bahawa cara bahawa komputer anda menguruskan memori adalah berbeza.
Itulah sebabnya ia benar-benar penting untuk memahami
mengapa fungsi memori sendiri dan bukan daripada memberi perhatian kepada nombor.
Oleh itu, kita tidak benar-benar mengambil berat berapa besar array ini
adalah, kita hanya perlu untuk mengambil berat tentang berapa besar yang kita perlukan int menjadi,
berapa besar do kita memerlukan rentetan menjadi, berapa besar adalah penunjuk?
OKAY.
Jadi ia akan menjadi banyak berat, maklumat padat.
Saya akan memberikan anda semua yang beberapa detik-detik pelepasan komik di sini.
Kalian semua akan dapat untuk memahami perkara ini sekarang.
Kerana kita tahu bahawa petunjuk adalah alamat,
dan mereka adalah berbeza daripada pembolehubah.
OKAY.
Sejuk.
Jenaka CS adalah yang terbaik, ya?
>> Jadi cara kita pergi tentang mewujudkan penunjuk
adalah sejenis sangat khusus sintaksis.
Seperti mewujudkan apa-apa jenis pembolehubah, ia
akan menjadi tertentu Sintaks kita gunakan untuk menciptakannya.
Oleh itu, apabila mengisytiharkan apa-apa penunjuk, penunjuk hanya essentially--
Saya rasa penting sebahagian daripada petunjuk ialah
bahawa manakala pembolehubah yang mempunyai kedua-dua nilai dan alamat,
penunjuk alamat.
Nilainya adalah alamat.
Jadi ia adalah alamat yang disimpan di alamat yang berbeza.
Jika itu membuat apa-apa rasa.
Kami akan pergi ini dengan lebih terperinci, tetapi itulah bentuk generik
daripada why-- bagaimana pencetak yang disimpan.
>> Jadi cara yang anda buat penunjuk adalah dengan melakukan apa sahaja jenis data
bahawa penunjuk yang sedang berlaku sebagai rujukan dan then--
dengan star-- dan kemudian nama penunjuk.
Jadi di sini, jika kita mahu untuk mewujudkan penunjuk yang
menunjuk ke arah integer, dan kami mahu nama penunjuk sebagai x,
yang kita akan lakukan int bintang x.
Ya?
>> PENONTON: Dan jadi jika baris berikut anda
melakukan int x, akan int bintang x menunjukkan lokasi x
anda menentukan selepas itu?
>> ANDI PENG: Soalan Betul yang baik.
Kami akan pergi ke dalam ini pasangan slaid kemudian.
Yeah.
Dan perkara itu sama dengan char dan perkara terapung sama.
Hanya tahu bahawa pada ketika ini kami telah mencipta penunjuk,
kita belum benar-benar menetapkan ia menyamai apa-apa lagi.
Kami sebenarnya tidak dirujuk itu.
Perkara yang sama di sini apabila anda membuat pembolehubah,
anda telah membuat nama pembolehubah, anda belum benar-benar menetapkan nilai kepadanya.
Perkara yang sama di sini.
>> OKAY.
Jadi bagaimana kita menetapkan nilai kepada petunjuk?
Ia dengan rujukan dan dereferencing.
Jadi cara yang kita boleh rujukan yang varia-- penunjuk, pada dasarnya
kita kembali alamat dalam ingatan yang berubah-ubah yang disimpan.
Jadi, jika saya mempunyai pointer-- Saya akan menarik ini sekali kita dapat slaid seterusnya,
tetapi hanya tahu bahawa, pada dasarnya, yang dan- Ampersand
dan variable-- semua yang tidak adalah memberitahu anda alamat
di mana sesuatu yang disimpan.
Dan dereferencing adalah sebaliknya itu, yang hanya bintang.
Bintang itu hanya memberikan anda yang sebenar data yang disimpan di alamat itu.
>> Jadi salah memberikan anda alamat disimpan di alamat,
yang lain memberikan anda yang sebenar nilai yang disimpan di alamat.
Jadi kedua-dua mereka memberi kamu perkara-perkara yang berbeza.
Sekali lagi, slaid adalah semua dalam talian jadi tidak ada kebimbangan
jika anda semua tidak boleh menyalin bawah ini dalam masa.
>> Jadi mari kita lihat pada contoh ini di sini.
Jadi kita telah mendapat gergasi pelbagai memori di sini, bukan?
Di mana kita hanya perlu blok memori, atau bait ingatan,
di mana kita boleh menyimpan perkara yang berbeza.
Mari kita katakan ini adalah mata alamat dalam ingatan.
Jadi bila-bila masa anda mempunyai - lihat 0x itu, semua yang memberitahu anda adalah bahawa
itu adalah satu digit perenambelasan.
Seperti yang anda semua sedia maklum, nombor boleh ditempatkan di pangkalan yang berbeza.
Asas 10 adalah bagaimana kita biasanya mentafsir nombor.
Terdapat juga asas 2, yang merupakan binari.
Dan dalam kes ini, perenambelasan adalah asas 16.
Ia hanya cara yang berbeza untuk mengatakan dari sifar hingga 10-- atau sifar hingga sembilan
dan kemudian juga A, B, C, D, E, F. Juga rujukan nombor yang berlainan.
Daud lebih ini dalam kuliah secara ringkas.
Jika anda semua keliru, hanya google ia.
Ada cara yang benar-benar mudah untuk belajar apa digit perenambelasan adalah.
Semua itu benar-benar berkaitan sekarang adalah untuk anda
semua untuk tahu bahawa digit perenambelasan dalam C
memberitahu atasmu, yang biasanya memberitahu anda bahawa itu penunjuk.
Atau itulah lokasi.
>> Jadi dalam contoh ini di sini, int x sama 5.
Kami mewujudkan integer-- yang maaf, pembolehubah jenis
integer dan kami Memulakan ia hingga 5.
Jadi di sini di atas kapal ingatan kita, kita boleh melihat bahawa x ialah di alamat 0x0
dan nilai yang telah anda ' yang disimpan di dalamnya adalah 5.
Yang perlu masuk akal kepada semua orang, bukan?
OKAY.
>> Kemudian apa yang telah kami lakukan dalam baris kedua kod
adalah bahawa kita telah membuat penunjuk jenis int.
Itulah yang int penunjuk bintang lakukan.
Dan yang sama dengan yang Ampersand x adalah memberi anda alamat sesuatu.
Jadi alamat x dalam contoh ini adalah 0x0.
Dan sebagainya alamat yang sedang disimpan dalam penunjuk itu.
Adakah ini masuk akal untuk semua orang?
>> Jadi berfikir this-- memikirkan pointers-- sini
di Yale kami mempunyai sistem Peti Surat di mana setiap pelajar mempunyai mailing yang
menangani mana anda boleh pergi ke dalam ruangan bawah tanah LW
dan anda hanya boleh pergi dan merebut apa sahaja yang anda perlukan dari alamat tersebut.
Perkara yang sama berlaku di sini di komputer.
Anda mempunyai ini bytes memori yang anda boleh menyimpan maklumat ke dalam,
tetapi untuk mengetahui cebisan maklumat
Perlawanan daripada apa yang anda cuba untuk mencari dan di mana, anda perlu penunjuk yang
memberitahu anda bagaimana untuk pergi ke sana.
>> Jadi, sebagai contoh, bagi saya, Peti Surat saya, Saya mempunyai nombor lima digit tertentu.
Itulah alamat saya.
Jadi saya secara fizikal boleh pergi ke ingatan, Saya boleh melihat alamat,
Saya boleh pergi ke bahawa Peti Surat dan mengakses data di dalam.
Adakah ini masuk akal untuk Semua orang Komputer anda pada dasarnya
melakukan perkara yang sama.
>> Jadi semua penunjuk lakukan ialah ia hanya mewujudkan ingatan yang
dan data ingatan sebenarnya alamat sesuatu yang lain.
Kemudian anda boleh pergi dan mendapati bahawa.
Semua orang yang baik?
Semua orang baik dengan saya setakat ini?
OKAY.
Sejuk.
Baiklah.
Jadi hampir perkara yang sama seperti sebelum ini.
Oleh itu, kita perlu, pertama, pembolehubah dipanggil x di mana case--
Saya akan menukar nilai ini hingga 5.
Mari kita katakan alamat ini dalam ingatan adalah 0x0.
00.
Yang besar.
>> Sebab itu, pada kedua kami baris kod, kami
akan mewujudkan penunjuk dipanggil penunjuk ptr.
Dan alamat itu, mari kita hanya mengatakan bahawa 0x01 dalam ingatan.
Dan kita benar-benar mahu store-- Ampersand
x memberikan anda alamat apa x adalah.
Dan alamat x adalah 0x00.
Jadi penunjuk ini sekarang sebenarnya mempunyai alamat
disimpan sebagai nilai apa x adalah.
Setiap orang dengan saya setakat ini?
Sejuk.
>> Dan kemudian, jalan yang kita akan menyalin itu,
jika kita akan mengisytiharkan dan memulakan satu lagi blok memori jenis int.
Betul?
Ini akan menjadi int.
Ia akan dipanggil salinan.
Dan anda akan get-- supaya penunjuk bintang memberikan anda
data sebenar dari alamat tersebut.
Ampersand ini memberikan anda alamat, bintang memberikan anda data.
Oleh itu, data pada penunjuk.
Penunjuk ini menunjuk ke 5.
Dan supaya fungsi ini sini-- bintang pointer--
pergi, mendapat apa yang di blok ini dan kedai di sini.
Semua orang yang jelas mengenai bagaimana yang berlaku?
>> There-- jadi kedua-dua pengendali betul yang Ampersand dan star-- yang
hanya melakukan perkara yang berbeza apabila digunakan pada petunjuk.
Satu mendapat anda alamat, satu membawa anda nilai sebenar.
Jadi pastikan apabila anda semua coding yang anda tidak mengelirukan dua
kerana mereka jauh berbeza.
Di sini kita mempunyai contoh yang bagus 0x01 a.
Itu benar-benar baik sebilangan kecil untuk diingati.
Dalam komputer anda yang sebenarnya anda akan mempunyai
beberapa keldai gergasi itu adalah sesuatu itu bukan bagus, tidak menyenangkan.
Ia akan menjadi beberapa nilai sampah.
Dan sebagainya ia akan benar-benar, benar-benar merosakkan program anda.
Ia amat penting sekarang yang kita ada
asas-asas selama why-- seperti, apa yang secara fizikal berlaku apabila
anda menjalankan orang-orang blok kod.
Everyone-- ya?
>> PENONTON: Jadi int x sama int salinan?
>> ANDI PENG: Tiada kerana, dalam kes ini, int x-- nilai x-- sama dengan 5, bukan?
Dan kemudian int salinan sama dengan 5.
Jadi jika anda adalah untuk menyamakan mereka untuk antara satu sama lain kerana mereka integer,
ya, mereka akan menilai kepada benar.
Tetapi jika mereka tali dalam ingatan, seperti salah satu yang dilakukan Daud, ketika contoh,
itu berbeza kerana mereka rujukan
alamat tempat dalam ingatan dan mereka akan sama dengan yang salah.
>> Jadi di sini akan menjadi kenyataan kerana anda perbandingan langsung values-- integers--
tetapi yang lain anda titik rujukan.
Kerana tali adalah dalam array, dan all-- kita akan bercakap tentang ini later--
tetapi lokasi pada dasarnya hanya penunjuk kepada sekumpulan aksara dalam ingatan.
Jadi mereka adalah sedikit berbeza.
Tetapi dalam kes ini, ya, anda boleh berbuat demikian.
>> PENONTON: Bolehkah anda menjelaskan alamat salinan?
ANDI PENG: Ya.
Jadi itulah saya just-- tidak mengisi dalam nilai
tetapi ia hanya beberapa rawak lain nilai sampah yang kita tidak mengambil berat tentang.
Kerana apabila anda memulakan program anda sedar bahawa kita tidak benar-benar
benar-benar peduli apa yang alamat sebenar adalah,
kita hanya perlu tahu apa yang di alamat.
Yeah.
>> PENONTON: Bintang itu sebelah int pada baris kedua, itu than-- berbeza
ANDI PENG: Ya.
PENONTON: --Di penyahrujukan dan rujukan bintang?
ANDI PENG: Ya.
Jadi pengarang C-- sesiapa memutuskan untuk menulis bahasa C--
tidak begitu pintar.
Mereka tidak begitu bijak dalam usaha untuk memahami mengapa kita perlu melakukan ini.
Jika ia adalah saya, saya akan pasti menggunakan dua watak yang berbeza.
Tetapi mereka telah memilih untuk menggunakan salah satu yang sama.
>> Jadi bintang selepas int, yang memberitahu komputer
yang anda kira-kira untuk mewujudkan penunjuk.
Tetapi jika anda cuba untuk dereference something-- dengan kata lain,
pergi ke alamat dan tarik data dari somewhere--
bintang yang digunakan berbeza.
Jadi anda semua hanya berhati-hati kira-kira bukan main-main sehingga kedua-dua kegunaan.
Sejuk.
Ya?
>> PENONTON: Jadi hanya memberitahu pihak memastikan bahawa saya following--
>> ANDI PENG: Totally halus.
>> PENONTON: --in sebelah kiri untuk slaid itu, kita melakukan satu perkara yang kita tahu.
Kami mengaku integer [Didengar] yang sama dengan 5.
ANDI PENG: Ya.
PENONTON: Betul.
Dan kemudian kita mempunyai satu perkara int bintang dan yang mengatakan bahawa, OK, jenis suka kita
diisytiharkan integer, sekarang kita mengisytiharkan penunjuk.
ANDI PENG: Betul.
Betul.
>> PENONTON: Betul?
Dan penunjuk kita ptr.
>> ANDI PENG: Ya.
Nama penunjuk adalah ptr.
Penunjuk.
PENONTON: Dan kemudian ia sama nx yang hanya memberitahu C
bahawa ia mahu untuk mengakses nilai pada integer x-- nilai yang integer x
telah diberikan.
>> ANDI PENG: Berhati-hati kerana Ampersand x sebenarnya
memberitahu atasmu, komputer yang anda mahu tarik alamat apa x ialah.
Jadi Ampersand memberikan anda alamat, bintang memberikan anda nilai.
>> PENONTON: Oleh itu, kita mahu alamat.
Katakan x adalah at--
ANDI PENG: Kami sebenarnya tahu apa yang x ialah, bukan?
Kerana kita tahu bahawa x was-- Saya membuat ini ke atas tetapi mari kita hanya mengatakan,
sewenang-wenangnya, ia adalah 0x00.
Betul?
Jadi kita tahu alamat adalah 0x00, Dan setelah kita pergi dan Ampersand x,
kita tahu bahawa yang perlu menilai kepada 0x00.
Itulah sebabnya kami disimpan yang sebagai nilai penunjuk kami.
Adakah ini masuk akal?
>> PENONTON: Ya.
Dan salinan pergi ke dereference ptr--
ANDI PENG: Betul.
PENONTON: --which adalah penunjuk yang kami telah
mengisytiharkan bahawa memberitahu kita alamat integer x.
>> ANDI PENG: Ya.
>> PENONTON: Dan dalam hal ini satu kes, ptr bintang ini
bersamaan dengan nilai x yang sama dengan 5.
>> ANDI PENG: Betul.
>> PENONTON: Cool.
Dan itu adalah cara yang lebih mudah untuk mendapatkan itu atau ialah bahawa satu-satunya way--
ANDI PENG: Jadi sekarang ia tidak kelihatan sangat logik untuk kita
menghabiskan semua masa ini melakukan ini perkara super rumit apabila
semua yang kita lakukan hanya membuat dua integer dengan nilai 5, bukan?
Ia tidak masuk akal.
Tetapi apabila kita akan pergi ke atas peruntukan memori dan- kita akan
pergi mengapa ini mungkin berguna dan bermanfaat di kemudian hari.
Percayalah apabila saya mengatakan bahawa kita tidak hanya mewujudkan fungsi-fungsi ini sewenang-wenangnya untuk anda
lelaki untuk belajar kerana kami cuba untuk main-main dengan anda.
Ada sebenarnya menggunakan untuk semua ini perkara dan kita akan bercakap tentang mereka.
>> PENONTON: Awesome.
>> ANDI PENG: Ya.
>> PENONTON: [didengar].
>> ANDI PENG: Soalan yang baik.
>> PENONTON: [didengar].
>> ANDI PENG: Ia bukan.
Ia benar-benar tidak.
PENONTON: pembolehubah --two yang juga sama [didengar].
OKAY.
>> ANDI PENG: Ya.
OKAY.
Sebelum saya bergerak ke atas, semua orang jelas?
Saya tahu Taylor, anda mendapat dalam sedikit lewat.
Tidak mengapa.
Ia dalam talian.
Anda akan menonton 20 pertama minit dan anda akan menjadi semua yang baik.
OKAY.
Sejuk.
>> Baiklah.
Jadi ini adalah asasnya sejenis perkara yang sama bahawa kita hanya lakukan.
Ia hanya dalam bentuk grafik.
Jika anda untuk mengesan apa yang Kebetulan, int x sama 5,
semua yang kita lakukan pada ketika ini adalah mewujudkan pemboleh ubah bernama x jenis int.
Kami akan menyimpan nilai 5 dalamnya.
Tidak ada penunjuk kerana kita tidak mempunyai sebenarnya dicipta penunjuk lagi, bukan?
Dan kemudian di akhirat line, penunjuk int bintang,
itulah di mana kita sebenarnya fizikal mewujudkan penunjuk
dan kami menetapkan bahawa sama dengan, atau rujukan
penunjuk, untuk Ampersand x.
Yang mana mana sahaja di memori ini kebetulan berada.
Saya tidak benar-benar mengganggu membentuk nilai masa ini.
Tetapi dalam kes ini, ketika itu anda akan sama dengan itu.
>> Dan kemudian di bawah sana, bintang penunjuk adalah penyahrujukan itu.
Itulah di mana kita berada menarik maklumat.
Jadi nilai yang pada x sebenarnya akan menjadi sama dengan 35.
Jadi pada ketika ini, kami telah pada dasarnya hanya reinitialized x 35
tanpa benar-benar menyentuh x.
Hanya melalui penunjuk yang menunjuk ke x,
kita sebenarnya boleh mengubah apa yang x adalah.
Saya akan menarik ini keluar juga.
>> Jadi di sini kita telah membuat alamat beberapa rawak di sini.
Mari kita katakan 0x00 lagi.
Mari kita hanya mengatakan bahawa alamat.
Dan kami telah membuat integer bernama x dan nilai yang saya telah diberikan kepadanya adalah 5.
Dalam baris kedua, int pointer-- jadi sekarang kita ada
mendapat perkara kedua ini di sini dipanggil pointer-- yang
dan kita akan supaya- mari kita hanya mengatakan itu beberapa lain alamat ingatan rawak.
>> Oleh itu, kita akan menetapkan ini sama dengan apa yang.
Dan penunjuk ini akan menunjuk ke arah nilai x
Kemudian, jika kita mengubah the-- jika kita melakukan penunjuk bintang,
yang akan di nilai penunjuk kami.
Dalam kes ini, ia akan mengesan ini arrow kepada nilai ini x
dan ia akan berubah kepada 35.
Berkesan, kita hanya berubah x tanpa menyentuh x.
Melalui hanya rujukan petunjuk, kita boleh pergi dan menukar nilai x.
Adakah ini masuk akal?
>> Jadi dengan cara ini, kita sebenarnya boleh menamakan semula dan rechange dan memberi semula nilai-nilai
kepada perkara-perkara yang kita tidak benar-benar membuat diri kita sendiri.
Adakah ini masuk akal untuk semua orang?
Sejuk.
OKAY.
Grafik begitu kompleks di sini.
Pergi baris demi baris.
Pada asasnya, hanya melakukan yang tepat Perkara yang sama bahawa saya hanya lakukan.
Sebelum saya meneruskan, saya benar-benar mahu untuk hanya membuat
memastikan semua orang benar-benar jelas mengenai perkara ini.
Jadi di sini, kod yang kita ada adalah int yang bersamaan 3, b sama dengan 4, c sama dengan 5.
Oleh itu, kita telah membuat tiga integer bernama a, b dan c yang sama dengan 3, 4 dan 5.
Dan kemudian kami mewujudkan tiga petunjuk ketika itu kepada setiap pembolehubah-pembolehubah.
>> Dan sekarang kita akan untuk pergi ke dasarnya
apa yang berlaku apabila anda beroperasi pada mereka.
Jadi menarik mereka keluar.
Ambil sehelai paper-- saya tidak tahu jika anda semua semua mempunyai kertas,
tetapi orang-orang di antara kamu yang tidak, mungkin meminjam dari orang-orang di antara kamu yang melakukan.
Mengambil helaian kertas dan pergi baris demi baris.
Dan pada setiap operasi yang anda lakukan, Saya mahu anda semua untuk benar-benar menulis
apa yang a, b dan c pada ketika ini.
Dan apakah alamat, apakah petunjuk yang menunjukkan a, b dan c
pada ketika ini?
>> Dan kemudian mudah-mudahan ini akan jenis langkah anda semua
melalui bagaimana untuk berfikir tentang petunjuk.
Kami tidak akan pergi melalui semua daripada mereka.
Mungkin saya akan memberikan anda five-- seperti, tiga minit.
Bermula pada hari pertama sahaja.
Oh.
Maaf.
>> PENONTON: Dalam baris kedua, mengapa bukan bintang [didengar] berubah-ubah?
>> ANDI PENG: Ingat dalam pengendali, pada minggu pertama,
kita bercakap tentang bagaimana jika anda melakukan setaraf plus,
yang hanya bermakna yang sama tambah c.
Dalam ini case-- jadi ini adalah satu lagi cara di mana bintang boleh digunakan.
Selain rujukan dan mengisytiharkan petunjuk,
ingat bahawa ia juga sebagai pendaraban.
Jadi dalam kes ini, ia akan hanya menjadi sama kali c.
Itu hanya kerana berbeza cara bertulis itu.
>> PENONTON: a sama kali c.
ANDI PENG: Ya.
>> PENONTON: Apa maknanya jika ia berkata surat Ampersand?
>> ANDI PENG: cara Ampersand anda akan bahawa- anda
pergi ke tempat yang penunjuk adalah menunjuk dan menarik alamat.
Jadi Ampersand memberikan anda alamat, bintang memberikan anda nilai sebenar di sana.
>> PENONTON: Adakah kita membina baris demi baris?
>> ANDI PENG: Anda membina baris demi baris.
Jadi hanya pergi satu baris pada masa dan then-- anda
tidak perlu bimbang tentang penamat segala-galanya.
Mari kita cuba untuk mendapatkan melalui mungkin dua, tiga baris
dan kemudian kami akan mengadakan dan menyelesaikan ini.
>> Ia sama sekali OK jika anda semua hilang.
Ini adalah satu konsep yang benar-benar keras.
Jika anda semua bimbang kelas pergi seperti ini seperti Daud berkata,
ia tidak.
Kami mencapai puncak konsep kesukaran
dan kemudian ia akan mencerun ke bawah.
Jadi anda semua berada hampir di sana.
Kami mempunyai banyak gula-gula untuk mendapatkan anda semua melalui bonggol.
Saya rasa cukup banyak selepas kejatuhan memecahkan kami akan lebih bonggol
dan kehidupan akan menjadi baik lagi.
Jadi tidak ada kebimbangan sama sekali.
Baiklah.
Saya akan memberikan anda semua 20 saat lagi untuk mengakhiri.
OKAY.
Baiklah.
Mari kita tikaman di ini.
Seperti yang anda semua memberi saya jawapan, Saya hanya akan menaip mereka masuk.
Dan mudah-mudahan we-- boleh?
Saya benar-benar tidak boleh taipkan ia di dalam.
Saya akan menarik ia di atas kapal.
>> Jadi di sini selaras pertama ini kita mempunyai sama b bintang c.
Juga Elliot dibesarkan benar-benar, benar-benar tempat yang baik.
Oleh kerana saya terlupa bahawa di samping dua cara yang boleh kita menggunakan simbol bintang,
ada sebenarnya cara yang ketiga.
Pendaraban.
Dan jadi hanya tidak terkeliru kerana itu adalah cara pertama menggunakan bintang.
Ia hanya memberitahu komputer yang saya kira-kira untuk mewujudkan penunjuk.
>> Cara kedua dengan melakukan bintang penunjuk anda,
yang memberitahu penunjuk yang anda mahu untuk mengakses data pada penunjuk itu.
Dan kemudian, sudah tentu, ada pendaraban hanya mudah
antara dua nombor yang memberitahu anda yang saya mahu membiak kedua-dua.
Jadi ada banyak cara kita boleh menggunakan simbol bintang.
Jangan keliru.
Hanya pastikan bahawa anda semua faham apa yang ketiga-tiga mereka
lakukan.
>> Jadi dalam baris pertama ini, yang sama b kali c.
Jadi mari kita pergi melalui apa ialah, apakah b, apa yang c?
Dan apakah penunjuk daripada itu, penunjuk kepada b, dan penunjuk kepada c?
Apakah mereka semua menyamai?
OKAY.
>> Oleh itu, kita mulakan dengan bersamaan 3, b sama dengan 4, dan c sama dengan 5, bukan?
Jadi selepas itu baris pertama, boleh seseorang beritahu saya apa yang adalah?
Yeah.
Jangan ragu untuk hanya melaungkan jawapan.
20.
Yang baik.
Apa yang b?
>> PENONTON: 4.
ANDI PENG: Apa c?
PENONTON: 5.
ANDI PENG: Yay.
Yang baik.
Apakah pa, pb, dan pc?
>> PENONTON: 000.001 dan 002?
ANDI PENG: Ya.
Hati supaya sesuatu soal silap mata tetapi tidak benar-benar kerana di sini saya
menarik keluar kenangan yang sebenar.
Tetapi kerana, sebagai contoh, kita tidak benar-benar tahu apa nombor-nombor tersebut adalah,
kita hanya boleh mengatakan Ampersand.
Saya tidak tahu jika saya boleh menarik Ampersand yang.
Ia like-- bagaimana anda melakukannya?
>> PENONTON: Seperti yang menerima lapan.
>> ANDI PENG: Seperti yang lapan.
Macam itu.
OKAY.
PENONTON: Bingo.
>> ANDI PENG: Killing ia.
Jadi Ampersand, anda hanya boleh berbuat demikian.
Kerana kita tidak benar-benar peduli apa nilai yang
adalah, dan ia beberapa lama nilai keldai anyways,
kita menggunakan hanya giong untuk mengatakan Ampersand a.
Kemudian apa yang pb?
PENONTON: [didengar].
ANDI PENG: Ya.
Sejuk.
Baiklah.
Baris pertama mudah.
Kami mendapat ini.
Penunjuk mudah.
Tidak mengapa.
>> Baris kedua.
Dan sebagainya bintang sama adalah sama Perkara sebagai berkata yang sama kali c.
Ia hanya cara yang lebih mudah daripada menulis.
Oleh itu, kita tidak cuba untuk membuat titik atau apa-apa di sini.
Yang dilakukan dengan baris pertama.
Apakah itu pada baris kedua selepas anda melakukan sama kali c?
>> PENONTON: 100?
ANDI PENG: Ia 100.
Yang baik.
Bagaimana pula b?
>> PENONTON: [didengar].
>> ANDI PENG: Bagaimana pula c?
>> PENONTON: [didengar].
>> ANDI PENG: Dan bagaimana pula petunjuk?
Adakah they-- yang sama, bukan?
OKAY.
Sekarang garis ketiga.
Sedikit lebih sukar.
b sama bintang pa.
Bolehkah seseorang beritahu saya, pertama, apakah bintang pa sama?
>> PENONTON: Ia adalah nilai yang disimpan di.
ANDI PENG: Tepat sekali.
Dan apa yang nilai yang disimpan di?
>> PENONTON: 100.
>> ANDI PENG: OK.
Jadi apa yang akan selepas melaksanakan bahawa baris kod?
>> PENONTON: [didengar].
>> ANDI PENG: Bagaimana dengan b?
>> PENONTON: 100.
>> ANDI PENG: Ya.
Dan kemudian semua yang lain adalah cukup banyak berubah, bukan?
Kerana kami tidak disentuh.
Sejuk.
Baris keempat.
Kompleks lebih sedikit.
Jadi pc-- sekali lagi, pc adalah penunjuk yang menunjuk kepada c-- sama pa.
Apakah itu?
>> PENONTON: 100.
ANDI PENG: Apakah b?
PENONTON: 100.
ANDI PENG: Apakah c?
PENONTON: 5.
ANDI PENG: Apa pa?
PENONTON: Ampersand a.
ANDI PENG: pb?
PENONTON: b Ampersand.
ANDI PENG: Dan sukar, apa yang pc sekarang?
PENONTON: Ampersand a.
ANDI PENG: Yay.
Woo hoo.
Kalian lihat?
Ini adalah hak semua.
Ia tidak terlalu buruk.
Kami mempunyai lebih gula-gula jika bukan semua betul, tetapi saya fikir ia adalah hak semua.
Dan kita akan pergi ke salah satu lagi sebelum kita mencapai orang-orang yang lebih keras.
Jawapan yang saya ada di sini.
>> Pada asasnya, tahu bahawa ini adalah seperti matematik pada ketika ini.
Apabila anda mempunyai persamaan yang mudah seperti + b, kali c, itu mudah untuk dilakukan.
Dan apabila anda mula berkembang apabila ia, hanya pergi perintah operasi.
Perkara yang sama seperti sebelum ini.
>> Mengesan jika anda bintang ini sebelum sesuatu.
Yang memberitahu anda nilai.
Jika anda mempunyai dan sebelum sesuatu, ia memberitahu anda alamat.
Dan anda perlu menetapkan sama ada petunjuk atau nilai itu.
Jadi mari kita pergi lebih ini terkini sangat cepat.
Bukan yang akhir ini, maaf.
Sebenarnya, anda semua boleh pilih.
Yang mana satu yang anda semua mahu pergi lebih daripada baki tiga
yang kita ada?
Saya tidak fikir kita hanya boleh berbuat demikian kerana kita tidak boleh hanya melompat ke baris.
OKAY.
Kalian tidak mempunyai pilihan, ia hanya ketiga untuk bertahan satu.
>> Bintang pc sama b kali c.
>> PENONTON: Star pb?
>> PENONTON: Star pb.
ANDI PENG: Maaf?
PENONTON: Star pb.
ANDI PENG: Star pb.
Oh, tidak baik saya.
Bintang pb sama b kali c.
Saya akan memberikan anda semua 10 saat.
Hanya dengan cepat berfikir.
Ini adalah bahawa kita mempunyai begitu ini, apa yang berlaku selepas kita
melaksanakan garis kelima di sana?
OKAY.
Apakah itu?
>> PENONTON: 100.
>> ANDI PENG: 100.
Apa yang b sekarang?
>> PENONTON: 500.
>> ANDI PENG: Baik.
Adakah seseorang ingin menjelaskan kepada saya mengapa ini adalah 500?
Saya tidak berasa seperti kita sebenarnya pernah disentuh b.
Bagaimana kita menguruskan untuk menukar nilai b tanpa menyentuh b?
Ya?
>> PENONTON: Kerana pb bintang bermakna nilai pada pb--
ANDI PENG: Tepat sekali.
PENONTON: --which adalah b.
ANDI PENG: Tepat sekali.
Jadi di sini dalam rajah kami, penunjuk kami pb sebenarnya menunjuk kepada hak ini
di sini, yang adalah b fizikal sebenar.
Dan jadi jika anda pergi dan anda lakukan pb bintang, itu
berikut panah anda penunjuk anda dan fizikal mengubah nilai b.
Jadi itulah sebabnya kami telah ditukar kepada B 500 tanpa benar-benar menyentuh b.
Dan kemudian segala sesuatu yang lain tetap sama kerana kita tidak menyentuh itu.
Itulah b.
Sejuk.
Dan then--
>> PENONTON: Saya hanya mempunyai satu soalan.
>> ANDI PENG: Ya?
>> PENONTON: Oleh kerana we've-- tidak ada lagi Ampersand c,
adakah itu bermakna Ampersand yang mengarahkan kepada perkara yang sama sekarang?
>> ANDI PENG: Ya.
So--
PENONTON: Jadi anak panah jenis hanya bergerak dan-
ANDI PENG: Jadi essentially--
PENONTON: --now kita tidak boleh access--
ANDI PENG: --when kita dereference c pada-- saya mengada-adakan saja.
Apakah itu?
Barisan ketiga?
Keempat.
Baris keempat.
Apa yang kami lakukan adalah, pada dasarnya, menukar anak panah ini
dan ia menunjuk ke arah sebaliknya.
>> PENONTON: Oleh itu, kita tidak boleh mengakses c lagi.
>> ANDI PENG: Jika anda mempunyai ini tepat nombor, anda boleh mengaksesnya.
Tetapi, tidak.
Kami tidak mempunyai penunjuk menunjuk ke arah c lagi.
Saya fikir jika anda mahu semula mengaksesnya, anda
akan mewujudkan satu lagi penunjuk yang menegaskan semula untuk c
atau dereferenced ini dan menegaskan kembali.
Jadi, tidak, pada ketika ini, tiga petunjuk, tiada seorang pun daripada mereka menunjukkan c.
>> Semua orang yang baik?
Jawapan berada dalam talian.
Jangan ragu untuk, selepas seksyen, pergi terakhir dua dan ujian diri kamu sendiri.
Konsep yang sama, hanya sedikit sukar.
Hanya ikut melalui logik mengapa perkara adalah perkara-perkara yang berbeza.
Dan tanda-tanda, petunjuk adalah satu topik yang kita suka
untuk menutup pada kuiz kerana mereka dari segi konsep yang sangat mencabar.
Jadi saya cadangkan anda lelaki semua mengkaji carta ini
atau mengurangkan konsep yang serupa dengan ini sebelum kuiz anda minggu depan.
>> PENONTON: Maafkan saya.
>> ANDI PENG: Ya?
PENONTON: [didengar] akhir one-- [didengar].
>> ANDI PENG: 50,000?
Saya perlu untuk mengikutinya kembali ke bawah.
Tetapi somewhere-- saya fikir barisan sebelum ini, anda buat gergasi c nilai.
c sama dengan perkara ini gergasi yang 100 kali 500.
No.
>> PENONTON: [didengar].
>> ANDI PENG: Ya.
100 kali 100 yang adalah 10,000.
Iaitu 10,000.
Jadi kembali ke sana, anda akan mendarabkan b dan c.
Jadi penunjuk yang menunjukkan b-- yang merupakan nilai 500-- kali a--
>> PENONTON: [didengar].
ANDI PENG: Mungkin itu salah.
PENONTON: Tidak, tidak, tidak. [Didengar] penunjuk di c kini menghala ke arah a--
ANDI PENG: Ya.
Dia betul.
>> PENONTON: --it sekurang-di sebuah setaraf yang times-- itu nilai c.
ANDI PENG: Bolehkah anda mengatakan bahawa sedikit sedikit lebih kuat supaya semua orang boleh mendengar anda?
PENONTON: Jadi penunjuk di c kini menunjukkan apa penunjuk yang digunakan untuk menunjukkan
supaya- dan masih does-- tetapi mereka menunjukkan perkara yang sama iaitu, bukan?
Nilai, bagaimanapun ia telah baru ditakrifkan.
Dan pada awal bahawa anda menyebut sebelum ini 100 kali
nilai di b yang 500.
Dan supaya sekalipun iaitu.
50,000.
Mereka yang anda tetapkan semula bahawa apa yang ruang memori di c is-- penunjuk di c
menunjuk ke yang merupakan.
Jadi anda mentakrifkan semula untuk menjadi 50,000.
ANDI PENG: Dia boleh mengajar bahagian untuk saya.
Lain kali itu semua anda.
Di sini.
Berikut adalah lebih gula-gula untuk itu.
Anda berhak mendapat gula-gula untuk itu.
>> PENONTON: Saya hampir terperangkap itu.
>> ANDI PENG: Anda hampir terperangkap itu.
Tidak mengapa.
Yeah.
Tetapi dia betul-betul betul.
Jadi apa yang anda perlu lakukan adalah bahawa- saya rasa kita
perlu mengikut fakta bahawa petunjuk kini
menunjuk kepada nilai-nilai yang berbeza.
Jadi value-- maaf, penunjuk c repointed a.
Dan supaya beralih semua nombor kami.
Dan sebab itulah, apabila anda mengakses nilai yang disimpan di sana, ia adalah berbeza.
Adakah ini masuk akal?
OKAY.
Sejuk.
Semua orang yang baik, sebelum saya bergerak?
>> PENONTON: Adakah the-- apabila anda akan ke bawah baris dalam lajur kiri,
adakah baris pertama memberi kesan kepada barisan kedua dan kemudian second-- seperti, ia all--
ANDI PENG: Ya.
Jadi bayangkan ia kod di mana saya hanya ditaip dalam sama b kali c, bintang yang sama c.
Bayangkan bahawa saya telah hanya berlari kod ini
dan saya tidak mencetak apa semua perkara-perkara ini.
Jika saya hanya untuk mencetak pertama perkara di atas, ia akan berada di sini.
Jika selepas saya berlari semua mereka baris kod,
apa nilai-nilai ini perlu berada di hujung yang begitu.
>> Oleh itu, saya telah benar-benar ditulis program di sini.
Saya tidak melakukan semua pendaraban.
Tetapi bayangkan.
Jadi di sini saya hanya mempunyai program yang dikenali sebagai petunjuk.
Saya akan zum masuk jika anda guys-- OK.
Jadi saya telah membuat pembolehubah a, b, dan c.
Saya telah menetapkan mereka sama dengan 3, 4, dan 5 dan saya telah
dicipta petunjuk sama mereka.
Dan maka di sini saya hanya akan untuk mencetak apa yang.
Jadi biarlah saya berjalan itu.
>> Adakah anda semua see-- crap.
Adakah anda semua melihat bagaimana, b dan c adalah nilai-nilai
tetapi petunjuk mereka adalah gergasi ini nilai sampah yang kita tidak mengambil berat tentang?
Jadi jika saya untuk benar-benar plug dalam semua pendaraban
dan kemudian mencetak semula semua ini, ia akan melaksanakan keluar
dengan apa yang di bahagian bawah.
Jadi jika anda semua ingin bermain-main dengan sebenarnya fizikal pengekodan,
anda semua hanya boleh palam semua orang-orang dalam.
Kod ini akan berada dalam talian dan kemudian anda nilai-nilai yang perlu mencetak dengan yang selepas itu.
>> Dan kemudian anda akan melihat bagaimana penunjuk alamat sebenarnya telah ditugaskan semula.
Jadi, anda akan melihat bagaimana Alamat c sebenarnya menjadi
untuk menyamai apa sahaja alamat yang adalah.
Dan mereka akan sepadan dengan apa sahaja jumlah yang besar adalah.
Soalan yang baik.
Semua orang ok?
Satu panggilan terakhir untuk soalan.
OKAY.
Baiklah.
Jadi bersiap sedia untuk mempunyai fikiran anda besaran yang sedikit sedikit lebih.
Tatasusunan adalah sebenarnya hanya petunjuk.
Itu sahaja mereka berada.
Dan ingat, apakah tali?
Ia juga merupakan tatasusunan.
Jadi apakah tali benar-benar?
Mereka seperti petunjuk kepada permulaan char lebih aksara.
>> Jadi ia hanya konsep yang bermula untuk membina di atas satu sama lain.
Jadi itulah why-- anda ingat dalam kuliah, David,
apabila dia mempunyai perbandingan yang int tali ibu
sesuatu dan kemudian lain ibu rentetan dan anda
cuba untuk menyamakan kedua-dua satu sama lain, mereka memberi anda nilai yang berbeza.
Ini kerana tali sendiri tidak nilai.
Semua mereka adalah alamat ingatan char-- mereka adalah tatasusunan aksara dan array
hanya petunjuk.
>> Jadi, pada dasarnya, apabila Daud comparing--
Adakah selamat jika saya memadamkan semua ini?
Jadi, dalam kuliah apabila David ibu mempunyai sama sama ibu,
kepada kita bahawa seolah-olah menjadi perkara yang sama.
Betul?
Tetapi, dalam komputer di bawah ini hud, apa yang sebenarnya berlaku
adalah bahawa rentetan ini, apa yang ada adalah pelbagai.
Dengan ampersand-- atau, maaf, dengan terminator null pada akhir.
Betul?
Backslash 0.
Garis miring salah.
>> Jadi semua mereka were-- semua kedua-dua tali were--
adalah pelbagai saiz dengan merangkak huruf ibu dan ibu.
Tetapi apa tatasusunan sebenarnya hanyalah petunjuk ke tempat tertentu dalam ingatan
yang memberitahu anda untuk mula lokasi anda.
Jadi dalam kes ini, semua ini adalah hanya beberapa nilai sampah,
beberapa penunjuk rawak.
Dan semua ini adalah telah beberapa nilai sampah lain.
Mari kita katakan 0x200.
>> Dan supaya apabila anda cuba untuk sama mereka dua satu sama lain,
mereka menilai kepada palsu kerana yang addresses-- petunjuk
bahawa mereka were-- adalah berbeza.
Sedangkan ia adalah berbeza jika anda cuba untuk membandingkan bilangan bulat yang sebenar.
Seperti jika anda mahu compare-- dalam example-- terakhir int A ke B,
mereka akan menilai kepada benar sebagai Elliot berkata
kerana mereka integer yang disimpan
dan anda hanya menilai nilai.
Di sini, kerana rentetan tatasusunan dan tatasusunan adalah petunjuk,
itulah sebabnya mereka tidak sama dengan satu sama lain.
>> Begitu baik mengelirukan, grafik itu.
Tetapi mari kita bayangkan.
Kami telah mewujudkan pelbagai saiz 3 dengan indeks dari 0 ke 2-- 0,
1, 2 dengan nilai-nilai 1, 2, dan 3 yang disimpan di dalamnya.
Semua lokasi benar-benar does-- sini, mari kita
mengatakan saya mewujudkan penunjuk untuk yang pelbagai itu
mengakses nilai pada indeks pertama pelbagai ini.
Jadi di sini ia akan menjadi 0.
Betul?
Adakah semua orang memahami bagaimana yang baris pertama dinilai?
Yang besar.
>> Dan jadi jika anda mahu untuk memulakan nilai-nilai tambahan selepas itu,
semua yang kita lakukan adalah penyerahhakan semula.
Jadi 0, 1, 2, 1.
Jadi penunjuk ini yang pernah menunjuk ke sini, semua yang kita lakukan
bergerak ke bawah.
Itulah yang ditambah dengan 1 lakukan.
Dan kemudian kita boleh meletakkan 2 di sana.
Jika kita mahu meletakkan 3 dalam satu selepas itu, kami akan memadam penunjuk ini,
meletakkan 3 di sana.
Adakah ini semua orang masuk akal?
Yeah.
Adakah anda mempunyai soalan?
PENONTON: Ia [didengar] mempunyai satu soalan, saya akan mengatakan juga.
Saya tidak fikir ia sebenarnya satu soalan but-- dalam bahasa Inggeris, array
sama dengan 1 akal.
Kami seperti, OK, perkara pertama.
Tetapi perkara-perkara yang 0 indeks [Didengar] array sama dengan 0
untuk menunjukkan tempat pertama.
ANDI PENG: Ya.
Jadi sebenarnya apa yang saya lakukan di sini adalah Saya tidak mengakses indeks pertama.
Apa yang saya telah doing-- jadi pertama sekali, beritahu saya apakah pelbagai bintang lakukan?
Apakah bintang sebelum penunjuk lakukan?
>> PENONTON: Ia menunjukkan penunjuk.
Yang anda mengisytiharkan penunjuk.
Ia de--
>> ANDI PENG: Ia dereferences yang cara ia keluar dan sebenarnya mendapat nilai.
Betul?
Jadi dalam kes ini, anda mahu untuk mendapatkan nilai di sini dan menetapkan bahawa untuk 1.
Ya?
Jadi, saya tidak actually-- saya tidak benar-benar mengambil berat tentang indeks ini,
semua yang saya lakukan adalah hanya iterating turun dengan menggerakkan penunjuk saya turun array.
Dan kemudian akhirnya saya perlu berhenti, bukan?
Dan cara yang saya berhenti adalah apabila saya memukul, dalam hal
daripada rentetan, terminator null.
Saya tahu, oh, jika saya memukul back-- jika saya melihat garis miring 0, saya tahu saya dilakukan dengan ini
dan saya tahu bahawa saya boleh hanya berhenti iterating melalui.
Soalan yang benar-benar baik.
>> Dan kami benar-benar akan pergi lebih jauh mendalam dalam perkara ini minggu depan
kerana sekeping yang akan melibatkan banyak penggunaan petunjuk.
Tetapi hanya tahu bahawa sekarang, itu hanya more-- yang berbeza
itu hanya cara yang berbeza untuk komputer untuk menulis, pada dasarnya,
apa yang kita telah lakukan.
Seperti Daud berkata dalam syarahan, cara yang kita
mengakses array adalah hanya dengan melakukan array 0, kurungan 0, jika kita hanya
mahu mengakses nilai pertama.
>> Semua komputer yang dilakukan beralih itu ke dalam itu dan iterating sendiri.
Oleh itu, kita memanggilnya sintaksis gula yang hanya
cara yang mewah untuk mengatakan mesra pengguna cara untuk kita mengetahui bagaimana untuk program.
Tetapi komputer di bawah, apa yang ia lakukan,
ia sebenarnya hanya mempunyai penunjuk yang yang menyesuaikan diri.
Tetapi cara yang kita menulis, kerana lebih mudah untuk kita
untuk berfikir tentang perkara-perkara dari segi kotak dan bagaimana untuk bergerak ke bawah kotak,
adalah dengan kurungan.
Maaf, yang benar-benar, benar-benar buruk but-- yeah.
PENONTON: Jadi bagaimana akan anda membandingkan dua tali
untuk melihat jika mereka sama dengan satu sama lain?
>> ANDI PENG: Jadi Daud menulis program ini dalam syarahan
jadi saya hanya akan pergi lebih cepat dan ringkas.
Cara anda akan berbuat demikian adalah bahawa anda akan benar-benar
perlu pergi dan bandingkan addresses-- atau nilai-nilai
diperolehi daripada petunjuk.
Jadi ingat, bagaimana anda memperoleh nilai di sini?
Saya tidak peduli mengenai alamat itu di sini.
Bagaimana saya benar-benar mendapatkan nilai apa sahaja di sini?
>> PENONTON: [didengar].
>> ANDI PENG: Tepat sekali.
Jadi anda membandingkan bintang di sini berbanding bintang di sini.
Adakah sama.
Dan kemudian anda turun.
Adakah bintang di sini dan bintang di sini sama?
OKAY.
Mereka sama.
Dan anda terus turun ke bawah sehingga anda telah melanda akhir kedua-duanya.
Dan jika semua daripada mereka adalah sama, maka anda tahu tali anda adalah sama.
Dan C sebenarnya mempunyai fungsi bertulis dipanggil
String Pert yang sebenarnya hanya adakah itu untuk anda supaya anda tidak '
perlu menulis sendiri.
Ya?
>> PENONTON: Saya rasa dalam syarahan adalah apabila kita banding.
Kita tidak memerlukan kaunter seperti pi, bukan?
>> ANDI PENG: Anda tidak kerana kita tidak benar-benar mengambil berat
bagaimana banyak kotak kami telah terlelar melalui.
Semua kita mengambil berat adalah bahawa kita akan terus pergi sehingga saya tahu untuk berhenti.
Dan anda tahu untuk berhenti apabila ada beberapa jenis petunjuk
bahawa anda berada di terminator null.
Yeah.
So--
PENONTON: [didengar].
ANDI PENG: Ya.
Jadi dalam kes membandingkan tali, saya tidak benar-benar
peduli berapa banyak surat ialah- saya perlu untuk membandingkan
jika mereka benar atau palsu jika mereka sama dengan satu sama lain.
Saya tidak peduli berapa banyak surat berada di dalam setiap daripada mereka, bukan?
Saya hanya peduli bahawa ini padan dengan ini dan yang
selepas perlawanan dan satu selepas perlawanan sepanjang jalan sehingga sehingga akhir.
Betul?
Adakah ini masuk akal?
>> Jadi, saya tidak benar-benar peduli berapa banyak surat, Saya hanya peduli bahawa semua huruf
perlawanan.
Yeah.
OKAY.
Bolehkah saya beralih dari ini?
Yang besar.
Kami berjalan sedikit pendek pada masa jadi saya akan hanya membolehkan anda
semua untuk melihat secara ringkas di ini.
Berjalan ke dalam ID anda jika anda semua ingin tahu.
Dan anda semua boleh melihat apa yang ini akan mencetak.
OKAY.
>> Jadi sesuatu yang kita juga akan menyentuh pada bit adalah idea penunjuk aritmetik.
Yang mana, semua itu adalah merupakan bukannya menyesuaikan
nilai-nilai apa yang disimpan di alamat penunjuk anda,
ia hanya benar-benar berubah alamat sendiri.
Jadi, jika anda sebagai manusia itu mahu untuk melaraskan penunjuk anda secara manual,
cara yang akan anda lakukan yang hanya melakukan n kali saiz penunjuk.
Betul?
>> Jadi int.
An int-- berapa banyak bait dalam ingatan adalah int?
Ia empat, bukan?
Jadi, jika saya tahu saya mempunyai pelbagai semua ints dan saya mahu ia menunjukkan yang
selepas itu, saya tahu saya hanya perlu gerakkan penuding saya turun empat bait, bukan?
Dan sebagainya n kali saiz daripada bait penunjuk
Walau bagaimanapun banyak bait anda hanya akan gerakkan penuding anda ke bawah dengan.
>> Jadi, sebagai contoh, jika kita mempunyai pelbagai ints, yang pertama, mari kita hanya mengatakan,
disimpan sebagai 0x00.
Anda tahu yang seterusnya akan menjadi di 0x04 kerana itulah empat bait kemudian.
Dan yang selepas itu akan menjadi 0x08 dan sebagainya dan sebagainya.
Dan sebagainya, lelaki, lihat.
>> Apa yang anda lakukan di sini adalah bahawa anda mempunyai penunjuk y
dan anda sambil menambah bahawa untuk anda memori supaya anda boleh bergerak ke bawah
blok memori diperuntukkan.
Jenis konsep tahap yang lebih tinggi.
Kalian tidak perlu tahu untuk minggu ini,
tetapi itu sahaja yang ia lakukan di bawah sana.
OKAY.
>> Satu lagi masa jenaka.
Dua tali berjalan ke bar.
Yang berkata, saya ingin rum yang dan nilai-nilai sampah Coke.
Yang lain berkata, anda akan mempunyai untuk memberi alasan kawan saya, dia tidak null ditamatkan.
Kalian mendapatkannya.
Maaf.
Ini adalah bagaimana saya menjaga diri saya pergi apabila saya prep seksyen
Aku memasukkan slaid beberapa jenaka.
Anyways.
OKAY.
Sebelum saya bergerak pada-- jadi, pada dasarnya, kami telah
meliputi semua konsep isu-isu yang berkaitan dengan petunjuk.
Dan kemudian kita akan talk-- bergerak lebih, bercakap tentang mengapa yang penting
dan bagaimana yang muat ke dalam idea pengurusan ingatan.
Tetapi sebelum saya bergerak ke atas, adakah sesiapa yang mempunyai soalan
mengenai penggunaan penunjuk, apa yang berlaku apabila anda membuat petunjuk,
bagaimana yang merujuk setiap lain, bagaimana mereka dereferencing?
Sebarang soalan mengenai bahawa sebelum saya bergerak?
OKAY.
Yang besar.
>> Jadi ini membawa kita ke dalam ini konsep tahap yang lebih besar yang lebih tinggi
pengurusan ingatan secara keseluruhannya.
Jadi, pada dasarnya, dalam komputer anda, ada
dua jenis asas ingatan atau kawasan di mana memori disimpan.
Anda ada di sini apa yang dipanggil timbunan itu dan anda perlu turun di sini
apa yang dipanggil timbunan.
Dan kita akan bercakap tentang timbunan pertama kerana ia
yang lebih finagley anda perlu jenis konsep
memahami apa yang sedang berlaku.
>> Jadi semua timbunan is-- memikirkan sebagai timbunan fizikal memori
di mana anda mempunyai satu blok ingatan yang yang diperuntukkan untuk program anda
semasa ia berjalan.
Dan di sinilah, pada dasarnya, semua pembolehubah tempatan anda disimpan.
Jadi ini adalah hanya yang dizum dalam gambar timbunan itu.
Timbunan di bawah sana, Saya hanya zoom dalam sedikit lebih.
>> Jadi, pada dasarnya, dalam timbunan anda mempunyai sekumpulan fungsi dalam program anda.
Jadi mari kita kembali kepada contoh dua minggu
di mana kita mempunyai fungsi utama kami serta fungsi kiub
di mana kita cuba untuk mewujudkan fungsi yang cubed-- yang mengambil parameter seperti input,
cubed mereka dan kembali mereka kembali ke utama.
Jadi cara yang yang disimpan dalam ingatan adalah bahawa anda mempunyai fungsi utama anda
di sini di bahagian bawah.
Dan kemudian dengan setiap fungsi tambahan anda memanggil dan menambah di atas itu,
memori hanya susunan di atas.
Anggaplah ia sebagai timbunan fizikal.
>> Dan supaya anda mempunyai semua yang anda utama pembolehubah fungsi utama anda,
segala-galanya yang berlaku di sini, disimpan.
Dan kemudian apabila anda dipanggil kiub, ia pergi dan ia
mencipta salinan semua orang-orang parameter dan ia menyimpan mereka
di atas di tempat yang berbeza.
Dan jadi mengapa kita mengambil berat?
Sebab kita mengambil berat adalah bahawa kita tidak boleh hanya menggunakan parameter sini-- pembolehubah
sini-- dan kami menukar mereka, kami menjangka mereka juga akan berubah di sini, bukan?
>> Idea ini adalah bahawa mereka diselamatkan di tempat yang berbeza dalam ingatan
supaya, apabila anda mengakses berbeza fungsi, apa yang anda fikir berlaku
sebenarnya tidak berlaku kerana bit memori tidak saling berkaitan.
Dan supaya soalan itu benar-benar penting bagi kita untuk memahami jenis
adalah, bagaimana jika, apabila kami berjalan program, saiz fungsi
stack frame-- supaya dari segi fizikal, bagaimana memori banyak yang kita perlu memberikan?
Mungkin ia adalah fungsi gergasi jadi kami perlu memberikan memori yang banyak.
Tetapi jika ia adalah lebih kecil kita akan perlu sedikit kecil.
>> Jadi idea ini adalah bahawa apabila kita menjalankan program saiz fungsi yang
adalah bergantung kepada berapa banyak pembolehubah dan jenis pembolehubah
yang kita mahu memberikannya.
Tetapi bagaimana jika jumlah variables-- dan saiz mereka,
yang yang ditentukan tidak oleh anda pengekod tetapi
ditentukan oleh yang sebenar pengguna program anda.
Jadi, jika saya mahu mencipta satu majlis yang mengambil tali dari pengguna,
tetapi saya tidak benar-benar tahu berapa besar mereka rentetan, ia sukar untuk saya
untuk memperuntukkan tertentu jumlah memori yang diperlukan.
Betul?
>> Kerana jika ini function-- jika pengguna ini input rentetan gergasi,
ia akan membuat kesilapan daripada apa yang dipanggil pada dasarnya
stack limpahan di mana anda pergi di luar batas-batas memori yang anda ada.
Dan demikian maka apa yang kita lakukan?
Jika kita tidak boleh hanya membuat gergasi ini timbunan yang boleh menyelamatkan segala-galanya,
apa yang kita lakukan untuk menyelesaikan masalah itu?
>> Oleh itu, kita akan bergerak ke atas dan bercakap tentang jenis kedua memori
dan kemudian kita boleh bercakap tentang bagaimana kita boleh menggunakan bersama-sama kedua-dua
untuk menyelesaikan soalan itu.
Jadi sekarang kita akan bergerak ke atas ke bahagian yang berbeza memori
dalam komputer kita.
Yang dinamakan timbunan itu.
Jadi semua timbunan itu adalah kolam memori yang ada yang
boleh diperuntukkan secara dinamik.
Jadi yang boleh mengubah manakala program anda sedang berjalan.
>> Dan supaya satu rantau memori yang tidak digunakan yang boleh
menjadi allowed-- yang boleh diperuntukkan dengan fungsi
memanggil malloc, atau peruntukan ingatan.
Jadi, pada dasarnya, apabila anda menjalankan program,
anda secara dinamik boleh mencipta memori dari timbunan dan menggunakan bahawa semua di sini.
Dan demikian maka, semua fungsi anda di sini boleh mengakses timbunan itu.
>> Dan sebagainya malloc, idea ini bahawa Daud sejenis dengan cepat, secara ringkas dipoles begitu saja
dalam kuliah, hanya cara untuk anda untuk mengawal ingatan anda.
Seperti, apabila anda hanya mewujudkan stack fungsi, apabila anda hanya
mempunyai fungsi utama anda dengan fungsi rawak anda,
anda memikirkan mereka sebagai kanak-kanak yang hanya melarikan diri apabila anda telah dilakukan dengan mereka.
Mereka adalah kanak-kanak benar-benar buruk.
Anda membuat mereka, anda mengajar mereka sesuatu,
dan kemudian apabila anda mahu mengaksesnya semula mereka
tidak ada kerana anda memori hanya melarikan diri.
>> Tetapi malloc, atau timbunan itu, adalah cara yang yang mempunyai anak-anak yang lebih baik, di mana
anda boleh mencipta sejenis mereka, memberikan mereka nilai-nilai,
menggunakan mereka, kelak yang berbunyi benar-benar bad-- menggunakannya tetapi anda mahu,
tetapi kemudian dapat mengawal mereka dan mengosongkan ingatan
bila-bila masa anda memerlukannya.
Sebab itu, apabila anda selesai dengan fungsi, kanak-kanak kembali kepada anda
dan anda masih mempunyai data yang di sana.
>> Jadi cara kita malloc, atau membuat, memori oleh bintang fungsi tidak sah
saiz malloc dalam bait.
Jadi itu hanya prototaip mengapa kita berbuat demikian.
Jadi contoh ialah kita mewujudkan penunjuk daripada menaip int-- setaraf int bintang pointer--
saiz malloc int.
Jadi sebab mengapa kita melakukan saiz daripada dan bukan hanya number-- yang
kerana kita semua tahu bahawa int adalah empat bait,
right-- tetapi int adalah hanya empat bait pada sistem operasi tertentu.
>> Idea untuk kita sebagai pengaturcara ialah kita
ingin membuat kod yang boleh berjalan pada semua komputer, bukan hanya
komputer mudah kami.
Dan itulah sebabnya mengapa kita ingin menggunakan Saiz dan bukan hanya nombor empat.
Adakah ini masuk akal untuk semua orang?
Jadi saiz daripada- sekalipun ia adalah C fungsi atau pengendali itu
memberitahu anda berapa banyak bait memori tidak jenis tertentu berubah mengambil.
Jadi dalam kes ini, saiz int adalah empat.
Empat bait.
Dan malloc akan membebaskan empat bait dalam timbunan anda,
maka anda boleh gunakan dalam utama anda fungsi dapat menyimpan ingatan.
Adakah semua orang jelas bahawa setakat ini?
Ya?
>> PENONTON: Saya jelas tetapi hanya untuk menjadi lebih clear--
ANDI PENG: OK.
Betul-betul halus.
PENONTON: --size daripada adalah [didengar] boleh sebenarnya [didengar]
dan ia benar-benar akan melakukan perkara yang kita mahu ia.
Ia bukan sebahagian kod pseudo.
>> ANDI PENG: No.
>> PENONTON: Ia seperti thing-- sebenar
>> ANDI PENG: Ini adalah kod nyata.
>> PENONTON: --Kami boleh menggunakannya.
Ia yang sebenar.
Sejuk.
ANDI PENG: Saiz datang dengan C.
PENONTON: Yang membuat hidup saya lebih bahagia.
ANDI PENG: Ya.
Jadi jika anda seorang programmer malas seperti saya jenis am kadang-kadang,
Saya tidak suka menghafal apa saiz int
ini, saya tidak suka menghafal dengan saiz apungan adalah.
Saiz hanya memberitahu anda apa yang ia adalah dan itu lebih mudah.
>> Baiklah.
Jadi satu perkara yang penting bahawa kalian semua mahu
yang perlu diingat apabila anda berada menggunakan malloc adalah bahawa anda sentiasa
perlu menyemak untuk melihat jika ia adalah null.
Jadi seperti yang saya katakan, kembali kepada bahawa gambar timbunan itu.
Timbunan itu hanya gergasi ini timbunan memori yang anda telah mendapat.
Dan anda mahu dapat mengambil ketulan memori daripadanya dan menggunakannya, bukan?
>> Tetapi bagaimana jika anda tidak mempunyai lebih banyak memori dalam timbunan itu?
Bagaimana jika saya sudah menggunakan semua daripadanya dan saya cuba untuk malloc lebih?
Yang tidak wujud.
Baiklah, itulah mengapa anda akan mendapat ralat.
Anda akan seg bersalah. Anda akan mempunyai kesalahan segmentasi di mana anda
cuba untuk mengakses perkara-perkara yang tidak ada.
Dan begitu cara kita melakukan itu dan cara kita
mencegah itu adalah bahawa kita menyemak untuk melihat jika null penunjuk ini.
>> Jadi jika saya malloc sesuatu dan saya mempunyai memori tiada lagi,
yang akan mencetak kesilapan kerana penunjuk dikembalikan kepada anda hanya null.
Dan begitu cara kita melakukan this-- ini hanya reka bentuk yang besar,
hanya menghafal this-- adalah bahawa mana-mana kali anda cuba untuk malloc apa-apa,
anda akan perlu memeriksa untuk melihat jika ia adalah null.
Kerana setiap kali anda cuba untuk memperoleh ingatan dari timbunan itu,
anda sentiasa perlu membuat memastikan bahawa anda mempunyai memori.
Itu sahaja yang ia adalah.
>> Jadi cukup banyak ketiga-tiga baris kod, menghafal.
Setiap kali anda malloc, mencebur mereka masuk.
Anda akan memerlukannya.
Oleh kerana saya jamin anda, kita akan untuk menguji kamu pada kes dan komputer anda
akan meletup kerana anda akan cuba untuk capaian ingatan itulah
tidak ada dan mereka akan berdepan dengan kemalangan dan ia tidak akan menjadi baik.
Jadi hanya menggerudi itu ke dalam otak anda.
Malloc, null.
Yang baik.
Baiklah.
>> Maka ini beranak yang soalan apa yang berlaku
selepas kami selesai menggunakan memori itu.
Kerana seluruh idea mempunyai malloc adalah
yang kita ada timbunan ini yang boleh kita ambil memori dari dan kemudian kita boleh menggunakannya.
Betul?
Dan kemudian apa yang kita perlu ingat adalah bahawa, selepas kami selesai dengan itu,
kita boleh membebaskan.
Lepaskan.
Kita boleh biarkan ia pergi.
Atau lain anda juga akan bocor memori dan banyak lagi perkara-perkara buruk akan berlaku.
>> Pada dasarnya, setiap kali anda memori menyentuh,
perkara-perkara buruk akan berlaku jika anda tidak melakukan perkara yang betul.
Jadi, anda perlu menyemak untuk melihat, pertama, jika anda mempunyai memori yang ada.
Dan kemudian selepas anda selesai, anda mahu membebaskan ia dan membolehkan sistem operasi anda
untuk mengambil kembali.
Jadi cara kita melakukan yang demikian fungsi, tidak sah percuma, dan penunjuk
itu timbunan ingatan.
>> Jadi contoh ini adalah penunjuk percuma.
Ia agak mudah, mudah, tidak mahu melupakannya.
Jadi periksa untuk melihat jika ia adalah null, percuma.
Semua orang yang baik?
Jadi sekali lagi, kod yang anda semua sejenis dengan cepat boleh mengambil satu renungan.
Saya tahu ia adalah banyak sintaks baru dan ia adalah hak semua jika anda seperti, ah,
apakah itu bermakna lagi?
Tidak risau.
Semua ini bertujuan untuk memaparkan tindakan, bagaimana semua perkara-perkara ini
boleh digunakan bersama-sama.
Jadi yang meletakkan bersama-sama seperti sekumpulan masa lalu
slaid kita hanya pergi melalui ke dalam satu program.
PENONTON: Dengan cara yang bahawa kita boleh actually--
ANDI PENG: Dalam cara yang kita sebenarnya boleh digunakan.
Anda boleh mencebur itu ke dalam ID anda, anda boleh menjalankan dan ia akan bekerja.
PENONTON: OK.
Jadi itulah sebenar?
>> ANDI PENG: Itu nyata.
Yeah.
Saya cuba untuk membuat ia jadi fon adalah berbeza supaya
bahawa setiap kali saya menaip sebenar kod fon adalah kod fon
dan bahawa kod nota saya adalah berbeza, tetapi Saya tidak tahu sama ada yang benar-benar berfungsi.
PENONTON: No.
Saya fikir itu--
>> ANDI PENG: OK.
>> PENONTON: --sometimes [Didengar] dan saya
seperti, yang akan menjadi benar-benar comel jika ia adalah sebenarnya satu perkara yang boleh digunakan
tetapi kemudian ia bukan satu perkara yang boleh digunakan.
Saya suka bahawa ini adalah satu perkara yang boleh digunakan.
>> ANDI PENG: OK.
Yeah.
Saya akan lulus bahawa bersama-sama.
Menjadi seperti Daud, anak-anak benar-benar sedih apabila anda menulis kod palsu.
Baiklah.
Ya?
>> PENONTON: Jadi ptr sini sebenarnya bukanlah penunjuk,
ia adalah satu blok ingatan?
>> ANDI PENG: Jadi yang anda bercakap tentang baris pertama atau yang turun di sini?
Adakah anda bercakap kira-kira satu ini di sini?
>> PENONTON: ptr tersebut perkara yang berbeza dalam-
>> ANDI PENG: Nah, jadi di sini apa yang saya doing-- sebenarnya,
mari kita pergi melalui sini.
Ini jenis hubungan dalam baik semua konsep.
Jadi di sini kita mempunyai ptr int bintang.
Jadi int penunjuk, itu di mana yang kita telah mewujudkan
penunjuk yang menunjukkan bilangan bulat.
Nah, ia akan menunjukkan kepada integer.
Dan kita akan malloc, atau memberikan, memori yang cukup diperuntukkan
untuk menyimpan integer.
Jadi empat bait dalam kes ini.
>> Dan kemudian jika itu sama sama null-- sama null-- kita akan mencetak.
Oh, anda mempunyai ralat kerana anda keluar dari memori, bukan?
Jika tidak, satu kembali, yang hanya memberitahu program anda
bahawa anda mempunyai ralat.
Dan kemudian jika anda lakukan mempunyai memori itu, ia
akan menyimpan apa sahaja yang mendapat int memberikan anda ke lokasi
dan menetapkannya sebagai nilai penunjuk.
Jadi ia sebenarnya akan fizikal memadamkan nilai ini
dan meletakkan apa sahaja yang mendapat pulangan int.
Dan kemudian anda akan cetak apa sahaja yang mereka masukkan.
>> PENONTON: Dan itu akan berada dalam timbunan itu?
>> ANDI PENG: Itu akan berada dalam timbunan itu.
>> PENONTON: Dan supaya akan boleh diakses.
ANDI PENG: Tepat sekali.
Nice.
Yang baik.
>> PENONTON: Oleh itu, apabila kita membebaskan ptr di ini Langkah terakhir, kami membebaskan penunjuk
atau kita membebaskan blok?
ANDI PENG: Ya.
Jadi, kita membebaskan pointer-- yang baik, membebaskan blok ingatan.
Jadi satu-satunya cara kita boleh menyeimbangkan akses ingatan adalah dengan mempunyai penunjuk.
Jika anda tidak mempunyai penunjuk, anda berada seperti, oh, saya tidak tahu di mana ia adalah,
bukan?
Jadi, jika anda membebaskannya, anda pada dasarnya membebaskan bahawa seluruh blok.
Maka komputer anda tahu, oh, tiada apa-apa yang boleh digunakan di sini,
Saya hanya boleh meletakkan sampah nilai-nilai ke syurga lagi.
>> PENONTON: Jadi bilangan bulat memang wujud pada itu?
>> ANDI PENG: Adakah bilangan bulat wujud?
Maaf.
Bolehkah anda menyusun semula soalan anda?
PENONTON: saya maksudkan, selepas anda membebaskan penunjuk, integer yang anda dapat,
akan yang masih wujud?
>> ANDI PENG: Tidak, ia tidak akan.
Atau sekurang-kurangnya ia akan wujud dalam anda memori sebelum komputer anda tidak
apa sahaja dengannya, tetapi ada ada cara untuk anda untuk mendapatkan itu.
Kerana anda dibebaskan penunjuk.
Anda tidak tahu di mana ia adalah lagi.
Yeah.
>> Saya akan bergerak ke atas di sini.
Phew.
Jadi kita melalui banyak konseptual kesukaran pengurusan ingatan
dan kami hanya akan untuk dasarnya menghabiskan
5, 10 minit akan atas perkara-perkara yang sintaks
akan boleh digunakan dan berguna untuk anda semua, tetapi tiada apa yang terlalu konsep di luar sana.
OKAY.
>> Jadi, kita benar-benar menukar gear di sini.
Pengurusan ingatan, sukar. Penunjuk, sukar. Ya.
Ia benar-benar, benar-benar keras.
Betul-betul halus.
Itulah sebabnya bahagian anda akan menjadi benar-benar sukar.
Tetapi jika anda pergi dan melakukan perkara-perkara yang kita
sepatutnya lakukan, membuat perkara yang pasti adalah batal,
pastikan untuk memeriksa jika perkara-perkara yang null, pastikan memori yang bebas,
memastikan bahawa ia tidak bocor, anda akan menjadi baik.
Anda akan ditetapkan.
Baiklah.
Oleh itu, kita akan bergerak ke dalam ini konsep baru mengenai penghalaan semula.
Dan jadi sebelum masa ini, cara utama yang kami telah
telah berinteraksi dengan kami program adalah melalui input standard
dan output standard.
Betul?
Kita sebagai input pengguna perkara dan komputer
memuntahkannya semula kepada kami di terminal.
>> Tetapi ada lain cara untuk kita berinteraksi
dengan komputer dengan kami program-program yang tidak hanya saya
perkara menaip fizikal dalam apabila saya diminta.
Dan cara kita berbuat demikian adalah melalui lebih besar daripada lobak merah
dan simbol paip.
Oleh itu, kita juga boleh membaca dan menulis kepada fail menggunakan itu.
>> Jadi cara yang kita lakukan ini adalah lebih besar daripada lobak merah, semua yang melakukan
menulis apa sahaja yang anda fail perlu fail berasingan.
Jadi, sebagai contoh, jika saya mahu menjalankan hello dunia
dan saya mahu output untuk disimpan dalam fail lain
dan bukan hanya dicetak kepada saya, saya hanya boleh melakukan yang lebih besar daripada lobak merah,
output.txt.
Jadi apa yang lakukan adalah mengambil program hello.world saya,
dan apa sahaja output adalah, ia adalah penjimatan dalam fail yang dipanggil output.txt.
Jadi cara yang dilakukan Daud, yang .csv dengan nama-nama pelajar,
ia adalah sama yang anda semua boleh lakukan.
>> Dan apa yang terutama yang berguna di sini adalah lebih besar
than-- dua lebih besar daripada lobak merah tanda-tanda yang anda boleh menambah ke output
fail, yang bermakna bahawa anda hanya boleh menambah di atasnya.
Anda hanya boleh menyimpan menambah output.txt setiap perkara tambahan
yang anda lakukan.
Atau, jika anda mula mendapat ke dalam lebih program yang rumit, kedua-dua yang lebih besar
daripada lobak merah, yang hanya cetakan keluar mesej ralat.
Jadi katakan anda mempunyai gergasi jumlah mesej ralat
dan anda mahu untuk membaca melalui semua daripada mereka dan anda
tidak mahu perlu tatal melalui terminal anda,
anda boleh benar-benar hanya melakukan lebih besar daripada output.txt
dan ia akan menyelamatkan semua kesilapan anda
dalam fail yang dipanggil output.txt yang anda boleh pergi melalui dan membaca.
PENONTON: Di mana fail teks yang disimpan?
ANDI PENG: Ia disimpan dalam yang sama direktori bahawa program anda.
Jadi anda hanya kembali dan mencarinya.
Dan perkara yang sama kita boleh lakukan untuk input
yang kita sebenarnya boleh mengambil kandungan beberapa fail
dan kita boleh memasukkan itu ke dalam program kami.
Jadi, daripada perlu melakukan arahan hujah baris di mana anda secara fizikal
perlu menaip perkara setiap kali, anda
boleh sebenarnya hanya mempunyai fail yang dipanggil input.txt yang hanya meletakkan semuanya dalam.
>> Dan kemudian paip khas sejuk kerana ia boleh mengambil output satu program
dan menggunakannya sebagai input program lain.
Jadi, sebagai contoh, dalam Vigenere lelaki anda, terdapat garis ini kod yang anda
lelaki sedang berjalan yang anda mungkin mungkin tidak benar-benar tahu apa yang ia adalah doing--
1000 paip ini ./generate ./42.
Betul?
>> Jadi semua itu lakukan, jika kita hanya mengambil lihat pada langkah ini demi langkah,
./generate, ini bermakna saya menjalankan program saya menjana.
Yang sedang dalam 1000 di input.
Jadi saya ingin menjana 1,000 rawak nombor dan saya akan paip bahawa-
atau saya akan menggunakan output bahawa- sebagai input untuk program saya dipanggil find.
Dan saya akan cuba untuk mencari 42 daripada nombor yang dijana dari orang-orang 1000
nombor.
Adakah ini baris kod menjadikan masuk akal untuk orang lain?
>> Jadi dengan cara ini kita menjimatkan diri kita satu tan langkah.
Kami tidak perlu menjalankan menjana, menyimpan fail dan kemudian memasukkannya ke dalam find.
Kami hanya boleh melakukan semuanya dalam satu baris.
Jadi apa sahaja yang menjana keluarkan, mencebur ia segera kembali masuk untuk mencari.
Ya?
>> PENONTON: Dan dari segi arahan hujah baris, adalah bahawa- itulah
tiga hujah baris arahan?
Ia menjana, find-- tidak, four-- menjana, 1000, cari dan 42?
Atau adakah the--
ANDI PENG: Jadi paip tidak benar-benar dikira sebagai hujah baris arahan
kerana pengkompil atau terminal tahu paip itu,
oh, saya tahu bahawa saya mesti melihat sesuatu paip kerana itulah output saya
dan saya mesti menjaga paip kerana itulah input saya.
Jadi ia tahu bahawa- yang ./generate dan 1,000,
mereka adalah dua perintah maka hujah-hujah hanya untuk program pertama.
Dan kemudian ./find 42 dua arahan hujah baris untuk program kedua.
Yeah.
Semua orang yang baik mengenai perkara ini?
>> Jadi hanya sebenar cepat, apa yang ketiga-tiga baris kod lakukan?
Agak mudah.
Sesiapa pun mahu beritahu saya apa baris pertama tidak?
PENONTON: [didengar].
>> ANDI PENG: Anggaplah ia sebagai just-- apakah yang lebih besar daripada lobak merah lakukan?
>> PENONTON: Ia meletakkan sesuatu ke baris seterusnya.
ANDI PENG: Jadi apa yang yang bertentangan dengan itu?
PENONTON: Ia meletakkan seterusnya perkara ke dalam perkara yang pertama.
ANDI PENG: Ya.
Jadi apa yang lakukan adalah anda menjalankan program .hello--
anda menjalankan program yang dinamakan khabar.
Anda akan memberikan input yang dikenali input.txt.
Betul?
Oleh kerana menganggapnya sebagai hanya secara fizikal pergi ke hello.
Dan kemudian anda akan menyelamatkan output dalam fail yang dipanggil output.txt.
Bagaimana pula dengan baris kedua?
Ingin memberitahu saya apa yang baris kedua tidak?
PENONTON: [didengar].
ANDI PENG: Maaf.
Cakap sekali lagi.
Elliot.
>> PENONTON: Jadi ia meletakkan senarai nombor ke dalam find.
>> ANDI PENG: Ya.
Jadi mencari, ingat, Untuk berjalan mencari
perlu tahu di mana anda sedang mencari.
Dan supaya semua yang ia lakukan di sini adalah bahawa ia memberi anda
pra diberikan set nombor, kemudian mencari akan
untuk mencari orang-orang untuk jumlah 42.
Dan kemudian 15.
Ingat, anda semua berlari ini apabila anda diuji kod anda.
Sekarang anda faham mengapa ia berada?
>> PENONTON: Ia meletakkan dalam set arahan
kepada [didengar] melalui tiga oleh tiga untuk mendapatkan the-- untuk memenangi permainan.
>> ANDI PENG: Ya.
>> PENONTON: Ia input mereka arahan ke dalam program ini.
>> ANDI PENG: Pretty banyak.
Jadi CS50 tilde. / Pset3 / 3x3, semua yang lakukan adalah bahawa kami mencipta teks
fail yang mempunyai semua tajuk bersedia untuk anda semua.
Dan sebagainya untuk permainan anda bermain, anda just-- kita hanya meletakkan itu ke dalam program anda.
Oleh itu, kita telah mencipta ini lembaga dan kemudian kita
meletakkan papan itu ke dalam program anda yang berlari dan mencipta jubin tiga
oleh tiga.
Itu sahaja yang ia telah lakukan.
>> Dan sebagainya ada sebenarnya sihir berlaku di belakang tabir
bahawa kalian tidak program yang kita diprogramkan.
Tetapi kini anda semua faham mengapa kita lakukan yang demikian itu semua baik.
Baiklah.
>> Oleh itu, sambil penghantaran semula adalah sangat berguna, C mempunyai mekanisme umum
membaca dan menulis fail yang tersendiri.
Tiada apa-apa dari segi konsep sukar di sini jadi saya
hanya akan pergi melalui benar-benar, benar-benar cepat.
Semua itu adalah sebahagian hafalan dan memastikan anda semua
sedang sintaksis menggunakannya dengan betul.
Cara yang kita akan lakukan yang membuat rujukan kepada fail,
kita akan membuka fail, dan kemudian kita akan melakukan semua membaca dan menulis
dan kemudian tutup fail.
Apabila perkara anda semua mahu yang perlu diingat adalah
yang ketika melakukan ini, kerana kita menutup dan membuka fail,
semua orang-orang arahan dimasukkan dalam standard-- standard I / O
perpustakaan.
Jadi pastikan setiap kali anda berada cara ini yang anda telah included--
# included-- standard I / O dot h.
>> Begitu nyata dengan cepat.
Langkah pertama, anda ingin membuat rujukan kepada fail itu.
Dan sekarang kita ada petunjuk dilakukan, anda semua boleh beritahu saya apa yang baris kod
lakukan.
Betul?
Apa yang ia lakukan adalah mewujudkan penunjuk bernama fail bagi jenis fail.
Kerana anda tahu bahawa ia akan untuk menghala ke fail dan anda
akan membuka fail.
Kemudian anda berada f open-- semua ia adalah membuka fail.
>> Ini adalah nama fail.
Dan ada tiga perkara yang anda boleh lakukan.
Anda boleh membaca, menulis atau menambah.
Kebanyakan amnya, anda semua akan membaca atau menulis
kerana anda akan dilakukan sama ada memasukkan fail atau keluarkan satu.
Jadi cukup banyak r dan w adalah dua perkara yang anda akan menggunakan paling.
>> Jadi dalam kes ini, apa yang saya lakukan adalah mewujudkan penunjuk kepada fail yang dipanggil fail.
Saya membukanya dan saya reading-- Saya membuka fail ini dipanggil file.txt
dan saya membacanya.
Itu sahaja yang saya lakukan pada ketika ini.
Dan kemudian ini hanya berfungsi dalam yang anda boleh membaca perkara yang berbeza
atau menulis perkara yang berbeza atau melangkau ke tempat-tempat yang berbeza
di mana anda mahu melihat.
Semua ini adalah dalam talian.
Semua ini anda boleh hanya Google.
Tidak perlu menghafal mereka.
Mereka hanya di sana, boleh guna untuk kegunaan anda
jika anda ingin dapat menggunakannya.
>> Jadi, jika saya mahu hanya membaca dalam satu aksara pada satu masa,
Saya akan lakukan fail fgetc.
Atau jika saya mahu untuk membaca dalam garis teks pada satu masa, saya akan lakukan fgets.
Dan sebagainya dan sebagainya.
Semua ini hanya melakukan yang berbeza perkara yang anda semua boleh digunakan.
>> Dan kemudian akhir sekali, selepas saya selesai membaca atau menulis,
Saya hanya akan fclose fail itu.
Dan ingat, ini adalah salah daripada mereka, ingat, sila
melakukan ini atau lain fail anda tidak akan berfungsi.
Sentiasa membuka fail sebelum membaca atau membaca,
anda perlu sentiasa menutupnya jika anda membukanya.
Perkara yang sama dengan ingatan, bukan?
Anda perlu sentiasa mengambil memori dan bebas itu.
Di sini anda perlu sentiasa membuka memfailkan sebelum cuba untuk membacanya
dan anda perlu sentiasa menutupnya selepas anda membukanya.
>> Jadi ini adalah juga dalam talian.
Saya akan mencabar anda semua untuk sejenis menulis program yang mencetak
hello.world ke fail.
Ia benar-benar mudah.
Ia pada asasnya hanya melibatkan yang beberapa baris kod
yang hanya ditulis sebelum ini.
Anda akan meletakkan mereka bersama-sama dan menulis itu.
>> Jadi beberapa perkara penting yang perlu diingat semasa anda seorang lelaki yang cuba untuk menggunakan ini.
Jika ini adalah semua sangat berguna untuk pset anda minggu ini,
adalah bahawa fopen mewujudkan penunjuk fail.
Ia tidak benar-benar fail fizikal.
Semua ia menunjuk kepada fail yang anda mahu buka.
Dan anda pada dasarnya setiap kali, anda menggunakan mana-mana daripada fungsi-fungsi lain
seperti fread atau fwrite atau fgetc atau fgets, adalah
bahawa anda hanya lulus sekitar ini penunjuk kepada semua fungsi-fungsi itu.
Supaya anda tidak benar-benar mengambil yang memfailkan dan menggunakannya untuk majlis anda,
anda hanya mengambil penunjuk dan meletakkan ia untuk fungsi-fungsi
supaya anda boleh menggunakan.
>> Dan jika anda lupa untuk menutup fail anda selepas anda menggunakannya,
program anda akan bocor ingatan.
Pada dasarnya, segala cara yang adalah barang-barang yang buruk akan berlaku
dan program anda akan tidak berfungsi dengan betul.
Dan sebagainya pset dalam mulanya, saya fikir
ada pendek di mana dia explained-- Nate explained-- apa Valgrind adalah.
Semua Valgrind adalah cara untuk anda untuk pastikan anda tak bocor ingatan.
Jadi anda semua ingin pasti anda menonton yang pendek
kerana yang menjelaskan ia dengan baik apa yang berlaku.
OKAY.
Jadi saya pergi melalui itu benar-benar, benar-benar cepat kerana saya benar-benar
mahu ke bercakap tentang Serangga sebelum kamu pergi.
Adakah sesiapa yang mempunyai soalan dari segi konsep?
Kebanyakannya semua ini hanya sintaks yang anda boleh gunakan untuk membaca atau menulis fail.
>> Akhir sekali, kegemaran semua orang.
Kami akan bercakap tentang pset sekarang.
Jadi, mengangkat tangan, berapa ramai daripada anda semua membaca spec minggu ini?
Oh, itu separuh.
Itulah yang baik.
Jadi ini sebenarnya adalah benar-benar, Serangga benar-benar menyeronokkan dalam erti kata
yang anda rasa seperti detektif kerana anda
melakukan semua perkara-perkara ini benar-benar sejuk bahawa anda tidak tahu bahawa anda boleh lakukan
tetapi kini ia adalah benar-benar sejuk bahawa anda boleh melakukannya.
Dan ia sebenarnya banyak lebih mudah daripada anda semua berfikir.
>> Oleh itu, bahagian asas program ini adalah anda berada
akan memuat turun kod sumber atau kod pengedaran ditulis oleh kami.
Dan anda akan mempunyai satu folder dipanggil BMP dan folder lain
dipanggil JPG.
Dalam masa BMP anda, anda berada akan mempunyai tiga program.
Salah seorang daripada mereka telah ditulis untuk anda.
Jadi copy.c adalah program yang kita sudah menulis
untuk anda yang anda akan dimuat turun.
Semua yang dilakukan adalah mengambil sebagai input gambar dan membuat salinan sebagai output.
Itu semua fail yang lakukan.
>> Tetapi apa yang anda mahu lakukan untuk whodunit-- jadi bagaimana ramai daripada anda
semua masih ingat dalam gred kelima atau maybe-- anda mungkin younger-- gred ketiga,
apabila kalian mempunyai mesej rahsia dan anda terpaksa meletakkan sekeping kertas di atasnya
menyahkod mesej?
Ya?
Jadi itu sahaja yang kita lakukan kecuali masa ini untuk komputer.
Oleh itu, kita telah memberikan imej ini indah.
Tidak kelihatan seperti apa-apa tetapi di bawah
ia adalah satu petunjuk yang akan membantu anda untuk menjawab soalan ini, kita bertanya kepada anda.
>> Pada dasarnya apa yang anda mahu lakukan adalah input yang fail,
tweak beberapa perkara di sekeliling, mungkin menyesuaikan warna,
beralih perkara, supaya apa mesej itu boleh datang melalui.
Jadi dalam sana tersembunyi piksel dan maklumat
bahawa jika anda menulis kod anda dengan betul akan memecahkan kod dan memberitahu anda
apa petunjuk ini.
Dan sebagainya beberapa petunjuk berguna tentang bagaimana anda akan pergi tentang menghampiri ini.
>> Anda benar-benar mahu membiasakan diri dengan fail I / O
kerana kita membaca dari fail dan menulis kepada fail.
Betul?
Dan supaya setiap kali kita melakukan itu, yang melibatkan
memfailkan I / O. Anda akan perlu membiasakan diri
dengan, bagaimana anda membuka gambar fail?
Bagaimana anda menulis kepada fail seperti gambar?
Bagaimana anda melakukan semua perkara-perkara?
Itu akan menjadi benar-benar berguna.
>> Kedua, apa kabar akan dapat mengubah
warna yang membersihkan gambar ini?
Ia mungkin akan melibatkan menyesuaikan piksel atau nilai-nilai RGB anda
di suatu tempat di sana, pada asasnya.
Tiada cara yang betul menyelesaikan ini selama anda
can-- selama yang anda boleh jenis menyesuaikan mereka piksel untuk menjadikannya
kelihatan seperti sesuatu yang anda hargai.
Itu sahaja yang kita mengambil berat tentang juga.
Jadi ada banyak cara untuk melakukan ini.
Hanya bermain-main dengannya sehingga anda mendapat sesuatu yang bekerja.
Dan anda akan benar-benar terkejut bagaimana beberapa baris kod
anda perlu benar-benar melakukan ini.
Saya bercakap seperti tiga baris jumlah kod
bahawa anda perlu menulis untuk melakukan ini.
Jadi, jika anda mendapati diri anda menulis 40, 30 baris kod,
anda mungkin lakukan salah.
Apa yang anda perlu lakukan adalah sejenis bermain-main dengan warna
dan melihat bagaimana yang bekerja di luar.
>> Sebab itu kita menuju ke sedikit untuk lebih keras masalah.
Di sini kita mempunyai saiz semula di mana kita meminta anda
supaya- kami memberikan anda sebagai input gambar dan saiz semula anda
imej ini ke dalam sesuatu lebih besar atau sesuatu yang lebih kecil
bergantung kepada dimensi kami memberi anda.
Jadi ingat dalam kuliah Daud dengan cepat
mengerling ke atas bagaimana maklumat dikesan oleh komputer anda
bermakna ia adalah satu jenis fail.
Jadi fail Word mempunyai Khas watak-watak di hadapan yang
memberitahu komputer anda, ia adalah satu fail Word.
Perkara yang sama dengan JPEG a.
Dalam kes ini kita akan untuk memberikan anda satu fail JPEG.
Apa yang kita tahu ialah JPEG fail adalah gambar, bukan?
Tetapi membezakan komputer dalam cara yang sangat khusus.
Jadi pada awal mana-mana fail JPEG, anda
akan mempunyai apa yang dipanggil bitmap maklumat header dan tajuk fail bitmap.
Semua orang-orang yang berada bahagian yang berbeza dari data
yang memberitahu komputer anda, hey, mendengar naik, JPEG datang
dan ini adalah dimensi atau ciri-ciri JPEG itu.
>> Jadi anda semua benar-benar ingin tahu jenis maklumat yang disimpan di dalam
mereka pengepala dan apa yang saiz mereka.
Kerana apabila anda menjalankan melalui program anda,
anda akan mahu melangkau lebih jumlah itu.
Betul?
Kerana anda tidak mengambil berat tentang mengubahsuai kepala,
anda hargai mengubah apa yang selepas.
Betul?
Jadi pastikan anda semua tahu bagaimana besar perkara-perkara yang.
>> Kedua, sebelum anda memulakan cuba untuk mengubah saiz imej anda,
anda mungkin akan mahu menyelamatkan dimensi asal.
Betul?
Kerana jika saya memberitahu anda gambar ini adalah 100 piksel oleh 100 piksel,
dan saya mahu anda untuk membuat empat kali lebih besar,
anda tahu bahawa anda perlu membiak mereka dimensi oleh empat.
Sebab itu anda mahu fail output 400 oleh 400 piksel, sebagai contoh.
Jadi ia adalah benar-benar berguna untuk anda semua untuk menyelamatkan dimensi asal.
Dan kemudian selepas itu, selepas anda selesai saiz semula,
anda boleh menulis tajuk yang baru dengan mereka dimensi baru selepas saiz semula.
>> Dan cara yang anda secara fizikal boleh membuat dalam piksel besar
adalah bahawa anda boleh menulis baru RGB-- ingat, RGB,
semua yang berdiri adalah merah, hijau, dan piksel blue-- ke fail keluar.
Dan anda akan mahu mempunyai jumlah yang berbeza daripada apa yang
kita panggil padding.
Semua padding IS adalah ruang sebelum dan selepas gambar
yang memberitahu your-- dasarnya yang memberitahu gambar anda bagaimana besar ia
perlu mengambil sehingga.
Ini adalah sangat abstrak untuk banyak anda jika anda tidak membaca spec pset,
tetapi ia akan menjadi sangat berguna untuk apabila
anda sebenarnya membaca melaluinya.
Anda seperti, oh, ya, yang masuk akal.
Mengapa saya perlu lakukan ini?
Masuk akal.
>> Akhir sekali, ini mungkin salah satu program yang paling mengecewakan
pernah hanya kerana anda tidak boleh memberitahu jika ia bekerja atau tidak.
Semua program ini, pulih, adalah lakukan adalah bahawa, jika berjalan dengan baik,
ia akan dapat untuk tiba-tiba pulih 50 imej yang
telah hilang pada cakera keras kami.
Dan sebagainya masalah dengan program ini adalah bahawa anda tidak boleh benar-benar menguji
kerana sama ada anda pulih mereka atau anda tidak.
Dan supaya anda jenis hanya perlu bermain-main dengannya,
dan jika program anda adalah berfungsi dengan betul, anda akan
tiba-tiba melihat bahawa dalam direktori anda, anda telah
mendapat jumlah gergasi gambar yang kini di sana.
>> Jadi bagaimana aku akan menghadap masalah ini adalah, kami
akan memberi anda apa yang dipanggil fail card.raw.
Pada dasarnya, itu hanya fail yang rosak
dengan semua gambar-gambar yang disimpan anda akan perlu untuk mendapatkan kembali daripada.
Jadi, anda mungkin akan mahu kepada input card.raw anda, atau terbuka,
fail card.raw anda dan anda akan mahu untuk memanipulasi
ia dapat menyimpan JPEG.
>> Jadi saya akan bermula dengan menjejaki dan menyimpan setiap individu JPEG sebagai anda menemuinya.
Anda tidak akan secara individu semua tiba-tiba hanya membuat semua 50 JPEG.
Anda akan mahu menyimpan mengesan berapa banyak anda membuka.
Dan kemudian anda mahu memastikan, apabila anda
bertulis kepada buffer-- yang anda semua akan tahu apa yang saya bercakap tentang
sebaik sahaja anda membaca spec-- yang anda mahu memastikan bahawa anda menggunakan tidak ditandatangani
penampan char.
>> Dan kemudian anda ingin bertanya diri persoalan,
berapa banyak bait berada dalam CF-- berada dalam fail kad?
Itulah berapa banyak anda akan mahu membaca ke dalam buffer anda.
Anda akan ingin memastikan align dua kerana anda
tidak akan mempunyai memori rawak bocor keluar.
Anda tahu dengan tepat berapa banyak bait yang anda perlukan dan bagaimana banyak
bait yang anda ingin ia mempunyai.
>> Dan kemudian akhirnya, anda mahu menggunakan fungsi yang dipanggil sprint--
Cetakan f-- untuk menjana fail adat nama-nama untuk setiap JPEG baru yang anda mencari.
Jadi seperti yang anda membuat dan mencari JPEG dalam kad anda,
anda akan mahu menyimpan mereka dan menamakan mereka.
Betul?
Dan supaya anda akan hendak menggunakan fungsi yang
untuk mewujudkan nama-nama yang boleh menyimpan semua JPEG anda.
>> Dan akhir sekali, jangan lupa untuk menutup setiap JPEG selepas anda selesai.
Kerana apa yang anda akan lakukan adalah anda berada
akan mungkin mempunyai beberapa jenis gelung yang
iterates melalui semua JPEG anda.
Anda akan menulis JPEG dan menamakan ia sebagai anda menemuinya.
Tetapi selepas anda selesai dengan setiap satu JPEG,
anda perlu menutupnya supaya anda boleh mula lebih dan bergerak ke gambar seterusnya.
Dan sebagainya sesuatu yang benar-benar menyeronokkan yang kita suka lakukan,
kerana ini adalah apa-apa masalah pelik menetapkan tetapi juga masalah weirdly memuaskan
yang ditetapkan, adalah bahawa semua gambar-gambar yang kita ada untuk anda, jika anda pulih dengan baik,
semua gambar-gambar adalah gambar-gambar tenaga pengajar yang indah anda, kedua-dua
Harvard, di sini-- dan di sini di Yale.
Dan jika anda berlaku untuk mendapatkan semula semua gambar-gambar ini
dan mengenal pasti kakitangan ahli-ahli dalam kad-kad,
dan mengambil selfies kami jika anda mencari kami di sekitar kampus,
untuk setiap gambar yang anda hantar kepada kami, kami akan memberikan anda satu gigabait ruang Dropbox.
>> Jadi mari kita buat matematik di sini.
Jika ada 50 gambar dan 50 ahli tenaga pengajar,
jika anda berlaku untuk mencari semua 50 daripada kita, itu 50 gigabait Dropbox,
pada dasarnya, kami akan memberikan anda semua.
Jadi beberapa insentif menambah tambahan jika anda semua tidak hanya
mengambil berat tentang pulih kehilangan imej.
Terdapat juga beberapa insentif tambahan.
Ia adalah satu set masalah menyeronokkan.
Yang sebenarnya.
Ia adalah jenis mengecewakan tetapi kemudian ia menjadi benar-benar menyeronokkan apabila anda sedar,
wow, ia bekerja dan sekarang saya mempunyai semua gambar-gambar ini
bahawa saya baru sahaja dicipta oleh diri saya sendiri.
>> Sebarang pertanyaan mengenai pset?
Bagi sesiapa yang sudah bermula, jika anda mempunyai soalan,
Saya akan berada di sini untuk beberapa minit selepas seksyen jika anda mahu bercakap dengan saya.
Syabas, guys.
Saya minta maaf, saya maklumat dibuang di anda semua.
Penunjuk benar-benar, benar-benar mencabar dan mengecewakan.
>> Dan saya benar-benar gembira kerana kamu tinggal bersama saya.
Kami akan bercakap lebih mendalam kira-kira seminggu yang akan datang
seperti yang kita mula melakukan jadual hash dan lebih banyak fungsi yang melibatkan mereka.
Yeah.
Jadi, jika sesiapa yang mempunyai apa-apa soalan, saya akan berada di sekeliling.
Terima kasih kerana datang dan mengambil lebih gula-gula kerana ada lagi gula-gula.
Sejuk.