1 00:00:00,000 --> 00:00:06,180 2 00:00:06,180 --> 00:00:07,820 >> ג'ייסון הירשהורן: ברוכים הבאים לA5, כולם. 3 00:00:07,820 --> 00:00:11,270 יש לנו שבוע מרגש לפנינו, בעיקר בגלל שיש כל כך הרבה חדש 4 00:00:11,270 --> 00:00:12,350 פרצופים בחדר הזה. 5 00:00:12,350 --> 00:00:12,920 זה נפלא. 6 00:00:12,920 --> 00:00:15,740 הרבה מכם נמצאים כאן במקרה, וזה אפילו טוב יותר. 7 00:00:15,740 --> 00:00:18,220 אז אני מקווה שתוכל לשמור על שהצטרף אלינו. 8 00:00:18,220 --> 00:00:20,220 >> השבוע אנחנו הולכים לבלות את חלק הארי של סעיף 9 00:00:20,220 --> 00:00:21,870 מתכונן לחידון. 10 00:00:21,870 --> 00:00:26,580 אז לכל סדר היום שלנו, אנחנו הולכים לדבר קצת על משאבים לכיתה, 11 00:00:26,580 --> 00:00:30,350 אלא גם עבור החידון, ולאחר מכן, שוב, מבלה את חלק הארי של דיבור בכיתה 12 00:00:30,350 --> 00:00:31,390 על שאלות. 13 00:00:31,390 --> 00:00:33,900 ברגע שנסיים לענות שאלות, או אם השאלות שלך 14 00:00:33,900 --> 00:00:39,010 באופן טבעי להוביל אותנו לאיזה קידוד, אני יש להם בעיות דגימה מאמצע השליש 15 00:00:39,010 --> 00:00:43,180 האחרון שאנחנו קוד חי בסעיף יחד כי גם להעלות כמה אחר 16 00:00:43,180 --> 00:00:45,420 נושאים טובים לכיסוי. 17 00:00:45,420 --> 00:00:48,280 >> אז קודם כל, כפי שאנו כבר עברנו ל הזוג האחרון של שבועות כדי להזכיר לך 18 00:00:48,280 --> 00:00:51,700 חבר 'ה, יש טונות של משאבים זמין לקורס הזה. 19 00:00:51,700 --> 00:00:55,020 רבים מהם יהיו מועילים מאוד אליך כפי שאתה ממשיך 20 00:00:55,020 --> 00:00:57,280 ללמוד לחידון 0, כי זה יום שלישי אחר הצהריים. 21 00:00:57,280 --> 00:00:59,630 אז כולכם היה לומד קצת. 22 00:00:59,630 --> 00:01:02,640 >> יש סיכומי הרצאות ומקור קוד שאתה צריך 23 00:01:02,640 --> 00:01:04,050 בהחלט לבדוק. 24 00:01:04,050 --> 00:01:05,019 צפו במכנסיים הקצרים. 25 00:01:05,019 --> 00:01:07,470 עזיבה study.cs50.net. 26 00:01:07,470 --> 00:01:11,770 ולאחר מכן, המפורטים להלן, מספר של משאבים אחרים. 27 00:01:11,770 --> 00:01:14,020 >> שוב, חידון 0 מחר בשעה 1. 28 00:01:14,020 --> 00:01:18,230 אם לא עשה זאת כבר, לבדוק מתוך מסמך חידון 0 אודות על 29 00:01:18,230 --> 00:01:21,370 בדף הבית של הקורס כדי להבין לאן אתה לוקח את החידון. 30 00:01:21,370 --> 00:01:25,770 החידון מתחיל ב1:10 ו מסתיים 70 דקות מאוחר יותר. 31 00:01:25,770 --> 00:01:29,610 אז אם אתה מגיע אחרי 1:10, אתה הולך לקבל פחות שרבים דקות 32 00:01:29,610 --> 00:01:30,940 מ -70 לקחת את החידון. 33 00:01:30,940 --> 00:01:33,570 אז לוודא שאתה שם בזמן. 34 00:01:33,570 --> 00:01:38,690 אם אתה סטודנט הארכה או שיש לי כמה שיקולי בדיקות אחרים, זה 35 00:01:38,690 --> 00:01:40,400 לא יכול להיות ב1:00 מחר. 36 00:01:40,400 --> 00:01:43,540 אבל שוב, לבדוק את החידון אודות 0 מסמך כדי לוודא שאתה יודע כש 37 00:01:43,540 --> 00:01:44,760 אתה לוקח את החידון. 38 00:01:44,760 --> 00:01:46,440 כתבתי 75 דקות עד כאן. 39 00:01:46,440 --> 00:01:48,580 אני חושב שזה נכון, לא 70. 40 00:01:48,580 --> 00:01:53,420 >> זה מכסה את כל החומר משבוע 0 להרצאה בשבוע שעבר ביום רביעי. 41 00:01:53,420 --> 00:01:59,350 ושוב, לחידון הזה, של מסמך, אתה מקבל אחד משני צדדים ו8 42 00:01:59,350 --> 00:02:03,770 1/2 על ידי 11 גיליון נייר שאתה מקבל כדי להשתמש בו כהערות במהלך החידון. 43 00:02:03,770 --> 00:02:08,570 אנשים רבים, אם לא רוב האנשים, יש לי מצא שהדרך המועילה ביותר 44 00:02:08,570 --> 00:02:11,970 ללמוד לחידון הוא להפוך את גיליון מחקר, 45 00:02:11,970 --> 00:02:13,730 אחד סדר, משלהם. 46 00:02:13,730 --> 00:02:17,710 אז להסתכל על העבר אלה אם שראית בעבר אלה. 47 00:02:17,710 --> 00:02:19,960 להושיט יד לחברים כדי לראות מה הם לשים עליהם. 48 00:02:19,960 --> 00:02:23,610 >> אבל ידיים למטה, הדרך הטובה ביותר שאתה יכול מחקר הוא לעבור את הכל ו 49 00:02:23,610 --> 00:02:26,530 לקצץ אותו למה שצריך או לא שייך בגיליון זה של 50 00:02:26,530 --> 00:02:30,570 נייר, כי זה פשוט באמת דרך מועילה עבורך כדי לוודא 51 00:02:30,570 --> 00:02:33,620 אתם עוברים את הכל ו יש להם היכרות מסוימת עם זה. 52 00:02:33,620 --> 00:02:36,690 רוב האנשים, אנו מוצאים, למרות שהם יש גיליון נייר יושב ממש 53 00:02:36,690 --> 00:02:39,840 לידם בחידון, לא פונה לזה, כי, שוב, שמאוד 54 00:02:39,840 --> 00:02:43,290 תהליך עובר המידע עזר להם ללמוד את זה. 55 00:02:43,290 --> 00:02:45,370 >> האם יש למישהו שאלות על חידון 0? 56 00:02:45,370 --> 00:02:50,120 57 00:02:50,120 --> 00:02:51,450 לכל אחד יש - 58 00:02:51,450 --> 00:02:53,230 אני לא הולך לעשות הרמת ידיים. 59 00:02:53,230 --> 00:02:53,550 אין דבר. 60 00:02:53,550 --> 00:02:54,790 אני הולך לשאול מי התחיל ללמוד. 61 00:02:54,790 --> 00:02:58,360 אבל אני לא רוצה לגרום לך כל לא להרים את הידיים שלך. 62 00:02:58,360 --> 00:03:01,290 אז כמו שאמרתי - כן, אבי, קדימה. 63 00:03:01,290 --> 00:03:04,205 >> אבי: מה יהיה דבר שימושי לשים על אחד הביפר? 64 00:03:04,205 --> 00:03:05,875 >> תלמיד: זה תלוי בך. 65 00:03:05,875 --> 00:03:08,210 >> ג'ייסון הירשהורן: אתה מקבל להשתמש בשיקול הדעת שלך. 66 00:03:08,210 --> 00:03:13,220 דברים שימושיים לשים על אחד זימונית, אם אתה מבולבל לגבי O הגדול 67 00:03:13,220 --> 00:03:17,510 ריצה סוגים שונים של חיפושים של ומינים, לשים את זה על שם ב 68 00:03:17,510 --> 00:03:18,760 תרשים גנדרן שימושי. 69 00:03:18,760 --> 00:03:22,250 בדרך זו, אם אתה ביקשת שעל חידון, אתה לא צריך לנסות ודמות 70 00:03:22,250 --> 00:03:23,560 את זה או דרך סיבה זמן הריצה. 71 00:03:23,560 --> 00:03:24,730 אתה יכול פשוט להעתיק אותו. 72 00:03:24,730 --> 00:03:28,320 אם אתה מסתכל על עבר חידונים, הרבה פעמים, יש לפעול על שאלות זמן. 73 00:03:28,320 --> 00:03:34,150 כדי שיהיה דוגמה לטובה דבר לשים על אחד הביפר שלך. 74 00:03:34,150 --> 00:03:37,450 >> דברים טובים אחרים לשים על, אם אתה מבולבל לגבי איך להכריז 75 00:03:37,450 --> 00:03:40,570 פונקציה או מה החלקים השונים של הכרזת הפונקציה הן, לכתוב 76 00:03:40,570 --> 00:03:43,400 כי שם, גרסה הגנרית ואז אולי ירושלים. 77 00:03:43,400 --> 00:03:47,290 אם אתה מבולבל לגבי מצביעים, תרשים של אופן עבודה של מצביעים היא 78 00:03:47,290 --> 00:03:48,660 כנראה באמת מועיל. 79 00:03:48,660 --> 00:03:52,440 אם אתה מבולבל לגבי רקורסיה, לטעום פונקציה רקורסיבית שם 80 00:03:52,440 --> 00:03:54,980 גם יכול להוכיח להיות מועיל באמת. 81 00:03:54,980 --> 00:03:57,290 האם זה ייתן לך כמה רעיונות? 82 00:03:57,290 --> 00:04:01,820 >> AVI: אתה צריך להבין תהליך קומפילציה כולו, כמו 83 00:04:01,820 --> 00:04:03,220 איך שכל העבודות? 84 00:04:03,220 --> 00:04:06,620 >> ג'ייסון הירשהורן: הכל כי כבר כיסה את יכול 85 00:04:06,620 --> 00:04:08,060 להופיע בחידון. 86 00:04:08,060 --> 00:04:08,930 שאלות - 87 00:04:08,930 --> 00:04:11,300 אבל שוב, יש דברים שיהיו משקל כבד יותר מאחרים. 88 00:04:11,300 --> 00:04:14,330 יש דברים שצריכים לבוא שוב ושוב בכיתה, ב 89 00:04:14,330 --> 00:04:15,590 הרצאה, וחתך. 90 00:04:15,590 --> 00:04:17,220 דברים אחרים לא לבוא כי לעתים קרובות. 91 00:04:17,220 --> 00:04:22,900 >> אנחנו כבר דיברנו הרבה על # include ו -L משהו ומה אלה מתכוונים ב 92 00:04:22,900 --> 00:04:24,390 תהליך ההידור. 93 00:04:24,390 --> 00:04:29,120 אנחנו כבר דיברנו הרבה על GDB, נצמדים, אלה דגלים שונים שאנו משתמשים בי 94 00:04:29,120 --> 00:04:33,100 אנחנו לקמפל משהו, ומה make15, למשל, באמת 95 00:04:33,100 --> 00:04:34,510 אומר ובאמת עושה. 96 00:04:34,510 --> 00:04:38,110 אנחנו לא מדברים כל כך הרבה על כל צעד אחד ב 97 00:04:38,110 --> 00:04:39,240 תהליך ההידור. 98 00:04:39,240 --> 00:04:40,410 עדיין יש לנו דיברנו על זה. 99 00:04:40,410 --> 00:04:42,550 אז זה עדיין משהו שאתה צריך להיות מוכר עם. 100 00:04:42,550 --> 00:04:44,610 אבל שוב, אנחנו לא הולכים להיות - 101 00:04:44,610 --> 00:04:49,140 דברים שעולים בתדירות גבוהה יותר בכיתה יש סיכוי גבוה יותר לבוא יותר 102 00:04:49,140 --> 00:04:52,495 לעתים קרובות ולהיות יותר בכבדות משוקלל בחידון. 103 00:04:52,495 --> 00:04:53,280 >> מגניב. 104 00:04:53,280 --> 00:04:54,580 יש עוד שאלות על חידון 0? 105 00:04:54,580 --> 00:04:57,660 106 00:04:57,660 --> 00:05:00,050 >> אוקיי, אז שמתי את רשימה נושאים על הלוח. 107 00:05:00,050 --> 00:05:01,550 עברתי את תכנית הלימודים. 108 00:05:01,550 --> 00:05:07,340 עברתי את סעיף ביקורת מ אתמול בלילה ושקופיות אלה כדי לבוא 109 00:05:07,340 --> 00:05:13,710 עם רשימה לא ממצה של נושאים כי יש לנו מכוסה עד כה בCS50 110 00:05:13,710 --> 00:05:16,800 ודברים שאולי מופיע בחידון. 111 00:05:16,800 --> 00:05:19,900 אז אני לא הולך לעבור כל אחד ואחד מאלה. 112 00:05:19,900 --> 00:05:22,370 שתיקח הרבה יותר זמן ממה שיש לנו עכשיו. 113 00:05:22,370 --> 00:05:26,880 אבל אני שם את זה כאן בתקווה לרוץ הזיכרון שלך כמו לדברים שעשויים 114 00:05:26,880 --> 00:05:28,420 או לא יכול להיות מוכר כאיתך. 115 00:05:28,420 --> 00:05:32,850 >> ואני אשמח לבלות את עיקר סעיף לענות על השאלות שלך על 116 00:05:32,850 --> 00:05:35,130 נושאים, הנושאים האלה כי אינם מכוסים כאן. 117 00:05:35,130 --> 00:05:36,130 אנחנו יכולים לכתוב קוד פסאודו. 118 00:05:36,130 --> 00:05:40,010 אנחנו יכולים לכתוב קוד אמיתי כדי להבטיח לך - 119 00:05:40,010 --> 00:05:44,280 אני יכול לענות על השאלה שלך ולעזור כולם ביסוד מבינים 120 00:05:44,280 --> 00:05:48,330 הרבה נושאים אלה, כך שתרגישו מוכן ונוח להיכנס 121 00:05:48,330 --> 00:05:50,150 החידון מחר. 122 00:05:50,150 --> 00:05:52,300 אז לקרוא על הרשימה. 123 00:05:52,300 --> 00:05:54,780 אתה מקווה שהגעת לסעיף עם כמה שאלות גם כן. 124 00:05:54,780 --> 00:05:58,480 כשתהיה מוכן, להרים את היד שלך ואנחנו נתחיל. 125 00:05:58,480 --> 00:06:01,590 126 00:06:01,590 --> 00:06:05,200 >> זכרו, את השאלות שיש לך, אין שאלות טיפשיות. 127 00:06:05,200 --> 00:06:06,250 שלנו שמענו את זה הרבה. 128 00:06:06,250 --> 00:06:09,490 והשאלות שיש לך, אני מוכן להמר, אנשים רבים אחרים גם 129 00:06:09,490 --> 00:06:11,740 יושב כאן וצופה באינטרנט יש גם כן. 130 00:06:11,740 --> 00:06:13,770 אז אתה יכול רק לעזור לאנשים על ידי שואל שאלות. 131 00:06:13,770 --> 00:06:15,070 מרקוס. 132 00:06:15,070 --> 00:06:18,040 >> מרקוס: בין הערימה ו גל, האם יש שהוקצה מראש 133 00:06:18,040 --> 00:06:22,880 אחוז הזיכרון שמוגדר כ זה לערימה או לערימה? 134 00:06:22,880 --> 00:06:25,010 או איך זה עובד בדיוק? 135 00:06:25,010 --> 00:06:26,230 >> ג'ייסון הירשהורן: שאלה גדולה. 136 00:06:26,230 --> 00:06:28,640 אני הולך לחצר אחורית קצת. 137 00:06:28,640 --> 00:06:30,910 האם כולם - 138 00:06:30,910 --> 00:06:31,660 בבקשה להיות כנה כאן. 139 00:06:31,660 --> 00:06:34,130 אני יודע שאני מבקש ממך להעלות אותך יד מול החברים שלך. 140 00:06:34,130 --> 00:06:38,510 אבל יש אנשים שמרגישים שלא בנוח עם המחסנית וערימה 141 00:06:38,510 --> 00:06:42,980 ואת רוצה ללכת על זה ומה אלה אומר? 142 00:06:42,980 --> 00:06:43,880 הרם את ידך אם - 143 00:06:43,880 --> 00:06:44,420 על אישור. 144 00:06:44,420 --> 00:06:45,120 תודה. 145 00:06:45,120 --> 00:06:48,420 אז אנחנו הולכים לעבור על הערימה ו הערימה ממש מהר ולאחר מכן 146 00:06:48,420 --> 00:06:50,370 לעבור לתשובה לשאלה שלך. 147 00:06:50,370 --> 00:06:58,250 >> אז אם אנו מפנים את תיבה לייצג זיכרון במחשב שלך, מה הם כמה 148 00:06:58,250 --> 00:07:02,160 דברים שהולכים בתיבה זו? 149 00:07:02,160 --> 00:07:03,630 ראשי. 150 00:07:03,630 --> 00:07:04,020 פונקציה העיקרית. 151 00:07:04,020 --> 00:07:05,890 לאן הולך עיקרי? 152 00:07:05,890 --> 00:07:08,090 >> תלמיד: [לא ברור]. 153 00:07:08,090 --> 00:07:09,390 >> ג'ייסון הירשהורן: אז אנחנו לשים עיקרי כאן למטה. 154 00:07:09,390 --> 00:07:12,180 155 00:07:12,180 --> 00:07:13,430 מה עוד הולך בתיבה זו? 156 00:07:13,430 --> 00:07:16,000 157 00:07:16,000 --> 00:07:18,140 >> תלמיד: הפונקציות שאתה קורא. 158 00:07:18,140 --> 00:07:19,020 >> ג'ייסון הירשהורן: הפונקציות שאנחנו קוראים. 159 00:07:19,020 --> 00:07:20,440 ולאן הם הולכים? 160 00:07:20,440 --> 00:07:21,300 >> תלמיד: בערימה. 161 00:07:21,300 --> 00:07:22,380 >> ג'ייסון הירשהורן: הם ללכת בערימה. 162 00:07:22,380 --> 00:07:27,350 אז אנחנו הולכים לקרוא לזה דבר כאן למטה את המחסנית. 163 00:07:27,350 --> 00:07:31,880 ועד עליון, יש לנו את הערימה. 164 00:07:31,880 --> 00:07:35,450 אז זיכרון הוא לא קופסא בדיוק כמו זה. 165 00:07:35,450 --> 00:07:37,330 אבל זה בעצם די דומה. 166 00:07:37,330 --> 00:07:40,840 זה הולך להיות הרבה תיבות על ושוב, תלוי כמה גדול שלך 167 00:07:40,840 --> 00:07:43,730 מחשב הוא או כמה גדול הוא הזיכרון שלך. 168 00:07:43,730 --> 00:07:46,950 >> ביסוד "" כביכול הזאת הוא הערימה. 169 00:07:46,950 --> 00:07:50,880 ויש דברים מרובים כי ללכת בערימה. 170 00:07:50,880 --> 00:07:53,840 ואלה תלויים בפונקציות יש לך בקוד שלך. 171 00:07:53,840 --> 00:07:57,780 תמיד יש לך תפקיד אחד בך קוד נקרא עיקרי, ולכן תמיד יש 172 00:07:57,780 --> 00:08:00,480 קטע כאן למטה ב מחסנית מוקדשת לעיקרי. 173 00:08:00,480 --> 00:08:03,980 >> סעיפים אלה בערימה נקראים מסגרות מחסנית. 174 00:08:03,980 --> 00:08:09,580 כשאתה קורא לפונקציה אחרת, אומרים עיקרי קורא פונקציית חיפוש בינארי, 175 00:08:09,580 --> 00:08:11,075 אנחנו שמים את מסגרת אחרת בערימה. 176 00:08:11,075 --> 00:08:13,830 177 00:08:13,830 --> 00:08:17,320 באופן ספציפי יותר, אנחנו הולכים לתרום נתח של זיכרון עלינו 178 00:08:17,320 --> 00:08:22,960 מחשב כדי לאחסן החיפוש של ינארי מקומי משתנים ולרוץ בינארי 179 00:08:22,960 --> 00:08:24,150 קוד חיפוש. 180 00:08:24,150 --> 00:08:26,810 >> אז אנחנו קוראים לחיפוש בינארי. 181 00:08:26,810 --> 00:08:30,440 182 00:08:30,440 --> 00:08:33,340 בנתח זה של זיכרון, אנחנו הולכים כדי לאחסן את המשתנים המקומיים שלה. 183 00:08:33,340 --> 00:08:35,270 אנחנו הולכים לאחסן שיחות printf שלה. 184 00:08:35,270 --> 00:08:38,159 מה שלא יקרה, הפונקציה שהיא הולך להיות מאוחסנים ממש שם. 185 00:08:38,159 --> 00:08:40,350 החיפוש בינארי הוא הולך לבצע. 186 00:08:40,350 --> 00:08:42,210 זה הולך להשלים את הביצוע. 187 00:08:42,210 --> 00:08:47,450 מהי המילה בשפת C שמסמלת כי במקרה שפונקציה 188 00:08:47,450 --> 00:08:49,306 להשלים את ביצועה? 189 00:08:49,306 --> 00:08:50,040 >> תלמיד: שבות. 190 00:08:50,040 --> 00:08:50,870 >> ג'ייסון הירשהורן: חזור. 191 00:08:50,870 --> 00:08:53,230 אז בכל פעם שאתה רואה הצהרת תמורה, קצות הפונקציה 192 00:08:53,230 --> 00:08:54,350 כאשר הוא יגיע זה. 193 00:08:54,350 --> 00:08:56,740 החיפוש בינארי אז יפגע החזרתו. 194 00:08:56,740 --> 00:09:01,360 חלק זה של זיכרון למעשה יהיה יתפנה. 195 00:09:01,360 --> 00:09:03,510 ועיקרי יחזור להוצאת להורג. 196 00:09:03,510 --> 00:09:07,240 אז עיקרי ישהה ​​בכל מקום הייתה, שיחה חיפוש בינארי, לקבל קצת ערך החזרה, 197 00:09:07,240 --> 00:09:08,700 ולהמשיך ביצוע. 198 00:09:08,700 --> 00:09:10,840 מסגרת מערך זה תיעלם. 199 00:09:10,840 --> 00:09:14,810 >> אם אנחנו קוראים לפונקציה רקורסיבית, שבו היא פונקציה שקוראת על עצמו 200 00:09:14,810 --> 00:09:18,480 ושוב, אנחנו עלולים לקבל - אומרים לנו עשה חיפוש בינארי באופן רקורסיבי. 201 00:09:18,480 --> 00:09:21,520 אנו עשויים לקבל גרסת החיפוש בינארי אחד, שני חיפוש החיפוש בינארי, בינארי 202 00:09:21,520 --> 00:09:24,090 שלוש, חיפוש בינארי ארבעה, החיפוש בינארי חמש. 203 00:09:24,090 --> 00:09:27,950 ולאחר מכן חיפוש בינארי זה סופי חמש יפגע במקרה הבסיס, והמחסנית 204 00:09:27,950 --> 00:09:31,010 המסגרות יחזרו ולשמור סגירה עד שנחזור לעיקרי. 205 00:09:31,010 --> 00:09:32,530 אנחנו יכולים לעבור על רקורסיה בקצת. 206 00:09:32,530 --> 00:09:35,530 אבל כל זה הוא אומר, אם אתה קורא פונקציות מרובות בו זמנית, 207 00:09:35,530 --> 00:09:39,250 שם אהיה ערימה מרובה מסגרות בערימה. 208 00:09:39,250 --> 00:09:42,900 >> גל, לעומת זאת, עד כאן, אינו עבור פונקציות, 209 00:09:42,900 --> 00:09:44,380 לא למשתנים מקומיים. 210 00:09:44,380 --> 00:09:48,920 זה בשביל שהוקצה באופן דינמי משתנים. 211 00:09:48,920 --> 00:09:57,210 אז אלה הם משתנים שיכולים להיות אותחל באחת עיקרי או 212 00:09:57,210 --> 00:09:58,640 פונקציה שהשיחות העיקריות. 213 00:09:58,640 --> 00:10:00,790 בכל מקום בקוד שלך, הם ניתן לאתחל. 214 00:10:00,790 --> 00:10:04,360 ולאתחל באופן דינמי משתנה שהוקצה. 215 00:10:04,360 --> 00:10:06,970 מה פונקציה ב-C אנחנו משתמשים? 216 00:10:06,970 --> 00:10:07,600 >> תלמיד: malloc. 217 00:10:07,600 --> 00:10:09,240 >> ג'ייסון הירשהורן: malloc. 218 00:10:09,240 --> 00:10:10,800 אתה קורא לmalloc. 219 00:10:10,800 --> 00:10:12,260 אתה מקבל שטח של זיכרון. 220 00:10:12,260 --> 00:10:15,020 ובמרחב זה של זיכרון הוא בערמה. 221 00:10:15,020 --> 00:10:18,840 ובמרחב זה של זיכרון נשאר שם עד שאתה קורא בחינם. 222 00:10:18,840 --> 00:10:22,670 >> משתנים כך שהוקצו באופן דינמי ב ערימה תהיה קיימת כל עוד אתה 223 00:10:22,670 --> 00:10:25,250 רוצה שהם קיימים, והם לא יהיו תיעלם עד שאתה באופן מפורש 224 00:10:25,250 --> 00:10:26,760 תגיד להם ללכת משם. 225 00:10:26,760 --> 00:10:29,670 אתה יכול ליצור אותם בתפקיד אחד. 226 00:10:29,670 --> 00:10:31,930 הערימה של הפונקציה ש המסגרת תיעלם. 227 00:10:31,930 --> 00:10:35,490 אבל משתנים שעדיין קיימות בערימה עד שהוא השתחרר, 228 00:10:35,490 --> 00:10:39,650 פוטנציאלי על ידי הפונקציה שנקראת חיפוש בינארי או משהו כזה. 229 00:10:39,650 --> 00:10:42,580 >> אז משתני ערימה אלה להישאר שם במשך זמן רב ככל שאתה רוצה 230 00:10:42,580 --> 00:10:43,490 להם להישאר שם. 231 00:10:43,490 --> 00:10:46,090 ולקבל אותם כאן. 232 00:10:46,090 --> 00:10:47,450 ולאחר מכן הבא מקבל לשים שם. 233 00:10:47,450 --> 00:10:50,210 הם שומרים מקבלים מלאים ב, והם להישאר שם עד שאתה קורא בחינם. 234 00:10:50,210 --> 00:10:52,870 >> ובעצם, הערימה והמחסנית, מקבל לשאלתו של מרקוס, 235 00:10:52,870 --> 00:10:54,500 לגדול אחד כלפי שני. 236 00:10:54,500 --> 00:10:57,730 ואם הם נתקלים זה בזה, יש לך נצל את כל הזיכרון בך 237 00:10:57,730 --> 00:11:01,330 מחשב, והתכנית שלך להפסיק כי אין לך שום זיכרון יותר 238 00:11:01,330 --> 00:11:02,420 עזב לשימוש. 239 00:11:02,420 --> 00:11:07,290 ביניהם, יש דברים שעלולים להיות אחרים. 240 00:11:07,290 --> 00:11:10,980 אבל להיקף של קורס זה, אתה לא צריך לדאוג בקשר לזה. 241 00:11:10,980 --> 00:11:12,020 >> אז זה היה התשובה לשאלתך. 242 00:11:12,020 --> 00:11:13,520 אל תדאגו. 243 00:11:13,520 --> 00:11:15,550 אבל זה היה התשובה הארוכה. 244 00:11:15,550 --> 00:11:17,800 כל מה שאתה צריך לדעת הוא ערימה והערימה יהיה - 245 00:11:17,800 --> 00:11:18,900 אחד מתחיל בתחתית. 246 00:11:18,900 --> 00:11:19,570 הערימה עושה. 247 00:11:19,570 --> 00:11:20,790 הערימה נמצאת שם למעלה. 248 00:11:20,790 --> 00:11:21,990 הם יגדלו יותר קרובים אחד לשני. 249 00:11:21,990 --> 00:11:23,110 >> ואם הם נוגעים, זה בעיה. 250 00:11:23,110 --> 00:11:24,500 אתה ברח מזיכרון. 251 00:11:24,500 --> 00:11:28,760 אלא גם, בנוסף לידיעה שבי הם, מה מאוחסנים בשני 252 00:11:28,760 --> 00:11:30,512 מחסנית וערימה. 253 00:11:30,512 --> 00:11:31,410 קרטיס. 254 00:11:31,410 --> 00:11:33,570 >> קרטיס: כאשר הם מתנגשים, היא שהצפת מחסנית? 255 00:11:33,570 --> 00:11:35,670 >> ג'ייסון הירשהורן: כאשר הם מתנגשים, זה לא הצפת מחסנית. 256 00:11:35,670 --> 00:11:38,340 הצפת מחסנית היא אזור אחר שאנחנו יכולים לעבור על אם אתה רוצה. 257 00:11:38,340 --> 00:11:40,020 בסדר, אנחנו נחזור לזה בקצת. 258 00:11:40,020 --> 00:11:42,730 >> תלמיד: מה המילה שנקראה כאשר הם פגעו זה בזה, 259 00:11:42,730 --> 00:11:44,450 מחסנית והערימה? 260 00:11:44,450 --> 00:11:46,640 >> ג'ייסון הירשהורן: לעת עתה, אל תדאגו. 261 00:11:46,640 --> 00:11:47,750 פשוט יודע - 262 00:11:47,750 --> 00:11:50,530 אני אענה על שאלה ש אחרי השיעור. 263 00:11:50,530 --> 00:11:52,680 אם הם נתקלים זה בזה, אתה נגמר של זיכרון, כי אין יותר 264 00:11:52,680 --> 00:11:53,330 מרחב שם. 265 00:11:53,330 --> 00:11:55,450 >> תלמיד: סליחה, מה זה אשמת צינוק? 266 00:11:55,450 --> 00:11:58,710 >> ג'ייסון הירשהורן: קטע אשמה יכולה להיקרא ל-- 267 00:11:58,710 --> 00:12:02,240 זה תלוי למה שנקרא של אשמת הצינוק. 268 00:12:02,240 --> 00:12:06,260 לפעמים, הצפת הערימה שלך, זה יהיה אומר seg fault כטעות. 269 00:12:06,260 --> 00:12:08,180 >> סטודנט: מה עם ביטול הפניה למבנה משתנה null? 270 00:12:08,180 --> 00:12:10,040 האם זה באשמת צינוק? 271 00:12:10,040 --> 00:12:11,480 >> ג'ייסון הירשהורן: ביטול הפניה מצביע null - 272 00:12:11,480 --> 00:12:17,850 אוקיי, אז אם יש לך מצביע שאתה להגדיר שווה ל null, מצביעים, כזכור, 273 00:12:17,850 --> 00:12:20,270 כתובות זיכרון חנות כערכים שלהם. 274 00:12:20,270 --> 00:12:23,660 ומצביע null הוא למעשה אחסון 0, 0-th 275 00:12:23,660 --> 00:12:26,670 לטפל במשתנה זה. 276 00:12:26,670 --> 00:12:30,010 אז 0x, 0, 0, 0, 0, וכולי. 277 00:12:30,010 --> 00:12:35,030 כי כתובת ה-0 בזיכרון זה לא בתמונה שלנו, זה שם למעלה 278 00:12:35,030 --> 00:12:38,800 איפשהו, זה שמורות למחשב. 279 00:12:38,800 --> 00:12:40,130 אסור לנו לגעת בו. 280 00:12:40,130 --> 00:12:44,680 >> לכן, כאשר התכנית שלך שביצוע, אם משהו מנסה ללכת לזיכרון 281 00:12:44,680 --> 00:12:48,990 כתובת 0, הוא יודע ש כי הוא ערך ריק. 282 00:12:48,990 --> 00:12:50,820 הוא יודע שום דבר לא צריך להיות שם. 283 00:12:50,820 --> 00:12:53,420 אז אם אתה מנסה להשתמש במשהו שיש ולטפל במשהו כמו שם או 284 00:12:53,420 --> 00:12:58,355 מנסה ללכת למיקום זה, אתה הולך לקבל את אשמת צינוק או שגיאה. 285 00:12:58,355 --> 00:13:00,520 האם זה עונה על השאלה שלך? 286 00:13:00,520 --> 00:13:03,170 >> ועכשיו נלך אחורה לערום בגלישה. 287 00:13:03,170 --> 00:13:09,560 דברים בערימה, כפי שיש לך חבר 'ה ראיתי לפני כן, ב-- בואו לצייר קרוב 288 00:13:09,560 --> 00:13:11,966 ממסגרת מחסנית. 289 00:13:11,966 --> 00:13:15,050 האם כל אחד יכול לראות את זה? 290 00:13:15,050 --> 00:13:16,650 אז יש לנו מסגרת המחסנית שלנו. 291 00:13:16,650 --> 00:13:23,260 אנחנו חוסכים במערך כמקומי משתנה בפונקציה זו. 292 00:13:23,260 --> 00:13:29,510 אז אומר שיש לנו המערך של חמש נקודות. 293 00:13:29,510 --> 00:13:33,230 כל חמישה מאלו יאוחסנו שבמסגרת המחסנית. 294 00:13:33,230 --> 00:13:37,540 >> אם אנחנו מתחילים לכתוב מעבר גבולות של מערך זה - 295 00:13:37,540 --> 00:13:43,990 כך שאם אנחנו מתחילים בכתיבה ל, נניח שתוצאה 0. 296 00:13:43,990 --> 00:13:46,800 אלה הם חמישה אינדקסים של המערך שלנו. 297 00:13:46,800 --> 00:13:50,980 אם אנחנו מתחילים לכתוב למדד 5, אשר אין לנו כאשר יש לנו 298 00:13:50,980 --> 00:13:55,900 מערך של גודל 5, אנו מתחילים לכתוב לתוך מדד 6, 7, 8, 9, אנחנו יכולים לקבל סטאק 299 00:13:55,900 --> 00:13:57,960 שגיאה בגלישה. 300 00:13:57,960 --> 00:14:00,510 >> בדרך כלל זה לא - 301 00:14:00,510 --> 00:14:04,910 אתה כנראה להיכנס לצרות אם אתה הולך על אחד. 302 00:14:04,910 --> 00:14:08,640 אבל בדרך כלל, תוכל להיכנס רוב הצרות אם אתה הולך על ידי הרבה 303 00:14:08,640 --> 00:14:12,770 ולך ללכת כל כך רחוק על שאתה כותב על כתובת השולח של אותו 304 00:14:12,770 --> 00:14:16,080 פונקציה, הנמצאת ב תחתון של מסגרת המחסנית. 305 00:14:16,080 --> 00:14:16,520 >> כי, נכון? 306 00:14:16,520 --> 00:14:17,670 אתה - ב-- מצטער. 307 00:14:17,670 --> 00:14:18,550 לא ", כי נכון". 308 00:14:18,550 --> 00:14:20,470 >> במסגרת החבילה, יש לך המשתנים המקומיים שלך. 309 00:14:20,470 --> 00:14:27,090 בתחתית הערימה מסגרת היא הכתובה השולח. 310 00:14:27,090 --> 00:14:28,790 זה מקום שבי הפונקציה הולך כאשר זה נגמר. 311 00:14:28,790 --> 00:14:33,750 ואם אתה מחליף תמורה ש כתובת, ואז כאשר מסגרת ערימה זו, 312 00:14:33,750 --> 00:14:36,680 כשאתה עובר את המחסנית למסגר וביצוע כל שורה, אתה 313 00:14:36,680 --> 00:14:40,350 הולך לכתובת השולח החדשה שלך שכתוב שם במקום 314 00:14:40,350 --> 00:14:40,910 בפועל אחד. 315 00:14:40,910 --> 00:14:45,050 וזה איך שראינו כמה פרצות אבטחה 316 00:14:45,050 --> 00:14:46,780 יכול לקרות עם מחשבים. 317 00:14:46,780 --> 00:14:52,760 >> הצפה אז ערימה, בקיצור, היא כאשר שלך להחליף את החלק במחסנית 318 00:14:52,760 --> 00:14:55,440 אתה אמור להשתמש בו, מקומי משתנה שאתה אמור להשתמש בו, ו 319 00:14:55,440 --> 00:14:58,070 בפרט כשאתה מתחיל להחליף דברים חשובים כמו 320 00:14:58,070 --> 00:14:59,100 להחזיר את כתובת. 321 00:14:59,100 --> 00:15:00,090 וזה שבו אתה מקבל הודעת שגיאה. 322 00:15:00,090 --> 00:15:03,980 או שאולי אתה אפילו יכול להתחיל אפילו כותב ל-- 323 00:15:03,980 --> 00:15:05,370 אומר החיפוש בינארי היה ממש מעל עיקרי. 324 00:15:05,370 --> 00:15:07,790 אם החליף את הרבה, אתה יכול לכתוב לעיקרי. 325 00:15:07,790 --> 00:15:10,230 אבל בדרך כלל, אתה מקבל הודעת שגיאה לפני לאחר מכן, משום שהמחשב יודע 326 00:15:10,230 --> 00:15:12,270 שאתה עושה משהו שאתה לא צריך לעשות. 327 00:15:12,270 --> 00:15:12,560 כן. 328 00:15:12,560 --> 00:15:13,910 >> תלמיד: מה ההבדל בין הצפת מחסנית 329 00:15:13,910 --> 00:15:16,940 והצפת מאגר? 330 00:15:16,940 --> 00:15:19,420 >> ג'ייסון הירשהורן: הצפת מאגר הוא סוג כללי יותר של 331 00:15:19,420 --> 00:15:20,395 מה שתארתי זה עתה. 332 00:15:20,395 --> 00:15:22,610 >> תלמיד: אז הצפת מחסנית היא דוגמא להצפת מאגר. 333 00:15:22,610 --> 00:15:23,420 >> ג'ייסון הירשהורן: בדיוק. 334 00:15:23,420 --> 00:15:28,700 זה מערך שאנחנו יכולים לחשוב עליו כ חיץ, מרחב לדברים להיכנס 335 00:15:28,700 --> 00:15:30,600 זוהי גלישת מאגר ערימה. 336 00:15:30,600 --> 00:15:33,210 יש לנו יכול הצפת מאגר ערימה. 337 00:15:33,210 --> 00:15:36,870 אם היה חיץ, ששם לעתים קרובות הוא מערך הערימה, ואנחנו 338 00:15:36,870 --> 00:15:40,600 החליף את אותם גבולות, ואז היינו יש הצפת מאגר ערימה. 339 00:15:40,600 --> 00:15:44,870 >> ומעבר להיקף של קורס זה, הם זוהו בצורה מעט שונה. 340 00:15:44,870 --> 00:15:48,040 יש מהדר מיוחד דרכים לזיהוי כל אחד. 341 00:15:48,040 --> 00:15:50,660 אבל גלישת מאגר היא כללית יותר סוג של מה שתארתי, 342 00:15:50,660 --> 00:15:54,090 שהיה הצפת מאגר ערימה. 343 00:15:54,090 --> 00:15:56,240 האם זה עונה לשאלה שלך? 344 00:15:56,240 --> 00:15:57,910 מתוק. 345 00:15:57,910 --> 00:16:01,850 >> היה שם כל שאלות אחרות הקשורים לערימה או הערימה? 346 00:16:01,850 --> 00:16:04,920 347 00:16:04,920 --> 00:16:05,510 כן. 348 00:16:05,510 --> 00:16:08,220 >> תלמיד: אני יודע שיש לך מיתרים בחינם בגלל שהם בערימה 349 00:16:08,220 --> 00:16:09,305 ואתה לא רוצה לדליפת זיכרון. 350 00:16:09,305 --> 00:16:12,240 אבל אתה צריך לשחרר את המשתנים גלובליים ודברים כאלה? 351 00:16:12,240 --> 00:16:14,335 או שהם שחררו באופן אוטומטי? 352 00:16:14,335 --> 00:16:15,700 >> ג'ייסון הירשהורן: שאלה טובה. 353 00:16:15,700 --> 00:16:22,340 אז בCS50.H, אנו יוצרים את הדבר הזה בשבילך בשם מחרוזת. 354 00:16:22,340 --> 00:16:23,800 מחרוזת היא באמת מה? 355 00:16:23,800 --> 00:16:24,810 >> תלמיד: כוכב צ'אר. 356 00:16:24,810 --> 00:16:29,180 >> ג'ייסון הירשהורן: כוכב char, מצביע לאופי, למצביע 357 00:16:29,180 --> 00:16:30,650 מערך של תווים. 358 00:16:30,650 --> 00:16:32,210 זה מה שהיא המחרוזת. 359 00:16:32,210 --> 00:16:36,050 אז אנחנו צריכים לשחרר אותו, כי getstring, שבו השתמש הרבה - 360 00:16:36,050 --> 00:16:38,370 שם מחרוזת שווה getstring - 361 00:16:38,370 --> 00:16:43,560 שmallocs לנו כמה זיכרון על גל ולאחר מכן מחזיר את מצביע ל 362 00:16:43,560 --> 00:16:47,230 התו ראשון של אותה מחרוזת, כוכב char. 363 00:16:47,230 --> 00:16:52,760 >> אז, לכאורה, אם לא היה כתיבה חופשית על כל המיתרים שלך 364 00:16:52,760 --> 00:16:55,600 כי אתה כבר קרא עד כה, יש לך כבר דולף קצת זיכרון. 365 00:16:55,600 --> 00:16:57,430 כמובן שאנחנו לא דיברנו על את זה, אז אף אחד לא קיבל ב 366 00:16:57,430 --> 00:16:58,520 צרות עושים את זה. 367 00:16:58,520 --> 00:16:59,980 אבל הולך קדימה, כן. 368 00:16:59,980 --> 00:17:03,990 כשאתה מתקשר getstring, אתה mallocing קצת מקום בערמה. 369 00:17:03,990 --> 00:17:07,640 ואם אתה לא קורא חופשי מאוחר יותר כי מחרוזת, יש לך דליפת זיכרון. 370 00:17:07,640 --> 00:17:09,440 זה עונה לשאלה שלך? 371 00:17:09,440 --> 00:17:10,606 >> כן 372 00:17:10,606 --> 00:17:15,020 >> תלמיד: אז לעשות את זה, אנחנו משתמשים זכות חופשית לפני התמורה? 373 00:17:15,020 --> 00:17:18,510 בדומה, במסגרת, אני מניח שאם אנחנו אומרים, כאילו, int ראשי, בתוך 374 00:17:18,510 --> 00:17:24,410 היקף הקוד זה בתוך אותם סוגריים מסולסלים, ממש לפני - 375 00:17:24,410 --> 00:17:26,140 אתה יודע היכן אתה מעוניין בדרך כלל לשים תמורה. 376 00:17:26,140 --> 00:17:27,950 האם אתה מכניס חופשי לפני זה? 377 00:17:27,950 --> 00:17:31,000 >> ג'ייסון הירשהורן: אז אתה יכול לשים חופשי בכל מקום שאתה רוצה לשים חופשי. 378 00:17:31,000 --> 00:17:33,810 כי אלה מוקצים באופן דינמי משתנים, כי הם יכולים 379 00:17:33,810 --> 00:17:39,170 לחיות מעבר להיקף של בפרט פונקציה, אם אתה קורא malloc ב 380 00:17:39,170 --> 00:17:44,140 פונקציה נפרדת, למשל, getstring, אתה יכול להתקשר חופשי בראשי. 381 00:17:44,140 --> 00:17:46,050 אתה לא צריך לקרוא לזה בתפקיד הספציפי 382 00:17:46,050 --> 00:17:47,570 בי malloc נקרא. 383 00:17:47,570 --> 00:17:50,340 אבל אתה צריך לקרוא לזה לפני ההחזרים ראשיים. 384 00:17:50,340 --> 00:17:51,120 >> וזה באמת תלוי. 385 00:17:51,120 --> 00:17:54,960 זה תלוי במה אתה malloced כי מרחב במקום הראשון. 386 00:17:54,960 --> 00:17:57,320 יש אנשים שיקראו לשחרר די מהר. 387 00:17:57,320 --> 00:17:59,220 יש אנשים שלא להתקשר חינם עד סוף התכנית שלהם. 388 00:17:59,220 --> 00:18:00,660 והם ילכו דרך והכל בחינם. 389 00:18:00,660 --> 00:18:03,597 זה תלוי במה אתה נקרא malloc. 390 00:18:03,597 --> 00:18:11,270 >> סטודנט: ומה היית אומר אם קרא getstring שימוש? 391 00:18:11,270 --> 00:18:13,320 היית אומר חופשי מה? 392 00:18:13,320 --> 00:18:20,040 >> ג'ייסון הירשהורן: אז התחביר בחינם הוא פשוט בחינם, paren הפתוח, קרוב 393 00:18:20,040 --> 00:18:22,130 פארן, ואת שמו של המצביע. 394 00:18:22,130 --> 00:18:26,410 כך שאם אתה כותב את השם של שווים מחרוזת getstring, אתה שם את השם כאן. 395 00:18:26,410 --> 00:18:27,760 זה שמו של המצביע. 396 00:18:27,760 --> 00:18:30,570 והוא יודע לשחרר את הזיכרון הזה. 397 00:18:30,570 --> 00:18:33,920 >> תלמיד: אז כשזה משחרר שזיכרון, המצביע עדיין מצביע על מקום ש 398 00:18:33,920 --> 00:18:34,970 בזיכרון? 399 00:18:34,970 --> 00:18:39,020 או שהוא מצביע גם התרוקן מ הכתובת שהוא מצביע. 400 00:18:39,020 --> 00:18:40,290 >> ג'ייסון הירשהורן: אנחנו צריכים לנסות את זה. 401 00:18:40,290 --> 00:18:41,430 אנחנו צריכים לקודד את זה. 402 00:18:41,430 --> 00:18:43,880 בואו נחזור כשנגיע ל הקידוד, ובואו קוד ש. 403 00:18:43,880 --> 00:18:46,000 ואם אתה רוצה להבין את התשובה לזה, אתה יכול גם קוד ש 404 00:18:46,000 --> 00:18:46,690 בינתיים. 405 00:18:46,690 --> 00:18:49,100 אבל זה שאלה גדולה. 406 00:18:49,100 --> 00:18:53,480 >> תלמיד: האם זה אפשרי משהו בחינם מוקדם מדי? 407 00:18:53,480 --> 00:18:58,530 אז אתה עדיין צריך את זה לתכנית שלך, ואתה משוחרר שמקום בזיכרון? 408 00:18:58,530 --> 00:18:59,200 >> ג'ייסון הירשהורן: כן. 409 00:18:59,200 --> 00:19:03,020 זה אפשרי, אם משהו בחינם ואז אתה משתמש בו שוב, אתה יהיה 410 00:19:03,020 --> 00:19:06,890 נתקל בשגיאה. 411 00:19:06,890 --> 00:19:10,810 אבל זה עליך, כי אתה משוחרר משהו ואז קרא לזה מאוחר יותר. 412 00:19:10,810 --> 00:19:13,940 אז זה היה הטעות של מתכנת. 413 00:19:13,940 --> 00:19:14,780 אבל כן. 414 00:19:14,780 --> 00:19:17,760 אתה יכול לכתוב את זה. 415 00:19:17,760 --> 00:19:19,240 >> עוד שאלות על - 416 00:19:19,240 --> 00:19:19,760 כן. 417 00:19:19,760 --> 00:19:22,820 >> תלמיד: אז אם אתה אמור רק לשחרר אותו באופן כללי לפני 418 00:19:22,820 --> 00:19:25,490 תכנית מסתיימת, זה אומר שאם תכנית מסתיימת ואתה לא לשחרר אותו, 419 00:19:25,490 --> 00:19:27,580 זיכרון, שעדיין מוקצה? 420 00:19:27,580 --> 00:19:31,330 >> ג'ייסון הירשהורן: אם התכנית שלך מסתיימת ואתה שוכח לשחרר משהו, ולאחר מכן 421 00:19:31,330 --> 00:19:34,390 הזיכרון שהוקצה בכל חיים שלמים של התכנית שלך. 422 00:19:34,390 --> 00:19:37,670 כאשר התכנית שלך נסגר לחלוטין, הזיכרון כי הוא לא הולך 423 00:19:37,670 --> 00:19:39,490 להישאר שם לנצח. 424 00:19:39,490 --> 00:19:42,080 המחשב הוא חכם מספיק כדי לדעת שכאשר התכנית נסגרת, זה 425 00:19:42,080 --> 00:19:46,440 צריך להיפטר מכל הזיכרון ש היה קשור לאותה תכנית. 426 00:19:46,440 --> 00:19:51,240 >> עם זאת, יש כלים שאתה יכול לרוץ בתכנית כדי לזהות אם, כאשר 427 00:19:51,240 --> 00:19:54,720 תכנית הסיום, ששכחת כדי לשחרר קצת זיכרון. 428 00:19:54,720 --> 00:19:57,960 ולבעיה הבאה שלך להגדיר בי אתה תהיה באמצעות malloc ושימוש 429 00:19:57,960 --> 00:20:02,610 מצביעים, אתה יהיה פועל זה תכנית על התכנית שלך, כדי לראות אם, 430 00:20:02,610 --> 00:20:06,530 כאשר תשואות עיקריות, היה לך כמה דברים שנותרו unfreed. 431 00:20:06,530 --> 00:20:09,130 >> אז הם לא הולכים להישאר malloced לנצח במחשב שלך. 432 00:20:09,130 --> 00:20:11,720 זה יהיה בזבוז, כי מהר מאוד, מחשבים 433 00:20:11,720 --> 00:20:12,960 הייתי נגמרים של זיכרון. 434 00:20:12,960 --> 00:20:16,450 אבל אם הם רצים עד סוף שלך לתכנת והם לא שחררו ו 435 00:20:16,450 --> 00:20:20,260 תכנית יוצאת, זה עדיין בעיה כי כלי זה יעזור לך לטפל בם. 436 00:20:20,260 --> 00:20:21,520 >> תלמיד: האם זה Valgrind? 437 00:20:21,520 --> 00:20:22,910 >> ג'ייסון הירשהורן: זה קרא Valgrind. 438 00:20:22,910 --> 00:20:23,520 ואתה תהיה - 439 00:20:23,520 --> 00:20:25,780 >> סטודנט: אבל אנחנו לא צריכים לדעת כי לחידון, אם כי? 440 00:20:25,780 --> 00:20:27,600 אני מתכוון, שזה דיבר על קצת בהרצאה. 441 00:20:27,600 --> 00:20:33,600 >> ג'ייסון הירשהורן: אז Valgrind הוא שמו של כלי זה. 442 00:20:33,600 --> 00:20:37,180 ידיעה מה שהיא עושה היא מספיק לחידון. 443 00:20:37,180 --> 00:20:40,200 אבל אתה לא השתמשת בו עדיין עליך בעיה להגדיר, כי לא הייתה לנו 444 00:20:40,200 --> 00:20:43,520 סט בעיה שעסק באופן מפורש עם malloc או שאתה משתמש בmalloc. 445 00:20:43,520 --> 00:20:45,330 אז לא השתמשת Valgrind עדיין. 446 00:20:45,330 --> 00:20:47,760 אבל תוכל להשתמש בו במוקדם ולא במאוחר. 447 00:20:47,760 --> 00:20:48,710 >> תלמיד: את יכול לחזור מה הוא Valgrind? 448 00:20:48,710 --> 00:20:49,190 >> ג'ייסון הירשהורן: סליחה? 449 00:20:49,190 --> 00:20:51,240 >> סטודנט: אתה יכול לחזור על מה מטרת Valgring היא? 450 00:20:51,240 --> 00:20:53,100 >> ג'ייסון הירשהורן: Valgrind הוא שם - 451 00:20:53,100 --> 00:20:59,890 כמו GDB עוזר לך באגים בתכנית שלך, Valgrind עוזר לך להבין אם 452 00:20:59,890 --> 00:21:03,210 דברים לא שוחררו כאשר התכנית שלך נסגר. 453 00:21:03,210 --> 00:21:05,110 כך תוכל להפעיל אותו בתכנית שלך. 454 00:21:05,110 --> 00:21:09,230 והתכנית שלך יוצאת, וזה יגיד התכנית שלך בשם malloc זה רבים 455 00:21:09,230 --> 00:21:13,670 פעמים לבתים רבים זה, ואתה קראו רק בחינם את זה הרבה פעמים. 456 00:21:13,670 --> 00:21:16,520 וכך עזב את בתים רבים אלה מבלי שישוחרר. 457 00:21:16,520 --> 00:21:18,050 או שהוא יגיד לך ששחרר את הכל. 458 00:21:18,050 --> 00:21:19,070 עבודה טובה. 459 00:21:19,070 --> 00:21:19,480 >> סטודנט: אישור. 460 00:21:19,480 --> 00:21:21,060 וזה נקרא Valgring? 461 00:21:21,060 --> 00:21:24,940 >> ג'ייסון הירשהורן: V--L-G-R-I-N-D. 462 00:21:24,940 --> 00:21:25,970 >> תלמיד: שאלה לגבי מצביעים. 463 00:21:25,970 --> 00:21:30,080 אז אומר שיש לך n לככב x שווה משהו. 464 00:21:30,080 --> 00:21:33,330 זה שווה, כל מה שאתה מכניס יש, זה מה שישים בתוך 465 00:21:33,330 --> 00:21:36,120 מה x הוא מצביע ל, או המצביע של x? 466 00:21:36,120 --> 00:21:37,690 >> ג'ייסון הירשהורן: האם אתה יכול לחזור על השאלה? 467 00:21:37,690 --> 00:21:39,340 האם אנחנו יכולים לצייר את זה בזמן שאתה אומר את זה? 468 00:21:39,340 --> 00:21:42,710 >> תלמיד: בחידון, למעשה, אחד ששלחת לנו, זה היה כמו, char 469 00:21:42,710 --> 00:21:46,520 אמת כוכב שווה סלעי CS50, נכון? 470 00:21:46,520 --> 00:21:52,190 אז זה אומר שזה סלעי CS50 מה האמת מצביעה? 471 00:21:52,190 --> 00:21:55,810 >> ג'ייסון הירשהורן: אז אתה מדבר על כוכב char במחרוזת, איך 472 00:21:55,810 --> 00:21:56,460 זה עובד? 473 00:21:56,460 --> 00:21:56,890 כן. 474 00:21:56,890 --> 00:21:57,700 על אישור. 475 00:21:57,700 --> 00:21:59,140 בואו לצייר את זה לכאן. 476 00:21:59,140 --> 00:22:07,100 >> [שיחת SIDE] 477 00:22:07,100 --> 00:22:11,130 >> ג'ייסון הירשהורן: אז משתנה זה הוא הולך להיות כוכב סוג char. 478 00:22:11,130 --> 00:22:14,580 כמה גדול הוא משתנה של כוכב הסוג char? 479 00:22:14,580 --> 00:22:15,510 כמה בתים? 480 00:22:15,510 --> 00:22:16,450 >> סטודנטים: ארבעה. 481 00:22:16,450 --> 00:22:18,210 >> ג'ייסון הירשהורן: זה ארבעה בתים. 482 00:22:18,210 --> 00:22:21,420 כמה זכויות הוא משתנה של כוכב int הסוג? 483 00:22:21,420 --> 00:22:22,210 >> סטודנטים: ארבעה. 484 00:22:22,210 --> 00:22:24,910 >> ג'ייסון הירשהורן: ארבעה בתים. 485 00:22:24,910 --> 00:22:28,280 אם זה מצביע, אז זה תמיד ארבעה בתים, כי מצביעים, שלהם 486 00:22:28,280 --> 00:22:30,070 ערך הוא כתובת זיכרון. 487 00:22:30,070 --> 00:22:35,160 וכתובות זיכרון בCS50 מכשיר הוא ארוך בארבעה בתים. 488 00:22:35,160 --> 00:22:42,900 לכן, כאשר אנו קוראים getstring, או כאשר אנו נניח, stringname שווה, ולאחר מכן ב 489 00:22:42,900 --> 00:22:46,140 מרכאות כפולות לשים מחרוזת, אנחנו שמים - 490 00:22:46,140 --> 00:22:46,920 טוב, זה קצת שונה. 491 00:22:46,920 --> 00:22:48,630 אנחנו נעשה את getstring כדוגמא. 492 00:22:48,630 --> 00:22:52,150 או משהו כוכב char שווה את המחרוזת. 493 00:22:52,150 --> 00:22:54,360 סליחה, תן לי הדוגמא שאתה קורא? 494 00:22:54,360 --> 00:22:57,590 >> תלמיד: אמת כוכב char שווה "סלעי cs50" במרכאות כפולות. 495 00:22:57,590 --> 00:23:02,260 >> ג'ייסון הירשהורן: אז זה כוכב, זה אנחנו נתקשר x משתנה זה לשלנו 496 00:23:02,260 --> 00:23:04,060 מטרות גנריות. 497 00:23:04,060 --> 00:23:05,970 יצרנו משתנה בשם x. 498 00:23:05,970 --> 00:23:07,610 זה כוכב סוג char. 499 00:23:07,610 --> 00:23:10,950 זה הוא מצביע לסדרה של תווים. 500 00:23:10,950 --> 00:23:12,200 אז כאן למטה - 501 00:23:12,200 --> 00:23:23,710 502 00:23:23,710 --> 00:23:25,890 >> אז ככה היית עושה את זה לעבוד בזיכרון. 503 00:23:25,890 --> 00:23:27,410 זה יהיה לאחסן את כתובת זיכרון. 504 00:23:27,410 --> 00:23:31,770 זה יהיה לאחסן את כתובת הזיכרון של התו הראשון במערך. 505 00:23:31,770 --> 00:23:33,830 ואז כשאתה אחרי המצביע, שהיית 506 00:23:33,830 --> 00:23:35,200 לקבל את התו הראשון. 507 00:23:35,200 --> 00:23:38,780 >> ואם אתה קורא את הדבר הזה כמו מחרוזת, המחשב שלך היא חכמה 508 00:23:38,780 --> 00:23:42,930 מספיק כדי לדעת, לקרוא את כל העניין הזה עד שהוא מגיע לתגובה 0. 509 00:23:42,930 --> 00:23:45,530 אבל אם אתה קורא לו אופי ב זמן, אז אתה iterating דרך 510 00:23:45,530 --> 00:23:49,910 מחרוזת זו, ואז תוכל פשוט לקרוא אופי בכל פעם עד שתגיע ל 511 00:23:49,910 --> 00:23:50,850 קו נטוי הפוך 0. 512 00:23:50,850 --> 00:23:52,335 זה אולי לא ענה שאלה, אם כי. 513 00:23:52,335 --> 00:23:55,610 >> תלמיד: כן, אבל יש לך לא malloced חלל ש 514 00:23:55,610 --> 00:23:58,400 עדיין למצביע ש. 515 00:23:58,400 --> 00:24:02,510 >> ג'ייסון הירשהורן: אז אני לא ממש בטוח בדיוק מה שאתה מחפש ב, 516 00:24:02,510 --> 00:24:03,640 כי אני לא עשיתי את החידון הזה. 517 00:24:03,640 --> 00:24:06,370 זה היה אמור להיות מועיל משאבים מTF אחר. 518 00:24:06,370 --> 00:24:11,380 אם אתה יוצר מחרוזת על מחסנית או כמשתנה מקומית, זה יהיה 519 00:24:11,380 --> 00:24:16,920 פשוט להיות מערך של אישומים ולא בדרך כלל כוכב char מצביע על 520 00:24:16,920 --> 00:24:18,600 מחרוזת אחרת. 521 00:24:18,600 --> 00:24:20,550 אבל אני לא יודע. 522 00:24:20,550 --> 00:24:25,065 זה יכול להיות סמן למשנהו מחרוזת על הערימה גם כן. 523 00:24:25,065 --> 00:24:27,240 כן. 524 00:24:27,240 --> 00:24:31,116 >> תלמיד: אני יודע שאתה צריך להקצות זיכרון אם המצביע הוא 525 00:24:31,116 --> 00:24:33,360 מקבל הכריז בפנים של פונקציה אחרת. 526 00:24:33,360 --> 00:24:36,740 האם אתה צריך לעשות את אותו דבר אם זה הכרזה בתוך ראשי, 527 00:24:36,740 --> 00:24:39,570 אתה משתמש בו בתוך עיקרי? 528 00:24:39,570 --> 00:24:43,590 >> ג'ייסון הירשהורן: אז כן. 529 00:24:43,590 --> 00:24:46,670 אתה יכול להכריז על מצביע לכל כתובת זיכרון לזכרו. 530 00:24:46,670 --> 00:24:51,440 זה יכול להיות הכתובת בזיכרון של מקומי משתנה, אם כי לעתים קרובות, 531 00:24:51,440 --> 00:24:55,760 אנשים לא להכריז כתובות זיכרון למשתנים מקומיים, כי הם הולכים 532 00:24:55,760 --> 00:24:59,890 משם ברגע שהפונקציה שמחזירה, אשר לכן אנחנו בדרך כלל malloc דברים. 533 00:24:59,890 --> 00:25:04,630 אבל כן, אתה יכול להכריז על מצביע למשתנה מקומית אחרת. 534 00:25:04,630 --> 00:25:06,360 זה פשוט בדרך כלל לא נעשה. 535 00:25:06,360 --> 00:25:09,480 אבל אני יכול להעיף מבט באותו דבר ספציפי אחרי השיעור. 536 00:25:09,480 --> 00:25:10,650 כן. 537 00:25:10,650 --> 00:25:12,350 >> תלמיד: אני חושב שזה סוג של מה שבקש. 538 00:25:12,350 --> 00:25:16,930 זה נראה מוזר להיות אתחול מצביע לא כ 539 00:25:16,930 --> 00:25:20,760 כתובת, אבל כמו מה נראה כמו ערך. 540 00:25:20,760 --> 00:25:25,970 זה נראה כמו CS50 הוא מה שבפנים הדבר שהצביע על ו 541 00:25:25,970 --> 00:25:28,820 לא הכתובת האמיתית, נכון? 542 00:25:28,820 --> 00:25:30,520 >> ג'ייסון הירשהורן: אז זה לא במקרה, אף. 543 00:25:30,520 --> 00:25:32,470 זה לא מה שקורה. 544 00:25:32,470 --> 00:25:35,910 כאשר אתה מצהיר על כוכב char, זה כתובת זיכרון. 545 00:25:35,910 --> 00:25:38,860 מצביעים הם כל כתובות הזיכרון מצביע על משהו אחר. 546 00:25:38,860 --> 00:25:41,480 משהו שעוד יכול להיות על מחסנית, אבל כמעט תמיד הוא על 547 00:25:41,480 --> 00:25:43,440 גל בדרך בה אנו רואים את זה בשימוש. 548 00:25:43,440 --> 00:25:46,860 549 00:25:46,860 --> 00:25:53,500 אבל stringname שווה מרכאות כפולות "Getstring," אנחנו יכולים לראות את זה ואנחנו 550 00:25:53,500 --> 00:25:55,010 יכול להסתכל דרך ושקוד. 551 00:25:55,010 --> 00:26:01,190 מחרוזת getstring אינה נשמרת ב משתנה זה, או מה שהמחרוזת 552 00:26:01,190 --> 00:26:04,580 שם הוא לא נשמרים בכי משתנה, כי זה לא איך 553 00:26:04,580 --> 00:26:06,070 מצביעי עבודה. 554 00:26:06,070 --> 00:26:06,770 האם זה הגיוני? 555 00:26:06,770 --> 00:26:07,170 >> סטודנט: כן. 556 00:26:07,170 --> 00:26:08,570 >> ג'ייסון הירשהורן: אישור. 557 00:26:08,570 --> 00:26:11,690 יש לקוות, שלא היה מבלבל לאף אחד. 558 00:26:11,690 --> 00:26:15,732 אבל אם זה היה, אנחנו יכולים להסתכל על זה שוב בקצת, כי אנחנו באמת הולכים 559 00:26:15,732 --> 00:26:19,240 קוד משהו שאני מקווה שיהיה לעבוד עם מחרוזות ולעזור לך להרגיש 560 00:26:19,240 --> 00:26:22,170 יותר נוח איתם. 561 00:26:22,170 --> 00:26:24,869 >> כל שאלות אחרות הקשורות לאלה נושאים או נושאים אחרים ה 562 00:26:24,869 --> 00:26:26,119 אני אשים את הגיבוי? 563 00:26:26,119 --> 00:26:32,280 564 00:26:32,280 --> 00:26:34,840 ו-- 565 00:26:34,840 --> 00:26:36,310 עכשיו. 566 00:26:36,310 --> 00:26:37,630 כן, אלדן. 567 00:26:37,630 --> 00:26:39,860 >> אלדן: אז זה לא קשור לחלוטין, אבל אנחנו יכולים פשוט ללכת על 568 00:26:39,860 --> 00:26:42,760 ממש במהירות את מה שאנחנו צריכים לדעת על ההבדל בין 32 ו 569 00:26:42,760 --> 00:26:46,345 מכונה 64 סיביות? 570 00:26:46,345 --> 00:26:47,740 >> ג'ייסון הירשהורן: כן. 571 00:26:47,740 --> 00:26:52,111 אז 32 ביטים הוא כמה בתים? 572 00:26:52,111 --> 00:26:53,060 >> אלדן: זה ארבעה בתים. 573 00:26:53,060 --> 00:26:54,360 >> ג'ייסון הירשהורן: זה ארבעה בתים. 574 00:26:54,360 --> 00:26:58,420 ו64 ביטים הוא כמה בתים? 575 00:26:58,420 --> 00:26:59,112 >> סטודנט: שמונה. 576 00:26:59,112 --> 00:27:00,610 >> ג'ייסון הירשהורן: שמונה בתים. 577 00:27:00,610 --> 00:27:03,980 אז שוב, שמונה ביטים הוא בייט אחד. 578 00:27:03,980 --> 00:27:08,340 מכשיר CS50 שלך הוא מכונה 32 סיביות. 579 00:27:08,340 --> 00:27:13,650 אז כתובות זיכרון הן ארבעה בתים ארוכים. 580 00:27:13,650 --> 00:27:17,460 ישנם 2 ל32 כתובות זיכרון. 581 00:27:17,460 --> 00:27:21,310 0 עד 2 למינוס 1 32. 582 00:27:21,310 --> 00:27:27,630 ואני לא חיובי, אבל זה כנראה להיקף של מה שאתה צריך 583 00:27:27,630 --> 00:27:35,230 יודע למכונה 32 סיביות, כי זיכרון כתובות הן, שוב, עוד ארבעה בתים, 584 00:27:35,230 --> 00:27:39,620 וזה הסכום המקסימאלי של כתובות זיכרון. 585 00:27:39,620 --> 00:27:41,680 >> כמו כן, סוגי נתונים - 586 00:27:41,680 --> 00:27:45,020 זה יכול להיות משהו כמו גם זה ראוי לציון. 587 00:27:45,020 --> 00:27:49,610 הגודל של סוג הנתונים תלוי המכונה שאתה עובד עם. 588 00:27:49,610 --> 00:27:56,760 אז תו, תו בודד, הוא כיצד בתים רבים במכשיר CS50 שלנו? 589 00:27:56,760 --> 00:27:57,980 בייט אחד. 590 00:27:57,980 --> 00:28:02,310 וזה בעצם בית אחד כמו גם על מכונה 64 סיביות. 591 00:28:02,310 --> 00:28:05,920 >> ורוב סוגי הנתונים הם אותו המספר בתים על שני המכונות. 592 00:28:05,920 --> 00:28:11,620 אבל כמה סוגי הנתונים יהיו שונים על שני המכונות. 593 00:28:11,620 --> 00:28:14,590 אז זה יהיה באופן פוטנציאלי רק דבר שאתם צריכים לדעת. 594 00:28:14,590 --> 00:28:16,710 >> אבל גם זה, אני חושב, הוא מעבר לגבולות - 595 00:28:16,710 --> 00:28:20,990 אני כמעט בטוח, אם אתה מסתכל אחורה בחידונים ישנים, הוא אומר, תניח ל 596 00:28:20,990 --> 00:28:24,090 קידוד בעיות אתה משתמש מכונה 32 סיביות. 597 00:28:24,090 --> 00:28:26,620 598 00:28:26,620 --> 00:28:30,620 אבל יש, ללכת יחד עם זה ב מקרה שאתה מעוניין, יש 599 00:28:30,620 --> 00:28:35,920 סוגי הנתונים שהם אותו הדבר גודל על כל המכונות. 600 00:28:35,920 --> 00:28:42,670 >> אם ראית משהו כזה uint32_t, אתה יכול או 601 00:28:42,670 --> 00:28:43,260 לא ראה את זה. 602 00:28:43,260 --> 00:28:44,290 זה סוג הנתונים. 603 00:28:44,290 --> 00:28:47,570 זה אומר, להיות 32 ביטים לא משנה מה מכשיר הזה הוא על. 604 00:28:47,570 --> 00:28:50,350 לכן, כאשר אנשים כותבים ניידים קוד, שהם כנראה לא ישתמשו ints. 605 00:28:50,350 --> 00:28:53,260 הם במקום ישתמשו נתונים אחרים אלה סוגים שהם יודעים לא יהיו אותו הדבר 606 00:28:53,260 --> 00:28:54,780 גודל על כל מכונה. 607 00:28:54,780 --> 00:28:58,080 608 00:28:58,080 --> 00:28:58,250 Madhu. 609 00:28:58,250 --> 00:29:00,150 >> Madhu: היה לי שאלה לגבי תהליך ההידור. 610 00:29:00,150 --> 00:29:04,110 אז אם אתה כותב תכנית שמשתמשת ספרייה כמו CS50 או משהו 611 00:29:04,110 --> 00:29:06,840 ככה, אני יודע שספרייה ש יש, בשלב מסוים, להיות 612 00:29:06,840 --> 00:29:08,590 לוקט וקשור בו 613 00:29:08,590 --> 00:29:13,380 אבל עד כמה שקורה במהלך האוסף של התכנית שלך? 614 00:29:13,380 --> 00:29:15,880 מה חלק מתהליך שהספרייה מתרחש כאשר אתה 615 00:29:15,880 --> 00:29:18,560 עריכת תכנית משלך? 616 00:29:18,560 --> 00:29:24,020 >> ג'ייסון הירשהורן: אז בואו נלך על בדרך כלל את השלבים של תהליך זה. 617 00:29:24,020 --> 00:29:26,280 אתה כותב. קובץ c שלך. 618 00:29:26,280 --> 00:29:33,530 ב. קובץ c שלך, אתה # כולל ספריות כותרת, למשל, cs50.h. 619 00:29:33,530 --> 00:29:39,480 מה זה כולל חד קו לעשות לתכנית שלך? 620 00:29:39,480 --> 00:29:40,525 Akchar. 621 00:29:40,525 --> 00:29:43,350 >> AKCHAR: זה מוסיף את אבות הטיפוס של הפונקציות מהכותרת 622 00:29:43,350 --> 00:29:45,120 קבצים בספריות. 623 00:29:45,120 --> 00:29:45,600 >> ג'ייסון הירשהורן: בדיוק. 624 00:29:45,600 --> 00:29:49,870 זה מוסיף אבות טיפוס לפונקציות אלה לקוד שלך. 625 00:29:49,870 --> 00:29:55,230 לכן, כאשר הקוד שלך הוא להיות שנאסף ב בשלבים המוקדמים, המהדר יודע 626 00:29:55,230 --> 00:29:59,250 שהפונקציות האלה באמת קיימות, ו כי איפשהו הם הוגדרו. 627 00:29:59,250 --> 00:30:02,460 הקבצים. שעות לא כוללים הגדרות עבור פונקציות אלה, או כיצד 628 00:30:02,460 --> 00:30:03,950 הם עובדים בפועל. 629 00:30:03,950 --> 00:30:07,960 Cs50.h פשוט כולל משהו שאומר getstring הוא דבר אמיתי ש 630 00:30:07,960 --> 00:30:09,270 יכול לקרות. 631 00:30:09,270 --> 00:30:14,240 וstandardio.h אומר printf הוא דבר אמיתי שיכול לקרות. 632 00:30:14,240 --> 00:30:23,190 >> אז בשפת C שלך עם זה. כותרת קובץ מקבל הפך לחלק 633 00:30:23,190 --> 00:30:27,750 קוד לקריאה במכונה, שסופו של דבר מקבל הפך לינארי 634 00:30:27,750 --> 00:30:30,030 קוד, של 0 ו -1 של. 635 00:30:30,030 --> 00:30:33,590 וזה הקוד שסופו של דבר מקבל להורג. 636 00:30:33,590 --> 00:30:38,550 -L שורת cs50 - למשל, כשאתה כותב קלאנג - 637 00:30:38,550 --> 00:30:41,830 ואז אתה כולל-l cs50, אתה מקליד שבי 638 00:30:41,830 --> 00:30:42,180 ואתה רואה את זה. 639 00:30:42,180 --> 00:30:43,890 כשאתה כותב עושה, אתה תראה את הקו שעד כאן. 640 00:30:43,890 --> 00:30:47,740 ואנחנו תראו את זה בשני כאשר אנו קוד או מאוחר יותר כאשר אנו קוד. 641 00:30:47,740 --> 00:30:50,390 >> אבל שורת cs50 ש- l עושה משהו קצת שונה ממה 642 00:30:50,390 --> 00:30:52,440 # כולל cs50.h. 643 00:30:52,440 --> 00:30:56,300 מה קו cs50 ש- l עושה? 644 00:30:56,300 --> 00:30:56,820 אבי? 645 00:30:56,820 --> 00:31:00,310 >> אבי: אני רוצה לומר שהוא מקשר הספרייה לפונקציה 646 00:31:00,310 --> 00:31:02,710 קורא, כמו קבצי o.. 647 00:31:02,710 --> 00:31:08,200 >> ג'ייסון הירשהורן: אז מאוד קרוב, אם לא מדייק. 648 00:31:08,200 --> 00:31:16,220 cs50-l לוקח הקובץ בינארי ו ממזג אותו עם הקובץ בינארי שלך. 649 00:31:16,220 --> 00:31:21,410 אז cs50.h, שאין טעם בהפיכת cs50.h מהשפה C בינארית כל 650 00:31:21,410 --> 00:31:23,130 פעם אחת הוא נמצא בשימוש. 651 00:31:23,130 --> 00:31:26,650 זה יהיה מטופש, כי זה יהיה לבזבז הרבה זמן. 652 00:31:26,650 --> 00:31:30,420 אז זה כבר הידור והפך להפעלה. 653 00:31:30,420 --> 00:31:35,430 ועכשיו זה הולך להיות ממוזג עם הקובץ שלך בסוף. 654 00:31:35,430 --> 00:31:38,370 אז 1 של 0 ושל אלה הולכים להתמזג עם אלה שלך 655 00:31:38,370 --> 00:31:39,150 ו0 בסוף. 656 00:31:39,150 --> 00:31:43,670 אז עכשיו אתה בעצם יש בפועל 1 של 0 ושל המגדירים כיצד getstring, 657 00:31:43,670 --> 00:31:47,890 לדוגמא, עובד, או איך printf, לדוגמא, עובד. 658 00:31:47,890 --> 00:31:52,750 >> ולמידע נוסף, יש מהדרים קצרים שנייט נותן כי 659 00:31:52,750 --> 00:31:55,410 אתה צריך לבדוק שהולך באמצעות צעדים אלה. 660 00:31:55,410 --> 00:31:56,050 אבל - 661 00:31:56,050 --> 00:31:56,560 כן. 662 00:31:56,560 --> 00:32:01,700 >> סטודנט: האם הם תמיד בקבצי o. כשהם בצורת הספרייה, 663 00:32:01,700 --> 00:32:06,764 מוכן שימוזג, צמוד - כמו הם בקוד בינארי? 664 00:32:06,764 --> 00:32:07,600 >> ג'ייסון הירשהורן: אישור. 665 00:32:07,600 --> 00:32:08,420 מה - 666 00:32:08,420 --> 00:32:11,780 >> תלמיד: האם זה תמיד המקרה עבור הספריות כשאתה מקשר אותם? 667 00:32:11,780 --> 00:32:12,500 >> ג'ייסון הירשהורן: כן. 668 00:32:12,500 --> 00:32:17,300 אז יש. של קבצים, אשר יהיו קוד המכונה, שיהיה גם 669 00:32:17,300 --> 00:32:17,975 סתום אליך. 670 00:32:17,975 --> 00:32:19,410 אתה לא צריך לדאוג לאלה. 671 00:32:19,410 --> 00:32:24,930 אבל בדרך כלל, כן, הם יהיו להיות ב. o קבצים מוכן ללכת. 672 00:32:24,930 --> 00:32:27,170 >> תלמיד: אז כשאתה ספינה ספרייה, אתה שולח רק 673 00:32:27,170 --> 00:32:28,880 . שעות ו. o? 674 00:32:28,880 --> 00:32:32,210 אתה לא עושה משלוחים. ג או. ים. 675 00:32:32,210 --> 00:32:33,070 >> ג'ייסון הירשהורן: אז - 676 00:32:33,070 --> 00:32:36,260 וזה בקצר זה, כמו גם, אם מידע זה נראה הקרוב 677 00:32:36,260 --> 00:32:36,700 קטן במהירות. 678 00:32:36,700 --> 00:32:39,870 אבל קצר על מהדרים מדבר על זה גם כן. 679 00:32:39,870 --> 00:32:43,290 כשאתה שולח את ספרייה, אם אתה שולח את . שעות, קובץ הכותרת, אלה 680 00:32:43,290 --> 00:32:46,290 אבות טיפוס לפונקציות, ו1 של ו 0, זה כל מה שאתה צריך לתת. 681 00:32:46,290 --> 00:32:50,640 אתה לא צריך לתת כמה פונקציה עובדת, קובץ c.. 682 00:32:50,640 --> 00:32:56,360 מכיוון שהנקודה של הפשטה, או להצביע API, הנקודה שSPL זה, 683 00:32:56,360 --> 00:32:59,650 הספרייה ניידת סטנפורד, זה לך לא לדאוג איך חדש 684 00:32:59,650 --> 00:33:04,220 GRect עובד, או איך להעביר את העבודות, או איך להוסיף עבודות. 685 00:33:04,220 --> 00:33:06,520 כל מה שאתה צריך לדעת הוא שתוספת היא פונקציה שאתה יכול 686 00:33:06,520 --> 00:33:08,880 להשתמש בו, והוא עושה זאת. 687 00:33:08,880 --> 00:33:12,760 אז אתה באמת לא צריך לדעת איך זה כתוב ב C. אתה רק צריך 688 00:33:12,760 --> 00:33:15,460 יודעים, כאן הן הפונקציות, מה שהם לעשות, וכאן הם של 1 ו -0 של 689 00:33:15,460 --> 00:33:18,870 כאשר אתה באמת רוצה להשתמש בם. 690 00:33:18,870 --> 00:33:19,530 >> מגניב. 691 00:33:19,530 --> 00:33:26,980 עוד שאלות על מהדרים או נושאים אחרים על הלוח? 692 00:33:26,980 --> 00:33:30,300 >> סטודנט: יש לי שאלה יישום פונקציות רקורסיבית. 693 00:33:30,300 --> 00:33:31,170 שאלה לגבי רקורסיה. 694 00:33:31,170 --> 00:33:33,030 היה לי הרגשה שהיה באה. 695 00:33:33,030 --> 00:33:38,310 אז בואו נלך במהירות דרך רקורסיה עם ספציפי 696 00:33:38,310 --> 00:33:40,690 למשל, פונקצית עצרת. 697 00:33:40,690 --> 00:33:44,920 בגלל זה הוא דוגמא ש לעתים קרובות מגיע למעלה או משמש 698 00:33:44,920 --> 00:33:46,170 כדי להמחיש רקורסיה. 699 00:33:46,170 --> 00:33:52,390 700 00:33:52,390 --> 00:33:56,410 >> אז "4!" הוא קרא כ4 עצרת. 701 00:33:56,410 --> 00:33:59,120 ומה 4 עצרת אומרת? 702 00:33:59,120 --> 00:34:00,696 מה זה עושה? 703 00:34:00,696 --> 00:34:02,235 איך אתה לחשב 4 עצרת? 704 00:34:02,235 --> 00:34:05,250 705 00:34:05,250 --> 00:34:07,960 4 פעמים 3 פעמים 2 פעמים 1. 706 00:34:07,960 --> 00:34:11,889 >> אז עוד דרך לכתוב 4 עצרת הוא לכתוב את זה. 707 00:34:11,889 --> 00:34:16,780 708 00:34:16,780 --> 00:34:19,022 4 פעמים עצרת 3. 709 00:34:19,022 --> 00:34:22,080 בגלל 3 עצרת היא 3 פעמים 2 פעמים 1. 710 00:34:22,080 --> 00:34:27,580 אז 4 פעמים 3 עצרת היא 4 פעמים 3 פעמים 2 פעמים 1. 711 00:34:27,580 --> 00:34:32,679 זו הסיבה שהעצרת היא גדולה מועמד לרקורסיה, כי זה 712 00:34:32,679 --> 00:34:36,630 ברור שיש משהו ש קורה שוב ושוב ושוב על 713 00:34:36,630 --> 00:34:39,820 מספר קטן יותר של דברים עד אתה מגיע לסוף. 714 00:34:39,820 --> 00:34:42,570 כאשר אתם מגיעים ל1, עצרת 1 היא 1. 715 00:34:42,570 --> 00:34:43,719 אתה לא יכול ללכת הרבה יותר רחוק. 716 00:34:43,719 --> 00:34:47,219 0 עצרת מוגדרת גם 1. 717 00:34:47,219 --> 00:34:50,679 לכן, כאשר אתה מקבל 1 או 0, אתה בסופו של הדבר, ושאתה יכול 718 00:34:50,679 --> 00:34:53,219 להתחיל ללכת לגבות. 719 00:34:53,219 --> 00:34:59,540 אז אם אנחנו רוצים לכתוב רקורסיבית פונקציה לחישוב עצרת, 720 00:34:59,540 --> 00:35:02,170 אנחנו הולכים לכתוב כמה pseudocode לזה עכשיו. 721 00:35:02,170 --> 00:35:03,300 לפני שאנחנו כותבים pseudocode כי - 722 00:35:03,300 --> 00:35:05,660 אני אתן לך חבר 'ה כמה דקות כדי לכתוב את הקוד פסאודו או רק חושב 723 00:35:05,660 --> 00:35:09,600 על זה - יש שני דברים שכל פונקציה רקורסיבית צריכה. 724 00:35:09,600 --> 00:35:12,530 מה הם שני הדברים האלה? 725 00:35:12,530 --> 00:35:13,220 >> ג'ק: זה חייב להתקשר לעצמו. 726 00:35:13,220 --> 00:35:13,680 >> ג'ייסון הירשהורן: נח? 727 00:35:13,680 --> 00:35:14,460 אה, ג'ק. 728 00:35:14,460 --> 00:35:15,100 קדימה. 729 00:35:15,100 --> 00:35:16,640 >> ג'ק: זה חייב להתקשר לעצמו. 730 00:35:16,640 --> 00:35:19,220 >> ג'ייסון הירשהורן: אז רקורסיבית פונקציה צריכה קריאה רקורסיבית, 731 00:35:19,220 --> 00:35:20,220 קורא לעצמו. 732 00:35:20,220 --> 00:35:20,770 זה אחד. 733 00:35:20,770 --> 00:35:21,510 ומה הדבר השני? 734 00:35:21,510 --> 00:35:22,250 >> ג'ק: מקרה בסיס. 735 00:35:22,250 --> 00:35:23,780 >> ג'ייסון הירשהורן: מקרה בסיס. 736 00:35:23,780 --> 00:35:26,940 מקרה בסיס הוא, הנה כאשר אנחנו עוצרים. 737 00:35:26,940 --> 00:35:29,510 אז הפונקציה שלך נקראת. 738 00:35:29,510 --> 00:35:31,410 מקרה הבסיס מגיע ראשון. 739 00:35:31,410 --> 00:35:33,710 אתה רוצה לדעת אם אתה בסופו של הדבר. 740 00:35:33,710 --> 00:35:37,110 ואם אתה לא בסוף, אתה להפוך את הקריאה רקורסיבית שלך. 741 00:35:37,110 --> 00:35:39,880 ואתה עובר את התפקיד הזה שוב, לבדוק מקרה הבסיס שלך שוב. 742 00:35:39,880 --> 00:35:42,575 אם אתה לא בסוף, אתה עושה אחר קריאה רקורסיבית, 743 00:35:42,575 --> 00:35:44,130 וכולי וכולי, וכולי. 744 00:35:44,130 --> 00:35:47,110 >> לכן פונקציות רקורסיבית תמיד צריך בסיס מקרים אלה ואלה 745 00:35:47,110 --> 00:35:48,210 שיחות רקורסיבית. 746 00:35:48,210 --> 00:35:51,280 אם אין לך קריאה רקורסיבית, זה לא יהיה פונקציה רקורסיבית. 747 00:35:51,280 --> 00:35:53,210 אם לא היה לך מקרה בסיס, היית הולך לנצח ו 748 00:35:53,210 --> 00:35:54,780 לא יהיה סוף. 749 00:35:54,780 --> 00:35:57,870 ומקרה הבסיס תמיד במקום הראשון, כי אתה תמיד רוצה לבדוק 750 00:35:57,870 --> 00:36:00,420 אם אתה בסוף ראשון. 751 00:36:00,420 --> 00:36:04,770 אז לפני שאנחנו עושים כמה pseudocode, למה אתה לא לקחת רגע כדי לחשוב על 752 00:36:04,770 --> 00:36:09,360 איך פונקציה רקורסיבית עצרת יהיה כתוב? 753 00:36:09,360 --> 00:36:23,340 754 00:36:23,340 --> 00:36:26,010 >> כמו כן, רבים ככל שאתה עושה, כתיבה את זה על דף נייר הוא 755 00:36:26,010 --> 00:36:27,960 מה שאתה הולך לעשות כדי לעשות על החידון מחר. 756 00:36:27,960 --> 00:36:32,160 בפועל אז כנראה טוב לעשות בטוח שהקוד שאתה כותב 757 00:36:32,160 --> 00:36:34,420 על גיליון נייר - 758 00:36:34,420 --> 00:36:35,160 או שאתה יכול לעשות את זה. 759 00:36:35,160 --> 00:36:36,710 אתה יודע איפה הוא פסיק. 760 00:36:36,710 --> 00:36:37,660 אתה זוכר את התחביר. 761 00:36:37,660 --> 00:36:40,400 בגלל שאתה לא להיות מסוגל לקבל מהדר להגיד לך שנעשה שגיאה. 762 00:36:40,400 --> 00:37:02,356 763 00:37:02,356 --> 00:37:07,240 >> כמו כן, לאורך שורות אלה, מחר, כש יש לך בעיות קידוד, אם אתה 764 00:37:07,240 --> 00:37:11,490 הם מיהרו לזמן, או אם אתה מאוד מבולבל לגבי איך אתה אמור 765 00:37:11,490 --> 00:37:16,030 לכתוב דבר המסוים בג, זה חובה עליך לכתוב פסאודו קוד 766 00:37:16,030 --> 00:37:18,160 או לכתוב הערות בגם כן. 767 00:37:18,160 --> 00:37:21,940 בגלל שיש זיכוי חלקי עבור הרבה שאלות בחידון. 768 00:37:21,940 --> 00:37:24,840 אז אתה יכול להיות מיהר, או שאתה אולי פשוט להתבלבל. 769 00:37:24,840 --> 00:37:28,030 כתיבה בהערות או פסאודו קוד לעתים קרובות דרכים שבן 770 00:37:28,030 --> 00:37:29,360 יכול לקבל זיכוי חלקי. 771 00:37:29,360 --> 00:37:31,440 >> אז אל תשאיר משהו ריק בחידון. 772 00:37:31,440 --> 00:37:33,490 אין עונשים על לשים את הדברים פנימה 773 00:37:33,490 --> 00:37:37,650 למעשה, לשים בפסאודו קוד או הערות הוא הולכת לעזור כיתה 774 00:37:37,650 --> 00:37:40,410 להבין אם אתה באמת יודע מה אתה מדבר, ואולי הפרס 775 00:37:40,410 --> 00:37:42,030 אתה קצת קרדיט חלקי לכך. 776 00:37:42,030 --> 00:37:44,510 >> גם בכיוון הזה, לכתוב באופן ברור. 777 00:37:44,510 --> 00:37:47,650 אם אנחנו לא יכולים באמת מה שאתה כותב, אנחנו לא מתכוונים להתקשר אליך 778 00:37:47,650 --> 00:37:49,900 במחר בחצות לדמות את מה שכתבת. 779 00:37:49,900 --> 00:37:51,520 אנחנו רק הולכים לקחת את נקודות. 780 00:37:51,520 --> 00:37:56,570 לכתוב באופן ברור כדי שנוכל לשמוע, או ליתר דיוק, אנו יכולים לקרוא את מה שכתב. 781 00:37:56,570 --> 00:38:00,230 >> ואם זה אומר שני משפטים, לא כותב פסקה. 782 00:38:00,230 --> 00:38:02,280 עקוב אחר ההוראות. 783 00:38:02,280 --> 00:38:03,500 לכתוב באופן ברור. 784 00:38:03,500 --> 00:38:07,720 ולכתוב בהערות אלה או pseudocode לשאלות שיכולים 785 00:38:07,720 --> 00:38:10,270 זיכוי חלקי בפרס. 786 00:38:10,270 --> 00:38:12,520 >> אוקיי, בואו נלך לעצרת. 787 00:38:12,520 --> 00:38:15,000 אז יש לנו עצרת פונקציה. 788 00:38:15,000 --> 00:38:18,400 789 00:38:18,400 --> 00:38:21,550 אם הייתי צריך לכתוב בעצם זה ב-C, מה אני צריך לשים לפני שם 790 00:38:21,550 --> 00:38:22,800 של הפונקציה? 791 00:38:22,800 --> 00:38:24,880 792 00:38:24,880 --> 00:38:30,060 סוג ההחזרה, אשר, בזה מקרה, ניתן לו int. 793 00:38:30,060 --> 00:38:35,450 ואז בתוך הסוגריים המסולסלים, הוא מה שקורה בתוך הסוגריים המסולסלים עבור 794 00:38:35,450 --> 00:38:36,850 פונקציה? 795 00:38:36,850 --> 00:38:37,950 >> סטודנטים: סוג טיעון. 796 00:38:37,950 --> 00:38:39,150 >> ג'ייסון הירשהורן: טיעוניה. 797 00:38:39,150 --> 00:38:42,680 אז עצרת תהיה כנראה לקחת ויכוח. 798 00:38:42,680 --> 00:38:44,500 זה יהיה כנראה לקחת רק נימוק אחד. 799 00:38:44,500 --> 00:38:49,450 ואנחנו נגיד את זה ייקח שלם נקרא x. 800 00:38:49,450 --> 00:38:52,770 ושוב, בעת כתיבת אב הטיפוס של פונקציה או כתיבת הפונקציה 801 00:38:52,770 --> 00:38:57,110 בקוד שלך לפני שהגדרתי אותה, אתה לכתוב את סוג הנתונים ואת שמו של 802 00:38:57,110 --> 00:39:01,370 משתנה שבשביל זה פונקציה בלבד. 803 00:39:01,370 --> 00:39:06,350 אז אתה יכול לעבור מספר כלשהו לתוך זה פונקציה, היא תהיי מכונה x 804 00:39:06,350 --> 00:39:07,340 באופן פנימי. 805 00:39:07,340 --> 00:39:08,755 >> יש לנו פונקצית העצרת שלנו. 806 00:39:08,755 --> 00:39:12,030 807 00:39:12,030 --> 00:39:15,850 אנו זקוקים לשני דברים, מקרה בסיס וקריאה רקורסיבית. 808 00:39:15,850 --> 00:39:20,900 מהו מקרה הבסיס לעצרת? 809 00:39:20,900 --> 00:39:24,850 מישהו שכתב את זה ושיש לו לא דיבר בכל זאת, מה הוא הבסיס 810 00:39:24,850 --> 00:39:26,100 מקרה לעצרת? 811 00:39:26,100 --> 00:39:28,400 812 00:39:28,400 --> 00:39:30,930 >> תלמיד: אם n הוא פחות מ 2, בתמורה 1. 813 00:39:30,930 --> 00:39:33,520 >> ג'ייסון הירשהורן: אם n הוא פחות מ 2, בתמורה 1. 814 00:39:33,520 --> 00:39:37,216 אני אוהב את זה, כי זה דואג של 0 ו -1. 815 00:39:37,216 --> 00:39:45,290 אז אנחנו נעשה את x <2, בתמורת 1. 816 00:39:45,290 --> 00:39:47,870 אם אנחנו מקבלים עברנו 0, אם אנחנו מקבלים עבר 1, תהיה פונקציה זו 817 00:39:47,870 --> 00:39:49,790 לחזור מייד 1. 818 00:39:49,790 --> 00:39:54,020 אם אנחנו מקבלים עברנו חלק גדול יותר מספר או שווה ל 2, אנחנו הולכים 819 00:39:54,020 --> 00:39:55,370 יש הקריאה רקורסיבית שלנו. 820 00:39:55,370 --> 00:39:57,855 >> ואז איך זה הולך לעבוד? 821 00:39:57,855 --> 00:40:01,070 האם מישהו אחר שעבד על זה שלא דבר עדיין לתת לי 822 00:40:01,070 --> 00:40:07,380 קריאה רקורסיבית עבור פונקציה זו בpseudocode? 823 00:40:07,380 --> 00:40:10,770 אם אנחנו מקבלים עברנו בx מספר וזה גדול מ -2, מה 824 00:40:10,770 --> 00:40:13,370 אנחנו רוצים לעשות? 825 00:40:13,370 --> 00:40:17,930 יש לנו גם דוגמא כתובה על צד שיכול לתת לך רמז. 826 00:40:17,930 --> 00:40:20,770 >> תלמיד: התקשר פעמים x עצרת של 1 מינוס x? 827 00:40:20,770 --> 00:40:22,020 >> ג'ייסון הירשהורן: בדיוק נכון. 828 00:40:22,020 --> 00:40:24,610 829 00:40:24,610 --> 00:40:37,750 אנחנו הולכים לחזור פעמים x העצרת של 1 מינוס x. 830 00:40:37,750 --> 00:40:41,810 וזה, למרות שכתבתי למעלה, בעצם, מה שאמרת באנגלית, 831 00:40:41,810 --> 00:40:44,580 פונקצית עצרת זו יקבל התקשר שוב. 832 00:40:44,580 --> 00:40:46,320 זה יהיה לבצע על מינוס x 1. 833 00:40:46,320 --> 00:40:49,320 זה יחזור עם כמה מספר שלם, ו אז זה יהיה להכפיל את שני אלה 834 00:40:49,320 --> 00:40:52,050 יחד, וערך שיהיה חזרתי לכל מה שקרא לזה 835 00:40:52,050 --> 00:40:55,010 פונקצית עצרת, שעשוי להיות מופע נוסף של 836 00:40:55,010 --> 00:40:58,420 פונקצית עצרת זו. 837 00:40:58,420 --> 00:41:01,360 >> אז זה הוא דוגמה לרקורסיבית פונקציה, מאוד 838 00:41:01,360 --> 00:41:02,530 פונקציה רקורסיבית פשוטה. 839 00:41:02,530 --> 00:41:04,530 אבל רובם יהיה כמו זה. 840 00:41:04,530 --> 00:41:11,170 אם ברצונכם רקורסיבית טוב אתגר עבור החידון, נסה קידוד 841 00:41:11,170 --> 00:41:13,230 חיפוש בינארי באופן רקורסיבי. 842 00:41:13,230 --> 00:41:18,950 כי אם אתה לא עשית חיפוש בינארי עבור בעיה להגדיר שלוש, סביר להניח שעשית את זה 843 00:41:18,950 --> 00:41:21,730 איטרטיבי בלולאה בזמן. 844 00:41:21,730 --> 00:41:23,700 >> אבל גם יכול להיות שנכתב עליו באופן רקורסיבי. 845 00:41:23,700 --> 00:41:26,310 אתה הולך צריך לכתוב בעצמך פונקציה נפרדת שלוקחת קצת 846 00:41:26,310 --> 00:41:29,020 שורת הפקודה טיעונים שונים - או לא שורת הפקודה טיעונים, חלקם 847 00:41:29,020 --> 00:41:30,910 טיעונים רגילים רק שונים. 848 00:41:30,910 --> 00:41:33,870 אבל אתה יכול לכתוב חיפוש בינארי באופן רקורסיבי גם כן. 849 00:41:33,870 --> 00:41:36,190 >> תלמיד: אז אתה יכול להיות גם בכתב, במקום מינוס x 1, אתה 850 00:41:36,190 --> 00:41:39,502 גם היה יכול לכתוב מינוס x מינוס או שיש, אתה יכול 851 00:41:39,502 --> 00:41:40,830 x מינוס מינוס בכתב. 852 00:41:40,830 --> 00:41:44,740 אתה יכול רק להסביר באמת במהירות מדוע אלה יהיו דברים שונים, 853 00:41:44,740 --> 00:41:49,510 כמו מה ההבדל בין מינוס x מינוס ומינוס x מינוס? 854 00:41:49,510 --> 00:41:51,320 >> ג'ייסון הירשהורן: לא, אני לא הולך להיכנס לזה. 855 00:41:51,320 --> 00:41:55,500 אבל אני אדבר איתך על זה אחרי כיתה. x מינוס מינוס, x מינוס מינוס 856 00:41:55,500 --> 00:41:57,780 הפחת x על ידי 1. 857 00:41:57,780 --> 00:41:59,090 אבל הם עושים את זה קצת אחר. 858 00:41:59,090 --> 00:42:00,340 אבל אני לא רוצה להיכנס לזה. 859 00:42:00,340 --> 00:42:04,330 860 00:42:04,330 --> 00:42:09,090 שאלות אחרות על רקורסיה או בפונקציה זו? 861 00:42:09,090 --> 00:42:10,140 זה לא באמת אפילו pseudocode. 862 00:42:10,140 --> 00:42:15,060 זה בעצם הקוד ב C אתה היה כותב על זה. 863 00:42:15,060 --> 00:42:19,393 >> בסדר, כל שאלות אחרות על נושאים עד כאן? 864 00:42:19,393 --> 00:42:19,864 כן. 865 00:42:19,864 --> 00:42:23,130 >> סטודנט: יש לי סקירה מהירה של נקודה צפה ודיוק. 866 00:42:23,130 --> 00:42:24,260 >> ג'ייסון הירשהורן: צף נקודה ודיוק. 867 00:42:24,260 --> 00:42:26,920 מישהו יכול ממש מהר לתת לי סקירה מהירה של 868 00:42:26,920 --> 00:42:28,210 נקודה ודיוק צפים? 869 00:42:28,210 --> 00:42:30,420 כל מה שאתה צריך לעשות את זה בשבילך בעיה מוגדרת, אז כל מה שאתה 870 00:42:30,420 --> 00:42:31,700 מכיר את זה. 871 00:42:31,700 --> 00:42:35,090 או שאולי לא כולכם. 872 00:42:35,090 --> 00:42:36,602 אף אחד? 873 00:42:36,602 --> 00:42:39,530 תן לי נקודת התחלה. 874 00:42:39,530 --> 00:42:40,750 נקודה צפה ודיוק. 875 00:42:40,750 --> 00:42:42,380 מה הבעיה? 876 00:42:42,380 --> 00:42:42,960 כן. 877 00:42:42,960 --> 00:42:43,680 ויקטוריה? 878 00:42:43,680 --> 00:42:44,480 >> ונסה: ונסה. 879 00:42:44,480 --> 00:42:45,285 >> ג'ייסון הירשהורן: ונסה. 880 00:42:45,285 --> 00:42:45,680 סליחה. 881 00:42:45,680 --> 00:42:51,550 >> ונסה: יש רק מספר סופי של מספרים שניתן לייצג 882 00:42:51,550 --> 00:42:57,930 בגלל שאתה ב, בנו מקרה, מערכת 32 סיביות. 883 00:42:57,930 --> 00:43:03,080 אז אתה סוג של חייב מרכיב כמה מספרים. 884 00:43:03,080 --> 00:43:03,910 >> ג'ייסון הירשהורן: אז זה בדיוק נכון. 885 00:43:03,910 --> 00:43:08,110 יש רק כמות מסוימת של מספרים שיכולים להיות מיוצג. 886 00:43:08,110 --> 00:43:11,770 אם תכפיל שני מספרים גדולים מאוד, זה עלול לעלות על גדות הסכום 887 00:43:11,770 --> 00:43:13,950 חללים שאתה צריך לייצג מספר שלם. 888 00:43:13,950 --> 00:43:17,930 זו הסיבה שלפעמים אנחנו משתמשים ארוך ארוך במקום int. 889 00:43:17,930 --> 00:43:19,210 כי יש יותר רווחים. 890 00:43:19,210 --> 00:43:21,210 שיכול להכיל מספר גדול יותר. 891 00:43:21,210 --> 00:43:24,310 >> דיוק נקודה צפה יש לעשות עם זה, אבל יש גם מה לעשות עם 892 00:43:24,310 --> 00:43:29,300 עובדה שמספרים עשרוניים הם לא תמיד מיוצג. 893 00:43:29,300 --> 00:43:29,540 סליחה. 894 00:43:29,540 --> 00:43:31,280 תן לי להחזיר את זה. 895 00:43:31,280 --> 00:43:36,610 המספר העשרוני 1.0 לא תמיד מיוצג כמו שהיית מצפה, 896 00:43:36,610 --> 00:43:40,770 1.000000000. 897 00:43:40,770 --> 00:43:50,360 לפעמים זה מיוצג כ 1.000000001 או .999999999. 898 00:43:50,360 --> 00:43:52,780 זה יכול להיות אפילו 89 נזרק שם איפשהו. 899 00:43:52,780 --> 00:43:56,560 אז מספרים העשרוניים אלה אינם ייצג בדיוק כמו שהיית 900 00:43:56,560 --> 00:43:58,430 מצפה מהם להיות מיוצגים. 901 00:43:58,430 --> 00:44:00,010 >> אז בבעיה להגדיר - 902 00:44:00,010 --> 00:44:00,860 היה לה שתי? - 903 00:44:00,860 --> 00:44:05,290 בעיה להגדיר שתי, שבו עסקנו ב מספרי נקודה צפה, כשרצינו 904 00:44:05,290 --> 00:44:08,690 שלהם לייצג בדיוק מה שרצינו שלהם לייצג, המספר 905 00:44:08,690 --> 00:44:12,860 של פרוטות, או מספר סנטים, נכפיל אותם על ידי 100. 906 00:44:12,860 --> 00:44:14,750 אנחנו כנסנו אותם. 907 00:44:14,750 --> 00:44:18,660 ולאחר מכן חתכנו את הכל מאחורי הנקודה העשרונית. 908 00:44:18,660 --> 00:44:22,020 זה היה כדי לוודא שהם הייתם שווה בעצם בדיוק מה שרצינו 909 00:44:22,020 --> 00:44:22,410 שלהם שווה. 910 00:44:22,410 --> 00:44:26,870 >> כי כשאתה לוקח משהו שהוא לצוף ולהפוך אותו לint, אתה 911 00:44:26,870 --> 00:44:29,860 לחתוך את הכל לימין לנקודה העשרונית. 912 00:44:29,860 --> 00:44:33,900 בגלל שיש איזשהו נקודה צפה חוסר דיוק, 100.000 עשויים להיות 913 00:44:33,900 --> 00:44:37,440 מיוצג כ99.999999999. 914 00:44:37,440 --> 00:44:40,350 ואם אתה פשוט מנותק הכל כדי הזכות מייד, אתה הולך 915 00:44:40,350 --> 00:44:41,600 לקבל את המספר הלא נכון. 916 00:44:41,600 --> 00:44:44,050 917 00:44:44,050 --> 00:44:44,180 כן. 918 00:44:44,180 --> 00:44:45,290 >> תלמיד: לא הייתה לי שאלה על ליהוק. 919 00:44:45,290 --> 00:44:47,500 מה כדי שהיא מתרחשת ב? 920 00:44:47,500 --> 00:44:54,480 אם הייתי עושה את המצוף, בסוגריים, 1 מחולק על ידי 10, הוא עושה 1 מחולק ב10, 921 00:44:54,480 --> 00:44:58,910 לאחר מכן לקבל 0.1, לאחר מכן הפעל אותו למצוף? 922 00:44:58,910 --> 00:45:01,470 >> ג'ייסון הירשהורן: אם אתה עושה לצוף 1 מחולק ב10 - 923 00:45:01,470 --> 00:45:02,550 >> סטודנט: כן, ולאחר מכן שווה - 924 00:45:02,550 --> 00:45:04,240 כן, זה בדרך כלל היה יש לו שווה ב-- 925 00:45:04,240 --> 00:45:04,690 כן. 926 00:45:04,690 --> 00:45:06,760 אתה רוצה לעשות את זה לצוף, נכון? 927 00:45:06,760 --> 00:45:12,790 >> ג'ייסון הירשהורן: אוקיי, אז אנחנו הולכים להשתמש בו כדי לגלוש לחישוב 928 00:45:12,790 --> 00:45:15,390 את התשובות לשאלות הללו באמצעות קידוד. 929 00:45:15,390 --> 00:45:18,180 מכיוון שאתה בטח יש להם הרבה שאלות אלו דקות, ודרך טובה 930 00:45:18,180 --> 00:45:19,100 כדי לפתור אותן הוא באמצעות קידוד. 931 00:45:19,100 --> 00:45:21,320 אז אנחנו הולכים לקוד את זה עכשיו, ואז אנחנו הולכים לחזור ו 932 00:45:21,320 --> 00:45:24,020 קוד השאלה שיש לך. 933 00:45:24,020 --> 00:45:24,950 >> אז השורה הראשונה - 934 00:45:24,950 --> 00:45:29,390 אני לא היית צריך לכתוב אותו - מה הוא הדבר הראשון שאנו רוצים לעשות כאשר אנו 935 00:45:29,390 --> 00:45:32,250 לפתוח את הקובץ חדש בgedit? 936 00:45:32,250 --> 00:45:34,190 >> תלמיד: כלול. 937 00:45:34,190 --> 00:45:35,920 >> ג'ייסון הירשהורן: כלול מה? 938 00:45:35,920 --> 00:45:37,952 >> תלמיד: ספריית CS50. 939 00:45:37,952 --> 00:45:39,920 >> ג'ייסון הירשהורן: אישור. 940 00:45:39,920 --> 00:45:42,590 מה עוד אנחנו צריכים לכלול? 941 00:45:42,590 --> 00:45:46,820 אנחנו רק הולכים לבדוק מה קורה כאשר אתה מטיל משהו לצוף. 942 00:45:46,820 --> 00:45:48,605 אבל מה שאנחנו צריכים לעשות כדי לכלול אם אנחנו הולך לכתוב תכנית C? 943 00:45:48,605 --> 00:45:49,300 >> תלמיד: תקן I / O. 944 00:45:49,300 --> 00:45:50,625 >> ג'ייסון הירשהורן: stdio.h. 945 00:45:50,625 --> 00:45:54,880 אנחנו באמת לא צריכים, בשביל זה תכנית, cs50.h, למרות שזה 946 00:45:54,880 --> 00:45:55,920 תמיד עוזר לכלול אותו. 947 00:45:55,920 --> 00:45:58,260 אבל אנחנו תמיד צריכים stdio.h. 948 00:45:58,260 --> 00:45:59,660 >> תלמיד: כאשר קידוד ב-C? 949 00:45:59,660 --> 00:46:15,770 >> ג'ייסון הירשהורן: כאשר הקידוד בג 950 00:46:15,770 --> 00:46:17,090 >> אז לשמור אותו כ. קובץ c זה. 951 00:46:17,090 --> 00:46:18,590 אני מקבל כמה הדגשת תחביר נחמדה. 952 00:46:18,590 --> 00:46:22,890 כתבתי חלל פנימי ראשי. 953 00:46:22,890 --> 00:46:24,792 מה חלל זה אומר? 954 00:46:24,792 --> 00:46:26,740 >> סטודנט: לא לקחת כל שורת הפקודה טיעונים. 955 00:46:26,740 --> 00:46:28,900 >> ג'ייסון הירשהורן: אמצעי Void, בזה מקרה, עיקרי לא לוקח שום 956 00:46:28,900 --> 00:46:29,700 שורת הפקודה טיעונים. 957 00:46:29,700 --> 00:46:32,720 במקרים אחרים, זה אומר שהפונקציה לא לוקח טיעוני שורת הפקודה. 958 00:46:32,720 --> 00:46:36,560 או הפונקציה, אם הייתי כותבת חלל העיקרי (void), שהייתי אומר עיקרי של 959 00:46:36,560 --> 00:46:38,460 לא חוזר שום דבר. 960 00:46:38,460 --> 00:46:39,960 אז חלל פשוט לא אומר כלום. 961 00:46:39,960 --> 00:46:42,510 מה הייתי כותב אם הייתי לקחת טיעוני שורת הפקודה? 962 00:46:42,510 --> 00:46:45,250 963 00:46:45,250 --> 00:46:47,150 >> תלמיד: נ 'קשת מחרוזת int קשת ג 964 00:46:47,150 --> 00:46:49,055 >> ג'ייסון הירשהורן: int argv argc מחרוזת. 965 00:46:49,055 --> 00:46:54,050 966 00:46:54,050 --> 00:46:55,572 האם זה נכון? 967 00:46:55,572 --> 00:46:58,720 >> תלמיד: זה סוגריים argv כוכב char. 968 00:46:58,720 --> 00:47:01,730 >> ג'ייסון הירשהורן: אז אתה יכול לכתוב סוגריים argv מחרוזת או argv כוכב char 969 00:47:01,730 --> 00:47:03,710 בסוגריים, אבל אתה צריך סוגריים. 970 00:47:03,710 --> 00:47:06,290 בגלל argv הוא מערך של מחרוזות, זוכר. 971 00:47:06,290 --> 00:47:07,360 זה לא רק מיתר אחד. 972 00:47:07,360 --> 00:47:10,350 אז argv המחרוזת הוא, הנה מחרוזת אחת הנקראת argv. 973 00:47:10,350 --> 00:47:13,630 סוגריים argv מחרוזת, הנה מערך של מחרוזות. 974 00:47:13,630 --> 00:47:17,865 סוגריים argv מחרוזת argc אז int יהיה משהו שאני 975 00:47:17,865 --> 00:47:18,810 כנראה היה כותב. 976 00:47:18,810 --> 00:47:23,050 >> אז אתה רוצה לחסוך במספר שלם? 977 00:47:23,050 --> 00:47:24,285 >> סטודנט: כן, מספר שלם. 978 00:47:24,285 --> 00:47:25,840 או במצוף. 979 00:47:25,840 --> 00:47:26,710 >> ג'ייסון הירשהורן: במצוף? 980 00:47:26,710 --> 00:47:30,790 כמו, x לצוף שווה 1 מחולק ב10. 981 00:47:30,790 --> 00:47:32,040 >> ג'ייסון הירשהורן: אישור. 982 00:47:32,040 --> 00:47:40,160 983 00:47:40,160 --> 00:47:42,240 כיצד ניתן להדפיס את המצוף בprintf? 984 00:47:42,240 --> 00:47:45,100 985 00:47:45,100 --> 00:47:46,714 מה? 986 00:47:46,714 --> 00:47:47,560 >> תלמיד:% f. 987 00:47:47,560 --> 00:47:48,300 >> ג'ייסון הירשהורן:% f. 988 00:47:48,300 --> 00:47:50,810 מה שלם? 989 00:47:50,810 --> 00:47:52,110 ד או i. 990 00:47:52,110 --> 00:47:53,000 מה מחרוזת? 991 00:47:53,000 --> 00:47:54,240 >> תלמיד: ים. 992 00:47:54,240 --> 00:47:56,140 >> ג'ייסון הירשהורן: s. 993 00:47:56,140 --> 00:47:57,550 כיצד אוכל לקבל קו חדש? 994 00:47:57,550 --> 00:47:58,800 >> תלמיד: n קו הנטוי ההפוך. 995 00:47:58,800 --> 00:48:04,610 996 00:48:04,610 --> 00:48:07,100 >> ג'ייסון הירשהורן: מה אני חוזר אם ריצות עיקריות בצורה נכונה? 997 00:48:07,100 --> 00:48:08,360 >> תלמיד: 0. 998 00:48:08,360 --> 00:48:09,430 האם אני צריך לכתוב את הקו, אם כי? 999 00:48:09,430 --> 00:48:10,170 >> סטודנט: לא. 1000 00:48:10,170 --> 00:48:11,513 בסדר, אנחנו לא כותבים אותו, ולאחר מכן. 1001 00:48:11,513 --> 00:48:16,450 1002 00:48:16,450 --> 00:48:17,190 האם כל אחד יכול לקרוא את זה? 1003 00:48:17,190 --> 00:48:18,485 זה נראה קצת קטן. 1004 00:48:18,485 --> 00:48:20,160 האם כל אחד יכול לראות, או צריך אני עושה אותו גדול יותר? 1005 00:48:20,160 --> 00:48:23,480 1006 00:48:23,480 --> 00:48:25,100 אני חושב למצלמה, נבצענו למרות שזה קצת יותר גדול,. 1007 00:48:25,100 --> 00:48:35,750 1008 00:48:35,750 --> 00:48:38,410 >> ג'ייסון הירשהורן: אם אני רוצה להפוך את זה . קובץ C להפעלה, מה 1009 00:48:38,410 --> 00:48:39,260 אני כותב? 1010 00:48:39,260 --> 00:48:41,610 >> סטודנט: להפוך את הבדיקה. 1011 00:48:41,610 --> 00:48:42,080 >> ג'ייסון הירשהורן: סליחה? 1012 00:48:42,080 --> 00:48:42,790 >> סטודנט: להפוך את הבדיקה. 1013 00:48:42,790 --> 00:48:44,040 >> ג'ייסון הירשהורן: להפוך את הבדיקה. 1014 00:48:44,040 --> 00:48:46,700 1015 00:48:46,700 --> 00:48:48,410 אנחנו מדברים על קו זה קודם לכן. 1016 00:48:48,410 --> 00:48:49,140 קלאנג. 1017 00:48:49,140 --> 00:48:51,270 מה צלצול? 1018 00:48:51,270 --> 00:48:52,200 שמו של המהדר. 1019 00:48:52,200 --> 00:48:53,920 מה זה קו? 1020 00:48:53,920 --> 00:48:55,580 >> סטודנט: מגדיר אותו לשימוש של GDB. 1021 00:48:55,580 --> 00:48:59,230 >> ג'ייסון הירשהורן: סטים אותו לשימוש של GDB. 1022 00:48:59,230 --> 00:49:02,338 קו זה, מה זה? 1023 00:49:02,338 --> 00:49:03,290 >> תלמיד: קוד מקור. 1024 00:49:03,290 --> 00:49:06,010 >> ג'ייסון הירשהורן: זה קובץ מקור, קובץ c.. 1025 00:49:06,010 --> 00:49:08,150 מה שתי שורות אלה עושות? 1026 00:49:08,150 --> 00:49:10,245 או שני אלה לא קווים. 1027 00:49:10,245 --> 00:49:12,300 >> סטודנט: זה שמות אותו לבדוק. 1028 00:49:12,300 --> 00:49:15,410 >> ג'ייסון הירשהורן: אז o המקף אומר, שם זה משהו אחר. 1029 00:49:15,410 --> 00:49:16,790 והנה אתה קורא לזה מבחן. 1030 00:49:16,790 --> 00:49:18,900 אם לא היה לי, כי ב, מה זה שם הזה? 1031 00:49:18,900 --> 00:49:20,260 >> תלמיד: a.out. 1032 00:49:20,260 --> 00:49:22,340 >> ג'ייסון הירשהורן: a.out. 1033 00:49:22,340 --> 00:49:25,366 מה זה עושה? 1034 00:49:25,366 --> 00:49:27,670 >> תלמיד: קישורים ספריית המתמטיקה. 1035 00:49:27,670 --> 00:49:29,550 >> ג'ייסון הירשהורן: זה קישורים בספריית המתמטיקה. 1036 00:49:29,550 --> 00:49:32,880 אנו לא כוללים את ספריית המתמטיקה, אבל מכיוון שזה כל כך נפוץ, יש להם 1037 00:49:32,880 --> 00:49:35,780 איפור נכתב תמיד לכלול ספריית המתמטיקה. 1038 00:49:35,780 --> 00:49:39,050 וכן, זה כולל ספריית CS50. 1039 00:49:39,050 --> 00:49:43,010 >> אוקיי, אז אם אנחנו ברשימה, עכשיו יש לנו הפעלה המכונות בדיקה. 1040 00:49:43,010 --> 00:49:45,150 כדי לבצע את זה, אני כותב במבחן. 1041 00:49:45,150 --> 00:49:48,330 אני רואה שצפתי נקודה שלי, כצפוי, שווה 0. 1042 00:49:48,330 --> 00:49:50,890 1043 00:49:50,890 --> 00:49:51,590 עושה את זה - 1044 00:49:51,590 --> 00:49:52,060 כך - 1045 00:49:52,060 --> 00:49:55,210 >> תלמיד: ואז אם אתה שם לצוף עכשיו, כמו שאתה מטיל אותו כמצוף - 1046 00:49:55,210 --> 00:49:56,870 >> ג'ייסון הירשהורן: יצוק 1 למצוף? 1047 00:49:56,870 --> 00:49:59,180 >> סטודנט: לא, להטיל את הדבר מלא - 1048 00:49:59,180 --> 00:49:59,500 כן. 1049 00:49:59,500 --> 00:50:02,460 אם אתה פשוט עשית את זה, היית עושה זה עושה את זה 0.1? 1050 00:50:02,460 --> 00:50:07,170 >> ג'ייסון הירשהורן: אוקיי, אז ממש מהר, 1 מחולק ב10, הם אלה 1051 00:50:07,170 --> 00:50:08,690 מספרים שלמים שמחולקים. 1052 00:50:08,690 --> 00:50:13,580 לכן, כאשר אתה מחלק את מספרים שלמים, הם 0, ואתה שומר את זה ב0 1053 00:50:13,580 --> 00:50:17,170 לצוף, כי הקו הנטוי הוא רק חלוקה של מספרים שלמים. 1054 00:50:17,170 --> 00:50:19,180 אז עכשיו אנחנו פונים משהו למצוף. 1055 00:50:19,180 --> 00:50:21,650 >> בואו לראות מה קורה. 1056 00:50:21,650 --> 00:50:22,900 אנחנו עושים בדיקה. 1057 00:50:22,900 --> 00:50:25,870 1058 00:50:25,870 --> 00:50:31,090 אז עכשיו אנו רואים כי הקו נטוי שלא היה חלוקת מספר שלם, הוא צף 1059 00:50:31,090 --> 00:50:32,640 חלוקת נקודות. 1060 00:50:32,640 --> 00:50:35,700 כי אחד הטיעונים שלה הוטל למצוף. 1061 00:50:35,700 --> 00:50:38,380 אז עכשיו היא אומרת, להתייחס לזה חטיבה כמו עם יש לנו עסק 1062 00:50:38,380 --> 00:50:40,140 נקודות צפות, לא עם מספרים שלמים. 1063 00:50:40,140 --> 00:50:42,760 וכך אנחנו מקבלים התשובה שאנחנו מצפים. 1064 00:50:42,760 --> 00:50:44,620 >> בואו לראות מה קורה - 1065 00:50:44,620 --> 00:50:47,103 אופס. 1066 00:50:47,103 --> 00:50:51,646 אם אני רוצה להדפיס יותר עשרוני כתמים, איך אני יכול לעשות את זה? 1067 00:50:51,646 --> 00:50:55,550 >> ו נקודת נקודה, או כפי שרבים: סטודנט מקומות עשרוניים כמו שאתה רוצה. 1068 00:50:55,550 --> 00:51:02,280 1069 00:51:02,280 --> 00:51:04,440 >> ג'ייסון הירשהורן: אז אני מדפיס 10 נקודות עשרוניות. 1070 00:51:04,440 --> 00:51:06,610 ועכשיו אנחנו רואים שאנחנו מקבלים כמה דברים מוזרים. 1071 00:51:06,610 --> 00:51:09,650 וזה חוזר לשאלה שלך על חוסר דיוק נקודה צף. 1072 00:51:09,650 --> 00:51:10,950 יש דברים מוזרים מאוחסנים כאן. 1073 00:51:10,950 --> 00:51:13,650 1074 00:51:13,650 --> 00:51:15,275 >> אוקיי, האם זה עונה על השאלה שלך? 1075 00:51:15,275 --> 00:51:18,550 1076 00:51:18,550 --> 00:51:20,200 מה עוד אתה רוצה קוד מהירות? 1077 00:51:20,200 --> 00:51:25,470 >> תלמיד: אני רק רציתי לראות אם לא, אם אתה משוחרר עד כמה מצביע, 1078 00:51:25,470 --> 00:51:30,410 אם מצביע שעדיין מאוחסן ב זה את הכתובת של מה שהיה 1079 00:51:30,410 --> 00:51:32,170 מצביע על העבר. 1080 00:51:32,170 --> 00:51:34,100 >> ג'ייסון הירשהורן: בסדר, אז בואו לעשות את זה. 1081 00:51:34,100 --> 00:51:38,030 PTR כוכב צ'אר, זה יוצר משתנה קרא PTR של כוכב סוג char. 1082 00:51:38,030 --> 00:51:39,280 כיצד אוכל לכתוב malloc? 1083 00:51:39,280 --> 00:51:40,550 אלדן? 1084 00:51:40,550 --> 00:51:41,800 >> אלדן: רק malloc. 1085 00:51:41,800 --> 00:51:44,820 1086 00:51:44,820 --> 00:51:51,040 אבל אז זה חייב להיות בגודל של, ו במקרה זה, אני מניח שהיית 1087 00:51:51,040 --> 00:51:52,465 תצביע להיחרך. 1088 00:51:52,465 --> 00:51:54,450 אז שזה יהיה char. 1089 00:51:54,450 --> 00:51:57,520 >> ג'ייסון הירשהורן: אוקיי, אז עוד הגנרי, בפנים - 1090 00:51:57,520 --> 00:51:58,770 בואו לערוך. 1091 00:51:58,770 --> 00:52:05,100 1092 00:52:05,100 --> 00:52:09,260 בתוך malloc, אתה רוצה את המספר בתים בערמה. 1093 00:52:09,260 --> 00:52:12,320 באופן כללי, מה שראינו שאנחנו עושה הוא שאנחנו הולכים malloc 1094 00:52:12,320 --> 00:52:14,940 מחרוזות, למשל, או מערכים של מספרים שלמים. 1095 00:52:14,940 --> 00:52:21,600 אז אם אנחנו רוצים 10 מספרים שלמים, או 10 תווים, 10 ייתן לנו 10. 1096 00:52:21,600 --> 00:52:24,370 ואז גודל של תווים היה נותן שלנו הגודל של תווים, אשר ב 1097 00:52:24,370 --> 00:52:25,120 מקרה זה הוא בתים 1. 1098 00:52:25,120 --> 00:52:26,250 אנחנו מקבלים 10 בתים. 1099 00:52:26,250 --> 00:52:28,540 אם היינו בגודל של int לכתוב, שייתן לנו 40 בתים. 1100 00:52:28,540 --> 00:52:31,520 >> אז באופן כללי יותר, בתוך malloc הוא מספר הבתים שאתה רוצה. 1101 00:52:31,520 --> 00:52:34,620 במקרה זה, אנחנו מקבלים בייט 1. 1102 00:52:34,620 --> 00:52:36,900 שנראה כמו שימוש מוזר של malloc, אבל עבורנו 1103 00:52:36,900 --> 00:52:38,470 מטרות הגיונית. 1104 00:52:38,470 --> 00:52:40,420 אז יש את זה. 1105 00:52:40,420 --> 00:52:43,420 >> אנחנו הולכים לקרוא בחינם. 1106 00:52:43,420 --> 00:52:47,040 אנחנו להיפטר ממנו ואנחנו משתמשים PTR שוב. 1107 00:52:47,040 --> 00:52:48,750 ומה שאתה לא רוצה לבדוק? 1108 00:52:48,750 --> 00:52:50,550 >> תלמיד: אני רק רציתי לבדוק אם היה או לא היה שום דבר 1109 00:52:50,550 --> 00:52:51,900 בתוכו. 1110 00:52:51,900 --> 00:52:53,050 >> ג'ייסון הירשהורן: אז אם זה הצביע על שום דבר? 1111 00:52:53,050 --> 00:52:57,740 >> סטודנט: כן, בדיוק, בין אם זה עדיין היה כתובת בזיכרון. 1112 00:52:57,740 --> 00:53:02,220 >> ג'ייסון הירשהורן: אז אתה רוצה כדי לבדוק את הערך של PTR? 1113 00:53:02,220 --> 00:53:03,470 >> סטודנט: כן, בדיוק. 1114 00:53:03,470 --> 00:53:07,940 1115 00:53:07,940 --> 00:53:10,160 >> ג'ייסון הירשהורן: מה שאני כותב כאן אם אני רוצה לבדוק את הערך של 1116 00:53:10,160 --> 00:53:11,880 נקודה - מה הוא, ירדן אמר, את הערך? 1117 00:53:11,880 --> 00:53:13,720 או מה מאוחסן בתוך של PTR? 1118 00:53:13,720 --> 00:53:14,620 >> תלמיד: כתובת זיכרון. 1119 00:53:14,620 --> 00:53:16,330 >> ג'ייסון הירשהורן: כתובת זיכרון. 1120 00:53:16,330 --> 00:53:20,520 אז אם אני כותב בדיוק את זה, זה יהיה לתת לי את הערך של PTR. 1121 00:53:20,520 --> 00:53:22,800 וכיצד אוכל להדפיס כתובת זיכרון? 1122 00:53:22,800 --> 00:53:26,470 מה מחרוזת הפורמט לכתובת זיכרון? 1123 00:53:26,470 --> 00:53:27,430 >> סטודנט: p%. 1124 00:53:27,430 --> 00:53:28,050 >> ג'ייסון הירשהורן: p%. 1125 00:53:28,050 --> 00:53:29,500 % S היא מחרוזת. 1126 00:53:29,500 --> 00:53:30,750 p% למצביע. 1127 00:53:30,750 --> 00:53:40,820 1128 00:53:40,820 --> 00:53:43,540 האם זה נכון? 1129 00:53:43,540 --> 00:53:44,790 זה נכון. 1130 00:53:44,790 --> 00:53:49,450 1131 00:53:49,450 --> 00:53:51,040 אז PTR שווה - 1132 00:53:51,040 --> 00:53:53,350 עדיין יש בזה משהו. 1133 00:53:53,350 --> 00:53:56,110 1134 00:53:56,110 --> 00:53:57,645 זה כנראה יותר שאלה מעניינת. 1135 00:53:57,645 --> 00:53:59,198 מה הקו שעושה? 1136 00:53:59,198 --> 00:54:00,830 >> תלמיד: תקלות Seg. 1137 00:54:00,830 --> 00:54:01,310 >> ג'ייסון הירשהורן: מה? 1138 00:54:01,310 --> 00:54:02,678 >> תלמיד: אני חושב שזה צינוק תקלות. 1139 00:54:02,678 --> 00:54:03,574 >> ג'ייסון הירשהורן: הממ? 1140 00:54:03,574 --> 00:54:04,920 >> תלמיד: אני חושב שזה צינוק באשמה. 1141 00:54:04,920 --> 00:54:08,265 >> ג'ייסון הירשהורן: אז את הקו הזה של PTR קוד, כוכב, מה 1142 00:54:08,265 --> 00:54:10,152 אין הכוכבים אומר? 1143 00:54:10,152 --> 00:54:11,240 >> תלמיד: תוכן. 1144 00:54:11,240 --> 00:54:11,560 >> ג'ייסון הירשהורן: כן. 1145 00:54:11,560 --> 00:54:13,910 ללכת כדי לקבל את התוכן. 1146 00:54:13,910 --> 00:54:16,830 אז זה הולך לזיכרון אתייחס לשם ולתת לי את זה. 1147 00:54:16,830 --> 00:54:21,030 אני משמש% ג נכון כאן, כי יש הם תווים מאוחסנים שם. 1148 00:54:21,030 --> 00:54:23,390 אז אנחנו הולכים ללכת לכי אנחנו כתובת פשוט ראה - או שזה בטח אהיה 1149 00:54:23,390 --> 00:54:25,190 זה קצת שונה פעם שאנחנו מפעילים את התכנית. 1150 00:54:25,190 --> 00:54:28,010 אבל אנחנו נלך לכתובת זו שבו אנו יודעים עדיין קיימים 1151 00:54:28,010 --> 00:54:29,260 ותראה מה יש שם. 1152 00:54:29,260 --> 00:54:35,640 1153 00:54:35,640 --> 00:54:37,110 >> אז זה לא צינוק באשמה. 1154 00:54:37,110 --> 00:54:38,970 זה פשוט לא נתן לנו שום דבר. 1155 00:54:38,970 --> 00:54:43,350 אולי זה בעצם נתן לנו משהו, אנחנו פשוט לא יכולים לראות את זה. 1156 00:54:43,350 --> 00:54:45,110 וזה חוזר לרעיון הזה - 1157 00:54:45,110 --> 00:54:47,270 ואנחנו לא הולכים לקבל יותר מדי לתוך זה, כי זה מעבר 1158 00:54:47,270 --> 00:54:48,460 היקף הקורס הזה. 1159 00:54:48,460 --> 00:54:51,260 אבל דיברנו על ממש כאן, אם אנחנו הלך מעבר לגבולות של המערך על ידי 1160 00:54:51,260 --> 00:54:54,890 1, אנחנו לא יכולים לקבל בצרות. 1161 00:54:54,890 --> 00:54:58,550 >> לפעמים, כשאתה פשוט ללכת על ידי 1, אתה עושה משהו לא בסדר, ואתה 1162 00:54:58,550 --> 00:54:59,220 יכול להסתבך בצרות. 1163 00:54:59,220 --> 00:55:00,820 אבל אתה לא תמיד מסתבך בצרות. 1164 00:55:00,820 --> 00:55:05,170 זה תלוי עד כמה דבר רע לך אין, אתה הולך להסתבך בצרות. 1165 00:55:05,170 --> 00:55:07,790 שלא לומר, להיות מרושל עם הקוד שלך. 1166 00:55:07,790 --> 00:55:12,080 אבל זה אומר, התכנית לא תהיה תמיד להפסיק, גם אם אתה הולך למקום 1167 00:55:12,080 --> 00:55:14,130 אתה לא אמור ללכת. 1168 00:55:14,130 --> 00:55:18,170 >> דוגמא טובה לכך היא, הרבה אנשים בבעיה שלהם להגדיר 3, אשר 1169 00:55:18,170 --> 00:55:22,350 היה 15, לא בדקו גבולות של הלוח. 1170 00:55:22,350 --> 00:55:25,860 אז הסתכלת לצד השמאל, נראה נכון, נראה לחלק העליון, נראה 1171 00:55:25,860 --> 00:55:27,000 עד לתחתית. 1172 00:55:27,000 --> 00:55:31,540 אבל אתה לא בדקת כדי לראות אם החלק העליון למעשה הולך להיות על הלוח. 1173 00:55:31,540 --> 00:55:35,220 והרבה אנשים שעשו את זה ו פנה בזה, התכנית שלהם עבדה 1174 00:55:35,220 --> 00:55:38,960 בצורה מושלמת, משום שבו לוח העץ שמונח מאוחסן בזיכרון, אם הלך אחד 1175 00:55:38,960 --> 00:55:42,300 מעליו או בדק כי זיכרון כתובת, לא היה שום דבר 1176 00:55:42,300 --> 00:55:44,870 נורא במיוחד על זה, אז התכנית שלך לא הייתה 1177 00:55:44,870 --> 00:55:45,970 הולך לצעוק עליך. 1178 00:55:45,970 --> 00:55:48,870 >> אבל אנחנו עדיין היו לוקחים את נקודות אם לא לך לבדוק את זה, כי אתה 1179 00:55:48,870 --> 00:55:50,850 היו עושה משהו שלא היית אמור לעשות, ואתה יכול להיות 1180 00:55:50,850 --> 00:55:51,860 קיבל בצרות. 1181 00:55:51,860 --> 00:55:54,040 למרות שרוב הסיכויים הם, אתה כנראה לא. 1182 00:55:54,040 --> 00:55:57,790 אז זה הוא להראות שכן, אנחנו עדיין יכולים ללכת אליו. 1183 00:55:57,790 --> 00:55:59,010 ואנחנו לא מקבלים ב צרות במקרה זה. 1184 00:55:59,010 --> 00:56:04,000 אם ניסיתי לעשות לקרוא 100 התווים הבאים, הייתי 1185 00:56:04,000 --> 00:56:06,000 כנראה להסתבך. 1186 00:56:06,000 --> 00:56:09,400 ואתה יכול קוד קריאת 100 הבאים תווים אם אתה רוצה על ידי ביצוע כמה 1187 00:56:09,400 --> 00:56:10,110 סוג של ללולאה. 1188 00:56:10,110 --> 00:56:10,850 כן. 1189 00:56:10,850 --> 00:56:16,250 >> תלמיד: מאז שהיינו מוקצה מרחב ערך ממשי, לא הייתי מצפים 1190 00:56:16,250 --> 00:56:17,050 בעצם להיות מסוגל לראות שום דבר. 1191 00:56:17,050 --> 00:56:21,740 האם עלינו לנסות את זה עם קביעת כי שווה כמו C או משהו? 1192 00:56:21,740 --> 00:56:22,640 >> ג'ייסון הירשהורן: שאלה גדולה. 1193 00:56:22,640 --> 00:56:25,340 כיצד ניתן להגדיר את הערך ש-- 1194 00:56:25,340 --> 00:56:28,980 מה שורת קוד שאני כותב על קו שבע כדי לעשות את מה שאמרת? 1195 00:56:28,980 --> 00:56:34,040 >> תלמיד: הכוכבים PTR שווה אחת ציטוט ג בסופו ציטוט אחד. 1196 00:56:34,040 --> 00:56:36,970 >> ג'ייסון הירשהורן: אז זה לשים אופי, ג, במיקום זה, 1197 00:56:36,970 --> 00:56:40,200 כי שוב, כוכב פירושו ללכת לשם. 1198 00:56:40,200 --> 00:56:43,320 וכאשר משתמשים בו בצד שמאל של אופרטור ההשמה, כי שווה 1199 00:56:43,320 --> 00:56:47,270 לחתום, אנחנו לא מתכוונים לקבל את זה ערך כל כך הרבה כפי שנקבע ערך זה. 1200 00:56:47,270 --> 00:56:48,520 עכשיו בואו נראה מה קורה. 1201 00:56:48,520 --> 00:56:54,700 1202 00:56:54,700 --> 00:56:56,770 >> אנחנו שמים שם משהו והוא היה שם. 1203 00:56:56,770 --> 00:56:58,000 אנחנו קראנו לחינם. 1204 00:56:58,000 --> 00:57:00,100 כמה דברים כנראה קרו בערמה. 1205 00:57:00,100 --> 00:57:01,890 אז זה לא שם יותר. 1206 00:57:01,890 --> 00:57:07,440 אבל שוב, אנחנו לא מקבלים בצרות הולכים לשם. 1207 00:57:07,440 --> 00:57:10,260 >> אני עושה את זה בקוד כדי להמחיש כי הרבה מהם 1208 00:57:10,260 --> 00:57:12,410 שאלות שיש לך, הם באמת מעניין 1209 00:57:12,410 --> 00:57:13,650 עונה הרבה זמן. 1210 00:57:13,650 --> 00:57:15,260 והם שאלות ממש טובות. 1211 00:57:15,260 --> 00:57:19,010 ואתה יכול להבין אותם על שלך אם, למשל, 1212 00:57:19,010 --> 00:57:19,990 אנחנו לא בקטע. 1213 00:57:19,990 --> 00:57:20,940 כן. 1214 00:57:20,940 --> 00:57:24,430 >> תלמיד: כי אתה לא שולח מצביע בכל מקום, אתה צריך 1215 00:57:24,430 --> 00:57:26,530 להשתמש malloc? 1216 00:57:26,530 --> 00:57:28,400 >> ג'ייסון הירשהורן: אז זה חוזר לשאלה הראשונית שלך. 1217 00:57:28,400 --> 00:57:28,620 [? ?] 1218 00:57:28,620 --> 00:57:29,980 האם זה רק משתנה מקומי? 1219 00:57:29,980 --> 00:57:32,280 Malloc כאן הוא לא כל כך משכנע. 1220 00:57:32,280 --> 00:57:35,260 השימוש בmalloc כאן הוא לא שמשכנע כי זה 1221 00:57:35,260 --> 00:57:36,500 רק משתנה מקומי. 1222 00:57:36,500 --> 00:57:40,970 >> תלמיד: אז אתה יכול לעשות char PTR הכוכב שווה שלום? 1223 00:57:40,970 --> 00:57:41,400 >> ג'ייסון הירשהורן: אוה. 1224 00:57:41,400 --> 00:57:43,300 אז אנחנו הולכים לקבל עכשיו בחזרה לשאלה הראשונית שלך. 1225 00:57:43,300 --> 00:57:46,885 אני חושב שלא היה מרוצה עם התשובה שלי. 1226 00:57:46,885 --> 00:57:48,220 בסדר? 1227 00:57:48,220 --> 00:57:49,226 ככה? 1228 00:57:49,226 --> 00:57:49,682 >> סטודנט: כן. 1229 00:57:49,682 --> 00:57:50,932 חכה. 1230 00:57:50,932 --> 00:57:54,090 1231 00:57:54,090 --> 00:57:57,850 >> ג'ייסון הירשהורן: ואיפה אתה רוצה להדפיס? 1232 00:57:57,850 --> 00:58:00,026 כך תהיה לנו להדפיס את מחרוזת בצורה כזאת? 1233 00:58:00,026 --> 00:58:06,380 1234 00:58:06,380 --> 00:58:07,630 >> סטודנט: מעניין. 1235 00:58:07,630 --> 00:58:09,900 1236 00:58:09,900 --> 00:58:14,285 >> ג'ייסון הירשהורן: אז זה אומר שזה טיעון יש הסוג של אופי. 1237 00:58:14,285 --> 00:58:17,200 1238 00:58:17,200 --> 00:58:18,620 כך זה צריך להיות אופי. 1239 00:58:18,620 --> 00:58:25,170 1240 00:58:25,170 --> 00:58:26,280 >> סטודנט: פשוט לוקח את הראשון. 1241 00:58:26,280 --> 00:58:28,610 >> ג'ייסון הירשהורן: אז זה זה מה שאמרתי קודם. 1242 00:58:28,610 --> 00:58:34,240 כמו שאמרתי, זה לא אחסון מחרוזת בתוך מצביע משתנה. 1243 00:58:34,240 --> 00:58:35,120 זה אחסון - 1244 00:58:35,120 --> 00:58:36,350 >> תלמיד: הערך הראשון של המחרוזת. 1245 00:58:36,350 --> 00:58:40,810 >> ג'ייסון הירשהורן: הכתובת של הערך הראשון של המחרוזת. 1246 00:58:40,810 --> 00:58:46,940 אם היינו להדפיס את זה, אנחנו מקבל את הערך בתוך מצביע. 1247 00:58:46,940 --> 00:58:51,005 ואנחנו תראו את זה הוא, אכן, כתובת זיכרון. 1248 00:58:51,005 --> 00:58:53,595 1249 00:58:53,595 --> 00:58:56,440 >> האם זה הגיוני? 1250 00:58:56,440 --> 00:58:56,940 סליחה. 1251 00:58:56,940 --> 00:58:58,996 חכה, זה שתשובה שלך שאלה, אם כי? 1252 00:58:58,996 --> 00:58:59,790 >> סטודנט: כן. 1253 00:58:59,790 --> 00:59:05,830 >> ג'ייסון הירשהורן: קו זה של קוד הוא יצירת מחרוזת ולאחר מכן עוד 1254 00:59:05,830 --> 00:59:09,115 מצביע משתנה שמצביע למחרוזת ש, מערך זה. 1255 00:59:09,115 --> 00:59:14,320 1256 00:59:14,320 --> 00:59:14,980 כן. 1257 00:59:14,980 --> 00:59:19,200 >> תלמיד: אז אם הלכנו זיכרון אחד מענה נוסף, היינו מקבל את שעות? 1258 00:59:19,200 --> 00:59:21,990 1259 00:59:21,990 --> 00:59:23,150 האם זה נשמר כמחרוזת? 1260 00:59:23,150 --> 00:59:24,400 >> ג'ייסון הירשהורן: כמו, שעשינו - 1261 00:59:24,400 --> 00:59:28,540 1262 00:59:28,540 --> 00:59:30,790 אז זה חשוב לעשות. 1263 00:59:30,790 --> 00:59:33,780 זהו חשבון נקודה, שבה אתה חבר 'ה לא ראיתי לפני וצריך להיות 1264 00:59:33,780 --> 00:59:35,550 נוח יחסית עם. 1265 00:59:35,550 --> 00:59:36,905 זה דומה לכתיבה - 1266 00:59:36,905 --> 00:59:41,980 1267 00:59:41,980 --> 00:59:46,350 אם היינו כותב את שורת קוד הזאת, ראינו סימון מערך לפני. 1268 00:59:46,350 --> 00:59:55,900 זה אמור לתת לנו שני ערך במערך, h זה. 1269 00:59:55,900 --> 01:00:05,010 >> אם הייתי עושה את זה, זה צריך גם לתת שלנו את הערך השני במערך זה. 1270 01:00:05,010 --> 01:00:08,320 כי זה הולך לא לזיכרון כתובת של הדבר הראשון, אבל 1271 01:00:08,320 --> 01:00:10,530 כתובת זיכרון של הדבר אחד מעל. 1272 01:00:10,530 --> 01:00:14,360 ולאחר מכן dereferences מפעיל הכוכב מצביע זה. 1273 01:00:14,360 --> 01:00:16,940 ושוב, בואו נראה. 1274 01:00:16,940 --> 01:00:18,664 אנחנו מקבלים שעות שוב. 1275 01:00:18,664 --> 01:00:20,980 >> סטודנט: מה בדיוק עושה dereference אומר? 1276 01:00:20,980 --> 01:00:23,650 >> ג'ייסון הירשהורן: Dereference הוא מילה יפה לללכת. 1277 01:00:23,650 --> 01:00:26,390 עבור ושללקבל את מה שיש הוא dereference מצביע. 1278 01:00:26,390 --> 01:00:28,240 זה רק מילה יפה לזה. 1279 01:00:28,240 --> 01:00:29,986 >> תלמיד: אם אנחנו רוצים להדפיס כל המחרוזת, יכולות 1280 01:00:29,986 --> 01:00:31,930 לעשות מצביע אמפרסנד? 1281 01:00:31,930 --> 01:00:33,490 >> ג'ייסון הירשהורן: בסדר, אנחנו הולך תעצור כאן. 1282 01:00:33,490 --> 01:00:35,480 אנחנו הולכים בסופו כאן. 1283 01:00:35,480 --> 01:00:41,760 אמפרסנד נותן לך את הכתובת של מיקום, ולכן כאשר אתה עושה אמפרסנד של 1284 01:00:41,760 --> 01:00:44,080 משתנה, זה נותן לך את הכתובת שבו משתנה שמאוחסן. 1285 01:00:44,080 --> 01:00:48,580 מצביע אמפרסנד ייתן לך כתובת של PTR PTR שבו הוא בזיכרון. 1286 01:00:48,580 --> 01:00:50,140 >> אנחנו לא הולכים ללכת על עם דוגמא זו. 1287 01:00:50,140 --> 01:00:52,640 אתה יכול להבין את אלה דברים בעצמך. 1288 01:00:52,640 --> 01:00:55,740 אבל שוב, זה עשוי אפילו להיות על סף קצת מעבר למה שאתם צריכים לדעת על 1289 01:00:55,740 --> 01:00:58,000 היקף הטווח בינוני זה - 1290 01:00:58,000 --> 01:00:59,070 או החידון הזה, ולא. 1291 01:00:59,070 --> 01:01:00,270 סליחה. 1292 01:01:00,270 --> 01:01:03,770 >> אנחנו הולכים לעבור, כי אני היית עושה רוצה לעשות בעיה קידוד אחד 1293 01:01:03,770 --> 01:01:05,100 לפני הזמן הוא למעלה. 1294 01:01:05,100 --> 01:01:09,340 ואנחנו הולכים לקודד את מה שאני חושב הוא משכנע ביותר של אלה 1295 01:01:09,340 --> 01:01:11,020 דוגמאות, atoi. 1296 01:01:11,020 --> 01:01:14,520 אז זו הייתה שאלה על חידון לפני שנתיים. 1297 01:01:14,520 --> 01:01:17,810 ויש לי אותה על הלוח כאן. 1298 01:01:17,810 --> 01:01:20,680 >> אנשים התבקשו על החידון - 1299 01:01:20,680 --> 01:01:23,640 הם קבלו קצת יותר tesxt ב השאלה, אבל אני ביטלנו את 1300 01:01:23,640 --> 01:01:26,640 טקסט כי זה היה מיותר למטרות שלנו עכשיו. 1301 01:01:26,640 --> 01:01:29,180 זה היה רק ​​קצת רקע על מה atoi עשה. 1302 01:01:29,180 --> 01:01:31,425 אבל כל מה שאתה יודע והם מאוד מכיר atoi. 1303 01:01:31,425 --> 01:01:35,620 >> אני מציע לך את הקוד הזה על גיליון נייר. 1304 01:01:35,620 --> 01:01:39,310 אני גם מציע לך להשתמש באסטרטגיה שעברנו על 1305 01:01:39,310 --> 01:01:41,040 הרבה בחלק שלנו. 1306 01:01:41,040 --> 01:01:44,130 ראשית, ודא שאתה מבין מה atoi של עושים. 1307 01:01:44,130 --> 01:01:47,580 לצייר תמונה או לבוא עם כמה תמונה מנטלית של זה בראש שלך. 1308 01:01:47,580 --> 01:01:51,120 בשלב הבא, לכתוב את pseudocode לזה. 1309 01:01:51,120 --> 01:01:53,120 בחידון, אם כל מה שאתה מקבל הוא pseudocode, לפחות אתה 1310 01:01:53,120 --> 01:01:54,550 הניח משהו. 1311 01:01:54,550 --> 01:02:00,070 ולאחר מכן למפות pseudocode שעל ג אם יש לך סימון בך 1312 01:02:00,070 --> 01:02:03,760 pseudocode, כמו לבדוק אם משהו הוא 1, הממפה על גבי אם 1313 01:02:03,760 --> 01:02:05,750 מצבם וכן הלאה. 1314 01:02:05,750 --> 01:02:07,850 ולבסוף, קוד התכנית ב C. 1315 01:02:07,850 --> 01:02:15,000 >> אז לחזור לatoi ולקחת חמש דקות לקוד הזה על גיליון 1316 01:02:15,000 --> 01:02:19,480 נייר, שהוא כנראה על כמות הזמן שהיית לוקח על 1317 01:02:19,480 --> 01:02:21,260 חידון לatoi קוד. 1318 01:02:21,260 --> 01:02:27,060 חמישה עד 15 דקות, חמש עד 12, חמש עד 10 דקות, הוא על כמות 1319 01:02:27,060 --> 01:02:30,150 זמן שהיית מוציא על זה שאלה בחידון. 1320 01:02:30,150 --> 01:02:31,670 אז קח חמש דקות עכשיו, בבקשה. 1321 01:02:31,670 --> 01:02:35,957 ואם יש לך שאלות, להעלות היד שלך ואני נבוא בסביבה. 1322 01:02:35,957 --> 01:06:39,570 1323 01:06:39,570 --> 01:06:41,066 >> [שיחות צדדיות] 1324 01:06:41,066 --> 01:08:35,279 1325 01:08:35,279 --> 01:08:37,580 >> ג'ייסון הירשהורן: אוקיי, אז זה היה חמש דקות. 1326 01:08:37,580 --> 01:08:39,880 זה היה כנראה על כמות זמן שהיית מוציא על זה בחידון, 1327 01:08:39,880 --> 01:08:42,120 אולי בקצה הנמוך של אותה התקופה. 1328 01:08:42,120 --> 01:08:44,010 אנחנו לסכם בקצת. 1329 01:08:44,010 --> 01:08:45,740 תן לנו להתחיל קידוד זה. 1330 01:08:45,740 --> 01:08:49,479 ואם אנחנו לא מקבלים לאורך כל הדרך, את התשובות לזה ואת זה 1331 01:08:49,479 --> 01:08:54,189 שאלת חידון זמינות, שוב, סתיו 2011 הוא כאשר שאלה זו 1332 01:08:54,189 --> 01:08:54,913 הופיע בחידון. 1333 01:08:54,913 --> 01:08:57,830 >> וזה היה שווה שמונה נקודות בחידון אז. 1334 01:08:57,830 --> 01:09:01,140 שמונה נקודות היא בקצה הגבוה של הסכום של משהו נקודות שווה. 1335 01:09:01,140 --> 01:09:04,790 רוב השאלות הן בטווח של אחד לשש נקודות. 1336 01:09:04,790 --> 01:09:08,500 אז זה יותר מאתגר שאלה, זה בטוח. 1337 01:09:08,500 --> 01:09:09,750 מישהו יכולים תתחיל איתי? 1338 01:09:09,750 --> 01:09:13,260 1339 01:09:13,260 --> 01:09:15,380 >> באופן כללי, מה אנחנו הולכים לרוצה לעשות עם זה 1340 01:09:15,380 --> 01:09:17,550 לתפקד atoi, באופן הגיוני? 1341 01:09:17,550 --> 01:09:19,569 מה אנחנו רוצים לעשות? 1342 01:09:19,569 --> 01:09:22,279 אז אנחנו הולכים לכתוב כמה pseudocode. 1343 01:09:22,279 --> 01:09:24,090 >> סטודנט: המרת תווים למספרים שלמים. 1344 01:09:24,090 --> 01:09:26,700 >> ג'ייסון הירשהורן: המרת תווים למספרים שלמים. 1345 01:09:26,700 --> 01:09:27,479 על אישור. 1346 01:09:27,479 --> 01:09:30,870 אז כמה תווים אנחנו הולך צריך לעבור? 1347 01:09:30,870 --> 01:09:32,295 >> תלמיד: כל אחד מהם. 1348 01:09:32,295 --> 01:09:34,100 >> סטודנט: כל התווים במחרוזת. 1349 01:09:34,100 --> 01:09:35,540 >> ג'ייסון הירשהורן: כל תווים במחרוזת. 1350 01:09:35,540 --> 01:09:42,180 אז אם אנחנו רוצים לעבור את כל תו במחרוזת, מהו דבר 1351 01:09:42,180 --> 01:09:44,560 ב-C שראינו שאפשר לנו לעבור את כל 1352 01:09:44,560 --> 01:09:45,939 תו במחרוזת? 1353 01:09:45,939 --> 01:09:46,819 >> סטודנטים: ללולאה. 1354 01:09:46,819 --> 01:09:48,069 >> ג'ייסון הירשהורן: ללולאה. 1355 01:09:48,069 --> 01:09:52,020 1356 01:09:52,020 --> 01:09:55,330 אז אנחנו הולכים ללולאה דרך כל דמות בים. 1357 01:09:55,330 --> 01:10:00,940 >> אז מה אנחנו הולכים רוצים לעשות כאשר אנחנו מקבלים דמות מסוימת? 1358 01:10:00,940 --> 01:10:02,480 אומר שאנחנו מקבלים עברנו 90. 1359 01:10:02,480 --> 01:10:03,460 אנחנו מקבלים 9. 1360 01:10:03,460 --> 01:10:04,240 זה אופי. 1361 01:10:04,240 --> 01:10:07,440 מה אנחנו רוצים לעשות עם תו 9? 1362 01:10:07,440 --> 01:10:10,082 >> תלמיד: הפחת אותו מאופי 0? 1363 01:10:10,082 --> 01:10:11,860 >> סטודנט: הוסף 0? 1364 01:10:11,860 --> 01:10:13,350 >> ג'ייסון הירשהורן: חיסור זה מאופי 0? 1365 01:10:13,350 --> 01:10:13,800 >> סטודנט: כן. 1366 01:10:13,800 --> 01:10:15,573 >> ג'ייסון הירשהורן: מדוע אתה רוצה לעשות את זה? 1367 01:10:15,573 --> 01:10:16,560 >> תלמיד: [לא ברור] 1368 01:10:16,560 --> 01:10:17,010 ערך. 1369 01:10:17,010 --> 01:10:18,380 ערך int שלה. 1370 01:10:18,380 --> 01:10:21,580 >> ג'ייסון הירשהורן: אוקיי, אז אנחנו לוקחים את דמות 9, לחסר אותו מ 1371 01:10:21,580 --> 01:10:25,820 תו 0 כדי לקבל שלם בפועל 9. 1372 01:10:25,820 --> 01:10:27,070 מתוק. 1373 01:10:27,070 --> 01:10:31,255 1374 01:10:31,255 --> 01:10:37,000 ואיך אתה יודע שאופי 9 מינוס 0 דמות היא 9? 1375 01:10:37,000 --> 01:10:39,222 מה תרשים שאתה מסתכל? 1376 01:10:39,222 --> 01:10:43,130 >> תלמיד: יש באופן הגיוני תשע מקומות בין 9 ל 0. 1377 01:10:43,130 --> 01:10:44,620 או שאתה יכול להסתכל על טבלת ASCII. 1378 01:10:44,620 --> 01:10:45,120 >> ג'ייסון הירשהורן: טבלת ASCII. 1379 01:10:45,120 --> 01:10:46,490 אבל כן, אתה צודק גם כן. 1380 01:10:46,490 --> 01:10:47,780 אז אנחנו לחסר 0. 1381 01:10:47,780 --> 01:10:49,010 אז עכשיו יש לנו המספר השלם 9. 1382 01:10:49,010 --> 01:10:49,970 ומה אנחנו רוצים לעשות עם זה? 1383 01:10:49,970 --> 01:10:54,970 אם יש לנו 90, זה המספר השלם הראשון יש לנו, מה אנחנו רוצים לעשות? 1384 01:10:54,970 --> 01:10:58,180 >> תלמיד: אני רוצה לשים במספר שלם זמני מערך, לעשות אז מתמטיקה אליו 1385 01:10:58,180 --> 01:11:02,088 מאוחר יותר כדי להפוך אותו לסוף. 1386 01:11:02,088 --> 01:11:03,020 >> ג'ייסון הירשהורן: אישור. 1387 01:11:03,020 --> 01:11:06,990 >> סטודנט: אתה יכול להתחיל בסוף המערך ולאחר מכן להתקדם כל כך 1388 01:11:06,990 --> 01:11:10,350 כי כל פעם שאתה זז קדימה, אתה מכפיל אותו ב10. 1389 01:11:10,350 --> 01:11:10,830 >> ג'ייסון הירשהורן: אישור. 1390 01:11:10,830 --> 01:11:12,250 זה נשמע כמו די רעיון משכנע. 1391 01:11:12,250 --> 01:11:16,040 אנחנו יכולים להתחיל בסוף המערך שלנו, ואנו יכולים להשתמש strleng. 1392 01:11:16,040 --> 01:11:17,030 אנו יכולים להשתמש בstrleng כאן. 1393 01:11:17,030 --> 01:11:18,870 אנחנו נקבל את אורך המחרוזת שלנו. 1394 01:11:18,870 --> 01:11:20,100 אנחנו מתחילים בסוף. 1395 01:11:20,100 --> 01:11:29,170 ו+ הראשון, אנחנו פשוט לוקחים את זה מספר שלם, ואולי אנחנו יוצרים כמו 1396 01:11:29,170 --> 01:11:32,270 משתנה שלם חדש למעלה שבו אנחנו אחסון הכל. 1397 01:11:32,270 --> 01:11:37,340 אז אנחנו לולאה דרך כל תו בים מ בחזרה לחזית, אנו לחסר 0, ו 1398 01:11:37,340 --> 01:11:42,790 אז אנחנו לוקחים את זה, ובהתאם איפה זה, נכפיל את זה 1399 01:11:42,790 --> 01:11:45,860 על ידי כוחו של 10. 1400 01:11:45,860 --> 01:11:50,644 בגלל ראשון, מה לעשות אנחנו להכפיל את התו הימני ביותר על ידי? 1401 01:11:50,644 --> 01:11:51,440 >> תלמיד: 10 עד 0. 1402 01:11:51,440 --> 01:11:53,170 >> ג'ייסון הירשהורן: 10 עד 0. 1403 01:11:53,170 --> 01:11:56,010 מה שאנחנו כן להכפיל השניה התו הימני ביותר על ידי? 1404 01:11:56,010 --> 01:11:57,450 >> תלמיד: [לא ברור]. 1405 01:11:57,450 --> 01:11:57,960 >> ג'ייסון הירשהורן: מה? 1406 01:11:57,960 --> 01:11:59,150 >> תלמיד: 10 עד 1. 1407 01:11:59,150 --> 01:12:00,420 >> ג'ייסון הירשהורן: 10 עד 1. 1408 01:12:00,420 --> 01:12:03,754 התו הימני ביותר השלישית? 1409 01:12:03,754 --> 01:12:04,580 >> תלמיד: 10 עד 2. 1410 01:12:04,580 --> 01:12:05,350 >> ג'ייסון הירשהורן: 10 עד 2. 1411 01:12:05,350 --> 01:12:07,200 >> תלמיד: מצטער, אני לא מבין מה שאנחנו עושים כאן. 1412 01:12:07,200 --> 01:12:08,640 >> ג'ייסון הירשהורן: בסדר, בואו נחזור, ולאחר מכן. 1413 01:12:08,640 --> 01:12:12,500 אז אנחנו הולכים לקבל עבר במחרוזת. 1414 01:12:12,500 --> 01:12:14,470 כי אנחנו כותבים atoi. 1415 01:12:14,470 --> 01:12:15,260 אז אנחנו מקבלים עברנו במחרוזת. 1416 01:12:15,260 --> 01:12:17,640 אומר שאנחנו מקבלים עברנו במחרוזת 90. 1417 01:12:17,640 --> 01:12:19,930 >> הדבר הראשון שאנחנו הולכים לעשות הוא להגדיר משתנה שלם חדש שאנחנו 1418 01:12:19,930 --> 01:12:22,150 פשוט הולך ליצור כשלם החדש שלנו. 1419 01:12:22,150 --> 01:12:24,630 זה מה שאנחנו הולכים כדי לחזור בסוף. 1420 01:12:24,630 --> 01:12:30,110 אנחנו צריכים לעבור את כל דמות ב המחרוזת כי אנחנו כבר נקבעו 1421 01:12:30,110 --> 01:12:34,430 שאנחנו צריכים לגעת בכל אחד ו לאחר מכן להוסיף אותו למספר השלם החדש שלנו. 1422 01:12:34,430 --> 01:12:36,330 >> אבל אנחנו לא יכולים פשוט להוסיף אותו כמספר. 1423 01:12:36,330 --> 01:12:38,270 אנחנו לא יכולים פשוט לקחת 9 ו מוסיף 9 למספר השלם שלנו. 1424 01:12:38,270 --> 01:12:40,560 זה תלוי מה מקום זה במחרוזת. 1425 01:12:40,560 --> 01:12:42,960 אנחנו הולכים צריכים להכפיל זה על ידי כוחו של 10. 1426 01:12:42,960 --> 01:12:45,580 כי ככה בסיס 10 עבודות. 1427 01:12:45,580 --> 01:12:49,050 >> אז אנחנו הולכים לקבל בפועל דמויות או שלם בפועל 1428 01:12:49,050 --> 01:12:53,860 מספר, על ידי הפחתת אופי 0 מאופי 9 כמו שעשינו עם 1429 01:12:53,860 --> 01:12:57,560 הפחתת הון דמות מ מה אופי שהיו לנו באחד 1430 01:12:57,560 --> 01:12:58,120 אלה בעיות. 1431 01:12:58,120 --> 01:13:04,190 אז אנחנו באמת נקבל מספר בין 0 ל 9 נשמרו כמספר אמיתי, ואנחנו 1432 01:13:04,190 --> 01:13:07,590 להכפיל את זה על ידי כוחו של 10 בהתאם על איפה אנחנו נמצאים במחרוזת. 1433 01:13:07,590 --> 01:13:19,430 1434 01:13:19,430 --> 01:13:22,575 ואז אנחנו הולכים להוסיף אותו בחזרה למשתנה השלם החדש שלנו. 1435 01:13:22,575 --> 01:13:32,840 1436 01:13:32,840 --> 01:13:37,890 >> אז מה זה היה נראה כמו היית להיות - אנחנו ניתן למשוך לכאן. 1437 01:13:37,890 --> 01:13:40,086 אם אנחנו מקבלים עברנו במחרוזת 90 - 1438 01:13:40,086 --> 01:13:41,336 >> תלמיד: [לא ברור]. 1439 01:13:41,336 --> 01:13:43,190 1440 01:13:43,190 --> 01:13:45,540 >> ג'ייסון הירשהורן: אבל atoi לוקח מחרוזת. 1441 01:13:45,540 --> 01:13:46,350 אז אנחנו הולכים לעבור האחזקה. 1442 01:13:46,350 --> 01:13:49,900 אנחנו מועברים ב90. 1443 01:13:49,900 --> 01:13:51,540 אנחנו הולכים מהחלק האחורי לחזית. 1444 01:13:51,540 --> 01:13:53,920 אנחנו לוקחים את 0. 1445 01:13:53,920 --> 01:13:55,080 >> תלמיד: אני מצטער. 1446 01:13:55,080 --> 01:13:55,880 אולי זה טיפשי. 1447 01:13:55,880 --> 01:13:59,440 אם אנחנו מקבלים עברנו במחרוזת, למה הוא 90 מה שאנחנו 1448 01:13:59,440 --> 01:14:00,260 מקבל עבר ב? 1449 01:14:00,260 --> 01:14:03,160 בגלל 90 הוא מספר שלם. 1450 01:14:03,160 --> 01:14:06,820 >> ג'ייסון הירשהורן: כי atoi לוקח מחרוזת והופך אותו למספר השלם 1451 01:14:06,820 --> 01:14:08,320 ייצוג של מחרוזת ש. 1452 01:14:08,320 --> 01:14:13,650 אבל המחרוזת 90 אינה המספר השלם 90 או המספר 90. 1453 01:14:13,650 --> 01:14:17,920 המחרוזת 90 היא מערך של שתיים, או שלוש דמויות, ולא, 9 1454 01:14:17,920 --> 01:14:22,740 אופי, אופי 0, ו תו הלוכסן האחורי 0. 1455 01:14:22,740 --> 01:14:26,260 >> ואנחנו כותבים atoi כי, עבור למשל, כאשר אתה לוקח את הפיקוד 1456 01:14:26,260 --> 01:14:30,230 טיעון קו, והוא שמור ב argv, זה נשמר כמחרוזת. 1457 01:14:30,230 --> 01:14:32,940 אבל אם אתה רוצה להתייחס אליו כמספר, אתה צריך להמיר אותו 1458 01:14:32,940 --> 01:14:34,700 שלם בפועל. 1459 01:14:34,700 --> 01:14:37,210 זה מה שעשיתי אחד מסטי הבעיה שלנו. 1460 01:14:37,210 --> 01:14:38,800 זה מה שעשיתי במספר הסטים הבעיה שלנו. 1461 01:14:38,800 --> 01:14:41,690 כל מי שלקח מספר שלם כטיעון שורת הפקודה. 1462 01:14:41,690 --> 01:14:46,490 אז בגלל זה פונקצית atoi לוקח חוט. 1463 01:14:46,490 --> 01:14:51,910 >> אז שוב, בדוגמא שלנו כאן, אנחנו הולך לקחת את האחרון. 1464 01:14:51,910 --> 01:14:55,050 אנחנו הולכים להפחית את האופי 0 מזה, כי התווים 0 1465 01:14:55,050 --> 01:14:58,810 מופחתים על ידי הדמות 0 נותן לך המספר האמיתי 0, על פי 1466 01:14:58,810 --> 01:15:00,950 המתמטיקה ASCII שאנחנו עושים. 1467 01:15:00,950 --> 01:15:04,870 >> מכיוון שדמויות מיוצגות כ שונה משלהם בפועל - 1468 01:15:04,870 --> 01:15:08,830 אופי, למשל, אותיות קטנות הוא 97. 1469 01:15:08,830 --> 01:15:10,260 זה לא - אופס! 1470 01:15:10,260 --> 01:15:13,290 זה לא מה שהיית מצפה זה יהיה, 0, למשל. 1471 01:15:13,290 --> 01:15:16,200 אז אתה צריך להחסיר אופי כדי לקבל 0. 1472 01:15:16,200 --> 01:15:18,950 >> אז אנחנו הולכים לעשות את זה כאן כדי לקבל את המספר האמיתי. 1473 01:15:18,950 --> 01:15:22,560 ואז אנחנו הולכים להכפיל את זה על ידי כוחו של 10 תלוי איפה זה 1474 01:15:22,560 --> 01:15:27,030 הוא במחרוזת, ולאחר מכן לקחת את זה ולהוסיף אותו לבעל המקום שלנו 1475 01:15:27,030 --> 01:15:32,520 משתנה כדי שנוכל לבוא עם השלם החדש הסופי שלנו. 1476 01:15:32,520 --> 01:15:35,080 האם זה הגיוני לכולם? 1477 01:15:35,080 --> 01:15:37,730 >> אז אנחנו לא מתכוונים לקוד זה עכשיו, בגלל שאנחנו 1478 01:15:37,730 --> 01:15:38,830 מקבל קצר בזמן. 1479 01:15:38,830 --> 01:15:40,860 אני מתנצל על העיתוי זה. 1480 01:15:40,860 --> 01:15:44,620 אבל זה מה ש, בתקווה, שהיית להיות מסוגל לעשות על החידון - ב 1481 01:15:44,620 --> 01:15:47,710 הפחות, לקבל pseudocode זה נכתב החוצה. 1482 01:15:47,710 --> 01:15:50,840 >> ואז, אם היינו כותב pseudocode, בעצם, אנחנו יכולים לעשות את זה 1483 01:15:50,840 --> 01:15:51,490 די מהר. 1484 01:15:51,490 --> 01:15:55,230 כל שורה של הערות שכתבנו כאן מתרגם לכ 1485 01:15:55,230 --> 01:15:56,970 שורת קוד C אחד. 1486 01:15:56,970 --> 01:16:01,780 הכרזה על משתנה, כתיבה חדשה לולאה, כמה חיסור, כמה 1487 01:16:01,780 --> 01:16:07,070 כפל, ואיזו משימה. 1488 01:16:07,070 --> 01:16:09,020 היינו כנראה גם רוצה לכתוב שורת תמורה. 1489 01:16:09,020 --> 01:16:12,040 אנו עשויים גם רוצים לשים כמה בדיקות בכאן. 1490 01:16:12,040 --> 01:16:12,655 כן. 1491 01:16:12,655 --> 01:16:15,720 >> תלמיד: אז נוכל להתייחס אל של כמחרוזת בפועל? 1492 01:16:15,720 --> 01:16:18,730 כי אני יודע שזה רק כתובת. 1493 01:16:18,730 --> 01:16:22,090 כמו, איך היית מקבל את אורכו של המחרוזת שעברה? 1494 01:16:22,090 --> 01:16:25,310 >> ג'ייסון הירשהורן: אז איך עשה אורכו של חוט? 1495 01:16:25,310 --> 01:16:25,830 Strlen. 1496 01:16:25,830 --> 01:16:26,660 >> תלמיד: strlen, כן. 1497 01:16:26,660 --> 01:16:30,550 אבל אתה יכול לשים את זה כ ויכוח על כך? 1498 01:16:30,550 --> 01:16:34,620 >> ג'ייסון הירשהורן: אז strlen לוקח כוכב char. 1499 01:16:34,620 --> 01:16:38,090 ומסקנה הוא כי כוכב char, וזה שומר לספור עד שהוא מגיע ל 1500 01:16:38,090 --> 01:16:41,865 קו נטוי הפוך 0. strlen היה למעשה אחת מהתוכניות האחרות שאנו 1501 01:16:41,865 --> 01:16:42,850 היו הולכים לקוד. 1502 01:16:42,850 --> 01:16:44,560 זה עוד אחד טוב לקוד. 1503 01:16:44,560 --> 01:16:47,270 אחד זה קצת יותר קל, כי אם אתה הולך לחשוב על זה 1504 01:16:47,270 --> 01:16:47,830 מושגית - 1505 01:16:47,830 --> 01:16:51,620 אני רק אמרתי את זה בקול רם - strlen כדלקמן מצביע ושומר הולך ו 1506 01:16:51,620 --> 01:16:54,210 לספור ושמירה על מסלול עד אתה מגיע לקו נטוי הפוך 0. 1507 01:16:54,210 --> 01:16:56,530 >> תלמיד: בסדר, קיבל את זה. 1508 01:16:56,530 --> 01:17:00,200 >> ג'ייסון הירשהורן: אז הטוב ביותר של מזל על חידון 0 מחר. 1509 01:17:00,200 --> 01:17:03,170 אם יש לך שאלות, אני להיות בחוץ אחרי זה. 1510 01:17:03,170 --> 01:17:05,610 תרגיש חופשי לשלוח לי דוא"ל. 1511 01:17:05,610 --> 01:17:08,480 להגיע אל TF שלך אם אתה לא בקטע שלי, או לקבל אותי 1512 01:17:08,480 --> 01:17:10,005 שלח לי אם אתה רוצה את זה. 1513 01:17:10,005 --> 01:17:13,140 >> אם אתה רוצה להתחרפן ופשוט לשלוח לי דוא"ל, דואר אלקטרוני freakout, אני 1514 01:17:13,140 --> 01:17:16,710 לשלוח אותך בחזרה, כאילו, פרצוף מחייך, או, כאילו, בדיחה או משהו. 1515 01:17:16,710 --> 01:17:18,190 אז תרגיש חופשי לעשות את זה גם כן. 1516 01:17:18,190 --> 01:17:20,750 מזל טוב שוב, ואני לראות את כולכם בשבוע הבא. 1517 01:17:20,750 --> 01:17:23,435