JASON HIRSCHHORN: خوش آمدید به A5، همه. ما یک هفته هیجان انگیز جلوتر از ما، عمدتا به دلیل بسیاری از جدید وجود دارد در این اتاق مواجه است. این فوق العاده است. بسیاری از شما اینجا هستید شده توسط حادثه، که هم بهتر است. پس امیدوارم شما را حفظ کنیم. این هفته ما در حال رفتن به صرف بخش عمده ای از بخش آماده شدن برای مسابقه. بنابراین در دستور کار ما، ما قصد داریم به بحث کمی در مورد منابع برای کلاس، بلکه همچنین برای مسابقه، و پس از آن، دوباره، صرف بخش عمده ای از صحبت کردن در کلاس در مورد سوالات. هنگامی که ما در حال انجام پاسخ دادن به شما سوالات، و یا اگر سوالات خود را به طور طبیعی ما را به برخی از برنامه نویسی منجر شود، I مشکلات نمونه از midterms گذشته است که ما زندگی می کنند در بخش کد با هم که همچنین مطرح کردن برخی دیگر از موضوعات خوب برای پوشش. بنابراین برای اولین بار، به عنوان ما را از طریق برای رفته چند هفته گذشته به شما یادآوری بچه ها، یک تن از منابع وجود دارد برای این دوره. بسیاری از آنها خواهد بود فوق العاده مفید به شما به عنوان شما را به ادامه مطالعه برای آزمون 0، به دلیل آن روز سه شنبه است. بنابراین از همه شما بوده است مطالعه کمی. می باشد جزوات درسی و منبع وجود دارد کدی که شما باید قطعا بررسی کنید. سازمان دیده بان شورت. اتمام study.cs50.net. و پس از آن، در زیر ذکر شده، تعداد از دیگر منابع است. باز هم، مسابقه 0 از فردا در ساعت 1. اگر شما انجام داده است تا در حال حاضر، بررسی کنید از درباره امتحان 0 سند در صفحه خانگی درس به شکل که در آن شما در حال گرفتن به مسابقه. مسابقه شروع می شود در 01:10 و 70 دقیقه بعد به پایان می رسد. بنابراین اگر شما نشان می دهد تا پس از 1:10، شما رفتن به دریافت که بسیاری از دقیقه کمتر از 70 مسابقه را. بنابراین مطمئن شوید که شما وجود دارد در زمان. اگر شما یک دانش آموز گسترش هستید یا برخی از ملاحظات تست دیگر، ممکن است در 01:00 فردا باشد. اما باز هم، بررسی درباره امتحان 0 سند را به مطمئن شوید که شما می دانید وقتی که شما در حال گرفتن به مسابقه. من نوشت 75 دقیقه تا اینجا. من فکر می کنم که درست است، نه 70. این بخش شامل تمام مواد از یک هفته 0 به سخنرانی هفته گذشته روز چهارشنبه. و دوباره، برای این مسابقه، هر که سند، شما یکی دو طرفه و 8 1/2 با 11 ورق کاغذ که شما به عنوان یادداشت استفاده در طول مسابقه. بسیاری از مردم، اگر نه اکثر مردم، دریافتند که تنها راه مفید برای مطالعه برای آزمون می باشد به یک ورق مطالعه، یک SIDER، خود را دارند. بنابراین در آنهایی که گذشته نگاه اگر شما آنهایی که در گذشته دیده می شود. دسترسی به دوستان برای دیدن آنچه که آنها در حال قرار دادن بر روی آنها. اما دست به پایین، بهترین راه که شما می توانید مطالعه از طریق همه چیز بروید و با چاقو تیز کردن و تراشیدن آن را به آنچه باید یا نباید در آن ورقه تعلق ندارد مقاله، چرا که فقط واقعا راه مفید را برای شما مطمئن شوید شما در حال رفتن را از طریق همه چیز و برخی از آشنایی با آن. بیشتر افراد، پیدا کنیم، حتی اگر آنها اند سطح کاغذ نشسته سمت راست در کنار آنها در مسابقه، آیا روشن نیست به آن، دلیل، دوباره، که بسیار روند رفتن را از طریق اطلاعات کمک کرده است تا آنها را یاد بگیرند. آیا هر کسی هر گونه سوال در مورد مسابقه 0؟ او به همه - من قصد ندارم برای انجام این کار نشان می دهد از دست. اهمیتی ندارد. من که قرار بود به درخواست که آغاز مطالعه. اما من نمی خواهم به شما را تمام دست های خود را افزایش نمی دهد. پس مثل من گفت: - بله، AVI، پیش بروید. AVI: چه خواهد بود، کاری مفید به در یک پیجر قرار داده است؟ STUDENT: این تا به شما. JASON HIRSCHHORN: شما دریافت می کنید به استفاده از قضاوت خود را. چیزهای مفید برای قرار دادن در یک پیجر، اگر شما در مورد O بزرگ اشتباه گرفته زمان اجرا از انواع مختلف از جستجوها و انواع، قرار داده است که در وجود دارد در نمودار شیک پوش دستی. به این ترتیب، اگر شما سوال شد که در مسابقه، شما لازم نیست که سعی کنید و رقم آن را یا دلیل از زمان اجرا. شما فقط می توانید آن را کپی کنید به پایین. اگر شما در آزمونها گذشته، بسیاری از نگاه زمان، در حال اجرا سوالات زمان وجود دارد. به طوری که می تواند یک نمونه از خوب چیزی که برای قرار دادن بر روی خود را با یک پیجر. دیگر چیزهای خوب برای قرار دادن در، اگر شما در مورد چگونگی اعلام اشتباه تابع و یا چه قسمت های مختلف اعلان تابع است، ارسال که در تاریخ وجود دارد، یک نسخه عمومی و پس از آن شاید به عنوان مثال. اگر شما در مورد اشاره گر اشتباه هستید، یک نمودار از نحوه کار اشاره گر است احتمالا واقعا موثر است. اگر شما در مورد بازگشت، یک اشتباه است نمونه تابع بازگشتی وجود دارد همچنین می تواند ثابت کند واقعا موثر است. آیا که شما برخی از ایده ها را؟ AVI: شما نیاز به درک تمامی مراحل تدوین، مانند چگونه است که همه آثار؟ JASON HIRSCHHORN: همه چیز که تحت پوشش شده است می تواند نشان می دهد تا در مسابقه. سوالات - اما دوباره، بعضی چیز ها خواهد بود سنگینی از دیگران است. برخی از چیزهایی که دوباره آمده اند تا و دوباره در کلاس، در سخنرانی و بخش. چیزهای دیگر ندارد آمده تا که اغلب. ما مقدار زیادی صحبت کردیم در مورد # شامل و -L چیزی و چه کسانی که در معنی فرایند تدوین. ما مقدار زیادی صحبت کردیم در مورد GDB، چسبیده، کسانی که پرچم های متفاوتی استفاده می کنیم زمانی که ما چیزی کامپایل، و آنچه make15، به عنوان مثال، واقعا معنی و واقعا. ما به همان اندازه در مورد بحث نیست هر قدم در فرایند تدوین. ما هنوز در مورد آن صحبت کردیم. پس از آن هنوز هم چیزی است که شما باید با آن آشنا باشد. اما باز هم، ما نمی شود - چیزهایی که می آیند تا بیشتر در کلاس به احتمال زیاد بیشتر به آمده تا بیشتر اغلب و به شدت بیشتری وزن در مسابقه. دانلود. هر گونه سؤال دیگر در مورد مسابقه 0؟ OK، بنابراین من یک لیست از قرار موضوع در هیئت مدیره. من را از طریق برنامه درسی رفت. من را از طریق بخش بررسی از رفت شب گذشته و کسانی که اسلاید آمد تا با یک لیست غیر جامع از موضوعات که ما تا کنون در CS50 تحت پوشش و چیزهایی که ممکن است در مسابقه ظاهر می شود. بنابراین من قصد ندارم از طریق رفتن هر یک از این. که خیلی بیشتر را زمان از ما در حال حاضر. اما من به این امیدوارم تنه زدن قرار داده تا در اینجا حافظه خود را به عنوان به چیزهایی است که ممکن است و یا ممکن است به عنوان آشنا با شما. و من دوست دارم به صرف بخش عمده ای از بخش پاسخ به سوالات شما در مورد این مباحث، موضوعاتی که در اینجا پوشش داده نمی شوند. ما می توانیم شبه کد ارسال. ما می توانیم کد واقعی ارسال برای اطمینان از اینکه شما - من می توانم به سوال شما پاسخ داده و کمک به همه اساسا درک بسیاری از این موضوعات تا شما احساس آماده و راحت با رفتن به فردا مسابقه. پس بیش از این لیست به عنوان خوانده شده. شما امیدوارم به قسمت با برخی از سوالات نیز هست. وقتی که شما آماده، بالا بردن دست خود را و ما آغاز خواهد شد. به خاطر داشته باشید، به سوالات شما، هیچ سوال احمقانه وجود دارد. ما شنیده ام که بسیاری. و به سوالات شما، من حاضر هستم به شرط، بسیاری از مردم دیگر هر دو اینجا نشسته و به تماشای آنلاین نیز هست. بنابراین شما فقط می توانید به مردم کمک با پرسیدن سوال. مارکوس. MARCUS: بین پشته و پشته، یک پیش اختصاص داده است درصد از حافظه است که به عنوان تعریف شده این است که برای پشته و یا برای پشته؟ و یا چگونه است که کار، دقیقا انجام می دهد؟ JASON HIRSCHHORN: سؤال بسیار خوبی است. من قصد دارم به عقب ردیابی کمی. آیا همه - لطفا صادقانه در اینجا. من می دانم که شما می خواهم برای بالا بردن خود را دست در مقابل همسالان خود. اما افرادی که احساس وجود دارد ناراحت کننده با پشته و توده و می خواهم برای بیش از که و آنچه در آن چیست؟ دست خود را بالا ببرید اگر - OK. متشکرم. بنابراین ما در حال به بیش از پشته بروید و پشته واقعا به سرعت و پس از آن حرکت به پاسخ به سوال شما. بنابراین اگر ما بیرون کشیدن از یک جعبه برای نشان دادن حافظه در کامپیوتر شما، چه برخی از آنها چیزهایی که در این جعبه برود؟ اصلی. تابع اصلی. کجا اصلی بروید؟ STUDENT: [نامفهوم]. JASON HIRSCHHORN: پس ما قرار داده اصلی را در اینجا. چه چیز دیگری می رود در این کادر؟ STUDENT: توابع است که با شما تماس. JASON HIRSCHHORN: توابع که ما تماس بگیرید. و از کجا که بروند؟ STUDENT: در پشته. JASON HIRSCHHORN: آنها رفتن در پشته. بنابراین ما قصد داریم به این چیزی که در اینجا پشته. و تا بالا، ما باید پشته. بنابراین حافظه است یک جعبه مثل این نیست. اما در واقع بسیار مشابه است. این برای رفتن به یک مقدار زیادی از جعبه های بیش از و بیش، بسته به اینکه چگونه بزرگ خود را کامپیوتر است و یا چگونه بزرگ حافظه خود را است. در نقل قول، نقل قول را تمام کردن "پایین" پشته است. و کارهای مختلف وجود دارد که در پشته بروید. و کسانی که در توابع وابسته شما در کد خود را داشته باشد. شما همیشه در یک تابع شما کد نام اصلی، پس همیشه وجود دارد بخش کردن در اینجا در پشته اختصاص داده شده به اصلی. این بخش در پشته در حال فریم پشته نامیده می شود. هنگامی که شما یک تابع دیگر تماس بگیرید، می گویند اصلی خواستار یک تابع جستجوی دودویی، ما قاب دیگر در پشته قرار داده است. بیشتر به طور خاص، ما می رویم به اهدای یک تکه از حافظه ما کامپیوتر برای ذخیره باینری جستجوی محلی متغیرها و برای اجرای باینری کد جستجو. بنابراین ما جستجوی دودویی تماس بگیرید. در این بخش از حافظه، ما قصد داریم برای ذخیره متغیرهای محلی آن است. ما قصد داریم برای ذخیره تماس های چون printf آن است. هر چه اتفاق می افتد، که تابع است رفتن به ذخیره می شود سمت راست وجود دارد. جستجو دودویی در حال رفتن به اجرا. این است رفتن به تکمیل اعدام. کلمه در C چه است که دلالت که یک تابع باید اعدام خود را کامل؟ STUDENT: بازگشت. JASON HIRSCHHORN: بازگشت. بنابراین هر زمان که شما یک دستور return را ببینید، به پایان می رسد تابع در هنگام برخورد که. جستجو پس باینری بازده آن رسید. این بخش از حافظه در اصل خواهد شد شود تا آزاد شده است. و اصلی بازگشت به اعدام خواهد شد. بنابراین اصلی توقف خواهد در هر کجا، تماس بود جستجوی دودویی، برخی از مقدار بازگشتی، و اعدام ادامه می دهند. این قاب پشته خواهد رفت. اگر ما یک تابع بازگشتی، با که یک تابع که خود را بیش خواستار است و بیش از این، ما ممکن است - می گویند ما انجام جستجوی دودویی به صورت بازگشتی. ما ممکن است باینری نسخه جستجو یک را دریافت کنید، جستجوی دودویی دو، جستجوی دودویی سه، جستجوی دودویی چهار، جستجوی دودویی پنج. و پس از آن در این جستجو نهایی باینری پنج خواهد به حالت پایه، و پشته آمار فریم به عقب خواهد رفت و اختتامیه نگه دارید ما تا برگشت به بخش اصلی دریافت کنید. ما می توانیم بیش از بازگشت در کمی بروید. اما همه این است که می گویند، اگر شما فراخوانی توابع چندگانه در یک زمان، آنجا خواهد بود چند پشته فریم در پشته. پشته، از سوی دیگر، تا در اینجا، برای توابع نیست، برای متغیرهای محلی. این برای صورت پویا اختصاص داده است متغیر. بنابراین این متغیر است که می تواند باشد مقدار دهی اولیه در هر دو اصلی یا تابع است که تماس های اصلی. در هر جای کد شما، آنها می توان مقداردهی اولیه. و برای مقداردهی اولیه به صورت پویا متغیر اختصاص داده است. چه تابع در C را استفاده می کنیم؟ STUDENT: Malloc. JASON HIRSCHHORN: Malloc. شما malloc تماس بگیرید. شما یک فضای حافظه دریافت کنید. و این فضای حافظه در پشته. و این فضای حافظه باقی می ماند وجود دارد تا با شما تماس رایگان. متغیرهای بنابراین به صورت پویا اختصاص داده شده در پشته برای تا زمانی که شما وجود داشته باشد می خواهید آنها را به وجود داشته باشد، و آنها نمی خواهند دور تا زمانی که شما به صراحت به آنها بگویید که برود. شما می توانید آنها را در یک تابع را ایجاد کنید. پشته است که تابع قاب دور خواهد رفت. اما این متغیر هنوز هم وجود خواهد داشت در پشته تا زمانی که آزاد شده است، به طور بالقوه توسط تابع است که به نام جستجوی دودویی یا هر چیز دیگری. بنابراین کسانی که متغیرهای پشته اقامت وجود دارد تا زمانی که شما می خواهید آنها را به ماندن وجود دارد. و آنها را در اینجا قرار دهید. و پس از آن یک بعدی می شود وجود دارد می شود. آنها را گرفتن است نه در، و آنها ماندن در آنجا تا زمانی که با شما تماس رایگان. و در اصل، پشته و به پشته، گرفتن به سوال مارکوس را، نسبت به یکدیگر رشد می کنند. و اگر آنها در یکی دیگر از اجرا، شما استفاده از تمام حافظه در خود کامپیوتر، و برنامه های خود را ترک خواهد کرد چرا که شما هر حافظه بیشتر ندارد در سمت چپ استفاده کنید. در بین آنها، وجود دارد همه چیز به طور بالقوه دیگر. اما برای از محدوده این البته، شما لازم نیست که در مورد آن نگران باشید. به طوری که پاسخ این بود به پرسش شما. نگرانش نباشید. اما این جواب بود. همه شما نیاز به دانستن است پشته و پشته - یکی در پایین شروع می شود. پشته می کند. پشته است وجود دارد. آنها به یک دیگر نزدیک تر خواهد شد. و اگر آنها را لمس، که یک مشکل است. شما از حافظه فرار. اما همچنین، علاوه بر دانستن که در آن آنها، چیزی است که در هر دو ذخیره پشته و پشته. کورتیس. CURTIS: هنگامی که آنها هم برخورد می کنند، که سرریز پشته است؟ JASON HIRSCHHORN: هنگامی که آنها هم برخورد می کنند، که سرریز پشته نیست. سرریز پشته یک منطقه متفاوت است که ما می توانیم بیش از اگر شما می خواهید. OK، ما به آن در یک بیت آمده است. STUDENT: کلمه نامیده می شود چیست زمانی که آنها ضربه یکدیگر، پشته و پشته؟ JASON HIRSCHHORN: در حال حاضر، در مورد نگران نباشید. فقط می دانم - من به این پرسش پاسخ بعد از کلاس. اگر آنها را به یکدیگر اجرا شود، شما فرار از حافظه، چرا که هیچ بیشتر وجود دارد فضا وجود دارد. STUDENT: با عرض پوزش، چه گسل SEG است؟ JASON HIRSCHHORN: A بخش گسل را می توان برای نام - آن بستگی دارد به همین دلیل به نام گسل SEG است. گاهی اوقات، سرریز پشته خود، آن را خواهید می گویند SEG به عنوان خطا در گسل. STUDENT: در مورد هرگاه یک متغیر تهی؟ آیا این گسل SEG؟ JASON HIRSCHHORN: غیر مرجع یک اشاره گر تهی - OK، بنابراین اگر شما یک اشاره گر است که شما را برابر تهی، اشاره گرها، به یاد بیاورید، آدرس های حافظه فروشگاه به عنوان ارزش های خود. و یک اشاره گر تهی است که در اصل ذخیره سازی 0، 0-TH آدرس در آن متغیر است. بنابراین 0x نمایش، 0، 0، 0، 0، و غیره. این آدرس 0 ام را در حافظه که نیست در تصویر ما، که وجود دارد در جایی، که محفوظ می باشد برای کامپیوتر است. ما مجاز به لمس. بنابراین، هنگامی که برنامه شما را اجرا، اگر چیزی در تلاش است تا به حافظه آدرس 0، از آن می داند که که یک مقدار خالی است. این می داند که هیچ چیزی باید وجود داشته باشد. بنابراین اگر شما سعی می کنید و استفاده از چیزی وجود دارد و درمان چیزی شبیه وجود دارد و یا تلاش برای رفتن به آن مکان، شما رفتن به گسل SEG یا خطا. آیا این پاسخ به سوال شما؟ و در حال حاضر ما به عقب بروید به سرریز پشته. چیزهایی که در پشته، که شما بچه ها قبل از دیده می شود، در - اجازه دهید نزدیک رسم از یک قاب پشته. همه می بینند که؟ بنابراین ما باید قاب پشته ما. ما در حال صرفه جویی در یک آرایه به عنوان یک محلی متغیر در این تابع. بنابراین می گویند آرایه ما پنج نقطه. هر پنج از آن ذخیره خواهد شد در قاب پشته. اگر ما شروع به فراتر از نوشتن مرزهای این آرایه - بنابراین اگر ما شروع به نوشتن به، اجازه دهید بگویم که 0. این پنج شاخص می باشد از آرایه است. اگر ما شروع به نوشتن به شاخص 5، که زمانی که ما ما ندارد مجموعه ای از اندازه 5، ما شروع به نوشتن به شاخص 6، 7، 8، 9، ما می توانیم یک پشته را دریافت کنید خطای سرریز. به طور کلی آن را نمی - شما احتمالا به دردسر خواهد شد اگر شما بیش از یک است. اما به طور کلی، شما را به دریافت کنید ترین مشکل اگر شما بیش از توسط بسیاری و شما بروید تا کنون بیش از است که شما ارسال بر روی آدرس بازگشت که تابع است، که در واقع پایین قاب پشته. از آنجا که، درست است؟ شما - در - متاسفم. نه "به دلیل راست." در قاب پشته، شما باید متغیرهای محلی خود را. در پایین پشته قاب آدرس برگشت است. که در آن تابع است می رود که آن را بیش از. و اگر شما که بازگشت بازنویسی آدرس، و سپس وقتی که این قاب پشته، زمانی که قصد دارید از طریق پشته قاب و اجرای هر خط، شما رفتن به آدرس بازگشت جدید خود را که وجود دارد به جای نوشته یکی از واقعی. و این که چگونه ما دیده ایم برخی از نقض امنیت می توانید با کامپیوتر اتفاق می افتد. سرریز پس پشته، در کوتاه مدت، زمانی است که شما در بخش بازنویسی در پشته شما قرار است برای استفاده، محلی متغیر شما قرار است برای استفاده، و به ویژه هنگامی که شما شروع به جای نوشتن چیز مهمی مانند آدرس بازگشت. و این که در آن شما یک خطا دریافت کنید. یا شاید حتی شما می توانید شروع حتی نوشتن را - می گویند جستجوی دودویی بود در بالا سمت راست اصلی. اگر شما overwrote زیادی، شما می تواند به اصلی ارسال. اما به طور کلی، شما یک خطا قبل پس از آن، چرا که کامپیوتر می داند شما در حال انجام چیزی است که شما نباید انجام شود. آره. STUDENT: تفاوت چیست بین سرریز پشته و یک سرریز بافر؟ JASON HIRSCHHORN: سرریز بافر نوع کلی تر است آنچه که من فقط توضیح داده ام. STUDENT: بنابراین سرریز پشته است نمونه ای از یک سرریز بافر. JASON HIRSCHHORN: دقیقا. این یک آرایه ما می توانیم به عنوان یک فکر است بافر، یک فضا برای همه چیز به وارد این یک سرریز پشته است. ما می تواند یک سرریز بافر پشته داشته باشد. اگر یک بافر، که وجود دارد، اغلب وجود دارد یک آرایه پشته است، و ما overwrote آن محدوده، پس از آن ما خواهد بود یک سرریز بافر پشته. و فراتر از محدوده این دوره، آنها تشخیص داده شده کمی متفاوت است. کامپایلر های ویژه راه تشخیص هر یک. اما سرریز بافر عمومی تر است نوع آنچه که من شرح داده شده، که یک سرریز پشته بود. آیا این پاسخ به سوال شما؟ شیرین. وجود هر گونه سؤال دیگر مربوط به پشته یا پشته؟ آره. STUDENT: من می دانم که شما به رشته آزاد چرا که آنها در پشته است و شما نمی خواهید به نشت حافظه است. اما شما باید به آزاد متغیر های جهانی و چیزهای شبیه به آن؟ و یا آنها را به طور خودکار آزاد؟ JASON HIRSCHHORN: سوال خوب. بنابراین در CS50.H، ایجاد می کنیم این چیز برای شما یک رشته به نام. یک رشته واقعا چه؟ STUDENT: چهار ستاره. JASON HIRSCHHORN: A ستاره کاراکتر، یک اشاره گر به یک شخصیت، یک اشاره گر به آرایه ای از کاراکتر. این چیزی است که رشته است. بنابراین ما باید آن را آزاد، به دلیل getstring، که ما مورد استفاده زیادی - نام رشته برابر getstring - که mallocs برای ما برخی از حافظه در توده و سپس یک اشاره گر به را برمی گرداند اولین شخصیت است که رشته، یک ستاره کاراکتر. بنابراین ظاهرا، اگر شما نشده اند نوشتن رایگان بر روی هر یک از رشته های خود را که شما تا کنون نام کرده اید، است نشت برخی از حافظه. البته ما در مورد صحبت نمی آن، بنابراین هیچ کس را در بدست مشکل برای انجام آن. اما رفتن به جلو، بله. هنگامی که شما getstring تماس بگیرید، شما mallocing برخی از فضای در پشته. و اگر شما بعد تماس بگیرید رایگان در آن رشته، شما باید نشت حافظه. که پاسخ به سوال شما؟ آره STUDENT: بنابراین برای انجام این کار، استفاده ما حق آزاد قبل از بازگشت؟ مانند، در محدوده، من حدس می زنم اگر به ما می گویند، مانند، اعضای هیات تحریریه اصلی، در دامنه این کد که در آن آکولاد، درست قبل از - شما می دانید که در آن شما می خواهم معمولا بازگشت قرار داده است. آیا شما را آزاد قبل از آن؟ JASON HIRSCHHORN: بنابراین شما می توانید رایگان قرار داده هر کجا که شما می خواهید برای قرار دادن رایگان. از آنجا که این ها به صورت پویا اختصاص داده متغیر، زیرا آنها می توانند فراتر از محدوده ی خاصی زندگی می کنند تابع، اگر شما malloc در تماس عملکرد مجزا، به عنوان مثال، getstring، شما می توانید در اصلی تماس رایگان. شما لازم نیست به آن تماس بگیرید در تابع خاص که در آن malloc نامیده می شود. اما شما لازم به آن تماس بگیرید قبل از بازده اصلی. و این واقعا بستگی دارد. این که چرا شما malloced که بستگی دارد فضا در وهله اول. برخی از افراد تماس بگیرید آزاد بسیار به سرعت. بعضی از مردم نمی خواهد تا با تلفن رایگان پایان برنامه های خود. و آنها را از طریق رفتن و همه چیز آزاد است. این که چرا شما به نام malloc بستگی دارد. STUDENT: و آنچه را که به شما می گویند اگر شما استفاده از getstring به نام؟ شما می گویم آزاد چه؟ JASON HIRSCHHORN: پس از نحو به صورت رایگان به سادگی آزاد، پرانتز باز، بسته است پرانتز، و به نام اشاره گر. بنابراین اگر شما ارسال رشته نام و نام خانوادگی برابر getstring، شما نام را در اینجا. این نام اشاره گر است. و این می داند که آزاد است که حافظه است. STUDENT: بنابراین، هنگامی که آن را آزاد می گذارد که حافظه، اشاره گر هنوز هم به آن محل اشاره در حافظه؟ و یا اشاره گر نیز خالی است آدرس که آن را به اشاره می کند. JASON HIRSCHHORN: ما باید سعی کنید که. ما باید کدی که. اجازه دهید به عقب آمد که ما برای به دست آوردن برنامه نویسی، و اجازه دهید کدی که. و اگر شما می خواهید به شکل پاسخ به که، شما همچنین می توانید کد که در ضمن. اما این یک سوال بزرگ است. STUDENT: آیا می توان به چیزی رایگان بیش از حد به زودی؟ پس تو هنوز به آن نیاز دارید برای برنامه خود، و شما که فضای حافظه آزاد؟ JASON HIRSCHHORN: بله. این امکان وجود دارد، اگر شما چیزی رایگان و سپس شما از آن استفاده دوباره، به شما خواهد شد اجرا به خطا. اما این بر شما، به خاطر شما آزاد چیزی و سپس بعد از آن را به نام. به طوری که اشتباه یک برنامه نویس بود. اما بله. شما می توانید بنویسید. هر گونه سؤال بیشتر در مورد - بله. STUDENT: بنابراین اگر شما قرار است فقط آزاد آن به طور کلی قبل از برنامه به پایان می رسد، به این معنی است که اگر برنامه به پایان می رسد و شما آن را آزاد نیست، که حافظه هنوز هم به خود اختصاص داده است؟ JASON HIRSCHHORN: اگر برنامه خود را به پایان می رسد و شما را فراموش کرده ام به آزاد چیزی، پس از آن که حافظه در سراسر اختصاص داده شد طول عمر برنامه خود را. هنگامی که برنامه های خود را بسته به طور کامل، که حافظه است که نمی برای همیشه لطفا برای اقامت وجود دارد. کامپیوتر به اندازه کافی هوشمند به دانستن است که وقتی برنامه بسته می شود، آن باید از همه از حافظه خلاص شدن از شر است که با این برنامه همراه بود. با این حال، ابزار شما می توانید اجرا وجود دارد در یک برنامه برای شناسایی، زمانی که برنامه به پایان رسید، شما را فراموش کرده به مقداری از حافظه است. و برای مشکل بعدی خود را تنظیم که در آن شما با استفاده از malloc و با استفاده از اشاره گر، به شما خواهد شد در حال اجرا این برنامه در برنامه های خود را به دیدن، زمانی که سود عمده، تو داشته چیزهایی که unfreed شدند. به طوری که آنها در حال رفتن را به ماندن malloced برای همیشه لطفا برای در کامپیوتر شما. این امر می تواند بی فایده است، چون به سرعت، کامپیوتر را از حافظه اجرا شود. اما اگر آنها تا پایان خود را اجرا کنید برنامه ریزی و آنها را آزاد نیست و شما برنامه خارج می شود، که هنوز هم یک مشکل که این ابزار به شما کمک خواهد پرداخت. STUDENT: آیا این Valgrind؟ JASON HIRSCHHORN: این نام Valgrind. و شما خواهید بود - STUDENT: اما ما لازم نیست که می دانم که برای مسابقه، هر چند؟ منظور من، آن صحبت شد کمی در سخنرانی. JASON HIRSCHHORN: پس Valgrind نام آن ابزار است. دانستن اینکه چه چیزی می شود؟ است به اندازه کافی برای مسابقه. اما شما آن را هنوز در استفاده نشده خود را مشکل تنظیم چون ما نداشته است مجموعه ای مشکل است که به صراحت برخورد با malloc و یا شما با استفاده از malloc. بنابراین شما Valgrind هنوز استفاده می شود. اما شما آن را هر چه زودتر استفاده و نه بعد. STUDENT: آیا می توانید تکرار چه Valgrind است؟ JASON HIRSCHHORN: ببخشید؟ STUDENT: آیا می توانید تکرار آنچه هدف از Valgring است؟ JASON HIRSCHHORN: Valgrind نام است - مثل GDB شما کمک می کند اشکال زدایی برنامه های خود را، Valgrind کمک می کند تا شما از شکل اگر همه چیز آزاد نشده است هنگامی که برنامه های خود را می بندد. بنابراین شما آن را در برنامه های خود را اجرا کنید. و برنامه های خود را خارج می شود، و آن را خواهم گفت. برنامه های خود را به نام malloc این بسیاری از برپایه این چند بایت، و شما فقط آزاد به نام این چند بار. و به این ترتیب شما این کلمه در ادامه متن بسیاری از ترک بدون اینکه آزاد شده است. و یا آن را می گویند که همه چیز آزاد شده ام. کار خوب. STUDENT: OK. و آن را Valgring به نام؟ JASON HIRSCHHORN: V-A-L-G-R-I-N-D. STUDENT: A سوال در مورد اشاره گر. بنابراین شما به N ستاره X چیزی برابر. برابر است، هر آنچه که شما در حال قرار دادن وجود دارد، این است که آنچه را که در داخل قرار داده آنچه X با اشاره به، و یا اشاره گر از X؟ JASON HIRSCHHORN: آیا می توانید سوال تکرار؟ آیا ما می توانیم آن را رسم در حالی که شما آن را می گویند؟ STUDENT: در مسابقه، در واقع، یکی از شما به ما ارسال می شود، آن را مانند، کاراکتر بود حقیقت این ستاره برابر است با سنگ CS50، درست است؟ بنابراین معنا است که که سنگ CS50 چیزی است که حقیقت این است با اشاره به؟ JASON HIRSCHHORN: بنابراین شما در حال صحبت کردن در مورد یک ستاره کاراکتر در یک رشته، چگونه که کار می کند؟ آره. OK. بیایید این رسم بیش از اینجا. [SIDE گفتگو] JASON HIRSCHHORN: بنابراین این متغیر در حال رفتن به از نوع ستاره کاراکتر باشد. یک متغیر چقدر است ستاره نوع char؟ چگونه بسیاری از بایت؟ دانش آموزان: چهار. JASON HIRSCHHORN: این چهار بایت است. یک متغیر چگونه بسیاری از حقوق است ستاره نوع int؟ دانش آموزان: چهار. JASON HIRSCHHORN: چهار بایت. اگر یک اشاره گر است، سپس آن را همیشه چهار بایت، چون اشاره گر، خود را ارزش یک آدرس حافظه است. و آدرس های حافظه در CS50 دستگاه چهار بایت طول دارد. بنابراین، هنگامی که ما getstring، و یا وقتی ما تماس بگیرید مثلا stringname برابر، و پس از آن در دو علامت قرار داده یک رشته، ما در حال قرار دادن - خوب، که کمی متفاوت است. ما را getstring به عنوان مثال. یا ستاره کاراکتر چیزی برابر با رشته. با عرض پوزش، من مثال را که شما خوانده شده؟ STUDENT: کاراکتر ستاره حقیقت برابر است با "سنگ cs50" در نقل قول ها دو برابر شود. JASON HIRSCHHORN: پس این ستاره، این ما این متغیر x برای تماس ما اهداف عمومی. ما یک متغیر به نام X ایجاد کرده اید. این نوع ستاره کاراکتر است. این یک اشاره گر به یک سری است از شخصیت های. بنابراین در اینجا - پس این است که چگونه این امر کار در حافظه است. این یک آدرس حافظه ذخیره کنند. این که آدرس حافظه ذخیره اولین کاراکتر در آرایه. و پس از آن زمانی که شما به دنبال اشاره گر، شما را دریافت اولین کاراکتر. و اگر شما در حال خواندن این چیزی مانند یک رشته، کامپیوتر شما هوشمند است به اندازه کافی می دانم، به عنوان خوانده شده کل این چیز تا زمانی که آن را به یک واکنش 0 می شود. اما اگر شما آن را می خوانید یک شخصیت در یک زمان، پس شما تکرار از طریق این رشته، و سپس شما فقط به عنوان خوانده شده شخصیت در یک زمان تا زمانی که شما برای به دست آوردن بک اسلش 0. که ممکن است پاسخ دهد شما سوال، هر چند. STUDENT: آره، اما شما ندارد malloced که فضا در عین حال که برای اشاره گر. JASON HIRSCHHORN: پس من کاملا مطمئن نیستم دقیقا همان چیزی است که شما به دنبال در، چون من که مسابقه را ندارد. که قرار بود مفید منابع از TF دیگر. اگر شما در حال ایجاد یک رشته در پشته و یا به عنوان یک متغیر محلی، آن را خواهید فقط مجموعه ای از اتهامات و نه می شود به طور کلی یک ستاره کاراکتر با اشاره به یکی دیگر از رشته. اما من نمی دانم. که می تواند یک اشاره گر به دیگری رشته در پشته نیز هست. آره. STUDENT: من می دانم که شما نیاز دارید تخصیص حافظه اگر اشاره گر است گرفتن در داخل اعلام کرد از تابع دیگر. آیا شما نیاز به انجام همان چیزی که اگر آن را در داخل از اصلی اعلام کرد، شما با استفاده از آن را در داخل از اصلی؟ JASON HIRSCHHORN: بله. شما می توانید یک اشاره گر به هر گونه اعلام آدرس حافظه در حافظه است. این می تواند آدرس حافظه محلی متغیر، هر چند اغلب، مردم آدرس های حافظه تعریف نشده به متغیرهای محلی به خاطر آنها به دور یک بار که تابع برمی گرداند، که همین دلیل است که ما به طور کلی malloc چیز. اما بله، شما می توانید یک اشاره گر اعلام به متغیر محلی دیگر. این فقط به طور کلی انجام می شود. اما من می توانید نگاهی را که چیزی که خاص بعد از کلاس. آره. STUDENT: من فکر می کنم این است مرتب سازی بر از آنچه که خواسته شده. به نظر می رسد عجیب و غریب به مقدار دهی اولیه می شود یک اشاره گر نه به عنوان آدرس، اما آنچه به نظر می رسد مثل یک ارزش. به نظر می رسد مانند CS50 است آنچه در داخل چیزی که به اشاره و نه آدرس واقعی، درست است؟ JASON HIRSCHHORN: پس این چنین نیست، هر چند. این چیزی است که اتفاق می افتد نیست. هنگامی که شما یک ستاره کاراکتر اعلام، آن است که یک آدرس حافظه است. اشاره گرها تمام آدرس های حافظه اشاره به چیز دیگری. این چیزی است که چیز دیگری می تواند در است پشته، اما تقریبا همیشه در است توده در راه خواهیم دید آن استفاده می شود. اما stringname برابر با دو اعلان "getstring،" ما می توانید ببینید که و ما می توانید از طریق آن نگاه کنید و کد آن. getstring رشته است که در ذخیره نشده که متغیر، یا هر رشته نام است که در آن ذخیره نشده متغیر، چرا که نمی توان اشاره گر کار می کنند. آیا این را حس؟ STUDENT: آره. JASON HIRSCHHORN: OK. امیدوارم، که نبود گیج کننده است به هر کسی. اما اگر آن بود، ما می توانیم در آن را دوباره نگاه کنید در یک بیت، زیرا ما در واقع رفتن کد چیزی است که امیدوارم خواهد شد کار با رشته ها و به شما کمک کند احساس راحت تر با آنها. هر گونه سؤال دیگر مربوط به این موضوعات و یا موضوعات دیگر که من را به بالا قرار داده است؟ و - در حال حاضر. بله، آلدن. آلدن: پس این است که کاملا نامربوط، اما می تواند ما فقط رفتن را واقعا به سرعت به آنچه که ما نیاز به دانستن در مورد تفاوت بین 32 و ماشین های 64 بیتی؟ JASON HIRSCHHORN: بله. بنابراین 32 بیت است که چگونه بسیاری از بایت؟ آلدن: این چهار بایت است. JASON HIRSCHHORN: این چهار بایت است. و 64 بیت است که چگونه بسیاری از بایت؟ STUDENT: هشت. JASON HIRSCHHORN: هشت بایت است. بنابراین دوباره، هشت بیت یک بایت است. لوازم CS50 شما یک ماشین 32 بیتی. بنابراین آدرس های حافظه چهار بایت طول دارد. 2 وجود دارد به 32 آدرس های حافظه است. 0 تا 2 به 32 منهای 1. و من مثبت نیست، اما این احتمالا دامنه آنچه شما نیاز دارید می دانم که برای یک ماشین 32 بیتی، که حافظه آدرس هستند، دوباره، چهار بایت، و است که مقدار حداکثر است از آدرس حافظه است. همچنین، انواع داده ها - این ممکن است چیزی به عنوان خوب است که ارزش ندارد. به اندازه یک نوع داده ها بستگی دارد ماشین شما کار با. بنابراین یک کاراکتر، یک شخصیت واحد، این است که چگونه بسیاری از بایت در دستگاه CS50 ما؟ یک بایت. و این در واقع یک بایت به عنوان به خوبی بر روی یک ماشین 64 بیتی. و بسیاری از انواع داده ها به همان تعداد از هر دو ماشین بایت. اما برخی از انواع داده های مختلف خواهد بود در هر دو ماشین. به طوری که به طور بالقوه خواهد بود تنها چیزی که شما باید بدانید. اما حتی از آن، من فکر می کنم، است فراتر از مرزهای - من تقریبا مثبت هستم، اگر شما نگاه به عقب در آزمونها قدیمی، آن را می گوید، برای فرض برنامه نویسی مشکلات شما با استفاده از یک ماشین 32 بیتی. اما وجود دارد، به همراه است که در مورد علاقه وجود دارد انواع داده ها که مثل هم هستند اندازه در تمام دستگاه. اگر شما چیزی مانند دیده می شود uint32_t، شما ممکن است یا ممکن نه دیده اند که. این یک نوع داده است. که می گوید، می شود 32 بیت بدون توجه به چه دستگاه این است. بنابراین، هنگامی که مردم در حال نوشتن قابل حمل کد، آنها احتمالا نوع داده int استفاده کنید. در عوض، آنها را با استفاده از این اطلاعات دیگر انواع که آنها می دانند خواهد بود اندازه بر روی هر دستگاه واحد. Madhu. MADHU: من یک سوال در مورد حال فرایند تدوین. بنابراین اگر شما در حال نوشتن یک برنامه است که با استفاده از کتابخانه شبیه به CS50 یا چیزی مانند آن، من می دانم که که کتابخانه به، در برخی از نقطه، لازم است وارد شده و مرتبط شوید اما چه مقدار از آن در طول اتفاق می افتد تلفیقی از برنامه های خود را؟ چه بخشی از این پروسه کتابخانه رخ می دهد زمانی که شما تدوین برنامه های خود را؟ JASON HIRSCHHORN: بنابراین اجازه دهید بیش از به طور کلی مراحل این فرایند است. شما ارسال فایل C خود را. در فایل C خود را، شما # شامل شما کتابخانه هدر، به عنوان مثال، cs50.h. چه که تیز عبارتند از خط انجام دهید تا برنامه های خود را؟ Akchar. AKCHAR: این اضافه می کند نمونه های اولیه از توابع از هدر فایل های موجود در کتابخانه ها. JASON HIRSCHHORN: دقیقا. این می افزاید: کسانی که نمونه های اولیه تابع به کد شما. بنابراین، هنگامی که کد خود را در وارد در مراحل اولیه، کامپایلر می داند که این توابع واقعا وجود داشته باشد، و است که در جایی که تعریف شده است. فایل های. ساعت را شامل نمی شود تعاریف برای این توابع و یا چگونه آنها در واقع کار می کنند. Cs50.h فقط شامل چیزی است که می گوید: getstring یک چیز واقعی است که می تواند رخ دهد. و standardio.h می گوید: چون printf است یک چیز واقعی است که می تواند رخ دهد. بنابراین زبان C خود را با این. هدر فایل می شود به برخی از تبدیل کد قابل خواندن با ماشین، که در نهایت می شود به دودویی تبدیل کد، 0 و 1. و این کد را که در نهایت اجرا می شود. -l خط cs50 - به عنوان مثال، هنگامی که شما در حال نوشتن صدای جرنگ جرنگ - و سپس شما عبارتند از-L cs50، شما تایپ می کنید که سایت شوید. و شما می بینید که. هنگامی که شما ارسال می کند، نظر شما این خط رو در اینجا مشاهده کنید. و خواهیم دید که در یک ثانیه در هنگام ما کد و یا بعد از آن زمانی که ما کد. اما که-L خط cs50 کاری کمی متفاوت از # شامل cs50.h. خط است که-L cs50 چکار می کند؟ AVI؟ AVI: من می خواهم بگویم که این لینک کتابخانه به تابع تماس، مانند فایل های ای. JASON HIRSCHHORN: بنابراین بسیار نزدیک، اگر نقطه در تاریخ نیست. -l cs50 فایل باینری طول می کشد و این ادغام با فایل باینری است. بنابراین cs50.h، هیچ نقطه در تبدیل وجود دارد cs50.h از زبان C به باینری هر زمان واحد از آن استفاده می شود. این احمقانه است، چرا که یک مقدار زیادی از اتلاف وقت. پس از آن در حال حاضر وارد شده است و تبدیل به یک فایل اجرایی. و در حال حاضر آن است که رفتن به در هم ادغام می شود با فایل خود را در پایان. بنابراین کسانی که 1 و 0 است در حال رفتن به ادغام با آنهایی که خود را و 0 را در پایان. بنابراین در حال حاضر شما در واقع می خواهیم واقعی داشته باشد 1 و 0 است که تعریف getstring، به عنوان مثال، کار می کند، و یا چگونه چون printf، به عنوان مثال، کار می کند. و برای اطلاعات بیشتر، وجود دارد کامپایلر های کوتاه است که مقابله می دهد که شما باید بررسی کنید که می رود از طریق این مراحل. اما - بله. STUDENT: آیا آنها همیشه در فایل های ای. زمانی که آنها در قالب کتابخانه هستید، آماده به در هم ادغام می شود، مرتبط است - مانند آنها در کد باینری هستید؟ JASON HIRSCHHORN: OK. چه - STUDENT: است که همیشه و در مورد کتابخانه زمانی که شما آنها را پیوند دارند؟ JASON HIRSCHHORN: بله. بنابراین است. فایل، که خواهد شد وجود دارد کد ماشین، که آن هم خواهد بود مرموز به شما. شما لازم نیست که در مورد آن نگران باشید. اما به طور کلی، بله، آنها در. ای آماده رفتن فایل ها. STUDENT: بنابراین، هنگامی که شما به کشتی یک کتابخانه، آیا شما فقط کشتی است. ساعت و. ای؟ شما ج یا. ها کشتی نیست. JASON HIRSCHHORN: پس - و این است که در این کوتاه به عنوان خوب، اگر به نظر می رسد این اطلاعات به آینده شود کمی به سرعت. اما کوتاه در کامپایلرها مذاکرات در مورد این عنوان است. هنگامی که شما به کشتی یک کتابخانه، اگر شما کشتی است. ساعت، فایل هدر، کسانی که نمونه های اولیه تابع، و 1 و 0 است، که همه شما نیاز به دادن است. شما لازم نیست که به چگونگی تابع کار می کند، فایل ج. از آنجا که این نقطه از انتزاع، و یا اشاره رابط های برنامه کاربردی، نقطه در این SPL، کتابخانه دانشگاه استانفورد قابل حمل، آن را را برای شما به نگرانی در مورد که چگونه جدید GRect کار می کند، و یا چگونه حرکت می کند کار می کند، و یا چگونه اضافه کار می کند. همه شما باید بدانید که اضافه یک تابع که شما می توانید است استفاده کنید، و این کار. پس شما واقعا لازم نیست که می دانم که چگونه آن را در C. شما نوشته شده است فقط نیاز به می دانید، در اینجا توابع هستند، چه آنها انجام، و در اینجا در 1 و 0 هستند زمانی که شما واقعا می خواهید از آنها استفاده کنید. دانلود. هر گونه سؤال بیشتر در مورد کامپایلرها و یا موضوعات دیگر در هیئت مدیره؟ STUDENT: من یک سوال از پیاده سازی توابع بازگشتی. سوال در مورد بازگشت. من یک احساس است که می آمد تا به حال. بنابراین اجازه دهید به سرعت از طریق رفتن بازگشت با خاص به عنوان مثال، یک تابع فاکتوریل. از آنجا که این یک مثال است که اغلب می آید و یا استفاده شده است برای نشان دادن بازگشت. پس "4" به عنوان 4 فاکتوریل به عنوان خوانده شده. و چه 4 فاکتوریل چیست؟ چه کاری انجام دهید؟ چگونه می توانم شما را محاسبه 4 فاکتوریل؟ 4 بار 3 بار 2 بار 1. بنابراین روش دیگری برای ارسال 4 فاکتوریل است برای نوشتن این. 4 بار در 3 فاکتوریل. از آنجا که 3 فاکتوریل است 3 بار در 2 زمان 1. بنابراین 4 بار در 3 فاکتوریل 4 است بار 3 بار 2 بار 1. به همین دلیل است فاکتوریل بزرگ است نامزد برای بازگشت، به خاطر آن روشن است که چیزی است که وجود دارد اتفاق می افتد و بیش از بیش و بیش در تعداد کمتری از چیزهایی که تا شما به پایان برسد. هنگامی که شما در رسیدن به 1، 1 فاکتوریل 1 است. شما نمی توانید بسیار فراتر روند. 0 فاکتوریل نیز به عنوان 1 تعریف شده است. بنابراین، هنگامی که شما را به 0 یا 1 را دریافت کنید، شما در پایان، و شما می توانید شروع رفتن به بالا. بنابراین اگر ما می خواستیم به ارسال نامه بازگشتی تابع برای محاسبه فاکتوریل، ما قصد داریم به ارسال برخی از شبه که در حال حاضر. قبل از اینکه ما ارسال که شبه - من به شما بچه ها شما را در چند دقیقه برای نوشتن شبه کد و یا فقط فکر می کنم در مورد آن - دو چیز هر وجود دارد تابع بازگشتی نیاز دارد. آن دو چیز چیست؟ JACK: این به خودی خود تماس بگیرید. JASON HIRSCHHORN: نوح؟ اوه، جک. برو جلو. JACK: این به خودی خود تماس بگیرید. JASON HIRSCHHORN: بنابراین بازگشتی عملکرد نیاز به یک تماس بازگشتی، تماس بگیرید تا خود را. این یکی است. و چه چیز دیگری است؟ JACK: A مورد پایه. JASON HIRSCHHORN: A مورد پایه. مورد پایه است، در اینجا زمانی است که ما را متوقف کند. بنابراین عملکرد خود را به نام می شود. مورد پایه می آید برای اولین بار. شما می خواهید بدانید که اگر شما در پایان است. و اگر شما در پایان نیست، شما را فراخوانی بازگشتی خود را. و شما را از طریق این تابع دوباره، دوباره به حالت پایه خود را چک کنید. اگر شما پایان نیست، شما را یکی دیگر از تماس بازگشتی، و غیره و غیره. به همین دلیل توابع بازگشتی همیشه باید این موارد پایه و کسانی که تماس بازگشتی. اگر شما یک تماس بازگشتی ندارد، آن می تواند یک تابع بازگشتی نیست. اگر شما مورد پایه را نداشته باشند، شما برای همیشه رفتن و هیچ پایانی وجود دارد. و مورد پایه همیشه می آید اول، آنجا که شما همیشه می خواهید برای بررسی اگر شما در پایان اولین هستیم. بنابراین قبل از ما انجام برخی از شبه، چرا می توانم شما را نه یک دقیقه به فکر کردن در مورد چگونه یک تابع فاکتوریل بازگشتی می شود نوشته شده است؟ همچنین، به عنوان بسیاری از شما انجام می دهند، نوشتن آن را در یک ورق کاغذ است آنچه شما باید به کار را در مسابقه فردا. عمل پس احتمالا خوب را مطمئن شوید که کد شما در حال نوشتن را بر روی صفحه کاغذ - یا شما می توانید انجام این کار. شما می دانید که در آن سمی کالن می باشد. شما می نحو به یاد داشته باشید. از آنجا که شما نه می توانند داشته باشند کامپایلر به شما بگویم اشتباهی کرده. همچنین، در امتداد آن خطوط، فردا، زمانی که شما برنامه نویسی، اگر شما برای هم با عجله، و یا اگر شما خیلی هستید که چگونه شما قرار است به اشتباه گرفته ارسال نامه چیز خاصی در ج، آن به نظر شما واجب بودن به نوشتن شبه کد و یا ارسال نظر در نیز هست. از آنجا که اعتباری جزئی برای وجود دارد بسیاری از سوالات در مسابقه. بنابراین شما ممکن است با عجله، و یا شما فقط ممکن است اشتباه گرفته شود. نوشتن در نظرات و یا شبه کد راه اغلب که شما می تواند اعتباری نسبی دریافت کنید. بنابراین چیزی را ترک نمی کند خالی در مسابقه. هیچ مجازات وجود دارد قرار دادن اشیاء در. در واقع، قرار دادن در شبه کد یا نظر است که برای کمک به موتورهای حرفه ای کشف کردن اگر شما می دانند چه شما در حال صحبت کردن در مورد، و شاید جایزه شما برخی از اعتباری نسبی برای آن. همچنین در امتداد آن خطوط، ارسال به وضوح. اگر ما واقعا نمی تواند آنچه را که شما نوشتن، ما قصد داریم به شما تماس بگیرید در نیمه شب فردا به شکل آنچه شما نوشته است. ما فقط این رو خود را به پرواز نقطه است. ارسال به وضوح بنابراین ما می توانیم شنیدن، و یا به جای، ما می توانیم به عنوان خوانده شده آنچه شما نوشته است. و اگر آن را می گوید دو جمله، یک پاراگراف نوشتن نیست. به دنبال دستورالعمل. ارسال به وضوح. و ارسال در آن نظر و یا شبه برای سوالات است که می تواند جایزه اعتباری جزئی. خوب، اجازه دهید به فاکتوریل. بنابراین ما باید یک عامل عملکرد. اگر من به واقع این ارسال در C، آنچه که من باید قبل از نام قرار از تابع؟ نوع بازگشت، که، در این مورد، ما آن را از نوع int می دهد. و سپس در داخل آکولاد، است چه می رود در داخل آکولاد برای یک تابع؟ دانش آموزان: نوع برهان. JASON HIRSCHHORN: استدلال آن. بنابراین فاکتوریل احتمالا را استدلال. این احتمالا فقط یک آرگومان است. و ما می خواهم آن را به را یک عدد صحیح به نام X. و دوباره، اگر نوشتن نمونه اولیه از یک تابع و یا نوشتن تابع در کد خود را قبل از تعریف آن، شما ارسال به نوع داده و نام که متغیر فقط برای آن تابع. بنابراین شما می توانید برخی از تعداد به این عبور تابع، آن را به عنوان X اشاره داخلی. ما تابع فاکتوریل است. ما دو چیز، یک پایه مورد نیاز و تماس بازگشتی. در مورد پایه برای فاکتوریل چیست؟ کسی که آن را نوشته و که نمی صحبت نشده است، چه پایه است مورد فاکتوریل؟ STUDENT: اگر نفر کمتر است از 2، بازگشت 1. JASON HIRSCHHORN: اگر نفر است کمتر از 2، بازگشت 1. من دوست دارم که، چرا که طول می کشد مراقبت از 0 و 1. پس ما انجام X <2، بازگشت 1. اگر ما به تصویب 0، اگر ما را دریافت کنید گذشت 1، این تابع بلافاصله بازگشت 1. اگر ما به تصویب برخی بیشتر تعداد از یا برابر با 2، ما قصد داریم به باید تماس بازگشتی است. و به این ترتیب چگونه است که رفتن به کار می کند؟ آیا می توانم کسی دیگری که در این کار است که سخن گفته نشده است من را تماس بازگشتی برای این تابع در شبه؟ اگر ما در یک عدد X گذشت و آن را بزرگتر از 2، چه ما می خواهیم انجام دهیم؟ ما همچنین یک مثال نوشته شده در سمت که ممکن است به شما تذکر بدهد. STUDENT: تماس بگیرید برپایه X فاکتوریل عدد منهای 1؟ JASON HIRSCHHORN: دقیقا درست است. ما قصد داریم برای بازگشت به زمان X فاکتوریل عدد منهای 1. و این، حتی اگر من نوشتم، اساسا، آنچه که شما به زبان انگلیسی گفت: این تابع فاکتوریل خواهد دوباره به نام. این بستگی X منهای 1 را اجرا کند. آن را با یک عدد صحیح بازگشت، و سپس آن را به این دو ضرب با هم، و ارزش خواهد بود به آن چه که به نام بازگشت تابع فاکتوریل، که ممکن است می شود به عنوان مثال دیگری از این تابع فاکتوریل. به طوری که یک نمونه از بازگشتی است تابع، بسیار تابع ساده بازگشتی. اما بسیاری از آنها خواهد شد شبیه به این باشد. اگر می خواهید یک بازگشتی خوب دوست به چالش کشیدن برای مسابقه، سعی کنید برنامه نویسی جستجوی دودویی به صورت بازگشتی. چرا که اگر شما جستجوی دودویی برای انجام مشکل مجموعه سه، شما احتمالا آن را انجام داد تکرار در یک حلقه در حالی که. اما آن را نیز می تواند نوشته شود به صورت بازگشتی. شما در حال رفتن به نیاز به نوشتن خود را توابع است که برخی از آرگومان خط فرمان های مختلف - و یا نه استدلال خط فرمان، برخی از مختلف استدلال فقط به طور منظم. اما شما می توانید از جستجوی دودویی ارسال به صورت بازگشتی نیز هست. STUDENT: بنابراین شما می توانید از هم نوشته شده است، به جای X منهای 1، شما همچنین می توانم از X منهای نوشته شده است منفی، و یا شما می توانید از نوشته شده X منفی منفی. می تواند شما را واقعا به سرعت توضیح دهد آن خواهد بود چیز های مختلف، مانند چه تفاوت است بین X منفی منفی و منفی منهای X؟ JASON HIRSCHHORN: نه، من نمی رفتن به رفتن به آن است. اما من به شما در مورد آن بعد از صحبت کلاس. X منهای منهای، منهای منهای X واحد کم میکنیم x به 1. اما آنها این کار را کمی متفاوت است. اما من نمی خواهم برای رفتن به آن است. سوال دیگر در مورد بازگشت و یا این تابع؟ این واقعا حتی شبه نیست. اساسا این کد در C شما می توانید برای این ارسال. OK، هر گونه سؤال دیگر در مورد موضوعات بالا؟ آره. STUDENT: من یک لپتاپ از ممیز شناور و دقت. JASON HIRSCHHORN: شناور نقطه و دقت. آیا می توانم کسی واقعا به سرعت من مختصر و مفید از را ممیز شناور و دقت؟ همه شما تا به حال به انجام این کار برای شما مشکل تعیین می کنند، بنابراین شما تمام است آشنایی با آن. یا شاید نه همه شما. هر کسی؟ من یک نقطه آغاز را. ممیز شناور و دقت. مشکل چیست؟ بله. ویکتوریا؟ ونسا: ونسا. JASON HIRSCHHORN: ونسا. متأسفم. ونسا: تنها تعداد محدودی وجود دارد از اعداد است که می تواند نشان داده دلیل این که شما در، در هستی ما مورد، یک سیستم 32 بیتی. بنابراین شما نوع به برخی از اعداد را تشکیل می دهند. JASON HIRSCHHORN: پس این دقیقا درست است. تنها مقدار مشخصی از وجود دارد اعداد است که می توان ارائه داد. اگر دو عدد بسیار بزرگ شما را چند برابر، ممکن است مقدار سرریز فضاهای شما را مجبور به نشان دادن یک عدد صحیح. به همین دلیل گاهی اوقات استفاده می کنیم بلند بلند به جای یک int. است که فضای بیشتر. است که می تواند تعداد زیادی نگه دارد. دقت ممیز شناور است که با که، بلکه برای انجام با واقعیت این است که اعداد اعشاری می باشد همیشه نشان داده نمی شود. متأسفم. اجازه بدهید من قرار داده این را به بالا. اعشاری عدد 1.0 است که همیشه نشان داده شده است مانند شما انتظار می رود، 1.000000000. این است که گاهی اوقات به عنوان نشان داده شده است 1.000000001 یا 0.999999999. این ممکن است حتی 89 پرتاب در جایی. بنابراین کسانی که اعداد اعشاری نیست نشان داده دقیقا مثل شما که آنها را به انتظار نشان داده می شود. بنابراین در مسئله تنظیم - آن دو بود؟ - مشکل تنظیم دو، که در آن ما با آن برخورد اعداد ممیز شناور، زمانی که ما می خواستیم آنها برای نشان دادن دقیقا همان چیزی است که ما می خواستیم آنها را برای نشان دادن، تعداد از سکه، و یا تعدادی از سنت، ما آنها را با 100 ضرب. ما آنها را گرد. و بعد ما قطع همه چیز پشت از نقطه اعشار. این بود تا اطمینان حاصل شود که آنها را در واقع برابر دقیقا همان چیزی است که ما می خواستیم آنها برابر. از آنجا که شما را چیزی است که شناور و تبدیل آن به یک int، شما قطع همه چیز را به سمت راست از نقطه اعشار. از آنجا که برخی از نقطه شناور وجود دارد عدم دقت، 100.000 ممکن است به عنوان نماینده 99.999999999. و اگر شما فقط قطع همه چیز را به حق حق دور، شما به بدست آوردن شماره اشتباه است. آره. STUDENT: من تا به حال یک سوال در مورد ریخته گری. چه منظور آن را در رخ می دهد؟ اگر شما می خواهم شناور انجام، براکت، 1 تقسیم 10، آیا آن را 1 تقسیم بر 10، سپس 0.1، پس از آن نوبت آن را به یک شناور؟ JASON HIRSCHHORN: اگر شما شناور 1 تقسیم بر 10 - STUDENT: آره، و پس از آن برابر است - خوب، آن را به طور معمول آن را در برابر - آره. شما می خواهید به آن شناور است، درست است؟ JASON HIRSCHHORN: OK، بنابراین ما در حال رفتن به استفاده از آن segue به بدانند پاسخ به این سوالات از طریق برنامه نویسی. از آنجا که شما احتمالا به مقدار زیادی از این سوالات دقیقه، و یک راه خوب برای حل آنها از طریق برنامه نویسی. بنابراین ما در حال به کد این حق در حال حاضر، و پس از آن ما قصد داریم برای رفتن به عقب و کد سوال شما تا به حال. بنابراین در خط اول - من باید آن نوشته شده است - آنچه که اولین چیزی که ما می خواهیم انجام دهیم زمانی که ما باز کردن فایل جدید در نرمافزاری gedit؟ STUDENT: شامل. JASON HIRSCHHORN: شامل چه؟ STUDENT: کتابخانه CS50. JASON HIRSCHHORN: OK. چه چیز دیگری باید شامل؟ ما فقط قصد داریم به بررسی آنچه اتفاق می افتد هنگامی که شما چیزی به شناور، رای دادند. اما چیزی که ما نیاز به عبارتند از اگر ما رفتن به نوشتن یک برنامه C؟ STUDENT: استاندارد I / O. JASON HIRSCHHORN: stdio.h. ما در واقع لازم نیست، برای این برنامه، cs50.h، حتی اگر آن را همیشه مفید به آن باشد. اما ما همیشه باید stdio.h. STUDENT: هنگامی که برنامه نویسی در C؟ JASON HIRSCHHORN: هنگامی که برنامه نویسی در C. پس من آن را به عنوان این فایل ج. را نجات دهد. من مقداری نحو برجسته به خوبی دریافت کنید. من از درجه اعتبار ساقط داخل اصلی نوشت. چه باطل چیست؟ STUDENT: آیا هیچ را ندارد آرگومان خط فرمان. JASON HIRSCHHORN: به معنی خالی، در این مورد، اصلی هیچ را ندارد آرگومان خط فرمان. در موارد دیگر، به این معنی است که تابع به این استدلال خط فرمان را ندارد. و یا تابع، اگر من به نوشتن از درجه اعتبار ساقط اصلی (خالی)، که می گویند اصلی هر چیزی بازگشت نیست. پس از درجه اعتبار ساقط فقط به معنی هیچ چیز نیست. چه من ارسال اگر من به بود را استدلال خط فرمان؟ دانشجو: اعضای هیات قوس ج در برابر قوس رشته JASON HIRSCHHORN: بین المللی تعداد آنها و argv رشته است. آیا این درست است؟ STUDENT: این کاراکتر براکت و argv ستاره است. JASON HIRSCHHORN: بنابراین شما می توانید ارسال براکت و argv یا رشته ی argv ستاره کاراکتر براکت، اما شما نیاز به براکت. از آنجا ی argv یک آرایه است از رشته ها، به یاد داشته باشید. این فقط یک رشته نیست. بنابراین argv را رشته است، در اینجا یک رشته به نام argv را. براکت و argv رشته است، در اینجا آرایه ای از رشته ها. بنابراین اعضای هیات براکت و argv رشته تعداد آنها خواهد بود چیزی که من احتمالا ارسال. بنابراین شما می خواهید را به صرفه جویی در یک عدد صحیح؟ STUDENT: آره، عدد صحیح. و یا در شناور. JASON HIRSCHHORN: در شناور؟ مانند، شناور X برابر با 1 تقسیم بر 10. JASON HIRSCHHORN: OK. چگونه می توانم نسخه قابل چاپ I از شناور در چون printf؟ چه؟ STUDENT:٪ F. JASON HIRSCHHORN:٪ F. یک عدد صحیح چیست؟ د و یا من. رشته چیست؟ STUDENT: ها. JASON HIRSCHHORN: ها. چگونه می توانم یک خط جدید را دانلود کنم؟ STUDENT: ممیزوارونه نفر. JASON HIRSCHHORN: انجام آنچه بازگشت I اگر اجرا می شود اصلی به درستی؟ STUDENT: 0. آیا من نیاز به نوشتن این خط، هر چند؟ STUDENT: شماره OK، ما آن را ارسال نمی کند، پس از آن. آیا می توانم هر کسی به عنوان خوانده شده که؟ به نظر می رسد کمی کوچک است. همه می بینند، یا باید من آن را تر کند؟ من فکر می کنم برای دوربین، ما را آن را کمی بزرگتر، هر چند. JASON HIRSCHHORN: اگر من می خواهم به نوبه خود این ج را به یک فایل اجرایی، چه را ارسال کنم؟ STUDENT: ساخت آزمون. JASON HIRSCHHORN: ببخشید؟ STUDENT: ساخت آزمون. JASON HIRSCHHORN: ساخت آزمون. ما در مورد صحبت شد این خط پیش از آن. صدای جرنگ جرنگ. صدای جرنگ جرنگ چیست؟ نام کامپایلر. این خط چیست؟ STUDENT: این مجموعه برای استفاده از GDB. JASON HIRSCHHORN: مجموعه آن را برای استفاده از GDB تا. این خط، آنچه که؟ STUDENT: کد منبع. JASON HIRSCHHORN: که منبع فایل، فایل ج. این دو خط چه کاری انجام دهید؟ یا این دو خط است. STUDENT: نام این آزمایش آن. JASON HIRSCHHORN: بنابراین درجه فاصله را می گوید، نام آن را چیزی متفاوت است. و در اینجا شما آن را خواستار آزمون. اگر من که نه در، چه خواهد آن را به این نام؟ STUDENT: A.out. JASON HIRSCHHORN: A.out. این به چه کاری انجام دهید؟ STUDENT: لینک کتابخانه ریاضی. JASON HIRSCHHORN: این لینک در کتابخانه ریاضی. ما کتابخانه ریاضی را شامل نمی شود، اما از آن بسیار رایج، آنها را نوشته شده است که همیشه شامل کتابخانه ریاضی. و به همین ترتیب، این شامل کتابخانه CS50. OK، بنابراین اگر لیست ما، ما در حال حاضر یک فایل اجرایی به نام آزمون. برای اجرای آن، می نویسم آزمون. من می بینم که ممیز شناور من، به عنوان انتظار می رود، برابر با 0. آیا این - بنابراین - STUDENT: پس اگر شما را در حال حاضر شناور، مانند شما آن را بازیگران به عنوان شناور - JASON HIRSCHHORN: نظرسنجی ها 1 به شناور؟ دانشجو: نه، بازیگران چیز کامل - آره. اگر شما فقط از آن، می که 0.1 را؟ JASON HIRSCHHORN: خوب، پس واقعا به سرعت، 1 تقسیم بر 10، کسانی که اعداد صحیح در حال تقسیم شده است. بنابراین، هنگامی که شما عدد صحیح تقسیم می شوند، آنها 0، و شما صرفه جویی که 0 در شناور، چرا که بریده بریده است فقط تقسیم صحیح. بنابراین در حال حاضر ما در حال تبدیل به چیزی به یک شناور. بیایید ببینید چه اتفاقی می افتد. ما آزمون شما را. بنابراین در حال حاضر ما می بینیم که که بریده بریده بود تقسیم عدد صحیح، آن را شناور تقسیم نقطه. از آنجا که یکی از استدلال های آن به یک شناور بازیگران شده بود. بنابراین در حال حاضر آن شد و گفت: درمان این تقسیم بندی که ما با خرید و فروش نقاط شناور، و نه با اعداد صحیح. و بنابراین ما جواب انتظار می رود دریافت کنید. بیایید ببینید چه اتفاقی می افتد - اوه. اگر من می خواستم به چاپ دهدهی تر لکه، چگونه می تواند من که؟ STUDENT: نقطه نقطه F، و یا به عنوان بسیاری از رقم اعشار به عنوان شما می خواهید. JASON HIRSCHHORN: پس من نسخه قابل چاپ 10 نقطه اعشار. و ما در حال حاضر ما در حال رسیدن برخی چیزهای عجیب و غریب. و که به سوال خود را می رود در مورد ممیز شناور عدم دقت. چیزهای عجیب و غریب ذخیره شده در اینجا وجود دارد. OK، می کند که پاسخ به سوال شما؟ چه چیز دیگری می خواهید بود به کد به سرعت؟ STUDENT: من فقط می خواستم برای دیدن اینکه آیا یا نه، اگر شما آزاد تا برخی از اشاره گر، آیا که اشاره گر هنوز هم در ذخیره کرده بود آن آدرس از آنچه در آن بوده است با اشاره به قبلا. JASON HIRSCHHORN: OK، بنابراین اجازه دهید کار را انجام دهید. PTR ستاره چهار، این باعث ایجاد یک متغیر نام PTR از نوع ستاره کاراکتر. چگونه malloc ارسال I؟ آلدن؟ آلدن: فقط malloc. اما پس از آن را به اندازه و در این مورد، من حدس می زنم شما می خواهم شود با اشاره به char. پس از آن می شود، کاراکتر. JASON HIRSCHHORN: OK، بنابراین بیشتر عموما، در داخل - اجازه دهید را ویرایش کنید. در داخل malloc، شما می خواهید تعداد در پشته کلمه در ادامه متن. به طور کلی، آنچه که ما دیده ایم که ما هستیم انجام شده است ما قصد داریم به malloc رشته ها، به عنوان مثال، و یا آرایه از اعداد صحیح. بنابراین اگر ما می خواهیم 10 عدد صحیح، و یا 10 کاراکتر، 10 به ما 10 را. و پس از آن اندازه کاراکتر می دهند ما که اندازه ای از کاراکتر ها که در این مورد 1 بایت است. ما 10 بایت. اگر قرار بود برای نوشتن اندازه هوشمند، که ما 40 بایت می دهد. پس عام تر، در داخل از malloc تعداد بایت شما می خواهید می باشد. در این مورد، ما در حال گرفتن 1 بایت. که مانند یک استفاده عجیب و غریب به نظر می رسد از malloc، اما برای ما اهداف را حس می کند. به طوری که وجود دارد. ما قصد داریم برای تماس رایگان. ما از آن خلاص شوید و ما استفاده PTR دوباره. و چه می خواهید چک کنید؟ STUDENT: من فقط می خواستم که آیا بررسی یا نه هر چیزی وجود دارد در داخل آن است. JASON HIRSCHHORN: بنابراین آیا آن را به هر چیزی اشاره کرد؟ STUDENT: آره، دقیقا، چه آن را هنوز هم یک آدرس حافظه است. JASON HIRSCHHORN: بنابراین شما می خواهید برای بررسی ارزش PTR؟ STUDENT: بله، دقیقا. JASON HIRSCHHORN: چه چیزی در اینجا ارسال I اگر من می خواهم برای بررسی ارزش از نقطه - چه چیزی است، اردن گفت: ارزش؟ و یا چه در داخل از PTR ذخیره می شود؟ STUDENT: یک آدرس حافظه. JASON HIRSCHHORN: یک آدرس حافظه. بنابراین اگر من ارسال فقط این، آن را خواهید من ارزش PTR را. و چگونه چاپ من آدرس حافظه؟ رشته فرمت چه برای آدرس حافظه؟ STUDENT:٪ ص. JASON HIRSCHHORN:٪ ص. ٪ s در یک رشته است. ٪ p برای اشاره گر. آیا این درست است؟ درست است. بنابراین PTR برابر - هنوز چیزی در آن است. این است که احتمالا بیشتر سوال جالب. که خط چکار می کند؟ STUDENT: گسل SEG. JASON HIRSCHHORN: چه؟ STUDENT: من فکر می کنم seg به گسل. JASON HIRSCHHORN: HM؟ STUDENT: من فکر می کنم آن را گسل seg به. JASON HIRSCHHORN: بنابراین این خط از PTR کد، ستاره، چه آیا این ستاره چیست؟ STUDENT: محتوا از. JASON HIRSCHHORN: آره. برو برای دریافت مطالب از. پس این است که برای رفتن به حافظه آدرس وجود دارد و به من می دهد که. I٪ C استفاده می شود در اینجا به دلیل وجود دارد هستند شخصیت های ذخیره شده وجود دارد. بنابراین ما در حال رفتن به آن آدرس ما فقط دیدم - یا آن را احتمالا می شود کمی این متفاوت زمان ما این برنامه را اجرا کنید. اما ما به این آدرس بروید که ما می دانیم هنوز هم وجود دارد و ببینید چه چیزی وجود دارد. بنابراین آن را گسل seg به نیست. این اصلا چیزی به ما بدهد. این ممکن است در واقع به ما چیزی، ما نه تنها می تواند آن را ببینید. و این به این ایده می رود - و ما در حال رفتن به دریافت بیش از حد به این، به این دلیل است که فراتر از این دامنه این دوره. اما ما در مورد اگر ما صحبت کردیم در اینجا، فراتر از مرزهای آرایه گذشت 1، ما ممکن است دچار مشکل شوید. گاهی اوقات، هنگامی که شما درست کردن به 1، شما در حال انجام کاری اشتباه است، و شما می تواند دچار مشکل دریافت کنید. اما شما همیشه در دردسر. این بستگی دارد که چه مقدار از یک چیز بد شما را، شما در حال رفتن به در دردسر. که است که می گویند، درهم و برهم است با کد شما. اما این است که می گویند، این برنامه را نمی همیشه ترک، حتی اگر شما جایی بروید شما قرار نیست برای رفتن. یک مثال خوب از این است که، بسیاری از مردم در مشکل خود مجموعه 3، که شد 15، چک نمی مرزهای هیئت مدیره. بنابراین شما را به سمت چپ نگاه کرد، به نگاه سمت راست، نگاه به بالا، نگاه به پایین. اما شما بررسی نمی کنید اگر بالا در واقع قرار بود در هیئت مدیره باشد. و بسیاری از افرادی که این کار را و تبدیل شده است که در برنامه های خود مشغول به کار کاملا، چرا که در آن است که هیئت مدیره بود ذخیره شده در حافظه، اگر شما یکی رفت در بالای آن و یا بررسی می شود که حافظه آدرس، هر چیزی وجود ندارد به خصوص در مورد که وحشتناک، بنابراین برنامه شما نبود رفتن به فریاد زدن در شما. اما ما هنوز هم را خاموش امتیاز اگر شما چک کنید که، به خاطر شما انجام شد چیزی است که شما نبود قرار است انجام دهد، و شما می توانید از بدست در مشکل. شانس هستند، هر چند، شما احتمالا نمی. پس این نشان می دهد که، بله، ما هنوز هم می تواند آن را به. و ما در حال رسیدن در مشکل در این مورد. اگر ما سعی در خواندن 100 حرف بعدی، ما می خواهم احتمالا در مشکل دریافت کنید. و شما می توانید کد خواندن 100 بعدی شخصیت اگر شما با انجام برخی می خواهند نوع حلقه for. آره. STUDENT: از آنجا که ما قرار گرفتند که فضای ارزش واقعی، ما نه در واقع قادر به دیدن هر چیزی باشد. آیا باید آن را امتحان کنید و با تنظیم که برابر مانند C و یا چیزی؟ JASON HIRSCHHORN: سؤال بسیار خوبی است. چگونه می توانم که ارزش - چه خط از کد را من در خط ارسال هفت به آنچه که شما گفت؟ STUDENT: ستاره PTR برابر تک نقل قول ج تنها اعلان پایان. JASON HIRSCHHORN: به طوری که قرار دادن یک شخصیت، ج، در آن محل، چرا که باز هم آن ستاره به معنی به وجود دارد. و وقتی که در سمت چپ استفاده عملگر انتساب، که برابر است با ثبت نام، ما قصد داریم که برای دریافت مقدار بسیار به عنوان مجموعه ای که ارزش. حالا اجازه دهید ببینیم که چه چیزی اتفاق می افتد. ما چیزی وجود دارد و آنجا بود. ما به نام آزاد است. برخی از فایل های احتمالا رخ داده است در پشته. پس از آن وجود دارد دیگر. اما باز هم، ما نمی در مشکل برای رفتن وجود دارد. من انجام این کار در کد برای نشان دادن که بسیاری از این سوالات است که شما داشته باشد، آنها واقعا جالب پاسخ بسیاری از زمان. و آنها سوالات واقعا خوب است. و شما می توانید آنها را در شکل خود اگر خود را، به عنوان مثال، ما در بخش نیست. آره. STUDENT: از آنجا که شما در حال ارسال نشده است اشاره گر در هر نقطه، شما به نیاز استفاده از malloc؟ JASON HIRSCHHORN: پس این می رود به سوال اولیه خود را. [؟ ؟] آیا این فقط یک متغیر محلی؟ Malloc اینجا این است که قانع کننده نیست. استفاده از malloc در اینجا نیست که قانع کننده به خاطر آن فقط یک متغیر محلی است. STUDENT: بنابراین می توانید انجام دهید کاراکتر PTR ستاره برابر است با سلام؟ JASON HIRSCHHORN: اوه. بنابراین ما در حال حاضر رفتن به عقب بر گردیم به سوال اولیه خود را. من فکر می کنم شما را راضی نمی کند با پاسخ من. OK؟ که می خواهم؟ STUDENT: آره. صبر کنید. JASON HIRSCHHORN: و که در آن آیا می خواهید چاپ کنید؟ بنابراین ما به نسخه قابل چاپ کردن یک رشته که می خواهم؟ STUDENT: جالب. JASON HIRSCHHORN: پس این می گوید این استدلال است که نوع شخصیت. بنابراین این باید یک شخصیت باشد. STUDENT: فقط یکی از اولین طول می کشد. JASON HIRSCHHORN: پس این آن چیزی است که قبل از من گفت. من می خواهم گفت، آن را ذخیره سازی نیست رشته در داخل اشاره گر متغیر است. این ذخیره سازی - STUDENT: مقدار اول از رشته است. JASON HIRSCHHORN: آدرس ارزش اول رشته. اگر قرار بود به نسخه قابل چاپ کردن این، ما هستیم گرفتن مقدار در داخل اشاره گر. و خواهیم دید که در آن است، در واقع، یک آدرس حافظه است. آیا این را حس؟ متأسفم. صبر کنید، به این که پاسخ شما سوال، هر چند؟ STUDENT: آره. JASON HIRSCHHORN: این خط از کد است ایجاد یک رشته و پس از آن دیگر اشاره گر متغیر است که اشاره به این رشته، که آرایه. آره. STUDENT: بنابراین اگر یک حافظه ما رفت رسیدگی به بیشتر، که ما می توانید از ساعت؟ آن را به عنوان یک رشته ذخیره می شود؟ JASON HIRSCHHORN: مانند، ما - بنابراین این ارزش را به انجام می باشد. این حساب نقطه، که شما بچه ها است قبل را دیده اند و باید باشد نسبتا راحت با. این شبیه به نوشتن است - اگر ما برای نوشتن این خط از کد، ما قبل از نماد آرایه ای دیده می شود. این باید ما را دوم را ارزش در این آرایه، ساعت. اگر ما این را انجام داد، باید این را به من بدهید ما ارزش دوم در آرایه. از آنجا که در حال رفتن به حافظه آدرس اولین چیزی، اما آدرس حافظه از چیزی که بیش از. و پس از آن ارجاع میدهد عملگر ستاره که اشاره گر. و دوباره، اجازه دهید را ببینید. ما دوباره در ساعت. STUDENT: دقیقا چه می کند dereference چیست؟ JASON HIRSCHHORN: Dereference یک کلمه فانتزی برای رفتن به است. برو به که و آنچه را وجود دارد است به dereference یک اشاره گر. این فقط یک کلمه برای علاقه داشتن به آن است. STUDENT: اگر ما به چاپ می خواست تمام رشته، می تواند ما انجام اشاره گر علامت؟ JASON HIRSCHHORN: OK، ما رفتن به توقف در اینجا. ما می خواهیم در اینجا به پایان. علامت به شما می دهد آدرس یک محل، تا زمانی که شما باید انجام دهید استفاده از کاراکتر & از یک متغیر، آن را به شما می دهد آدرس که در آن است که متغیر ذخیره شده است. اشاره گر علامت را به شما می دهد آدرس PTR که در آن PTR است در حافظه است. ما قصد داریم به رفتن در با این مثال. شما می توانید چهره ای از این همه چیز را در خود. اما باز هم، این حتی ممکن است verging شود کمی فراتر از آنچه که شما نیاز دارید که برای دانم دامنه این میان مدت - و یا این مسابقه، نه. متأسفم. ما می خواهیم به حرکت در تاریخ، چون من خواهم به انجام یک مشکل برنامه نویسی قبل از زمان است. و ما در حال رفتن به کد چیزی است که من فکر می کنم است که قانع کننده بسیاری از این نمونه، atoi. بنابراین این یک سوال در بود مسابقه دو سال پیش. و من آن را در هیئت مدیره در اینجا. مردم در مسابقه خواسته شد - آنها tesxt کمی بیشتر در داده شد سوال، اما من حذف متن، چون غیر ضروری بود برای اهداف ما در حال حاضر. این فقط برخی از زمینه بود در چه atoi بود. اما همه شما می دانیم و بسیار آشنا با atoi. من پیشنهاد می کنم از این کد در یک ورق کاغذ. من هم به شما پیشنهاد استفاده از استراتژی که ما بیش از رفته بسیاری در بخش ما. اول، مطمئن شوید که شما را در درک چه atoi را انجام می دهند. قرعه کشی یک عکس و یا آمد تا با برخی از تصویر ذهنی از آن را در سر خود را. بعدی، نوشتن شبه دستور العمل برای این. در مسابقه، اگر همه شما است شبه، حداقل شما قرار دادن چیزی است. و پس از آن نقشه که شبه بر روی C. اگر شما یک چک را در خود شبه، مانند چک کنید اگر چیزی است 1، که نقشه ها بر روی اگر شرایط و غیره. و در نهایت، کد برنامه در C. بنابراین بازگشت به atoi و پنج دقیقه کد این در یک ورق مقاله، که احتمالا در مورد مقدار زمان شما می توانید در را مسابقه به atoi کد. پنج تا 15 دقیقه، پنج تا 12، پنج تا 10 دقیقه، در مورد میزان زمانی که شما می خواهم در این صرف سوال در مسابقه. پس از پنج دقیقه طول می کشد در حال حاضر، لطفا. و اگر شما هر گونه سوال، بالا بردن دست خود را و من در اطراف شما می آیند. [CONVERSATIONS SIDE] JASON HIRSCHHORN: OK، بنابراین که پنج دقیقه بود. که احتمالا در مورد مقدار بود زمان شما می خواهم که در آن صرف در مسابقه، شاید در پایان کم از آن زمان. ما در یک بیت روکش. اجازه دهید ما شروع به برنامه نویسی در این. و اگر ما به تمام راه را از طریق می کنید، پاسخ به این و این سوال مسابقه در دسترس هستند، دوباره، پاییز 2011 در زمانی که این سوال است در مسابقه ظاهر شد. و آن را به ارزش هشت امتیاز بود در مسابقه پس از آن. هشت نقطه در پایان بالا از مقدار از نقاط چیزی ارزش است. اکثر سوالات در محدوده از یک تا شش امتیاز. پس این است که بیشتر به چالش کشیدن سوال، برای مطمئن. آیا می توانم کسی به من آغاز شده؟ به طور کلی، آنچه می خواهیم به می خواهید با این تابع atoi، منطقی؟ ما چه می خواهیم کاری انجام دهید؟ بنابراین ما در حال رفتن به ارسال برخی از شبه. STUDENT: تبدیل کاراکتر را به اعداد صحیح. JASON HIRSCHHORN: تبدیل کاراکتر را به اعداد صحیح. OK. پس چگونه بسیاری از شخصیت های ما رفتن به نیاز به از طریق رفتن؟ STUDENT: همه آنها. STUDENT: همه شخصیت ها در رشته. JASON HIRSCHHORN: همه کاراکتر در رشته. بنابراین اگر ما می خواستیم از طریق هر بروید کاراکتر در یک رشته، چه چیزی است در C دیده ایم که اجازه داده است ما را از طریق هر بروید کاراکتر در یک رشته؟ دانش آموزان: برای حلقه. JASON HIRSCHHORN: A برای حلقه. بنابراین ما قصد داریم به حلقه را از طریق هر کاراکتر در ثانیه. پس چه می خواهیم می خواهید انجام دهید هنگامی که ما یک شخصیت خاص؟ می گویند ما در حال تصویب شدن 90. ما باید با 9. این یک شخصیت است. چه ما می خواهیم انجام دهیم با که شخصیت 9؟ STUDENT: تفریق آن را از شخصیت 0؟ STUDENT: اضافه کردن 0؟ JASON HIRSCHHORN: تفریق آن را از شخصیت 0؟ STUDENT: آره. JASON HIRSCHHORN: چرا شما می خواهید به انجام این کار؟ STUDENT: [نامفهوم] ارزش. ارزش بین المللی آن است. JASON HIRSCHHORN: OK، بنابراین ما را به شخصیت 9، آن کم از شخصیت 0 برای دریافت عدد صحیح واقعی 9. شیرین. و چگونه شما می دانید که شخصیت 9 منهای 0 کاراکتر 9 است؟ چه نمودار به شما نگاه؟ STUDENT: منطقا نه وجود دارد مکان های بین 9 و 0. یا شما می توانید در جدول ASCII است. JASON HIRSCHHORN: جدول ASCII. اما بله، شما درست نیز هست. بنابراین ما تفریق 0. بنابراین در حال حاضر ما باید عدد صحیح 9. و ما چه می خواهید با که؟ اگر ما به 90، به عدد صحیح اول است ما، آنچه که ما می خواهیم انجام دهیم؟ STUDENT: من می خواهم در یک عدد صحیح موقت قرار داده آرایه، سپس ریاضی به آن بعد آن را به پایان. JASON HIRSCHHORN: OK. STUDENT: شما می توانید در پایان شروع آرایه و سپس حرکت به جلو تا که هر بار که شما حرکت رو به جلو، شما آن را با 10 ضرب. JASON HIRSCHHORN: OK. به نظر می رسد بسیار ایده فوتی و فوری. ما می توانیم در پایان آرایه های ما شروع، و ما می توانیم strleng استفاده کنید. ما می توانیم strleng در اینجا استفاده کنید. ما طول رشته ما را دریافت کنید. ما در پایان شروع می شود. و + یکی از اولین، ما فقط آن است که عدد صحیح، و شاید ما مانند ایجاد متغیر عدد صحیح جدید تا بالا که در آن ما همه چیز را ذخیره سازی. بنابراین ما از هر کاراکتر در از حلقه از عقب به جلو، ما تفریق 0، و پس ما آن را، و بسته به که در آن است، ما آن را ضرب با قدرت 10. از آنجا که یکی از اولین، چه کار می کنیم ضرب شخصیت سمت راست توسط؟ STUDENT: 10 به 0. JASON HIRSCHHORN: 10 به 0. چه ما دوم ضرب سمت راست ترین کاراکتر های؟ STUDENT: [نامفهوم]. JASON HIRSCHHORN: چه؟ STUDENT: 10 به 1. JASON HIRSCHHORN: 10 به 1. شخصیت سوم سمت راست؟ STUDENT: 10 به 2. JASON HIRSCHHORN: 10 به 2. STUDENT: متاسفم، من نمی فهمم چیزی است که ما در اینجا انجام می دهند. JASON HIRSCHHORN: OK، اجازه بازگشت و پس از آن. بنابراین ما برای به دست آوردن گذشت در یک رشته است. از آنجا که ما در حال نوشتن atoi. بنابراین ما در یک رشته به تصویب رسید. می گویند ما در حال تصویب شدن در رشته 90. اولین چیزی که ما قصد داریم برای انجام تنظیم شده است یک متغیر عدد صحیح جدیدی است که ما فقط رفتن برای ایجاد به عنوان عدد صحیح جدید ما است. این چیزی است که ما قصد داریم به بازگشت در پایان. ما باید از طریق هر شخصیت در به رشته چرا که ما تعیین کرده ایم که ما نیاز به لمس هر یک و سپس آن را به عدد صحیح جدید ما اضافه کنید. اما ما نمی توان آن را به عنوان یک عدد اضافه کنید. ما نمی توانیم فقط 9 را و اضافه کردن 9 به عدد صحیح است. آنچه در محل بستگی دارد آن را در رشته است. ما در حال رفتن به نیاز به چند برابر آن را با قدرت 10. از آنجا که که چگونه 10 آثار پایه. بنابراین ما در حال رفتن به دریافت واقعی شخصیت یا عدد صحیح واقعی تعداد، با کم کردن شخصیت 0 از شخصیت 9 که ما با انجام کم کردن شخصیت سرمایه از هر شخصیت ما در یکی از حال این مشکلات. پس ما در واقع یک شماره را از 0 به 9 به عنوان یک عدد حقیقی را نجات داد، و ما آن را با قدرت 10 بسته به ضرب در جایی که ما در این رشته می باشد. و پس از آن ما قصد داریم به آن اضافه برگشت به متغیر عدد صحیح جدید ما است. پس چه این را می خواهم نگاه شود - ما در اینجا رسم است. اگر ما در رشته 90 گذشت - STUDENT: [نامفهوم]. JASON HIRSCHHORN: اما atoi طول می کشد یک رشته است. بنابراین ما قصد داریم از طریق رفتن برگزاری. ما را در 90 به تصویب رسید. ما را از پشت به جلو بروید. ما را به 0. STUDENT: من متاسفم. شاید این احمقانه است. اگر ما در حال رسیدن به تصویب رسید در یک رشته، چرا 90 چیزی است که ما هستیم گرفتن گذشت در؟ از آنجا که 90 یک عدد صحیح است. JASON HIRSCHHORN: از آنجا که atoi طول می کشد رشته و آن را به عدد صحیح نمایندگی که رشته است. اما رشته 90 است که عدد صحیح نمی 90 یا تعداد 90. رشته 90 مجموعه ای از دو یا است سه حرف، نه، 9 شخصیت، 0 شخصیت، و بک اسلش 0 شخصیت. و ما در حال نوشتن atoi دلیل، برای به عنوان مثال، هنگامی که شما را از دستور خط استدلال، و آن را در ذخیره argv را، آن را به عنوان یک رشته را نجات داد. اما اگر شما می خواهید آن را به عنوان یک عدد، شما نیاز به تبدیل آن به یک عدد صحیح واقعی. که ما یکی از مجموعه مشکل ما. که ما آن را در یک عدد بود از مجموعه مشکل ما. هر کس که در زمان یک عدد صحیح به عنوان آرگومان خط فرمان. به همین دلیل تابع atoi ما یک رشته طول می کشد. بنابراین دوباره، در مثال ما در اینجا، ما هستیم رفتن به یکی از آخرین. ما قصد داریم به تفریق شخصیت 0 از آن، چرا که شخصیت 0 کم های شخصیت 0 به شما می دهد تعداد واقعی 0، با توجه به ریاضی ASCII است که ما انجام می دهیم. از آنجا که شخصیت ها به عنوان نمایندگی متفاوت تر از واقعی خود را - شخصیت، به عنوان مثال، حروف کوچک 97 است. این نه - اوه! این هر آنچه شما انتظار ندارید آن را به، 0، به عنوان مثال. بنابراین شما مجبور به تفریق شخصیت به دریافت 0. بنابراین ما قصد داریم برای انجام این کار در اینجا برای به دست آوردن تعداد واقعی. و پس از آن ما می رویم به آن ضرب قدرت 10 بسته به جایی که آن را به در رشته، و پس از آن که و اضافه کردن آن به دارنده جای ما متغیر بنابراین ما می توانیم آمد تا با عدد صحیح جدیدی نهایی ما. آیا این را حس می کند برای همه؟ بنابراین ما در حال به کد این در حال حاضر، چون ما هستیم گرفتن در زمان کوتاه. من برای زمان بندی که عذرخواهی می کنیم. اما این چیزی است که، امیدوارم، شما را قادر به انجام در مسابقه - در دست کم، این شبه نوشته شده است. و سپس، اگر ما برای نوشتن شبه، در واقع، ما می تواند این کار را انجام بسیار به سرعت. هر خط از نظر ما ما نوشت در اینجا در مورد ترجمه یک خط کد C. اعلان یک متغیر جدید، نوشتن یک حلقه، برخی از تفریق، برخی از ضرب، و برخی از انتساب. ما احتمالا می خواهم همچنین می خواهم ارسال یک خط بازگشت. ما همچنین در صورت تمایل برای قرار دادن برخی از چک در اینجا. آره. STUDENT: بنابراین می توان درمان به عنوان رشته واقعی؟ از آنجا که من می دانم که آن را فقط یک آدرس است. مانند، چگونه می خواهید دریافت که طول رشته در حال عبور از؟ JASON HIRSCHHORN: پس چگونه بود طول یک رشته؟ Strlen. STUDENT: strlen، آره. اما می تواند شما را به عنوان استدلال برای که؟ JASON HIRSCHHORN: پس strlen یک ستاره کاراکتر طول می کشد. و به دنبال آن ستاره کاراکتر، و آن را نگه می دارد شمارش تا زمانی که آن را به یک می شود بک اسلش 0. strlen در واقع یکی از برنامه های دیگر ما رفتن به کد شد. این یکی خوب یکی دیگر از کد است. این یکی کمی آسان تر است، چرا که اگر شما در حال رفتن به در مورد آن فکر می کنم مفهومی - من فقط آن را گفت: با صدای بلند - strlen شرح زیر است یک اشاره گر نگه می دارد و رفتن و شمارش و پیگیری تا شما یک بک اسلش 0 برسد. STUDENT: OK، آن را کردم. JASON HIRSCHHORN: پس بهترین از شانس در مسابقه 0 فردا. اگر شما هر گونه سوال، من خارج بعد از این باشد. در صورت تمایل به من ایمیل. دسترسی به TF خود را اگر شما در بخش من، یا من ایمیل اگر شما آن را می خواهم. اگر می خواهید از دمدمی مزاجی و فقط ارسال برای من ایمیل، یک ایمیل freakout، من شما فرستاد، مثل، صورت خندان، و یا، مانند، یک شوخی یا چیزی. بنابراین احساس رایگان به انجام این کار نیز هست. موفق باشید دوباره، و من تمام هفته آینده را مشاهده می کنید.