[موسیقی] DAVID J. مالان: این مثل این است یک سمینار دانشجوی سال اول امروز. باشه. بنابراین بارانی است. این تمایل به در روزهای چهارشنبه رخ می دهد، اما همه فرصت های بیشتر برای سوال امروز. بنابراین شروع کردن در واقع اجازه با این فیلم در یک لحظه. اما ما سخنی عام مثل همیشه شروع می شود. این CS50 است، و این در پایان هفته 4 است. بنابراین اگر شما تا کنون به تماشای تلویزیون و یا یک جایی فیلم برخی از کارشناسان کامپیوتر وجود دارد و پلیس یا اف بی آی، و یا برخی از آژانس در تلاش است به گرفتن برخی از دشمن، خوب، شما را احتمالا شنیده عبارت "افزایش" به موجب آن که تکنسین به نحوی در بی نهایت زوم جادویی دور برای دیدن جنایتکاران هویت و یا شماره پلاک حتی در روشن و خاموش شدن یک آینه و یا درخشش چشم کسی. پس در واقع، اجازه دهید یک نگاه چند جمله صحنه هایی از تلفن های موبایل. [پخش ویدئو] -ok، حالا اجازه دهید یک نگاه خوبی در شما خواهد شد. نگه دارید آن را. با اجرای این تماس. -یک دقیقه صبر کن. رفتن سمت راست. وجود دارد، مسدود است. -تمام صفحه. -ok، مسدود است. تا -Tighten که، شما؟ بردار در در که پسر های چرخ عقب. زوم در اینجا بر روی این نقطه است. -With تجهیزات مناسب، تصویر می تواند بزرگ و تیز. -آن چیست؟ آن را یک برنامه افزایش است. آیا می توانم شما روشن است که تا هر؟ -من نمی دانم. اجازه دهید آن را بالا ببرد. A6 بخش -Enhance. -I افزایش جزئیات، and-- من فکر می کنم وجود دارد به اندازه کافی به منظور ارتقاء، انتشار آن به صفحه نمایش است. -I افزایش بازتاب در چشم او. بیایید این طریق اجرا افزایش کیفیت ویدئو. -Edgar، می تواند به شما این افزایش؟ -صبر کن. -I've شده است کار بر روی این انعکاس. بازتاب، کسی است. -Reflection. یک بازتابی از صورت مرد وجود دارد. بازتاب بانک. یک بازتاب وجود دارد. زوم در در آینه. شما می توانید یک انعکاس ببینیم. آیا می توانید تصویر را از اینجا ببرد؟ آیا می توانم شما او را افزایش حق در اینجا؟ آیا می توانید آن را افزایش؟ می توانید آن را بالا ببرد؟ آیا می توانم این افزایش دهیم؟ آیا می توانید آن را افزایش؟ نگه دارید در دوم، من را بالا ببرد. زوم در روی درب. -Times 10. -بزرگنمایی. -بیا تو. -بیشتر. صبر کن، متوقف شود. -متوقف کردن. مکث آن است. چرخش 75 درجه به ما سراسر عمودی، لطفا. -متوقف کردن. بازگشت به بخش در مورد درب، دوباره و دوباره. -Got تقویت تصویر بیت مپ است که می تواند؟ -Hey، شاید ما می توانید پرادیپ استفاده روش سن به ویندوز را ببینید. نرم افزار -این دولت از هنر است. بانک ویژه خاموش است. -With سمت راست ترکیبی از الگوریتم حذف گرفته -He است الگوریتم به سطح بعدی، و من می توانید آنها را به استفاده از افزایش این عکس. قفل در و بزرگ محور z. -بهبود. -بهبود. -بهبود. یخ و بالا بردن. [END پخش] DAVID J. مالان: خوب، پس همه کسانی که در واقع کلمات. آنها فقط صحافی با هم در یک راه که در واقع منطقی نیست. و، در واقع، CS50 و دوره مانند آن تمایل به خراب کردن بسیاری از تلویزیون و فیلم برای شما. زیرا زمانی که آن دسته از کارشناسان کامپیوتر می تند کردن شرایط و گفت چیزهای فانتزی مانند بردارهای ویژه، و محور z، و هر تعداد از دیگر در واقع از نظر فنی بیشتر، آنها واقعا فقط رشته کلمات با هم اغلب. است که یکی از امیدهای ما این است که، به عنوان یک عارضه جانبی از مصرف دوره های شبیه به این، مردم بیشتر در جهان در واقع قادر به وزن در شود و فقط همیشه تا کمی تحت تاثیر قرار کیفیت و دقت از آن فیلم های. در واقع، اجازه دهید نگاهی به واقعیت است. بنابراین در اینجا عکس کارکنان است مریم، یکی از همراهان آموزش ما است. و گمان می کنم او است مظنون به چیزی. و در عین حال، اما ذره ای از وجود دارد برخی از شواهد در چشم او، یا بازتابی از عینک است. خوب، اگر ما دقیقا به عنوان فیلم پیشنهاد، در جایی که ما زوم و "افزایش"، این اطلاعات چقدر است است در صورت ماری زمانی که شما یک تصویر ضبط با رزولوشن اصلی. و، در واقع، شما می توانید این نقاط را ببینید. و این چه هستند نام پیکسل، P-I-X-E-L-S، که فقط یک مربع به طور معمول است که یک نقطه که موسیقی یک تصویر است. و در روز، و در واقع حتی امروز با برخی از تلویزیون های LED امروز و یا تلویزیون های ال سی دی، اگر شما کردم در اتاق خود و یا در خانه، اگر شما به بالا فوق العاده به آن نزدیک، و به خصوص اگر آن یک تلویزیون تا حدودی بزرگتر، شما احتمالا می تواند حتی این نقطه را ببینید و این چیزی است که تشکیل یک تصویر. و هیچ بیشتر وجود دارد اطلاعات از این است. ما می توانیم "افزایش"، به این معنا از صاف کردن همه چیز و از استنتاج نوع، نوع چه رنگ باید به آینده به چشم ماری شود به طوری که آن را در واقع تا پیکسلی است. اما اگر من زوم کردن در، وجود دارد پسر بد در چشم او است. دوست دارم که همه اطلاعاتی که ما داریم. شما نمی توانید ایجاد اطلاعات از چیزی. تنها یک محدود وجود دارد تعداد بیت وجود دارد. بنابراین در مجموعه مسائل 4، که در آن شما یک فرصت داشته باشند با این نوع از جهان بازی کند. در مجموعه مسائل 4، شما کشف دنیای گرافیک، و پزشکی قانونی، و در واقع کد ارسال که بازیابی تصاویر از دست داد. شما از کد ارسال که دستکاری تصاویر موجود و در نهایت درک چه در زیر هود. و، که معلوم است، آن را در واقع نه همه که پیچیده است. به عنوان مثال، اگر ما می خواستیم نشان دهنده یک صورت خندان که در آن با این پیکسل سیاه و سفید، و یا این نقاط سیاه و سفید، خب، ما به سادگی می تواند نشان دهنده آنها واقعا به عنوان بیت مپ. و اگر شما همیشه شنیده بود که بیت مپ بیان، شاید آن شروع می شود را به یک کمی بیشتر حس امروز. ما در حال حاضر می دانند چه بیتی است. 0 یا 1 است. و یک نقشه فقط چیزی است مانند یک تکه کاغذ که به شما می دهد و شاید یک شبکه از x و y مختصات. بنابراین در اینجا یک بیت مپ است. آن یک نقشه از بیت به موجب آن یک 1 است که ظاهرا رفتن به نمایندگی یک پیکسل سفید، و یک 0 است که برای نشان دادن یک پیکسل سیاه و سفید. اما ما قطعا می تواند آن را تلنگر در اطراف. این واقعا مهم نیست تا زمانی که ما سازگار است. و در اینجا این است که چگونه در داخل، در binary-- از حافظه کامپیوتر، و یا حتی در داخل یک فایل بر روی دیسک خود را drive-- می تواند شما را ذخیره ساده ترین تصاویر صورت خندان. اما چیزی که ما، البته، فاقد این تصویر؟ رنگ، درست است؟ این یک قدم بعدی واضح است و یا ارتقاء به بهبود این با رنگ. بنابراین متاسفانه فقط با یک بیتی، 0 یا 1، ما می تواند رنگ را نمایندگی کند. که می تواند قرمز یا آبی و یا سیاه و سفید، و یا سفید، یا سبز، و یا صورتی، و یا هر جفت از رنگ. اما برای سادگی کار، ما فقط فرض سیاه و سفید. پس چه منطقی ما اگر ما نیاز داریم خواهید به پیاده سازی رنگ در یک تصویر؟ چه چیزی ما را انجام دهید؟ اگر عامل محدود کننده در اینجا این است که با یک بیت شما فقط می توانید نشان دادن دو کشور، 0 یا 1، سفید و یا سیاه و سفید، چه چیزی می خواهید کاری انجام دهید؟ مخاطبان: بیشتر داده ها. DAVID J. مالان: بیت بیشتر، آره اطلاعات بیشتر، بیت بیشتر است. و، در واقع، که دقیقا چگونه تصاویر رنگی شده است. به جای استفاده از یک بیت، یک 0 یا 1 را برای هر پیکسل، هر نقطه، شما فقط استفاده از چندین. شاید استفاده از 8، شاید، که معمولا به با استفاده از 24، و در واقع، در مجموعه مسائل 4، شما را با یک فایل بازی فرمت که با استفاده از 24 بیت به طور معمول. اما بسیاری از شما احتمالا آشنا با فرمت JPEG. اگر شما تا کنون گرفته ام یک عکس بر روی گوشی شما، و یا آپلود و یا چیزی دیده می شود در فیس بوک، و یا فلیکر، هر تعداد از وب سایت مبتنی بر عکس، شما احتمالا یک تصویر JPEG قبل از دیده می شود. و معلوم است، این فایل فرمت ما قصد داریم به استفاده در pset 4، به موجب آن شما در حال رفتن به به بازیابی تصاویر که من به طور تصادفی از یک را حذف کرده اید کارت حافظه خراب شده در دوربین، اگر تو بخواهی. و معلوم است که حتی اگر JPEG sophisticated-- بسیار است آن را بسیار پیچیده تر از نقطه های سیاه و سفید ما شاهد یک لحظه پیش، به دلیل وجود دارد الگوریتم های فانتزی است که در واقع استفاده می شود برای فشرده سازی یک JPEG، بنابراین که شما می توانید واقعا خوب است، تصویر با کیفیت اما با استفاده از نسبتا چند بیت. و ما به آمده فشرده سازی قبل از اینکه طولانی. به نظر می رسد که برای اولین بار سه بایت در یک image-- JPEG بدون توجه به آنچه شما یک عکس گرفته شده of-- ارزش 255، 216، 255 می باشد. به عبارت دیگر، اگر شما فقط دید که الگوی بیت، در اینجا به عنوان سه نشان بایت، یا 24 بیت کل، با احتمال بالا شما می توانید استنباط کنیم که شما به دنبال در این سه برای اولین بار بایت از JPEG. و این چیزی است شناخته شده است به عنوان امضای یک JPEG. بسیاری از فرمت های فایل های خارج تمایل به شروع وجود دارد با الگوهای خاص از 0s و 1S، به طوری که ویندوز و Mac OS و iOS و آندروید دانید چه نوع فایل آنها هستند، علاوه بر به فایل اصطلاح فرمت که تعداد زیادی از فایل است. اگر شما .jpg نوع، که این یکی دیگر از نشانه به کامپیوتر است. بنابراین اجازه دهید در حال حاضر در این نگاه کمی فنی تر. ما می دانیم که اعشاری سیستم 0 تا 9 است. ما می دانیم که دوتایی 0 و 1 است. و اگر شما فکر می کنم به PSet 0، ما تو را به گریبان شدن با برای کمی، چیزی نام هگزادسیمال، در آن شما باید 16 رقم، به جای 10 یا به جای 2. و این رقم، بر اساس قرارداد، 0 تا 9 و سپس یک از طریق F، که در آن f نشان دهنده چه عدد دهدهی، فقط به عنوان یک سلامت عقل سریع بررسی؟ بنابراین، 15. و باید بیانگر 10، فقط با ماهیت سفارش که به من داده است. این فقط یک کنوانسیون خودسرانه است، اما آن را کاملا استاندارد. بنابراین اگر ما در این الگو نگاه سه بایت اجازه دهید فقط شروع به آن نگاه کنید در شیوه ای سازگار با دانشمندان کامپیوتر به طور کلی در نگاه و فکر می کنم در مورد فایل های. شما قطعا می توانید در مورد فکر می کنم فایل های در 0s و، و 1S، و اعشاری، اما در واقعیت، ما تمایل به استفاده باینری یا به طور معمول hexadecimal-- از PSet 0. بنابراین اجازه دهید من پیشنهاد می کنند که 255، 216، و 255 فقط این الگوهای از 0s و 1S می باشد. و شما می توانید این را بررسی کنید اگر شما می خواهید به انجام محاسبات ریاضی از هفته 0. اما در حال حاضر، فقط فرض که این در واقع درست است. من فقط بازنویسی کرده ام سه رقم اعشار اعداد را به عنوان سه مقدار باینری است. در حال حاضر آنچه که من قصد انجام دهید این است فقط اضافه کردن برخی از فضای سفید، فقط به خاطر خوانایی است. و توجه من فقط رفتن به حرکت همه چیز از هم جدا. بنابراین قبل از، پس از، قبل، بعد. من انجام هیچ چیز جالب دیگر از گسترش همه چیز تا که متوجه هر مجموعه ای از هشت بیت در حال حاضر دو مجموعه از چهار بیت است. دلیل این است که مبنای شانزده مفید است به خصوص مد روز چون هر رقم مبنای شانزده 0 از طریق F، یا بیشتر به طور خاص از طریق 15 0، می توان ارائه دقیقا با چهار بیت است. به عبارت دیگر، در مبنای شانزده اگر شما می خواهید برای نشان دادن یک 0، آن را فقط 0000، چهار صفر. و اگر شما می خواهید برای نشان 15، آن 1111، که چهار بیت است. و اگر شما انجام محاسبات ریاضی، اگر این محل آنهایی است، این محل 16S است، که رفتن به you-- نه که رفتن to-- با عرض پوزش، در دودویی، که رفتن به شما 15 را، آنهایی که محل، محل twos، چهار دست و پا و هشت است. بنابراین اجازه دهید من پیشنهاد می کنند که که در سمت چپ مجموعه ای از چهار بیت چیزی است که ما در حال رفتن به F پاسخ. این بزرگترین عدد به شما می توانید با چهار بیت را نمایندگی کند. و ما در حال حاضر از هگزادسیمال می دانم، F بزرگترین رقم در مبنای شانزده است. ما f دیگری وجود دارد کردم، دو بیش از وجود دارد. و در حال حاضر، فقط در ایمان را که من حق ریاضی انجام داده اند و نیمه چپ از کسانی که بیت، 1101، همان D در مبنای شانزده است. و دست راست، 1000، تنها 8. و دید که یکی آسان، درست است؟ 8 represents-- است در زیر است که به جای هشت. بنابراین ما باید یکی در ستون هشت و هیچ چیز در چهار دست و پا که، Twos و یا آنهایی که. بنابراین در حال حاضر مرسوم، انسان تمایل به رقم مبنای شانزده شبیه به این، شما فقط آنها را له با هم، و سپس شما آنها را با 0x پیشوند. این بدان معنی است چیزی جز یک سرنخ بصری به human-- اینجا می آید یک value-- هگزادسیمال دلیل در غیر این صورت آن را نمی ممکن آشکار است. که است که می گویند، در نهایت، که الگوی صفر و آنهایی که، و یا الگوی مبنای شانزده معادل عددی که شما رفتن به شروع به دنبال در مجموعه مسائل 4 this-- است و مجموعه ای مشکل 4 تنظیمات راه رفتن خواهد شد شما از طریق این در detail-- بیشتر اما متوجه به عنوان نوعی از محرمانه به عنوان این ممکن است در نگاه اول نگاه کنید، شما در حال رفتن به شروع به دیدن این زیادی. و در واقع، حتی در GDB، در دیباگر ما در روز دوشنبه معرفی و دن در pset 3 معرفی است، رفتن به اغلب شما مقادیر هگزادسیمال نشان فقط به خاطر اینکه آنها تمایل به بیشتر معمولی از دهدهی و یا باینری در جهان از کامپیوتر و رایانه. حالا اجازه دهید این را به چهار چوب قرار داده است. بسیاری از شما ممکن است به یاد داشته باشید این تصویر در اینجا، که از چه آمد؟ ویستا، بنابراین حتی زودتر از که، ویندوز XP این اولین بود. بنابراین این یک چشم انداز زیبا است. و در واقع، اگر شما بهم زدن در اطراف online-- من فکر می کنم یک مقاله ویکیپدیا است، آن کسی که بسیار شگفت آور به بیرون رفت این مکان در جهان راه اندازی خود و یا دوربین خود را در دقیقا place-- راست و امروز به نظر می رسد اما like-- آن را دقیقا تنظیم است. این تصویر، هر چند، در یک فایل فرمت به نام بیت مپ، B-M-P. و ما در حال رفتن به یک فوق العاده نگاه سریع در چه معناست. اما بیت مپ فقط یک راه مختلف است نمایندگی تصاویر هنوز هم با استفاده پیکسل در 0s و 1S، در نهایت. اما در نگاه سریع، آن را تا یک امضای جالب تر در آغاز از فایل. این فقط سه نیست بایت، و نه وجود دارد یک دسته کامل از الگوهای از بایت که به معنی از پیش تعیین شده اند. به عنوان مثال، در جایی در چند کلمه در اولین یک تصویر بیت مپ در حال رفتن به اندازه تصویر، عرض تصویر، ارتفاع تصویر، بنابراین فراداده مفید باشد، اگر شما خواهد شد. اطلاعات مفید که فتوشاپ و یا برنامه هر گرافیک شما با استفاده از ممکن است در واقع در مورد مراقبت. بنابراین بیشتر در مورد این مشکل تنظیم 4، اما این فقط می گویند که در پایان روز تمام فرمت های فایل اس ام اس جدید برای years-- فایل های مایکروسافت ورد، فایل های اعداد، فایل های اکسل، هر تعداد از فرمت های فایل های که ممکن است برخی از آنها پسوند فایل شناخته شده فقط 0s و 1S در زیر هود هستند. و انسان تصمیم گرفته اند چه کنوانسیون هستند، چه الگوهای از 0s و 1S نشان یک فایل Word در مقابل یک فایل اکسل، در مقابل هر تعداد از فرمت های فایل های دیگر است. بنابراین در pset 4، شما یک دارند فرصت با که بازی کند. ولی معنی آن را به یک ساختار. این در واقع یک SEGUE زیبا اکنون به C است که تنها یک زن و شوهر ویژگی های اضافی است که ما در عین حال نبود. این زبان یک زبان بسیار کوچک و یکی از این از ویژگی های خوب در مورد C یک ساختار است. به عنوان مثال، اگر شما می خواستم به represent-- اجازه دهید می گویند شما می خواستم به یک متغیر است که نشان دهنده یک دانش آموز در برخی از برنامه های. شاید شما یک دوره نوشتن برنامه ثبت نام، و یا خرید هسته ای ابزار، و یا چیزی شبیه به آن. قطعه از داده های مرتبط چیست به یک دانش آموز که به ذهن می آیند؟ مانند یک دانش آموز است نمایندگی با چه مقادیری؟ آره؟ شما باید یک نام به عنوان یک دانش آموز. یک دانش آموز معمولی چه چیز دیگری ندارد داشته باشد؟ مخاطبان: [نامفهوم] DAVID J. مالان: بنابراین، با عرض پوزش. مخاطبان: سن. DAVID J. مالان: به سن و یا تولد معادل، بله. چه چیز دیگری؟ مخاطبان: شماره ID؟ DAVID J. مالان: بنابراین شماره ID، شاید یک شماره تلفن، شاید یک خوابگاه، و یا خانه، یا کالج، و یا چیزی شبیه به آن. هر تعداد از قطعات داده هایی را که شما ممکن است در لیست مخاطبین خود را است آنچه ممکن است یک دانش آموز را تعریف کنیم. بنابراین اگر ما می خواستیم به انجام این کار، در کد، ما ممکن است چیزی ساده مانند انجام این کار. ما ممکن است یک برنامه به طوری که اجازه دهید تا به می گویند، اعضای هیات اصلی (خالی). و اگر من می خواهم برای نشان دادن یک دانش آموز من ممکن است، برای مثال، یک رشته نام به نام برای دانش آموزان، یک رشته به نام خوابگاه برای که دانش آموز، شاید یک نوع int به نام ID که دانش آموز. و چون من با استفاده از رشته، من نیاز به رفتن به عقب و قرار داده تا CS50.h. شاید من نیاز به رفتن به stdio.h. بنابراین اجازه دهید من پیشگیرانه آن را انجام دهد و من رفتن به به این student.c برای و صرفه جویی در این. و در حال حاضر من می توانم چیزی را انجام دهید با این متغیرها باشد. و ما فقط رفتن به ارسال که به عنوان یک نظر در شبه کد، چرا که آن را جالب نیست آنچه که ما برای اکنون انجام دهید. خوب، پس این برنامه ای است که به نحوی که دانش آموز ذخیره می کند. چه من می خواهم به انجام اگر من می خواهید برای ذخیره دو دانش آموز؟ بنابراین غریزه اول من است رفتن به همه حق است، یک دقیقه صبر کنید، اگر یکی دیگر از دانشجویان دارند چرا من نه فقط نام و نام خانوادگی رشته 2، رشته خوابگاه 2، ID2 نوع int است. و ما رفته انجام داده ام این جاده قبل از و چه راه حل ما برای چه به نظر می رسد بود به نوع رب کپی hackish کار در اینجا؟ مخاطبان: یک آرایه. DAVID J. مالان: آره، ما می تواند یک آرایه استفاده کنید. راست این بسیار به سرعت گنده شود. شما باید به مرتب کردن بر اساس خودسرانه شروع نامگذاری همه این متغیرها باشد. و شما، انسان، باید برای نگه داشتن پیگیری که مربوط NAME2 OK با dorm2 با ID2 مربوط. این فقط یک ظرف غذا می شود. پس از آن بسیار ساده تر، یاد از چند هفته پیش، فقط نیاز به نام رشته به نام و شاید ما سه نفر از کسانی را. و پس از آن شاید ما باید خوابگاه رشته و سه تا از این، و یا با یک ثابت، اعضای هیات شناسه و سه تا از این. اما حتی در حال حاضر این احساس درهم و برهم کمی، درست است. ما در حال صحبت کردن در مورد دانش آموزان و در عین حال من واقعا خانه در سطح پایین جزئیات پیاده سازی. دانش آموز یک نام و یک خوابگاه و ID است. چرا نمی توانم فقط یک متغیر به نام دانش آموز و پاسخ آن را. و اگر من می خواهم یکی دیگر از دانشجویان، چرا من فقط آن را T پاسخ. و یا اگر من می خواهم یک دسته کامل از دانش آموزان، چرا من نه فقط می گویند من یک کلاس از دانش آموزان، و آن را سه تن از آنها. به عبارت دیگر، چرا که نه می توانم با نوع داده خود من، به نام دانش آموزان، که در داخل آن است یک نام، یک ID است، یک خوابگاه است، هر تعداد از زمینه های دیگر است. و معلوم است شما می توانید دقیقا همان است که انجام می دهند. بنابراین C دارای این ویژگی به نام ساختار. که یکی از ویژگی های است که زبان اجازه می دهد تا ما را به انجام دقیقا این است. من قصد دارم به جلو بروید و باز کردن structs.h که در آن ما در حال رفتن برای دیدن زیر تعریف یک دانش آموز. به نظر می رسد - و این یکی حتی ساده تر از یک ID مربوط به یک لحظه قبل. اگر می خواهید به آمده تا با نوع داده خانگی خود را، و علاوه بر int و char و شناور و همه این کسانی که وجود داشته باشد، شما می توانید با معنای واقعی کلمه انجام نوشتن ساختار از typedef، سپس برخی از آکولاد، که در داخل آن شما لیست متغیرهای شما می خواهید معاشرت با این داده های سفارشی جدید نوع مانند یک نام و یک خوابگاه، و سپس بعد از آکولاد شما یک نام را به نوع داده جدید را. بنابراین، برای مثال، دانشجو. و چه خوب در مورد این در حال حاضر این است که اگر ما در کد مربوطه نگاه کنید، این کنوانسیون، برای اولین بار از همه است، برای قرار دادن این در یک فایل به نام چیزی نقطه ساعت، یک فایل هدر، که ما ندارد شروع به استفاده از خود بیش از حد. اما ما قصد داریم به شروع با استفاده از بسیار کمی است. و آنچه ما می توانیم با انجام این کار، در نهایت، در این چند خط کد است که دقیقا اعلام نوع داده ها، یک دانش آموز. و اکنون اجازه دهید آن استفاده کنید. من قصد دارم به حال حاضر به رفتن یک فایل به نام structs1.c. و اجازه دهید یک نگاه چند ویژگی است. بنابراین مسائل در اینجا این است بیشتر آشنا، و ما دوباره به چه چیزی نیست در یک لحظه آشنا. این درس از جمله خود من فایل هدر، جدید است که به عنوان خوب، به جز برای PSet 3 که در آن، به یاد بیاورید، ما باید helpers.h. بنابراین شما ممکن است helpers.h کد: #include یاد می آورند. چرا هر چند من با استفاده از نقل قول به جای براکت زاویه دار؟ هنگامی که بین آنها انتخاب کنم؟ تقریبا همیشه به نظر می رسد من به استفاده از براکت زاویه دار. و پس از آن، همه ناگهانی در خط شش من با استفاده از دو علامت. چرا ممکن است؟ آره؟ مخاطبان: [نامفهوم] DAVID J. مالان: اون واقعی، چه؟ رسید که در IDE خود را. DAVID J. مالان: آره، که در IDE واقعی من است. و اجازه دهید در IDE ساکن نیست، چرا که که فقط یک ابزار است که من با استفاده از. که در حال حاضر من دایرکتوری، به طور خاص. بنابراین structs.h فایل خود من است در IDE نصب نشده است، در سیستم عامل خود، و نه آن را در دایرکتوری جاری من است. بنابراین این کنوانسیون است اگر شما می خواهید شامل فایل هدر خود را، شما فقط استفاده از نقل قول دو برابر شود. چه ما این چیزی که در پاسخ خط 8، به طور کلی؟ این چیزی است که؟ چیزی define # است. این نشان دهنده ثابت، درست است؟ اگر شما می خواهید به یک ارزش در برنامه شما که شما با استفاده از یک طیف دسته از بار، آن را کنوانسیون خوب به آن عامل از، اعلام آن، با نماد هش تعریف، و سپس، بر اساس قرارداد، در تمام حروف بزرگ word-- هر چند آن را نمی به شدت لازم است، اما آن کنوانسیون انسان است سرمایه گذاری ثابت به به طوری که آنها پرش در شما فضای visually-- و سپس مقدار شما می خواهید به معادل نام است که ثابت است. هیچ نقطه و ویرگول، اما شما به سادگی که الگوی دنبال وجود دارد. پس چه هستم من در این کد واقعی انجام می دهند. بنابراین اجازه دهید نگاهی به برنامه اصلی در اینجا. در خط 12 به خاطر من شامل structs.h، من در حال حاضر در دارند جادویی من اختیار یک نوع داده جدید. من نه تنها دسترسی به INT دارند، و کاراکتر، و شناور، و رشته، و آبی و دیگران است. من در حال حاضر دسترسی به یک نوع داده های دانشجویی. بنابراین در خط 12، من از ترکیب دو ideas-- یک نوع داده های سفارشی و دو، با استفاده از یک آرایه. و بنابراین در این برنامه اگر من می خواهم به واقع حمایت از سه دانش آموزان مختلف در برنامه من، من می توانید به سادگی می گویند من یک متغیر را به نام دانش آموزان، که هر کدام است از دانش آموزان نوع، که من نوع داده های سفارشی است. و، به طور خاص، به من بدهد سه نفر از کسانی که در آرایه است. بنابراین در حال حاضر آنچه که ما در این برنامه انجام دهد؟ در اینجا تنها یک حلقه for تکرار 0-3، چرا که چه مقدار از دانش آموزان است. من فقط باعث کاربر من نام دانش آموز است. و سپس در خط 17، ما یک خط بیشتر آشنا. ما دوست قدیمی ما از GetString در سمت راست. و چه قطعه ای از نحو ظاهرا جدید، اگر شما هرگز در C برنامه ریزی ام قبل، و هرگز ساختمانها استفاده می شود؟ آره؟ مخاطبان ها: .name. DAVID J. مالان: در .name. اما این بیش از حد از یک جهش است، چون در حال حاضر دانش آموزان من در پرانتز به شما می دهد دانش آموز i ام. و اگر شما می خواهید به شیرجه رفتن در داخل از آن ساختار، شما فقط از یک دوره واحد و سپس نام متغیر در داخل، و یا اموال داخل است که شما می خواهید برای دسترسی به. به طور مشابه پس از آن، اگر من پس از آن بی درنگ کاربران، به من خوابگاه دانش آموز را، شما به طور مشابه می تواند ذخیره که رشته در متغیر خوابگاه داخل آن ساختار دانش آموز. و در حال حاضر همه چیز فانتزی است. و این است که به نگاه در شاید بسیاری کاملا به زودی. اما شما این به مراتب بیشتر در pset ببینید 4، پس بیایید فقط نگاه در آن در حال حاضر. به نظر می رسد که در خط 23 از طریق 38، شما چه فکر میکنید من شاید انجام می دهند؟ من نظرات را حذف کردیم برای امروز است، اما نسخه از کد های آنلاین برای مرجع تمام نظرات. چه به نظر می رسد من به انجام می شود؟ مخاطبان: صرفه جویی در فایل با تمام اطلاعاتی که کاربر وارد شده است. DAVID J. مالان: آره، دقیقا، این یک راه جدید است است که ما شاهد دو، یکی دیگر از ویژگی C، به موجب آن من می توانید فایل های خود را ایجاد. تا کنون، تقریبا هر برنامه شما نوشته شده است بی وطن است. به محض این که آن را انجام داده در حال اجرا، که در آن است. هیچ حافظه و یا خاطراتی از آن وجود دارد. هیچ فایل ذخیره شده وجود دارد. اما اگر شما نمی خواهید به صرفه جویی در ورودی است که اتفاق افتاده است، در یک بازی و یا یک برنامه مانند این، معلوم شد که می توانند انجام دهند. و شما این بیشتر ببینید در pset 4 و در بخش. اما این خط 23 اصل یک فایل به نام students.csv ایجاد می کند. و شما ممکن است دیده اند، قبل از این. حتی اگر شما هرگز قبل از CS مطالعه کرده ام، CSV متغیرهای کاما از هم جدا است. مثل یک مرد بسیار ضعیف هست نسخه از فایل اکسل، به این معنی که تواند باز شود در اکسل و در شماره اپل، و آن را تا سطر و ستون. اما آن را یک انحصاری نیست فرمت هایی مانند مایکروسافت و یا اپل. این فقط کاما از هم جدا است ارزش هایی که ما در یک لحظه را ببینید. و فقط یک حدس است. در خط 23، در بسیار پایان، آرگومان دوم من به این تابع جدید به نام f برای باز کردن فایل باز W است. چه چیزی ممکن است دلالت W؟ آره؟ رسید این اجازه می دهد تا شما را به فایل ارسال. DAVID J. مالان: این اجازه می دهد تا شما را به فایل بنویسید. بنابراین یک زن و شوهر از انواع وجود دارد که ما در اینجا می توانید پلاگین در. اما اگر شما فقط می خواهید به خواندن فایل، این است که در آن نگاه کنید و خواندن آن را به حافظه، شما فقط نقل قول را تمام کردن "R" استفاده کنید. اگر می خواهید ارسال به فایل، شما با استفاده از نقل قول را تمام کردن "W". همچنین وجود دارد اضافه و یک زن و شوهر از چیزهای دیگر اگر شما می خواهید به تغییر فایل های موجود است. در حال حاضر ما قصد داریم برای حفظ دیدن این چیزی، پس از آن ما دوباره به خط 24. NULL، آن معلوم است، ارزش ویژه ای است که می توان با توابع خاص بازگشت اگر چیزی wrong-- رفته است اگر فایل وجود نداشته باشد، اگر شما از حافظه اجرا شود، یا یک دسته از اشتباهات دیگر. اما در حال حاضر، اجازه دهید فقط فرض کنیم که این چک کردن خطا فقط معمولی است. در اینجا در خط 26، من تکرار 0-3 بیش از همه دانش آموزان من. و این نوع از مرتب سازی بر از یک تابع جدید، fprintf، اما فقط یک حدس است. اگر تابع () printf فقط چاپ است یک رشته فرمت، چه fprintf احتمالا معنی است؟ مخاطبان: چاپ به یک فایل. DAVID J. مالان: چاپ یک رشته فرمت یک فایل. این چیزی است که اضافی F به معنی فایل است. و اولین آرگومان جدید را به متغیر است که نشان دهنده فایل خود را. سپس ما فقط یک فرمت اند رشته درست مثل printf است. و حتی اگر این نحو جدید است، این فقط معنی پلاگین به نام دانش آموز، پلاگین در خوابگاه دانشجویی، و پس از آن با fclose، بستن فایل. و پس از آن lastly-- این جدید است و ما به این آمده است قبل از long-- من آزاد دانش آموز به دلایل که در بالا وجود دارد اتفاق افتاده است. اما ما می آیند به که قبل از long-- که به دلیل چگونه GetString است در واقع در زیر هود کار. بنابراین اجازه دهید در اینجا نگاهی گذرا. اگر من نوع LS در دایرکتوری من، توجه کنید که من نمی یک فایل به نام students.csv، نه فقط وجود دارد، وجود ندارد. بنابراین اگر من در حال حاضر این برنامه را کامپایل، را ساختمانها-1،. / ساختمانها-1، و من قصد دارم به جلو بروید و تایپ در اندی، که در برکلی در دانشگاه ییل زندگی می کند. ما در حال رفتن به راب که زندگی در تایر این روز است. و اجازه دهید که در آن آمده تا با است، من فکر می کنم، ماریا در ماتر، اگر من به درستی به یاد. پس هیچ چیزی به نظر می رسد اتفاق می افتد. اما اگر من نوع LS در حال حاضر، است students.csv وجود دارد. اجازه دهید به جلو و students.csv باز کنید. این است که دوباره بسیار فرمت فایل سبک وزن است. اما من یک قرارداد ساده به تصویب رسید که که من دو سطر و ستون است. ستون اول است اول نام افراد. ستون دوم است که دانش آموز خوابگاه، یا کالج، و یا خانه، یا فلان چیز. و اکنون من این را نجات داد به طور دائم در یک فایل. پس از آن همه که جالب نیست. اما این در حال حاضر فقط یک سنگ پله است به قادر بودن به ادامه اطلاعات به طور دائم. بنابراین دیدن دهید در حال حاضر چه بیشتر ما می توانید با این و دیگر ویژگی های. اما در ابتدا، هر گونه سوال؟ که بسیاری بود، و سریع بود. اما شما یک مقدار زیادی دید بیشتر در pset 4، و همچنین. آره؟ مخاطبان: آیا راهی برای وجود دارد ادامه اضافه کردن نام به آن فایل؟ DAVID J. مالان: پرسش خوبی است. آیا راهی برای ادامه وجود دارد اضافه کردن نام به آن فایل؟ بله. و، در واقع، اگر شما را تا پایان تا دوباره باز کردن فایل، شما می نقل قول استفاده تمام کردن "A" برای الحاق، که فقط اضافه کردن یک خط جدید، خط جدید دوباره و دوباره، دقیقا. سوال خوبی بود. سوال دیگر؟ آره؟ مخاطبان: اگر شما فرار برنامه دوباره در حال حاضر، آن را حفظ و اضافه کردن نام به فایل ها و یا آن را باز کردن یک فایل جدید؟ DAVID J. مالان: آه، سوال خوب است. اگر برنامه شما زد دوباره راست اکنون، شاید در نام جدید تایپ، آن را به فایل اضافه کنید و یا بازنویسی فایل؟ در حالت دوم، چون من با استفاده از حالت الحاق نشده است. و چون من فقط کورکورانه هستم باز کردن فایل برای نوشتن، آن را فقط به بازنویسی فایل. بنابراین من در واقع نیاز به انجام است اضافه، اگر من می خواهم به واقع یک دراز مدت داشته باشد پایگاه داده است. در حال حاضر CSV مفید است، رک و پوست کنده، حتی برای مثل اگر شما writing-- و ما در نهایت خواهید دید این بعد از آن در ترم که ما با استفاده از CSV ها برای مقاصد دیگر. اگر شما می خواهید برای ذخیره تمام مردم که برای برخی از رویداد ثبت نام کرده اند، و یا برای دانش آموزان خود را امضا گروه، و یا چیزی شبیه به آن، ذخیره سازی داده ها در این نوع از فرمت فوق العاده راحت است. از آنجا که به معنای واقعی کلمه، اگر من به دانلود این فایل. من می توانم double-- و اجازه دهید در واقع این را امتحان کنید اگر من اکسل و یا شماره در اینجا. من قصد دارم به راست کلیک یا کنترل کلیک فایل من. متأسفیم. راست کلیک کنید و یا کنترل کلیک فایل من. در تاریخ آمده، موس من همکاری نمی کند. Download-- من قصد دارم به دانلود تمام فایل های اینجا تا فقط من می توانم این یکی را گرفتن. و اجازه دهید ببینیم اگر این کار اولین بار students.csv-- من را فعال کردهاید. حالا آنها می خواهند برای دیدن اطلاعات تماس من. در حال حاضر، من نیاز به ثبت نام کنید. چگونه از آن آسان است برای استفاده از CSV ها؟ بله، آن را نگه دارید تا تاریخ. OK، در حال حاضر ما آماده برای کلاس است. OK، آه، تازه چه خبر؟ OK، نزدیک است. که جادویی بود. OK، در حال حاضر ما برای به روز رسانی. و در حال حاضر، آن را فراموش کرده چه فایل من در اصل باز، اما آنچه وجود دارد a-- ما بروید. خوب، پس در حال حاضر ما یک فایل اکسل. متشکرم. خوب، پس آنچه من انجام داد که بخش آسان بود. البته من می توانستم از پیش نصب شده اکسل، و یا اعداد، و یا هر برنامه. اما این خوب است، چرا که در حال حاضر من می تواند دستکاری داده ها در یک فرمت استاندارد. زمینه پس به تغییر به جایی که ما را ترک کردن زمان گذشته، بود که به شروع خود را به چرخ آموزش. اما در ابتدا، شما نمی این ناهار زودتر ببینید دوباره اتفاق می افتد در اینجا در آتش و یخ در کمبریج، سه تار در نیوهیون. ثبت نام در وب سایت CS50s ASAP برای پیوستن به دانش آموزان و کارکنان CS50. بنابراین ما در زمان چرخ آموزش دوشنبه به عنوان follows-- رشته شده است در اعلام کتابخانه CS50s برای برخی از زمان. و آن را به خوبی، به دلیل آن اجازه می دهد تا ما در مورد متغیرهای صحبت به عنوان کلمات کامل و جملات و بیشتر. اما معلوم رشته وجود ندارد. که فقط یک مترادف، و یا نام مستعار است، که ما برای چیزی ایجاد شده است که در واقع است کمی بیشتر فنی نام کاراکتر *. و در واقع، ما یک نمونه دیدم از یک برنامه در روز دوشنبه که رفتار نه کاملا به عنوان ما انتظار می رود. این فایل بود، مقایسه-0. به یاد بیاورید که در مقایسه-0، اگر من کامپایل مجدد برنامه روز دوشنبه و اجرا مقایسه-0 و نوع در مادر در حروف کوچک، حروف کوچک و مادر در دوباره. این برنامه اصرار داشتند که من نوع چیزهای مختلف، حتی اگر مادر، همه در حروف کوچک، بصری یکسان است. پس چه پاسخ کوتاه بود چرا کامپیوتر فکر می کند این دو رشته متفاوت هستند؟ آره؟ مخاطبان: [نامفهوم] DAVID J. مالان: درست است. بنابراین، مادر، اولین بار من آن را تایپ کنید، در حال جایی در رایانه من ذخیره شده حافظه اما در محل های مختلف از بار دوم من در مادر را تایپ کنید. در حال حاضر آن قطعا می تواند بهینه شده است. کامپیوتر می تواند هوشمند و تحقق این دو رشته، هی، آنها یکسان است. اجازه دهید من نمی redundantly آن را ذخیره کنید. اما رایانه کار را انجام ندهید بهینه سازی مگر اینکه شما به آنها بگویید به. بنابراین، به طور پیش فرض، آنها فقط رفتن برای پایان دادن به در دو مکان مختلف در حافظه است. و بنابراین، به روشن تر می شود، هنگامی که ما در مقایسه دو رشته، از S اول نامیده می شد، دوم نامیده می شد T، آنچه به طور خاص من مقایسه در اینجا در خط 13. آره. رسید این محل در حافظه که متغیر به اشاره خواهد شد. DAVID J. مالان: دقیقا، من مقایسه محل در حافظه که آن متغیر اشاره کرد. بنابراین به طور خاص، اگر مادر در بود تعداد بایت 1 و 2 و 3، و به یاد داشته باشید به دلیل 4-- بک اسلش 0 نیاز به تمام راه را در پایان. و نمونه دیگر از مادر، M-O-M، در آدرس 10، 11، 12 و 13 بود. من مقایسه 1، آن آدرس، آن مکان را در حافظه، در برابر 10 است، که بدیهی است که نه همان. 1 است 10 است. بنابراین این خوب است که در آن آن را بسیار آسان می کند. اما این مشکل تا آنجا که ما نمی توانیم به نظر می رسد برای مقایسه رشته ها. بنابراین fundamentally-- و در این سطح پایین، اگر شما می خواهید به پیاده سازی یک برنامه برای مقایسه دو واژه جدا که کاربر در کیفیت تایپ، آنها خط تا کاراکتر برای کاراکتر، فقط به طور کلی، چه چیزی ما باید انجام دهید، ظاهرا؟ این کافی نیست فقط به در این دو آدرس را نگاه کنید. چه چیزی ما باید انجام دهید؟ آره؟ مخاطبان: تکرار از طریق رشته [نامفهوم]. DAVID J. مالان: آره، اجازه دهید تکرار از طریق رشته است. حال با استفاده از یک حلقه، یک حلقه در حالی که، یا هر آنچه که شما راحت ترین با. و اگر ما دو رشته به جایی کردم در حافظه، اجازه دهید در هر نگاه شخصیت اول، پس از آن هر یک دوم شخصیت، و سپس سوم و چهارم، و پنجم، تا زمانی که ما ضربه چه مقدار نگهبان خاصی؟ مخاطبان: [نامفهوم] DAVID J. مالان: آره، بک اسلش صفر، که در آن نقطه در هر دو رشته ما می توانید تصمیم بگیرید که آن را. آیا ما هر شخصیت تنها همسان؟ اگر نه، بازگشت نادرست است. اگر چنین است، بازگشت واقعی است. و به طوری که دقیقا این چه نسخه ای از برنامه مقایسه-1.c کند. این یکسان به چیزی است که ما در دوشنبه جز این که من نگاه بدست از string-- کلمه خلاص شدن از شر هر چند است که هیچ impact-- کاربردی همه من اکنون انجام است از بین بردن برخی از چرخ آموزش تصویری، اما به وضوح ببینید که s و t آدرس می باشد. و آنچه که ستاره، ستاره، نشان دهنده یک آدرس است، در غیر این صورت شناخته شده از لحاظ فنی بیشتر به عنوان یک اشاره گر است. بنابراین، هنگامی که من اعلام می کنم در مورد خط 9 و می گویند کاراکتر * ها، این بدان معنا نیست من یک رشته. این بدان معناست که من یک متغیر است که به هدف در زندگی برای ذخیره یک آدرس است. از آنجا که من در مورد قرار دادن هستم آدرس از یک رشته به آن است. و در واقع، از GetString، به روشن می کند، یک رشته نمی گرداند. آن مادر نمی گرداند بک اسلش صفر، در هر سه. چه GetString به طور خاص و دقیقا بازگشت؟ مخاطبان: [نامفهوم] DAVID J. مالان: آدرس، آدرس اولین شخصیت در برخی از رشته آن را بدست آورده است. و بنابراین در حال حاضر ما شاهد یک کلمه کلیدی خاص دوباره. و من به این پیش از آن اشاره کرد. این است که رفتن به کنوانسیون خوب که ما دوباره و دوباره اکنون خواهید دید. من دارم مطمئن شوید که بازدید کنندگان تهی نیست و t تهی نیست. از آنجا که در من است واقعا اشاره سریع قبل از آن، چه ممکن است به معنای اگر می گرداند از GetString نیست آدرس اما N-U-L-L، است که دوباره، برخی از ارزش خاص؟ مخاطبان: خطا. DAVID J. مالان: این یک خطا است. چیزی را اشتباه رفت. و آنچه به طور معمول ممکن است رخ دهد، به ویژه با strings-- که ممکن است طول ناشناخته در advance-- شاید کامپیوترها از حافظه، شاید شما در چنین تایپ کلمه طولانی یا جمله یا جا به جا چنین مقاله بزرگ نه تنها حافظه کافی وجود دارد. و به این ترتیب از GetString نمی تواند بازگشت آدرس از همه چیز، پس از آن فقط چیزی را برمی گرداند. و آن را می گوید یک خطا رخ داده است با بازگشت مقدار null هستند. این آدرس صفر است، پس به صحبت. اکنون معلوم C می آید با یک تابعی که این تکرار. ما لازم نیست که برای اجرای این با یک حلقه for و یا یک حلقه در حالی که خودمان. ما می توانیم یک تابع استفاده کنید، نام موجز، هم بزنید کامپیوتر، و یا رشته مقایسه، که هدف در زندگی است که برای انجام دقیقا. شما آن را دو اشاره گر، دو آدرس، و آن را به کسانی که آدرس بروید و سپس به مقایسه نامه را برای حرف حرف برای کیفیت، توقف تنها زمانی که چه چیز درست است؟ هنگامی که به طور مستقیم باید کامپیوتر را به هم بزنید متوقف تکرار، فقط به روشن باشد؟ هنگامی که آن را با یک بک اسلش 0 در هر دو رشته، که در آن نقطه آن می توانید تصمیم بگیرید همه چیز همسان، و یا شده است یک اختلاف وجود دارد؟ بنابراین، اگر ما این در حال حاضر اجرا کنید و سعی بازی سرمایه کوچک ما، بنابراین مطمئن مقایسه-1، ./compare-1، و نوع مادر در کوچک در هر دو بار. در حال حاضر این همان چیزی است. و اگر من آن را دوباره با حروف کوچک و پس از آن شاید بزرگ. در حال حاضر آن را در واقع متمایز بین بزرگ و کوچک. بنابراین نه همه که سخت و یا جادویی، اما آن را در حال حاضر توضیح آنچه که در زیر هود. پس چه بیشتر می توانید استخراج ما از این نوع درس؟ بنابراین اجازه دهید نگاهی به این. من قصد دارم به جلو بروید و ارسال نامه برنامه سریع اینجا کپی 0 نامیده می شود. و در حال حاضر اجازه دهید به جلو و در واقع به اجازه دهید this-- با کپی-0، نگاهی به آنچه من در اینجا دارم. من برای اولین بار به کاربر، چیزی می گویند. سپس من یک رشته را دریافت کنید و من آن را در S ذخیره می شود. سپس من را بررسی کنید اگر S برابر برابر تهی، فقط بازگشت 1. بنابراین این فقط چک کردن خطا استاندارد است. هیچ چیز جالب اتفاق افتاده است. و در واقع، اگر ما از خطا خلاص شدن از شر چک کردن، به نظر میرسد این هفته 1 کد در حال حاضر. اما من شروع به گرفتن کمی بهتر در مورد آن. در حال حاضر در خط 16، یک هفته پیش، شاید روز یک زن و شوهر و یا حتی دقیقه پیش، شما ممکن است بگویید خط 16 است ایجاد یک متغیر به نام T و کپی ها را در آن. و این کاملا غذای آماده مناسب. اما دقیق تر است. آنچه که در خط 16 اتفاق می افتد؟ چه کپی گرفتن از راست به چپ؟ آره؟ مخاطبان: T باشد گرفتن آدرس از S؟ DAVID J. مالان: دقیقا، تی گرفتن آدرس از بازدید کنندگان. بنابراین روشن می شود در حال حاضر، اگر من به بازگشت به مثال قبل که و من بیرون کشیدن چیزی که من در تایپ کرده اید. و آنچه که من تایپ کرده اید in-- در اینجا، و در اینجا چیزی است که من در جایی در تایپ کرده اید حافظه، مادر و پس از آن یک بک اسلش 0 که برای من اضافه شده است. آنچه که من در اینجا ذخیره می شود، به یاد می آورند، این است که در محل 1، 2، 3، 4، این چیزی است که در حال حاضر در ثانیه. بنابراین اگر در خط 16، من می گویم به من بدهد یکی دیگر از متغیر به نام T و اینترنتی در ارزش ها، چه می شود در اینجا ذخیره نمی خواهد مادر بلکه فقط تعداد 1. بنابراین اگر ما نگاه به آینده در این برنامه حال حاضر، چه اتفاقی خواهد افتاد؟ بنابراین توجه داشته باشید که که این تابع شما ممکن است این چند وقت پیش برای سزار استفاده کرده اند، و یا ویژنر، و یا شاید نه در همه. من با تابع () printf من را، من رفتن به سرمایه گذاری کپی تی. اولین بار در خط 19، سلامت عقل سریع را بررسی کنید، چک strlen طول تی. برای این که من نمی خواهم سعی کنید به چیزی سرمایه گذاری اگر هیچ رشته وجود دارد. اگر کاربر فقط ضربه را وارد کنید، هیچ چیز برای سرمایه گذاری وجود دارد. بنابراین من نمی خواهم به انجام خط 21. بنابراین خط 21 است سرمایه گذاری که نامه، ظاهرا، در T؟ رسید متر؟ DAVID J. مالان: به نظر می رسد مانند آن که یکی کپی کردن؟ رسید متر. DAVID J. مالان: اوه، متر. خوب، پس اولین متر، به دلیل توجه کنید که من عبور به toupper که اگر شما هرگز آن را دیده ام آن فقط یک تابع به سرمایه گذاری به عنوان ورودی آن است. تی براکت صفر به معنای دادن من شخصیت صفر تی. و پس چگونه این کار را تغییر تصویر، تا روشن شود؟ آنچه نیاز به بازنویسی یا تغییر با توجه به s و t و مادر صفر بک اسلش. مخاطبان: [نامفهوم] DAVID J. مالان: آره، بنابراین در اینجا به سادگی این نیاز به تغییر to-- رفع this-- نیاز به رسیدن به یک متر پایتخت تغییر کرده است. اما در حال حاضر، نگاه بعد از آن در برنامه، اگر من نسخه قابل چاپ کردن s و t به عنوان من اینجا تمیز کردن، تماشای چه خبر رفتن به چاپ s و t. بنابراین کپی-0، ./copy-0 است. اجازه دهید من جلو بروید و تایپ در مادر در تمام حروف کوچک. توجه داشته باشید هر دو اصلی و کپی اند با حروف بزرگ شده است. واسه چی؟ خب، S و T هر دو اشاره به، اگر شما خواهد شد، همان تکه از حافظه است. و صادقانه بگویم، این است واقعا uninteresting-- این واقعیت که ما در حال استفاده از آدرس صفر است. منظور من، من واقعا مهم نیست که در آن مسائل را در حافظه است. با عرض پوزش من پاک کردن کمی بیش از حد. اما من واقعا مهم نیست در آن همه چیز در حافظه می باشد. و به همین ترتیب، در واقع چه برنامه نویسان تمایل به فکر کردن در مورد این است که وقتی شما از آن صحبت آدرس، و یا یک اشاره گر، چه کسی اهمیت میدهد که در آن در حافظه است. برای من مهم نیست اگر آن را در بایت یک یا یک میلیارد. من فقط مراقبت که این متغیر است به طور موثر اشاره در آن تکه از حافظه. و به این ترتیب، از این پس، به جای زبان بازی بیش از آدرس های دلخواه حافظه، اجازه دهید فقط شروع به رسم اشاره گر به عنوان اشاره گر، به عنوان فلش. پس چه S و T واقعا هستند، با توجه به این برنامه، به دلیل چگونه من ایجاد T، آن را فقط دو متغیر جداگانه اشاره در بخش همان حافظه است. و ما اهمیتی نمی جایی که آنها هستند. بنابراین ما می توانیم انتزاعی دور که جزئیات. پس چگونه آن را برطرف کنم؟ اگر من می خواهم به ارسال یک نسخه از کپی برنامه ای است که در واقع نسخه رشته و تنها سرمایه گذاری کپی، فقط به طور مستقیم، چه کردم که یک مواد تشکیل دهنده برای راه حل ما؟ مخاطبان: [نامفهوم] DAVID J. مالان: ما نیاز به یک چه؟ رسید تکه از حافظه. DAVID J. مالان: ما نیاز تکه دیگری از حافظه، درست است؟ ما نمی دانیم که چگونه به آن را انجام نشده است، لزوما. اما من نوع نیاز این اتفاق می افتد بنابراین که مادر اصلی در صورت پایین تر در این قطعه اضافی از حافظه به پایان می رسد. و پس از آن زمانی که کپی را عوض کنم، من نمی خواهید این نسخه به تغییر است. من به جای می خواهید به تغییر فقط در این کپی به طوری که اصلی بدون تغییر است. بنابراین، بیایید ببینید که چگونه ما ممکن است انجام این کار. در کپی-1، که در حال حاضر از نظر محروم شده است، اما آنلاین اظهار نظر. ما به جای انجام این شرح زیر است خطوط یکسان هستند، من یک رشته را دریافت کنید و پاسخ آن را. اما در حال حاضر اجازه دهید در یکی از ما را نگاه کنید پیچیده اما آخرین پیچیدگی برای مدتی، خط 16 دقیقا این. بنابراین اگر راحت خود را با تصویر ما فقط drew-- من یک تکه از حافظه را جدید، همه چیز را کپی کنید به آن، بیایید ببینید که چگونه ما در ترجمه که به کد. بنابراین خط 16، در سمت چپ، کاراکتر * تی از این کادر به من می دهد بیش از اینجا. که همه آن را است. در سمت راست، متر ALLOC، و یا از malloc، تخصیص حافظه، فوق العاده فانتزی است، راه مرموز فقط گفت من یک تکه از حافظه است. چه مقدار حافظه نیاز داریم؟ خب، نوع بیان بزرگ است. اما اجازه دهید ببینیم چه می گوید در اینجا. بنابراین این، البته، این است که به من طول رشته ها. بنابراین، مادر باید چه؟ پس فقط سه، درست است؟ مادر سه شخصیت است. شما به حساب نمی بک اسلش صفر زمانی که شما بحث در مورد طول یک رشته آن در واقع حروف قابل مشاهده انسان است. بنابراین مادر، بنابراین این به من می دهد 3. اما یک دقیقه صبر کنید، من در حال حاضر با اضافه کردن 1. چرا من واقعا می خواهید اختصاص 4 بایت و نه فقط 3؟ آره؟ رسید برای ارزش نگهبان؟ DAVID J. مالان: دقیقا، برای آن مقدار نگهبان. برای بک اسلش صفر، من نیاز به مجموع 4 بایت است. بنابراین من نیاز به طول رشته به علاوه 1. و پس از آن فقط برای measure-- خوب حتی اگر در این سیستم، آن را همیشه برای رفتن به من گفت: 1-- ضرب این به اندازه یک کاراکتر. معلوم است SIZEOF یک اپراتور در C که فقط به شما می گوید تعداد بایت که مورد نیاز برای یک نوع داده است. آن را برای آرایه کار نمی کند، به طور معمول، گاهی اوقات آن را ندارد. اما در حالت کلی، نه. اما آن را به من بگویید که چگونه بسیاری از بایت کاراکتر است، که معلوم است که همیشه 1. پس این است که مانند ضرب 1. بنابراین فوق العاده مرموز خط به دنبال کد. اما همه آن را می دهد من یک تکه از حافظه. اما آن را به نظر می رسد کپی شود هر چیزی را به که حافظه؟ هنوز رتبهدهی نشده است. و به این ترتیب آنچه که من انجام در خط 22 و 23، 24، 25، خوب، من به سادگی انجام این کار. و این است که مرتب کردن بر اساس مسائل مدرسه قدیمی در حال حاضر. این مثل این است PSet 2، که در آن شما فقط حرکت همه چیز در حافظه، و یا به جای در رشته ها. بنابراین من تکرار از 0 تا طول رشته s. و من کپی کردن شخصیت i ام در S به شخصیت i ام در زمان t. و چون من، برنامه نویس، ساخته شده مطمئن شوید که به تخصیص دقیقا به عنوان بسیاری از بایت که من نیاز، آن را کامل یک به یک رابطه. و من کپی مادر در کوچک به یکی از جدید. و سپس در آخر، من این کار خط. و به این ترتیب اثر تنها است به سرمایه گذاری این تی در اینجا. بنابراین بسیاری برای جذب، اما اگر شما فقط نظر آنچه واقعا در زیر هود فقط در حال حرکت است این بایت در اطراف، که برای حل این مشکل است مورد نیاز است فقط به ما این تکه از حافظه است. در حال حاضر در معرض خطر قریب به اتفاق، اجازه دهید من نشان یک مثال دیگر که تقریبا یکسان، به جز این خط کد. بنابراین این نسخه هکر است این برنامه، اگر شما خواهد شد. اما اجازه دهید فقط تقطیر آن را به چه خبر است. خط 24 استفاده می شود این تی براکت من می شود براکت من. در حال حاضر، من در حال تغییر این ستاره T بسیار بیشتر مرموز به علاوه 1 برابر ستاره ها به علاوه 1. بنابراین آنچه اتفاق می افتد و به همین دلیل ما باید یک شخصیت ستاره؟ ما این ستاره دیده می شود قبل از، و آن را مورد استفاده قرار گرفته متفاوت است. ما قبلا دیدیم کاراکتر *، در حال حاضر من از دیدن یک ستاره در آغاز، و این خوب است. چرا که معلوم است ما می تواند به نوعی فقط استنباط برای اولین بار از آن اصول چه خبر است. پس فقط به روشن باشد، چه است؟ هفته گذشته، آن را یک رشته بود. که کافی نیست. چیست، به طور خاص؟ مخاطبان: [نامفهوم] DAVID J. مالان: این یک اشاره گر است. این آدرس را شخصیت اول ما در تایپ. خوب، چه T است؟ مخاطبان: [نامفهوم] DAVID J. مالان: در آدرس اولین بایت در T، آن تکه از حافظه تخصیص. پس از آن معلوم است که وقتی ما تکرار از 0 در تا رشته length-- اول از همه، من شروع می شود در 0، چون این مدرسه قدیمی برای چیزی حلقه. بنابراین فقط برای سادگی، اجازه دهید فرض کنیم که اولین خط از کد واقعا فقط این، درست است. اگر من صفر است، با اضافه کردن صفر به چیزی که احتمالا رفتن به اثر. پس چه این ضرب المثل است؟ به نظر می رسد که ستاره اپراتور در این زمینه ارجاع است اپراتور، است که فقط یک راه فانتزی گفتن به آدرس زیر. بنابراین اگر بازدید کنندگان آدرس از اولین شخصیت در این تکه از حافظه، * بدان معنی رفتن وجود دارد. و چون ما کشیده ام تصویر در این راه، شما می توانید اتخاذ زیر مدل ذهنی. اگر این است، و به شما می گویند S *، * S نوع مانند سینی و نردبان، اگر شما بازی را به یاد داشته باشید از دوران کودکی، است که فلش را دنبال و به به آدرس. * T همان چیزی است. بنابراین شروع به اینجا، به تکه آن است. من فقط نمی تواند قرعه کشی در این صفحه نمایش است که راه. * T معنی به اینجا بروید. و پس از آن، حلقه for است که فقط گفت حرکت این شخصیت در اینجا، حرکت این شخصیت در اینجا، حرکت این شخصیت است. اما چگونه می توانم که incrementation انجام دهم؟ من نیاز به خنثیسازی آنچه که من فقط حذف شده است. این چیزی است که به طور کلی به نام حساب اشاره گر، که معنی ریاضی با آدرس. اگر در این حلقه، من را به افزایش من، و بازدید کنندگان به یک آدرس است و T یک است آدرس، اگر من فقط اضافه کردن 1، این فقط به معنی حفظ حرکت رو به جلو، و رو به جلو، و رو به جلو در حافظه است. آن را مانند خیابان آکسفورد را، خیابانی که ساختمان CS است. ساختمان CS در 33 خیابان آکسفورد است. بنابراین اگر شما برای انجام 33 خیابان آکسفورد به علاوه 1، که شما به ارمغان می آورد به 34 آکسفورد خیابان، پس از آن 35 آکسفورد خیابان، سپس 36 خیابان آکسفورد، هر آنچه که آن ساختمان واقع هستند - در صورتی که وجود داشته باشد. و به همین ترتیب، که همه ما در حال انجام در اینجا با حساب اشاره گر. پس از آن یک راه فوق العاده محرمانه است بیان خودمان. اما همه که اتفاق می افتد در زیر هود فقط زیر این آدرس ها، مانند زیر یک نقشه، اگر شما خواهد شد، و یا فلش مانند زیر ما بر روی صفحه نمایش کشیده ام. خوب، بسیاری به هضم. هر گونه سوال در نحو، مفاهیم، اشاره گرها، از malloc، و یا مانند. آره، در اینجا برای اولین بار. رسید پس در آن است که می گوید * t برابر toupper * T، است که رفتن به سرمایه گذاری تمام حروف یا just-- DAVID J. مالان: آه، درخواست واقعا خوب است. بنابراین در این خط در اینجا، 31، آیا این سرمایه گذاری حرف اول و یا همه حروف. بنابراین اجازه دهید جواب که با رفتن بازگشت به اصول اولیه. و اصول اولین بار در اینجا منظور من فقط به تعاریف اولیه به از آنچه که درگیر است. بنابراین toupper یک تابع است میکند که یک کاراکتر. که تمام است. * T معنی به first-- رفتن به آدرس در تی. بنابراین، در تصویر، اگر این تکه است از حافظه ما با malloc اختصاص داده شده، و این تی است، * تی به معنی به اینجا بروید. در همین حال، شما در حال عبور که ارزش، حروف کوچک متر به toupper، شما در حال گرفتن تماس سرمایه M، جایی که شما آن قرار دادن هستند؟ شما با قرار دادن آن را در آن همان محل. و به این ترتیب با این منطق از آن تعاریف اولیه آن را تنها سرمایه گذاری حرف اول مگر اینکه شما با من یا یک تکرار برای حلقه یا حلقه در حالی که، آن را نمی به انجام هر کاری بیشتر از شما آن را بپرسید. سوال خوبی بود. آره؟ رسید چرا شما با استفاده از هم ارجاع روش به جای آرایه؟ DAVID J. مالان: آه، سوال خوب است. چرا شما با استفاده از ارجاع روش به جای روش آرایه؟ بدون هیچ دلیل خاصی، به صداقت. و، در واقع، برای این نوع عنوان مثال، درست است، من فقط استدلال ساخت برنامه پیچیده تر است، چشم بیشتر جلزنج بیش از، مردم چک کردن چرا که این به نظر می رسد فوق العاده محرمانه، اما حتی اگر آن را انجام همین کار. و بنابراین، صادقانه بگویم، این است که راه حل بی ارزش بصری پیچیده به مشکل. آن را هنوز هم طراحی خوب، پنج از پنج برای طراحی، آیا آن را در براکت است نماد یا نماد اشاره گر. But-- به ویژه هنگامی که ما بعد در این دوره در pset 5 هنگامی که ما که فرهنگ لغت پیاده سازی است که من یک زن و شوهر از times-- ذکر کرده ام ما در واقع می خواهیم در مورد مراقبت آدرس های حافظه سطح پایین که ما واقعا درک چه خبره. اما در حال حاضر، آن می رسد که این خط از کد براکت مربع در اینجا واقعا نمی وجود دارد. آنها آنچه به نام هستند شکر نحوی که فقط یک راه عجیب سرد است گفت: کامپایلر تبدیل براکت به که عبارت ریاضی. پس از آن یک کنوانسیون انسان است قادر به نوشتن این بسیار کاربر پسند براکت. اما آنچه کامپایلر، صدای جرنگ جرنگ، است که واقعا انجام هر زمان شما ارسال آنچه که در خط برجسته 24، در زیر کاپوت آن را واقعا تبدیل آن به این. آن را فقط بیشتر لذت بخش به عنوان یک انسان به خواندن و نوشتن کد مانند خط 24. اما در نهایت آن آموزش چرخ بیش از حد آمده وقتی راحتی خود فرد قوی تر می شود. همه حق است، پس به یاد آورید که این مرتب کردن بر اساس بزرگترین مشکل بود ما را به فرار. و این چیزی است که موجب این طیف گفتگو لعنتی در مورد اشاره گرها، و آدرس، و همه چیز کپی. بخاطر آن بود که ما افتاد بیش از این احمق، احمقانه مسئله، به موجب آن من logically-- با لورن اجرا تا در اینجا در نسخه ی نمایشی و آب پرتقال در milk-- کاملا عملکرد الگوریتمی درست برای تعویض دو متغیرها ارزش، اما چیز لعنتی هیچ مداوم ندارد، و یا دائمی، اثر بر کد من. و به همین دلیل بود که؟ به طور خلاصه، این است اجرای مبادله منطقی درست است، اما هیچ تاثیری در متغیر که به آن به تصویب رسید، مانند x و y برای اصلی؟ جان کلام این موضوع چه بود؟ آره؟ رسید از آنجا که متغیر ساخته شده کپی از متغیر در پاس از طریق تابع. DAVID J. مالان: دقیقا، زمانی که شما عبور متغیرها را به یک تابع، و یا استدلال را به یک تابع، آنها تصویب شده توسط کپی، که یعنی شما یک یکسان به دنبال گرفتن الگوی بیت برای هر دو x و y، به نام اینجا A و B. و شما می توانید هر چیزی را انجام شما با کسانی که نسخه می خواهید، اما آنها در حال رفتن به هیچ اثر بر روی تابع فراخوانی شده. و، در واقع، ما به خود جلب کرد که تصویر بر روی صفحه نمایش، فراخوان زمان گذشته، موجب آن اگر شما واقعا در مورد چه چیزی فکر می کنم در زیر hood-- اگر این حافظه کامپیوتر شما است، و پایین در اینجا تکه از است حافظه اصلی استفاده می شود برای، این تکه از است حافظه برای مبادله استفاده می شود، و بنابراین حتی اگر اصلی دو متغیر x و y، مبادله ممکن است به دنبال یکسان ارزش ها، که هر دو 1 و 2، اما آنها به طور کامل هستید تکه های مختلف حافظه است. بنابراین ما نیاز به یک راه حل برای این. و صادقانه بگویم، آن را در حال حاضر به نظر می رسد که ما یک راه حل برای این مشکل، درست است. اگر ما در حال حاضر توانایی به دستکاری همه چیز از طریق آدرس و، از سینی و نردبان سبک، به دنبال این فلش و به هر جایی که ما می خواهیم در حافظه، می تواند ما نیست حل این مشکل با عبور از اصلی به مبادله نه مقادیر ما می خواهیم مبادله، اما فقط به طور مستقیم چه چیزی می تواند ما عبور به مبادله به جای؟ [INTERPOSING صداهای] DAVID J. مالان: چرا ما نه تنها با تصویب آن آدرس، درست است؟ چرا ما نمی سواپ را نقشه گنج، اگر شما خواهد شد، که منجر به ارزش های واقعی x و y. مبادله بیایید، در واقع تغییر کسانی که بیت اصلی، به جای فقط عبور نسخه از بیت. و به همین ترتیب، در واقع، این چیزی است که رفتن به راه حل است. این نسخه در اینجا است به وضوح بد و ناقص است. و در حال حاضر، در نگاه اول، آن را فقط به نظر می رسد مانند ما اضافه یک دسته از ستاره به طور تصادفی و عبور انگشتان ما که آن را کامپایل کنید. اما، اکنون کامپایل. اما اجازه دهید ببینیم که چه چیزی این چیز باشد. و متاسفانه، نویسندگان C می تواند انتخاب کرده اند نماد دیگری به این کمی واضح تر، اما اپراتور ستاره معانی متفاوتی دارد در دو شرایط متفاوت. و ما دیده ایم هر دو، اما اجازه دهید تمایز قائل شود. بنابراین تا در بالای صفحه وجود دارد، من زمانی که a و b را تغییر داده اند از نوع int در بد نسخه به int ستاره، A و B، پیش از این، اعداد صحیح بود. A و B چه در حال حاضر در خوب، نسخه سبز؟ آنها آدرس است. آدرس چه، تا روشن شود؟ آدرس از اعداد صحیح. بنابراین این واقعیت است که من گفت یعنی ستاره بین المللی این آدرس است یک عدد صحیح، به طور خاص. بنابراین در حال حاضر در خط کد اطلاع، چیز دیگری هم تغییر کرده است. TMP باقی می ماند همان، به دلیل فقط عدد صحیح موقت است، هیچ سحر و جادو حافظه وجود دارد. اما در حال حاضر نیاز به یک ستاره. و، در واقع، هر اشاره دیگر A و B، توجه کنید که همه که تغییر از قرمز به سبز این است که من پیشوند آن متغیرها با ستاره. از آنجا که من نمی خواهم به کپی A و B. چرا که اگر من فقط کپی کنید A و B و مبادله A و B، چه هستم من در واقع مبادله؟ فقط آدرس، من می خواهم به مبادله آنچه در آن آدرس است. من میخواهم به آنجا بروم. و به این ترتیب اپراتور ستاره در داخل تابع من، نه در داخل از لیست پارامتر، معنی است که شما به آن آدرس بروید و در واقع این ارزش ها را تغییر دهید. پس چه می کند تصویر در حال حاضر مانند به جای نگاه کنید. خوب، اگر به جای من عبور در یک و ب 1 و 2-- من در واقع نیاز به اضافه کردن یک تعریف دیگر در اینجا. بنابراین فرض کنید که این تکه حافظه است در محل 10. این است که در محل 11، اما این یک بیت از یک ساده سازی است، من در حال حاضر دو انتخاب من عبور X و y و یا آدرس خود را منتقل کنم؟ اگر من آدرس خود را منتقل مثل این، من فقط در حال حاضر نیاز به پیاده سازی مبادله در کد سبز A و به طوری که وقتی آن را می بیند که آن را می بیند B، آن را نه تنها کپی A و B و حرکت شیر ​​و آب پرتقال. شیر و آب پرتقال استعاره اکنون تجزیه می کند، زیرا این فنجان نقشه مایع و نمی کند. به جای آن ما نیاز به رفتن به آدرس 10 و ما نیاز به رفتن به آدرس 11 و پس از آن انجام که منطق مبادله. بنابراین منطق همان است، اما ما نیاز به یک راه کمی متفاوت دسترسی به آن متغیرها. و بنابراین در پایان، چه برنامه به مانند این است. در swap.c به معنای واقعی کلمه کپی و جا به جا نسخه سبز. اما من نیاز به یک تغییر دهید. این کافی نیست فقط به تغییر مبادله. چه خط دیگری از کد من نیاز به تغییر؟ آره؟ رسید که در آن آرگومان می گیرد. DAVID J. مالان: از کجا آن استدلال خود را طول می کشد. بنابراین اگر من رفته تا به اصلی، من می توانید در x و y نه تنها عبور، و من قول می دهم، آخرین قطعه ای از نحو جدید امروز. من نیاز به تصویب در نمی x و Y اما آدرس x و y. و معلوم است، نماد که نویسندگان C انتخاب در صورت استفاده از یک علامت در اینجا، نه به با علامت بیتی اشتباه گرفته، اگر شما استفاده از یک علامت در اینجا و یک علامت در اینجا، این ارقام برای شما، چه آدرس x است، شاید آن 10، چه خبر آدرس Y، شاید آن 11، و عبور آن در جای. بنابراین بسیاری برای جذب همه در یک بار. اما اجازه دهید در حال حاضر به سرعت ببینید در چهار دقیقه باقی مانده ما در آن همه چیز به چپ چپ می توانید بروید. و به عنوان یک کنار، در واقع من در زمان این تصویر، TF این تصویر یک یا دو سال پیش انجام شد. بنابراین این گوشه است از سالن ناهار خوری الیوت. اشاره گرها شاید سخت ترین موضوع که ما در CS50 را پوشش میدهد. بنابراین اگر شما نگران مرتب کردن بر اساس شیب است شاید آن را بیشتر از یک چوب هاکی مثل این، تحقق بخشیدن به ما در حال نزدیک شدن به یک نوع از اوج در از نظر پیچیدگی مفهومی. و من مطرح کردن این عکس، چرا که من قسم می خورم به خدا، در پاییز سال 1996، که من در زمان CS50 با همکار آموزش من، نشاط مهتا، او به من در نشست گوشه ای از سالن الیوت D. بیش از ناهار، و یا شام، و یا چیزی را امتحان کنید برای کمک به من درک اشاره گر. و این جایی است که من هفته پس از این بود آن را در سخنرانی که معرفی شد من در نهایت اشاره گر قابل درک باشد. و من امیدوارم که این هستم دور هر چه زودتر برای شما کلیک کنید. اما تحقق این کاملا در میان موضوعات پیچیده تر ما در نگاه کردم. اما در میان قدرتمند ترین است. و هنگامی که شما آن را دریافت، آن را واقعا همه فقط رفتن به نهایت با هم آمده است. بنابراین مطمئن باشند آن را نمی کند نیاز به همه غرق در امروز. بنابراین در اینجا آخرین برنامه ما در حال رفتن به در نگاه کنید. و ما قصد داریم تا با یک پایان سریع سه دقیقه از تولید انیمیشن خمیری ساخته شده توسط دوستان ما، نیک Parlante. در اینجا یک برنامه است، که در دو بالا خطوط اعلام x و y متغیر است. که هر دو آدرس ها از اعداد صحیح، اشاره گر AKA. پس از آن ما به اندازه کافی اختصاص حافظه برای ذخیره یک int و ذخیره آدرس که حافظه در x. بنابراین، آن را حتی ساده از مثال قبل از. من چهار بایت از حافظه را، که به اندازه یک int است، قرار داده و آن آدرس را در x است. این خط در اینجا به معنی رفتن به آدرس X در قرار داده و معنای زندگی، تعداد 42 وجود دارد. اما این خط مرا نگران میکند. ستاره Y معنی به آدرس در Y، و قرار دادن شماره بدشانسی 13 وجود دارد. و چرا از آن خطرناک است، در این نقطه در story-- البته به سرعت در گفت در دقیقه پایانی ما here-- چرا این کار بد برای من می گویند، به آدرس در Y برود؟ مخاطبان: شما باید [نامفهوم] است. DAVID J. مالان: من ندارد قرار دادن هر چیزی در y. پس چه مقدار y است، در این نقطه در داستان؟ ما هیچ ایده. برخی از آن مقدار زباله است و نه نشانی از Binky مطمئن شوید. اگر ما می تواند در این یادداشت به پایان برسد. [پخش ویدئو] -Hey، Binky، از خواب بیدار. این زمان برای اشاره گر سرگرم کننده است. -آن چیست؟ اطلاعات در مورد اشاره گر؟ اوه، مغز گردو و غیره. خوب، برای شروع، من حدس می زنم ما نیاز به رفتن به یک زن و شوهر اشاره گر. -باشه. این کد دو اشاره گر اختصاص که می تواند به اعداد صحیح اشاره می کنند. -ok، به خوبی می بینم دو اشاره گر، اما آنها به نظر نمی رسد به اشاره به هر چیزی. -درست است. در ابتدا علائم به هر چیزی نقطه نیست. چیزهایی که آنها را به نقطه هستند نام pointees و تنظیم آنها را تا مرحله دیگری است. اوه، راست، راست. می دانستم. pointees جدا هستند. پس چگونه می توانم در یک pointee شما اختصاص؟ -ok، به خوبی این کد اختصاص pointee عدد صحیح جدید، و این مجموعه بخشی X به نقطه را به آن است. -Hey، که به نظر می رسد بهتر است. بنابراین آن را به انجام چیزی. -ok، من ارجاع ایکس اشاره گر به ذخیره شماره 42 به pointee آن است. برای این ترفند، من نیاز من چوب جادو از غیر مرجع. گرز سحر و جادو، شما از غیر مرجع؟ آه، که، که بزرگ است. -این چه کد نظر می رسد. من فقط راه اندازی تعداد and-- [POP صدا] -Hey، نگاه کن آنجا آن می رود. بنابراین، انجام یک ارجاع به x زیر فلش برای دسترسی به pointee آن است. در این مورد، به ذخیره 42 در آن وجود دارد. هی، سعی کنید با استفاده از آن برای ذخیره تعداد 13 از طریق اشاره گر دیگر، y است. -باشه. من فقط بیش از اینجا به Y، و تعداد 13 راه اندازی. و پس از آن گرز را غیر مرجع و just-- [زنگ اخبار صدا] اوه، هی که کار نمی کند. می گویند، آه، Binky، من نمی فکر می کنم غیر مرجع Y یک ایده خوب است، چرا که تنظیم تا pointee مرحله دیگری است. و من فکر نمی کنم که ما تا کنون آن را انجام داد. -Hmm، نقطه خوب است. آره، ما اختصاص داده اشاره گر، Y، اما ما هرگز آن را به نقطه را به یک pointee. -Hmm، بسیار هوشیار. -Hey، شما به دنبال خوب وجود دارد، Binky. می توانید آن را تعمیر کنید به طوری که نقاط Y به pointee همانند x. -Sure، من استفاده از گرز جادویی من از انتساب اشاره گر. -is که برای رفتن به یک مشکل، مانند قبل. طبخ غذا در منزل، این به آن pointees را لمس کنید. آن را فقط تغییر یک اشاره گر به نقطه را به همان thing-- [ظاهر SOUND] --as است. -اوه می فهمم. در حال حاضر امتیاز y به همان محل به عنوان X. بنابراین، صبر کنید، در حال حاضر Y ثابت است. از آن است که pointee. بنابراین شما می توانید سعی کنید گرز غیر مرجع دوباره به ارسال بیش از 13. اوه، خوب، در اینجا می رود. -Hey، در آن نگاه کنید. در حال حاضر غیر مرجع آثار در y است. و از آنجا که اشاره گر به اشتراک گذاری که یکی pointee، آنها هر دو 13 را ببینید. آره، به اشتراک گذاری، UH، هر چه. بنابراین، می خواهیم به تغییر مکان در حال حاضر؟ اوه، نگاه ما خارج از زمان هستند. -But-- دقیقا وقتی سه قانون اشاره گر به یاد داشته باشید. شماره 1، ساختار اصلی است که شما باید یک اشاره گر، و آن را اشاره به یک pointee. اما اشاره گر و pointee جدا هستند. و خطای رایج است به راه اندازی یک اشاره گر اما فراموش نکنید که به آن pointee است. شماره 2، غیر مرجع اشاره گر شروع می شود در اشاره گر و پس از فلش خود را بیش از برای دسترسی به pointee آن است. همانطور که همه ما می دانیم، این تنها در صورتی وجود دارد کار می کند pointee، که نوع تماس می شود است به حکومت شماره 1. شماره 3، اشاره گر انتساب طول می کشد یک اشاره گر و تغییرات آن را به نقطه را به همان pointee به عنوان اشاره گر است. بنابراین پس از انتساب، دو اشاره گر به pointee همان نقطه، گاهی اوقات که به اشتراک گذاری نامیده می شود. و این همه به آن وجود دارد، واقعا. خداحافظ خداحافظی کن. [END پخش] DAVID J. مالان: که آن را برای CS50. با تشکر از استاد نیک Parlante. ما شما را هفته آینده را ببینید. [پخش موسیقی الکترونیکی]