[Powered by Google Translate] [هفته 4، ادامه داد] [دیوید J. مالان - دانشگاه هاروارد] [این CS50 است. - CS50.TV] این CS50 است، و این است که در پایان هفته 4. بنابراین برخی از اخبار خوب و اخبار بد. هیچ سخنرانی در تاریخ دوشنبه، هیچ مشکلی را در هفته آینده است. [دانش آموزان تشویق] شما نمی مانند که در آن این است که رفتن. اما ما باید این جای چهارشنبه آینده، نیز وجود دارد در برنامه درسی 1 جمعه سخنرانی جمعه آینده به طوری که ما می توانیم در مسیر باقی بماند. اما همه چیز به طور معمول فیلم برداری شده، بنابراین نگران نباشید. و با توجه به مسابقه 0 چیزی است که ما را نسبت به پایان هفته انجام دهید پست ارسال یک پیام خصوصی به cs50.net البته توضیح از چه نوع انتظارات شما باید هنگامی که آن را به مسابقه اول می آید. به طور کلی، از آن خواهد شد که چند گزینه ای، درست و نادرست، پاسخ کوتاه، کوتاه برنامه نویسی مشکلات است. شما نمی توان انتظار داشت پیاده سازی معادل مشکل این است که شما می توانید بر روی pset را ببینید، برای شما که به یک کامپیوتر دیباگر و مانند آن، اما کوچک برنامه نویسی مشکلات وجود خواهد داشت. و در واقع، بهترین راهنمای برای گرفتن حس چه CS50 آزمونها مانند است به cs50.net، به لینک سوالات بروید، و شما می توانید ببینید که در چند سال گذشته به ارزش آزمونها. فقط که برنامه درسی همواره یکسان نیست در طول سال بوده است تحقق بخشند. گاهی اوقات اضافه می کنیم، گاهی اوقات تفریق، بنابراین اگر برخی از موضوع شما را به یکی از کسانی که قدیمی آزمونها که شما هیچ ایده چه چیزی در آن صحبت کردن در مورد، آن را یا که ما آن را پوشش میدهد یا که ما آن را پوشش نمی دهد. اما در فرم از بررسی، این یکشنبه، دوشنبه، و سه شنبه و همچنین به عنوان یک دوره گسترده جلسه بررسی در شب یکشنبه - زمان و مکان را بر روی صفحه اصلی این دوره اعلام کرد - همه شما باید یک فرصت برای این فایل نقد می نویسید: با همراهان تدریس درس مواد لازم برای این سال، در هر دو بخش و به عنوان یک طبقه کامل، و آن خواهد بود به طور معمول فیلم برداری و همچنین. بسیار خوب. بنابراین بدون ado بیشتر، یک نظر منتقل / شکست و اضافه کردن / رها. شما ممکن است یادداشت های من شب گذشته، و این است که واقعا فقط برخی از اطمینان اضافی که اگر شما در میان کسانی که به ویژه کمتر و راحت و یا جایی در میان و شما فقط یک کمی احساس سر خود، متوجه است که در واقع کاملا نرمال است، و ساختار حمایت کافی در محل وجود دارد، که یکی از آنها قصد ساعات اداری در بهبود هر چه بیشتر در هر شب به ایمیل من آخرین، و تحقق بیش از حد که یک گزینه ای مانند عبور / برای یک کلاس مثل این شکست واقعا به عنوان یک مکانیسم را به لبه یک دوره مثل این به معنای، به طوری که دوباره اگر شما هزینه های 10، 15، 20 ساعت تلاش برای بدست آوردن برخی از pset به کار و شما می دانیم که شما 90-95 درصد از راه وجود دارد اما شما می توانید از برخی از اشکال لعنتی را پیدا کند، در یک پاس / شکست مدل که مرتب سازی بر اساس درست است. ایده این است که با آن مکانیزم بعد از آن شما می تواند به تمرکز در psets دیگر خود را یا خواب و یا هر آنچه در آن است که شما می خواهید به تمرکز بر روی. به طوری که شما تا زمانی که این سه شنبه آینده تحقق - از لحاظ فنی 5 دوشنبه، اما آن یک روز تعطیل است، بنابراین این سه آمدن - به سوئیچ از پاس / خرابی به عکس مدرج و یا معاون است. و اگر شما واقعا در پرتگاه و به فکر انداختن در دسترس نباشد، لطفا من بعد از سخنرانی گرفتن و یا توجه داشته باشید به من رها. ما می خواهم به حداقل چت عشق قبل از اینکه شما پیشنهاد بدرود. بسیار خوب. بنابراین ما شروع به در نظر گرفتن آموزش چرخ کردن زمان گذشته است. به طور خاص، ما در رشته متمرکز شده است. رشته چیزی که در کتابخانه CS50 اعلام شده است، به طور خاص در آن فایل به نام cs50.h که ما شروع به در این هفته و در کنار نگاه کنید. اما رشته است که واقعا فقط یک ساده سازی از چیزی که کمی بیشتر arcanely * کاراکتر است. کاراکتر ما با آن آشنا هستیم. این فقط یک شخصیت واحد است. * روز دوشنبه نشان داده می شود چه؟ >> [دانشجو] یک اشاره گر است. یک اشاره گر است. و یک اشاره گر است؟ >> [دانشجو] آدرس. آن را مانند یک آدرس، یک محل در حافظه است. چه آدرس و یا مکان و یا حافظه؟ باز هم، همه ما لپ تاپ با فرفره یا 2 گیگابایت RAM به احتمال زیاد این روزها، و این بدان معناست که شما باید یک میلیارد یا 2 میلیارد بایت ارزش از حافظه است. و آن را واقعا مهم نیست که چه چیزی آن را از لحاظ جسمی مانند به نظر می رسد، اما در ایمان است که شما می توانید تعداد بایت فردی که لپ تاپ خود را - BYTE 0، این است بایت 1 بایت، این است که 2 میلیارد - و این دقیقا همان چیزی است که یک کامپیوتر می کند. وقتی که شما اختصاص فضا برای یک شخصیت واحد، برای مثال، بدیهی است که برای زندگی در جایی در حافظه کامپیوتر شما، و شاید آن را در شماره 12،345 بایت، و این جایی تا اینجا در حافظه کامپیوتر شما است. و آدرس پس از آن که شخصیت 12345 است. در حال حاضر، در هفته 0، از طریق در حال حاضر تا کنون، ما واقعا نمی مراقبت که در آن همه چیز حافظه ذخیره می شوند از آنجا که ما معمولا استفاده از نمادها، متغیرها، آرایه ها و به واقع در داده های ما دریافت کنید. اما همانطور که از دوشنبه و امروز، شما در حال حاضر رفتن به تمام قابلیت های بیانی بیشتر با برنامه نوشتن واقعا به دستکاری حافظه یک کامپیوتر با این حال شما مناسب است، برای هر دو اهداف خوب و بد، اشکالات نتیجه بسیار معمول است در این مرحله در یادگیری این مسائل است. اما آنچه که آن را واقعا به * کاراکتر چیست؟ بگذارید جلو بروید برگشت به - و ما باید به Binky امروز وعده. بیایید به یک مثال ساده در اینجا. اجازه دهید این فایل را به عنوان compare.c (Save me) مرا نگه دار، و اجازه دهید من فقط در اینجا برخی از کد قالب به طوری که عبارتند از: stdio.h، اجازه دهید من هم خودم را شامل cs50.h. من در بالا وجود دارد زوم. اجازه بدهید شروع به نوشتن بین المللی اصلی، اصلی (خالی)، و در حال حاضر من می خواهم به انجام این کار چیزی شبیه به این: printf ("من یک رشته دهد:") و پس از آن من خواهد شد استفاده از رشته s می شود GetString برای دریافت یک رشته از کاربر، پس از آن من قصد دارم به درخواست کاربر برای یکی دیگر. ("من دیگر رشته دهد:") و من قصد دارم به آنها را از طریق GetString که برای دریافت بپرسید. من آن را T تماس بگیرید چرا که T می آید پس از و یک نام خوب برای یک رشته اگر آن را بسیار عمومی است. بنابراین GetString، و در حال حاضر من فقط می خواهم برای انجام بررسی سلامت عقل و من قصد دارم برای گفتن اگر (S == T) و سپس من فقط رفتن به کاربر printf ("شما همان چیزی که \ N!" تایپ)؛ دیگری من قصد دارم برای چاپ کردن چیزی شبیه به ("شما چیزی تایپ های مختلف! \ N") یا هر چه که باشد حکم خواهد بود. بنابراین چیزی شبیه به آن. سپس طبق معمول، من 0 که فقط معنی که هیچ چیز بدی اتفاق افتاده است بازگشت، و من قصد دارم به جلو بروید و این برنامه را کامپایل و اجرا کنید. اما در روز دوشنبه به فرار این برنامه، و در واقع گفته شد که HELLO HELLO نیست و خداحافظی خداحافظی است. رفتار ما دیدیم کمی بیشتر شبیه این بود. اجازه بدهید من به پوشه منبع من، بزرگنمایی در اینجا، و اجازه دهید را مقایسه. به کوشش درست است. به من اجازه اجرا را با هم مقایسه کنید. من رشته: سلام. من دیگر رشته: سلام. شما تایپ چیزی متفاوت! خوب، اجازه دهید من چیزی ساده تر مانند 50، 50 را امتحان کنید. شما تایپ چیزی متفاوت! سلام، سلام. بنابراین به وضوح، چیزی است که در اینجا. اما چه توضیحی برای اینکه چرا بود؟ ظاهرا، خط 12 کاملا ناکارآمد است. مشکل اساسی در اینجا چه خبر؟ آره. >> [دانشجو] مقایسه آدرس. بله، دقیقا. در واقع در مقایسه با آدرس که در آن سلام و درود ذخیره می شوند. این نامه ها در مقایسه با نه سلام دوباره و دوباره، زیرا آنچه واقعا اتفاق افتاده است، تمام این مدت ما شده ایم با استفاده از GetString - این تخته سیاه است دوباره حافظه کامپیوتر، و اجازه دهید بگویم من اسمش GetString پس از اعلام یک ثانیه متغیر است. خاطره ام چه شکلی است؟ بیایید خودسرانه می گویند که مثل این به نظر می رسد. این یک مربع است. و تقریبا هر زمانی که من کشیده شده است یک تکه از حافظه بر روی صفحه نمایش اگر آن را به 32 بیت من بوده ام رسم مربع شبیه به این چون در واقع در دستگاه، یک اشاره گر، آدرس، 32 بیت است. این همان نوع int است. است که می تواند بر روی سیستم های کامپیوتری متفاوت باشد. کسانی از شما که مبهم آشنا با این حقیقت که مک یا PC خود را 64 بیت، که در واقع بیانگر گزینه ای است که پاسخ دادن که کامپیوتر خود را با استفاده از اشاره گر 64 بیتی، آدرس های 64 بیتی، و در میان upsides که از کامپیوتر شما می باشد RAM بسیار بیشتر از گذشته می تواند داشته باشد. داستان کوتاه مدت، در روز هنگامی که کامپیوتر تنها با استفاده از 32 بیت برای نشان دادن آدرس، بزرگترین تعداد کلمه در ادامه متن، شما می توانید از نمایندگی در آن صورت چه می شود اگر شما دارای 32 بیت؟ SO 4 میلیارد، درست است، چرا که 2 تا از 32 است 4 میلیارد. این تعداد تکرار در این دوره شده است. بنابراین اگر شما فقط 32 بیت، بیشترین تعداد است که شما می توانید به دفعات مشاهده شده است در حدود 4 میلیارد دلار است. اما این محدودیت های اساسی کامپیوترها تا چند سال پیش بود چرا که اگر شما فقط می توانید تعداد دفعات مشاهده به عنوان بالا به 4 میلیارد، مهم نیست که اگر شما خرید 8 گیگابایت RAM و یا حتی 5 گیگابایت RAM؛ شما نمی توانید شمارش، پس از آن بی فایده است. شما تنها می تواند 3 یا 4 گیگابایت از حافظه کامپیوتر شما دسترسی داشته باشند. که کمتر از یک مسئله در حال حاضر، و شما می توانید از مزایا و Dells مک بوک خرید با 8 گیگابایت RAM و یا حتی بیشتر این روزها. اما اگر من اختصاص کاملا به سادگی در این برنامه اشاره گر، یک اشاره گر به نام S، آن ممکن است شبیه این کار را بر روی صفحه نمایش نگاه کنید چون در واقع ما نیاز به پوست این لایه است. من نگه داشتن رشته گفت، اما روز دوشنبه، رشته واقعا کاراکتر * آدرس برخی از شخصیت. بنابراین که چرخ آموزش خاموش اجازه دهید حتی اگر با استفاده از GetString در حال حاضر ادامه خواهیم داد. بنابراین من اعلام S، و این است که یک تکه از حافظه 32 بیت است. آنچه در اینجا در حافظه به طور پیش فرض است؟ >> [پاسخ دانش آموز نامفهوم] که چیست؟ >> [دانشجو] زباله. زباله. >> دقیقا. اگر شما برنامه نویس می توانم در یک مقدار در یک متغیر قرار نیست، چه کسی می داند آنچه در آن است؟ گاهی اوقات شما خوش شانس است و آن را به 0، که، نوع، مقدار پیش فرض پاک و خوب است، اما همانطور که می دیدم دوشنبه، گاهی اوقات آن را مزخرف کامل، برخی از شماره واقعا بزرگ مثبت یا منفی که از جایی که آمد؟ آره. >> [دانشجو] تابع قبل از. >> آره. اغلب تابع است که قبل از اینکه به خاطر به یاد داشته باشید به نام کردم، که با شما تماس توابع در حافظه، آنها را تا فضای بیشتر و بیشتر از پایین به بالا، و به زودی به عنوان گرداند، که حافظه مورد استفاده مجدد قرار می شود پسر بعدی می شود که به نام است که با استفاده از همان برش خود را از حافظه است. و اگر شما زباله سمت چپ وجود دارد، مقادیر قبلی، ما ممکن است به عنوان داشتن برخی از ارزش زمانی که واقعا ما هیچ چیزی قرار نیست وجود دارد اشتباه است. بنابراین RAM خود را در این نقطه به نظر می رسد مثل این. در حال حاضر در سمت راست خط 7 ما تماس GetString، که ایم انجام شده است در حال حاضر برای هفته ها، اما چیزی است که GetString واقعا انجام؟ GetString نوشته شده توسط کارکنان CS50 است کمی هوشمند که در آن به محض آن که کاربر شروع به تایپ کلید و بازدید را وارد کنید، چهره های GetString که چگونه بسیاری از کلید ضربه کاربر که چگونه بسیاری از شخصیت من نیاز به تخصیص حافظه برای. و جایی است که RAM می آید از، که می داند؟ این در جایی در کامپیوتر خود را به 2 گیگابایت یا فلان چیز از حافظه است. اما اجازه دهید فرض کنید که کامپیوتر در بر داشت فضا برای کلمه HELLO حق در اینجا. کلمه ای که تایپ کردید H-E-L-L-O بود. و اگر ما این رسم را به عنوان دنباله ای از کاراکتر ها، ما ممکن است آن را شبیه به این قرعه کشی. اما من نیاز به به 1 چیز اضافی. در پایان از هر رشته در C چه به آن تعلق دارد؟ شخصیت تهی، که ما آن را به عنوان \ 0 ارسال. فنی 0 تعداد، اما اسلش همه روشن تر می سازد این است که به معنای واقعی کلمه، شماره 0، 0 صحیح است؛ به عنوان مثال، نقل قول، نقل قول را تمام 0 است که شما ممکن است در صفحه کلید تایپ، نه. بنابراین این HELLO. و چه ما در تاریخ دوشنبه می گویند که یک تابع مانند GetString است که در واقع بازگشت همه این هفته؟ این رشته در جنوب شرقی بازگشت نمی کند چرا که آن را واقعا به این معنی به دلیل رشته ها وجود ندارد. آنها مرتب سازی بر از ساخت در کتابخانه CS50. آنچه واقعا یک رشته، از لحاظ فنی تر است؟ >> [دانشجو] این شخصیت اول می باشد. دقیقا. این کاملا به سادگی آدرس اولین کاراکتر که کاربر تایپ شوید. بنابراین اگر کلمه من HELLO آن به پایان می رسد تا در 123 بایت تعداد و پس از آن در بایت شماره 124، 125، 126، و غیره، اگر من فقط شماره بایت من از 0 تا، آنچه واقعا GetString بازگشت به معنای واقعی کلمه از 123 شماره است. پس چه می شود در S قرار داده شده است از 123 شماره، حرف H نیست، نه کلمه HELLO کاملا به سادگی آدرس را که در آن من می توانم حرف اول HELLO پیدا کنید. اما این مثل به اندازه کافی به نظر نمی رسد. من شما را برای یک رشته خواسته است، نه یک شخصیت است. پس چگونه ما و یا کامپیوتر می دانم که ELLO نوع همراه با H می آیند؟ مرتب کردن بر اساس توافق ما چه خبر؟ آره. [دانشجوی] آن را نگه می دارد گفتن خود را به پیدا کردن شخصیت های برخی از. >> دقیقا. انسان و کامپیوتر این کنوانسیون که به موجب آن هنگامی که شما در حال خرید و فروش با رشته وجود دارد، در غیر این صورت در حال حاضر به عنوان ستاره کاراکتر شناخته می شود، شما به سادگی باید به شکل که در پایان از هر رشته ای در زندگی است واقعا کمی بیش از آن را با یک حلقه for تکرار، یک حلقه در حالی که، هر چه، به طوری که هنگامی که شما در پیدا کردن انتهای رشته در حال حاضر شما می توانید از آن استنباط، آه، تمام کلمه HELLO بود. کسانی که از شما با تجربه برنامه نویسی قبلی ممکن است در جاوا می دانم شما فقط می توانید تماس بگیرید طول و به زبان های دیگر، شما می توانید طول یا مشابه آن تماس بگیرید. دلیلش این است که در بسیاری از زبانها، به خصوص چیزهای به نام زبانهای شی گرا، طول چیزی نوع در داخل محصور شده از قطعه ای از داده های خود است. خیلی دوست دارم ما محصور شناسه و نام ها و خانه ها در داخل یک دانشجو در روز دوشنبه است. اما C بسیار پایین تر از سطح است. هیچ اشیاء و یا کلاس ها وجود دارد، اگر شما شنیده ام کسانی که شرایط قبل از. همه شما باید در واقع آدرس حافظه است. بنابراین این نوع از راه قدیمی از مد افتاده به نمایندگی از ساختارهای داده ای جالب است. شما باید یک مقدار شروع مانند آدرس اولین کاراکتر و پس از آن فقط به برخی از کنوانسیون های خودسرانه که هر کس موافق است به دنبال. پس چگونه است که طول رشته اجرا می شود، ما پیشنهاد می کنیم؟ Strlen، strlen، که برخی از شما که در حال حاضر از چند بار استفاده شده است. این بسیار ساده است، درست است؟ این مثل 2 خط کد است. این تقریبا یک حلقه برای برخی از مرتب کردن بر اساس، شاید با یک متغیر اضافی محلی. اما strlen فقط به یک اشاره گر و سپس شروع به دنبال \ 0. و به محض این که آن را می یابد، می تواند تعداد کل مراحل است که آن را در این رشته گرفته شده را به شما بر می گردانند. بنابراین ما می توانیم از این استنباط آنچه در آینده می رود. فرض کنید T اعلام من به عنوان من در خط 10 انجام می شود. این برخی از ارزش زباله است. چه کسی می داند در ابتدا؟ اما در سمت راست خط 10 من خواستار GetString دوباره. چه کسی می داند که در آن به پایان می رسد تا؟ بیایید خودسرانه می گویند که سیستم عامل در بر داشت اتاق را برای آن راه در اینجا. من به اتفاق اتفاقی تایپ H-E-L-L-O دوباره، و بنابراین ما می توانیم همان نوع تصویر رسم کنید. اما این واقعیت که من دوباره ترسیم این تصویر این است آگاهانه که به دلیل متفاوت سلام از این یکی است بنابراین در اینجا ممکن است این محل 456، 457 است، و غیره. پس چه می شود که در آن علامت سوال قرار داده بود؟ در این مورد 456. ما در حال چیدن این اعداد خودسرانه چون واقعا بعد از امروز ما قصد داریم به مراقبت بسیار در مورد آنچه که آدرس هر چیزی است. همه ما در مورد مراقبت از این است که ما می توانیم از آدرس برخی از قطعه ای از داده ها مانند HELLO. پس در واقع چیزی است که اکثر مردم در علم کامپیوتر انجام دهید که صحبت کردن در مورد آدرس های حافظه و صحبت کردن در مورد اشاره گر به طور خاص، به جای زحمت بدانند 123 - چه کسی اهمیت میدهد که این مسائل واقع شده است، ما فقط می دانیم که آن را در برخی از آدرس های عددی است - ما ساده و فقط می گویند که اشاره به آن شخصیت و T است که اشاره به آن شخصیت است. و این واقعیت است که آن را به یک پیکان کاملا عمدی است چرا که در حال حاضر به معنای واقعی کلمه است با اشاره به H و T اشاره H زیرا در پایان روز، مهم نیست که چه آدرس، اما نشانی از آن ماده است که در حال حاضر توانایی به بیان است که آدرس را با برخی از قطعه ای از کد. ما واقعا نمی دستکاری این آدرس فقط رتبهدهی نشده است بنابراین خواهیم دید که در آن ما می توانیم نکته و مرتب کردن از چیزهای با اشاره گر، اما در حال حاضر در خط 12 به معنای واقعی کلمه ارزش ما مقایسه با توجه به این داستان در خط 12؟ ما نمی گوییم 123 برابر برابر به 456 است؟ و این که قطعا چنین نیست. و حتی مفهومی، این اشاره گر است که قطعا همین نیست GetString دلیل این که شما به نام دو بار، و GetString می کند سعی نکنید که فوق العاده باهوش، آن را نشانی از سعی کنید به درک، آه، شما تایپ HELLO 5 دقیقه پیش؛ اجازه دهید من به شما همان اشاره گر را به عنوان من به شما داد، فقط اختصاص یک قطعه جدیدی از حافظه هر بار که شما آن را فراخوانی می باشد. پس چگونه می توانم این مشکل را حل کنیم؟ اگر سطح بالاتر، من می خواهم به مقایسه رشته: سلام و خوش آمدید - من در مورد اشاره گر ها اهمیتی نمی - چگونه می توانم در مورد پاسخ به این سوال، کاربر نوع همان چیزی است؟ در اینجا لازم است؟ آره. [دانشجو] با استفاده از یک تابع. >> من می توانم یک تابع استفاده از جعبه. من می توانم با استفاده از یک تابع به نام strcmp، s-t-R-C-M-p تنها نسخه به صورت مختصر گفت رشته مقایسه است. و اگر ما به به، به عنوان مثال، مقایسه 2، است که در میان جزوات امروز، من که دقیقا. من هر چیز دیگری از همان خط 1 را به 26 یا بیشتر نگهداری می شود، و در حال حاضر این بخش فقط کمی تغییر کرده است اطلاع می دهد. اجازه چشم پوشی خط 28 برای یک لحظه و تمرکز تنها بر روی یکی از این. آنچه ما می گویند دوشنبه STR مقایسه می کند؟ این دسته روند خوردن 2 اشاره گر، S و T در این مورد، مرتب سازی بر اساس عملا با قرار دادن انگشت خود را بر روی آن 2 حرف، و آنچه که باید انجام دهید چیزی شبیه به حلقه در حالی که یک یا یک حلقه است، آن را می گوید و این همان است؟ اگر چنین است، انگشتان دست یا اشاره گر رو به جلو حرکت می کند. آیا این همان است، این همان، این، همان این همان است، این همان است؟ و آه، من در پایان از رشته در هر دو و t هستم. من هیچ تناقضی یافت نشد. بله، این رشته ها یکسان است. و چه STR بازگشت اگر 2 رشته ها یکسان مقایسه، ظاهرا؟ صفر. بنابراین 0 است خوب در این مورد است، زیرا اگر آن را برمی گرداند -1 و یا 1، که بدان معنی است که فقط اتفاق می افتد قبل از T بر اساس حروف الفبا و یا بعد از T آمده است. و چرا که مفید باشد به یک تابع است که به شما می گوید که رشته پیش می آید و یا پس از یک فرهنگ لغت؟ [دانشجو] به جستجو میکرد. >> جستجو و مرتب سازی. بنابراین شما می توانید چیزهایی مانند جستجو دودویی یا مرتب سازی بر حباب انجام یا ادغام مرتب سازی بر اساس که در آن شما را به چیزهایی مقایسه است. تا کنون کرده ایم نوع قطع برخی از گوشه و فقط در مورد مرتب سازی صحبت کردیم در زمینه ای از اعداد به این دلیل آن را به خوبی و آسان به صحبت کردن در مورد، اما شما قطعا می توانید رشته ها، سیب و موز مقایسه، چرا که اگر اپل شناخته شده است قبل از موز، به طور مشابه، می توانید رشته ها را به اطراف حرکت در حافظه درست مثل راب با مرتب کردن بر اساس ادغام در این ویدئو و ما در اینجا بر روی صحنه با مرتب کردن بر اساس انتخاب، مرتب کردن بر اساس درج و مرتب سازی بر حباب بود. پس کجا دیگر می تواند ما را؟ بیایید سعی کنید این. مرتب سازی بر بیایید را فراموش کرده ام که درس را برای یک لحظه و سعی کنید در حال حاضر و کپی 1.c به انجام موارد زیر است. در خط 21 من که چیزی گفته باشد چاپ، پس از آن من گرفتن یک رشته از کاربر، سپس من دارم این است. ما را به این عادت واقعا بدست رتبهدهی نشده است، اما اجازه دهید در حال حاضر انجام این کار شده است. اجازه دهید در واقع پوست بازنگری این لایه است. این است که واقعا کاراکتر *. این مرد واقعا کاراکتر *. بنابراین آن چه به چک کردن اگر S == NULL؟ به نظر می رسد که زمانی که شما به یک تابع مانند GetString و یا به طور کلی فقط یک کامپیوتر به شما برخی از حافظه را بپرسید، چیزی ممکن است اشتباه است. شما می توانید دیوانه و از کامپیوتر برای ترابایت حافظه با پرسیدن تریلیون بایت از حافظه است که تنها در کامپیوتر وجود ندارد، اما GetString و دیگر توابع، نیاز به برخی از راه های از فریاد در تو اگر شما بیش از حد خواسته شده است. و راه GetString می کند این است که اگر شما برای حافظه بیشتر پرسیده از در کامپیوتر در دسترس است، حتی اگر این احتمال فوق العاده، فوق العاده کم چرا که هیچ یک از ما در حال رفتن به تایپ یک تریلیون شخصیت ها و پس از آن ضربه را وارد کنید. اما احتمال کم هر چند که ممکن است، من هنوز هم می خواهید به آن را چک کنید فقط در مورد، و ارزش ویژه ای است که GetString، پاسخ، و دیگر توابع را برمی گرداند اگر چیزی را اشتباه رفته است NULL در همه کلاه است. و آنچه NULL؟ NULL فقط تا اتفاقی می افتد به نمایندگی از یک اشاره گر است. 0 آدرس حافظه است. جهان تصمیم گرفته است که خودسرانه، در صورتی که از این حافظه کامپیوتر من - شما می دانید چه؟ - ما قصد داریم به سرقت فقط 1 بایت از حافظه هر کامپیوتر و این محل سکونت 0 است. ما قصد داریم به آن نام مستعار NULL می دهد، و ما در حال رفتن به وعده که ما در واقع هرگز قرار دادن داده های واقعی وجود دارد. چون ما فقط فردی را خودسرانه نیاز به یک مقدار خاص، 0، NULL با نام مستعار، به طوری که ما می توانیم در کاربران داد، اگر چیزی را اشتباه می رود. در غیر این صورت شما ممکن است می دانم که می کند 0 به معنای قرار دادن چیزی در اینجا یا اینکه معنی چیزی را اشتباه رفت؟ ما باید به همه توافق دارند که هیچ چیز معنی NULL برگردانده شد، هیچ نشانی واقعی بازگشته است. در حال حاضر، در اینجا من فقط اتخاذ کنوانسیون انسان من از من بازگشت 1 از اصلی اگر چیزی را اشتباه می رود. دلیلش این است که بازگشت کنوانسیون اصلی است 0 اگر خوب به بازگشت، 1 یا برخی از ارزش های دیگر اگر بد. اما GetString و هر تابعی که معاملات در بازده حافظه NULL اگر چیزی می رود بد است. باشه. بنابراین متاسفانه، خط 27، فوق العاده ساده هر چند از آن است، به طور کامل با شکست مواجه برای کپی کردن رشته است. چرا؟ ما می توانیم این را به عنوان شرح زیر است. من ادعا در خط 27 به ساخت یک کپی از S و خواستار آن T است. بنابراین من کاربر برای 2 رشته در این زمان تقاضا را ندارم، من فقط گفت: ارزش ها باید در T را نیز قرار داده شده است. بنابراین در حال حاضر فقط برای نشان دادن چگونه شکسته این است، در خط 29 به بعد چه کار من؟ اول من دارم اگر طول T بزرگتر از 0 است. در برخی از رشته وجود دارد. کاربر چیزی وارد تایپ خط 32 انجام می دهند، ظاهرا چیست؟ [پاسخ دانش آموز نامفهوم] >> راست. می توانید آن را نوع استنباط از آنچه که من می گفت که آن را انجام می دهند. اما از نظر فنی، این چیزی است که انجام شده است؟ T [0] نشان دهنده چه؟ [دانشجو] شخصیت 0 >> [مالان] شخصیت 0. یا به مانند انسان، اولین شخصیت در T، به هر چه که است، H شاید در این مورد. و toupper چه می گوید. این سرمایه شخصیت 0 T و آن را تغییر. بنابراین این بدان معنی شخصیت 0 از تی، آن را به بزرگ، و آن را که در همان محل است. بنابراین اگر من خوش آمدید در حروف کوچک تایپ کنید، این باید ساعت حروف کوچک به H. پایتخت تغییر اما مشکل این است که در خطوط 35 و 36 آنچه که من در مورد به انجام این کار هستم نسخه قابل چاپ کردن برای ما S و T است. و قوز شما؟ چه هستم من در واقع می خواهم برای دیدن اگر من خوش آمدید در تمام حروف کوچک تایپ؟ چه رفتن به چاپ؟ >> [پاسخ دانش آموز نامفهوم] >> که چه؟ [دانشجوی] H بزرگ و بقیه کوچک است. >> H بزرگ و بقیه کوچک که برای آن، یا T؟ [دانشجو] هر دو. >> هر دو. دقیقا. پس اجازه دهید را ببینید چه خبر است در اینجا. اجازه بدهید من بروم جلو و تدوین این. این copy1، بنابراین copy1 کند. بسیار خوب. بزرگنمایی شوید اجازه دهید من به جلو بروید و آن را اجرا copy1، وارد، چیزی بگو: سلام در حروف کوچک. حروف بزرگ کپی، بلکه آن را ظاهرا با حروف بزرگ اصلی به عنوان، زیرا آنچه در حال حاضر در این داستان اتفاق می افتد؟ در خط 27 من در واقع به نظر می رسد به رشته کپی کردن، اما حتی اگر شما ممکن است به طور مستقیم امید می رود که به صورت، اگر شما در مورد این عکس فکر می کنم، که واقعا چه کرده ام؟ نیمی از تصویر همان است. بنابراین عقب در زمان اجازه دهید به طوری که تی در داستان هنوز رتبهدهی نشده است وجود داشته باشد. S می تواند در داستان وجود داشته باشد، اما اجازه دهید کوچک خوش آمدید این زمان. پس من رو درست چیزی است که من در واقع تایپ شوید. در این مورد در اینجا ما باید H-E-l-l-O. ما می خواهیم آن را به عنوان دنباله ای از کاراکتر ها قرعه کشی، قرار دادن خطوط جدا من و من \ 0. بنابراین این جایی است که ما به عنوان به زودی به عنوان خط 1 را از طریق 24-پذیری، دادن و یا گرفتن، اعدام کرده اند. این تصویر از حافظه من است. هنگامی که من به خط 27، چه اتفاقی می افتد؟ فقط مثل قبل، من یک اشاره گر، که من آن را به عنوان این مربع قرعه کشی. آن را به نام T است. و چیزی که ارزش خود را به طور پیش فرض چیست؟ چه کسی می داند؟ برخی از ارزش زباله. بنابراین من خلاصه اون دور به عنوان یک علامت سوال. و به زودی به عنوان سمت راست خط 27 اجرا، چه هستم من قرار دادن در داخل T؟ همان چیزی که در S است. بنابراین اگر ما برای یک لحظه حذف این انتزاع از فلش و ما می گویند، آه، این حافظه آدرس بار 123 است، زمانی که به شما می گویند T می شود S، نقطه و ویرگول بدین شکل؛ شما به معنای واقعی کلمه قرار دادن 123 اینجا کلیک کنید. حالا اگر ما نوع ساده جهان ما دوباره با تصاویر، آنچه که تو واقعا انجام می شود فقط یک فلش جهان را به خود اضافه شده است که با اشاره از T به رشته یکسان است. بنابراین، هنگامی که در خط 31 و 32 در واقع من در مورد تغییر T [0] آنچه که T [0] ظاهرا در حال حاضر مترادف با؟ [0] به طوری که همه که اتفاق می افتد. و حتی هر چند این نوع احساس کمی کم و محرمانه و این نوع از احساس می کند مانند شاید به طور مستقیم این باید کار می کرد - من کپی از کارهای قبل از ساخته شده و آن را فقط به کار کرده است - اگر شما واقعا در مورد آنچه که یک رشته واقعا فکر می کنم، آن * کاراکتر است. خب، چه است؟ این آدرس برخی از شخصیت است. پس شاید آن را حس می کند که هنگامی که شما سعی می کنید برای انجام کاری فوق العاده ظاهر ساده، مثل این همه شما در حال انجام کپی کردن یک آدرس حافظه است. شما در واقع نه انجام هر چیزی را با خود رشته. بنابراین حتی اگر شما هیچ ایده چگونه شما می توانید حل این مشکل در کد مفهومی، سطح بالا، چه چیزی ما نیاز به انجام به منظور ایجاد TA کپی واقعی از S، ظاهرا؟ آره. >> [دانشجو] آن را به یک محل جدید به من بدهید؟ >> دقیقا. ما باید به یک مکان تجاری جدید. ما باید به نحوی ایجاد یک جهان که در آن ما یک تکه جدیدی از حافظه، که فقط به خاطر وضوح را من درست در زیر این قرعه کشی، اما لازم نیست وجود داشته باشد. اما برای این کار باید به همان اندازه است، بنابراین من از این خط عمودی در همان محل رسم. خوب اگر این است که همه زباله در ابتدا. چه کسی می داند چه بود؟ اما مرحله 1 است به زودی به من به عنوان حافظه زیادی را که من باید به تناسب یک کپی از خوش آمدید، پس از آن شکل چگونه برای کپی کردن ساعت در اینجا، E در اینجا، ل و غیره. اما در حال حاضر باید این احساس کمی واضح است، حتی اگر برخی از جزئیات هنوز مجرد هستند. برای کپی کردن این رشته را به این، آن را فقط یک حلقه یا حلقه و یا چیزی که شما با آن بیشتر آشنا شده ام. بنابراین سعی کنید این اجازه. اجازه دهید من به copy2.c. در copy2.c در حال حاضر تقریبا همان برنامه به جز خط 27. کمی پیچیده به نظر می رسد، اما اگر ما آن را شکستن تکه تکه، سمت چپ همان است. کاراکتر * T ایجاد این چیزی که در حافظه، البته با یک علامت سوال چرا که ما هیچ ایده چه چیزی وجود دارد به طور پیش فرض. در سمت راست ما در حال حاضر معرفی تابع جدید، malloc، برای به حافظه اختصاص دهد، حافظه را، و ظاهرا طول می کشد که چگونه بسیاری از استدلال، چگونه بسیاری از چیزهای داخل پرانتز؟ من شنیده ام زمزمه 1 و 2 است، اما این فقط 1. هیچ کاما از هم وجود دارد، که به معنی فقط 1 چیزی که در داخل پرانتز وجود دارد. گرچه پرانتز دیگر وجود دارد، به من اجازه برجسته آنچه در داخل پرانتز خارجی ترین است، و آن این عبارت است: (strlen () + 1) * sizeof (کاراکتر). بنابراین، اگر ما در واقع فکر می کنم این از طریق، این است که گفت: در طول S را به من بدهید. چرا من، هر چند، و اضافه (1) بر روی طول؟ >> [پاسخ دانش آموز نامفهوم] دقیقا. ما باید فضا را برای این مرد در دم، شخصیت ششم است که هیچ معنی انگلیسی کند، اما معنا و مفهوم خاصی برنامه ریزی شده است. بنابراین ما نیاز به یک + 1 است که به دلیل از strlen بازده انتظار بشر از طول، خوش آمدید یا 5، آن را نشانی از به شما شخصیت تهی اضافی نیست. بنابراین من دستی این کار را با + 1 را اضافه کنید. و پس از این، اندازه * (کاراکتر)، ما را دیده اند، نه قبل از این. این است که از لحاظ فنی یک تابع نیست. این یک کلمه کلیدی خاص که فقط به شما می گوید که چه اندازه از برخی از نوع داده ها بر روی یک کامپیوتر زیرا در واقع، بعضی از ما رایانه های 32 بیتی است. من یک کامپیوتر در خانه خیلی قدیمی است، و آن را تنها با استفاده از 32 بیت برای نشان دادن اشاره گر است. و بنابراین اگر من به اندازه نوع داده، آن را ممکن است 32 بیت. اما اگر من با استفاده از کامپیوتر فانتزی جدید من، من ممکن است یک مقدار از 64 بیت چیزی شبیه به یک آدرس. بنابراین در این مورد، فقط به امن فوق العاده، ما را به چیزی کد سخت مانند رفتن نیست - خب، به اندازه یک کاراکتر با توجه به آنچه که ما انجام داده ایم، گفت: تا کنون چیست؟ ما بسیار گفت شفاهی که آن را به 1 بایت، و این خیلی واقعی در سراسر هیئت مدیره. اما باز هم، مفروضات تمایل به بد. آنها به نرم افزار حشره دار منجر اگر از افراد استفاده از نرم افزار خود را در راه شما قصد. بنابراین انتزاعی اجازه دهید این دور و تنها عام می گویند من نیاز به این تکه های بسیاری از حافظه و هر تکه از حافظه باید به اندازه یک کاراکتر معادل، است که در واقع برابر با 1 در این مورد است، اما این یک راه عمومی تر از نوشتن آن است. بنابراین، در صورتی که کلمه خوش آمدید، که چگونه بسیاری از بایت malloc ظاهرا خوش آمدید اختصاص؟ [دانشجو] شش. >> شش. دقیقا همانطور که بسیاری به عنوان علامت سوال بر روی صفحه نمایش. و سپس یک حدس در حال حاضر بر اساس درک خود را از GetString چه malloc احتمالا بازگشت؟ >> [دانشجو] آدرس. آدرس از چه؟ اولین تکه از حافظه است. در حال حاضر هیچ ایده چه چیزی وجود دارد زیرا برخی از عملکرد های دیگر می توانست با استفاده از این حافظه که قبلا. اما malloc، مانند GetString، آدرس را بر می گرداند از اولین بایت از حافظه است که آن را کنار گذاشته برای شما تنظیم شده است. با این حال، آنچه در آن انجام نمی دهد در این خالی با یک کاراکتر بک اسلش تهی را پر کنید زیرا به نظر می رسد از شما می توانید malloc هر چیزی را به اختصاص استفاده کنید: نوع داده int، رشته ها، آرایه ها، شناور، سازه های دانشجویی. شما می توانید malloc به طور کامل عموما استفاده کنید. این کار اهمیتی نمی دهند و یا باید بدانید که آنچه شما اختصاص حافظه برای. پس از آن خواهد بود مغرور malloc برای قرار دادن 0 \ در پایان هر تکه از حافظه شما را دادن زیرا این \ 0 از چیزهایی است که فقط کنوانسیون رشته است. آن را برای نوع داده int استفاده نمی شود، آن را برای شناور استفاده نمی شود، آن را برای دانش آموزان استفاده می شود. و به این ترتیب مارپیچ با malloc این است که این بار به طور کامل به شما برنامه نویس به یاد داشته باشید که چگونه بسیاری از بایت به شما اختصاص داده شده و نه تا به حال با استفاده از حلقه for و یا یک حلقه و در حالی که به گذشته از مرز تکه از حافظه شما داده شده است. به عبارت دیگر، به محض اینکه شما به حافظه اختصاص دهد. شما می توانید از سیستم عامل بپرسید، آه، به هر حال، چگونه از یک تکه از حافظه بزرگ بود؟ این کاملا به شما به خاطر داشته باشید اگر شما نیاز دارید که ارزش. بنابراین اجازه دهید را ببینید چگونه می توانم اقدام به استفاده از این حافظه است. در خط 28 و 29 چرا من انجام این کار؟ ورود به سلامت عقل کل. فقط در مورد چیزی رفت و اشتباه است، من برای برخی از مقدار دیوانه از حافظه بخواهید یا من بسیاری از چیزها را در حال اجرا بر روی کامپیوتر که فقط حافظه کافی نیست، چیزی شبیه به آن، من حداقل می خواهید برای تهی چک کنید. در واقع، بسیاری از رایانهها، به شما این توهم را که هر برنامه می تواند به طور کامل از RAM شما را استفاده کنید، اما با این حال، در صورتی که کاربر در برخی از رشته طولانی دیوانه شاید به دلیل که آنها یک پسر بد و آنها در واقع تلاش برای سقوط برنامه و یا هک شما را به آن، شما می خواهید به حداقل مقدار بازگشتی از malloc چک و این که آیا آن را برابر تهی است. و اگر چنین شود، اجازه دهید فقط ترک در حال حاضر به خاطر من نمی دانم چه چیزی را در این مورد انجام دهد. چگونه می توانم این رشته من را کپی کنید؟ چند راه برای انجام این کار وجود دارد. خ کپی توابع در C وجود دارد، اما آن را فوق العاده ساده است برای ما برای انجام این کار راه قدیمی از مد افتاده است. اول من کشف کردن آنچه در طول S است. من می توانستم این کار را در حلقه قرار داده است اما جای من فقط آن را از اینجا برای وضوح است. بنابراین N در حال حاضر فروشگاه ها طول رشته اصلی، که ظاهرا 5. سپس در حلقه برای من من تکرار از 0 تا N، و در هر تکرار من قرار دادن [من] در داخل T [من]. بنابراین این چیزی است که من با 2 انگشت اشاره در رشته قبل از بیان است. از آنجا که این حلقه برای تکرار شبیه به این، من قصد دارم به کپی کردن ساعت به اینجا، E به اینجا، L به اینجا به دلیل این ها، این است که T. و پس از آن در نهایت، در خط 35 به همین دلیل من برای انجام این کار؟ من نیاز به مطمئن شوید که من پایان دادن به رشته T. و من را در این راه فوق العاده صریح و روشن است. اما پیشنهاد، کسی، اگر شما می توانید راه های مختلف انجام این کار است. من واقعا نیاز به خط 35. یکی دیگر از راه برای انجام این کار وجود دارد. آره. >> [پاسخ دانش آموز نامفهوم] >> بگو آن را بلندتر است. [دانشجو] کمتر از یا مساوی است. >> دقیقا. ما فقط می تواند کمتر یا مساوی N، که به طور کلی بوده است بد می گویند چون تقریبا همیشه وقتی میریم به یک مساوی به چیزی که ما در حال شمارش ما به 1 مرحله بیش از حد. اما به یاد داشته باشید، که چگونه بسیاری از ما اختصاص بایت؟ ما اختصاص داده strlen ها، تا 5 + 1، از مجموع 6. بنابراین در این مورد ما می تواند چیزی شبیه به این را انجام دهد به طوری که ما در حال کپی کردن نه تنها خوش آمدید 0 \ در پایان بسیار است. روش دیگر، ما می توانیم یک تابع به نام STR نسخه، استفاده از strcpy، اما تقریبا به همان اندازه سرگرم کننده خواهد بود. اما این تمام آن را زیر هود انجام می دهد. سپس در نهایت، ما همان چیزی قبل از. T سرمایه گذاری من و سپس من ادعا می کنند که اصلی به نظر می رسد مثل این و نسخه به نظر می رسد که می خواهم. بنابراین سعی کنید این در حال حاضر. اجازه بدهید در اینجا بروید. را copy2. خواهیم زوم در داخل و اجرا copy2. من قصد دارم به در خوش آمدید تایپ حروف کوچک، و در واقع من کوچک خوش آمدید به عنوان اصلی اما سرمایه خوش آمدید برای کپی. اما من نه تنها هنوز. من نیاز به انجام 1 آخرین چیزی در اینجا. 46 و 47 است که به وضوح آزاد حافظه، اما چه چیزی است که در واقع به معنای؟ چه هستم من انجام می دهند، آیا شما فکر می کنید، از طریق تماس با خط 46 و خط 47؟ چه تأثیری داشت؟ آره. [پاسخ دانش آموز نامفهوم] >> دقیقا. شما فقط گفتن سیستم عامل، با سلام، با تشکر از این حافظه است. شما هم اکنون می توانید آن را برای شخص دیگری استفاده کنید. و در اینجا یک مثال کامل از ارزش های زباله است. من فقط استفاده از این حافظه به نوشتن کلمه سلام در 2 مکان، در اینجا، اینجا، اینجا، و اینجا. بنابراین این H-e-l-l-O-\ 0 است. اما پس از آن من به خط 46 و خط 47، و شما می دانید چه اتفاقی می افتد وجود دارد در تصویر؟ در واقع، صبر کنید، این تصویر یکی از قدیمی است. هنگامی که ما را کپی کنید، این پسر است که در واقع اشاره در اینجا، بنابراین حذف اعداد و فقط انتزاعی دور به عنوان فلش ما دوباره بگذارید. در این تصویر چه اتفاقی می افتد وقتی که من تماس رایگان؟ [پاسخ دانش آموز نامفهوم] >> حتی. اگر من به رایگان در S و T - نوع سوال ترفند - این تصویر تغییر نه در همه به دلیل فراخوانی و خواستار T فقط می گوید که سیستم عامل، با سلام، شما می توانید این حافظه را دوباره استفاده کنید، اما آن تغییر نمی کند این را به تهی و یا برخی از کاراکتر ویژه ای، آن را نشانی از این تغییر نیست، آن را نشانی از H یا الکترونیکی و یا ل ل یا O در هر دو محل را به هر چیز دیگری تغییر نمی کند. در تصویر، به زودی با شما تماس رایگان، هیچ تغییری رخ نمی. و در آن نهفته است منشاء ارزش زباله چرا که اگر من پس از آن بعد از آن در این برنامه درخواست سیستم عامل برای حافظه بیشتر با GetString یا malloc یا چیزی شبیه به این است که و سیستم عامل می گوید، مطمئن، من 12 بایت از حافظه آزاد، با استفاده از این، آنچه می خواهید به دست؟ شما در حال رفتن به دست یک تکه از حافظه است که ما به طور معمول می ترسیم با علامت سوال، چه کسانی هستند علامت سوال؟ آنها اتفاق می افتد به H--l-l-O، H-E-l-l-O. اینها ارزش های زباله جدید ما در اسرع وقت شما که حافظه آزاد است. دلالت دنیای واقعی وجود دارد در اینجا بیش از حد. این اتفاق می افتد با RAM انجام دهید، اما کامپیوتر شما در واقع همین کار را با دیسک انجام دهد. ما می خواهیم در این مورد خاص صحبت با یک مجموعه مشکل در آینده است که بر پزشکی قانونی. اما آنچه در واقع اتفاق می افتد اگر شما برخی از فایل های حساس مالی را بر روی میز کار خود قرار و یا برخی از JPEG ناقص و شما آن را به سطل زباله خود را بکشید، چه اتفاقی می افتد زمانی که شما آن را بکشید به سطل زباله یا سطل بازیافت؟ شما می دانست آنچه که من صحبت کردن در مورد. [خنده] چه اتفاقی می افتد هنگامی که شما که شواهد به سطل بازیافت و یا سطل زباله شما می تواند کشیده شده؟ [پاسخ دانش آموز نامفهوم] خب، پس مراقب باشید. چه اتفاقی می افتد هنگامی که شما انجام این کار؟ پاسخ کوتاه این چیزی است، درست است؟ فایل ناقص یا حساس است هنوز هم تنها نشسته وجود دارد جایی در هارد دیسک شما. بسیاری از ما حداقل آموخته اند راه سخت است که شما نیاز دارید که برای خالی کردن سطل زباله شما یا سطل بازیافت خود را به واقع فایل حذف کنید. و در واقع، زمانی که شما راست کلیک کنید و یا کنترل کلیک بر روی سطل زباله شما می تواند یا فایل، سطل زباله خالی است و یا هر چیز دیگری را انتخاب کنید و شما در واقع خالی کردن سطل زباله می تواند و یا سطل بازیافت، آنچه در واقع اتفاق می افتد و سپس به این تصویر؟ هیچ چیز نیست. بنابراین هیچ چیز در واقع بر روی دیسک اتفاق می افتد. و اگر ما فقط به طور موقت از پرت شدن و نوشتن - I'll فقط پشت این استفاده کنید. بنابراین در حال حاضر داستان از RAM، که جایی است که برنامه وجود دارد در حال تغییر است در حالی که شما آنها را در حال اجرا، بر روی دیسک، که جایی است که در دراز مدت ذخیره می شوند حتی در هنگامی که برق می رود بیرون، در حال حاضر - و ما باید به این در آینده - اجازه دهید این است که این نشان دهنده در داخل دیسک سخت از کامپیوتر شما وانمود چرا که در روز آنها استفاده می شود هارد دایره، بسیار شبیه به فلاپی دیسک. بنابراین اگر شما برخی از فایل اکسل حساس، آن را ممکن است تا این تکه از حافظه بر روی دیسک کامپیوتر شما، و من فقط به رسم خودسرانه و 0s و 1S می شوند. هنگامی که فایل را که می خواهم به شما کشیدن سطل زباله شما می تواند یا سطل آشغال، به معنای واقعی کلمه هیچ چیز اتفاق می افتد چرا که اپل و مایکروسافت به تازگی تصمیم گرفته سطل زباله و سطل بازیافت است که واقعا فقط یک حفره یا سوراخ به طور موقت. شاید در نهایت OS آن را برای شما خالی است، اما به طور معمول، آن را به هیچ کاری انجام نمی، حداقل تا زمانی که شما در فضا بسیار کم است. با این حال، هنگامی که شما را به سطل زباله خالی است و یا خالی سطل بازیافت، به همین ترتیب، هیچ چیز اتفاق می افتد به این تصویر است. همه اتفاق می افتد که در جای دیگر بر روی کامپیوتر شما است، برخی از نوع جدول وجود دارد. این نوعی مانند یک برگه تقلب کوچک است که می گوید که بیایید می گویند، resume.doc، تا رزومه کاری خود را در یک فایل مایکروسافت ورد استفاده می شود در محل 123 بر روی هارد دیسک خود را زندگی می کنند، در حافظه و نه در RAM بر روی هارد دیسک شما، و زندگی JPEG ناقص در 456، و فایل اکسل خود را 789 یا هر کجا که زندگی می کند. هنگامی که فایل را حذف کنید در واقع تخلیه زباله یا سطل بازیافت، این تصویر تغییر نمی کند. و 0s و 1S بر روی هارد دیسک خود را به جایی نمی. اما این جدول، این پایگاه داده های کمی از انواع، تغییر می کند. وقتی که رزومه کاری خود را حذف کنید، آن است که به عنوان اینکه فایل حذف شده در بعضی جهات، اما همه کامپیوتر است که فراموش کرده ام که در آن چیزی که بر روی هارد دیسک خود را زندگی می کند. 0s و 1S که نوشتن رزومه کاری شما و یا هر یک از این فایل های دیگر هنوز هم دست نخورده. بنابراین اگر شما به طور تصادفی، هنوز هم وجود دارد احتمال غیر صفر که شما می توانید اطلاعات خود را با استفاده از نرم افزار نورتون و یا برخی از نرم افزار های تجاری بازیابی هدف آنها در زندگی است و برای پیدا کردن 0s و 1S که مرتب سازی بر اساس یتیم، فراموش شده اینجا اما در اینجا، به طوری که شما می توانید اطلاعات خود را به عقب. یا بازرسان قانونی با پلیس و FBI در واقع یک هارد دیسک و در واقع الگوهای از 0s و 1S که شبیه عکس JPEG، مانند فایل های اکسل، و آنها را که راه را حتی اگر کامپیوتر آنها را فراموش شده را بازیابی کنید. بنابراین تنها راه واقعا به حذف داده ها، همانطور که ما در آینده بحث خواهیم کرد، به درخت یا بوته کوتاه و رشد نکرده و یا پاک کردن فایل ها و یا هارد دیسک - شما واقعا نمی توانید از شر 0s و 1S چرا که در غیر این صورت شما می خواهم با گیگابایت درایو سخت و از شما می خواهم تا پایان با یک درایو سخت مگابایت اگر شما به طور مداوم به حذف، به معنای واقعی کلمه، 0s و 1S. پس چه کار می کنید اگر شما واقعا می خواستند برای پوشش دادن آهنگ خود را و مشکل اساسی این است که هنوز هم وجود دارد 0s و و 1S بر روی دیسک؟ من gesticulating کسی است که شما را از لحاظ جسمی شکستن دستگاه. که کار خواهد کرد. [خنده] اما در صورتی که نوع یک راه حل گران قیمت، چه خواهد بود معقول تر است؟ آره. >> [دانشجو] جاینوشت آنها. >> آنها را با آنچه که رونویسی کنید؟ >> [دانشجو] اطلاعات دیگر. دیگر داده است. شما فقط می توانید هارد دیسک خود را با 0s و 1S یا تمام 0s و تمام 1S بازنویسی. و این در واقع چیزی است که برخی از این نرم افزار می کند. شما می توانید نرم افزار یا خرید حتی دریافت نرم افزار رایگان، و حتی به سیستم عامل مک این روز ساخته شده است، کمتر در ویندوز، توانایی پاک کردن امن است. در واقع، اگر شما را به خانه اجرا می خواهم امروز اگر شما مک و انجام این کار، اگر شما برخی از مسائل در سطل زباله شما می تواند، شما می توانید سطل زباله امن خالی انجام دهید، که می کند که دقیقا همان است. نه از تنها فایل های پاک اینجا، آن را نشانی از اینجا 0s و 1S را پاک کنید، در عوض، آن را فقط به تغییر همه آنها را، برای مثال، به 0s و و نقطه، نقطه، نقطه. بنابراین یکی از psets آینده شما واقع خواهد شد به عمد بازیابی اطلاعات - عکس های که ما از مردم، مکان ها، و همه چیز در محوطه دانشگاه گرفته شده که ما قانونی یک تصویر از کارت حافظه دوربین های دیجیتال، که این ایده همان است - و شما باید به واقع به چالش کشیده شوند. الگوهایی که نشان دهنده عکس JPEG بر روی هارد دیسک شما، بسیار شبیه آن دانش آموز سابق که ایمیل من چند هفته پیش بود که برای بازیابی عکس خواهر خود را. چرا ما را به یک استراحت 5 دقیقه ای در اینجا، و ما را بر روی حافظه دوباره. بنابراین در اینجا است که در آن همه چیز ذهن کمی خم است، اما این یک گام بسیار قدرتمند جهت درک این همه بیشتر است. در اینجا است که یک برنامه ای به نام pointers.c. این میان نمونه کد امروز است. توجه کنید که در چند خط اول، 19 را از طریق 22، همه ما در حال انجام است چیزی شبیه به GetString و بازگشت آدرس، ذخیره سازی و آن را در S است. پس برای pset حتی 3 اگر شما می خواهید، اما pset 4 و که در آن شما می توانید شروع به گرفتن این چرخ آموزش خاموش خود، هیچ دلیلی برای وانمود کنیم که رشته های دیگر وجود دارد وجود دارد. این قطعا درست فقط شروع به گفت * کاراکتر است. تا به کنار، در منابع آنلاین و در کتاب شما اغلب ممکن است ستاره بعدی را به این متغیر را ببینید. شما حتی ممکن است فاصله ای که در اطراف هر دو طرف از آن را ببینید. همه از کسانی که عملکرد صحیح هستند. در حال حاضر، هر چند، ما را در این رویکرد استاندارد را فوق العاده روشن که * کاراکتر ضرب المثل مثل اشاره گر شخصیت. این نوع داده ها است. و سپس نام متغیر است در این مورد. پس ما رو بدست یک رشته است و ما آن را به نام ها. و پس از آن را در اینجا توجه کنید که من انجام می دهند در واقع کمی از حیله گری است. این ریاضی اشاره گر، که مرتب سازی بر اساس ساده فوق العاده نامیده می شود. این فقط به این معنی که اضافه کردن و تفریق اعداد به اشاره گر. اما این در واقع کار می کند. این برنامه ظاهرا S 1 رشته کاراکتر در هر خط هایی که نتیجه نهایی را چاپ - درست به همین دلیل ما می توانیم فاسد که در آن این است که رفتن، اشاره گر را، اجرا اشاره گر، به من اجازه زوم شوید. حالا به من اجازه دهید چیزی شبیه سلام و نوع را وارد کنید و آن را چاپ 1 کاراکتر در هر خط است. تا یک ثانیه قبل، ما را با علامت کروشه مربع انجام می شود. ما یک حلقه داشته باشند و ما می خواهم انجام printf از S [i] و ما می خواهم که دوباره و دوباره و دوباره انجام دهید با N اسلش در انتهای هر خط است. اما این برنامه متفاوت است. این برنامه با استفاده از، به معنای واقعی کلمه، حسابی. پس چه اینجا چه خبره؟ اول از همه، قبل از این حلقه حتی اجرا، چه، فقط برای روشن، در واقع؟ S است؟ >> [دانشجو] آدرس. >> آدرس. و این آدرس، در مورد میهمان گرامی، شخصیت اول در آن کلمه، که در ساعت است. است، در این مثال خاص، آدرس H. پس چه این به معنای به S + من؟ خوب، من از 0 شروع می شود در این حلقه است. بار که بسیاری از ما انجام داده ایم. من در حال رفتن به تا طول رشته، ظاهرا. پس تکرار برای اولین بار از این حلقه، من واضح است که 0 است. بنابراین این عبارت می گوید S + من - نه، S +0- که به وضوح S تنها. پس چه شده است * S؟ در حال حاضر ما در حال استفاده از این ستاره در راه کمی متفاوت است. اجازه بدهید من به جلو بروید و خلاص شدن از تی از آنجا که ما در حال صحبت کردن در مورد T و کپی از S. در حال حاضر ما فقط می خواهم به بیان داستان ها است. و بنابراین در این لحظه، بعد از نوع String است، جهان ما به نظر می رسد کاملا مانند آن قبل از S تنها ذخیره سازی آدرس H و به طور کلی اشاره در رشته خوش آمدید. اگر من در حال حاضر یک خط مانند * (+ من)، اجازه دهید از این را امتحان کنید. بنابراین * (+ من). اجازه دهید این ساده من به خاطر این است 0 است، بنابراین این * (+0) است. خب، یک دقیقه صبر کنید. ساده بیشتر است. این * () است. خوب، در حال حاضر پرانتز نوع احمقانه، بنابراین در حال حاضر فقط * S به شما اجازه می دهد تا. بنابراین در تکرار برای اولین بار از این حلقه، که خط که برجسته شده، 26، تقریبا به چاپ این معادل است. چه نوع داده * S؟ در این زمینه، به این دلیل که ستاره اتفاق می افتد به آینده را به بازدید کنندگان خود، اما به طور خاص تر، از آنجا که ما دیگر اعلام S، ما یک متغیر ایجاد نمی کنه، هیچ اشاره ای به * کاراکتر در خط 26 وجود دارد، هیچ اشاره ای به رشته کلید واژه وجود دارد، ما فقط با استفاده از یک متغیر به نام های، به نظر می رسد در حال حاضر ستاره کمی متفاوت است، و مسلما، معنای گیج کننده است. * اینجا به معنای رفتن به آدرس و چاپ هر آنچه که وجود دارد. است در اینجا، * S - مرتب کردن بر اساس مانند سینی و نردبان، به دنبال فلش - در اینجا. بنابراین این * است. پس چه می شود در اولین تکرار حلقه در خط 26 چاپ شده است؟ من نسخه قابل چاپ کردن٪ C، است که مکان نگه دار برای یک شخصیت، پس از آن یک \ n یک خط جدید است. (+ من) که در آن من است 0 است فقط این است. پس چه کاراکتر می توانم در C٪ قرار داد؟ H. در تکرار بعدی حلقه - احتمالا شما می توانید ببینید که در آن این است که رفتن - تکرار بعد من واضح است که 1 است، بنابراین این بدان معنی است 1، و پس از آن در حال حاضر من می توانم نیاز به پرانتز چرا که در حال حاضر ستاره نیاز به گفتن نیست برو به آدرس حافظه 1. ها چیست؟ اجازه بدهید به عقب در زمان و می گویند این پیکان اکنون در واقع نه انجام با ما هر نعمت است. بیایید بیشتر به طور خاص می گویند که این ذخیره سازی از 123 شماره به دلیل شروع این رشته خوش آمدید، این آدرس 123، این است 124، و غیره. بنابراین در تکرار دوم وقتی که من و گفت ها 1، ضرب المثل مثل 123 1، در غیر این صورت به عنوان 124 شناخته می شود، چه کاراکتر می شود و در تکرار دوم چاپ شده است؟ E در آدرس حافظه 124. سپس + دوباره، 125، 126، 127، و این حلقه خوشبختانه متوقف می شود قبل از ما در اینجا چون من با استفاده از strlen را به مطمئن شوید که من به حساب نمی کند بیش از حد بالا است. به طوری که بیش از حد آن است. باز هم، این است که فقط به عنوان اینکه ما یک هفته پیش انجام داده بود. اجازه بدهید من آن را بنویسید در خط زیر حتی اگر ما نمی خواهیم به هر دو است. این یکسان است در حال حاضر به این. بنابراین حتی اگر است یک رشته، به عنوان ما شده ایم آن را فراخوانی برای هفته، S واقعا * کاراکتر است. بنابراین اگر ما می خواهیم به مقعد فوق العاده، آن را بسیار مناسب برای ارسال نامه های خاص در مکان i ام با استفاده از این آدرس های عددی و این اپراتور ستاره، اما صادقانه بگویم، این بسیار پاک کننده است. پس این است که بد نیست. هیچ دلیلی برای جلوگیری از انجام خط 27 در اینجا، اما 26 عملکرد همان است، و آن را عملکرد همان دقیقا همان دلایلی است که ما در حال بحث در مورد تا کنون. و در نهایت، 29 عمل فقط خوب است. خواستار عاری از S به این معنی است که در حال حاضر شما در حال دادن حافظه است که GetString به شما داد چرا که در دوباره، من به عنوان ذکر شده است دوشنبه، GetString برای هفته ها معرفی یک اشکال شده است را به کد شما. کد های خود استفاده کنید را برای هفته ها تا به حال نشت حافظه به موجب آن شما درخواست شده است GetString برای حافظه است اما شما هرگز آن را دادن. و است که عمدا توسط ما انتخاب شد آموزشی زیرا این فقط در مورد در اوایل فکر می کنم بیش از حد به. اما در حال حاضر ما نیاز به تقارن بیشتر. اگر شما بخواهید از کامپیوتر را برای حافظه، به عنوان مورد GetString، به عنوان مورد ظاهرا برای malloc، شما در حال حاضر باید برای pset 4 به بعد نیز رایگان هر حافظه مانند. توجه داشته باشید که این متفاوت است از گفتن N از نوع int است. شما لازم نیست به این به این دلیل آزاد GetString را صدا نمی زنم و شما malloc را صدا نمی زنم. و حتی اگر شما به نام GetInt همانطور که ما در نهایت خواهید دید، GetInt حافظه برای شما اختصاص دهد، زیرا شما در واقع می توانند در اطراف اعداد صحیح و شناور می شود و کاراکتر تنها راه ما برای هفته ها انجام شده است. رشته ها، هر چند، ویژه هستند زیرا واقعا به آنها الحاق از کاراکتر های مختلف. بنابراین آنها متفاوت از کاراکتر و شناور می شود و نوع داده int است و مانند آن. اما ما آمده است که قبل از بلند. هر گونه سؤال و سپس در این آغاز اشاره گر؟ آره. [سوال دانش آموز نامفهوم] آه، سوال بسیار خوبی است. یکی از چیزهایی که چند C در واقع برای شما انجام می دهد، که مناسب است، آن ارقام را برای شما به چه اندازه از نوع داده و پس از آن می کند که نوع ضرب را برای شما می باشد. این در مورد کاراکتر بی ربط است زیرا تقریبا همیشه یک کاراکتر 1 بایت، بنابراین این فقط کار می کند. اما به خاطر بحث و گفتگو، اگر شما در واقع چاپ اعداد صحیح و شما در تلاش بودند برای چاپ کردن برخی از ارزش است که اشاره به یک عدد صحیح بود، شما به همین ترتیب نیاز به انجام + 4 * من فقط به خاطر اینکه از نوع int است 4 بایت است. ریاضی اشاره گر، این بدان معنی است که C و کامپایلر انجام تمام کارهایی که ریاضی را برای شما می باشد. همه شما باید در مورد مراقبت از شمارش آرا در مرتب کردن بر اساس حس انسان است. آره. [دانشجو] اگر رشته شما اعلام در داخل یک حلقه for، آیا شما را به این برنامه رایگان است؟ خوب سوال. اگر شما در داخل رشته از حلقه اعلام کرد، شما نیاز به این برنامه رایگان! شما فقط نیاز به حافظه آزاد است که شما را با GetString و یا با malloc تخصیص. بنابراین اگر شما فقط می گویند چیزی شبیه - آکولاد قرار داده است من در حال حاضر تا تمام کد مربوط است. اگر شما کاری انجام دادند، البته buggily، مثل این، کاراکتر * T = S، شما نیاز به T آزاد نمی کند چرا که T هیچ اشاره ای به malloc یا GetString درگیر نیست. اگر در مقابل شما انجام این کار، GetString، سپس بله، شما می توانید به T آزاد نیاز دارند. و در واقع، تنها شانس خود را برای انجام این کار در حال حاضر در داخل این حلقه، همان شماره از محدوده که ما در گذشته مورد بحث قرار گرفته است. در غیر این صورت شما می خواهم تخصیص حافظه، تخصیص حافظه، تخصیص حافظه، و در پایان این برنامه به دلیل این که شما در خارج از آن حلقه هستید، T وجود ندارد، اما شما سیستم عامل گفت: هرگز که شما که حافظه نیاز ندارد. و قبل از اینکه طولانی، برای pset 4 یا 5 خواهیم شما را با برنامه ای به نام Valgrind تجهیز، است که در روح GDB که در آن تا حدودی از یک رابط محرمانه کردم، اما هدف خود را در زندگی این است که به شما کمک کند. و Valgrind برنامه ای است که در آینده برنامه های خود را به دنبال نشت حافظه، چه از GetString یا malloc، که ما شروع به استفاده از همه بیشتر به عنوان ما با استفاده از کتابخانه CS50 به همان اندازه را متوقف. ما در نهایت در حال حاضر نوع از واژگان و مرتب سازی بر اساس مدل ذهنی در تئوری که با آن برای حل این برنامه شکسته است. بنابراین در این برنامه شکسته، مبادله با این نسخهها کار در داخل مبادله، اما آن را به در اصلی در واقع هرگز به کار کرده است به دلیل اصلی به تصویب رسید در X و Y، فراخوان، و کسانی که با ارزش های منتقل شده، پس به صحبت می کنند. نسخه از آنها را به مبادله داده شد. پایان مبادله، A و B، در واقع رد و بدل شده است، اما البته x و y، همانطور که ما در روز دوشنبه مورد بحث بود، نشده است. بنابراین من پیشنهاد سبز در اینجا این است که در واقع راه حل در اینجا. و در واقع، اجازه دهید ستاره من حرکت من تنها به سازگار حتی اگر، دوباره، عملکرد این مهم نیست. در هفته های آینده توضیح خواهیم داد که چه وقت و چرا مهم است. بنابراین در سبز در حال حاضر یک راه حل است. صادقانه بگویم، به نظر می رسد تعداد زیادی کل مسیه چون من تمام این ستاره ها. اجازه بدهید یک چیز است. خط بالا که در آن می گوید: اعضای هیات * و int * ب اساسا انجام همان چیزی که آن را به عنوان همیشه. این است که اعلام 2 استدلال یا پارامترهای به مبادله، اولین بار است که یک اشاره گر از نوع int به نام، دوم که یک اشاره گر از نوع int به نام B است. تنها چیزی که در این مرحله جدید، این واقعیت است که یک ستاره وجود دارد. به چه می کند که به معنی؟ بین المللی نیست، B بین المللی نمی باشد. آدرس بین المللی است و B است که آدرس های مختلف بین المللی است. را در اینجا، این است که من اعتراف C می شود گیج کننده است. در حال حاضر ما در حال استفاده از یک ستاره، اما آن را تا به معنی های مختلف در این زمینه است. از آنجا که ما در حال اشاره گر اعلام نمی کند که ما در اینجا، در اینجا ما به همه چیز غیر مرجع. بنابراین از لحاظ فنی، این ستاره را در این زمینه از خط اول، دوم و سوم در داخل مبادله اپراتور dereference، که فقط به معنی رفتن وجود دارد. بنابراین فقط به عنوان انگشت من به دنبال فلش را به ساعت، * یک وسیله به این آدرس بروید و مرا هوشمند است که وجود دارد پیدا کنید. * به معنی B به آدرس بروید و با تصویب من چه چیزی وجود دارد. پس اجازه بازکشیدن تصویر از دوشنبه در حال حاضر با استفاده از یک پشته از قاب ها، یکی از پایین است که برای رفتن به بخش اصلی آمار سایت یکی از بالایی است که برای رفتن به مبادله، به طوری که جهان ما به نظر می رسد، درست مثل دوشنبه، شبیه به این است. در اینجا این است که یک تکه از حافظه است که اصلی است که قصد استفاده از. به یاد بیاورید از دوشنبه که برنامه فقط به حال 2 متغیر، یکی به نام X و یک به نام Y است، و من اعداد 1 و 2 قرار داده شده بود وجود دارد. حالا وقتی که من اسمش مبادله مانند من در روز دوشنبه، قبلا وقتی که من استفاده نسخه قرمز از این برنامه، که به نظر می رسد، مثل این: من 2 پارامتر، A و B، و آنچه ما می نویسیم به اینجا و اینجا؟ فقط 1 و 2، به معنای واقعی کلمه از x و y کپی. امروز که ما تغییر می کند. امروز به جای عبور در نوع داده int A و B ما در حال رفتن به در 2 آدرس منتقل می کند. این آدرس ها رخ می دهد به نقطه را به نوع داده int است، ولی برای کسانی که آدرس خود را به نوع داده int نیست. آنها آدرس. آن را مانند یک آدرس پستی به جای. بنابراین در حال حاضر ما فقط نیاز به جزئیات کمی بیشتر به خودم بر روی صفحه نمایش می دهد. این حافظه کامپیوتر من است به عنوان آن را در تمام طول روز است. در حال حاضر ما نیاز به برخی از طرح های دلخواه شماره. بنابراین اجازه دهید فقط می گویند، فقط با شانس، این است که آدرس حافظه 123، 124. اجازه دهید فقط می گویند این است که 125، 126 است، و غیره، اما کاملا خودسرانه است. ما فقط نیاز به برخی از طرح شماره در حافظه من است. بنابراین در حال حاضر زمانی که من در واقع در X و Y عبور، من قصد ندارم تا در x و y منتقل می کند؛ من قصد دارم به آدرس پستی منتقل می کند، پس به صحبت می کنند، X و Y به طوری که آنچه اینجا می شود ذخیره می شود و در اینجا است 1 و 2، اما اگر شما می توانید متن کوچک من، آنچه می شود در اینجا و اینجا منتقل می شود؟ [پاسخ دانش آموز نامفهوم] >> دقیقا. 123 در اینجا قرار داده می شود و 124 در اینجا قرار داده می شود. در حال حاضر، به خاطر اینکه من ستاره را در این راه خط اول تا اینجا در بالا استفاده می شود، برنامه من فقط می داند که 123 و 124، حتی اگر آنها به وضوح اعداد صحیح که هر انسان می تواند متوجه آنها باید به عنوان آدرس ها، آدرس های عددی تفسیر شده است. آنها در و از خود نوع داده int هستند، آنها به آدرس، و این که چون من به صراحت قرار دادن ستاره وجود دارد. بنابراین در حال حاضر در خط های اول، دوم و سوم من از کد واقعی چه اتفاقی می افتد در اینجا؟ اجازه جلب بقیه عکس. TMP است درست مثل آن را در روز دوشنبه بود. هیچ چیز ویژه ای در مورد TMP. فقط 32 بیت محلی متغیر است، و در داخل که من ظاهرا ذخیره سازی ارزش *. در حال حاضر، اگر من فقط گفت TMP =، آنچه را که من قرار اینجا؟ >> [دانشجو] 123. 123. اما این چیزی است که من انجام نمی دهد. من گفت: TMP = *. به معنای رفتن وجود دارد. بنابراین در اینجا 123. چگونه می توانم به آنجا رفت؟ وانمود کنیم یک فلش وجود دارد. خوب، آن است که وجود دارد، 1. پس چه می شود در TMP ذخیره می شود، ظاهرا؟ فقط 1. بنابراین به عبارت دیگر، TMP است *، * به معنای رفتن به آدرس که در حال حاضر در، است که ظاهرا 123. خوب، در اینجا ما در محل 123، شماره 1، بنابراین من قصد دارم برای قرار دادن شماره 1 وجود دارد. در حال حاضر آنچه را می توانم در خط 2، * = * B؟ این یکی کمی بیشتر درگیر زیرا در حال حاضر چیست؟ این برنامه 123. بنابراین * این است که کجا؟ درست جایی که قبلا بودم. بنابراین وجود دارد بروید. باشه. در حال حاضر، در نهایت، و سپس در نهایت این کار را شروع به ساختن حس، امیدوارم، * ب به معنی آنچه در ب؟ 124. بنابراین من نیاز به رفتن وجود دارد، است که 2. بنابراین چه چیزی من قرار داده که در آن؟ 2 رود به اینجا به دلیل * B می رود به *. بنابراین من انجام دهد. و شما در حال حاضر می تواند، نگاه کنید شاید که ما بسیار نزدیک تر است برای حل این مشکل ساده و احمق، به درستی برای اولین بار چرا که در حال حاضر ما هنوز هم خاطراتی از آنچه ایکس، ما دارای 2 نسخه، مسلما، Y، اما خط 3 در حال حاضر می گوید: * ب. بنابراین در اینجا ب. * ب به معنی به وجود دارد. پس کجاست محل سکونت: 124؟ این ظاهرا در اینجا. بنابراین چه چیزی قرار داده که اینجا هستید؟ بدیهی است، TMP. بنابراین در حال حاضر من این کار را. پس من باید 2 1 در اینجا و اینجا. و در حال حاضر آنچه که در مورد تمام از این، 123، 124، و: از شماره 1؟ به محض به عنوان بازده مبادله، این حافظه به خوبی به عنوان دست داده است زیرا به محض به عنوان بازده مبادله، سیستم عامل برای استفاده از این حافظه در آینده است. فقط حافظه اصلی در پایین این پشته به اصطلاح میله های اطراف. و به این ترتیب ما در نهایت در حال حاضر یک نسخه از کار است. اجازه بدهید من به swap.c، و توجه به موارد زیر است. در بالای این برنامه من تغییر نمونه من به هوشمند * و هوشمند * ب. بنابراین تنها چیزی که من از قرمز، که بد بود، به رنگ سبز، که خوب است، این است که من این ستاره اضافه شده امروز. اما سپس در اینجا در خود مبادله من تا به حال برای کپی کردن، رب چه بود فقط در اسلاید. من یک ستاره در اینجا، ستاره اینجا - که منطبق بر نمونه - و سپس تمام این چیزها در حال حاضر ستاره به جز TMP به دلیل استفاده از یک متغیر موقت، هیچ چیز جدیدی وجود دارد. من فقط نیاز به ذخیره سازی موقت یک int است. بنابراین ما به یک ستاره لازم نیست وجود دارد. ما فقط نیاز به ستاره به طوری که ما می توانیم این نوع از مرز خودسرانه عبور بین این 2 فریم در حافظه کامپیوتر من است. اما یک چیز را تغییر دهید، و شما ممکن است آن را دیدم در حال حاضر است. چه خط دیگر است که به وضوح متفاوت است در حال حاضر؟ >> [دانشجو] و ایکس. آره، بنابراین 25 آخرین خط از کد من باید برای این تغییر به کار است. یک هفته پیش و حتی در روز دوشنبه خط 25 نگاه مثل این، مبادله x و y، و این فقط شکسته شد، زیرا اگر به شما می گویند مبادله (x، y) شما در حال ارائه نسخه های X و Y به مبادله، سپس آن را کار خود را انجام اما شما در واقع هرگز تغییر X و Y خود. بنابراین حتی اگر شما در این شخصیت دیده می شود پیش از این هرگز با علامت در کد، فقط حدس می زنم. چه آن & را داشتند، ظاهرا؟ [دانشجو] طول می کشد آدرس. >> طول می کشد آدرس. بنابراین علامت است گفت: آدرس X را به من بدهید. چه کسی می داند که در آن است؟ آن اتفاق می افتد 123. من اهمیتی نمی دهند. فقط من را به آدرس X. & Y معنی است که آدرس Y را به من بدهید. و در آن نقطه داستان کاملا مطابق با تصویر یک لحظه پیش کشید. بنابراین من اشاره گر، اعتراف قطعا برای من وقتی که من برای اولین بار شروع به یادگیری این، قطعا یکی از سخت ترین کارها برای بسته بندی کردن ذهن من به اطراف. اما درک، به خصوص به عنوان ما در حفظ و بازی کردن با این نوع از همه چیز، اگر شما آن را شکستن به این نوع فوق العاده ساده و بی فکری مشکلات فقط در حال حرکت اعداد در اطراف، پاسخ به بسیاری از سردرگمی با اشاره گرها واقعا می توان از این مکانیک های بسیار اساسی مشتق شده است. در اینجا یک آدرس است. برو با ستاره. یا برعکس، در اینجا یک علامت است. از چه آدرس واقع شده است. بسیار خوب. تا جایی که همه از این حافظه که از؟ ما کشیده شده است این تصویر یک زن و شوهر از بار، و من در حفظ و امیدوار کننده ما باید به آن آمده، اما در اینجا به نمایندگی از حافظه کامپیوتر شما است که کمی بیشتر دارای برچسب از تخته سیاه ما در اینجا می باشد. بخش متن در بالا نشان دهنده چیزی است که با توجه به برنامه های خود را؟ [پاسخ دانش آموز نامفهوم] >> متاسفم؟ بگو دوباره. [دانشجو] برنامه واقعی. >> برنامه واقعی. بنابراین و صدای جرنگ جرنگ 0s و 1S است که شما بعد از نوشتن کد C کامپایل شده و پس از آن در حال اجرا و تولید 0s و به پایان می رسد و 1S تا در حافظه جمع زیرا وقتی شما با دوبار کلیک بر روی آیکون در مک یا PC خود را و یا اجرای یک فرمان مانند ماریو در سریع شما، 0s و 1S خود را از دیسک در حافظه بارگذاری می شود به طوری که کامپیوتر می تواند آنها را دستکاری و آنها را با سرعت بیشتری اجرا. بنابراین مقدار دهی اولیه داده ها و آماده سازی اطلاعات، ما نمی خواهد صحبت در مورد آن، ولی برای کسانی که تنها متغیرهای جهانی است. مقداردهی اولیه به معنی متغیر های جهانی که شما به ارزش ها به؛ مقدار دهی نکردن به معنی متغیر های جهانی که شما هنوز رتبهدهی نشده است دادن مقدار به. سپس این متغیر محیطی است که من کاملا به تکان دست من در وجود دارد، اما آنها هستند و وجود دارد که فروشگاه چیزهایی مانند نام کاربری خود را و نوع دیگر از جزئیات سطح پایین تر. اما juiciest قطعه از قالب قرار گیری حافظه خود را چیزی به نام پشته و پشته است. پشته دوباره روشن می شود، حافظه استفاده می شود که هر زمان که توابع نامیده می شوند، هر زمان که متغیرهای محلی وجود دارد و هر زمان که پارامتر وجود دارد که به تصویب رسید در اطراف. همه از آن اتفاق می افتد در پشته است. پشته ما در مورد صحبت کردیم، اما حدس می زنم که با استفاده از پشته. فقط یک تکه از حافظه است. این اتفاق می افتد به در بالا کشیده شده است، اما این کنوانسیون تصویری خودسرانه است. ظاهرا شده است با استفاده از حافظه را برای هفته ها از پشته؟ این از لحاظ فنی شما اما به طور غیر مستقیم. >> [دانشجو] GetString. GetString و malloc. بنابراین در اینجا تفاوت اساسی است. شما برای چند هفته گذشته می دانند که اگر شما نیاز به حافظه، فقط یک متغیر است. اگر شما نیاز به مقدار زیادی از حافظه، اعلام یک آرایه داخل تابع خود را. اما مشکل ما را نگه داشته ام مواجه است اگر متغیرهای محلی در داخل توابع تعریف، و به زودی به عنوان بازده عملکرد، چه اتفاقی می افتد به حافظه و کسانی که متغیرهای؟ فقط مرتب کردن بر اساس از آن دیگر شما، درست است؟ این تنها مرتب کردن بر اساس مفهومی از بین می رود. این هنوز از نظر جسمی وجود دارد، بدیهی است، اما این دیگر حق خود را به استفاده از. این واضح است که مشکل ساز است اگر شما می خواهید برای نوشتن توابع در زندگی که در واقع حافظه و تخصیص آن را به عقب بلافاصله. در نقطه: هدف GetString در زندگی این است که هیچ ایده را در پیش چگونه بزرگی از یک رشته که من قصد دارم در صفحه کلید تایپ، اما آن را باید به قادر به اختصاص دادن حافظه برای نگهداری دیوید یا سلام یا کل مقاله است که کاربر ممکن است تایپ شوید. بنابراین GetString شده است با استفاده از malloc. Malloc بنابراین باید با استفاده از نه پشته؛ در عوض آن را با استفاده از این چیزی به نام پشته است. هیچ چیز در مورد حافظه متفاوت وجود دارد. این سریعتر یا آهسته تر و یا هر چیزی شبیه به آن است. این فقط از لحاظ فیزیکی در یک مکان متفاوت است. اما قاعده این است که حافظه اختصاص داده شده است که بر روی پشته خواهد شد هرگز به دور از شما گرفته شده تا با شما تماس - حدس - رایگان. در مقابل، هر گونه حافظه شما را بر روی پشته در با اعلام یک آرایه بخواهید و یا اعلام یک متغیر ایم برای هفته ها انجام شده است، که به طور پیش فرض به پایان می رسد تا در پشته. و آنکه کارهای بزرگ 90 درصد از زمان است، اما در موارد نادر آن که در آن شما می خواهید برای تخصیص حافظه و نگه داشتن آن در اطراف، سپس شما نیاز به استفاده از یک تابع مانند malloc. و یا ما استفاده کرده اند یک تابع مانند GetString، که به نوبه خود با استفاده از malloc. بیایید ببینید که این ممکن است بشکند و پایین و پس از آن را زیرچشمی نگاه کردن در Binky. خواهیم آمد به آن در آینده است. در اینجا یک برنامه فوق العاده ساده است که در 2 خط اول چه؟ در زبان انگلیسی، چه چیزی این 2 خط اول از کد را در داخل اصلی؟ [پاسخ دانش آموز نامفهوم] مراقب باشید. این کار به من آدرس X یا Y نیست. [دانشجو] می دهد اشاره گر به نوع داده int است. >> خوب است. من 2 اشاره گرها را به اعداد صحیح است. به عبارت دیگر، 2 تکه از حافظه است که من در حفظ و نقاشی امروز به من بدهد، حتی اگر من آن را پاک در حال حاضر، به عنوان مربع. 2 تکه از حافظه را در اختیار من قرار دهید، یکی به نام X، به نام Y - قبلا من به نام آنها و T - و چه نوع از آن تکه از حافظه چیست؟ رفتن به ذخیره آدرس. این * نوع int است. بنابراین آدرس بین المللی خواهد شد در نهایت در X زندگی می کنند، آدرس بین المللی خواهد شد در نهایت در Y زندگی می کنند، اما در ابتدا، آنچه در داخل X و Y است؟ چه کسی می داند؟ ارزش زباله. این هیچ ربطی به با اشاره گر می باشد. اگر ما چیزی وجود دارد، می داند که آنچه در واقع وجود دارد قرار داده است؟ در حال حاضر، ایکس. در اینجا چه اتفاقی می افتد؟ این حلال است در حال حاضر به دلیل یک اشاره گر است. این * نوع int است. بنابراین این بدان معناست که من می توانم در x قرار دادن آدرس برخی از تکه از حافظه است. malloc چه بازگشت؟ کامل، آن را برمی گرداند آدرس، آدرس بایت اول در یک تکه از حافظه است. چگونه بسیاری از کلمه در ادامه متن می باشد ظاهرا این تخصیص، به عنوان مثال، در دستگاه؟ به اندازه یک int؟ 4. اگر شما فکر می کنم به 1 هفته، فوق العاده مهم نیست که همیشه به یاد داشته باشید که، اما در این مورد آن را مفید می دانید، 4 بایت است. پس این است که تخصیص در 4 بایت heap از و آن را بازگشت به آدرس یکی از اولین به من خودسرانه. در حال حاضر، چه در آن x انجام شده است؟ A * x = 42 در حال انجام چه؟ اگر در این نقطه در داستان x، که به نظر می رسد، مثل این برخی با ارزش زباله، Y این است که در حال حاضر برخی از با ارزش زباله، در حال حاضر در خط 3 به من اختصاص داده 4 بایت است. این تصویر در اصل مثل این به نظر می رسد. یا دقیق تر، در صورتی که این آدرس های دلخواه 123، این همان چیزی است که داستان ما در حال حاضر مانند به نظر می رسد. * x = 42 در حال حاضر یعنی چه؟ این بدان معناست که به 123 آدرس بروید و با قرار دادن شماره 42 وجود دارد. من لازم نیست برای رسم این خطوط از آنجا که ما در حال رشته ها را انجام نمی دهد. من باید فقط آن را شبیه به این نوشته شده است، و فقط برای خاطر تظاهرات، 42 به عنوان یک نوع از نوع int طول می کشد تا مقدار زیادی از فضا، 4 بایت است. به طوری که آنچه اتفاق افتاده، وجود دارد، اما یک مشکل وجود دارد. * Y = 13. چه اتفاق می افتد؟ مشکل این است که Y * در جهان ساده ما فقط به معنای رفتن به آدرس در Y است. چه خبر از Y است؟ برخی از آن ارزش زباله است. بنابراین اجازه دهید فرض کنیم که آن مقدار زباله است 5551212، و این چیزی دیوانه می خواهم که. * به معنی Y برو به آدرس 5،551،212. که می خواهم در اینجا. آن وجود ندارد، به عنوان مثال. بنابراین * Y می شود 13 یعنی من دارم تلاش به منظور جلب 13 در اینجا. آن وجود ندارد. من بیش از حد قطعه از تخته سیاه است. چه چیزی را دریافت کنم؟ که مرموز پیام خطا تقسیم بندی چون من در تلاش برای قرار دادن در حافظه یک مقدار مانند 13 در یک محل که وجود ندارد. بقیه از این برنامه ممکن است کار خوب، اما تا زمانی که آن را نمی کند. بنابراین سعی کنید این مطلب را به بگویید. ما باید آمده است که هنگامی که ما در مورد سحر و جادو صحبت کرده اید. اجازه بازگشت به این نتیجه گیری با این چیزی که به نام Binky، که فراخوان یک استاد دانشگاه استنفورد در خانه نشسته بازی با claymation است، به داستان دقیقا همان است که برنامه های مشابه است. این فقط در حدود 3 دقیقه طول. در اینجا ما باید Binky. [MALE بلندگو بر روی ویدئو] هی Binky، از خواب بیدار می شوید. این زمان برای تفریح ​​و اشاره گر است. [Binky] چه خبر؟ اطلاعات در مورد اشاره گر؟ اوه، مغز گردو و غیره! بلندگو مرد خوب، برای شروع، من حدس می زنم ما در حال رفتن به نیاز به یک اشاره گر زن و شوهر است. [Binky] باشه. این کد اختصاص 2 اشاره گر است که می تواند اشاره به اعداد صحیح است. [مرد سخنران] خوب. خب، می بینم 2 به اشاره گر، اما آنها به نظر نمی رسد با اشاره به هر چیزی. [Binky] درست است. در ابتدا، اشاره گر به هر چیزی نیست. چیزهایی که آنها را به نقطه نامیده می شوند pointees و تنظیم آنها را تا مرحله جداگانه است. [مرد سخنران: اوه، راست، درست است. من می دانستم که. pointees جدا هستند. استروژن، پس چگونه می توانم در یک pointee شما اختصاص؟ [Binky] باشه. این کد اختصاص یک pointee جدید صحیح است، و این بخش مجموعه X به آن اشاره. [مرد سخنران] با سلام، به نظر می رسد که بهتر است. بنابراین کاری آن را. >> [Binky] باشه. من dereference X اشاره گر به ذخیره شماره 42 به pointee آن. برای این ترفند من گرز جادویی من از غیر مرجع نیاز دارید. [مرد سخنران] گرز جادویی خود را از غیر مرجع؟ که بزرگ است. [Binky] این همان چیزی است که کد به نظر می رسد مانند. من فقط تنظیم تعداد و ... [ظاهر صدا] [مرد سخنران] هی نگاه کنید، آن می رود وجود دارد. بنابراین انجام dereference در X فلش به دسترسی به pointee خود را به شرح زیر، در این مورد به ذخیره 42 در آن وجود دارد. با سلام، سعی کنید با استفاده از آن برای ذخیره شماره 13 از طریق اشاره گر دیگر، y است. [Binky] باشه. من فقط بیش از اینجا بروید به Y و شماره 13 راه اندازی و پس از آن عصا را بصورت غیر مرجع و فقط ... [صدای وزوز ایست! [مرد سخنران] اوه هی، که کار نمی کند. بگو، Binky، من فکر نمی کنم غیر مرجع Y است که یک ایده خوب به دلیل راه اندازی pointee مرحله جداگانه است و من فکر نمی کنم ما تا کنون آن را انجام داد. [Binky] HMM، نقطه خوبی است. [مرد سخنران] آره. ما اختصاص داده اشاره گر Y، اما ما آن را هرگز به نقطه را به pointee. [Binky] سلام، بسیار هوشیار است. [مرد سخنران] با سلام، شما به دنبال خوبی وجود دارد، Binky. آیا می توانید آن را تعمیر کنید به طوری که به pointee همان X Y؟ >> [Binky] مطمئنا. من گرز جادویی من از انتساب اشاره گر استفاده کنید. [بلندگو مرد] است که برای رفتن به یک مشکل مثل قبل؟ [Binky] نه، این بدان pointees لمس نیست. این فقط یک اشاره گر به اشاره به همان چیزی که به عنوان یکی دیگر از تغییر. [ظاهر صدا] [مرد سخنران: اوه، می بینم. در حال حاضر نقاط Y به جای X همان. پس صبر کنید. در حال حاضر سالانه ثابت است. این pointee. بنابراین شما می توانید گرز غیر مرجع را دوباره به ارسال بیش از 13 را امتحان کنید. [Binky] آه، درست است. در اینجا می رود. [ظاهر صدا] [مرد سخنران] با سلام، در آن نگاه کنید. در حال حاضر غیر مرجع با این نسخهها کار بر روی Y است. و از آنجا که اشاره گرها به اشتراک گذاری که یکی pointee، هر دو آنها از 13. [Binky] آره، به اشتراک گذاری. هر چیز دیگری. بنابراین می خواهیم به تغییر مکان در حال حاضر؟ [مرد سخنران] آه، نگاه کن، ما از زمان. >> [Binky اما - [سخنران MALE] فقط به یاد داشته باشید 3 قوانین اشاره گر. شماره 1، ساختار اولیه این است که شما باید یک اشاره گر و آن را به pointee. اما اشاره گر و pointee جدا هستند، و خطا رایج است به راه اندازی یک اشاره گر اما فراموش به آن pointee. شماره 2، غیر مرجع اشاره گر در اشاره گر شروع می شود و پس از فلش خود را بیش از به دسترسی به pointee آن. همانطور که همه ما می دانیم، این فقط اگر pointee وجود دارد، که نوع می شود برگشت به رد شماره 1. شماره 3، انتساب اشاره گر طول می کشد یک اشاره گر و تغییرات آن به نقطه را به pointee به عنوان یکی دیگر از اشاره گر. بنابراین پس از انتساب، 2 اشاره گر به همان pointee. گاهی اوقات که به اشتراک گذاری نامیده می شود. و آن همه به آن وجود دارد واقعا. خداحافظ خداحافظی در حال حاضر. Binky. این CS50 است. ما شما را در هفته آینده را ببینید. [تشویق حضار] [CS50.TV]