[Powered by Google Translate] [Seksyen 4] [Kurang Selesa]
[Nate Hardison] [Universiti Harvard]
[Ini adalah CS50.] [CS50.TV]
>> Baiklah, selamat kembali ke seksyen.
Dalam seksyen minggu ini kita akan melakukan beberapa perkara.
Kami akan recap pertama Masalah Set 2,
yang merupakan set Caesar dan masalah Vigenère.
Dan kemudian kita akan menyelam ke dalam Kuiz 0 ulasan
dan menghabiskan sedikit masa Mengimbas kembali apa yang kita telah bercakap tentang
dalam setiap kuliah setakat ini, dan kami juga akan melakukan beberapa masalah
dari kuiz tahun sebelumnya.
Itu cara anda lelaki itu mempunyai cara yang baik untuk bersedia untuk itu.
>> Untuk bermula, saya telah boot beberapa penyelesaian yang baik
untuk menetapkan masalah sebelumnya, Set Masalah 2, ke dalam ruang ini.
Jika kalian semua melanda pautan ini,
dan jika anda klik nama saya dan klik pada semakan pertama saya
anda akan melihat caesar.c, yang adalah apa yang saya melihat.
Mari kita bercakap tentang perkara ini benar-benar cepat.
Ini adalah hanya satu penyelesaian sampel.
Ini tidak semestinya penyelesaian yang sempurna.
Terdapat banyak cara yang berbeza untuk menulis ini,
tetapi terdapat beberapa perkara yang saya mahu untuk menyerlahkan
yang saya lihat seperti yang saya telah penggredan, kesilapan biasa yang saya fikir
penyelesaian ini melakukan pekerjaan yang sangat baik pengendalian.
>> Yang pertama mempunyai beberapa jenis komen header di atas.
Pada baris 1 hingga 7 anda melihat butiran,
apa sebenarnya program ini lakukan.
Satu amalan standard yang baik apabila anda menulis kod C
tanpa mengira jika program anda yang terkandung dalam fail tunggal atau
sama ada ia berpecah sejak beberapa fail adalah untuk mempunyai beberapa jenis
penghalaan komen di atas.
Ini adalah juga bagi orang-orang yang keluar dan menulis kod dalam dunia sebenar.
Ini adalah di mana mereka akan meletakkan maklumat hak cipta.
Berikut adalah termasuk #.
Pada 16 baris ada ini # menentukan, yang kita akan kembali ke dalam hanya sedikit.
Dan kemudian sekali fungsi bermula, mula dibina utama sekali,
kerana program ini telah semua yang terkandung dalam fungsi tunggal
perkara yang pertama yang berlaku dan ini adalah sangat simpulan bahasa dan tipikal program C
yang mengambil masa dalam baris arahan hujah adalah bahawa ia segera memeriksa
>> untuk kiraan hujah, argc.
Betul di sini kita melihat bahawa program ini menjangkakan 2 hujah yang tepat.
Ingat ada bahawa hujah pertama itulah satu khas
yang sentiasa nama program yang sedang berjalan,
nama fail boleh laku.
Dan sebagainya apa ini tidak adalah ia menghalang pengguna daripada menjalankan program ini
dengan hujah-hujah yang lebih atau kurang.
Sebab kita mahu untuk memeriksa hak ini jauh adalah kerana
kita sebenarnya tidak boleh mengakses pelbagai argv di sini pasti
sehingga kita telah diperiksa untuk melihat bagaimana ia adalah besar.
>> Salah satu kesilapan yang biasa saya lihat ialah orang akan segera pergi dalam
dan merebut argv [1].
Mereka akan merebut hujah utama daripada array dan lakukan untuk i memeriksa,
dan kemudian mereka akan melakukan ujian untuk argc serta ujian seterusnya,
sama ada atau tidak hujah pertama sememangnya suatu integer pada masa yang sama,
dan yang tidak bekerja kerana dalam kes itu bahawa tidak ada hujah-hujah yang dibekalkan
anda akan meraih hujah yang tidak ada atau cuba untuk merebut salah satu yang tidak ada.
>> Perkara besar lain yang anda perlu melihat adalah bahawa
anda sentiasa mahu mencetak beberapa jenis mesej ralat membantu
kepada pengguna untuk menyesuaikan mereka.
Saya pasti anda telah semua program yang dikendalikan di mana semua tiba-tiba ia kemalangan,
dan anda akan mendapat dialog ini masuk akal sedikit yang muncul dan berkata
sesuatu yang teruk samar dan mungkin memberikan anda kod ralat atau sesuatu seperti itu
yang tidak masuk akal.
Ini adalah di mana anda benar-benar ingin memberikan sesuatu yang berguna
dan disasarkan kepada pengguna supaya apabila mereka berjalan mereka pergi "Oh," muka sawit.
"Saya tahu apa yang perlu dilakukan. Saya tahu bagaimana untuk menetapkan ini."
>> Jika anda tidak mencetak mesej, kemudian anda akhirnya sebenarnya
meninggalkan pengguna untuk pergi memeriksa kod sumber anda
untuk mengetahui apa yang telah salah.
Terdapat juga beberapa kali bahawa anda akan menggunakan kod ralat yang berbeza.
Di sini kita hanya menggunakan satu untuk mengatakan terdapat ralat,
terdapat ralat, terdapat ralat.
Program-program yang lebih besar, sering program yang dipanggil oleh program lain,
akan kembali beberapa jenis kod ralat khas dalam senario yang berbeza
programatik berkomunikasi apa yang anda akan sebaliknya
hanya menggunakan mesej Inggeris bagus untuk.
Sejuk.
Seperti yang kita bekerja bawah, anda boleh melihat kita tarik keluar utama.
Kami menguji untuk melihat jika kekunci sesuai.
Kami mendapat mesej dari pengguna.
Sebab kita melakukannya dalam hal ini melakukan gelung while dan ini adalah sesuatu yang kita akan meliputi
dalam sedikit sedikit tetapi ia ternyata bahawa jika anda menaip kawalan D
apabila anda mendapatkan GetString yang segera pada terminal
apa yang sebenarnya tidak adalah ia menghantar aksara khas
kepada program ini.
Ia dipanggil ELF atau akhir watak fail.
Dan dalam kes itu, rentetan mesej kita akan menjadi batal,
jadi ini bukanlah sesuatu yang kami diperiksa dalam masalah ini menetapkan sendiri.
>> Tetapi seperti yang kita pergi, sekarang bahawa kita telah mula bercakap tentang petunjuk
dan memori peruntukan dinamik pada timbunan,
memeriksa batal apabila anda mempunyai fungsi yang mungkin
kembali null sebagai nilai adalah sesuatu yang anda akan mahu untuk mendapatkan dalam tabiat menjalankan.
Ini adalah di sini terutamanya untuk ilustrasi.
Tetapi apabila anda melihat GetString pada masa depan,
jadi dari Set Masalah 4 pada, anda akan mahu untuk menyimpan ini dalam minda.
Sekali lagi, ini bukan satu isu untuk Set Masalah 3 sama ada kerana kita telah tidak dilindungi lagi.
Akhirnya, kita sampai ke bahagian ini di mana kita mendapat untuk gelung penyulitan utama,
dan terdapat beberapa perkara yang berlaku di sini.
Pertama, kita melelar atas rentetan mesej keseluruhan sendiri.
Di sini kita telah disimpan panggilan strlen dalam keadaan,
yang bilangan anda telah menegaskan tidak merupakan cara terbaik untuk pergi.
Ia ternyata dalam kes ini ia juga tidak besar,
sebahagiannya kerana kita sedang mengubahsuai kandungan mesej itu sendiri
di dalam gelung, jadi jika kita mempunyai mesej yang 10 aksara panjang,
kali pertama kita mula bahawa untuk gelung strlen akan kembali apa?
10.
>> Tetapi jika kita kemudian mengubah suai mesej, mengatakan kita mengubah suai watak-5,
dan kita buang dalam watak \ 0 di kedudukan ke-5,
pada lelaran berikutnya strlen (mesej) tidak akan kembali apa yang ia lakukan
kali pertama kami terlelar,
tetapi ia sebaliknya akan kembali 5 kerana kita melemparkan bahawa null,
dan panjang rentetan ditakrifkan
oleh kedudukan itu \ 0.
Dalam kes ini, ini adalah cara terbaik untuk pergi kerana kami sedang mengubahsuai ia di tempat.
Tetapi anda perasan bahawa ini adalah sebenarnya menghairankan mudah untuk menyulitkan
jika anda boleh mendapatkan matematik yang betul.
Apa yang diperlukan adalah untuk memeriksa sama ada atau tidak surat yang anda sedang mencari di
huruf besar atau huruf kecil.
>> Sebab kita hanya perlu untuk memeriksa itu dan kita tidak perlu untuk memeriksa
kes adalah alfa adalah kerana
jika watak huruf besar atau jika ia adalah huruf kecil
maka ia pasti aksara abjad,
kerana kita tidak mempunyai angka yang besar dan huruf kecil.
Perkara lain yang kita lakukan dan ini adalah sedikit sukar
kita telah diubahsuai Caesar standard cipher formula
yang kita berikan dalam spesifikasi set masalah.
Apa yang berbeza di sini adalah bahawa kita ditolak
dalam modal kes huruf besar, dan kemudian kita tambah modal A
kembali di akhir.
>> Saya tahu beberapa anda telah melakukan ini dalam kod anda.
Adakah mana-mana anda melakukan ini dalam penghujahan anda?
Yang anda lakukan ini. Bolehkah anda menjelaskan apa ini tidak, Sahb?
Dengan menolak ia keluar, kerana anda lakukan arena sejurus selepas ia,
anda perlu mengambil ia keluar, supaya cara anda mendapat [batuk] kedudukan.
Dan kemudian dengan menambah kembali kemudian anda beralih lebih daripada satu yang anda mahu.
Ya, sebenarnya.
Apa Sahb berkata adalah bahawa apabila kita mahu menambah
mesej kami dan kunci kita bersama
dan kemudian arena, arena yang oleh NUM_LETTERS,
jika kita tidak skala mesej kami ke pelbagai sesuai 0-25 pertama,
maka kita mungkin berakhir sehingga mendapat jumlah yang benar-benar pelik
kerana nilai-nilai yang kita sedang melihat apabila kita melihat mesej [i],
apabila kita melihat watak engan mesej teks biasa kami,
nilai tempat dalam julat ini 65-122
berdasarkan nilai ASCII bagi huruf besar A melalui z huruf kecil.
Dan sebagainya apabila kita MOD sebanyak 26 atau oleh NUM_LETTERS,
kerana itu adalah menentukan # kami di sebelah kanan atas di sini,
itu akan memberi kita nilai itu dalam julat 0-25,
dan kami memerlukan satu cara untuk kemudian skala yang kembali
dan mendapatkan ia dalam julat ASCII yang sesuai.
Cara paling mudah untuk berbuat demikian adalah untuk hanya skala semua turun
ke dalam julat 0-25 untuk memulakan dengan,
dan kemudian mengalihkan segala-galanya kembali pada akhir.
>> Satu lagi kesilapan biasa yang saya lihat orang lari ke
jika anda tidak benar-benar melakukan bersisik ini segera
dan anda menambah mesej dan kunci bersama-sama dan anda menambah mereka, berkata,
ke dalam pembolehubah char, masalah dengan itu
sejak mesej [i] adalah satu jumlah yang agak besar untuk memulakan dengan-
ingat ia sekurang-kurangnya 65 jika ia satu huruf besar watak-
jika anda mempunyai kunci yang besar, katakan, sesuatu seperti 100,
dan anda menambah mereka 2 bersama-sama ke dalam char ditandatangani anda akan mendapat limpahan.
Anda akan mendapatkan nilai yang lebih besar daripada 127,
yang merupakan nilai terbesar bahawa pembolehubah char boleh memegang.
Sekali lagi, itulah sebabnya anda akan mahu untuk melakukan yang jenis perkara untuk bermula dengan.
Sesetengah orang mendapat sekitar kes itu dengan melakukan jika lain dan menguji
untuk melihat jika ia akan melimpah sebelum berbuat demikian,
tetapi cara ini mendapat sekitar yang.
Dan kemudian dalam penyelesaian ini kita cetak keseluruhan rentetan pada akhir sangat.
Orang lain dicetak watak pada satu-satu masa. Kedua-duanya adalah hebat.
Pada ketika ini, adakah anda semua mempunyai sebarang pertanyaan, sebarang komen tentang perkara ini?
Perkara yang anda suka, perkara yang anda tidak suka?
>> Saya mempunyai satu soalan.
Mungkin saya terlepas semasa penerangan anda, tetapi bagaimana program ini
melangkau ruang untuk menyambung kunci kepada panjang teks?
Ini adalah hanya Caesar cipher. >> Oh, maaf, yeah.
Ya, kita akan melihat bahawa.
Dalam cipher Caesar kita mendapat sekitar bahawa kerana
kita hanya dibalik aksara.
Kami hanya berputar mereka jika mereka besar atau huruf kecil.
Kalian berasa cukup baik tentang perkara ini?
Berasa bebas untuk menyalin rumah ini, mengambil,
bandingkan apa yang anda semua menulis.
Pasti berasa bebas untuk menghantar soalan tentang hal itu juga.
Dan sekali lagi, menyedari bahawa matlamat sini dengan masalah anda menetapkan
bukan untuk mendapatkan anda lelaki untuk menulis kod yang sesuai untuk set masalah anda.
Ia adalah satu pengalaman pembelajaran. Yeah.
>> Kembali ke do gelung while, jika ia bersamaan batal,
jadi batal hanya bermaksud apa-apa, mereka hanya tekan enter?
Nol ialah nilai penunjuk khas,
dan kita gunakan batal apabila kita mahu katakan
kita mempunyai pembolehubah penunjuk yang menunjuk ke apa-apa.
Dan begitu biasanya ia bermakna bahawa ini pembolehubah, pembolehubah mesej
adalah kosong, dan di sini, kerana kita menggunakan jenis CS50 rentetan khas,
apakah jenis tali CS50?
Pernahkah anda melihat apa yang ia adalah apabila Daud ditarik balik hud dalam kuliah?
Ia funky ia adalah penunjuk, betul?
Okay, yeah. >> Ia adalah * char.
Dan sebagainya benar-benar kita boleh menggantikan ini
di sini * dengan mesej char,
dan sebagainya fungsi GetString, jika ia tidak berjaya mendapatkan rentetan daripada pengguna,
ia tidak boleh menghuraikan rentetan, dan satu kes di mana ia tidak boleh menghuraikan rentetan
jika jenis pengguna akhir watak fail, D kawalan,
yang tidak adalah sesuatu yang biasanya anda lakukan, tetapi jika itu berlaku
maka fungsi akan kembali nilai nol ini sebagai satu cara untuk mengatakan
"Hei, saya tidak mendapatkan rentetan."
Apa yang akan berlaku jika kita tidak meletakkan mesej null =,
yang merupakan sesuatu yang kita tidak melakukan lagi?
Mengapa yang akan menjadi masalah di sini?
Kerana saya tahu bahawa kita bercakap sedikit dalam syarahan mengenai kebocoran memori.
Ya, mari kita berbuat demikian, dan mari kita lihat apa yang berlaku.
>> Soalan Basil adalah apa yang berlaku jika kita tidak benar-benar mempunyai
mesej ini = ujian batal?
Mari kita tatal ke atas ke atas.
Kalian boleh mengulas keluar ini.
Sebenarnya, saya akan menyimpannya di dalam semakan.
Ini akan menjadi Semakan 3.
Apa yang anda perlu lakukan untuk menjalankan program ini adalah anda perlu klik ikon ini gear sehingga di sini,
dan anda akan mempunyai untuk menambah hujah untuk ia.
Anda akan mempunyai untuk memberi hujah utama kerana kita mahu lulus dalam hujah baris arahan.
Di sini saya akan memberikan nombor 3. Saya suka 3.
Sekarang zoom kembali, menjalankan program ini.
Ia berlari, menyusun, membina.
Di sini kita pergi. Ia menunggu akan diminta.
Jika saya menaip sesuatu seperti hello-mana yang pergi?
Oh, program saya mengambil masa terlalu lama untuk menjalankan. Saya jawing terlalu lama.
Di sini ia pergi.
Sekarang saya menaip hello.
Kita lihat bahawa ia menyulitkan sewajarnya.
Sekarang apa yang berlaku jika kita melakukan GetString segera kembali batal?
Ingat, saya berkata bahawa kita melakukannya dengan menekan kawalan D pada masa yang sama.
Saya akan tatal ke atas sini. Kami akan berjalan lagi.
Bangunan. Terdapat ia pergi.
Sekarang apabila saya mencecah kawalan D
Saya mendapat ini garis yang mengatakan opt/sandbox50/bin/run.sh, kesalahan Segmentasi.
Pernahkah anda semua melihat bahawa sebelum ini?
>> [Pelajar] Mengapa ada tidak >> Maaf?
[Pelajar] Mengapa tiada sampah teras dalam kes ini?
Sampah teras adalah soalan mengapa terdapat tiada sampah teras di sini?
Persoalannya ialah bahawa mungkin ada, tetapi dump teras adalah fail
yang mendapat disimpan di dalam cakera keras.
Dalam kes ini kita telah dilumpuhkan tapak teras
pada pelayan jangka supaya kita tidak ada orang yang seg faulting
dan membina tan tapak teras.
Tetapi anda boleh mendapatkan satu.
Tapak teras adalah jenis perkara yang anda sering boleh melumpuhkan,
dan kadang-kadang anda lakukan.
Kesalahan segmentasi, untuk menjawab soalan anda, Basil,
mengatakan bahawa kita cuba untuk mengakses penunjuk
yang tidak bersedia untuk menunjukkan apa-apa.
Ingat Binky dalam video apabila Binky cuba untuk
pergi mengakses penunjuk itu tidak menunjuk kepada apa-apa?
Dalam kes ini saya rasa teknikal penunjuk menunjuk kepada sesuatu.
Ia menunjuk ke null, yang teknikal 0,
tetapi yang ditakrifkan sebagai dalam segmen yang tidak boleh diakses
oleh program anda, supaya anda mendapat suatu kesalahan segmentasi
kerana anda tidak mengakses memori yang dalam segmen yang sah
seperti segmen timbunan atau segmen timbunan atau segmen data.
Sejuk.
Sebarang pertanyaan lanjut mengenai Caesar?
>> Mari kita bergerak ke atas. Mari kita lihat pada 2 Semakan benar-benar cepat.
Itulah Vigenère.
Di sini di Vigenère
kami akan berjalan melalui satu ini cukup cepat kerana, sekali lagi,
Vigenère dan Caesar adalah agak serupa.
Komen Header sebelum ini,
# Define adalah sebelum untuk mengelakkan menggunakan nombor-nombor sihir.
Perkara yang baik mengatakan bahawa kita mahu untuk bergerak ke
abjad yang berbeza atau sesuatu seperti itu.
Bukannya perlu pergi manual menukar semua 26 dalam kod
kita boleh menukar ini kepada 27 atau jatuh ke bawah
jika kita telah menggunakan huruf yang berbeza, bahasa yang berbeza.
Sekali lagi, kita telah mendapat cek ini kiraan hujah,
dan benar-benar anda hampir boleh mengambil ini sebagai templat.
Cukup banyak setiap program yang anda menulis harus mempunyai-
jika ia mengambil baris arahan hujah-beberapa urutan garisan
yang berbunyi seperti ini pada awal-awal lagi.
Itulah salah satu ujian kewarasan pertama yang anda mahu lakukan.
>> Di sini apa yang kita tidak telah kita memastikan bahawa
kata kunci adalah sah, dan yang cek kedua yang kita lakukan.
Notis lagi yang kita dipisahkan ini dari argc dan 2.
Perhatikan bahawa dalam kes ini satu perkara yang kita terpaksa lakukan adalah sebaliknya
menggunakan i kita mahu untuk mengesahkan keseluruhan rentetan,
dan untuk melakukan bahawa anda sebenarnya perlu pergi watak oleh watak
lebih tali.
Tiada cara yang baik untuk memanggil sesuatu pada
kerana walaupun, sebagai contoh, i akan kembali 0
jika ia tidak dapat menghurai integer, supaya tidak pun bekerja.
Sekali lagi, mesej bagus memberitahu pengguna tepat apa yang berlaku.
Maka di sini, sekali lagi, kami juga mengendalikan kes di mana
pengguna jenis watak D kawalan rawak.
>> Dan kemudian Charlotte mempunyai soalan awal tentang bagaimana kita menguruskan untuk melangkau ruang
dalam rentetan di sini kami.
Ini adalah jenis yang serupa dengan apa yang kita lakukan dengan program Myspace
yang kita lakukan dalam seksyen ini, dan cara ini bekerja
ialah bahawa kita dikesan bilangan huruf yang kita akan melihat.
Seperti yang kita berjalan atas rentetan mesej, seperti yang kita berjalan lebih watak oleh watak,
kita menjejaki indeks sebagai sebahagian daripada kami untuk gelung, dan kemudian kita juga dikesan
bilangan huruf, jadi bukan aksara khas, bukan angka, bukan putih ruang
bahawa kita akan dilihat dalam pembolehubah berasingan.
Dan maka penyelesaian ini mengubah kekunci
untuk mendapatkan integer utama sebenar, dan ia adakah itu on the fly,
betul sebelum ia kemudian pergi untuk menyulitkan mesej watak sebenar.
Terdapat beberapa penyelesaian yang sempurna terlalu besar
yang akan mengubah kekunci apabila menguji kesahihan kekunci.
Di samping untuk memastikan bahawa watak dan kata kunci
telah aksara abjad ia juga bertukar bahawa ke integer
dalam julat 0-25 maka skip perlu untuk berbuat demikian kemudian di dalam ini untuk gelung.
Sekali lagi, anda lihat di sini ini adalah benar-benar kod yang sama yang tepat
bahawa kita digunakan dalam Caesar pada ketika ini.
Anda melakukan perkara yang sama, jadi helah sebenar memikirkan
bagaimana untuk menjadikan kata kunci ke dalam integer.
>> Satu perkara yang kita lakukan di sini yang sedikit tebal
kita mengulangi frasa ini, saya rasa anda boleh memanggil ia,
3 kali berasingan pada baris 58, 59, dan 61.
Seseorang boleh menjelaskan apa sebenarnya frasa ini tidak?
Ia mengakses watak, seperti yang anda kata.
Ya, ia adalah [didengar] watak dalam kata kunci,
dan sebagainya ia adalah bilangan huruf dilihat kerana anda hanya bergerak di sepanjang
kata kunci sekali anda telah melihat surat itu,
supaya akan berkesan melangkau ruang dan barangan seperti itu.
Ya, sebenarnya.
Dan kemudian sekali anda telah melihat kosong kata kunci anda hanya arena supaya anda bergerak ke belakang sekitar.
Tepat sekali. Itulah penjelasan yang sempurna.
Apa yang Kevin berkata bahawa kita mahu indeks ke dalam kata kunci.
Kami mahu mendapatkan watak num_letters_seen, jika anda akan,
tetapi jika num_letters_seen melebihi panjang kata kunci,
cara kita dapat kembali ke julat yang sesuai ialah kita menggunakan pengendali arena
berkesan membalut di sekitar.
Sebagai contoh, seperti dalam jangka pendek, kata kunci kami adalah daging,
dan 5 huruf panjang.
Tetapi kita telah melihat 6 huruf dalam teks biasa kita pada ketika ini
dan disulitkan 6.
Kami akan berakhir sehingga mengakses num_letters_seen,
yang 6, arena panjang kata kunci, 5,
dan supaya kita akan mendapat 1, dan sebagainya apa yang kita akan lakukan ialah kami akan
mengakses dalam watak pertama kata kunci kami pada ketika itu.
>> Baiklah, apa-apa soalan mengenai Vigenère
sebelum kita bergerak ke atas?
Kalian berasa cukup baik tentang perkara ini?
Sejuk, besar.
Saya mahu pastikan bahawa anda semua akan mendapat peluang untuk melihat kod
yang kita fikir kelihatan baik dan mempunyai peluang untuk belajar daripada.
Ini akan menjadi yang terakhir kita akan menggunakan ruang untuk masa ini,
dan kami pergi untuk peralihan sekarang, dan saya akan pergi ke cs50.net/lectures
supaya kita boleh melakukan sedikit kajian kuiz.
Cara terbaik saya berfikir untuk mula melakukan kuiz ulasan
adalah untuk datang ke laman Kuliah ini, cs50.net/lectures,
dan di bawah setiap tajuk minggu, jadi jika saya melihat di sini pada 0 Minggu,
Saya melihat bahawa kita mempunyai senarai topik yang kita dilindungi di titik 0 Minggu.
>> Jika mana-mana topik-topik ini kelihatan biasa kepada anda
anda pasti akan mahu untuk kembali dan kerokan nota kuliah dan mungkin
malah agunan melalui ceramah-ceramah, menonton mereka sekali lagi jika anda mahu
untuk mendapatkan rasa untuk apa yang berlaku dengan setiap topik-topik.
Saya akan mengatakan tambahan ini satu tahun sumber sejuk kita telah mendapat
ini adalah seluar yang kita telah mencipta, dan jika anda melihat pada 0 Minggu,
kita tidak mempunyai semua topik yang dilindungi, tetapi kita telah mendapat agak beberapa daripada mereka,
beberapa yang lebih sukar, jadi menonton seluar pendek ini lagi
adalah cara yang baik untuk mendapatkan anda sehingga kelajuan.
Secara khususnya, saya akan dimasukkan ke dalam palam bagi 3 di bawah, kerana saya lakukan mereka.
Tetapi jika anda sedang bergelut dengan binari, bit, hex, yang jenis barangan,
binari adalah tempat yang hebat untuk bermula.
ASCII adalah salah satu yang baik untuk melihat juga.
Anda juga boleh menonton saya pada kelajuan 1.5x jika saya akan terlalu lambat untuk anda.
Sejak kajian itu, berasa bebas untuk berbuat demikian.
>> Hanya untuk memulakan benar-benar cepat, kita akan pergi melalui beberapa masalah-masalah ini kuiz
hanya untuk cepat melahirkan melalui.
Sebagai contoh, mari kita lihat pada 16 masalah bahawa saya telah mendapat hak di sini di papan.
Kami telah mendapat pengiraan berikut dalam binari,
dan kita mahu untuk menunjukkan apa-apa kerja.
Okay, saya akan memberikan pukulan.
Kalian harus mengikuti bersama-sama dengan kertas,
dan kami akan melakukan ini benar-benar cepat.
Kita mahu untuk melaksanakan pengiraan berikut dalam perduaan.
Saya telah mendapat 00110010.
Dan saya akan menambah ia 00110010.
Untuk matematik genius mengikuti bersama-sama di rumah,
ini berkesan mendarabkan dengan 2.
Mari kita mulakan.
Kami akan mengikuti algoritma penambahan yang sama yang kita lakukan
apabila kita menambah nombor perpuluhan bersama-sama.
Betul-satunya perbezaan di sini adalah bahawa kita gelung kembali sekitar
apabila kita mempunyai 1 + 1 bukan sekali kita sampai ke 10.
>> Jika kita bermula dari kanan, benar-benar cepat, apa angka pertama?
[Pelajar] 0. >> [Nate H.] 0.
Besar, angka kedua?
[Pelajar] 1.
[Nate H.] Adakah ia 1? 1 + 1?
[Pelajar] 10.
[Nate H.] Tepat sekali, jadi apakah angka bahawa saya menulis betul-betul di bawah 2 yang ditambah bersama-sama?
[Pelajar] 1, 0, atau 0 dan kemudian membawa 1.
[Nate H.] 0 dan bawa 1, sebenarnya.
Satu depan sehingga, Basil, anda.
Apa yang ketiga? >> [Basil] 1.
[Nate H.] 1, sempurna. Kevin?
[Kevin] 0. >> [Nate H.] 0, Charlotte?
[Charlotte] 0. >> [Nate H.] Yeah, dan apa yang saya lakukan?
[Pelajar] 1.
[Nate H.] Dan apa yang saya lakukan? Dan kemudian saya bawa 1.
Sempurna, Sahb? >> [Sahb] Sekarang anda mempunyai 1.
[Nate H.] Dan saya lakukan apa-apa di sini?
[Sahb] Kemudian untuk satu seterusnya anda mempunyai 1 kerana anda membawa lebih daripada 1.
[Nate H.] Besar, jadi di sini kita boleh menyelesaikan ia.
Sejuk.
[Pelajar] Adakah 0 + 0 = 0?
0 + 0 = 0.
1 + 1, seperti yang anda kata, 10, atau 1, 0, sebaliknya.
10 adalah tepat kerana saya 10 bermakna nombor 10,
dan ia adalah quirk bagaimana kita mewakili apabila kita menulis.
Kami mewakili nombor 2 1, 0, dan nombor 10 adalah sedikit berbeza.
>> Apakah jenis baik tentang binari adalah bahawa ada benar-benar tidak bahawa banyak
kes anda perlu belajar.
Ada 0 + 0 = 0, 0 + 1 = 1,
1 + 1 adalah 0, dan kemudian bawa 1,
dan kemudian anda boleh lihat di sini pada ruang ketiga dari kanan
kita terpaksa 1, 1, dan 1.
Dan 1 + 1 + 1 adalah 1,
dan anda membawa lagi 1.
Apabila anda melakukan samping binari, agak mudah.
Saya melakukan lebih beberapa ini kepada kewarasan memeriksa dirimu
sebelum anda pergi kerana ini adalah
mungkin sesuatu yang kita akan melihat pada kuiz.
Sekarang mari kita buat satu ini datang juga.
Mari kita buat masalah 17.
Kami akan menukar nombor binari berikut kepada nombor perpuluhan.
Saya telah mendapat 10100111001.
Ingat dalam video binari yang saya lakukan
Saya berjalan melalui beberapa contoh, dan saya menunjukkan bagaimana
semua kerja-kerja apabila anda melakukannya dalam perpuluhan.
Apabila anda bekerja dalam perwakilan perpuluhan Saya fikir kita
pada ketika ini dalam kehidupan kita supaya fasih di dalamnya bahawa
ia adalah agak mudah untuk menyembunyikan mekanik bagaimana ia sebenarnya berfungsi.
>> Tetapi untuk melakukan recap cepat, jika saya mempunyai nombor 137
ini benar-benar bermakna dan lagi, ini adalah dalam perpuluhan perwakilan-
nombor 137 dalam perpuluhan bermakna bahawa saya mempunyai 1 x 100 + 3 x 10 + 7 x 1.
Ini adalah semua tinggal di skrin.
Dan kemudian jika anda melihat nombor-nombor di sini,
100, 10 dan 1, anda lihat bahawa mereka sebenarnya semua kuasa 10.
Saya mempunyai 10 ², 10 ¹, dan 10 hingga sifar.
Kami mempunyai jenis yang sama perkara dalam binari,
kecuali bahawa asas kami, seperti yang kita panggil ia, adalah 2 bukannya 10.
Ini 10s bahawa saya menulis di sini di bawah,
ini ² 10, 10 ¹, 10 hingga sifar, 10 adalah asas kami,
dan eksponen, 0, 1, atau 2,
tersirat oleh kedudukan angka dalam bilangan yang kita menulis.
1, jika kita melihat ia, ini 1 dalam kedudukan ke-2.
3, adalah dalam kedudukan 1, dan 7 adalah dalam kedudukan 0.
Itulah bagaimana kita mendapat pelbagai atlet bawah untuk asas kami.
>> Berikutan semua ini we'll-sebenarnya, anda tahu apa?
Kami akan lakukan-mana butang batal saya pergi?
Terdapat ia pergi.
Saya suka ini perkara batal.
Berikutan ini, saya berfikir bagi saya sekurang-kurangnya
cara paling mudah untuk mula menukar nombor binari
atau nombor perenambelasan mana asas adalah 16
dan bukan 10 atau 2 adalah untuk pergi ke hadapan dan menulis
asas dan eksponen untuk semua nombor dalam nombor perduaan saya di atas.
Jika kita bermula dari kiri ke kanan lagi,
yang jenis bertentang,
Saya akan menukar kembali kepada hitam di sini, kami mempunyai 2 ke kedudukan 0,
dan kemudian kita mempunyai 2 ¹, 2 ²,
dan kemudian 2 hingga 3, 2 hingga 4, 2 5, 6,
7, 8, 9, dan 10.
Nombor-nombor yang saya telah ditulis keluar semua atlet.
Saya hanya menulis asas di sini dalam 3 tahun pertama hanya untuk ruang.
>> Pada ketika ini, saya akan pergi ke hadapan dan saya sebenarnya akan memadam
barangan yang kita lakukan dalam perpuluhan, jika itu okay.
Anda semua telah mendapat.
Mereka anda menonton talian saya pasti akan dapat memundurkan saya jika anda ingin.
Menghidupkan kembali ke kandang.
Kini, apa yang kita boleh lakukan jika anda lelaki tidak benar-benar sehingga kelajuan pada kuasa anda 2,
yang benar-benar sejuk.
Ia berlaku. Saya faham.
Saya pernah wawancara pekerjaan di mana saya diberitahu saya perlu tahu semua kuasa 2
melalui 2 hingga 30hb.
Ia bukan kerja saya.
Bagaimanapun, anda semua boleh pergi ke hadapan dan melakukan matematik di sini,
tetapi dengan binari ia tidak benar-benar masuk akal,
dan juga ia masuk akal dengan perpuluhan atau perenambelasan sama ada,
untuk melakukan matematik di mana anda mempunyai sifar.
Anda boleh melihat saya mempunyai 0 di sini, 0 di sini, 0 di sini, 0 di sini, 0 di sini, 0 di sini.
Mengapa ia mungkin tidak masuk akal untuk melakukan matematik sebenar
untuk mengira kuasa yang sesuai 2 untuk jawatan itu?
Tepat sekali, seperti Charlotte berkata, ia akan menjadi 0.
Juga mungkin menyelamatkan diri masa jika mengira kuasa 2 tidak adalah saman kuat anda.
Dalam kes ini, kita hanya perlu untuk mengira ia untuk 2 0 yang adalah?
[Pelajar] 1.
[Nate H.] 1, 2 3, yang adalah?
[Pelajar] 8. >> [Nate H.] 8.
2 ke 4?
[Pelajar] 2. Saya minta maaf, 1.
[Nate H.] 2 kepada 4, 16, sebenarnya.
2 kepada 5, Kevin? >> 32.
[Nate H.] 32, 2 kepada 8?
[Pelajar] 32 x 8, 256.
[Nate H.] Perfect.
Dan 2 ke 10?
[Pelajar] 1024.
[Nate H.] Yeah, 1024.
>> Apabila kita telah mendapat nombor-nombor ini kita boleh jumlah mereka semua.
Dan ini adalah di mana ia adalah benar-benar penting untuk melakukan beberapa perkara.
Satu pergi perlahan dan menyemak kerja anda.
Anda boleh memberitahu bahawa terdapat adalah 1 pada akhir nombor ini,
jadi saya pasti perlu mendapatkan nombor ganjil akibat saya,
kerana semua orang-orang lain akan menjadi nombor genap
memandangkan bahawa ia adalah nombor perduaan.
Perkara lain untuk dilakukan adalah jika anda sampai ke tahap ini pada ujian
dan anda telah ditulis ia keluar sejauh ini
dan anda kehabisan masa
melihat bilangan mata bahawa masalah ini adalah bernilai.
Masalah ini, seperti yang anda lihat jika saya menyelak kembali ke komputer riba saya benar-benar cepat-
masalah ini adalah bernilai 2 mata, jadi ini bukanlah jenis tambahan
anda perlu pergi melalui jika anda benar-benar tertekan dengan masa.
Tetapi kita akan menukar kembali untuk iPad, dan kita akan pergi melalui ia benar-benar cepat.
>> Saya suka melakukan nombor kecil pertama
kerana saya mendapati bahawa lebih mudah.
Saya suka 32 dan 8 kerana mereka pergi bersama-sama dengan agak mudah, dan kita mendapat 50.
16 dan 1 mendapat 17.
Terdapat kita akan mendapat 57,
dan kemudian kita boleh melakukan rehat ini, jadi kita boleh lakukan 57, 156.
Datang pada.
Man, baik, mari kita lihat.
Kami mempunyai 57, 256, dan 1024.
Pada ketika ini, saya agak hanya pergi melalui.
Saya tidak mempunyai petunjuk. Saya jelas perlu membaca sehingga mengenai perkara ini.
7, 6, dan 4, anda akan mendapat 17.
1, 5, 5, 2, 13.
Maka kita akan mendapat 3, dan kemudian kita dapatkan 1.
1337.
Easter telur, sesiapa?
Sesiapa yang mengenali nombor ini?
Chris mengiktiraf nombor. Apakah maknanya, Chris?
[Chris] Leet.
Leet, jadi jika anda melihat ini, ia kelihatan seperti leet.
Barangan Hacker. Watch out for jenis barangan pada separuh penggal atau kuiz, sebaliknya bahawa.
Jika anda melihat bahawa jenis barangan dan anda tertanya-tanya "Huh,"
yang sebenarnya mungkin bermakna sesuatu.
Saya tidak tahu. David suka meletakkan ia masuk
Ia adalah satu cara yang baik untuk kewarasan check it.
Seperti okay, saya boleh melihat apa yang berlaku.
>> Itulah Minggu 0/Week 1 barangan.
Jika kita menghidupkan kembali untuk komputer riba kita sekarang,
mengezum keluar, dan beberapa perkara lain.
Ada ASCII, yang kita telah melakukan banyak dengan set masalah.
Ini tanggapan modal A. Apa yang benar-benar?
Mengetahui ia integer perpuluhan.
65 adalah apa yang ia dipetakan ke dalam jadual ASCII,
dan itulah maka bagaimana komputer menulis,
dan itulah bagaimana kita telah mendapat diri dengan sebenarnya bertulis
modal aksara A dan watak huruf kecil
dalam beberapa penyelesaian dan set masalah yang anda telah lakukan.
Beberapa perkara-perkara lain.
Kami telah mendapat kenyataan, ungkapan boolean, syarat, gelung, pembolehubah dan benang.
>> Mereka semua seolah-olah masuk akal untuk sebahagian besar?
Beberapa istilah ini adalah funky sedikit pada masa-masa.
Saya suka berfikir satu kenyataan sebagai sesuatu yang paling bahagian yang berakhir dengan semicolon.
Penyata seperti x = 7, yang menetapkan pembolehubah,
mungkin dipanggil x = 7.
Mungkin x adalah juga jenis yang boleh menyimpan nombor 7,
jadi ia adalah satu int atau mungkin apungan atau pendek atau char,
sesuatu seperti itu.
Satu ungkapan boolean menggunakan double-sama
dan bang yang sama atau tidak sama, kurang daripada, lebih besar daripada,
kurang daripada atau sama, semua jenis yang barangan.
Syarat kemudian adalah kenyataan jika lain.
Saya akan ingat bahawa anda tidak boleh mempunyai seorang lain tanpa sepadan jika.
Begitu juga, anda tidak boleh mempunyai seorang lain jika tanpa sepadan jika.
Gelung, ingat 3 jenis gelung kita telah mengetuk kepada anda
untuk pasangan terakhir seksyen dan set masalah.
Menggunakan buat sementara apabila anda mendapat input pengguna,
menggunakan manakala gelung sehingga keadaan tertentu adalah benar,
dan kemudian menggunakan mereka untuk gelung jika anda perlu
tahu yang lelaran gelung anda kini adalah bagaimana saya berfikir tentang hal itu.
Atau jika anda melakukan untuk setiap aksara dalam rentetan saya mahu melakukan sesuatu,
bagi setiap elemen dalam array Saya mahu melakukan sesuatu untuk elemen yang.
>> Benang dan acara.
Ini kita telah tidak dilindungi begitu jelas dalam C,
tetapi ingat ini dari scratch.
Ini adalah tanggapan mempunyai skrip yang berbeza.
Ini adalah juga tanggapan ini penyiaran acara.
Sesetengah orang tidak menggunakan penyiaran dalam projek-projek mereka pada mulanya,
yang benar-benar sejuk,
tetapi ini adalah 2 cara yang berbeza mengendalikan isu ini yang lebih besar dipanggil keserentakan,
yang adalah bagaimana anda mendapatkan program-program untuk melaksanakan
atau seolah-olah melaksanakan pada masa yang sama?
Tugas yang berbeza berjalan manakala tugas-tugas lain juga berjalan.
Ini adalah bagaimana sistem operasi anda seolah-olah bekerja.
Ini adalah mengapa walaupun, sebagai contoh,
Saya telah mendapat pelayar saya berjalan, saya juga boleh bertukar pada Spotify dan memainkan lagu.
Itulah lebih benda konsep untuk memahami.
Saya akan mengambil melihat pada benang pendek
jika anda ingin mengetahui lebih lanjut mengenai itu.
>> Mari kita lihat, saya percaya terdapat mungkin telah
masalah mengenai perkara ini dalam salah satu daripada ini.
Sekali lagi, saya fikir benang dan peristiwa tidak adalah sesuatu yang kita akan meliputi dalam C
hanya kerana ia adalah ketara lebih sukar daripada di Scratch.
Anda tidak perlu bimbang tentang hal itu di sana, tetapi pasti memahami konsep,
memahami apa yang berlaku.
Sebelum kita bergerak ke atas, mana-mana soalan di Minggu 0 bahan?
Semua orang berasa cukup baik?
Memahami pembolehubah dan apa pembolehubah?
>> Melangkah. Minggu 1.
Beberapa perkara di sini yang tidak terutamanya dilindungi
dalam kajian kuiz semestinya dan juga lebih konsep perkara untuk berfikir tentang.
Yang pertama adalah tanggapan ini apa kod sumber, penyusun dan kod objek.
Sesiapa? Basil.
Adakah kod objek yang saya maksudkan kod sumber adalah apa yang anda masukkan ke dalam dilafaz,
dan kod objek adalah apa dilafaz meletakkan keluar supaya komputer anda boleh membaca program.
Tepat sekali.
Kod sumber kod C yang anda sebenarnya menaip sehingga.
Kod objek adalah apa yang anda dapatkan daripada dilafaz.
Ia adalah 0 dan 1s dalam format binari yang.
Kemudian apa yang berlaku ialah apabila anda mempunyai sekumpulan fail objek,
mengatakan anda sedang menyusun projek atau program yang menggunakan fail kod sumber yang pelbagai,
yang oleh konvensyen diberi lanjutan fail c.
Itulah sebabnya kita mempunyai caesar.c, vigenère.c.
Jika anda menulis program Jawa anda memberikan mereka lanjutan. Java.
Program Python mempunyai lanjutan. Py sering.
>> Sebaik sahaja anda mempunyai fail berbilang c, anda menyusun mereka.
Dilafaz memuntahkannya keluar semua ini ringan binari.
Kemudian kerana anda hanya mahu 1 program
anda mempunyai pautan pemaut semua objek ini memfailkan bersama-sama
ke dalam 1 fail boleh laku.
Ini juga apa yang berlaku apabila anda menggunakan perpustakaan CS50, sebagai contoh.
Perpustakaan CS50 adalah kedua-dua yang h file kepala
bahawa anda membaca, yang # includecs50.h.
Dan kemudian ia juga perpustakaan fail binari khas
yang telah disusun yang 0 dan 1s,
dan bahawa-l bendera, jadi jika kita pergi kembali ke kawasan kami dan kita melihat benar-benar cepat
pada apa yang berlaku di sini apabila kita melihat pada command dilafaz kami,
apa yang kita telah mendapat ini adalah fail kod sumber kami di sini.
Ini adalah sekumpulan bendera pengkompil.
Dan kemudian pada akhir sangat, ini-l bendera pautan dalam
perduaan fail sebenar untuk ini 2 perpustakaan, perpustakaan CS50 dan kemudian perpustakaan matematik.
>> Memahami setiap jenis tujuan fail '
dalam proses penyusunan adalah sesuatu yang anda akan mahu untuk dapat
memberikan sekurang-kurangnya gambaran tahap yang tinggi.
Kod sumber datang masuk kod Objek keluar.
Fail kod objek menghubungkan bersama-sama, dan anda mendapat yang indah, fail boleh laku.
Sejuk.
Inilah juga di mana anda boleh mendapatkan kesilapan di mata berganda
dalam proses penyusunan.
Ini adalah di mana, sebagai contoh, jika anda mengambil keluar ini bendera menghubungkan,
bendera CS50, dan anda meninggalkan ia di Ruang atau apabila anda menjalankan kod anda,
ini adalah di mana anda akan mendapat kesilapan dalam fasa yang menghubungkan,
dan pemaut akan berkata, "Hei, anda dipanggil GetString fungsi
yang dalam perpustakaan CS50. "
"Anda memberitahu saya ia adalah di perpustakaan CS50, dan saya tidak dapat mencari kod untuk itu."
Itulah di mana anda perlu untuk menghubungkan, dan itulah yang berasingan
dari kesilapan pengkompil kerana pengkompil melihat sintaks dan yang jenis barangan.
Ia adalah baik untuk mengetahui apa yang berlaku apabila.
>> Perkara lain yang perlu tahu tentang.
Saya akan mengatakan anda pasti mahu mengambil melihat pada pendek atas typecasting yang dilakukan oleh Jordan
untuk memahami apa yang ints adalah di bawah hood,
apa yang aksara adalah di bawah hood.
Apabila kita bercakap mengenai ASCII dan kita sebenarnya melihat jadual ASCII,
apa yang yang melakukan memberi kita di bawah melihat hud
bagaimana komputer sebenarnya mewakili modal A dan 7 digit
dan koma dan tanda tanya.
Komputer juga mempunyai cara-cara yang khas untuk mewakili
nombor 7 sebagai integer.
Ia mempunyai cara yang khas untuk mewakili nombor 7 sebagai nombor titik terapung,
dan mereka adalah sangat berbeza.
Typecasting adalah bagaimana anda memberitahu komputer "Hei, saya mahu anda untuk menukar
dari satu perwakilan kepada perwakilan yang lain. "
Mengapa tidak kita mengambil melihat itu.
>> Saya juga ingin mengambil melihat ringkas mengenai perpustakaan dan pendek pada penyusun.
Mereka yang bercakap tentang proses penyusunan,
apa perpustakaan, dan pergi atas beberapa soalan-soalan yang anda mungkin akan diminta.
Soalan pada bahan Minggu 1?
Adakah terdapat mana-mana topik di sini yang kelihatan menakutkan anda ingin untuk menutup?
Saya cuba untuk meniup melalui kebanyakan topik-topik ini lebih awal supaya kita boleh mendapatkan
petunjuk dan melakukan sedikit rekursi.
Pemikiran?
Apa-apa sahaja untuk melindungi?
Masa untuk coklat mungkin?
Kalian bekerja melaluinya.
Saya akan terus menghirup pada kopi saya.
Minggu 2.
Panggilan yang baik, panggilan yang baik.
Minggu 2 kita bercakap sedikit lebih lanjut mengenai fungsi.
>> Dalam masalah pertama beberapa set kita tidak benar-benar menulis apa-apa fungsi di semua
selain daripada mana fungsi?
[Pelajar] Main. >> Main, tepat.
Dan jadi kami telah melihat pakaian yang berbeza yang utama memakai.
Ada satu di mana ia tidak mengambil hujah-hujah,
dan kita hanya mengatakan tidak sah di antara kurungan,
dan kemudian ada satu lagi di mana kita tidak mahu mengambil hujah baris arahan,
dan seperti yang kita lihat, yang mana anda mempunyai int argc dan tali argv pelbagai
atau sekarang bahawa kita telah benar-benar terdedah tali untuk menjadi * char bahawa ia adalah
kita akan mula menulis ia sebagai char * argv dan kemudian kurungan.
Dalam Set Masalah 3, anda semua melihat sekumpulan fungsi,
dan anda dilaksanakan sekumpulan fungsi, melukis, mencari, perebutan.
Prototaip semua ditulis di sana untuk anda.
>> Apa yang saya mahu bercakap tentang di sini dengan fungsi benar-benar cepat
adalah bahawa terdapat 3 bahagian untuk mereka apabila anda menulis fungsi.
Anda perlu menentukan jenis pulangan fungsi.
Anda perlu nyatakan nama untuk fungsi, dan kemudian anda perlu menentukan
senarai hujah atau senarai parameter.
Sebagai contoh, jika saya adalah untuk menulis fungsi untuk meringkaskannya sekumpulan integer
dan kemudian kembali kepada saya jumlah apa yang akan menjadi jenis pulangan saya
jika saya mahu kepada jumlah integer dan kemudian kembali jumlah?
Kemudian nama fungsi.
Jika saya pergi ke hadapan dan menulis dalam hijau, bahagian ini adalah jenis pulangan.
Bahagian ini ialah nama.
Dan kemudian di antara kurungan
adalah di mana saya memberi hujah,
sering disingkatkan sebagai args, kadang-kadang dipanggil params bagi parameter.
Dan jika anda mempunyai satu, anda hanya nyatakan satu.
Jika anda mempunyai berbilang anda memisahkan setiap satu dengan koma.
Dan bagi setiap hujah yang anda berikan 2 perkara yang Kevin?
[Kevin] Anda perlu memberikan jenis dan kemudian nama.
Dan kemudian nama, dan nama adalah nama yang anda hendak gunakan
untuk merujuk kepada hujah bahawa dalam fungsi jumlah,
dalam fungsi yang anda sedang menulis.
>> Anda tidak perlu untuk contoh, jika saya akan meringkaskannya,
berkata, pelbagai integer we'll melakukan pelbagai int,
dan saya akan memberikan saya beberapa pendakap kerinting sana-
kemudian apabila saya lulus pelbagai fungsi jumlah
Saya lulus dalam kedudukan pertama senarai hujah.
Tetapi pelbagai bahawa saya lulus dalam tidak perlu mempunyai arr nama.
Tiba akan menjadi bagaimana saya merujuk kepada hujah bahawa dalam badan fungsi.
Perkara lain yang kita perlu mengambil kira,
dan ini adalah sedikit berbeza daripada fungsi, tetapi saya fikir ia adalah satu titik penting,
adalah bahawa dalam C apabila saya menulis berfungsi seperti ini
bagaimana saya tahu berapa banyak elemen dalam array ini?
Ini adalah agak soalan helah.
Kita bercakap tentang ini sedikit dalam seksyen minggu lepas.
Bagaimana saya tahu bilangan unsur-unsur di dalam pelbagai dalam C?
Adakah terdapat cara?
>> Ia ternyata bahawa tidak ada cara untuk mengetahui.
Anda perlu lulus secara berasingan.
Terdapat satu helah yang boleh anda lakukan
jika anda berada dalam fungsi yang sama di mana array telah diisytiharkan,
dan anda bekerja dengan pelbagai timbunan.
Tetapi itu hanya berfungsi jika anda berada dalam majlis yang sama.
Sebaik sahaja anda lulus array ke fungsi yang lain atau jika anda telah mengisytiharkan array
dan anda meletakkan pelbagai bahawa pada timbunan itu, anda telah digunakan malloc
dan yang jenis barangan, maka semua pertaruhan adalah di luar.
Kemudian anda sebenarnya perlu untuk lulus sekitar
hujah khas atau parameter lain
memberitahu anda berapa besar array.
Dalam kes ini, saya mahu menggunakan koma: saya maaf, ia terkeluar skrin di sini-
dan saya lulus dalam hujah lain
dan memanggilnya len int untuk panjang.
>> Satu perkara yang mungkin datang pada kuiz
meminta anda untuk menulis atau melaksanakan sesuatu fungsi tertentu dipanggil.
Jika kita tidak memberikan anda prototaip, jadi keseluruhan perkara ini di sini,
ini keadaan kucar-kacir keseluruhan dipanggil akuan fungsi atau prototaip fungsi,
ini adalah salah satu perkara pertama yang anda akan mahu untuk memakukan jika ia tidak diberi
kepada anda segera kuiz.
Itu helah lain yang saya telah belajar adalah bahawa
mengatakan kita lakukan memberi anda prototaip bagi fungsi, dan kita katakan, "Hei, anda telah mendapat untuk menulis."
Di dalam pendakap kerinting bahawa anda mempunyai kuiz
jika anda perasan bahawa terdapat satu jenis pulangan dan anda notis bahawa jenis pulangan
adalah sesuatu yang lain daripada tidak sah, yang bermaksud bahawa fungsi tersebut tidak akan kembali apa-apa,
maka salah satu perkara yang anda pasti mahu lakukan adalah menulis
beberapa jenis penyata pulangan pada akhir sangat fungsi.
Kembali, dan dalam kes ini, kita akan meletakkan kosong kerana kita mahu untuk mengisi ruang kosong.
Tetapi ini mendapat anda berfikir dengan cara yang betul tentang bagaimana aku hendak untuk mendekati masalah ini?
Dan ia mengingatkan anda anda akan mempunyai untuk kembali nilai
pemanggil fungsi.
>> Yeah. >> [Pelajar] Adakah gaya memohon apabila kita menulis kod kuiz?
Seperti lekukan dan yang jenis barangan? >> [Pelajar] Yeah.
Tidak, tidak seperti banyak.
Saya fikir banyak-ini adalah sesuatu yang kita akan menjelaskan pada kuiz pada hari,
tetapi biasanya bimbang tentang # termasuk dan yang jenis barangan, ia adalah jenis luar.
[Pelajar] Adakah anda perlu mengulas kod tulisan tangan anda?
Adakah anda perlu mengulas kod tulisan tangan anda?
Mengulas sentiasa baik jika anda bimbang tentang kredit separa
atau anda mahu untuk berkomunikasi niat anda untuk gred.
Tetapi saya, sekali lagi, akan menjelaskan pada kuiz sendiri dan pada hari kuiz,
tetapi saya tidak percaya bahawa anda akan dikehendaki untuk menulis komen, tidak.
Biasanya tidak, tetapi ia pasti jenis perkara di mana
anda boleh berkomunikasi niat anda, seperti "Hei, ini adalah di mana saya akan dengan ia."
Dan kadang-kadang yang boleh membantu dengan kredit separa.
Sejuk.
>> Basil.
[Basil] Apakah perbezaan antara mengisytiharkan, katakan, int lang
dalam hujah atau parameter berbanding mengisytiharkan pembolehubah dalam fungsi?
Wow, kopi pergi ke salur udara.
[Basil] Seperti yang perkara yang kita mahu dimasukkan ke dalam hujah.
Ya, itulah persoalan yang besar.
Bagaimana anda memilih apa perkara yang anda mahu dimasukkan ke dalam hujah-hujah
berbanding apa perkara yang perlu anda lakukan dalam fungsi?
Dalam kes ini kita termasuk kedua-dua ini sebagai hujah
kerana mereka sesuatu bahawa sesiapa yang akan menggunakan fungsi jumlah
perlu untuk menentukan perkara-perkara.
>> Fungsi Kesimpulannya, seperti yang kita bercakap tentang, tidak mempunyai cara untuk mengetahui
bagaimana besar array ia mendapat dari pemanggil atau sesiapa yang menggunakan fungsi jumlah.
Ia tidak mempunyai cara untuk mengetahui bagaimana besar pelbagai yang.
Sebab kita lulus panjang ini di sini sebagai hujah
kerana itulah sesuatu yang kita pada dasarnya memberitahu pemanggil fungsi,
sesiapa yang akan menggunakan fungsi jumlah, "Hei, bukan sahaja yang anda perlu untuk memberikan kita array
ints, anda juga perlu memberitahu kita bagaimana besar pelbagai bahawa anda telah memberikan kita. "
[Basil] Mereka kedua-duanya akan menjadi hujah baris arahan?
Tidak, ini adalah hujah sebenar yang anda akan lulus untuk fungsi.
>> Biar saya buat halaman baru di sini.
[Basil] Seperti nama akan lulus-
[Nate H.] Jika saya mempunyai int utama (tidak sah),
dan saya akan meletakkan di titik 0 pulangan saya ke sini di bawah,
dan berkata saya mahu untuk memanggil fungsi jumlah.
Saya ingin katakan int x = jumlah ();
Untuk menggunakan fungsi jumlah saya perlu lulus dalam kedua-dua array yang saya mahu untuk meringkaskannya
dan panjang array, jadi ini adalah di mana
menganggap saya mempunyai pelbagai ints,
katakan saya mempunyai int numbaz [] = 1, 2, 3,
jenis penggunaan yang digodam sehingga sintaks di sana,
maka apa yang saya akan lakukan adalah dalam jumlah saya mahu lulus dalam
kedua-dua numbaz dan Nombor 3
untuk memberitahu fungsi jumlah "Baiklah, di sini adalah pelbagai saya mahu anda untuk meringkaskannya."
"Berikut adalah saiznya."
Adakah yang masuk akal? Adakah itu menjawab soalan anda?
>> Dalam banyak cara ia tidak selari apa yang kita sedang lakukan dengan utama
apabila kita mempunyai hujah-hujah baris arahan.
Satu program seperti Caesar cipher, sebagai contoh, yang diperlukan
hujah baris arahan tidak akan dapat berbuat apa-apa.
Ia tidak akan tahu bagaimana untuk menyulitkan jika anda tidak memberitahu apa kunci untuk digunakan
atau jika anda tidak beritahu apa rentetan anda mahu menyulitkan.
Mendorong untuk input, ini adalah di mana kita telah mendapat 2 mekanisme yang berbeza
untuk mengambil input dari pengguna, untuk mengambil maklumat dari pengguna.
Untuk Set Masalah 1 kita lihat GetInt ini, GetString, cara GetFloat
mendorong untuk input, dan yang dipanggil menggunakan aliran input standard.
Ia adalah sedikit berbeza.
Ia adalah sesuatu yang boleh anda lakukan pada satu-satu masa berbanding dengan
apabila kamu sembah program, apabila anda memulakan program ini berjalan.
Hujah baris arahan semua dinyatakan apabila anda memulakan program berjalan.
Kami telah mencampurkan dua daripada mereka.
Apabila kita menggunakan hujah ke fungsi, ia adalah sama seperti hujah baris arahan untuk utama.
Ia adalah apabila anda sembah fungsi yang anda perlu untuk memberitahu
apa sebenarnya ia perlu untuk melaksanakan tugasnya.
Satu lagi perkara yang baik untuk melihat dan saya akan membiarkan anda melihat ia dalam masa lapang anda,
dan ia telah diliputi dalam kuiz ini tanggapan skop
dan pembolehubah tempatan berbanding pembolehubah global.
Adakah memberi perhatian itu.
>> Sekarang kita sedang mendapatkan barangan ini lain,
dalam 3 Minggu kami mula bercakap tentang mencari dan menyusun.
Mencari dan sorting, sekurang-kurangnya dalam CS50,
adalah amat pengenalan kepada beberapa bahagian yang lebih teori sains komputer.
Masalah mencari, masalah sorting
adalah besar, masalah kanun.
Bagaimana anda mencari beberapa tertentu dalam pelbagai berbilion integer?
Bagaimana anda mencari nama tertentu di dalam buku telefon
yang disimpan pada komputer riba anda?
Dan supaya kita memperkenalkan idea ini kali jangka asimptot
untuk benar-benar mengira berapa lama, bagaimana keras masalah ini adalah,
berapa lama mereka ambil untuk menyelesaikan.
Dalam, saya percaya, kuiz tahun 2011 ada masalah yang saya fikir merit
meliputi sangat cepat, yang satu ini, masalah 12.
O tidak, ia adalah Omega.
>> Di sini kita bercakap tentang jangka masa terpantas mungkin
untuk algoritma tertentu dan kemudian masa berjalan perlahan mungkin.
Ini Omega dan O adalah benar-benar hanya jalan pintas.
Mereka pintasan notasi untuk mengatakan
bagaimana pantas dalam kes yang terbaik mungkin akan menjalankan algoritma kami,
dan bagaimana perlahan dalam kes terburuk mungkin algoritma kami akan berjalan?
Mari kita buat beberapa ini, dan ini juga dilindungi
pendek pada notasi asimptot, yang saya sangat mengesyorkan.
Jackson melakukan kerja yang benar-benar baik.
Dengan carian perduaan, kita bercakap tentang carian binari sebagai algoritma,
dan biasanya kita bercakap tentang dari segi O. besar
Apakah O besar?
Apakah masa jangka perlahan mungkin carian binari?
[Pelajar] N ²?
Tutup, saya rasa serupa dengan itu.
Ia banyak yang lebih cepat daripada itu.
[Pelajar] Perduaan? >> Ya, carian dedua.
[Pelajar] Ia log n.
Log n, jadi apa yang tidak log n bermakna?
Ia bahagian setiap lelaran.
Tepat sekali, jadi dalam kes yang lebih perlahan mungkin,
mengatakan jika anda mempunyai pelbagai yang disusun
juta integer dan nombor anda sedang mencari
sama ada elemen yang sangat pertama dalam array atau elemen yang sangat terakhir dalam array.
Ingat, algoritma carian binari berfungsi dengan melihat elemen tengah,
melihat jika itulah perlawanan yang anda sedang mencari.
Jika ia, maka besar, anda mendapati ia.
>> Dalam kes terbaik, berapa cepat tidak jangka carian binari?
[Pelajar] 1.
1, ia adalah masa yang berterusan, besar Wahai 1. Yeah.
[Pelajar] Saya mempunyai satu soalan. Apabila anda mengatakan log n, anda maksudkan dengan hormat kepada asas 2, kan?
Ya, supaya perkara yang lain.
Kami mengatakan n log, dan saya rasa apabila saya berada di sekolah menengah
Saya sentiasa menganggap bahawa log asas 10.
Yeah, jadi ya, sila layari asas 2 biasanya adalah apa yang kita gunakan.
Sekali lagi, akan kembali ke carian binari, jika anda sedang mencari sama ada
elemen pada akhir sangat atau elemen di awal-awal lagi,
kerana anda bermula di tengah-tengah dan kemudian anda membuang
mana 1/2 tidak memenuhi kriteria yang anda sedang mencari,
dan anda pergi ke separuh seterusnya dan separuh seterusnya dan separuh seterusnya.
Jika saya mencari elemen terbesar dalam array juta integer
Saya akan mengurangkan separuh pada log kebanyakan 1 juta kali
sebelum saya akhirnya menguji dan melihat bahawa unsur Saya mencari
adalah dalam terbesar atau dalam indeks tertinggi array,
dan yang akan mengambil log n, log 1 juta kali.
>> Bubble apapun.
Adakah anda semua ingat jenis algoritma gelembung?
Kevin, anda boleh memberi saya recap cepat daripada apa yang berlaku dalam algoritma apapun gelembung?
[Kevin] Pada asasnya, ia akan melalui segala-galanya dalam senarai.
Ia kelihatan pada dua yang pertama.
Jika yang pertama adalah lebih besar daripada satu kedua ia swap mereka.
Kemudian ia membandingkan kedua dan ketiga, perkara yang sama, swap,
ketiga dan keempat, semua jalan ke bawah.
Besar nombor akan mengikuti sehingga akhir.
Dan selepas gelung bagaimanapun banyak anda selesai.
Tepat sekali, jadi apa yang Kevin berkata bahawa kami akan menonton lebih besar nombor
gelembung sehingga akhir array.
Sebagai contoh, adakah anda keberatan berjalan kita melalui contoh ini jika ini adalah pelbagai kami?
[Kevin] Anda akan mengambil masa 2 dan 3.
3 adalah lebih besar daripada 2, jadi anda menukar mereka.
[Nate H.] Hak, jadi kami menukar ini, dan supaya kita mendapat 2, 3, 6, 4, dan 9.
[Kevin] Kemudian anda membandingkan 3 dan 6.
3 adalah lebih kecil daripada 6, jadi anda meninggalkan mereka,
dan 6 dan 4, anda akan menukar mereka kerana 4 adalah lebih kecil daripada 6.
[Nate H.] Betul, jadi saya mendapat 2, 3, 4, 6, 9.
[Kevin] Dan 9 adalah lebih besar daripada 6, jadi anda meninggalkan ia.
Dan anda akan kembali melalui sekali lagi.
>> [Nate H.] Adakah saya dilakukan pada ketika ini? >> [Kevin] No
Dan mengapa saya tidak dilakukan pada ketika ini?
Kerana ia kelihatan seperti pelbagai saya diselesaikan. Saya melihat ia.
[Kevin] Pergi melalui sekali lagi dan pastikan bahawa terdapat tidak lebih swap
sebelum anda boleh berhenti sepenuhnya.
Tepat sekali, jadi anda perlu untuk menyimpan pergi melalui dan pastikan bahawa tiada swap
bahawa anda boleh membuat pada ketika ini.
Ia adalah benar-benar hanya bernasib baik, seperti yang anda kata, bahawa kita akhirnya
hanya perlu membuat 1 pas melalui dan kita sedang disusun.
Tetapi untuk melakukan ini dalam kes umum, kita sebenarnya akan mempunyai untuk melakukan ini berulang-ulang kali.
Dan sebenarnya, ini adalah satu contoh kes yang terbaik,
seperti yang kita lihat dalam masalah ini.
Kami melihat bahawa kes terbaik n.
Kami pergi melalui masa array 1.
Apakah kes terburuk yang mungkin bagi algoritma ini?
[Kevin] N ².
Dan apakah rupa yang suka? Apa yang akan melihat pelbagai seperti itu akan mengambil masa ² n?
[Kevin] [didengar] disusun.
Tepat sekali, jadi jika saya mempunyai array 9, 7, 6, 5, 2,
pertama 9 akan gelembung sepanjang jalan sehingga.
Selepas 1 lelaran kita akan mempunyai 7, 6, 5, 2, 9.
Kemudian 7 akan gelembung up, 6, 5, 2, 7, 9, dan sebagainya dan sebagainya.
>> Kita akan mempunyai untuk pergi melalui pelbagai keseluruhan n kali,
dan anda sebenarnya boleh mendapatkan sedikit lebih tepat daripada ini
kerana sekali kita telah berpindah 9 sepanjang jalan sehingga ke jawatan terakhir mungkin
kita tahu bahawa kita tidak perlu untuk membandingkan terhadap elemen yang lagi.
Sebaik sahaja kita mula menggelegak 7 sehingga
kita tahu bahawa kita boleh berhenti sekali 7 adalah betul sebelum 9
kerana kita sudah berbanding 9 kepadanya.
Jika anda melakukan ini dalam cara yang bijak, ia tidak benar-benar, saya rasa, bahawa banyak masa.
Anda tidak akan membandingkan semua kemungkinan [didengar] kombinasi
setiap kali tunggal anda pergi melalui setiap lelaran.
Tetapi masih, apabila kita bercakap tentang ini terikat atas kita katakan bahawa
anda sedang melihat n ² perbandingan sepanjang jalan melalui.
>> Mari kita kembali, dan sejak kita bermula untuk mendapatkan sedikit kesuntukan masa
Saya akan mengatakan anda pasti perlu pergi melalui seluruh jadual ini,
mengisi semua keluar.
Fikirkan contoh. Fikirkan contoh konkrit.
Itu benar-benar berguna dan membantu untuk melakukan.
Lukiskan ia keluar.
Ini adalah jenis jadual yang seperti anda pergi melalui dalam bidang sains komputer
anda benar-benar harus bermula untuk tahu ini hati oleh.
Ini adalah jenis soalan yang anda dapat dalam wawancara.
Ini adalah pelbagai perkara-perkara yang baik untuk mengetahui,
dan berfikir tentang kes-kes di pinggir, benar-benar memikirkan bagaimana untuk berfikir tentang
mengetahui bahawa untuk menyelesaikan gelembung array terburuk mungkin
untuk menyelesaikan dengan itu adalah salah satu yang dalam susunan terbalik.
>> Petunjuk. Mari kita bercakap sedikit tentang petunjuk.
Dalam beberapa minit terakhir kita ada di sini
Saya tahu ini adalah sesuatu bersama-sama dengan fail I / O yang agak baru.
Apabila kita bercakap mengenai petunjuk sebab kita mahu bercakap tentang petunjuk
adalah kerana, satu, apabila kita sedang berusaha dalam C
kita benar-benar pada tahap yang agak rendah berbanding dengan bahasa pengaturcaraan yang paling moden.
Kami sebenarnya mampu untuk memanipulasi pembolehubah dalam ingatan,
memikirkan ke mana mereka hendak pergi sebenarnya terletak dalam RAM kami.
Sebaik sahaja anda telah pergi untuk mengambil kelas sistem operasi anda akan melihat
bahawa, sekali lagi, jenis pengekstrakan.
Itu bukan sebenarnya kes itu.
Kami telah mendapat memori maya yang menyembunyikan butiran dari kami.
>> Tetapi kini anda boleh mengandaikan bahawa apabila anda mempunyai program,
contohnya, apabila anda mula menjalankan program-cipher Caesar anda
Saya akan bertukar kembali kepada iPad saya benar-benar cepat-
bahawa pada program yang sangat awal, jika anda mempunyai, katakan,
4 gigabait RAM pada laptop anda,
anda mendapat mengetepikan sebahagian ini, dan kita akan panggil RAM ini.
Dan ia bermula di tempat kita pergi untuk memanggil 0,
dan ia berakhir di tempat yang kita akan memanggil 4 gigabait.
Saya benar-benar tidak boleh menulis. Man, yang digodam.
Apabila program anda melaksanakan
sistem operasi mengukir RAM,
dan ia menentukan segmen yang berbeza untuk bahagian yang berlainan program anda, kuasailah
Down sini kawasan ini adalah jenis tanah tidak lelaki.
Apabila anda pergi sedikit lebih jauh di sini
anda telah mendapat sebenarnya tempat di mana
kod program untuk kehidupan anda.
Itu kod binari sebenar, bahawa fail boleh laku sebenarnya mendapat dimuatkan ke dalam memori
apabila anda menjalankan program, dan ia hidup dalam segmen kod.
Dan sebagai program anda melaksanakan pemproses kelihatan di segmen kod ini
untuk mengetahui apakah arahan yang seterusnya?
Apakah garis seterusnya kod saya perlu untuk melaksanakan?
>> Terdapat juga segmen data, dan ini adalah di mana mereka pemalar rentetan
mendapat disimpan bahawa anda telah menggunakan.
Dan kemudian lebih jauh sehingga ada tempat ini dipanggil timbunan itu.
Kami mengakses memori di sana dengan menggunakan malloc,
dan kemudian ke arah sangat atas program anda
terdapat timbunan,
dan itulah di mana kita telah bermain bagi kebanyakan permulaan.
Ini bukan skala atau apa-apa.
Banyak ini adalah sangat bergantung kepada mesin,
sistem operasi bergantung, tetapi ini adalah agak bagaimana perkara mendapatkan chunked sehingga.
Apabila anda menjalankan program dan anda mengisytiharkan pembolehubah dipanggil x-
Saya akan menarik kotak lain bawah, dan ini akan menjadi RAM serta.
Dan saya akan untuk melihat.
Kami akan menarik garis bergerigi untuk menunjukkan ini hanya bahagian kecil RAM
dan tidak semua ia sebagai kita melukis di atas.
>> Jika saya mengisytiharkan satu pembolehubah integer dipanggil x,
maka apa yang saya benar-benar mendapatkan pemetaan
yang disimpan dalam jadual simbol program saya
yang menghubungkan x nama kepada rantau ini memori yang saya telah disediakan
di sini antara bar menegak.
Jika saya mempunyai baris kod dalam program saya yang mengatakan bahawa x = 7
pemproses tahu "Oh, okay, saya tahu bahawa x kehidupan di lokasi ini dalam ingatan."
"Saya akan pergi ke hadapan dan menulis 7 satu di sana."
Bagaimana ia tahu apa lokasi ini adalah dalam ingatan?
Nah, itu semua dilakukan pada masa kompil.
Pengkompil menjaga memperuntukkan di mana setiap pembolehubah akan pergi
dan mewujudkan pemetaan khas atau sebaliknya menghubungkan titik
antara simbol dan di mana ia pergi, nama pembolehubah
dan di mana ia akan hidup dalam ingatan.
Tetapi ternyata bahawa kita sebenarnya boleh mengaksesnya dalam program-program kami juga.
Ini mendapat penting apabila kita mula bercakap tentang beberapa struktur data,
yang merupakan satu konsep bahawa kita akan memperkenalkan kemudian.
>> Tetapi untuk sekarang, apa yang anda boleh tahu bahawa saya boleh membuat penunjuk ke lokasi ini, x.
Sebagai contoh, saya boleh mencipta pembolehubah penunjuk.
Apabila kita mewujudkan satu penuding kita menggunakan notasi bintang.
Dalam kes ini, ini mengatakan saya akan mewujudkan penunjuk int.
Ia adalah satu jenis sama seperti mana-mana lain.
Kami memberikan pembolehubah seperti y,
dan kemudian kita menetapkan ia sama dengan alamat, alamat.
Dalam kes ini, kita boleh menetapkan y ke titik x
dengan mengambil alamat x, yang kita lakukan dengan #: glib ini,
dan kemudian kami menetapkan y menunjukkan.
Apa ini pada dasarnya tidak ialah jika kita melihat RAM kami
ini mencipta pembolehubah yang berasingan.
Ia akan memanggilnya y,
dan apabila garis kod ini melaksanakan
ia sebenarnya akan mewujudkan penunjuk yang sedikit yang kita biasanya menarik sebagai anak panah,
dan ia menetapkan y untuk menunjukkan ke x.
Ya.
[Pelajar] Jika x ialah sudah penunjuk, anda akan hanya melakukan
int * y = x bukannya mempunyai #: glib?
Ya.
Jika x sudah penunjuk, maka anda boleh menetapkan 2 petunjuk sama antara satu sama lain,
di mana y tidak akan menunjukkan kepada x,
tetapi ia akan menunjukkan apa-apa x menunjuk ke.
Malangnya, kita berada di luar masa.
>> Apa yang saya ingin katakan pada ketika ini, kita boleh bercakap tentang offline ini,
tetapi saya akan mengatakan mula bekerja melalui masalah ini, # 14.
Anda boleh lihat sudah ada sedikit diisi untuk anda di sini.
Anda boleh melihat bahawa apabila kita mengaku 2 petunjuk, int * x * y,
dan ambil perhatian bahawa menunjuk * sebelah pembolehubah adalah sesuatu yang telah dilakukan pada tahun lepas.
Ia ternyata bahawa ini adalah serupa dengan apa yang kita lakukan tahun ini.
Ia tidak kira di mana anda menulis * apabila anda mengisytiharkan penunjuk.
Tetapi kita telah menulis * seterusnya jenis
kerana yang menjadikan ia sangat jelas bahawa anda mengisytiharkan pembolehubah penunjuk.
Anda boleh melihat bahawa mengisytiharkan 2 petunjuk memberikan kita 2 kotak.
Di sini apabila kita menetapkan x sama untuk malloc
apa ini mengatakan mengetepikan memori dalam timbunan.
Ini kotak kecil di sini, bulatan ini, terletak pada timbunan.
X menunjuk kepada ia.
Perhatikan bahawa y masih tidak menunjuk kepada apa-apa.
Untuk mendapatkan memori untuk menyimpan nombor 42 ke x
kita akan menggunakan apa notasi?
[Pelajar] * x = 42.
Tepat sekali, * x = 42.
Ini bermakna mengikuti anak panah dan membuang 42 di sana.
Di sini di mana kita menetapkan y dan x kita y telah menunjuk ke x.
Sekali lagi, ini adalah sama seperti apa yang Kevin berkata mana kita menetapkan y sama ke x.
Y tidak menunjuk ke x.
Sebaliknya, ia menunjuk ke apa x menunjuk serta.
>> Dan kemudian akhirnya dalam kotak terakhir ini terdapat 2 perkara yang mungkin yang boleh kita lakukan.
Salah satunya adalah kita boleh mengatakan * x = 13.
Satu perkara lagi ialah kita boleh mengatakan Alex, adakah anda tahu apa yang kita boleh lakukan di sini?
Anda boleh mengatakan * x = 13 atau-
[Pelajar] Anda boleh mengatakan apa sahaja int.
[Nate H.] Jika ini telah dirujuk sebagai pembolehubah int kita boleh berbuat demikian.
Kita juga boleh mengatakan * y = 13 kerana kedua-dua mereka sedang menunjuk ke tempat yang sama,
supaya kita boleh menggunakan sama ada berubah-ubah untuk sampai ke sana.
Yeah. >> [Pelajar] Apa yang ia akan kelihatan seperti jika kita hanya mengatakan int x ialah 13?
Yang akan mengisytiharkan pembolehubah baru yang dipanggil x, yang tidak akan bekerja.
Kita akan mempunyai perlanggaran kerana kita diisytiharkan x untuk menjadi penunjuk di sini.
[Pelajar] Jika kita hanya mempunyai kenyataan itu dengan sendirinya apa yang ia akan kelihatan seperti dari segi bulatan?
Jika kita mempunyai x = 13 maka kita akan mempunyai kotak, dan bukannya mempunyai anak panah
keluar dari kotak, kita akan menarik ia sebagai hanya 13.
[Pelajar] Dalam kotak. Okay.
>> Terima kasih kerana menonton, dan nasib baik pada Kuiz 0.
[CS50.TV]