>> SPEAKER 1: سلام بر همه.
ما در حال رفتن به شروع کنید.
من فکر می کنم مردم هنوز هم رفتن به فیلتر کردن در.
اما در جهت منافع هم، به طوری که ما می توانیم شما بچه ها از اینجا در زمان،
ما قصد داریم به شروع می شود.
بنابراین به CS50 امتحان 0 بررسی خوش آمدید.
برای کسانی از شما که متوجه نشده اند در عین حال، شما یک سوال در چهارشنبه.
وو هو.
>> اگر شما آغاز شده است مطالعه است یا متوجه نیست که این وجود دارد با این حال،
آزمونها گذشته و تمام اطلاعات در مورد مسابقه خود را در cs50.net/quizzes می باشد.
در برخی از مسائل بسیار خوب وجود دارد در وجود دارد، آزمونها گذشته از آخرین 10
سال و همچنین اطلاعات در مورد این مسابقه و موضوعات
که تحت پوشش خواهد شد.
بنابراین اجازه دهید شروع کنید.
>> پس شما بچه ها ممکن است به یاد داشته باشید، اول روز کلاس دیوید کسانی که لامپ در حال.
بنابراین اساسا، همه چیز است که می رود در زیر هود از یک کامپیوتر است
انجام شده در دودویی.
دودویی به معنای آنچه در آن برای تلفن های موبایل مانند، 0 و 1 است.
این دو مقدار است که می توان بیان کرد.
>> بنابراین درست مانند روز اول از بخش هنگامی که دیوید تبدیل در نور
لامپ برای نشان دادن در، و یا 1، کامپیوتر ما درک دودویی به عنوان 0 و
1 در، روشن یا خاموش.
مبانی دودویی.
هر محل نشان داده شده است در پایه دو.
بنابراین شما اضافه 2 به 0 به 1 به 2 از همه طرف است.
>> برای محاسبه چه باینری خود را به اعشاری، شما فقط به دنبال این معادله
نوع چیزی.
اگر شما یک 1 در هر یک از این مکان ها، شما آن را با ضرب هر
پایه آن در، آن را به اضافه کردن، و شما دهدهی دریافت کنید.
پس این است که چگونه شما تعداد دفعات مشاهده به 5 باینری.
درست مثل آنچه که ما در حال انجام آخرین اسلاید، این است که چگونه شما را
نماینده 1 از 5.
>> به طور مشابه، درست مثل شما می توانید اضافه کردن و تفریق در مبنای ده می و یا پایه 10 و یا
واقعا هر پایه، در می توانید اضافه کنید و تفریق دودویی.
دقیقا همان چیزی است که شما انتظار می رود زمانی که شما اضافه کردن دو تا، اگر آن را برابر بیشتر
از 1، شما حمل 1، آن را یک 0، و انجام آن علاوه بر این که راه، فقط
مثل وقتی که با منظم دهدهی و یا هر پایگاه دیگر.
دانلود.
>> بنابراین مانند قبل از من، همه چیز را گفت که در زیر هود از کامپیوتر ما می رود
در، یا باینری 0 و 1 انجام می شود.
پس چگونه بیان ما، به عنوان مثال، نامه ها و یا اعداد، و یا شخصیت؟
و پاسخ به این ASCII است.
>> ASCII یک نگاشت بین شخصیت است که ما به طور معمول در مراجعه کنید
زبان انگلیسی مانند است، در B، C است، تاکید، خط تیره، و
هر چیزی مانند آن.
و این نقشه ها که به ارزش ASCII.
ارزش ASCII فقط یک عدد است که می توان با کامپیوتر شما قابل درک باشد.
و درست مثل شما می توانید علاوه بر انجام و تفریق با اعداد، شما می توانید انجام دهید
آنها با ارزش های ASCII.
>> بنابراین در این مثال، این نسخه قابل چاپ کردن؟
آره، بنابراین فقط یک فضا فضای B فضای C D. کجا موس من بود؟
توجه کنید شما می توانید یک int در 65 تعریف کنیم.
و هنگامی که شما نسخه قابل چاپ که با استفاده از درصد C، آن را تفسیر که به عنوان یک
شخصیت و چاپ خواهد شد A.
>> به طور مشابه، شما می توانید اعلام آن را به عنوان کاراکتر.
و هنگامی که شما آن را چاپ کنید و با استفاده از درصد C، آن را تفسیر است که به عنوان
درصد D. و درست مثل شما می توانید اضافه کنید تعداد، شما می توانید اضافه کردن کاراکتر است
ارزش ASCII، در این مورد.
>> بنابراین یک اشاره گر کمی برای همه.
5، به عنوان یک رشته، نمی در واقع برابر با 5.
پس چگونه ممکن است تبدیل ما رشته 5 به عدد صحیح 5؟
هر گونه ایده ها؟
آره.
>> بنابراین اگر در حال حاضر 5 به عنوان یک رشته، ما می توانیم 0 تفریق.
و این هم به ما 5 را.
و به طور مشابه، اگر در حال حاضر 5 عنوان عدد صحیح، اضافه کنید که به رشته 0.
و این به ما می دهد رشته 5.
دانلود.
>> در حال حاضر، به خاطر به سخنرانی که در آن ما در مورد الگوریتم صحبت کردیم.
پس چگونه ما در واقع می خواهند یک کامپیوتر به انجام کارهای جالب؟
شما می دانید، فقط جمع و تفریق اعداد و چاپ چیز نیست
که هیجان انگیز است.
معمولا، ما می خواهیم کامپیوتر ما به انجام نوعی از الگوریتم.
چیزی کمی پیچیده تر از حساب ساده.
>> یک الگوریتم فقط یک گام به گام مجموعه ای است از دستورالعمل در مورد چگونگی انجام
task-- خاص
درست مثل دستور غذا.
شما ممکن است در روز اول به یاد داشته باشید کلاس و جایی که داوود کرده بود ما حساب یک اتاق
مردم و چگونه بسیاری از مردم در اتاق بودند.
شما ممکن است به شمارش استفاده می شود یک به یک.
1، 2، 3، 4.
در این صورت، یک الگوریتم زمان خطی.
>> اما دیوید معرفی یک الگوریتم برای شما به تعداد افراد در اتاق
که در آن هر کس می ایستد، به شما می گویند شما تعداد به شخص دیگری، اضافه کردن که
تعداد، و یک نفر نشسته.
و دوباره تکرار کنید.
این یک نوع الگوریتم است.
ما می توانیم چگونه کارآمد تجزیه و تحلیل الگوریتم بر اساس بر آن زمان اجرا شود.
اما ما کمی صحبت اطلاعات بیشتر در مورد که بعدا.
>> بنابراین تمام الگوریتم همچنین می توانید در شبه نوشته شده است.
شبه فقط انگلیسی مانند گرامر استفاده شده برای نشان دادن
یک زبان برنامه نویسی.
به عنوان مثال، اگر ما می خواستیم به درخواست کاربر تعداد مورد علاقه من به حدس زدن، ما
ممکن است شبه به عنوان مثل است.
>> دریافت کاربران را حدس بزنید.
اگر حدس درست باشد، به آنها بگویید آنها درست کنید، چیز دیگری به آنها بگویید
آنها درست نیست.
و شبه راه به راحتی است به نمایندگی از یک ایده و یا یک الگوریتم.
بنابراین در حال حاضر ما در صورت تمایل به واقع ارسال این در زبان که کامپیوتر
ممکن است درک.
بنابراین ما می تواند شبه ما ارسال و تفسیر که به کد منبع آن است.
>> تا کنون، کد منبع باید پایبند به نحو خاصی از
یک زبان برنامه نویسی.
و تا کنون، در CS50، ما شده است با استفاده از بیشتر ج.
بنابراین این ممکن است کد منبع برای ج.
بعد ها در این دوره، شما شب در تماس با برنامه نویسی دیگر
زبان هایی مانند PHP.
یا اگر شما حتی کلاس های دیگر را، شما ممکن جاوا، پایتون، و یا حتی OCML انجام دهد.
اما در زبان برنامه ج ما، این است چگونه ممکن است ما کد منبع را برای ارسال
الگوریتم شبه که من فقط قبل از آن شرح داده شده.
>> پس چگونه کامپیوتر خود را در واقع درک کنند که؟
من می خواهم قبل، از آن گفت که تنها واقعا صفر و آنهایی که درک می کند.
پس چگونه آن را از منبع دریافت کد را به چیزی است که می تواند
درک؟
خب، ما باید چیزی به نام یک کامپایلر.
>> اگر شما به یاد پشت در بسیاری از خود psets، شما یک نوع از برنامه به حال
نوشته شده در یک فایل نقطه ج.
و سپس شما می توانید را تایپ کنید.
پس چه شده است را انجام می دهند؟
>> شما می توانید را تایپ به کامپایل شما برنامه به دلیل someone--
هر کس مجموعه ای ص خود را نوشت. احتمالا David--
ایجاد یک فایل را.
و که می گوید را می دانم که برای اجرای خود را کامپایلر، به نام صدای جرنگ جرنگ، که اراده
سپس کامپایل کد منبع خود را به اعتراض کد، که صفر و آنهایی که
که کامپیوتر شما را درک کنند.
اما کمی بعد، ما خواهد شد بیشتر در عمق در مورد کامپایلرها.
>> بنابراین به یاد pset 0، where-- بله، شما سوالی دارید؟
>> رسید [نامفهوم]؟
>> SPEAKER 1: بله.
من فکر می کنم آنها در واقع باید آنلاین باشد.
آره.
>> رسید آیا آن را مانند [نامفهوم]؟
>> SPEAKER 1: این طور نیست.
در cs50.net/quizzes می باشد.
>> رسید آزمونها اسلش، بریده بریده 2013، بریده بریده 0، و فقط از طریق کلیک کنید
آزمونها 2013 و مسابقه 0، بررسی لام بخش.
>> SPEAKER 1: آره، بنابراین اگر شما بچه ها می خواهید به کشیدن آن را به بالا و به آن نگاه خود را در
کامپیوتر خود، که خوب است بیش از حد.
دوباره بگو.
>> رسید [نامفهوم].
>> SPEAKER 1: آره، [نامفهوم] متغیر ساختگی است.
آه، بله؟
>> رسید [نامفهوم]؟
>> SPEAKER 1: نه، اعتصاب می در آزمون نیست.
با عرض پوزش، سوال او بود، اعتصاب در آزمون.
و آن نمی باشد.
بنابراین pset 0، شما بچه ها باید همه چیزی اجرا با استفاده از ابتدا.
و ما برخی از برنامه های اساسی یاد گرفته بلوک های ساختمان با استفاده از ابتدا.
>> بنابراین اجازه دهید نگاهی به برخی از از این بلوک های ساختمانی
که یک برنامه را تشکیل می دهند.
نخست عبارت بولی باشد.
عبارات بولی هستند و 0 یا هر چیزی که
دو مقدار ممکن است.
در این مورد، درست یا غلط، روشن یا خاموش، و آری یا نه.
نمونه ای از یک ساده، بسیار ساده است، برنامه ای است که با استفاده از بولی
بیان اینجا.
>> بنابراین به منظور برای عبارات بولی به مفید باشد، ما باید عملگرهای بولی.
این اپراتور است که می تواند مورد استفاده قرار گیرد مقایسه برخی از ارزش ها.
بنابراین ما باید و یا نه برابر، کمتر از یا مساوی، بزرگتر یا
برابر و کمتر از یا بیشتر از.
اما این اپراتور بسیار مفید نیست مگر ما می توانیم آنها را به ترکیب
شرایط.
>> پس شما بچه ها ممکن است از ابتدا به یاد داشته باشید و از ص خود مجموعه است که ما
شرایط بود.
آنها، در اصل، مانند چنگال در منطق برنامه خود را که
اجرا بسته به اینکه آیا شرط ملاقات است.
پس یکی از شرایط است که ما تا به حال چند بار در این دوره استفاده می شود
اگر، دیگری، اگر، و شرایط دیگر.
>> در اینجا یک مثال از اینکه چگونه است شما ممکن است استفاده از آن.
آیا کسی می داند تفاوت بین فقط با استفاده از دستور if همه
راه را به پایین آیات اگر، دیگری، اگر، و دیگری ترکیب؟
بله؟
>> رسید [نامفهوم].
>> SPEAKER 1: دقیقا.
بنابراین اگر من تا به حال اگر تمام راه را به این راه، حتی اگر این وضعیت را برمی گرداند
درست است، آن را هنوز هم ادامه خواهد داد تست دو بعدی.
در حالی که، با دیگری، اگر، دیگری بیانیه، اگر یک مقدار true برگرداند
برخی دیگر آزمایش نشده است.
هر گونه سؤال در مورد آن؟
دانلود.
>> بنابراین شما با استفاده از اگر، دیگری از دیگری بیانیه اگر شما می دانید که آن را تنها می تواند
یکی از این موارد.
بنابراین ما می دانیم اگر x کمتر از 0 باشد، آن را قطعا نمی شود
بیشتر از 0.
>> بعد، یکی دیگر از بلوک ساختمان که ما یاد گرفته حلقه می باشد.
ما سه نوع از حلقه.
برای حلقه، در حالی که حلقه ها، و در حالی که حلقه.
و به طور کلی، هنگامی که شما نشستن به چیزی ارسال، شما باید تصمیم بگیرید
که از سه شما می خواهید به استفاده از.
پس چگونه ما که یکی تصمیم می گیرید؟
>> ما به طور کلی استفاده از یک حلقه for اگر ما می دانیم چند بار ما می خواهیم به تکرار
از چیزی و یا چند بار ما می خواهیم برای انجام یک کار.
ما در حالی که حلقه استفاده کنید اگر ما نیاز به برخی از شرایط درست باشد به نگه داشتن در حال اجرا.
و ما در حالی که استفاده از بسیار شبیه به انجام در حالی که، اما ما می خواهیم کد خود را به اجرا در
حداقل یک بار.
>> در حالی که انجام دهید، این است هر آنچه در انجام خواهد شد همیشه حداقل یک زمان اجرا شود.
در حالی که، با در حالی که، آن ممکن است اجرا شود نه در همه اگر
شرایط راضی نیست.
هر گونه سؤال با که؟
>> بنابراین ساختار یک حلقه for.
شما بچه ها همه این دیده می شود.
شما آن را مقداردهی اولیه.
شما باید به نوعی از بیماری است.
بنابراین، برای مثال، ما ممکن است مقداردهی اولیه برای من برابر با 0.
من کمتر از 10 است.
و من + +.
بسیار ساده است که ما انجام داده ایم.
>> برای یک حلقه در حالی که، به طور مشابه، شما باید به برخی از نوع اولیه،
نوعی از شرایط، و نوعی از به روز رسانی.
بنابراین ما می توانیم ما برای حلقه اجرا نیز به عنوان یک حلقه در حالی که با استفاده از این.
و به طور مشابه با کارهای در حالی که حلقه، ما ممکن است برخی دهی اولیه داشته باشد،
اجرای چیزی، به روز رسانی آن، و پس از مشورت کنید.
>> بنابراین در حال حاضر توابع.
ما همه چیز را با هم.
ما در صورت تمایل به ارسال برخی از نوع تابع.
عملکرد مشترک است که شما ممکن است را دیده اند، در حال حاضر اصلی است.
بخش اصلی یک تابع است.
این یک نوع بازگشت، اعضای هیات.
از آن است که نام تابع، اصلی.
و آن را تا استدلال، تعداد آنها و argv را.
بنابراین اصلی فقط یک تابع است.
>> سایر توابع شما ممکن است مورد استفاده قرار گیرد، تابع () printf printf-- function-- است
GetInt، toupper.
اما این اتفاق می افتد به شده است برای ما اجرا
نوعی از کتابخانه.
اگر شما بچه ها به یاد داشته باشید از جمله این کتابخانه CS50.h یا
I استاندارد / کتابخانه O.
بله، سوال؟
>> رسید اصلی آیا فقط ذاتی در ج؟
آیا آن را فقط به نوع [نامفهوم]؟
>> SPEAKER 1: سوال این است که اگر اصلی ذاتی در ج است.
و بله، همه توابع یک تابع اصلی.
این نوع از لازم برای کامپیوتر می دانم که در آن برای شروع
در حال اجرا کد.
>> رسید بنابراین شما نمی خواهد [نامفهوم]؟
>> SPEAKER 1: شماره
هر گونه سؤال دیگر؟
دانلود.
بنابراین درست مانند شما می توانید یک تابع استفاده کنید که برای شما نوشته شده است، شما همچنین می توانید
نوشتن تابع خود را.
این یک تابع است که کسی ممکن است نوشته اند برای محاسبه حجم
یک پرسش، به عنوان مثال.
یک نوع بازگشت وجود دارد، در این مورد اعضای هیات، ما نام تابع q و ما
لیستی از پارامترها.
>> و توجه داشته باشید که شما را به ارسال داده ها نوع پارامتر می خواهید به
استفاده و یا دیگری تابع نیست می دانید چه نوع
پارامتر باید پذیرش شود.
بنابراین، در این مورد، ما می خواهیم یک عدد صحیح به عنوان ورودی است.
پس چرا ممکن است ما می خواهیم به استفاده از توابع؟
>> اول از همه، بزرگ برای سازمان است.
آنها کمک به شکستن کد خود را به تر تکه های سازمان یافته و
آن را آسان تر به عنوان خوانده شده.
ساده سازی.
این خوب است برای طراحی است.
هنگامی که شما در حال خواندن یک قطعه از کد و تابع اصلی است که واقعا،
واقعا طولانی، ممکن است آن را سخت تر به دلیل در مورد آنچه اتفاق افتاده است.
بنابراین اگر شما شکستن آن را به توابع، ممکن است آن را آسان تر به عنوان خوانده شده.
و استفاده مجدد از توانایی.
اگر شما یک تکه از کد که بودن نام و یا اجرای چند بار،
به جای بازنویسی که کد 10 بار در تابع اصلی خود را، شما ممکن است
می خواهید آن را استفاده مجدد.
و پس از آن هر زمانی که شما نیاز به استفاده از آن قطعه ای از کد، فراخوانی تابع.
>> بنابراین در حال حاضر اگر ما به یاد داشته باشید به خراش، ما همچنین در مورد چند مفهوم صحبت کردیم،
که یکی از آنها نخ است.
موضوع مفهوم چند است توالی کد
اجرای در همان زمان.
بنابراین فکر می کنم پشت به روز که در آن دیوید به حال شما بچه ها را از تعداد دفعات مشاهده شده
مردم در اتاق.
>> اساسا، آنچه که قرار بود در است همه شما بچه ها بود
در حال اجرا موضوعات جداگانه.
و این موضوعات با هم آمدند برای به دست آوردن نوعی از پاسخ.
به طور مشابه، در ابتدا، هنگامی که شما به جن های متعدد، شما ممکن است
یک گربه و یک سگ.
و آنها به طور همزمان خواهد بود در حال اجرا اسکریپت خود را دارند.
این یک نمونه از نخ است.
>> و مفهوم دیگری که بود معرفی شده در ابتدا حوادث بود.
و وقایع قطعات زمانی مختلف از کد خود را در ارتباط با یکدیگر.
در ابتدا، این بود که شما با استفاده از کنترل پخش و وقتی که من
دریافت بلوک.
>> و همچنین، در مجموعه مسائل 4، ما شاهد کمی از وقایع را به عنوان به خوبی.
شما بچه ها ممکن است مورد استفاده قرار گیرد کتابخانه Gevent.
و یک تابع وجود دارد waitForClick که در آن شما در انتظار بودند
برای کاربر به را کلیک کنید.
و کلیک خود را، در این مورد، خواهد بود این رویداد و منتظر کلیک شما می باشد
کنترل رویدادها.
>> و همچنین، در طول در حال اجرا psets شما و کار بر روی psets خود را، شما
ممکن است در تماس با آمده برخی از این دستورات.
این چیزی است که شما را به تایپ خود را پنجره ترمینال یا هر پنجره
که نشان می دهد تا در گرم ویرایش خود را به، اساسا، حرکت به کامپیوتر شما.
>> بنابراین برای مثال، LS لیست محتویات یک دایرکتوری.
ساخت فهرست یک پوشه جدید ایجاد می کند.
CD، دایرکتوری تغییر دهید.
RM، حذف، حذف یک فایل و یا برخی از دایرکتوری.
و سپس حذف دایرکتوری حذف یک دایرکتوری.
>> رسید [نامفهوم]؟
>> SPEAKER 1: آره، مطمئن شوید.
با عرض پوزش، این سوال بود اگر شما را نشان می دهد با قرار دادن این
در بازی ورق.
این می تواند کمک کند.
اگر شما اتاق، شما می توانید آن را در قرار داده است.
این هم فقط به طور کلی به اندازه کافی خوب به خاطر داشته باشید، چرا که وقتی از آن استفاده کنید
در صورت تمایل به تنها آن را حفظ.
که زندگی شما را بسیار ساده تر می کند.
آیا من به سوال شما پاسخ خواهد داد؟
>> بنابراین در حال حاضر، ما صحبت کردیم کمی به طور خلاصه در مورد کتابخانه ها.
اما دو اصلی است که ما شده است با استفاده از تا کنون در این دوره می باشد
استاندارد I / O و cs50.
چه نوع چیزهایی را شامل می شوند در I / O کتابخانه استاندارد؟
>> آره، تا کنون ما تابع () printf استفاده می شود.
در cs50، ما GetInt استفاده می شود و GetString.
و رشته نوع داده نیز اتفاق می افتد در این کتابخانه cs50 اعلام شود.
ما کمی بیشتر در عمق مورد بحث چگونه کتابخانه ها کار می کنند و چگونه آنها
با بقیه کد شما تداخل می کنند.
اما آن دو اصلی هستند که ما در تماس با تا کنون در آمده
البته.
>> انواع.
این خوب است به یاد داشته باشید که چقدر می هر نوع است و یا چگونه نشان داده
بسیاری از بایت هر نوع requires--
اعضای هیات، 4 بایت. کاراکتر، 1 بایت.
شناور 4 بایت است.
چه دو برابر شده است؟
>> رسید [نامفهوم].
>> SPEAKER 1: آره، بنابراین شناور اما دو برابر اندازه.
چه در مورد مدت؟
>> رسید [نامفهوم].
>> SPEAKER 1: OK.
چه مدت؟
>> رسید [نامفهوم].
>> SPEAKER 1: آره، دو برابر یک int.
بله.
>> رسید [نامفهوم].
>> SPEAKER 1: بلند [نامفهوم].
و بعد بلند بلند دو برابر است.
>> رسید نه، نه.
طولانی فقط برای اعضای هیات است.
آن را در معماری بستگی دارد قبل از [نامفهوم]
و اعضای هیات باید به همان اندازه.
[نامفهوم].
>> SPEAKER 1: پس بلند و اعضای هیات یکسان هستند.
و بعد بلند بلند دو برابر int است.
دانلود.
و پس از آن، آخرین نوع است؟
>> رسید اشاره گر.
>> SPEAKER 1: آره، بنابراین ما آموخته کمی در مورد اشاره گر.
و صرف نظر از آنچه که یک اشاره گر است اشاره to-- از آن می تواند یک ستاره کاراکتر
یا اعضای هیات star--
همیشه 4 بایت برای اشاره گر.
سوالات در مورد آن؟
بله؟
>> رسید [نامفهوم]؟
>> SPEAKER 1: پس بلند و یک int است همان در این دستگاه cs50.
>> رسید دستگاه به طور کامل تعویض.
>> SPEAKER 1: آره.
پس بلند بلند دو برابر یک int است.
>> رسید این 32 بیت است؟
>> SPEAKER 1: 32 بیتی، آره.
>> رسید پس [نامفهوم]؟
>> SPEAKER 1: بله، اگر آن را نمی کند به صراحت می گویند، شما
باید کمی 32 فرض کنیم.
>> رسید این که چیزی می گویند مانند فرض
معماری مانند لوازم خانگی.
برای 64 بیتی، تنها چیزهایی که تغییر پوزیشن های خرید و اشاره گر می باشد.
آنها هر دو [نامفهوم].
>> SPEAKER 1: بله؟
>> رسید سوال.
بنابراین در یکی از آزمونها عمل، آن را در مورد یک int بدون علامت می پرسد.
پس چگونه خواهد بود که تعیین می شود از یک int [نامفهوم]؟
>> SPEAKER 1: بدون علامت در هم 4 بایت.
اما آنچه در مورد امضا متفاوت است int و یک int بدون علامت؟
>> رسید [نامفهوم].
>> SPEAKER 1: راست.
در واقع می توان مقادیر منفی نشان دهند.
اما چگونه این کار را انجام داد؟
>> رسید [نامفهوم].
>> SPEAKER 1: آره، آن را موجب صرفه جویی در 1 بیت برای نشان دادن علامت.
امضا یک کمی که نشان دهنده علامت.
و بدون علامت فقط همه مثبت است.
>> رسید OK.
بنابراین شما می گویند که دو برابر شده است دو بار به اندازه یک شناور؟
>> SPEAKER 1: دو دو برابر به اندازه یک شناور، بله.
>> رسید چگونه یک اشاره گر به بلند بلند [نامفهوم]؟
>> SPEAKER 1: بنابراین سوال این است که چگونه می کند اشاره گر به یک long-- طولانی
چگونه است که تنها چهار بایت زمانی بلند بلند 8 بایت است.
بنابراین به یاد داشته باشید آنچه که یک اشاره گر است، اساسا، در ارزش بسیار پایه.
>> رسید [نامفهوم].
>> SPEAKER 1: آره، بنابراین یک اشاره گر فقط یک محل حافظه است.
بنابراین مهم فضای چقدر کنید که اشاره گر با اشاره به.
تنها نیاز 4 بایت برای پیگیری از آن مکان حافظه است.
هر گونه سؤال دیگر؟
دانلود.
>> بنابراین آخرین چیزی من خروجی استاندارد است.
شما باید آنها را به طور مکرر استفاده به اندازه کافی که شما می توانید به یاد داشته باشید.
اما این زمانی است که استفاده می کنیم تابع () printf، به عنوان مثال.
و ما این متغیرهایی که کدهای فرمت نامیده می شدند.
>> بنابراین درصد ج کاراکتر، درصد من برای هوشمند، و ما نیز می تواند درصد د استفاده کنید.
این همان چیزی است.
اما، به طور کلی، در CS50 ما سعی کنید به استفاده درصد من.
درصد f برای شناور.
LD درصد برای مدت طولانی طولانی و درصد برای رشته است.
>> به طور مشابه، ما شده ایم با استفاده از چند از این توالی های گریز.
به عنوان مثال، بک اسلش نفر برای خط جدید.
این فقط برای زمانی که می خواهید قالب بندی کد خود را برای چاپ ج.
بله؟
>> رسید درصد د برای چیست؟
>> SPEAKER 1: بنابراین سوال آن چیزی است که درصد د است؟
درصد د است برای نوع داده int.
درصد د و درصد من همان است.
>> رسید چه تفاوتی بین است بک اسلش n و بک اسلش تحقیق؟
>> SPEAKER 1: بنابراین سوال این است که چه چیزی تفاوت بین عکس العمل n و
تحقیق واکنش شدید؟
من فکر می کنم بک اسلش تحقیق is--
>> رسید بنابراین بک اسلش تحقیق فقط دلالت دارد بازگشت به ابتدای خط
در واقع بدون به یک خط جدید رفتن.
بنابراین اگر شما یک تحقیق بک اسلش چاپ و شما بازگشت به ابتدای خط
پس از آن شما نسخه قابل چاپ چیزهای بیشتر، شما بازنویسی چیزهایی که در حال حاضر در
[نامفهوم].
در حالی که، نفر در واقع به یک می رود خط و می رود به [نامفهوم].
>> SPEAKER 1: خوب، هر گونه سوال دیگر؟
خوب.
من قصد دارم به آن دست به دن که ادامه خواهد داد.
>> [تشویق حضار]
>> DAN: تمام righty.
بنابراین من در مورد یکی دیگر از گسترده صحبت کردن طیف وسیعی از ایده ها را از کلاس که
تقریبا نماینده هفته دو و آغاز هفته سه شروع کردن
با ریخته گری، است که فقط یک راه درمان یک مقدار از نوع خاصی به عنوان
یک مقدار از نوع مختلف.
بنابراین ما می توانیم این کار را با کاراکتر به انجام نوع داده int، شناور خطوط به نوع داده int، و
پوزیشن های خرید طولانی برای دو برابر شود.
>> همه این موارد می تواند به عنوان روش استفاده می شود درمان برخی از ارزش های عددی
کاراکتر منفی به عنوان برخی دیگر از مقدار عددی.
بنابراین برخی از مسائل با این، وجود دارد البته، که می آید زمانی که شما بازیگران
چیزهایی مانند شناور به نوع داده int.
پس این است که کمی عجیب و غریب.
ما یک شناور است که 1.31.
ما آن را به 10000 افزایش دهند.
و بعد ما آن را به عنوان اعضای هیات چاپ.
چه این خروجی؟
10،000 بار 1.31.
بنابراین 13،000، این است که حدس می زنم؟
>> رسید من فکر می کنم 10000.
>> DAN: پس من آن را ضرب در 10000 قبل از من آن را ریخته گری.
>> رسید اوه.
آیا وجود دارد یکی 9 و برخی 0 تعداد؟
>> DAN: شما ممکن است برخی از ارقام عجیب و غریب داشته باشد.
بنابراین درست است، آن را 1.3 برابر 10000.
به طوری که 13000 است.
و این weird-- اضافی
>> رسید 13،100.
>> DAN: 13100.
با تشکر از شما، راب.
و این weirdness-- اضافی
این 9،9--
است تنها به دلیل این ریخته گری به پایان رسید تا گرد کردن پایین که در آن
باید آن را ندارد.
آره.
>> رسید ریخته گری اتفاق می افتد بعد از هر چیز دیگری؟
>> DAN: پس چون من این را در چاپ، آن را به آیا این ضرب قبل از آن
آیا این ریخته گری.
>> رسید [نامفهوم].
>> DAN: من فکر می کنم اول بازیگران، آره، خواهد بود که 10000.
دیگر چه؟
دانلود.
پس این 13099 است.
چرا این اتفاق می افتد؟
عدم دقت.
>> شناور هستند بی نقص نیست.
آنها فقط می توانند اعداد به تعداد معینی از چهره های قابل توجه است.
بنابراین اگر ما از چاپ 8 انجیر زنگ در این شناور، ما یک نوع
زشت تعدادی به دنبال.
و این به دلیل 1.31 نمی تواند با دقت توان با ساده نشان داده شده است
قدرت دو در ماشین است.
پس از آن به پایان می رسد تا با در نظر گرفتن نزدیک حدس می زنم، که به پایان می رسد
که کمی کم.
را حس؟
OK.
>> در حال حاضر، روشن است راه های مختلف از انجام عبارات شرطی که در آن همه
ما در مورد مراقبت از متغیر است.
بنابراین در این مثال خاص، ما گرفتن یک عدد صحیح از کاربر.
و پس از آن ما به دنبال در آنچه که عدد صحیح است.
احتمالا، آن را به تعداد بین یک تا چهار.
این چیزی است که ما برای پرسیدن.
>> بنابراین شما می توانم در یک سوئیچ نام متغیر.
سپس به شما در تنظیم موارد ممکن ارزش آن می تواند باشد.
بنابراین یک مورد، می گویند آن را کم.
و سپس شما شکستن به خارج وضعیت سوئیچ تا
شما را نگه نمی رفتن.
>> در case-- بعدی
بنابراین مورد دو و مورد three--
اگر آن را به صورت دو آن را فقط قطره به پایین اولین خط از کد آن را به عنوان با می بیند
حروف سه تا زمانی که می بیند یک استراحت.
بنابراین به این دلیل مورد یکی از شما را به فقط کم چاپ است چون من
این استراحت کنید.
اگر من، می گویند، نادیده گرفته این break-- اگر من این breakaway-- انداخت
آن را چاپ کم، و سپس آن را چاپ میانی، و سپس آن را بشکند.
>> بنابراین استراحت بخش مهمی از تغییر شرایط و
آنها باید وجود داشته باشد.
هر گونه موارد است که به صراحت بیان نشده توسط به طور پیش فرض به کار گرفته می
در مورد سوئیچ و باید بازیگران شود.
>> رسید بنابراین 1، 2، 3، و 4 نفر خواهد بود؟
>> DAN: ارزش که نفر می تواند باشد.
بله.
آره؟
>> رسید بنابراین، هنگامی که شما که [نامفهوم]؟
>> DAN: شما می چاپ کم، و پس از آن آن را وسط، چاپ و
سپس آن را بشکند.
>> رسید چرا آن را چاپ عمق دفاع حریف، اگر [نامفهوم]؟
>> DAN: بنابراین همه چیز در مورد قبل از یک استراحت می افتد تحت.
بنابراین مورد یک چاپ مورد زیر است به عنوان یکی از این چاپ به شرح زیر است.
آره؟
>> رسید [نامفهوم]؟
>> DAN: پس این تعداد فقط یک خاص ارزش است که این متغیر
می توانید، درست است؟
آیا این را حس؟
آره.
>> رسید [نامفهوم]؟
>> DAN: بله، دو مورد را چاپ وسط و سپس شکستن.
>> رسید [نامفهوم]؟
>> DAN: من فکر می کنم هر؟
چه نوع داده دیگر می تواند شما را تغییر دهید بیش از؟
>> رسید شما می توانید تغییر دهید بیش از هر نوع داده.
اما این فقط به معنی هر چیزی بیش از کاراکتر و نوع داده int و چیزهای مانند آن، به دلیل
اگر شما در حال تغییر بیش از یک اشاره گر که واقعا حس نمی کند،
تعویض بیش از بارهای، اگر آن را حتی اجازه دهید شما این کار را، به دلیل ممیز شناور
در دقت، شما را واقعا نمی می خواهید برای انجام این کار به هر حال.
بنابراین بسیار زیاد است، فقط نوع داده int و کاراکتر و چیزهای که.
>> DAN: آره، آن را هنگامی که شما صریح و روشن ارزش هایی که شما می دانید، من فکر می کنم، می تواند
که یک سوئیچ در واقع مفید است.
خوب؟
OK.
>> محدوده محدوده که اعلام شده است متغیر گسترش یافته است.
بنابراین در این بخش کمی از کد من، این امر می تواند پر از اشتباهات.
و دلیل آن این است که من این نوع int اعلام کرد من در محدوده این حلقه.
و بعد من در تلاش برای مرجع است که من خارج از آن برای دامنه حلقه.
>> بنابراین اساسا، شما می توانید در مورد دامنه فکر می کنم به عنوان هر چیزی که شما اعلام
با در داخل مجموعه ای از آکولاد تنها در آن آکولاد وجود دارد.
و اگر شما سعی می کنید و استفاده کنید که متغیر خارج از این آکولاد، شما
دریافت خطا از کامپایلر.
آره؟
>> رسید پس این یکی کار نمی کند؟
>> DAN: این کار نمی کند، بله.
رشته.
رشته کاراکتر *.
آنها دقیقا همان است.
آنها فقط به حرف اشاره گرها.
و هر رشته که شما باید خاتمه با بک اسلش صفر است که فقط
کنوانسیون ج.
>> این است که به نابودگر NULL نامیده می شود.
و NULL--
سرمایه N، سرمایه U، سرمایه L، سرمایه L--
است همان نیست نابودگر NULL.
این یک اشاره گر است.
این شخصیت است.
آنها بسیار متفاوت می باشد.
به یاد داشته باشید آن است.
آن را در مسابقه باشد، احتمالا.
من مسابقه را دیده اند، نیست.
آره؟
>> رسید بنابراین NULL است، می گویند، اشاره گر؟
>> DAN: بله.
>> رسید چه [نامفهوم]؟
>> DAN: اگر، می گویند، malloc نامیده می شود که شما آیا حافظه به اندازه کافی برای به دست آوردن ندارد
هر اندازه که شما برای درخواست، malloc خواهد NULL بازگشت.
این، در واقع، هر زمان که یک تابع است قرار برای بازگشت به اشاره گر، شما
نیاز به در برابر NULL به دلیل بررسی NULL good-- بسیار است
آن، نوع، ارزش زباله.
این یک صفر تا آنجا که اشاره گرها به است.
>> هر زمان که شما یک تابع فراخوانی، که یک اشاره گر را بر می گرداند.
شما در حال رفتن به می خواهم برای بررسی به شوید که که اشاره گر NULL است نه
به دلیل NULL بسیار معمول است.
این نوع بازگشت زباله است.
بنابراین اگر چیزی نمی راست، فقط به جای NULL بازگشت.
>> رسید [نامفهوم]؟
>> DAN: بله، و این که این.
>> رسید [نامفهوم]؟
>> DAN: املا آن را به عنوان این.
این نابودگر NULL است.
این کوچک N-U-L-L اگر شما آن را شرح.
>> رسید و من فقط رفت پشت و تست شده است.
و اگر شما سعی می کنید برای قرار دادن یک ممیز شناور ارزش را به یک سوئیچ، آن را به شما داد
گفت: بیانیه ای نیاز به بیان از نوع عدد صحیح است.
>> DAN: شما بروید وجود دارد.
اما آره، چه سوال باز؟
>> رسید [نامفهوم]؟
>> DAN: بنابراین سرمایه N، سرمایه U، سرمایه L، L سرمایه چیزی ج واقعی است.
این اشاره گر NULL است و خواهد شد تنها به عنوان درمان می شود.
شما هرگز نمی خواهد امتحان کنید و طلسم شخصیت NULL و دیدن هر
از روشی غیر از این.
آره؟
>> رسید پس از بازگشت به char یا حداکثر چیزی در یادداشت ها، آن
تجسم همان تابع به عنوان [نامفهوم]؟
>> رسید بنابراین شما به اشاره بازگشت حداکثر کاراکتر از getchar، و یا
هر چه در آن است؟
>> رسید آره.
>> رسید آره، بنابراین به طور کلی مدت برای همه کسانی که همه چیز
ارزش نگهبان.
پس چون از بازگشت اعضای هیات حداکثر از GetInt و کاراکتر حداکثر از getchar، آن را
قرار است به مانند، همه حق است، اگر این چیزها در حال بازگشت به ما،
چیزی را اشتباه رفت.
>> برای اشاره گر، ما فقط اتفاق می افتد به این مقدار نگهبان که هر کس
موافق به.
و این چیزی که شما بازگشت است زمانی که همه چیز به اشتباه است.
بنابراین حداکثر کاراکتر چیزی است که ما با استفاده از برای نشان دادن چیزی
مانند NULL یا getchar.
>> رسید بنابراین اگر شما در حال آزمایش getchar، می تواند شما را فقط با قرار دادن NULL؟
آیا برای ایجاد تغییر؟
>> DAN: شما نه تنها می تواند بررسی NULL.
شما می خواهم که به بررسی کاراکتر حداکثر به این دلیل که مقدار بازگشتی از تابع است
شخصیت یک اشاره گر نیست.
آره؟
>> رسید این سوال می پرسد برای طول رشته.
آیا که شامل شخصیت NULL؟
>> DAN: شماره
و این در واقع چگونه طول رشته می داند برای جلوگیری از به خاطر آن می رود از طریق
آرایه خود را از شخصیت های تا آن یک شخصیت NULL را می بیند.
و بعد آن را مانند، تمام درست است، من انجام داده ام.
>> رسید [نامفهوم] پنج؟
>> DAN: خوش خواهد بود پنج.
بله.
بنابراین آرایه های پیوسته بلوک از حافظه است.
آنها دسترسی سریع با گفتن دارند نام آرایه و پس از آن، در مجعد
پرانتز، هر صفحه که می خواهید بروید به، آنها را از صفر از طریق نمایه
طول آرایه منهای 1.
>> و آنها با توجه به نوع اعلام کرد چیزی که شما در حال ذخیره سازی در
آرایه، نام آرایه، و پس از آن هر چه اندازه است که آرایه.
بنابراین این یک آرایه کاراکتر طول است شش است که این ارزش ها.
آره؟
>> رسید [نامفهوم]؟
>> DAN: آره.
>> رسید [نامفهوم]؟
>> DAN: اگر شما از آنچه در جریان است در آرایه در حال حاضر ساخته شده است.
بنابراین شما می توانید از این به جای مشخص به عنوان، مثلا، کاراکتر، هر آنچه که به نام شما
آرایه است، براکت خالی برابر مجعد تجدید و احیای روحیه H کاما E کاما L L کاما از هم با کاما
O کاما شخصیت NULL و آکولاد.
که همچنین به عنوان یک بیانیه کار می کنند.
>> رسید [نامفهوم]؟
>> DAN: سپس شما نیاز به اندازه در حال حاضر ساخته شده است.
>> رسید [نامفهوم]؟
>> DAN: بله.
تمام righty.
استدلال خط فرمان یک راه گرفتن ورودی از کاربر به عنوان
استدلال اصلی.
بخش اصلی دو آرگومان می گیرد.
تعداد استدلال است که در حال گذشت در امتداد خط فرمان و
بردار رشته یا یک آرایه رشته ای از همه از استدلال.
>> بنابراین اگر من، می گویند، یک تابع به نام مثل یک نقطه از فضای 1، 2 فضا، سه،
تعداد آنها خواهد بود 4.
و argv را 0 می تواند یک نقطه است.
Argv1 خواهد بود 1.
argv2 خواهد بود 2. argv3 خواهد بود 3، در آن مورد خاص.
آره؟
>> رسید [نامفهوم]؟
>> DAN: آخرین عنصر در آرایه به این دلیل که تعداد آنها آرایه طول است به علاوه
یکی از argb، آخرین عنصر اشاره گر NULL است.
این تعداد آنها به علاوه 1 می باشد.
بنابراین در صورتی که من فقط گفت، آن خواهد بود argv را 0 یک نقطه است.
ی argv 1 است 1. argv2 2. ی argv 3 3 است.
ی argv 4، که یکی بزرگتر از تعداد آنها می تواند NULL.
>> و این اشاره گر NULL است.
بله.
و این به دلیل رشته است یک ستاره کاراکتر یک اشاره گر است.
بنابراین آن را به همان نوع.
آره؟
>> رسید دو پرسش.
بنابراین یکی، چه تفاوت بین است این و GetString دیگر از یک نوع
در موتور کاربر؟
و دو است، آن را ذخیره شده در درون حافظه خود را؟
بنابراین مانند، GetString را است [نامفهوم]؟
>> DAN: کجاست آن ذخیره می شود؟
من نمی دانم که در آن ذخیره می شود.
>> رسید بنابراین، در واقع، شما می دانید که چگونه هر عمل با شما تماس آن استدلال
در پشته ذخیره می شود؟
بنابراین تعداد آنها و argv را استدلال به اصلی و آنها را در پشته واقعا، یا
فقط از آنچه شما به عنوان فکر می کنم آغاز پشته.
چه بخشی دیگر بود از سوال؟
>> رسید پس چه [نامفهوم]؟
>> DAN: آره، آن را فقط یک راه متفاوت است گرفتن ورودی از کاربر.
کمی بیشتر کارآمد و این یکی را آن را برای اسکریپت handier دلیل این که شما
می تواند تنها آرگومان اصلی خود را تابع به جای داشتن صبر کنید
برای کاربران اگر شما هر گونه کاربران ندارد.
>> رسید و آره، دریافت رشته ها خواهد بود [نامفهوم].
این امر می چیزهای را که نیاز دارید ذخیره کنید.
>> DAN: آره؟
>> رسید [نامفهوم]؟
>> DAN: بله، argv را 0 همیشه شامل نقطه از فراخوانی تابع بریده بریده.
آره؟
>> رسید [نامفهوم]؟
>> DAN: بله، هر یک از استدلال است به پایان رسید در شخصیت NULL زیرا آنها
رشته ها.
>> رسید [نامفهوم]؟
>> DAN: بله، تعداد آنها argv را یک اشاره گر NULL است.
>> رسید [نامفهوم]؟
>> DAN: اوه آره.
آره، ببخشید.
>> رسید پس [نامفهوم]؟
>> DAN: بنابراین سوال این است که اگر شما تا به حال خط فرمان نقطه بریده بریده یک نقطه از 1، 2،
که تعداد خط فرمان استدلال می شود دو یا می شود آن را سه؟
>> رسید من فکر می کنم آن را نمی کند واقعا مهم.
من تمایل به می گویند، آه، شما را انجام نمی دهد هر گونه استدلال خط فرمان هنگامی که،
بدیهی است، شما تابع نامیده می شود.
بنابراین من تمایل به vocally حذف تابع را از خط فرمان
استدلال حتی اگر آن را موجود در argv را.
>> DAN: اما اگر آن را در test-- بود
yeah-- و همچنین اگر شما چیزی می گویند مانند تعداد آنها برابر با 3،
شما در جایگاه امن است.
آره؟
>> رسید [نامفهوم]؟
>> DAN: من فکر می کنم اگر به جای فراخوانی این در تعداد آنها و رشته براکت ی argv
اما نگه داشته همان نوع و فقط به نام آنها چیزی شبیه به یک مختلف
و ب، آن را هنوز هم کار می کند؟
و آن را هنوز هم کار می کنند، شما می just--
به جای استفاده از argc-- شما می خواهم استفاده از a و b.
آره؟
>> رسید [نامفهوم]؟
>> DAN: بنابراین سوال این است GetString است رفتن به ذخیره حافظه در پشته
چون GetString کاراکتر است *.
این فروشگاه حافظه در پشته به دلیل آن خواستار اکنون در واقعی malloc
اجرای GetString.
OK، در حال حرکت.
>> امنیت.
بنابراین برای اینکه واقعا امن، شما را در هیچ تکیه یک و شما اجازه می دهد هیچ یک از دسترسی به هر
اطلاعات شما، همین دلیل است که همه ایجاد دستگاه های خود،
سیستم عامل خود را، تمام خود را برنامه، از ابتدا، و بدیهی است که
به هیچ دستگاه های دیگر وصل کنید از طریق اینترنت.
بنابراین کامپیوتر نا امن می باشد.
آنها واقعا هستند.
ما باید به افراد دیگر اعتماد.
>> و این ایده از امنیت این است که شما هستید تلاش برای محدود کردن میزان
اعتماد که شما نیاز دارید.
و یکی از ابزار را انجام می دهید از طریق رمزنگاری.
رمزنگاری است، در اصل، ما باید اسرار است.
>> گاهی اوقات ما باید به تصویب اسرار ما همراه از طریق، مثلا، اینترنت و یا
چیزهای دیگر.
و ما از مردم می خواهم نه برای آگاهی از اسرار است.
بنابراین ما رمز در آوردن اسرار ما را به راه که ما امیدواریم که هیچ کس نمی تواند کشف کردن.
>> بنابراین ما used--
از طریق این دوره از این class--
چیزهایی مانند رمزنگاری سزار و [نامفهوم]، که هر دو بسیار بسیار
راه های نا امن از رمز نگاری چیز.
آنها آسان به شکل از آنچه آنها و آنچه اسرار شما هستند.
در دنیای واقعی استفاده می کند خیلی بیشتر طرح های رمزگذاری پیچیده است.
و ما نمی خواهد به دریافت خیلی بیشتر از آن.
>> رفع اشکال.
GDB بهترین است.
من قصد دارم به تاکید دوباره.
استفاده از GDB در همه زمان ها هر زمان مشکل.
دستورات که در GDB مفید هستند شکستن، که به شما منتقل یا خط
تعداد، نام تابع، در اصل که در آن در کد شما می خواهید برای متوقف کردن،
و قادر به کنترل.
>> چاپ طول می کشد یک متغیر و چاپ هر چه که متغیر است که در آن
نقطه در اجرای خود را.
بعدی حرکت می کند اعدام شما در طول یک مرحله.
و گام به گام در داخل یک تابع در اجرای خود را.
>> چیزهای دیگر اجرا می شوند، این است که چگونه شما در واقع کد را اجرا کنید.
ادامه تمام مراحل مورد نیاز طول می کشد برای رسیدن به نقطه سر بعدی.
و بسیاری، بسیاری دیگر وجود دارد.
نگاه آنها را.
آنها بزرگ است.
آره؟
>> رسید [نامفهوم]؟
>> DAN: بله، است که یک ابزار اشکالزدایی.
بنابراین یک دیباگر برنامه ای است که شما اجازه می دهد اشکال زدایی برنامه های خود را.
این برنامه ای است که می یابد اشکالات نه شما، هر چند که بزرگ خواهد بود.
>> و برای آخرین بار به من جستجو می باشد.
بنابراین نوع جستجو است که ما صحبت کردیم در مورد در این کلاس می باشد جستجوی خطی،
است که درست است که شما را از طریق هر یک نگاه عنصر از فضای جستجو، یک
عنصر در یک زمان، تا زمانی که شما پیدا کردن آنچه در شما دنبال آن هستید و یا تا زمانی که شما رسیدن به
پایان فضای جستجوی خود را که در آن اشاره به شما می گویند که شما می توانید پیدا کنید
این عنصر است که شما به دنبال.
و این زمان در بهترین حالت ثابت، که 0 نفر از 1 است و در بدترین حالت خطی
زمان، که 0 نفر از.
>> جستجو دودویی، که نیاز به عناصر کثیف.
شما به وسط عناصر خود، ببینید اگر عنصر شما به دنبال
بزرگتر و یا کوچکتر از عنصر است که شما در وسط است.
این آن را بزرگتر، به شما می گویند که پایین از جستجوی خود را فضایی خود را است
مکان فعلی، در عمق و شما روند راه اندازی مجدد.
اگر آن را کوچکتر، به شما نگاه می گویند که the-- آره، چه خبر؟
>> رسید [نامفهوم]؟
>> DAN: بله.
هر نوع از نوع است که در تدریس کلاس بازی منصفانه برای تست است.
>> [خنده]
>> DAN: و این واقعیت است که شما را به حال نه آن را برای مجموعه ای مشکل، آن را عادلانه
بازی برای تست است.
>> رسید آیا ما می توانیم بیش از آن چگونه to--
>> DAN: این خواهد شد بیش از رفته است.
>> SPEAKER 2: کد واقعی برای [نامفهوم] در study.cs50.net است.
بنابراین اگر شما در مشکل عمل نگاه در صفحه مرتب کردن بر اساس ادغام از
study.cs50.net، کد وجود دارد برای پیاده سازی ادغام مرتب کردن بر اساس.
بنابراین شما لازم نیست برای پیاده سازی خودتان آن را امشب.
اما مطمئن شوید که شما آن را درک و نه از آن به خاطر سپردن.
>> رسید [نامفهوم]؟
>> SPEAKER 2: در این صفحه نوع ادغام در study.cs50.net، یک عمل وجود دارد
مشکل این است که، اگر شما از طریق کلیک کنید مشکل، در پایان وجود دارد
راه حل، که ادغام اجرای مرتب کردن بر اساس.
اما مطمئن شوید که شما آن را درک و نه تنها آن را حفظ
و یا کپی کردن آن را.
>> رسید و کاملا معتبر مشکل برای امتحان خواهد بود
چیزی شبیه در اینجا یک لیست است.
این لیست چگونه بنظر میرسد بعد از یک قدم از انتخاب نوع و یا
مرتب کردن بر اساس اتصال و یا هر چیز دیگری.
یک تکرار کامل از لیست.
بنابراین حتی اگر شما پایان ندارد تا نیاز به کد برای آن، شما نیاز به آن را درک
به اندازه کافی است که بدانیم چگونه آن را به اصلاح این آرایه.
>> DAN: که در آن است برای من.
>> [تشویق حضار]
>> LUCAS: سلام به همه.
نام من لوکاس است.
من قصد دارم تا در مورد بازگشت صحبت می کنید، همه انواع که ما آموخته اند، و
کمی از همه اشاره گر.
OK؟
پس اول از همه، بازگشت.
به چه معنی است که می گویند که یک تابع بازگشتی است؟
>> رسید خود را تلفن.
>> LUCAS: OK، خود را خواند، آره.
بنابراین مانند این تصویر، به عنوان مثال.
آن را مانند تصویر در داخل از یک تصویر و غیره.
بنابراین به عنوان مثال، شما می توانید به عنوان دن have-- که در مورد جستجوی دودویی صحبت شد.
یکی از راه های است که در آن جستجوی دودویی است بازگشتی این واقعیت است که شما است
تلاش برای پیدا کردن یک عدد است.
بنابراین شما به میدن.
و سپس شما اگر اعداد وجود دارد چک کنید در سمت چپ و در سمت راست.
>> و پس از آن اگر شما در پیدا کردن تعداد است رفتن به سمت چپ است، این همان
چیزی که به عنوان انجام جستجو را دوباره اما فقط در سمت چپ این فهرست است.
بنابراین این که چگونه آن را برای تلفن های موبایل می خواهم آن را بازگشتی.
به همین دلیل شما بچه ها باید بازگشتی راه حل برای مرتب سازی ادغام.
>> OK، بنابراین در اینجا یک مثال است.
بنابراین اجازه دهید بگویم که من می خواهم به را انتخاب کنید تمام اعداد از 1 تا n.
من می توانم درک کنند که از مجموع نفر تعداد نفر است به علاوه نفر منهای 1 تا 1.
اما پس از آن، اگر من در ان منهای 1 نگاه به علاوه نفر منهای 2 به علاوه 1، که همان
چیزی که به عنوان اعداد جمع به نفر منهای 1.
بنابراین من می توانم مجموع مبلغ برابر می گویند برابر با نفر باضافه مجموع نفر منهای 1.
آیا این را حس؟
>> و من هم که چیز دیگری داشته باشد نام مورد پایه، این است که
مجموع اعداد به صفر صفر میشد.
بنابراین به عنوان به زودی به عنوان من به تعداد دریافت صفر، من متوقف شمارش.
آیا این را حس؟
>> بنابراین در اینجا یک مثال از اینکه چگونه است من می توانم پیاده سازی شده است.
بنابراین من این تابع در برخی داشته باشد.
که طول می کشد نفر عدد صحیح است.
بنابراین در اینجا من برای اولین بار چک کنید اگر n است کمتر و یا برابر صفر است.
بنابراین اگر آن را کمتر یا برابر با صفر است، I بازگشت به صفر است، که در این صورت پایگاه ما.
در غیر این صورت، من فقط می تواند بازگشت به علاوه نفر مجموع اعداد از
یک به یک نفر منفی شود.
را حس؟
OK.
>> بنابراین در اینجا چیزی است که آن را مانند به نظر می رسد.
شما باید حاصل جمع 2 برابر 2 باضافه مجموع 1.
و برخی از 1 1 به همراه است مجموع 0، که 0.
را حس؟
بنابراین اگر ما در پشته از نگاه شما برنامه، این چیزی است که آن را مانند به نظر می رسد.
>> اول، ما باید تابع اصلی.
و سپس تابع اصلی نام مجموع 2.
و بعد حاصل جمع 2 در حال رفتن به می گویند، آه، مجموع 2 برابر 2 به علاوه مبلغ یک.
پس من جمع 1 اضافه کردن به پشته.
و مجموع 1 رفتن به مجموع تماس بگیرید 0، که همچنین رفتن به آن اضافه شود
به پشته.
و پس از آن هر یک از این آنهایی هستند که در بالای دیگر مجبور به بازگشت
قبل از آنهایی که دیگر را می توانید نگه دارید.
>> بنابراین به عنوان مثال، در اینجا، مجموع 0، اول، رفتن برای بازگشت به 0.
و بعد حاصل جمع 1 را انتخاب کنید.
سپس مجموع 1 رفتن به بازگشت 1 به طور خلاصه از 2.
و در نهایت، مجموع 2 است که برای بازگشت به صفحه اصلی 3.
آیا این را حس؟
>> این واقعا مهم است به درک چگونگی پشته در حال کار کنید و سعی کنید به
ببینید که اگر آن را حس می کند.
OK، بنابراین مرتب سازی.
پس چرا مرتب سازی مهم است، اول از همه؟
چرا باید توجه کنیم؟
همه؟
من یک مثال بزنم؟
آره؟
>> رسید [نامفهوم].
>> LUCAS: آره، OK.
بنابراین شما می توانید جستجو موثر تر است.
این راه خوبی است.
بنابراین، برای مثال، ما یک مقدار زیادی از همه چیز، در واقع، در زندگی ما که
ها طبقه بندی شده اند.
به عنوان مثال، واژه نامه ها.
>> این بسیار مهم است که تمام کلمات در نوعی از جهت است که ما
به راحتی می توانید دسترسی داشته باشید.
بنابراین این چیزی است که او می گفت.
شما می توانید موثر تر است.
از چقدر سخت خواهد بود که فکر می کنم فرهنگ لغت است که در آن واژگان در می
به صورت تصادفی.
شما باید به در نگاه کنید، بسیار زیاد است، هر کلمه تا زمانی که شما پیدا کردن
کلمه ای که شما دنبال آن هستید.
>> اگر شما با استفاده از فیس بوک نیز، زمانی که شما دنبال آن هستید در دوستان خود، شما
رفتن به که فیس بوک قرار داده خود را دوستان نزدیک تر است در بالا از آنهایی که
که شما به آن صحبت نه خیلی زیاد.
اگر شما به تمام راه را به پایین لیست دوستان خود، شما در حال رفتن برای دیدن
مردم که شما احتمالا حتی نمی به یاد داشته باشید که شما دوستان با است.
و این به دلیل نوع صفحه دوستان خود را بر اساس
بستن شما به آنها می باشد.
>> بنابراین سازماندهی داده ها.
همچنین عکس.
بنابراین شما می بینید که تمام Pokemons شماره تلفن های.
و این مثل یک آسان راه دسترسی به اطلاعات.
>> رسید دسترسی به انجمن مذهبی.
>> LUCAS: آره.
>> رسید [نامفهوم].
>> LUCAS: بله.
OK، بنابراین انتخاب نوع.
مرتب کردن بر اساس انتخاب است که رفتن را انتخاب کنید کوچکترین مقدار خشک جدانشده از یک لیست هر
زمان در هر تکرار.
این نوع مانند نوع که شما باید انجام دهید در سر خود را هنگامی که شما در تلاش برای
مرتب سازی بر اساس یک لیست در دست.
>> در واقع، همه شما باید انجام دهید این است که شما نگاه کنید برای کوچکترین عدد است.
شما آن را در لیست مرتب شده اند.
و پس از آن شما برای نگاه بعدی تعداد کوچکترین.
و پس از آن شما در حفظ و انجام که و غیره.
>> بنابراین انتخاب نوع اساسا شما هر بار که کوچکترین انتخاب کنید
ارزش خشک جدانشده.
قرار است در پایان از طبقه بندی شده اند بخشی از لیست.
و نگه دارید این کار را می.
بنابراین اجازه دهید به سرعت ببینید که چه این به نظر می رسد.
بنابراین در اینجا طبقه بندی شده اند و لیست خشک جدانشده.
>> بنابراین برای طبقه بندی شده اند از لیست، آن را در ابتدا خالی است.
و پس از آن من قصد دارم برای انتخاب تعداد کوچکترین اینجا است که 2.
بنابراین من شماره 2 و I قرار داده در مقابل این فهرست است.
و بعد من برای آینده کوچکترین نگاه عنصر است که 3.
بنابراین من آن را در پایان قرار داده لیست طبقه بندی شده اند.
و بعد من انجام این کار نگه دارید.
من 4 و آن را در پایان.
یافتن 5 و آن را در پایان.
>> و در چگونه از آن زمان نگاه که من گفت: آن را در پایان است،
اساسا، مبادله دو ارزش.
OK؟
و پس از آن یکی از آخرین، شما فقط یک عنصر است.
پس از آن در حال حاضر طبقه بندی شده اند.
>> OK، بنابراین مرتب کردن بر اساس درج.
مرتب کردن بر اساس درج شما در حال رفتن به هم چیزی که به عنوان یک طبقه بندی شده اند و
لیست خشک جدانشده.
تنها چیزی است که هر بار که شما با اضافه کردن یک عنصر به طبقه بندی شده اند
لیست، شما فقط انتخاب عنصر که در مقابل لیست خشک جدانشده است.
و پس از آن شما در حال رفتن به پیدا کردن آنچه در موقعیت آن را باید در مرتب شده است
بخشی از لیست.
>> بیایید ببینید چه این چنین است این را حس می کند بیشتر است.
بنابراین در ابتدا، به عنوان مثال، من در تلاش برای وارد کردن شماره سه در
بخش مرتب شده از لیست.
بنابراین لیست هیچ چیزی ندارد.
بنابراین من فقط می توانید تعداد 3.
>> در حال حاضر، من می خواهم برای اضافه کردن عدد 5 به بخش مرتب شده از لیست.
بنابراین من در شماره 5 نگاه کنید.
من متوجه که این بیشتر از 3.
بنابراین من می دانم که آن را پس از 3 تا باشد.
بنابراین من قرار داده 3 و 5.
>> سپس من می خواهم برای وارد کردن عدد 2.
من متوجه است که تعداد 2 است که در واقع آخرین و سپس هر دو 3 و 5.
بنابراین من در واقع برای قرار دادن همه آن را راه در ابتدای فهرست.
بنابراین من به، نوع، تغییر همه عناصر در لیست طبقه بندی شده اند، بنابراین من می تواند
اتاق را برای تعداد 2.
>> سپس من شماره 6 را ببینید.
من می بینم که آن را باید پس از 5 باشد.
بنابراین من آن را قرار داده است.
و در نهایت، من در شماره 4 نگاه کنید.
و من متوجه آن باید بین 3 و 5 است.
و بعد من آن را قرار داده وجود دارد و تغییر تمام عناصر دیگر.
را حس؟
>> حباب مرتب سازی بر.
بنابراین مرتب سازی حبابی است که اساسا چه شما رفتن به do-- به آن حباب
مرتب کردن بر اساس دلیل این که شما از طریق list-- به در واقع بهتر است اگر من فقط نشان می دهد
دوست دارید this--
و شما در حال رفتن برای مقایسه تعداد مجاور.
و شما در حال رفتن به مبادله آنها موقعیت اگر آنها نمی
در جهت سمت راست.
>> بنابراین اساسا، آنچه که در حال رفتن به رخ می دهد است که در اینجا، به عنوان مثال،
شما باید 8 و 6.
شما می دانید که مرتب خواهد شد در واقع می شود 6 و 5، درست است؟
بنابراین شما به مبادله و دستورات است.
سپس من 8 و 4 در اینجا مشاهده کنید.
و من همین کار را.
من دوباره مبادله.
و در نهایت، 2 و 8.
من هم آنها را مبادله.
>> این حباب مرتب سازی بر چرا که پس از به نام هر یک از این تکرار، در واقع،
بیشترین تعداد در فهرست می شود تمام راه را به انتهای لیست.
آیا این را حس؟
از آنجا که آن را نگه می دارد مبادله آن و حرکت آن به سمت راست.
>> OK، بنابراین این تکرار دوم است.
این امر می تواند همین.
من یک مبادله را انجام دهد و پس از آن یکی از آخرین.
من که هیچ معاوضه وجود دارد و فهرست طبقه بندی شده اند است.
بنابراین در حباب مرتب سازی بر، ما اساسا حفظ رفتن را از طریق لیست و مبادله
همه چیز تا زمانی که من متوجه است که این کار را نکردم هر گونه معاوضه انجام این کار تکرار، که
بدان معنی است که لیست در حال حاضر طبقه بندی شده اند.
را حس؟
>> اجازه دهید بحث در کمی در مورد زمان در حال اجرا.
پس شما بچه ها به یاد داشته باشید بزرگ O، امگا و تتا؟
آره؟
OK، چه O بزرگ است، اول از همه؟
>> رسید [نامفهوم].
>> LUCAS: آره، آن را به بدترین حالت نامیده می شود زمان اجرا، که فقط بدان معناست که این
چقدر شما انتظار برنامه به را اجرا کنند.
مانند، از نظر of--
در این case-- نفر.
تعداد عناصر در لیست در بدترین حالت.
مانند، در بدترین حالت ممکن است.
>> بنابراین برای حباب مرتب سازی بر، برای مثال، ما O بزرگ از n مربع است.
چرا ما باید که؟
چرا حباب مرتب سازی بر بزرگ مربع O نفر است؟
>> رسید [نامفهوم].
>> LUCAS: آره، بنابراین بدترین حالت خواهد بود که من را مجبور به انجام تعداد تکرار.
بنابراین هر یک از تکرار است که به را بزرگترین عنصر به انتهای
از لیست.
بنابراین بدترین حالت این است که من برای انجام این کار چیزی که n بار.
و برای هر یک از آن زمان، من به انجام نفر سواپ چون من برای مقایسه
هر دو عنصر.
به همین دلیل آن را به نفر مربع چرا که آن را n بار نفر.
>> سپس، انتخاب نوع نیز نفر مربع چرا که، برای هر تکرار، من به
در هر عنصر نگاه در این فهرست است.
و سپس پیدا کردن کوچکترین، به این معنی که من به
از n عنصر است.
و من برای انجام این کار بار نفر به دلیل من به انتخاب همه عناصر نفر.
>> مرتب کردن بر اساس درج نیز نفر مربع به این دلیل که بدترین سناریو مورد خواهد شد
شود، یکی، من برای وارد کردن عدد n، درست است؟
بنابراین من در حال حاضر می دانیم که من قصد دارم به نفر تکرار.
اما برای هر یک از این اعداد، اگر من تا به حال در تمام اعداد در نگاه
لیست طبقه بندی شده اند و آن را تمام راه را در مقابل، خواهد شد که تعداد مربع
چرا که از آن خواهد شد n بار نفر دیگر.
را حس؟
چه در مورد امگا؟
>> رسید [نامفهوم].
>> LUCAS: این بهترین حالت است.
بنابراین آن را مانند، در بسیاری از اوقات برای مرتب سازی، بهترین شرایط است
هنگامی که لیست در حال حاضر طبقه بندی شده اند.
بنابراین شما واقعا باید به هیچ چیز.
حباب مرتب سازی بر بهترین است سناریو از n.
آیا شما بچه ها می دانید چرا؟
>> رسید [نامفهوم].
>> LUCAS: بله، اگر شما پیگیری آیا سهمیه بندی داده های هر سواپ حال یا
نه، اگر شما چیزی مانند به راه اگر درست بود تکرار وجود دارد، اگر
لیست در حال حاضر طبقه بندی شده اند، اساسا، چه اتفاقی خواهد افتاد این است که من قصد دارم به
سعی کنید به مبادله هر دو عناصر مجاور.
من قصد دارم که برای دیدن هیچ معاوضه وجود دارد.
و من فقط بازگشت حق دور.
>> پس از آن بدان معنی است که من فقط به حال از طریق لیست یک زمان است.
پس از آن نفر چون من نگاه در تعداد عناصر.
چرا انتخاب نوع n به میدان؟
>> آره، حتی اگر این فهرست طبقه بندی شده اند، برای هر تکرار از انتخاب نوع، I
باید به انتخاب حداقل عنصر.
بنابراین این بدان معناست که من آن را به نگاه در تمام عناصر در خشک جدانشده
لیست و پیدا کردن حداقل برای هر تکرار.
آیا این را حس؟
>> و شمشیر درج شده است N چرا که در مورد که من در تلاش برای وارد کردن
اعداد و تمام اعداد، زمانی که من سعی کنید به آنها وارد است، من می بینم که آنها
در سمت راست هستند.
من لازم نیست برای رفتن به بررسی تمام دیگر اعداد در لیست خشک جدانشده.
به همین دلیل آن را به نفر خواهد بود.
را حس؟
و چه تتا است؟
>> رسید [نامفهوم].
>> LUCAS: چه، ببخشید؟
دوباره بگو.
>> رسید [نامفهوم].
>> LUCAS: دقیقا.
بنابراین شما می توانید ببینید که تنها انتخاب ذخیره شده در ادغام مرتب کردن بر اساس thetas داشته باشد.
و این دلیل این که شما فقط تتا دارند اگر هر دو بزرگ O و امگا یکسان هستند.
OK.
و در نهایت، ادغام مرتب کردن بر اساس است در log n است.
>> و پس از آن، به عنوان دن گفت، ادغام مرتب کردن بر اساس است نوع مانند راه همان است که
شما انجام جستجوی دودویی.
بنابراین لیست شما.
و شما به نصف کاهش دهد.
و سپس شما آنها را برش در نیمه کوچکتر است.
و سپس شما آنها را ادغام خواهند شد.
شما بچه ها به یاد داشته باشید که، درست است؟
OK، به عنوان او گفت شد.
>> OK، اشاره گرها.
پس چه یک اشاره گر است؟
>> رسید [نامفهوم].
>> LUCAS: آدرس.
OK.
من می دانم که دیوید نشان می دهد یک دسته از فیلم ها از binky و چیزهایی اشاره
هر یک از دیگر.
اما من می خواهم از اشاره گر فکر می کنم به عنوان صرفا یک آدرس.
پس از آن یک متغیر است که رفتن است برای ذخیره یک آدرس.
>> بنابراین آن را فقط به این متغیر خاص است است که چهار بایت.
به یاد داشته باشید، که اشاره گر به هر چیزی است همیشه چهار بایت برای ما 32 بیتی
دستگاه تا در مورد دستگاه.
و آن را فقط دارای محل یک متغیر در داخل آن است.
>> OK، بنابراین این حافظه وجود دارد، اساسا.
بنابراین هر بلوک از حافظه در واقع تا به برچسب است که آدرس
حافظه slotty.
به طوری که بدان معنی است که من می تواند داشته اشاره به اشاره گر
هر یک از این آدرس.
بنابراین به همین دلیل ما به اشاره گر استفاده شده است اگر من به یاد داشته باشید محل
که یک متغیر خاص از حافظه است.
>> و شما بچه ها به یاد داشته باشید که یکی از آن موارد اگر من یک تابع باید
اگر من در واقع می خواهید مبادله برای reals به، من در واقع
برای ارسال اشاره گر.
نه متغیر.
آیا شما بچه ها به یاد داشته باشید که؟
between-- تفاوت
چه نام است؟
تماس با مقدار و فراخوانی توسط مرجع، درست است؟
>> OK، آره.
بنابراین با ارزش تماس بگیرید.
هنگامی که شما فقط یک متغیر به ارسال عمل شما فقط با ارسال یک ارزش.
بنابراین شما در واقع ارسال یک کپی از متغیر.
و برنامه های خود را نمی تواند کمتر اهمیت می دهند در مورد اگر متغیر همان در واقع
باعث می شود یک کپی.
>> و خواستار با اشاره بدان معنی است که من در واقع از ارسال یک کپی از
اشاره گر به آن متغیر.
پس از آن بدان معنی است که من از ارسال محل که متغیر.
بنابراین احساس من محل متغیر، زمانی که من فراخوانی تابع
با اشاره گر، من قادر هستم در واقع تغییر داده است که در اصلی بود.
را حس؟
>> اگر چه، اشاره گر یک کپی است، اشاره گر هنوز آدرس واقعی
متغیر است که من می خواهم به تغییر.
را حس؟
>> بنابراین ایجاد اشاره گر.
به یاد داشته باشید، اشاره گر همیشه نوع است که آن را با اشاره
و سپس به یک ستاره.
و پس از آن شما به نام قرار داده است.
بنابراین به یاد داشته باشید که هر زمان که شما هر ستاره، آن را مانند یک اشاره گر به در
که هر متغیر نوع می باشد که شما تا به حال.
>> بنابراین در اینجا در ستاره، به عنوان مثال، آن را یک اشاره گر و یک عدد صحیح.
و پس از آن ستاره کاراکتر یک اشاره گر است ستاره کاراکتر و غیره.
آره؟
>> رسید چه اگر ما اشاره گر به نفر به ستاره ایکس.
من می دانم که یک اشاره گر به x ایجاد می کند.
آیا آن را نیز x را یک عدد صحیح اعلام؟
>> LUCAS: OK، تا زمانی که به شما می گویند نفر ستاره ایکس، شما یک اشاره گر به ایجاد نشده است
متغیر x.
شما در حال ایجاد یک اشاره گر به نام ایکس.
>> رسید [نامفهوم].
>> LUCAS: بنابراین، هنگامی که من می گویم نفر ستاره ایکس من گفت، با سلام، در حافظه، من قصد دارم به
یکی از این سه جعبه.
و من قصد دارم برای گفتن که که در حال رفتن به x، است که
برای رفتن به یک اشاره گر.
و چیزی جالب در مورد اشاره گر این است که ما می گویند که آنها
4 بایت برای یک ماشین 32 بیتی.
و دلیل برای آن است که به دلیل 4 بایت 32 بیت می باشد.
>> و ماشین هایی که 64 بیت در واقع دارای آدرس های اشاره گر
که 64 بیت طول دارند.
بنابراین آن را فقط به این معنی است که به اندازه آدرس در دستگاه های مختلف است.
>> بنابراین مرجع و غیر مرجع.
دو عملگر وجود دارد که شما بچه ها باید به یاد داشته باشید.
اولین علامت است.
دومین ستاره است.
آیا در آن ستاره و این اشتباه می کنید ستاره به دلیل به یاد داشته باشید که، در
این مورد، شما باید تعداد ستاره.
>> آن را مانند یک چیز تمام است با هم.
هیچ ستاره فضای نفر وجود دارد.
پس از آن بدان معنی است که این نوع.
به یاد داشته باشید، که زمانی که شما ستاره متغیر، شما
صحبت کردن در مورد نوع.
>> هنگامی که شما فقط ستاره و پس از آن نام متغیر، به این معنی که
شما هرگاه اشاره گر، که بدان معنی است که شما به دنبال در
اشاره گر، پیدا کردن آدرس آن را با اشاره به، رفتن به آن آدرس،
و به دنبال در هر زمان شما وجود دارد.
بنابراین من دانش آموزان من می گویند که هنگامی که شما به ستاره، شما باید فکر می کنم که این
مخفف محتوای.
>> بنابراین اگر شما یک اشاره گر و شما انجام اشاره گر ستاره، آن را
محتوای اشاره گر.
بنابراین شما به هر چه آن را اشاره به و در محتوای ثابت نگاه کنید.
و امپرسند (&) همان است چیزی که به عنوان آدرس.
>> بنابراین اگر من یک متغیر a-- مانند دارند، اجازه دهید به می گویند که من اعضای هیات برابر 3--
اگر من می خواهم برای پیدا کردن آدرس آن متغیر حافظه، من فقط می تواند انجام دهد
علامت.
پس از آن آدرس یک است.
را حس؟
>> بنابراین در اینجا یک مثال است.
این از دست رفته است اعضای هیات ب و ج هوشمند.
بنابراین اعضای هیات برابر 3 بدان معنی است که من قصد دارم برای رفتن به حافظه است.
و من قصد دارم برای پیدا کردن یک اسلات قرار داده و تعداد 3 اینجا.
>> و پس از آن اعضای هیات ب برابر با 4.
من قصد دارم به انجام همان.
برو به حافظه قرار داده و تعداد 4 در یکی از جعبه.
و اعضای هیات برابر 5.
یافتن جعبه دیگر قرار داده و تعداد 5.
>> پس چه این خط انجام است؟ بسته نفر ستاره برابر است با علامت.
پس اول از همه، نفر بست ستاره.
چه آن را انجام می دهند؟
>> رسید [نامفهوم].
>> LUCAS: آره، بنابراین نفر بست ستاره، اولین، اعلام یک اشاره گر به نام بسته.
و سپس آن را تعیین ارزش که اشاره گر به آدرس.
بنابراین علامت.
سپس، اگر من سرب ستاره، چه سرب ستاره است؟
>> اوه، ببخشید.
این نیز از دست رفته. نفر سرب ستاره.
منظور من ستاره کامپیوتر.
خیلی معذرت میخوام.
این همان چیزی است.
اما در حال حاضر من خوب تاریخ ایجاد اشاره گر هستم به ب و سپس یک اشاره گر به ج.
آره؟
>> رسید [نامفهوم]؟
>> LUCAS: بله.
بنابراین اگر شما به حافظه بروید و شما به جعبه این است که دهنده بسته،
شما در واقع به رفتن آدرس مشاهده کنید.
OK؟
آره؟
>> رسید [نامفهوم]؟
>> LUCAS: آره، اشاره گر آدرس است.
هرگز فراموش نکنید که.
این مثل از مهم ترین بخشی در مورد اشاره گر.
در ذخیره سازی و آدرس وجود دارد به برخی از متغیر.
دیگر چه؟
هر گونه سؤال دیگر؟
OK.
>> پس از اشاره گرها و آرایه ها.
به یاد داشته باشید که زمانی که من انجام اعضای هیات آرایه 3، اساسا، آنچه که من انجام می دهند این است که من هستم، نوع
از، اعلام در یک اشاره گر.
بنابراین آرایه است نوع مانند یک اشاره گر به محل خاص در حافظه است که در آن I
سه اسلات برای اعداد صحیح اختصاص داده است.
آیا این را حس؟
>> بنابراین، هنگامی که من انجام آرایه هوشمند 3، چیزی که من هستم انجام می دهند، در واقع، در حال ایجاد سه
شکاف در حافظه است.
بنابراین من فقط سه اسلات در حافظه پیدا کنید.
بنابراین اگر من انجام دهید، سپس، یک آرایه ستاره، آن اساسا این معنی است که محتوای آرایه،
که به معنی من اشاره گر را پاک، من به به آن محل است که آن را با اشاره به،
و من قرار است که شماره یک.
>> و پس از آن، اگر من آرایه ستاره به علاوه 1، که همان انجام آرایه است
لوستر یکی، که فقط بدان معناست I به جایی که آن را به اشاره در.
و پس از آن به علاوه 1 می سازد من یک حالت تغییر.
ولی من به این سمت برود، در واقع، قرار داده و تعداد دو.
>> و پس از آن، در نهایت، زمانی که من انجام آرایه به علاوه 2، I به جایی که به
اشاره آرایه در.
و پس از آن من به بلوک های حافظه حرکت می کند.
و بعد من تعداد سه قرار داده است.
آره؟
>> رسید آرایه بنابراین ستاره است که به سادگی گفت: نقطه اول.
و شما می توانید فقط به خاطر اضافه کردن 1، ما فقط واقعا
ارجاع که آدرس اول است.
>> LUCAS: آره.
چرا ما، به عنوان مثال، می گویند آرایه 0، آرایه 1 و آرایه 2؟
من ادعا، چرا شما انجام دهد 0، 1، 2، 3 به جای 1، 2، 3؟
یکی از دلایل است، یکی، کامپیوتر برنامه نویسان ترجیح می دهند به شروع
شمارش از 0.
دو دلیل است که وقتی آرایه 0، این همان چیزی که انجام آرایه
به علاوه، 0، که به معنی من به آن موقعیت، و من نمی
جست و خیز هر بلوک حافظه است.
بنابراین من هیچ بلوک حافظه حرکت نمی کند.
آره؟
>> رسید [نامفهوم]؟
>> LUCAS: بنابراین او درخواست آنچه که تفاوت بین انجام
این یا انجام malloc.
یکی از تفاوت این است که آرایه هوشمند 3 است ایجاد
آرایه در پشته.
و وقتی که من انجام malloc آن، ایجاد در پشته.
آیا این را حس؟
>> پس چگونه malloc در واقع کار می کند؟
پس چرا ما حتی نیاز به استفاده از malloc؟
نوع کامپایلر شما از چهره های همه متغیرهای که شما اعلام کرد.
و او ایجاد فضا برای همه از آنها در پشته.
بنابراین همه متغیرهای خود را در حال رفتن به جایی در پشته باشد.
بنابراین در اینجا متغیر های محیط زیست است.
>> بنابراین اساسا، فضا برای آن متغیر در حافظه است که در اختصاص
زمان کامپایل.
پس از آن بدان معنی است که کامپیوتر شما است که تمام آن متغیرها
از قبل.
لازم نیست بدانید که چه چیزی ارزش شما در حال رفتن به در آنها قرار داده است.
اما باید بدانید که چگونه حافظه شما نیاز دارید.
>> اما در حال حاضر اجازه دهید بگویم که، برای مثال، شما در حال ایجاد یک آرایه یا گرفتن
رشته ای که شما در حال گرفتن از کاربر.
چگونه شما نمی دانید که طولانی رشته در حال رفتن به، به عنوان مثال.
بنابراین شما نمی دانید که دقیقا چه تعداد بلوک حافظه شما اختصاص، درست است؟
>> پس از آن شما واقعا به معنی برای شما می گویند قرار 100 حرف می باشد.
و سپس آنچه در صورتی که کاربر می نویسد 150؟
شما در حال رفتن به پیچ شود.
>> بنابراین اساسا، شما می توانید مطمئن باشید که چگونه حافظه شما نیاز به اختصاص
زمانی که شما برنامه را کامپایل.
شما فقط می دانیم که در زمان اجرا شود.
به همین دلیل شما باید پشته.
پس پشته است که به حافظه که شما در تخصیص
طول مدت برنامه در حال اجرا است.
>> بنابراین اساسا، هنگامی که شما انجام malloc، چه شما در حال انجام است تخصیص حافظه در
زمان اجرا، به این معنی که شما تصمیم گیری درست در آن لحظه که شما
باید که حافظه داشته باشد.
به طوری که زمانی که شما آن را به تخصیص.
آیا این را حس؟
>> بنابراین به یاد داشته باشید، پشته است متغیر که در زمان کامپایل ایجاد می شود.
و پس از آن پشته است متغیر که ایجاد شده تا شما را به
با malloc، به عنوان مثال.
>> رسید [نامفهوم]؟
>> LUCAS: پس GetString است رفتن به malloc تماس بگیرید.
اجازه بدهید در مورد malloc صحبت می کنید، و I GetString توضیح خواهیم داد.
بنابراین malloc همان چیزی است به عنوان تخصیص حافظه.
بنابراین آن را به اختصاص حافظه در پشته.
و آن را به بازگشت به یک اشاره گر به که در آن است که حافظه اختصاص داده شده بود.
>> بنابراین، هنگامی که شما do--
در اینجا برای example--
نفر اشاره گر ستاره.
و سپس اشاره گر برابر با malloc اندازه اینچ برابر 10.
من ایجاد یک اشاره گر.
و سپس من اختصاص که اشاره گر به ارزش اشاره گر که malloc
من به.
>> بنابراین من درخواست malloc می تواند به شما اختصاص فضا برای 10 عدد صحیح.
این چیزی است که آن را گفت.
و malloc به من می دهد به عقب اشاره گر به آن محل.
را حس؟
OK.
من و GetString است، اساسا، انجام تماس بگیرید به malloc بنابراین شما می توانید اختصاص
حافظه در زمان اجرا.
>> همیشه به یاد داشته باشید برای تهی بررسی چرا که malloc است که به بازگشت تهی
اگر آن را می تواند به حافظه اختصاص دهد.
اجازه دهید بگویم که شما برای یک مسخره بپرسید مقدار حافظه.
کامپیوتر شما نخواهد بود قادر به تخصیص که بسیار.
>> بنابراین malloc فقط رفتن برای بازگشت به صفر.
پس همیشه به یاد داشته باشید در صورتی که برای بررسی اشاره گر است که شما از malloc رو است
تهی یا نه به این دلیل، اگر چنین باشد، شما ممکن است شود هرگاه یک اشاره گر و
ایجاد گسل طرف.
و در نهایت، فراموش نکنید حافظه آزاد خود را.
>> Malloc ایجاد حافظه در پشته.
و شما باید برای آزاد کردن حافظه قبل از برنامه به پایان می رسد.
OK، که همه برای من.
با عرض پوزش، راب.
تشکر.
>> [تشویق حضار]
>> LUCAS: هر گونه سؤال آخرین قبل از راب می آید؟
نه؟
آره؟
>> رسید من نمی بینم این یک آنلاین.
آیا شما آن را آپلود رتبهدهی نشده است؟
>> LUCAS: من فکر می کنم دیو است آپلود آن را به زودی.
>> DAVE: این خواهید ارسال شود.
>> LUCAS: این آنلاین خواهید بود.
>> رسید این است.
>> LUCAS: این خبر؟
OK.
آره؟
>> رسید [نامفهوم]؟
>> LUCAS: بله، شما باید آزاد کردن همه حافظه است که در پشته قرار داده است.
>> رسید [نامفهوم]؟
>> LUCAS: بله.
هر زمان که شما یک malloc فرهنگ، شما باید یک فرهنگ آزاد
بعد از اینکه شما را متوقف و با استفاده از آن متغیر.
بنابراین malloc و آزاد هستند همیشه با هم.
بهترین دوستان خود.
آره.
راب؟
>> ROB: من به سرعت می روم.
و همچنین ویدئو را قرار داده تا.
من میکروفون در.
>> OK، بنابراین در هفته پنج مسائل.
اولین چیزی که ما باید پشته است.
بنابراین به یاد داشته باشید که فقط یک پشته وجود دارد فریم در هر فراخوانی تابع فعال است.
خواهیم دید که در یک ثانیه.
و همچنین به یاد داشته باشید آنچه که واقعا می رود در هر قاب پشته در حال رفتن به
متغیرهای محلی از توابع ما، استدلال است که به تصویب ما
توابع، همراه با یک زن و شوهر چیزهای دیگری که واقعا
نیاز به نگرانی در مورد.
>> بنابراین در اینجا یک مثال برنامه که در آن است، اخطار، اصلی است printfing بازگشت
ارزش مواد غذایی 4.
مواد غذایی فقط رفتن برای بازگشت به ارزش نوار 4 کاما از هم 6.
و نوار است که به مجموعه ای از محلی متغیر n تا 4 برابر 6 برابر است.
و سپس بازگشت n است.
>> بنابراین اجازه دهید در پشته در سراسر نگاه تکرار واقعی از این برنامه است.
پس پایین پشته ما وجود دارد.
به یاد داشته باشید که پشته رشد می کند.
بنابراین در پایین پشته ما، ما یک قاب پشته برای اصلی.
هنگامی که برنامه شروع می شود، اصلی همیشه به در می شود
پایین پشته است.
>> و آنچه که در درون ما پشته قاب برای اصلی؟
بنابراین حتی اگر هیچ محلی وجود دارد متغیرهای اصلی، مثل من گفت: قبل از،
ما تعداد آنها و rgv مصرف کردن فضای در داخل قاب پشته اصلی.
بنابراین اصلی در حال حاضر به رفتن تابع تولی تماس بگیرید.
و این به معنای مواد غذایی است که به دریافت قاب پشته خودش را دارد.
>> بنابراین در حال حاضر ما در داخل هستیم صنایع غذایی تابع.
و آنچه نیاز به در قاب پشته مواد غذایی است؟
خوب، مواد غذایی دارای یک نفر بحث.
و n تا 4 برابر است از آن چیزی است اصلی به عنوان آرگومان مواد غذایی در عبور.
>> بنابراین در حال حاضر مواد غذایی در حال رفتن به نوار تماس بگیرید.
چه نوار از رفتن به داخل از قاب پشته خود را؟
این عدد به 4 سال تا شش برابر.
این نیست که ما در حال رفتن به در قاب پشته به دلیل نوار
همچنین دارای یک متغیر نفر محلی است.
و n ما در حال رفتن به راه تا 24 برابر است.
>> بنابراین در حال حاضر نوار است که برای بازگشت به n است.
بنابراین نوار است از بازگشت به 24 صنایع غذایی قاب پشته.
و از آنجایی که نوار در حال حاضر از بازگشت، که به این معنی است که ما در حال ظاهر قاب پشته
برای نوار از پشته.
بنابراین تمام حافظه است که نوار بوده است با استفاده از در حال حاضر در خارج از پشته.
>> در حال حاضر، تولی نیز رفتن برای بازگشت به 24 به اصلی.
بنابراین در حال حاضر که مواد غذایی باز می گردد، در حافظه که مواد غذایی با استفاده از در 'آن شد
قاب پشته نیز رفته است.
و در حال حاضر، اصلی است که به تابع () printf تماس بگیرید.
بنابراین تابع () printf فقط تابع دیگری است.
هنگامی که ما تابع () printf تماس بگیرید، آن را به یکی دیگر از قاب پشته برای تابع () printf
فراخوانی تابع.
>> چیزی که ما عبور می کنند تابع () printf؟
این چیزی است که برای رفتن در قاب پشته آن است.
حداقل، ما در حال عبور که درصد من بک اسلش n و
استدلال 24.
این ممکن است بیشتر باید در آن قاب پشته است اگر تابع () printf اتفاق می افتد باید با استفاده از
متغیرهای محلی.
ما نمی دانیم.
>> اما همه که می رود در تابع () printf را پشته قاب.
آن را برای اجرای تابع () printf.
سپس تابع () printf انجام است.
این باز خواهد گشت.
در نهایت، اصلی انجام شده است.
بخش اصلی باز خواهد گشت.
و پس از آن برنامه ما انجام شده است.
آره؟
>> رسید آیا شما از دیدن [نامفهوم]
استدلال [نامفهوم]
پارامترهای؟
>> ROB: بنابراین یک تفاوت ظریف وجود دارد بین بحث ها و پارامترها.
و واقعا، در صحبت های مشترک، مردم تمایل دارند به فقط آنها را به مخلوط کردن تمام وقت.
اما پارامترهای رسمی نام از چیزهایی که.
>> بنابراین تعداد آنها و argv را می پارامترهای اصلی.
استدلال همان چیزی است که شما در واقع عبور در به عنوان کسانی که پارامتر.
پس وقتی که من مواد غذایی از 4، 4 تماس بگیرید استدلال من در عبور است.
و n پارامتر، در داخل مواد غذایی، طول می کشد در ارزش 4
از 4 استدلال بود.
>> رسید [نامفهوم]؟
>> ROB: نفر یک متغیر محلی به نوار است.
نفر هنوز محلی برای غذ، اما این پارامتر به مواد غذایی است.
این یک متغیر محلی نیست.
آره؟
>> رسید [نامفهوم]؟
>> ROB: مواد غذایی است که فقط خواستار نوار و بازگشت هر چه بازده میاره.
>> رسید [نامفهوم]؟
>> ROB: آره، فقط برای دیدن چند پشته قاب.
آره؟
>> رسید: چرا مواد غذایی نامیده می شد قبل از تابع () printf؟
>> ROB: چرا مواد غذایی قبل از تابع () printf نامیده می شد؟
بنابراین من می تواند داشته باشد، به جای آن، چیزی است که انجام می شود برای مثال، int x را برابر مواد غذایی از 4
و آنگاه x چاپ شده است.
اما در عوض، من ترکیب تابع تماس بگیرید به بحث تابع () printf.
>> اما توجه کنید که ما نمی توانیم در واقع اجرا از تماس به تابع () printf تا زمانی که ما
شکل چه مواد غذایی از 4 است.
بنابراین ما قصد داریم به بررسی این.
و فقط یک بار که انجام می رویم به بازگشت و ارزیابی این.
آره؟
>> رسید از آنجا که هر دو نوار [نامفهوم]
ارزش، چرا ما [نامفهوم] ندارد؟
>> ROB: آنها کاملا باید اعضای هیات باشد.
این بود بیش از گرفتار نیست پاس های متعدد.
پس از آن باید نوار هوشمند و هوشمند است مواد غذایی از هر دوی این
در حال بازگشت به اعداد صحیح.
از درجه اعتبار ساقط است تنها در صورتی که قصد برای بازگشت به ارزش های واقعی.
آره؟
>> رسید اگر شما تا به حال یک خط بالا بازگشت، [نامفهوم]؟
>> ROB: A خط بالا بازگشت؟
>> رسید آره.
مانند اگر شما printf و [نامفهوم] انجام داد، به چاپ آن دو بار؟
>> ROB: بنابراین در داخل از کفش؟
اگر ما یک تابع () printf را در اینجا به حال؟
>> رسید آره.
>> ROB: بنابراین اگر ما حق تابع () printf به حال در اینجا، آن را یک بار چاپ.
از آنجا که ما خواستار غذ یک بار سمت راست در اینجا، پس از آن خواهیم تابع () printf رسید.
سپس می کنیم نوار تماس بگیرید.
و پس از آن مواد غذایی باز خواهد گشت.
و این آن است.
ما تنها روبرو می شوند تابع () printf یک بار.
آره؟
>> رسید [نامفهوم]
تابع () printf تماس مواد غذایی از آنجا که ما اولین هستیم تماس printf و پس از آن ما در حال عبور
استدلال.
>> ROB: بنابراین در تئوری، نه تابع () printf تماس مواد غذایی؟
بنابراین هیچ.
فقط برای اینکه ج در حال رفتن به اجرای این چیزها است، قبل از ما می توانیم
فراخوانی تابع، همه از استدلال به تابع به
به طور کامل بررسی شده است.
بنابراین این به طور کامل مورد بررسی قرار؟
بله، آن را تنها یک رشته است.
این فقط یک ارزش است.
>> سپس ما را به طور کامل داشته باشد ارزیابی این.
به محض این که انجام شده است، در حال حاضر تمام استدلال آن ها بررسی شده است.
و در حال حاضر ما می توانیم را تماس به تابع () printf.
آره؟
>> رسید یک سوال.
اگر شما یک تابع از درجه اعتبار ساقط، باید شما نقطه و ویرگول بازگشت؟
>> ROB: شما می توانم در یک نقطه و ویرگول بازگشت ندارد اگر شما یک تابع از درجه اعتبار ساقط.
OK.
بنابراین در حال حاضر برخی از مسائل پشته.
پس پشته این است که چگونه ما قصد داریم برای مقابله با مدیریت حافظه پویا.
و این به طور مستقیم با تضاد پشته که ما تماس بگیرید به صورت خودکار
مدیریت حافظه.
>> بنابراین در پشته، هرگز به شما واقعا برای مقابله با توجه به متغیرهای محلی
در حال تحت فشار قرار دادند و ظهور کردن همه این قاب پشته و تمام چیزهای که.
شما لازم نیست که در مورد آن نگران باشید.
این خودکار.
پس پشته کتابچه راهنمای کاربر.
و [نامفهوم]
می آید از این توابع malloc و رایگان.
>> بنابراین در اینجا برنامه دیگری است.
اکنون ما در حال انجام است mallocing یک عدد صحیح.
ما آن را ذخیره سازی در ستاره ایکس.
البته، ما باید برای بررسی برای دیدن اگر x صفر است.
سپس ما قصد داریم به اون چه ایکس با اشاره به 50.
چاپ آنچه ایکس است با اشاره به، چاپ x، و پس از آن آزاد ایکس.
>> پس چگونه است که این در واقع رفتن به نگاه اگر ما در پشته و heap از ما نگاه می کنید؟
بنابراین ما دوباره شروع می شود.
پایین پشته ما را به عنوان قبل از.
به یاد داشته باشید که تو پشته به طور مستقیم مخالفت پشته؟
بنابراین ما در حال رفتن به بالای پشته ما وجود دارد.
>> بنابراین پایین پشته ما، ما قاب پشته ما برای اصلی.
این فضا برای تعداد آنها، argv را، و ما در حال حاضر یک متغیر x با مقدار، و این
یک ستاره بین المللی است.
بنابراین ما قصد داریم به تکرار از طریق این برنامه.
اولین چیزی که ما باید است یک تماس به malloc.
>> بنابراین ما در حال ساخت یک تماس به malloc.
Malloc یک تابع است.
آن را به یک قاب پشته.
چیزی که ما عبور به malloc؟
رفتن که به داخل از قاب پشته.
ما در حال عبور از اندازه n که 4.
به طوری که به malloc منتقل می شود.
>> چه malloc انجام دهید؟
این به ما کاغذ برداشته برخی از فضای در پشته.
بنابراین ما در حال رفتن به رفتن به پشته.
و ما در حال رفتن به گرفتن 4 بایت از پشته.
بنابراین اجازه دهید فقط می دهد که یک آدرس دلخواه.
0x123 فقط وانمود کرد که یک آدرس این است که در پشته.
>> پس چه شده است در واقع در داخل آن منطقه حافظه به آدرس Ox123؟
زباله.
بنابراین ما هر چیزی را در آن ذخیره شده است.
بنابراین تا آنجا که ما می دانیم، آن می تواند هر چیزی.
شما باید فرض کنید آن صفر است.
این به احتمال زیاد نمی صفر است.
>> بازده بنابراین در حال حاضر malloc.
و چه کار می کنیم زمانی که بازگشت malloc؟
ما مجموعه ای آنچه در آن می گرداند.
ما مجموعه ای ایکس برابر آنچه از آن بازگشت است.
بنابراین چه چیزی است که از بازگشت؟
این بازگشت 0x123 از آن است که آدرس بلوک از حافظه است که آن را
فقط در پشته اختصاص داده است.
>> بنابراین بازگشت 0x123 X در حال حاضر رفتن به تنظیم شود به 0x123 برابر آن، pictorially،
ما اغلب به عنوان ایکس داشتن واقعی رسم فلش اشاره به آن بلوک.
اما ایکس است فقط ذخیره سازی آن آدرس.
بنابراین در حال حاضر ما باید برای بررسی اگر x صفر است.
این تهی نیست.
ما وانمود می کرد که malloc موفق شد.
>> بنابراین در حال حاضر ستاره ایکس برابر با 50.
بنابراین ستاره به یاد این معنی رفتن به آن آدرس.
بنابراین 0x123 ما قصد داریم به رفتن به آن آدرس.
به طوری که ما به ارمغان می آورد وجود دارد.
در آن آدرس چه کار می کنیم؟
ما در حال ذخیره سازی 50.
>> بنابراین پس از این خط، که چه چیزی است همه چیز به مانند نگاه کنید.
بنابراین در حال حاضر این دیگر زباله وجود دارد.
در حال حاضر ما می دانیم که 50 است در آن آدرس خاص به دلیل
ما آن را به مجموعه.
OK؟
بنابراین در حال حاضر ما در حال رفتن برای چاپ ج.
>> بنابراین برای اولین بار ما قصد داریم تا در آن چاپ ستاره ایکس.
پس چه ستاره x است؟
باز هم، ستاره ایکس به معنی رفتن به چیزی که x با اشاره به.
بنابراین ایکس است ذخیره سازی 0x123 برو به که.
ما 50.
پس تابع f که چاپ.
و این بدان معناست که آن را به چاپ 50.
و پس از آن که باز می گردد.
>> و بعد ما printf دوم.
ما در حال حاضر درصد بود.
اگر شما آن را ندیده، که چقدر شما یک اشاره گر را چاپ کنید.
بنابراین ما باید درصد من، درصد (f) و تمام کسانی که در حال حاضر.
بنابراین درصد فسفر، چاپ یک اشاره گر.
>> بنابراین x یک اشاره گر است.
بنابراین اگر ما می خواهیم به چاپ ایکس خود را، ما در حال چاپ آنچه است که در واقع در داخل
x، است که 0x123 بنابراین اولین چاپ ج است که برای چاپ 50.
چاپ دوم ج در جریان است به چاپ 0x123 آره؟
>> رسید آیا شما استفاده از درصد x به چاپ یک اشاره گر؟
>> ROB: پس شما با استفاده از درصد x به چاپ یک اشاره گر؟
بنابراین شما می توانید اما درصد x است فقط، به طور کلی، برای مثل اگر شما برخی
عدد صحیح و شما می خواهید برای چاپ آن را به عنوان مبنای شانزده.
که چقدر شما انجام دهد.
>> در حالی که، درصد د را چاپ به عنوان دهدهی.
این بود که ما از گرفتن درصد د. من فقط عدد صحیح است.
درصد فسفر است به طور خاص برای اشاره گر.
>> بنابراین x یک اشاره گر است.
ما می خواهیم به استفاده از درصد ص.
اما درصد ایکس می تواند کار کند.
آره؟
>> رسید [نامفهوم]؟
>> ROB: آره.
حداقل برای این call-- بنابراین من آن را در اینجا را شامل نمی شود.
اما این دو استدلال لزوما در داخل این قاب پشته
همراه با هر متغیر محلی تابع () printf اتفاق می افتد باید با استفاده از.
و پس از آن تماس بعدی به تابع () printf اکنون در داخل تابع () printf قاب پشته است
درصد فسفر بک اسلش n و هر چه مقدار x است، که 0x123.
آره؟
>> رسید [نامفهوم]؟
>> ROB: این چیزی چاپ که به نظر می رسد مثل این.
>> رسید [نامفهوم].
>> ROB: پس از آن را چاپ به صورت آدرس.
آن را مانند یک آدرس به نظر می رسد.
آره؟
>> رسید [نامفهوم]؟
>> ROB: چرا چیزی است؟
>> رسید [نامفهوم]؟
>> ROB: چرا این اشاره گر 4 بایت است؟
بنابراین یک دسته کامل وجود دارد 0 در مقابل این.
بنابراین واقعا 0x0000000123.
در یک سیستم 64 بیتی، وجود دارد خواهد بود یک دسته کامل از صفر است.
آره؟
>> رسید [نامفهوم].
>> ROB: بنابراین تابع () printf اول رفتن به print--
>> رسید [نامفهوم].
>> ROB: بله، آن را به چاپ چه ایکس است با اشاره به.
ستاره می گوید: این چیست چیزی که با اشاره به.
چنگ زدن به آن.
پس چه شده است آن را به اشاره؟
50.
چنگ زدن به آن.
این چیزی است که ما قصد داریم برای چاپ.
در حالی که، یک بعدی، ما فقط چاپ ایکس خود را.
چه در داخل از f؟
0x123.
OK.
>> و پس از آن، در نهایت، در حال حاضر آزاد است.
چیزی که ما عبور می کنند را به رایگان؟
ما در حال عبور از x است.
در آن زمان من در واقع نمایش داده آن را در قاب پشته.
>> بنابراین ما در حال عبور از ارزش 0x123 به رایگان.
بنابراین در حال حاضر آزاد می داند، همه حق است، من باید تا به پشته
و رایگان است که حافظه است.
این با استفاده از دیگر آنچه در آدرس 0x123.
>> پس آزاد است که برای انتشار که از پشته.
در حال حاضر پشته ما دوباره خالی است.
ما هیچ نشت حافظه است.
در حال حاضر رایگان باز خواهد گشت.
توجه کنید که ایکس است که هنوز هم 0x123.
اما در حال حاضر حافظه معتبر نیست.
ما باید دیگر ارجاع ایکس.
آره؟
>> رسید از: آیا بازگشت 0 برکنار؟
>> ROB: آیا باز شدن 0 برکنار؟
بله.
ما فقط با قرار دادن آن وجود دارد به دلیل ما یک بازگشت یک هوا.
بنابراین آن را مانند، آره، اجازه می دهد شامل بازگشت 0.
آره؟
>> رسید [نامفهوم]؟
>> ROB: بنابراین پس از آزاد ایکس، چه اتفاقی می افتد اگر ما به ارجاع اشاره گر را امتحان کنید؟
این امکان وجود دارد که هیچ چیز را اشتباه می رود.
این امکان وجود دارد که ما هنوز هم 50.
>> این امکان وجود دارد، نیز، که حافظه است در حال حاضر برای چیز دیگری استفاده می شود.
پس از آن رفتار تعریف نشده است.
و تعریف نشده به معنی هر چیزی می تواند رخ دهد.
آره؟
>> رسید [نامفهوم]؟
>> ROB: نه، بنابراین اگر شما اختصاص x به چیز دیگری.
بنابراین اگر حق در اینجا ما گفت ایکس برابر چیزی malloc else--
malloc event-- اندازه
پس از آن که بلوک های اصلی از حافظه آزاد است.
و ما رسما آن را از دست داد.
که نشت حافظه است.
ما تمام منابع از دست داده ام به آن بلوک از حافظه است.
بنابراین هیچ راهی که ما تا کنون می توانید آن را آزاد وجود دارد.
OK، بنابراین و سپس بازگشت 0 وسیله انجام می شود.
>> خوب، سرریز تا پشته.
این ایده در اینجا چه خبر؟
بنابراین به یاد داشته باشید، پشته سرنگون است.
پشته است تا.
پس این است که به عنوان مثال از سخنرانی، من فکر می کنم، که در آن اصلی است که فقط رفتن به
به این تابع تولی، که رفتن تا خود را به صورت بازگشتی فراخوانی بیش از و
دوباره و دوباره.
>> پس پشته فریم در حال رفتن به کار دقیقا همان.
بنابراین ما در حال رفتن به شروع با اصلی به عنوان قاب پشته پایین.
سپس اصلی است که به مواد غذایی تماس بگیرید، که در حال رفتن به یک قاب پشته.
>> سپس مواد غذایی است که به مواد غذایی تماس بگیرید دوباره، که برای به دست آوردن
یکی دیگر از قاب پشته.
و پس از آن دوباره، و دوباره، و دوباره، و دوباره تا، در نهایت، ما اجرا
به پشته.
پس این است که چگونه ما سرریز پشته.
و در این مرحله، شما SEG گسل.
یا شما واقعا می SEG قبل از گسل این نقطه اما آره.
>> رسید از: آیا هسته روگرفت همان گسل SEG؟
>> ROB: پس شما تقسیم بندی ببینید هسته گسل انداختند.
شما دریافت می کنید روگرفت هسته هنگامی که شما SEG گسل.
و آن را مانند یک روگرفت از تمام است محتویات حافظه خود را به طوری
که شما می توانید امتحان کنید و شناسایی چرا شما SEG ایراد گرفت.
آره؟
>> رسید [نامفهوم]؟
>> ROB: بنابراین وسیله گسل تقسیم بندی یک سرریز پشته وجود دارد.
بنابراین نه لزوما.
گسل تقسیم بندی بدان معنی است که شما حافظه لمس کردن در راه
شما نباید باشد.
پس یک راه است که اتفاق می افتد، زمانی که شما پشته سرریز، ما شروع به دست زدن
حافظه در راه است که ما نباید باشد.
آره؟
>> رسید [نامفهوم]؟
>> ROB: بنابراین در داخل یک حلقه بی نهایت.
مانند، این است که مانند یک بی نهایت بازگشتی حلقه و بنابراین ما دیگر دریافت کنید
پشته فریم در هر زمان.
اما فقط در داخل یک به طور منظم بی نهایت در حالی که one--
خوب، اجازه دهید حتی چاپ f--
انجام کاری.
هر چه.
>> ما نمی گرفتن یکی دیگر از قاب پشته.
ما فقط قصد داریم برای حفظ حلقه بیش از این دستور.
پشته در حال رشد است.
این واقعیت است که هر بازگشتی است تماس با ما دادن قاب پشته.
به همین دلیل ما یک سرریز پشته.
آره؟
>> رسید بنابراین اگر شما گفت: برای دریافت در حالی که حلقه و پس از آن [نامفهوم]؟
>> ROB: بنابراین اگر در داخل حلقه در حالی که یک تابع () printf وجود دارد، شما هنوز هم می
گسل SEG نیست.
من فقط نمی خواست به اشتباه چیز.
آن را حلقه.
شما می خواهم یک پشته تک قاب برای تابع () printf.
>> سپس تابع () printf را می گردانند.
سپس شما حلقه دوباره می خواهم.
شما می خواهم یک پشته تک قاب برای تابع () printf.
این امر می گشت.
قاب پشته تنها.
بنابراین شما نمی این بی نهایت ستون قاب پشته.
>> رسید [نامفهوم]؟
>> ROB: بله.
بنابراین این سرریز پشته اتفاق می افتد چرا که هیچ یک از این
تماس به مواد غذایی باز می گردند.
بنابراین اگر بازگشت ما، پس ما را شروع از دست دادن فریم پشته.
و سپس ما را سرریز پشته است.
و به همین دلیل شما نیاز به یک مورد پایه برای توابع شخصی شما.
آره؟
>> رسید آیا به اندازه بالقوه و پشته برای پشته همین کار را برای
تمام برنامه ها؟
>> ROB: تقریبا.
آیا به اندازه بالقوه از پشته و پشته برای تمام برنامه ها؟
تقریبا.
برخی از تصادفی به وجود که در آن شروع می شود پشته و
که در آن پشته شروع می شود.
اگر شما اتفاق می افتد به کل بسیاری از متغیرهای جهانی و همه چیز، شما ممکن است
را به دور از برخی از فضای برای پشته خود را.
>> در یک سیستم 64 بیتی، شما عملا دارای حافظه بی نهایت است.
فقط آنقدر وجود دارد.
بین 32 بیت و 64 بیت، که تفاوت قابل توجه است.
>> شما در حال رفتن به یک کل خیلی بیشتر پشته و فضای پشته در 64 بیتی
سیستم به دلیل تنها تر وجود دارد آدرسی را که آنها می توانید استفاده کنید.
اما در یک سیستم منحصر به فرد، آن را که تقریبا همان مقدار از پشته
و فضای پشته.
خوب.
>> بنابراین آخرین چیزی که تلفیقی است.
بنابراین شما باید این فرآیند را می دانم.
چهار مرحله بزرگ وجود دارد.
بنابراین یکی از اولین باید آسان به یاد داشته باشید.
قبل از پردازش.
این پیشوند قبل در آن است.
پس از آن قبل از هر چیز دیگری می آید.
>> چیزی به خاطر داشته باشید هش است.
بنابراین هش را تعریف می کند و هش شامل در تمام آن.
کسانی که تمام پیش پردازنده می باشد دستورات.
این چیزهایی که می پیش پردازنده می کشد مراقبت از.
>> پس چه پیش پردازنده انجام دهید؟
این یک چیز واقعا گنگ است.
تمام آن را قادر به همه از این کپی، و برش و چسباندن عملیات.
>> بنابراین هش شامل استاندارد I0 نقطه در ساعت.
چه شده است که انجام می دهند؟
این استاندارد I0 نقطه ساعت گرفتن فایل و چسباندن آن را به بالا
هر جا که می گوید هش شامل استاندارد نقطه I0 ساعت.
>> و هر هش تعریف که ما کرده ایم دیده می شود، چیزی است که که انجام می دهند؟
کپی کردن آن مقدار که هش تعریف شده است به عنوان و چسباندن (paste) تعریف شده است که
هر کجا که شما با استفاده از مقدار است.
بنابراین پیش پردازنده فقط واقعا عملیات متنی ساده است.
این هیچ کاری نمی کند هوشمند.
بنابراین هر چیز دیگری است پیچیده تر است.
>> بنابراین در حال حاضر که پیش پردازنده است انجام، ما در واقع کامپایل.
چه چیزی را تدوین چیست؟
ما در حال حاضر از کد ج رفتن به کد اسمبلی.
آره؟
>> رسید [نامفهوم]؟
>> ROB: بله، ما گرفتار آن است.
پس از کامپایل.
ما قصد داریم از ج به مونتاژ.
بنابراین این تغییر زبان واقعی است.
تدوین خود را به معنای رفتن از یک زبان سطح بالاتر به
یک زبان سطح پایین تر.
>> و ج یک زبان سطح بالا است در مقایسه با مونتاژ.
مونتاژ چیست؟
دستورالعمل آن است که، بسیار زیاد است، ساخته شده برای CPU خود را.
اما کامپیوتر شما هنوز هم می کند مونتاژ درک نمی کنند.
این تنها یک و صفر می فهمد.
بنابراین گام بعدی این است مونتاژ، که ما را از این دستورالعمل به ارمغان می آورد که
CPU خود را درک می کند و در واقع آنها را ترجمه، به
یک و صفر.
>> بنابراین C به مونتاژ به باینری.
اما من یک فایل اجرایی نشده است.
پس از کتابخانه cs50 فکر می کنم.
ما شما را با یک فایل باینری برای ارائه این کتابخانه cs50، که GetString
و GetInt و تمام.
>> اما cs50 library--
در و از itself-- قابل اجرا نیست.
این کار یک تابع اصلی ندارد.
این فقط یک دسته از باینری است که شما می توانید استفاده کنید.
بنابراین ارتباط این است که چگونه ما را با هم تمام از این فایل های باینری های مختلف
به اجرایی واقعی.
یکی که شما می توانید نوع نقطه بریده بریده یک نقطه است.
>> پس این است که مانند فایل که شما نوشت، - هر برنامه خود را is--
Ceaser نقطه ج.
اما در حال حاضر آن را وارد شده است را به باینری.
بنابراین Ceaser نقطه ای.
و این است که cs50 ما کتابخانه باینری.
و آنها از ترکیب به وسیله یک فایل اجرایی.
آره؟
>> رسید [نامفهوم]؟
>> ROB: پس اول شامل، به یاد داشته باشید، هش شامل است که در واقع
مرحله پیش پردازنده.
اما این جداگانه.
اگر شما با استفاده از توابع نیست که خارج از فایل های خود را پس از آن،
نه، شما لازم نیست که به لینک هر چیزی از آنجایی که شما همه چیز را داشته باشد.
>> گفته می شود، تابع () printf است که در ارتباط است.
اگر شما تا به حال با استفاده از تابع () printf، که چیزی که نیاز به در مرتبط است
چرا که شما ارسال نشده است.
و، در واقع، تابع () printf است به طور خودکار مرتبط در.
شما می دانید که چگونه در خط فرمان و یا زمانی که وارد کنید، شما نگاه کنید به آن را دارند
فاصله ل cs50، که لینک در کتابخانه cs50؟
تابع () printf، و چیزهای که است، رفتن به در به طور خودکار مرتبط است.
هر گونه سؤال دیگر در هر چیزی؟
>> رسید [نامفهوم]؟
>> ROB: لینک کردن؟
ما یک دسته کامل از فایل های مختلف باینری.
این مثال متعارف است که استفاده می کنیم کتابخانه cs50 است.
ما وارد شده و با توجه به شما دودویی برای این کتابخانه cs50.
>> شما می خواهید به استفاده از GetString در برنامه های خود را.
بنابراین شما و استفاده از GetString.
اما بدون کد باینری من برای GetString، هنگامی که شما کد خود را کامپایل
پایین، شما در واقع می تواند اجرا شما برنامه به دلیل GetString عبارات است
هنوز به طور کامل مشخص نشده است.
>> این تنها زمانی که شما در دودویی من پیوند دارند که شامل GetString که در حال حاضر، همه
درست است، من در واقع می تواند اجرا GetString.
فایل من کامل است.
و من می توانم این را اجرا کنید.
آره؟
>> رسید آیا لینک کردن تبدیل باینری را اجرایی یا Executable؟
بنابراین حتی اگر شما دیگر ندارد کتابخانه ها، هنوز هم نمی شود آن را
لازم به ترجمه [نامفهوم]؟
>> ROB: بنابراین اجرایی هنوز در دودویی.
این فقط ترکیب یک کل دسته ای از فایل های باینری.
>> رسید از شما بسیار سپاسگزارم.
>> ROB: مشکلی نیست.
هر گونه سؤال دیگر؟
در غیر این صورت، ما در حال تمام مجموعه.
خوب.
تشکر.
>> [تشویق حضار]
>> رسید با تشکر از شما.
>> ROB: آره.