1 00:00:00,000 --> 00:00:10,970 >> [پخش موسیقی] 2 00:00:10,970 --> 00:00:12,536 >> دیوید J. مالان: همه حق. 3 00:00:12,536 --> 00:00:13,392 >> [خنده حضار] 4 00:00:13,392 --> 00:00:14,240 >> خوش آمدید. 5 00:00:14,240 --> 00:00:14,990 این CS50 است. 6 00:00:14,990 --> 00:00:16,890 و این پایان هفته پنج. 7 00:00:16,890 --> 00:00:20,020 و تا به حال، ما تقریبا در نظر گرفتن برای مسلم است که وجود دارد 8 00:00:20,020 --> 00:00:23,480 این کامپایلر، صدای جرنگ جرنگ، که شما وجود دارد از طریق این استناد 9 00:00:23,480 --> 00:00:27,100 ابزار دیگری به نام که به نحوی جادویی تبدیل کد منبع خود را 10 00:00:27,100 --> 00:00:31,350 به کد شیء، صفر و آنهایی که که CPU کامپیوتر شما، مرکزی 11 00:00:31,350 --> 00:00:33,410 واحد پردازش، در واقع درک می کند. 12 00:00:33,410 --> 00:00:36,770 اما معلوم است که وجود دارد در زیر هود در 13 00:00:36,770 --> 00:00:38,690 بین ورودی و خروجی. 14 00:00:38,690 --> 00:00:41,800 >> و من می خواهم به پیشنهاد که ما گوشت که در جزئیات کمی بیشتر به 15 00:00:41,800 --> 00:00:45,130 این چهار مرحله، چیزی به نام قبل از پردازش، چیزی 16 00:00:45,130 --> 00:00:48,300 نام گردآوری، که ما را دیده اند، چیزی به نام مونتاژ، و 17 00:00:48,300 --> 00:00:49,420 چیزی به نام ارتباط. 18 00:00:49,420 --> 00:00:53,270 بنابراین تا در حال حاضر، در برخی از ما برنامه ها، ما تا به حال تیز شامل. 19 00:00:53,270 --> 00:00:56,650 اخیرا ما تا به حال برخی از تیز تعریف می کند برای ثابت. 20 00:00:56,650 --> 00:01:00,660 بنابراین معلوم است که آن چیزهایی است که با نماد هش یا پیشوند 21 00:01:00,660 --> 00:01:04,150 نماد پوند پیش پردازنده دستورالعمل. 22 00:01:04,150 --> 00:01:07,960 این فقط یک راه فانتزی از گفتن آن یک خط از کد را که در واقع 23 00:01:07,960 --> 00:01:12,280 تبدیل به چیز دیگری قبل از کامپیوتر حتی تلاش برای تبدیل شما 24 00:01:12,280 --> 00:01:13,800 برنامه را صفر و آنهایی که. 25 00:01:13,800 --> 00:01:19,000 >> به عنوان مثال، تیز شامل استاندارد I / O. ساعت، تقریبا حالت فقط بدان معناست بروید 26 00:01:19,000 --> 00:01:24,010 جلو، با شتاب محتویات فایل stdio.h و چسباندن آنها را به سمت راست وجود دارد. 27 00:01:24,010 --> 00:01:25,880 بنابراین هیچ صفر و آنهایی که که در آن نقطه هنوز. 28 00:01:25,880 --> 00:01:27,470 این واقعا تنها یک تعویض است. 29 00:01:27,470 --> 00:01:30,790 و این در طول به اصطلاح انجام می شود مرحله پیش پردازش، هنگامی که شما 30 00:01:30,790 --> 00:01:34,230 در واقع صدای جرنگ جرنگ اجرا و یا به طور خاص را در اکثر موارد. 31 00:01:34,230 --> 00:01:36,950 بنابراین همه این اتفاق می افتد شده است برای اولین بار به طور خودکار تا کنون. 32 00:01:36,950 --> 00:01:38,800 >> سپس مرحله تدوین می آید. 33 00:01:38,800 --> 00:01:40,920 اما ما ساده بوده ام تلفیقی. 34 00:01:40,920 --> 00:01:45,060 کامپایل یک برنامه واقعا به معنی آن را از چیزی شبیه به C، 35 00:01:45,060 --> 00:01:48,430 کد منبع ما نوشتن، پایین به چیزی به نام مونتاژ. 36 00:01:48,430 --> 00:01:52,900 زبان اسمبلی سطح پایین تر است زبانی که، خوشبختانه، ما نمی خواهد 37 00:01:52,900 --> 00:01:55,480 بسیار مناسبت به ارسال این ترم. 38 00:01:55,480 --> 00:01:59,100 اما آن را در پایین ترین سطح در معنا که شما به معنای واقعی کلمه شروع به نوشتن 39 00:01:59,100 --> 00:02:04,270 اضافه کردن و تفریق و ضرب و بار از حافظه و ذخیره به حافظه، 40 00:02:04,270 --> 00:02:08,259 دستورالعمل های بسیار اساسی است که یک کامپیوتر، در زیر هود، 41 00:02:08,259 --> 00:02:09,639 در واقع می فهمد. 42 00:02:09,639 --> 00:02:14,930 >> در نهایت، مونتاژ طول می کشد که زبان به صفر و آنهایی که ما بوده ام 43 00:02:14,930 --> 00:02:16,190 توصیف تا کنون. 44 00:02:16,190 --> 00:02:19,270 و واقعا در نهایت، به اصطلاح وجود دارد مرحله اتصال، که ما 45 00:02:19,270 --> 00:02:22,360 در یک لحظه، که ترکیبی از دیدن صفر و کسانی که با صفر و 46 00:02:22,360 --> 00:02:24,870 آنهایی که افراد دیگر قبل از شما ایجاد کرده است. 47 00:02:24,870 --> 00:02:26,660 >> بنابراین این برنامه فوق العاده ساده را در نظر بگیرند. 48 00:02:26,660 --> 00:02:27,560 از هفته 1 بود. 49 00:02:27,560 --> 00:02:29,610 فقط گفت، سلام جهان، بر روی صفحه نمایش. 50 00:02:29,610 --> 00:02:30,920 ما این کار را از طریق صدای جرنگ جرنگ زد. 51 00:02:30,920 --> 00:02:33,200 یا ما زد آن را از طریق ساختن که زد صدای جرنگ جرنگ. 52 00:02:33,200 --> 00:02:36,170 و در آن زمان خروجی که در آن برخی از صفر و آنهایی که. 53 00:02:36,170 --> 00:02:38,100 اما معلوم وجود دارد مرحله میانی. 54 00:02:38,100 --> 00:02:40,460 اگر من در اینجا - اوه، نداشت می خواهم او را ببیند هنوز. 55 00:02:40,460 --> 00:02:44,800 اگر من در اینجا به دستگاه من و من باز کردن hello.c، در اینجا 56 00:02:44,800 --> 00:02:46,160 که همان برنامه است. 57 00:02:46,160 --> 00:02:48,600 و آنچه که من قصد دارم در ترمینال من پنجره در اینجا من قصد دارم به 58 00:02:48,600 --> 00:02:51,430 اجرای صدای جرنگ جرنگ به جای ساخت، که خودکار هر چهار 59 00:02:51,430 --> 00:02:52,870 این مراحل را برای ما. 60 00:02:52,870 --> 00:02:58,620 و من قصد دارم به صدای جرنگ جرنگ-S و سپس hello.c و پس از آن را وارد کنید. 61 00:02:58,620 --> 00:03:00,590 >> و من سریع چشمک می زند دوباره، که خوب است. 62 00:03:00,590 --> 00:03:05,280 و در حال حاضر در یک پنجره کمی بزرگتر، من قصد دارم برای باز کردن نرمافزاری gedit در اینجا. 63 00:03:05,280 --> 00:03:09,610 و من قصد دارم برای باز کردن یک فایل است که، معلوم است، به نام این hello.s 64 00:03:09,610 --> 00:03:11,870 شامل که زبان اسمبلی من به آن اشاره پیش از آن. 65 00:03:11,870 --> 00:03:15,060 و این همان چیزی است که مونتاژ نامیده می شود زبان، سطح نسبتا کم 66 00:03:15,060 --> 00:03:18,470 دستورالعمل که CPU اینتل شما و یا هر آنچه در آن است که در داخل 67 00:03:18,470 --> 00:03:19,350 درک می کند. 68 00:03:19,350 --> 00:03:24,480 و ویدئویی است برای حرکت. تماس برای خواستار یک تابع سطح بسیار پایین. 69 00:03:24,480 --> 00:03:26,380 زیر است برای تفریق است. 70 00:03:26,380 --> 00:03:30,370 >> بنابراین، هنگامی که شما باید یک پردازنده خاص در داخل از کامپیوتر شما، چه چیزی باعث آن 71 00:03:30,370 --> 00:03:34,300 مجزا، در مقابل دیگر پردازنده بازار، است که دستورالعمل آن 72 00:03:34,300 --> 00:03:39,460 درک می کند و اغلب چگونه کارآمد آن است، با چه سرعتی آن را در اجرای برخی 73 00:03:39,460 --> 00:03:40,380 از این دستورالعمل. 74 00:03:40,380 --> 00:03:45,150 در حال حاضر بیشتر در مورد این، شما می توانید CS61 پاییز آینده در کالج. 75 00:03:45,150 --> 00:03:48,170 اما در اینجا ما باید، به عنوان مثال، چند شناسه که ممکن است نگاه آشنا. 76 00:03:48,170 --> 00:03:50,150 hello.c نام از این برنامه است. 77 00:03:50,150 --> 00:03:51,070 >> متن - 78 00:03:51,070 --> 00:03:54,190 بسیاری از علاقه وجود ندارد فقط در حال حاضر، به یاد بیاورید که متن 79 00:03:54,190 --> 00:03:59,190 بخش، به عنوان روز دوشنبه، این است که جایی که در حافظه برنامه شما در واقع به پایان می رسد. 80 00:03:59,190 --> 00:04:01,330 به طوری که حداقل مبهم آشنا وجود دارد. 81 00:04:01,330 --> 00:04:03,730 در اینجا، البته، ذکر است تابع اصلی ما است. 82 00:04:03,730 --> 00:04:07,220 نوار پیمایش پایین، این اشاره به همه چیز اصطلاح ثبت، تکه های بسیار کوچک 83 00:04:07,220 --> 00:04:09,190 حافظه داخل CPU واقعی خود را. 84 00:04:09,190 --> 00:04:12,930 و اگر من حتی پایین علاوه بر این، من می بینم نوعی 85 00:04:12,930 --> 00:04:14,240 اشاره غیر مستقیم ASCII. 86 00:04:14,240 --> 00:04:17,120 و در آنجا، در واقع، آن رشته است، خوش آمدید، کاما، جهان است. 87 00:04:17,120 --> 00:04:20,079 >> بنابراین داستان کوتاه مدت، این بوده است برای شما اتفاق می افتد، به طور خودکار، 88 00:04:20,079 --> 00:04:22,140 در زیر کاپوت این زمان. 89 00:04:22,140 --> 00:04:26,450 و آنچه که اتفاق می افتد واقعا یک بار شما صدای جرنگ جرنگ اجرا شود، و یا از طریق 90 00:04:26,450 --> 00:04:29,150 ساخت، شما در حال گرفتن برای اولین بار، از کد منبع، 91 00:04:29,150 --> 00:04:30,700 به اصطلاح زبان اسمبلی. 92 00:04:30,700 --> 00:04:35,210 سپس صدای جرنگ جرنگ تبدیل این مجموعه زبان را به صفر و آنهایی که. 93 00:04:35,210 --> 00:04:38,340 و این اسلاید است که ما آغاز شده است بحث ما در هفته 0 - 94 00:04:38,340 --> 00:04:39,840 و سپس هفته 1. 95 00:04:39,840 --> 00:04:44,030 و سپس در نهایت، کسانی که از صفر و آنهایی که با صفر و آنهایی که ترکیب 96 00:04:44,030 --> 00:04:47,190 از کسانی که کتابخانه ما مصرف بوده ام مانند استاندارد I / O یا اعطا 97 00:04:47,190 --> 00:04:50,010 کتابخانه رشته و یا حتی کتابخانه CS50. 98 00:04:50,010 --> 00:04:54,200 >> بنابراین دست به کار شد و رنگ این تصویر بصری، ما باید hello.c. 99 00:04:54,200 --> 00:04:57,220 و این، البته، با استفاده از چون printf تابع می گویند، سلام جهان. 100 00:04:57,220 --> 00:05:01,810 مرحله تدوین آن طول می کشد را به که فایل ما فقط و شاهد hello.s، حتی 101 00:05:01,810 --> 00:05:04,290 هر چند که به طور معمول حذف شده به طور خودکار برای شما. 102 00:05:04,290 --> 00:05:06,050 اما این کدهای اسمبلی در مرحله میانی است. 103 00:05:06,050 --> 00:05:09,750 و سپس هنگامی که ما جمع آوری مونتاژ زبان، پس به صحبت می کنند، که زمانی که شما 104 00:05:09,750 --> 00:05:10,830 دریافت آن صفر و آنهایی که. 105 00:05:10,830 --> 00:05:13,920 بنابراین ما به طور موثر در امروز در بزرگنمایی کرده ام آنچه ما مصرف بوده ام اعطا، 106 00:05:13,920 --> 00:05:16,430 بدان معنی است که کد منبع به کد شیء. 107 00:05:16,430 --> 00:05:18,850 >> اما در نهایت، در حال حاضر که همان تصویر - اجازه دهید آن را پرتاب را به 108 00:05:18,850 --> 00:05:20,020 سمت چپ. 109 00:05:20,020 --> 00:05:22,880 و توجه داشته باشید که در بالای صفحه وجود دارد من stdio.h ذکر شده است. 110 00:05:22,880 --> 00:05:25,030 این یک فایل است که ما را گنجانده ام در تقریبا تمام 111 00:05:25,030 --> 00:05:26,250 برنامه های ما نوشته شده است. 112 00:05:26,250 --> 00:05:28,830 و این فایل که محتویات دریافت یک کپی چسبانده، 113 00:05:28,830 --> 00:05:30,350 به طور موثر در بالای کد شما. 114 00:05:30,350 --> 00:05:34,170 اما معلوم است که بر روی یک کامپیوتر سیستم در جایی، احتمالا وجود دارد 115 00:05:34,170 --> 00:05:39,150 فایل stdio.c را که کسی سال نوشت پیش که پیاده سازی 116 00:05:39,150 --> 00:05:41,870 توابع است که اعلام شد در stdio.h. 117 00:05:41,870 --> 00:05:45,465 >> در حال حاضر در واقع آن را احتمالا در مک شما و یا کامپیوتر خود را و یا حتی در 118 00:05:45,465 --> 00:05:47,660 CS50 دستگاه یک کد خام C است. 119 00:05:47,660 --> 00:05:52,710 کسی در حال حاضر از آن وارد شده و فایل کد شیء یا یک 120 00:05:52,710 --> 00:05:56,020 فایل، که اشاره به یک کتابخانه مشترک که از قبل نصب شده و 121 00:05:56,020 --> 00:05:57,240 قبل وارد شده برای شما. 122 00:05:57,240 --> 00:06:01,950 اما فرض کنید که در واقع وجود دارد در stdio.c کامپیوتر خود را به صورت موازی 123 00:06:01,950 --> 00:06:02,650 با صدای جرنگ جرنگ. 124 00:06:02,650 --> 00:06:04,960 کد خود را در حال تدوین است و مونتاژ. 125 00:06:04,960 --> 00:06:09,200 کد stdio.c است که در حال تدوین است و مونتاژ، به طوری که این بسیار گذشته 126 00:06:09,200 --> 00:06:13,730 گام، پایین در اینجا، ما به نوعی لینک، پس به صحبت می کنند، صفر و آنهایی که خود را 127 00:06:13,730 --> 00:06:18,430 با صفر و آنهایی که خود و یا او را به یکی از برنامه ساده است که در نهایت 128 00:06:18,430 --> 00:06:20,540 به نام فقط خوش آمدید. 129 00:06:20,540 --> 00:06:23,340 >> به طوری که همه از سحر و جادو که اتفاق می افتد شده است تا کنون. 130 00:06:23,340 --> 00:06:26,430 ادامه خواهد داد و به این فرایندها برای اعطا شده است، اما متوجه 131 00:06:26,430 --> 00:06:28,750 بسیاری از جزئیات آبدار وجود دارد در زیر وجود دارد. 132 00:06:28,750 --> 00:06:31,920 و این همان چیزی است که خود را کامپیوتر با اینتل در داخل 133 00:06:31,920 --> 00:06:33,940 به ویژه متمایز است. 134 00:06:33,940 --> 00:06:37,020 >> بنابراین در آن توجه داشته باشید، اگر شما می خواهم به به ما بپیوندید برای ناهار روز جمعه، نمی رویم 135 00:06:37,020 --> 00:06:41,570 به مکان معمول cs50.net/rsvp، 1:15 PM این جمعه. 136 00:06:41,570 --> 00:06:43,400 و در حال حاضر چند اطلاعیه ها. 137 00:06:43,400 --> 00:06:44,670 بنابراین ما باید برخی از اخبار خوب است. 138 00:06:44,670 --> 00:06:45,970 و ما باید برخی از اخبار بد است. 139 00:06:45,970 --> 00:06:47,260 شروع با برخی از خبر خوب در اینجا. 140 00:06:47,260 --> 00:06:52,038 141 00:06:52,038 --> 00:06:54,510 >> [ناله] 142 00:06:54,510 --> 00:06:54,710 >> بسیار خوب. 143 00:06:54,710 --> 00:06:56,670 خوب، آن را از لحاظ فنی یک روز تعطیل است، بنابراین آن نه آنقدر هدیه ای از ما. 144 00:06:56,670 --> 00:06:58,030 اما پس از آن خبر بد البته. 145 00:06:58,030 --> 00:07:00,550 146 00:07:00,550 --> 00:07:01,880 >> [ناله] 147 00:07:01,880 --> 00:07:03,530 >> من زمان زیادی را صرف در این انیمیشن. 148 00:07:03,530 --> 00:07:04,690 >> [خنده حضار] 149 00:07:04,690 --> 00:07:07,000 >> خواهد بود یک جلسه بررسی وجود دارد این آینده دوشنبه. 150 00:07:07,000 --> 00:07:08,340 این رفتن در 5:30 بعد از ظهر باشد. 151 00:07:08,340 --> 00:07:11,210 ما شما را از تمام این جزئیات به یاد از طریق ایمیل در درس 152 00:07:11,210 --> 00:07:13,470 وب سایت را در فقط یک زن و شوهر از زمان روز. 153 00:07:13,470 --> 00:07:16,610 از آن خواهد شد فیلم برداری شده و در دسترس مدت کوتاهی پس از آن. 154 00:07:16,610 --> 00:07:19,200 بنابراین اگر شما می توانید که دوشنبه شکاف شب، نگران نباشید. 155 00:07:19,200 --> 00:07:22,270 بخش ها این هفته آینده نیز خواهد شد تمرکز بر بررسی برای مسابقه. 156 00:07:22,270 --> 00:07:25,670 اگر بخش خود را در روز دوشنبه، که در واقع تعطیلات دانشگاه، ما خواهد شد 157 00:07:25,670 --> 00:07:26,920 هنوز هم در بخش دیدار خواهد کرد. 158 00:07:26,920 --> 00:07:28,890 اگر می توانید به سادگی نیست که بخش دلیل این که شما در حال رفتن 159 00:07:28,890 --> 00:07:29,860 دور کند، آن برنامه خوب است. 160 00:07:29,860 --> 00:07:33,710 شرکت یکشنبه و یا بخش سه شنبه یا هماهنگ به بخش جیسون، که 161 00:07:33,710 --> 00:07:35,110 آنلاین در دسترس است. 162 00:07:35,110 --> 00:07:37,490 >> بنابراین، خبر بد تر. 163 00:07:37,490 --> 00:07:41,960 بنابراین با توجه به برنامه درسی، ما باید سخنرانی جمعه آینده. 164 00:07:41,960 --> 00:07:43,690 اما خبر خوب - 165 00:07:43,690 --> 00:07:44,860 به روشنی، من زمان زیادی را در این مورد به سر برد. 166 00:07:44,860 --> 00:07:45,280 >> [خنده حضار] 167 00:07:45,280 --> 00:07:47,140 >> خواهیم آینده سخنرانی روز جمعه را لغو نمایید. 168 00:07:47,140 --> 00:07:50,590 به طوری که یک هدیه ای برای ما خواهد بود، بنابراین شما واقعا می تواند یک استراحت خوبی در 169 00:07:50,590 --> 00:07:52,990 بین این هفته و دو هفته از این رو. 170 00:07:52,990 --> 00:07:57,460 بنابراین هیچ هفته آینده سخنرانی ها، فقط یک کوچک مسابقه کمی، که شما باید 171 00:07:57,460 --> 00:07:59,030 هیجان زده شدن به طور فزاینده ای. 172 00:07:59,030 --> 00:08:03,870 >> پس اجازه دهید در حال حاضر به نوبه خود توجه ما را به چیزی است که در واقع بصری تر 173 00:08:03,870 --> 00:08:06,990 و هیجان انگیز تر و به مجموعه ای از مرحله چه خبر است در آسمان شهر 174 00:08:06,990 --> 00:08:08,420 فقط یک زن و شوهر از هفته. 175 00:08:08,420 --> 00:08:12,160 پس از مسابقه اول، ما به نوبه خود تمرکز از مجموعه مسائل ما به دیگری 176 00:08:12,160 --> 00:08:16,710 مشکل دامنه خاص، که از پزشکی قانونی و یا امنیت به طور کلی. 177 00:08:16,710 --> 00:08:19,550 >> در واقع، سنت با این مشکل مجموعه برای من یکی از 178 00:08:19,550 --> 00:08:24,850 آموزش همکار یا CAS راه رفتن در سراسر پردیس در نظر گرفتن برخی از عکس ها 179 00:08:24,850 --> 00:08:29,450 شناسایی اما غیر از مردم آشکار، مکان ها، یا چیزها، پس از آن هر سال من 180 00:08:29,450 --> 00:08:34,520 به نحوی مدیریت به طور تصادفی حذف یا فاسد کارت رسانه های دیجیتال 181 00:08:34,520 --> 00:08:35,720 که در داخل دوربین ما. 182 00:08:35,720 --> 00:08:36,860 اما هیچ معامله بزرگ است. 183 00:08:36,860 --> 00:08:39,200 من می توانید پیش بروید و پلاگین که به کامپیوتر من. 184 00:08:39,200 --> 00:08:43,010 من می توانم یک تصویر قانونی از آن، بنابراین به صحبت می کنند، با کپی کردن صفر و 185 00:08:43,010 --> 00:08:46,830 آنهایی که در این بازی که کارت حافظه، اعم از یک کارت SD خود و یا کارت کامپکت فلش یا 186 00:08:46,830 --> 00:08:48,100 هر آنچه که شما با آن آشنا هستید. 187 00:08:48,100 --> 00:08:49,300 و پس از آن ما می توانیم از دست آن. 188 00:08:49,300 --> 00:08:53,190 >> و به این ترتیب چالش پیش رو در میان دیگر همه چیز برای شما، خواهد بود برای نوشتن 189 00:08:53,190 --> 00:08:58,630 کد C که بهبود یک دسته کامل از عکس JPEG را برای من و نشان خواهد بود 190 00:08:58,630 --> 00:09:00,190 این افراد، مکان ها، و یا همه چیز. 191 00:09:00,190 --> 00:09:03,340 و ما نیز باید در این مسئله صحبت می کنید، مجموعه ای و در روزهای آینده، در حدود 192 00:09:03,340 --> 00:09:04,440 گرافیک به طور کلی. 193 00:09:04,440 --> 00:09:06,140 ما به آنها استفاده می شود، البته، برای شکستن. 194 00:09:06,140 --> 00:09:09,080 اما تو مرتب کردن بر اساس گرفته شده برای اعطا وجود دارد این مفاهیم سطح بالا وجود دارد 195 00:09:09,080 --> 00:09:10,680 مستطیل و بیضی است. 196 00:09:10,680 --> 00:09:12,450 اما در زیر کاپوت پیکسل وجود دارد. 197 00:09:12,450 --> 00:09:14,370 و شما تا به حال برای شروع فکر کردن در مورد کسانی که. 198 00:09:14,370 --> 00:09:18,800 و یا شما برای P-مجموعه 4 باید به فکر می کنم در مورد شکاف بین آجر های خود را، چگونه 199 00:09:18,800 --> 00:09:21,990 به سرعت شما در حال توپ در حال حرکت در سراسر شکستن صفحه نمایش برای. 200 00:09:21,990 --> 00:09:24,830 بنابراین این مفهوم وجود دارد نقطه بر روی صفحه نمایش خود را که 201 00:09:24,830 --> 00:09:26,290 آمده را به بازی در حال حاضر. 202 00:09:26,290 --> 00:09:29,430 >> حالا چه می بینید، هر چند، آن چیزی است که شما بر روی صفحه نمایش کامپیوتر دریافت کنید. 203 00:09:29,430 --> 00:09:33,680 اگر شما تا کنون به تماشای برخی از خوب یا تلویزیون بد، شانس آنها تقریبا 204 00:09:33,680 --> 00:09:36,280 درمان مخاطبان مانند technophobes ها که واقعا نمی 205 00:09:36,280 --> 00:09:37,630 می دانم که خیلی در مورد محاسبات. 206 00:09:37,630 --> 00:09:40,840 و پس از آن بسیار آسان است برای پلیس کارآگاه به گفتن نیست، می تواند به شما 207 00:09:40,840 --> 00:09:41,710 تمیز کردن که برای من؟ 208 00:09:41,710 --> 00:09:42,710 یا افزایش، درست است؟ 209 00:09:42,710 --> 00:09:45,550 افزایش است مانند کلمه وزوز در هر نشان می دهد مربوط به جرم و جنایت. 210 00:09:45,550 --> 00:09:49,240 و واقعیت این است که اگر شما را بسیار تصویر تار یک مظنون انجام 211 00:09:49,240 --> 00:09:51,620 چیزی بد، شما می توانید فقط آن را بالا ببرد. 212 00:09:51,620 --> 00:09:53,080 شما نمی توانید در بی نهایت زوم. 213 00:09:53,080 --> 00:09:56,350 شما نمی توانید در تابیدن کسی را ببینید چشم که مرتکب 214 00:09:56,350 --> 00:09:59,860 جرم خاص، با وجود شیوع این در تلویزیون. 215 00:09:59,860 --> 00:10:04,110 >> و به طوری که با اجازه انگیزه که مشکل آینده با یک نگاه اجمالی در 216 00:10:04,110 --> 00:10:05,765 برخی از نشان می دهد که با شما ممکن است آشنا باشد. 217 00:10:05,765 --> 00:10:06,500 >> [پخش ویدئو] 218 00:10:06,500 --> 00:10:07,835 >> OK را بزنید. 219 00:10:07,835 --> 00:10:09,956 در حال حاضر، بیایید یک نگاه خوبی در شما. 220 00:10:09,956 --> 00:10:17,060 221 00:10:17,060 --> 00:10:17,766 >> ، نگه از آن. 222 00:10:17,766 --> 00:10:18,658 اجرای آن پشت. 223 00:10:18,658 --> 00:10:19,550 >> یک دقیقه صبر کنید. 224 00:10:19,550 --> 00:10:21,580 برو درست است. 225 00:10:21,580 --> 00:10:21,800 >> وجود دارد. 226 00:10:21,800 --> 00:10:22,690 یخ که. 227 00:10:22,690 --> 00:10:23,692 >> صفحه نمایش کامل. 228 00:10:23,692 --> 00:10:23,846 >> OK را بزنید. 229 00:10:23,846 --> 00:10:24,154 یخ که. 230 00:10:24,154 --> 00:10:25,140 >> سفت کردن بر روی آن، بله؟ 231 00:10:25,140 --> 00:10:27,090 >> بردار در آن مرد چرخ عقب. 232 00:10:27,090 --> 00:10:29,730 >> زوم در حق در اینجا در این نقطه است. 233 00:10:29,730 --> 00:10:33,700 >> با استفاده از تجهیزات مناسب، عکس برداری را می توان بزرگ و تیز. 234 00:10:33,700 --> 00:10:34,490 >> چه خبر؟ 235 00:10:34,490 --> 00:10:35,870 >> این برنامه افزایش است. 236 00:10:35,870 --> 00:10:36,793 >> آیا می توانم به شما روشن است که تا هر؟ 237 00:10:36,793 --> 00:10:38,560 >> من نمی دانم. 238 00:10:38,560 --> 00:10:39,090 بیایید آن را بهبود بخشد. 239 00:10:39,090 --> 00:10:41,690 >> بهبود بخش A-6. 240 00:10:41,690 --> 00:10:43,510 >> -I جزئیات افزایش یافته است و - 241 00:10:43,510 --> 00:10:44,456 >> من فکر می کنم به اندازه کافی به منظور ارتقاء وجود دارد. 242 00:10:44,456 --> 00:10:45,402 انتشار آن را به روی صفحه نمایش من. 243 00:10:45,402 --> 00:10:47,300 >> افزایش انعکاس در چشم او. 244 00:10:47,300 --> 00:10:49,330 >> بیایید این را از طریق اجرا افزایش کیفیت ویدئو. 245 00:10:49,330 --> 00:10:50,340 >> ادگار، می تواند شما را بالا ببرد؟ 246 00:10:50,340 --> 00:10:52,320 >> قطع. 247 00:10:52,320 --> 00:10:54,290 >> کار I've در این انعکاس. 248 00:10:54,290 --> 00:10:55,560 >> کسی که بازتاب. 249 00:10:55,560 --> 00:10:56,440 >> انعکاس. 250 00:10:56,440 --> 00:10:57,940 >> انعکاس وجود دارد صورت مرد. 251 00:10:57,940 --> 00:10:58,860 >> بازتاب. 252 00:10:58,860 --> 00:10:59,710 >> وجود دارد یک انعکاس است. 253 00:10:59,710 --> 00:11:00,900 >> زوم در آینه. 254 00:11:00,900 --> 00:11:03,500 >> شما می توانید بازتابی را ببینید. 255 00:11:03,500 --> 00:11:04,700 >> آیا می توانم تصویر شما را در توسعه از اینجا؟ 256 00:11:04,700 --> 00:11:05,700 >> آیا می توانم او را به شما افزایش حق در اینجا؟ 257 00:11:05,700 --> 00:11:06,500 >> آیا می توانم آن را به شما را بالا ببرد؟ 258 00:11:06,500 --> 00:11:07,380 >> آیا می توانم آن را به شما را بالا ببرد؟ 259 00:11:07,380 --> 00:11:08,190 >> آیا ما می توانیم این را بالا ببرد؟ 260 00:11:08,190 --> 00:11:08,940 >> آیا می توانم آن را به شما را بالا ببرد؟ 261 00:11:08,940 --> 00:11:10,280 >> نگه دارید در دوم، من را بالا ببرد. 262 00:11:10,280 --> 00:11:11,570 >> زوم بر روی درب. 263 00:11:11,570 --> 00:11:12,180 >> -X10. 264 00:11:12,180 --> 00:11:13,052 >> زوم. 265 00:11:13,052 --> 00:11:13,197 >> [خنده حضار] 266 00:11:13,197 --> 00:11:14,360 >> حرکت شوید. 267 00:11:14,360 --> 00:11:15,100 >> صبر کنید، متوقف شود. 268 00:11:15,100 --> 00:11:15,740 >> توقف. 269 00:11:15,740 --> 00:11:16,290 >> آن تامل است. 270 00:11:16,290 --> 00:11:19,390 >> چرخش 75 درجه در اطراف لطفا عمودی است. 271 00:11:19,390 --> 00:11:19,886 >> [خنده حضار] 272 00:11:19,886 --> 00:11:24,350 >> توقف، و بازگشت به بخش در مورد درب دوباره. 273 00:11:24,350 --> 00:11:26,330 >> کردم یک تقویت کننده تصویر است که می تواند بیت مپ؟ 274 00:11:26,330 --> 00:11:28,990 >> شاید ما می توانیم پرادیپ سن استفاده روش برای دیدن به ویندوز. 275 00:11:28,990 --> 00:11:30,680 >> این نرم افزار دولت از هنر است. 276 00:11:30,680 --> 00:11:31,676 >> ارزش آیکون خاموش است. 277 00:11:31,676 --> 00:11:34,166 >> با ترکیب راست الگوریتم باشد. 278 00:11:34,166 --> 00:11:38,399 >> او الگوریتم های نور گرفته سطح بعدی و من می توانم آنها را به استفاده از 279 00:11:38,399 --> 00:11:38,648 افزایش این عکس. 280 00:11:38,648 --> 00:11:42,050 >> قفل و تصویر را بزرگ تر ببینید. محور z. 281 00:11:42,050 --> 00:11:42,760 >> -Enhance استفاده کنید. 282 00:11:42,760 --> 00:11:43,060 >> -Enhance استفاده کنید. 283 00:11:43,060 --> 00:11:43,760 >> -Enhance استفاده کنید. 284 00:11:43,760 --> 00:11:45,010 >> یخ و بالا ببرد. 285 00:11:45,010 --> 00:11:47,470 286 00:11:47,470 --> 00:11:47,910 >> [END پخش ویدئو] 287 00:11:47,910 --> 00:11:51,470 >> دیوید J. مالان: بنابراین مشکل تنظیم 5 همان چیزی است که در پیش روست وجود دارد. 288 00:11:51,470 --> 00:11:55,260 بنابراین ما به زودی خواهید درک بهتر از زمانی که و به همین دلیل شما می توانید 289 00:11:55,260 --> 00:11:57,300 و ما نمی تواند در آن راه را بالا ببرد. 290 00:11:57,300 --> 00:12:00,090 اما در ابتدا، اجازه دهید به توجه ما به برخی از بلوک های ساختمان خواهیم 291 00:12:00,090 --> 00:12:02,250 نیاز به قادر به گفتن این داستان. 292 00:12:02,250 --> 00:12:05,580 >> بنابراین به یاد بیاورید که ما به خود جلب کرد این تصویر در دوشنبه و یک کمی هفته گذشته است. 293 00:12:05,580 --> 00:12:09,970 و این توصیف طرح از چیزهایی در حافظه کامپیوتر شما در هنگام 294 00:12:09,970 --> 00:12:11,000 برخی از برنامه های در حال اجرا. 295 00:12:11,000 --> 00:12:14,310 بخش فن آوری تا بالا، به یاد می آورند، اشاره دارد به صفر واقعی و آنهایی که 296 00:12:14,310 --> 00:12:16,000 که برنامه شما را تشکیل می دهند. 297 00:12:16,000 --> 00:12:19,340 ، زیر آن وجود دارد، برخی از مقداردهی اولیه و یا داده های مقدار دهی نکردن، که به طور معمول 298 00:12:19,340 --> 00:12:22,910 اشاره به چیزهایی مانند ثابت یا رشته یا متغیر جهانی است که 299 00:12:22,910 --> 00:12:24,200 در پیشبرد اعلام شده است. 300 00:12:24,200 --> 00:12:26,500 پشته وجود دارد، اما ما می آیند برگشت به که در یک بیت. 301 00:12:26,500 --> 00:12:27,410 >> و پس از آن پشته وجود دارد. 302 00:12:27,410 --> 00:12:30,660 بسیار شبیه به انبوهی از سینی های در کافه تریا، این است که در آن حافظه می شود 303 00:12:30,660 --> 00:12:33,610 لایه و چند لایه هر زمان که شما به آنچه که در برنامه؟ 304 00:12:33,610 --> 00:12:36,380 305 00:12:36,380 --> 00:12:37,730 استفاده از پشته برای چیست؟ 306 00:12:37,730 --> 00:12:39,320 >> آره؟ 307 00:12:39,320 --> 00:12:40,000 >> عملکرد. 308 00:12:40,000 --> 00:12:42,890 هر زمان که شما یک تابع، آن را آن به بریدن حافظه داده 309 00:12:42,890 --> 00:12:45,020 متغیرهای محلی و پارامترهای آن. 310 00:12:45,020 --> 00:12:48,810 و در pictorially، ما می بینیم که با هر تابع های پی در پی نامیده می شود، زمانی که 311 00:12:48,810 --> 00:12:52,520 تماس B تماس C تماس D، بر روی پشته لایه. 312 00:12:52,520 --> 00:12:55,630 و در هر یک از آن برش حافظه است که اساسا یک دامنه منحصر به فرد است 313 00:12:55,630 --> 00:12:58,590 برای این تابع، که، البته، مشکل است اگر می خواهید به دست 314 00:12:58,590 --> 00:13:01,850 از یک تابع خود را به یکی دیگر از قطعه داده است که شما آن را می خواهم 315 00:13:01,850 --> 00:13:03,500 جهش یا تغییر. 316 00:13:03,500 --> 00:13:08,060 >> پس چه راه حل ما را قادر می سازد یک تابع ارائه شده توسط یک پشته 317 00:13:08,060 --> 00:13:11,390 قاب برای تغییر حافظه داخل یکی دیگر از قاب پشته؟ 318 00:13:11,390 --> 00:13:14,590 چگونه می توانم این دو بحث به یکدیگر؟ 319 00:13:14,590 --> 00:13:18,510 بنابراین از طریق اشاره گر ها یا آدرس، که، دوباره، فقط توصیف جایی که در 320 00:13:18,510 --> 00:13:22,280 حافظه، راه خاص تعداد نیش می زنند، خاص 321 00:13:22,280 --> 00:13:23,830 ارزش را می توان یافت. 322 00:13:23,830 --> 00:13:26,860 بنابراین زمان گذشته به خاطر بیاورید بیش از حد ما ادامه داد: داستان و نگاه 323 00:13:26,860 --> 00:13:28,280 نسبتا برنامه حشره دار. 324 00:13:28,280 --> 00:13:32,900 و این برنامه حشره دار برای چند است دلایل، اما یکی از نگران کننده ترین است 325 00:13:32,900 --> 00:13:34,620 دلیل آن است که نتواند برای بررسی چه؟ 326 00:13:34,620 --> 00:13:39,111 327 00:13:39,111 --> 00:13:40,450 >> بله، با مشکل مواجه شد به بررسی ورودی. 328 00:13:40,450 --> 00:13:41,870 پوزش می طلبیم؟ 329 00:13:41,870 --> 00:13:43,880 >> اگر آن را بیش از 12 کاراکتر است. 330 00:13:43,880 --> 00:13:47,260 بنابراین بسیار هوشمندانه، در هنگام فراخوانی memcopy، که، به عنوان نام نشان می دهد، فقط 331 00:13:47,260 --> 00:13:50,630 کپی حافظه از آرگومان دوم آن به آرگومان اول خود را. 332 00:13:50,630 --> 00:13:54,730 آرگومان سوم، بسیار هوشمندانه است، بررسی تا مطمئن شوید که شما انجام نمی 333 00:13:54,730 --> 00:13:59,400 کپی بیش از، در این مورد، طول بار، تعدادی از شخصیت های، 334 00:13:59,400 --> 00:14:03,810 به مقصد، این است که آرایه C. اما مشکل این است که آنچه 335 00:14:03,810 --> 00:14:07,230 اگر C به خودی خود به اندازه کافی بزرگ نیست که مسئولیت رسیدگی به که؟ 336 00:14:07,230 --> 00:14:09,900 شما در حال رفتن به کپی کردن تعداد کلمه در ادامه متن است که به شما داده شده ام. 337 00:14:09,900 --> 00:14:13,040 اما چه چیزی شما را در واقع بیشتر بایت از شما اتاق را برای؟ 338 00:14:13,040 --> 00:14:16,770 >> خوب، این برنامه بسیار احمقانه فقط در کورکورانه درآمد حاصل را به هر آنچه در آن است 339 00:14:16,770 --> 00:14:20,650 داده می شود، سلام بک اسلش 0 بزرگ اگر رشته کوتاه است 340 00:14:20,650 --> 00:14:22,040 به اندازه کافی، مانند پنج کاراکتر. 341 00:14:22,040 --> 00:14:26,470 اما اگر آن را در واقع 12 کاراکتر یا 1،200 کاراکتر، ما هم گذشته را دیدم 342 00:14:26,470 --> 00:14:29,380 که شما فقط رفتن به طور کامل بازنویسی حافظه که 343 00:14:29,380 --> 00:14:30,470 به تو تعلق ندارد. 344 00:14:30,470 --> 00:14:34,390 و بدترین حالت، اگر شما بازنویسی که بخش قرمز وجود دارد که ما به نام 345 00:14:34,390 --> 00:14:35,380 بازگشت آدرس - 346 00:14:35,380 --> 00:14:38,370 این است که در آن کامپیوتر به صورت خودکار، برای شما، در پشت 347 00:14:38,370 --> 00:14:43,130 صحنه، tucks دور یک مقدار 32 بیتی است که آن را به چه آدرس آن را باید به یاد 348 00:14:43,130 --> 00:14:47,080 بازگشت زمانی که تولی، این تابع دیگر، انجام شده است اجرا. 349 00:14:47,080 --> 00:14:49,320 این خرده های نانی از انواع که به آن برمی گرداند. 350 00:14:49,320 --> 00:14:52,490 اگر شما بازنویسی که به طور بالقوه، اگر شما پسر بد هستید، می تواند می تواند 351 00:14:52,490 --> 00:14:54,750 به طور بالقوه سر می برد کامپیوتر کسی. 352 00:14:54,750 --> 00:14:58,020 و شما قطعا سقوط آن را در اکثر موارد. 353 00:14:58,020 --> 00:15:01,690 >> در حال حاضر این مشکل فقط تشدید شد همانطور که ما شروع به صحبت کردن در مورد حافظه 354 00:15:01,690 --> 00:15:03,010 مدیریت به طور کلی. 355 00:15:03,010 --> 00:15:07,150 و malloc برای تخصیص حافظه است، تابع است که ما می توانیم با استفاده از به اختصاص 356 00:15:07,150 --> 00:15:11,260 حافظه زمانی که ما را در پیشبرد دانم که که ما ممکن است برخی از نیاز. 357 00:15:11,260 --> 00:15:13,960 بنابراین، برای مثال، اگر من به عقب برگردید به لوازم در اینجا. 358 00:15:13,960 --> 00:15:21,010 و من باز کردن از آخرین باری hello2.c، یاد این برنامه در اینجا، که نگاه 359 00:15:21,010 --> 00:15:23,500 چیزی کمی شبیه به این، فقط سه خط - 360 00:15:23,500 --> 00:15:27,940 نام خود را، پس از آن نام رشته، دولت در سمت چپ، برابر getstring است. 361 00:15:27,940 --> 00:15:29,690 و سپس ما آن را چاپ، نام کاربر. 362 00:15:29,690 --> 00:15:31,170 >> بنابراین این یک برنامه فوق العاده ساده بود. 363 00:15:31,170 --> 00:15:34,870 برای روشن، اجازه دهید من جلو بروید و سلام-2. 364 00:15:34,870 --> 00:15:36,680 من قصد دارم برای انجام نقطه علامت ممیز خوش آمدید 2. 365 00:15:36,680 --> 00:15:37,750 دولت نام خود را - 366 00:15:37,750 --> 00:15:38,140 دیوید. 367 00:15:38,140 --> 00:15:38,840 را وارد کنید. 368 00:15:38,840 --> 00:15:39,540 سلام دیوید. 369 00:15:39,540 --> 00:15:41,060 به نظر می رسد به کار خوب. 370 00:15:41,060 --> 00:15:43,140 اما آنچه که واقعا در رفتن در زیر کاپوت اینجا؟ 371 00:15:43,140 --> 00:15:44,670 اول اجازه دهید به پوست پشت برخی از لایه های. 372 00:15:44,670 --> 00:15:48,380 رشته فقط یک مترادف ایم تحقق برای چه؟ 373 00:15:48,380 --> 00:15:49,110 ستاره چار. 374 00:15:49,110 --> 00:15:52,740 پس آن را کمی بیشتر محرمانه را بگذارید اما بیشتر از لحاظ فنی درست است که این 375 00:15:52,740 --> 00:15:55,570 یک ستاره کاراکتر، که بدان معنی است که نام، بله، متغیر است. 376 00:15:55,570 --> 00:15:59,920 اما آنچه نام فروشگاه آدرس کاراکتر، که احساس کمی عجیب و غریب است 377 00:15:59,920 --> 00:16:01,050 چون من گرفتن یک رشته. 378 00:16:01,050 --> 00:16:03,580 من از برگشت های متعدد کاراکتر یک کاراکتر. 379 00:16:03,580 --> 00:16:07,400 >> اما البته، شما فقط برای اولین بار نیاز آدرس کاراکتر به یاد داشته باشید که در آن 380 00:16:07,400 --> 00:16:08,870 تمام رشته است، زیرا چرا؟ 381 00:16:08,870 --> 00:16:12,700 چگونه می توانم به شما از شکل که در آن پایان رشته دانستن آغاز؟ 382 00:16:12,700 --> 00:16:13,630 بک اسلش صفر. 383 00:16:13,630 --> 00:16:17,260 بنابراین با این دو سرنخ را کشف کردن قبل از شروع و پایان 384 00:16:17,260 --> 00:16:20,280 هر رشته هستند، تا زمانی که آنها به درستی که با تهی تشکیل 385 00:16:20,280 --> 00:16:22,110 نابودگر، که اسلش صفر. 386 00:16:22,110 --> 00:16:24,520 >> اما این تماس getstring. 387 00:16:24,520 --> 00:16:28,020 و معلوم است که getstring تمام این مدت بوده است نوع 388 00:16:28,020 --> 00:16:28,820 تقلب برای ما. 389 00:16:28,820 --> 00:16:32,460 انجام شده است، تا مطمئن شوید این کار، گرفتن یک رشته از کاربر. 390 00:16:32,460 --> 00:16:34,580 اما در جایی که حافظه از آینده؟ 391 00:16:34,580 --> 00:16:38,440 اگر ما به عقب برویم به تصویر و اعمال تعریف از تنها 392 00:16:38,440 --> 00:16:42,610 لحظه ای پیش، که پشته است که در آن حافظه می رود زمانی که توابع نامیده می شوند، 393 00:16:42,610 --> 00:16:45,370 با این منطق، زمانی که با شما تماس getstring، و سپس من در تایپ 394 00:16:45,370 --> 00:16:50,900 D-A-V-I-D را وارد کنید، که در آن D-A-V-I-D بک اسلش صفر ذخیره می شود، بر اساس 395 00:16:50,900 --> 00:16:53,480 داستان ما به ما گفته ایم دور؟ 396 00:16:53,480 --> 00:16:55,190 >> به نظر می رسد در پشته، درست است؟ 397 00:16:55,190 --> 00:16:58,120 هنگامی که با شما تماس گرفتن رشته شما قطعه کمی از حافظه در پشته. 398 00:16:58,120 --> 00:17:01,630 پس از آن می ایستد به همین دلیل است که D-A-V-I-D بک اسلش صفر ذخیره شده است 399 00:17:01,630 --> 00:17:02,770 وجود دارد در پشته. 400 00:17:02,770 --> 00:17:07,680 اما صبر کنید یک دقیقه، getstring بازده این رشته، پس به صحبت می کنند، که به معنی 401 00:17:07,680 --> 00:17:11,700 سینی از کافه تریا گرفته شده است پشته. 402 00:17:11,700 --> 00:17:14,560 و ما گفت: در زمان گذشته است که به زودی به عنوان یک تابع برمی گرداند، و شما را که 403 00:17:14,560 --> 00:17:20,109 سینی، پس به صحبت می کنند، خارج از پشته، چه می تواند به شما در مورد باقی مانده از فرض 404 00:17:20,109 --> 00:17:21,819 که حافظه؟ 405 00:17:21,819 --> 00:17:25,160 من مرتب از آنها را به عنوان علامت سوال redrew زیرا آنها به طور موثر تبدیل 406 00:17:25,160 --> 00:17:26,250 ارزش های ناشناخته. 407 00:17:26,250 --> 00:17:29,500 می توان آنها را زمانی که برخی از مورد استفاده مجدد قرار تابع بعدی نامیده می شود. 408 00:17:29,500 --> 00:17:31,870 >> به عبارت دیگر، اگر ما اتفاق می افتد به ذخیره سازی - 409 00:17:31,870 --> 00:17:34,350 من یک عکس سریع خواهید در قرعه کشی در اینجا از پشته. 410 00:17:34,350 --> 00:17:38,690 اگر ما اتفاق می افتد را به رسم و پایین از بخش حافظه من، و ما می گویم 411 00:17:38,690 --> 00:17:42,230 که این محل از حافظه است اشغال شده توسط اصلی و شاید ارگ c و 412 00:17:42,230 --> 00:17:46,790 ارگ v و هر چیز دیگری در این برنامه، هنگامی که getstring نامیده می شود. 413 00:17:46,790 --> 00:17:51,120 احتمالا getstring می شود یک تکه از حافظه در اینجا. 414 00:17:51,120 --> 00:17:53,940 و سپس D-A-V-I-D هر طور شده به پایان می رسد تا در این تابع. 415 00:17:53,940 --> 00:17:55,320 و من قصد دارم به ساده. 416 00:17:55,320 --> 00:18:00,050 اما بیایید فرض کنیم که آن D-A-V-I-D بک اسلش صفر. 417 00:18:00,050 --> 00:18:03,500 بنابراین بسیاری از این بایت در استفاده می شود از قاب برای getstring. 418 00:18:03,500 --> 00:18:08,270 >> اما به محض به عنوان بازده getstring، ما گفت: آخرین باری که این حافظه بیش از 419 00:18:08,270 --> 00:18:11,340 در اینجا تمام می شود - woops! - 420 00:18:11,340 --> 00:18:14,270 تمام می شود به طور موثر پاک شده است. 421 00:18:14,270 --> 00:18:17,220 و ما می توانیم از این در حال حاضر به عنوان سوال فکر می کنم علائم به دلیل که می داند 422 00:18:17,220 --> 00:18:18,720 چه خبر است برای تبدیل شدن به آن حافظه است. 423 00:18:18,720 --> 00:18:22,130 در واقع، من بسیار اغلب عملکردهای تماس دیگر از getstring. 424 00:18:22,130 --> 00:18:24,750 و به محض این که من به برخی دیگر تابع از getstring است، شاید نه در 425 00:18:24,750 --> 00:18:28,860 برنامه های ویژه ما فقط نگاه اما برخی دیگر، قطعا برخی دیگر از 426 00:18:28,860 --> 00:18:34,180 تابع ممکن است در نهایت با توجه به این نقطه بعدی در پشته. 427 00:18:34,180 --> 00:18:39,410 >> بنابراین آن می تواند این باشد که فروشگاه های getstring D-A-V-I-D در پشته چون من 428 00:18:39,410 --> 00:18:41,040 بلافاصله پس از از دست دادن دسترسی به آن را. 429 00:18:41,040 --> 00:18:43,720 اما ما می دانیم که آنها getstring تنها می گرداند چه؟ 430 00:18:43,720 --> 00:18:47,220 آن را به بازگشت نیست من شش حرف. 431 00:18:47,220 --> 00:18:51,090 آنچه در آن است واقعا بازگشت بود نتیجه می گیریم زمان آخرین؟ 432 00:18:51,090 --> 00:18:52,480 آدرس اول. 433 00:18:52,480 --> 00:18:56,650 تا به نحوی، وقتی شما نام getstring، تخصیص یک تکه از حافظه 434 00:18:56,650 --> 00:18:59,620 رشته است که نوع و کاربران آدرس پس از بازگشت از آن. 435 00:18:59,620 --> 00:19:02,930 و معلوم است که هنگامی که شما می خواهید تابع برای تخصیص حافظه در این 436 00:19:02,930 --> 00:19:08,390 راه و بازگشت به فردی که به نام این تابع، آدرس 437 00:19:08,390 --> 00:19:11,870 که تکه حافظه، شما کاملا می توانید آن را در پشته قرار داده نشده 438 00:19:11,870 --> 00:19:14,750 پایین، به دلیل عملکرد آن را فقط رفتن به شما نمی شود بسیار 439 00:19:14,750 --> 00:19:17,800 سرعت، بنابراین شما احتمالا می توانید حدس بزنید که در آن احتمالا ما در حال رفتن به آن بازی شیر یا خط 440 00:19:17,800 --> 00:19:20,130 به جای آن، به اصطلاح پشته. 441 00:19:20,130 --> 00:19:25,290 >> بنابراین بین پایین از حافظه خود را طرح و بالا از حافظه خود را 442 00:19:25,290 --> 00:19:26,820 طرح یک دسته کامل از بخش. 443 00:19:26,820 --> 00:19:29,270 یکی از این پشته، و راست در بالای آن پشته است. 444 00:19:29,270 --> 00:19:33,680 و پشته فقط یک تکه مختلف حافظه است که برای توابع استفاده نمی 445 00:19:33,680 --> 00:19:34,770 زمانی که آنها نامیده می شود. 446 00:19:34,770 --> 00:19:38,100 آن را برای حافظه دراز مدت استفاده می شود، زمانی که شما می خواهید یک تابع برای گرفتن برخی از 447 00:19:38,100 --> 00:19:42,700 حافظه و قادر به چسبیدن به آن بدون از دست دادن کنترل بر آن. 448 00:19:42,700 --> 00:19:45,550 >> حالا شما می توانید شاید بلافاصله ببینید که این نیست 449 00:19:45,550 --> 00:19:48,060 لزوما یک طراحی کامل است. 450 00:19:48,060 --> 00:19:51,350 به عنوان برنامه خود را به حافظه اختصاص داده شده پشته، و یا به عنوان با شما تماس بیشتر و 451 00:19:51,350 --> 00:19:55,540 توابع بیشتری را، و یا به عنوان شما اختصاص حافظه در پشته با malloc به عنوان 452 00:19:55,540 --> 00:20:00,690 getstring انجام شده است، چه به وضوح به نظر می رسد مشکل اجتناب ناپذیر است؟ 453 00:20:00,690 --> 00:20:00,860 >> سمت راست. 454 00:20:00,860 --> 00:20:03,150 مانند این واقعیت است که این فلش در هر یک از دیگر اشاره 455 00:20:03,150 --> 00:20:04,380 به خوبی جواب نمی دهد. 456 00:20:04,380 --> 00:20:08,630 و در واقع، ما خیلی به سرعت می تواند سقوط یک برنامه در هر تعداد از راه. 457 00:20:08,630 --> 00:20:12,050 در واقع، من فکر می کنم ما ممکن است این به طور تصادفی یک بار انجام می شود. 458 00:20:12,050 --> 00:20:14,020 یا اگر نه، بیایید آن را انجام دهد. عمدا در حال حاضر. 459 00:20:14,020 --> 00:20:21,330 اجازه دهید من جلو بروید و نوشتن فوق العاده به سرعت برنامه به نام dontdothis.c. 460 00:20:21,330 --> 00:20:26,730 و در حال حاضر من در اینجا بروید و انجام تیز عبارتند از: stdio.h. 461 00:20:26,730 --> 00:20:32,620 اجازه دهید اعلام تابع تولی طول می کشد بدون آرگومان است، که 462 00:20:32,620 --> 00:20:34,040 نیز از درجه اعتبار ساقط می شود. 463 00:20:34,040 --> 00:20:37,830 >> و تنها چیزی که تولی رفتن به انجام است تماس تولی، که احتمالا نه 464 00:20:37,830 --> 00:20:39,100 باهوش ترین ایده است، اما پس از آن می شود. 465 00:20:39,100 --> 00:20:40,490 گوش و حلق و از درجه اعتبار ساقط اصلی. 466 00:20:40,490 --> 00:20:45,270 در حال حاضر تنها چیزی که اصلی در حال رفتن است انجام دهیم این است تماس تولی نیز هست. 467 00:20:45,270 --> 00:20:51,050 و فقط برای ضربات، من قصد دارم به رفتن پیش رو در اینجا و می گویند چون printf "خوش آمدید از 468 00:20:51,050 --> 00:20:52,340 تولی. " 469 00:20:52,340 --> 00:20:52,890 >> OK را بزنید. 470 00:20:52,890 --> 00:21:00,160 بنابراین اگر من هر گونه اشتباه را ندارد، dontdothis نقطه بریده بریده. 471 00:21:00,160 --> 00:21:01,960 و اجازه دهید آن را در یک پنجره بزرگتر - 472 00:21:01,960 --> 00:21:03,210 نقطه اسلش dontdothis. 473 00:21:03,210 --> 00:21:07,590 474 00:21:07,590 --> 00:21:08,840 بیا. 475 00:21:08,840 --> 00:21:10,940 476 00:21:10,940 --> 00:21:11,890 اوه اوه. 477 00:21:11,890 --> 00:21:13,100 ظاهرا شما می توانید این کار را انجام دهند. 478 00:21:13,100 --> 00:21:15,190 لعنت. 479 00:21:15,190 --> 00:21:16,190 OK را بزنید. 480 00:21:16,190 --> 00:21:16,580 صبر کنید. 481 00:21:16,580 --> 00:21:17,370 ایستاده. 482 00:21:17,370 --> 00:21:18,270 آیا ما - 483 00:21:18,270 --> 00:21:20,110 ما آن را با استفاده. 484 00:21:20,110 --> 00:21:22,050 >> [آه] 485 00:21:22,050 --> 00:21:25,110 >> من می دانم، اما من فکر می کنم ما تنها حذف که. 486 00:21:25,110 --> 00:21:28,410 آه، آره. 487 00:21:28,410 --> 00:21:30,660 لعنت. 488 00:21:30,660 --> 00:21:32,640 حل این راب. 489 00:21:32,640 --> 00:21:34,678 چیست؟ 490 00:21:34,678 --> 00:21:35,928 این بسیار ساده است. 491 00:21:35,928 --> 00:21:43,820 492 00:21:43,820 --> 00:21:47,360 بله، ما بهینه سازی خاموش است. 493 00:21:47,360 --> 00:21:48,970 خوب، ایستاده خداحافظ. 494 00:21:48,970 --> 00:21:49,950 حالا من احساس می کنم بهتر است. 495 00:21:49,950 --> 00:21:51,390 OK را بزنید. 496 00:21:51,390 --> 00:21:51,780 بسیار خوب. 497 00:21:51,780 --> 00:21:53,430 >> بنابراین کامپایل مجدد این - 498 00:21:53,430 --> 00:21:55,880 شما را dontdothis. 499 00:21:55,880 --> 00:22:00,090 شما ممکن است مجبور به تغییر نام این dothis.c در فقط یک لحظه. 500 00:22:00,090 --> 00:22:00,710 گرامی می رویم. 501 00:22:00,710 --> 00:22:01,240 متشکرم. 502 00:22:01,240 --> 00:22:02,050 OK را بزنید. 503 00:22:02,050 --> 00:22:05,480 بنابراین این واقعیت بود که من چاپ چیزی از واقع فقط 504 00:22:05,480 --> 00:22:08,150 کند کردن روند که توسط آن ما رسیده اند که نقطه. 505 00:22:08,150 --> 00:22:08,510 OK را بزنید. 506 00:22:08,510 --> 00:22:08,870 Phew! 507 00:22:08,870 --> 00:22:11,180 >> بنابراین چه چیزی است که در واقع در جریان است؟ 508 00:22:11,180 --> 00:22:14,440 دلیل وجود دارد، فقط به عنوان یک کنار، انجام هر کاری در شرایط ورودی و 509 00:22:14,440 --> 00:22:17,270 خروجی گرایش به آهسته چون شما برای نوشتن کاراکتر به 510 00:22:17,270 --> 00:22:18,600 صفحه نمایش، آن را به حرکت. 511 00:22:18,600 --> 00:22:21,720 بنابراین داستان کوتاه مدت، من تا به حال در واقع اتفاق افتاده است بسیار بی تاب است، ما باید 512 00:22:21,720 --> 00:22:23,260 این نتیجه نهایی نیز هست. 513 00:22:23,260 --> 00:22:26,220 حالا که من سوار از چاپ یو پی اس، ما آن را حق دور. 514 00:22:26,220 --> 00:22:28,410 پس چرا این اتفاق می افتد. 515 00:22:28,410 --> 00:22:31,300 خوب، توضیح ساده، البته، است که تولی احتمالا نباید 516 00:22:31,300 --> 00:22:32,500 شود که خود را. 517 00:22:32,500 --> 00:22:34,470 >> در حال حاضر در شرایط عمومی، این بازگشتی است. 518 00:22:34,470 --> 00:22:36,970 و ما فکر چند هفته پیش بازگشتی خوب است. 519 00:22:36,970 --> 00:22:40,330 بازگشت این راه جادویی است بیان خود را فوق العاده موجز. 520 00:22:40,330 --> 00:22:41,400 و آن را فقط کار می کند. 521 00:22:41,400 --> 00:22:45,060 اما یکی از ویژگی های کلیدی از همه وجود دارد برنامه های بازگشتی که ما صحبت کرده ام 522 00:22:45,060 --> 00:22:48,260 و نگاه تا کنون، که این بود که آنها تا به حال چه؟ 523 00:22:48,260 --> 00:22:52,610 مورد پایه، که برخی از سخت رمزی بود مورد است که در برخی از شرایط گفت: 524 00:22:52,610 --> 00:22:56,210 تولی است، که به وضوح را صدا نمی زنم نه اینجا. 525 00:22:56,210 --> 00:22:58,920 >> بنابراین آنچه که واقعا اتفاق می افتد در این تصویر؟ 526 00:22:58,920 --> 00:23:01,790 خوب، هنگامی که اصلی تماس تولی، می شود یک تکه از حافظه است. 527 00:23:01,790 --> 00:23:04,150 هنگامی که تولی خواستار تولی، از آن میشود یک تکه از حافظه است. 528 00:23:04,150 --> 00:23:06,430 هنگامی که تولی خواستار تولی، آن را می شود یک تکه است. 529 00:23:06,430 --> 00:23:07,080 این می شود یک تکه است. 530 00:23:07,080 --> 00:23:08,120 این می شود یک تکه است. 531 00:23:08,120 --> 00:23:09,460 از آنجا که تولی هرگز بازگشت. 532 00:23:09,460 --> 00:23:12,160 ما هرگز پاک کردن یکی از آن فریم از پشته. 533 00:23:12,160 --> 00:23:15,930 بنابراین ما از طریق دمیدن پشته، به ذکر است که می داند چه چیز دیگری، و 534 00:23:15,930 --> 00:23:19,600 ما در حال تجاوز از مرزهای ما به اصطلاح بخشی از حافظه است. 535 00:23:19,600 --> 00:23:21,790 خطا در تقسیم بندی نادرست. 536 00:23:21,790 --> 00:23:24,110 >> بنابراین راه حل وجود دارد واضح است که این کار را انجام نمی. 537 00:23:24,110 --> 00:23:28,830 اما مفهوم بزرگتر است که، بله، مطلقا برخی از محدودیت وجود دارد، 538 00:23:28,830 --> 00:23:32,470 حتی اگر آن را به خوبی تعریف نشده است، که چگونه بسیاری از توابع شما می توانید در تماس بگیرید 539 00:23:32,470 --> 00:23:34,970 برنامه، چند بار یک تابع می تواند خود تماس بگیرید. 540 00:23:34,970 --> 00:23:38,430 بنابراین حتی اگر ما را موعظه بازگشت به عنوان این چیزی که به طور بالقوه جادویی 541 00:23:38,430 --> 00:23:41,870 چند هفته پیش برای سیگما تابع، و هنگامی که ما داده ها 542 00:23:41,870 --> 00:23:45,270 ساختارها و CS50، خواهید دید که دیگر برنامه های کاربردی برای آن، آن را 543 00:23:45,270 --> 00:23:46,500 لزوما بهترین چیز. 544 00:23:46,500 --> 00:23:50,070 زیرا اگر تابع خود را خواند، خود را خواند، حتی اگر یک پایه وجود دارد 545 00:23:50,070 --> 00:23:54,860 مورد، اگر شما که به حالت پایه برخورد کند برای 1،000 تماس و یا 10،000 تماس، 546 00:23:54,860 --> 00:23:58,800 آن زمان شما ممکن است از اتاق خود را در به اصطلاح پشته و آمار 547 00:23:58,800 --> 00:24:00,400 برخی از بخش های دیگر از حافظه است. 548 00:24:00,400 --> 00:24:03,950 بنابراین آن را بیش از حد می باشد طراحی تجارت کردن بین ظرافت و بین 549 00:24:03,950 --> 00:24:06,920 نیرومندی خاص خود را پیاده سازی. 550 00:24:06,920 --> 00:24:10,780 >> بنابراین یکی دیگر از حرکت نزولی وجود دارد و یا مارپیچ دیگری به آنچه که ما 551 00:24:10,780 --> 00:24:11,720 انجام شده است تا کنون. 552 00:24:11,720 --> 00:24:12,980 هنگامی که من به نام getstring - 553 00:24:12,980 --> 00:24:15,120 اجازه دهید برگردم به خوش آمدید-2. 554 00:24:15,120 --> 00:24:18,170 توجه داشته باشید که من خواستار getstring، که بازگشت به یک آدرس. 555 00:24:18,170 --> 00:24:20,730 و ما امروز ادعا می کنند که آدرس از پشته. 556 00:24:20,730 --> 00:24:24,480 و در حال حاضر من چاپ رشته ای که در آن آدرس. 557 00:24:24,480 --> 00:24:27,000 اما ما هرگز به نام ام مقابل getstring. 558 00:24:27,000 --> 00:24:30,850 ما تا به حال هرگز به calll یک تابع مانند ungetstring، جایی که شما پشت دست 559 00:24:30,850 --> 00:24:31,610 که حافظه. 560 00:24:31,610 --> 00:24:33,250 اما رک و پوست کنده ما احتمالا باید بوده است. 561 00:24:33,250 --> 00:24:37,390 از آنجا که اگر ما در حفظ و پرسیدن از کامپیوتر برای حافظه، از طریق کسی مثل 562 00:24:37,390 --> 00:24:40,830 getstring اما هرگز آن را به عقب، قطعا که بیش از حد موظف است منجر به 563 00:24:40,830 --> 00:24:42,970 مشکلات به موجب آن ما اجرا از حافظه. 564 00:24:42,970 --> 00:24:46,140 >> و در واقع، ما می توانیم برای این نگاه مشکلات با ابزار جدید که استفاده از 565 00:24:46,140 --> 00:24:47,640 کمی مرموز به نوع است. 566 00:24:47,640 --> 00:24:50,960 اما اجازه دهید من جلو بروید و ترشح آن را بر روی صفحه نمایش فقط در یک لحظه. 567 00:24:50,960 --> 00:24:56,940 من قصد دارم به جلو بروید و اجرا Valgrind ها با پارامتر که اولین فرمان 568 00:24:56,940 --> 00:25:00,260 بحث خط نام که برنامه سلام-2. 569 00:25:00,260 --> 00:25:02,650 و متاسفانه به خروجی طرز فجیعی 570 00:25:02,650 --> 00:25:04,290 پیچیده بدون هیچ دلیل خوبی است. 571 00:25:04,290 --> 00:25:06,280 بنابراین ما تمام این ظروف سرباز یا مسافر را ببینید. 572 00:25:06,280 --> 00:25:07,530 دیوید نام من به دولت. 573 00:25:07,530 --> 00:25:09,760 به طوری که این برنامه در واقع در حال اجرا است. 574 00:25:09,760 --> 00:25:11,180 و در حال حاضر ما این خروجی دریافت کنید. 575 00:25:11,180 --> 00:25:13,400 >> بنابراین Valgrind مشابه در روح به GDB. 576 00:25:13,400 --> 00:25:14,950 این یک دیباگر فی نفسه نیست. 577 00:25:14,950 --> 00:25:16,270 اما این جستجوگر حافظه است. 578 00:25:16,270 --> 00:25:20,140 این برنامه ای است که خود را اجرا خواهد کرد برنامه ریزی و به شما بگویم اگر از شما خواسته 579 00:25:20,140 --> 00:25:23,860 کامپیوتر برای حافظه و هرگز آن را به دست پشت، در نتیجه به این معنی که شما باید 580 00:25:23,860 --> 00:25:24,570 نشت حافظه. 581 00:25:24,570 --> 00:25:26,240 و نشت حافظه تمایل به بد. 582 00:25:26,240 --> 00:25:29,120 و شما کاربران از کامپیوتر احتمالا این احساس، که آیا شما یک 583 00:25:29,120 --> 00:25:30,300 مک و یا کامپیوتر. 584 00:25:30,300 --> 00:25:33,730 آیا شما تا به حال کامپیوتر خود را برای استفاده از در حالی که راه اندازی دوباره (Reboot) اجرا نشده است و در چندین 585 00:25:33,730 --> 00:25:36,820 روز، و یا شما فقط رو بسیاری از برنامه های در حال اجرا، و چیز لعنتی 586 00:25:36,820 --> 00:25:42,360 به متوقف ساختن آسیاب را کند می کند، و یا حداقل آن فوق العاده آزار دهنده است استفاده کنید، زیرا 587 00:25:42,360 --> 00:25:44,350 همه چیز فقط آهسته فوق العاده. 588 00:25:44,350 --> 00:25:46,260 >> حالا که می تواند هر تعداد از دلایل. 589 00:25:46,260 --> 00:25:49,600 این می تواند یک حلقه بی نهایت، اشکال در کد کسی، و یا به سادگی بیشتر، از آن 590 00:25:49,600 --> 00:25:53,250 این معنی است که شما با استفاده از بیشتر حافظه، و یا تلاش برای از خود 591 00:25:53,250 --> 00:25:54,920 کامپیوتر واقع است. 592 00:25:54,920 --> 00:25:57,770 و شاید یک اشکال در برخی از برنامه وجود دارد که نگه داشتن درخواست برای حافظه. 593 00:25:57,770 --> 00:26:02,480 مرورگرهای وب برای سال برای بدنام بود این، درخواست برای حافظه بیشتر و بیشتر 594 00:26:02,480 --> 00:26:03,870 اما هرگز آن را توزیع. 595 00:26:03,870 --> 00:26:07,220 مطمئنا، اگر شما فقط یک محدود مقدار حافظه، شما نمی توانید بپرسید 596 00:26:07,220 --> 00:26:09,990 بسیاری از بی نهایت بار برای برخی از این حافظه. 597 00:26:09,990 --> 00:26:13,070 >> و بنابراین، آنچه که شما اینجا را ببینید، حتی اگر دوباره خروجی Valgrind است 598 00:26:13,070 --> 00:26:17,490 بی ارزش پیچیده به نگاه در برای اولین بار، این بخش جالب است. 599 00:26:17,490 --> 00:26:18,890 هیپ - 600 00:26:18,890 --> 00:26:20,060 در استفاده در خروج. 601 00:26:20,060 --> 00:26:22,810 بنابراین در اینجا چقدر حافظه بود در استفاده در پشته در 602 00:26:22,810 --> 00:26:24,300 زمان برنامه من خارج شد - 603 00:26:24,300 --> 00:26:27,280 ظاهرا شش بایت در یک بلوک. 604 00:26:27,280 --> 00:26:28,710 بنابراین من قصد دارم به موج تو دست من در چه بلوک است. 605 00:26:28,710 --> 00:26:31,270 فکر می کنم از آن است که فقط یک تکه، کلمه فنی برای تکه. 606 00:26:31,270 --> 00:26:33,140 اما شش بایت - 607 00:26:33,140 --> 00:26:36,870 شش بایت که چه هستند هنوز هم در حال استفاده بود؟ 608 00:26:36,870 --> 00:26:37,390 >> دقیقا. 609 00:26:37,390 --> 00:26:41,520 D-A-V-I-D بک اسلش صفر، پنج نامه نام علاوه نابودگر تهی. 610 00:26:41,520 --> 00:26:46,350 بنابراین این برنامه Valgrind می متوجه شد که من خواسته برای شش بایت، ظاهرا، با 611 00:26:46,350 --> 00:26:48,950 راه از getstring است، اما هرگز به آنها به عقب. 612 00:26:48,950 --> 00:26:52,030 و در واقع، این ممکن است باشد واضح است اگر برنامه من است سه 613 00:26:52,030 --> 00:26:53,590 خطوط، اما آن را به 300 خط است. 614 00:26:53,590 --> 00:26:56,920 بنابراین ما در واقع می توانید از دستور دیگری به من بدهید آرگومان خط به Valgrind 615 00:26:56,920 --> 00:26:58,290 آن را طولانی تر کند. 616 00:26:58,290 --> 00:26:59,760 این کمی آزار دهنده است به خاطر داشته باشید. 617 00:26:59,760 --> 00:27:01,580 اما اگر من - 618 00:27:01,580 --> 00:27:01,930 اجازه دهید را ببینید. 619 00:27:01,930 --> 00:27:03,540 نشت - 620 00:27:03,540 --> 00:27:05,030 بود آن را نشت - 621 00:27:05,030 --> 00:27:07,580 حتی من را به یاد داشته باشید آنچه در آن خاموش دست است. 622 00:27:07,580 --> 00:27:08,550 >> - چک نشت برابر. 623 00:27:08,550 --> 00:27:10,180 جهت مشاهده فرم خرید، از شما سپاسگزارم. 624 00:27:10,180 --> 00:27:12,520 - چک نشت برابر. 625 00:27:12,520 --> 00:27:13,800 را وارد کنید. 626 00:27:13,800 --> 00:27:14,940 همان برنامه در حال اجرا است. 627 00:27:14,940 --> 00:27:16,180 دیوید دوباره تایپ کنید. 628 00:27:16,180 --> 00:27:17,660 حالا من کمی جزئیات بیشتر را مشاهده کنید. 629 00:27:17,660 --> 00:27:20,890 اما در زیر خلاصه پشته، که یکسان است به چهار است - آه، 630 00:27:20,890 --> 00:27:22,120 این نوع از خوب است. 631 00:27:22,120 --> 00:27:25,460 در حال حاضر Valgrind است در واقع به دنبال کمی در کد من سخت تر است. 632 00:27:25,460 --> 00:27:29,580 و آن را گفت که، ظاهرا، malloc در خط - 633 00:27:29,580 --> 00:27:30,580 ما زوم کردن. 634 00:27:30,580 --> 00:27:31,980 در خط - 635 00:27:31,980 --> 00:27:32,930 ما نمی بینیم چه خط آن است. 636 00:27:32,930 --> 00:27:35,110 اما malloc مقصر اول است. 637 00:27:35,110 --> 00:27:38,630 یک وبلاگ در malloc وجود دارد. 638 00:27:38,630 --> 00:27:39,810 >> همه درست است؟ 639 00:27:39,810 --> 00:27:40,450 خوب، نه. 640 00:27:40,450 --> 00:27:40,940 درست است؟ 641 00:27:40,940 --> 00:27:42,520 من به نام getstring. 642 00:27:42,520 --> 00:27:44,460 getstring ظاهرا خواستار malloc. 643 00:27:44,460 --> 00:27:47,800 پس چه خط کد است ظاهرا در گسل برای داشتن 644 00:27:47,800 --> 00:27:49,050 اختصاص داده شده به این حافظه؟ 645 00:27:49,050 --> 00:27:51,560 646 00:27:51,560 --> 00:27:55,540 بیایید فرض کنیم که هر کس malloc نوشت در اطراف به اندازه کافی بلند است که آن را 647 00:27:55,540 --> 00:27:56,390 تقصیر خود نیست. 648 00:27:56,390 --> 00:27:57,520 پس از آن احتمالا معدن. 649 00:27:57,520 --> 00:28:02,000 getstring در cs50.c - به طوری که در فایل در جایی بر روی کامپیوتر - 650 00:28:02,000 --> 00:28:05,210 در خط 286 به نظر می رسد مقصر است. 651 00:28:05,210 --> 00:28:08,140 حالا بیایید فرض کنیم که cs50 بوده است در اطراف مقدار مناسب و معقول از زمان، به طوری 652 00:28:08,140 --> 00:28:09,720 ما هم معصوم هستند. 653 00:28:09,720 --> 00:28:14,080 و پس از آن احتمالا در getstring که اشکال نهفته است، اما نه در 654 00:28:14,080 --> 00:28:17,810 خط سلام 2.c 18. 655 00:28:17,810 --> 00:28:20,670 >> بنابراین نگاهی به اجازه آنچه که خط 18 بود. 656 00:28:20,670 --> 00:28:21,130 آه. 657 00:28:21,130 --> 00:28:27,130 به نحوی این خط است و نه لزوما نوعی درشکه سبک یک اسبه، فی نفسه است، اما آن است که دلیل آن این است 658 00:28:27,130 --> 00:28:28,630 که در پشت نشت حافظه. 659 00:28:28,630 --> 00:28:32,140 بنابراین فوق العاده به سادگی، چه به طور مستقیم خواهد بود می شود راه حل در اینجا؟ 660 00:28:32,140 --> 00:28:34,710 اگر ما در حال درخواست برای حافظه، هرگز دادن آن را به عقب، و این که به نظر می رسد 661 00:28:34,710 --> 00:28:37,940 مشکل زیرا با گذشت زمان کامپیوتر من ممکن است از حافظه اجرا شود، ممکن است سرعت 662 00:28:37,940 --> 00:28:42,110 پایین، همه چیز بد ممکن است رخ دهد، به خوبی، چه راه حل ساده بصری است؟ 663 00:28:42,110 --> 00:28:43,140 فقط آن را به عقب می دهد. 664 00:28:43,140 --> 00:28:44,770 >> چگونه می توانم شما آزاد کردن که حافظه؟ 665 00:28:44,770 --> 00:28:49,970 خوب، خوشبختانه آن بسیار ساده است فقط می گویند نام رایگان است. 666 00:28:49,970 --> 00:28:51,260 و ما این کار را قبل از آن هرگز انجام داده ام. 667 00:28:51,260 --> 00:28:55,890 اما شما اساسا می توانید از فکر می کنم آزاد به عنوان مخالف malloc. 668 00:28:55,890 --> 00:28:58,030 رایگان مخالف است تخصیص حافظه. 669 00:28:58,030 --> 00:28:59,540 بنابراین در حال حاضر اجازه دهید من این کامپایل مجدد. 670 00:28:59,540 --> 00:29:02,050 اطمینان خوش آمدید-2. 671 00:29:02,050 --> 00:29:04,620 اجازه دهید دوباره آن را اجرا کنید. سلام 2 دیوید. 672 00:29:04,620 --> 00:29:07,290 بنابراین به نظر می رسد به کار در دقیقا به همان شیوه. 673 00:29:07,290 --> 00:29:11,180 اما اگر من به عقب برگردید به Valgrind و دوباره اجرا که همان دستور به تازگی من 674 00:29:11,180 --> 00:29:14,720 کامپایل برنامه، تایپ کردن به نام من به عنوان قبل از - 675 00:29:14,720 --> 00:29:15,370 خوب است. 676 00:29:15,370 --> 00:29:16,760 خلاصه هیپ - 677 00:29:16,760 --> 00:29:17,740 در استفاده در خروج - 678 00:29:17,740 --> 00:29:19,370 صفر بایت در بلوک های صفر. 679 00:29:19,370 --> 00:29:21,840 و این فوق العاده زیبا، همه بلوک های پشته آزاد شدند. 680 00:29:21,840 --> 00:29:23,480 بدون نشت امکان پذیر است. 681 00:29:23,480 --> 00:29:27,200 >> پس از بالا آمدن، نه با مشکل تنظیم 4، اما با مشکل تنظیم 5، پزشکی قانونی 682 00:29:27,200 --> 00:29:30,740 و بعد، این هم تبدیل خواهد شد اندازه گیری صحت خود را از 683 00:29:30,740 --> 00:29:33,630 برنامه، یا نه شما و یا نشت حافظه ندارد. 684 00:29:33,630 --> 00:29:36,900 اما خوشبختانه، نه تنها می تواند شما استدلال از طریق آنها به طور ذاتی، که 685 00:29:36,900 --> 00:29:40,430 است، مسلما، آسان برای برنامه های کوچک اما سخت تر برای برنامه های بزرگتر، 686 00:29:40,430 --> 00:29:43,860 Valgrind، برای کسانی که برنامه های بزرگتر، می تواند به شما کمک کند شناسایی 687 00:29:43,860 --> 00:29:45,360 مشکل خاص است. 688 00:29:45,360 --> 00:29:47,500 >> اما یک مشکل دیگر وجود دارد که ممکن است بوجود می آیند. 689 00:29:47,500 --> 00:29:51,245 اجازه بدهید من باز کردن این فایل در اینجا است که، دوباره، به عنوان مثال تا حدودی ساده است. 690 00:29:51,245 --> 00:29:53,760 اما اجازه تمرکز بر آنچه این برنامه می کند. 691 00:29:53,760 --> 00:29:55,190 این است که به نام memory.c. 692 00:29:55,190 --> 00:29:58,380 خواهیم این را امروز بعد از آن در ارسال پستی از کد منبع امروز. 693 00:29:58,380 --> 00:30:01,610 و متوجه شده که من آن را یک تابع به نام F است که بدون آرگومان و طول می کشد 694 00:30:01,610 --> 00:30:02,800 هیچ چیز را بر می گرداند. 695 00:30:02,800 --> 00:30:07,240 در خط 20، من ظاهرا اعلام اشاره گر به int و خواستار آن *. 696 00:30:07,240 --> 00:30:09,570 با من اختصاص بازگشت است ارزش malloc. 697 00:30:09,570 --> 00:30:14,590 و تنها به روشن، چگونه بسیاری از بایت AM من احتمالا از malloc 698 00:30:14,590 --> 00:30:17,080 در این وضعیت؟ 699 00:30:17,080 --> 00:30:18,040 >> احتمالا 40. 700 00:30:18,040 --> 00:30:18,840 از کجا می توانید دریافت کنید که از؟ 701 00:30:18,840 --> 00:30:22,410 خوب، اگر شما به یاد بیاورید که یک int است که اغلب 4 بایت، حداقل آن را در است 702 00:30:22,410 --> 00:30:25,110 لوازم خانگی، 10 برابر 4 است بدیهی است که 40. 703 00:30:25,110 --> 00:30:28,920 بنابراین malloc بازگشت آدرس یک تکه از حافظه و ذخیره سازی که 704 00:30:28,920 --> 00:30:30,800 آدرس در نهایت در x. 705 00:30:30,800 --> 00:30:32,570 بنابراین برای روشن، چه پس از آن اتفاق می افتد؟ 706 00:30:32,570 --> 00:30:34,990 خوب، اجازه دهید من تغییر دهید به تصویر ما اینجا. 707 00:30:34,990 --> 00:30:38,150 من نه فقط جلب پایین من حافظه کامپیوتر، به من اجازه رفتن به جلو و 708 00:30:38,150 --> 00:30:42,990 رسم مستطیل که نشان دهنده تمام حافظه من. 709 00:30:42,990 --> 00:30:44,790 >> ما می گویم که پشته در پایین است. 710 00:30:44,790 --> 00:30:47,010 و یک بخش متن وجود دارد در داده های مقدار دهی نکردن. 711 00:30:47,010 --> 00:30:49,880 اما من فقط رفتن به کسانی که انتزاعی چیزهای دیگر را به عنوان نقطه، نقطه نقطه دور. 712 00:30:49,880 --> 00:30:53,470 من فقط برای اشاره به این عنوان پشته در بالا. 713 00:30:53,470 --> 00:30:57,070 و سپس در پایین این تصویر، به نمایندگی اصلی، من قصد دارم 714 00:30:57,070 --> 00:30:59,880 به آن یک حافظه برش می دهد در پشته. 715 00:30:59,880 --> 00:31:03,150 برای F، من قصد دارم به آن یک تکه را حافظه در پشته. 716 00:31:03,150 --> 00:31:05,140 در حال حاضر، من به مشورت من کد منبع دوباره. 717 00:31:05,140 --> 00:31:07,170 متغیرهای محلی به صورت اصلی چه کسانی هستند؟ 718 00:31:07,170 --> 00:31:10,710 ظاهرا هیچ چیز، به طوری که برش می باشد به طور موثر خالی است و یا نه حتی به عنوان بزرگ 719 00:31:10,710 --> 00:31:11,600 که من آن را کشیده ام. 720 00:31:11,600 --> 00:31:15,730 اما در F، من یک متغیر محلی، است که X نامیده می شود. 721 00:31:15,730 --> 00:31:20,410 بنابراین من قصد دارم به جلو بروید و به F یک تکه از حافظه، خواستار آن *. 722 00:31:20,410 --> 00:31:24,680 >> و در حال حاضر malloc از 10 برابر 4، بنابراین: malloc 40، که در آن است که 723 00:31:24,680 --> 00:31:25,430 حافظه که از؟ 724 00:31:25,430 --> 00:31:27,530 ایم تصویر کشیده شده است پیش از این می خواهم. 725 00:31:27,530 --> 00:31:31,140 اما بیایید فرض کنیم که آن را به طور موثر از اینجا، بنابراین، 726 00:31:31,140 --> 00:31:33,170 دو، سه، چهار، پنج. 727 00:31:33,170 --> 00:31:34,680 و در حال حاضر من نیاز به 40 از این. 728 00:31:34,680 --> 00:31:37,540 بنابراین من فقط انجام نقطه، نقطه، نقطه نشان می دهد که حافظه و حتی بیشتر وجود دارد 729 00:31:37,540 --> 00:31:39,350 بازگشت از پشته. 730 00:31:39,350 --> 00:31:40,710 در حال حاضر آنچه به آدرس؟ 731 00:31:40,710 --> 00:31:42,620 بیایید دلخواه ما را انتخاب کنید رسیدگی به مانند همیشه - 732 00:31:42,620 --> 00:31:46,310 Ox123، حتی اگر آن را احتمالا رفتن به چیزی کاملا متفاوت. 733 00:31:46,310 --> 00:31:50,420 این آدرس اولین بایت در حافظه که من درخواست malloc برای. 734 00:31:50,420 --> 00:31:53,630 >> بنابراین در کوتاه مدت، یک بار خط 20 اجرا، آنچه که به معنای واقعی کلمه 735 00:31:53,630 --> 00:31:57,170 ذخیره شده در داخل از x در اینجا؟ 736 00:31:57,170 --> 00:31:58,730 Ox123. 737 00:31:58,730 --> 00:32:00,370 Ox123. 738 00:32:00,370 --> 00:32:01,550 و گاو غیر است. 739 00:32:01,550 --> 00:32:03,200 این فقط در اینجا این معنی است که عدد هگزادسیمال. 740 00:32:03,200 --> 00:32:06,490 اما آنچه کلیدی است که آنچه من فروشگاه در x، که یک متغیر محلی است. 741 00:32:06,490 --> 00:32:10,260 اما نوع داده آن، دوباره، یک آدرس از نوع int است. 742 00:32:10,260 --> 00:32:12,710 خوب، من قصد دارم برای ذخیره Ox123. 743 00:32:12,710 --> 00:32:16,610 اما باز هم، اگر که کمی بیش از حد پیچیده بی ارزش است، اگر من رفته 744 00:32:16,610 --> 00:32:21,490 به عقب، ما انتزاعی می تواند این دور کاملا منطقی و فقط می گویند که x 745 00:32:21,490 --> 00:32:23,910 اشاره گر به آن تکه از حافظه. 746 00:32:23,910 --> 00:32:24,070 >> OK را بزنید. 747 00:32:24,070 --> 00:32:26,230 حالا سوال در دست به شرح زیر است - 748 00:32:26,230 --> 00:32:29,910 خط 21، که معلوم است، نوعی درشکه سبک یک اسبه است. 749 00:32:29,910 --> 00:32:31,160 چرا؟ 750 00:32:31,160 --> 00:32:34,890 751 00:32:34,890 --> 00:32:36,930 >> پوزش می طلبیم؟ 752 00:32:36,930 --> 00:32:38,640 ندارد - 753 00:32:38,640 --> 00:32:40,390 می گویند که یک بار دیگر. 754 00:32:40,390 --> 00:32:41,240 خوب، آن را آزاد نیست. 755 00:32:41,240 --> 00:32:42,350 به طوری که دوم. 756 00:32:42,350 --> 00:32:45,000 بنابراین یکی دیگر اما به طور خاص وجود دارد در خط 21. 757 00:32:45,000 --> 00:32:49,480 758 00:32:49,480 --> 00:32:50,040 >> دقیقا. 759 00:32:50,040 --> 00:32:54,980 این خط کد ساده است که فقط یک سرریز بافر، تاخت و تاز بافر. 760 00:32:54,980 --> 00:32:57,050 بافر فقط به معنای یک تکه از حافظه است. 761 00:32:57,050 --> 00:33:01,520 اما این تکه از حافظه با اندازه 10، 10 اعداد صحیح، که این بدان معناست که اگر ما 762 00:33:01,520 --> 00:33:05,350 شاخص را در آن با استفاده از قند نحوی نماد آرایه، مربع 763 00:33:05,350 --> 00:33:09,220 براکت، دسترسی به شما * براکت 0 X براکت ها * 1، 764 00:33:09,220 --> 00:33:10,390 براکت نقطه، نقطه، نقطه. 765 00:33:10,390 --> 00:33:13,270 X براکت 9 یکی از بزرگترین است. 766 00:33:13,270 --> 00:33:17,680 بنابراین اگر من X براکت 10، که در آن من در واقع در حافظه؟ 767 00:33:17,680 --> 00:33:19,120 >> خب، اگر من باید 10 بین المللی - 768 00:33:19,120 --> 00:33:21,070 اجازه دهید در واقع تمام قرعه کشی از آنها را در اینجا. 769 00:33:21,070 --> 00:33:22,700 به طوری که پنج بود. 770 00:33:22,700 --> 00:33:24,660 در اینجا پنج نوع داده int دیگر است. 771 00:33:24,660 --> 00:33:29,580 بنابراین X براکت 0 است در اینجا. X براکت 1 اینجا. X براکت 9 است در اینجا. X براکت 772 00:33:29,580 --> 00:33:37,960 10 است که در اینجا، که به معنی من گفتن، در خط 21، کامپیوتر برای قرار دادن 773 00:33:37,960 --> 00:33:39,400 شماره که در آن؟ 774 00:33:39,400 --> 00:33:42,010 عدد 0 که در آن؟ 775 00:33:42,010 --> 00:33:43,380 خوب، آن را 0، بله. 776 00:33:43,380 --> 00:33:45,460 اما فقط به این واقعیت که 0 آن نوع تصادف است. 777 00:33:45,460 --> 00:33:47,140 این می تواند تعداد 50، برای همه برای ما مهم است. 778 00:33:47,140 --> 00:33:50,480 اما ما در حال تلاش برای آن را در X براکت 10، که جایی است که این 779 00:33:50,480 --> 00:33:53,700 علامت سوال کشیده شده است، که چیز خوبی نیست. 780 00:33:53,700 --> 00:33:57,070 این برنامه ممکن است خیلی خوب سقوط به عنوان یک نتیجه. 781 00:33:57,070 --> 00:33:59,400 >> در حال حاضر، اجازه دهید به جلو بروید و ببینید که اگر این است، در واقع، چه اتفاقی می افتد. 782 00:33:59,400 --> 00:34:02,600 ساختن حافظه، از آنجایی که فایل نام memory.c. 783 00:34:02,600 --> 00:34:05,950 اجازه دهید به جلو و اجرا حافظه برنامه میباشد. 784 00:34:05,950 --> 00:34:08,239 بنابراین ما خوش شانس، در واقع، به نظر می رسد. 785 00:34:08,239 --> 00:34:09,340 ما خوش شانس کردم. 786 00:34:09,340 --> 00:34:11,060 اما اجازه دهید ببینیم که اگر ما در حال حاضر اجرای Valgrind. 787 00:34:11,060 --> 00:34:14,170 در نگاه اول، برنامه من ممکن است به نظر می رسد کاملا درست است. 788 00:34:14,170 --> 00:34:18,010 اما به من اجازه اجرا Valgrind با - چک نشت برابر کامل بر روی حافظه است. 789 00:34:18,010 --> 00:34:20,110 >> و در حال حاضر زمانی که من برای اجرای این - 790 00:34:20,110 --> 00:34:21,030 جالب است. 791 00:34:21,030 --> 00:34:26,800 نامعتبر ارسال از اندازه 4 در خط 21 از memory.c. 792 00:34:26,800 --> 00:34:29,284 خط 21 از memory.c به کدام یک است؟ 793 00:34:29,284 --> 00:34:30,340 آه، جالب. 794 00:34:30,340 --> 00:34:31,080 اما صبر کنید. 795 00:34:31,080 --> 00:34:32,389 حجم 4، این است که با اشاره به؟ 796 00:34:32,389 --> 00:34:34,969 من تنها یک ارسال اما آن را به اندازه 4. 797 00:34:34,969 --> 00:34:36,889 و چرا از آن است 4؟ 798 00:34:36,889 --> 00:34:39,280 به این دلیل است که آن را از نوع int، که ، دوباره، چهار بایت است. 799 00:34:39,280 --> 00:34:42,510 پس Valgrind یک اشکال که من، نظر اجمالی در کد من، نداشت. 800 00:34:42,510 --> 00:34:45,040 و شاید TF شما خواهد بود یا نه. 801 00:34:45,040 --> 00:34:48,469 چه و اما Valgrind برای مطمئن نشان داد که ما یک اشتباهی مرتکب شده اید، حتی 802 00:34:48,469 --> 00:34:52,719 اگر ما خوش شانس و کامپیوتر تصمیم گرفت، سوگند ملایمی، من قصد دارم به سقوط 803 00:34:52,719 --> 00:34:57,470 فقط به خاطر اینکه شما یک بایت، یک لمس ارزش اعضای هیات حافظه است که شما این کار را نکرد 804 00:34:57,470 --> 00:34:58,550 در واقع خود را. 805 00:34:58,550 --> 00:35:00,380 >> خوب، چه چیز دیگری در اینجا حشره دار است. 806 00:35:00,380 --> 00:35:01,180 آدرس - 807 00:35:01,180 --> 00:35:03,190 این دیوانه به دنبال آدرس می باشد در مبنای شانزده است. 808 00:35:03,190 --> 00:35:06,890 این حالت فقط بدان معناست جایی در پشته است صفر بایت بعد از یک بلوک از اندازه 40 809 00:35:06,890 --> 00:35:07,620 اختصاص داده است. 810 00:35:07,620 --> 00:35:10,610 اجازه من زوم از اینجا و ببینید که اگر این است که کمی مفید تر است. 811 00:35:10,610 --> 00:35:11,410 جالب است. 812 00:35:11,410 --> 00:35:15,600 40 بایت قطعا از دست داده است در کاهش رکورد 1 از 1. 813 00:35:15,600 --> 00:35:17,840 باز هم، کلمات بیشتری از اینجا مفید است. 814 00:35:17,840 --> 00:35:21,350 اما بر اساس خطوط برجسته، از کجا باید احتمالا تمرکز من 815 00:35:21,350 --> 00:35:24,070 توجه برای اشکال دیگر؟ 816 00:35:24,070 --> 00:35:26,570 به نظر می رسد مانند یک خط 20 memory.c،. 817 00:35:26,570 --> 00:35:30,990 >> بنابراین اگر ما به عقب برویم به 20 خط، که یکی که شما قبلا مشخص. 818 00:35:30,990 --> 00:35:33,030 و آن را لزوما نوعی درشکه سبک یک اسبه نیست. 819 00:35:33,030 --> 00:35:35,160 اما ما این معکوس اثرات آن است. 820 00:35:35,160 --> 00:35:38,790 پس چگونه می توانم حداقل درست یکی از کسانی که اشتباهات؟ 821 00:35:38,790 --> 00:35:42,240 بعد از خط 21 چه می توانم انجام دهم؟ 822 00:35:42,240 --> 00:35:47,110 من می توانم انجام رایگان *، پس به پس دادن آن حافظه. 823 00:35:47,110 --> 00:35:49,230 و چگونه می توانم این مشکل را حل کنم؟ 824 00:35:49,230 --> 00:35:52,120 من قطعا باید بروید دورتر از 0. 825 00:35:52,120 --> 00:35:53,670 بنابراین اجازه دهید من امتحان کنید و دوباره اجرای این. 826 00:35:53,670 --> 00:35:56,080 با عرض پوزش، قطعا دورتر از 9. 827 00:35:56,080 --> 00:35:57,510 اطمینان حافظه. 828 00:35:57,510 --> 00:36:00,650 اجازه دهید به من تکرار شده Valgrind در یک پنجره بزرگتر. 829 00:36:00,650 --> 00:36:01,580 و در حال حاضر نگاه کنید. 830 00:36:01,580 --> 00:36:02,250 خوب است. 831 00:36:02,250 --> 00:36:03,270 همه بلوک پشته آزاد شدند. 832 00:36:03,270 --> 00:36:04,270 بدون نشت امکان پذیر است. 833 00:36:04,270 --> 00:36:07,520 و بالاتر از اینجا، هیچ اشاره ای وجود دارد بیشتر از حق نامعتبر. 834 00:36:07,520 --> 00:36:09,820 >> فقط برای گرفتن حریص، و اجازه اگر یکی دیگر از تظاهرات 835 00:36:09,820 --> 00:36:11,050 (برام) می زنه نه به عنوان در نظر گرفته شده - 836 00:36:11,050 --> 00:36:12,560 من یک لحظه پیش خوش شانس دریافت کنید. 837 00:36:12,560 --> 00:36:15,530 و این واقعیت است که این 0 است که شاید بی ارزش گمراه کننده است. 838 00:36:15,530 --> 00:36:20,650 بیایید فقط 50، تا حدودی خودسرانه تعداد، حافظه حافظه بریده بریده نقطه - 839 00:36:20,650 --> 00:36:21,410 هنوز خوش شانس کنید. 840 00:36:21,410 --> 00:36:22,510 هیچ چیز را توفنده. 841 00:36:22,510 --> 00:36:26,150 فرض کنید من فقط چیزی واقعا احمقانه است، و من 100. 842 00:36:26,150 --> 00:36:30,360 اجازه دهید من بازسازی از حافظه، نقطه حافظه بریده بریده - 843 00:36:30,360 --> 00:36:31,075 دوباره خوش شانس. 844 00:36:31,075 --> 00:36:32,800 چگونه در حدود 1،000؟ 845 00:36:32,800 --> 00:36:35,370 نوع داده int فراتر از آن، تقریبا، جایی که من باید باشد؟ 846 00:36:35,370 --> 00:36:37,410 اطمینان حافظه - 847 00:36:37,410 --> 00:36:38,570 لعنت. 848 00:36:38,570 --> 00:36:39,920 >> [خنده حضار] 849 00:36:39,920 --> 00:36:41,270 >> OK را بزنید. 850 00:36:41,270 --> 00:36:43,920 اجازه دهید ظروف سرباز یا مسافر در اطراف دیگر. 851 00:36:43,920 --> 00:36:45,120 حافظه تکرار شده است. 852 00:36:45,120 --> 00:36:45,840 گرامی می رویم. 853 00:36:45,840 --> 00:36:46,410 بسیار خوب. 854 00:36:46,410 --> 00:36:52,500 بنابراین ظاهرا شما اول 100،000 نوع داده int فراتر از جایی که شما باید در آن قرار گرفته 855 00:36:52,500 --> 00:36:54,410 حافظه، همه چیز بد اتفاق می افتد. 856 00:36:54,410 --> 00:36:56,430 بنابراین این واضح است که نیست ، قانون سخت و سریع است. 857 00:36:56,430 --> 00:36:58,190 من نوع استفاده از آزمایش بود و خطا برای رسیدن به آنجا. 858 00:36:58,190 --> 00:37:02,230 اما دلیل این است که، داستان کوتاه مدت، حافظه کامپیوتر شما نیز تقسیم شده است 859 00:37:02,230 --> 00:37:03,580 به این چیزها به نام بخش. 860 00:37:03,580 --> 00:37:07,260 و گاهی اوقات، در واقع کامپیوتر به شما حافظه کمی بیشتر داده می شود 861 00:37:07,260 --> 00:37:08,400 از شما می پرسند. 862 00:37:08,400 --> 00:37:12,170 اما برای بهره وری، آن را تنها آسان تر به حافظه بیشتر اما فقط به شما بگویم 863 00:37:12,170 --> 00:37:13,780 که شما در حال گرفتن بخشی از آن را. 864 00:37:13,780 --> 00:37:16,370 >> و اگر شما خوش شانس گاهی اوقات، بنابراین، شما ممکن است قادر به لمس 865 00:37:16,370 --> 00:37:17,795 حافظه ای که به شما تعلق ندارند. 866 00:37:17,795 --> 00:37:21,860 شما هیچ تضمینی وجود ندارد که چه مقدار شما قرار داده وجود دارد باقی می ماند، زیرا 867 00:37:21,860 --> 00:37:25,080 کامپیوتر هنوز فکر می کند که این طور نیست مال شما، اما آن را لزوما نمی خواهید 868 00:37:25,080 --> 00:37:29,910 آمار بخش دیگری از حافظه در کامپیوتر و وادار به اشتباه مانند 869 00:37:29,910 --> 00:37:31,710 این یکی در اینجا. 870 00:37:31,710 --> 00:37:32,060 بسیار خوب. 871 00:37:32,060 --> 00:37:37,240 هر گونه سؤال و سپس در حافظه؟ 872 00:37:37,240 --> 00:37:37,590 >> بسیار خوب. 873 00:37:37,590 --> 00:37:40,610 اجازه دهید یک نگاهی از اینجا، و سپس، در چیزی است که ما برای گرفتن ام 874 00:37:40,610 --> 00:37:48,361 اعطا شده برای مدتی که در این فایلی به نام cs50.h. است 875 00:37:48,361 --> 00:37:49,420 بنابراین این یک فایل است. 876 00:37:49,420 --> 00:37:51,130 این فقط یک دسته کل از نظر تا بالا. 877 00:37:51,130 --> 00:37:53,900 و شما ممکن است در این اگر نگاه شما در اطراف دستگاه برخوردی خشن روبرو. 878 00:37:53,900 --> 00:37:57,000 اما معلوم است که در همه زمان ها، زمانی که ما استفاده می شود استفاده از رشته به عنوان یک 879 00:37:57,000 --> 00:38:01,130 مترادف، وسیله ای است که ما اعلام کرد که مترادف بود با این 880 00:38:01,130 --> 00:38:03,990 کلمه کلیدی typedef، برای تعریف نوع. 881 00:38:03,990 --> 00:38:07,500 و ما اساسا گفت، رشته مترادف برای ستاره کاراکتر. 882 00:38:07,500 --> 00:38:11,190 که وسیله ای است که پشته این چرخ آموزش شناخته شده به عنوان ایجاد 883 00:38:11,190 --> 00:38:12,040 رشته. 884 00:38:12,040 --> 00:38:14,830 >> حالا در اینجا فقط یک نمونه است برای getchar. 885 00:38:14,830 --> 00:38:17,350 ما ممکن است آن را قبل از دیده می شود، اما این در واقع آنچه در آن می کند. getchar 886 00:38:17,350 --> 00:38:19,070 بدون آرگومان طول می کشد، یک کاراکتر را بر می گرداند. 887 00:38:19,070 --> 00:38:21,340 getdouble بدون آرگومان طول می کشد، یک دو برابر می گرداند. 888 00:38:21,340 --> 00:38:24,440 getfloat بدون آرگومان، بازده طول می کشد شناور، و غیره. 889 00:38:24,440 --> 00:38:27,270 getint در اینجا این است. getlonglong در اینجا است. 890 00:38:27,270 --> 00:38:28,820 و getstring در اینجا است. 891 00:38:28,820 --> 00:38:29,420 و آن. 892 00:38:29,420 --> 00:38:33,080 این خط بنفش یکی دیگر از پیش پردازنده است بخشنامه به دلیل 893 00:38:33,080 --> 00:38:35,550 hashtag در آغاز از آن. 894 00:38:35,550 --> 00:38:35,870 >> بسیار خوب. 895 00:38:35,870 --> 00:38:38,380 بنابراین در حال حاضر اجازه دهید من به cs50.c. 896 00:38:38,380 --> 00:38:40,400 و ما نمی خواهد در این مورد صحبت کنید بیش از حد طولانی است. 897 00:38:40,400 --> 00:38:43,280 اما به شما یک نگاه اجمالی از آنچه به من بدهید شده است که در همه این 898 00:38:43,280 --> 00:38:46,434 زمان، اجازه دهید من برای رفتن - 899 00:38:46,434 --> 00:38:48,250 اجازه دهید انجام getchar. 900 00:38:48,250 --> 00:38:51,050 بنابراین getchar است که عمدتا نظر. 901 00:38:51,050 --> 00:38:52,060 اما آن را مانند این به نظر می رسد. 902 00:38:52,060 --> 00:38:54,800 بنابراین این عملکرد واقعی است getchar که ما بوده ام 903 00:38:54,800 --> 00:38:56,055 فرض میگیریم وجود دارد. 904 00:38:56,055 --> 00:38:59,370 و حتی اگر ما این یکی استفاده نکنید که اغلب، اگر تا کنون، حداقل 905 00:38:59,370 --> 00:39:00,470 نسبتا ساده است. 906 00:39:00,470 --> 00:39:02,580 بنابراین آن را ارزش مصرف نگاهی گذرا در اینجا. 907 00:39:02,580 --> 00:39:06,540 >> بنابراین getchar دارای یک حلقه بی نهایت، عمدا بنابراین ظاهرا. 908 00:39:06,540 --> 00:39:10,050 سپس آن را می نامد - و این نوع است استفاده مجدد از کد آرزومندیم ما خودمان را نوشت. 909 00:39:10,050 --> 00:39:11,220 در آن خواستار getstring. 910 00:39:11,220 --> 00:39:12,460 چون آنچه در آن می کند به معنای به دست آوردن یک کاراکتر؟ 911 00:39:12,460 --> 00:39:14,730 خوب، شما نیز ممکن است سعی کنید خط تمام متن از کاربر و 912 00:39:14,730 --> 00:39:16,940 پس از آن فقط در یک نگاه از کسانی که شخصیت. 913 00:39:16,940 --> 00:39:19,170 در خط 60، در اینجا یک کمی کمی سلامت عقل چک. 914 00:39:19,170 --> 00:39:21,610 در اگر getstring بازگشت تهی، اجازه دهید ادامه ندارد. 915 00:39:21,610 --> 00:39:22,820 چیزی را اشتباه رفت. 916 00:39:22,820 --> 00:39:28,120 >> در حال حاضر این است که تا حدودی آزار دهنده است، اما متعارف در C. کاراکتر حداکثر احتمالا 917 00:39:28,120 --> 00:39:29,960 نشان دهنده آنچه که فقط بر اساس نام خود را؟ 918 00:39:29,960 --> 00:39:31,670 این ثابت است. 919 00:39:31,670 --> 00:39:36,040 آن را مانند ارزش عددی بزرگترین کاراکتر شما می توانید با نشان دادن 920 00:39:36,040 --> 00:39:40,370 یک نیش می زنند، است که احتمالا تعداد 255، است که بزرگترین شماره شما 921 00:39:40,370 --> 00:39:42,720 نمایندگی هشت بیت، شروع از صفر است. 922 00:39:42,720 --> 00:39:47,460 بنابراین من استفاده از این، در این تابع، هنگامی که نوشتن این کد، فقط به این دلیل 923 00:39:47,460 --> 00:39:51,753 اگر چیزی را اشتباه می رود در getchar اما هدف خود را در زندگی این است برای بازگشت به 924 00:39:51,753 --> 00:39:54,830 کاراکتر، شما باید به نحوی قادر باشد به سیگنال به کاربر است که 925 00:39:54,830 --> 00:39:55,840 چیزی را اشتباه رفت. 926 00:39:55,840 --> 00:39:56,970 ما نمی توانیم تهی بازگشت. 927 00:39:56,970 --> 00:39:58,480 به نظر می رسد که یک اشاره گر تهی است. 928 00:39:58,480 --> 00:40:01,030 و دوباره، getchar برای بازگشت به کاراکتر. 929 00:40:01,030 --> 00:40:04,760 >> بنابراین این کنوانسیون، اگر چیزی می رود اشتباه است، شما، برنامه نویس، و یا در 930 00:40:04,760 --> 00:40:08,160 این مورد، من با کتابخانه، من تا به حال فقط تصمیم گیری خودسرانه، اگر 931 00:40:08,160 --> 00:40:12,230 چیزی را اشتباه می رود، من قصد دارم به بازگشت به شماره 255، است که واقعا 932 00:40:12,230 --> 00:40:17,240 معنی است که ما نمی توانیم، کاربر می تواند نوع شخصیت ارائه شده توسط 933 00:40:17,240 --> 00:40:21,410 شماره 255 از آنجا که ما تا به حال آن را سرقت به عنوان یک اصطلاح ارزش نگهبان 934 00:40:21,410 --> 00:40:23,410 نشان دادن یک مشکل. 935 00:40:23,410 --> 00:40:27,010 معلوم شد که شخصیت 255 چیزی است که شما می توانید در تایپ نیست 936 00:40:27,010 --> 00:40:28,380 صفحه کلید خود را، پس از آن هیچ معامله بزرگ است. 937 00:40:28,380 --> 00:40:30,910 کاربر متوجه نیست که من این شخصیت به سرقت رفته است. 938 00:40:30,910 --> 00:40:34,620 اما اگر شما همیشه در صفحات man را ببینید سیستم کامپیوتری برخی از اشاره به 939 00:40:34,620 --> 00:40:38,560 همه کلاه های ثابت مانند این که می گوید، در موارد از خطا این ممکن است ثابت 940 00:40:38,560 --> 00:40:42,720 برگردانده شود، که برخی از انسان بود سال پیش بود خودسرانه تصمیم گرفت 941 00:40:42,720 --> 00:40:45,680 بازگشت این مقدار ویژه و آن را ثابت در مورد 942 00:40:45,680 --> 00:40:46,840 چیزی را اشتباه می رود. 943 00:40:46,840 --> 00:40:48,580 >> در حال حاضر سحر و جادو اتفاق می افتد را در اینجا. 944 00:40:48,580 --> 00:40:52,600 اول، من اعلام کرد در خط 67 دو شخصیت، C1 و C2 است. 945 00:40:52,600 --> 00:40:57,080 و سپس در خط 68، در واقع وجود دارد یک خط از کد که یادآور 946 00:40:57,080 --> 00:41:01,140 دوستان ما چون printf، با توجه به این که آن اختصاص درصد حسابهای در نقل قول. 947 00:41:01,140 --> 00:41:06,490 اما متوجه آنچه در اینجا اتفاق می افتد. sscanf به معنای رشته اسکن است - 948 00:41:06,490 --> 00:41:11,690 معنی اسکن فرمت رشته، sscanf بنابر. 949 00:41:11,690 --> 00:41:12,590 به چه معنا است؟ 950 00:41:12,590 --> 00:41:16,310 این بدان معنی است شما عبور به sscanf یک رشته. 951 00:41:16,310 --> 00:41:18,420 و خط هر چه کاربر وارد 952 00:41:18,420 --> 00:41:23,520 شما از عبور از یک رشته فرمت مانند sscanf این است که scanf می گوید چه هستند 953 00:41:23,520 --> 00:41:25,870 شما امیدوار کاربر تا به تایپ شوید. 954 00:41:25,870 --> 00:41:29,730 بعد از آن شما عبور در آدرس دو تکه های حافظه، در این مورد، 955 00:41:29,730 --> 00:41:31,150 چون من دو متغیرهایی است. 956 00:41:31,150 --> 00:41:34,610 بنابراین من قصد دارم به آن آدرس می دهد از C1 و آدرس C2. 957 00:41:34,610 --> 00:41:37,700 >> و به یاد بیاورید که شما یک تابع را آدرس برخی از متغیر، چه 958 00:41:37,700 --> 00:41:38,950 مفهوم؟ 959 00:41:38,950 --> 00:41:41,400 960 00:41:41,400 --> 00:41:45,050 چه کاری می توانید آن تابع به عنوان یک نتیجه انجام از دادن آن آدرس یک 961 00:41:45,050 --> 00:41:48,170 متغیر، به عنوان مخالف خود متغیر؟ 962 00:41:48,170 --> 00:41:49,450 می تواند آن را به سمت راست تغییر؟ 963 00:41:49,450 --> 00:41:53,250 اگر شما تا به حال کسی یک نقشه فیزیکی آدرس، آنها می توانند به آنجا بروند و انجام 964 00:41:53,250 --> 00:41:54,750 هر آنچه که آنها در آن آدرس می خواهید. 965 00:41:54,750 --> 00:41:55,800 ایده در اینجا همان. 966 00:41:55,800 --> 00:41:59,950 اگر ما به sscanf، آدرس دو عبور تکه های حافظه، حتی این کوچک 967 00:41:59,950 --> 00:42:03,585 تکه های کمی از حافظه، C1 و C2، اما ما آن را آدرس آنها بگویید، 968 00:42:03,585 --> 00:42:05,170 sscanf می توانید آن را تغییر دهید. 969 00:42:05,170 --> 00:42:08,530 >> بنابراین هدف sscanf در زندگی، اگر ما به عنوان خوانده شده صفحه مرد، به خواندن آنچه 970 00:42:08,530 --> 00:42:13,420 کاربر تایپ، امید برای داشتن کاربر تایپ شده در یک شخصیت و شاید 971 00:42:13,420 --> 00:42:16,470 یکی دیگر از شخصیت، و هر کاربر تایپ، شخصیت اول می رود 972 00:42:16,470 --> 00:42:19,310 در اینجا، شخصیت دوم در اینجا می رود. 973 00:42:19,310 --> 00:42:22,470 در حال حاضر، به عنوان یک کنار، این، و شما می توانید تنها این از اسناد می دانم، 974 00:42:22,470 --> 00:42:25,570 این واقعیت که من قرار دادن یک فضای خالی وجود دارد فقط بدان معنی است که من اهمیتی نمی دهند اگر 975 00:42:25,570 --> 00:42:28,440 کاربر بازدید نوار فضایی چند بار قبل از او طول می کشد 976 00:42:28,440 --> 00:42:30,400 شخصیت، من قصد دارم به چشم پوشی از هر فضای سفید است. 977 00:42:30,400 --> 00:42:32,510 به طوری که من می دانم اسناد. 978 00:42:32,510 --> 00:42:36,570 >> این واقعیت است که٪ دوم ج وجود دارد به دنبال فضای سفید است که در واقع 979 00:42:36,570 --> 00:42:37,410 عمدی. 980 00:42:37,410 --> 00:42:41,190 من می خواهم که قادر به تشخیص در صورتی که کاربر پیچ و یا عدم همکاری نیست. 981 00:42:41,190 --> 00:42:45,630 بنابراین من به امید که کاربر در تایپ در یکی از شخصیت ها، بنابراین من امیدوار 982 00:42:45,630 --> 00:42:50,640 است که sscanf فقط رفتن برای بازگشت به ارزش 1 به دلیل، دوباره، اگر من خواندن 983 00:42:50,640 --> 00:42:55,400 اسناد و مدارک، هدف sscanf در زندگی این است که بازگشت به تعداد 984 00:42:55,400 --> 00:42:59,170 متغیرهایی که پر شدند با ورودی کاربر. 985 00:42:59,170 --> 00:43:02,270 >> من در دو متغیر گذشت آدرس، C1 و C2. 986 00:43:02,270 --> 00:43:06,420 من امیدوار هستم، هر چند، که تنها یکی از آنها کشته می شود، زیرا اگر sscanf 987 00:43:06,420 --> 00:43:11,130 بازده 2، چه احتمالا مفهوم منطقی است؟ 988 00:43:11,130 --> 00:43:14,600 که کاربر نمی فقط به من یک شخصیت مانند من به او گفتم یا او. 989 00:43:14,600 --> 00:43:17,860 آنها احتمالا در تایپ حداقل دو شخصیت. 990 00:43:17,860 --> 00:43:22,430 بنابراین اگر من به جای دوم ندارد ٪ C، من فقط به حال یک، که 991 00:43:22,430 --> 00:43:25,370 رک و پوست کنده خواهد بود بیشتر بصری رویکرد، من فکر می کنم نگاه اول 992 00:43:25,370 --> 00:43:30,220 شما نمی خواهید به قادر به تشخیص در صورتی که کاربر شده است به شما بیشتر 993 00:43:30,220 --> 00:43:31,780 ورودی از شما در واقع می خواستم. 994 00:43:31,780 --> 00:43:34,100 بنابراین این فرم ضمنی است چک کردن خطا. 995 00:43:34,100 --> 00:43:35,640 >> اما متوجه آنچه من در اینجا. 996 00:43:35,640 --> 00:43:39,970 هنگامی که من مطمئن هستم که کاربر به من یکی هستم شخصیت، من آزاد کردن خط، انجام 997 00:43:39,970 --> 00:43:44,450 در مقابل getstring، که به نوبه خود با استفاده از malloc، و سپس بازگشت من 998 00:43:44,450 --> 00:43:51,030 C1، شخصیت که من امیدوار است کاربر ارائه و فقط ارائه شده است. 999 00:43:51,030 --> 00:43:54,680 بنابراین سریع را دیدم، اما هر گونه سوال در getchar؟ 1000 00:43:54,680 --> 00:43:57,450 1001 00:43:57,450 --> 00:43:59,590 ما به برخی از دیگران می گردد. 1002 00:43:59,590 --> 00:44:03,770 >> خوب، اجازه دهید من جلو بروید و این کار را - فرض کنید در حال حاضر، فقط برای ایجاد انگیزه ما 1003 00:44:03,770 --> 00:44:08,910 بحث در هفته به علاوه زمان، این یک فایل به نام structs.h است. 1004 00:44:08,910 --> 00:44:11,440 و دوباره، این فقط یک طعم از چیزی که در پیش روست. 1005 00:44:11,440 --> 00:44:13,090 اما توجه کنید که بسیاری از این نظر است. 1006 00:44:13,090 --> 00:44:17,440 پس به من اجازه برجسته تنها بخش جالب در حال حاضر. 1007 00:44:17,440 --> 00:44:18,020 typedef - 1008 00:44:18,020 --> 00:44:19,700 دوباره که همان کلمه کلیدی وجود دارد. 1009 00:44:19,700 --> 00:44:23,100 typedef استفاده می کنیم برای اعلام رشته به عنوان یک نوع داده ویژه. 1010 00:44:23,100 --> 00:44:27,490 شما می توانید typedef برای ایجاد نام تجاری جدید استفاده کنید انواع داده ها وجود نداشت هنگامی که 1011 00:44:27,490 --> 00:44:28,570 C اختراع شد. 1012 00:44:28,570 --> 00:44:32,520 به عنوان مثال، اعضای هیات همراه با C. کاراکتر همراه با C. دو می آید با C. اما 1013 00:44:32,520 --> 00:44:34,000 هیچ اندیشه ای از یک دانش آموز وجود دارد. 1014 00:44:34,000 --> 00:44:37,230 و در عین حال این امر می تواند بسیار مفید باشد قادر به نوشتن یک برنامه است که فروشگاه ها 1015 00:44:37,230 --> 00:44:40,440 در یک متغیر، شماره شناسنامه دانش آموز، نام خود و خانه خود را. 1016 00:44:40,440 --> 00:44:42,890 به عبارت دیگر، سه قطعه از داده ها، مانند int و 1017 00:44:42,890 --> 00:44:44,420 رشته و رشته دیگر. 1018 00:44:44,420 --> 00:44:48,220 >> با typedef، چه بسیار قدرتمند در مورد این و و sturct کلمه کلیدی برای 1019 00:44:48,220 --> 00:44:53,660 ساختار، شما، برنامه نویس در سال 2013، در واقع می تواند خود را تعریف 1020 00:44:53,660 --> 00:44:57,530 انواع داده ها که سال وجود ندارد پیش اما که متناسب با اهداف خود را. 1021 00:44:57,530 --> 00:45:01,910 و بنابراین در اینجا، در خطوط 13 تا 19، ما در حال اعلام یک نوع داده جدید، مانند 1022 00:45:01,910 --> 00:45:04,320 هوشمند، اما خواستار آن را دانش آموزان. 1023 00:45:04,320 --> 00:45:09,310 و در داخل این متغیر در حال رفتن به سه چیز - بین المللی، یک رشته، 1024 00:45:09,310 --> 00:45:09,930 و یک رشته. 1025 00:45:09,930 --> 00:45:13,040 بنابراین شما می توانید از آنچه واقعا فکر می کنم در اینجا اتفاق افتاده است، حتی اگر این 1026 00:45:13,040 --> 00:45:17,160 کمی ساده برای امروز، یک دانش آموز است که اساسا در حال رفتن است 1027 00:45:17,160 --> 00:45:19,450 شبیه به این. 1028 00:45:19,450 --> 00:45:22,580 خود را برای رفتن به یک تکه حافظه با یک ID به، نام 1029 00:45:22,580 --> 00:45:25,580 زمینه و یک میدان خانه. 1030 00:45:25,580 --> 00:45:30,670 و ما قادر خواهید بود به استفاده از آن تکه های حافظه و دسترسی به آنها به شرح زیر است. 1031 00:45:30,670 --> 00:45:38,870 >> اگر من به struct0.c بروید، در اینجا یک نسبتا طولانی است، اما پس از 1032 00:45:38,870 --> 00:45:42,630 الگو، از کد که با استفاده از این ترفند جدید است. 1033 00:45:42,630 --> 00:45:45,790 پس اول، اجازه دهید توجه کنید. به قطعات جالب تا بالا. 1034 00:45:45,790 --> 00:45:49,670 شارپ تعریف دانش آموزان 3، اعلام کرد ثابت نام دانش آموزان و اختصاص 1035 00:45:49,670 --> 00:45:53,450 آن فردی را خودسرانه شماره 3، فقط بنابراین من باید سه دانش آموزان با استفاده از 1036 00:45:53,450 --> 00:45:54,830 این برنامه در حال حاضر. 1037 00:45:54,830 --> 00:45:55,960 در اینجا می آید بخش اصلی است. 1038 00:45:55,960 --> 00:45:58,860 و توجه کنید، چگونه می توانم اعلام کنم مجموعه ای از دانش آموزان؟ 1039 00:45:58,860 --> 00:46:00,480 خوب، من فقط استفاده از همان نحو. 1040 00:46:00,480 --> 00:46:02,110 کلمه دانش آموز به وضوح جدید است. 1041 00:46:02,110 --> 00:46:04,790 اما دانش آموز، کلاس، دانش آموزان براکت. 1042 00:46:04,790 --> 00:46:06,720 >> بنابراین متاسفانه زیادی وجود دارد استفاده مجدد از شرایط اینجا. 1043 00:46:06,720 --> 00:46:07,660 این فقط یک عدد است. 1044 00:46:07,660 --> 00:46:09,040 پس این است که ضرب المثل مثل حکایت سه. 1045 00:46:09,040 --> 00:46:11,430 کلاس تنها چیزی است که من می خواهم متغیر تماس بگیرید. 1046 00:46:11,430 --> 00:46:12,840 من می توانم آن را به دانش آموزان تماس بگیرید. 1047 00:46:12,840 --> 00:46:15,880 اما کلاس، این است که یک کلاس در شی گرا نوع جاوا از راه. 1048 00:46:15,880 --> 00:46:17,220 این فقط یک کلاس از دانش آموزان است. 1049 00:46:17,220 --> 00:46:20,590 و نوع داده ها از هر عنصر در آن آرایه دانش آموز است. 1050 00:46:20,590 --> 00:46:23,040 پس این است که کمی متفاوت است و از گفتن چیزی 1051 00:46:23,040 --> 00:46:25,250 شبیه به این، آن را فقط - 1052 00:46:25,250 --> 00:46:29,500 من گفت: من سه دانشجو را و تماس که کلاس آرایه. 1053 00:46:29,500 --> 00:46:29,800 >> بسیار خوب. 1054 00:46:29,800 --> 00:46:30,680 حالا در اینجا یک حلقه چهار است. 1055 00:46:30,680 --> 00:46:33,480 های آشنا این مرد - تکرار از صفر در دو تا سه. 1056 00:46:33,480 --> 00:46:35,160 و در اینجا قطعه جدید از نحو است. 1057 00:46:35,160 --> 00:46:37,710 این برنامه را به من بی درنگ، انسان، یک دانش آموز را به آن بدهد 1058 00:46:37,710 --> 00:46:39,200 ID، که از نوع int است. 1059 00:46:39,200 --> 00:46:44,650 و در اینجا به نحو که شما با آن می توانید این کارها را بکنید ذخیره چیزی در زمینه ID در 1060 00:46:44,650 --> 00:46:48,630 محل کلاس براکت I. بنابراین این نحو است که جدید نیست. 1061 00:46:48,630 --> 00:46:51,450 این حالت فقط بدان معناست هشتم را من دانش آموز در کلاس. 1062 00:46:51,450 --> 00:46:52,940 اما این نماد جدید است. 1063 00:46:52,940 --> 00:46:56,320 تا در حال حاضر، ایم می تواند نقطه استفاده نمی شود، حداقل در کد شبیه به این. 1064 00:46:56,320 --> 00:47:01,490 این به این معنی به ساختار شناخته شده به عنوان یک دانش آموز قرار داده و چیزی وجود دارد. 1065 00:47:01,490 --> 00:47:05,670 به طور مشابه، در این خط بعد، 31، پیش رو قرار داده و هر نوع کاربر 1066 00:47:05,670 --> 00:47:10,530 برای یک نام در اینجا و چه آنها را برای انجام خانه، همین، پیش بروید و 1067 00:47:10,530 --> 00:47:13,230 قرار داده و آن را در خانه. 1068 00:47:13,230 --> 00:47:15,955 >> پس چه چیزی این برنامه در نهایت کاری انجام دهید؟ 1069 00:47:15,955 --> 00:47:17,220 شما می توانید یک تیزر کمی وجود دارد را ببینید. 1070 00:47:17,220 --> 00:47:24,780 اجازه دهید من به جلو و انجام ساخت ساختمانها 0 نقطه بریده بریده ساختار 0، شماره دانشجویی 1، 1071 00:47:24,780 --> 00:47:28,250 می گویند دیوید ماتر، دانشجوی ID 2. 1072 00:47:28,250 --> 00:47:32,070 راب مکتوب، دانشجوی ID 3. 1073 00:47:32,070 --> 00:47:35,010 لورن Leverit - 1074 00:47:35,010 --> 00:47:38,380 و تنها چیزی که این برنامه انجام داد، است که فقط به طور کامل خودسرانه، 1075 00:47:38,380 --> 00:47:40,980 من می خواستم برای انجام کاری با این داده ها، در حال حاضر که من به ما آموخت که چگونه به 1076 00:47:40,980 --> 00:47:43,450 استفاده از ساختمانها، من فقط به حال این حلقه اضافی در اینجا. 1077 00:47:43,450 --> 00:47:45,260 من بیش از مجموعه ای از دانش آموزان تکرار شود. 1078 00:47:45,260 --> 00:47:49,170 من استفاده می شود، دوست شاید در حال حاضر ما آشنا، رشته مقایسه، stircomp 1079 00:47:49,170 --> 00:47:53,780 منزل دانش آموز 8TH در است برابر با ماتر؟ 1080 00:47:53,780 --> 00:47:56,760 و اگر چنین است، تنها چیزی چاپ خودسرانه دوست، بله، آن هست. 1081 00:47:56,760 --> 00:47:59,430 اما باز هم، فقط به من دادن فرصت برای استفاده و استفاده مجدد و 1082 00:47:59,430 --> 00:48:02,270 استفاده مجدد از این نماد نقطه جدید. 1083 00:48:02,270 --> 00:48:03,250 >> پس چه کسی اهمیت میدهد، درست است؟ 1084 00:48:03,250 --> 00:48:06,270 آیند تا با یک برنامه دانشجویی است تا حدودی خودسرانه، اما معلوم است 1085 00:48:06,270 --> 00:48:09,800 که ما می توانیم چیزهای مفید را با انجام این، برای مثال به شرح زیر است. 1086 00:48:09,800 --> 00:48:14,600 این یک ساختار بسیار پیچیده تر است در C دوجین یا زمینه، 1087 00:48:14,600 --> 00:48:15,880 تا حدودی نام cryptically. 1088 00:48:15,880 --> 00:48:20,110 اما اگر شما تا کنون از گرافیک شنیده فرمت فایل به نام بیت مپ، BMP، 1089 00:48:20,110 --> 00:48:22,830 نظر می رسد که فرمت فایل های بیت مپ تقریبا به نظر می رسد که این. 1090 00:48:22,830 --> 00:48:24,200 این احمق کمی صورت لبخند است. 1091 00:48:24,200 --> 00:48:27,840 این یک تصویر کوچک است که من در بزرگنمایی کرده ام بسیار بزرگ است به طوری که من می تواند هر کدام را ببینید 1092 00:48:27,840 --> 00:48:30,410 از نقاط یا پیکسل های فردی. 1093 00:48:30,410 --> 00:48:33,800 در حال حاضر، آن را تبدیل از ما می توانیم نمایندگی نقطه سیاه و سفید، می گویند، با عدد 0. 1094 00:48:33,800 --> 00:48:35,520 و یک نقطه سفید با شماره 1. 1095 00:48:35,520 --> 00:48:39,140 >> بنابراین به عبارت دیگر، اگر شما می خواهید را به منظور جلب چهره خندان و صرفه جویی در آن تصویر را در یک 1096 00:48:39,140 --> 00:48:42,680 کامپیوتر، آن را کافی است برای ذخیره صفر و آنهایی که شبیه به این، که در آن، 1097 00:48:42,680 --> 00:48:45,250 دوباره، آنهایی که سفید هستند و صفر سیاه و سفید هستند. 1098 00:48:45,250 --> 00:48:48,290 و با هم، اگر شما به طور موثر اماده کردن و صفرها، شما باید 1099 00:48:48,290 --> 00:48:51,030 شبکه پیکسل، و اگر شما از گواهانم. آنها را، شما باید ناز 1100 00:48:51,030 --> 00:48:52,560 چهره لبخند کم است. 1101 00:48:52,560 --> 00:48:58,150 در حال حاضر، فرمت فایل های بیت مپ، BMP، به طور موثر که در زیر هود، 1102 00:48:58,150 --> 00:49:00,970 اما با پیکسل بیشتر SOT است که شما در واقع می تواند نشان دهنده رنگ. 1103 00:49:00,970 --> 00:49:05,170 >> اما هنگامی که شما به پیچیده تر فرمت های فایل مانند BMP و JPEG و GIF 1104 00:49:05,170 --> 00:49:09,360 که با آن شما ممکن است آشنا، کسانی فایل ها بر روی دیسک به طور معمول نه تنها 1105 00:49:09,360 --> 00:49:13,760 صفر کرده اند و آنهایی که برای پیکسل، اما آنها برخی از ابرداده به عنوان - 1106 00:49:13,760 --> 00:49:16,960 متا به این معنا است که واقعا نمی داده، اما آن را مفید داشته باشند. 1107 00:49:16,960 --> 00:49:21,370 بنابراین این زمینه در اینجا دلالت، و ما این را در جزئیات بیشتر در P-مجموعه را ببینید 1108 00:49:21,370 --> 00:49:25,810 5، که قبل از صفر و آنهایی که نمایندگی پیکسل در یک تصویر، 1109 00:49:25,810 --> 00:49:29,110 یک دسته از ابرداده وجود دارد مانند اندازه تصویر و 1110 00:49:29,110 --> 00:49:30,250 عرض تصویر. 1111 00:49:30,250 --> 00:49:32,910 و متوجه من برداشت برخی از چیزهای دلخواه در اینجا - 1112 00:49:32,910 --> 00:49:34,260 عرض و ارتفاع. 1113 00:49:34,260 --> 00:49:36,160 شمارش بیت و برخی از چیزهای دیگر است. 1114 00:49:36,160 --> 00:49:37,840 بنابراین برخی از متا دیتا ها را در یک فایل وجود دارد. 1115 00:49:37,840 --> 00:49:41,470 >> اما با درک چگونه فایل ها گذاشته در این راه، در واقع شما می توانید 1116 00:49:41,470 --> 00:49:45,890 سپس دستکاری تصاویر، بازیابی تصاویر از دیسک، تغییر اندازه تصاویر. 1117 00:49:45,890 --> 00:49:47,560 اما شما می توانید لزوما آنها را بهبود بخشید. 1118 00:49:47,560 --> 00:49:48,480 من یک عکس مورد نیاز است. 1119 00:49:48,480 --> 00:49:52,840 پس من رفتم به RJ در اینجا، کسی که تو را دیدم بر روی صفحه نمایش کاملا چند وقت پیش. 1120 00:49:52,840 --> 00:49:57,160 و اگر من باز کردن کلیدی در اینجا، این است که چه اتفاقی می افتد اگر شما سعی می کنید به زوم در و 1121 00:49:57,160 --> 00:49:59,380 افزایش RJ. 1122 00:49:59,380 --> 00:50:01,480 او هیچ بهتر شدن نه واقعا. 1123 00:50:01,480 --> 00:50:06,240 در حال حاضر کلیدی از نوع مات آن است کمی، فقط به بیش از براق 1124 00:50:06,240 --> 00:50:11,040 واقعیت است که RJ نمی شود به خصوص افزایش یافته است هنگامی که شما زوم شوید. 1125 00:50:11,040 --> 00:50:13,310 و اگر آن را در این راه، مربع را ببینید؟ 1126 00:50:13,310 --> 00:50:15,490 آره، شما قطعا می توانید ببینید مربع در یک پروژکتور. 1127 00:50:15,490 --> 00:50:17,690 >> این چیزی است که شما می توانید هنگامی که شما را در توسعه. 1128 00:50:17,690 --> 00:50:22,570 اما در فهم اینکه چگونه RJ ما و یا صورت خندان پیاده سازی شده است به ما اجازه 1129 00:50:22,570 --> 00:50:24,950 در واقع نوشتن کد که دستکاری این چیزها. 1130 00:50:24,950 --> 00:50:29,970 و من فکر کردم من می خواهم در این یادداشت پایان، با 55 ثانیه از افزایش که، 1131 00:50:29,970 --> 00:50:31,230 من به جرات می گویند و نه گمراه کننده است. 1132 00:50:31,230 --> 00:50:32,990 >> [پخش ویدئو] 1133 00:50:32,990 --> 00:50:34,790 >> او دروغ می گوید. 1134 00:50:34,790 --> 00:50:38,310 درباره چه، من نمی دانم. 1135 00:50:38,310 --> 00:50:41,200 >> پس چه می دانیم؟ 1136 00:50:41,200 --> 00:50:45,280 >> که در ری Santoya 09:15 در ATM بود. 1137 00:50:45,280 --> 00:50:47,830 >> بنابراین سوال این است او در 9:16 انجام شده است؟ 1138 00:50:47,830 --> 00:50:50,750 >> تیراندازی نه میلی متر در چیزی. 1139 00:50:50,750 --> 00:50:52,615 شاید او را دیدم تیرانداز از خفا. 1140 00:50:52,615 --> 00:50:54,760 >> یا کار با او بود. 1141 00:50:54,760 --> 00:50:56,120 >> ، صبر کنید. 1142 00:50:56,120 --> 00:50:57,450 بازگشت به عقب. 1143 00:50:57,450 --> 00:50:58,700 >> چه می بینید؟ 1144 00:50:58,700 --> 00:51:05,530 1145 00:51:05,530 --> 00:51:09,490 >> چهره اش بیاورید، صفحه نمایش کامل. 1146 00:51:09,490 --> 00:51:09,790 >> عینک او. 1147 00:51:09,790 --> 00:51:11,040 >> وجود دارد یک انعکاس است. 1148 00:51:11,040 --> 00:51:21,790 1149 00:51:21,790 --> 00:51:23,520 >> که تیم بیس بال Neuvitas است. 1150 00:51:23,520 --> 00:51:24,530 که لوگوی خود است. 1151 00:51:24,530 --> 00:51:27,040 >> و او به هر کس که صحبت با پوشیدن این ژاکت. 1152 00:51:27,040 --> 00:51:27,530 >> [END پخش ویدئو] 1153 00:51:27,530 --> 00:51:29,180 >> دیوید J. مالان: این مشکل تنظیم 5. 1154 00:51:29,180 --> 00:51:30,720 ما شما را در هفته آینده را ببینید. 1155 00:51:30,720 --> 00:51:32,330 >> SPEAKER مرد: در CS50 بعدی. 1156 00:51:32,330 --> 00:51:39,240 >> [غوغای جیرجیرک] 1157 00:51:39,240 --> 00:51:41,270 >> [پخش موسیقی]