1 00:00:00,000 --> 00:00:02,395 >> [Bermain muzik] 2 00:00:02,395 --> 00:00:05,750 3 00:00:05,750 --> 00:00:06,506 >> DOUG LLOYD: OK. 4 00:00:06,506 --> 00:00:08,880 Kami telah bekerja dengan bilangan bulat, kami telah bekerja dengan watak-watak, 5 00:00:08,880 --> 00:00:11,930 kami telah bekerja terapung, beregu, tali, dan bools. 6 00:00:11,930 --> 00:00:14,870 Kami telah habis hampir semua yang [didengar] jenis yang 7 00:00:14,870 --> 00:00:17,100 telah disediakan untuk kita semua bersama-sama. 8 00:00:17,100 --> 00:00:19,430 Tetapi sekarang kita mahu melakukan sesuatu yang lebih. 9 00:00:19,430 --> 00:00:20,210 Bagaimana kita berbuat demikian? 10 00:00:20,210 --> 00:00:22,560 Bagaimana kita membuat pelbagai jenis data yang berbeza? 11 00:00:22,560 --> 00:00:26,130 Kita boleh berbuat demikian dengan menggunakan struktur. 12 00:00:26,130 --> 00:00:30,180 Jadi struktur membolehkan kita untuk menyatukan pembolehubah jenis 13 00:00:30,180 --> 00:00:34,810 ke dalam satu, jenis pembolehubah baru, mana kita boleh memberikan nama jenis sendiri. 14 00:00:34,810 --> 00:00:37,570 Ini adalah benar-benar kuat Perkara yang dapat dilakukan, 15 00:00:37,570 --> 00:00:40,900 kerana kita kini boleh kumpulan elemen data berlainan jenis 16 00:00:40,900 --> 00:00:43,910 bersama-sama yang mempunyai hubungan yang logik. 17 00:00:43,910 --> 00:00:46,440 Kami telah mampu untuk melakukan ini dengan pameran jenis, bukan? 18 00:00:46,440 --> 00:00:49,540 Kami kumpulan boleh pembolehubah jenis data yang sama 19 00:00:49,540 --> 00:00:53,410 bersama-sama dalam unit yang besar memori, array. 20 00:00:53,410 --> 00:00:56,660 >> Tetapi kami tidak mampu untuk bergaul sehingga jenis data yang berbeza bersama-sama. 21 00:00:56,660 --> 00:01:02,610 Kita tidak boleh, berkata, pasangan integer, dan watak, dan dua semua 22 00:01:02,610 --> 00:01:05,330 dalam perkara yang sama dan memanggil bahawa satu unit tunggal. 23 00:01:05,330 --> 00:01:08,830 Tetapi dengan struktur, atau sering dirujuk sebagai structs, 24 00:01:08,830 --> 00:01:09,585 kita benar-benar boleh. 25 00:01:09,585 --> 00:01:12,370 Jadi struktur adalah jenis daripada seperti pembolehubah super. 26 00:01:12,370 --> 00:01:16,530 Ia adalah satu pembolehubah yang mengandungi pembolehubah lain di dalamnya. 27 00:01:16,530 --> 00:01:19,650 Jadi di sini adalah satu contoh struktur yang sangat mudah. 28 00:01:19,650 --> 00:01:23,380 Inilah yang sintaks akan kelihatan suka untuk mewujudkan struktur untuk kereta. 29 00:01:23,380 --> 00:01:25,250 Sekarang, mari kita pergi melalui sintaks di sini. 30 00:01:25,250 --> 00:01:27,400 Struct, itulah kata kunci yang menunjukkan 31 00:01:27,400 --> 00:01:30,270 bahawa saya mewujudkan jenis data baru di sini. 32 00:01:30,270 --> 00:01:33,860 Khususnya, nama jenis data adalah akan menjadi kereta struct, seperti yang kita akan lihat. 33 00:01:33,860 --> 00:01:36,640 Tetapi ini adalah jenis tip off untuk pengkompil bahawa ini 34 00:01:36,640 --> 00:01:42,440 sebagai satu kumpulan pembolehubah yang akan untuk dianggap sebagai sebahagian daripada jenis yang sama 35 00:01:42,440 --> 00:01:44,010 dalam satu minit. 36 00:01:44,010 --> 00:01:46,340 >> Kereta, hanya nama struktur. 37 00:01:46,340 --> 00:01:50,590 Sekali lagi, jenis data di sini akan menjadi kereta struct, bukan hanya kereta. 38 00:01:50,590 --> 00:01:53,060 Tetapi jika anda mempunyai different-- jika anda membuat beberapa structs 39 00:01:53,060 --> 00:01:56,950 dalam program yang sama, anda perlu membezakan antara struct dan struct. 40 00:01:56,950 --> 00:02:00,140 Kereta supaya struct, saya juga mungkin mempunyai pelajar struct, sebagai contoh, 41 00:02:00,140 --> 00:02:01,790 dalam program yang sama. 42 00:02:01,790 --> 00:02:05,980 Di dalam pendakap kerinting adalah semua apa yang dikenali sebagai bidang, 43 00:02:05,980 --> 00:02:07,954 atau anggota struktur. 44 00:02:07,954 --> 00:02:10,370 Jadi apakah beberapa perkara yang wujud dalam kereta? 45 00:02:10,370 --> 00:02:15,270 Nah, ia biasanya mempunyai setahun, telah nama model, dan plat lesen, 46 00:02:15,270 --> 00:02:18,000 yang odometer yang biasanya mempunyai beberapa beberapa batu di atasnya, 47 00:02:18,000 --> 00:02:19,225 dan mungkin saiz enjin. 48 00:02:19,225 --> 00:02:23,570 Dan seperti yang anda lihat, saya mencampurkan integer dan watak-watak dan beregu. 49 00:02:23,570 --> 00:02:26,420 Mereka semua akan menjadi sebahagian daripada jenis data baru ini. 50 00:02:26,420 --> 00:02:29,750 >> Akhir sekali, perkara terakhir yang saya perlu lakukan, jangan lupa koma bertitik kecil ini 51 00:02:29,750 --> 00:02:30,290 pada akhir. 52 00:02:30,290 --> 00:02:34,380 Selepas kami selesai menentukan struktur, kita perlu meletakkan koma bernoktah di hujung. 53 00:02:34,380 --> 00:02:37,325 Ia adalah satu sintaksis yang biasa kesilapan, kerana dengan fungsi, 54 00:02:37,325 --> 00:02:40,200 sebagai contoh, anda hanya perlu kerinting terbuka, kerinting rapat. 55 00:02:40,200 --> 00:02:42,950 Anda tidak meletakkan koma bernoktah di akhir definisi fungsi. 56 00:02:42,950 --> 00:02:46,430 Ini kelihatan seperti fungsi definisi, tetapi tidak, 57 00:02:46,430 --> 00:02:49,653 dan sebagainya koma bertitik terdapat hanya peringatan bahawa anda 58 00:02:49,653 --> 00:02:52,440 perlu meletakkan ia di sana, kerana pengkompil akan sebaliknya tidak 59 00:02:52,440 --> 00:02:53,510 tahu apa yang perlu dilakukan dengan ia. 60 00:02:53,510 --> 00:02:56,160 Ia adalah satu kesilapan yang biasa sengaja membuat 61 00:02:56,160 --> 00:02:58,570 apabila anda pertama mendefinisikan struktur. 62 00:02:58,570 --> 00:02:59,500 >> OKAY. 63 00:02:59,500 --> 00:03:02,824 Oleh itu, kita biasanya menentukan struktur kita di bahagian paling program kami 64 00:03:02,824 --> 00:03:05,490 kerana mereka mungkin akan yang akan digunakan oleh pelbagai fungsi. 65 00:03:05,490 --> 00:03:08,850 Kita tidak mahu untuk menentukan struct bahagian dalam fungsi, 66 00:03:08,850 --> 00:03:12,110 kerana kita boleh only-- yang skop struktur benar-benar 67 00:03:12,110 --> 00:03:13,790 hanya wujud di dalam fungsi itu. 68 00:03:13,790 --> 00:03:17,450 Kami mungkin akan mahu menentukan struktur yang supaya kita boleh menggunakannya dalam pelbagai fungsi, 69 00:03:17,450 --> 00:03:20,670 atau mungkin dalam pelbagai fail yang diikat bersama-sama 70 00:03:20,670 --> 00:03:22,920 untuk mewujudkan program tunggal kami. 71 00:03:22,920 --> 00:03:24,920 Kadang-kadang juga sebaliknya mentakrifkan struktur 72 00:03:24,920 --> 00:03:27,961 di bahagian paling di mana anda meletakkan anda pound termasuk dan wang anda mentakrifkan, 73 00:03:27,961 --> 00:03:32,080 sebagai contoh, anda mungkin meletakkan mereka dalam fail dot h berasingan, yang anda 74 00:03:32,080 --> 00:03:35,020 pound termasuk diri sendiri. 75 00:03:35,020 --> 00:03:37,620 >> Oleh itu, kita mempunyai struktur, tetapi sekarang kita perlu mendapatkan di dalam mereka. 76 00:03:37,620 --> 00:03:39,800 Bagaimana kita mendapatkan bahagian dalam struktur untuk akses 77 00:03:39,800 --> 00:03:43,530 mereka sub-pembolehubah, pembolehubah-pembolehubah yang wujud dalam struktur? 78 00:03:43,530 --> 00:03:46,810 Nah, kita mempunyai sesuatu yang dipanggil pengendali titik, yang membolehkan kita 79 00:03:46,810 --> 00:03:50,990 untuk mengakses bidang struktur. 80 00:03:50,990 --> 00:03:55,490 Jadi, sebagai contoh, katakan saya telah diisytiharkan data struktur saya menaip di suatu tempat 81 00:03:55,490 --> 00:03:59,020 di bahagian atas program saya, atau mungkin dalam titik h fail yang saya telah paun dimasukkan. 82 00:03:59,020 --> 00:04:03,360 Jika saya kemudian mahu untuk mewujudkan baru pembolehubah yang jenis data, boleh saya katakan, 83 00:04:03,360 --> 00:04:06,260 kereta struct, kereta saya, koma bertitik. 84 00:04:06,260 --> 00:04:11,580 Sama seperti saya boleh mengatakan int x, atau nama rentetan koma bertitik. 85 00:04:11,580 --> 00:04:18,100 >> Jenis data di sini adalah kereta struct, nama pembolehubah adalah kereta saya, 86 00:04:18,100 --> 00:04:23,770 dan kemudian saya boleh menggunakan operator titik ke mengakses pelbagai bidang kereta saya. 87 00:04:23,770 --> 00:04:27,494 Jadi saya boleh mengatakan kereta saya tahun dot sama 2011. 88 00:04:27,494 --> 00:04:28,410 Yang betul-betul halus. 89 00:04:28,410 --> 00:04:34,210 Tahun, jika anda masih ingat, ditakrifkan sebagai bidang integer dalam kereta struct ini 90 00:04:34,210 --> 00:04:35,200 jenis data. 91 00:04:35,200 --> 00:04:39,966 Jadi apa-apa ubah data struct kereta jenis, seperti kereta saya, saya boleh mengatakan kereta saya 92 00:04:39,966 --> 00:04:44,030 tahun dot sama dan kemudian memberikan ia beberapa nilai integer, 2011. 93 00:04:44,030 --> 00:04:47,290 Plat kereta dot My sama CS50. 94 00:04:47,290 --> 00:04:51,180 Saya odometer kad dot sama dengan 50.505 koma bertitik. 95 00:04:51,180 --> 00:04:53,270 Kesemua mereka adalah betul-betul halus dan itulah 96 00:04:53,270 --> 00:04:57,802 bagaimana kita mengakses bidang struktur. 97 00:04:57,802 --> 00:05:00,260 Struktur, walaupun, tidak perlu yang akan diwujudkan pada timbunan. 98 00:05:00,260 --> 00:05:02,950 Sama seperti apa-apa ubah lain, kita dinamik boleh memperuntukkan mereka. 99 00:05:02,950 --> 00:05:06,309 Jika kita mempunyai program yang mungkin dapat menjana banyak struktur, 100 00:05:06,309 --> 00:05:08,100 kita tidak tahu berapa ramai kita akan perlukan, 101 00:05:08,100 --> 00:05:10,800 maka kita perlu dinamik memperuntukkan struktur tersebut 102 00:05:10,800 --> 00:05:12,960 kerana program kami sedang berjalan. 103 00:05:12,960 --> 00:05:16,600 Dan jadi jika kita akan mengakses bidang struktur yang dalam konteks itu, 104 00:05:16,600 --> 00:05:20,660 ingat bahawa pertama yang perlu kita dereference penunjuk kepada struktur, 105 00:05:20,660 --> 00:05:24,810 dan kemudian sekali kita dereference yang penunjuk, maka kita boleh mengakses bidang. 106 00:05:24,810 --> 00:05:26,830 Jika kita hanya mempunyai penunjuk kepada struktur, 107 00:05:26,830 --> 00:05:32,120 kita tidak boleh hanya berkata bidang penunjuk dot menamakan dan mendapat apa yang kita cari. 108 00:05:32,120 --> 00:05:34,259 Ada langkah tambahan sebanyak dereferencing. 109 00:05:34,259 --> 00:05:36,050 Jadi mari kita mengatakan bahawa bukannya previous-- yang 110 00:05:36,050 --> 00:05:38,770 seperti contoh sebelum ini, bukannya mengisytiharkan ia 111 00:05:38,770 --> 00:05:43,680 pada timbunan, kereta struct, saya kereta, koma bertitik, saya katakan kereta struct, 112 00:05:43,680 --> 00:05:48,020 bintang, penunjuk kepada kereta struct dipanggil kereta saya, 113 00:05:48,020 --> 00:05:51,250 sama saiz malloc kereta struct. 114 00:05:51,250 --> 00:05:54,950 Saiz kami akan memikirkan bagaimana banyak bait jenis data baru anda mengambil. 115 00:05:54,950 --> 00:05:58,570 Anda tidak semestinya hanya perlu menggunakan saiz, lebar, int, atau char, atau mana-mana 116 00:05:58,570 --> 00:05:59,715 satu jenis data terbina dalam. 117 00:05:59,715 --> 00:06:02,090 Pengkompil cukup pintar untuk memikirkan berapa banyak bait 118 00:06:02,090 --> 00:06:04,170 dikehendaki oleh struktur baru anda. 119 00:06:04,170 --> 00:06:09,610 Jadi saya malloc diri saya satu unit memori cukup besar untuk mengadakan kereta struct, 120 00:06:09,610 --> 00:06:12,410 dan saya mendapat penunjuk belakang itu blok ingatan, 121 00:06:12,410 --> 00:06:16,090 dan penunjuk yang diberikan ke kereta saya. 122 00:06:16,090 --> 00:06:18,050 >> Sekarang, jika saya mahu akses bidang kereta saya, 123 00:06:18,050 --> 00:06:22,615 Saya mula-mula dereference kereta saya menggunakan pengendali dereference, bintang 124 00:06:22,615 --> 00:06:26,620 yang kita lihat dari petunjuk video, dan kemudian selepas saya dereference, 125 00:06:26,620 --> 00:06:32,200 maka saya boleh menggunakan operator titik ke mengakses pelbagai bidang kereta saya. 126 00:06:32,200 --> 00:06:35,490 Bintang kereta saya dot tahun sama 2011. 127 00:06:35,490 --> 00:06:38,480 Yang akan mempunyai kesan yang kita mahu dalam kes ini, 128 00:06:38,480 --> 00:06:41,960 kerana kami telah dinamik diperuntukkan kereta saya. 129 00:06:41,960 --> 00:06:43,610 >> Itulah jenis menjengkelkan, walaupun, bukan? 130 00:06:43,610 --> 00:06:44,818 Ada proses 2 langkah sekarang. 131 00:06:44,818 --> 00:06:47,460 Sekarang kita perlu dereference-- kita mempunyai operator bintang, 132 00:06:47,460 --> 00:06:48,910 dan kami mempunyai operator titik. 133 00:06:48,910 --> 00:06:51,660 Dan seperti yang anda jangkakan, kerana Pengaturcara C suka cara yang lebih pendek 134 00:06:51,660 --> 00:06:53,740 untuk melakukan sesuatu, ada cara yang lebih pendek untuk melakukan ini. 135 00:06:53,740 --> 00:06:57,790 Terdapat pengendali lain yang dipanggil anak panah, yang menjadikan proses ini lebih mudah. 136 00:06:57,790 --> 00:07:00,750 Cara panah berfungsi ialah ia dereferences pertama 137 00:07:00,750 --> 00:07:03,560 penunjuk di sebelah kiri sisi pengendali, 138 00:07:03,560 --> 00:07:06,620 dan kemudian, setelah dereferenced penunjuk di sebelah kiri, 139 00:07:06,620 --> 00:07:09,620 ia mengakses padang di sebelah kanan. 140 00:07:09,620 --> 00:07:14,170 Dan sebagainya sebelum ini kita mempunyai seperti ini Star kereta saya dot semua barangan ini, 141 00:07:14,170 --> 00:07:15,880 seperti ada banyak berlaku di sana. 142 00:07:15,880 --> 00:07:22,040 Tetapi apa yang kita bukannya boleh lakukan ialah this-- saya kereta panah tahun sama 2011. 143 00:07:22,040 --> 00:07:23,580 >> Sekali lagi, apa yang berlaku di sini? 144 00:07:23,580 --> 00:07:25,720 Pertama, saya dereferencing kereta saya. 145 00:07:25,720 --> 00:07:27,810 Yang sekali lagi, adalah penunjuk di sini. 146 00:07:27,810 --> 00:07:31,270 Kemudian, selepas dereferenced kereta saya, saya 147 00:07:31,270 --> 00:07:35,130 kemudian boleh mengakses bidang tahun, plat, dan odometer 148 00:07:35,130 --> 00:07:40,020 hanya kerana saya boleh sebelum terlebih dahulu bintang digunakan untuk dereference kereta saya, 149 00:07:40,020 --> 00:07:42,020 dan titik untuk mengakses lapangan. 150 00:07:42,020 --> 00:07:45,290 Jadi, anda boleh mempunyai struktur, anda boleh mempunyai petunjuk untuk struktur, 151 00:07:45,290 --> 00:07:48,360 dan anda mempunyai cara-cara untuk akses bidang struktur tersebut, 152 00:07:48,360 --> 00:07:52,600 sama ada anda mempunyai petunjuk untuk mereka atau pemboleh ubah diri mereka sendiri. 153 00:07:52,600 --> 00:07:57,640 Dot atau kekunci anak, bergantung kepada bagaimana pembolehubah telah diisytiharkan. 154 00:07:57,640 --> 00:08:00,510 Saya Doug Lloyd, ini adalah CS50. 155 00:08:00,510 --> 00:08:01,975