דובר: בסדר, אז, אתה לא מאמין בזה, אבל בשבוע שעבר, ביום שני, בפירס, אני היה למטה במרתף. אני אף פעם לא הולך לפירס. ואני לעולם לא אחזור שוב, כי עזבתי את הדברים שלי לבד, כמו, חמש דקות ומישהו גנבתי המחשב ושלי טלפון מהתרמיל שלי. מה שאומר שיש לי אותו בחזרה, ו אז פחות משבוע לאחר מכן זה נגנב שוב. ואז זה הגיע מופעל - מצא את האייפון שלי ממשיך להיות מועיל. אז אני ממשיך לעודד אתה לא להשתמש בו. התברר בפעם אחת, וזה היה ב-MIT, כמו 15 דקות מאוחר יותר, והאדם התקשרתי למספר הטלפון הזה שהראה ביומן השיחות של AT & T שלי. אז הלכתי באינטרנט, הנקרא שהטלפון מספר, וזה הלך ישר לזה משיבון בספרדית. ולא שמעתי ממנו מאז. אז הייתי צריך לקבל חדש מחשב וטלפון. אני יודע. כן. אבל אם אתם רוצים שבב כדי מחשב קרן אחרי זה, זה למה שאלתי אותך כאן. סתם, בצחוק. אבל זה היה ממש עצוב וטראומטי. אבל זה כל חזרה עכשיו, וזו הייתה הסיבה להגדיר p-8 לקח כל כך הרבה זמן, כי לא היו לי מחשב. ומישהו גנב אותו. ואני בדוא"ל, לשאול אם הם היית בכיתה שלך 8 להגדיר p-. אבל הם אמרו שלא. ואני הייתי כמו, אני יכול יש לי המחשב שלי בחזרה? והם כמו, לא. סתם, בצחוק. על אישור. זה החלק האחרון שלנו, ויש לי כמה - יש לנו שלוש בלבד דברים על סדר היום. אנחנו הולכים לדבר קצת על המדריך ש. ואז אנחנו הולכים לבלות 15 דקות על הדגמה מגניב. ואז אנחנו הולכים לכל לומר שלום אחד לשנייה. אתה לא באמת צריך את המחשבים שלך או עט או נייר כדי לרשום הערות, או פעל יחד. אז אני מניח שאם יש לך המחשב שלך למעלה, אז אתה בפייסבוק. רק אומר. אלא אם כן אתה מילוי מדריך Q, שהוא ראשון. מדריך השאלות פתוח. היה לך דואר אלקטרוני על זה. ברגע שכל הדברים ש יוגש ב סוף השנה, אני מקבל את כל הערות ש בציונים מכולם שבוחר לתת לי משוב. וכך כשאתה הולך בש - אני לא יודע אם אתה יכול לעשות את זה, ג'ף, בגלל שאתה ותלמיד ארכה. אבל כשאתה הולך בשאלות, אם יש לך לא עשית את זה לפני, אתה בוחר מורה, שהוא דוד מלאן. אתה צריך לעשות אותו. ואז אתה יכול להרים TFS. ואתה יכול להרים כמה שיותר TFS כמו שאתה רוצה. אבל יש 60 מאיתנו. אתה לא צריך לקחת את כולם. אתה יכול פשוט לאסוף אותי, או פשוט לבחור כמה אנשים אחרים, אם אתה רוצה, כדי לתת להם משוב גם כן. ואז אתה מקבל ציונים על כל אלה צירים שונים, ואז אתה יכול לעזוב שלהם משוב. ואז, כמו בחודש שלאחר מכן, אני אביא את כל משוב ש. ובדיוק כמו המשוב שהיית נותן לי בכל הסמסטר, אני לקרוא את כל זה. וזה באמת מועיל, וזה עוזר לי לגדול כמורה וכ בודד. אז, בבקשה לקחת קצת זמן כדי לעשות את זה. אנחנו הולכים רק להיות כאן ל, כמו, 30 דקות. אז אם אתה רוצה, בסופו של זה, כדי לקחת חמש דקות, ורק למלא ש, כי זה לא לוקח יותר זמן מזה. זה יהיה נפלא, ואתה גם לקבל הציונים שלך בחזרה במהירות רבה יותר אם לך למלא ש אז רובכם עשיתם זאת לפני - או לא, כמחצית מכם עשה את זה בעבר. אבל אם אתה בכיתה ט ', זה מה שזה. זה יהיה זהה לכל הכיתות. לעשות את זה. זה לוקח חמש דקות. אבל גם, אם אתה עושה את זה קצת ברצינות, זה לא הדבר הכי גרוע בעולם, כי אני בהחלט לקחת את זה ברצינות. אז אם אתה עוזב אותי פרצוף מחייך, אני מעריך את זה. אבל אני גם אשמח אם השאיר אותי יותר מפרצוף מחייך. אבל זה תלוי בך. אני לא יכול להגיד לך - או כמו סמיילי גדול להתמודד, עם הון ד זה יהיה להיות אפילו טוב יותר. אוקיי, זה כל מה שיש לי לשאלה: אם אתה יש לך שאלות, אתה יכול לשאול לי, אבל די מובן מאליו. רק, בבקשה, למלא אותו. אני מאוד מעריך את זה, וזה אומר המון בשבילי. אוקיי, זה מה שאנחנו הולכים לבלות 15 דקות עוברת. אני הולך להראות לכם כמה קוד. אני חושב שזה ממש מגניב, וזה גרם לי יותר נרגש במדעי מחשב. אז אני מקווה שזה יעשה אותו דבר עבור כולכם. אנחנו הולכים להיפתח - וכל זה קוד אני אשלח לך מאוחר יותר. אבל אנחנו פשוט הולכים להיפתח - אני במסוף שלי - אנחנו הולכים לפתוח תכנית זו נקרא [? MySum. ?] האם כל אחד יכול לקרוא את זה, או אני צריך לעשות את זה יותר גדול? מישהו יכול להגיד לי מה הקוד הזה יהיה לעשות כאשר אני מפעיל את זה, או מה זה התכנית תעשה כשאני מפעיל את זה? [? אבי,?] מה אתה חושב זה הולך לעשות? לעיסה על סיום. אתה לא צריך לדבר עם הפה שלך פתוח. קהל: האם זה לקחת חבורה של טיעונים, למצוא סכום שלהם חוזרים סכום, ולאחר מכן להדפיס את זה? או שהוא לוקח בשתי טענות, ו אז זה עושה [לא ברור]. ואז זה מדפיס את כל מה התוצאות הן. דובר: לסגור, ממש קרוב. מישהו רוצה להוסיף [? מה אבי?] אמר? האם אתה צריך לתת לתכנית זו שורת הפקודה טיעונים כל? קהל: לא. דובר: לא. מה קורה אם אתה לא נותן לו שורת הפקודה טיעונים כל? אני פשוט לכתוב MySum לוכסן נקודה. קהל: 1 ועוד 2 שווה 3. דובר: 1 ועוד 2 שווה 3. וזה יהיה להדפיס את זה. זה בדיוק נכון. אתה תראה את זה f ההדפסה שורה בתחתית. זה יהיה להדפיס את a, b, ו לאחר מכן הסכום של A ו-B. ואני מניח שאתה מניח כי הסכום עובד בצורה נכונה. הנחה טובה. אוקיי, ומה קורה אם אני לתת לו מה ויכוח? [? מנו? ?] קהל: זה תוסיף את מה הטיעון הראשון הוא ב. או ל 2, מצטער. דובר: נכון, 2. האם מישהו יודע מה strtol עושה? זה בעצם atoi. Atoi הוא למעשה גרסה מפוארת של - או גרסה פשוטה יותר של strtol. אבל זה בעצם משתמש strtol. ומצאתי את זה בגלל שאני רוצה משהו כמו atoi, ואז כשאני לא atoi, קראתי כאן למטה. ואני מצאתי את "התנהגות זו הוא אותו הדבר כמו "strtol. אז זה בעצם atoi עבור כל דבר ועניין. ואתה רואה אני אפילו להשתמש null ו10. זה בעצם מאפשר לך לקחת את מחרוזת, ולהפוך אותו למספר, ולבחור מה בסיס שאתה רוצה לעשות את זה פנימה אז זהו בסיס 10 ממש כאן. אני היה יכול לעשות את שני בסיס לעשרוני, בסיס 16 להקסדצימלי. זה די מגניב. אבל סיפור ארוך קצר, זה לוקח שני מספרים ומוסיף אותם יחד. אז בואו להפעיל אותו. ואתה גם שם לב, יש כמה דברים - אז יש לי makefile ממש כאן, ו אם אתה פותח את זה, כמה דברים תוכל להבחין הם שונים. בפרט, טענה זו ממש כאן, אתה כנראה לא ראה את זה קודם. באופן כללי, אנחנו לקמפל דברים עם מקף אפס, אפס. דש אפס, אפס, פירושו לא עושה כל אופטימיזציות, מהדר. אל תנסו לעשות שום דבר מפואר, או לעשות כל דבר לרוץ מהר יותר, או לקבל להיפטר ממשתנים שאינם הכרחיים. אל לייעל את הקוד הזה בכלל, אני מבקש ברמה שלישית אופטימיזציה. אז אני מבקש מן המהדר לעשות הרבה אופטימיזציות. אתה יכול לשנות את זה בmakefile כש יש לך את הקוד הזה, אם אתה רוצה כדי לראות דברים שונים. שאנחנו אראה לי בשניים. אז אנחנו רצים סכומי 1 ועוד 2 ועוד 3. מישהו נותן לי שני טיעונים. קהל: 4 ו -5. דובר: 4 ו -5. תודה. נהדר, זה עובד. מה הם כמה טיעונים טובים אחרים כדי לנסות, כדי לוודא שזה עובד? אף אחד? קהל: 0. דובר: 0 ו? קהל: שלילי 3. דובר: זה עובד. אבל אלה היו בחירות טובות. אוקיי, אז בואו נחזור לכאן. זה mysum.c. שים לב שיש גם משהו קרא sumfunction.c. וזה אומר, אה, יש בזה משהו שהוגדר בsumfunction.c. אני לא כולל בקובץ זה כאן כי אני לא צריך. אבל אני מקשר את זה כשאני בהידור, שמת לב. בואו לגלול למעלה. ראינו כאשר אנו הידור mysum, נכון שם, אנחנו מקושרים בינארי מ sumfunction.o. ואני לא צריך את קובץ הכותרת כי, כמובן, יש את הצהרה על פונקציה. אז חד כולל בדרך כלל פשוט מכניס בהצהרה על פונקציה. כאן אני פשוט שמתי אותו ישר בקוד. ואז אני צריך לעשות הוא קישור בינארי, שאני עושה. כל ניחושים על מה שהוא בsumfunction.c? מה קוד שכתבתי בsumfunction.c? קהל: [לא ברור]. דובר: כל ניחושים? כן? קהל: אני חושב, מגדיר חלק [לא ברור]. דובר: כן. אז אני עושה את סכום int לכתוב int. אני כותב את הקו הזה, ואז יש לי פתוח סד מתולתל, סגר סד מתולתל. מה אתה חושב שאני כותב בתוך אלה סוגריים מסולסלים, בתוך הפונקציה ש? כן? קהל: התשואה שווה. מעבד: זה ניחוש ממש טוב. מי חושב [? מנו?] הוא נכון? זה אומר לחזור ב בתוספת. בסדר, לא כולם. [? Akshar,?] אתה עושה, מדי? אתה בטוח? על אישור. מה? קהל: אתה איית את זה לא נכון. דובר: לא, אני לא. כן, סתם, בצחוק. אתה צודק. זה בדיוק מה שזה אומר. זה יחזור ב בתוספת. זה עושה הרבה חוש. אוקיי, בואו נחזור לכאן. אנחנו רואים איך הכותרת - זה סוג התמורה. זכור, שראינו שיום אחד, לחזור סוג של הפונקציה, אבל הולך לפני שם של פונקצית int. הנה, כתבתי int. מה אתה חושב שקורה אם בזה פונקציה, אני לא כותב int, אבל אני כותב שאינו חתום? ההבדל, כמובן, להיות כי לא חתום מייצג רק חיובי מספרים שלמים, ויכולים להיות int חיובי או שלילי. אז אני כבר שיניתי את התמורה סוג של פונקציה זו. קוד זה אינו תואם שיבה זו הזן כאן. מה אתה חושב שקורה כשאני לקמפל? אתה צריך לצעוק עליי. אין צעקות. מה לגבי כאשר אני מפעיל את התכנית? בואו לעשות לפני 0 שלילי 3, או 1 שלילי. זה עדיין עובד, למרות שאני אומר זה חוזר שלם חתום. ברור שזה לא חוזר שלם חתום. זה חוזר שלם חתום. זה חוזר 1 שלילי. אוקיי, זה מוזר. מה לגבי אם אני הולך ב כאן ולעשות את זה? אז אני כבר שיניתי את הכל מint כדי לא חתום. היא יכולה רק לקחת מספרים שלמים לא חתומים. אבל האם אנחנו עדיין חושבים שזה ירוץ? קהל: כן. דובר: זה יהיה. זה מטורף. ואנחנו עוברים שבהוקצינו באופן ברור שלם, אנחנו יכולים לעבור שתי נחתמו מספר שלם, זה עדיין עובד. בסדר, כל רעיונות למה זה עדיין עובד, או מה קורה? כן, ג'ף. קהל: יש לו משהו לעשות עם אופטימיזציה שלך, כי אתה מודגש. דובר: לא. אנחנו יכולים לשנות את אופטימיזציה, זה עדיין יעבוד. אני יכול לעשות את זה בשבילך, אבל - קהל: אני אקח את המילה שלך על זה. דובר: כן. אם אתה פותח את makefile ממש כאן, אני שיניתי את אופטימיזציה. אז אתה יכול לעשות מקף אפס, אפס. זה עדיין יעבוד. מחשבות אחרות? אתם כל צפויים לעבוד, ולכן למה אתה מצפה שזה יעבוד? לא? שתיקה. על אישור. אני צריך לחכות שבע שניות, משום ששאלתי את שאלה. אז הדבר מגניב על C, ויש לך כנראה חווה בעבר - לך אולי לא צריך, אולי זה יהיה זו הפעם הראשונה. אבל כמו שכולכם יודעים, כשאני כותב משהו ב-C, זה לא לחסוך כמו זה במחשב. זה נשמר כאחדים ואפסים. זה הולך מקוד C לקוד הרכבה. מישהו ראה את קוד הרכבה לפני, קוד הרכבה מכונה? אנו מסתכלים בשניים. זה הולך מקוד C לקוד הרכבה. ואתם יודעים שלבים של הידור. אתה צריך לזכור כי לחידון אחד, ולאחר מכן לכתוב את זה על חידון אפס. רוב האנשים קיבלו את זה לא נכון. אני חושב שהחבר 'ה הדביקה אותו. אבל, אתם החלק הטוב ביותר לחידונים, דרך אגב. וזה מדהים. זה לא יזיק לך. אל תהיה מודאג. אבל זה ממש מגניב. עבודה טובה. אז זה הולך לשפת הרכבה, ו אז זה הולך לאחדים ואפסים. ואחדים והאפסים נשמרים על מחשב, וזה מה שהציל את ב a.out, או במקרה הזה, את קובץ ההפעלה. והמחשב פועל אחדים ואפסים. נכון? למדנו את זה בעבר. אז הדבר מגניב הוא, זה לא חתום רעיון, הרעיון של סוגי ints לא חתום, וכולי וכולי, וכולי, זה עד כאן בשפת C. אלה קיימים. אבל סוגים לא קיימים ב אחדים והאפסים. סוגים אפילו לא באמת קיימים ב רמת שפת הרכבה. אז זה משהו שקיים ב-C עולם, אך אינו קיים במחשב עולם או עולם מעבד. זה קצת הפשטה כי C השפה כללה, כדי להפוך אותנו חיים קלים יותר. אז בסופו של היום, אני יכול לכתוב דברים רבים ושונים כאן, וזה לא לעשות את הבדל. מאחר שקיים רק בעולם C. זה לא קיים ב לאחדים ואפסי עולם. והתכנית שלנו בביצוע אלה ועולם אפסים. אז רוחכם באופן ברור לא פוצצה עדיין. אבל אני חושב שזה מגניב. כן, ג'ף. קהל: לכן, אם במקום עושה int, אתה עושה char. והיית - דובר: בואו נעשה את זה בשניות. קהל: כי אז אתה מקבל לא חתום הולך מ128 שליליים 127 או 0-255. דובר: אז char הוא בעייתי. האם מישהו יודע למה char יהיה בעייתי, וזה באמת היית לשנות דברים באלה ואפסי עולם? קהל: בשל גודלו של char. דובר: גודלו של char הוא 1. אז חתום גם 4 בתים. אז char הייתי לדפוק את עניינים. אבל מה הוא 4 בתים זה הקשורים לchar? או שבמוסיף אחד נוסף - אתה יכול לשים את תו אחד יותר לאחר תו. קהל: כוכב צ'אר. דובר: יש כוכב צ'אר 4 בתים. אז בואו נעשה משהו זה כוכב char. אז זה כנראה יעבוד, אבל אנחנו הולך לעשות משהו אפילו יותר משוגע מזה. לדעתי, יותר משוגע. עכשיו אני כבר כתוב פונקציה המחזירה מצביע, וזה לוקח מצביע וערך שאינו חתום - אנחנו לשנות את זה בחזרה לint כך שאנחנו לא שינויים רבים מדי בבת אחת. ויש לה מערך בשם, אינדקסים לתוך המערך, וחוזר כתובת של. ראינו מפעילים אלה בעבר. זה, מה אתה חושב שזה הולך לעשות, בתמורה, כאשר אני מפעיל את זה? מה אתה חושב שזה הולך לעשות? ניחושים כל? קהל: Segfault. דובר: מה? Segfault? זה ניחוש טוב. טום אומר את אותו הדבר. כל ניחושים אחרים? מי שחושב שזה הולך לעשות את אותו הדבר? מי שחושב שזה הולך segfault? זה עושה את אותו הדבר. סליחה. אבל, כמובן, שאנחנו מכניסים ל1 ו -2. ואלה הם שני חוקיים, נכון? בואו נראה, אנחנו יכולים ללכת ל מקום שני של מערך. אבל מה אם עשינו ב מספר שלילי? כי הוא כנראה ניחוש טוב יותר לsegfaulting משהו. זה עדיין עובד. אוקיי, זה מטורף עכשיו. זו היא פונקצית סכום תקפה באותה מידה. זה עושה את אותו דבר מדויק כתמורה ב. מישהו יכול להסביר למה זה טוב סיכום פונקציה, או למה זה עובד? מה קורה כאן? למה זה עושה את אותו הדבר המדויק דבר כפונקציה הסכום הישנה שלנו? [? Akshar,?] מה קורה? קהל: כי כאשר יש לך זה כתובת זיכרון מיקום - וכשאתה עושה את האמפרסנד, זה הולך לכי כתובת זיכרון. וכשאתה הולך ל-B, אתה סוג של נע צעדים שמכתובת הזיכרון, אתה חוזר ש. אז אתה בעצם, למעשה, הוספה וb [לא ברור]. איפה פעולות סטנדרטיות בתמורה ש? כמו, איפה הסוגריים ליפול? האם חזרתו של את הכתובת על לפני או אחרי [לא ברור]? דובר: זה הולך למדד ב - או מדד ל-- ולאחר מכן להחזיר את כתובת. בסדר, אז לא כולם מבינים מה [? Akshar?] אמר, והסביר, למה זה עובד? אני לא, מישהו בפעם הראשונה הסביר לי את זה. האם מישהו אוהב את תמונה כדי להסביר את זה? אנחנו הולכים לצייר תמונה, עם אין סמנים, זה נהדר. מצא כמה. אז יש לנו מערך זה סדרה של קופסות. הראשון הוא מדד 0, מדד 1, 2, 3, 4, נקודה, נקודה, נקודה. מערך טיפוסי. ובנוסף לכך שמדדים, לכולם יש כתובות זיכרון. אז בואו לתת את הכתובת של הזיכרון הזה 13, 14, 15, 16, 17, וכולי. כולם כאן כל כך רחוק. אז היא כתובת. שמו של מערך, מצביע נשמר שם. זה מצביע, זה חלק מזיכרון, לתחילתו של המערך. אז אם זה היה המערך, יהיה ערך של 13. וכמובן, אנחנו יכולים לתת כל ערך שאנחנו רוצים. תו כוכב, אנחנו יכולים לתת כל כתובת זיכרון שאנחנו רוצים. אנחנו יכולים לתת לו 0, אנחנו יכולים לתת לו 1 שלילי - שלילי 1 לא קיימת, אז זה כנראה בעייתי, אבל אתה ראית שזה עדיין עבד. אז אנחנו יכולים לתת כל מספר שאנחנו רוצים, כל כתובת זיכרון שאנחנו רוצים. לאחר מכן, int b אומרת, בסדר, תלך למספר זה של צעדים למערך. אז אם ב שווה 2, ושווה 13, אנחנו בכתובת זיכרון 13. ואנחנו הולכים שני צעדים ב, ולכן אנחנו כאן. והאמפרסנד אומר תמורה הכתובת של מיקום זה. והכתובת היא, כמובן, 15. אז אנחנו מקבלים 13 בתוספת 2, או ב בתוספת, שהוא 15. אם כי השאלה היא, - אני מצטער. האם זה להבהיר דברים למה זה עובד? קהל: למה שזה יעבוד הולך - כך שאתה יכול לקבל את מערך ו ללכת למדד שלילי? SPEAKER: נכון. אז עשינו מספרים שליליים, אז זה - אין זה אף הגיוני, ראשון, [? אבי,?] בשבילך? קהל: כן אני פשוט [לא ברור], אבל - דובר: כן, זה היה חוזר 15. אם היה 13, והיה ב 2, זה יחזור 15. קהל: אז האינדקס אפס לא להיות בעיה, נכון? מכיוון שאתה נע בין 0. SPEAKER: נכון. אז אתה זז - כך שאם ב היה 0, אתה לא זז לשום מקום. והיית רק חזר את הכתובת - אם ב היה 0, זה בעצם חוזר כתובת של. עובר בכוכב char וחוזר כתובת שלו פשוט חוזרת, במהות. אוקיי, השאלה היא למה לעשות מספרים שליליים עובדים? וזה הדבר ממש מגניב על את זה, כי זה צריך segfault. וזה יהיה segfault אם עשה משהו כזה. בואו נגיד, int. אז הקוד הזה נראה זהה ו צריכים להתנהג באופן זהה. בעיקרו של דבר, x הוא משתנה אשפה, וכך זה צריך מתנהג באופן זהה. בואו נעשיתי את זה - אופס - בכוכב. בסדר, אנחנו כבר מקבלים שגיאות כאן, כי זה כבר הולך להיות כועס עליי, כי זה כבר יודע מה עומד לבוא. בפרט, השנייה אחת. כתובת של זיכרון שנערם קשור עם משתנה מקומי. בעיקרו של דבר, אני לא הולך להדר זה, ולאחר מכן אני הולך לבטל לעשות מה שאנחנו עשינו כרגע. אבל בגלל שאנחנו אף פעם לא באמת גישה מה בזיכרון מיקום, זה לא הולך לsegfault. אנחנו אף פעם לא באמת מסתכלים על מה בתיבה השנייה או מה שיש בכל תיבה של מערך זה. אנחנו רק אומרים, הנה כתובת של הדבר שאנחנו מחפשים ו להחזיר כתובת זו. אנחנו אף פעם לא באמת הולכים ל מערך להסתכל על מיקום זה. ובגלל שאנחנו אף פעם לא לגעת בזיכרון, אנחנו לא מקבלים בצרות. אנחנו לא מקבלים segfault. אם ניסיתי, שוב, לגעת בזה זיכרון, לגעת במה שהיה באו ב - או ב סוגר, ובהנחה היה 0 ו-- אם היה 0, אפילו, שיהיה די רע, כי אנחנו לא יכולים ללכת את כל הדרך לשם. אם A ו-B שניהם היו 0, ואנחנו ניסינו לגעת במה שהיה שם, אז הייתי להסתבך בצרות. אבל אם אנחנו לא נוגעים מה יש שם, אנחנו פשוט להחזיר את הכתובת, זה בעצם לא הולך segfault כי זה מאפשר לך לבצע פעולות אלה. זה רק מתרגז עליך, ומקבל סופר כעס, כאשר אתה מנסה ולגעת הזיכרון בפועל ולחזור מה באותו מיקום בזיכרון. האם זה הגיוני? זה רק חלק מטורף של ג אז, יש לנו עוד אחד מאלה. מי שחושב שזה מגניב? יותר אנשים. זה טוב. אוקיי, זה האחרון שלנו. ואני רוצה שתגיד לי אם לך או לא חושב שזה הולך לעשות את אותו דבר בדיוק. שכתבתי אלה איפשהו. אני לא לשנן אותם. בואו נראה, 8, ב 4, 4, 2, 4, 0, 8, 0, 3, 4, 4, 2, 4, 0, 4. אז זהו מערך, עכשיו, לא פונקציה. וזה כי יש לנו מערך מרובע בסוגריים, בסוגריים מסולסלים לא מסולסלים. וזה מערך של איזה סוג? אף אחד, הממ? קהל: המספרים הקסדצימליים שלהם? דובר: אבל מה סוג C? לכולם יש מספרים הקסדצימליים. מה סוג C? זה אומר לך. קהל: זה תווים שאינם חתומים. דובר: נכון, תווים שאינם חתומים. ושני מספרים הקסדצימליים הוא בייט אחד. אז אלה הם 1, 2, 3, 4, 5, 6, 7, 8, 9 בתים. זה מערך של 9 בתים. בסדר, אתם בטח כבר יודעים התשובה לשאלה זו. אבל, מה אתה חושב שיהיה לקרות כאשר אני מפעיל את זה? אני אומר, שוב, בmysum.c, אני מצפה לתפקוד שלוקח שני מספרים שלמים. ואני במקום שאני אומר שסכום הוא מערך של תווים. מה הולך לקרות כאשר אני מפעיל. / Mysum ולעשות? ובכן, דבר ראשון, רובכם כנראה יהיה מסכים לעשות את זה - אוי לא, סתם, בצחוק. מה לא עשיתי בסדר? אה אה. זה צריך להיות בסוגריים מסולסלים. ככה אתה לאתחל מערך. שלי רע. אז אנחנו כבר ראינו לפני שהסוגים הן הפשטה ברמת C, לא הפשטה ברמת מחשב. אז רובכם כנראה ציפה שזה לעשות, או בהנחה שזה יגרום. אבל מה כאשר אני מפעיל. / Mysum? מה הולך לקרות? ניחושים כל? קהל: זה הולך להדפיס את מילה. דובר: זה הולך להדפיס את מילה. מה מילה? קהל: [לא ברור]. דובר: כל ניחושים אחרים? אישור, להדפיס את ביטוי. אתה יכול להיות כל ביטוי. שיהיה בצד שלך. כל מי שיש ניחוש אחר? אנה, מה הניחוש שלך? קהל: זה יהיה להדפיס את - שתי אותיות, או [לא ברור] מכתב אחד. דובר: מכתב אחד. קהל: האם אני יכול לספור כמה רבים [לא ברור]? דובר: תשע. ובכן, אני הולך להפעיל אותו. היא עושה את אותו דבר בדיוק. זה מוסיף שני מספרים יחד. ובכן, בואו נעבור את שני טיעונים. זה לא לוקח את טענות. אז אני לא יודע מאיפה זה יכול אולי לקבל טענות אלה. אבל בואו נעבור ב100 ו0. והוא מוסיף ו100 0. זה מטורף. אני חושב שכן. 4 שלילי, זה גם פועל. אתה יכול לעשות מה שאתה רוצה. זוהי פונקצית סכום תקפה באותה מידה. זו היא פונקצית סכום. אבל, לא, אתה אומר שזה מערך של בתים. אז מה קורה כאן? אז, שוב, בואו נחזור לרעיון הזה שאמרנו בהתחלה. אתה הולך מקוד ברמת C, להרכבה שפה, לאחדים ואפסים. זה הקסדצימלי. אבל זה באמת רק הרבה אחדים ואפסים. זה 72 לאחדים ואפסים, נכון? 72 אחדים ואפסים. 9 בתים. לכל אחד יש בייט 8 סיביות. כל ביט הוא אחד או אפס. אז 72 אלה או אפסים. רק שכתבתי אותם ככה - במקום לכתוב את זה כמו הרבה אחדים ואפסים. אבל זה יעבור מרמת C שפה, להרכבה שפה, לקוד. וזה יהיה להדפיס בקוד, איפשהו, 72 לאחדים והאפסים האלה שכתבתי כאן. אז אי שם שב-- בואו נלך לכאן - אי שם בmysum, התכנית, יש הם 72 לאחדים והאפסים האלה שיש לי כתב ואמר לו לכתוב. עכשיו, כל ניחושים על מה שאותם 72 לאחדים ואפסים אומר? קהל: כנראה את אותו דבר כמו לחזור ב בתוספת. דובר: כנראה באותו דבר כמו לחזור ב בתוספת. בואו לבדוק את זה. בואו להבין איך עשיתי את זה. אז אם אתה הולך לחזור לכאן, אני אומר לך כדי להפעיל פקודה זו, objdump-S sumfunction.o. בואו נלך להפעיל אותו. objdump - obj, לזרוק. בעיקרון זה יכול לתת לי כל מה שאני רוצה לראות. זה יכול לתת לי את שפת ההרכבה. זה יכול לתת לי את אלה ואפסים. יש לו טונות של דגלים. זהו אחד אנחנו הולכים להשתמש לעת עתה. דוט - כפי שאתה רואה בשקופיות - הון מקף S אומר, ולשלב, קוד מקור - הקו הזה הוא מ C - עם ההרכבה קוד ועם אחדים והאפסים. ואנחנו הולכים לרוץ זה על sumfunction.o. כי זה אהיה קל יותר לראות. שוב - הממ? קהל: אתה איית את זה לא נכון. דובר: אבל אני בעצם הולך כדי לנקות אותה לרגע. אני הולך ראשון כדי לפתוח רק sumfuntion.o. קהל: אתה איית את זה טעיתי בפעם הראשונה. דובר: קלאסי. סכום - שהוא מילה קשה, אם כי. תתפלא. אוקיי, אז זה sumfunction.o. אני אפילו לא יכול להגיד לך. יש הרבה אפסים, ברור הרבה של אפסים, ויש כמה אחר דברים שלא אפסים. אבל בעיקר אפסים. נראה כאילו יש כמה כאלה. אז ברור, זה קשה לקריאה. זה שפת בינארית. בואו עכשיו לפתוח אותו - מה? מה אני עושה לא בסדר? האם אני כותב את זה בצורה נכונה? אוקיי, זה מביך. אני זקוק לשנייה אחת כדי להבין מה אני עושה לא בסדר. זה טעות אחת. זה מוזר. אה, זה למה. אני הולך לחזור לראשוני שלנו אחד, ולכן אנחנו יכולים להסתכל קוד אובייקט של זה. בגלל שיש לא ממש הולך להיות כל דבר, כאשר אנחנו פשוט לשים לאחדים ואפסים פנימה הנה. אוקיי, אז כולם יכולים לראות את זה. פונקציה זו, כפי שאמרתי, לכבות את קווי C - שורות קוד מקור - עם כמה הוראות הרכבה. הנה שורת קוד המקור שלנו. הנה אחד, הנה עוד. הנה הוראות ההרכבה. זה מה שהם נראים. הוראות הרכבה - אתה יכול ללמוד יותר מאלה אם אתה לוקח כיתות אחרות של מדעי המחשב, אבל הם בדרך כלל הוראה. ואז מקור ויעד. ואז כאן הוא הקוד בינארי המתאים להרכבה כי הוראה. אז כפי שאתם יכולים לראות, פונקצית סכום זה, בסופו של היום, הוא שלוש הוראות הרכבה. רק שלוש. mov אחד - זה מ-o-V עומד על העבר. הוספת דוכנים להוספה. ו-R-e-t מייצג שבות. אז mov אחד, תוספת אחת, תמורה אחת. ואלה, לכאן, הם האפסים ו אלה שמתאימים לקוד זה. אז אלה אפסים ואחדים, אם לדעת אלה, אתה יכול פשוט לשים אלה ישר פנימה ואז זה יעשה את אותו דבר בדיוק. כי, בסופו של היום, כל אתה ביצוע הוא סדרה ארוכה של אפסים ואחדים. וזה מה שהקוד שלך באמת. והסיבה לכך - בואו נסתכל על דבר אחד. האם יש לי makefile פתוח? אז אם אחזור למקף אפס, אפס עד כאן - מצטער, o הון, הון o אפס, לא אפס, אפס. ואנחנו לא עושים, זה היה עדיין עובד אותו הדבר. אבל עכשיו אתה שם לב שיש הרבה יותר הוראות הרכבה. זאת משום, שוב, שאלתי מהדר לא לעשות שום אופטימיזציה. אז עדיין אני יכול לקחת את כל אלה אפסים ואחדים, ולזרוק אותם ב, ושיעבוד. אני רק עשיתי אופטימיזציות, כי זה קצת יותר קל, ולאחר מכן, לכתוב מערך זה. אבל זה הייתי לעבוד באותה מידה. אוקיי, אנחנו הולכים לעשות דבר אחד אחרון, כי אני חושב שזה החלק הכי מגניב. למרות שכולם זה ברור כבר מפוצץ וללא מילים. המוחות שלנו הם פוצצו. [לא ברור] אז, אלה הם מכיתת CS שונה, אשר הוא סופר מעניין, שיש לי לקחתי - CS61. אני מאוד ממליץ לך לקחת את זה. אבל החלק מגניב על עובדה זו, כי דברים הם רק אפסים ואחדים, הם שכל מה שהוא אפסים ואחדים. אז אתה יכול לקחת את קובץ שיש לו את אפסים נכונים ואלו שאתה רוצה אי שם בזה, ולהשתמש בסעיף זה של אפסים ואחדים כפונקציה סכום. מה שאני מתכוון לעשות את זה? אני אומר שאתה יכול לקחת את קובץ תמונה ש יש לו את הסדרה הנכונה של אפסים ו אלה, שלהדפיס משהו לתמונה. ותכנית אחת עלול לפרש היא תמונה, אבל אתה יכול לפרש את זה, אם אתה רוצה, כפונקציה סכום. אז אם אנחנו רוצים לפתוח, עבור למשל, תמונה זו. בואו נלך, הלו קיטי. תמונה קטנה ונפלאה. בפה יש מחרוזת ש של אפסים ואחדים. אלה 72 אפסים ואחדים קיים בתמונה זו. אז מה אני יכול לעשות, אם כן, לכתוב - אני צריך לזכור היכן הם נמצאים. אני תמצא את זה תוך שני. אבל אנחנו עושים - תן לי לגלות היכן הם נמצאים. שנייה אחת. בואו לעשות - קהל: [לא ברור]. דובר: תודה. אז אם אנחנו לבצע תכנית זו, אשר במקום שקורא בקובץ, אז זה הולך למדד זה בקובץ. ואז, שוב, בדיוק כמו mysum, לוקח שני מספרים. אנחנו יכולים להוסיף מספרים בדיוק כמו אנחנו עושים לפני, אשר הולך להראות לך איך את העובדה כי בסופו של הדבר שלו של היום, כל הדברים האלה הם אפסים ואחדים. וזה בדיוק איך שאתה בוחר לפרש אותם. ואם אתה באמת נראה בתמונה זו - בואו להתקרב קצת. האם כל אחד יכול לראות את זה? תוכל להבחין כאן, יש כמה כתם מוזר. בואו נלך - זה את התמונה המקורית. תוכל להבחין כאן שאין שום כתם. זה הקוד לפונקצית הסכום, הוא שכתם קטן ממש שם. ולמעשה, שוב, אם אתה לומד יותר על זה, תבין שזה הלו קיטי, שבו יש אפילו יותר גדול כתם, יש קוד שיכול להשתלט על מחשב אם זה לא מוגן כראוי. אז למעשה אתה יכול להפעיל את זה. אני לא הולך להפעיל אותו עכשיו. אבל אתה יכול להפעיל את זה שלום תמונתו קיטי, וזה יכול להשתלט על המחשב שלך. אז זה כל להדגמה. האם יש למישהו שאלות, הערות, חששות? אני חושב שהדבר הזה הוא מרתק. זה נתן לי השראה כדי ללמוד עוד. אני מאוד ממליץ, אם אתה מעוניין בכלל במדעי מחשב, לדבר איתי. למרות שאני מדעי חברה מרוכז, אני CS, משניים, ולכן אני עדיין יודע קצת. אבל אני בהחלט יודע מה שיעורים אתה צריך לקחת. אני חושב שזה הכל באמת מעניין, ואני ממליץ לך, ללא ספק, ל ללמוד יותר אם אתה מעוניין. אוקיי, יש לי דבר אחד סופי. סליחה. כל שאלה? אני לא להשהות לחכות אם מישהו היו שאלות על זה. האם מישהו הולך להיות מרוכז CS? או לחשוב על זה? אחת, שתיים, שלוש, ארבעה. אחד - אחד בלבד. אנה היא רק היד זה העלה בסמכותיות. בסדר, זה מגניב. אסאם, מה אתה הולך לעשות? קהל: [לא ברור]. דובר: קונסטנטין? קהל: פיסיקה. דובר: וואו, זה היה מהיר. היה לך ניסיון רע בCS50? [לא ברור], מה אתה הולך לעשות? קהל: אין לי מושג. דובר: קורט? קהל: Econ או CS. דובר: Econ או CS. טום? קהל: אני עושה Stat. דובר: Stat? על אישור. מה אתה? קהל: אותי? דובר: כן. קהל: Stat. דובר: Stat. אה, הנה לך. טום, לדבר עם אלדן. אמילי, מה שלומך? קהל: ביו - דובר: האם אתה בסעיף זה? קהל: לא. הדובר: בסדר, זה אמילי. היא החברה שלי. ברור שלא זה של חבר טוב, בגלל שהיא נותנת לי חיים קשה. אתה יכול להיות יותר נחמד אליי בחזית של כולם, התלמיד שלי - קהל: אני עושה את מדריך השאלות שלך. דובר: באמת? אה אה. בסדר, אתה מדהים. אני אוהב אותך כל כך הרבה. אוי ואבוי. בכל מקרה, אני, אתמול בלילה, כמו כל דבר - אני בטוח שכולם נראה באמת הדגיש עכשיו. אני לא יודע, הם בכיתה ט '- הם אתם מרגישים לחוץ? אני מרגיש לחוץ. זה היה כמו, אתה הולך הביתה לחג ההודיה. אתה כמו, אני הולך לעשות את כל הדברים האלה. קהל: זה כל כך שונה. דובר: כן, ואתה חוזר. ג'ף, אתה לא מרגיש ככה? קהל: אני רק חשבתי הייתי עושה קצת. דובר: בסדר, נהדר. אז אני חוזר, ויש לי לא עשה שום דבר. וכל זה סופר מלחיץ. ואני מודאג, מודאג באמת ובתמים, לגבי האם או לא אני הולך לסיים את כל מה שאני צריך. אבל אתמול בלילה, אני לא לחוץ, הייתי קצת עצוב. אז כתבתי ביומן שלי על מה שאני היה עצוב. ואני היה עצוב על סעיף זה במעמד הזה מגיע לסיומו. כל כך פשוט שאני הולך לקרוא לחבר 'ה קטע קטן של היומן שלי, מאתמול בלילה. האם אני יכול לקבל כמה מפיות, כמה רקמות מטום? לא, אני עומד לבכות. אני לא בוכה. לא שאתה לא יכול לבכות, אני רק לא לבכות. אני אפילו לא יודע אם הדמעות שלי בלוטות עבדו - צינוריות דמעה. אני לא בכיתי בזמן רב. קהל: [לא ברור]. דובר: בסדר, תודה. בסדר, יש קצת הקדמה - יש כמה חלקים אחרים של היומן שלי כניסה, כי אני מנסה בכל עת הלילה לפני שנכנסתי למיטה. אני מאוד ממליץ על כתיבת יומן. זה עוזר לך לעבד את הדברים, וגם להיות מעריך מאוד את היום שלך. וזה עושה את זה הרבה יותר קל לחפש חזרה על היום שלך ולהבין ש היו הרבה טוב דברים שלא קרו. גם אם אתה מרגיש באמת הדגיש בלילה או באמת נסער, או באמת עצוב או עייף. אוי, אלוהים. אני אפילו לא יודע אם זה נכתב כי גם בגלל שלא להגיה אותו. אבל אנחנו קראנו אותו. אני בדרך כלל לא קורא כתב עת, כמובן. "מחר, אני אלמד אותי סופי סעיף CS50 של השנה. זה מטורף איך שזמן טס מהר. ובכל זאת, אני נדהם עד כמה שונה הניסיון שלי מלמד את זה בשנה שהיה מאשר כשהייתי בכיתת י '. בתור התחלה, אני בהחלט יודע את החומר טוב יותר. אבל אל תספר המחזור הראשון שלי תלמידים ש. וחשוב יותר, לעומת זאת, הבנתי כי את השמחה שמגיעה ממעמד בחזיתו של חדר, מה שמתחיל כזרים, אבל בסופו כ, ב לפחות, חברים בפייסבוק, הוא לא מקרי בשנה הראשונה. במקום זאת, זה מהידיעה, ב חלק קטן בדרך, שאתה עוזר מוכשר, מתחשב, מענג, ו אנשים נלהבים ללמוד קצת יותר על מדעי מחשב. אתה הסטת שהנורה פשוט קצת בשקע שלה, כך שזה הצליח לזרוח בהיר יותר מאשר לך, או שהם, יכול היה לדמיין בתחילת סמסטר. אתה עוזר מתהפך מזעיף פנים אלה למטה ושואל שאלות כי לספק תמיכה, אבל עדיין מאפשר תלמידים לעמוד על שלהם. זה בהחלט לא הגזמה לומר כי סעיף זה הוא אהוב עליי בחלק מהשבוע. או אפילו שאני מהסס לומר, שזה הכל, ב05:30 בכל שבוע, בידיעה שזה יהיה יותר מדי זמן עד שנפגש שוב. ובכל זאת, אני מודה מאוד ל כל מי שנתן לי את זה הזדמנות להחזיר לאחרים. לדוד, על הסבלנות והאמון שלו. לצוות הצילום והפקה, עבור גורם לי להיראות מכובד במקצת. והכי חשוב, לתלמידים שלי, בלעדיהם הייתי צריך שום סיבה לבלות 10 שעות להבין הטוב ביותר דרך למשוך מצביעים, או לפרוש שולחן של דולפינים, באמצעות JavaScript. כמו תמיד, זה היה ברכה ". אז עם זה, תודה חבר 'ה. אני תראה את כל מה שאתה ביריד CS50, ו hackathon, אם אתה שם. ואם יש לך שאלות, אני אשאר מסביב, עד שאין יותר. אבל אני מודה לך חבר 'ה ל שנה נפלאה. [מחיאות כפות] דובר: אני עלול לבכות.