2 00:00:00,000 --> 00:00:02,760 >> ลำโพง 1: ลองเขียนโปรแกรมที่ แจ้งให้ผู้ใช้ชื่อและ 3 00:00:02,760 --> 00:00:04,700 บ้านสามนักเรียน 4 00:00:04,700 --> 00:00:08,840 ขณะนี้การจัดเก็บรายชื่อเหล่านั้นและบ้าน เราสามารถใช้สิ่งที่ตัวแปรหก 5 00:00:08,840 --> 00:00:12,260 สามสายสำหรับชื่อและอีก สามสายสำหรับบ้านที่ 6 00:00:12,260 --> 00:00:16,560 แต่เรารู้อยู่แล้วว่าเราสามารถทำความสะอาด รหัสว่าด้วยการใช้อาร์เรย์แทน 7 00:00:16,560 --> 00:00:20,220 เช่นอาร์เรย์ขนาด 3 สามชื่อและอาเรย์ของอื่น 8 00:00:20,220 --> 00:00:22,110 ขนาด 3 สำหรับบ้าน 9 00:00:22,110 --> 00:00:25,870 แต่มันจะเปิดออกเราสามารถทำความสะอาดนี้ขึ้น ต่อไปยังและจริงให้ผู้ที่ 10 00:00:25,870 --> 00:00:30,520 ชื่อและที่บ้านด้วยกันเพื่อให้ ชื่อนักเรียนและบ้านของเขาหรือเธอ 11 00:00:30,520 --> 00:00:34,940 จะห่อหุ้มอย่างใดจึงจะ พูดเป็นตัวแปรเดียวกัน 12 00:00:34,940 --> 00:00:39,095 >> การทำเช่นนี้ แต่เราต้องการที่จะประกาศ ชนิดข้อมูลของเราเองชนิดของเราเองใน C 13 00:00:39,095 --> 00:00:42,660 ว่าผู้เขียนของ C ก็ไม่จำเป็นต้อง คิดว่าปีที่ผ่านมา 14 00:00:42,660 --> 00:00:45,630 การทำเช่นนี้เราสามารถใช้คำหลัก typedef พร้อมกับ 15 00:00:45,630 --> 00:00:47,200 struct คำหลักอื่น ๆ 16 00:00:47,200 --> 00:00:48,160 ลองมาดู 17 00:00:48,160 --> 00:00:50,650 ภายใน structs.h เราได้แล้ว อากาศที่เริ่มโดย 18 00:00:50,650 --> 00:00:52,560 รวมทั้งห้องสมุด CS50 19 00:00:52,560 --> 00:00:57,640 ฉันต่อไปจะพิมพ์ typedef struct, แล้ววงเล็บปีกกา 20 00:00:57,640 --> 00:01:01,370 ภายในของ struct ที่ฉันจะ ระบุว่านักเรียนจะต้องมี 21 00:01:01,370 --> 00:01:04,960 สตริงเรียกชื่อและอื่น ๆ สตริงที่เรียกว่าบ้าน 22 00:01:04,960 --> 00:01:08,430 ฉันกำลังจะไปแล้วปิดวงเล็บปีกกาของฉัน และระบุว่าชื่อของ 23 00:01:08,430 --> 00:01:11,420 ชนิดข้อมูลใหม่นี้จะเป็นนักเรียน 24 00:01:11,420 --> 00:01:15,550 ในคำอื่น ๆ ผ่านทางรูปแบบนี้มีฉัน ประกาศให้เป็นชนิดข้อมูลใหม่ของตัวเอง 25 00:01:15,550 --> 00:01:19,910 ที่ไม่อยู่ในขณะที่ผ่านมาและ ภายในของชนิดข้อมูลนี้มีสองข้อมูล 26 00:01:19,910 --> 00:01:24,270 เขตข้อมูลหรือข้อมูลที่เป็นสมาชิกคนหนึ่งที่เรียกว่าชื่อ บ้านที่เรียกว่าอย่างใดอย่างหนึ่งซึ่งทั้งสองอย่าง 27 00:01:24,270 --> 00:01:25,630 เป็นประเภทของสตริง 28 00:01:25,630 --> 00:01:27,690 >> ตอนนี้ขอใช้ชนิดนี้ ในโปรแกรมที่เกิดขึ้นจริง 29 00:01:27,690 --> 00:01:30,210 30 00:01:30,210 --> 00:01:34,090 ใน structs0.c ผมเคยเหมือนกัน ตัวเองเริ่มต้นแล้วกับบาง 31 00:01:34,090 --> 00:01:36,999 รหัสสำเร็จรูปและฉันตอนนี้ จะใช้ข้อมูลนี้ 32 00:01:36,999 --> 00:01:39,100 ประเภทนักศึกษาดังต่อไปนี้ 33 00:01:39,100 --> 00:01:42,450 ฉันจะเป็นครั้งแรกที่จะประกาศ อาร์เรย์ของประเภทนักเรียนฉันจะ 34 00:01:42,450 --> 00:01:43,920 เรียกนักเรียนอาร์เรย์ - 35 00:01:43,920 --> 00:01:44,630 พหูพจน์ - 36 00:01:44,630 --> 00:01:49,360 และฉันจะระบุว่าขนาดของมันจะเป็น สามซึ่งแจ้งให้ทราบล่วงหน้าเป็นค่าของ 37 00:01:49,360 --> 00:01:50,880 นักเรียนคงที่ - 38 00:01:50,880 --> 00:01:51,890 ในเมืองหลวงทั้งหมด - 39 00:01:51,890 --> 00:01:54,930 ที่ผมเคยประกาศขึ้นที่นี่ ก่อนหน้านี้ในแฟ้ม 40 00:01:54,930 --> 00:01:58,280 ตอนนี้ขอย้ำกว่าทั้งสาม นักเรียนและแจ้งให้ผู้ใช้สำหรับ 41 00:01:58,280 --> 00:02:00,050 ชื่อและที่บ้านของพวกเขา 42 00:02:00,050 --> 00:02:05,422 >> เพื่อ int ฉันได้รับ 0, i น้อย กว่าคงที่ i + + 43 00:02:05,422 --> 00:02:08,600 และตอนนี้ในของร่างนี้สำหรับ ห่วงฉันจะพิมพ์ออกมาบางสิ่งบางอย่าง 44 00:02:08,600 --> 00:02:11,470 เช่นชื่อของนักเรียน 45 00:02:11,470 --> 00:02:14,890 แล้วฉันจะได้รับจริงว่า โดยระบุชื่อของนักเรียน 46 00:02:14,890 --> 00:02:17,290 นักเรียนวงเล็บฉัน 47 00:02:17,290 --> 00:02:21,550 ในคำอื่น ๆ ที่ฉันต้องการของนักเรียนลำดับที่ i ในอาร์เรย์เรียกว่านักเรียน แต่ตอนนี้ 48 00:02:21,550 --> 00:02:25,340 ฉันต้องการที่จะได้รับที่ที่ฉัน th-ของนักเรียน ชื่อและการทำเช่นนี้ฉันจะใช้ 49 00:02:25,340 --> 00:02:30,160 ผู้ประกอบการเพื่อให้ได้รับที่ เขตข้อมูลที่เฉพาะเจาะจงภายในของ struct 50 00:02:30,160 --> 00:02:37,100 ดังนั้นผมจึงระบุนักเรียนวงเล็บผมชื่อ. ได้รับค่าตอบแทนของ GetString () 51 00:02:37,100 --> 00:02:40,310 ในขณะที่ฉันกำลังจะพิมพ์ออกมา สิ่งที่คล้ายกันว่านักเรียน 52 00:02:40,310 --> 00:02:45,410 บ้านและตอนนี้ฉันกำลังจะไประบุ ที่สนามบ้านนักเรียน i th- 53 00:02:45,410 --> 00:02:49,480 จะได้รับค่าตอบแทนของ โทร GetString อื่น () 54 00:02:49,480 --> 00:02:52,350 >> ตอนนี้ขอทำอะไรกับทั้งสาม ชื่อของนักเรียนและบ้าน 55 00:02:52,350 --> 00:02:56,230 สิ่งที่ง่ายเช่นการพิมพ์ ออกมาในแต่ละประโยค 56 00:02:56,230 --> 00:03:07,580 เพื่อ int ฉันได้รับ 0, อีกครั้งฉันมีค่าน้อยกว่า นักเรียน i + +, printf "% s ใน% s 57 00:03:07,580 --> 00:03:12,600 เครื่องหมาย n "และตอนนี้ให้ฉันเสียบ ค่าของคนสองเขตข้อมูล 58 00:03:12,600 --> 00:03:19,055 นักเรียนวงเล็บผมชื่อจุลภาค. นักเรียนวงเล็บ i. บ้านใกล้ 59 00:03:19,055 --> 00:03:21,290 วงเล็บเครื่องหมายอัฒภาค 60 00:03:21,290 --> 00:03:23,020 >> และตอนนี้ฉันต้องทำอีกสิ่งหนึ่ง 61 00:03:23,020 --> 00:03:26,600 ที่ด้านล่างของไฟล์นี้, ฉันต้องการที่จะ หน่วยความจำที่ได้รับการจัดสรร 62 00:03:26,600 --> 00:03:30,290 เบื้องหลังโดย GetSring () ซึ่ง แน่นอนโทร malloc เพื่อ 63 00:03:30,290 --> 00:03:32,500 จัดสรรหน่วยความจำสำหรับสตริง ประเภทผู้ใช้ 64 00:03:32,500 --> 00:03:35,720 แต่นี้เป็นเรื่องง่าย 65 00:03:35,720 --> 00:03:42,610 เพื่อ int ฉันได้รับ 0, i น้อยกว่า นักเรียน i + + และภายในร่างกายของ 66 00:03:42,610 --> 00:03:48,670 สำหรับวงนี้ผมก็จะไป ให้ฟรีวงเล็บชื่อนักเรียน i. 67 00:03:48,670 --> 00:03:52,300 และนักเรียนฟรียึดบ้านฉัน. 68 00:03:52,300 --> 00:03:55,620 >> ตอนนี้ที่เราได้นำมาใช้อย่างชัดเจนสามห่วง ในโปรแกรมนี้เมื่อฉันจริงๆ 69 00:03:55,620 --> 00:03:58,800 จะได้ใช้เพียงหนึ่ง แต่นี้เป็น เพียงเพื่อประโยชน์ของการสาธิตเพื่อให้ 70 00:03:58,800 --> 00:04:02,850 เราสามารถระบุได้ในสามที่แตกต่าง ขั้นตอนที่ว่าสิ่งที่เรากำลังทำ 71 00:04:02,850 --> 00:04:06,120 เรากำลังเป็นครั้งแรกที่ได้รับชื่อและที่บ้าน สำหรับแต่ละคนเรานั้น 72 00:04:06,120 --> 00:04:08,900 พิมพ์ออกชื่อและที่บ้าน แต่ละแห่งที่สามนักเรียนและ 73 00:04:08,900 --> 00:04:11,910 แล้วเรากำลังจะฟรีหน่วยความจำ ที่ใช้โดยแต่ละของนักเรียน 74 00:04:11,910 --> 00:04:15,310 แต่แน่นอนว่าเราจะได้รวมนี้ เป็นหนึ่งที่ใหญ่กว่าสำหรับวง 75 00:04:15,310 --> 00:04:18,650 >> ตอนนี้ขอบันทึกรวบรวม และเรียกใช้โปรแกรมนี้ 76 00:04:18,650 --> 00:04:26,850 ทำให้ structs 0. / structs 0, นักเรียน ชื่อขอให้เดวิดเขาจะมีชีวิตอยู่ 77 00:04:26,850 --> 00:04:31,580 ในท้องบ้านชื่อของนักเรียนให้ ลอเรนบอกว่าเธอจะอาศัยอยู่ใน Leverett 78 00:04:31,580 --> 00:04:36,590 บ้านชื่อนักเรียนร็อบเขาจะ อาศัยอยู่ในบ้านเคิร์กแลนด์ 79 00:04:36,590 --> 00:04:39,440 และแน่นอนเดวิดอยู่ในท้อง ลอเรนที่อยู่ใน Leverett, 80 00:04:39,440 --> 00:04:40,810 และร็อบอยู่ในเคิร์กแลนด์ 81 00:04:40,810 --> 00:04:43,425