ALLISON BUCHHOLTZ-AU: Hei, semua orang. Selamat datang ke bahagian. Hari ini hanya akan menjadi semua kuiz mengkaji untuk kuiz anda pada hari Rabu. Saya harap semua orang ingat bahawa mereka mempunyai kuiz, Rabu. Dan jika anda tidak melakukan, baik, sekarang anda telah diingatkan. Jadi Rabu pastikan anda muncul untuk kelas atau penginapan lain sebagai perlu. Kalian akan menjadi luar biasa. Ia akan menjadi besar. Dan saya akan melakukan semua yang saya boleh untuk membantu mempersiapkan anda hari ini untuk kuiz anda sekarang. Dan juga sekiranya anda tidak tahu, ada sesi kajian lebar kursus hari ini pada pukul 7 Makmal Northwest B103 bilik. Anda boleh melihat saya lagi untuk encore sebagai Saya akan membawa sebahagian daripada sesi kajian juga. Jadi, jika anda tidak boleh mendapatkan cukup dari saya sekarang, anda boleh datang lagi malam ini. Baiklah, perkara jadi pertama pertama. Hanya beberapa tips kuiz sebelum kita benar-benar menyelam ke ulasan. Jadi seperti mana-mana ujian, amalan pasti akan membantu anda. Ada ujian dari masa lalu enam atau tujuh tahun di sana, jadi itu banyak amalan bahan untuk kalian untuk memiliki. Dan sebenarnya, hari ini adalah benar-benar hanya akan pergi atas apa-apa topik bahwa kalian mempunyai soalan pada juga sebagai bekerja melalui latihan soal dari kuiz sifar. Jadi saya akan muntah kuiz sifar dari tahun lalu di sini, dan kita dapat mengatasi masalah bahwa kalian ingin. Jadi berlatih. Anda akan mula melakukan hari ini. Kod di atas kertas. Jadi ya, jika semua orang sebenarnya boleh keluar kertas, yang akan menjadi besar, kerana anda tidak akan mempunyai komputer anda pada ujian dan menulis kod dengan tangan sering jauh lebih sukar daripada apa yang anda harapkan. Anda digunakan untuk hanya melihat dan menaip itu, dan anda mempunyai compiler untuk membantu anda apabila anda mempunyai kesalahan, tetapi anda tidak mendapat bahawa pada ujian. Sehingga benar-benar penting untuk benar-benar dapat menulis kod, dan memori otot melakukan dengan tangan benar-benar akan membantu anda. Jadi kita mendapatkan sedikit dekat. Ini Isnin. Peperiksaan anda pada hari Rabu. Tetapi jika anda mempunyai masa, pasti mengambil satu ujian dari tahun lalu atau tahun sebelum di bawah kekangan masa dari satu jam setengah. Hanya melumpuhkan satu jam dan setengah masa, dan duduk sendiri, dan hanya bekerja melalui masalah-masalah seolah-olah anda sebenarnya mengambilnya, kerana salah satu perkara yang paling besar yang kita dengar kuiz adalah bahawa mereka adalah sangat lama. Ia adalah banyak bahan. Ada banyak soalan, dan kebanyakan orang tidak boleh menyelesaikan. Saya tahu bahawa saya benar-benar tidak selesai kuiz saya ketika saya mengambil kelas. Dalam pada itu, sebagai kurang seksyen selesa, memahami bahawa kursus ini yang dimaksudkan untuk melayani orang-orang dari semua peringkat. Sebab keseluruhan kami mempunyai anda berpecah kurang selesa, di suatu tempat antara, dan lebih selesa adalah untuk jenis menjadikannya lebih adil. Dan jika anda kurang selesa, itu tidak perlu semata untuk mendapatkan segala-galanya. Seperti jika anda telah mendapatkan segala-galanya, anda mungkin akan berada di bahagian yang lebih selesa. Jadi jelas tidak memukul dirimu sendiri terlalu sukar jika anda tidak dapat menyelesaikan ujian. Ambillah dari saya, saya tidak melakukannya. Saya masih concentrator. Saya masih membantu mengajar kursus. Anda akan baik-baik saja. Baik. Dan akhir sekali, tidur. Tentunya dengan setiap ujian kami selalu mengatakan ini. Menjejalkan malam sebelum dan tidak mendapat apa-apa tidur tidak elok mungkin jika yang kerja-kerja untuk anda, pergi untuk itu. Tetapi bagi sebahagian besar orang, untuk mendapatkan tidur, membiarkan sisa otak anda dan mendapatkan sebelum datang untuk ujian benar-benar akan membantu anda. Juga akan ada hampir pasti menjadi gula-gula pada ujian, jadi anda perlu melihat ke hadapan untuk. Kalian akan melakukan yang besar. Ini akan baik-baik saja. Dan sekarang pada jam yang berikutnya dan setengah saya akan cuba dan persiapan anda sebaik yang saya boleh. Jadi saya mempunyai slaid dari pada dasarnya semua bahagian sehingga sekarang. Saya tidak akan pergi melalui semua daripada mereka kerana yang tidak dilaksanakan dalam masa satu jam setengah juga sebagai bekerja melalui masalah amalan. Jadi, saya mempunyai senarai topik. Ini semua adalah perkara-perkara yang yang kita dapat pada kuis Anda. Jika ada apa-apa yang benar-benar melompat keluar yang anda mahu pergi ke, yang anda ingin saya pergi lebih dari segi konsep, Saya boleh mencuba dan memberikan Anda gambaran sana. Atau jika anda ingin melompat tepat di untuk melakukan masalah amalan bersama-sama, kita boleh melakukan itu. Terpulang kepada anda semua. Tidak ada yang ramai di antara kamu. Jadi itu apa sahaja yang kalian sukai. Saya mahu menjadi yang paling membantu ke arah kalian. Jadi, saya akan memberitahu anda hanya melihat. PENONTON: Satu perkara yang carta yang kita simpan katakan tentang tumpukan dan tumpukan. Hanya seluruh Idea di sebalik itu dan apa yang bermakna. ALLISON BUCHHOLTZ-AU: Ya, OK. Ini semua jalan di akhir, jadi biar tatal. PENONTON: Kami tidak perlu melakukannya sekarang, tetapi apa sahaja. ALLISON BUCHHOLTZ-AU: Adakah anything-- satu ini. Apakah jenis kabur bagi orang-orang? PENONTON: Ya, saya yang kedua. Dan boleh kita juga buffer overflow? ALLISON BUCHHOLTZ-AU: Buffer overflow? OK. Jadi buffer overflow cukup mudah hanya untuk bercakap tentang. Ia pada dasarnya buffer anda berfikir tentang beberapa array memori yang anda ada, kan? Kami biasanya bercakap mengenai buffer overflow apabila Anda tidak memeriksa berapa banyak pengguna adalah meletakkan dalam, kan? Dan idea itu dengan buffer overflow adalah mereka letakkan jauh terlalu banyak data untuk ruang yang anda telah diperuntukkan bagi mereka, kan? Jadi, jika anda katakan, memberikan saya beberapa pesan, kami tidak menganggap bahawa mereka akan memberikan kita mesej panjang yang berpatutan. Mungkin beberapa garis, barang kecil. Jadi kita tidak cek. Sebaliknya mereka memberi kami makan dalam seluruh buku itu pesan, dan meluap jumlah ruang yang kita telah diperuntukkan untuk ini. Dan apa yang berlaku ialah ia mungkin menimpa tempat-tempat yang ia tidak sepatutnya. Jadi saya tahu Profesor Malan berkata sesuatu tentang serangan buffer overflow. Supaya di mana kehendak input pengguna beberapa jumlah besar data dengan harapan bahwa ia akan menimpa masa lalu akhir buffer anda dan menggantikan something-- saya tertanya-tanya Saya ada mereka slaid di sini. Saya tidak fikir kita perlu slaid di sini. Tapi pada dasarnya ia menimpa beberapa bahagian memori yang membolehkan dia akses ke bahagian-bahagian dari komputer anda bahawa anda tidak akan biasanya mempunyai akses kepada. Hal terbesar dengan buffer overflow hanya untuk memahami bahawa ia yang berlaku apabila anda tidak memeriksa berapa banyak anda pengguna adalah meletakkan dalam. Apabila anda tidak ada jenis melindungi terhadap itu. Dan pada yang paling sederhana hal, ia hanya pengguna anda memasukkan jumlah yang besar data dalam usaha menulis ganti beberapa keamanan bahagian ingatan anda. Itu semua itu. Jadi ini di sini, stack dan timbunan. Pada dasarnya semua ini adalah hanya representasi memori dan di mana perkara-perkara yang disimpan. Itu benar-benar jenis semua yang anda perlu tahu. Hal-hal terbesar yang yang anda perlu tahu adalah bahawa- saya melihat apakah ada better-- di sini. Jadi, ini adalah tumpukan di sini. Jadi tumpukan berkaitan dengan semua fungsi anda yang anda sedang gunakan pada bila-bila masa. Dan apa yang penting untuk diingat terkeluar dari minggu lepas dengan malloc adalah bahawa anda tidak benar-benar mempunyai kawalan yang perlu di atasnya. Ia semua bergantung kepada ketika tertentu fungsi pelaksana. Dan apabila mereka melaksanakan, mereka mempunyai apa yang dipanggil bingkai tindanan yang pergi di sini. Jadi semua jenis berlaku tanpa apa-apa input nyata daripada anda. Anda menulis program anda, dan anda menjalankannya, dan tumpukan jenis mengambil peduli dengan sendirinya kerana ia perlu. Oleh itu, jika dalam utama yang anda panggil kubus, yang akan dilalui di sini. Itu akan membuat bingkai. Tetapi tidak ada yang jelas melakukan untuk membuat kerangka tumpukan selain menulis fungsi untuk memulakan dengan, OK? Apa yang jenis di bawah anda kawalan adalah tumpukan dengan malloc. Jadi, setiap kali anda sesuatu malloc, anda mengambil ingatan dari tumpukan. Dan itu adalah memori yang anda mempunyai, kerana kekurangan perkataan yang lebih baik, kawalan nyata ke atas, kerana ingat dengan malloc itu pada dasarnya ada sehingga anda mengatakan sebaliknya. Bagi anda yang menonton seksyen minggu lepas, itu ada sampai Anda kirim pergi. Ia akan berada di sana kecuali sebaliknya tidak diberitahu. Jadi timbunan itu hanya sesuatu boleh anda fikirkan sebagai memori bahawa anda mempunyai kawalan ke atas. Dan orang-orang yang hanya dua perkara besar yang berbeza. Selain daripada itu, anda tidak perlu mempunyai perlu bimbang terlalu banyak tentang timbunan dan timbunan pertanyaan atau biasanya lebih adil jika anda mempunyai parameter lokal atau fungsi itu akan menjadi pada tumpukan atau longgokan itu. Jelas dalam hal ini ia akan menjadi tumpukan. Jika anda mallocing sesuatu, mana yang datang dari? Tumpukan. Jika anda lihat pada amalan kuiz, mereka umumnya jenis soalan yang mereka miliki. Anda tidak perlu bimbang terlalu banyak tentang hal itu. Anda masuk ke dalam dengan lebih jelas tentang timbunan dan timbunan kemudian atas atau di dalam kelas CS lain. Jadi hanya mempunyai semacam gambaran umum tentang apa ini akan baik, yang saya hanya jenis pergi. Mana-mana topik yang lain? Ya? PENONTON: Bolehkah anda pergi ke pointer lagi benar-benar cepat? ALLISON BUCHHOLTZ-AU: Pointer? Adakah anda ingin konseptual gambaran keseluruhan pointer atau adakah anda berlatih dengan pointer? PENONTON: Jenis seperti sintaks. ALLISON BUCHHOLTZ-AU: Sintaks? Yeah. OK, kita sudah ada. Ya, jadi ini adalah hanya jenis sesuatu apabila anda mempunyai fungsi rekursif, setiap kali fungsi rekursif dipanggil, ia hanya menambah tumpukan bingkai lain. Cukup banyak contoh bagaimana anda tidak benar-benar mempunyai kawalan ke atas bingkai pada stack anda. OK, pointer. Baiklah, jadi mewujudkan petunjuk. Ingat, ia hanya menaip bintang. Jadi, apa pun jenis data yang Anda akan menunjuk ke. Jadi ini akan menjadi penunjuk kepada int. Ini akan menjadi penunjuk kepada char. Ini akan menjadi penunjuk kepada apungan. Jadi pada dasarnya apa sahaja Anda mahu ia menunjuk kepada, bintang adalah bagaimana anda mengisytiharkan penunjuk, OK? Tetapi maka jelas mendapat sedikit rumit apabila anda mempunyai penunjuk atau anda mempunyai bintang apa sahaja. Jadi perbezaan besar adalah apabila anda declaring-- jadi kita harus some-- jadi ini mengambil beberapa int bintang. Jadi ini adalah beberapa penunjuk panggilan x sebagai int, kan? Jadi ingat apa yang dilakukan adalah ini menyeru sistem x. Dan ini akan mempunyai beberapa alamat, kan? Jadi mari kita hanya mengatakan ini adalah alamat kami. Pointer memegang alamat. Jadi apa ini mengatakan adalah bahawa ini lokasi, kami menyimpan int. Jadi satu lagi cara kita boleh memikirkan ini adalah bahawa ini adalah beberapa int. Kita belum benar-benar diberikan kepada apa-apa lagi, tetapi ia hanya int. Jadi kita boleh lakukan adalah jika kita membintangi x sama dengan 5, ini menjadi 5, OK? Ini mengatakan pergi untuk apa pun yang x ialah menunjuk, jadi pergi ke alamat ini dan membuat ia sama dengan 5. Oleh itu, kita menetapkan 5 ke alamat ini, kan? Dan kemudian jika anda melakukan ini, ini memberi kami alamat. Ini adalah alamat pengendali. Jadi apa alamat x? Kita tidak tahu. Kami tidak pernah menyerah hak itu alamat. Kita boleh mengatakan itu some-- sekarang kami berikan ia alamat, jadi alamat ialah 4. Dan sebenarnya jika kita melalui sesuatu seperti ini, baik dari apa yang kita lakukan. Jadi bekerja melalui sini-saya dapati ia membantu jika anda menarik keluar pointer. Jika anda dalam peperiksaan, saya sangat mengesyorkan melukis kotak. Jadi yang pertama ini, int x sama dengan 5. Ini hanya bermakna kita mempunyai beberapa meletakkan dalam ingatan iaitu 5, kan? Dan meja kami di sini memberitahu kita bahawa itu di alamat 0x04. Dan kemudian kita membuat beberapa penunjuk. Jadi mari kita istirahat ini turun satu demi satu. Jadi ini mewujudkan beberapa kotak untuk int, kan? Ia akan memegang alamat penerima itu an. Jadi ini adalah beberapa penunjuk. Dan kapur ini adalah benar-benar kecil. Oleh itu, kita mempunyai beberapa penunjuk di sini. Dan meja kami memberitahu kita yang alamat adalah 0x08. Sejuk. Dan kami memberikan ke alamat x. Ingat, pointer memegang alamat, OK? Jadi jika kita ingin terus x, kita ada menggunakan operator alamat, yang adalah ampersand, untuk mendapatkan alamat x, yang dalam hal ini, 0x04. Kemudian jika kita mempunyai beberapa salinan int, ini hanya menciptakan beberapa kotak lain yang memegang salinan int dipanggil. Dan jika kita menetapkan ke this-- jadi ini adalah rujukan itu. Jadi yang dikatakan pergi ke apa sahaja alamat penunjuk memegang. Penunjuk memegang alamat ini, jadi kami akan pergi ke sini, dan kita berkata, OK, apa yang ada di dalamnya? Ini adalah 5. Jadi menjadi 5 salinan. Masuk akal? Bagaimana jika saya cuba untuk menetapkan ini hanya pointer. Apa pointer sebenarnya sama? Ia hanya akan menjadi apa sahaja penunjuk mengandung, kan? Kemudian apa jika saya melakukan ini? Apa yang akan menjadi salinan ini? PENONTON: 0x08. ALLISON BUCHHOLTZ-AU: Yap, alamat pointer kami. Mana-mana bahagian yang keperluan untuk dijelaskan semula? Sejuk. Pasti ada yang sangat masalah-senang di kuis satu yang kita dapat atas bahawa memberikan anda lebih banyak latihan. Orang-orang dari minggu lepas boleh memberitahu anda ia tidak begitu buruk. Kami mendapat melalui keseluruhan sebuah grafik, dan semua orang melakukan besar. OK, jadi itu gambaran keseluruhan sintaks pointer. Hal terbesar adalah memahami bagaimana untuk menciptakan mereka, melakukan rujukan, dan alamat, OK? Sejuk. Mana-mana topik yang lain sebelum kita menyelam ke dalam amalan. Juga jika kita akan melalui masalah amalan dan ada sesuatu yang anda mahu ulang kaji, kita boleh melakukannya juga. Adakah anda mempunyai sesuatu? PENONTON: Structs dan daftar link. ALLISON BUCHHOLTZ-AU: Structs dan dihubungkan senarai, OK. Jadi struct. Kami benar-benar akan malam ini ini juga. OK, jadi struct. Structs pada dasarnya hanya satu cara bagi anda untuk memegang beberapa nilai dari jenis yang berbeza. Jadi dengan pelbagai kami terbatas untuk satu jenis data. Array kita sama ada mempunyai hanya menjadi nombor, atau hanya menjadi aksara, atau hanya mengapung. Tapi mungkin anda perlu mengandungi lebih dari itu. Mungkin anda perlu hold-- jika anda bercakap tentang seorang pelajar, Anda akan mempunyai rumah mereka, mereka Nombor ID, umur mereka, di mana mereka tinggal, kan? Dan semua dari mereka adalah berbagai macam jenis. Jadi, anda tidak boleh menyimpan mereka semua dalam array. Jadi apa yang boleh anda lakukan adalah anda boleh membuat struct, yang Anda boleh anggap sebagai anda Jenis data peribadi sendiri. Jadi, bukan hanya memiliki ints dan bukan hanya memiliki mengapung, anda boleh mempunyai pelajar jenis yang mempunyai semua bidang tersebut di dalamnya. Jadi cara kita memulakan struct kami is-- sebenarnya kerana tulisan saya adalah sesuatu yang buruk, kita akan beralih kepada menaip. Woo. OK, jadi jika kita ingin membuat satu struct-- Aku hanya akan ke sana ke sini. Tidak mengambil kira dalam apa jua utama yang akan kami gunakan nanti. Jadi, cara yang anda mahu lakukan ia adalah dengan struct typedef. Dan mari kita sebut pelajar ini kerana itulah yang saya gunakan. OK, jadi typedef bermakna anda menentukan jenis baru, OK? Ada nuansa ke dalam apabila anda melakukan hanya struct berbanding struct typedef. Bagi tujuan dan tujuan, kalian hanya akan menganggap mereka kira-kira yang sama dan hanya menggunakan typedef struct untuk saat ini. Ini akan menjadi cara yang lebih jelas dalam anda P seterusnya menetapkan apa perbezaan itu adalah, tetapi saya tidak fikir anda perlu bimbang tentang itu sekarang. Saya akan lebih suka anda tahu bagaimana untuk membuat satu, mengaksesnya, dan menetapkan [? nilai. ?] Sejenis baru struct, dan kita menyebutnya pelajar. Jadi setelah kami selesai membuat ini, bagi semua maksud dan tujuan, Anda akan mempunyai jenis yang dikenali sebagai pelajar. Dan anda boleh berfikir ia hanya sebagai jenis yang seperti int, atau apungan, atau char. Ia hanya satu lagi jenis, OK? Jadi dalam satu ini, apa yang kita ada? Kami mempunyai mungkin nama. Jadi mungkin kita ingin nama tali. Dan kami mempunyai mungkin int itulah ID. Dan kita mempunyai satu lagi di itu nombor telefon. Dan kami telah some-- mari kita lihat. Apa lagi yang mungkin kita ada? Kami akan mempunyai beberapa string di rumahnya. Semua perkara-perkara yang seseorang pelajar. Jadi ini mewujudkan struct sekarang. Jadi bagaimana kita boleh membuat seorang pelajar? Jika kita mempunyai beberapa pembolehubah yang akan bercakap tentang Walker di sini, jadi kami have-- kami hanya akan memanggil walker ini. Dia perlu jenis yang. Apa jenis anda? PENONTON: Pelajar. ALLISON BUCHHOLTZ-AU: Pelajar. Jadi ini hanya menciptakan sesuatu objek yang anda boleh memikirkan yang mempunyai semua perkara ini. Yang baru saja dibuat seorang pelajar walker. Jadi sekarang kita perlu berupaya untuk menetapkan semua ini, kan? Jadi tidak ada yang masih ingat bagaimana kita akses dalam struct? PENONTON: Tempoh. ALLISON BUCHHOLTZ-AU: Tempoh Tepat. Jadi jika kita ingin menetapkan dia nama, kita boleh berbuat demikian. Jelas akan ini adalah-- bahagian ini di sini akan berada dalam utama, sehingga benar-benar membiarkan saya melakukan ini. Menyatakan ini atas utama sehingga yang boleh kita gunakan dalam masa utama. Jadi sekarang saya ingin lakukan ID, dan kami hanya akan melakukan beberapa di sana, dan kemudian kami akan memberikan sebuah rumah. Bam. Sejuk. Jadi sekarang seharusnya kita merasa perlu untuk akses apa-apa kemudian on-- mungkin we-- jika kita merasa perlu untuk mengakses apa-apa, mari kita hanya melakukan ID int salinan. Dan saya mahu untuk menyalin ID Walker ke dalam ini. Bagaimana saya melakukannya? Anda perlu akses dalam walker struct kepada [? pergi ke itu?] [? E?]. Dan dengan cara yang sama yang kita ditugaskan di sini, bagaimana mungkin kita mengaksesnya apabila kita hendak memberikan yang nilai kepada sesuatu yang lain? PENONTON: Walker.id. ALLISON BUCHHOLTZ-AU: Ya, betul-betul. Jadi itu cukup banyak semua yang anda perlu tahu untuk struct. Anda hanya perlu memikirkan mereka sebagai variabel lain. Pada dasarnya membuat anda Jenis pembolehubah sendiri, OK? Anda menggunakannya untuk menyatakan pembolehubah dalam mana-mana cara. Di sini walker masih variabel. Ia hanya mempunyai pelajar jenis sekarang bukan dari int jenis, atau string jenis, atau char jenis. Jika ada cara mudah untuk bercakap tentang struct, ia adalah benar-benar hanya mencipta jenis data anda sendiri yang membolehkan anda untuk kumpulan semua berbeza jenis data bersama-sama. Adakah ini masuk akal? OK. Itu dan mengakses dengan titik-titik. Hampir semua yang anda perlukan. OK, di mana PowerPoint saya pergi? Ini dia. Baik ini adalah pelik. Aha. OK, sejuk. Hal-hal lain atau kita ingin kepala berlatih? Berlatih? OK. Awesome. Saya akan keluar dari ini. Jika pada sebarang masa semasa soal latihan, Saya gembira untuk merubah dan pergi melalui perkara. Jadi saya mempunyai kuiz sifar di sini. Jika anda semua ingin menarik di komputer anda, hanya suka mengambil masa lima minit untuk menelusuri. Mungkin memilih beberapa atas soalan yang anda mahu pergi lebih. Jika kalian tidak boleh membuat keputusan, kami hanya akan perlahan-lahan mula bekerja melalui mereka, tapi aku yakin ada akan ada beberapa soalan yang anda sangat ingin berbicara tentang dan mempunyai saya bekerja melalui dengan anda semua. Jadi, pergi ke depan dan mengambil masa lima minit. Tatal melalui. Dan ini adalah kuiz tahun 2013. PENONTON: Zero? ALLISON BUCHHOLTZ-AU: Ya, kuiz sifar. Kami tidak melakukan kuiz satu barangan. Kami akan melakukannya dalam beberapa minggu. Juga untuk anda yang datang terlambat, kami mempunyai gula-gula, begitu juga kalian mahu gula-gula? PENONTON: Tentu. ALLISON BUCHHOLTZ-AU: Saya hanya akan lulus sekitar. Hei, jika anda yang masuk sini awal, anda mendapatkan lebih banyak gula-gula. Tidak apa-apa. Ben, adakah anda mahu gula-gula? Anda mahu beberapa? Terdapat juga Snickers jika ada yang ingin Snickers. Aku akan meninggalkan mereka di sini dan di sini. Jangan ragu. Adakah anda mahu lagi? PENONTON: Semua yang ditetapkan. Matur nuwun. ALLISON BUCHHOLTZ-AU: Dan Aku punya bagus tumpukan kecil ada di awal. Kalian bisa mengambil kuiz dan Saya dapat memiliki pesta kuiz dengan kadar. Itu huru-hara. 900 ujian. Ia akan menjadi seronok begitu banyak. Akan menjadi besar. Aku cukup yakin itu salah satu daripada staf ikatan terbesar malam tahun ini. Apakah ada orang melakukan kuiz dari sifar tahun lalu belum keluar dari rasa ingin tahu? PENONTON: Bagian itu. ALLISON BUCHHOLTZ-AU: Bagian itu, OK. Adakah anda mempunyai soalan-soalan mengenai salah satu dari mereka? PENONTON: Saya sudah pergi ke waktu pejabat. Matur nuwun walaupun. ALLISON BUCHHOLTZ-AU: Nah, mudah-mudahan ia masih jenis membantu. Bilakah anda pergi ke waktu pejabat untuk itu? PENONTON: TF saya telah mereka petang ini. ALLISON BUCHHOLTZ-AU: Oh. Siapa TF anda? PENONTON: Fred [? Wujaya?]. ALLISON BUCHHOLTZ-AU: Ada begitu banyak TF. Begitu banyak. Baik. Ada yang punya untuk memulakan yang saya dapat mencatat bahawa kami ingin bekerja di? Saya menganggap pointer satu dengan meja. Pergi untuk itu. PENONTON: Mungkin suis satu. ALLISON BUCHHOLTZ-AU: Jadi angka 12? Saya menganggap angka 8 dan 9 mungkin orang-orang yang mahu pergi lebih. PENONTON: Dan 10 dan 11. ALLISON BUCHHOLTZ-AU: Dan kalian tahu anda akan mendapat satu halaman catatan, kan? PENONTON: Ya, jadi apakah kami dibenarkan untuk memakai itu. ALLISON BUCHHOLTZ-AU: Anda dibenarkan untuk meletakkan apa sahaja yang anda mahu. Dan ia boleh ditaip. Sejauh yang saya ingat, kita telah ditaip. PENONTON: Anda dapat melakukan belakang dan kedua-dua pihak? ALLISON BUCHHOLTZ-AU: Ya, kedua-dua belah pihak. Jadi sesuatu seperti tumpukan dan [? back end?] tumpukan, anda berjalan kali. Berguna. Perkara yang mungkin sedikit tentang petunjuk untuk mengingatkan anda. Syntax untuk perkara-perkara. Setelah hanya seperti tengkorak program dapat super berguna. Saya tahu bahawa saya selalu lupa apa yang Saya sepatutnya menulis untuk int main, kerana saya selalu hanya menyalin paste dari P set saya sebelum ini atau ia sudah ada di sana, jadi Saya tidak pernah benar-benar telah menulisnya, sehingga memiliki yang boleh menjadi super berguna. OK, jadi mengapa tidak kita bermula dengan nombor 8 itu? Baik. OK. Oleh itu fikirkanlah program di bawah. Jadi jelas apabila kita melihat petunjuk, ia mungkin idea yang baik untuk mula melukis, kan? Saya mahu tahu di mana semua saya potongan-potongan besar kapur pergi. Ini adalah jenis menjengkelkan. Jadi kami ada di sini beberapa fungsi swap yang akan mengambil dalam dua pointer. Jadi dalam hal ini, mereka sebenarnya harus beralih perkara berbanding swap asal kami fungsi yang hanya mengambil dalam salinan. Jadi apa yang ia akan lakukan is-- mari kita mulakan dengan utama, kerana itulah di mana 1 adalah. Oleh itu, kita mempunyai beberapa int x 1. Kami mempunyai beberapa y yang sama dengan 2. Dan kemudian kita mempunyai beberapa swap yang akan mengambil mereka. Dan mari kita lihat apa yang kita ada di sini. Dan dalam table-- kami oh anak. Bagaimana aku akan melakukan hal ini? Aku akan menarik meja saya di sini. Hampir tidak menjadikannya di sana. Hampir tidak menjadikannya. 1, 2, 3, 4, 5, 6, 7. Dan mereka memberikan kita bahawa 1 adalah 1, dan 1 2. Sejuk. Awesome. Jadi 3. Dan ada [? 1.?] Baik. Dan kemudian alamat x ialah 0x123. Dan y adalah Ox127. Sejuk. Baik. Saya mahu anda semua bekerja pada ini untuk kerja-kerja hanya like-- di atasnya dengan orang-orang di sekeliling anda. Saya berharap saya telah berkata semasa saya sedang menyiapkan. Kerja-kerja itu. Cuba dan bekerja di dalamnya dengan diri kamu selama beberapa minit, dan kemudian saya akan bekerja di atasnya dengan anda. Kerana satu-satunya cara yang anda benar-benar akan belajar adalah dengan melakukannya sendiri. Jangan bimbang. Nasib baik. OK, mengapa tidak kita perlahan-lahan mula bekerja melalui ini. Sehingga semua orang mendapat selepas saluran satu, x ialah 1. Selepas saluran dua, x dan y adalah 1 dan 2, kan? Sejuk. Jadi garis tiga adalah di mana perkara-perkara jadi menarik sudah tentu. Jadi apa yang kami lakukan di sini adalah kita sekarang telah bertukar. Kita katakan bahawa x dan y mempunyai titik-titik, atau mereka mempunyai alamat x dan y, kan? Jadi dalam hal ini, tiga, berapakah nilai dari? yang telah berlalu dalam, telah diberikan nilai alamat x, kan? PENONTON: 1? ALLISON BUCHHOLTZ-AU: Jadi, tambahkan ke x? Apa alamat x? PENONTON: 0x123. ALLISON BUCHHOLTZ-AU: Tepat sekali. Tetapi, apa itu sebenarnya menunjuk ke? Jika kita dereference, nilai apa yang akan memberi kita. PENONTON: 1. ALLISON BUCHHOLTZ-AU: Ia akan memberi kita 1, kerana apa yang kita katakan adalah pergi ke ini alamat, beritahu kami apa nilainya. Jadi apa yang akan b? PENONTON: 0x127. ALLISON BUCHHOLTZ-AU: Tepat sekali. Jadi ia adalah alamat y. Kemudian apa [? dereference? ?] PENONTON: 2. ALLISON BUCHHOLTZ-AU: OK, jadi sekarang empat. Kami berkata adalah equal-- baik sekarang kita sudah dilakukan int temp adalah sama dengan bintang dari. Jadi apa yang berubah? Hanya ada satu hal yang berubah di sini. Apa itu? PENONTON: Temp. ALLISON BUCHHOLTZ-AU: Para suhu. Oleh itu, kita boleh menulis semula semua ini. Satu strategi yang baik untuk ini hanya memikirkan apa perubahan, kerana yang paling sering hanya ada satu hal yang akan berubah pada bila-bila diberikan, OK? Jadi kami telah ditugaskan temp. Sekarang titik berikutnya, lima, kita telah membuat bintang yang bersamaan dengan bintang b. Jadi apakah perubahan ini? PENONTON: Star a. ALLISON BUCHHOLTZ-AU: Star, jadi segala sesuatu yang lain tetap sama. Dan apa yang bintang yang sama? PENONTON: 2. ALLISON BUCHHOLTZ-AU: 2. Lovely. Awesome. OK, sekarang dan kemudian kita mempunyai mula b adalah sama dengan suhu. Jadi satu-satunya perkara yang berubah-ubah adalah bintang b. Segala sesuatu yang lain tetap sama. Dan apa yang bintang b sama dengan sekarang? Dan anda telah selesai meja. Kerana di akhirnya, jika kita katakan x dan y, kita tahu bahawa di point-- ini kita tahu bahawa apabila kita berubah bintang untuk 2, apa yang melakukan itu kata OK, di menangani 0x123 sini, mengubahnya. Sekarang ini adalah 2. Dan kemudian pada masa ini, kita kata OK, pergi ke bintang b. Jadi pergi ke alamat di 0x127 dan membuatnya menjadi 1. Jadi sekarang sekurang-berakhir apabila kita benar-benar kembali untuk utama, kita benar-benar mempunyai yang x ialah sama dengan 2 dan y adalah sama dengan 1. Semua orang yang baik itu? OK, sejuk. Nombor 9. Kalian bekerja pada ini. Saya akan mendirikan papan supaya kita dapat menarik melaluinya. Ia akan menjadi letupan. Tabel besar bisa benar-benar menakutkan, aku tahu. Tetapi jika anda hanya membawa mereka satu baris pada satu masa, mereka mendapat banyak kurang menakutkan. Baik. Jadi, anda tahu bahawa ini akan mempunyai pergi melalui pertama utama, kan? Kepada asal x dan y dan kemudian cuba untuk menukar mereka. Begitu pun swap adalah di atas, cara sebenar ia berjalan adalah bahawa kita akan melalui utama, dan kemudian ia memanggil sehingga menukar, oke? Jadi semua orang tahu itu. Jadi yang mana yang anda orang ingin memulakan dengan? Apakah orang benar-benar yakin kira-kira satu ini? Atau bahkan sebagian pasti? Apa kata kita mulakan dengan x? Apa yang kita fikir x? PENONTON: 1. ALLISON BUCHHOLTZ-AU: 1. Jadi mengapa adalah 2. Dan itu kerana perbezaan besar di sini adalah bahawa kami hanya lewat salinan, kan? Kami tidak lewat rujukan. Jadi, walaupun pada akhir ini x program dan y telah di tahap yang sama, kerana mereka hanya salinan dalam fungsi swap. Mereka tidak benar-benar berubah, kan? Jadi bagaimana pula dengan a, b, dan menggoda? PENONTON: a ialah b. ALLISON BUCHHOLTZ-AU: a ialah b. Jadi dalam hal ini, adalah x, yang adalah 1, kan? Jadi di sini, mari kita berjalan melaluinya. Jadi pada awal, dan b adalah 1 dan 2 dan ditentukan. Jadi awalnya mendapat temp ditetapkan ke, jadi temp 1. adalah sama dengan b, Jadi kita mendapatkan 2, dan b adalah sama dengan suhu. Sekarang kita akan mendapat 1. PENONTON: Dalam satu itu sebelumnya bertukar ampersand x dan y ampersand. Apa sebenarnya adakah itu bermakna? ALLISON BUCHHOLTZ-AU: Jadi itu bermakna Anda sedang lewat rujukan. Ini bermakna anda sebenarnya lewat di alamat di mana x dan y disimpan. PENONTON: Tetapi anda tidak menukar alamat. ALLISON BUCHHOLTZ-AU: Anda tidak lagi menukar alamat. Anda menukar apa yang di dalam diri mereka. Seperti apa yang di alamat itu, dan sebab itu ia berfungsi. Versus dalam program ini di sini apa anda lakukan adalah anda membuat salinan. Jadi, anda mempunyai x dan y yang ada sebagai variabel mereka sendiri di sini. Tapi kemudian apabila anda meninggal mereka ke dalam pertukaran, itu seolah-olah anda sedang menciptakan ini set lain secara keseluruhan. Jadi kau pernah benar-benar x menyentuh dan y. PENONTON: Jika ampersand x apa yang di alamat x, apa yang akan bintang x menjadi? ALLISON BUCHHOLTZ-AU: Ampersand x adalah apa yang di alamat x, maka star-- baik, dalam kes ini, x bukan pointer. PENONTON: Oh, OK. Oleh itu, anda hanya melakukan ini kerana ia bukan pointer. ALLISON BUCHHOLTZ-AU: Benar. Anda hanya boleh melakukan bintang sesuatu yang pointer. Mungkin anda boleh melakukannya untuk perkara-perkara yang tidak, tetapi kompilasi yang anda melakukan hal-hal gila yang akan terjadi. Dan saya tidak betul-betul pasti apa yang akan berlaku. Anda sentiasa boleh mengambil alamat sesuatu, tetapi anda tidak boleh dereference sesuatu yang bukan pointer. Jika yang masuk akal, itu perbezaan yang baik untuk mempunyai. Jadi tidak terlalu buruk, kan? Tabel mudah-mudahan mendapat sedikit kurang menakutkan. Baik. Ah, orang-orang yang bersenang-senang. Jadi sekarang, menulis kod anda sendiri. Jadi, saya akan membiarkan kalian bekerja mengenai perkara ini selama kira-kira empat minit, dan kemudian kita boleh bercakap tentang cara-cara untuk mendekatinya. Jangan ragu untuk berbicara dengan orang di sekeliling anda. Juga ini adalah menarik. Ia seperti semua gadis-gadis seksyen sekarang. Cukup menarik. Kecuali Chang. Tetapi Chang tidak adalah benar-benar sebahagian daripada bahagian. Awesome. Sempurna. Jadi saya akan memberikan anda beberapa petunjuk. Dalam kes di mana anda mempunyai lebih daripada satu aksara, di mana anda mempunyai sesuatu yang lain seperti 123 atau 1000 sesuatu, Anda perlu berupaya untuk gelung melalui dan menukar masing-masing. Jadi ada pasangan cara-cara anda boleh melakukan itu, tetapi anda pasti akan mempunyai untuk loop di suatu tempat di sana untuk gelung melalui mereka, yang merupakan jenis seperti giveaway dengan walaupun anda sebut strlen, yang jenis suka oh mungkin anda ingin menggunakan panjang string dalam beberapa cara. Baik. Jadi, apa yang anda semua berfikir mungkin salah satu perkara pertama yang ingin kita lakukan? Ada beberapa kes di sini kita perlu mengambil kira, kan? Sama ada kita ada sesuatu yang tidak sah. Apa yang kita ada? Kes. Null. Kami mempunyai kes yang ia mempunyai sesuatu yang lain daripada 09, kan? Jadi, bila ia mempunyai huruf. Atau kita mempunyai kes yang sah. Tiga kes memikirkan. Jadi yang mana satu yang anda fikir mungkin salah satu yang paling mudah untuk menjaga pertama? PENONTON: Null. ALLISON BUCHHOLTZ-AU: Kes itu adalah batal. Jadi apa yang kita akan lakukan di sana? PENONTON: [didengar]. ALLISON BUCHHOLTZ-AU: Ya. Dan apa yang saya mahu lakukan? PENONTON: Kembali 0. ALLISON BUCHHOLTZ-AU: Tepat sekali. Awesome. OK. Jadi sekarang huruf bahawa ia mempunyai surat dan kes itu bahawa itu sah. Kami benar-benar boleh menjaga dari ini dalam satu gelung, OK? Jadi salah satu cara untuk melakukan itu-- apa yang mungkin menjadi cara yang mudah untuk memeriksa jika ia adalah sah. Kami akan perlu melalui setiap huruf dan melakukan apa? PENONTON: Periksa sama ada itu dalam- ALLISON BUCHHOLTZ-AU: Benar, anda boleh menyemak jika itu adalah antara 0 dan 9, kan? Dan kemudian di mana-mana yang bahawa itu berlaku, kami tidak akan berakhir iterasi melalui string kita anyways, kan? Jadi kenapa tidak kita cuba menggabungkan mereka menjadi satu. Kita akan beralih melalui tali, dan seperti yang kita berbuat demikian, kita akan terlebih dahulu melakukan cek untuk melihat apakah surat yang atau jika karakter yang sah. Jika ya, kita akan melakukan operasi yang kita perlu mengubahnya. Jika tidak, ia akan kembali 0, kan? Jadi sebelum kita melakukan itu, kita mungkin ingin beberapa variabel bahwa kita dapat kembali di akhir yang akan menjadi nilai sebenar kita. Jadi kita akan memulakan beberapa nilai kepada 0. Dan itu hanya bagaimana kita bermula. Jadi saya akan menyingkirkan ini. Jadi bagaimana kita akan beralih melalui string ini. PENONTON: Untuk gelung. ALLISON BUCHHOLTZ-AU: A untuk gelung. Jadi apa untuk kita? PENONTON: i adalah 0. ALLISON BUCHHOLTZ-AU: Mm-hm. Dan apakah kita iterasi sehingga? PENONTON: panjang str s. ALLISON BUCHHOLTZ-AU: OK, sekarang ingat ada cara yang lebih baik. [Terdengar]. PENONTON: Ya, kita boleh melakukan n sama. ALLISON BUCHHOLTZ-AU: Tepat sekali. PENONTON: i kurang dari n. ALLISON BUCHHOLTZ-AU: Dan mengapa kita ingin melakukannya? Adakah anda masih ingat alasannya? PENONTON: Kita perlu mengira semula itu. ALLISON BUCHHOLTZ-AU: becasue cara ini anda hanya perlu mengira strlen sekali. Jika anda lakukan saya kurang dari strlen s, itu bermakna ia mengira semula panjang setiap kali Anda menjalankan untuk loop, yang tidak kos yang besar tenaga, tetapi ia amalan yang lebih baik untuk mencuba dan melakukan perkara-perkara seperti itu sekali. Kecuali mungkin anda mempunyai rentetan gila yang berubah pada setiap lelaran. Tetapi jika ia tetap sama, menyimpannya. Baik. Dan kemudian saya plus plus. Awesome. Kami sedang dalam perjalanan. PENONTON: Benar-benar cepat. Pertama, jadi mari kita mengatakan bahawa kita hanya memang i kurang daripada strlen s, yang mereka dengan kadar kami di reka bentuk sama sekali atau hanya kebenaran? Mereka tidak. Kami dengan kadar pada kebenaran untuk kuiz sejauh yang saya tahu. Saya tidak boleh membuat pada penuh jaminan, tetapi bagi sebahagian besar, Sebahagian besar adalah benar, kerana Anda berada di bawah banyak kekangan masa. Reka bentuk biasanya berarti anda mempunyai masa untuk berfikir tentang keanggunan situasi anda. OK, jadi kita iterasi melalui. Oleh itu, kita perlu sama ada untuk memeriksa melihat apakah watak ini adalah sah atau jika dapat dibuat kami biasa [? untuk i?] fungsi. Kami boleh bimbang tentang apa yang yang ada di dalam satu saat. Jadi mengapa tidak kita take-- jika ada yang dapat berfikir mengenai cara untuk memeriksa ke melihat jika ini berlaku. Kami tahu ia akan menjadi beberapa jika keadaan, kan? Dan ingat ini adalah dalam ASCII, jadi bagaimana mungkin kita lihat jika ia bukan 0,1, 2, 3, 4, 5, 6, 7, 8 atau 9. PENONTON: Jika alfa. ALLISON BUCHHOLTZ-AU: Jadi jika alfa akan hanya beritahu kami jika itu surat. Dan jika mereka memberi kita simbol, itu masih tidak cukup akan memeriksa. Jadi, jika anda menarik ASCII anda meja, kita tahu bahawa 0 hingga 9 berada dalam satu segmen. Beritahu saya nombor mereka sesuai dengan jika boleh. PENONTON: 40. ALLISON BUCHHOLTZ-AU: Jadi julat adalah seperti 40-- PENONTON: Mungkin. 48-57. Saya tidak pasti. ALLISON BUCHHOLTZ-AU: 40-57? PENONTON: 48, saya fikir. ALLISON BUCHHOLTZ-AU: 48 hingga 57. Oleh itu, kita tahu bahawa orang-orang ASCII symbols-- jika nilai ASCII tidak antara 48 dan 57, itu tidak sah, kan? Jadi kita boleh menggunakannya untuk keuntungan kita mungkin? Bagaimana kita akan mendapatkan surat ini, dari dulu? Bagaimana kita mengakses ini watak ini? PENONTON: s kurungan i. ALLISON BUCHHOLTZ-AU: Mm-hm. Kerana kita boleh memikirkan string sebagai array, ingat. Jadi, apa yang ingin kita katakan? Kami ingin mengatakan jika ini is-- saya akan memberikan petunjuk. Ini adalah kurang daripada. Apa yang anda fikir ia perlu kurang dari? PENONTON: 57? ALLISON BUCHHOLTZ-AU: 47, kan? Tetapi ia juga mewakili bahawa apabila anda 0 dalam satu [? kisi?], kerana itulah watak 0. Anda juga boleh meletakkan 47. Mempunyai jadual ASCII, seperti yang Anda lihat, hanya sesuatu yang harus ada di lembaran kuiz anda. Jadi jika ini adalah kes itu, jika ia adalah satu kurang daripada 0-- tidak perlu dan. Ia hanya baik akan menjadi kurang daripada atau lebih besar daripada 9. Jadi, anda boleh mengisi ini terakhir bagi saya? Jadi atau s dari saya adalah apa, Rhea? PENONTON: Lebih besar dari 9. ALLISON BUCHHOLTZ-AU: Tidak. Adakah ini masuk akal untuk semua orang, bagaimana kami tiba di sana? Masalah-masalah ini, mereka seperti apabila anda melihat penyelesaian, ia seperti oh, OK. Dan ini adalah mengapa amalan akan membantu anda. OK, jadi kita kembali 0. Lovely. Baik. Jika tidak apa yang kita mahu lakukan? Ini adalah bahagian yang menarik di tempat yang lebih sedikit seperti matematik berbanding CS pada pendapat saya. Adakah sesiapa yang mempunyai idea tentang bagaimana kita mungkin melakukan hal ini? Jadi perkara yang penting sadari adalah watak pertama kami ambil akan menjadi urutan angka paling tinggi, bukan? Jadi, jika kita sedang melihat menukarkan 123, kali pertama kami beralih adalah akan menjadi 1, tetapi kita perlu bahwa untuk menjadi 100 pada akhirnya, kan? Jadi satu perkara yang anda boleh lakukan ialah dengan setiap digit berikutnya anda mengambil, anda kalikan nilai anda dengan 10, supaya pada masa anda mencapai akhir, semuanya telah beralih ke atas, kan? Jadi pada kali pertama anda menjalankan itu, anda mempunyai 1 sebagai nilai anda. Kali kedua dijalankan, anda melipatgandakan nilai anda dengan 10. Ia akan update sehingga kini 10, dan anda menambah nilai anda yang seterusnya. Dan kemudian anda kalikan dengan 10 dan menambah nilai anda yang seterusnya. Dan ini adalah mengapa mereka mengatakan ini jauh lebih seperti ujian algoritma matematik berbanding CS, tetapi saya menyimpang. Saya tidak menulis kuiz. Jadi satu perkara yang boleh kita lakukan adalah kita mengatakan kali nilai sama dengan 10. Jadi ini akan beralih angka sekali setiap kali. Dan kemudian kami hanya hendak tambah. Kami ingin menambah dalam apa kami baru saja, kan? Jadi bagaimana kita benar-benar menukar kami Karakter ASCII kepada bilangan yang diwakilinya? Jadi kita tahu bahawa 0 adalah sama dengan 47, kan? Jadi, jika 0 adalah 47, apa yang yang kita perlu lakukan untuk itu untuk benar-benar membuat ia menjadi int 0? PENONTON: Ini 48. ALLISON BUCHHOLTZ-AU: 48? Maaf. Kami akan tolak 48, kan? Ingat ASCII matematik? Kita boleh memperlakukan mereka seperti nombor biasa. Jika anda memperlakukan mereka seperti nombor, mereka menjadi nombor berkesan. Jadi, jika kita mempunyai s dari i, yang mari kita mengatakan dalam hal ini adalah sama dengan 0. Jadi s dari saya dalam hal ini akan ASCII-- yang int ASCII untuk itu akan menjadi 47. Oleh itu, kita boleh subtract-- atau 48. Anda boleh berbuat demikian, adalah salah satu cara. Apakah ada yang tahu lebih baik cara yang boleh kita lakukan 48? Kami hanya mengatakan 0 is-- masuk ke ASCII anda boleh melakukan kutipan 0. Begitu juga ia jenis membuat rasa bagaimana ini bekerja? PENONTON: Pada ketika ini, adalah nilai 0 kerana walaupun anda kalikan dengan 10, Anda bermula dengan sifar, sehingga harus itu dihidupkan? ALLISON BUCHHOLTZ-AU: Jadi dalam hal ini, anda ingin melipatgandakan sebelum anda menambah, kerana dalam kes ini, ya, ia akan masih adalah-- pointer saya yang hilang. Nilai dalam kes ini, yang pertama kali kita menjalankan ia akan menjadi sifar. Jadi anda hanya menambah pada angka yang pertama. Apa yang penting adalah masa depan Anda iterate, anda mahu beralih ke atas sebelum anda menambah angka berikutnya anda. Apakah yang menjelaskan untuk anda? OK. Kadang-kadang anda akan mendapatkan lebih perkara-perkara pelik Mathy. Jika anda memiliki sebagian besar ini, anda masih akan untuk get-- anda akan lakukan dengan baik. Kredit separa adalah sangat perkara yang besar pada CS50 kuiz. Jadi menulis apa yang anda tahu. Jika anda punya segalanya kecuali di sini, kau masih akan melakukan benar-benar baik masalah. Kerana anda menunjukkan, OK, saya hampir tahu. Saya tahu bahawa saya perlu untuk beralih melalui. Saya tahu apa yang saya perlu untuk memeriksa. Saya hanya tidak cukup mendapatkan bagaimana untuk mengubahnya. Anda akan menjadi OK. Ya, anda akan kehilangan beberapa mata, tetapi anda masih akan mendapatkan baik jumlah mata bagi sesuatu seperti itu jika anda hilang kedua-dua baris. Saya akan menjadi seperti OK, orang ini tahu apa yang mereka lakukan. Matematik adalah sukar. Jadi saya akan mengatakan anda akan baik-baik saja. OK, jadi anda semua bersedia untuk cuba strlen dengan pointer sekarang Antum tuan pointer? Jadi, saya akan memberitahu anda semua bekerja pada itu untuk sedikit. Jika inginkan penyegaran. Jadi, anda mahu menggunakan pointer aritmetik, dan kemudian jika adalah batal, pelaksanaan Anda harus kembali 0. Hal-hal seperti ini yang membuat anda benar-benar gembira untuk hanya memanggil strlen pada akhir hari. Saya rasa ini mungkin sedikit lebih mudah daripada yang terakhir, yang adalah baik. Saya akan memberikan anda semua satu minit lagi, dan kemudian kami akan bekerja melaluinya. Dan kemudian kita akan mendapat untuk pergi ke suis. OK, orang bersedia? Mungkin sedikit. Jadi, saya telah memberikan anda dua pilihan, bukan? Sama ada memeriksa null dan kembali 0 jika ia adalah, atau benar-benar mengira panjang. Jadi yang ingin menulis memeriksa null? Pergi untuk itu. PENONTON: Jika kurungan s sama sama null 0. ALLISON BUCHHOLTZ-AU: Lovely. Saya suka apabila setengah masalah anda hanya memeriksa for null. Saya tahu dengan kalian lalu minggu aku seperti cek batal secara harfiah setiap kali. OK, so-- PENONTON: Jika return 0 hanya satu baris, kita masih perlu pendakap kerinting? ALLISON BUCHHOLTZ-AU: Anda tidak secara teknikal memerlukan mereka selagi anda konsisten. Ia adalah amalan yang baik hanya untuk mendapatkan dalam kebiasaan menggunakan pendakap kerinting, tetapi secara teknis tidak ada. Anda tidak memerlukan mereka untuk satu baris. Kami hanya cenderung untuk mengesyorkan bagi orang-orang mula program. Jadi sekarang apa yang kita ingin lakukan di sini? Jadi sekarang kita tahu bahawa string kita sah. Kami ingin terus menghitung panjang. Apa yang mungkin yang pertama perkara yang kami mahu lakukan? PENONTON: Buat int yang panjang. ALLISON BUCHHOLTZ-AU: Tepat sekali. PENONTON: Dan kami ingin set ke? ALLISON BUCHHOLTZ-AU: 0. Sempurna. Baik. Sekarang apa yang mahu lakukan? Ini adalah benar-benar sebahagian besar dari itu. Pergi untuk itu. PENONTON: Jadi, anda mungkin lakukan untuk loop. Dan kemudian sejak bila anda sebut s anda mendapatkan alamat perkara pertama, Anda akan bermula dengan i sama dengan 0. Dan kemudian selagi x ditambah saya tidak kembali memangkas 0. ALLISON BUCHHOLTZ-AU: The terminator null. PENONTON: The terminator null. Kemudian anda menambah satu hingga panjang. ALLISON BUCHHOLTZ-AU: Ya. OK, jadi mari kita mengubah itu kepada kod sangat konkrit. Tetapi itu adalah idea yang sempurna. Itulah apa yang kita lakukan. Kami akan berada iterasi melalui dengan penunjuk. Jadi apa yang ingin kita lakukan adalah bukan int di sini, kerana kami tidak merujuk kepada suatu. Kami merujuk kepada permulaan tali, yang mulai menjadi alamat penerima, kan? Jadi kami ingin pointer. Jadi, kita akan mempunyai beberapa bintang char, kerana ia sesuai dengan s kita, kan? Jadi ini adalah satu masa nanti kita Memulakan ke awal dari tali, OK? Jadi mari kita memanggilnya i. Jika itu adalah awal dari tali, apa yang ia akan ditugaskan untuk? Tidak 0. Kami mahu ia menjadi memulakan tali kami. Apa mewakili permulaan string kita yang telah diberikan kepada kita? PENONTON: Hanya s. ALLISON BUCHHOLTZ-AU: s. Jadi ini mewujudkan beberapa penunjuk baru yang mewakili permulaan string kita, OK? Cara lain untuk memikirkan ia adalah seperti inilah array kita. Itulah tali kami, s. Jadi, bila ini adalah tempat pertama, dan ini adalah 0x4. 04. Ini adalah s kita, yang memegang alamat tersebut. Dan kita buat satu sama lain yang disebut i yang hanya merujuk kepada perkara yang sama. Jadi mereka berdua hanya menunjuk untuk permulaan rentetan kami. Ini hanya satu perwakilan grafik. Jadi sekarang apa yang kita mahu lakukan ialah kita mahu beralih kondisi kita untuk iterasi melalui tali kami. Membeli-belah sekarang. Sampai ke kedai, guys. Adakah kita mahu terus mengupdate sehingga kita mencapai terminator nol, kan? Jadi apa yang mungkin yang kelihatan seperti? Apakah kita ingin saya, atau adakah kita mahu bintang i adalah soalan? Apakah terminator nol alamat atau sesuatu yang terletak di alamat? Terletak di alamat, kan? Jadi kita perlu dereference apa yang ada di sini, kerana ini hanya beberapa alamat. Untuk benar-benar sampai ke awal kita perlu dereference ini supaya kita benar-benar mendapatkan apa yang ada di tempat pertama. Jadi, jika kita lakukan bintang saya, apa yang kita tidak mahu ia sama? PENONTON: Kembali slash? ALLISON BUCHHOLTZ-AU: Tidak. Adakah ini masuk akal untuk semua orang? Kita perlu pergi ke dalam tali dan memastikan bahawa ia bukan akhir. Dan kemudian kami hanya boleh mengemas kini seperti ini. Pengemaskinian biasa. Jadi selama ini met, apa yang kita perlu buat? PENONTON: Panjang plus plus. ALLISON BUCHHOLTZ-AU: Mm-hm. Dan kemudian selepas untuk loop berakhir, apa yang kita mahu kembali? PENONTON: Panjang? ALLISON BUCHHOLTZ-AU: Panjang. Terdapat anda pergi. Jelas daging yang satu ini adalah memahami ini untuk gelung. Adakah semua orang mendapatkan cara yang bekerja? Saya senang untuk pergi lebih dari itu lagi. PENONTON: Kedua bahagian, jadi bintang yang saya ada, itulah alamat first-- ALLISON BUCHHOLTZ-AU: Ini bukan alamat. Ia adalah apa yang di. PENONTON: Itu benar-benar di sana. ALLISON BUCHHOLTZ-AU: Itu apa yang benar-benar di sana. Jadi, ini adalah saying-- membiarkan saya membuat ini lebih baik. Jadi, ini adalah 0x04, dan saya hanya akan untuk mengatakan saya akan membuat nama saya ini. OK. Ya, saya tahu saya mempunyai kajian kuiz malam ini. Banyak kajian kuiz. Jadi, bila string ini adalah nama saya, Allison. Sedikit berantakan, tapi itu ada. Dan s merupakan lokasi di mana tali bermula, jadi saya akan membuat ini real-- ini adalah alamat dari, di mana tali bermula, kan? Jadi apa yang kita lakukan di sini adalah kita mahu menggunakan pointer untuk beralih melalui. Oleh itu, kita membuat beberapa penunjuk, i, yang juga adalah sama dengan permulaan string. Dan pada setiap titik, kita mahu terus melalui array di sini sehingga kita mencapai terminator nol. Oleh itu, kita sentiasa mahu untuk memeriksa apa yang di setiap alamat ini. Oleh itu, kita dereference i, sehingga kali pertama kita melakukannya kita berkata, OK, apa yang di alamat 0x04? Ini adalah satu. OK, kita baik. Panjang kenaikan. Bergerak ke satu depan. Jadi aku-- ingat pointer peningkatan oleh ukuran apa sahaja yang mereka menunjuk ke. Jadi dalam hal ini, kerana ia char, ia akan update per satu. Jadi sekarang kita akan melihat 5, yang bermakna ia akan di sini. Sehingga kata OK, pergi ke 0x05. Apa yang ada di sana? Ini l an. Dan ia akan terus melakukan itu sehingga ia mencecah satu ini. Dan ia berkata OK, apa yang ada di apa sahaja alamat ini? Terminator batal, OK. Keluar. Dan hanya kembali panjang. Kerana anda memerlukan apa yang benar-benar di alamat tersebut, bukan alamat itu sendiri. Tidak banyak tempat-tempat di mana Anda benar-benar perlu alamat. Kebanyakan masa apabila Anda menggunakan dan itu apabila anda pertama memberikan pointer atau apabila Anda lewat ke fungsi yang lain. OK, semua orang yang baik di sana? Jenis? OK. Jadi ia kelihatan seperti kita sudah mendapat kira-kira 12 minit, jadi kita akan pergi ke mungkin masalah terakhir kami, dan kemudian ada apa-apa konsep-konsep yang telah datang dalam masa yang sama kita boleh cepat pergi lebih dari itu. Sehingga beralih gear adalah yang terakhir masalah di sini, menukar pernyataan. Jadi tugas anda adalah untuk menulis semula ini sehingga berperilaku yang sama tetapi tidak menggunakan suis. Tangan pasi. Jadi apa-apa soalan tentang hal ini dari kelelawar? Tiada? OK. Adakah semua orang faham bahawa jika kes tidak mempunyai apa-apa selepas itu, ia bermakna bahawa ia harus ikuti langkah seterusnya? Jadi kes 1 dan 2 dalam hal ini melakukan perkara yang sama. Kadang-kadang titik kekeliruan. Baik. Ada yang punya ide? Ya? PENONTON: Jadi, anda boleh hanya dilakukan jika pernyataan. ALLISON BUCHHOLTZ-AU: Mm-hm. Jadi apa yang pertama kita? PENONTON: Jika n sama sama dengan 1, dan 2 baris untuk n atau sama dengan sama dengan 2, kemudian mencetak kecil. Dan kemudian anda boleh melakukan lain jika? Atau anda hanya boleh melakukan sesuatu jika? ALLISON BUCHHOLTZ-AU: Anda dapat melakukan lain jika? PENONTON: Adakah ia masalah jika anda lakukan jika? ALLISON BUCHHOLTZ-AU: Jadi ia. Adakah anyone-- demikian, anda akan mendapatkan output yang sama jika anda menggunakan hanya IFS berbanding jika anda menggunakan IFS lain. Bolehkah kalian memikirkan alasan yang mengapa anda mungkin mahu menggunakan lagi satu jika berbanding banyak seandainya? Harus dengan cekap. Ya? PENONTON: Akan memeriksa semua seandainya setiap kali. ALLISON BUCHHOLTZ-AU: Jadi, walaupun ia memukul salah satu yang pertama ini, ia akan pergi pada cek setiap satunya. Jadi, anda mahu untuk digunakan jika yang lain seandainya dalam kes-kes di mana hanya salah seorang daripada mereka pernah akan berlaku. Jadi pengecualian bersama adalah apa yang kita cenderung untuk mengatakan. Jika anda mempunyai sekumpulan jika, ia bermakna yang mungkin lebih daripada satu daripada mereka perkara, dan mungkin lebih dari salah seorang daripada mereka boleh menjadi kenyataan. Dan anda mahu kedua-dua mereka untuk melaksanakan jika mereka benar. Jika anda hanya mahu salah seorang daripada mereka untuk bekerja dalam kes-kes yang saling eksklusif, Anda ingin menggunakan lain jika, kerana semuanya berkaitan dengan kecekapan. Kode Anda hanya lebih baik dirancang jika ia berpegang kepada amalan ini. Jadi dalam hal ini kita akan mempunyai sebuah lagi kalau. Dan ini akan menjadi? PENONTON: n sama sama dengan 3. ALLISON BUCHHOLTZ-AU: Perfect. Media cetak. Dan kemudian di terakhir kami kes, apa yang kita ada? Yang lain atau yang lain jika? PENONTON: Lain-Lain. ALLISON BUCHHOLTZ-AU: Apakah kita want-- Anda mahu lain jika kerana kami mempunyai kes konkrit. Ia bukan jenis menangkap semua. Jika anda telah lalai dalam switch-- ingat dalam suis anda boleh mempunyai kes, dan kemudian anda perlu lalai. Jika anda mempunyai suatu keingkaran, itulah jenis pernyataan lain anda di sana. Tetapi jika ia mempunyai kes sahaja, yang bermakna anda perlu untuk memeriksa untuk melihat apakah itu masing-masing. Jadi dalam kes ini, ia akan 4 atau 5. Kami ingin mencetak off. Ini besar. Dan ada anda pergi. Dan itu akan menjadi program anda. Jadi dalam hal ini jika kita mempunyai sesuatu yang lalai, kita akan mempunyai yang lain dalam apa pun yang ingin kita lakukan. Supaya perbezaan yang baik untuk mengetahui, mengerti. Apakah yang membantu dengan suis untuk anda? Sempurna. Baik. Kami mempunyai kira-kira lapan minit kiri. Apakah kalian mempunyai apa-apa konsep tingkat tinggi yang lain? Soalan-soalan secara umum? Ya? PENONTON: saya mempunyai soalan mengenai salah seorang daripada mereka itu tentang rawak number generator pada kuis sifar. ALLISON BUCHHOLTZ-AU: Oh, yang satu itu. Yang satu itu adalah satu sama lain di mana ia lebih matematik than-- ya. Penyelesaian untuk bahawa- walaupun saya apabila Yang saya lihat, saya seperti apa ini. PENONTON: Ia adalah nombor 7. ALLISON BUCHHOLTZ-AU: Ini aneh pada pendapat saya. Jadi, pada asasnya anda mahu menggunakan drand48, yang akan memberikan anda beberapa nombor di antara 0 dan 1. Dan anda ingin menggunakannya sehingga yang entah bagaimana anda mendapat a-- dan itu jauh lebih dari masalah matematik bagi saya daripada saya fikir masalah CS. Cara yang anda lakukan dan itu-- kadang-kadang ia hanya akan menjadi seperti itu. Sekali lagi, ini adalah kes di mana ia adalah jenis seperti menulis apa yang anda boleh dan kredit separa. Jadi jika kita ingin kembali, kita tahu bahawa kita berada akan menggunakan drand48 dalam beberapa cara, bukan? Jadi mengapa tidak kita hanya mencatat bahawa ke bawah. Kami menggunakannya dalam beberapa cara. Cara yang mereka mempunyai kalian menggunakannya adalah seperti ini, yang saya akan cuba menjelaskan. Jadi, pada asasnya apa yang berlaku di sini adalah kerana ia adalah di antara 0 dan 1, apa yang anda lakukan adalah anda mendarabkan oleh- ini sangat banyak soalan matematik. Hanya penafian penuh, ini adalah sepenuhnya soalan matematik. Apa yang anda lakukan adalah karena 0 dan 1 dan anda ingin ia berada dalam julat ini, anda sebenarnya memikirkan bagaimana besar julat adalah, dan kemudian Anda pada dasarnya skala itu, yang adalah apa yang ini lakukan. b tolak yang memberikan anda pelbagai itu, Perbezaan antara nombor-nombor tersebut. Anda boleh membiak di antara 0 dan 1, dan kemudian menambah yang adil bermakna anda scaling itu sehingga sehingga itu antara a dan b, yang saya tidak benar-benar seperti masalah ini. Seperti yang saya katakan, kuis ini yang dimaksudkan untuk mencakup orang yang kurang selesa, di suatu tempat di antara, dan lebih selesa. Oleh itu, jika mereka membuatnya begitu bahawa ia adalah sesuatu yang bahawa semua orang di kurang tempat yang selesa akan dapat, kita akan mempunyai terlalu banyak orang mencetak Perfect, dan yang lebih selesa akan menjadi bosan. Jadi mereka sentiasa mempunyai ini jenis soalan asah otak yang dimaksudkan untuk menjadi sedikit lebih keras yang mengambil beberapa pemikiran kreatif. Apabila kamu melihat mereka, jangan terlalu bingung. Saya pasti akan mengatakan flip melalui kuiz anda terlebih dahulu. Mengatasi masalah anda tahu yang anda boleh, kerana tidak ada gunanya terjebak pada masalah ketika ada tiga atau empat atau lima di muka selepas itu anda boleh dengan mudah melakukannya. PENONTON: Mengapa sebenarnya yang Anda kalikan dengan jangkauan? ALLISON BUCHHOLTZ-AU: Anda membiak pelbagai yang Anda tahu-- ia seperti berapa banyak selepas yang anda mahu? Jadi yang boleh anda fikirkan, kerana ia mengembalikan nombor antara 0 dan 1, Anda boleh menganggapnya sebagai peratusan. Jadi pada dasarnya mengatakan jika kita mempunyai garis nombor di sini, yang ada di sini, dan b di sini. Kau seperti berapa banyak yang lalu itu? Apakah semua yang kita lakukan. Jadi, anda hanya meminta untuk peratusan julat ini, yang adalah apa yang ia memberi anda. Dan kemudian anda pada dasarnya hanya skala itu dengan menambah. Ini adalah penggoda otak matematik. Jika ada apa-apa nasihat saat akhir, saya akan mengatakan flip melalui pertanyaan-pertanyaan, mencari tahu mana yang anda tahu bahawa seperti, oh saya mendapat ini. Hampir pasti mereka akan menjadi soalan yang anda tidak akan tahu atau bahawa anda akan mempunyai masa untuk, jadi memukul kekuatan anda, OK? Kalian akan besar. Terdapat banyak soalan sebab, supaya anda mempunyai masa untuk jenis mempunyai peluang untuk menunjukkan apa yang Anda benar-benar baik di. Jadi apa jika anda tidak baik dalam segala hal. Bermain untuk kekuatan anda. Ya? PENONTON: Jadi ini akan kembali sesuatu yang dipotong? Ya, ia akan, kerana drand pulangan antara 0 dan 1. Ia akan kembali int an, kerana ia akan memotong apabila kita menambah atau memperbanyak olehnya. Sejuk. Sebarang pertanyaan istimewa? Kalian akan melakukan yang besar. Kau Pergi dan menjadi luar biasa. Dan jika tidak, akan ada menjadi gula-gula di sini minggu depan. Dan aku akan mencintaimu. Saya akan mencintai kalian kira. Baiklah, semua orang, nasib baik. Mempunyai masa yang hebat. Anda akan baik-baik saja. Dan anda tahu apa? Dalam dua hari ia akan berakhir, sedangkan saya mempunyai dua ujian tengah semester pada hari Khamis, jadi sekurang-kurangnya kalian akan dilakukan. Baiklah, saya akan melihat kalian minggu depan.