PROFESOR: Jadi agenda untuk minggu ini, tidak banyak barangan. Tetapi diharapkan sangat, sangat membantu dan relevan untuk anda semua minggu ini. Tetapi kita akan menghabiskan mungkin 15, 20 minit hanya dengan cepat bercakap mengenai senarai link. Senarai pautan akan ditutup pada kuiz. Jadi mungkin ia akan menjadi sangat berguna untuk belajar serba sedikit tentang apa yang. Kami akan menghabiskan besar majoriti seksyen hari ini akan lebih kuiz sifar masalah amalan. Dan kemudian kita akan menjimatkan mungkin 20, 30 minit pada akhir untuk sebarang pertanyaan yang terlintas sesiapa yang mempunyai. Kemudian, yang terakhir lima minit, saya akan untuk memberikan pam ucapan untuk kuiz. Kalian semua mahu berada di sini untuk itu. Kerana ia akan menjadi masa yang baik. Baiklah, jadi beberapa bahan dalam senarai link. Bagaimana mereka biasanya berstruktur adalah anda mempunyai apa yang dipanggil nod, bukan? Anda mempunyai perkara-perkara ini dipanggil nod, yang structs. Saya akan pergi ke atas bagaimana untuk mewujudkan nod dalam slaid seterusnya. Tetapi pada dasarnya semua berkaitan senarai adalah ialah data yang telah digantung bersama-sama melalui petunjuk. Dan supaya kelebihan yang kita ada menggunakan senarai berpaut ke atas, mungkin, seperti pelbagai, adalah hakikat bahawa dalam array anda memerlukan satu blok berdampingan memori semua di tempat yang sama, satu selepas yang lain, untuk dapat mempunyai. Manakala senarai berpaut, anda boleh mempunyai bit sedikit rawak memori seluruh komputer anda digantung bersama-sama dengan petunjuk. Dan dengan cara ini anda boleh mengakses maklumat yang datang satu demi satu lain, selepas yang lain tanpa perlu hanya sebahagian besar memori dalam komputer anda di suatu tempat. Dan hal ini adalah salah satu yang utama sebab mengapa kita menggunakan senarai link. Kedua, ia sangat mudah untuk secara dinamik mengubah saiz senarai Pautan kerana dalam array, apabila anda mengisytiharkan array, anda mempunyai nilai yang ditetapkan tertentu. Katakan saya mahu mencipta pelbagai 10 integer. Saya membuat pelbagai 10 integer, dan itu sahaja. Ia adalah 10. Saya tidak tahu apa yang perlu dilakukan selepas itu. Jika saya mahu menjadikannya 11, tidak boleh melakukannya. Jika saya mahu menjadikannya 9, tidak boleh melakukannya. Sedangkan pada senarai link, anda boleh menambah dan memadam dan memasukkan mana sahaja yang anda mahu. Anda dinamik boleh mengubah saiz anda menstrukturkan sini, struktur data anda. Dan yang memberikan kita banyak lebih fleksibiliti tambahan bahawa kita tidak biasanya mempunyai dengan tatasusunan. Sesiapa pun keliru pada asas struktur bagaimana senarai link adalah atau mengapa kita perlu menggunakan satu lebih array? Ya, kami akan pergi lebih terperinci bagaimana untuk benar-benar membuat satu. Tetapi ini adalah hanya jenis pengertian umum sekarang. Sejuk. Dan sebagainya tatasusunan sedang digantung bersama-sama perkara-perkara kecil yang indah dipanggil nod. Semua nod ini adalah jenis struct. Ingat, struct adalah jika anda mahu untuk mewujudkan satu jenis tertentu berubah-ubah dalam C yang tidak sudah wujud, anda, sebagai seorang programmer, sebenarnya boleh membuat bahawa diri anda. Dan jadi ini jenis data struktur dipanggil nod, sebenarnya telah dicipta oleh kami, yang tidak wujud dalam C dengan sendiri. Dan cara yang anda membuat satu adalah anda perlu header typedef struct, yang memberitahu pengkompil Saya hendak menciptakan struct. Kami akan namakannya "nod." Dan di dalam kita akan mengisytiharkan pembolehubah dalam, yang akan menyimpan nilai. Dan kemudian kita juga akan telah penunjuk yang dipanggil "akan datang" yang menunjuk ke depan nod dalam senarai pautan. Dan kemudian anda selesai yang luar dengan hanya mengulangi nod lagi jadi pengkompil tahu, OK itulah akhir struct saya. Jadi dengan cara ini, kami jenis mewujudkan pelbagai kecil yang lucu jenis perkara dengan nilai dan dengan penunjuk. Dan anda boleh menghubungkan mereka semua bersama-sama dengan mereka petunjuk. Supaya mereka boleh menjadi semua jenis digantung bersama-sama dalam rantai. Sejuk. Bolehkah anda mendengar bahawa bit yang lebih baik? PENONTON: Ya. PROFESOR: Baiklah. Jadi cara itu, seperti yang anda semua boleh lihat, senarai pautan yang biasa distrukturkan adalah anda perlu kepala. Anda mempunyai nilai kepala yang tidak yang menunjuk oleh mana-mana penunjuk lain. Tetapi ia akan tunjuk pada, atau rujukan, nod yang lain. Nod selepas akan rujukan nod selepas itu, dan sebagainya dan sebagainya sehingga anda akhirnya melanda akhir senarai link anda. Dan anda tidak akan mempunyai penunjuk di sana. Dan sebagainya, berfikir seperti, pada rantai, atau jika mana-mana anda semua buat, saya tidak tahu, seperti dengan buah gelung apabila anda sedikit. Anda akan tali mereka bersama-sama dan memakainya di leher anda. Fikir ia adalah perkara yang sama. Anda mempunyai perkara-perkara kecil yang anda boleh tali bersama-sama ketika itu untuk satu selepas itu, dengan yang selepas , dan sebagainya dan sebagainya sehingga anda mempunyai rantai struktur data yang boleh anda gunakan bagaimanapun anda suka. Jadi cara ini kita akan biasanya memasukkan atau memadam mana-mana nod dari pautan senarai adalah sangat berbeza bergantung di mana nod yang. Jadi, sebagai contoh, kerana petunjuk sentiasa menunjuk pada nilai tertentu, apabila anda memadam atau memasukkan nod, anda ingin memastikan bahawa penunjuk adalah semua menghala ke arah perkara yang betul. Jadi, jika anda mahu berpotensi memasukkan nod baru dengan nilai satu dalam pautan disusun senarai, kita semua kenali di sini dari gambar yang akan pergi di antara kepala dan dua, bukan? Kerana satu sesuai di sana. Tetapi cara yang di mana kami akan berbuat demikian ialah dengan terlebih dahulu dereferencing penunjuk dari kepala dan menghantar yang satu. Tetapi kita datang ke dalam masalah di sini. Sesiapa sahaja boleh melihat apa masalah adalah jika kita dereference pertama penunjuk dari kepala hingga ke satu? Apa masalah mungkin kita masuk ke dalam jika kita cuba untuk menambahnya ke hadapan pelbagai kami? PENONTON: [didengar] PROFESOR: Tepat sekali. Jadi di sini kita mempunyai penunjuk yang merupakan sekali menunjuk dari kepala ke dua. Tetapi jika anda menghilangkan yang penunjuk, anda menunjukkan kepada orang, kini kita tidak tahu di mana untuk pergi untuk mencari dua. Kerana seperti yang saya katakan sebelum ini, anda telah mendapat satu sebahagian besar ingatan dalam komputer anda. Semua nod ini boleh dapat diselingi secara rawak di mana-mana tempat dalam komputer anda. Dan anda tidak tahu bagaimana untuk pergi tentang mencari tempat itu. Dan jadi anda perlu untuk mempunyai petunjuk menunjuk ke semua nod pada akhir. Atau yang lain jika anda secara tidak sengaja dereference satu tanpa mempersekutukan pertama nilai yang pertama, anda hanya akan kehilangan segala-galanya selepas itu. Jadi apa yang kita akan lakukan ialah, anda lakukan pertama ingin membuat penunjuk pada nod yang anda mahu masukkan. Menunjukkan kepada di mana anda mahu masukkan ke, dan kemudian selepas itu anda boleh menunjukkan kepala kembali kepada satu. Adakah ini masuk akal untuk semua orang di sini? Yang besar. Anggaplah ia sebagai sama seperti rantai. Jika anda menambah rantai, ia adalah jenis intuitif bagaimana anda akan pergi tentang memasukkan itu. OK, jadi yang sebenarnya banyak lebih pendek daripada yang saya fikir ia akan menjadi, satu omongan lima minit di senarai link. Hanya supaya anda semua mempunyai Idea asas apa yang. Di sini kita mempunyai agenda untuk kuiz sifar. Jangan biarkan ini menakut-nakutkan anda. Saya tahu ia banyak maklumat. Ia kelihatan sangat menakutkan. Ia juga banyak, saya berfikir, jenis CSC istilah. Perkara seperti tali perenambelasan, petunjuk, peruntukan memori dinamik adalah istilah yang berbunyi sangat menakutkan. Tetapi kita akan memecahkan mereka ke bawah, melakukan beberapa masalah amalan supaya kalian semua bersedia untuk ujian ini. Berapa ramai daripada anda semua mempunyai sudah mula belajar? OK, anda semua mungkin mahu untuk mula bermula pada itu, kerana kuiz esok. Atau Khamis untuk sebahagian dari kamu. Ya, jadi kita akan pergi atas beberapa masalah amalan. Jika kalian semua mahu mengambil keluar sehelai kertas, pensil. Kami akan hanya menghabiskan Sebahagian besar bahagian hari ini pergi ke atas beberapa yang jadi anda semua mempunyai idea tentang apa yang diharapkan pada kuiz. OKAY. Beberapa logistik butiran juga, untuk sesiapa yang belum pernah ke link yang di sana, jika anda pergi ke cs50.yale.edu, di bahagian depan halaman ini terdapat pautan mengatakan "Tentang Kuiz Zero." Link akan membawa anda ke sana. Jika anda belum membacanya, sila membacanya. Kerana ia memberitahu anda benar-benar penting maklumat mengenai kuiz. Saya akan menarik ini keluar dari bahawa hanya kerana, dari segi fizikal, jika anda semua tidak tahu di mana untuk pergi, kita akan menghadapi masalah. Dan jadi jika terakhir anda dari segi dengan A kepada N, pergi ke auditorium sekolah undang-undang. Dan jika bermula terakhir anda dengan P to Z, pergi ke Auditorium Davies. Dan ini hanya terpakai untuk orang dalam seksyen Rabu. Jika anda mengambil kuiz pada Khamis, anda pergi ke SSS 114 mana kuliah anda biasanya adalah. PENONTON: [didengar] PROFESOR: Wahai to Z, anda akan untuk pergi ke auditorium Davies. Saya akan mengubah itu, bukan? Oh, ya, anda hanya gagal secara automatik. Oh yeah, itulah anda Christa. Yeah, buruk saya. Ya, ya ke Z, anda akan untuk pergi ke Davies Auditorim. Saya akan menetapkan ini sebaik sahaja saya muat naik. Yeah. Dan kemudian juga sesuatu penting untuk minda ialah Rabu, jika anda secara rasmi mendaftar dalam seksyen Rabu, anda mesti mengambil kuiz anda pada hari Rabu. Dan jika anda mendaftar di Khamis, anda mesti mengambil kuiz anda hari ini. Dan ia pada masa kelas. Di mana, saya rasa ia seperti 01:00 untuk 2:15 pada hari Rabu dan 2:30-3:45 pada hari Khamis. Jika anda mempunyai konflik selari, Alasan Dekan adalah perkara sahaja, malangnya, kami boleh mengambil. Oleh kerana kita telah mempunyai Sebahagian besar daripada permintaan untuk beralih dari Rabu hingga Khamis. Yang kita tidak boleh menghormati kecuali kita mempunyai permintaan, Dekan. OKAY. Jadi sebelum kita bermula pada beberapa masalah amalan, Saya hanya akan pergi ke atas Tips berguna Andy untuk berjaya. Anda semua, apabila anda belajar, anda benar-benar mahu amalan menulis kod dengan tangan. Yang pertama kali saya pernah mengambil kuiz CS, saya tidak mempunyai kod amalan bertulis dengan tangan sebelum ini dan ia amat mengejutkan bagaimana sukarnya. Apabila anda lelaki tidak masuk ke dalam tabiat menaip segala-galanya, ia datang sangat yang secara semula jadi dapat telah dengan auto kurungan dan koma bertitik di sana. Apabila anda menulis keluar dengan tangan, kadang-kadang ia sangat, sangat mudah untuk lupa koma bertitik, atau lupa untuk menutup kurungan, atau lupa untuk menutup kolon, atau sesuatu seperti itu. Oleh itu, apabila anda menulis kod dengan tangan, ia adalah rasa yang sangat berbeza. Jadi anda semua, apabila anda bekerja melalui beberapa masalah amalan, ia akan baik untuk benar-benar mengamalkan hari ini. Atau esok, saya rasa, jika anda mengambil kuiz pada hari Khamis. Kedua, kita mempunyai yang terakhir, seperti, bernilai lapan tahun ini amalan kuiz dalam talian. Kuiz tahun ini mungkin akan menjadi sangat, hampir sama dengan mereka semua. Mereka semua sama. Anda jenis masuk ke dalam gaya bentuk soalan yang dapat kita minta, jenis fungsi yang kami akan menulis dalam, dan sebagainya, dan sebagainya. Oleh itu, mengambil kuiz amalan, terutamanya di bawah kekangan masa. 75 minit untuk melakukan kuiz adalah tidak banyak jumlah masa. Ia sangat, sangat panjang. Dan supaya anda semua benar-benar mahu memastikan bahawa anda semua dalam tabiat bertulis kod dengan tangan cepat. Kerana anda tidak mahu pertama masa untuk melihat kuiz panjang yang berada di kuiz anda. Kalian benar-benar ingin memastikan bahawa anda mengamalkan terlebih dahulu. Keempat, anda mahu untuk mengkaji semula kuliah dan seksyen slaid. Anda tidak perlu menghafal sesuatu. Sebenarnya, semua orang dibenarkan satu lembaran wang kertas putih, depan dan belakang. Kalian boleh menaip atau menulis. Jika anda mendapati diri anda perlu untuk menghafal apa-apa, meletakkan ia ke bawah di dalam lembaran itu. Saya jamin anda, anda tidak mahu terperangkap di tengah-tengah kuiz yang menjadi seperti, oh yeah, apa runtime seperti ini berbanding seperti itu. Hanya meletakkan ia ke bawah dan menyalinnya lurus dari lembaran komen anda. Kemudian anda boleh sebenarnya hanya menggunakan anda otak untuk berfikir tentang masalah daripada harus ingat fakta. Dan supaya benar-benar mengambil kesempatan apa-apa butir-butir khusus yang anda fikir anda perlu untuk menghafal, mencebur ke bawah di dalam lembaran kajian. OK, sebarang pertanyaan logistik mengenai kuiz sebelum kita memulakan beberapa masalah kuiz mengamalkan? Ya? PENONTON: Saya tidak mempunyai peluang melihat kuiz [didengar] tetapi ia akan menjadi Aplikasi biasanya, atau ada juga akan menjadi, seperti, soalan pengetahuan? PROFESOR: Ia banyak. Jadi, cara yang saya akan diterangkan kuiz is-- saya meletakkan bersama-sama beberapa masalah amalan bahawa saya menarik diri dari semua kuiz. Tetapi anda akan melihat bahawa ada dua utama jenis soalan kami akan bertanya kepada anda. One ialah detail tahap yang sangat rendah barangan. Kami akan memberikan anda sebahagian kecil kod dan berkata, ada kesilapan di sini? Apa yang akan mencetak di sini? Apa yang akan menghasilkan kod ini, dan sebagainya. Jadi tahap yang sangat rendah butiran maklumat. Dan di sebelah flip, kami akan mempunyai sangat soalan berasaskan pengetahuan tahap tinggi. Bolehkah anda terangkan apa itu Perbezaan antara carian binari dan carian linear adalah? Mengapa kita mahu menggunakan berbanding dengan yang lain? Mungkin, apa yang GDB? Mengapa kita mahu menggunakan GDB? Tahap yang lebih tinggi, lebih asas soalan pemahaman. Jadi, anda akan melihat campuran kedua-dua mereka pada kuiz anda. Apa-apa lagi sebelum kita kepala terus ke dalamnya? OKAY. PENONTON: Salah lagi. PROFESOR: Oh, satu lagi. Maaf. PENONTON: Ya, ia adalah hak semua. Jadi, anda katakan 75 minit adalah terlalu pendek, seperti ia tidak mungkin bahawa kita akan selesai? Atau, seperti, 75 minit betul-betul banyak masa seperti yang kita perlu jika kita sewajarnya disediakan? PROFESOR: OK, jadi kuiz adalah mencabar. Ia pasti mencabar. Anda akan mendapati diri anda kesuntukan masa. Anda mungkin akan melanda, seperti 10, 15 minit untuk pergi, dan menjadi seperti najis. Saya telah begitu banyak yang perlu dilakukan. Dan itu betul-betul halus. Semua orang akan berasa cara yang sama. Hanya berhati-sedar berapa banyak masa yang anda ada. Dan jadi sebab itu saya memberitahu anda seorang lelaki melakukan kuiz amalan. Oleh kerana ia benar-benar memberi erti yang besar apa kuiz akan menjadi seperti. Jadi, jika anda mendapati diri anda dapat selesai amalan kuiz dalam jumlah yang baik masa, anda boleh langkah anda sendiri dengan baik, maka anda tidak akan mempunyai masalah pada hari Rabu atau Khamis. Sejuk. Jadi, jika semua orang wants-- saya fikir kebanyakan orang mempunyai helaian kertas keluar sudah. Saya akan dasarnya hanya memberikan contoh soalan, memberi anda semua, seperti, beberapa minit untuk melakukannya. Dan kita akan pergi sebagai kelas apa jawaban mereka adalah. Jadi ini adalah sangat lazim soalan awal kami akan bertanya kepada anda, hanya menukarkan nombor antara asas yang berbeza. Perduaan, kerana anda semua boleh ingat, adalah asas dua. Decimal adalah asas 10, atau apa yang kita sebagai manusia biasanya mentafsir. Perenambelasan adalah asas 16, yang adalah sifar melalui sembilan dan juga A hingga F. Jadi ada empat nombor Saya meminta anda semua untuk menukar sini. Saya akan memberikan anda suka, tiga hingga empat minit untuk memikirkan bagaimana kita akan pergi tentang menyelesaikan ini. PENONTON: Adakah kita dibenarkan kalkulator? PROFESOR: Anda tidak akan memerlukan kalkulator, yeah. Saya rasa selain asas, saya fikir, adalah semua kamu akan diminta untuk lakukan. Dan hanya jadi saya jenis mempunyai rasa yang bila semua orang sedang dilakukan, mencari, gelombang, saya tidak tahu, tersenyum, kelihatan gembira jika anda selesai. Yeah. Mungkin pasangan yang lebih minit. OK, mari kita menyelaraskannya. Saya sengaja akan memberikan anda semua masa yang kurang daripada apa yang anda mungkin perlu sebahagian dari masalah, hanya kerana saya mahu memastikan bahawa kita akan mendapat melalui sekumpulan masalah. Jadi tidak perlu bimbang jika anda tidak mempunyai peluang untuk menyelesaikan. Totally OK selagi anda mempunyai idea tentang bagaimana untuk pergi tentang perkara ini. Jadi mari kita pergi ke depan dan melakukan yang pertama. Jadi pertama, adakah sesiapa yang mahu beritahu saya dalam binari, apa yang setiap digit ini mewakili dari segi nilai-nilai mereka? Ya? PENONTON: dua kepada kuasa sifar, 2-1. PROFESOR: Tepat sekali. So. Betul, jadi biasanya apabila kita berada dalam asas 10 semua ini mewakili adalah, seperti, 10 ke pangkal sifar, bukan? Itulah satu tempat anda. Semua tempat 10 ini anda adalah 10 kuasa satu. Tempat anda 100 adalah 10 kepada kuasa dua. Apa asas anda berada dalam akan kaitan dengan perkara yang sama, hanya dengan asas yang berbeza. Jadi binari, segala yang ada adalah asas dua. Anda akan menukar semua digit kepada dua kepada apa sahaja kuasa digit itu. Dan sebagainya dalam hal ini, kita boleh mempunyai cara yang lebih mudah yang dapat menambah atau jumlah semua nombor dalam urutan untuk menukar ke asas 10. Jadi adakah sesiapa yang mahu untuk memberitahu saya apa yang Jawapan kepada yang pertama adalah dalam asas sepuluh? PENONTON: Dua, [didengar] PROFESOR: Ya. PENONTON: 42. PROFESOR: 42, di sana anda pergi. Jadi cara kita mendapat jawapan ini adalah dengan melakukan dua yang pertama, yang merupakan dua. Plus dua pertiga, yang lapan. Plus dua hingga kelima, yang adalah apa sahaja yang ditinggalkan. Anda kesimpulan mereka dan ia 42. Ada seorang keliru tentang bagaimana kita dapat itu? Selain itu, asas, seperti Saya berkata, anda akan OK. Jika tidak, baik, kita boleh mengamalkan itu juga. Tetapi itu semua betul. Sejuk. Adakah sesiapa yang mahu memberi saya menjawab kepada yang kedua juga? 50? Yang baik. Sesiapa pun keliru mengenai cara kami mendapat yang sama ada? Hebat, saya akan mempunyai jawapan pada slaid seterusnya. Jadi tidak ada kebimbangan jika anda perlu menyalin ke bawah. OK, jadi perenambelasan adalah sedikit lebih sukar. tetapi saya akan menunjukkan kepada anda semua jalan pintas untuk bagaimana untuk melakukannya. Jadi perenambelasan, kerana anda ingat, semua itu adalah menjadi 16. Dan kerana kita sebagai manusia tidak benar-benar mempunyai 16 nombor untuk menyatakan bahawa, kita pergi dari sifar hingga sembilan, yang pertama kami 10 nilai, dan kemudian kita melakukan A hingga F, yang merupakan enam nilai yang akan datang. Dan sebagainya cara yang paling mudah untuk pergi dari mana-mana nombor perduaan kepada perenambelasan adalah untuk memecahkan mereka ke dalam bahagian. Dan supaya mana-mana nombor binari kami akan memberikan anda mungkin akan mempunyai lapan digit. Anda hanya boleh memecahkan mereka di tengah-tengah. Jadi pertama one-- salah satu, salah satu, satu, satu, satu satu. Jenis fikir ia, anda tahu, menarik tanda palang atau koma dalam antara mereka. Dan anda hanya boleh menukar langsung apa sahaja ini adalah untuk pertama beberapa perenambelasan, dan apa sahaja di sini adalah untuk kedua perenambelasan. Jadi ingat dari notasi yang sama, apa nilai perenambelasan bermula dengan? PENONTON: Zero. PROFESOR: 0x. Jadi kita tahu bahawa bila-bila masa kami meminta anda untuk menukar mana-mana nombor untuk perenambelasan, atau bila-bila masa anda melihat apa-apa nombor yang bermula dengan 0x, anda tahu bahawa ia adalah satu nilai perenambelasan. Dan kemudian anda akan diminta untuk menentukan apa dua digit berada. Dan cara yang anda lakukan itu, penjumlahan undi sehingga yang separuh dan penjumlahan undi setengah itu. Jadi, dalam contoh ini, apa akan satu, satu, satu, satu boleh? Apakah nilai yang yang boleh? Yang akan menjadi F, bukan? Yang akan menjadi 15. Jadi ini akan menjadi F. Satu, satu, satu, satu di sini juga F. Jadi satu, satu, satu, satu, satu, satu, satu, satu dalam perenambelasan, semua itu adalah 0xFF. Kerana separuh ini diwakili F, nilai 15, setengah ini diwakili F, nilai 15. Kerana ingat, kami mengira dari sifar hingga sembilan. A adalah seperti 10, B adalah seperti 11, F ialah 15. Adakah ini masuk akal untuk semua orang bagaimana kita dapat dari perduaan kepada perenambelasan? PENONTON: Dan bagaimana kita dapat 15 daripada satu, satu, satu, satu? PROFESOR: Ya, ini adalah binari, bukan? Bayangkan ini adalah hanya satu nombor binari. Jadi, anda mempunyai dua orang ke 0, yang merupakan salah. PENONTON: Oh, OK. Jadi anda hanya total keluar. PROFESOR: Ya, dan kemudian anda hanya jumlah yang keluar. Itu sahaja yang ia adalah. PENONTON: OK. PROFESOR: OK. PENONTON: Jadi yang anda pergi dari binari kepada perpuluhan kepada perenambelasan? PROFESOR: Itulah Cara yang paling mudah untuk berbuat demikian, ya. Anda tidak akan perpuluhan kerana perpuluhan hanya mempunyai sifar hingga sembilan. Kami hanya jenis membelah ini kepada dua. PENONTON: [didengar] menggunakan perpuluhan untuk mencari apa yang ia perlawanan sehingga dalam perenambelasan. PROFESOR: Maksud saya, anda penjumlahan undi dengan menggunakan matematik asas. PENONTON: Ya. PROFESOR: Ya, cukup banyak. Ia adalah agak mengelirukan. Tetapi hanya tahu bahawa anda boleh membahagikan apa sahaja nilai ini ke dalam hanya bahagian. , Sesungguhnya yang demikian dalam binari? Apa nombor itu? Ia akan menjadi sesuatu yang dari sifar hingga F. Di sini juga akan menjadi sesuatu yang dari sifar hingga F. Dan kemudian anda hanya boleh meletakkan kedua-dua di sana. PENONTON: OK. PROFESOR: Ya. OKAY. Jadi, anda lelaki mahu cuba yang seterusnya itu? Sifar, satu, sifar satu, satu, sifar, satu sifar. Saya akan memberikan anda semua suka 30 saat, kerana anda mungkin tidak tahu helah untuk bagaimana untuk melakukan ini lebih awal. OK, sesiapa ingin mendapatkan satu ini pukulan? 0X5A. PROFESOR: 0X5A. 5a. Yang baik. Jadi ini di sini akan adalah- anda mahu untuk memberitahu kami bagaimana anda mendapat bahawa? Pertama, bagaimana engkau masuk ke lima? PENONTON: Kerana sifar, satu, sifar, satu ialah lima. PROFESOR: Adakah semua orang faham mengapa sifar, satu, sifar, satu lima? Anda telah mendapat satu di sini. Anda mempunyai apa-apa dalam dua yang pertama. Dalam dua hingga kedua, anda mempunyai satu, yang empat. Jadi, anda menambah empat campur satu, anda mempunyai lima. Semua orang yang baik? OKAY. Dan kemudian apa ini menjadi dan mengapa? Apakah nombor yang tidak sesuai dengan A? PENONTON: 10. PROFESOR: Dan apa ini dalam asas dua? PENONTON: [didengar] PROFESOR: Tepat sekali. Jadi nilai kedua ini di sini akan menjadi 0X5A. Semua orang yang baik tentang bagaimana untuk menukar? Ia lebih mudah daripada anda fikir ia. Saya hanya ingin memastikan anda tahu tips berguna dan cara untuk bagaimana untuk berbuat demikian. PENONTON: Kenapa anda hanya berpecah ia di tengah-tengah seperti itu? Hanya menjadi seperti, OK, saya hanya akan mengambil berat mengenai pertama [didengar]? PROFESOR: Kerana itulah sebenarnya cara nilai perenambelasan diwakili. 0x, yang sebenarnya bermaksud apa-apa selain daripada memberitahu anda bahawa itu nombor perenambelasan. Dan ini sentiasa mewakili yang pertama empat digit. Dan ini sentiasa mewakili empat digit terakhir. Dan supaya kedua-dua digit sahaja sesuai dengan bit yang berbeza. PENONTON: Oleh itu, kita akan always-- PROFESOR: Anda sentiasa akan mendapat lapan bit nilai. PENONTON: Adakah itu sama seperti perkara yang sini atau bahawa satu perkara yang seluruh badan? PROFESOR: Itu hanya satu perkara dalam komputer, yep. PENONTON: OK. Awesome. PROFESOR: Juga, jadi dalam contoh ini kita ditukar dari perduaan kepada perpuluhan, dan dari perduaan kepada perenambelasan. Kalian ingin memastikan anda juga mengamalkan berlaku dengan cara yang lain di seluruh. Jadi, jika aku telah memberi 0xFF, anda boleh menarik bahawa di dalam binari, bukan? Anda menukar F ke dalam binari, yang merupakan salah satu, satu, satu, satu, menukar F kepada perduaan, yang adalah satu, satu, satu, satu. Oleh itu, kita mungkin meminta anda untuk melakukan sebaliknya. Jadi perpuluhan kepada perduaan, atau perenambelasan kepada binari. Jadi, anda ingin pasti anda tahu kedua-dua cara. Kita mungkin akan meminta anda gabungan kedua-duanya. Ya, anda mempunyai soalan? Saya boleh see-- anda baik? PENONTON: Ya. PROFESOR: OK. Am I baik untuk memadam ini? Yang besar. Baiklah, jadi jawapan di sini jika sesiapa Adalah menghairankan kemudian hari dan keliru. OKAY. PENONTON: Adakah ia perkara jika kita meletakkan surat kami di gedung DPR atau huruf kecil? PROFESOR: Ia lakukan, kerana dalam perenambelasan, melalui konvensyen, semua watak-watak yang huruf besar. Jadi A hingga F adalah akan menjadi huruf besar. Jika anda meletakkan huruf kecil, saya tidak tahu jika kita semestinya akan menandakan kesilapan. Tetapi secara teori, itu bukan teknikal bagaimana anda sepatutnya mempunyai. Jadi mereka semua harus huruf besar. Ya, soalan yang baik. OKAY. Soalan kedua. Anggaplah program ini indah di sini. Saya akan bertanya soalan, Saya akan kembali ini. Jadi, pertama, apa yang di dalam standard io.h itu menarik minat program ini? Kedua, apa yang tidak sah menandakan selaras tiga? Dan ketiga, apa yang kembali dari sifar utama, sebagai garis enam, biasanya menandakan? Jika anda semua mahu menulis mereka ke bawah, kerana saya mempunyai untuk menukar kembali ke slaid hanya supaya anda boleh melihat kod. Ini adalah satu contoh, seperti, mungkin soalan tahap lebih tinggi di mana kami meminta anda apa artinya dalam program. Semua orang baik bagi saya untuk kembali ke slaid? OK, sejuk. Jadi saya akan memberikan anda semua suka mungkin tiga minit untuk melihat cepat satu ini nyata. OK, jadi ini seseorang seperti agak mudah, dari segi konsep. Adakah sesiapa yang ingin memberitahu saya apa yang pertama dalam oleh hash termasuk Fail perpustakaan io.h standard kami? Mengapa kita memerlukan perpustakaan yang termasuk untuk program ini? Apa yang di sini kita memerlukannya untuk? Ya? PENONTON: Adakah itu apabila anda meletakkan printf itu? PROFESOR: Tepat sekali. Jadi printf, bila-bila masa anda mengambil input daripada pengguna dan mencetak sesuatu ke skrin, itu input standard, perpustakaan output. Fikirkan ia yang way-- input, output. Adakah saya perlu output? Ya saya. Jadi saya tahu bahawa saya sentiasa akan memerlukan perpustakaan Standardize i.o. Jadi printf adalah fungsi yang mana kita perlu untuk mengakses dan hashtag termasuk perpustakaan i.o standard. OKAY. Kedua, apakah sah menandakan? Kami mempunyai int main (tidak sah), apakah tidak sah di sini bermakna di sini pada baris tiga? Ya, di belakang. PENONTON: [didengar] PROFESOR: Tepat sekali. Jadi ingat, kita telah belajar bermula dengan pset kami bahawa anda boleh sebenarnya menentukan baris arahan hujah-hujah yang program anda, bahawa anda fungsi utama, mengambil masa anda, pengguna, memanggilnya. Jika kita mempunyai tidak sah, yang bermakna bahawa anda hanya boleh menjalankan program ini secara langsung tanpa apa-apa hujah baris arahan. Semua orang jelas pada itu? OKAY. Dan akhir sekali mengapa kita bersusah payah melakukan Perkara pulangan sifar ini di sini? Mengapa kita walaupun mempunyai utama int? Mengapa tidak boleh kita hanya perlu sah utama tidak sah? Ya? PENONTON: Hanya supaya kita dapat pastikan bahawa program ini adalah keluar dengan jayanya, sebagai berbanding dengan jika ia bernombor. Dan kita akan tahu bahawa itulah pelbagai jenis kesalahan. PROFESOR: Ya, betul-betul. Ini hanyalah sangat perkara konvensional yang kita lakukan, adalah bahawa hanya pada akhir program anda, hanya untuk memastikan bahawa fungsi utama anda sedang berjalan dengan betul, kita sentiasa mahu lakukan pulangan sifar. Walaupun kita boleh semestinya tidak melihat bahawa dicetak di mana sahaja. Kerana sebagai pengaturcara, anda tahu, jika anda mempunyai banyak laluan yang berbeza kod dan anda tidak tahu di mana ini berlaku salah, dan jika ralat berlaku anda mahu memastikan bahawa anda mendapat ralat itu. Dan sebagainya biasanya jika ada masalah salah kita akan mempunyai pulangan sebanyak satu hanya memastikan kita tahu bahawa ia adalah. Jadi jika anda melihat pulangan yang sifar, yang biasanya bermakna program anda adalah dilaksanakan dengan jayanya. Baik? Sejuk. OK, program kedua di sini. Pertimbangkan bahawa. Dan jika anda semua melihat terapung, anda semua boleh mungkin mempunyai idea yang baik dari apa yang Saya akan bertanya kepada anda. Oleh itu, apabila program ini melaksanakan, seperti yang anda lihat, Aku memberitahu apungan dalam fungsi utama saya. Saya menamakan ia "menjawab," dan saya menetapkan yang sama dengan satu dibahagikan dengan 10. Saya mencetak keluar, untuk satu tempat perpuluhan, float itu. Dan kemudian saya kembali sifar. Oleh itu, apabila melaksanakan program ini, berfikir kembali kepada tamak sekarang, program ini mencetak 0.0. Seperti yang kita semua tahu, mudah-mudahan kita semua tahu, satu dibahagikan dengan 10 bukan 0.00, ia adalah 0.1. Tetapi menjelaskan mengapa program ini difikirkan bahawa 1 dibahagikan dengan 10 cetakan kepada 0.1 lain daripada 0.1? Saya akan memberikan anda semua mungkin seperti 30 saat untuk hanya cepat berfikir tentang itu dan saya akan kembali kepada program ini. OKAY. Sesiapa yang mahu mencuba? Dalam tiga ayat atau kurang, kerana biasanya kami akan menyekat semua jawapan hingga tiga ayat atau kurang supaya anda tidak hanya muntah benda-benda rawak ke kuiz anda. Ya, mengambil pukulan. PENONTON: Jadi saya fikir ada ini Perkara yang dipanggil, seperti, [didengar] Jadi mungkin terdapat, misalnya, mungkin ada, seperti, 0.09, bahawa jika anda mencetak pertama angka, ia akan menjadi kepada 0.0? PROFESOR: Tutup, tidak cukup. Christabell? PENONTON: Anda membahagi satu dan 10, dan mereka kedua-dua integer. Dan jadi cara bahawa ia akan untuk menyimpannya seperti integer. Dan sebagainya integer yang paling hampir akan menjadi 0.0. Dan supaya 0.1. PROFESOR: Ya, itu benar-benar baik. Itulah jawapan yang betul. Jadi ini adalah sangat mengelirukan konsep untuk banyak anak-anak. Dan saya benar-benar mahu memastikan bahawa ini diperkukuh di kepala semua orang. Jadi apa yang kita panggil terapung titik ketakpersisan, mana sebab mengapa banyak program anda dalam tamak tidak berjaya pada mulanya kerana anda terlupa untuk membuang variabel. Jadi apa Christabell berkata adalah betul. Float A adalah sifat yang tidak tepat. Kerana dalam komputer, betul, kita mempunyai jumlah yang terhad bit memori kita boleh menggunakan untuk mewakili nombor. Jadi, sebagai contoh, ID CS50 ini is-- Saya fikir ia adalah satu komputer 64-bit. Float hanya boleh diwakili dengan jumlah yang terhingga bit-bit. Dan sebagainya 0.1 dengan sifar tak terhingga, bahawa adalah 0.1 adalah, bukan? Tetapi kita tidak boleh benar-benar menyimpan jumlah itu dalam komputer kita. Kami hanya tidak mempunyai memori yang cukup untuk berbuat demikian. Dan sebagainya penghampiran terdekat apa yang disimpan dalam memori sebenarnya sesuatu seperti 0,000 sesuatu, sesuatu, sesuatu, sesuatu. Yang, sebaik sahaja anda memendekkan itu, pusingan turun ke 0.0. Dan sebagainya contoh ini hanya salah satu yang menunjukkan banyak isu-isu kita ada setiap kali kita berada cuba untuk tidak betul melakukan matematik tanpa pemutus sebagai integer yang berbeza. Jadi hanya berhati-hati dengan perkara ini berlaku. Pada kuiz, jika kita memberikan anda satu blok kod dan ia seperti, apa yang mencetak keluar pada akhir? Dan jika ia beberapa nilai rawak anda lelaki perlu tahu mengapa yang berlaku. Ya? PENONTON: Truncate adalah menghilangkan segala-galanya selepas titik tertentu? [Didengar] PROFESOR: Ya, jadi sebenarnya ini adalah satu contoh yang benar-benar buruk, kerana 0.100 apa sebenarnya akan memendekkan turun ke 0.1. Tetapi jika anda adalah untuk menjalankan kitab itu saya tidak ingat, kerana tahun lalu mereka berlari pada program yang berbeza. Mereka berlari dalam sesuatu dipanggil Appliance CS50, yang berbeza dengan ID. Mereka itu adalah satu sistem 32-bit, saya fikir. Dan sebagainya terdapat nombor yang berlainan. Tetapi pada dasarnya, hanya tahu bahawa keseluruhan konsep pemangkasan dan bagaimana ia hanya memotong berselindung. Dan jadi jika ia rounds-- PENONTON: Tanpa penggenapan. PROFESOR: Tepat sekali. Yeah. Sejuk. Hi, di belakang. Kami hanya pergi ke atas beberapa kajian kuiz soalan. Baiklah. Oleh itu fikirkanlah program yang berbeza di sini. Saya akan memberikan anda semua yang beberapa minit untuk membaca lebih ini. Ini adalah sesuatu yang adalah untuk yang sangat baru-baru ini yang saya rasa meniup banyak daripada anda fikiran lelaki itu. Tetapi kita akan bercakap melalui ini sekali lagi hanya untuk memastikan anda memahami sepenuhnya. OKAY. OKAY. Sesiapa sahaja memerlukan lebih masa untuk membaca kod ini? OKAY. Oleh itu, ia seolah-olah saya bahawa dalam program ini saya mewujudkan dua tali dengan menggunakan GetString. Satu dipanggil s dan satu dipanggil t. Dan jika mereka sama sama dengan satu sama lain, ia perlu mencetak "Anda menaip perkara yang sama. " Tetapi elsewise, ia akan mencetak, "Anda ditaip perkara yang berbeza, "kan? Seolah-olah sangat, sangat mudah. Tetapi, bagaimanapun, jika saya benar-benar cuba untuk menulis program ini, ia seolah-olah bahawa walaupun saya input tali sama, ia masih mencetak keluar, "Anda ditaip perkara yang berbeza! " Adakah sesiapa yang mahu mengambil pukulan pada mengapa program ini sentiasa respons bahawa input adalah berbeza, walaupun apabila perkataan itu sendiri adalah sama? Jadi jika saya input-- David cinta menggunakan contoh seperti ibu, bukan? Huruf kecil M-O-M untuk S, T sama dengan huruf kecil M-O-M. Jika saya berlari ini melalui kod yang, mengapa ia mencetak "anda taip perkara yang berbeza?" Adakah sesiapa yang memerlukan lebih banyak masa untuk berfikir tentang perkara ini? OK, saya rasa kita baik. Ya? PENONTON: OK, jadi ia sesuatu tentang di mana ia disimpan dalam memori, bukan? PROFESOR: Ya. PENONTON: Di mana ia seperti, jika ini rentetan s disimpan di ingatan spot-- Saya mencipta this-- adalah sifar. PROFESOR: Pasti. PENONTON: Dan tali t disimpan di tempat ingatan, seperti, 167, dan kemudian sifar tidak sama 167. PROFESOR: Tepat sekali. OK, jadi ingat ini yang luar biasa wahyu yang kami terangkan kepada anda semua ini minggu lalu, yang tali tidak benar-benar wujud? Apabila kita membuat sesuatu yang dinamakan rentetan kita, pada hakikatnya, mewujudkan sesuatu yang dinamakan char bintang. Yang semua itu adalah penunjuk kepada rentetan atau pelbagai aksara. Dan sebagainya dalam contoh ini, jika saya adalah untuk input M-O-M cara bahawa komputer saya akan menyimpannya adalah dalam memori backslash sifar, bukan? Mereka empat aksara, aksara, akan disimpan di suatu tempat. Dan kemudian keempat-empat aksara, garis sendeng terbalik sifar, disimpan di tempat lain, bukan? Saya tidak tahu di mana alamat adalah, mereka di suatu tempat di komputer saya. Tetapi saya tidak betul-betul tahu di mana mereka berada. Apabila saya membuat rentetan s, semua yang benar-benar adalah adalah penunjuk kepada mula tali ini. Dan apabila saya mencipta nilai t ini, segala yang ada penunjuk ke sini. Dan apabila anda cuba untuk menyamakan dan memeriksa untuk melihat jika s adalah sama rata sama dengan t, komputer adalah benar-benar hanya kembali ke anda alamat m ini dan alamat m itu. Dan kerana mereka dua keping berasingan data yang disimpan di dua alamat dalam komputer anda, komputer anda tidak pernah akan mengiktiraf mereka sebagai adalah sama. Adakah sesiapa yang mahu memberikan satu pukulan pada apa yang kita perlu dilakukan jika kita mahu membetulkan ini dan mempunyai program yang betul berjalan bukan? Fikirkan tentang itu selama beberapa saat. Apa yang kita perlu berubah untuk mendapatkan fungsi program ini cara yang kita mahu ia berfungsi? Ya, mahu mengambil tikaman di ia? PENONTON: Bolehkah kita cuba untuk dereference yang penunjuk dan memeriksa melalui array? PROFESOR: Itu salah satu cara untuk melakukannya. Jadi, apa nama anda lagi? Saya minta maaf, mengingatkan saya. Zee Zee. PROFESOR: Ya, jadi apa Zee dicadangkan benar-benar akan bekerja. Betul? Kita boleh dereference penunjuk dan benar-benar pergi dan akses data fizikal dalam dari sini. Dan kita hanya boleh membuat perbandingan seluruh skrin. Kita boleh berkata, OK, penunjuk, memberi saya apa yang di dalam sini. Ia akan kembali m yang. Dan saya akan berkata, penunjuk, memberi saya apa yang di dalam sini. Kembali m yang. Adakah perlawanan mereka? Ya. Kemudian kami meneruskan perjalanan. Kami terus memeriksa keseluruhan dua tali sepanjang jalan sehingga sehingga akhir dan lihat jika mereka adalah sama, jika semua nilai adalah sama. Dan jika semua nilai adalah sama, maka kita tahu tali adalah benar. Tentu sekali, itulah bagaimana kita akan melakukannya? Adakah sesiapa yang keliru di mana-mana ini? Konsep keseluruhan bagaimana tali benar-benar hanya petunjuk, dan bagaimana mereka tidak benar-benar wujud? Dan mengapa kita mendapat ralat seperti cara kita mendapatkannya? Oleh kerana saya jamin anda semua, petunjuk dan peruntukan dan ingatan rentetan akan datang. Ya? PENONTON: [didengar] dereference , anda hanya meletakkan bintang [didengar] PROFESOR: Betul. Jadi untuk derererence satu cara penunjuk pergi ke alamat penunjuk dan mendapatkan data, nilai di sana. Dan cara untuk berbuat demikian adalah penunjuk bintang. Jangan mengelirukan itu. PENONTON: [didengar]. PROFESOR: Ya. PENONTON: Jadi anda hanya boleh menulis jika sama t bintang s setaraf bintang. PROFESOR: Sebenarnya, tidak. No. PENONTON: Bukan itu cukup baik, bukan? PROFESOR: Ia bukan, kerana anda hanya memeriksa surat pertama. Anda mungkin akan memerlukan beberapa jenis gelung yang iterates melalui setiap tunggal watak dalam kedua-dua tali. Yeah. Jadi, jika anda mahu hanya menyemak untuk melihat jika mereka bermula dengan perkara yang sama, anda boleh lakukan jika, bintang s adalah sama dengan bintang t. Maka anda tahu bahawa sekurang-kurangnya mereka bermula dengan watak yang sama. Ya? PENONTON: Jadi cara anda yang akan menjadi seperti terbenam untuk gelung atau penunjuk? PROFESOR: Ya. Cukup banyak hanya untuk gelung. Ingat, David dalam kelas yang dinyatakan gula sintaksis percuma? Dan dia mempunyai ini sangat Perkara yang mengelirukan bintang t tambah satu, di mana ia akan mengintegrasikan melalui dan ia bergerak penunjuk? Cara yang lebih mudah untuk berbuat ini hanyalah t i. Jadi ia hanya array. Cara yang anda akan mempunyai untuk gelung yang berlari dari sifar hingga i, di mana i adalah panjang tali, anda boleh hanya menulis bahawa daripada melakukan yang keseluruhan penunjuk, perkara rujukan. Jadi perkara-perkara ini adalah betul-betul setara dalam komputer anda. Kalian mungkin tidak akan perlu tahu bahawa, tetapi ia adalah baik untuk hanya jenis ada di belakang minda anda. Hanya tahu bahawa komputer mengiktiraf blok yang berbeza kod sebagai perkara yang sama. Kerana ini adalah hanya lebih pengguna mesra bagi kita untuk menghadiahkan seperti ia pelbagai. Ia hanya lebih mudah. PENONTON: Jadi menggunakan strlen untuk suka, get-- PROFESOR: Ya. PENONTON: OK. PROFESOR: Anda boleh menggunakan strlen atau, jika anda tidak mempunyai strlen anda hanya boleh melakukan sehingga sehingga anda memukul backslash sifar bagi kedua-duanya. Sama ada akan bekerja. Yeah. PENONTON: Jadi ia adalah untuk setiap dereference aksara tunggal jika kita benar-benar menulis kod ini, kami hanya boleh melakukan t kurungan i suka dengan bintang di hadapannya? PROFESOR: Ya, sama sama s kurungan i, dan kemudian menjaga i bergerak ke bawah sehingga anda memukul akhir. Ya, itulah yang anda akan lakukan. Dan saya benar-benar akan mempunyai berikut contoh apabila kita benar-benar menulis strlen supaya anda semua akan baik untuk dapat bermain-main dengan sedikit. Begitu juga semua orang yang jelas di ingatan adil, tali, petunjuk, alamat yang berkualiti? Beberapa konsep tahap yang lebih tinggi yang anda wasiat untuk keperluan yang pasti untuk mengetahui kuiz esok. Baiklah. Yang baik. Ya. OK, jadi satu perkara yang kami akan juga meminta anda, seperti yang kita lakukan setiap tahun pada kuiz, adalah, menganggap bahawa anda terlupa (yang kita seolah-olah lupa untuk melakukan setiap tahun) di mana fail header strlen diisytiharkan. Dan dengan itu kita perlu menulis semula diri kita sendiri. Berikut adalah senarai garis panduan bahawa kita boleh hadir anda seorang lelaki di mana anda boleh menganggap bahawa s tali tidak akan null. Anda boleh menganggap bahawa s akan menjadi ditamatkan dengan garis sendeng terbalik sifar. Jadi, anda tahu itulah yang ia akan berakhir dengan. Dan, sebagai contoh, bahawa panjang hello berjumlah lima. Jadi, anda boleh mengandaikan bahawa hello akan menjadi lima, H-E-L-L-O. Anda tidak perlu menganggap bahawa Bahagian belakang akaun sifar untuk panjang. Ini perkara terakhir di sini, tidak bimbang tentang limpahan integer. Adakah sesiapa ingat apa integer limpahan? PENONTON: Goes luar panjang [didengar]. PROFESOR: Ya, anda boleh menerangkan sedikit, apa maksudnya? PENONTON: Jadi, saya rasa ia kembali kepada contoh di memendekkan lebih awal. Tetapi jika anda mempunyai hanya begitu banyak nombor yang melampaui bilangan bit bahawa anda sebenarnya boleh sediakan bahawa ia akan hanya jenis terputus. PROFESOR: Ya, sebagainya yang biasa komputer, berapa banyak bit yang kita ada? PENONTON: 32? PROFESOR: Ya, 32, betul. Dan supaya, apa, empat bilion, dua bilion? Empat bilion, sehingga empat bilion integer positif, bukan? Dua bilion negatif, dua bilion positif, bergantung kepada bagaimana anda mahu melakukannya. Dan jadi pada dasarnya kita boleh mempunyai integer cukup yang boleh naik kepada dua hingga 31 tolak 1, bukan? Kerana apabila kita mencapai dua ke-32, kita tidak mempunyai memori banyak dalam komputer kita. Dan sebagainya, secara teori, saya boleh datang dengan sebilangan iaitu, seperti, dua hingga ke-46. Ia adalah satu besar-keldai, tetapi secara teorinya anda boleh. Dan limpahan jadi integer adalah jika anda cuba untuk membuat integer yang melampaui apa komputer anda mampu menyimpan. Dan supaya anda semua untuk contoh ini tidak mempunyai bimbang tentang kami memberikan anda gergasi tali itu adalah dua kepada aksara 32 panjang. Yang akan benar-benar bermakna. Baiklah, jadi saya hanya akan memberikan anda semua struktur asas ini. Anda akan membuat fungsi dipanggil int strlen mana yang lulus dalam, bintang char, atau tali, penunjuk kepada tali dipanggil s. Baiklah, setiap orang yang menyalin ke bawah. Sejuk. Oops-- cara lain. Jadi ini adalah jenis seperti sekeping sukar masalah, jadi saya akan memberikan anda semua mungkin lima hingga enam minit untuk jenis brainstorm dan menulis fungsi ini keluar. PENONTON: Kami tidak akaun untuk [didengar], kita tidak perlu menggunakan integer? PROFESOR: Tidak, anda tidak. Saya akan memberikan anda semua petunjuk. A gelung sementara mungkin sangat berguna di sini. Yeah. Berikut adalah gula-gula. Gula-gula juga boleh didapati untuk kuiz, saya fikir. Jadi anda semua akan semua bergula esok. Boleh saya-- anda mendapat ia. PENONTON: OK. PROFESOR: Ya. Mungkin lebih 30 saat atau lebih. Baiklah, jika anda tidak dilakukan, tidak ada kebimbangan. Kami akan bergerak melalui ini bersama-sama. OKAY. Jadi, saya akan hanya susun atur yang struktur asas untuk fungsi ini di sini. Int strlen. Pertama, adakah sesiapa yang ingin memberitahu saya apa int yang melambangkan? Kita perlu ada dalam fungsi ini. PENONTON: strlen [didengar]. PROFESOR: Tepat sekali. Jadi apa yang berlaku di sini, kita perlu kembali integer. Dan sebagaimana yang dinyatakan dalam spec, kami mahu return-- Pergi untuk itu seorang lelaki, hanya menyimpan berterusan. Itu semua baik. Makan semua jadi saya tidak mempunyai untuk mengambil kembali, sebenarnya. Int itu hanya menunjukkan bahawa anda berada akan kembali integer. Apa yang bintang ini s char? Apa maksudnya? PENONTON: Seperti, apa yang menjadi input dalam. PROFESOR: Tepat sekali. Dan apa yang hampir perkara yang sama seperti char bintang? PENONTON: String? PROFESOR: Tepat sekali. Jadi semua yang kita lakukan adalah memberi ini penunjuk kepada rentetan. OKAY. Sejuk. Juga, jangan lupa, jika kita lupa untuk memberikan anda kurungan ini, jangan lupa untuk menulis mereka sendiri. Kerana secara teori, kod anda adalah tidak betul jika anda terlupa untuk menulis mereka. Hanya sentiasa memberi perhatian. Seperti, perkara-perkara kecil bahawa anda tidak notis apabila anda pengaturcaraan pada laptop anda, kerana komputer riba anda tidak untuk anda? Jangan lupa apabila anda menulis dengan tangan. Ya? PENONTON: Tetapi bagaimana tidak betul? Seperti, kita mendapat keseluruhan masalah yang salah? PROFESOR: Tidak, tidak. Jangan bimbang. Ia sebenarnya secara teori mungkin untuk anda untuk mendapatkan mata penuh mengenai sesuatu persoalan walaupun kod anda akan pernah menjalankan dalam kehidupan sebenar. Saya cadangkan anda jangan cuba untuk membuat yang berlaku. Sebagai contoh, seperti jika segala-galanya itulah di sini adalah betul, tetapi anda terlupa kolon atau kurungan, kod anda tidak akan benar-benar berjalan. Tetapi kita mungkin mengasihani. Ya? PENONTON: Adakah anda perlu mengulas mengenai tulisan tangan kita? PROFESOR: Tidak, tidak, tidak kebimbangan tentang itu. Tiada mengulas. Gaya perlu baik. Seperti, tidak Smush segala-galanya di satu baris. Kami tidak akan gembira dengan anda jika anda berbuat demikian. Adakah sesiapa yang mahu memberi saya baris pertama? Tanda-tanda, ia sangat mudah. Ya? PENONTON: Int, n sama dengan sifar. Hanya sediakan kaunter. PROFESOR: Oleh itu, kita mahu beberapa jenis kaunter, bukan? Saya hanya akan menamakan ia "mengira" demi kebolehbacaan. Apa yang kita mahu untuk menetapkan ia sama dengan? PENONTON: Zero. PROFESOR: Ya. Koma bertitik. Ia juga koma bertitik lukisan yang sangat pelik. Hanya berlatih melakukannya. Oleh itu, kita mahu terlebih dahulu kaunter jenis int. Kerana kita mahu menghitung bagaimana banyak aksara atau huruf dalam rentetan ini, bukan? Langkah pertama yang sangat mudah. OK, mungkin sedikit lebih kompleks sekarang, bagaimana kita akan berbuat demikian? Adakah sesiapa yang mahu memberi saya baris kod yang mungkin dapat membantu gelung melalui apa ini? Ya, jiwa yang berani di belakang? PENONTON: OK, jadi sementara titik tanda bintang, yang yeah, bintang s, tidak sama dengan sifar, maka melakukan sesuatu? PROFESOR: Itu benar-benar, benar-benar rapat. Benar-benar rapat. Jadi saya akan untuk menangani dua perkara dengan itu. Pertama sekali, ia tidak betul-betul sifar. Apakah ia? Ia terminator null, yang merupakan garis sendeng terbalik sifar. Jadi mereka yang berbeza dalam segi bagaimana ia disimpan. Jadi, anda benar-benar rapat. Dan kedua, kita tidak mahu untuk hanya bergerak penunjuk. Kami mahu sebenarnya mengakses nilai, bukan? Dan jadi bagaimana kita berbuat demikian? Sangat mudah. Jangan berfikir tentang petunjuk, tidak berfikir tentang kenangan. Kembali ke minggu dua daripada kursus ini. PENONTON: [didengar]. PROFESOR: Sehingga, ingat? Apakah rentetan? Bagaimana mereka disimpan dalam ingatan? PENONTON: Mereka yang dibangkitkan. PROFESOR: mereka dibangkitkan. Jadi bagaimana kita mengakses setiap watak di dalam? PENONTON: [didengar]. PROFESOR: Tepat sekali. Jadi while-- apa yang berlaku di dalam sini? S dari - PENONTON: I. PROFESOR: Oh, saya tidak wujud, adakah ia? PENONTON: Oh, mengira? PROFESOR: Kita boleh hanya menggunakan kiraan, tidak boleh kita? PENONTON: Maaf, saya memanggilnya i. PROFESOR: Ya, itu semua baik. Kami mempunyai pembolehubah di sini itulah telah diisytiharkan sebagai kaunter. Jadi mengapa tidak kita hanya menggunakan bahawa untuk bergerak melalui gelung sementara? Adakah ini masuk akal? Oleh itu, sambil sebanyak count-- adakah sesiapa yang mahu untuk memberi saya apa yang berlaku selepas di sini? PENONTON: Ia tidak sama. PROFESOR: Adakah tidak sama, bukan? Ia bang sama, tanda seru sama, apa sahaja yang anda lelaki mahu memanggil ia tidak equal-- PENONTON: [didengar]. PROFESOR: Ya. Ingat petikan tunggal adalah untuk char, tanda petik adalah untuk rentetan. Berhati-hati apabila menggunakannya. Oleh itu, apabila kita melihat melalui array, aksara terakhir, kita tahu kita tidak mahu ia menjadi garis sendeng terbalik sifar. Oleh itu, sambil. Kami tidak pada akhir tali. Apa yang kami mahu lakukan di dalam? PENONTON: Kami mahu menambah kaunter supaya ia dikira plus plus? PROFESOR: Tepat sekali. Jadi di sini kita akan lakukan mengira, mengira plus plus. Hilang satu baris lagi. Kita sudah hampir. Apa yang kita lupa untuk lakukan? PENONTON: Kembali sifar? PROFESOR: Anda mahu kembali sifar? PENONTON: Tiada, kembali ke strlen. Menunggu. PROFESOR: Yang disimpan di dalam? PENONTON: Pengiraan. Mengira. PROFESOR: Tepat sekali. Jadi di sini kita akan kembali kiraan. Kerana apa yang kita buat di sini ultimately-- kita mempunyai pembolehubah kaunter itu akan kenaikan melalui rentetan kami. Kami akan terus pergi, menjaga pergi, di sekeliling dan sekitar dalam gelung ini. Dan ketika kita tidak berada di akhir ini tali, yang terminator nol. Dan setiap kali kita melalui itu, kami menambah ke kaunter kami. Dan kita akan terus bersama-sama dalam pelbagai ini. Dan pada akhirnya, apabila kita memukul terminator nol, yang kita tahu, oh, kita boleh memecahkan, kembali kiraan. Kami mempunyai strlen kami. Adakah semua orang mendapatkan bagaimana ini telah dilaksanakan? Walaupun loops-- Saya tahu bahawa kita tidak mempunyai dilakukan terlalu banyak dengan mereka, tetapi ia biasanya sangat, sangat berguna jika anda tidak tahu apa yang anda berhenti keadaan semestinya mempunyai untuk menjadi. Soalan? PENONTON: Bolehkah kita menulis null dengan syarat sementara? PROFESOR: Semasa? Ya, jadi dalam masalah ini saya mempunyai anda lelaki menganggap bahawa s tidak akan null. Kerana ingat, secara teori, jika aku telah memberi penunjuk yang terlalu besar memori, ia akan memberikan anda batal, bukan? Itulah yang operasi sistem akan lakukan. Jadi, jika saya tidak memberitahu anda untuk mengambil alih s akan menjadi batal, anda perlu menyemak. Jadi di sini, anda akan lakukan, jika s sama sama null, kembali satu. Sesuatu seperti itu. PENONTON: [didengar] sifar. PROFESOR: OK, saya akan memberitahu anda mengapa kita tidak boleh berbuat demikian. Kerana ingat dalam ingatan, betul, di sini. Kami akan pergi di sini. Anda telah mendapat blok gergasi memori semua dengan grid bahawa kedai nilai yang berbeza, bukan? Dan supaya semua rentetan is-- untuk Sebagai contoh, jika kita ingin input hello, ia akan menjadi H-E-L-L-O garis miring sifar, bukan? Dan kemudian siapa tahu, seperti rawak yang terjadi di sini selepas itu. Kami tidak benar-benar tahu apa yang ada. Dan jadi jika anda melakukannya bukannya garis sendeng terbalik sifar, null, ia mungkin tidak null. Kerana ia hanya boleh bermakna beberapa perkara lain secara rawak yang tidak tergolong dalam rentetan anda. Dan sebagainya cara yang kita sentiasa tahu bahawa rentetan berakhir adalah dengan garis sendeng terbalik sifar. Dan sebagainya yang sentiasa bagaimana kita semak untuk melihat akhir rentetan. Null, segala cara yang jika anda mempunyai penunjuk tidak wujud, pertama sekali, atau jika ingatan anda hanya begitu besar yang anda tidak boleh kembali, maka ia akan menjadi null. Jadi berhati-hati apabila membezakan perbezaan antara null dan garis sendeng terbalik sifar. Yeah. Semua orang OK dengan ini? OKAY. Jadi saya terpaksa kamu menulis strlen. Layak di kami juga boleh meminta anda menulis daripada A kepada saya, ingat bahawa "Atwoa" atau apa sahaja yang anda lelaki mahu memanggilnya? Bahawa fungsi dalam Vigenere dan Caesar, yang menukarkan nilai Ascii kepada integer? Yang juga telah datang pada masa lalu kuiz fungsi kami telah meminta anda untuk menulis. Cukup banyak apa-apa fungsi yang anda telah digunakan dan adalah sangat mudah untuk menulis sendiri, sensor suka lebih rendah, adalah atas, yang lebih rendah, yang atas. Fungsi-fungsi yang akan menukar rentetan daripada huruf kecil kepada huruf besar. Kita semua tahu bagaimana untuk melakukannya, bukan? Ia agak mudah. Hanya ingin memastikan bahawa anda can-- ia adalah satu proses pemikiran yang sama. Anda hanya melelar melalui dan anda menghidupkan sesuatu. Samada anda mengira atau apabila anda menghidupkan sesuatu yang berbeza. Saya akan suggest-- Saya tidak tahu sama ada kita akan untuk meminta anda untuk menghafal apa modal A atau Z modal, atau huruf kecil atau huruf kecil A z berada dalam Ascii, tetapi saya akan mencadangkan mungkin menulis yang turun dalam kes kami buat. Hanya supaya anda semua mempunyai rujukan. Seperti huruf besar A adalah, apa, 197? Dan kemudian huruf kecil seperti 50 sesuatu. 65, ya, di sana anda pergi. Jadi hanya cukup banyak mengetahui Perbezaan di antara mereka 32. Itu cukup penting. Yeah. Am I baik mengenai perkara ini? OKAY. PENONTON: Kita boleh secara teori menulis beberapa ini turun dan juga di little-- kami PROFESOR: Anda secara teori hanya boleh menyalin fungsi ke bawah. Itu betul. PENONTON: Tidak [didengar]. PROFESOR: Anda lelaki itu mempunyai sheet. Kalian mempunyai lembaran nota. Anda boleh menaipnya. Anda boleh menulis. Anda boleh melakukan apa sahaja yang anda mahu dengan ia. Yeah. Jadi secara teori, jika anda mahu, pergi untuk. PENONTON: [didengar] tetapi kita tidak benar-benar semestinya perlu ingat nilai, kita boleh hanya menggunakan ke atas atau ke fungsi yang lebih rendah, bukan? PROFESOR: Ya. Tetapi jika kita memberikan satu soalan yang mengatakan menulis kepada atas, maka anda perlu menulisnya. Jadi, anda semua boleh menganggap bahawa anda lelaki itu mempunyai akses kepada semua fungsi, tetapi jika anda mahu gunakan untuk atas atau ke yang lebih rendah, apa yang anda juga perlu lakukan? PENONTON: [didengar] menggunakan CS50 [didengar] PROFESOR: Adakah CS50.h? Berhati-hati di sana. Jadi untuk atas, yang lebih rendah, adalah atas, adalah lebih rendah, fungsi yang melibatkan manipulasi rentetan adalah semua dalam memuat Ascii yang atau dalam perpustakaan matematik atau dalam perpustakaan tali. Jadi, jika anda seorang lelaki menggunakan orang-orang fungsi, berhati-hati untuk ingat untuk memasukkan kepala yang. Jadi mungkin juga sesuatu yang anda mahu termasuk dalam kunci anda, apakah tajuk? Apakah perpustakaan anda telah gunakan? Apa fungsi adalah dalam perpustakaan tersebut? Adalah penting. Ya? PENONTON: Bolehkah kita hanya polis keluar dan melakukan hashtag melalui sama sekali setiap surat kami telah pernah dilihat seperti pada semua soalan? PROFESOR: Anda boleh. Saya tidak tahu bagaimana gembira kita akan adalah untuk gred kuiz yang apabila setiap sekeping kod adalah dua kali lebih lama kerana ia perlu. Saya tidak tahu, kita mungkin mengambil kira mata untuk gaya. Tetapi secara teori anda kod adalah betul. Kalian boleh menolak tugas-tugas dan hanya termasuk segala-galanya. Itu baik juga, ya. PENONTON: [didengar]. PROFESOR: Ya. Saya cadangkan tidak berbuat demikian walaupun. Yeah. PENONTON: Cool. PROFESOR: Soalan yang baik. PENONTON: Jadi, kes yang teruk. PROFESOR: Kes paling teruk. Jika anda benar-benar lupa, anda boleh berbuat demikian. Yeah. Ya, kod adalah di sana. Saya pernah n bukannya kiraan tetapi, anda tahu, apa sahaja yang terapung bot anda. PENONTON: Tunggu, jadi kami tidak perlu hashtag termasuk kerana kami bermula dari int? PROFESOR: Ya, saya hanya menganggap bahawa kami diminta untuk menulis fungsi. Jika anda mahu selamat, anda mungkin boleh meletakkannya di sana. Tetapi saya tidak mengganggu, ya. Saya tidak tahu jika anda perlu mana-mana perpustakaan untuk ini. Kerana anda tidak benar-benar percetakan daripada apa-apa atau apa-apa, kan? Ya, saya tidak tahu sama ada anda perlu perpustakaan. OKAY. Ini juga sedikit lebih bersama-sama garis manipulasi ingatan. Ini jenis sedikit rumit. Fikirkan tentang perkara ini. Anda mempunyai fungsi yang dipanggil func. Saya boleh menamakannya apa sahaja, tetapi saya memilih untuk nama itu func. Saya ada di atas utama saya. Ingat, anda ingin mempunyai fungsi selepas utama anda, anda ingin memastikan anda termasuk prototaip atas. Tetapi dalam kes ini ia begitu pendek yang saya rasa yang saya boleh hanya memasukkannya di puncak utama. Saya tidak perlu mempunyai prototaip, kerana ia telah ditulis di atas. Jadi semua yang saya lakukan dalam fungsi utama saya mewujudkan integer x sama 10. Saya memanggil fungsi func saya, dan kemudian mencetak sesuatu. Dan kemudian yang sebenarnya apa func lakukan. Kalian mahu berfikir melalui ini. Kerana ia agak rumit. Ia amat, sangat rumit, sebenarnya. Berfikir melalui apa ini program akan Outputting. Saya akan memberikan anda semua dua minit. Perbincangan yang baik? PENONTON: Ya. PROFESOR: Ya. Baiklah, jadi ini adalah sukar untuk sebab. Dan ini adalah mengapa saya mahu membawa ini kepada perhatian semua orang. Adakah sesiapa yang mahu memberikan saya cadangan, cuba? Apa yang akan mencetak? Benar-benar baik jika anda salah. Ya? PENONTON: Saya fikir ia adalah 100 dan kemudian 10 pada dua baris yang berbeza. PROFESOR: Dan 10? Adakah sesiapa yang mempunyai apa-apa tekaan yang lain? Ya? PENONTON: Mungkin hanya 10 kerana func tidak kembali apa-apa? PROFESOR: OK, jadi kami mempunyai nombor meneka satu adalah bahawa jumlah tekaan dua adalah hanya akan mencetak 10. Adakah sesiapa yang mempunyai apa-apa tekaan yang lain? OKAY. Jadi mari kita berjalan melalui ini, bukan? Setiap kali anda mendapatkan sekeping kod, jangan hanya melihat dan menjadi seperti, ah, itu barangan begitu banyak! Saya jadi keliru! Seperti, menenangkan diri anda ke bawah. Hanya tahu bahawa anda boleh hanya melihat melalui garis kod demi baris. Itu sahaja yang ia adalah. Ia seperti membaca buku. Jadi dengan apa-apa fungsi, kita sentiasa bermula utama. Oleh itu, kita akan bermula dari sah utama int, walaupun program ini sudah lari ke bawah, bukan? Mula di dalam kekosongan utama. Int x sama 10. Jadi saya akan untuk memadam ini. Saya akan menarik memori hanya supaya anda lelaki jenis boleh melihat apa yang berlaku. Ingat turun di sini kita mempunyai timbunan kami? Di sini kami ada kami ditimbunkannya di suatu tempat di sini. Stack membesar, bukan? Dan dalam timbunan, anda perlu sesalur berfungsi serta semua pembolehubah tempatan kuasa. Jadi di sini, int x sama dengan 10. Dalam fungsi utama kami kami mewujudkan pembolehubah yang dipanggil x. Kami menetapkan yang sama dengan 10. Di sini anda telah mendapat beberapa x, dan anda menetapkan yang sama dengan 10, ke kanan, dalam utama. Semua orang yang baik? Fungsi. Oleh sebab itu, dalam utama kami fungsi, kami memanggil majlis itu kami telah menulis di atas. Oleh itu, kita sedang memasukkan fungsi kedua. Kami akan mewujudkan satu lagi pembolehubah int x sama 100. Apa yang berlaku di sini pada tindanan? Apa yang berlaku apabila anda memanggil fungsi yang mencipta pembolehubah baru? Apa yang berlaku di sini pada tindanan? PENONTON: [didengar] timbunan di atas? PROFESOR: Ya. Jadi ia sebenarnya mewujudkan satu salinan. Serta berbuat baik ia cerucuk di atas. Fikirkan stack-- timbunan buku, timbunan apa-apa. Buasir di atas, pertama di lepas keluar, bertahan, keluar dahulu. Jadi ia akan mewujudkan x di sini. Yang akan mempunyai semua pembolehubah funcs. Yang besar. Jadi sekarang kita mempunyai dua x yang berbeza ini yang mewakili dua perkara yang sangat berbeza. Kemudian kami akan mencetak keluar integer x. Jadi mari kita mencetak 100, bukan? Kerana di sini ia adalah 100. Jadi itulah perkara pertama bahawa ia akan mencetak. Oleh kerana ini apa-apa pulangan fungsi, sekarang bahawa fungsi, bahawa garis di utama dilakukan. Semua orang baik dengan saya setakat ini? Jadi kita sekarang melalui dua daripada tiga barisan fungsi utama kami. Sekarang kita akan ke baris ketiga. Kami akan printf. Apa yang x ini dalam utama? Apa yang mewakili? Apa nilai x sekarang? PENONTON: 100. PROFESOR: Ia 100? PENONTON: Masih 10. PROFESOR: Still 10. Yeah. Kerana ingat, dalam func kita, x sama 100. Tetapi jika kita kembali fungsi utama kami, pembolehubah yang disimpan di dalam tempat yang berbeza pada timbunan kami. Jadi sekarang kita perlu kembali kepada timbunan utama, sesalur pembolehubah tempatan. Dan di sini x sama dengan 10. Dan sebagainya kita akan mencetak 10. Jadi dia benar-benar betul. Kita akan mempunyai output 100 dan 10. Ya? PENONTON: Apabila anda malloc, adakah ia longgokan atau timbunan yang [didengar]? PROFESOR: Apabila anda malloc, anda mengambil ingatan dari timbunan itu dan memperuntukkan ia. Supaya anda tidak perlu kucar-kacir dengan mana-mana ini. Jadi saya rasa bawa pulang yang lebih besar di sini ialah sesuatu yang dinamakan skop. Bagi anda yang berada di sesi kajian malam tadi, kita bercakap secara ringkas tentang perkara ini. Skop mentakrifkan bagaimana dan apabila pembolehubah anda wujud. Atau dalam apa bingkai melakukan pembolehubah anda wujud. Cukup banyak amalan biasa secara amnya adalah, variables-- anda jika anda membuat mereka dalam braces-- kerinting wujud hanya di dalam orang-orang pendakap kerinting. Jadi, sebagai contoh dalam fungsi kami func, anda lihat kedua-dua penyokong gigi. Jika anda membuat apa-apa yang di dalamnya, kemungkinan semua yang anda lakukan adalah mewujudkan timbunan dan menyimpan bahawa terdapat. Perkara yang sama dalam utama. Itu hanya disimpan dalam utama. Juga anda mahu sangat, sangat berhati-hati di sini. Kerana skop juga meminjamkan dirinya kepada contoh-contoh yang berbeza. Jadi, sebagai contoh untuk gelung, untuk int i sama dengan 0. Saya adalah kurang daripada, saya tidak tahu, 10. Saya plus plus. Dan anda telah mendapat kod di dalamnya, bukan? Di manakah pembolehubah ini, i, sebenarnya hanya wujud? Hanya bahagian dalam untuk anda gelung. Jadi saya pasti ramai daripada anda semua mempunyai mungkin menghadapi masalah ini apabila yang anda lakukan program psets anda. Berapa ramai daripada anda semua telah cuba menggunakan i luar untuk gelung dan mempunyai kesilapan? Seperti bilangan bulat mempunyai rujukan atau sesuatu seperti itu? Sebab mengapa ini berlaku adalah kerana di sini anda mewujudkan sesuatu yang hanya wujud dalam untuk anda gelung. Dan jika anda cuba untuk menggunakannya, i tidak benar-benar wujud di luarnya. Jadi, pada asasnya komputer berkata, 'Saya tidak tahu apa yang anda bercakap tentang. Apa yang saya tahu bahawa saya adalah di sini, tetapi sekarang tidak lagi. Jadi jika saya membuat untuk gelung dalam, bukan? Dan saya akan mewujudkan satu lagi, seperti int j, dan ia melakukan apa sahaja. Dan anda mempunyai kod di dalam gelung itu, j hanya wujud di sini. Tetapi itu juga wujud di dalam i. Dan sebagainya j hanya wujud dalam tempoh ini untuk gelung, manakala i wujud dalam segala-galanya. Semua orang jelas? Perkara yang sama dengan kenyataan bersyarat jika anda ingin membuat apa-apa. Perkara yang sama dengan gelung manakala jika anda ingin membuat apa-apa. Itulah sesuatu yang boleh sangat, sangat berhati-hati. Jadi ini adalah satu masalah yang benar-benar baik dalam merasakan bahawa ia menunjukkan dua perkara. Ia menunjukkan pertama, skop. Dan ia menunjukkan juga peruntukan ingatan. Kerana anda semua perlu tahu bahawa fungsi tumbuh ke atas dalam timbunan. Dan apabila kamu menyeru fungsi, anda mewujudkan dasarnya timbunan baru memori. Yang sangat berbeza daripada apa memori utama anda. Yeah. Huh! Semua orang OK pada itu? Itu adalah mengelirukan. Topik yang sangat baik untuk pergi ke atas, kerana anda mungkin akan mendapatkan beberapa rumit perkara seperti itu pada kuiz. Yeah. Sejuk. Saya akan meletakkan anda mendapat 100 pada satu garis dan kemudian 10 di pihak yang lain. Yeah, sangat baik. OK, sekarang anda semua akan mendapat peluang untuk menjadi TA. Anda dapat menjawab semua indah e-mel yang kadang-kadang saya dapat. Jadi, Dear Andi, saya lihat Saya berfikir sesuatu yang yang salah dengan pengkompil saya. Saya pasti bahawa kod saya adalah betul, tetapi saya terus mendapat kesalahan segmentasi setiap kali saya berjalan. Apa yang berlaku? Sila membantu, kasih sayang. Jika anda semua mendapat sesuatu seperti bahawa bagaimana anda akan bertindak balas? Ini adalah sebenarnya perkara biasa soalan kami akan bertanya kepada anda. Adalah jika, kami akan memberikan anda satu senario, kami akan memberikan kami tekaan terbaik anda apa yang sedang berlaku. Sesiapa yang mempunyai menikam apa yang berlaku? Ya? PENONTON: Mungkin dereferenced yang null, sesuatu seperti penunjuk menunjuk pada sesuatu null. PROFESOR: Ya, itu akan menjadi satu contoh apabila yang akan berlaku. Tetapi apa yang gambar yang lebih besar apa yang berlaku di sini? PENONTON: Adakah anda cuba untuk mengakses memori yang anda tidak sepatutnya mempunyai akses kepada? PROFESOR: Tepat sekali. Jadi berfikir kesalahan seg, di luar yang had, kawasan terhad dalam ingatan bahawa anda tidak perlu menyentuh. Jadi cukup banyak apabila anda cuba untuk index-- seperti contohnya, anda telah mengisytiharkan array dari sifar hingga sembilan. Tetapi anda cuba untuk menyentuh ke-10 yang nilai, anda tidak mempunyai akses kepada itu. Kerana anda tidak diisytiharkan. Dan supaya komputer anda akan melihat bahawa menjadi seperti, uh oh, anda cuba untuk pergi di luar batas-batas indeks. Saya akan memberikan anda kesalahan segmentasi. Fikirkan sebagai segmen, bukan? Segmen tambahan, kesalahan adalah apabila anda cuba untuk melanggar sesuatu dan anda tidak perlu berada di sana. Segmentasi kesalahan adalah bila-bila masa anda cuba untuk menyentuh perkara-perkara bahawa anda tidak perlu menyentuh. Contoh Jadi biasa ialah indeks. Sudah tentu, jika anda cuba menyentuh bahawa adalah tidak sah, yang juga akan berfungsi dengan baik. Jika penunjuk anda cuba menyentuh perkara-perkara yang tidak boleh disentuh, yang juga boleh berfungsi dengan baik. Kebanyakan biasanya anda akan melihat ini dalam array. Semua orang yang baik? PENONTON: Jadi, jika anda mahu untuk mengakses titik-10 dan hanya ada had sembilan atau sesuatu. PROFESOR: Ya, betul-betul. Agak banyak. Sejuk. Dear Andi. Jadi kita telah mendapat ini indah perkara yang dipanggil macam. Jika Gabung sort-- seperti yang kita saw dalam contoh apabila Oleh Daud, seluruh perkara dalam class-- mengapa, jika ia lebih cepat daripada mana-mana jenis lain, mengapa kita peduli mengetahui mana-mana jenis lain? Apakah soalan ini benar-benar meminta anda? Apakah tiga word-- yang PENONTON: Apakah yang dimaksudkan dengan keseimbangan? PROFESOR: Tepat sekali. Itulah apa soalan bertanyakan. Apakah yang dimaksudkan dengan keseimbangan antara Bergabung apapun ayat apa-apa jenis lain? PENONTON: Mengambil ingatan, bukan? PROFESOR: Adakah anda menjelaskan bahawa sedikit lebih? Pertama mari kita menjelaskan kedai Merge. Bagaimanakah Gabung jenis berfungsi? PENONTON: Jadi ia berfungsi dengan membahagikan segala-galanya ke separuh dan kemudian meletakkan bersama-sama dan pembahagian semula dalam keadaan baik, seperti setiap kali anda menggabungkan set. PROFESOR: Pretty banyak. Jadi saya boleh menarik ini, tetapi ia akan membawa saya lima minit untuk menarik keluar. Melihat kembali kepada slaid seksyen di mana kami meliputi jenis Merge. Tepat sekali. Jadi cara Gabung kerja semacam adalah ia membahagikan perkara pada separuh, dan kemudian ia hanya melihat kepada Nilai pertama sekali daripada mereka dan macam itu sahaja. Secara berterusan mewujudkan barisan baru dan meletakkan perkara yang lebih dan lebih teratur. Dan jadi sementara itu benar-benar, benar-benar cepat kerana it's-- yang anda tahu, carian binari adalah n log n. Anda mencipta banyak array berbeza yang anda berada menggunakan sejumlah besar memori. Dan supaya semasa ia adalah lebih cepat, perdagangan luar di sini adalah bahawa anda menggunakan lebih banyak memori. Dan sebagainya, tanda-tanda, macam dan carian ditutup lebih banyak tahun ini daripada mereka telah dalam tahun-tahun sebelumnya. Kalian harus melihat bahawa diambilkira dalam kuiz. Saya pasti akan menghabiskan masa akan atas apa yang semua jenis yang berbeza adalah, carian bagaimana binari, bagaimana linear kerja carian. Bagaimana mungkin pseudokod kod mereka keluar. Apakah kali berjalan? Sesuatu seperti berjalan kali adalah sangat mudah untuk tulis atas lembaran nota, bukan? Ia benar-benar sukar apabila anda berada di tengah-tengah ujian dan anda perlu memikirkan yang keluar. Salin ke bawah. Saya jamin anda anda akan perlu tahu bahawa. Apakah keseimbangan? Kes paling teruk, senario kes terbaik untuk mereka semua, sangat mengenali. Ya? PENONTON: Adakah kita perlu tahu bagaimana untuk kod jenis Merge? Seperti, kita perlu ingat rekursif tersebut? PROFESOR: Saya sangat ragu-ragu, hanya kerana ia seperti agak rumit. Tetapi ia mungkin tidak infeasible jika kita meminta anda untuk menggunakan kod pseudo keluar. Yeah. Yep, OK, satu lagi. Ini mungkin datang dalam anda sekeping terakhir dalam sedikit. Ya? Adakah semua orang mendengar bahawa? OK, jadi cukup banyak pertama semua, jenis program apa akan memberikan anda output seperti ini? Ingat kita meminta anda untuk belajar tentang jenis ini baru alat debugging? Apakah nama itu? Valgrind, hak Ia adalah program di mana anda boleh memanggil yang boleh mengesan semua memori anda menggunakan dalam program anda dan yang berlaku. Jadi jika anda telah mendapat sesuatu, seperti, pasti hilang, 40 bait dalam satu blok. Mungkin anda tidak mengingat untuk membebaskan. Kerana jika anda menggunakan bait ingatan, ini bermakna anda telah diakses memori, tetapi kamu tidak dapat membebaskan. Jadi, anda ingin memastikan bahawa anda juga menggunakan free-- itu adalah satu function-- untuk membebaskan semua memori yang diperuntukkan semula oleh malloc. Sejuk. Jadi slaid ini, saya akan mempunyai ia sehingga. Ia adalah di mana-mana dalam banyak ceramah, dalam banyak bahagian slaid. Anda benar-benar ingin memastikan anda hanya tahu semua ini. Sama ada dalam lembaran komen anda atau jika anda ingin menghafalnya, berasa bebas untuk. Itu benar-benar, benar-benar, benar-benar penting. Juga yang sangat baik soalan yang kita boleh meminta. Mengapa rupa Pemilihan sort-- di Pemilihan sort-- semua runtimes adalah n kuasa dua. Tidak kira berapa senarai datang kepada anda sebagai, jadi mengapa Pemilihan sort-- Saya akan memberikan anda semua 30 kedua berfikir tentang perkara ini. Oleh kerana ia adalah jenis mengelirukan. Ia melibatkan beberapa pemikiran konseptual. Mengapa masa larian akan sama dalam kedua-dua senario kes terburuk dan terbaik? Ya? PENONTON: Kerana Pemilihan jenis setiap kedudukan atau ruang dalam pelbagai kecil ini benda atau apa sahaja. Jadi, walaupun dalam kes senario yang terbaik, walaupun ia sempurna disusun, ia masih akan menjadi seperti, OK, satu. Di tempat pertama saya, saya mempunyai satu. Dan pergi melalui semua daripada mereka. OK, satu adalah yang paling kecil. Kemudian ia pergi lagi dan adalah seperti, OK, dua yang paling kecil dari semua perkara. Tetapi ia masih perlu memeriksa setiap dan tiap-tiap satu. PROFESOR: Ya. Sebagai contoh, mari kita hanya mengatakan kami senarai, sudah disusun, pelbagai 04:59. Cara yang macam Pemilihan adalah bahawa ia akan melalui, ia memeriksa kedua-dua. Kemudian ia memeriksa kedua-dua. Dan kemudian ia memeriksa, dan ia memeriksa. Ia terus memeriksa semua daripada mereka, tidak kira sama ada atau tidak ia sebenarnya disusun. Kerana itulah hanya cara jenis ini berfungsi. Dan supaya soalan ini adalah jenis seperti soalan konsep kami akan meminta. Di mana pertama, anda tahu apa Pemilihan jenis adalah, betul, dapat untuk menjawab soalan. Anda perlu dapat memahami dari segi konsep apa yang sedang berlaku. Dan kemudian anda boleh memohon dan berfikir, OK mari kita bayangkan senario paling buruk. Mereka semua dalam tertib menurun. Bagaimana yang akan mempengaruhinya? Bagaimana jika ia menaik perintah? Jika ia sudah disusun? Bagaimana yang akan mempengaruhi runtimes? Dan kemudian semacam Pemilihan, anda akan notis bahawa ia tidak benar-benar perkara itu. Kerana anda memeriksa semua nilai-nilai tidak kira apa yang berlaku. Dan sebagainya yang baik-baik ingat. Mengapa sesetengah jenis berbeza daripada orang lain dan cara terbaik dan senario kes terburuk akan memberi kesan kepada mereka semua. Saya akan benar-benar memukul dalam pelbagai kerana yang akan dalam kuiz. Yeah. OKAY. Ada enam minit. Saya boleh mengambil masa tiga minit soalan. Saya juga boleh berkeliaran untuk seperti 20 minit selepas seksyen jika anda ingin bertanya soalan juga. Adakah sesiapa yang benar-benar hanya perlu ringkas soalan atau isu-isu konsep mereka tidak jelas tentang sekarang? Ya? PENONTON: Bolehkah anda bercakap sedikit sedikit tentang pengendali Bitwise? PROFESOR: Ya. Pengendali Jadi bitwise adalah sesuatu yang anda mungkin hanya mungkin mahu meletakkan dalam kunci anda. Jadi quickly-- Saya tidak mahu pergi terlalu jauh lebih mendalam kerana Harvard, dalam kajian mereka sesi, menutupinya dengan baik. Pengendali Bitwise, ada lima daripada mereka, bukan? Ada ini, yang x atau fungsi, ada Ampersand, iaitu dan. Paip, yang adalah atau yang. Dan kemudian anda perlu kedua-dua jenis syif. Dan apabila aku memberi dua nilai, jika Aku memberi, seperti, satu dan satu. Apa yang akan menilai kepada? Dan apabila aku memberi benar dan benar, benar? Bagaimana pula dengan benar atau salah? Masih benar, bukan? Kerana ada atau. Kita kemungkinan besar akan memberikan anda nombor. Jadi ingat, satu sama benar, sifar sama palsu. Dan kita boleh memberikan anda perkara-perkara ini dan meminta anda untuk memberitahu kita apa yang berlaku. Harvard meliputi dalam tempoh pertama 10 minit sesi pengajian benar-benar, benar-benar baik. Jadi anda semua ingin pasti anda melihat kembali pada itu. PENONTON: Adakah pisa5 akan berada di kuiz? PROFESOR: No. Bahkan tidak melihat pisa5 sekarang. Ia sukar. Hanya tidak peduli melihat pisa5. Walau bagaimanapun, seperti beberapa petunjuk dan cadangan, saya cadangkan anda mula pisa5 secepat kuiz berakhir. Ini akan menjadi yang paling sukar minggu, tetapi kemudian kamu semua akan menyampaikannya di atas bukit hijau dan anak anjing bergolek, dan ia adalah baik. Kelas ini mendapat ketara lebih mudah selepas pset kelima. Waktu pejabat: PENONTON di Ahad, Isnin? PROFESOR: Ya, jadi waktu pejabat akan hari Ahad hingga Isnin untuk pset. Waktu pejabat malam ini pada dasarnya hanya akan menjadi ulasan kuiz. Jikalau ada orang yang datang dan bertanya Tas soalan, kami akan berada di sana. Saya akan mengambil mungkin satu lagi soalan sesiapa yang mempunyai soalan? Ya? PENONTON: Apabila anda nod menentukan, [didengar] jika anda mengatakan bintang nod dan kemudian akan datang, tidak komputer secara automatik memahami bahawa anda merujuk kepada penunjuk yang lain? PROFESOR: No. PENONTON: Anda perlu relink ia [didengar]? PROFESOR: Jadi pada dasarnya struct nod seorang, ingat, ia seperti anda membuat nod dan maka anda mempunyai penunjuk yang dipanggil datang. Semua yang anda lakukan adalah mempunyai struktur di sana. Anda perlu menetapkan bahawa penunjuk di suatu tempat. Oleh itu, komputer tidak tahu apa yang ia lakukan lagi. Anda perlu untuk benar-benar sediakan apabila anda mencipta senarai berpaut anda. Dan itulah yang terutamanya pset 5 akan. Jadi tidak ada kebimbangan mengenai apa-apa hak yang sekarang. PENONTON: Oleh itu, kita tidak perlu memberi tumpuan terlalu banyak pada senarai link, hanya konsep umum? PROFESOR: Hanya cukup banyak susunan, beratur, senarai pautan, pokok-pokok, jadual hash. Hanya dapat mengetahui apa yang mereka. Kami tidak akan bertanya anda suka apa-apa yang khusus kerana kita tidak benar-benar melakukan Serangga yang meliputi mana-mana yang belum. Jadi, dalam dua minit terakhir sebelum Saya lepaskan kamu untuk membunuh kuiz ini. Cukup banyak, seperti, berfikir tentang bagaimana jauh anda semua telah datang dalam kelas ini. Saya masih ingat ketika minggu dua kelas ini, sebahagian dari kamu menghabiskan masa tiga jam menulis air. Berapa lama ia akan membawa anda seorang lelaki untuk menulis air sekarang? 30 saat, mungkin? Fikirkan tentang berapa banyak anda semua telah dipelajari. CS adalah satu perkara yang benar-benar, benar-benar keras. Tidak ada keraguan itu. Sukar, sebab itu tidak ada kajian itu. Ia hanya keras. Dan ia benar-benar baik. Dan saya benar-benar bangga kerana semua orang telah membuat sejauh ini. Psets tidak mudah. Mereka mengambil banyak masa. Anda semua, saya tidak akan meminta anda untuk menulis permainan 15 atau Vigenere di pset. Tidak perlu hanya dimarahi tentang itu. Apa yang kami sedang menguji di sini adalah untuk menilai pengetahuan konseptual anda, dan juga sebagai sebahagian daripada kemahiran asas anda pengkodan. Ujian ini direka untuk menjadi benar-benar mencabar. Seperti, ia direka untuk anda untuk tidak mendapat 100. Ia juga direka untuk anda untuk mungkin tidak dapat menyelesaikan dalam 75 minit. Dan itu betul-betul halus. Saya seorang pelajar sendiri. Saya tahu, saya benci apabila saya berjalan daripada kuiz menjadi seperti, najis. Itu adalah benar-benar keras. Mungkin apa yang akan happen-- dan itu benar-benar halus, Saya memberitahu anda semua sekarang. Cara yang pada perkara-perkara tidak tinggi sama sekali. Dan bagi orang-orang yang telah mendapat, seperti, bertiga di set masalah anda, itu tidak bermakna anda berada akan mendapat 60 peratus dalam kelas ini. Jika anda mendapat 60% ke atas kuiz, yang tidak bermakna anda akan mendapatkan D dalam kelas ini. Yang kita lihat, terutamanya saya, untuk Juga dalam bahagian saya, Saya melihat bagaimana keras anda semua sedang berusaha. Dan saya menjejaki itu. Kalian akan halus. Tidak ada memori institusi kebahagiaan pada akhir semester. Oleh kerana semua anak-anak Harvard memberitahu rakan-rakan mereka, oh, anda akan selamat. Tiada siapa yang memberitahu anda semua bahawa di sini. Jadi saya perlu memberitahu anda semua bahawa di sini. Kalian akan halus. Saya amat berbangga dengan anda semua lelaki. Ujian ini akan menjadi sukar. Belajar untuk itu, dan selepas itu hanya membuang ia jauh. Dapatkan bersedia untuk belajar sesuatu yang baru. Dan makan gula-gula. Kami telah mempunyai banyak gula-gula. Dapatkan tidur yang nyenyak. Jangan tidak tidur, kerana yang akan menjadi benar-benar buruk. CS adalah banyak logik. Jika anda tidak tidur, anda tidak boleh berfungsi, dan otak anda tidak dapat berfungsi. Dan saya akan berada di sini sejak 20 yang akan datang minit jika ada orang yang berkeliaran. Kalian akan membunuhnya. Semoga berjaya.