1 00:00:07,260 --> 00:00:09,180 [Powered by Google Translate] בואו נדבר על structs. 2 00:00:09,180 --> 00:00:12,130 Structs לספק לנו את הדרך לקבוצה את החבורה של משתנים יחד 3 00:00:12,130 --> 00:00:14,350 לתוך חבילה יפה. 4 00:00:14,350 --> 00:00:17,020 זה כנראה הכי קל לראות דוגמה מייד, 5 00:00:17,020 --> 00:00:20,030 כך אנו אומרים struct, 6 00:00:20,030 --> 00:00:23,340 לאחר מכן לפתוח סד מתולתל, 7 00:00:23,340 --> 00:00:26,630 ובstruct זה, יהיה לנו גיל int, 8 00:00:28,920 --> 00:00:31,350 שם * char, 9 00:00:31,350 --> 00:00:34,670 וזהו זה. 10 00:00:37,350 --> 00:00:40,650 זה אולי נראה מוזר עם פסיק לאחר סד מתולתל, 11 00:00:40,650 --> 00:00:43,620 אבל זה למעשה צורך בstructs. 12 00:00:43,620 --> 00:00:46,270 כל סוג תקף יכול ללכת בתוך הגדרת struct. 13 00:00:46,270 --> 00:00:49,530 הנה, יש לנו בשימוש int ו* char, 14 00:00:49,530 --> 00:00:52,610 אבל אתה יכול גם להשתמש במערך, של לומר, 100 אלמנטים 15 00:00:52,610 --> 00:00:54,910 או אפילו struct אחר. 16 00:00:54,910 --> 00:00:56,960 כאשר אתה משתמש structs ב-C, 17 00:00:56,960 --> 00:00:58,430 אתה יוצר סוגים חדשים 18 00:00:58,430 --> 00:01:00,860 מתוך אוסף של סוגים אחרים. 19 00:01:00,860 --> 00:01:02,620 הנה, אנחנו עושים סוג חדש 20 00:01:02,620 --> 00:01:05,060 מתוך שלם ו* char. 21 00:01:05,060 --> 00:01:07,400 כפי שנראים מאוחר יותר, סוג struct 22 00:01:07,400 --> 00:01:10,700 הוא בהרבה מובנים שווים ערך לכל סוג אחר שאתם רגילים אליו. 23 00:01:10,700 --> 00:01:13,310 בדרך כלל, אני אהיה השוואה בין אופן סוג struct 24 00:01:13,310 --> 00:01:15,790 דומה לסוג מספר שלם. 25 00:01:15,790 --> 00:01:18,520 אף שהקוד שכתבנו הוא C התקפה, 26 00:01:18,520 --> 00:01:20,320 זה לא מאוד שימושי, 27 00:01:20,320 --> 00:01:22,340 וצלצולים, ינתנו לנו אזהרה. 28 00:01:22,340 --> 00:01:24,970 זוכר איך structs ודומים? 29 00:01:24,970 --> 00:01:26,710 ובכן, אנחנו בעצם רק אמרנו 30 00:01:27,840 --> 00:01:30,060 int, 31 00:01:30,060 --> 00:01:33,140 שהוא לא קו מאוד מועיל. 32 00:01:33,140 --> 00:01:35,760 אז בואו בעצם מצהירים על משתנה מסוג זה 33 00:01:35,760 --> 00:01:38,760 על ידי מתן שם לפני הפסיק. 34 00:01:42,170 --> 00:01:45,000 אנחנו קוראים לתלמיד משתנה. 35 00:01:48,190 --> 00:01:51,350 עכשיו אנחנו כבר הכרזנו תלמיד נקרא משתנה 36 00:01:51,350 --> 00:01:53,980 עם הסוג שניתן על ידי struct. 37 00:01:53,980 --> 00:01:56,730 איך אנחנו מגיעים למשתנים בתוך struct? 38 00:01:56,730 --> 00:01:59,040 מבחינה הטכנית, שמות למשתנים אלו 39 00:01:59,040 --> 00:02:01,070 הם חברים. 40 00:02:01,070 --> 00:02:04,000 כדי לגשת לכל חבר בפרט בstruct סטודנט, 41 00:02:04,000 --> 00:02:06,440 אתה מצרף לנקודת השם המשתנה, 42 00:02:06,440 --> 00:02:08,860 ואחריו השם של החבר שאתה רוצה. 43 00:02:08,860 --> 00:02:11,690 אז הנה, את 2 אפשרויות חוקיות בלבד 44 00:02:11,690 --> 00:02:17,760 הם student.age 45 00:02:17,760 --> 00:02:24,460 וstudent.name. 46 00:02:24,460 --> 00:02:26,820 ואנחנו יכולים לעשות משהו כזה 47 00:02:26,820 --> 00:02:30,320 student.age = 12 48 00:02:30,320 --> 00:02:39,310 וstudent.name = תלמיד. 49 00:02:39,310 --> 00:02:42,580 עכשיו מה אם אנחנו רוצים להפוך תלמיד שני? 50 00:02:42,580 --> 00:02:44,760 אתה חושב שאולי כדי להעתיק ולהדביק את השורות האלה 51 00:02:44,760 --> 00:02:48,110 ולשנות את התלמיד לתלמיד 2 או משהו, 52 00:02:48,110 --> 00:02:50,090 ושיעבוד, 53 00:02:50,090 --> 00:02:52,670 אבל מבחינה טכנית, סטודנט ותלמיד 2 54 00:02:52,670 --> 00:02:54,540 אין לו סוג. 55 00:02:54,540 --> 00:02:56,940 ראה, אתה לא תוכל להקצות אותם אחד לשני. 56 00:02:56,940 --> 00:02:58,560 הסיבה לכך היא, עד כה, 57 00:02:58,560 --> 00:03:00,950 struct שלך כבר בעילום שם. 58 00:03:00,950 --> 00:03:02,290 אנחנו צריכים לתת לו שם. 59 00:03:02,290 --> 00:03:04,420 כדי לעשות זאת, אנו מוסיפים את שמו של struct 60 00:03:04,420 --> 00:03:06,950 אחרי המילה struct. 61 00:03:09,440 --> 00:03:11,170 סטודנט, 62 00:03:11,170 --> 00:03:14,680 אחרי ההגדרה. 63 00:03:16,500 --> 00:03:18,940 אנחנו עדיין יכולים להצהיר על משתנים מהסוג מייד 64 00:03:18,940 --> 00:03:21,570 struct תלמיד, כמו שעשינו בעבר. 65 00:03:24,320 --> 00:03:28,360 אנחנו קוראים לזה S1 66 00:03:28,590 --> 00:03:30,760 על ידי מתן struct שם, 67 00:03:30,760 --> 00:03:33,050 עכשיו אנחנו יכולים להשתמש בתלמיד struct 68 00:03:33,050 --> 00:03:36,950 כמעט באותו אופן בדיוק שהיינו משתמש int. 69 00:03:36,950 --> 00:03:39,580 אז אנחנו יכולים להצהיר על משתנים מסוג struct סטודנט, 70 00:03:39,580 --> 00:03:42,360 כמו 71 00:03:42,360 --> 00:03:49,500 struct תלמיד S2. 72 00:03:51,020 --> 00:03:55,130 כמו מערכים, structs לספק תחביר אתחול קיצור, 73 00:03:55,130 --> 00:03:58,670 כך אנו יכולים לומר, struct התלמיד S2 74 00:03:58,670 --> 00:04:01,420 שווה 75 00:04:01,420 --> 00:04:06,040 מתולתל שמאל 3 סד, S2. 76 00:04:09,210 --> 00:04:12,600 כאן, S2.age יהיה 3, 77 00:04:12,600 --> 00:04:15,910 וS2.name יצביע על S2. 78 00:04:15,910 --> 00:04:19,149 תחשוב על כל הדברים שאתה יכול לעשות עם סוג int 79 00:04:19,149 --> 00:04:22,460 ורובם אתה יכול לעשות עם סוג תלמיד struct. 80 00:04:22,460 --> 00:04:26,060 אנחנו יכולים להשתמש בתלמיד struct כסוג של פונקצית פרמטר. 81 00:04:26,060 --> 00:04:28,790 אנחנו יכולים להשתמש בתלמיד struct בתוך struct חדש. 82 00:04:28,790 --> 00:04:31,010 יכול להיות לנו מצביע לתלמיד struct. 83 00:04:31,010 --> 00:04:33,540 אנחנו יכולים לעשות את הגודל של תלמיד struct. 84 00:04:33,540 --> 00:04:35,510 Struct הסטודנט הוא סוג 85 00:04:35,510 --> 00:04:38,030 בדיוק כמו int הוא סוג. 86 00:04:38,030 --> 00:04:40,540 אנחנו גם יכולים להקצות לS1 S2 87 00:04:40,540 --> 00:04:43,760 מאז שניהם מאותו הסוג, ולכן אנחנו יכולים לעשות 88 00:04:44,390 --> 00:04:47,540 S1 = S2. 89 00:04:47,540 --> 00:04:50,430 מה קורה אם אנחנו עושים 90 00:04:50,430 --> 00:04:55,300 S1.age = 10? 91 00:04:56,340 --> 00:04:58,880 האם שינוי S2 בכלל? 92 00:04:58,880 --> 00:05:02,800 שוב, חושב על structs רק כמספרים שלמים רגילה. 93 00:05:02,800 --> 00:05:05,590 אם אנחנו להקצות חלק X int לכמה int Y, 94 00:05:05,590 --> 00:05:08,970 כמו X = Y 95 00:05:08,970 --> 00:05:10,850 ולאחר מכן לשנות את X, 96 00:05:10,850 --> 00:05:14,230 כמו בX + +, 97 00:05:14,230 --> 00:05:17,020 אין Y ישתנה בכלל? 98 00:05:17,020 --> 00:05:20,980 Y לא ישתנה כאן, וכך גם לא S2 לעיל. 99 00:05:20,980 --> 00:05:24,120 S2.age הוא עדיין 3. 100 00:05:24,120 --> 00:05:27,350 אבל שים לב שכאשר הקצאת struct אחד למשנו, 101 00:05:27,350 --> 00:05:30,300 כל המצביעים עדיין מצביעים על אותו הדבר, 102 00:05:30,300 --> 00:05:32,260 מאז הם פשוט הועתקו. 103 00:05:32,260 --> 00:05:34,300 אם אתה לא רוצה את המצביעים להיות משותפים, 104 00:05:34,300 --> 00:05:36,100 תצטרך להתמודד עם זה באופן ידני, 105 00:05:36,100 --> 00:05:39,780 אולי על ידי malicking בלוק אחד של זיכרון לאחד מהמצביעים להצביע 106 00:05:39,780 --> 00:05:42,120 ולהעתיק את הנתונים מחדש. 107 00:05:42,120 --> 00:05:45,540 זה יכול להיות מעצבן לתלמיד צריך לכתוב struct בכל מקום. 108 00:05:45,540 --> 00:05:48,730 שימוש def סוג, אנחנו יכולים לעשות 109 00:05:51,630 --> 00:05:55,850 הסוג def 110 00:05:55,850 --> 00:05:58,830 struct 111 00:05:58,830 --> 00:06:01,270 ואנחנו קוראים לזה תלמיד. 112 00:06:05,620 --> 00:06:08,360 עכשיו, אנחנו יכולים להשתמש בכל מקום תלמיד 113 00:06:08,360 --> 00:06:11,090 שנהגנו להשתמש תלמיד struct. 114 00:06:11,090 --> 00:06:13,410 סוג זה של def struct אנונימי 115 00:06:13,410 --> 00:06:15,750 וממכן אותו התלמיד. 116 00:06:15,750 --> 00:06:18,220 אבל אם יש לנו גם לשמור על זיהוי הסטודנט 117 00:06:18,220 --> 00:06:22,380 ליד המילה struct, כמו בתלמיד struct typedef, 118 00:06:27,670 --> 00:06:31,590 אנו יכולים להשתמש בשני תלמיד ותלמיד struct לסירוגין עכשיו. 119 00:06:31,590 --> 00:06:34,060 הם אפילו לא צריכים שיהיו לו שם. 120 00:06:34,060 --> 00:06:36,710 אנחנו יכולים להקליד תלמיד struct def לבוב 121 00:06:36,710 --> 00:06:38,950 ולאחר מכן struct תלמיד ובוב 122 00:06:38,950 --> 00:06:41,270 יהיו סוגים להחלפה. 123 00:06:41,270 --> 00:06:44,050 ללא קשר לסוג def, 124 00:06:44,050 --> 00:06:46,750 אנחנו צריכים את המזהה ליד struct 125 00:06:46,750 --> 00:06:48,250 אם ההגדרה של struct 126 00:06:48,250 --> 00:06:50,450 הוא רקורסיבי. 127 00:06:50,450 --> 00:06:52,620 לדוגמה, 128 00:06:52,620 --> 00:06:56,140 סוג def struct צומת 129 00:06:56,140 --> 00:07:01,200 וזה יוגדר כval int 130 00:07:01,200 --> 00:07:05,420 ויהיה לו מצביע שמצביע לצומת struct אחר., 131 00:07:05,420 --> 00:07:09,490 כמו בצומת * struct הבאה. 132 00:07:09,490 --> 00:07:13,670 ואז אנחנו קוראים לזה צומת. 133 00:07:15,490 --> 00:07:18,020 struct זה רקורסיבית, 134 00:07:18,020 --> 00:07:21,450 מאז ההגדרה של צומת struct מכילה בתוכו 135 00:07:21,450 --> 00:07:24,200 מצביע לצומת struct. 136 00:07:24,200 --> 00:07:27,740 שים לב שיש לנו לומר struct * צומת הבאה 137 00:07:27,740 --> 00:07:30,690 בתוך ההגדרה של צומת struct, 138 00:07:30,690 --> 00:07:33,620 מאז הסוג def טרם הסתיים כדי לאפשר לנו לפשט את זה 139 00:07:33,620 --> 00:07:36,210 * לצומת ממש ליד. 140 00:07:36,210 --> 00:07:39,260 תוכל ללמוד עוד על structs דומה לזה 141 00:07:39,260 --> 00:07:41,750 בעת התמודדות עם רשימות ועצים מקושרים. 142 00:07:41,750 --> 00:07:44,130 מה לגבי structs בתפקוד? 143 00:07:44,130 --> 00:07:46,800 זה גם תקף לחלוטין. 144 00:07:46,800 --> 00:07:49,430 יכל להיות לנו 145 00:07:49,430 --> 00:07:53,630 לבטל את הפונקציה 146 00:07:53,630 --> 00:07:55,930 אשר לוקח כטיעון, 147 00:07:55,930 --> 00:07:59,590 סטודנט של 148 00:07:59,590 --> 00:08:02,790 ועושה משהו עם תלמיד. 149 00:08:05,270 --> 00:08:08,450 ואז אנחנו יכולים לעבור אותו כתלמיד struct כמו אז. 150 00:08:08,450 --> 00:08:12,850 Func של S1 מקודם. 151 00:08:12,850 --> 00:08:15,230 Struct מתנהג 152 00:08:15,230 --> 00:08:18,460 בדיוק כפי שהייתי כששלם עבר לפונקציה. 153 00:08:18,460 --> 00:08:21,510 Func מקבל עותק של S1 154 00:08:21,510 --> 00:08:23,690 ולכן לא ניתן לשנות S1; 155 00:08:23,690 --> 00:08:27,110 לייתר דיוק, רק את העותק שלו, ששומר בס 156 00:08:27,110 --> 00:08:30,010 אם אתה רוצה את הפונקציה כדי להיות מסוגלת לשנות S1, 157 00:08:30,010 --> 00:08:33,000 התפקוד יצטרך לקחת * סטודנט S, 158 00:08:33,000 --> 00:08:36,570 ואתה צריך לעבור S1 לפי כתובת, כמו אז. 159 00:08:37,549 --> 00:08:41,100 סטודנטים * S, פונקציה & S1. 160 00:08:41,100 --> 00:08:44,760 יש עוד סיבה לעבור על ידי כתובת כאן. 161 00:08:44,760 --> 00:08:48,030 מה אם struct שלנו הכיל 100 שדות? 162 00:08:48,030 --> 00:08:51,250 בכל פעם שאנו עוברים תלמיד לתפקוד, 163 00:08:51,250 --> 00:08:55,770 התכנית שלנו צריכה להעתיק את כל 100 שדות אלה לS הטיעון של התפקוד, 164 00:08:55,770 --> 00:08:59,320 גם אם הוא לא משתמש ברובם גדולים. 165 00:08:59,320 --> 00:09:02,700 אז גם אם תפקוד אינו מתכנן שינוי הסטודנט, 166 00:09:02,700 --> 00:09:05,170 אם עדיין יכול להיות בעל ערך רב לעובר כתובת. 167 00:09:05,170 --> 00:09:08,990 בסדר, מה אם אנחנו רוצים ליצור מצביעים ל struct? 168 00:09:08,990 --> 00:09:11,130 אנחנו יכולים לעשות משהו כמו 169 00:09:11,130 --> 00:09:17,580 התלמיד * S 170 00:09:17,580 --> 00:09:20,980 שווה malloc 171 00:09:20,980 --> 00:09:26,600 גודלו של תלמיד. 172 00:09:30,450 --> 00:09:33,590 שים לב שהגודל של עדיין עובד כאן. 173 00:09:33,590 --> 00:09:37,260 אז איך אנחנו עכשיו לגשת לחבר הגיל 174 00:09:37,260 --> 00:09:39,640 של הבלוק שמצביע לS? 175 00:09:39,640 --> 00:09:42,300 אתה עשוי לחשוב ראשון לעשות 176 00:09:42,300 --> 00:09:47,970 * S.age = 4, 177 00:09:47,970 --> 00:09:50,220 אבל זה לא ממש עובד. 178 00:09:50,220 --> 00:09:52,940 מכיוון שזו תהיה באמת להתפרש כ 179 00:09:52,940 --> 00:09:57,740 * S.age בסוגריים = 4, 180 00:09:57,740 --> 00:10:00,160 שאפילו לא לקמפל, 181 00:10:00,160 --> 00:10:03,600 מאז S הוא לא struct או לייתר הדיוק מצביע ל struct, 182 00:10:03,600 --> 00:10:06,270 ולכן הנקודה לא תעבוד כאן. 183 00:10:06,270 --> 00:10:08,860 אנחנו יכולים לעשות 184 00:10:08,860 --> 00:10:13,760 (* S). גיל = 4 185 00:10:13,760 --> 00:10:16,790 אבל הסוגריים יכולים לקבל מעצבן ומבלבל. 186 00:10:16,790 --> 00:10:19,880 למרבה המזל, יש לנו מפעיל חץ מיוחד 187 00:10:19,880 --> 00:10:22,350 זה נראה משהו כזה 188 00:10:22,350 --> 00:10:28,860 S-> גיל = 4. 189 00:10:28,860 --> 00:10:31,600 2 דרכים אלה של התייחסות גיל 190 00:10:31,600 --> 00:10:33,270 שווים 191 00:10:33,270 --> 00:10:36,870 ואנחנו לא באמת אי פעם נצטרך מפעיל החץ, 192 00:10:36,870 --> 00:10:39,300 אבל הוא עושה את הדברים נראים יותר נחמדים. 193 00:10:39,300 --> 00:10:43,050 מאז S הוא מצביע לגוש חלק מזיכרון המכיל struct, 194 00:10:43,050 --> 00:10:47,820 אתה יכול לחשוב על הגיל> כמו בצע חץ המצביע 195 00:10:47,820 --> 00:10:50,250 ולתפוס את חבר הגיל. 196 00:10:50,250 --> 00:10:53,750 אז למה אנחנו צריכים פעם להשתמש structs? 197 00:10:53,750 --> 00:10:57,560 זה בהחלט אפשרי כדי לברוח רק עם המספרים השלמים פרימיטיביים, 198 00:10:57,560 --> 00:10:59,050 תווים, מצביעים וכדומה 199 00:10:59,050 --> 00:11:01,550 שאנחנו רגילים; 200 00:11:01,550 --> 00:11:03,340 במקום S1 ו S2 לפני, 201 00:11:03,340 --> 00:11:06,290 היינו יכול age1, age2, name1, וname2 202 00:11:06,290 --> 00:11:09,120 כל במשתנים נפרדים. 203 00:11:09,120 --> 00:11:11,390 זה בסדר רק עם 2 תלמידים, 204 00:11:11,390 --> 00:11:13,310 אבל מה אם היו לנו 10 מהם? 205 00:11:13,310 --> 00:11:15,540 ומה אם במקום רק 2 שדות, 206 00:11:15,540 --> 00:11:17,720 struct התלמיד היה 100 שדות? 207 00:11:17,720 --> 00:11:21,240 ממוצע ציונים, קורסים, צבע שיער, מין, וכן הלאה. 208 00:11:21,240 --> 00:11:25,790 במקום רק 10 structs, אנחנו צריכים 1,000 משתנים נפרדים. 209 00:11:25,790 --> 00:11:28,360 כמו כן, שקלו פונקציה 210 00:11:28,360 --> 00:11:32,270 שלוקח struct שעם 100 שדות עם הטיעון היחיד שלה 211 00:11:32,270 --> 00:11:34,350 ומדפיס את כל השדות. 212 00:11:34,350 --> 00:11:36,320 אם לא הייתי משתמש בstruct, 213 00:11:36,320 --> 00:11:38,540 בכל פעם שאנו קוראים פונקציה ש, 214 00:11:38,540 --> 00:11:41,460 אנחנו צריכים לעבור בכל 100 המשתנים, 215 00:11:41,460 --> 00:11:44,430 אם יש לנו 100 משתנה לסטודנט 1 ו, 216 00:11:44,430 --> 00:11:47,020 ו100 משתנה לסטודנט 2, 217 00:11:47,020 --> 00:11:50,540 אנחנו צריכים להיות בטוחים שאנחנו לא עוברים בטעות כמה משתנים מתלמיד 1 218 00:11:50,540 --> 00:11:52,910 וכמה משתנים מתלמיד 2. 219 00:11:52,910 --> 00:11:55,710 זה בלתי אפשרי לעשות את טעות עם struct, 220 00:11:55,710 --> 00:11:59,010 מכיוון שכל 100 המשתנים כלולים בחבילה אחת. 221 00:11:59,010 --> 00:12:02,050 רק כמה הערות אחרונות: 222 00:12:02,050 --> 00:12:04,870 אם הבנת את הכל עד לנקודה זו, גדול. 223 00:12:04,870 --> 00:12:07,900 שאר הווידאו הוא רק למען השלמות ". 224 00:12:07,900 --> 00:12:11,010 בגלל structs יכול להחזיק כל סוג של מצביע, 225 00:12:11,010 --> 00:12:14,220 הם יכולים גם להחזיק מצביעי פונקציות. 226 00:12:14,220 --> 00:12:17,040 אם אתה מכיר עם תכנות מונחה עצמים, 227 00:12:17,040 --> 00:12:21,790 זה מספק דרך להשתמש structs לתכנית בסגנון מונחה עצמים. 228 00:12:21,790 --> 00:12:24,500 עוד על מצביעי פונקציות במועד אחר. 229 00:12:24,500 --> 00:12:27,760 כמו כן, לפעמים אתה יכול להיות 2 structs 230 00:12:27,760 --> 00:12:30,220 הגדרות שתלויות בזה. 231 00:12:30,220 --> 00:12:32,320 לדוגמה, 232 00:12:32,320 --> 00:12:35,470 שנהיה לנו struct, 233 00:12:35,470 --> 00:12:38,580 אשר מוגדר כ 234 00:12:38,580 --> 00:12:41,910 מצביע לB struct, 235 00:12:41,910 --> 00:12:47,180 struct B * X, 236 00:12:47,180 --> 00:12:50,470 ועכשיו אנחנו יכולים להיות B struct 237 00:12:53,890 --> 00:12:56,280 אשר מוגדר כמצביע 238 00:12:56,280 --> 00:12:59,180 ל struct, 239 00:12:59,180 --> 00:13:03,640 struct * י 240 00:13:07,230 --> 00:13:09,060 אבל זה לא הידור, 241 00:13:09,060 --> 00:13:14,110 מאז struct ב 'לא היה קיים בזמן שstruct הוא להיות הידור. 242 00:13:14,110 --> 00:13:17,600 ואם להחליף struct וstruct B, 243 00:13:17,600 --> 00:13:20,100 אז הייתי פשוט אשאר עם אותה הבעיה; 244 00:13:20,100 --> 00:13:22,640 הפעם, עם struct לא קיים. 245 00:13:22,640 --> 00:13:24,720 כדי לפתור את זה, אנחנו יכולים לכתוב 246 00:13:24,720 --> 00:13:29,290 struct B; 247 00:13:29,290 --> 00:13:32,460 לפני הגדרת struct א 248 00:13:32,460 --> 00:13:35,590 זה נקרא הכרזה קדימה. 249 00:13:35,590 --> 00:13:38,590 זה פשוט מאפשר למהדר יודע ש 250 00:13:38,590 --> 00:13:42,040 struct B הוא סוג חוקי שיוגדר באופן מלא מאוחר יותר או במקום אחר. 251 00:13:42,040 --> 00:13:45,980 השם שלי הוא רוב אודן, וזה CS50. 252 00:13:45,980 --> 00:13:48,980 [CS50.TV]