1 00:00:00,000 --> 00:00:02,395 >> [عزف الموسيقى] 2 00:00:02,395 --> 00:00:05,750 3 00:00:05,750 --> 00:00:06,506 >> DOUG لويد: OK. 4 00:00:06,506 --> 00:00:08,880 لقد عملنا مع الأعداد الصحيحة، لقد عملت مع شخصيات، 5 00:00:08,880 --> 00:00:11,930 لقد عملت العوامات، الزوجي، سلاسل، وbools. 6 00:00:11,930 --> 00:00:14,870 لقد استنفدت الى حد كبير عن من [غير مسموع] الأنواع التي 7 00:00:14,870 --> 00:00:17,100 كانت متاحة لنا جميعا جنبا إلى جنب. 8 00:00:17,100 --> 00:00:19,430 ولكن الآن نحن نريد أن نفعل شيئا أكثر من ذلك. 9 00:00:19,430 --> 00:00:20,210 كيف لنا أن نفعل ذلك؟ 10 00:00:20,210 --> 00:00:22,560 كيف يمكننا إنشاء أنواع مختلفة من البيانات؟ 11 00:00:22,560 --> 00:00:26,130 يمكننا القيام بذلك عن طريق استخدام الهياكل. 12 00:00:26,130 --> 00:00:30,180 حتى هياكل تسمح لنا لتوحيد المتغيرات من أنواع مختلفة 13 00:00:30,180 --> 00:00:34,810 في واحد، نوع متغير جديد، يمكننا أن تخصيص اسم نوع خاص بها. 14 00:00:34,810 --> 00:00:37,570 هذا هو قوية حقا شيء لتكون قادرة على القيام به، 15 00:00:37,570 --> 00:00:40,900 لأن يمكننا المجموعة الآن عناصر أنواع بيانات مختلفة 16 00:00:40,900 --> 00:00:43,910 معا التي لها علاقة منطقية. 17 00:00:43,910 --> 00:00:46,440 كنا قادرين على القيام بذلك مع المصفوفات نوعا ما، أليس كذلك؟ 18 00:00:46,440 --> 00:00:49,540 نستطيع المتغيرات مجموعة من نفس نوع البيانات 19 00:00:49,540 --> 00:00:53,410 معا في وحدة كبيرة من الذاكرة، صفيف. 20 00:00:53,410 --> 00:00:56,660 >> لكننا لم تكن قادرة على مزيج عن أنواع بيانات مختلفة معا. 21 00:00:56,660 --> 00:01:02,610 لا يمكننا، مثلا، الزوج صحيح، وحرف، وضعف كل 22 00:01:02,610 --> 00:01:05,330 في نفس الشيء و ندعو إلى أن وحدة واحدة. 23 00:01:05,330 --> 00:01:08,830 ولكن مع الهياكل، أو كثيرا ما يشار إليها باسم البنيات، 24 00:01:08,830 --> 00:01:09,585 نستطيع في الواقع. 25 00:01:09,585 --> 00:01:12,370 لذلك الهيكل هو نوع من مثل متغير عظمى. 26 00:01:12,370 --> 00:01:16,530 انها متغير يحتوي المتغيرات الأخرى داخل منه. 27 00:01:16,530 --> 00:01:19,650 حتى هنا مثال هيكل بسيط جدا. 28 00:01:19,650 --> 00:01:23,380 وهذا ما قد تبدو بناء الجملة ترغب في إنشاء هيكل للسيارة. 29 00:01:23,380 --> 00:01:25,250 الآن، دعونا نذهب من خلال بناء الجملة هنا. 30 00:01:25,250 --> 00:01:27,400 البنية، وهذا هو الكلمة التي تشير إلى 31 00:01:27,400 --> 00:01:30,270 انني خلق نوع البيانات الجديد هنا. 32 00:01:30,270 --> 00:01:33,860 على وجه الخصوص، اسم نوع البيانات هو ستكون سيارة البنية، كما سنرى. 33 00:01:33,860 --> 00:01:36,640 ولكن هذا هو نوع من غيض إيقاف إلى أن هذا المترجم 34 00:01:36,640 --> 00:01:42,440 كمجموعة من المتغيرات التي يجري أن تعتبر جزءا من نفس النوع 35 00:01:42,440 --> 00:01:44,010 في دقيقة. 36 00:01:44,010 --> 00:01:46,340 >> سيارات، مجرد اسم للهيكل. 37 00:01:46,340 --> 00:01:50,590 مرة أخرى، ونوع البيانات هنا هو الذهاب أن تكون السيارة البنية، وليس مجرد سيارة. 38 00:01:50,590 --> 00:01:53,060 ولكن إذا كان لديك different-- إذا قمت بإنشاء البنيات متعددة 39 00:01:53,060 --> 00:01:56,950 في نفس البرنامج، تحتاج إلى التمييز بين البنية والبنية. 40 00:01:56,950 --> 00:02:00,140 سيارة البنية جدا، وأنا قد يكون أيضا طالب البنية، على سبيل المثال، 41 00:02:00,140 --> 00:02:01,790 في نفس البرنامج. 42 00:02:01,790 --> 00:02:05,980 داخل الأقواس المعقوفة ل كل ما يسمى المجالات، 43 00:02:05,980 --> 00:02:07,954 أو أعضاء بنية. 44 00:02:07,954 --> 00:02:10,370 فما هي بعض الأشياء التي هي متأصلة في سيارة؟ 45 00:02:10,370 --> 00:02:15,270 حسنا، أنها عادة ما تكون في السنة، وقد اسم النموذج، وصفيحة ترخيص، 46 00:02:15,270 --> 00:02:18,000 وعداد المسافات التي عادة ما يكون له بعض عدد الأميال على ذلك، 47 00:02:18,000 --> 00:02:19,225 وربما لحجم المحرك. 48 00:02:19,225 --> 00:02:23,570 وكما ترون، أنا الخلط الأعداد الصحيحة والحروف والزوجي. 49 00:02:23,570 --> 00:02:26,420 انهم جميعا سوف يكون جزء من هذه البيانات نوع جديد. 50 00:02:26,420 --> 00:02:29,750 >> وأخيرا، والشيء النهائي يجب أن أفعل، لا ننسى هذا منقوطة قليلا 51 00:02:29,750 --> 00:02:30,290 في نهايةالمطاف. 52 00:02:30,290 --> 00:02:34,380 بعد أن ننتهي من تحديد هيكل، نحن بحاجة إلى وضع فاصلة منقوطة في نهاية المطاف. 53 00:02:34,380 --> 00:02:37,325 انها النحويين شائع جدا خطأ، لأنه مع وظيفة، 54 00:02:37,325 --> 00:02:40,200 على سبيل المثال، سيكون لديك فقط متعرج مفتوحة، بالقرب متعرج. 55 00:02:40,200 --> 00:02:42,950 كنت لا تضع فاصلة منقوطة في نهاية تعريف الدالة. 56 00:02:42,950 --> 00:02:46,430 هذا يبدو وكأنه وظيفة التعريف، ولكنها ليست، 57 00:02:46,430 --> 00:02:49,653 وبالتالي فإن هناك منقوطة هو مجرد تذكير بأن لك 58 00:02:49,653 --> 00:02:52,440 بحاجة إلى وضعه هناك، ل سوف المترجم إلا لا 59 00:02:52,440 --> 00:02:53,510 أعرف ماذا أفعل معها. 60 00:02:53,510 --> 00:02:56,160 هذا خطأ شائع جدا لجعل بطريق الخطأ 61 00:02:56,160 --> 00:02:58,570 عندما كنت تحديد الهياكل أولا. 62 00:02:58,570 --> 00:02:59,500 >> حسنا. 63 00:02:59,500 --> 00:03:02,824 حتى نحدد عادة هياكلنا في أعلى جدا من برامجنا 64 00:03:02,824 --> 00:03:05,490 لانهم على الارجح لاستخدامها من قبل وظائف متعددة. 65 00:03:05,490 --> 00:03:08,850 نحن لا نريد لتحديد البنية داخل وظيفة، 66 00:03:08,850 --> 00:03:12,110 لأنه بعد ذلك يمكننا only-- لل نطاق الهيكل حقا 67 00:03:12,110 --> 00:03:13,790 موجود فقط داخل تلك الوظيفة. 68 00:03:13,790 --> 00:03:17,450 ربما كنا نريد لتحديد هيكل حتى نتمكن من استخدامه في وظائف متعددة، 69 00:03:17,450 --> 00:03:20,670 أو ربما في عدة الملفات التي ترتبط معا 70 00:03:20,670 --> 00:03:22,920 لإنشاء برنامجنا واحد. 71 00:03:22,920 --> 00:03:24,920 في بعض الأحيان أيضا بدلا من ذلك تحديد هيكل 72 00:03:24,920 --> 00:03:27,961 في أعلى جدا حيث يمكنك وضع الخاص بك يشمل جنيه ويحدد الجنيه الخاص بك، 73 00:03:27,961 --> 00:03:32,080 على سبيل المثال، كنت قد وضعت لهم في ملفات نقطة ح منفصلة، ​​والتي يمكنك ثم 74 00:03:32,080 --> 00:03:35,020 الجنيه تضمين نفسك. 75 00:03:35,020 --> 00:03:37,620 >> لذلك لدينا هياكل، ولكن الآن نحن بحاجة للحصول على داخل منهم. 76 00:03:37,620 --> 00:03:39,800 كيف يمكننا الحصول على داخل هيكل الوصول 77 00:03:39,800 --> 00:03:43,530 هذه المتغيرات الفرعية، وهذه المتغيرات التي توجد داخل هيكل؟ 78 00:03:43,530 --> 00:03:46,810 حسنا، لدينا ما يسمى المشغل نقطة، والذي يسمح لنا 79 00:03:46,810 --> 00:03:50,990 للوصول إلى حقول البنية. 80 00:03:50,990 --> 00:03:55,490 هكذا على سبيل المثال، دعونا نقول لقد أعلن نوع البيانات بنية بلدي مكان ما 81 00:03:55,490 --> 00:03:59,020 في الجزء العلوي من برنامجي، أو ربما في ملف نقطة ح أنني قمت الجنيه المدرجة. 82 00:03:59,020 --> 00:04:03,360 إذا كنت تريد ثم إلى خلق جديد متغير من هذا النوع البيانات، أستطيع أن أقول، 83 00:04:03,360 --> 00:04:06,260 سيارة البنية، سيارتي، منقوطة. 84 00:04:06,260 --> 00:04:11,580 تماما مثل أستطيع أن أقول الباحث س، أو اسم سلسلة منقوطة. 85 00:04:11,580 --> 00:04:18,100 >> نوع البيانات هنا هو سيارة البنية، اسم المتغير سيارتي، 86 00:04:18,100 --> 00:04:23,770 وبعد ذلك يمكن استخدام المشغل نقطة ل الوصول إلى مختلف المجالات من سيارتي. 87 00:04:23,770 --> 00:04:27,494 لذلك أستطيع أن أقول سيارتي دوت العام يساوي 2011. 88 00:04:27,494 --> 00:04:28,410 هذا ما يرام تماما. 89 00:04:28,410 --> 00:04:34,210 العام، إذا كنت تذكر، كان يعرف بأنه حقل عدد صحيح داخل هذه السيارة البنية 90 00:04:34,210 --> 00:04:35,200 نوع البيانات. 91 00:04:35,200 --> 00:04:39,966 لذلك فإن أي متغير من بيانات السيارة البنية نوع، مثل سيارتي، يمكنني أن أقول سيارتي 92 00:04:39,966 --> 00:04:44,030 السنة دوت يساوي ثم تعيين كان بعض قيمة عددية، 2011. 93 00:04:44,030 --> 00:04:47,290 بلدي لوحة سيارة نقطة تساوي CS50. 94 00:04:47,290 --> 00:04:51,180 بطاقتي نقطة عداد المسافات يساوي 50505 منقوطة. 95 00:04:51,180 --> 00:04:53,270 كل تلك هي غرامة تماما، وهذا هو 96 00:04:53,270 --> 00:04:57,802 كيف يمكننا الوصول إلى حقول البنية. 97 00:04:57,802 --> 00:05:00,260 الهياكل، على الرغم من، لا تحتاج ليتم إنشاؤه على المكدس. 98 00:05:00,260 --> 00:05:02,950 تماما مثل أي متغير آخر، ونحن يمكن تخصيصها بشكل حيوي. 99 00:05:02,950 --> 00:05:06,309 اذا كان لدينا برنامج قد يتم توليد العديد من الهياكل، 100 00:05:06,309 --> 00:05:08,100 نحن لا نعرف كم عدد ونحن في طريقنا للحاجة، 101 00:05:08,100 --> 00:05:10,800 ثم نحن بحاجة إلى حيوي تخصيص تلك الهياكل 102 00:05:10,800 --> 00:05:12,960 كما برنامجنا يعمل. 103 00:05:12,960 --> 00:05:16,600 وإذا كان الأمر كذلك ونحن في طريقنا للوصول إلى مجالات هيكل في هذا السياق، 104 00:05:16,600 --> 00:05:20,660 أذكر أننا بحاجة أولا إلى dereference المؤشر إلى هيكل، 105 00:05:20,660 --> 00:05:24,810 ثم بمجرد ان dereference لل المؤشر، ثم يمكننا الوصول إلى الحقول. 106 00:05:24,810 --> 00:05:26,830 اذا كان لدينا فقط مؤشر بنية، 107 00:05:26,830 --> 00:05:32,120 نحن لا يمكن أن أقول الحقل مؤشر نقطة اسم ونحصل على ما تبحث عنه. 108 00:05:32,120 --> 00:05:34,259 هناك خطوة اضافية من dereferencing. 109 00:05:34,259 --> 00:05:36,050 لذلك دعونا نقول أن بدلا من previous-- 110 00:05:36,050 --> 00:05:38,770 تماما مثل المثال السابق، بدلا من إعلانها 111 00:05:38,770 --> 00:05:43,680 على المكدس، سيارة البنية، بلدي سيارة، الفاصلة المنقوطة، وأنا أقول سيارة البنية، 112 00:05:43,680 --> 00:05:48,020 نجوم، مؤشر إلى دعت سيارة البنية سيارتي، 113 00:05:48,020 --> 00:05:51,250 يساوي حجم malloc من سيارة البنية. 114 00:05:51,250 --> 00:05:54,950 حجم سنقوم معرفة كم عدد بايت نوع البيانات الجديد يستغرق. 115 00:05:54,950 --> 00:05:58,570 لا تحتاج بالضرورة فقط لاستخدام حجم، عرض، الباحث، أو حرف، أو أي 116 00:05:58,570 --> 00:05:59,715 أنواع البيانات المضمنة. 117 00:05:59,715 --> 00:06:02,090 المترجم ذكي بما فيه الكفاية لمعرفة كيفية العديد من بايت 118 00:06:02,090 --> 00:06:04,170 مطلوبة من قبل الهيكل الجديد الخاص بك. 119 00:06:04,170 --> 00:06:09,610 لذلك أنا malloc نفسي وحدة الذاكرة تتسع لسيارة البنية، 120 00:06:09,610 --> 00:06:12,410 وأحصل على المؤشر مرة أخرى إلى أن كتلة من الذاكرة، 121 00:06:12,410 --> 00:06:16,090 ويتم تعيين هذا المؤشر إلى سيارتي. 122 00:06:16,090 --> 00:06:18,050 >> الآن، إذا كنت تريد الوصول مجالات سيارتي، 123 00:06:18,050 --> 00:06:22,615 أنا أول dereference سيارتي استخدام المشغل dereference، نجم 124 00:06:22,615 --> 00:06:26,620 التي شهدناها من مؤشرات أشرطة الفيديو، وبعد ذلك بعد أن dereference، 125 00:06:26,620 --> 00:06:32,200 بعد ذلك يمكنني أن استخدام عامل التشغيل نقطة ل الوصول إلى مختلف المجالات من سيارتي. 126 00:06:32,200 --> 00:06:35,490 نجم سيارتي دوت العام يساوي 2011. 127 00:06:35,490 --> 00:06:38,480 ومن شأن ذلك أن يكون له تأثير نحن نريد في هذه الحالة، 128 00:06:38,480 --> 00:06:41,960 لأننا حيوي تخصيص سيارتي. 129 00:06:41,960 --> 00:06:43,610 >> هذا النوع من مزعج، على الرغم من، أليس كذلك؟ 130 00:06:43,610 --> 00:06:44,818 هناك عملية 2-الخطوة الآن. 131 00:06:44,818 --> 00:06:47,460 الآن علينا أن dereference-- لدينا مشغل نجمة، 132 00:06:47,460 --> 00:06:48,910 ونحن لدينا مشغل نقطة. 133 00:06:48,910 --> 00:06:51,660 وكما قد تتوقع، ل المبرمجين C الحب طرق أقصر 134 00:06:51,660 --> 00:06:53,740 أن تفعل أشياء، هناك الطريق الأقصر للقيام بذلك. 135 00:06:53,740 --> 00:06:57,790 وهناك عامل آخر يسمى السهم، مما يجعل هذه العملية أسهل بكثير. 136 00:06:57,790 --> 00:07:00,750 الطريقة التي يعمل السهم كان أول dereferences 137 00:07:00,750 --> 00:07:03,560 المؤشر على اليسار جانب من المشغل، 138 00:07:03,560 --> 00:07:06,620 وبعد ذلك، بعد أن ألغى الإشارة القيمة المؤشر على اليسار، 139 00:07:06,620 --> 00:07:09,620 كانت زيارة ميدانية على اليمين. 140 00:07:09,620 --> 00:07:14,170 وهكذا في السابق كان لدينا هذا النوع ستار سيارتي دوت كل هذه الأشياء، 141 00:07:14,170 --> 00:07:15,880 كما كان هناك الكثير يحدث هناك. 142 00:07:15,880 --> 00:07:22,040 ولكن ما يمكننا القيام به بدلا من ذلك هو this-- سيارتي السهم العام يساوي 2011. 143 00:07:22,040 --> 00:07:23,580 >> مرة أخرى، ما الذي يحدث هنا؟ 144 00:07:23,580 --> 00:07:25,720 أولا، أنا dereferencing سيارتي. 145 00:07:25,720 --> 00:07:27,810 التي مرة أخرى، هو مؤشر هنا. 146 00:07:27,810 --> 00:07:31,270 ثم، بعد أن ألغى الإشارة القيمة سيارتي، وأنا 147 00:07:31,270 --> 00:07:35,130 ثم يمكن الوصول إلى الحقول العام، لوحة، وعداد المسافات 148 00:07:35,130 --> 00:07:40,020 كما يمكن أن أقوله قبل أن أولا نجمة تستخدم لdereference سيارتي، 149 00:07:40,020 --> 00:07:42,020 ونقطة للوصول إلى الميدان. 150 00:07:42,020 --> 00:07:45,290 حتى تتمكن من الهياكل، كنت يمكن أن يكون المؤشرات إلى هياكل، 151 00:07:45,290 --> 00:07:48,360 وكان لديك سبل الوصول مجالات تلك الهياكل، 152 00:07:48,360 --> 00:07:52,600 إذا كان لديك مؤشرات ل لهم أو المتغيرات أنفسهم. 153 00:07:52,600 --> 00:07:57,640 نقطة أو السهم، وهذا يتوقف على كيف تم تعريف المتغير. 154 00:07:57,640 --> 00:08:00,510 أنا دوغ ويد، وهذا هو CS50. 155 00:08:00,510 --> 00:08:01,975