[00:00:00] [MUSIK BERMAIN] [00:00:11] Davin: Baiklah, guys. Jadi, ini adalah kajian semula untuk kuiz yang pertama. Apakah semua orang bersedia untuk kuiz pada hari Rabu? Allison: Woo! PELAJAR: Woo! Davin: Ya. Allison: Ya! Davin: Orang itu siap. Orang itu, dua tangan, yang bagus. Jadi tinjauan kuiz hari ini, ia akan kira-kira satu jam setengah. Kita akan pergi ke semua utama konsep yang perlu anda tahu untuk kuiz. Kami akan pergi ke beberapa coding oleh contoh tangan, yang ada di setiap kuiz. Dan jika anda mempunyai pertanyaan, jangan ragu untuk mengangkat tangan dan segala-galanya anda seperti itu. Nah, logistik tentang kuiz dalam talian. Jadi kita akan berpecah orang ke dalam bilik yang berbeza. Ini didasarkan pada nama mereka. Jadi jika anda mempunyai sebarang soalan mengenai di mana untuk pergi atau tentang apa bahan, seperti, kata rasmi mengenai apa yang berlaku untuk berada di kuis, daftar online. Dan itu semua up to date. Jadi jika tidak ada soalan untuk permulaan, kita akan bermula. Dan inilah Allison. [00:00:56] [Bertepuk tangan] [00:00:57] Allison: OK, terima kasih, Rob. Menghargainya. Davin sepatutnya membalik ke ini. Ini adalah senarai yang lengkap dari topik, seperti biasa, sebagai Davin hanya berkata. Rujuk dokumentasi online tentang kuiz sifar. Tapi ini cukup much-- itu pada silabus adalah segala sesuatu yang kita telah melebihi setakat ini. Semuanya di sini adalah permainan yang adil, dan juga apa-apa lagi yang mungkin telah disebutkan dalam kuliah. [00:01:21] Seksyen saya, di sini, adalah hanya banyak ulasan. Terdapat beberapa latihan yang mungkin kalian akan bekerja pada. Tetapi bagi sebahagian besar, kita benar-benar ingin mendapatkan Davin dengan kod yang dengan latihan tangan. [00:01:31] Oleh itu, saya akan terbang melalui ini. Jika anda mempunyai sebarang soalan, berhenti saya. Angkat tangan anda. Saya berjanji, saya mungkin akan melihat anda. Jika tidak, hanya gelombang di sekitar. Saya akan bercakap cepat. Saya harap semua orang apa-apa dengan itu. [00:01:43] OK, kata khusus, Davin jelas lupa untuk flip melalui slide ini. [Ketawa] Anda berada dalam kesulitan, manusia. Jadi tips untuk kuiz sifar, mengamalkan coding di atas kertas. Kalian akan mendapatkan beberapa berlatih dengan yang sekarang dengan Davin, supaya anda tidak akan benar-benar sendiri. Saya rasa yang kita benar-benar akan melalui kedua-dua fungsi. Jadi, anda akan bersedia di sana. [00:02:04] Biasakan dengan set masalah anda. Ada pertanyaan pada kuiz sebelumnya yang akan meminta anda, sebagai contoh, untuk kode sesuatu yang sangat mirip dengan Mario. Jadi menjadi sangat akrab dengan masalah anda menetapkan, dan juga sebagai soalan kami meminta anda pada mulanya pada borang yang bahawa anda mengisi, akan melayani anda dengan baik. [00:02:20] Lakukan kuiz sebelum ini di bawah kekangan masa. Kuis yang panjang. Waktu berjalan sangat cepat. Dan selalunya, anda tidak menyedari betapa cepat ia pergi sehingga anda benar-benar meletakkan diri di bawah kendala. Jadi jika anda hanya boleh mengukir, anda tahu, 75 minit, sama ada malam ini atau esok mengambil salah satu kuiz di bawah itu, anda akan berada dalam keadaan yang jauh lebih baik. [00:02:41] Dan juga, mencipta lembaran rujukan anda. Ingat, anda akan mendapat satu halaman depan dan belakang sebagai rujukan untuk kuiz anda pada hari Rabu. Membuat yang merupakan cara terbaik untuk belajar. Apa-apa yang anda mengalami masalah dengan yang akan disertakan di sana. Apa-apa yang TF anda telah, seperti, ini adalah benar-benar penting. Anda perlu tahu ini, adalah mungkin perkara yang anda miliki di sana jika anda tidak mempunyai mereka hafal. Walaupun anda tahu mereka benar-benar baik, kadang-kadang diletakkan di atas sana adalah jenis hanya keselesaan untuk anda, yang saya tahu kuiz adalah stres. Jadi apa-apa keselesaan anda mendapatkan boleh membantu. Baiklah, juga, tidur dan makan dan suka hal-hal biasa bahawa kami memberitahu anda untuk kuiz. [00:03:16] Jadi mulai dari mudah, jenis data dan ukuran. Seperti yang saya katakan, ini hanya akan yang akan saya membuang banyak hal di sini yang perlu anda ketahui. Jadi kita mempunyai karakter kami yang merupakan salah satu bait, ints yang empat bait, lama panjang, yang adalah lapan bait. Pada asasnya, ia hanya anda ingin mengadakan bilangan bulat yang lebih besar. Mengapung, yang empat, ganda, yang lapan. Sekali lagi, hanya memberi anda lebih banyak ruang untuk mengapung anda. Kemudian ketik bintang, jadi apa-apa penunjuk pada mesin 32-bit, yang adalah semua yang anda perlukan lelaki tahu, adalah empat bait. [00:03:44] Jadi semua perkara yang anda harus tahu, mungkin perkara anda ingin mempunyai di lembaran rujukan anda. OK, penukaran binari kepada perduaan, penukaran kepada perenambelasan, bolak-balik, semua perkara yang perlu anda tahu. Jadi dari binari ke desimal. Kalian mahu mengambil satu minit cepat dan cuba mencari tahu masing-masing dan kemudian memberitahu saya apa yang mereka? [00:04:06] Saya juga mempunyai gula-gula di dalam beg saya, jadi sesiapa yang menjawab mendapat gula-gula, dengan cara itu. Dan saya mempunyai banyak itu. Biar saya ambil ini. Saya akan memberikan ini kepada Gabe. Jadi, anda boleh membahagikan gula-gula kepada siapa pun yang bagus dan koperasi. [00:04:21] OK, saya melihat tangan yang ada di belakang. [00:04:26] PELAJAR: Ya, yang pertama adalah 42. [00:04:28] Allison: Ya, pertama adalah 42, yang benar. PELAJAR: [didengar]. [Ketawa] Allison: satu Kedua, sana kembali dengan warna kuning? PELAJAR: 110010. Allison: Benar, dan ini yang terakhir, di sini di bahagian bawah? Juga, ya, anda tahu mahu? Hanya membuang gula-gula. Bagaimana pula dengan gula-gula untuk semua orang? [00:04:46] PELAJAR: [didengar] apabila kami sudah selesai. [00:04:47] Allison: Shh. Dan kemudian yang terakhir. Siapa yang mahu menjawab? Di sana. [00:04:52] PELAJAR: 11100. [00:04:54] Allison: 11100, lihat itu. Selamat, pekerjaan yang besar, semua orang. OK, semua orang jenis memahami proses untuk melakukan hal ini? Anda telah, pergi dari binari ke desimal cara saya cenderung untuk melakukannya, yang menulis kuasa 2. Jadi saya katakan, OK, 0 kali 2 ke 0, sehingga itu 0, 1 kali 2 dengan yang pertama, adalah 2 dan seterusnya akan seperti itu. Apakah ada yang ingin aku jelas melalui contoh binari? OK, sejuk. [00:05:28] Perpuluhan kepada binari adalah sangat mirip. Saya cenderung untuk menulis kuasa 2. Mulakan dengan satu yang terbesar, tetapi tidak melewati perpuluhan yang anda cari. Dan kemudian jenis bekerja cara anda ke belakang menambahkan hal-hal yang diperlukan. [00:05:42] Dan kemudian dengan tambahan, itu Selain itu seperti biasa. Jika anda pernah mempunyai kes di mana anda menambah dua 1s, itu jelas menjadi 2. 2 dalam binari kini 1 0 jadi anda perlu untuk menjalankan 1 anda ke dalam ruang yang akan datang. Sejuk. [00:05:59] Heksadesimal, ini mungkin sesuatu yang sedikit kurang biasa. Sehingga Rob hanya memberitahu saya terlebih dahulu, trick untuk ini adalah dengan hanya membaginya menjadi empat potongan bait, OK? Bit, maaf. Lihat? Terima kasih Rob. Inilah sebabnya mengapa anda berada di sini. [BUNYI] OK, jadi kami hanya memecah itu kepada empat bit potongan. Jadi dengan binari kepada perenambelasan, kita melihat pertama 4, iaitu jika kita mempunyai empat 1s dalam berturut-turut, apa nombor adakah itu melambangkan? [00:06:25] PELAJAR: F. [00:06:26] Allison: Jadi dalam hal ini, apa 11111111 or-- ya? PELAJAR: FF. Allison: Perfect, FF. Begitu besar, gula-gula untuk anda. Sekarang, untuk berapa perenambelasan ke biner, kami hanya berfikir tentang itu jenis secara terbalik. Untuk setiap nombor atau surat yang kita ada dalam perenambelasan kami, hanya mengubahnya menjadi sedikit empat yang [Ketawa] untuk penukaran empat bit. Jadi 5, dalam hal ini, apakah 5 jika kami mewakili dengan empat bit? [00:06:58] PELAJAR: 010? Mm-hm. Dan kemudian A, yang sebenarnya 10, akan? 1010. Jadi kita harus itu, di sini. Jadi menukar antara perenambelasan dan binari sebenarnya tidak terlalu buruk. Jika anda melihat ia dalam empat bit potongan, akan menjadi emas. Kabèh ya? [00:07:19] ROB: Ini adalah bodoh, tapi aku selalu ingat Satu, kerana A sepatutnya menjadi 10. Dan binari hanya 10 10, so-- [00:07:26] Allison: Ah, kita pergi. [00:07:27] ROB: Hey. [00:07:28] Allison: Hei, gula-gula untuk Rob. Ada hal-hal yang tidak coklat di sana. Jadi, anda boleh mempunyai beberapa. Matematik Jadi ASCII. Berperilaku. Jadi ASCII matematik, seperti yang kalian mungkin juga ingat p set 2 dengan Visioneer dan Caesar, anda melakukan banyak ini. Ingat, watak-watak yang asasnya hanya angka. Oleh itu, kita boleh melakukan matematik dengan mereka, seperti yang kami lakukan matematik dengan int. [00:07:54] Jadi kita mempunyai hanya sedikit perkara yang mudah di sini. Kami mempunyai beberapa A itu dimulakan ke 65. Dan B sama dengan nilai ASCII A ditambah 1, char C sama dengan D tolak 1, dan char D sama dengan 68. Jadi kami akan cetak semua daripada mereka, seperti yang kita lihat di sini. Dan sesiapa sahaja boleh beritahu saya apa ini akan mencetak? PELAJAR: [didengar]. Allison: Tepat sekali, jadi satu hal yang perlu diperhatikan adalah bahawa kita mencetak karakter setiap masa, di sini. Kami menetapkan walaupun A dan B ints apabila kita menyatakan mereka di atas. Kita mencetak mereka sebagai karakter oleh peratus C dan pernyataan printf kami, sehingga mereka semua akan dicetak sebagai aksara. Dan sudah tentu, nilai ASCII 65 wasiat dicetak sebagai A. Nilai ASCII Ditambah 1 akan menjadi 66, yang akan bangga B. Jadi sebenarnya, kita mendapat A B C D. Semua orang yang baik di sana? Apa-apa soalan? Awesome. [00:08:52] OK, skop. Jadi adalah jelas skop yang sangat Apa yang penting untuk memahami, di sini. Banyak anda, jika anda mempunyai menyusun kesalahan, dan mengatakan anda tidak mempunyai akses kepada beberapa variabel, ia mungkin kerana anda mendefinisikannya dalam satu lingkaran dan kemudian cuba untuk mengaksesnya dari itu, atau sebaliknya. [00:09:12] Jadi skop pada intinya, ia hanya menentukan di mana kita katakan ada variabel, di mana kita boleh mengubahnya, di mana kita dapat mengaksesnya. Ia hanya jenis mengatakan ini adalah satu-satunya tempat di mana anda mempunyai akses kepada pembolehubah ini. [00:09:26] Jadi kedua-dua skop yang kita bercakap tentang semasa kelas adalah global dan tempatan. Pembolehubah global Jadi kita bercakap tentang apabila anda mentakrifkan mereka di atas utama. Ini bermakna keseluruhan anda program mempunyai akses kepadanya, dan ia wujud selama sebagai program berjalan, OK? Tempatan bermakna bahawa itu lebih terhad kepada sesuatu wilayah. Jadi, setiap kali anda mempunyai fungsi-fungsi khusus seperti swap, kita selalu bercakap tentang. Kami selalu bercakap tentang pertukaran dengan A dan B. A dan B ada dalam fungsi itu. Mereka tidak ada di tempat lain. [00:09:56] Selain itu, apabila anda mempunyai jika kenyataan atau untuk gelung. Setiap kali kita ada, contohnya, dalam untuk loop kita mempunyai int saya sama dengan 0. Kami mempunyai beberapa keadaan dan kita mengemaskinikannya. Saya hanya ada dalam kawat gigi itu untuk gelung. Jika anda cuba untuk mengaksesnya di tempat lain, pengkompil anda akan berteriak pada anda. Ia akan menjadi seperti, apa yang anda cuba lakukan? Ini tidak wujud. Jadi itulah dua jenis skop. Adakah ini masuk akal untuk semua orang? [00:10:23] Sebagai contoh di sini, ini hanya beberapa program yang sederhana. Apa yang kalian anggap akan berlaku pada setiap titik yang kita cuba untuk mencetak? Jadi salah satu ini di sini, apa yang akan berlaku? PELAJAR: Ia akan mencetak tiga. Allison: Benar. Ia akan mencetak tiga. Bagaimana dengan di sini? PELAJAR: Ia tidak akan berfungsi. Allison: Ia tidak akan berfungsi. Anda berada di luar ruang lingkup, kan? Pembolehubah tempatan tidak wujud luar kawat gigi ini, ok? Kemudian apa di sini? [00:10:56] PELAJAR: [didengar]. [00:10:57] Allison: Apa? Rob, pergi. [00:10:59] ROB: Saya hanya berkata. Pembolehubah global harus pembolehubah garis global. [00:11:04] Allison: Ah, ya, maaf. Terima kasih, Rob. Rob seperti pengkompil penduduk kami. Dia hanya akan berteriak pada kita apabila kita memerlukannya. [Ketawa] Ya, harus variabel garis global. Jadi menganggap bahawa yang adalah garis global berubah-ubah, apa yang akan berlaku di sini? PELAJAR: Yang akan bekerja. Allison: Ia akan bekerja. Sehingga akan mencetak, jadi satu contoh yang mudah. OK, prototipe. Jadi jelas, kami benar-benar menekankan untuk kalian untuk membuat fungsi jika ia masuk akal dalam program anda. Tetapi sudah tentu, apabila anda membuat fungsi anda sendiri, biasanya anda akan menentukan nasib mereka selepas utama. Dan anda akan cuba untuk memanggil mereka dalam utama. Dan jika anda tidak menggunakan prototaip, pengkompil anda akan berteriak pada Anda. [00:11:46] Prototaip pada dasarnya hanya memberitahu pengkompil anda bahawa saya mempunyai fungsi ini di bawah utama. Saya akan menyebutnya sebelum saya mendefinisikannya. Hanya berpegang pada. Saya berjanji bahawa ia didefinisikan, dan anda akan mempunyai semua yang anda perlukan. [00:12:00] Jadi cara kita melakukan itu hanya pulangan anda jenis, nama tugas anda, input anda senarai. Ia pada dasarnya baris pertama perisytiharan fungsi anda. Ia benar-benar semua itu. Tetapi ini hanyalah semacam umum format. [00:12:14] Jadi, dalam contoh kita di sini, yang kalian harus lihat dalam seksyen pada satu ketika, kita mempunyai beberapa kiub int yang mengambil beberapa int input. Dan kami memiliki utama kami fungsi, yang menyerukan kiub. Dan kiub ditakrifkan selepas fakta. [00:12:28] Jadi, jika kita tidak mempunyai input kubus int di atas, ketika kita dipanggil kubus main, pengkompil kami akan marah pada kami. Ia akan menjadi seperti, apa yang kau cakapkan ni? Cube tidak wujud. Saya tidak tahu apa yang anda minta. Dan aku hanya akan berhenti. [00:12:43] Tetapi oleh kerana kita melakukan prototaip kami di atas, kami telah berkata, Anda tahu, apabila anda melihat kubus, jangan bimbang tentang hal itu. Saya berjanji ia ditentukan kemudian. Dan ia akan memberitahu anda melakukan apa yang anda inginkan. Jadi jika anda pernah memiliki fungsi yang dinyatakan selepas anda menyebutnya buat kali pertama, anda perlu memilikinya prototyped di bahagian atas. [00:13:01] Ya? [00:13:02] ROB: Ia kuasa dua, tidak cubing. [00:13:04] Allison: Ya Tuhan. Saya tidak have-- Gabe, saya fikir Anda pembaca pruf kami. Orang OK, beruang dengan saya, di sini. Saya harap semua orang mendapat idea. OK, jadi ini harus mempunyai telah kuasa dua, tidak potong dadu. Tetapi idea tetap sama. Mana-mana fungsi, kita panggil selepas hakikat harus mempunyai prototaip. Semua orang yang baik itu? Apa-apa kesalahan ketik yang lain? OK. Apa-apa kesalahan ketik di sini sebelum kita mulai, Rob? [Ketawa] OK, jadi struct. Pada dasarnya, struct membolehkan anda untuk membuat jenis data anda sendiri. Begitu banyak seperti int atau char atau pelampung, ia hanya jenis lain. Saya suka menganggapnya sebagai, seperti, mencipta jenis data anda sendiri. Oleh itu, ia membolehkan anda untuk melakukan itu. Dan memegang berbagai jenis data. [00:13:56] Jadi, jika anda masih ingat, dalam array, kami hanya boleh memegang benda-benda dari jenis yang sama. Structs membolehkan kita untuk memegang beberapa perkara dari jenis yang berbeza. Jadi dalam hal ini di sini, kita mempunyai struct yang dipanggil Pelajar, dinamakan di sini di bahagian bawah. Dan kami mempunyai beberapa id int dan beberapa nama tali. Jadi ini adalah satu lagi jenis data. Sekarang kita mempunyai jenis data yang disebut Pelajar. [00:14:20] Jadi kerana kita boleh memikirkan sebagai hanya satu lagi jenis data, kita boleh mengisytiharkan pembolehubah seperti yang kita akan yang lain. Jadi bukan hanya mempunyai, seperti, pelajar int, kita hanya mempunyai seorang pelajar, pelajar 1. Oh, lihat. Ini Rob. Jadi di sini kita menyatakan struct, atau variabel dipanggil pelajar 1 pelajar jenis. Jadi ia akan mempunyai id dan nama yang dikaitkan dengannya. [00:14:45] Dan cara kita mengakses elemen dalam struct kami adalah dengan operator titik, di sini. Jadi dalam hal ini, kita menyatakan beberapa pelajar 1. Kami diberi ID untuk menjadi 1. Dan kita diberikan nama yang akan Rob. OK, semua orang baik dengan itu? Menggunakannya hanya like-- ya? [00:15:06] PELAJAR: Ya, apabila typedef-- kita perlu menggunakan typedef? [00:15:09] Allison: Jadi typedef hanya mengatakan bahawa- Rob, anda boleh benar saya ini jika saya SALAH tetapi typedef hanya benar-benar menyatakan sebagai jenis yang boleh anda gunakan, bukan? [00:15:19] ROB: Ya, itu pada dasarnya, jadi ia hanya menciptakan alias, atau nama panggilan untuk jenis. Jadi, anda boleh menaip yang [terdengar]. Jadi [terdengar] ada, dan sekarang kita hanya perlu [Terdengar] cara perkara yang sama. Dan jadi di sini, kita ditaip, saya fikir, beberapa struct jenis 2 [terdengar]. Jadi itu hanya nama panggilan untuk jenis tertentu. [00:15:40] PELAJAR: String [terdengar] perpustakaan telah ditaip seperti char bintang. [00:15:51] Allison: Untuk tujuan kami di sini, jika anda mengisytiharkan struct, hanya melakukan struct typedef. OK, jadi terlebih dahulu, ini adalah hanya satu pemboleh ubah biasa di sini. Kami mengaksesnya dengan titik. jika kita mempunyai pointer ke struct, kita benar-benar dapat menggunakan anak panah, yang cukup sejuk. [00:16:10] Jadi dalam hal ini, kita mempunyai pointer ke seorang pelajar 1 iaitu pelajar jenis. Ingat, dengan anda pembinaan penunjuk, apa sahaja yang anda mahu menaip penunjuk anda menunjuk ke berada di awal. Oleh itu, kita mempunyai beberapa pelajar 1, di sini. Dan oleh kerana pelajar ini 1 sekarang tajamnya, kita benar-benar boleh pergi pelajar 1 panah nama bukan titik, kerana ia adalah penunjuk, dan menetapkan Rob. Dan jika kita ingin mengubah Rob Davin, ini hanya menunjukkan anda cara yang berbeza untuk melakukannya. [00:16:43] Jadi, daripada menggunakan anak panah, anda boleh also-- Saya akan menyelesaikan ini dan kemudian mengambil question-- anda boleh juga melakukan rujukan pelajar 1. Itu mengatakan seperti pergi ke apa yang ada pada pelajar 1, yang akan struct pelajar kami. Mengaksesnya dengan titik dan elemen yang anda mahu, dan kemudian menetapkan kembali. Ada soalan. PELAJAR: Ya, jadi bagaimana mungkin anda mempunyai menggunakan [terdengar] apabila anda melakukan bintang pelajar tanpa [Terdengar] pelajar? Allison: Kerana ini mewujudkan pointer. ROB: Kami akan bercakap tentang hal itu. Allison: Kami akan bercakap tentang itu nanti dalam kajian. Jadi hanya memegang pikiran itu. Jika ia masih mengganggu anda di akhir, datang bercakap dengan salah satu dari kita. [00:17:20] Jadi ini melakukan perkara yang sama. Kami hanya menunjukkan anda dua cara yang berbeza untuk melakukannya. Pelajar 1 sekarang pointer, jadi anda boleh mengakses elemen Nama dalam struct dengan anak panah. Atau anda boleh dereference penunjuk anda, dan kemudian mengaksesnya seperti biasa. Adakah yang masuk akal kepada setiap orang? Jika hal-hal pointer keseluruhan yang sedikit mengelirukan, Gabe akan bercakap tentang itu, dan kemudian mungkin ini akan lebih masuk akal. Ya? [00:17:46] PELAJAR: Ya, jadi bagaimana ini berbeza dengan? Allison: Yang sebelumnya? Jadi pelajar 1 dalam ini kes tidak pointer. Ia hanya struct sebenar anda. [00:17:54] PELAJAR: OK. [00:17:55] Allison: Manakala yang satu ini adalah pointer ke struct. [00:17:58] PELAJAR: OK, tapi apakah itu jenis akan bekerja sama [terdengar] itu. [00:18:02] Allison: Ia berkesan kerja-kerja yang sama. Sintaks anda hanya berbeda. PELAJAR: OK. [00:18:05] Allison: Ya, mereka adalah berkesan yang sama. Ia hanya bergantung kepada konteks, Anda mungkin ingin berbanding dengan yang lain. Ya? [00:18:11] PELAJAR: Apabila anda melakukan sebutan mengenai 1-- Allison: Mm-hm? PELAJAR: Mengapa Anda mempunyai tanda kurung? Allison: Kerana pelajar 1 adalah penunjuk. Oleh itu, anda perlu memastikan anda hanya dereferencing penunjuk. [00:18:22] PELAJAR: OK. [00:18:23] Allison: Jadi dalam hal ini di sini, tanda kurung di sekitarnya bermakna anda dereferencing pelajar 1. Jadi, anda akan di mana pelajar 1 mata, iaitu struct anda. Jadi sekarang anda boleh berfikir ia sebagai struct itu, jadi kita boleh menggunakan titik operasi kami biasa. Apa-apa soalan lain? Sejuk, mengagumkan. [00:18:48] Jadi perkara yang lepas, saya fikir adalah slaid terakhir saya, woo! OK, jadi floating point ketidaktepatan. Kita bercakap secara ringkas mengenai ini semasa kuliah. Pada dasarnya, kita mempunyai tak terhingga banyaknya bilangan real. Dan sesiapa di antara kamu orang-orang suka matematik, ada segala macam hal yang sejuk dengan kami. [00:19:05] Tetapi ada tak terhingga banyak bilangan real. Tetapi mereka hanya terbatas banyak bit yang kita ada. Jadi, anda akan selalu mempunyai ketidaktepatan, itu saja. Dan itu yang hanya semacam seperti sesuatu yang perlu anda tahu. Yang seperti kami mungkin meminta anda mengapa floating point ketidaktepatan wujud? Jadi, sesuatu yang perlu anda tahu. Dan dengan itu, aku berubah itu ke Pointer. [00:19:27] BINKY: Hello, guys. Binky nama saya. Saya akan bercakap tentang pointer. Ya, jadi pointer sebenarnya bahagian kegemaran saya dalam kursus ini. Jadi, untuk menjelaskan apa Allison bercakap tentang di sini, jadi sebab why-- satu-satunya perbezaan di sini, perbezaan besar adalah cara yang kami menyatakan hal. Jadi bintang pelajar bermakna ini adalah penunjuk kepada pelajar. Manakala slaid sebelumnya, pelajar adalah struct sebenar, seperti seorang pelajar yang sebenarnya, yang mengandungi apa-apa benda. [00:19:54] Dan alasan mengapa kita ingin kepada- ya, Davin? [00:19:57] Davin: Apa panah mean? [00:19:58] BINKY: Anak panah cara betul-betul sama seperti ini. Jadi anda tidak benar-benar memerlukan anak panah. Seperti, jika anda hanya program dalam C, anda hanya boleh menggunakan ini. Maaf, saya tidak apa itu. Anda hanya boleh menggunakan sintaks ini. [00:20:14] Tetapi sesetengah orang, apabila mereka merancang C, mereka mengira bahawa orang-orang digunakan sintaks yang begitu banyak, bahawa mereka akan suka hanya datang dengan struktur sintaks untuk itu. Dan ini berlaku pada bentuk anak panah ini. Dan ia benar-benar baik, kerana ia melambangkan sesuatu seperti kita benar-benar berikut anak panah ini, penunjuk ini, ke arah beberapa ruang dalam ingatan. Dan ketika kita sampai di sana, kami ingin melihat kepada nama pelajar itu, jika yang masuk akal. OK? [00:20:43] Jadi, ini adalah persis sama. Ini betul-betul perkara yang sama seperti ini. Mereka mendapatkan dikompilasi persis sama, OK? Dan sebab itu di sini mengapa kita malloc sesuatu, kerana dalam kes ini, variabel kita sebenarnya hanya pembolehubah penunjuk. Oleh itu kita hanya mempunyai sedikit ruang di memori yang memegang pointer. Kami benar-benar memiliki ruang yang memegang struct sebenar. [00:21:06] Jadi ini harus dilakukan dalam dua langkah. Kita perlu membuat memori untuk meletakkan struct dalam. Dan kita harus membuat memori untuk meletakkan penunjuk dalam. Jadi mereka pada dasarnya dua variabel yang berbeda, di sini. Salah seorang daripada mereka adalah pelajar dari jenis, kecuali ia tidak benar-benar mempunyai nama. Dan satu yang lain adalah jenis bintang pelajar. Dan murid murid 1 mata sana, jika yang masuk akal. OK? [00:21:28] Jadi alasan mengapa kita menggunakan petunjuk adalah kerana segala-galanya dalam komputer, setiap pemboleh ubah dalam suatu komputer mempunyai dua perkara. Ia mempunyai nilai. Dan ia mempunyai alamatnya. Dan cara yang baik untuk konsep ini ada banyak masalah apabila anda cuba menggunakan fungsi. Dan kita akan cuba melihat ke dalam salah satu dari mereka. Iaitu, ia akan berfikir memori sebagai kotak. [00:21:50] Anda sentiasa memikirkan variabel apabila anda mengatakan na sama dengan 5. Anda berfikir menempatkan 5 ke dalam sebuah kotak. Jadi apa jika anda ingin lulus yang int ke dalam fungsi? Anda hanya pass-- saya tidak TAHU x ke fungsi. Tetapi apa yang berlaku ialah biasanya sebagai manusia, anda akan berfikir sesuatu seperti saya lulus kotak seseorang. Dan ia tidak benar-benar berlaku di dalam komputer. Apa yang berlaku ialah anda menyalin nilai dari kotak ke kotak seseorang. [00:22:17] Jadi apa yang saya katakan adalah bahawa jika anda mempunyai function-- yang sorry-- sini, jika kita mempunyai fungsi seperti lima hingga sana, jika anda cuba untuk lulus variabel, ia hanya akan menyalin. Jika nx initialize sama dengan 3, ia akan untuk menyalin nilai ini sehingga pembolehubah yang di atas sana. OK, dan ini adalah jenis alasan mengapa kita ingin menggunakan pointer. Kerana bukan hanya memberi nilai, bukan hanya lewat hanya nilai ke fungsi, kami mahu melewati rujukan. Apa yang kita sebut pas dengan merujuk adalah jenis memberi kotak majlis itu, sehingga majlis itu boleh juga menukar nilai-nilai dalam kotak itu. [00:22:53] OK, jadi hanya beberapa penunjuk asas barang-barang adalah untuk mewujudkan petunjuk, Anda hanya menyatakan ia jenis, dan anda meletakkan bintang hak selepas itu. Dan jenis yang hanya apa yang anda menunjuk. Jadi, jika ini merupakan bintang int, Anda sedang menghala ke arah int. Jika itu adalah bintang char, Anda sedang menghala ke arah satu carta. Dan jika itu adalah bintang pelajar, Anda sedang menghala ke arah pelajar. OK? [00:23:08] Dan mereka semua 4 bait. Oleh kerana pembolehubah ini ia tidak benar-benar perlu memegang char, int, atau pelajar. Ia hanya perlu untuk memegang alamat. Itulah sebabnya mereka semua 4 byte panjang di mesin 32-bit biasa. OK? Jadi di sini, x ialah pembolehubah yang menunjuk sebagai int. y mata kepada char. titik z kepada apungan. Mana-mana soalan di sini? Sejuk. Dan ada dua simbol yang berbeza mereka mempunyai yang perlu diingat apabila datang ke penunjuk. Jadi rujukan dan dereferencing adalah orang-orang besar. Jadi ampersand daripada nama variabel memberi anda? PELAJAR: Alamat. BINKY: Alamat. Jadi, jika anda menyatakan int a sama dengan 5, maka ampersand dari akan memberikan alamat. Dan anda benar-benar boleh cuba untuk mencetak dan melihat apa alamat dalam ingatan variabel Anda mempunyai. Dan kemudian dereferencing-- sehingga telah rujukan, mendapatkan dereferencing yang address-- adalah bertentangan dengan tepat. OK, sama seperti kali adalah bertentangan dengan pembahagian, bintang adalah bertentangan dengan ampersand. Jadi dereferencing cara pergi ke sana. Jadi jika anda memberikan saya star-- tidak tahu-- 50, itu akan cuba untuk pergi ke alamat nomor 50 di dalam komputer anda. OK, dan mengapa kita lihat bahawa mereka adalah bertentangan? Oleh kerana apa yang berlaku jika anda melakukan sesuatu seperti bintang Ampersand satu? Nah, ampersand yang memberikan anda alamat dari variabel, alamat sebuah. Tapi bintang bermakna pergi ke sana. [00:24:35] Jadi apa yang berlaku jika anda pergi ke alamat? Anda hanya dapat, kan? Jadi pergi ke alamat adalah perkara yang sama seperti yang. Itulah sebabnya mereka biasanya dirujuk kepada same-- ini dan ini disebut operator sebagai bertentangan. OK? Begitu sejuk. [00:24:53] Di bawah tenda, sebagai contoh, jika kita menyatakan int x sama dengan 5, kita mempunyai variabel. Dan ingat bahawa saya berkata setiap variable-- dan ini adalah satu perkara yang baik yang perlu mind-- ia mempunyai dua perkara yang berbeza yang berkaitan dengan. Ia mempunyai ditangani dan nilai. OK? [00:25:07] Jadi nilai dalam kes ini adalah 5. Dan alamat is-- katakan, saya membuat sesuatu up-- itu 0x04. Dan satu-satunya alasan mengapa kita biasanya mewakili alamat dalam perenambelasan adalah satu, kerana ia seperti yang baik. Ia berjalan lancar dengan binari. Ia mudah untuk menukar ke dan dari binari. Dan ia tidak mendapat terlalu besar jika anda mempunyai jumlah yang sangat besar. Jadi kita ingin menggunakan perenambelasan di alamat percetakan. Tetapi saya boleh mewakili ini sebagai integer. Tidak apa-apa. [00:25:32] Dan jadi ia mempunyai alamat 4 dan nilai 5. Kemudian aku berkata penunjuk int bintang. Jadi ini adalah jenis yang berbeza, notis. Int pointer bintang sama alamat x. Jadi apa yang akan menjadi nilai ptr? Ia akan menjadi alamat x, di sini. OK, jadi nilai akan sama dengan alamat. Itulah tugas yang beroperasi saya lakukan. Dan kemudian ptr akan mempunyai alamat sendiri, yang ternyata, dalam kes ini, 8, OK? [00:26:03] Dan kemudian saya membuat salinan integer baru. Dan saya katakan int salinan sama pergi ke sana. Oleh itu, pergilah dengan apa ptr menunjuk ke. Nah, apa ptr ini ada? Ptr mempunyai 0x04. Apakah yang akan berlaku jika saya cuba untuk pergi ke sana? Saya akan mencari lelaki yang mempunyai alamat x dan yang mempunyai alamat 4. Dan siapa yang mempunyai menangani empat adalah x. Adakah ini masuk akal? Ya? [00:26:28] PELAJAR: Dalam kes ini, adalah penunjuk dalam tumpukan? [00:26:32] BINKY: Dalam kes ini, it's-- soalan yang baik. Saya tidak benar-benar berfikir tentang hal ini ketika membuat alamat ini. Tetapi jika ini adalah, seperti, semua ini adalah pembolehubah tempatan, maka x akan hidup dalam- semua akan hidup dalam tindanan. Jadi semuanya berjalan untuk menunjuk ke tumpukan. Anda hanya dapat tumpukan apabila anda mula menggunakan malloc, kan? [00:26:52] Jadi, jika anda masih ingat stack setiap kali Anda memanggil fungsi dalam program anda, seperti, sebagai contoh utama, atau apa-apa fungsi lain, seperti printf. Semua pembolehubah tempatan akan mendapatkan dimasukkan ke dalam bingkai tindanan. Dan mereka akan mendapatkan seperti menumpuk di tumpukan. Itulah yang disebut tumpukan. Dan semua orang-orang pembolehubah tempatan akan berada di sana. Dan heap-- dan kita akan untuk bercakap lebih lanjut mengenai ini later-- timbunan itu adalah di mana semua dinamik diperuntukkan kehidupan memori. Cool? [00:27:20] Kami pergi ke slide ini. Ya? [00:27:22] PELAJAR: Mengapa tidak int menyalin kembali 0x04? [00:27:27] BINKY: Mengapa tidak int menyalin kembali 0x04? [00:27:30] PELAJAR: Mengapa tidak adalah bahawa [terdengar]? [00:27:32] BINKY: Kerana apa yang nilai ptr? [00:27:37] PELAJAR: 0x04. [00:27:38] BINKY: 0x04. Apakah yang akan berlaku jika anda pergi ke 0x04? Apa yang anda dapat? [00:27:41] PELAJAR: Oh, OK. BINKY: Anda lihat? PELAJAR: Ya. BINKY: Jadi, anda mendapatkan 5. Jadi salinan akan mempunyai 5, jika yang masuk akal. Ya? [00:27:49] PELAJAR: Bolehkah kita mendapatkan 5 dalam kotak nilai [terdengar] jika kita meletakkan int menyalin [terdengar]. [00:27:55] BINKY: Int-- kami akan, yeah. Yang akan dilakukan cukup banyak hal yang sama. Tetapi cara ini, kita boleh lulus menangani dengan fungsi. Dan itulah perkara yang sejuk kita akan lakukan sekarang. [00:28:06] Jadi latihan ini selalu muncul on-- sangat biasanya muncul di kuis. Sehingga benar-benar baik untuk cuba melakukan begitulah keadaannya sendiri. Oleh itu, cuba menjejaki apa alamat adalah dan mahukan yang nilai-nilai variabel adalah pada setiap titik. Jadi, ini adalah betul-betul apa yang kita akan lakukan. Di sini, kita mempunyai langkah-langkah, satu, dua, tiga, empat, lima. Satu, dua, tiga, empat, lima. Dan kita akan menjejaki nilai-nilai x dan. [00:28:34] Jadi apa ini lakukan, jika ini adalah kode kereta, kami cuba lakukan untuk lima. Jadi kita sedang berusaha untuk mendapatkan dalam berubah dan mengubah nilainya hingga 5. Dan ingat analogi saya mempunyai kotak dan menyerahkan kotak seseorang? Jadi utama mempunyai ruang ini dipanggil x. Dan ia mengandungi nilai 3. Dan saya cuba untuk menyerahkan kotak ini untuk kepada lima. [00:28:58] Dan saya mahu lima untuk menukar nilai kotak ini hingga 5. Dan kemudian saya hanya mencetak nilai x. Ini adalah apa yang saya function-- ini adalah apa yang saya cuba lakukan. Aku hanya berusaha untuk mengemas kini nilai x hingga 5. Apakah jelas fungsi apa yang tidak? [00:29:16] OK, jadi apa yang akan menjadi nilai x dan di sini, baris pertama, tepat sebelum pertama line-- saya akan say-- dari program ini? [00:29:27] PELAJAR: Mungkin sampah. [00:29:28] BINKY: Hanya hal-hal sampah. Jadi saya hanya meletakkan N / A. Jadi kita tidak benar-benar tahu. Seperti, tidak wujud lagi, kerana kita telah tidak dipanggil untuk lima. Int yang tidak diisytiharkan. Dan x akan wujud di sini, tetapi kita tidak benar-benar mempunyai diberikan apa-apa nilai untuk itu, jadi OK? [00:29:46] Dan kemudian, apa yang akan menjadi nilai x dan di nombor dua? [00:29:54] PELAJAR: [didengar]. [00:29:55] BINKY: Jadi x akan menjadi 3. Itu mudah, kerana kami memberikan 3 untuk itu. Dan masih tidak wujud kerana hanya tinggal di lima. Jadi, saya akan mempunyai 3 dan apa-apa. atau seperti sampah, apa pun, tidak benar-benar yang ditetapkan. Dan sekarang, ini adalah garis penting. Di sini, kita akan benar-benar memanggil kepada lima. Dan ingat apa yang saya katakan. Kami tidak pernah lulus di dalam kotak. Kami hanya menyalin nilai kotak ke kotak lain. Itu semua komputer lakukan, menyalin perkara-perkara dari satu tempat ke tempat lain. [00:30:27] Jadi untuk lima, apa yang sebenarnya itu salinan nilai x dengan a. Jadi apa yang akan berada di sini? Nilai-nilai x dan. 3 dan 3, kami hanya akan menyalin ia lebih dari x ke. Sejuk. [00:30:45] Sekarang kita di sini. Dan sekarang kita akan untuk mengemas kini yang sama dengan 5. Apa yang akan berlaku sejajar empat? [00:30:55] PELAJAR: [didengar]. [00:30:56] BINKY: a ​​akan diperbarui, tapi x tidak dikemas kini. Oleh kerana x masih tinggal di utama, ia adalah satu blok yang sama sekali berbeza dari ingatan. Ia berubah-ubah yang berbeza. adalah pembolehubah lain. Mereka kebetulan memiliki nilai yang sama kerana saya disalin nilai x dengan a. Tapi sekarang ketika saya melakukan sama dengan 5, ia tidak benar-benar memberi kesan x dalam apa jua cara. Ini adalah bahagian yang rumit. Adakah masuk akal untuk semua orang? Ya? PELAJAR: Satu pertanyaan lagi, anda mempunyai 3. Mengapa already-- oh, tidak, itu 3. Maaf, tidak apa-apa. Saya membaca 5. [00:31:29] BINKY: Ya, 3, 3. [00:31:30] PELAJAR: [didengar], ya. BINKY: Dan kemudian kita menetapkan 5 hingga , tetapi tidak benar-benar mengubah x. Baik? PELAJAR: Ya. BINKY: Ya? Bolehkah anda menjelaskan lagi bagaimana yang akan disalin [terdengar]? [00:31:42] BINKY: OK, jadi apabila anda menelefon untuk lima x, jadi baris kode ini di sini. hingga lima x, apa x? x adalah hanya 3 pada saat ini, kan? Jadi anda hanya boleh berfikir meletakkan 3 in di sini dan melupakan x. Hanya meletakkan 3 di sini. Seperti, kita akan salinlah nilai x untuk int yang di atas sana. OK? [00:32:13] Jadi nilai x ialah 3. Kami akan menyalin 3 lebih kepada. Dan semua blok ini lain ingatan, ini variabel lain disebut akan memiliki 3, juga. Adakah ini masuk akal? Ya? [00:32:25] PELAJAR: Jika anda berikan kepada lima seperti memilikinya sebagai integer x bukan satu, yang akan menetapkan segala-galanya? [00:32:32] BINKY: Jika ini merupakan integer-- tidak, yang tidak akan menetapkan segala-galanya. Jadi itu satu soalan yang sangat baik. Ia tidak benar-benar kira apa Anda memanggil variabel tersebut. Sekali lagi, ia akan menjadi masalah skop, kerana mereka tidak x yang sama. Mereka benar-benar ruang yang berbeza dalam ingatan. PELAJAR: [didengar]. BINKY: Jadi ia tidak benar-benar kira apa yang anda memanggil mereka. Yang tidak memperbaiki keadaan, OK? Lebih banyak soalan? Ya? [00:32:55] PELAJAR: Bagaimana ia kembali ke nombor lima [terdengar]? BINKY: OK, kita tidak melakukannya lagi. Mari kita pergi ke peringkat lima, lalu. [00:33:03] PELAJAR: [didengar]? [00:33:04] BINKY: Apa? [00:33:05] PELAJAR: Adakah anda mempunyai pulangan sama sekali? BINKY: Kami tidak mempunyai pulangan, bukan dari utama. Tetapi pulangan utama 0 secara automatik jika anda tidak kembali apa-apa. Ya? [00:33:15] PELAJAR: Bolehkah anda membuat main-- atau Anda boleh membuat hingga lima kembali ke dunia? [00:33:24] BINKY: Kami boleh mempunyai hingga lima kembali, ya. Tetapi kita perlu menetapkan x sama dengan nilai pulangan kepada lima, yang akan menjadi sedikit program yang berbeza. Itu akan berhasil. Tetapi apa yang kita ingin lakukan adalah apa yang disebut perubahan sesuatu pada tempatnya. Oleh itu, kita ingin benar-benar menukar kotak itu dan tidak bimbang karena harus kembali nilai-nilai atau apa-apa. OK? [00:33:46] Ini adalah sama seperti fungsi swap Daud menunjukkan dalam kuliah, kecuali saya hanya berurusan dengan satu variabel. Dan ia menggunakan dua, jadi int a dan b dan maka variabel sementara dan yang lainnya. OK? Jadi apa barisan terakhir? Selepas lima pulangan, itu hanya satu yang akan pergi dari sini. Kami tidak akan memiliki lagi, dan hanya x akan tetap hidup. [00:34:10] Dan meneka apa? x tidak berubah nilainya, selepas semua, kerana kita hanya mengubah nilai yang. Itulah sebabnya x adalah 3 di seluruh. OK? Baik. Jadi program ini tidak mencapai apa yang kita inginkan. Sekarang mari kita memperbaikinya. [00:34:24] Dan memperbaiki program ini menggunakan pointer. Apa yang kami lakukan ialah kami mempunyai tiga garis yang berbeza. Orang-orang yang pertama dan kami tidak mengabaikan x. Kami melewati alamat x. Jadi, menyalin nilai dari kotak, Aku masih akan menyalin sesuatu. Tetapi saya menyalin alamat kotak. [00:34:45] Jadi jika saya lulus alamat kotak untuk lima, maka lima akan dapat mendapati bahawa di memori dan menukar nilainya. [00:34:53] Jadi dan kemudian sampai di sana, saya mempunyai yang bukan int satu lagi. yang merupakan bintang int. Ia adalah penunjuk kepada integer. Dan kemudian, kerana saya lulus alamat di sini, dan kemudian apa yang saya lakukan bukan sama dengan 5, kerana yang memegang alamat. Jadi apa yang saya mahu lakukan adalah pergi ke sana dan mengemaskini kandungan alamat ini dengan 5. [00:35:18] OK, jadi mari kita pergi melalui semua lini satu per satu. Oleh itu, apabila saya mula di sini, saya masih mempunyai N / A, N / A, N / A untuk segala-galanya di pertama talian, kerana saya tidak mempunyai benar-benar menyatakan hal-hal lagi. Dan kemudian garis dua, saya mempunyai x bersamaan 3. A int bintang yang tidak wujud, Perkara yang sama seperti sebelumnya. [00:35:39] Sekarang semakin menarik. Jadi, saya akan lulus. Dan mari kita andaikan bahawa alamat x ialah 12 dalam perenambelasan. Mari kita menganggap ini. Aku membuat itu. Jadi apa yang saya lewat di sini adalah kepada lima. Aku lewat 12. [00:35:56] Jadi apa nilai yang tidak ada? [00:36:04] PELAJAR: [didengar]. [00:36:06] BINKY: Maaf? [00:36:06] PELAJAR: [didengar]. BINKY: Ya, seperti, ke mari menganggap bahawa kita berada di sini, sekarang. Aku bertanya. [00:36:12] PELAJAR: [didengar]. [00:36:13] BINKY: Ia telah dimulakan. [00:36:14] PELAJAR: [didengar]. BINKY: Kerana kami melewati sesuatu untuk majlis itu. Ya? [00:36:19] PELAJAR: Alamat x. BINKY: Ia akan mempunyai alamat x. Dan alamat x adalah 12, yang baik. Jadi x akan menjadi 3, kerana kita belum benar-benar berubah x lagi. Dan kemudian akan menjadi 0x12, jadi alamat x, kerana itulah apa yang kita diserahkan kepada kepada lima. [00:36:38] Dan kemudian apa yang berlaku jika kita cuba untuk pergi ke sana? Apa yang kita akan mencari? Jadi, jika anda cuba untuk mencetak bintang yang, kita akan mengikuti alamat ini dan mendapatkan nilai di dalamnya. Dan nilai hanya nilai yang sama yang x mempunyai kerana itulah yang alamat x, yang akan menjadi 3. Adakah kita yang baik? [00:36:56] OK, kemudian sekarang, kita benar-benar pergi ke sana. Dan kita update apa sahaja adalah di alamat ini 12. Kami memberikan 5. Jadi sekarang kedua-dua x dan bintang adalah 5. [00:37:13] Mengapa demikian? Oleh kerana alamat x ialah 12. Dan juga mempunyai 12 sebagai nilainya. Jadi jika kita ikuti 12, kami tidak hanya akan menemukan x. Jadi, apa pun yang kita lakukan dengan bintang yang akan berlaku ke x, kerana mengandungi alamat x. OK? [00:37:34] Dan ini adalah seperti pokok memperbaiki. Jadi sekarang kita dapat, dari lima, sebenarnya akses memori yang tinggal di utama. Jadi memori ini tidak hidup dalam ke lima, seperti sebelumnya, alamat ini 12. Dan kami mampu untuk pergi ke sana dan menukar nilai hingga 5. [00:37:50] Dan kemudian apabila kami kembali, kita lupa tentang. Kita lupa tentang bintang. Dan x masih lima. Jadi jika anda mahu melaksanakan fungsi swap, Anda hanya akan melakukan perkara yang sama, kecuali anda perlu int bintang di sini, dan sebagainya dan sebagainya. OK? Adakah kita yang baik? Sejuk. [00:38:10] Jadi pointer aritmetik. Ini adalah topik yang sedikit rumit. Jadi ternyata bahawa pointer hanya bilangan bulat. Anda boleh menganggap mereka sebagai bilangan bulat. Kerana dalam ingatan, anda perlu seperti alamat sifar, satu, dua, tiga memori, empat, lima. Oleh itu, kita dapat jumlah alamat memori. [00:38:23] Dan itu biasanya apa yang anda lakukan apabila Anda berada di dan mudah, sebagai contoh. Array adalah sama seperti yang berdekatan blok memori, dari banyak aksara, sebagai contoh, banyak int. Jadi, jika anda mahu pergi ke kedua int atau int ketiga, Anda hanya dapat jumlah sesuatu dengan yang pertama alamat, dan anda akan sampai ke sana. Jadi, ini adalah benar-benar berguna untuk itu. [00:38:39] Dan perkara yang menjaga dalam fikiran, walaupun, adalah bahawa ia tidak sama seperti aritmetik biasa dalam erti kata bahawa jika anda sedang berhadapan dengan, katakan, sebuah bintang int, dan anda tambahkan 1 untuk itu, maka anda tidak akan menambah 1 ke alamat, Anda akan tambah 4 ke alamat. Kerana int adalah 4 bait. [00:38:57] Jadi ini adalah sama seperti berjalan di atas array. Jika kita mempunyai pelbagai banyak ints dan maka kita cuba untuk pergi dengan yang kedua, ia pada dasarnya hanya menjumlahkan alamat yang pertama ditambah 1. Tetapi itu tidak akan adalah-- hanya katakanlah bahawa alamat yang pertama ialah 4. Di sini, dalam kes ini. Dan jika kita menjumlahkan, jadi ini adalah apa yang berlaku. Kami mempunyai int. Int x sama dengan 5. X mempunyai nilai 5. Dan kami memulakan pointer ini, int y int bintang y sama dengan alamat x. [00:39:31] Mari kita andaikan alamat x ialah 4. Apa yang akan berlaku jika saya jumlah tambahkan 1 untuk y? Ia akan benar-benar jumlah 4, bukan hanya 1. Jadi saya menambah 1, tetapi sebenarnya tambah 4, kerana komputer pintar. Jadi ia akan benar-benar menambahkan dengan saya kali saiz jenis penunjuk. OK? [00:39:58] Jadi jika ia char, sebagai contoh, jika ini char bintang y, dan jika kita menambah 1 maka akan ini menjadi 5, kerana arang adalah 1 bait panjang. Baik? [00:40:10] Dan akhirnya, kita harus petunjuk dan array. Ia ternyata bahawa setiap kali Anda sedang berhadapan dengan array, anda sebenarnya sedang berhadapan dengan pointer. Sebab konsep yang sangat bagus untuk ini adalah bahawa array yang sangat besar. Jadi ingat bahawa saya berkata setiap kali anda lulus hal di sekitar, anda menyalin segala-galanya. Jadi jika anda mempunyai array itu benar-benar, benar-benar besar, Anda tidak benar-benar mahu menyalin semua setiap kali Anda lulus sekitar yang lain fungsi, kerana itulah jumlah besar kerja. Jadi apa yang anda lakukan adalah hanya melewati alamat bait pertama. Kemudian fungsi akan mempunyai akses dengan semua elemen dalam array itu. Jadi anda lulus array dengan alamatnya, jadi alamat bait pertama. [00:40:48] Jadi jika kita menyatakan int array 3, di sini, kita tahu cara mengakses elemen pertama menggunakan notasi braket. Jika anda ingat pendakap notasi, pelbagai kurungan 0 sama dengan 1. Nah, ini akan menjadi betul-betul sama seperti pergi ke sana dan meletakkan 1. OK, adalah perkara yang sama. Jadi notasi braket di sini akan sama dengan baris ini. [00:41:13] Dan meneka apa notasi braket untuk array kurungan 1 akan menjadi? Ia hanya akan menjadi perkara yang sama seperti ini. Jadi menambahkan satu ke array. Memindahkan satu bersama-sama dalam ingatan. Pergi ke sana, dan meletakkan 2. OK? Dan garis ini adalah perkara yang sama. Kami mahu pergi ke ketiga kotak, jadi pelbagai ditambah 2. Pergi ke sana, dan meletakkan 3. Jadi, dalam ingatan, apa yang akan terjadi adalah kami akan mempunyai 1, 2, dan 3 sebagai tiga elemen array ini. [00:41:44] Kita boleh melakukan ini dengan menggunakan notasi braket biasa kami. Saya hanya mahu anda semua tahu bahawa mereka adalah perkara yang sama. OK, soalan tentang perkara ini? Nice. Sekarang, saya akan menyerahkan itu kepada Hana, [00:41:59] HANNAH: Yay, yee-kamit. [00:42:00] BINKY: Berbicara tentang memori dan hal-hal artikel. [Tepuk Tangan] [00:42:06] HANNAH: Hi, sejuk, jadi kita akan bercakap sedikit lebih tentang memori, yang kita hanya diatasi dengan menggunakan petunjuk. Jadi ada dua bahagian utama memori yang kita khawatir dengan. Kami mempunyai tindanan, yang tumbuh di bahagian bawah, dan tumpukan, yang turun dari atas. Dan stack akan mengadakan semua pembolehubah contoh kita. Jadi setiap panggilan ke fungsi mendapat bingkai kecil sendiri pada stack. Jadi sebagai Gabe yang dinyatakan sebelum ini, jika kita memanggil fungsi sekali lagi dan sekali lagi, kita akan tumpukan hal-hal di tumpukan. [00:42:35] Begitu juga, heap, yang bermula di bahagian atas akan memegang kesemua memori yang yang kita memperuntukkan secara dinamik. Dan supaya kita dinamis memperuntukkan ingatan, ini akan turun ke arah bawah. Pasangan perkara yang harus diperhatikan ketika kita menggunakan tumpukan dan timbunan itu, dengan timbunan itu, jika kita mempunyai terlalu many-- mari kita say-- panggilan rekursif, dan kami memanggil fungsi lagi, dan lagi, dan lagi, dan lagi, dan ia susun atas, susun atas, susun atas. Dan ia akan jatuh ke dalam tumpukan. Kami akan kehabisan memori. Itu akan menyebabkan masalah untuk komputer. Dan yang dinamakan limpahan tindanan. Jadi itu pasti sesuatu yang anda harus sedar dan cuba untuk mengelakkan. Dan timbunan itu, perlu ingat tidak sengaja kebocoran memori. Bila-bila masa anda menggunakan malloc, tidak lupa untuk bebaskan ingatan itu. Jika tidak, ia hanya akan berada di timbunan itu sia-sia, dan komputer tidak akan tahu bahawa ia bebas untuk menggunakan memori itu. Jadi itulah beberapa perkara berhati-hati dengan ketika Anda sedang berhadapan dengan tumpukan dan tumpukan. Sebarang pertanyaan dengan ini? Awesome. [00:43:31] OK, sejuk. Jadi ini jenis mempunyai yang sama idea sebagai limpahan tindanan, di mana kita akan di luar batas-batas apa memori adalah kita seharusnya dapat menggunakan. Oleh itu, mengambil, sebagai contoh, penyangga, atau anda hanya boleh menganggapnya sebagai array. Dan kami berkata, OK, kita akan membuat array ini sedikit bagus. Ia akan menjadi string. Atau ia akan menyimpan aksara. Dan ia hanya akan menyapa. Dan ia tidak dapat ditentukan. Itu saja. [00:43:53] Tapi kalau aku jadi orang jahat dan mahu melakukan sesuatu yang buruk dengan array ini, apa yang Saya boleh lakukan ialah cuba untuk menulis melewati ujung tali. Dan seperti yang anda akan lihat, jika Saya menulis cukup jauh, Saya benar-benar dapat mempengaruhi alamat pengirim. Dan jika saya mulai mempengaruhi alamat kembali, Saya mempengaruhi bagaimana program benar-benar berjalan. Dan bukannya kembali, anda tahu, rentetan gembira seperti hello, saya boleh melakukan sesuatu yang tidak baik, seperti pergi ke tempat lain dalam komputer anda, masih memori, mengubahnya, apa yang saya mahu lakukan. Jadi itulah apa ini akan kelihatan seperti adalah jika saya hanya jenis mengisinya dengan nilai sampah rawak, dalam kes ini, hanya satu. Dan kemudian apabila saya benar-benar sampai ke alamat memori, Saya mula mengisinya dengan sesuatu yang yang melakukan apa yang saya ingin lakukan. Sebarang pertanyaan dengan buffer overflow? Awesome, kan terbang melalui barang-barang ini. [00:44:40] OK, jadi kita bercakap banyak tentang penunjuk dengan Gabe. Bagaimana kita benar-benar mendapatkan pointer? Bagaimana kita mendapatkan alamat dalam ingatan? Nah, kita boleh menggunakan ini bagus fungsi malloc panggilan, yang akan mendapatkan sepotong kecil dari ingatan, khususnya dalam timbunan, seperti yang kita dibincangkan, dan ia akan memberi anda kembali pointer ke alamat dalam ingatan. Dan hujah bahawa kita harus memberi malloc adalah berapa banyak ruang memori yang kita inginkan. [00:45:04] Jadi, anda boleh melihat saiz dalam bait. Katakan, sebagai contoh, atau sebenarnya, dalam contoh ini, kita memperuntukkan cukup ruang untuk 10 bilangan bulat. Jadi mungkin apa yang kita akan ingin untuk meletakkan di sini adalah array 10 bilangan bulat. Oleh itu, kita memberikan ukuran ints, yang kita yang dipetik adalah berapa banyak bait? PELAJAR: 4. HANNAH: 4, indah, dan kami mahu 10 daripada mereka berturut-turut, supaya kita mempunyai ruang yang cukup untuk menyimpan semua 10 bilangan bulat, dalam kes ini. Sesuatu yang super penting, bila-bila masa anda memanggil malloc, anda perlu memeriksa null. Jika anda tidak memeriksa null, baik, malloc jika ia berjalan keluar dari ruang dan tidak boleh memberi apa-apa anda memori yang lebih, ia akan mengembalikan null. Jadi, jika anda tidak cek, malloc dapat kembali null. Kemudian jika kita cuba dereference pointer batal, kita akan mendapatkan kesalahan segmentasi, yang kita akan bercakap tentang sekarang. Awesome. [00:45:56] OK, soalan dengan malloc? Ya? [00:46:00] PELAJAR: Apakah memeriksa batal [Terdengar] tidak melakukannya kuiz? [00:46:05] HANNAH: Tentu, soalan itu adakah ia masalah-kuiz, anda akan mendapat mata di belakang jika Anda tidak memeriksa null? Ya, anda akan mendapat mata di jika anda tidak memeriksa null. Bila-bila masa anda memanggil malloc, baik di kuiz dan pşet anda dan dalam kehidupan sebenar, anda perlu memeriksa null. Soalan yang baik. [00:46:18] GABE: Bagaimana sekiranya saya tidak bebas? HANNAH: Gabe ingin tahu bagaimana jika kita tidak percuma. Kemudian kita akan mempunyai kebocoran memori dalam timbunan kita. Apa-apa soalan lain? Ya? [00:46:27] PELAJAR: Bolehkah you-- pergi buffer overflow nyata cepat lagi? [00:46:30] HANNAH: Tentu. Persoalannya adalah kita boleh pergi ke buffer overflow benar-benar cepat. Mari kita kembali kepada mereka slaid. Jadi penyangga, anda boleh hanya menganggapnya sebagai array, kan? Anda mempunyai beberapa ruang dalam ingatan. Dan ketika kita pertama kali membuat array kita, kita tahu array telah ditetapkan saiz, atau penampan kami mempunyai saiz yang tetap. [00:46:45] Jadi, bila dalam hal ini, kami mempunyai ruang yang cukup untuk menulis rentetan khabar. Jika kita pergi masa lalu yang terikat, jika kita pergi lalu apa array kita kita berkata ia boleh memegang, kita benar-benar boleh mula menulis ke dalam ingatan bahawa komputer tidak ingin kita untuk menulis ke dalam. Dan secara khusus, jika kita memukul sesuatu seperti pulangan menangani fungsi, yang, seperti mana-mana bahagian lain dari ingatan, hanya di suatu tempat dalam anda komputer, anda boleh benar-benar menukar itu dan mula melakukan perkara-perkara kejahatan. Menjawab soalan anda? Awesome, apa-apa lagi? Ya? [00:47:17] PELAJAR: Jadi tumpukan [terdengar], anda berkata pergi dari bawah naik. Dalam julat tumpukan, adakah memori pergi dari, seperti, atas ke bawah yang berkaitan dengan setiap istirahat? [00:47:28] HANNAH: Bagaimana you-- tunduk kepada Rob yang satu ini. [00:47:35] ROB: Ia akan berkembang dalam tempoh yang sama arah sebagai tumpukan tumbuh. HANNAH: OK. ROB: Jadi saya bingung. Ini akan menjadi abstraksi. HANNAH: OK. ROB: Ini adalah benar. Jadi jika stack berkembang atas, kemudian ia generally-- tidak perlu menjadi seperti ini. tetapi anda boleh menyatakan int x. Kemudian Anda menyatakan int y. Kemudian int x umumnya akan lebih rendah pada tumpukan dari int y. Tapi itu hanya suatu fakta. Itu tidak seperti satu perkara yang benih penting. [00:48:02] ROB: Jadi soalan lagi hanya apa yang berlaku setiap frame terbentuk. Jadi setiap fungsi mendapat sepotong kecil tindanan. Dan seperti yang anda naik, dalam masa yang sepotong kecil, dalam tempoh itu, kita akan mengatakan bahawa pembolehubah dalam tempoh yang juga bergerak ke atas. Soalan? [00:48:17] ROB: Hanya untuk berada di mikrofon. HANNAH: Oh, ya. ROB: Saya akan bercakap dengan anda. HANNAH: Oh, ya, OK. ROB: Pengecualian adalah untuk array dan struct, di mana array, yang lebih rendah indeks dalam array, dan dalam struct di lebih tinggi bidang dalam struct dijamin untuk berada di alamat yang lebih rendah dari nilai kemudian dalam array. Jadi mereka adalah terjamin. Tetapi mana-mana pembolehubah tertentu dalam, seperti int x dan int y dalam fungsi, tidak ada hubungan perlu antara alamat mereka. HANNAH: Satu lagi soalan di sini? PELAJAR: Jadi dalam buffer aliran, hanya buffer overflow hanya terjadi apabila anda telah, seperti, diberikan sejumlah array yang kemudian lebih besar? Seperti, boleh anda? Jadi, jika anda meminta sesuatu dari uyeler yang [00:49:05] HANNAH: Mm-hm. PELAJAR: Bolehkah mereka secara paksa memberikan sesuatu kembali yang lebih besar dari apa sahaja Anda telah diperuntukkan kepada mereka? HANNAH: Tentu, sehingga soalan pada dasarnya, boleh pengguna memberikan lebih daripada yang anda minta? PELAJAR: Ya. HANNAH: Dengan baik, anda boleh menghalang pengguna daripada melakukan hal itu. Anda secara khusus boleh mengatakan tidak memberi lebih banyak daripada bilangan x dengan bait Saya hanya diberikan anda ruang untuk x bait, x Bilangan aksara. Jadi itulah sesuatu yang anda mahu mengelakkan. Ya? Apakah perbezaan di antara tumpukan limpahan dan buffer overflow? [00:49:30] HANNAH: OK, jadi tumpukan overflow-- oh, apa yang perbezaan di antara timbunan limpahan dan buffer overflow? Oleh itu, kita mahu berfikir limpahan tindanan berlaku apabila kita benar-benar menumpuk ini panggilan fungsi. Katakan anda mempunyai fungsi rekursif, kerana kita tahu bahawa setiap kali anda memanggil fungsi, ia mendapat bingkainya sendiri di stack. [00:49:45] Oleh itu, kita menumpuk terlalu tinggi, dan maka kita mula melimpah. Dan kita menggunakan terlalu banyak memori, dan kita tidak punya tempat tinggal. Kita mendapat kesalahan itu. [00:49:51] Buffer overflow adalah dalam sebuah program. Kami mahu tidak semestinya mempunyai kehabisan memori dalam cara yang sama bahawa kita mungkin jika kita susun kejut fungsi yang banyak, tetapi kita menulis lalu memori kita tahu bahawa kita boleh menggunakan. Dan yang membolehkan kita untuk melakukan perkara-perkara kejahatan. Ya? [00:50:08] ROB: Ya, anda mungkin mahu hanya mengulangi ini, tetapi anda juga boleh berfikir dari limpahan tindanan seperti seperti jenis tertentu buffer overflow. Atau anda hanya memikirkan anda stack sebagai penampan yang sangat besar. Kemudian apabila anda melimpah anda stack, ia adalah jenis seperti buffer overflow. Tetapi overflow tumpukan hanya istilah tertentu yang digunakan apabila tindanan sendiri meluap. [00:50:24] HANNAH: Benar, sehingga untuk ulangi untuk video, itu yang boleh anda fikirkan stack overflow sebagai jenis tertentu buffer overflow. Cool? Apa-apa soalan lagi sebelum kita pergi? Awesome. [00:50:37] OK, sejuk, jadi mari kita bercakap tentang beberapa mesej ralat yang sama. Ini adalah sesuatu yang mempunyai muncul pada beberapa kuiz, sehingga sesuatu yang bernilai mengambil melihat kedua di. Saya pasti anda temui sekurang-kurangnya sebahagian dari orang- seperti yang anda lakukan masalah anda menetapkan. Jadi, pastikan anda boleh bercakap tentang mereka di kuis. [00:50:50] Jadi yang pertama adalah kesalahan segmentasi. Dan itulah yang kami masa cuba untuk mengakses memori bahawa kita tidak dibenarkan untuk mengakses. Jadi Klingon telah melihat hal ini, contohnya, dalam pelarian. Jika mengesan perlanggaran kembali batal, dan kemudian anda cuba untuk melakukan sesuatu dengan nilai tidak sah, komputer akan memberi Anda kesalahan segmentasi. Jadi satu, satu perkara yang penting untuk lakukan untuk cuba untuk mengelakkan ini adalah untuk sentiasa memeriksa null. [00:51:13] Anda mungkin juga telah melihat pengakuan tersirat fungsi. Jadi, ini adalah apa yang berlaku apabila Allison menunjukkan anda bagaimana kita membuat prototaip, kan? Jadi, bila kita mempunyai beberapa fungsi yang kita tentukan. Katakanlah kiub. Dan itu berlaku di bahagian bawah fungsi kami, di bawah utama. [00:51:27] Jika kita lupa untuk memberitahu komputer tentang kubus, apabila utama cuba memanggil kubus, komputer akan menjadi, seperti, oh ya ampun. Saya tidak tahu apa yang bermakna. Saya tidak tahu apa yang perlu dilakukan, di sini. Jadi prototaip kata jangan bimbang. Saya akan memberitahu anda. [00:51:42] Ia akan datang. Jangan berteriak pada saya. Jangan memberikan saya sebuah tersirat pengisytiharan fungsi. Oleh itu, jika anda menghadapi masalah ini, satu perkara yang anda akan mahu melakukan adalah memastikan anda mempunyai prototaip anda. OK? [00:51:53] Dan terakhir sekali, pengecam tidak diisytiharkan pada dasarnya apabila anda cuba menggunakan variabel yang anda belum diumumkan. Jadi tiba-tiba anda mula berkata seperti n plus plus. Dan komputer mengatakan apa yang n? Anda tidak pernah mengatakan kepada saya n adalah apa-apa. [00:52:06] Jadi satu perkara yang anda perlu memastikan anda lakukan ialah memberitahu komputer apa n. Jadi, sebagai contoh, n mungkin integer. Dan kemudian anda akan menghindari kesalahan ini. Apa-apa soalan mengenai kesalahan umum? Ya? [00:52:17] PELAJAR: Untuk yang tersirat pengisytiharan fungsi, boleh juga jadi kamu ditinggalkan satu perpustakaan anda seharusnya untuk memasukkan, daripada prototaip? [00:52:24] HANNAH: Benar, sehingga soalan itu, anda boleh juga mendapat ralat ini jika anda lupa untuk menyertakan perpustakaan. [00:52:28] PELAJAR: Ya. [00:52:29] HANNAH: Boleh, kerana dengan cara yang sama yang kita mahu meletakkan prototaip kami sebelum fungsi utama, jika kita mempunyai perpustakaan, mereka akan pada dasarnya termasuk prototaip, termasuk definisi fungsi. Pertanyaan yang bagus. [00:52:40] PELAJAR: Untuk segmentasi yang kesalahan, yang juga akan terjadi jika kita, seperti, cuba untuk mengakses variabel, seperti, dalam berbeza [didengar] a daripada itu dinyatakan dalam? HANNAH: Tentu, begitu juga kita mendapatkan kesalahan segmentasi jika kita cuba untuk mengakses berubah daripada ruang lingkup? Apakah itu pertanyaan? PELAJAR: Ya. HANNAH: Beautiful. Jadi mungkin, anda akan mendapatkan kesalahan pengecam tidak diisytiharkan sebagai gantinya. Jadi ia hanya akan mengatakan Saya tidak tahu apa itu. Cool, apa-apa lagi? Ya, OK, indah. [00:53:10] Semua righty, jadi rekursi. Jadi saya sebutkan beberapa kali supaya kita mendapatkan limpahan tindanan kerana kita panggil kami fungsi rekursif berkali-kali. Kami mendapatkan semua timbunan ini frame, bla, bla, bla. Apa pun adalah fungsi rekursif? Nah, fungsi rekursif adalah apa-apa fungsi yang menyebut dirinya. [00:53:26] Beberapa hal yang harus diperhatikan ketika anda melaksanakan fungsi rekursif, jangan lupa untuk memasukkan satu kes asas. Satu kes asas adalah titik di mana kita berakhir. Jadi, sebagai contoh, jika kita coding, , Berkata, Fibonacci secara rekursif, kita mahu memastikan bahawa apabila kita kepada 0 atau nombor Fibonacci yang pertama, kedua-dua nombor mempunyai kes-kes ini, kerana mereka tidak bergantung pada hal-hal yang telah diturunkan sebelumnya. Mereka yang mempunyai nilai-nilai mereka sendiri. [00:53:51] Beberapa pro kepada rekursi, yang merupakan soalan yang telah kita lihat pada masa lalu kuiz. Mereka boleh menyebabkan lebih banyak ringkas, kod elegan. Dan banyak fungsi, yang banyak algoritma yang berbeza, sebenarnya meminjamkan diri mereka kepada rekursi. Definisi mereka mungkin rekursif dalam dan dengan sendirinya. Jadi Fibonacci adalah satu. Faktorial adalah satu. Gabung Urut satu-- semua perkara yang anda boleh melihat. OK, apa-apa soalan? Ya? [00:54:15] PELAJAR: Apakah kes sudut serupa dengan kes asas? Atau itu untuk beberapa yang lain jenis [terdengar]? [00:54:22] HANNAH: Tentu, sehingga kes sudut adalah any-- jadi adalah kes sudut yang sama seperti kes asas? Kes sudut apa-apa yang anda kod berperilaku sedikit berbeza. Kes asas adalah semacam berkaitan, bahawa mereka seperti hal-hal tertentu yang anda mahu melihat. Tetapi idea kasus dasar ialah anda mahu fungsi rekursif anda berhenti pada satu ketika. Ia tidak boleh menyimpan menamakan diri selama-lamanya. Ia perlu berhenti pada satu ketika. [00:54:49] ROB: Ya, sering, kes-kes asas anda mungkin contoh pangkalan sudut. [00:54:53] HANNAH: Benar, sejuk, apa-apa? [00:54:55] PELAJAR: Bolehkah anda menjelaskan mendasarkan lebih sedikit? Saya kurang memahami [Terdengar] kes asas. [00:55:01] HANNAH: Daripada kes pangkalan? [00:55:02] PELAJAR: kes Base, yeah. [00:55:03] HANNAH: Ya, pasti. Mari kita lihat. Adakah kita telah mencatatkan di sini? Ya, kita lakukan. OK, sehingga benar-benar cepat, saya akan cuba untuk menulis cukup besar jadi anda boleh lihat pada skrin. Mari kita bercakap tentang, benar-benar cepat, Fibonacci. Jadi saya akan memberikan anda urutan Fibonacci. Anda dapat melihat definisi. [00:55:17] Pada dasarnya, setiap nombor dalam urutan adalah jumlah dua nombor sebelumnya. OK, jadi cara yang saya baru diterangkan Fibonacci, Anda boleh mendengar rekursi, kan? Apabila saya berkata setiap nombor adalah jumlah dari dua angka sebelumnya, kita boleh mengatakan OK. Nah, Fibonacci ke-n number-- jadi mari kita katakan kita ada fungsi ini disebut bikinan fib-- n akan menjadi sama dengan fib n tolak 1 plus-- maaf, kami akan pergi ke baris seterusnya lebih bikinan sini-n tolak 2. [00:55:52] OK, jadi ini kerja-kerja besar jika anda melihat, sebagai contoh, sifar, satu, dua, tiga, empat, nombor Fibonacci kelima, di mana anda boleh mengatakan bahawa 5 adalah sama dengan 2 ditambah 3. Tetapi bagaimana jika anda berada di awal? Bagaimana jika anda baru memukul kedua-dua nilai pertama? [00:56:08] Untuk mendapatkan 1, anda tidak boleh mengatakan menambah dua sebelumnya, kerana itu sifar dan- Saya tidak tahu. Jadi pada satu masa nanti, kita perlu berhenti. Pada satu ketika, kita perlu untuk mengatakan bahawa ini dua hanya mempunyai definisi mereka sendiri. Jumlah 0 Fibonacci adalah 0. Dan bilangan Fibonacci yang pertama adalah 1. [00:56:26] Jadi cara saya mungkin kod ini, saya akan mengatakan jika n adalah kurang daripada dua orang, kemudian hanya kembali n. Dan itu akan menjadi kes asas saya. Begitulah cara saya tahu untuk berhenti dengan fungsi rekursif. Jelas? Awesome. Apa pun di rekursi? Indah. [00:56:45] Mari kita cepat bercakap tentang carian dan waktu semacam berjalan. Dan kemudian saya akan memberikan beberapa Davin masa untuk bercakap tentang coding contoh. Jadi di sini adalah carian utama dan macam yang anda perlu tahu mengenai. Guarantee-- Saya tidak dapat memberi jaminan, kerana saya tidak pernah melihat quiz-- yang tetapi ini datang kuiz selepas kuiz selepas berhenti. Jadi pasti menggunakan carta ini. Seperti, mengambil carta ini. Memasukkannya ke contekan anda. Anda akan menjadi orang yang bahagia. [00:57:09] Ini memberitahu kita masa lari dari setiap ini jenis carian dan algoritma. Jadi carian linear, anda boleh melihat jangka masa, dan yang sama dengan carian binari. Kembali apa algoritma ini lakukan, ide umum. Lihatlah beberapa pseudo, jika memberi kod itu sendiri. [00:57:25] Anda akan melihat bahawa bubble sort mempunyai atas terikat dalam kes yang paling teruk n kuasa dua. Jadi jika array kita benar-benar ke belakang sebelum kita mahu mengatasinya, kita akan mengatakan bahawa itu akan mengambil langkah-langkah n kuasa dua. Tetapi dalam kes ini, sehingga batas bawah untuk kes ini, akan menjadi jika ia sudah sempurna disusun. Lalu apa yang harus kita lakukan adalah memeriksa bahwa itu disusun. Apakah ada soalan di sini? [00:57:47] PELAJAR: Apabila akan Anda ingin menggunakan semacam? Jenis. Saya hanya ingin tahu. [00:57:52] HANNAH: Apabila akan anda ingin menggunakan jenis seleksi? Yang satu ini? Yang yang n kuasa dua dalam kedua-dua kes? [00:57:55] PELAJAR: [didengar]. [00:57:56] HANNAH: Jadi ia amat berbeza. Jika anda mempunyai khusus keperluan untuk program anda, seperti hal-hal seperti jika kita hanya berkata melaksanakan sorry-- search-- melaksanakan semacam, anda akan mungkin mahu pergi untuk salah satu daripada orang-orang yang mempunyai kes terbaik n, atau terikat rendah di mana-mana yang terbaik n. Tetapi mungkin ada perkara-perkara tertentu seperti, katakan, swap adalah benar-benar mahal untuk sebab-sebab tertentu. Maka anda akan mahu melakukan semacam gelembung, kerana anda perlu melakukan begitu banyak swap, hal-hal seperti itu. Mana-mana ya other--? [00:58:23] PELAJAR: Adakah ia [terdengar] untuk mengatakan bahawa [terdengar]? HANNAH: Itu satu perkara yang akan memberitahu anda jika anda sedang melihat pelaksanaannya. Cara yang saya akan benar-benar berfikir tentang mengapa ia n kuasa dua ialah kami perlu menjalankan melalui array kita panjang n, setiap kali membuat paling banyak, n swap. Dan kita perlu melakukan proses ini n masa. [00:58:46] Oleh itu, apabila anda perlu membuat paling banyak, n swap dan untuk n berjalan melalui array, ada akan dapat n kuasa dua. Tetapi ya, ini akan didedahkan melalui dua ini untuk gelung, sebagai soalan asked-- atau bersarang untuk loop, saya tidak mengatakan. OK? [00:59:00] Dan kemudian menggabungkan semacam, yang adalah jenis yang paling cepat kita sekarang, atau yang telah kita pelajari dalam CS50, tahu bahawa algoritma utama adalah idea ini membobol buah disortir dan kemudian menggabungkan bersama ini bit disusun. Dan akan membawa kita log n n log. Apa-apa soalan mengenai pencarian dan macam sebelum saya menyebarkannya? Mari kita lihat. [00:59:21] Oh, yang dikaitkan senarai. Maaf, saya punya satu topik yang lebih. OK, mengagumkan, yang dikaitkan senarai. Masalah dengan array, mereka mempunyai saiz yang tetap. Jadi, jika anda tidak tahu bagaimana besar input anda akan menjadi, Anda tidak mahu membuat array. Kerana jika kita membuat pelbagai yang terlalu kecil, kita mungkin mengalami buffer overflow. [00:59:35] Jadi, daripada, kita boleh melakukan sesuatu dengan daftar link, yang membolehkan kita untuk memiliki dinamik struktur data bersaiz yang akan membolehkan kita untuk menyimpan satu jumlah yang lebih fleksibel data. Jadi dalam setiap nod pada kami linked list, kita mempunyai dua keping. Kami mempunyai nilai sebenar yang menyimpan. Jadi itulah perkara yang anda lakukan lihat dalam array, misalnya. Kemudian kami juga menjejaki dari pointer ke perkara yang akan datang dalam ingatan. [01:00:04] Tidak seperti array, yang kita tahu semua akan untuk adalah-- unsur dan semua adalah satu demi satu dalam memory-- terkait senarai boleh menjadi mana-mana sahaja dalam ingatan. Mereka lokasi sewenang-wenang. Jadi jika kita benar-benar pergi menemui mereka, kami perlu menyimpan maklumat tentang Perkara seterusnya dalam senarai kami. [01:00:19] Dan kemudian untuk mengetahui di mana daftar itu secara keseluruhan adalah, semua kita perlu menjejaki adalah elemen yang pertama dalam senarai dikaitkan kami. Dan yang akan membolehkan kita untuk menindaklanjuti. [01:00:31] Jadi, ini adalah bagaimana anda boleh menentukan mode. Ini adalah kesempatan besar untuk mengambil keuntungan dari struct. Kerana anda mempunyai idea ini, baik, untuk nod tertentu, saya mempunyai dua keping. Saya mempunyai nilai sebenar itu sendiri. Dan kemudian saya mempunyai pointer ke elemen berikutnya dalam senarai yang dipautkan. Jadi anda lihat, kita mempunyai n bilangan bulat, yang akan menjadi nilai sebenar, dan kemudian pointer ke nod, yang disebut akan datang. Sehingga akan menjadi seterusnya elemen dalam linked list kami. PELAJAR: Ya? Adakah anda perlu menentukan bahawa bintang itu ialah seperti struct? [01:01:01] HANNAH: Ya, jadi kerana ini hampir seperti sejenis, ia seolah-olah seperti sebuah rekursif definisi dalam kita yang perlu tahu apa simpul adalah dalam untuk mencari nod. Oleh kerana ia tidak benar-benar tahu apa nod benar-benar sehingga kita sampai ke akhir this-- dan selepas ini kita hanya dapat menyebutnya yang node-- dalam definisi ini, kita perlu menyebutnya nod struct. Pertanyaan yang bagus. Apa-apa lagi? Ya? [01:01:26] PELAJAR: Mengapa kita harus mengatakan nod dua kali? Karena ketika kami berada di [terdengar] kami hanya harus melakukannya dalam koma, tetapi sekarang kita perlu mencari yang nod struct? [Terdengar]. HANNAH: Jadi saya percaya dalam contoh yang lalu, kami hanya menciptakan bila-bila masa anda mahu menggunakan pelajar selepas itu, anda terpaksa menggunakan struct node-- Saya sorry-- pelajar struct. Ini membolehkan kami untuk, setelah fakta, hanya penggunaan nod menambah jenis baru, pada dasarnya. Yang masuk akal? Oleh itu, kita harus kembali dan melihat kode sebelumnya. Tetapi saya akan rasa itu kami tidak menggunakan typedef. Dan kita bertanya, mengapa kita perlu menggunakan typedef? Typedef membolehkan kita untuk menghindari struct kata pada mulanya. Ya? PELAJAR: Apakah jenis soalan akan datang dari segi dari segi nod dan daftar link? [01:02:10] HANNAH: Jadi satu perkara yang kita boleh mengatakan berapa mungkin anda mencari melalui senarai berpaut? OK, kerana itu adalah sedikit lebih rumit daripada jika kita mencari melalui array. Kami hanya dapat melihat unsur sifar, elemen satu, dua unsur, bla, bla, bla. Jika kita ingin mencari senarai berpaut, kita benar-benar harus mengikuti labirin ini sedikit petunjuk. Jadi mari kita benar-benar pergi melalui ini benar-benar cepat. Apa yang kita boleh lakukan dalam memerintahkan supaya- katakanlah kita ingin hanya beralih melalui senarai sepenuhnya dikaitkan kami. Kami akan bermula di kepala. Dan kemudian untuk pindah ke elemen seterusnya, bukan hanya menokok sebanyak satu seperti kita mungkin di akan melalui array, yang kita benar-benar akan mengikuti penunjuk yang akan datang, sehingga kami dapat mencari di memori elemen seterusnya adalah. Jadi saya tahu ia tidak cukup untuk mengambil semua ini di saat ini, tetapi anda akan mempunyai slaid ini. Jadi, anda boleh pergi melalui ini sedikit lebih lambat. Tapi pada dasarnya, apa yang kita mahu lakukan adalah mengikuti petunjuk ini melalui keseluruhan dalam senarai yang dipautkan. Jadi ini adalah satu soalan anda mungkin akan diminta. [01:03:01] Sesuatu untuk melihat dengan penyisipan, katakanlah kita mahu meletakkan elemen baru di depan linked list kami. Kita perlu berhati-hati mengenai perintah itu di mana kita ditugaskan semula pointer. Sebab katakanlah aku hanya berkata OK. Membuat titik kepala ke elemen baru ini. Hanya membuat titik untuk 1 Kemudian, kami telah dasarnya kehilangan sisa senarai kami, kerana saya tidak ingat di mana 2 nyawa. [01:03:25] Jadi kita harus lakukan dalam perintah yang sangat khusus. Pertama, kita membuat baru titik elemen ke kepala. Dan kemudian kita membuat kepala menunjuk kepada elemen baru. Jadi mari kita lihat apa yang kelihatan seperti dengan arrows-- begitu saja. Jadi pertama anda baru titik elemen ke kepala tua. Dan kini, kami mempunyai kepala menunjuk ke elemen pertama yang baru. Sebarang pertanyaan dengan ini? [01:03:49] OK inilah beberapa kod lagi, sesuatu untuk melihat sedikit kemudian. Dan sekarang saya akan menyerahkannya kepada Davin untuk GDB dan sedikit amalan coding di atas kertas. Indah. [01:04:01] ROB: Dan Rob. [01:04:01] HANNAH: Oh, Davin dan Rob. Saya minta maaf. [01:04:03] PELAJAR: Woo! [01:04:08] ROB: Terima kasih. [01:04:09] Davin: Adakah anda ingin mengatakan segala-galanya cepat nyata? ROB: Ya, ya. Davin: Setelah aku sampai. OK, manakala Rob meletakkan mikrofon, jadi apa yang GDB? Semua orang seharusnya melihat GDB di kelas dan juga di waktu pejabat. Dan anda harus menggunakannya. Jadi apa GDB? Sesiapa sahaja? [01:04:28] PELAJAR: Ini debugger. [01:04:29] Davin: Ini debugger. Dan apakah yang membolehkan anda untuk melakukan? Seperti, mengapa kita suka GDB? PELAJAR: Untuk melambatkan program. Davin: Benar, jadi anda boleh berjalan melalui itu seperti kadar yang manusia. Jadi, apa adalah beberapa perintah yang boleh anda lakukan? Nah, rehat mungkin perintah kegemaran anda. Oleh kerana yang membolehkan anda memecahkan program dan benar-benar berjalan melaluinya baris demi baris. [01:04:44] Run membolehkan anda untuk menjalankannya. Selanjutnya, seperti melangkah melalui. Apa yang di antara depan dan langkah? Tunggu, mengatakan bahawa dengan kuat. Ia adalah benar. [01:04:54] PELAJAR: [didengar]. [01:04:55] Davin: Ya, mengagumkan. Mahu, langkah selanjutnya dan, jika you're-- katakanlah anda mempunyai fungsi yang anda tentukan. Katakanlah beberapa fungsi utama anda, dan anda hanya memukul ke depan, akan datang, akan datang. Anda benar-benar akan melaksanakan fungsi itu, tetapi anda akan melompat ke atasnya. Jika anda memukul langkah, atau s atau apa sahaja, anda akan benar-benar melompat ke dalam fungsi itu, dan kemudian anda boleh memukul seterusnya untuk melihat panggilan yang berbeda di dalam fungsi tersebut. Ya? [01:05:16] PELAJAR: Adakah cara yang untuk melompat, seperti, menarik diri? Davin: Selesai, ya, selesai dengan melompat Anda. Jadi ia akan menyelesaikan yang fungsi, dan kemudian anda akan menjadi kembali utama, misalnya. Cetak akan mencetak satu masa. Sesuatu yang saya selalu gunakan adalah paparan. Paparan akan mencetak keluar terus-menerus sepanjang keseluruhan yang dari program anda. [01:05:32] Sebagai contoh, jika anda di buat untuk gelung, dan anda mahu melihat bagaimana ada sesuatu yang berubah-ubah, dan anda tidak mahu, seperti, terus-menerus lakukan seperti cetak, cetak, cetak, paparan akan memaparkan pembolehubah yang terus menerus, setiap kali anda tekan Next. Dan terus. Jadi GBD, itu GDB. [01:05:47] PELAJAR: Apa yang di mana anda [terdengar]? Davin: Apa itu? [01:05:52] PELAJAR: Apa the-- pembolehubah tempatan. ROB: Ada sesuatu yang benar-benar seperti penduduk setempat atau sesuatu. Saya can't-- [01:05:58] Davin: Mungkin sesuatu seperti itu, ya. [01:05:59] HANNAH: Di penduduk setempat? [01:06:00] Davin: Itu sahaja. Itu satu. ROB: Beautiful. [01:06:03] Davin: Ya. [01:06:04] PELAJAR: Apakah yang terus lakukan? [01:06:06] Davin: Ia continues-- sehingga hanya akan terus program anda. Jadi, jika anda melanggar dan tekan berterusan, ia akan untuk hanya menjalankan program sehingga hits istirahat itu lagi. Sebagai contoh, jika anda pecah dalam suatu fungsi, dan anda akan suka untuk gelung atau sesuatu seperti itu, dan anda menekan terus, ia akan terus dan kembali ke rehat itu. Atau tidak ada rehat, ia akan meneruskan dan menyelesaikan program ini. [01:06:22] ROB: Jadi hanya suka berhenti menjalankan pada takat putus yang pertama anda memukul, jika anda kemudian tekan terus, ia akan terus berjalan sampai ia breakpoint seterusnya. Dan kemudian terus akan pergi untuk breakpoint seterusnya. Davin: Sebarang pertanyaan lain di GDB? Jadi saya rasa pada masa lalu, kami telah meminta anda apa yang GDB adalah dan memberikan contoh beberapa perkara yang boleh lakukan dengan GDB, jadi sederhana yang sebenar, tetapi ya. Terdapat anda pergi. Dan node? [01:06:43] ROB: Ya, jadi arah mana itu? PELAJAR: Itu saja. Davin: Tunggu. ROB: Orang ini? Davin: Yang itu. ROB: Orang ini, oh, saya tidak sedar. Oleh itu, kita tidak jelas pada apa the-- saya tidak tahu siapa was-- tetapi soalan. Kita tidak tahu apa yang anda bertanya tentang hal itu, jadi untuk menjelaskan sesuatu. Jadi pertama, seperti yang saya katakan sebelum ini, typedef Anda selalu menggunakan hanya mencipta nama panggilan untuk jenis. Jadi di sini, nama samaran yang kami cipta ini adalah untuk jenis nod struct. [01:07:13] Jadi pertama, mengabaikan nod ini dalam typedef, jadi ini struct nod keriting bersedia ke kerinting seterusnya penjepit adalah jenis nod struct. Dan kita perlu nod yang di sana, kerana kita perlu rujukan nod di sini. Jadi dengan ini jenis struct rekursif, Anda perlu memberikan ini struct nama, atau lain anda tidak boleh mengatakan nod struct di sini. Padahal sebelumnya dengan pelajar ketika kami sedang ditaip, saya fikir, kita tidak harus mengatakan pelajar di sana, kerana kita tidak harus mengatakan struct pelajar di dalam struct itu sendiri. Jadi ia rekursif yang memaksa kita untuk mengatakan nod sana. [01:07:43] Nod Ini hanyalah nama kami memberikan nod untuk typedef. Jadi nod yang tidak yang sama dengan simpul tersebut. Tetapi nod struct ini adalah sama dengan nod struct. Davin: Jadi, setiap kali anda membuat panggilan, seperti, nod dalam fungsi utama anda, anda tidak akan harus mengatakan nod struct. Anda hanya boleh mengatakan nod, kerana nod adalah different-- yang pada dasarnya kau mengatakan, OK. Daripada perlu memanggil nod struct dalam kod saya, Saya hanya mahu untuk mengubah nama itu sebagai nod untuk membuatnya lebih mudah. [01:08:04] ROB: Jika anda selalu menggunakan typedef, maka ini adalah satu-satunya tempat yang anda akan mempunyai untuk mengisytiharkan pembolehubah dengan nod struct bintang, ya. [01:08:14] Davin: OK, jadi bahagian akhir sukar untuk mengajar because-- ROB: Apa? [01:08:24] Davin: Kerana itu coding di atas kertas. Jadi setiap tahun kita ada kod pada kertas soalan. Jadi saya fikir tahun lalu, 12 daripada 80 mata adalah kod di atas kertas. Tahun sebelum itu, 10 daripada 80, tahun sebelum itu, 20 daripada 100, jadi cukup beberapa ini. Jadi, anda akan mempunyai untuk dapat untuk kode fungsi-fungsi ini dengan tangan. [01:08:40] Jadi saya pikir kita mungkin pergi melalui beberapa daripada mereka dan lihat berapa orang, jenis berjalan melalui mereka perlahan-lahan dengan orang-orang. Jadi secara umum, dan strlen atoi telah sangat popular. Tahun lalu, saya fikir kita mempunyai GetPositiveInt dan RandomInt. Tetapi pow, jadi kuasa, juga yang positif juga. Mari kita hanya mengikut sahaja mungkin satu atau dua ini bersama-sama. Apa yang orang mahu melihat? [01:09:05] PELAJAR: Atoi. PELAJAR: Ya. Davin: Atoi? PELAJAR: [didengar]. Davin: OK, saya akan untuk melakukannya di papan tulis. Adakah anda mempunyai keutamaan jika saya melakukannya di sini atau di sana? Di sana, Gabe mengatakan ada. [01:09:16] ROB: Dan ini adalah pemikiran umum kepada soalan-soalan ini coding. Cuba untuk menulis sesuatu. Jangan biarkan kosong. [01:09:22] Davin: Ya. ROB: Jika anda boleh mendapatkan kembali jenis yang tepat, atau mungkin kita boleh memberikannya kepada Anda, tetapi jika anda boleh, seperti, menulis tandatangan fungsi umum, Jika anda boleh mendapatkan hal-hal dasar yang benar, atau kasus sudut, atau mengingat cek batal, selama anda mempunyai beberapa perkara, maka mungkin kita boleh memberi anda pasangan mata untuk masalah. Jangan hanya biarkan kosong. [01:09:36] Davin: Ya, dan jika anda hanya sekali bingung bagaimana untuk sebenarnya bertukar menjadi kod. Jika anda menulis pseudo, itu cukup baik juga. Jadi seperti, itu pertanyaan enam titik, dan anda menulis pseudo yang betul, anda akan mendapat sekurang-kurangnya dua mata. Jadi jangan hanya meninggalkan mereka kosong. Cuba untuk meletakkan sesuatu. [01:09:50] ROB: Ia perlu menjadi pseudo benar, walaupun. [01:09:51] Davin: Ya. ROB: Jadi kita umumnya kurang lembut dengan bug dalam pseudo. Davin: OK, jadi kalian ingin melihat atoi. OK, jadi hanya really-- jadi apa yang ingin anda lakukan adalah anda akan menjadi diberikan beberapa jenis nombor. Tetapi jumlah ini tidak akan menjadi int, kan? Apa yang ia akan menjadi? [01:10:08] PELAJAR: [didengar]. [01:10:09] Davin: Ia akan menjadi tali, kan? Jadi, jika anda diberi yang string-- mari kita say-- [01:10:13] ROB: Adakah saya perlu menarik penyunting? Saya boleh tarik up-- [01:10:16] Davin: Oh, anda mahu melakukannya on-- [01:10:16] ROB: Anda pilih papan? [01:10:17] Davin: Apa yang anda mahu lakukan? Maksud saya, adakah anda ingin melakukannya dengan tangan? Atau adakah anda ingin melakukannya dengan komputer? [01:10:21] ROB: Apakah dengan tangan. [01:10:22] Davin: [Ketawa] ROB: Apakah dengan tangan. [01:10:23] Davin: OK, jadi ia akan menjadi atoi. Jadi apa itu-- saya maksudkan, kita akan mungkin memberikan ini kepada anda. Tetapi apa yang ia akan kembali? [01:10:29] PELAJAR: Int. [01:10:29] Davin: Ia akan kembali int, kan? So-- Saya tidak mahu untuk melakukannya di sana. Saya akan melakukannya di sini. [01:10:34] ROB: Anda boleh tarik ke bawah dan kemudian tolak di atasnya. [01:10:38] Davin: yeah. [Ketawa] perubahan permainan. OK, jadi ia akan menjadi atoi int, dan apa yang ia akan mengambil? Sebuah bintang char, jadi hanya tali, bintang s, seperti itu. [01:10:57] ROB: Nice bintang, bagus. Davin: ini mungkin tidak berada di sana, OK. ROB: Ya. Davin: OK, jadi yang pertama perkara yang anda mahu do-- saya tidak tahu apakah ada yang kelihatan di solutions-- amalan tetapi apa yang akan mahu lakukan adalah anda akan mahu mempunyai gelung, kerana anda akan mahu untuk benar-benar langkah melalui string ini. Jadi helpful-- jadi katakanlah kita akan untuk loop, dan kita akan melangkah melalui setiap elemen string. Berapa lama itu? Berapa kali lagi kita akan untuk beralih di bahawa untuk loop? PELAJAR: Sterln? Davin: Sterln, ya. Jadi, bila panjang int sama sterln s. Dan hanya ingin tahu, mengapa ia selalu baik yang lebih baik untuk melakukan ini di luar gelung? Seperti, mengapa lebih baik untuk memanggil fungsi ini di luar lingkaran? Hanya kewarasan cepat memeriksa? Ya? PELAJAR: Jadi, anda tidak harus tetap memeriksa ia. Anda boleh hanya [terdengar]. [01:11:59] Davin: Tepat sekali, jadi ya, apa katanya. Oleh itu, kita tidak perlu terus memeriksa ia. Sebagai contoh, jika saya memanggil fungsi ini dalam satu lingkaran, kemudian saya akan terus menelepon fungsi ini beberapa kali. Dan itu akan mengurangkan kecekapan program anda. Sehingga selalu berguna menyatakan hal itu di luar. [01:12:12] ROB: Itu berkata, pada mana-mana masalah-masalah ini, cukup banyak selama anda mendapatkan penyelesaian bekerja, anda akan mendapat kredit penuh. Jadi jangan bimbang jika reka bentuk anda benar-benar mengerikan. Ia mungkin akan membuat kita kecewa membaca kod anda. Tapi selama ia berfungsi, Anda akan mendapatkan mata. [01:12:28] Davin: Ya. OK, jadi kemudian saya akan menyatakan beberapa pembolehubah. Ia hanya akan memanggil jumlah int. Dan saya akan menetapkan ini sama dengan sifar, seperti itu. Dan itu hanya akan menjadi pemegang tempat. Sehingga akan menjadi apa yang saya akan kembali. Jadi saya akan akhirnya kembali jumlah daripada program ini. Jadi saya mempunyai kedua-dua pembolehubah. Saya mempunyai panjang. Saya mempunyai sejumlah wang. Dan sekarang mari kita terjun ke dalam tali kami. [01:12:48] Sehingga memungkinkan kita untuk gelung. Jadi empat int saya sama dengan 0 w, manakala I adalah kurang dari panjang saya plus plus. Dan sekarang-- ROB: Nice. Davin: OK, dan sekarang di sini datang daging kod kami. Jadi anda sebenarnya boleh melakukan ini garis dasarnya dalam satu. Jadi apakah ada yang punya idea daripada apa yang kita akan lakukan seterusnya? OK, jadi tidak apa-apa. Oleh itu, kita lakukan untuk mengatakan jumlah equals-- biarkan aku lari cepat jumlah over-- ini sama dengan jumlah 10 kali plus-- kami akan mengambil dikurangi saya satu kutipan 0 satu kutipan dilakukan, seperti itu. ROB: Sangat intuitif. [01:13:56] Davin: Hancur itu. OK, jadi someone-- aku mendapatkannya, aku mendapatkannya. OK, jadi ini jelas akan naik. Apa artinya ini? Jadi apakah ada yang tahu apa artinya ini? Bolehkah semua orang melihat perkara ini? Tidak, tiada siapa yang boleh melihat ini, OK. Saya akan supaya- [01:14:18] ROB: Saya akan menulis formula di halaman ini. Davin: OK, Rob akan melakukannya pada komputer, yang menyenangkan. ROB: Ya Tuhan. Atau saya tidak akan. Davin: Stand by. PELAJAR: Saya mempunyai satu soalan. Davin: Ya, tentu. PELAJAR: [didengar]? Davin: OK, sehingga benar-benar, seperti, hanya secara umum, jika anda adalah untuk meletakkan, seperti, di int pengakuan ini I sama dengan panjang 0 koma sama sterln, bahawa- [01:14:59] PELAJAR: [didengar]. [01:15:01] Davin: Tidak apa-apa, kerana bahawa- PELAJAR: Mengapa anda bahkan perlu menggunakan panjang? Mengapa tidak boleh kita hanya [terdengar] sterln s, seperti seluruh masa [terdengar]? [01:15:08] Davin: Maksudnya di sini? [01:15:09] PELAJAR: Ya. Davin: Karena setiap kali ini untuk berjalan gelung, ia akan menilai keadaan ini. PELAJAR: Benar. Davin: Dan jika anda mempunyai sterln ada, maka itu akan mempunyai untuk benar-benar memanggil fungsi yang setiap saat. Jadi bukan hanya membandingkannya dengan int, Anda akan memanggil fungsi dan kemudian membandingkannya untuk nilai kembali. Ya, jadi ia hanya, ya. [01:15:28] Nice, OK, jadi sekarang semua orang boleh melihatnya. Apa does-- ini adalah seperti, ini adalah ia. Ini adalah kesesakan, di sini. Apa maksudnya? Apa yang saya lakukan? Ya, idea? Ya? [01:15:43] PELAJAR: Nah, jadi apabila Anda memasukkan array, Anda akan pergi dari kiri ke kanan, jadi anda akan pergi di perpuluhan dari tombol [terdengar]. Davin: Tepat sekali. PELAJAR: Jadi masing-masing Anda harus memperbanyak apa yang anda lihat sebagai nilai int dengan masa yang anda sampai ke langkah yang lebih daripada satu. [01:15:59] Davin: sempurna, sempurna, jadi sebagai contoh, mari kita mengatakan saya memberi you-- Saya akan menulis di sini. Tidak, saya tidak. Saya akan menulis di sini. Katakanlah saya memberikan anda 76, kan? Katakanlah saya memberikan 76. Itulah rentetan untuk memulakan dengan, OK? [01:16:15] Jadi panjang adalah apa? 2, kan? Jumlah adalah 0. Kemudian kami melompat dalam untuk gelung. OK, lelaran pertama ini, apa yang ia akan menjadi? Ia akan menjadi jumlah adalah 0. Jadi jumlah kali 10 0. Itu tidak bermakna. Lalu apa maksud tindakan ini? PELAJAR: [didengar]. [01:16:33] Davin: Ia akan mengubah itu watak dalam integer, bukan? Ia adalah jenis seperti dengan anda masalah set-- light-- ini ia adalah jenis seperti dengan permasalahan yang ke Visioneer. Anda sedang berhadapan dengan nilai-nilai ASCII. Jadi jika saya memberikan anda, seperti, tujuh, tetapi ia aksara, dan anda mahu tahu, OK, apa yang angka itu? Ya, anda boleh, yeah. Jadi apa yang angka itu? Anda boleh mengurangkan 0 daripadanya, tetapi anda harus mengurangkan 0, karakter. [01:16:59] Dan di mana beberapa orang mendapatkan tersandung, mereka seperti, OK, baik, saya perlu tahu nilai-nilai ASCII untuk kuiz ini? Tidak, anda pasti tidak perlu tahu ASCII nilai-nilai, seperti, huruf kecil a, huruf besar A, sifar. [01:17:09] ROB: Tidak ada alasan yang pernah meletakkan ini di dalam lembaran cheat. [01:17:12] Davin: Pasti tidak membazirkan ruang anda dengan ini. Anda boleh literally-- hanya bukan mengatakan 48, seperti sehingga sana, yang setara dengan mengatakan satu, satu koma atas, seperti itu, betul-betul sama. [01:17:27] ROB: Anda hampir boleh berfikir ia sebagai jika- Tuhan, saya perlu saya, oops-- Anda hampir bisa memikirkan ia seolah-olah kita mempunyai sesuatu seperti hash yang menentukan 0 48. Yang tidak akan bekerja. Tetapi menganggapnya sebagai satu kutipan 0 petikan tunggal, dan untuk semua aksara. Anggap saja sebagai pemalar yang mewakili nilai ASCII. [01:17:47] Davin: Ya. OK, jadi kali pertama melalui, jadi dengan 76-- jadi kali pertama melalui, ini hanyalah watak 7 tolak watak 0, dan mereka adalah tujuh integers-- baik, orang-orang tujuh ruang dari satu sama lain pada carta ASCII atau apa sahaja. Jadi itu akan mengembalikan int dari 7. Jadi sekarang, jumlah sama dengan 7. [01:18:08] OK, baik, mari kita melompat ke dalam ini untuk loop lagi. OK, sekarang jumlah kali 10. Jadi anda secara berkesan menggerakkan 7 ke kiri. Adakah ini masuk akal? Anda secara efektif bergerak ke kiri. [01:18:19] Dan kemudian anda add-- ini akan menjadi 6 tolak 0. Itulah 6. Oleh itu, ia akan menjadi 70 ditambah 6. 76, itu nombor anda. Jadi tidak kira apa jumlah Aku memberimu, ia perlahan-lahan hanya akan menggeser nilai-nilai yang lebih besar ke kiri, 1 faktor 10 setiap kali dalam gelung, dan kemudian menambah yang diperlukan. [01:18:37] Di belakang? PELAJAR: Kami tidak perlu melakukan apa-apa yang mendaftar masuk program ini? [01:18:41] ROB: Jadi, sejauh yang memeriksa juga dengan program ini, kami akan memberitahu anda cukup banyak apa yang anda perlu menyemak. Jika kita tidak memberitahu anda apa-apa, maka secara umum menganggap anda harus memeriksa perkara-perkara yang paling. Seperti yang anda mungkin, hanya untuk selamat, anda mungkin perlu menyemak hey, adalah s batal? Kemudian saya tidak tahu apa yang harus kembali. Tapi kami akan memberitahu anda perkara seperti ini. 0, saya tidak tahu. [01:18:59] Davin: Dan mengapa anda mahu untuk memeriksa kembali jika s sama dengan nol? PELAJAR: [didengar]. Davin: Kerana char bintang. Ini pointer. Jadi yang bisa diterima deklarasi, saya boleh berkata, OK, s sama dengan nol, karena boleh menjadi penunjuk ke null. Jadi, setiap kali anda mempunyai pointer dalam laluan anda dalam seperti ini, Anda mungkin perlu menyemak. Kerana jika anda tidak semak itu, dan maka anda kemudian pergi ke anda untuk loop, dan anda doing-- lari cepat ke bawah. Lari cepat ke bawah. [01:19:22] ROB: Maaf, itu sahaja. [01:19:23] Davin: Dan, seperti, jika itu adalah batal, dan kemudian anda melakukan ini, apa kesalahan yang anda akan dapat? PELAJAR: Anda akan mendapatkan kesalahan yang ditetapkan. Davin: Anda akan ditetapkan kesalahan, benar, kerana anda cuba indeks ke null. Oleh itu, anda akan cuba untuk indeks ke dalam memori yang anda tidak sendiri. Jadi ini, jika ini adalah batal, dan anda melakukan ini, anda akan kitaran. [01:19:39] ROB: Saya juga berfikir tentang ujian di mana kami bertanya soalan ini, kami memberitahu anda bahawa anda hanya boleh mengandaikan itu nombor positif. Kerana atoi juga dijangka untuk mengendalikan nombor negatif, jadi anda perlu untuk kes khas. Hei, adalah watak pertama tanda pisah, dalam hal ini, OK, sekarang ini adalah bilangan bulat negatif. Kami akan memberitahu anda ini macam hal. Kami akan memberitahu anda apa yang anda perlukan untuk menangani. Davin: Ya. Jadi saya yakin beberapa orang mungkin have-- jika anda mula melihat ujian lama, anda telah dilihat sterln. Itu salah satu yang popular. Dan saya fikir dalam sterln, anda harus melakukan cek ini for null, pulangan 0 atau sesuatu seperti itu. Seperti, anda harus memeriksa null. Dan jika anda tidak, yang adalah menunjukkan off kuiz. Jadi, tidak semua orang merasa tidak apa-atoi? Apakah ada yang ingin pergi ke bahagian lagi? ROB: Ya, saya fikir kami juga memberitahu anda anda boleh menganggap bahawa segala-galanya yang is-- mereka benar-benar sedang memasuki nombor, bahawa anda tidak perlu bimbang tentang, seperti, surat berada di tali, demikian. Davin: Ya. Ya? PELAJAR: Bolehkah anda pergi lebih satu lebih banyak masa apabila Anda menggunakan petikan berganda dan petikan tunggal? [01:20:37] Davin: Tentu, jadi tanda kutip ganda, sangat sederhana, adalah tanda kutip ganda adalah wayang. Jadi, jika anda menggandakan kutipan apa-apa, itu string. Jadi, seperti, jika saya mempunyai 0 di sini, dan saya melakukan ini, itu string. Itu tidak lagi karakter. Oleh itu, saya tidak dapat mencari nilai ini pada ASCII saya grafik, karena itu string, yeah. [01:20:57] OK, apa-apa soalan lain? Ya? [01:21:00] PELAJAR: Jadi, anda sudah telah menjawab ini, tetapi juga, jika kita benar-benar menulis ini pada kuiz, yang anda mahu kami untuk menulis dengan garis miring sifar [terdengar]? Davin: No. Pertanyaan itu harus Anda meletakkan garis miring melalui sifar untuk menunjukkan jika mereka sifar? Tidak, kami akan mencari tahu. Ya, terima kasih, mereka baik. OK, apa-apa lagi? Apakah ada yang ingin supaya- jadi saya fikir kami telah menjalankan sedikit dari masa ke masa. Adakah anda mahu melihat satu sama lain, atau? PELAJAR: RandomInt. [01:21:29] Davin: RandomInt, OK, betul-betul. Jadi mari kita buat RandomInt. Saya akan melakukannya di sini. Jadi RandomInt sebenarnya jauh lebih sederhana. Saya rasa atoi mungkin salah satu yang paling sukar yang kami telah bertanya pada tahun-tahun sebelumnya. PELAJAR: [didengar]. [01:21:46] Davin: Apa? ROB: Saya melihat jika ia adalah jenis dari dapat dilihat dari sini. Davin: Apakah itu? ROB: Saya tidak fikir ia adalah going-- saya fikir ia akan lari ke kanan. Davin: OK, jadi saya akan melakukan satu ini. Dan kemudian anda hanya meletakkan ia pada skrin. [01:21:56] ROB: Baiklah. [01:21:57] Davin: Anda ingin menjadi juru tulis saya? [01:21:58] ROB: Ya. [01:21:58] Davin: Nice. OK, saya boleh memadam ini? [01:22:02] PELAJAR: Ya. [01:22:04] Davin: Itu begitu keras. (Menyanyi) Anda lakukan apa yang anda lakukan. Dan melakukan sesuatu yang tidak perlu. Baik. [01:22:19] OK, kalau tak salah ingatan, pada kuiz yang RandomInt adalah seperti, OK, saya akan memberikan dua nombor, seperti a dan b yang. Dan saya mahu anda untuk memberi saya RandomInt antara nombor-nombor tersebut. Jadi RandomInt akan untuk mengambil dua Numbers jadi RandomInt-- dan itu akan kembali int. [01:22:41] Jadi apa nilai kembali? Saya hanya memberitahu anda. Int, kan? Seperti ini, dan maka itu akan mengambil dua int. Jadi ia akan mengambil int dan int b, seperti itu. Jadi apa RandomInt adalah akan lakukan ialah ia akan untuk kembali beberapa nilai rawak di antara kedua-dua nilai. Jadi ia akan menjadi lebih besar daripada, kurang daripada b. Jadi saya fikir anda mungkin boleh menganggap bahawa adalah lebih kecil dari dua nilai. Jadi, jika kita sedang berhadapan dengan rawakan, apa fungsi kita melihat bahawa memberikan kita benda-benda rawak? PELAJAR: Drand. Davin: Drand, betul-betul. Jadi anda akan mungkin ingin menggunakan drand anda. Oleh itu, anda boleh mengatakan int rawak, dan kami akan hanya mengatakan ia sama dengan 0 sekarang. Dan mereka kita akan berkata, OK, sama dengan rawak drand 48. Dan apa yang kembali ini? Apa fungsi ini memberikan? [01:23:43] PELAJAR: Di antara 0 dan 1. [01:23:45] Davin: Ya, antara 0 dan 1. Jadi ia akan adalah-- [01:23:48] ROB: Dan ini is-- saya fikir kami akan memberitahu anda ini. Seperti, anda boleh menggunakan drand 48. Anda boleh mengesahkan ini pada ujian terakhir. Tetapi kita mungkin akan mengatakan anda boleh menggunakan drand 48, yang mengembalikan apungan antara 0 dan 1. [01:23:58] Davin: Ya, ya, aku cukup yakin pada ujian ia berkata anda mungkin ingin menggunakan drand, ya. Jadi ia akan kembali beberapa nilai antara 0 dan 1. Dan kemudian apa yang kamu akan mahu lakukan? Dengan baik, anda ingin melipatgandakan oleh- menunggu, saya rasa ia seperti ini, maaf. Saya hanya akan melakukan hal ini. Saya tidak tahu. [01:24:19] Jadi b minus. Jadi mengapa b tolak? Jadi, bila drand memberikan kembali OK int--, saya hanya akan melakukan yang lain, supaya ditambah. Jadi apa does-- y adalah b minus. Jadi, bila drand yang memberikan anda kembali nilai maksimum ia mungkin boleh memberikan. Apa yang akan menjadi? PELAJAR: 1. [01:24:43] Davin: 1, kan? Jadi, jika ini adalah 1, dan anda mengalikan dengan b minus, dengan baik, itu hanya perbezaan antara minus A. Dan jika anda kemudian menambah bahawa kembali ke atas, iaitu apa? Pada dasarnya b. Adakah ini masuk akal? [01:24:57] PELAJAR: Ya. [01:24:59] Davin: Jadi, jika ini adalah yang maksimum nilai itu mungkin boleh menjadi, ia akan menjadi 1. Dan kemudian ini hanya Perbezaan antara kedua-dua. Tambah pada, jadi ini adalah akan kembali rawak. Dan dalam kes sudut yang drand memberikan kembali 1, rawak hanya akan berkesan akan b. Tetapi itu maksimum yang dapat. Jadi, jika itu akan menjadi kurang daripada itu, jadi katakanlah seperti yang 0.9, demikian maka 0.9 kali b tolak yang akan menjadi kurang daripada perbezaan antara b minus. [01:25:33] Dan kemudian jika anda menambah bahawa ke, maka nilai yang akan menjadi lebih besar daripada, kerana anda menambah sesuatu ke atasnya, tetapi ia akan menjadi kurang daripada b. Jadi, anda akan mendapatkan rawak nombor, kerana anda memanggil drand. Dan rand itu, yang nombor rawak adalah akan menjadi suatu tempat di antara dan b. Adakah ini masuk akal? [01:25:50] ROB: Hanya untuk memasukkannya ke dalam nombor konkrit, jadi katakanlah kita ingin memilih nombor rawak antara 7 dan 10. Jadi b tolak adalah jangkauan kami. Jadi ada berbagai tiga angka yang kita mahu untuk dipilih. Dan kemudian mendarabkan yang antara 0 dan 1 1, jika itu kemudian memberikan kita some-- katakanlah yang memberi kita 1.5. [01:26:07] Kemudian 1.5, kita mahu pergi 7-10. Jadi 1.5 ditambah 7 membawa kita kembali ke 7 hingga 10 jangkauan kami. Dan kemudian kita menyimpannya dalam integer, maka ia dipotong ke 8. Dan kemudian kita hanya kembali itu. Jadi b tolak adalah jangkauan kami. yang bergeser itu ke dalam nombor yang kita inginkan dalam julat itu. Jadi antara 7 dan 10, dan kemudian kita dapat kembali apa yang kita berakhir dengan. [01:26:30] Davin: Ya, baik. [01:26:32] ROB: Terima kasih. [01:26:34] Davin: Ya, ada apa? [01:26:35] PELAJAR: Adakah kita menjalankannya untuk apa-apa jenis Kesalahan ASCII apabila we're-- jika drand adalah kembali apungan [terdengar]. [01:26:42] ROB: Jadi sama seperti Rob berkata, kerana rawak tidak int an, jadi drand akan apungan. Lebih dan kemudian mengalikan keluar. Dan anda mungkin akan mendapatkan beberapa jenis nombor float. Dan kemudian ia akan memotong. [01:26:51] PELAJAR: OK. Davin: Ya. ROB: Dan jika penyusun itu ialah untuk memberi amaran anda tentang, seperti, kehilangan ketepatan, hanya dibuang di int di sana, dan maka itu baik. Davin: Ya? [01:27:02] PELAJAR: Adakah ia mempunyai kemungkinan yang sama dalam mendapatkan, seperti, b atau [terdengar]? [01:27:08] ROB: Jadi is-- Saya sebenarnya wondering-- adalah RandomInt sepatutnya menjadi beberapa dari a hingga kurang daripada b? Seperti, jika ia adalah antara 7 dan 10, apakah kemungkinan? 7, 8, dan 9, atau 7, 8, 9, 10? Davin: saya lupa. Pada set-- masalah [01:27:19] ROB: Saya fikir ia adalah 7, 8, 9. [01:27:20] Davin: Ia secara khusus mengatakan seseorang inklusif dan seseorang yang eksklusif. [01:27:22] ROB: Ya. [01:27:23] Davin: Tetapi saya don't-- saya elok [01:27:23] ROB: Jadi saya rasa ini adalah tidak termasuk, dalam hal ini, ada yang sama kebarangkalian 7, 8, dan 9. Tidak ada kebarangkalian 10. Davin: Ya? PELAJAR: Saya mempunyai satu soalan. Kami ingin mendefinisikan fungsi mengembalikan bukan satu nilai, tetapi array. Lalu apa yang akan menjadi sintaks selepas kembali? [01:27:41] Davin: OK, jadi maka anda would-- setelah kembali? Jadi, bila anda telah menyatakan pelbagai tempat di sana. Kemudian anda hanya akan kembali nama array. [01:27:49] PELAJAR: OK, matur nuwun. Kemudian hanya kembali dengan a-- Davin: Oh tunggu, sangat menyesal. Persoalannya ialah bagaimana anda kembali array. [01:27:54] ROB: Walaupun ia tidak boleh akan array diisytiharkan pada tumpukan atau apa-apa seperti itu. Ia harus menjadi sesuatu yang malloced, kerana malloc adalah bagaimana anda mendapatkan sekitar peruntukan memori automatik. [01:28:01] Davin: Ya. ROB: Bagaimana anda mendapatkan sekitar skop tempatan. [01:28:09] Davin: Tetapi anda akan hanya kembali name-- nya [01:28:11] PELAJAR: [didengar] ia bukan satu nilai, misalnya, dua nombor, jadi [Terdengar]. [01:28:18] Davin: Anda tidak boleh kembali jumlah berganda. Anda tidak boleh, seperti, return-- [01:28:20] PELAJAR: Saya bercakap tentang kembali array atau sesuatu seperti itu. [01:28:23] Davin: Ya, jadi pertanyaannya adalah boleh saya kembali beberapa nilai. Anda tidak boleh kembali beberapa nilai. Anda tidak boleh, seperti, kembali maka kembali b atau sesuatu seperti itu. Kerana selepas anda kembali, anda kembali daripada fungsi. Kemudian fungsi ini dilakukan, dan seperti Rob berkata, adalah di stack. [01:28:35] Jadi semua memori yang hanya mendapat kembali ke komputer. Semuanya akan lupa, pada dasarnya. Jadi, jika anda ingin kembali beberapa nilai-nilai, anda perlu kembali array, Dan cara anda melakukannya adalah mallocing. Dan kemudian anda akan kembali x seperti itu. Pada asasnya, anda hanya kembali nama. Dan apabila anda kembali sesuatu seperti ini, anda tidak benar-benar kembali nilai. [01:28:53] Jadi, bila anda disimpan nilai-nilai dalam array. Anda tidak benar-benar kembali nilai-nilai. Seperti, jika saya kembali int an, saya benar-benar kembali salinan nilai-nilai. Tetapi jika saya harus kembali sesuatu seperti ini, Aku kembali rujukan kepada nilai-nilai. Jadi, saya kembali, pada dasarnya, alamat ingatan dengan nilai-nilai. Adakah ini masuk akal? PELAJAR: Ya. Davin: Nice. Ya? [01:29:13] PELAJAR: Apabila anda menggunakan drand di sini, Anda perlu meletakkan srand sebelum itu? [01:29:17] Davin: Tidak, tidak, saya tidak fikir begitu. [01:29:20] ROB: Ya, jadi adakah anda mempunyai berkata apa-apa tentang srand? Default Anda tidak pernah mengatakan srand sama sekali adalah dengan hanya melakukan srand null. Jadi drand kepada kerja kehendaknya sendiri. Dan ia secara automatik akan benih dengan masa semasa, adalah apa yang digunakannya. Davin: Ya? PELAJAR: Adakah anda [terdengar] dengan angka? Davin: Ya, anda boleh. PELAJAR: Jadi, anda boleh berkata, seperti, 4 kali 2. Masalahnya, anda tidak boleh menganggap kemudian int adalah empat bait. The only-- [01:29:51] Davin: Maksud saya, untuk kuiz yang anda boleh. [Ketawa] [01:29:54] ROB: Mm, tidak. Davin: Ya, ya anda boleh. Jika mereka meminta anda bagaimana besar int adalah, Anda tidak boleh, seperti, empat atau lapan. ROB: Oh, jadi jika soalan secara khusus, seperti, jika ia adalah masalah coding, Anda harus mengatakan saiz int. Jika ia meja, atau ia berkata berapa banyak bait, Anda tidak perlu mengisi saiz int. [01:30:08] PELAJAR: [Ketawa] [01:30:18] Davin: Benar, jadi mengapa Saiz int penting di sini? Mahu, jika kita akan 32-bit pemproses atau sesuatu seperti itu, maka ia akan menjadi empat bait. Tetapi pada beberapa yang baru hal, ia boleh menjadi apa? Ia boleh menjadi lapan, kan? Jadi this-- jika anda hanya kod keras empat, kemudian pada beberapa mesin, ia akan bekerja. Beberapa mesin, ia tidak akan berfungsi. Tetapi jika kuiz kami seperti bagaimana besar adalah int? Letakkan empat. ROB: Benar. Davin: Ya? PELAJAR: Jadi kerana kita menyatakan [Terdengar] dalam fungsi, kita harus meletakkan 3 di dalam fungsi itu? Atau kita boleh menggunakannya di luar? Davin: Anda boleh menggunakannya di luar fungsi tersebut. Jadi dia meminta secara percuma. [01:30:49] PELAJAR: Kurangkan trek di mana [terdengar]. [01:30:51] ROB: Oh, yang bebas tidak happen-- itu sebahagian daripada keajaiban malloc adalah bahawa anda tidak terhad kepada skop tempatan. Anda mempunyai kawalan penuh ke atas berapa lama variabel Anda hidup. Jadi kita panggil malloc di sini, ia mungkin menjadi fungsi yang sama sekali berasingan. Mungkin 10 jam kemudian bahawa kita akhirnya memanggil percuma. [01:31:08] Davin: Sebagai contoh, seperti, pasangan minggu dari sekarang apabila anda akhirnya melakukan ejaan kamus anda pşet, anda akan mempunyai beberapa fungsi yang mewujudkan tan nod. Jadi anda mallocing tan dari nod dalam fungsi ini. Dan kemudian kemudian di dalam fungsi yang berasingan, anda akan mahu melepaskan semua nod. Jadi, anda boleh benar-benar hanya diserahkan kepada membebaskan pointer, jadi alamat memori dengan apa yang anda malloced. Dan yang akan baik-baik saja. Anda tidak perlu untuk membebaskan, seperti, dalam majlis yang sama. Ya? [01:31:30] PELAJAR: Jadi malloc pembolehubah [terdengar] di luar? Adakah itu apa yang anda katakan? Davin: Tunggu, mengatakan bahawa? Maaf. [01:31:38] PELAJAR: Jika variabel malloc boleh bebas mana-mana sahaja dalam kod, demikian sahaja mereka akan diakses mana-mana sahaja dalam kod? Bolehkah anda menjaga mereka tempatan? [01:31:45] Davin: Oh, dia bertanya, seperti, pembolehubah, like-- [01:31:51] ROB: Jadi anda masih perlu mempunyai beberapa jenis rujukan ke blok malloc ini memori. Jadi di sini, kita kembali x. PELAJAR: Oh. ROB: Jika kita tidak kembali x di sini, dan ini hanya tidak sah, maka kita tidak akan mempunyai akses kepada penunjuk yang malloced, dan ia bocor memori. [01:32:05] PELAJAR: OK. [01:32:06] Davin: Jadi seperti, katakan anda mempunyai ini, seperti, di sini. ROB: No. Davin: Dalam fungsi utama saya, saya tidak boleh panggil saja x ini dan, seperti, OK, dalam fungsi ini, saya melakukan ini. [01:32:14] ROB: Benar. [01:32:14] Davin: Jadi, saya akan memanggil x dalam, seperti, utama atau sesuatu seperti itu. Anda tidak boleh melakukan itu. Anda akan kembali sesuatu. Tetapi apa yang anda akan kembali? Anda akan kembali alamat memori. Dan kerana anda kembali memori yang alamat, yang boleh diakses di tempat lain. Apa-apa soalan lagi? Ya? [01:32:28] PELAJAR: Apakah fungsi di atas iaitu cek untuk [terdengar]? [01:32:33] Davin: Mengapa saya tidak perlu berbuat demikian? PELAJAR: [didengar]. Davin: Kerana kau tidak mallocing apa-apa. Jadi ia elok ya, itu tidak seperti string s. Ia adalah penunjuk ke suatu tempat. Ini hanya nilai-nilai. PELAJAR: OK. Davin: Ya. Apa-apa lagi? ROB: Ya? PELAJAR: Tetapi apabila anda [terdengar]? [01:32:55] ROB: Jadi untuk membebaskan memori, kita akan berkata di sini. Jadi x adalah penunjuk untuk blok memori. Kita bebas pointer itu. Dan kita tentu tidak akan melakukannya di sini. Kita boleh melakukannya di mana saja. Tetapi anda hanya memanggil percuma di sesuatu yang malloc pulangan. Jadi malloc, di sini, kembali apa yang disimpan dalam x. Oleh itu, kita dapat panggilan bebas pada x. Apa-apa soalan terakhir? [01:33:20] Davin: Mana-mana soalan lepas? Ya? [01:33:22] PELAJAR: Maaf, anda boleh menerangkan semula mengapa anda akan bebas di sana? Mengapa [terdengar]? [01:33:26] Davin: Untuk di sini? [01:33:27] PELAJAR: Ya, seperti selepas. Davin: Anda mungkin tidak mahu percuma di sini. ROB: Anda mungkin tidak akan. Davin: Ya, ini yang akan berbuat apa-apa. Ini, seperti, membuat ingatan, melakukan hal-hal untuk itu, dan kemudian dengan serta-merta lupa tentang hal itu, ya. [01:33:37] ROB: Tetapi mungkin kita lakukan, seperti, di sini atas sebab tertentu. Kita mungkin berkata int bintang y sama return array. Melakukan hal-hal dengan y, mungkin mencetak isi. Dan kemudian, akhirnya, kita sudah selesai. Kita boleh membebaskan y. PELAJAR: [didengar]. Davin: Sekiranya saya tatal ke bawah? Terima kasih. ROB: Nice. [01:34:02] Davin: OK, itu sahaja. ROB: Baiklah, baik. Nasib baik. [01:34:05] Davin: Jika anda mempunyai pertanyaan, email kami. Nasib baik.