دیوید مالان: خوش آمدید و خوش آمدید به CS50. بنابراین این پایان هفته چهار است. فقط یک اعلام اول. بنابراین به اصطلاح پنجم دوشنبه است بالا آمدن این دوشنبه آینده. این فرصت برای تغییر است SAT / UNSAT: به نمره، و یا از درجه نامه SAT / UNSAT:. آزاردهنده، این فرآیند نیاز به یک امضا، دلیل این که شما باید برای پر کردن از یکی از کسانی که اضافه / قطره فرم های صورتی. از آنجا که از لحاظ فنی، SAT / UNSAT نسخه و نامه نسخه درجه دارای شماره مجزا کاتولوگ. اما هیچ معامله بزرگ است. فقط می آیند تا به من و یا به راب یا به لورن در هر نقطه. یا به ما ایمیل اگر شما نوع ندارد از کاغذ بازی که شما امروز به آن نیاز است، و ما مطمئن باشید به شما کمک کند را مراقبت از آن قبل از دوشنبه. همه حق است، بنابراین امروز - در واقع، یک بیت از اکو وجود دارد. آیا می توانیم تن من پایین کمی؟ OK را بزنید. بنابراین، امروز، معرفی می کنیم یک موضوع شناخته شده به عنوان اشاره گر. و من قبول دارم که این یکی از موضوعات پیچیده تر است که ما تمایل به پوشش در این کلاس، یا واقعا دوره مقدماتی است که با استفاده از C. اما کلمه من برای آن، به خصوص اگر ذهن خود را احساس می کند کمی بیشتر خم امروز و در هفته می آیند. این نماینده شما گرفتن نیست بدتر در این حالت فقط بدان معناست که این موضوع به ویژه پیچیده که قول می دهم، چند هفته از این رو، به نظر می رسد بیش از حد چشمگیری سر راست در نگاه به گذشته. من هنوز هم به این روز به یاد داشته باشید. من در سالن ناهار خوری الیوت نشسته بود، نشسته در کنار من TF Nishat مهتا، که ساکن خانه الیوت بود. و برای برخی از این دلیل، این موضوع فقط کلیک. که است که می گویند که من خیلی تلاش با آن را برای برخی از مقدار زمان، اما من بهترین من برای کمک به جلوگیری از هر گونه مبارزه با یک موضوع است که در نهایت بسیار قدرتمند است. در واقع، یکی از موضوعات ما را مورد بحث در هفته آمده است این است که امنیت، و چگونه شما می توانید در واقع بهره برداری از ماشین آلات در راه که در نظر گرفته نمی شد. و کسانی که بهره برداری معمولا نتیجه از اشکالات، اشتباهات است که ما مردم با برخی درک نیست را پیاده سازی اساسی جزئیات از طریق آن برنامه ها ساخته شده است. در حال حاضر به نظر می رسد بیشتر کاربر دوستانه، من فکر کردم من می خواهم 10 بازی پیش نمایش دوم یک claymation کوچک شکل به نام Binky که به آورده شد زندگی توسط یکی از دوستان ما در دانشگاه استنفورد، استاد نیک Parlante. پس اجازه دهید تا شما این را تیزر از Binky اینجا. [پخش ویدئو] ، با سلام، Binky. از خواب بیدار. این زمان برای تفریح ​​اشاره گر است. چه خبر؟ اطلاعات در مورد اشاره گر؟ اوه، goodie. [END پخش ویدئو] دیوید مالان است که دانشگاه استنفورد علم کامپیوتر است. بنابراین بیشتر در آمده است. [تشویق حضار] دیوید مالان: با عرض پوزش، نیک. به طوری که آخرین باری که ما در پایان یاد این مطلب یا داستان جالب واقعا هیجان انگیز است به موجب آن این تابع فقط کار نمی کند. حداقل به طور مستقیم آن را احساس مانند آن باید کار کند. نگران نباشید، مبادله ارزش از دو عدد صحیح. اما به یاد می آورند که زمانی که ما چاپ ارزش های اصلی در اصلی، و دو، آنها هنوز هم یک و دو و دو و یک است. پس اجازه دهید من در واقع تغییر دهید را به دستگاه. و نوشتم تا کمی از کد اسکلتی در پیشبرد اینجا، جایی که من ادعا می کنند که x خواهد شد 1، Y خواهد بود 2. من پس از آن نسخه قابل چاپ کردن هر دو خود ارزش با چاپ ج. من پس از آن ادعا می کنند که در اینجا ما قصد داریم به آنها مبادله. من یک نقطه خالی برای ما به سمت چپ پر در امروز در فقط یک لحظه. سپس، من قصد دارم ادعا می کنند که دو متغیر عوض شده است. سپس من قصد دارم برای چاپ آنها را دوباره. و بنابراین امیدوارم، من باید 1 را ببینید 2. 2، 1. که فوق العاده ساده هدف در حال حاضر. پس چگونه ما در مورد مبادله دو متغیر؟ خوب اگر من پیشنهاد می کنم که این فنجان ممکن است نشان دادن حافظه در یک کامپیوتر است. این چند گزش است، این یکی دیگر از چند نیش است. آیا ما می توانستیم یک داوطلب در بالا می آیند و مخلوط ما مقداری نوشیدنی، اگر آشنا؟ بیا بالا. نام شما چیست؟ JESS: جس. دیوید مالان: جس؟ بیا بالا، جس. اگر برای شما مهم نیست، ما باید برای قرار دادن گوگل شیشه ای بر شما بنابراین ما می توانیم جاوید. OK، شیشه. ضبط ویدئو. و خوب، ما خوب هستند با جس اینجا بروید. بسیار خوب. از ملاقات شما خوشبختم. بنابراین آنچه که من می خواهم شما را در اینجا - اگر شما می توانید، کاملا به سرعت - فقط به ما هرچه نصف لیوان پرتقال آب و نصف یک لیوان شیر، نمایندگی موثر اعداد 1 در یک فنجان و 2 در فنجان دیگر. این است که به فیلم خوب است. JESS: با عرض پوزش. مالان دیوید: نه، نه. آن را OK. خوب است. همه حق است، بنابراین ما باید چهار بایت ارزش آب پرتقال. ما آن را به نام ارزش 1. در حال حاضر چهار بایت دیگر به ارزش شیر است. آیا تماس بگیرید آن ارزش قائل 2. پس x و y به دست آمد. همه حق است، بنابراین در حال حاضر اگر کاری که در دست - برای شما، جس، در مقابل از همه از همکلاسی های شما - به مبادله مقادیر x و y از جمله که ما می خواهیم آب پرتقال در دیگر فنجان و شیر در این جام، چگونه ممکن است شما را - قبل از اینکه شما در واقع انجام - در مورد انجام این کار بروید؟ خوب، تصمیم عاقلانه. بنابراین شما نیاز دارید که حافظه کمی بیشتر. بنابراین به طور موقت اختصاص دهید فنجان، اگر شما خواهد شد. و در حال حاضر اقدام به مبادله x و y. بسیار عالی است. بنابراین به خوبی انجام می شود. از شما بسیار سپاسگزارم، جس. بفرمایید. یک سوغات کمی. OK، بنابراین بدیهی است که ایده فوق العاده ساده است. کاملا بصری است که ما نیاز به یک کمی فضای ذخیره سازی بیشتر - در این فرم، یک فنجان - اگر ما در واقع می خواهم به مبادله این دو متغیر است. بنابراین اجازه دهید که دقیقا. تا اینجا در بین جایی که من ادعا می کنند من رفتن به انجام برخی از مبادله، من برو جلو و اعلام دما. و من آن را به، می گویند، X برابر تنظیم کنید. سپس من قصد دارم برای تغییر مقدار * درست مثل جس در اینجا با شیر و آب پرتقال به برابر به y. و من قصد دارم برای تغییر Y برابر نه *، چون در حال حاضر ما خواهد بود گیر در یک دایره، بلکه TEMP. جایی که من به طور موقت - و یا که در آن جس به طور موقت با قرار دادن آب پرتقال قبل از clobbering که جام حذفی را با شیر. بنابراین اجازه دهید من جلو بروید و این. آن را به نام noswap.c. و در حال حاضر اجازه دهید من هیچ مبادله را اجرا کنید. و در واقع من می بینم، اگر من گسترش پنجره یک کمی، که X 1، Y 2 است. و آنگاه x 2، Y 1 است. اما به یاد بیاورید که در روز دوشنبه ما از همه چیز کمی متفاوت به موجب آن من به جای یک تابع کمکی اجرا، اگر شما خواهد شد، که در واقع از درجه اعتبار ساقط است. من نام آن را مبادله. من به آن دو پارامتر، و من به نام آنها و من نام آنها را ب. صادقانه بگویم، من می توانم آنها را x و y تماس بگیرید. هیچ چیز مانع وجود دارد من از انجام این کار. اما من استدلال می کنند سپس کمی مبهم است. از آنجا که فراخوان برای روز دوشنبه که ما ادعا کرد که این پارامترها شامل کپی از مقادیر گذشت. پس از آن فقط messes خود را با ذهن، من فکر می کنم، اگر شما با استفاده از دقیقا همان متغیر. بنابراین من به جای آنها تماس بگیرید و b، فقط برای وضوح. اما ما می توانیم آنها را بیشتر تماس بگیرید هر چیزی که ما می خواهیم. و من قصد دارم به کپی و چسباندن به طور موثر این کد از وجود دارد پایین به اینجا. از آنجا که من فقط دیدم که در آن کار می کند. به طوری که در شکل بسیار خوب است. و من ایکس من، X من را تغییر دهید به، Y من به B و Y من به ب. بنابراین به عبارت دیگر، منطق دقیق همان. همان چیزی که دقیق که جس انجام داد. و سپس یکی از چیزهایی است که من باید انجام دهید تا در اینجا، البته، در حال حاضر این استناد تابع، و یا فراخوانی این تابع. بنابراین من این تابع با دو تماس بگیرید ورودی، X و Y، و ضربه ذخیره کنید. همه حق است، بنابراین اساسا همین. در واقع، من احتمالا ساخته شده است برنامه بی ارزش پیچیده نوشتن یک تابع است که تنها با در نظر گرفتن حدود شش خط از کد را در حالی که من قبلا اجرا شده بود این در تنها سه. پس اجازه دهید من به جلو در حال حاضر و در بازسازی این، هیچ مبادله. همه حق است، من screwed تا اینجا. این باید خطا باشد که شما ممکن است به طور فزاینده ای معمول خود را به عنوان برنامه های پیچیده تر کنید. اما حل ساده وجود دارد. اجازه دهید من حرکت به بالا و در اینجا. و آنچه را که برای اولین بار از خطای من دیدن؟ اعلام ضمنی. چه که به طور معمول نشان می دهد؟ آه، من، نمونه را فراموش کرده ام. من را فراموش کرده برای تدریس به کامپایلر که مبادله رفتن به وجود داشته باشد حتی اگر او در همان ابتدا وجود ندارد از برنامه است. بنابراین من فقط رفتن به می گویند از درجه اعتبار ساقط، مبادله، هوشمند، ب هوشمند، نقطه و ویرگول بدین شکل است. بنابراین من قصد ندارم به آن reimplement. اما در حال حاضر آن را منطبق آنچه که در اینجا. و توجه، عدم وجود یک نقطه و ویرگول در اینجا، است که لازم نیست که پیاده سازی است. بنابراین اجازه دهید من بسازی، بهترین استفاده را مبادله. شکل بسیار بهتر است. اجرای مبادله. و آن را لعنت کند. حالا ما به جایی برگردان که در آن ما در روز دوشنبه، که در آن چیزی مبادله نیست. و آنچه را که توضیح بصری که چرا این طور است؟ آره؟ دانشجو: [نامفهوم]. دیوید مالان: دقیقا. بنابراین a و b کپی از x و y هستند. و در واقع، هر زمان که شما بوده ام فراخوانی یک تابع تا کنون است که عبور متغیر مانند نوع داده int - فقط به عنوان مبادله انتظار در اینجا - شما بچه ها شده اند در نسخه های عبور. در حال حاضر که به معنی آن کمی طول می کشد از زمان، قسمتی از ثانیه، برای کامپیوتر برای کپی کردن بیت از یک متغیر به بیت دیگری. اما این چنین یک معامله بزرگ نیست. اما آنها با این وجود یک کپی. و به همین ترتیب در حال حاضر، در زمینه مبادله، من در واقع با موفقیت تغییر a و b. در واقع، اجازه دهید انجام سریع سلامت عقل را بررسی کنید. نسخه قابل چاپ F٪ من، خط جدید است. و بیایید در پلاگین. حالا اجازه دهید همین کار را با ب. و اجازه دهید همین کار را در اینجا. و در حال حاضر، اجازه دهید من همان خطوط را کپی کنید دوباره در انتهای تابع پس از سه خط من جالب می تواند اعدام کرده اند، و چاپ a و b هنوز دوباره. بنابراین در حال حاضر اجازه دهید این کار، هیچ مبادله. اجازه دهید پنجره ترمینال کمی بلندتر است، به طوری که ما می توانید ببینید بیشتر از آن را در یک بار. و اجرای هیچ مبادله. X 1، Y 2 است. 1، ب 2 است. و پس از آن، 2، ب 1 است. پس از آن کار می کند، درست مثل جس اینجا داخل مبادله. اما البته، آن را بدون داشتن اثر در متغیر در اصلی. بنابراین ما شاهد یک ترفند به موجب آن ما می تواند این را تعمیر کنید، درست است؟ وقتی که شما با این هدف گذاری مواجه موضوع، شما فقط می تواند توپ فوتبال را قبل از تماس با زمین زدن و ایجاد * و y چه نوع متغیر به جای؟ شما می توانید آنها را جهانی کند. آنها را در بالای فایل قرار دهید همانطور که ما حتی در 15 بازی انجام داد،. ما با استفاده از یک متغیر جهانی. اما در زمینه بازی 15، آن را معقول و منطقی به جهانی در متغیر به نمایندگی از هیئت مدیره، به دلیل تمامیت 15.c تمام در مورد اجرای این بازی. این چیزی است که فایل وجود دارد، انجام دهد. اما در این مورد در اینجا، من هستم خواستار مبادله عملکرد. من می خواهم به مبادله دو متغیر است. و آن را باید شروع به احساس فقط درهم و برهم اگر راه حلی برای همه ما مشکلات زمانی که ما را به حوزه اجرا مسائل مربوط به آن را در سطح جهانی است. از آنجا که بسیار به سرعت برنامه های ما است رفتن به تبدیل شدن کاملا ظروف سرباز یا مسافر. و ما این کار را انجام دادیم بسیار صرفهجویی به عنوان یک نتیجه در 15.c. اما معلوم راه بهتری در دسترس نباشد. اجازه دهید من در واقع به عقب برگردید و حذف چاپ F، فقط به ساده این کد. و اجازه دهید به من پیشنهاد که این، در واقع، بد است. اما اگر من به جای آن در برخی از ستاره و ستاره ها، من می توانم به جای این به نوبه خود تابع به یکی که در واقع عملیاتی است. پس اجازه دهید من به عقب برگردید و اعتراف گفت: ستاره همیشه دشوار است، بنابراین من ستاره می گویند. من فقط نم تا که یکی. بسیار خوب. و در حال حاضر، چه هستم من که به جای؟ بنابراین اول از همه، من قصد دارم مشخص که به جای عبور از نوع int به تابع swap، من به جای هستم رفتن به می گویند ستاره نوع int است. در حال حاضر، چه ستاره نشان می دهد؟ این است که مفهوم یک اشاره گر است که Binky، شخصیت claymation، اشاره به یک لحظه قبل در دیتا بیس ثبت شده است. بنابراین اگر ما می گویند ستاره نوع int، به معنی این در حال حاضر این است که قصد ندارم به با ارزش خود را به تصویب رسید. آن را نمی توان کپی شده شوید. در عوض، آدرس یک رفتن به منتقل می شوید. به طوری که در داخل کامپیوتر خود را به یاد یک دسته کامل از حافظه است، در غیر این صورت شناخته شده به عنوان رم. و این رم فقط یک تمام دسته از کلمه در ادامه متن. بنابراین اگر مک شما و یا کامپیوتر خود را دو گیگابایت، شما 2 میلیارد بایت از حافظه است. حالا اجازه دهید فقط فرض کنید که فقط به همه چیز مرتب و منظم نگه دارید، ما اختصاص یک آدرس - تعداد - به هر بایت از حافظه (RAM) در کامپیوتر شما. بایت اول آن 2 میلیارد عدد صفر. بعد شماره بایت، تعداد دو راه در بالا، نقطه نقطه نقطه، به حدود 2 میلیارد. بنابراین شما می توانید تعدادی از کلمه در ادامه متن حافظه در کامپیوتر شما. پس فرض کنیم که این چه ما آدرس متوسط. بنابراین، وقتی می بینم اعضای هیات ستاره، چه خبر است توان به مبادله گذشت است آدرس. ارزش خود را، اما هر پستی را آدرس، پس به صحبت می کنند - محل آن در حافظه. و به همین ترتیب برای ب، من قصد دارم می گویند همین است. INT، ستاره، ب. همانطور که به کنار، از نظر فنی ستاره می تواند در مکان های دیگر بروید. اما ما را در ستاره بودن استاندارد درست در کنار به نوع داده. بنابراین مبادله امضا در حال حاضر به معنی، من را آدرس بین المللی، و تماس که آدرس. و به من آدرس دیگری بدهد int و تماس که آدرس ب. اما در حال حاضر کد من در اینجا باید تغییر کند. از آنجا که اگر اعلام اعضای هیات دما - است که هنوز هم از نوع int - اما من در آن ذخیره، چه نوع ارزش؟ برای روشن، من قرار دادن با کد عنوان در حال حاضر نوشته شده است؟ من قرار دادن در محل. اما من در مورد مهم نیست محل سکونت: در حال حاضر، درست است؟ درجه حرارت فقط فنجان سوم جس وجود دارد وجود داشته است، با چه هدفی؟ برای ذخیره یک مقدار. شیر یا آب پرتقال. به واقع آدرس ذخیره هر یک از آن چیزهایی است که احساس کمی مزخرف در این واقعی بافت کشورهای جهان به هر حال. پس در واقع، آنچه که من می خواهم برای قرار دادن در درجه حرارت آدرس یک، اما نه محتویات یک. بنابراین اگر یک تعداد مثل 123 است، این است 123 بایت از حافظه است که فقط اتفاق می افتد به اشغالگر، که ارزش در یک اتفاق می افتد به اشغالگر. اگر من می خواهم برای رفتن به آن آدرس، من نیاز به گفتن نیست ستاره. به طور مشابه، اگر من به تغییر چه در آدرس را عوض کنم این برای شروع. اگر من می خواهم برای ذخیره در آنچه در محل با آنچه در محل در ب، ستاره ستاره ب. بنابراین در کوتاه مدت، حتی در صورتی که این کاملا غرق شدن در رتبهدهی نشده است - و من انتظار می رود که آن را اینقدر تند و سریع - متوجه است که من انجام پیشوند این ستاره به متغیرهای من، گفت، ارزش گرفتن ندارد. آیا ارزش ها را تغییر دهید. اما نه، به این آدرس بروید و بدست آوردن مقدار. برو به این آدرس و تغییر ارزش وجود دارد. بنابراین در حال حاضر اجازه دهید من رفته تا بالا، فقط به تعمیر این خط در اینجا، به تغییر نمونه برای مطابقت. اما من در حال حاضر نیاز به انجام یک چیز دیگر است. به طور مستقیم، اگر من انواع تغییر داده اید از استدلال که مبادله انتظار، چه چیز دیگری می توانم نیاز به تغییر در کد من؟ وقتی که من مبادله می نامیم. چون در حال حاضر، آنچه که هستم من به عبور به مبادله هنوز؟ ایکس و مقدار Y، یا شیر و آب پرتقال. اما من نمی خواهم به انجام این کار. من به جای می خواهید به تصویب در چه؟ محل x و محل Y. آدرس پستی آنها چه کسانی هستند، پس به صحبت می کنند. بنابراین برای انجام این کار، یک علامت وجود دارد. نوع آمپرسند برای تلفن های موبایل مانند آدرس. بنابراین N، علامت، آدرس * و آدرس Y. پس از آن عمدی که استفاده می کنیم آمپرسندهای کاربردی در هنگام فراخوانی تابع، و ستاره ها در هنگام اعلام و هنگامی که اجرای تابع. و فقط از علامت "فکر می کنم به عنوان آدرس اپراتور، و ستاره به عنوان رفتن اپراتور وجود دارد - یا، به درستی، اپراتور dereference. به طوری که تعداد زیادی از کل کلمات فقط به می گویند که در حال حاضر، امیدوارم، مبادله در حال رفتن تواند درست باشد. اجازه دهید من جلو بروید و مطمئن - اجازه دهید در واقع تغییر نام فایل، مبادا این برنامه هنوز هم می تواند به نام هیچ مبادله. من ادعا می کنند که ما در حال حاضر می خواهید آن را swap.c تماس بگیرید. بنابراین، مبادله. نقطه، بریده بریده، مبادله. و در حال حاضر در واقع، X 1، Y 2 است. و سپس، X 2، Y یکی است. خوب بیایید ببینیم که اگر ما می توانید انجام دهید این است که یک کمی متفاوت به آن چه که در اینجا. اول، اجازه دهید به من زوم در ما طراحی صفحه نمایش در اینجا. و اجازه دهید من برای یک لحظه پیشنهاد - و هر زمان که من در اینجا رسم منعکس خواهد شد تا حال حاضر وجود دارد - اجازه بدهید من پیشنهاد می کنم که در اینجا یک دسته کامل از حافظه، و یا RAM، داخل کامپیوتر من. و این خواهد بود تعداد گزش، اجازه دهید بگویم، 1. این خواهد بود که تعداد بایت 2. و من یک دسته کامل انجام دهد، و سپس یک دسته از نقطه نقطه نقطه نشان می دهد که 2 میلیارد وجود دارد از این چیزها. 4، 5، و غیره. بنابراین پنج بایت اول وجود دارد از حافظه کامپیوتر من. همه درست است؟ تعداد بسیار کمی از 2 میلیارد. اما در حال حاضر من قصد دارم به پیشنهاد شرح زیر است. من قصد دارم به پیشنهاد که x رفتن به ذخیره شماره 1 و y است برای ذخیره تعداد 2. و اجازه دهید من جلو بروید در حال حاضر و این مقادیر به شرح زیر است. بیایید این کار را به شرح زیر است. من فقط یک ثانیه بده. یک دوم. OK را بزنید. من می خواهم این است که یک کمی - اجازه دهید این کار را دوباره. در غیر این صورت من قصد دارم و با استفاده از اعداد همان، غیر عمدی، چند بار. پس فقط بنابراین ما باید شماره های مختلف به بحث در مورد، اجازه دهید این بایت تماس بگیرید شماره 123، 124، 125، 126، و نقطه نقطه نقطه. و اجازه دهید من ادعا می کنند در حال حاضر که من قصد دارم به قرار دادن مقدار 1 در اینجا، و مقدار 2 در اینجا، در غیر این صورت به عنوان x و y شناخته شده است. پس از آن فقط اتفاق می افتد که این X است، این y است. و تنها با برخی از شانس تصادفی، کامپیوتر، سیستم عامل، اتفاق افتاده برای قرار دادن x در محل شماره 123. و Y به پایان رسید تا در مکان 124 - لعنت. من باید ثابت. آه، مرد، آیا من واقعا می خواهم به انجام این کار؟ بله، من می خواهم این مشکل را برطرف و ب در مورد این امروز مناسب. با عرض پوزش، در این. 127، 131، و من می خواهم به این پیچیده است، اما به همین دلیل تغییر من اعداد وجود دارد؟ از آنجا که من می خواهم نوع داده int به در واقع چهار بایت. پس باشد مقعد فوق العاده در این مورد دهید. به طوری که اگر 1 اتفاق می افتد به آنها رسیدگی شود 123، 2 رفتن به آدرس 127 به دلیل آن تنها 4 byes دور. که همه. و ما را در مورد همه را فراموش کرده ام آدرس های دیگر در جهان است. بنابراین X است در محل 123، Y در محل 127. و در حال حاضر، آنچه را می توانم در واقع می خواهم کاری انجام دهید؟ هنگامی که من اسمش مبادله در حال حاضر، چه چیزی در واقع رفتن؟ خوب، وقتی که من مبادله می نامیم، من عبور در آدرس x و آدرس Y. بنابراین برای مثال، اگر این دو قطعه کاغذ در حال حاضر نشان دهنده دو استدلال a و b به مبادله، چه من رفتن به نوشتن اولین بار از این، که من قصد دارم به تماس به عنوان یک مراجعه کنید؟ دقیقا، 123. بنابراین این ادعا است. این پارامتر است. من قرار دادن آدرس * در آن وجود دارد. چه خبر؟ چه خبر؟ نه، نه. OK. هنوز هم خوب است، هنوز هم خوب است. بنابراین این یک. و در حال حاضر در قطعه دوم از مقاله، این است که رفتن به b و چه هستم رفتن به نوشتن این قطعه از کاغذ؟ 127. بنابراین تنها چیزی که از تغییر گفتن قبلی ما از این داستان است، به جای به معنای واقعی کلمه 1 و 2، من رفتن به تصویب در 123 و 127. و من در حال حاضر به رفتن به قرار دادن این داخل از این کادر، همه درست است؟ به طوری که جعبه سیاه در حال حاضر تابع swap. در همین حال، اجازه دهید در حال حاضر کسی پیاده سازی تابع swap. آیا کسی در اینجا خواهید داوطلب شوید؟ بیا بالا. نام شما چیست؟ چارلی. همه حق است، چارلی. بیا بالا. بنابراین چارلی رفتن به بازی نقش جعبه سیاه ما. و چارلی، آنچه من می خواهم شما را به انجام در حال حاضر پیاده سازی مبادله در چنین راهی که، با توجه به این دو آدرس، شما در واقع قرار بود برای تغییر ارزش ها. و من در گوش شما زمزمه چگونه برای اجرای تلویزیون در اینجا. پس پیش بروید و شما جعبه سیاه هستید. رسیدن در آن وجود دارد. چه ارزش شما را برای یک و چه ارزش شما را برای ب بینید؟ چارلی: 123 و ب 127 است. دیوید مالان: خوب، دقیقا. در حال حاضر مکث وجود دارد فقط برای یک لحظه. اولین چیزی که شما در حال رفتن به در حال حاضر، با توجه به کد - که من در حال حاضر می خواهید بکشید تا بر روی صفحه نمایش - رفتن به اختصاص کمی کمی از حافظه به نام دما. بنابراین من قصد دارم به جلو بروید و شما که حافظه را به من بدهید. بنابراین این است برای رفتن به یک متغیر سوم که شما باید در دسترس شما به نام دما. و چه چیزی می خواهید برای نوشتن در درجه حرارت قطعه کاغذ؟ چارلی: اشاره گرها، درست است؟ دیوید مالان: خوب، خوبی نمی لزوما اشاره گر. بنابراین خط از کد که من برجسته در سمت راست، بیایید شروع وجود دارد. این گزارش می گوید ستاره. بنابراین در حال حاضر ذخیره سازی تعداد 123. و فقط به طور مستقیم، چه ستاره 123 معنی؟ اما به طور خاص، اگر یک 123، ستاره یعنی چه؟ ارزش. یا خودمانی تر، وجود دارد. بنابراین اجازه دهید به من پیشنهاد آن، نگه داشتن در دست خود را، جلو بروید و درمان هر چند به عنوان یک نقشه در آن است. و راه رفتن خود را به کامپیوتر حافظه، و ما را پیدا کردن آنچه در محل 123. دقیقا. بنابراین ما در موقعیت 123 را ببینید همان چیزی است که، بدیهی است؟ خوب، پس چه مقدار در حال حاضر شما رفتن به به درجه حرارت قرار داده است؟ دقیقا. پس پیش بروید و انجام این کار. و نوشتن عدد 1 در قطعه مقاله که در حال حاضر به عنوان درجه حرارت. و در حال حاضر گام بعدی است که شما قصد به پیاده سازی رفتن به آنچه. خوب، در سمت راست خط بعدی کد ستاره ب است. ب، البته، فروشگاه آدرس. که آدرس 127. ستاره ب یعنی چه، معمولی صحبت کردن؟ برو به آن مکان. پس پیش بروید و به ما چه در محل 127. OK را بزنید. البته، در محل 127، است هنوز ارزش 2. پس آنچه از شما که در حال حاضر فروشگاه در هر آنچه را در محل؟ بنابراین ستاره به معنای به محل بروید. محل چیست؟ دقیقا. بنابراین در حال حاضر، اگر شما می خواهید به تغییر آنچه در آن محل - من میام جلو و اجرا پاک کن اینجا. و در حال حاضر آن را به عقب بر روی قلم مو. چه تعداد می خواهید برای نوشتن در آن جعبه خالی در حال حاضر؟ دقیقا. بنابراین این خط از کد، به روشن - اجازه من مکث چه انجام چارلی و اشاره در اینجا، آنچه او انجام داده است نوشتن به آن جعبه در محل 123 ارزش که قبلا در ب بود. و بنابراین ما در حال حاضر اجرا کرده ایم در واقع این خط دوم از کد. حالا متاسفانه، وجود دارد هنوز هم یک خط باقی مانده است. آنچه اکنون در درجه حرارت، به معنای واقعی کلمه است؟ این بدیهی است که شماره یک است. این آدرس نیست. این فقط یک شماره است، مرتب از یک متغیر از هفته اول. و در حال حاضر زمانی که به شما می گویند ستاره ب، این بدان معناست که رفتن به آدرس ب، است که از البته در اینجا. بنابراین هنگامی که شما وجود دارد - من میام جلو و پاک کردن آنچه در واقع شما و آنچه وجود دارد - رفتن به نوشتن در حال حاضر در 127 مکان؟ چارلی: دما، که یکی. دیوید مالان: دما، که یکی. و آنچه به دما اتفاق می افتد در پایان؟ خب، ما واقعا نمی دانند. ما واقعا نمی مراقبت. هر زمان ما یک تابع اجرا کرده ام تا کنون، هر متغیر محلی شما در واقع محلی است. و آنها فقط ناپدید می شوند. آنها توسط عامل اصلاح سیستم در نهایت. بنابراین این واقعیت است که درجه حرارت هنوز ارزش 1 مرتب کردن بر اساس اساسا با غیر برای ما. همه حق است، بنابراین دور از تشویق اگر ما می تواند برای چارلی. خیلی خوب انجام می شود. همه حق است، پس چه بیشتر می کند این به این معنی ما می توانیم انجام دهیم؟ بنابراین معلوم است که ما بوده ام گفتن چند دروغ های سفید برای مدتی. در واقع، معلوم است که یک رشته، همه از این زمان است، واقعا نمی دنباله ای از کاراکتر ها فی نفسه. این نوع است که به طور مستقیم. اما از نظر فنی زبان، رشته نوع داده هایی را که ما در داخل اعلام کرد کتابخانه CS50 به ساده جهان برای چند هفته اول کلاس. آدرس یک رشته واقعا شخصیت جایی در رم. رشته واقعا یک عدد باشد، مانند 123 یا 127، است که اتفاق می افتد مشخص که در آن رشته شروع می شود حافظه کامپیوتر شما. اما آن را نمایندگی نمی رشته، فی نفسه، به خودی خود. و ما می توانیم این به شرح زیر است. اجازه دهید من به جلو و باز کردن برخی از کد است که در میان نمونه کد منبع امروز. و من قصد دارم به جلو بروید و باز تا، اجازه دهید بگویم، است مقایسه 0.c. این برنامه حشره دار است که رفتن است به شرح زیر اجرا شود. برای اولین بار. من قصد دارم به چیزی می گویند. سپس من قصد دارم به جلو بروید و دریافت یک رشته از کاربر در آن خط بعدی. سپس من قصد دارم دوباره آن را می گویند. سپس من قصد دارم برای گرفتن یکی دیگر رشته از کاربر. و توجه من نشان دادن یکی از رشته در متغیر نامیده میشود، و یکی دیگر از این رشته در یک متغیر به نام تی. و در حال حاضر من قصد دارم ادعا می کنند، بسیار منطقی است که اگر برابر با معادل T، رشته ها یکسان هستند. شما همان چیزی تایپ کنید. دیگری، رشته ها همین. پس از همه، اگر ما ورودی دو نوع داده int، دو کاراکتر، دو شناور، دو برابر، از هر یک از انواع داده ایم در مورد صحبت تا کنون آنها را مقایسه کنید - به یاد می کنیم در حالی که پیش روشن ساخته شده که شما این کار را نکنید، زیرا یک علامت برابر است البته عملگر انتساب است. به طوری که می تواند یک اشکال است. ما با استفاده از علامت مساوی برابر، که در واقع مقایسه همه چیز برای برابری واقعی. اما من ادعا می کنند این حشره دار است. اگر من به جلو و به آن صفر مقایسه، و سپس نقطه اسلش مقایسه صفر. و من در تایپ، اجازه دهید بگویم، سلام. و سپس اجازه دهید دوباره سلام. به معنای واقعی کلمه همین، کامپیوتر ادعا می کند من چیزهای مختلف تایپ شده است. حالا شاید من فقط mistyped چیزی. من نام من این زمان تایپ کنید. منظور من، سلام. خوش آمدید. هر زمان تنها متفاوت است. خوب، این است که چرا؟ چه چیزی واقعا در رفتن در زیر هود؟ خوب، آنچه که واقعا در رفتن در زیر هود رشته پس از آن است من در آن زمان برای اولین بار عنوان مثال تایپ کلمه سلام، البته. اما اگر ما این نشان دهنده زیر هود، به یاد بیاورید که یک رشته در یک آرایه است. و ما به عنوان های زیادی را در گذشته گفته ام. بنابراین اگر من قرعه کشی که مجموعه ای شبیه به این، من رفتن به نمایندگی چیزی کاملا شبیه به چیزی است که ما یک لحظه پیش بود. و در واقع چیزی وجود دارد که خاص در اینجا، بیش از حد. چیزی که ما تعیین شد در پایان از هر رشته؟ آره، این صفر ممیز معکوس است، که تنها راه نمایندگی، به معنای واقعی کلمه، 00000000. هشت 0 بیت در یک ردیف. من نمی دانم، رک و پوست کنده، آنچه پس از این است. که فقط یک دسته RAM بیشتر در داخل کامپیوتر من. اما این آرایه است. ما در مورد آرایه های قبل صحبت کرد. و ما به طور معمول در مورد آرایه ها صحبت عنوان محل سکونت صفر، پس از آن یکی، پس از آن دو. اما این فقط برای راحتی است. و این کاملا نسبی است. هنگامی که شما در واقع گرفتن حافظه از کامپیوتر، آن را البته هر 2 میلیارد برخی از بایت های عجیب و غریب، به طور بالقوه. پس در واقع در زیر هود، تمام این مدت، بله. این خیلی خوب ممکن است صفر براکت. اما اگر شما حفاری حتی عمیق تر در زیر هود، که واقعا شماره 123. این آدرس 124 است. این آدرس 125 است. و من پیچ تا این زمان. این در حال حاضر یک بایت جدا برای چه دلیلی؟ چقدر بزرگ کاراکتر است؟ کاراکتر یک بایت است. بین المللی است که به طور معمول چهار بایت است. به طوری که به همین دلیل من ساخته شده آن را 123، 127، 131 و غیره. در حال حاضر من می تواند ریاضی را ساده نگه دارید و فقط انجام به علاوه 1. و این در حال حاضر آنچه که واقعا در رفتن در زیر هود. بنابراین، هنگامی که شما چیزی شبیه به این اعلام، رشته ها، این است که در واقع - آن معلوم است - ستاره کاراکتر. ستاره، البته، به معنای آدرس، اشاره گر با نام مستعار. پس از آن آدرس از چیزی است. آنچه در آن است آدرس؟ خوب - من تنها کسی بود که می تواند بسیار هستم نکته مهم من ساخت، و یا فکر می کنم من ساخت. بنابراین رشته - نکته غم انگیز این است من یک مانیتور سمت راست وجود دارد که در آن من می توانست دیده می شود که. همه حق است، بنابراین رشته ها همان چیزی است که من قبلا اعلام کرد. اما معلوم است، به لطف کمی سحر و جادو در کتابخانه CS50، این همه رشته زمان به معنای واقعی کلمه ستاره کاراکتر. ستاره دوباره به معنی اشاره گر یا آدرس. حقیقت آن است که طرفین این کاراکتر کلمه به معنی آن را آدرس یک شخصیت. بنابراین اگر رشته نامیده می شود، و من تایپ در H-E-L-L-O، در حال حاضر پیشنهاد آنچه را که دریافت رشته به معنای واقعی کلمه است بازگشت همه این زمان، حتی اگر ما به جای ام ساده انگاری بیش از حد جهان است؟ چه رشته ای در واقع بازگشت به عنوان مقدار بازگشتی آن؟ 123 در این مورد، به عنوان مثال. ما قبلا گفته ام که رشته به سادگی یک رشته برمی گرداند، دنباله ای از حرف می باشد. اما این یک بیت از یک دروغ سفید است. راه گرفتن رشته واقعا کار می کند در زیر هود از آن می شود رشته از کاربر. این plops کاراکترهایی که او در انواع حافظه. این نهاد یک بک اسلش صفر در پایان کسانی که دنباله ای از کاراکتر ها است. اما پس از آن چه رشته به معنای واقعی کلمه بازگشت؟ این به معنای واقعی کلمه در آدرس باز می گرداند اولین کلمه در ادامه متن در RAM که آن را که برای قدرت استفاده می شود. و معلوم است که تنها با بازگشت یک آدرس اولین حرف رشته است، که برای یافتن تمامیت کافی است رشته. به عبارت دیگر، رشته اختصاص ندارد برای بازگشت 123 و 124 و 125. ندارد به من طولانی لیستی از همه از کلمه در ادامه متن که رشته من استفاده کرده است. به خاطر یکی، همه آنها بازگشت به عقب هستیم. و دو، در آدرس اول، من توانند بفهمند که در آن رشته به پایان می رسد. چگونه؟ شخصیت تهی خاص، بک اسلش صفر در پایان. بنابراین به عبارت دیگر، اگر شما در اطراف عبور - داخل متغیر - آدرس یک کاراکتر، و شما فرض که در پایان از هر رشته، هر دنباله ای از شخصیت ما را به عنوان انسان فکر می کنم از رشته ها، اگر فرض کنیم که در پایان از هر رشته هایی وجود دارد صفر بک اسلش، شما طلایی رنگ هستید. از آنجا که شما همیشه می توانید پیدا کنید پایان یک رشته. در حال حاضر آنچه واقعا سپس رفتن در این برنامه؟ چرا این برنامه است، به مقایسه 0.c، نوعی درشکه سبک یک اسبه؟ آنچه که در واقع در مقایسه با؟ آره؟ دانشجو: [نامفهوم]. دیوید مالان: دقیقا. این مقایسه مکان رشته. بنابراین در صورتی که کاربر در تایپ سلام یک بار، به عنوان من، حافظه ممکن است در نهایت به دنبال این را دوست دارند. اگر پس از آن کاربر نوع در سلام دوباره، اما با فراخوانی رشته دوباره، ج به خصوص هوشمندانه نیست مگر اینکه شما یاد می دهد آن را به صورت هوشمندانه با نوشتن کد. C - و به طور کلی کامپیوترهای - اگر شما در تایپ کلمه سلام دوباره، شما می دانید آنچه شما قصد دریافت. شما فقط رفتن به یک آرایه دوم از حافظه که، بله، اتفاق می افتد ذخیره سازی H-E-L-L-O و غیره. آن را به نگاه همان ما انسان ها، اما این آدرس ممکن است 123. آن را فقط ممکن است اتفاق می افتد که سیستم عامل تا به برخی از دسترس است فضا برای نمونه در محل - اجازه دهید چیزی دلخواه می گویند، مثل این محل 200 است. و این محل 201 است. و این محل 202 است. ما هیچ ایده که در آن است که در رفتن به در حافظه می شود. اما این بدان معنی است که آنچه که رفتن به نهایت ذخیره شده؟ تعداد 123. چه خبر است در تی شود ذخیره می شود، در این مثال دلخواه؟ تعداد 200. و این بدان معناست که پس از آن است که، 123 برابر 200 نیست. و بنابراین این شرط هرگز ارزیابی درست. از آنجا که رشته GET های مختلف با استفاده از تکه های حافظه در هر زمان. در حال حاضر ما می توانیم این را دوباره ببینم در یک مثال دیگر. اجازه دهید من به جلو و باز کردن کپی 0.c. من ادعا می کنند که در این مثال در حال رفتن به امتحان کنید - اما شکست - برای کپی دو رشته به شرح زیر است. من قصد دارم به چیزی می گویند به کاربر. من پس از رفتن به رشته و آن. و در حال حاضر، من در انجام این چک در اینجا. ما با اشاره به این حالی که به عقب. اما زمانی که ممکن است به رشته تهی بازگشت، یکی دیگر از شخصیت خاص، و یا ویژه نماد بیایید می گویند. اگر آن را از حافظه. به عنوان مثال، اگر کاربر واقعا بودن دشوار و انواع بی رحم است تعدادی از شخصیت های در صفحه کلید و بازدیدها را وارد کنید. در صورتی که تعدادی از شخصیت نه تنها می تواند مناسب در RAM برای هر دیوانه دلیل، به خوبی رشته ممکن است به خوبی بازگشت به تهی. یا اگر برنامه خود را به خودی خود انجام بسیاری از چیزهای دیگر و فقط وجود دارد حافظه به اندازه کافی برای رشته GET برای موفقیت، این ممکن است در نهایت تا بازگشت به تهی. اما اجازه دهید در این مورد دقیق تر به این چیست. ها نوع داده ها چیست واقعا؟ ستاره چار. پس از آن معلوم است، در حال حاضر ما می توانید پوست لایه تهی عقب. معلوم است، تهی است - بله، بدیهی است یک نماد خاص است. اما آنچه در آن است واقعا؟ واقعا، تهی فقط یک نماد است که ما انسان با استفاده از به نمایندگی از صفر و همچنین. بنابراین نویسندگان C، و کامپیوتر به طور کلی، تصمیم گرفت سال پیش که، می دانید چه. چرا ما اطمینان حاصل شود که هیچ کاربر داده است تا کنون، هرگز، هرگز ذخیره شده در صفر خداحافظی؟ در واقع، حتی در مثال دلخواه من قبل از آن، من شروع نکردند شماره بایت صفر. من در یک شده. از آنجا که من در جهان می دانستند که مردم تصمیم گرفته اند به رزرو صفر بایت در حافظه هر کسی را به عنوان چیزی خاص. به همین دلیل، در هر زمان که شما می خواهید سیگنال است که چیزی اشتباه رفته است با توجه به آدرس شما بازگردانده تهی - در غیر این صورت به عنوان صفر شناخته می شود - و چون شما می دانید که وجود ندارد حلال داده ها در آدرس صفر، به وضوح این بدان معناست که یک خطا. و به همین دلیل ما، توسط کنوانسیون، بررسی برای چیزی پوچ و بازگشت مانند یکی از آن موارد است. بنابراین اگر ما در حال حاضر پایین، این فقط سپس برخی از چک کردن خطا، تنها در مورد چیزی با [اشتباه رفت؟ به قید وثیقه؟] در دسترس نباشد و ترک برنامه بازگشت زود هنگام است. این خط در حال حاضر می تواند بازنویسی شود به عنوان این که یعنی چه؟ در سمت چپ، مرا دیگری به من بدهید اشاره گر به یک شخصیت، و آن را تی. چه هستم من داخل تی ذخیره سازی، بر اساس در این یک خط از کد؟ من ذخیره کردن یک محل. به طور خاص در محل که در بود. بنابراین در صورتی که کاربر در سلام شوند، و که اولین سلام اتفاق می افتد برای پایان دادن به در اینجا، و سپس 123 عدد است رفتن به دوباره از دریافت رشته و ذخیره شده - همانطور که ما قبلا هم گفتم - در. هنگامی که من در حال حاضر یکی دیگر از اشاره گر به اعلام یک کاراکتر و آنرا را، چه تعداد است به معنای واقعی کلمه برای پایان دادن به تی با توجه به داستان؟ بنابراین 123. بنابراین از لحاظ فنی در حال حاضر هر دو و تی با اشاره به دقیق همان تکه از حافظه است. بنابراین متوجه آنچه که من قصد دارم در حال حاضر به ثابت کند که این برنامه حشره دار است. اول من قصد دارم ادعا می کنند، با نسخه قابل چاپ F، سرمایه گذاری کپی از رشته. سپس من قصد دارم برای انجام یک کمی چک کردن خطا. من قصد دارم مطمئن شوید. بیایید مطمئن شوید که رشته T است در حداقل بزرگتر از صفر در طول، بنابراین برخی از شخصیت وجود دارد در واقع سرمایه گذاری. و سپس شما ممکن است این یاد از نمونه های قبلی است. 2 بالا - که در از فایل ctype.h. T براکت صفر به من می دهد صفر شخصیت رشته تی. و 2 بالا که ارزش یکسان، البته، تبدیل آن را به بزرگ. بنابراین به طور مستقیم، این خط برجسته کد سرمایه گذاری برای اولین بار نامه ای در تی. اما این سرمایه گذاری نیست، به طور ذاتی، این نامه برای اولین بار در ثانیه است. اما اگر شما در حال فکر کردن به آینده، چه من برای دیدن زمانی که من این برنامه را اجرا کنید و نسخه قابل چاپ از هر دو اصلی، ، و کپی اصطلاح، تی؟ آنها در واقع رفتن به همان. و چرا آنها رفتن به همان؟ آنها هر دو با اشاره به دقیقا همان چیزی. بنابراین اجازه دهید این کار را. را صفر را کپی کنید. این کامپایل OK است. اجازه من کپی صفر اجرا. اجازه بدهید من نوع چیزی شبیه سلام در تمام حروف کوچک و سپس ضربه را وارد کنید. و آن را ادعا می کند که هر دو S اصلی و کپی در واقع یکسان هستند. بنابراین چه چیزی واقعا اتفاق افتاده است که اینجا هستید؟ اجازه بدهید من این تصویر ترسیم فقط برای گفتن داستان در یک راه کمی متفاوت است. چه چیزی واقعا در رفتن زیر هود زمانی که من اعلام می کنم چیزی شبیه به کاراکتر شروع، و یا رشته ها، من یک اشاره گر - که اتفاق می افتد به چهار بایت در دستگاه CS50 و در بسیاری از کامپیوتر. و من قصد دارم به این ثانیه. و این در حال حاضر برخی از ارزش ناشناخته است. هنگامی که شما یک متغیر، مگر اینکه شما خودتان را یک ارزش وجود دارد، که می داند آنچه وجود دارد. این می تواند برخی از دنباله تصادفی بیت از اعدام قبلی. بنابراین، هنگامی که من در خط من از کد را دریافت کنید رشته و سپس ذخیره بازگشت ارزش در بازدید کنندگان رشته به نحوی - و ما در نهایت پوست را کسب می رشته با این نسخهها کار، به نحوی اختصاص آرایه ای که احتمالا به نظر می رسد کمی شبیه به این. H-E-L-L-O، بک اسلش صفر. بیایید فرض کنید که این آدرس است 123 فقط قوام. بنابراین بازده رشته، در هایلایت خط وجود دارد، آن را می گرداند تعداد ما گفت، 123. پس آنچه واقعا در داخل از بازدید کنندگان در اینجا می رود؟ خوب، آنچه که واقعا می رود در داخل از S 123 است. اما صادقانه بگویم، من کمی اشتباه همه از این آدرس ها، همه این اعداد خودسرانه. 123، 124، 127. پس اجازه دهید در واقع ساده جهان کمی. هنگامی که ما در مورد اشاره گرها صحبت می کنید، رک و پوست کنده، به ما انسان ها، که هک اهمیت می دهد که در آن چیزهایی که در حافظه؟ که کاملا خودسرانه است. این بستگی به چگونگی بستگی دارد مقدار رم از کاربر است. رفتن به بستگی دارد که در روز شما برای اجرای این برنامه، شاید، و چه ورودی کاربر به شما می دهد. ما خانه به جزئیات بی اهمیت هستید. آنقدر انتزاعی بیایید دور و می گویند که، زمانی که شما برای اجرای یک خط از کد شبیه به این، کاراکتر ستاره می شود بازگشت ارزش رشته GET. چرا ما به جای قرعه کشی تنها چیزی است که ما حفظ خواستار یک اشاره گر به عنوان اینکه آن اشاره در چیزی است؟ بنابراین من ادعا می کنند که در حال حاضر بازدید کنندگان یک اشاره گر وجود دارد - در زیر کاپوت آن آدرس است. اما آن را فقط با اشاره به اولین بایت در رشته ای که بازگردانده شده است. اگر من در حال حاضر به کد در اینجا، چه خبر است در این خط؟ خوب، در این خط برجسته در حال حاضر، من اعلام ظاهرا دیگر متغیر به نام تی. اما آن را نیز یک اشاره گر، بنابراین من قصد دارم آن را رسم، در تئوری، دقیق جعبه همان اندازه است. و من قصد دارم به تماس آن را تی. و در حال حاضر اگر ما به عقب برویم به کد دوباره، وقتی که من ذخیره داخل تی، چه چیزی هستم قرار دادن داخل تی؟ خوب از لحاظ فنی، این شماره 123 بود. پس در واقع من باید نوشتن 123 تعداد وجود دارد. اما اجازه دهید آن را به سطح بالاتری را. تی، آن است که اگر فقط یک اشاره گر، به طور مستقیم، این است که فقط. این همه که در حال ذخیره شده در آن وجود دارد. بنابراین در حال حاضر در آخرین خطوط جالب از کد، زمانی که من در واقع در مورد رفتن سرمایه گذاری کاراکتر صفر در T، چه می گذرد؟ خب، تی براکت صفر در حال حاضر با اشاره به چه شخصیت، احتمالا؟ این اشاره به ساعت. از آنجا که براکت تی صفر - به یاد بیاورید، این نحو قدیمی است. تی براکت صفر فقط بدان معناست که اگر یک رشته است t براکت صفر به معنی صفر شخصیت در آن قدرت. بنابراین آنچه که واقعا به معنای به این آرایه - و بله، این ممکن است 123، این ممکن است 124. اما این همه نسبی، به یاد داشته باشید. هر زمان که صحبت کردن در مورد یک آرایه، ما باید استفاده از صحبت کردن در مورد شاخص های نسبی. و بنابراین در حال حاضر ما فقط می توانیم فرض کنیم که تی براکت صفر ساعت است. بنابراین اگر من اسمش 2 بالا بر روی آن، آنچه که واقعا انجام سرمایه گذاری است ساعت حروف کوچک به بزرگ H. اما البته، چه است؟ این اشاره به همان رشته رفو. پس این همه که اتفاق می افتد در این کد تا کنون. پس چه مفهوم؟ چگونه می توانم این دو مشکلات را حل کنیم؟ ما چگونه به رشته های واقعی مقایسه کرد؟ خب به طور مستقیم، چگونه می شما در مورد مقایسه دو رشته ها برای برابری واقعی؟ به چه معنی است اگر دو رشته های برابر هستند؟ واضح نیست که آدرس خود را برابر در حافظه، چرا که کم سطح جزئیات پیاده سازی. تمام شخصیت های یکسان هستند. بنابراین اجازه دهید به من پیشنهاد، و اجازه دهید معرفی من در نسخه یک compare.c، در اینجا، بنابراین است مقایسه 1.c. اجازه بدهید من پیشنهاد می کنم که ما هنوز اشاره گر نامیده می شود، و فروشگاه در آن ارزش رشته GET بازگشت. اجازه دهید چیزی که همین کار را با T. بنابراین هیچ یک از کد های مختلف است. من قصد دارم به اضافه کردن کمی خطا چک کردن در حال حاضر. بنابراین در حال حاضر که ما نوع لایه برداری به عقب این لایه در CS50 از چه رشته در واقع، ما باید بیشتر مقعد در مورد اطمینان از ما سوء استفاده ارزش های نامعتبر مانند تهی. بنابراین من فقط می خواهم به بررسی کنید. اگر بازدید کنندگان تهی برابر نیست و t ندارد تهی برابر، این بدان معناست که ما در حال OK. دریافت رشته پیچ تا گرفتن هر کدام از این رشته ها. و شما شاید در حال حاضر می توانید حدس بزنید، چه STR CMP احتمالا کاری انجام دهید؟ رشته مقایسه کنید. بنابراین اگر شما برنامه در جاوا قبل از، این مثل این است که از روش برابر در کلاس رشته. اما برای کسانی از شما که ندارند قبل از برنامه ریزی، این فقط یک تابع ج. این اتفاق می افتد به در آمده است فایل با نام string.h. که که در آن اعلام شده است. و رشته مقایسه - من در واقع استفاده از آن را فراموش کرده ام، اما هرگز به ذهن است. به یاد بیاورید که ما می توانیم انجام دهیم مرد، هم بزنید مقایسه کنید. و این است که به مطرح کردن کتابچه راهنمای برنامه نویسان لینوکس. و آن را رک و پوست کنده، کمی مرموز است. اما من در اینجا می توانید که، بله را ببینید. من باید شامل string.h. و آن را در اینجا می گوید زیر توصیف " تابع مقایسه رشته مقایسه دو رشته S1 و S2. "و S1 و S2 ظاهرا این دو آرگومان شوید. من واقعا به یاد داشته باشید آنچه توایع است، اما در حال حاضر متوجه - و شما ممکن است در حال حاضر دیده می شود این کار زمانی که تو استفاده از صفحات man اگر شما آن را همه - آن ستاره کاراکتر است فقط مترادف با رشته. پس از آن دو رشته، S1 مقایسه و S2، و آن را می گرداند یک عدد صحیح کمتر از یا مساوی یا بزرگتر از صفر اگر S1 یافت شده، به ترتیب، به کمتر از، یا مسابقه، و یا بیشتر از S2. این فقط یک راه بسیار پیچیده گفت: که رشته مقایسه بازده صفر اگر دو رشته به طور مستقیم یکسان، شخصیت شخصیت برای شخصیت. این تابع اگر عدد منفی ، حروف الفبا، قرار است قبل از تی آمده است. یا می گرداند یک عدد مثبت است اگر قرار است از t آمده است بر اساس حروف الفبا. بنابراین با این تابع ساده، می تواند شما، به عنوان مثال، مرتب تمام دسته از کلمات؟ بنابراین در این نسخه جدید، من قصد دارم به جلو بروید و را compare1. نقطه اسلش یکی مقایسه کنید. من در سلام در تمام حروف کوچک تایپ کنید. من قصد دارم به نوع در سلام در تمام حروف کوچک دوباره. و خوشبختانه در حال حاضر آن را متوجه من هم همین را تایپ. در همین حال، اگر من در سلام در پایین تایپ مورد و سلام در مورد بالا و آنها را مقایسه کنید، من تایپ همه چیز متفاوت است. زیرا نه تنها آدرس متفاوت است، اما ما در حال مقایسه شخصیت های مختلف دوباره و دوباره. خوب برویم و رفع دیگر مشکل در حال حاضر. اجازه دهید من باز کردن نسخه یکی از کپی، که در حال حاضر آدرس این مسئله به شرح زیر است. و این یکی رفتن به نگاه کمی پیچیده تر است. اما اگر شما در مورد چه مشکل فکر می کنم ما نیاز به حل، امیدوارم این خواهد بود که اکنون مشخص شده فقط در یک لحظه. بنابراین این خط اول، کاراکتر شروع تی، در شرایط خارج از حرفه یا فن خاصی است می تواند کسی پیشنهاد چه این خط در اینجا به معنای؟ چهار ستاره T، چه چیزی است که انجام؟ خوب است. ایجاد یک اشاره گر به برخی نقطه در حافظه است. و اجازه دهید آن را کمی اصلاح به من. یک متغیر است که ذخیره آدرس برخی از کاراکتر در حافظه، فقط به کمی مناسب تر است. خوب، بنابراین در حال حاضر در سمت راست، من هرگز دیده می شود یکی از این توابع قبل، malloc. اما آنچه ممکن است که به معنای؟ تخصیص حافظه. تخصیص حافظه. پس از آن معلوم است، تا به حال، ما واقعا تا به حال یک راه قدرتمند درخواست سیستم عامل، برخی از حافظه را به من بدهید. در عوض، ما در حال حاضر یک تابع به نام malloc می کند که دقیقا همان است که. حتی اگر این یک بیت از یک حواس پرتی در حال حاضر، توجه کنید که در بین دو پرانتز است فقط برای رفتن به یک عدد. جایی که من در سوال تایپ کرده اید علائم می تواند یک عدد است. و این تعداد به این معنی، من 10 بایت می دهد. من 20 بایت. من 100 بایت بده. malloc بهترین های خود را به انجام بپرسید سیستم عامل - لینوکس، در این مورد - هی، 100 بایت از حافظه در دسترس؟ اگر چنین است، بازگشت این کلمه در ادامه متن به من بازگشت آدرس که از آن دسته از بایت، شاید؟ برای اولین بار است. بنابراین در اینجا بیش از حد - و این غالب است در C، هر زمان که شما خرید و فروش با آدرس؟ شما تقریبا همیشه با خرید و فروش اولین آدرس این ترتیب، مهم نیست چقدر بزرگ یک تکه از حافظه شما در حال دست، پس به صحبت می کنند. پس بیایید شیرجه رفتن در اینجا. من در تلاش برای تخصیص چگونه بسیاری از بایت، دقیقا؟ خوب. طول رشته - اجازه انجام یک مثال بتن. اگر است سلام، H-E-L-L-O، چه طول رشته، بدیهی است؟ پس از آن پنج است. اما من انجام به علاوه 1 که، چرا؟ چرا من می خواهم شش بایت به جای پنج؟ دخشه پوچ. من نمی خواهم به ترک این دخشه پوچ خاص. از آنجا که اگر من را یک کپی از سلام و فقط انجام H-E-L-L-O، اما من قرار داده نشده که از کاراکتر ویژه ای، کامپیوتر ممکن است داشته باشد، شانس، یک بک اسلش صفر برای من. و بنابراین اگر من در تلاش برای کشف کردن طول کپی، من ممکن است فکر می کنم که آن 20 حرف طولانی باشد، یا یک میلیون حرف طولانی اگر من فقط هرگز اتفاق می افتد ضربه یک بک اسلش صفر است. بنابراین ما نیاز به شش بایت برای ذخیره H-E-L-L-O، بک اسلش صفر. و سپس این فقط به مقعد فوق العاده است. فرض کنید که من را فراموش کرده ام چه به اندازه یک کاراکتر است. ما را گفت: آن یک بایت. و معمولا آن است. در تئوری، آن می تواند چیزی مختلف، در مک های مختلف و یا کامپیوتر متفاوت است. پس از آن معلوم میشود که این اپراتور وجود دارد به نام sizeof که اگر شما آن را عبور نام نوع داده - مانند کاراکتر، یا بین المللی، یا شناور - آن را به شما بگویم، به صورت پویا، که چگونه بسیاری بایت کاراکتر طول می کشد تا در این کامپیوتر خاص است. پس این است که به طور موثر تنها ضرب المثل مثل حکایت 1 یا زمان محلی شما با هیچ چیز در همه. اما من انجام آن را فقط مقعد فوق العاده، که فقط در مورد کاراکتر متفاوت بر روی کامپیوتر در مقابل معدن خود را، در این راه ریاضی همیشه به بررسی کنید. در نهایت، در اینجا من را برای تهی تیک بزنید، است که همیشه عمل خوب - دوباره، هر زمان ما در حال برخورد با اشاره گر. اگر malloc قادر به دادن نبود من شش byes - که بعید است، اما تنها در مورد - یکی بلافاصله بازگشت. و در حال حاضر، به جلو و کپی رشته به شرح زیر است. و این نحو آشنا است، البته در نقش های مختلف. من قصد دارم به پیش رفتن و گرفتن رشته طول و ذخیره آن در n. من پس از رفتن به تکرار از من برابر صفر تا و از جمله N، بزرگتر یا مساوی با است. به طوری که در هر تکرار، من به گل شخصیت i ام از در i ام شخصیت تی. بنابراین آنچه که واقعا در زیر هود در اینجا؟ خوب اگر این به عنوان مثال، است - و من در کلمه H-E-L-L-O تایپ و یک بک اسلش صفر وجود دارد. و دوباره، این است که با اشاره به اینجا. و در حال حاضر اینجا T است. و این اشاره در حال حاضر به یک کپی از حافظه، درست است؟ Malloc تا من کل تکه از حافظه است. من نمی دانم در ابتدا چه در هر یک از این مکان. بنابراین من قصد دارم از این به عنوان فکر می کنم یک دسته کامل از علامت سوال. اما به محض این که من شروع حلقه از صفر در بالا از طریق طول S، T براکت صفر و t براکت 1 - و من این را قرار داده و در حال حاضر در بالای سر - تی براکت صفر و براکت صفر منظورم که من قصد دارم به کپی کردن تکراری در اینجا H، E-L-L-O. به علاوه، به خاطر من به همراه 1 اسلش صفر. بنابراین در حال حاضر در مورد مقایسه 1.c، در پایان، اگر من نسخه قابل چاپ سرمایه تی، ما باید ببینید که بازدید کنندگان بدون تغییر است. اجازه دهید من جلو بروید و این کار را انجام. بنابراین copy1. نقطه اسلش copy1. من قصد دارم به نوع در سلام، را وارد کنید. و در حال حاضر متوجه، تنها کپی با حروف بزرگ شده است. از آنجا که من واقعا دو تکه های حافظه. متاسفانه، شما می توانید برخی از زیبا را انجام دهید همه چیز بد و بسیار خطرناک است در اینجا. اجازه دهید من بکشد تا به عنوان مثال در حال حاضر اینجا، است که به ما می دهد به عنوان مثال از چند خطوط مختلف. پس فقط به طور مستقیم در اینجا، خط اول از کد، اعضای هیات تحریریه ستاره *، اعلام یک متغیر به نام *. و چه نوع داده که متغیر؟ نوع داده آن متغیر چه خبر؟ بود که مطلب یا داستان جالب نیست. ستاره نوع داده int است. پس چه معنا است؟ ایکس آدرس یک int را ذخیره کنید. ساده است که به عنوان. Y برای ذخیره آدرس بین المللی. خط سوم چیست از کد انجام می دهند وجود دارد؟ این تخصیص چگونه بسیاری از بایت، به احتمال زیاد؟ چهار. از آنجا که از اندازه یک int است به طور کلی چهار،، malloc چهار می دهد به من آدرس یک تکه حافظه، برای اولین بار است که از بایت است در حال حاضر در x ذخیره می شود. در حال حاضر ما در حال حرکت کمی به سرعت. ستاره * یعنی چه؟ این بدان معنی است به این آدرس بروید قرار داده و چه تعداد وجود دارد؟ با قرار دادن عدد 42 وجود دارد. ستاره Y به معنی رفتن به آنچه در Y قرار داده و عدد 13 وجود دارد. اما یک دقیقه صبر کنید. چیست در Y در حال حاضر؟ آدرس Y نگهداری؟ ما نمی دانیم، درست است؟ ما هرگز یک بار استفاده از انتساب اپراتور شامل Y. بنابراین y به خط دوم اعلام کرد فعال است فقط برخی از ارزش زباله، بزرگ علامت سؤال پس به صحبت می کنند. آن را می توان به طور تصادفی با اشاره به هر چیزی در حافظه، که به طور کلی بد است. تا در اسرع وقت ما که خط وجود دارد، ستاره Y برابر 13، چیزی بد، چیزی بسیار بد در مورد اتفاق می افتد به Binky. بنابراین اجازه دهید ببینیم چه خبر است برای پایان دادن به اتفاق می افتد به Binky در اینجا در این لحظه و یا پس نگاه کنید. [پخش ویدئو] ، با سلام، Binky. از خواب بیدار. این زمان برای تفریح ​​اشاره گر است. چه خبر؟ اطلاعات در مورد اشاره گر؟ اوه، goodie. خوب، برای شروع، من حدس می زنم ما رفتن به نیاز به یک زن و شوهر اشاره گر. OK را بزنید. این کد دو اشاره گر اختصاص که می تواند به اعداد صحیح اشاره می کنند. خوب، خوب، من این دو اشاره گر را ببینید. اما به نظر نمی رسد به اشاره به هر چیزی. که درست است. در ابتدا، اشاره گرها نمی کنند اشاره به هر چیزی. چیزهایی را که به نقطه نامیده می شوند pointees، و راه آنها را گام جداگانه. اوه، راست، راست. من می دانستم که. pointees جدا هستند. پس چگونه می توانم pointee به شما اختصاص؟ OK را بزنید. خوب، این کد اختصاص یک عدد صحیح جدید pointee، و این بخش مجموعه X برای اشاره به آن است. ، با سلام، به نظر می رسد که بهتر است. پس این کار را انجام چیزی. OK را بزنید. من dereference X اشاره گر به ذخیره شماره 42 به pointee آن. برای این ترفند، من سحر و جادو من نیاز گرز غیر مرجع. شما گرز جادویی هرگاه؟ آه، فوق العاده است. این همان چیزی است که کد به نظر می رسد مانند. من فقط راه اندازی تعداد، و - هی، نگاه کنید. آن وجود دارد. در پس انجام dereference X شرح زیر به فلش برای دسترسی به pointee آن. در این مورد، برای ذخیره 42 در آن وجود دارد. هی، سعی کنید با استفاده از آن برای ذخیره شماره 13 از طریق اشاره گر دیگر، Y. OK را بزنید. من فقط در اینجا به y و بدست آوردن شماره 13 راه اندازی شده است. و سپس عصا را هرگاه و فقط - ایست! اوه، هی. که کار نمی کند. بگو، Binky، من فکر نمی کنم هرگاه Y ایده خوبی است، چون راه اندازی pointee است گام جداگانه است. و من فکر نمی کنم که ما تا به حال آن را انجام داد. -هووم. خوب نقطه. آره، ما Y اشاره گر اختصاص داده است. اما ما آن را هرگز به اشاره به pointee. -هووم. بسیار هوشیار. با سلام، شما به دنبال خوب وجود دارد، Binky. آیا می توانم به شما به طوری که y نقاط به آن را تعمیر به pointee همان x را؟ مطمئنا. من گرز جادویی من خواهید استفاده انتساب اشاره گر. این است که برای رفتن به یک مشکل مثل قبل؟ بدون. این می کند pointees ها دست نزنید. این فقط تغییر یک اشاره گر به اشاره به همان چیزی که به عنوان یکی دیگر. اوه، من می بینم. Y به همان محل به عنوان *. پس صبر کنید. Y ثابت است. این یک pointee. بنابراین شما می توانید سعی کنید گرز هرگاه دوباره برای ارسال بیش از 13. OK را بزنید. در اینجا می رود. با سلام، در آن نگاه کنید. هرگاه آثار Y. و از آنجا که اشاره گرها به اشتراک گذاری که یک pointee، آنها هر دو 13. آره. به اشتراک گذاری. هر چیز دیگری. بنابراین می خواهیم مکان های سوئیچ در حال حاضر؟ اوه، نگاه کنید. ما از زمان هستید. اما - فقط به یاد داشته باشید سه قوانین اشاره گر. شماره یک، ساختار اصلی است که شما باید یک اشاره گر است. و آن را بیش از به pointee. اما اشاره گر و pointee را جدا هستند. و خطا شایع است راه اندازی یک اشاره گر است، اما به فراموش توجه pointee. شماره دو، هرگاه اشاره گر شروع می شود در اشاره گر و پس از آن فلش بیش از برای دسترسی به pointee آن. همانطور که همه ما می دانیم، این فقط کار می کند pointee، که می شود به رد شماره یک. شماره سه، انتساب اشاره گر طول می کشد یک اشاره گر و تغییرات آن را به نقطه را به pointee به عنوان یکی دیگر از اشاره گر. بنابراین پس از انتساب، دو اشاره گر اشاره به همان pointee. گاهی اوقات که به اشتراک گذاری نامیده می شود. و این همه وجود دارد به آن، واقعا. شرکت خداحافظ خداحافظ. [END پخش ویدئو] دیوید مالان: بنابراین بیشتر در مورد اشاره گر، بیشتر در مورد Binky هفته آینده. ما به شما در روز دوشنبه را ببینید.