>> [عزف الموسيقى]
>> DOUG لويد: OK.
لقد عملنا مع الأعداد الصحيحة، لقد عملت مع شخصيات،
لقد عملت العوامات، الزوجي، سلاسل، وbools.
لقد استنفدت الى حد كبير عن من [غير مسموع] الأنواع التي
كانت متاحة لنا جميعا جنبا إلى جنب.
ولكن الآن نحن نريد أن نفعل شيئا أكثر من ذلك.
كيف لنا أن نفعل ذلك؟
كيف يمكننا إنشاء أنواع مختلفة من البيانات؟
يمكننا القيام بذلك عن طريق استخدام الهياكل.
حتى هياكل تسمح لنا لتوحيد المتغيرات من أنواع مختلفة
في واحد، نوع متغير جديد، يمكننا أن تخصيص اسم نوع خاص بها.
هذا هو قوية حقا شيء لتكون قادرة على القيام به،
لأن يمكننا المجموعة الآن عناصر أنواع بيانات مختلفة
معا التي لها علاقة منطقية.
كنا قادرين على القيام بذلك مع المصفوفات نوعا ما، أليس كذلك؟
نستطيع المتغيرات مجموعة من نفس نوع البيانات
معا في وحدة كبيرة من الذاكرة، صفيف.
>> لكننا لم تكن قادرة على مزيج عن أنواع بيانات مختلفة معا.
لا يمكننا، مثلا، الزوج صحيح، وحرف، وضعف كل
في نفس الشيء و ندعو إلى أن وحدة واحدة.
ولكن مع الهياكل، أو كثيرا ما يشار إليها باسم البنيات،
نستطيع في الواقع.
لذلك الهيكل هو نوع من مثل متغير عظمى.
انها متغير يحتوي المتغيرات الأخرى داخل منه.
حتى هنا مثال هيكل بسيط جدا.
وهذا ما قد تبدو بناء الجملة ترغب في إنشاء هيكل للسيارة.
الآن، دعونا نذهب من خلال بناء الجملة هنا.
البنية، وهذا هو الكلمة التي تشير إلى
انني خلق نوع البيانات الجديد هنا.
على وجه الخصوص، اسم نوع البيانات هو ستكون سيارة البنية، كما سنرى.
ولكن هذا هو نوع من غيض إيقاف إلى أن هذا المترجم
كمجموعة من المتغيرات التي يجري أن تعتبر جزءا من نفس النوع
في دقيقة.
>> سيارات، مجرد اسم للهيكل.
مرة أخرى، ونوع البيانات هنا هو الذهاب أن تكون السيارة البنية، وليس مجرد سيارة.
ولكن إذا كان لديك different-- إذا قمت بإنشاء البنيات متعددة
في نفس البرنامج، تحتاج إلى التمييز بين البنية والبنية.
سيارة البنية جدا، وأنا قد يكون أيضا طالب البنية، على سبيل المثال،
في نفس البرنامج.
داخل الأقواس المعقوفة ل كل ما يسمى المجالات،
أو أعضاء بنية.
فما هي بعض الأشياء التي هي متأصلة في سيارة؟
حسنا، أنها عادة ما تكون في السنة، وقد اسم النموذج، وصفيحة ترخيص،
وعداد المسافات التي عادة ما يكون له بعض عدد الأميال على ذلك،
وربما لحجم المحرك.
وكما ترون، أنا الخلط الأعداد الصحيحة والحروف والزوجي.
انهم جميعا سوف يكون جزء من هذه البيانات نوع جديد.
>> وأخيرا، والشيء النهائي يجب أن أفعل، لا ننسى هذا منقوطة قليلا
في نهايةالمطاف.
بعد أن ننتهي من تحديد هيكل، نحن بحاجة إلى وضع فاصلة منقوطة في نهاية المطاف.
انها النحويين شائع جدا خطأ، لأنه مع وظيفة،
على سبيل المثال، سيكون لديك فقط متعرج مفتوحة، بالقرب متعرج.
كنت لا تضع فاصلة منقوطة في نهاية تعريف الدالة.
هذا يبدو وكأنه وظيفة التعريف، ولكنها ليست،
وبالتالي فإن هناك منقوطة هو مجرد تذكير بأن لك
بحاجة إلى وضعه هناك، ل سوف المترجم إلا لا
أعرف ماذا أفعل معها.
هذا خطأ شائع جدا لجعل بطريق الخطأ
عندما كنت تحديد الهياكل أولا.
>> حسنا.
حتى نحدد عادة هياكلنا في أعلى جدا من برامجنا
لانهم على الارجح لاستخدامها من قبل وظائف متعددة.
نحن لا نريد لتحديد البنية داخل وظيفة،
لأنه بعد ذلك يمكننا only-- لل نطاق الهيكل حقا
موجود فقط داخل تلك الوظيفة.
ربما كنا نريد لتحديد هيكل حتى نتمكن من استخدامه في وظائف متعددة،
أو ربما في عدة الملفات التي ترتبط معا
لإنشاء برنامجنا واحد.
في بعض الأحيان أيضا بدلا من ذلك تحديد هيكل
في أعلى جدا حيث يمكنك وضع الخاص بك يشمل جنيه ويحدد الجنيه الخاص بك،
على سبيل المثال، كنت قد وضعت لهم في ملفات نقطة ح منفصلة، ​​والتي يمكنك ثم
الجنيه تضمين نفسك.
>> لذلك لدينا هياكل، ولكن الآن نحن بحاجة للحصول على داخل منهم.
كيف يمكننا الحصول على داخل هيكل الوصول
هذه المتغيرات الفرعية، وهذه المتغيرات التي توجد داخل هيكل؟
حسنا، لدينا ما يسمى المشغل نقطة، والذي يسمح لنا
للوصول إلى حقول البنية.
هكذا على سبيل المثال، دعونا نقول لقد أعلن نوع البيانات بنية بلدي مكان ما
في الجزء العلوي من برنامجي، أو ربما في ملف نقطة ح أنني قمت الجنيه المدرجة.
إذا كنت تريد ثم إلى خلق جديد متغير من هذا النوع البيانات، أستطيع أن أقول،
سيارة البنية، سيارتي، منقوطة.
تماما مثل أستطيع أن أقول الباحث س، أو اسم سلسلة منقوطة.
>> نوع البيانات هنا هو سيارة البنية، اسم المتغير سيارتي،
وبعد ذلك يمكن استخدام المشغل نقطة ل الوصول إلى مختلف المجالات من سيارتي.
لذلك أستطيع أن أقول سيارتي دوت العام يساوي 2011.
هذا ما يرام تماما.
العام، إذا كنت تذكر، كان يعرف بأنه حقل عدد صحيح داخل هذه السيارة البنية
نوع البيانات.
لذلك فإن أي متغير من بيانات السيارة البنية نوع، مثل سيارتي، يمكنني أن أقول سيارتي
السنة دوت يساوي ثم تعيين كان بعض قيمة عددية، 2011.
بلدي لوحة سيارة نقطة تساوي CS50.
بطاقتي نقطة عداد المسافات يساوي 50505 منقوطة.
كل تلك هي غرامة تماما، وهذا هو
كيف يمكننا الوصول إلى حقول البنية.
الهياكل، على الرغم من، لا تحتاج ليتم إنشاؤه على المكدس.
تماما مثل أي متغير آخر، ونحن يمكن تخصيصها بشكل حيوي.
اذا كان لدينا برنامج قد يتم توليد العديد من الهياكل،
نحن لا نعرف كم عدد ونحن في طريقنا للحاجة،
ثم نحن بحاجة إلى حيوي تخصيص تلك الهياكل
كما برنامجنا يعمل.
وإذا كان الأمر كذلك ونحن في طريقنا للوصول إلى مجالات هيكل في هذا السياق،
أذكر أننا بحاجة أولا إلى dereference المؤشر إلى هيكل،
ثم بمجرد ان dereference لل المؤشر، ثم يمكننا الوصول إلى الحقول.
اذا كان لدينا فقط مؤشر بنية،
نحن لا يمكن أن أقول الحقل مؤشر نقطة اسم ونحصل على ما تبحث عنه.
هناك خطوة اضافية من dereferencing.
لذلك دعونا نقول أن بدلا من previous--
تماما مثل المثال السابق، بدلا من إعلانها
على المكدس، سيارة البنية، بلدي سيارة، الفاصلة المنقوطة، وأنا أقول سيارة البنية،
نجوم، مؤشر إلى دعت سيارة البنية سيارتي،
يساوي حجم malloc من سيارة البنية.
حجم سنقوم معرفة كم عدد بايت نوع البيانات الجديد يستغرق.
لا تحتاج بالضرورة فقط لاستخدام حجم، عرض، الباحث، أو حرف، أو أي
أنواع البيانات المضمنة.
المترجم ذكي بما فيه الكفاية لمعرفة كيفية العديد من بايت
مطلوبة من قبل الهيكل الجديد الخاص بك.
لذلك أنا malloc نفسي وحدة الذاكرة تتسع لسيارة البنية،
وأحصل على المؤشر مرة أخرى إلى أن كتلة من الذاكرة،
ويتم تعيين هذا المؤشر إلى سيارتي.
>> الآن، إذا كنت تريد الوصول مجالات سيارتي،
أنا أول dereference سيارتي استخدام المشغل dereference، نجم
التي شهدناها من مؤشرات أشرطة الفيديو، وبعد ذلك بعد أن dereference،
بعد ذلك يمكنني أن استخدام عامل التشغيل نقطة ل الوصول إلى مختلف المجالات من سيارتي.
نجم سيارتي دوت العام يساوي 2011.
ومن شأن ذلك أن يكون له تأثير نحن نريد في هذه الحالة،
لأننا حيوي تخصيص سيارتي.
>> هذا النوع من مزعج، على الرغم من، أليس كذلك؟
هناك عملية 2-الخطوة الآن.
الآن علينا أن dereference-- لدينا مشغل نجمة،
ونحن لدينا مشغل نقطة.
وكما قد تتوقع، ل المبرمجين C الحب طرق أقصر
أن تفعل أشياء، هناك الطريق الأقصر للقيام بذلك.
وهناك عامل آخر يسمى السهم، مما يجعل هذه العملية أسهل بكثير.
الطريقة التي يعمل السهم كان أول dereferences
المؤشر على اليسار جانب من المشغل،
وبعد ذلك، بعد أن ألغى الإشارة القيمة المؤشر على اليسار،
كانت زيارة ميدانية على اليمين.
وهكذا في السابق كان لدينا هذا النوع ستار سيارتي دوت كل هذه الأشياء،
كما كان هناك الكثير يحدث هناك.
ولكن ما يمكننا القيام به بدلا من ذلك هو this-- سيارتي السهم العام يساوي 2011.
>> مرة أخرى، ما الذي يحدث هنا؟
أولا، أنا dereferencing سيارتي.
التي مرة أخرى، هو مؤشر هنا.
ثم، بعد أن ألغى الإشارة القيمة سيارتي، وأنا
ثم يمكن الوصول إلى الحقول العام، لوحة، وعداد المسافات
كما يمكن أن أقوله قبل أن أولا نجمة تستخدم لdereference سيارتي،
ونقطة للوصول إلى الميدان.
حتى تتمكن من الهياكل، كنت يمكن أن يكون المؤشرات إلى هياكل،
وكان لديك سبل الوصول مجالات تلك الهياكل،
إذا كان لديك مؤشرات ل لهم أو المتغيرات أنفسهم.
نقطة أو السهم، وهذا يتوقف على كيف تم تعريف المتغير.
أنا دوغ ويد، وهذا هو CS50.