დინამიკები 1: მოდით დავწეროთ პროგრამა, რომელიც თხოვს მომხმარებელს სახელები და სახლები სამი სტუდენტებს. ახლა, შესანახად იმ სახელები და სახლები ჩვენ შეგვიძლია გამოვიყენოთ, რა, ექვსი ცვლადები. სამი strings სახელები და სხვა სამი სტრიქონებს სახლები, მაგრამ ჩვენ უკვე ვიცით, რომ შეიძლება სუფთა up რომ კოდი გამოყენებით მასივები ნაცვლად, მაგალითად მასივი ზომა 3 სამი სახელები, და სხვა მასივი ზომა 3 სახლები. მაგრამ აღმოჩნდება, რომ ჩვენ შეგვიძლია გაწმენდა ამ up შემდგომი მაინც, და რეალურად შენარჩუნება იმ სახელები და სახლები ერთად, ისე, რომ სტუდენტის სახელი და მისი სახლი როგორღაც encapsulated, ასე ვთქვათ, იმავე ცვლადი. ამის გაკეთება, თუმცა, ჩვენ უნდა განაცხადოს ჩვენი საკუთარი მონაცემები ტიპის, ჩვენი ტიპის C, რომ ავტორები C არ არის აუცილებელი ვფიქრობ წლის წინ. ამისათვის ჩვენ შეგვიძლია გამოვიყენოთ საკვანძო სიტყვა typedef ერთად სხვა სიტყვით struct. ავიღოთ სახეს. შიგნით structs.h, მე უკვე მიღებული დაიწყო მათ შორის CS50 ბიბლიოთეკაში. მე მომდევნო აპირებს აკრიფოთ typedef struct, და შემდეგ Curly გაუწიოს. შიგნით struct, მე ვაპირებ დააკონკრეტა, რომ სტუდენტს უნდა ჰქონდეს string მოუწოდა სახელით, და სხვა string მოუწოდა სახლში. მე ვაპირებ შემდეგ დახუროს ჩემი curly აფრთხილებს, და დააკონკრეტა, რომ სახელი ამ ახალი მონაცემები ტიპის უნდა იყოს სტუდენტი. სხვა სიტყვებით, მეშვეობით სინტაქსი აქვს I განაცხადა, ახალი მონაცემები ტიპის საკუთარი რომ არ არსებობდა მომენტში წინ, შიგნით ამ მონაცემთა ტიპის ორი მონაცემები სფეროებში ან მონაცემების წევრები, რომელსაც სახელი, რომელსაც სახლში, რომლებიც რა ტიპის string. მოდით ახლა გამოიყენოს ამ ტიპის ფაქტობრივი პროგრამა. In structs0.c, მე ასევე მიღებული თვითონ დაიწყო ზოგიერთი boilerplate კოდი და მე ახლა აპირებს გამოიყენოს ეს მონაცემები ჩაწერეთ სტუდენტი, ასეთია. მე პირველი აპირებს გამოაცხადოს array ტიპის სტუდენტი, მე დარეკეთ მასივი სტუდენტებისთვის - მრავლობითი - და მე დააკონკრეტა, რომ მისი ზომა იქნება სამი, რომელიც, გაფრთხილების, არის ღირებულება მუდმივი სტუდენტებისთვის - ყველა დედაქალაქებში - რომ მე განაცხადა, აქ, ადრე ფაილი. მოდით ახლა iterate მეტი იმ სამი სტუდენტები და შეეკითხება მომხმარებელს ამისთვის მათი სახელები და სახლები. განთავსების int i კიდევ 0, i ნაკლებია, ვიდრე, რომ მუდმივი, i + +. და ახლა შიგნით ორგანოს ამ loop, მე ვაპირებ ამობეჭდოთ რაღაც ისევე როგორც სტუდენტის სახელი. მე მაშინ აპირებს რეალურად მიიღონ, რომ სტუდენტის სახელი განსაზღვრით სტუდენტები bracket i. სხვა სიტყვებით მინდა i-th სტუდენტი მასივი მოუწოდა სტუდენტებს, მაგრამ ახლა მინდა კიდევ, რომ i-ში სტუდენტის სახელი, და ამის გაკეთება, მე ვაპირებ გამოყენება . ოპერატორი, რათა მიიღოთ ერთი კონკრეტული სფეროს შიგნით struct. ასე რომ, მე დააკონკრეტა სტუდენტებისთვის bracket i. სახელი იღებს დაბრუნების ღირებულება GetString (). ამასობაში, მე ვაპირებ ამობეჭდოთ რაღაც მსგავსი და განაცხადა, რომ სტუდენტის მიერ სახლში, და ახლა მე ვაპირებ მიუთითოთ რომ i-th სტუდენტებისთვის სახლი ველი უნდა მიიღოთ დაბრუნების ღირებულება კიდევ ერთი ზარი GetString (). ახლა მოდით რაღაც ამ სამი სტუდენტები სახელები და სახლები, რაღაც მარტივი მოსწონს ბეჭდვა თითოეული გარეთ სასჯელს. განთავსების int i მისაღებად 0, კვლავ i ნაკლებია, ვიდრე სტუდენტები, i + +, printf "% s არის% s. backslash n "და ახლა ნება მომეცით plug in ღირებულებები ამ ორი სფეროებში, სტუდენტები bracket i. სახელი, გვარი, მძიმე, სტუდენტები bracket i. სახლი ახლოს, paren, მძიმით. და ახლა მე უნდა გავაკეთოთ კიდევ ერთი რამ. ბოლოში ამ ფაილის, მე უნდა გასათავისუფლებლად მეხსიერების რომ დაეთმო კულისებში მიერ GetSring (), რომელიც რა თქმა უნდა, მოუწოდებს malloc, რათა გამოყოფს მეხსიერების სტრიქონები მომხმარებლის ტიპის. მაგრამ ეს არის მარტივი. განთავსების int i კიდევ 0, i ნაკლებია, ვიდრე სტუდენტები, i + +, და შიგნით ორგანოს ამ for loop, მე უბრალოდ აპირებს გთავაზობთ უფასო სტუდენტებისთვის bracket i. სახელი, და თავისუფალი სტუდენტი bracket i. სახლი. ახლა, ჩვენ ნათლად გამოიყენება სამი მარყუჟების ამ პროგრამაში, როდესაც ნამდვილად მე შეეძლო მხოლოდ გამოიყენება ერთი, მაგრამ ეს არის მხოლოდ სადემონსტრაციოდ ის გულისთვის, ისე, რომ ჩვენ შეგვიძლია მიუთითოთ სამი განსხვავებული ნაბიჯები, თუ რა ზუსტად რას ვაკეთებთ. ჩვენ პირველი მიღების სახელის და სახლი თითოეული სტუდენტი, ჩვენ მაშინ დაბეჭდვისას სახელი და სახლი სამივე სტუდენტები და მაშინ ჩვენ ვაპირებთ გასათავისუფლებლად მეხსიერების გამოიყენება თითოეული სტუდენტებს. მაგრამ აუცილებლად, ჩვენ ვერ მოვისმინეთ გავაერთიანებთ ერთ დიდი for loop. მოდით ახლა გადარჩენა, კომპილაციის, და აწარმოებს ამ პროგრამის. რათა structs 0. / structs 0, სტუდენტის ასახელებს, მოდით გთავაზობთ დავითი, მაშინ ის ცხოვრობს წელს Mather სახლი, სტუდენტის სახელი, მოდით ამბობენ Lauren, იგი ყველაფერს ცხოვრობს LEVERETT კერძო სახლი, სტუდენტის სახელი, Rob, მაშინ ის ცხოვრობს Kirkland სახლი. და მართლაც, დავითი არის Mather, Lauren არის LEVERETT, და რობ არის Kirkland.