1 00:00:00,000 --> 00:00:01,110 >> [MUSIC پخش] 2 00:00:01,110 --> 00:00:10,567 3 00:00:10,567 --> 00:00:11,650 DAVID J. مالان: خوب. 4 00:00:11,650 --> 00:00:15,610 این CS50 است، و این در پایان هفته چهار است. 5 00:00:15,610 --> 00:00:19,420 و یکی از موضوعات امروز این است که پزشکی قانونی دیجیتال، 6 00:00:19,420 --> 00:00:20,989 هنر دوره نقاهت بعد اطلاعات. 7 00:00:20,989 --> 00:00:22,780 و در واقع، حتی اگر شما در میان می 8 00:00:22,780 --> 00:00:25,070 در حال حاضر از صلح در سه و برک آوت به، هفته آینده، 9 00:00:25,070 --> 00:00:27,880 تمرکز بر خواهد بود دقیقا این دامنه. 10 00:00:27,880 --> 00:00:30,686 >> بنابراین یکی از جالبترین شغل من تا کنون پشت در مقطع تحصیلات تکمیلی بود، 11 00:00:30,686 --> 00:00:33,560 وقتی که من برای محلی مشغول به کار بود شهرستان میانه دادستان منطقه است 12 00:00:33,560 --> 00:00:34,950 اداری، پزشکی قانونی انجام کار می کنند. 13 00:00:34,950 --> 00:00:37,450 بنابراین اساسا، ماساچوست پلیس ایالتی، به مناسبت، 14 00:00:37,450 --> 00:00:40,100 زمانی که کار بر روی موارد را در چیزهایی مانند دیسک های سخت را 15 00:00:40,100 --> 00:00:42,185 و فلاپی دیسک و کارت های حافظه و مانند آن. 16 00:00:42,185 --> 00:00:44,060 و آنها به آنها دست به من و مربی من، 17 00:00:44,060 --> 00:00:48,070 و هدف ما بود برای پیدا کردن شواهد، اگر هر گونه، در این رسانه ها وجود دارد. 18 00:00:48,070 --> 00:00:50,700 نگاه اجمالی در حال حاضر، شما ممکن است را دیده اند از این دنیا از پزشکی قانونی 19 00:00:50,700 --> 00:00:53,000 در رسانه ها، تلویزیون و فیلم. 20 00:00:53,000 --> 00:00:55,730 اما این کار من تا به حال، و اعتقاد داشتن که جهان، 21 00:00:55,730 --> 00:00:57,550 کاملا مانند شما آن را مشاهده کنید. 22 00:00:57,550 --> 00:01:00,794 بیایید نگاهی به آنچه شما احتمالا دیده می شود. 23 00:01:00,794 --> 00:01:01,460 [VIDEO پخش] 24 00:01:01,460 --> 00:01:02,930 -OK. 25 00:01:02,930 --> 00:01:05,380 در حال حاضر، اجازه دهید یک نگاه خوبی در شما خواهد شد. 26 00:01:05,380 --> 00:01:06,850 >> [MUSIC پخش] 27 00:01:06,850 --> 00:01:12,260 28 00:01:12,260 --> 00:01:12,932 >> -Hold آن. 29 00:01:12,932 --> 00:01:13,657 اجرای که به عقب. 30 00:01:13,657 --> 00:01:14,733 >> یک دقیقه صبر کن. 31 00:01:14,733 --> 00:01:15,233 برو راست. 32 00:01:15,233 --> 00:01:16,371 33 00:01:16,371 --> 00:01:16,870 -There. 34 00:01:16,870 --> 00:01:17,369 یخ که. 35 00:01:17,369 --> 00:01:17,930 -Full روی صفحه نمایش. 36 00:01:17,930 --> 00:01:18,376 >> -OK. 37 00:01:18,376 --> 00:01:18,875 یخ که. 38 00:01:18,875 --> 00:01:20,160 تا -Tighten در آن، به شما؟ 39 00:01:20,160 --> 00:01:22,126 >> -Vector در در که پسر های چرخ عقب. 40 00:01:22,126 --> 00:01:24,435 >> -Zoom در حق در اینجا در این نقطه. 41 00:01:24,435 --> 00:01:28,580 >> -With تجهیزات سمت راست، تصویر را می توان بزرگ و تیز. 42 00:01:28,580 --> 00:01:29,330 >> چه که؟ 43 00:01:29,330 --> 00:01:30,780 >> آن را یک برنامه افزایش است. 44 00:01:30,780 --> 00:01:32,170 >> -Can شما روشن است که هر؟ 45 00:01:32,170 --> 00:01:33,070 >> من نمی دانم. 46 00:01:33,070 --> 00:01:34,150 اجازه دهید آن را افزایش می دهد. 47 00:01:34,150 --> 00:01:35,440 >> -Enhance بخش A6. 48 00:01:35,440 --> 00:01:36,570 49 00:01:36,570 --> 00:01:38,562 I افزایش جزئیات، and-- 50 00:01:38,562 --> 00:01:40,020 من فکر می کنم به اندازه کافی به منظور ارتقاء وجود دارد. 51 00:01:40,020 --> 00:01:40,976 انتشار آن را به روی صفحه نمایش من. 52 00:01:40,976 --> 00:01:42,559 >> من افزایش انعکاس در چشم او. 53 00:01:42,559 --> 00:01:44,322 -Let به این طریق اجرا افزایش کیفیت ویدئو. 54 00:01:44,322 --> 00:01:45,210 >> -Edgar، می تواند به شما این افزایش؟ 55 00:01:45,210 --> 00:01:45,710 >> -Hang در. 56 00:01:45,710 --> 00:01:47,570 57 00:01:47,570 --> 00:01:49,458 >> -I've شده است کار بر روی این بازتاب. 58 00:01:49,458 --> 00:01:50,402 >> بازتاب کسی -There است. 59 00:01:50,402 --> 00:01:50,902 >> -Reflection. 60 00:01:50,902 --> 00:01:52,870 یک بازتابی از صورت انسان -There. 61 00:01:52,870 --> 00:01:53,694 >> بازتاب بانک! 62 00:01:53,694 --> 00:01:54,610 یک بازتاب -There. 63 00:01:54,610 --> 00:01:55,880 -Zoom در بر آینه. 64 00:01:55,880 --> 00:01:57,860 شما می توانید بازتابی را ببینید. 65 00:01:57,860 --> 00:01:59,630 >> -Can شما تصویر را از اینجا افزایش؟ 66 00:01:59,630 --> 00:02:00,377 67 00:02:00,377 --> 00:02:01,210 -Can شما آن را افزایش؟ 68 00:02:01,210 --> 00:02:02,190 -Can شما آن را افزایش؟ 69 00:02:02,190 --> 00:02:03,066 -Can این افزایش ما؟ 70 00:02:03,066 --> 00:02:03,898 -Can شما آن را افزایش؟ 71 00:02:03,898 --> 00:02:04,740 -Hold در یک ثانیه. 72 00:02:04,740 --> 00:02:05,281 من را بالا ببرد. 73 00:02:05,281 --> 00:02:06,470 -Zoom در بر روی درب. 74 00:02:06,470 --> 00:02:06,970 -Times 10. 75 00:02:06,970 --> 00:02:08,009 -Zoom. 76 00:02:08,009 --> 00:02:08,509 -Move در. 77 00:02:08,509 --> 00:02:09,340 و بازکردن. 78 00:02:09,340 --> 00:02:10,094 صبر کن، متوقف شود. 79 00:02:10,094 --> 00:02:10,750 -Stop. 80 00:02:10,750 --> 00:02:11,250 -Pause آن. 81 00:02:11,250 --> 00:02:13,542 -Rotate ما 75 درجه در اطراف عمودی، لطفا. 82 00:02:13,542 --> 00:02:14,750 83 00:02:14,750 --> 00:02:16,127 >> -Stop. 84 00:02:16,127 --> 00:02:19,330 بازگشت به بخش در مورد درب دوباره. 85 00:02:19,330 --> 00:02:21,420 >> -Got تقویت تصویر است که می تواند بیت مپ؟ 86 00:02:21,420 --> 00:02:24,420 >> -Maybe ما می توانیم پرادیپ سینگ استفاده روش به پنجره ها را مشاهده کنید. 87 00:02:24,420 --> 00:02:25,902 >> بانک نرم افزار دولت از هنر است. 88 00:02:25,902 --> 00:02:26,866 >> بانک مقادیر ویژه خاموش است. 89 00:02:26,866 --> 00:02:29,758 >> -With سمت راست ترکیبی از algorithms-- 90 00:02:29,758 --> 00:02:32,168 >> نور گرفته -He در الگوریتم را به سطح بعدی، 91 00:02:32,168 --> 00:02:34,110 و من می توانم آنها را به استفاده از افزایش این عکس. 92 00:02:34,110 --> 00:02:36,840 >> -Lock و بزرگ کردن محور z. 93 00:02:36,840 --> 00:02:37,351 >> -Enhance. 94 00:02:37,351 --> 00:02:37,850 بالا بردن. 95 00:02:37,850 --> 00:02:38,720 -Enhance. 96 00:02:38,720 --> 00:02:40,070 -Freeze و افزایش. 97 00:02:40,070 --> 00:02:43,420 [END VIDEO پخش] 98 00:02:43,420 --> 00:02:45,830 DAVID J. مالان: بنابراین کسانی که می تمام کلمات، اما آنها نمی 99 00:02:45,830 --> 00:02:47,870 مورد استفاده در جمله دارد. 100 00:02:47,870 --> 00:02:52,370 و در واقع در آینده، هر زمان، لطفا، شما کسی می گویند که کلمه، 101 00:02:52,370 --> 00:02:54,250 "افزایش" خنده فقط کمی. 102 00:02:54,250 --> 00:02:57,190 چرا که وقتی شما سعی می کنید به منظور ارتقاء، به عنوان مثال، این چیزی است که اتفاق می افتد. 103 00:02:57,190 --> 00:02:58,580 >> بنابراین در اینجا یک عکس زرق و برق دار است. 104 00:02:58,580 --> 00:02:59,720 این Daven خود CS50 است. 105 00:02:59,720 --> 00:03:03,740 و فرض کنید که ما می خواستیم تمرکز در در برقی در چشمانش، 106 00:03:03,740 --> 00:03:05,870 و یا بازتابی از پسر بد به وضوح این بود که 107 00:03:05,870 --> 00:03:07,820 گرفته شده توسط دوربین های امنیتی. 108 00:03:07,820 --> 00:03:10,330 این چیزی است که اتفاق می افتد زمانی شما زوم بر روی یک تصویر که 109 00:03:10,330 --> 00:03:14,060 تنها تعداد محدودی از بیت های مرتبط با آن. 110 00:03:14,060 --> 00:03:15,420 >> این چیزی است که شما می توانید دریافت کنید. 111 00:03:15,420 --> 00:03:19,190 و در واقع، در چشم Daven در است اما چهار، شاید شش پیکسل 112 00:03:19,190 --> 00:03:22,110 که آهنگسازی دقیقا همان چیزی است glimmering وجود دارد شد. 113 00:03:22,110 --> 00:03:25,890 بنابراین مجموعه مسائل چهار در نهایت مجبور خواهد بود شما این جهان را کشف، به خصوص 114 00:03:25,890 --> 00:03:28,090 از طبیعت چیزی ما تماس بگیرید فایل I / O، که در آن 115 00:03:28,090 --> 00:03:31,000 I / O فقط یک راه فانتزی است گفت: ورودی و خروجی. 116 00:03:31,000 --> 00:03:34,280 >> پس تا کنون، تمام تداخلات ما با یک کامپیوتر داشته ام 117 00:03:34,280 --> 00:03:36,770 تا حد زیادی با خود بوده است صفحه کلید و صفحه نمایش، 118 00:03:36,770 --> 00:03:40,770 اما بسیار با دیسک سخت نیست، و یا صرفه جویی در فایل های فراتر از آنهایی که شما 119 00:03:40,770 --> 00:03:41,620 خود را ارسال. 120 00:03:41,620 --> 00:03:44,570 برنامه های شما تا کنون داشته نشده است ایجاد، و صرفه جویی، 121 00:03:44,570 --> 00:03:46,270 و به روز رسانی فایل های خود را دارند. 122 00:03:46,270 --> 00:03:47,150 >> خوب، یک فایل است؟ 123 00:03:47,150 --> 00:03:48,105 خوب، چیزی شبیه به یک JPEG. 124 00:03:48,105 --> 00:03:50,520 این یک تصویر شما ممکن است و یا آپلود به فیس بوک، 125 00:03:50,520 --> 00:03:51,690 و یا در جایی در اینترنت را مشاهده کنید. 126 00:03:51,690 --> 00:03:54,460 در واقع، ما فقط عکس اره از Daven JPEG بود. 127 00:03:54,460 --> 00:03:57,570 و چه جالب در مورد فایل های عکس JPEG مانند 128 00:03:57,570 --> 00:04:02,170 این است که آنها را می توان شناسایی، به طور معمول، توسط الگوهای خاصی از بیت. 129 00:04:02,170 --> 00:04:05,200 >> به عبارت دیگر، آنچه در آن است که متمایز JPEG از GIF 130 00:04:05,200 --> 00:04:08,109 از PING از یک کلمه سند از یک فایل اکسل؟ 131 00:04:08,109 --> 00:04:09,900 خوب، آن را فقط متفاوت الگوهای بیت. 132 00:04:09,900 --> 00:04:12,820 و این الگوهای متفاوت هستند معمولا در آغاز این فایل ها. 133 00:04:12,820 --> 00:04:18,200 >> به طوری که زمانی که کامپیوتر خود را به یک کلمه باز می شود توضیحات، و یا زمانی که یک کامپیوتر JPEG باز می شود، 134 00:04:18,200 --> 00:04:20,940 به نظر می رسد به طور معمول در اولین بیت چند در فایل. 135 00:04:20,940 --> 00:04:24,059 و اگر آن را یک الگوی به رسمیت می شناسد، آن را می گوید، آه، این یک تصویر است. 136 00:04:24,059 --> 00:04:25,850 اجازه بدهید من آن را به نمایش به کاربر به عنوان یک گرافیک. 137 00:04:25,850 --> 00:04:27,870 یا، اوه، این به نظر می رسد مانند یک توضیحات ورد. 138 00:04:27,870 --> 00:04:30,480 اجازه بدهید من آن را به کاربر به عنوان یک مقاله. 139 00:04:30,480 --> 00:04:33,020 >> بنابراین به عنوان مثال، عکس JPEG، که معلوم است، می باشد 140 00:04:33,020 --> 00:04:35,460 نسبتا پیچیده در زیر هود. 141 00:04:35,460 --> 00:04:40,140 اما سه بایت اول در اکثر هر JPEG با این سه عدد شروع می شود. 142 00:04:40,140 --> 00:04:44,680 بنابراین بایت صفر، یک و دو، در در هر JPEG، 255، سپس شماره 143 00:04:44,680 --> 00:04:46,675 216، سپس شماره 255. 144 00:04:46,675 --> 00:04:48,990 >> و آنچه که شما قادر خواهید بود برای شروع انجام در هفته آینده 145 00:04:48,990 --> 00:04:52,920 در واقع مجبور زیر هود از فایل ها مانند عکس JPEG 146 00:04:52,920 --> 00:04:57,210 و مانند فایل های بیت مپ، و دیدن چه چیزی همیشه وجود دارد تا زمانی بوده است 147 00:04:57,210 --> 00:04:58,650 عنوان شما با استفاده از یک کامپیوتر بوده است. 148 00:04:58,650 --> 00:05:01,860 >> اما آنچه به طور معمول وجود ندارد نوشته شده مانند اعداد اعشاری مثل این. 149 00:05:01,860 --> 00:05:04,620 دانشمندان کامپیوتر نمی تمایل به در ده دهی صحبت می کنند. 150 00:05:04,620 --> 00:05:06,139 آنها واقعا در باینری صحبت می کنند. 151 00:05:06,139 --> 00:05:07,930 به طور معمول، زمانی که ما می خواهیم برای بیان اعداد، 152 00:05:07,930 --> 00:05:10,710 ما در واقع استفاده از مبنای شانزده، که شما ممکن است به یاد 153 00:05:10,710 --> 00:05:13,027 مثلا از مجموعه مسائل یکی، که به چالش کشیده 154 00:05:13,027 --> 00:05:14,610 شما در مورد سیستم های مختلف فکر می کنم. 155 00:05:14,610 --> 00:05:17,170 >> ما، البته، آشنا هستند با اعشاری، صفر الی نه. 156 00:05:17,170 --> 00:05:18,215 ما در مورد دودویی صحبت کردیم. 157 00:05:18,215 --> 00:05:20,710 و ما واقعا باید به استفاده از آن بسیار اینجا 158 00:05:20,710 --> 00:05:22,470 در خارج، چون کامپیوتر استفاده کنید که. 159 00:05:22,470 --> 00:05:24,900 اما برنامه نویسان بسیار خواهد شد اغلب، اما نه همیشه، 160 00:05:24,900 --> 00:05:29,360 استفاده از مبنای شانزده، که فقط به معنی شما باید 16 حرف در الفبای خود را، 161 00:05:29,360 --> 00:05:31,330 به عنوان دو یا 10 مخالف است. 162 00:05:31,330 --> 00:05:34,530 >> پس چگونه شما به بالاتر تعداد از نه در مبنای شانزده؟ 163 00:05:34,530 --> 00:05:41,120 شما به 0، 1، 2، 3، 4، 5، 6، 7، 8، 9، الف، ب، ج، د، ه، ی، فقط با کنوانسیون. 164 00:05:41,120 --> 00:05:43,540 اما آنچه مهم این است که هر این یک سمبل است. 165 00:05:43,540 --> 00:05:44,340 هیچ 10 وجود دارد. 166 00:05:44,340 --> 00:05:48,400 هیچ 11، در هر سه وجود دارد، زیرا هر یک از از ارقام خود را، تنها در ده دهی دوست 167 00:05:48,400 --> 00:05:51,940 و درست مثل باینری، تنها باید است یک شخصیت، توسط کنوانسیون. 168 00:05:51,940 --> 00:05:55,280 >> به طوری که پس از آن از حروف الفبای ما است در اختیار ما برای مبنای شانزده. 169 00:05:55,280 --> 00:05:58,600 پس چه JPEG شبیه اگر شما بود به نوشتن از کسانی که برای اولین بار از سه 170 00:05:58,600 --> 00:06:01,980 بایت به عنوان اعشار نیست اما، به عنوان مثال، به عنوان مبنای شانزده؟ 171 00:06:01,980 --> 00:06:03,640 و چرا سحر و جادو است و حتی تمام آن مفید است؟ 172 00:06:03,640 --> 00:06:05,290 >> خوب، یک نگاه سریع به عنوان مثال. 173 00:06:05,290 --> 00:06:09,030 بنابراین اگر من ارسال از بیت که نشان دهنده این numbers-- اعشاری 174 00:06:09,030 --> 00:06:12,450 این ممکن است کمی زنگ زده در حال حاضر از چند هفته قبل، 175 00:06:12,450 --> 00:06:14,820 اما یکی از چپ و یکی از سمت راست خیلی آسان است. 176 00:06:14,820 --> 00:06:17,990 255 بزرگترین عدد ما بود می تواند با هشت بیت را نمایندگی کند. 177 00:06:17,990 --> 00:06:18,820 این همه آنهایی بود. 178 00:06:18,820 --> 00:06:21,320 بنابراین تنها کسی که ملایم جالب به نفر وسط است. 179 00:06:21,320 --> 00:06:24,700 و اگر شما نوع از انجام ریاضی، شما اینطور نتیجه بگیریم که، در واقع، 180 00:06:24,700 --> 00:06:27,949 که الگوی یک و صفر نشان دهنده 216. 181 00:06:27,949 --> 00:06:30,240 بنابراین اجازه دهید فقط برای تصریح در حال حاضر که این درست است. 182 00:06:30,240 --> 00:06:31,730 اما چرا این جالب است؟ 183 00:06:31,730 --> 00:06:33,970 >> خوب، یک بایت، البته، هشت بیت است. 184 00:06:33,970 --> 00:06:38,980 و معلوم است که اگر شما فکر می کنم یک بایت به عنوان دو تکه از چهار بیت، 185 00:06:38,980 --> 00:06:39,500 مثل این. 186 00:06:39,500 --> 00:06:41,000 اجازه بدهید من فقط برخی از فضای اضافه کنید. 187 00:06:41,000 --> 00:06:42,550 بنابراین قبل از، پس از. 188 00:06:42,550 --> 00:06:46,520 ام من فقط افزود: برخی از فضای سفید به خاطر تجسم در اینجا. 189 00:06:46,520 --> 00:06:51,840 چگونه ممکن است ما در حال حاضر در نشان دادن، مثلا هگزادسیمال هر چهار بیت، 190 00:06:51,840 --> 00:06:52,880 هر مجموعه ای از چهار بیت؟ 191 00:06:52,880 --> 00:06:56,420 >> بنابراین به عنوان مثال، در سمت چپ در حال حاضر، ما باید در 1،111 باینری. 192 00:06:56,420 --> 00:07:00,420 این تعداد در ده دهی چیست، اگر شما با ریاضیات؟ 193 00:07:00,420 --> 00:07:03,780 شما باید به جای آنهایی که، محل twos، محل چهار دست و پا، و محل هشت. 194 00:07:03,780 --> 00:07:04,341 >> رسید 15. 195 00:07:04,341 --> 00:07:05,340 DAVID J. مالان: این 15. 196 00:07:05,340 --> 00:07:08,340 بنابراین اگر ما هشت و چهار به علاوه دو به علاوه یک، ما 15. 197 00:07:08,340 --> 00:07:11,790 بنابراین من می تواند 15 زیر بنویسید 1111، اما در کل نکته در اینجا 198 00:07:11,790 --> 00:07:13,190 مبنای شانزده است، دهدهی نیست. 199 00:07:13,190 --> 00:07:17,310 بنابراین به جای نوشتن 15، 1-5، من قصد دارم برای نوشتن که در سحر و جادو، 200 00:07:17,310 --> 00:07:22,311 که اگر شما فکر می کنم، اگر شما صفر از طریق اف، چیزی است که به 15 خواهد؟ 201 00:07:22,311 --> 00:07:22,810 رسید ج. 202 00:07:22,810 --> 00:07:24,434 DAVID J. مالان: پس از آن که معلوم آن در ج. 203 00:07:24,434 --> 00:07:29,140 و شما می توانید کار که از با گفتن، خوب، اگر یک 10 است، سپس OK، ج 15 است. 204 00:07:29,140 --> 00:07:33,250 پس در واقع، ما می تواند بازنویسی این مجموعه همان تعداد به عنوان ج ج. 205 00:07:33,250 --> 00:07:35,750 و پس از آن اگر ما کمی از ریاضی، ما اینطور نتیجه بگیریم که که د است. 206 00:07:35,750 --> 00:07:38,650 هشت بسیار آسان است، چرا که ما یک به یک در جای هشت. 207 00:07:38,650 --> 00:07:40,620 و پس از آن، ما باید یک زن و شوهر تر ج ج است. 208 00:07:40,620 --> 00:07:44,669 >> پس چه انسان تمایل به قرارداد انجام هنگام استفاده از هگزادسیمال آنها فقط 209 00:07:44,669 --> 00:07:47,710 ارسال این کمی موجز تر، می توانید از بیشتر از آن فضای سفید خلاص شوید. 210 00:07:47,710 --> 00:07:50,890 و فقط به فوق العاده به روشن خوانندگان که این هگزادسیمال است، 211 00:07:50,890 --> 00:07:54,670 کنوانسیون ساده در میان انسان است که شما ارسال صفر 212 00:07:54,670 --> 00:07:58,000 ایکس، که هیچ معنای دیگر از یک شناسه تصویری از، 213 00:07:58,000 --> 00:07:59,590 در اینجا می آید یک عدد سحر و جادو. 214 00:07:59,590 --> 00:08:04,210 >> و پس از آن، شما را دو رقم، ج ج در این مورد، پس از آن د، آنگاه f ج. 215 00:08:04,210 --> 00:08:06,700 بنابراین داستان کوتاه مدت، هگزادسیمال فقط تمایل دارد 216 00:08:06,700 --> 00:08:11,990 مفید باشد، زیرا هر یک از آن رقم، صفر از طریق اف، کاملا خط 217 00:08:11,990 --> 00:08:13,880 تا با یک الگوی از چهار بیت. 218 00:08:13,880 --> 00:08:18,080 >> بنابراین اگر شما دو رقم هگزادسیمال، صفر از طریق F، دوباره و دوباره، 219 00:08:18,080 --> 00:08:20,256 است که به شما کاملا هشت بیت یا یک بایت. 220 00:08:20,256 --> 00:08:22,380 به همین دلیل آن را به تمایل دارد بود مرسوم مفید است. 221 00:08:22,380 --> 00:08:24,990 هیچ فکری وجود دارد محتوای واقعا فراتر از آن، 222 00:08:24,990 --> 00:08:27,010 دیگر از ابزار های واقعی آن است. 223 00:08:27,010 --> 00:08:29,310 >> در حال حاضر عکس JPEG تنها نمی فایل فرمت های گرافیکی. 224 00:08:29,310 --> 00:08:33,230 شما ممکن است به یاد آورید که وجود دارد فایل های شبیه به این در جهان، 225 00:08:33,230 --> 00:08:34,830 حداقل از چند سال به عقب. 226 00:08:34,830 --> 00:08:37,580 >> پس این در واقع نصب شده در ویندوز XP 227 00:08:37,580 --> 00:08:39,960 در میلیون ها نفر از رایانه های شخصی در سراسر جهان. 228 00:08:39,960 --> 00:08:43,000 و این یک فایل بیت مپ، BMP بود. 229 00:08:43,000 --> 00:08:47,690 و یک فایل بیت مپ، به عنوان شما بعد را ببینید هفته، فقط به معنای یک الگوی نقطه، 230 00:08:47,690 --> 00:08:51,710 پیکسل به عنوان آنها نامیده می شود، نقشه در بیت، واقعا. 231 00:08:51,710 --> 00:08:55,160 >> پس چه جالب، هر چند، در مورد این فرمت فایل، BMP، است 232 00:08:55,160 --> 00:08:58,590 که در زیر هود، آن بیش از فقط سه کلمه در ادامه متن 233 00:08:58,590 --> 00:09:01,020 که تشکیل هدر خود را، به طوری که به صحبت می کنند، چند گزش اول است. 234 00:09:01,020 --> 00:09:03,330 در واقع به نظر می رسد کمی در نگاه اول پیچیده است. 235 00:09:03,330 --> 00:09:04,704 و شما این را در مجموعه ای P را ببینید. 236 00:09:04,704 --> 00:09:06,810 و گرفتن چیزی از خاص از این در حال حاضر 237 00:09:06,810 --> 00:09:10,720 است بسیار مهم است، به عنوان تنها حقیقت که در آغاز هر بیت مپ 238 00:09:10,720 --> 00:09:13,823 فایل، فرمت های گرافیکی، یک دسته کامل از اعداد وجود دارد. 239 00:09:13,823 --> 00:09:14,980 240 00:09:14,980 --> 00:09:16,720 >> در حال حاضر مایکروسافت، نویسنده این فرمت، 241 00:09:16,720 --> 00:09:18,820 تمایل به تماس آن چیزهایی که طول int برابر نیست و کاراکتر 242 00:09:18,820 --> 00:09:22,259 و شناور، بلکه کلمات و د واژه ها و پوزیشن های خرید و بایت. 243 00:09:22,259 --> 00:09:23,800 بنابراین آنها فقط انواع داده های مختلف است. 244 00:09:23,800 --> 00:09:25,170 آنها نام های مختلف هستند برای همین. 245 00:09:25,170 --> 00:09:26,740 اما شما خواهید دید که در P مجموعه چهار. 246 00:09:26,740 --> 00:09:31,450 >> اما این فقط می گویند که اگر یک انسان دوبار کلیک برخی از فایل .BMP در خود 247 00:09:31,450 --> 00:09:35,015 و یا دیسک سخت خود را، و یک پنجره باز می شود تا نشان او و یا او را که تصویر، 248 00:09:35,015 --> 00:09:38,500 که به دلیل عامل اتفاق افتاده است سیستم احتمالا متوجه نه تنها 249 00:09:38,500 --> 00:09:41,460 پسوند فایل .BMP در نام فایل، 250 00:09:41,460 --> 00:09:45,010 بلکه این واقعیت است که وجود دارد برخی از کنوانسیون به الگوی بیت 251 00:09:45,010 --> 00:09:47,490 در ابتدا از آن فایل بیت مپ. 252 00:09:47,490 --> 00:09:50,270 >> اما اجازه دهید در حال حاضر تمرکز بر مانند یک فایل پیچیده، 253 00:09:50,270 --> 00:09:52,120 اما در عوض در چیزی شبیه به این. 254 00:09:52,120 --> 00:09:55,190 فرض کنید در اینجا در GEdit، I فقط باید آغاز 255 00:09:55,190 --> 00:09:57,070 از برنامه ای است که بسیار ساده است. 256 00:09:57,070 --> 00:09:58,860 من برخی شامل تا بالا. 257 00:09:58,860 --> 00:10:02,120 در حال حاضر من # شامل "structs.h" اما من به که در یک لحظه است. 258 00:10:02,120 --> 00:10:03,974 اما این در حال حاضر مفید است. 259 00:10:03,974 --> 00:10:05,890 بنابراین این یک برنامه است که رفتن به پیاده سازی 260 00:10:05,890 --> 00:10:07,335 مانند پایگاه داده ثبت شده است. 261 00:10:07,335 --> 00:10:09,710 بنابراین یک پایگاه داده از دانش آموزان، و هر دانش آموز در جهان 262 00:10:09,710 --> 00:10:13,190 یک نام و یک خانه و احتمالا برخی از چیزهای دیگر، اما ما آن را ساده نگه دارید. 263 00:10:13,190 --> 00:10:15,140 هر دانش آموز یک نام و یک خانه است. 264 00:10:15,140 --> 00:10:17,700 >> بنابراین اگر من می خواستم به ارسال نامه برنامه که هدف در زندگی 265 00:10:17,700 --> 00:10:19,860 تنها به تکرار از صفر تا سه، 266 00:10:19,860 --> 00:10:22,070 اگر سه دانشجو وجود دارد در دانشگاه هاروارد. 267 00:10:22,070 --> 00:10:25,350 و من فقط می خواهید برای دریافت، با استفاده از GetString، نام هر دانش آموز و خانه، 268 00:10:25,350 --> 00:10:26,600 و پس از آن فقط آن را چاپ کنید. 269 00:10:26,600 --> 00:10:28,630 >> این نوع مانند هفته یکی، دو هفته مسائل در حال حاضر، 270 00:10:28,630 --> 00:10:30,810 که در آن من فقط می خواهم برای حلقه و یا چیزی شبیه به آن. 271 00:10:30,810 --> 00:10:34,500 و من می خواهم به GetString تماس چند بار، و پس از آن ج چند بار چاپ. 272 00:10:34,500 --> 00:10:37,340 پس چگونه ممکن است من این کار را، هر چند، زمانی که هر دو یک نام و یک خانه 273 00:10:37,340 --> 00:10:39,070 برای هر دانش آموز دارد؟ 274 00:10:39,070 --> 00:10:42,830 >> بنابراین اولین غریزه من ممکن است به انجام چیزی شبیه به این. 275 00:10:42,830 --> 00:10:49,620 من برای اولین بار ممکن است بگویید، خوب، من، می گویند، آرایه ای از رشته به نام نام. 276 00:10:49,620 --> 00:10:51,530 و من hardcode سه اینجا باشم. 277 00:10:51,530 --> 00:10:53,064 چه می خواهند I برای قرار دادن وجود دارد؟ 278 00:10:53,064 --> 00:10:55,730 بنابراین دانش آموزان، چرا که فقط ثابت اعلام شده در بالا، 279 00:10:55,730 --> 00:10:57,860 فقط تا من مجبور به hardcode سه در مکان های متعدد. 280 00:10:57,860 --> 00:11:00,859 به این ترتیب، من می توانم آن را به یک مکان تغییر دهید، و آن را در همه جا تاثیر می گذارد تغییر. 281 00:11:00,859 --> 00:11:04,470 و بعد، من ممکن است انجام رشته خانه دانش آموزان. 282 00:11:04,470 --> 00:11:10,250 >> و در حال حاضر، من ممکن است چیزی شبیه به انجام برای (اعضای هیات من = 0؛ من <دانش آموزان؛ من + +. 283 00:11:10,250 --> 00:11:14,390 پس من تایپ سریع، اما این احتمالا نحو آشنا در حال حاضر. 284 00:11:14,390 --> 00:11:17,030 >> و در حال حاضر، این اخیر بود. 285 00:11:17,030 --> 00:11:22,890 اگر من می خواهم به در i ام قرار داده نام و نام خانوادگی دانش آموز، من فکر می کنم من این کار را. 286 00:11:22,890 --> 00:11:26,480 و پس از آن، نه نام اما خانه های در پرانتز من. 287 00:11:26,480 --> 00:11:29,930 من این کار، GetString، و اجازه دهید من بروید و این خط. 288 00:11:29,930 --> 00:11:30,430 موافق هستید؟ 289 00:11:30,430 --> 00:11:31,200 مخالف؟ 290 00:11:31,200 --> 00:11:32,366 این بسیار کاربر پسند نیست. 291 00:11:32,366 --> 00:11:33,890 من کاربر چه کاری انجام دهید گفت نه. 292 00:11:33,890 --> 00:11:36,520 >> اما در حال حاضر، اگر من هم می خواستم به بعد، اجازه دهید 293 00:11:36,520 --> 00:11:40,060 مثلا چاپ این چیزها out-- تا TODO بعد. 294 00:11:40,060 --> 00:11:42,330 من قصد دارم برای انجام بیشتر با this-- این مسلما نیست. 295 00:11:42,330 --> 00:11:45,970 یک پیاده سازی صحیح گرفتن نام ها و خانه ها، سه 296 00:11:45,970 --> 00:11:48,870 از آنها در مجموع از هر، از یک کاربر. 297 00:11:48,870 --> 00:11:51,280 >> اما این طرح خیلی خوب نیست، درست است؟ 298 00:11:51,280 --> 00:11:55,220 اگر یک دانش آموز است و نه فقط یک نام و یک خانه، بلکه به تعداد ID، 299 00:11:55,220 --> 00:11:57,770 و شماره تلفن، و آدرس ایمیل، 300 00:11:57,770 --> 00:12:00,280 و شاید یک صفحه اصلی، و شاید توییتر دسته، 301 00:12:00,280 --> 00:12:03,730 و هر تعداد از جزئیات دیگر ارتباط با دانش آموز و یا یک شخص، 302 00:12:03,730 --> 00:12:04,610 به طور کلی. 303 00:12:04,610 --> 00:12:07,720 چگونه ما شروع به اضافه قابلیت های این برنامه؟ 304 00:12:07,720 --> 00:12:14,080 >> خوب، من می خواهم ساده ترین راه ممکن است احساس است برای انجام کاری مانند، اجازه دهید بگویم، 305 00:12:14,080 --> 00:12:16,490 اعضای هیات شناسه دانش آموزان. 306 00:12:16,490 --> 00:12:18,380 بنابراین من می توانید تمام شناسه های خود را در آنجا قرار داده است. 307 00:12:18,380 --> 00:12:22,240 و پس از آن، برای چیزی مانند شماره تلفن، 308 00:12:22,240 --> 00:12:24,400 من چگونه به نیستم نمایندگی که فقط رتبهدهی نشده است. 309 00:12:24,400 --> 00:12:30,280 بنابراین اجازه دهید پیش رو و فقط تماس بگیرید این twitters دانش آموزان، که 310 00:12:30,280 --> 00:12:33,550 عجیب و غریب کمی، but-- است و یک دسته زمینه های بیشتر. 311 00:12:33,550 --> 00:12:36,360 >> من شروع کرده به طور موثر کپی و اینجا پیست کنید. 312 00:12:36,360 --> 00:12:39,416 و این است که به رشد بسیار گنده به سرعت، درست است؟ 313 00:12:39,416 --> 00:12:42,290 آیا آن را نمی تواند به خوبی اگر وجود داشت در جهان ساختمان داده شناخته شده 314 00:12:42,290 --> 00:12:45,600 نه به عنوان اعضای هیات و یا یک رشته است، اما چیزی سطح بالاتر، انتزاعی، پس 315 00:12:45,600 --> 00:12:47,570 به صحبت می کنند، شناخته شده به عنوان یک دانش آموز؟ 316 00:12:47,570 --> 00:12:50,220 C با ساخته شده است در آمده است قابلیت برای دانش آموزان، 317 00:12:50,220 --> 00:12:52,260 اما چه می شود اگر من می خواستم به آن را مانند؟ 318 00:12:52,260 --> 00:12:55,640 >> خوب، که معلوم است، من قصد دارم به باز کردن یک فایل به نام structs.h در اینجا، 319 00:12:55,640 --> 00:12:57,090 و شما می توانید دقیقا همان است که انجام دهد. 320 00:12:57,090 --> 00:12:58,290 و ما در حال رفتن به شروع به انجام این در حال حاضر. 321 00:12:58,290 --> 00:13:01,490 و در زیر هود از P مجموعه سه، شما در حال حاضر انجام شده است این در حال حاضر. 322 00:13:01,490 --> 00:13:05,920 هیچ چیز مانند یک گرم نادرست وجود دارد یا بیضی شکل گرم در C. زبان برنامه نویسی 323 00:13:05,920 --> 00:13:10,570 >> مردمی در استنفورد آن اجرا انواع داده با استفاده از این روش در اینجا، 324 00:13:10,570 --> 00:13:13,900 اعلام داده های جدید خود را انواع با استفاده از یک کلمه کلیدی جدید 325 00:13:13,900 --> 00:13:16,744 به نام ساختار و دیگر یکی از typedef نامیده می شود. 326 00:13:16,744 --> 00:13:19,660 و در واقع، حتی اگر نحو به نظر می رسد کمی متفاوت از مسائل 327 00:13:19,660 --> 00:13:23,550 ما قبل از دیده می شود، در اصل، آن را فوق العاده ساده است. 328 00:13:23,550 --> 00:13:25,297 >> این فقط به معنی "تعریف یک نوع." 329 00:13:25,297 --> 00:13:27,255 که برای رفتن به یک ساختار، و ساختار 330 00:13:27,255 --> 00:13:29,400 درست مثل یک ظرف برای چیزهایی های متعدد. 331 00:13:29,400 --> 00:13:31,780 و این ساختار است که به یک رشته به نام نام، 332 00:13:31,780 --> 00:13:33,210 و یک رشته به نام خانه. 333 00:13:33,210 --> 00:13:37,520 و اجازه دهید تماس بگیرید، فقط برای راحتی، این دانش آموز کل ساختار داده ها. 334 00:13:37,520 --> 00:13:40,320 >> بنابراین در حال حاضر شما برای به دست آوردن نقطه و ویرگول، شما در حال حاضر 335 00:13:40,320 --> 00:13:43,280 اطلاعات خود را ایجاد نوع دانشجویی به نام 336 00:13:43,280 --> 00:13:46,420 که در حال حاضر در کنار اعضای هیات مخفف، و شناور، و کاراکتر و رشته، 337 00:13:46,420 --> 00:13:50,270 و گرم نادرست و گرم بیضی شکل و به هر تعداد از چیزهای دیگر مردم را اختراع کرده اند. 338 00:13:50,270 --> 00:13:53,340 >> پس چه در مورد این مفید در حال حاضر این است که اگر من به عقب 339 00:13:53,340 --> 00:13:57,430 به ساختار و 0 به پایان برساند این پیاده سازی، که من نوشت 340 00:13:57,430 --> 00:14:02,080 در پیش در اینجا، توجه کنید که تمام از messiness اجتناب ناپذیر است که 341 00:14:02,080 --> 00:14:05,490 در مورد شروع به اتفاق می افتد که من اضافه شد شماره تلفن ها و twitters و همه 342 00:14:05,490 --> 00:14:07,370 این چیزها دیگر به تعریف دانش آموز، 343 00:14:07,370 --> 00:14:11,810 حال حاضر آن را به اختصار پیچیده فقط به عنوان یک مجموعه ای از دانش آموزان است. 344 00:14:11,810 --> 00:14:15,500 >> و هر یک از این دانش آموزان در حال حاضر چیزهایی چند در داخل آن است. 345 00:14:15,500 --> 00:14:16,930 به طوری که فقط برگ یک سوال. 346 00:14:16,930 --> 00:14:19,700 چگونه می توانم شما را در نام می کنید، و خانه، و ID، 347 00:14:19,700 --> 00:14:21,640 و هر چیز دیگری است در داخل از دانش آموزان؟ 348 00:14:21,640 --> 00:14:22,930 سوپر ساده، و همچنین. 349 00:14:22,930 --> 00:14:25,730 نحو جدید، اما یک ایده ساده است. 350 00:14:25,730 --> 00:14:29,239 >> شما به سادگی شاخص را به آرایه، همانطور که ما در هفته گذشته و این کار را کرد. 351 00:14:29,239 --> 00:14:31,030 و چیزی که به وضوح قطعه جدید از نحو؟ 352 00:14:31,030 --> 00:14:32,590 353 00:14:32,590 --> 00:14:35,880 فقط، که به معنی "به داخل ساختار و گرفتن زمینه نام 354 00:14:35,880 --> 00:14:39,030 نام، دریافت این زمینه به نام خانه، دریافت این زمینه به نام دانش آموز. " 355 00:14:39,030 --> 00:14:41,940 >> بنابراین در P مجموعه سه، اگر شما هنوز هم بر روی آن کار می کند، 356 00:14:41,940 --> 00:14:44,020 و بیشتر مردم هنوز می، متوجه است که شما به عنوان 357 00:14:44,020 --> 00:14:46,130 شروع به استفاده از چیزهایی مانند rects g و بیضی 358 00:14:46,130 --> 00:14:50,201 و چیزهای دیگر که به نظر نمی رسد از هفته صفر، یک، یا دو آمده، 359 00:14:50,201 --> 00:14:52,950 متوجه است که دلیلش این است که دانشگاه استنفورد اعلام برخی از انواع داده های جدید. 360 00:14:52,950 --> 00:14:56,160 >> و در واقع، این دقیقا همان چیزی است که ما خواهیم انجام، و همچنین، در P مجموعه ای چهار، هنگامی که 361 00:14:56,160 --> 00:14:59,880 ما شروع به مقابله با همه چیز مانند تصاویر، بیت مپ ها، و بیشتر. 362 00:14:59,880 --> 00:15:02,882 به طوری که فقط یک تیزر، و یک است مدل ذهنی برای آنچه که به آمده است. 363 00:15:02,882 --> 00:15:04,590 در حال حاضر، من procrastinated کمی این صبح است. 364 00:15:04,590 --> 00:15:09,560 من از نوع کنجکاو برای دیدن چه بود تصویر زمینه مایکروسافت در واقع 365 00:15:09,560 --> 00:15:10,310 به نظر می رسد مانند امروز. 366 00:15:10,310 --> 00:15:15,200 و معلوم کسی در سال 2006 در واقع به رفت و تقریبا دقیقا 367 00:15:15,200 --> 00:15:19,210 همان نقطه برای عکاسی در واقعیت آنچه به نظر می رسد که این روزها. 368 00:15:19,210 --> 00:15:21,380 این رشته در حال حاضر کمی بیش از حد رشد. 369 00:15:21,380 --> 00:15:24,850 >> بنابراین صحبت کردن در حال حاضر از تصاویر، اجازه دهید به ارمغان می آورند Daven اینجا 370 00:15:24,850 --> 00:15:26,890 بر روی صفحه نمایش و نیکلاس، و فقط به شما یادآوری 371 00:15:26,890 --> 00:15:30,540 که اگر شما می خواهم برای پیوستن به ما برای ناهار این جمعه، سر به URL معمول ما 372 00:15:30,540 --> 00:15:31,440 اینجا. 373 00:15:31,440 --> 00:15:33,530 >> تا جایی که ما را ترک نمی کردن در روز دوشنبه؟ 374 00:15:33,530 --> 00:15:35,140 ما معرفی این مشکل، درست است؟ 375 00:15:35,140 --> 00:15:37,610 این به ظاهر درست بود اجرای مبادله، 376 00:15:37,610 --> 00:15:40,460 به موجب آن شما مصرف دو نوع داده int، به نام، به نام ب، 377 00:15:40,460 --> 00:15:44,130 مبادله آنها، درست مانند لورا در اینجا در صحنه با شیر و آب، 378 00:15:44,130 --> 00:15:46,820 با استفاده از یک موقت متغیر، و یا یک فنجان خالی، 379 00:15:46,820 --> 00:15:50,540 به طوری که ما می تواند ب در و در را ب بدون اینکه یک ظرف غذا از همه چیز. 380 00:15:50,540 --> 00:15:51,560 ما یک متغیر استفاده می شود. 381 00:15:51,560 --> 00:15:52,870 این دما نامیده می شود. 382 00:15:52,870 --> 00:15:55,520 >> اما چه اساسی بود مشکل با این کد در روز دوشنبه؟ 383 00:15:55,520 --> 00:15:57,700 384 00:15:57,700 --> 00:15:58,870 مشکل اینجا چه بود؟ 385 00:15:58,870 --> 00:16:00,106 386 00:16:00,106 --> 00:16:00,605 آره. 387 00:16:00,605 --> 00:16:01,970 >> رسید این طول می کشد تا فضای بیشتری. 388 00:16:01,970 --> 00:16:04,719 >> DAVID J. مالان: طول می کشد تا بیشتر فضا، چون من با استفاده از یک متغیر، 389 00:16:04,719 --> 00:16:05,400 و این خوب است. 390 00:16:05,400 --> 00:16:07,300 این درست است، اما من رفتن به می گویند که OK. 391 00:16:07,300 --> 00:16:10,030 این فقط 32 بیت در بزرگ است طرح مسائل، بنابراین یک معامله بزرگ. 392 00:16:10,030 --> 00:16:10,655 دیگر افکار؟ 393 00:16:10,655 --> 00:16:12,572 رسید تنها سواپ متغیرهای محلی. 394 00:16:12,572 --> 00:16:13,571 DAVID J. مالان: دقیقا. 395 00:16:13,571 --> 00:16:15,090 این تنها سواپ متغیرهای محلی. 396 00:16:15,090 --> 00:16:18,173 از آنجا که هر زمان با شما تماس function-- هنگامی که من تا به حال سینی را از آننبرگ 397 00:16:18,173 --> 00:16:19,840 زمان آخرین، شما باید اصلی در پایین. 398 00:16:19,840 --> 00:16:23,560 به محض این که شما یک تابع به نام تماس مبادله، مبادله کند x و y می کنید، 399 00:16:23,560 --> 00:16:24,400 ارزش های اصلی. 400 00:16:24,400 --> 00:16:26,392 چه مبادله گرفتن، آیا ما ادعا می کنند؟ 401 00:16:26,392 --> 00:16:27,100 رسید کپی. 402 00:16:27,100 --> 00:16:28,090 DAVID J. مالان: بنابراین نسخه از آنها را. 403 00:16:28,090 --> 00:16:31,120 بنابراین آن را می شود یک و دو، اگر شما یاد مثال از زمان گذشته، 404 00:16:31,120 --> 00:16:34,730 اما یک کپی از یک و دو که با موفقیت عوض میکنه. 405 00:16:34,730 --> 00:16:38,550 اما متاسفانه در پایان، این ارزش ها هنوز هم همان است. 406 00:16:38,550 --> 00:16:41,880 بنابراین ما می توانیم این کار را با دیدن ما دوست جدید، امیدوارم GDB، 407 00:16:41,880 --> 00:16:45,180 که شما یا TFS و کلسیم دارند شده است شما هدایت به سمت به شرح زیر است. 408 00:16:45,180 --> 00:16:51,210 >> بنابراین هیچ فراخوان مبادله به نظر می رسد like-- اجازه دهید باز کردن this-- به نظر می رسد مثل این. 409 00:16:51,210 --> 00:16:54,160 ما x به دو مقدار دهی اولیه به یک، y است. 410 00:16:54,160 --> 00:16:55,620 اگر یک دسته از چاپ اف است. 411 00:16:55,620 --> 00:16:58,080 اما پس از آن، تماس کلیدی در اینجا بود به مبادله، که 412 00:16:58,080 --> 00:17:00,260 دقیقا ما کد است فقط یک لحظه قبل دیدم. 413 00:17:00,260 --> 00:17:03,180 که در ابتدا درست باشد نگاه، اما عملکرد، 414 00:17:03,180 --> 00:17:06,800 این برنامه کار نمی کند، چون آن به طور دائم x و y مبادله نیست. 415 00:17:06,800 --> 00:17:10,190 >> بنابراین اجازه دهید این را، یک گرم سریع تا اینجا با GDB، ./noswap. 416 00:17:10,190 --> 00:17:11,867 417 00:17:11,867 --> 00:17:15,200 یک دسته از اطلاعات قریب به اتفاق که من در حال حاضر از شر را با کنترل L دریافت کنید. 418 00:17:15,200 --> 00:17:17,516 و در حال حاضر، من قصد دارم به جلو بروید و آن را اجرا کنید. 419 00:17:17,516 --> 00:17:19,349 و متاسفانه، که این بود که مفید نیست. 420 00:17:19,349 --> 00:17:22,355 این برنامه در داخل این فرار برنامه ای به نام GDB، دیباگر، 421 00:17:22,355 --> 00:17:23,730 اما اجازه نداد که من فشار با نوک انگشت در اطراف. 422 00:17:23,730 --> 00:17:26,229 >> پس چگونه می تواند من در واقع مکث اعدام در داخل این برنامه؟ 423 00:17:26,229 --> 00:17:27,410 424 00:17:27,410 --> 00:17:28,329 بنابراین شکستن. 425 00:17:28,329 --> 00:17:32,340 و من می توانم در هر شکستن خط شماره، یک، 10، 15. 426 00:17:32,340 --> 00:17:35,530 اما من همچنین می توانید نمادین شکستن با گفتن اصلی استراحت. 427 00:17:35,530 --> 00:17:38,980 و این که در آینده به راه یک استراحت نقطه، ظاهرا در خط 16 در main. 428 00:17:38,980 --> 00:17:40,050 و در جایی که خط 16 است؟ 429 00:17:40,050 --> 00:17:42,960 اجازه دهید تا به کد و تا به noswap. 430 00:17:42,960 --> 00:17:46,930 و در واقع، خط 16 است بسیار برای اولین بار در برنامه است. 431 00:17:46,930 --> 00:17:52,130 >> بنابراین در حال حاضر، اگر من پیش بروید و نوع اجرای این زمان، را وارد کنید، آن متوقف شد. 432 00:17:52,130 --> 00:17:53,080 بنابراین اجازه دهید فشار با نوک انگشت در اطراف. 433 00:17:53,080 --> 00:17:55,716 چاپ x-- چرا ایکس صفر است؟ 434 00:17:55,716 --> 00:17:56,705 435 00:17:56,705 --> 00:17:57,830 و علامت دلار را نادیده گرفت. 436 00:17:57,830 --> 00:17:59,725 که فقط برای خیال باف استفاده از این برنامه است. 437 00:17:59,725 --> 00:18:00,780 438 00:18:00,780 --> 00:18:03,140 چرا ایکس صفر در حال حاضر است؟ 439 00:18:03,140 --> 00:18:03,640 آره. 440 00:18:03,640 --> 00:18:07,061 >> رسید این درست قبل از متوقف شد خط 16، در واقع نه در خط 16. 441 00:18:07,061 --> 00:18:08,060 DAVID J. مالان: دقیقا. 442 00:18:08,060 --> 00:18:11,630 GDB، به طور پیش فرض، متوقف شده است اعدام درست قبل از خط 16. 443 00:18:11,630 --> 00:18:14,820 پس از آن اجرا کنید، که به معنی x است برخی از ارزش ناشناخته است. 444 00:18:14,820 --> 00:18:17,150 و ما خوش شانس است که آن را کردم چیزی پاک مانند صفر است. 445 00:18:17,150 --> 00:18:20,310 بنابراین در حال حاضر اگر نوع I بعدی، در حال حاضر آن اعدام 16. 446 00:18:20,310 --> 00:18:22,000 این انتظار برای من برای اجرای 17. 447 00:18:22,000 --> 00:18:23,400 اجازه بدهید پیش رو و چاپ ایکس بروید. 448 00:18:23,400 --> 00:18:24,094 این یکی است. 449 00:18:24,094 --> 00:18:25,260 اجازه بدهید پیش رو و چاپ سالانه است. 450 00:18:25,260 --> 00:18:26,176 اکنون چه باید مراجعه کرد؟ 451 00:18:26,176 --> 00:18:27,660 452 00:18:27,660 --> 00:18:28,560 >> رسید [نامفهوم] 453 00:18:28,560 --> 00:18:29,165 >> DAVID J. مالان: A بلندتر کم است. 454 00:18:29,165 --> 00:18:30,040 >> رسید [نامفهوم] 455 00:18:30,040 --> 00:18:30,537 456 00:18:30,537 --> 00:18:32,120 DAVID J. مالان: نه کاملا به اجماع. 457 00:18:32,120 --> 00:18:34,760 بله، ما برخی از ارزش زباله را ببینید. 458 00:18:34,760 --> 00:18:37,862 در حال حاضر، سالانه 134514064 وجود دارد. 459 00:18:37,862 --> 00:18:39,320 خوب، آن را فقط به برخی از ارزش زباله. 460 00:18:39,320 --> 00:18:41,350 برنامه من با استفاده از RAM برای مقاصد مختلف. 461 00:18:41,350 --> 00:18:42,350 در توابع دیگر وجود دارد. 462 00:18:42,350 --> 00:18:44,040 سایر مردم در داخل کامپیوتر من نوشت. 463 00:18:44,040 --> 00:18:46,789 بنابراین کسانی که بیت برای استفاده شده است ارزش های دیگر، و آنچه من از دیدن 464 00:18:46,789 --> 00:18:49,470 بقایای است استفاده از قبل از آن حافظه است. 465 00:18:49,470 --> 00:18:53,350 >> بنابراین هیچ معامله بزرگ است، چرا که به محض که من تایپ بعدی و پس از آن سالانه چاپ، 466 00:18:53,350 --> 00:18:55,640 آن را به مقداردهی اولیه ارزش است که من می خواهم. 467 00:18:55,640 --> 00:18:57,400 بنابراین در حال حاضر، اجازه دهید پیش بروید کمی سریع تر. 468 00:18:57,400 --> 00:18:58,540 N برای آینده. 469 00:18:58,540 --> 00:18:59,570 اجازه دهید دوباره آن را انجام دهد. 470 00:18:59,570 --> 00:19:00,530 اجازه دهید دوباره آن را انجام دهد. 471 00:19:00,530 --> 00:19:02,404 اما من نمی خواهم به ضربه آن را در اینجا، چرا که اگر من 472 00:19:02,404 --> 00:19:05,110 می خواهید برای دیدن آنچه اتفاق افتاده در داخل از مبادله، چه فرمان است؟ 473 00:19:05,110 --> 00:19:05,520 >> رسید مراحل. 474 00:19:05,520 --> 00:19:06,436 >> DAVID J. مالان: مراحل. 475 00:19:06,436 --> 00:19:09,800 پس این من مراحل را به تابع، به جای بیش از آن. 476 00:19:09,800 --> 00:19:12,270 و در حال حاضر، آن را کمی مرموز صادقانه، اما این فقط 477 00:19:12,270 --> 00:19:14,581 به من گفتن من در حال حاضر در خط 33 هستم. 478 00:19:14,581 --> 00:19:15,580 و اجازه دهید این را دوباره انجام دهید. 479 00:19:15,580 --> 00:19:16,080 چاپ درجه حرارت. 480 00:19:16,080 --> 00:19:17,129 481 00:19:17,129 --> 00:19:20,170 ارزش زباله، منفی این زمان، اما این فقط هنوز یک مقدار زباله. 482 00:19:20,170 --> 00:19:22,810 بنابراین اجازه دهید کار را انجام بعدی، دما چاپ. 483 00:19:22,810 --> 00:19:27,130 این تا 1، مقداردهی اولیه، که مقدار x، نام دیگر بود. 484 00:19:27,130 --> 00:19:29,110 >> در حال حاضر، که در آن ما و آینده X از؟ 485 00:19:29,110 --> 00:19:32,510 خوب، اطلاع در اصلی، ما نام این مقادیر x و y. 486 00:19:32,510 --> 00:19:34,740 ما پس از گذشت آنها را به مبادله به شرح زیر است. 487 00:19:34,740 --> 00:19:37,010 X برای اولین بار آمد، کاما y است. 488 00:19:37,010 --> 00:19:40,020 و پس از آن، مبادله می تواند آنها را x و y تماس بگیرید. 489 00:19:40,020 --> 00:19:42,630 اما برای وضوح، آن را تماس آنها a و b. 490 00:19:42,630 --> 00:19:45,970 اما a و b در حال حاضر برای رفتن به کپی از x و y به دست آمد. 491 00:19:45,970 --> 00:19:50,660 >> بنابراین اگر من به بازگشت به GDB، دما در حال حاضر یک و در حال حاضر یکی. 492 00:19:50,660 --> 00:19:56,130 اما اگر من در کنار و در حال حاضر انجام چاپ ، در حال حاضر بیش از نقل مکان کرد. 493 00:19:56,130 --> 00:20:00,030 شیر شده است را به سابق ریخت شیشه آب پرتقال، و یا بالعکس. 494 00:20:00,030 --> 00:20:04,750 >> و اگر من بعد دوباره، و در حال حاضر اگر من نسخه قابل چاپ کردن به عنوان یک چک سلامت عقل، 495 00:20:04,750 --> 00:20:07,687 هنوز هم دو، اما ب در حال حاضر یکی. 496 00:20:07,687 --> 00:20:08,770 صادقانه بگویم، هنوز هم وجود دارد. 497 00:20:08,770 --> 00:20:10,670 برای من مهم نیست که چه دما است. 498 00:20:10,670 --> 00:20:16,850 اما به محض من در حال حاضر تایپ، اجازه دهید بگویم، ادامه برای رفتن به عقب، در حال حاضر من در پایان هستم 499 00:20:16,850 --> 00:20:17,480 برنامه. 500 00:20:17,480 --> 00:20:20,730 و متاسفانه، x است هنوز هم یکی و y است که هنوز هم دو. 501 00:20:20,730 --> 00:20:22,272 >> پس چه استفاده از GDB وجود دارد؟ 502 00:20:22,272 --> 00:20:23,980 آن را نداشت من ثابت مشکل در هر سه، 503 00:20:23,980 --> 00:20:26,265 اما امیدوارم به من کمک درک آن را تحقق 504 00:20:26,265 --> 00:20:30,000 که بله، منطق من درست است، اما کد من این است که در نهایت داشتن نیست 505 00:20:30,000 --> 00:20:31,450 تاثیر دائمی است. 506 00:20:31,450 --> 00:20:34,570 به طوری که مشکل ما است رفتن به امروز در حال حاضر حل کند. 507 00:20:34,570 --> 00:20:37,870 >> اما اجازه دهید وجود دارد از طریق این. 508 00:20:37,870 --> 00:20:39,230 عبارات دروغ است. 509 00:20:39,230 --> 00:20:41,860 این، بیش از حد، نه نوع داده که در C. وجود دارد این 510 00:20:41,860 --> 00:20:44,750 مترادف برای برخی بوده است زمان برای چیزی دیگر، 511 00:20:44,750 --> 00:20:47,300 و ما می توانیم نشان می دهد که به شرح زیر است. 512 00:20:47,300 --> 00:20:53,282 >> اجازه بدهید من به جلو و باز کردن برنامه مقایسه-0 نام. 513 00:20:53,282 --> 00:20:56,240 و به جای تایپ این یکی از، ما شروع به از طریق کد راه رفتن 514 00:20:56,240 --> 00:20:58,040 من در حال حاضر نوشته است، اما این چند خط تنها. 515 00:20:58,040 --> 00:20:59,570 بنابراین این مقایسه-0. 516 00:20:59,570 --> 00:21:02,380 و اولین چیزی که من انجام می دهند گرفتن یک خط از متن. 517 00:21:02,380 --> 00:21:05,610 >> اما متوجه آنچه که من هستم انجام برای اولین بار. 518 00:21:05,610 --> 00:21:07,910 تفاوت وضوح در مورد خط 21 است؟ 519 00:21:07,910 --> 00:21:10,020 520 00:21:10,020 --> 00:21:11,402 در واقع، یک دقیقه صبر کنید. 521 00:21:11,402 --> 00:21:12,110 این نسخه دو است. 522 00:21:12,110 --> 00:21:13,568 این است که حتی برنامه درست نیست. 523 00:21:13,568 --> 00:21:14,780 همه حق است، هشدار ضربه. 524 00:21:14,780 --> 00:21:16,890 همه حق است، پس فراموش نکنید که. 525 00:21:16,890 --> 00:21:18,520 این پاسخ به یک سوال آینده است. 526 00:21:18,520 --> 00:21:21,450 >> در اینجا مقایسه-0 است، و من در مورد به دست آوردن یک خط از متن. 527 00:21:21,450 --> 00:21:22,435 برنامه بسیار ساده تر. 528 00:21:22,435 --> 00:21:23,560 پس این سر راست است. 529 00:21:23,560 --> 00:21:28,070 این مثل هفته یکی، دو هفته مسائل در حال حاضر. رشته s = GetString. 530 00:21:28,070 --> 00:21:29,700 در حال حاضر، من آن را دوباره پایین در اینجا می گویند. 531 00:21:29,700 --> 00:21:31,830 رشته تی = GetString. 532 00:21:31,830 --> 00:21:35,300 و پس از آن، آخرین چیزی که در این برنامه، به عنوان نام آن نشان می دهد، 533 00:21:35,300 --> 00:21:37,090 است من قصد دارم سعی کنید به آنها را مقایسه کنید. 534 00:21:37,090 --> 00:21:40,709 >> بنابراین اگر، در رشته اول، برابر با = تی، پس من هستم 535 00:21:40,709 --> 00:21:42,250 رفتن به می گویند شما از نوع همین. 536 00:21:42,250 --> 00:21:44,291 دیگری، من قصد دارم برای گفتن شما چیزهای مختلف را تایپ کنید. 537 00:21:44,291 --> 00:21:45,880 بنابراین اجازه دهید کامپایل و اجرای این برنامه است. 538 00:21:45,880 --> 00:21:48,481 بنابراین مقایسه صفر را. 539 00:21:48,481 --> 00:21:48,980 به نظر می رسد خوب است. 540 00:21:48,980 --> 00:21:50,490 بدون خطا کامپایل. 541 00:21:50,490 --> 00:21:52,386 >> اجازه بدهید من به جلو ساعت و نوع ./compare-0. 542 00:21:52,386 --> 00:21:55,230 543 00:21:55,230 --> 00:21:59,220 اجازه بدهید من به جلو و چیزی می گویند : Daven و چیزی: راب. 544 00:21:59,220 --> 00:22:00,450 و من چیز های مختلف تایپ کنید. 545 00:22:00,450 --> 00:22:01,250 تا کنون، خیلی خوب است. 546 00:22:01,250 --> 00:22:02,680 برنامه به نظر می رسد درست باشد. 547 00:22:02,680 --> 00:22:03,880 >> اما اجازه دهید دوباره آن را اجرا کنید. 548 00:22:03,880 --> 00:22:05,800 بگو چیزی: گیب. 549 00:22:05,800 --> 00:22:07,140 بگو چیزی: گیب. 550 00:22:07,140 --> 00:22:08,520 551 00:22:08,520 --> 00:22:09,020 خوب. 552 00:22:09,020 --> 00:22:10,851 شاید من ضربه نوار فضا و یا چیزی بد بو. 553 00:22:10,851 --> 00:22:11,600 اجازه دهید دوباره آن را انجام دهد. 554 00:22:11,600 --> 00:22:13,020 بنابراین Zamyla. 555 00:22:13,020 --> 00:22:13,970 556 00:22:13,970 --> 00:22:14,470 Zamyla. 557 00:22:14,470 --> 00:22:15,740 558 00:22:15,740 --> 00:22:17,330 همه چیز متفاوت است. 559 00:22:17,330 --> 00:22:19,430 پس چه می گذرد؟ 560 00:22:19,430 --> 00:22:23,200 >> بنابراین ما باید این دو خط از کد، GetString دو بار به نام. 561 00:22:23,200 --> 00:22:25,760 و پس از آن، من به سادگی هستم تلاش برای مقایسه s و t. 562 00:22:25,760 --> 00:22:28,370 اما چیزی که واقعا پس از آن در جریان است؟ 563 00:22:28,370 --> 00:22:31,180 خوب، دست خط من در مورد به قصاب این مثال تا حدودی. 564 00:22:31,180 --> 00:22:34,630 و اجازه دهید در واقع پرتاب این تا اینجا، و همچنین. 565 00:22:34,630 --> 00:22:37,390 566 00:22:37,390 --> 00:22:45,712 >> بنابراین ما باید یک خط مانند رشته s = GetString. 567 00:22:45,712 --> 00:22:48,295 به طوری که به سادگی اولین خط جالب از برنامه است. 568 00:22:48,295 --> 00:22:49,920 569 00:22:49,920 --> 00:22:52,974 اما آنچه تمام این مدت بوده است در رفتن در زیر هود؟ 570 00:22:52,974 --> 00:22:55,890 خوب، در سمت چپ رشته، که برخی از نوع متغیر است، 571 00:22:55,890 --> 00:22:56,785 و آن را به نام است. 572 00:22:56,785 --> 00:23:00,019 بنابراین من می دانم که این با استفاده از حافظه، و یا RAM، در کامپیوتر من به نحوی. 573 00:23:00,019 --> 00:23:02,060 من می خواهم به مجرد رسم است که به عنوان یک مربع است. 574 00:23:02,060 --> 00:23:04,820 32 بیت، که معلوم است، اما بیشتر در مورد که در آینده است. 575 00:23:04,820 --> 00:23:06,410 و پس از آن، چه خبر است اینجا؟ 576 00:23:06,410 --> 00:23:08,700 >> خب، بدیهی است که GetString می شود یک رشته از کاربر. 577 00:23:08,700 --> 00:23:11,360 و GetString کردم Zamyla یا گیب و یا Daven. 578 00:23:11,360 --> 00:23:14,640 بنابراین اجازه دهید اول را انتخاب کنید از این که Daven بود. 579 00:23:14,640 --> 00:23:19,174 بنابراین به طور موثر، چه GetString کردم من در این مورد برای اولین بار از D--V-الکترونیکی نفر بود. 580 00:23:19,174 --> 00:23:22,690 581 00:23:22,690 --> 00:23:25,045 و پس از آن، چه چیز دیگری را انجام داد آن مخفیانه به من بدهید؟ 582 00:23:25,045 --> 00:23:25,920 رسید [نامفهوم] 583 00:23:25,920 --> 00:23:28,720 DAVID J. مالان: آره، / 0 یا null شخصیت. 584 00:23:28,720 --> 00:23:30,550 پس از آن به طور موثر یک رشته به من داد. 585 00:23:30,550 --> 00:23:34,550 اما ما در حال حاضر از قبل می دانیم به نظر می رسد که یک رشته فقط یک آرایه است 586 00:23:34,550 --> 00:23:37,895 از شخصیت، و آن را توسط خاتمه این شخصیت نگهبان ویژه، / 0. 587 00:23:37,895 --> 00:23:39,220 588 00:23:39,220 --> 00:23:42,310 >> اما اگر این درست است و این یک مربع است، 589 00:23:42,310 --> 00:23:44,160 این است که به وضوح یک مستطیل بسیار بزرگتر است. 590 00:23:44,160 --> 00:23:46,830 و در واقع، این است که، من ادعا می کنند، تنها 32 بیت. 591 00:23:46,830 --> 00:23:49,500 و این است که به وضوح بیش از 32 بیت، به دلیل این است که احتمالا 592 00:23:49,500 --> 00:23:51,583 هشت به اضافه هشت به اضافه هشت به علاوه هشت به اضافه هشت، 593 00:23:51,583 --> 00:23:53,320 فقط به خاطر اینکه از بایت در ASCII. 594 00:23:53,320 --> 00:23:57,030 چگونه هک می خواهیم به جا Daven در این جعبه کوچک که اینجا هستید؟ 595 00:23:57,030 --> 00:23:59,880 >> خب، آنچه که در واقع انجام GetString؟ 596 00:23:59,880 --> 00:24:03,680 خوب، این شبکه در اینجا نشان دهنده حافظه کامپیوتر من یا RAM. 597 00:24:03,680 --> 00:24:07,564 بنابراین اجازه دهید به دلخواه می گویند که اگر هر یک از این نشان دهنده یک بایت، 598 00:24:07,564 --> 00:24:09,730 پس ما می توانیم هر یک از فکر می کنم بایت به عنوان داشتن یک آدرس، 599 00:24:09,730 --> 00:24:13,830 مانند 33 خیابان آکسفورد، و یا 34 خیابان آکسفورد، و یا 35 خیابان آکسفورد. 600 00:24:13,830 --> 00:24:16,700 >> بنابراین درست مانند خانه ها دارای آدرس و ساختمان های دارای آدرس، 601 00:24:16,700 --> 00:24:19,810 این کار را انجام بایت فردی حافظه آدرس یا شماره 602 00:24:19,810 --> 00:24:21,042 که منحصر به فرد آنها را تشخیص دهد. 603 00:24:21,042 --> 00:24:22,000 در حال حاضر، این اختیاری است. 604 00:24:22,000 --> 00:24:25,370 اما برای نگه داشتن آن ساده است، من قصد دارم به استفاده از مبنای شانزده فقط با کنوانسیون، 605 00:24:25,370 --> 00:24:28,200 اما 0x نمایش به معنای چیزی دیگر از "این مبنای شانزده است." 606 00:24:28,200 --> 00:24:31,030 و من قصد دارم به ادعا می کنند که "D" به پایان می رسد تا در بایت یکی در حافظه است. 607 00:24:31,030 --> 00:24:34,210 >> من هیچ چیز دیگری که در رو حافظه، بنابراین Daven کردم نقطه اول 608 00:24:34,210 --> 00:24:35,509 در بایت یکی. 609 00:24:35,509 --> 00:24:36,800 این، پس از آن، در حال رفتن به 0x2. 610 00:24:36,800 --> 00:24:37,831 611 00:24:37,831 --> 00:24:38,705 این است که رفتن به 0x3. 612 00:24:38,705 --> 00:24:39,840 613 00:24:39,840 --> 00:24:41,800 این است که رفتن به 0x4. 614 00:24:41,800 --> 00:24:43,025 این است که رفتن به 0x5. 615 00:24:43,025 --> 00:24:44,025 این است که رفتن به 0x6. 616 00:24:44,025 --> 00:24:45,560 617 00:24:45,560 --> 00:24:48,290 >> اما هنگامی که شما شروع به فکر کردن در مورد چه انجام این کار کامپیوتر 618 00:24:48,290 --> 00:24:50,710 در زیر هود، شما شروع می تواند به استنباط 619 00:24:50,710 --> 00:24:54,960 چگونه شما، چند سال پیش، که اند C خود را اجرا. 620 00:24:54,960 --> 00:24:58,360 GetString احتمالا چیست returning-- به دلیل آن 621 00:24:58,360 --> 00:25:00,946 احساس می کند مانند آن را بازگشت Daven، فی نفسه، 622 00:25:00,946 --> 00:25:03,320 چرا که او قطعا نمی به جا در این box-- کمی 623 00:25:03,320 --> 00:25:05,090 بنابراین آنچه که GetString احتمالا از بازگشت؟ 624 00:25:05,090 --> 00:25:07,958 625 00:25:07,958 --> 00:25:08,920 >> رسید [نامفهوم] 626 00:25:08,920 --> 00:25:10,540 >> DAVID J. مالان: محل Daven. 627 00:25:10,540 --> 00:25:12,770 و آن را به انجام این کار از زمانی که هفته یکی. 628 00:25:12,770 --> 00:25:16,150 چه GetString واقعا بازگشت یک رشته، به خودی نیست. 629 00:25:16,150 --> 00:25:17,780 این یکی از دروغ های کوچک سفید است. 630 00:25:17,780 --> 00:25:22,520 این بازگشت آدرس رشته در حافظه، آدرس منحصر به فرد. 631 00:25:22,520 --> 00:25:24,820 Daven در 33 خیابان آکسفورد زندگی می کند. 632 00:25:24,820 --> 00:25:29,310 اما به طور خلاصه تر، گاوین زندگی می کند در 0x1، نشانی شماره یک. 633 00:25:29,310 --> 00:25:32,280 >> پس چه می شود در این قرار داده جعبه کوچک پس از آن، به روشنی، 634 00:25:32,280 --> 00:25:35,930 فقط آدرس آن رشته است. 635 00:25:35,930 --> 00:25:38,110 بنابراین تمام این مدت، این در جریان بوده است. 636 00:25:38,110 --> 00:25:41,650 اما آنچه این نکات در در حال حاضر این است که اگر همه این است 637 00:25:41,650 --> 00:25:44,710 تعداد در داخل از آن، که در است برای متوقف کردن تو، برنامه نویس، 638 00:25:44,710 --> 00:25:47,970 از قرار دادن هر تعداد در هر متغیر و فقط پریدن 639 00:25:47,970 --> 00:25:49,080 به تکه از حافظه؟ 640 00:25:49,080 --> 00:25:51,320 و در واقع، خواهیم دید که یک دفعه بعد تهدید است. 641 00:25:51,320 --> 00:25:53,500 >> اما در حال حاضر، این احساس کافی نیست. 642 00:25:53,500 --> 00:25:55,630 اگر من می گویم، به من رشته، تو به من Daven دهد. 643 00:25:55,630 --> 00:25:57,230 اما شما واقعا به من Daven دهد. 644 00:25:57,230 --> 00:25:59,310 همه شما به من آدرس Daven است. 645 00:25:59,310 --> 00:26:04,310 چگونه می توانم پس از آن برای اطمینان که در آن Daven آغاز می شود و ends-- 646 00:26:04,310 --> 00:26:07,140 داستان از گرفتن weird-- که در آن Daven شروع می شود و به پایان می رسد، 647 00:26:07,140 --> 00:26:10,435 و پس از آن، بعد از رشته در حافظه شروع می شود؟ 648 00:26:10,435 --> 00:26:11,520 649 00:26:11,520 --> 00:26:13,620 >> خوب، اگر شما در حال توزیع من از آغاز Daven، 650 00:26:13,620 --> 00:26:17,230 اساسا، چگونه من می دانم که در آن پایان نام خود را است؟ 651 00:26:17,230 --> 00:26:20,550 این کاراکتر تهی خاص، که همه مهم تر 652 00:26:20,550 --> 00:26:23,040 اگر رشته زیر هود به سادگی شناسایی 653 00:26:23,040 --> 00:26:25,820 منحصر به فرد از مکان آنها در حافظه است. 654 00:26:25,820 --> 00:26:28,130 بنابراین تمام این مدت، که آنچه در جریان بوده است. 655 00:26:28,130 --> 00:26:32,470 >> بنابراین، هنگامی که ما در حال حاضر در کد اینجا، توضیح 656 00:26:32,470 --> 00:26:35,790 اگر شما که اشکال در خط 26. 657 00:26:35,790 --> 00:26:39,560 چرا Zamyla و Zamyla متفاوت است؟ 658 00:26:39,560 --> 00:26:41,330 چرا گیب و گیب متفاوت است؟ 659 00:26:41,330 --> 00:26:42,154 بله، در پشت. 660 00:26:42,154 --> 00:26:43,390 >> رسید آنها آدرس های مختلف داشته باشد. 661 00:26:43,390 --> 00:26:45,931 >> DAVID J. مالان: نگران نباشید، زیرا آنها آدرس های مختلف. 662 00:26:45,931 --> 00:26:48,820 چرا که وقتی به GetString تماس بگیرید دوباره، که من به سرعت در اینجا، 663 00:26:48,820 --> 00:26:52,870 در صورتی که این خط دوم، رشته است تی، که من در آن برنامه بود، 664 00:26:52,870 --> 00:26:55,030 برابر تماس دیگر به GetString. 665 00:26:55,030 --> 00:26:56,370 666 00:26:56,370 --> 00:26:58,670 دفعه بعد من تماس بگیرید GetString، من قصد دارم 667 00:26:58,670 --> 00:27:00,190 برای به دست آوردن یک تکه مختلف از حافظه است. 668 00:27:00,190 --> 00:27:02,220 >> GetString مجاز است به درخواست عامل 669 00:27:02,220 --> 00:27:03,800 سیستم برای بیشتر و بیشتر حافظه است. 670 00:27:03,800 --> 00:27:07,894 این قصد ندارم به استفاده مجدد از همان شش بایت هر زمان تنها. 671 00:27:07,894 --> 00:27:09,810 این رفتن به یک جدید تکه از حافظه، که 672 00:27:09,810 --> 00:27:12,780 به معنی تن است رفتن به دریافت برخی از ارزش های دیگر بیش از اینجا. 673 00:27:12,780 --> 00:27:15,380 >> بنابراین، هنگامی که من انجام می دهم ها برابر است با = تی، شما مقایسه کنید 674 00:27:15,380 --> 00:27:17,880 D در برابر این و در برابر این و V در برابر این. 675 00:27:17,880 --> 00:27:19,588 شما مقایسه این در برابر این، که 676 00:27:19,588 --> 00:27:24,020 رک و پوست کنده useless-- بسیار useful-- است کاملا بی فایده است، چون که واقعا 677 00:27:24,020 --> 00:27:25,830 مراقبت که در آن رشته در حافظه هستند؟ 678 00:27:25,830 --> 00:27:26,850 >> و در واقع، ما ندارد. 679 00:27:26,850 --> 00:27:28,980 و ما به نمی شروع به خصوص مراقبت. 680 00:27:28,980 --> 00:27:34,180 تنها تا آن حد است که اشکالات می تواند بوجود می آیند و تهدیدات امنیتی می تواند اراده بوجود می آیند 681 00:27:34,180 --> 00:27:36,100 ما در واقع شروع به در مورد این مراقبت. 682 00:27:36,100 --> 00:27:37,230 بنابراین اجازه دهید این مشکل را حل کنند. 683 00:27:37,230 --> 00:27:39,650 معلوم است، شما آن را حل فوق العاده به سادگی. 684 00:27:39,650 --> 00:27:42,600 >> و اجازه دهید در واقع، قبل از من نشان می دهد که دوباره، چه 685 00:27:42,600 --> 00:27:47,170 شما اگر در یک کلاس CS50 انجام دهید، و شما تا به حال برای پیاده سازی 686 00:27:47,170 --> 00:27:48,600 یک مقایسه در برابر دو رشته. 687 00:27:48,600 --> 00:27:51,440 شما به وضوح نه تنها می تواند استفاده کنندگان برابر با = تی. 688 00:27:51,440 --> 00:27:54,090 اما فقط منطقی چگونه، این رشته شما مقایسه 689 00:27:54,090 --> 00:27:56,370 در برابر این رشته با استفاده از کد C؟ 690 00:27:56,370 --> 00:27:56,880 آره. 691 00:27:56,880 --> 00:27:58,780 >> رسید فقط انجام برای حلقه [نامفهوم] 692 00:27:58,780 --> 00:28:00,670 693 00:28:00,670 --> 00:28:01,670 DAVID J. مالان: کامل. 694 00:28:01,670 --> 00:28:02,900 رسید [نامفهوم] 695 00:28:02,900 --> 00:28:03,310 DAVID J. مالان: آره. 696 00:28:03,310 --> 00:28:05,390 فقط برای حلقه یا استفاده از یک در حالی که حلقه یا هر چیز دیگری. 697 00:28:05,390 --> 00:28:08,710 اما فقط ایده اولیه اعمال می شود که اگر این یک تکه از حافظه یا آرایه ای است 698 00:28:08,710 --> 00:28:11,590 و این است، تکرار بیش از هر دو در همان زمان. 699 00:28:11,590 --> 00:28:12,960 و فقط حروف مقایسه کنید. 700 00:28:12,960 --> 00:28:14,260 >> و شما رو به یک کمی دقت کنید، شما 701 00:28:14,260 --> 00:28:16,247 انجام یک انگشت را نمی خواهم به گذشته دیگر 702 00:28:16,247 --> 00:28:18,080 چرا که یک رشته است طولانی تر از دیگر. 703 00:28:18,080 --> 00:28:21,380 بنابراین شما در حال رفتن به می خواهم برای بررسی این مقدار خاص در پایان، تهی. 704 00:28:21,380 --> 00:28:24,017 اما واقعا، در پایان، به همین سادگی است. 705 00:28:24,017 --> 00:28:26,100 و رک و پوست کنده، ما لازم نیست برای دوباره نویسی است که چرخ. 706 00:28:26,100 --> 00:28:27,960 در اینجا نسخه دو است. 707 00:28:27,960 --> 00:28:32,910 و چیزی که من قصد دارم برای گفتن این است که به جای مقایسه ها برابر است با = t، 708 00:28:32,910 --> 00:28:38,964 من به جای رفتن به می گویند، اگر رشته مقایسه ها با کاما تی برابر با = 0. 709 00:28:38,964 --> 00:28:40,130 در حال حاضر، آنچه که رشته مقایسه کرد؟ 710 00:28:40,130 --> 00:28:43,046 >> به نظر می رسد، آن را به یک تابع است که همراه با C، که هدف در زندگی 711 00:28:43,046 --> 00:28:44,650 مقایسه دو رشته. 712 00:28:44,650 --> 00:28:48,300 و هم بزنید مقایسه، اگر ما به عنوان خوانده شده خود را صفحه مرد یا اسناد و یا CS50 713 00:28:48,300 --> 00:28:50,630 مرجع، آن را به سادگی به شما بگویم که به هم بزنید 714 00:28:50,630 --> 00:28:55,730 مقایسه بازده یا منفی تعداد یا تعداد صفر یا مثبت، 715 00:28:55,730 --> 00:28:57,660 که در آن صفر به معنی آنها برابر است. 716 00:28:57,660 --> 00:28:58,570 >> پس فقط حدس. 717 00:28:58,570 --> 00:29:00,390 اگر چه ممکن است به معنای آن هم بزنید بازده مقایسه 718 00:29:00,390 --> 00:29:02,110 ارزش منفی یا مثبت؟ 719 00:29:02,110 --> 00:29:02,785 720 00:29:02,785 --> 00:29:04,285 رسید بزگتر یا کمتر از. 721 00:29:04,285 --> 00:29:05,570 DAVID J. مالان: آره، بزرگتر یا کمتر از. 722 00:29:05,570 --> 00:29:08,640 بنابراین اگر شما می خواهید مرتب سازی بر اساس یک کل دسته ای از رشته ها در یک dictionary-- 723 00:29:08,640 --> 00:29:12,975 که ما خواهد شد در نهایت به پایین road-- عملکرد مناسب برای استفاده به طور بالقوه، 724 00:29:12,975 --> 00:29:15,850 چرا که آن را برای انجام این کار مقایسه رشته ها را برای شما، و به 725 00:29:15,850 --> 00:29:20,060 شما می کند می آید قبل از ب، و یا می کند ب قبل از حروف الفبا آمده است. 726 00:29:20,060 --> 00:29:21,490 ما دقیقا همان است که می توانید انجام دهید. 727 00:29:21,490 --> 00:29:23,620 >> و متوجه من یکی دیگر را انجام داد چیزی که در این مثال. 728 00:29:23,620 --> 00:29:26,870 چه چیز دیگری تغییر کرده است بالاتر در این تابع اصلی؟ 729 00:29:26,870 --> 00:29:28,500 730 00:29:28,500 --> 00:29:29,350 کاراکتر *. 731 00:29:29,350 --> 00:29:31,150 و این که دروغ سفید دیگر است. 732 00:29:31,150 --> 00:29:33,750 در تمام این مدت، هنگامی که شما ام نوشتن رشته، 733 00:29:33,750 --> 00:29:38,350 ما مخفیانه بازنویسی شده است رشته را به عنوان کاراکتر * به طوری که صدای شیپور در واقع 734 00:29:38,350 --> 00:29:39,270 شما درک می کند. 735 00:29:39,270 --> 00:29:42,450 >> به عبارت دیگر، در CS50.h و همانطور که ما در نهایت خواهید دید، 736 00:29:42,450 --> 00:29:45,950 ما مترادف نام رشته که همان چیزی که به عنوان کاراکتر * است. 737 00:29:45,950 --> 00:29:49,910 و در حال حاضر، تنها که می دانم * در این زمینه، حداقل، 738 00:29:49,910 --> 00:29:51,286 این معنی است که آدرس. 739 00:29:51,286 --> 00:29:52,210 >> آدرس از چه؟ 740 00:29:52,210 --> 00:29:56,390 خوب، این واقعیت است که من گفتم * کاراکتر، و * اعضای هیات و یا شناور *، 741 00:29:56,390 --> 00:30:00,820 بدان معنی است که کاراکتر * می باشد آدرس یک کاراکتر. 742 00:30:00,820 --> 00:30:06,770 پس از این کادر کوچک، با نام مستعار رشته، واقعا از نوع char *، 743 00:30:06,770 --> 00:30:10,490 که به سادگی راه فانتزی گفتن است، در این جعبه یک آدرس بروید. 744 00:30:10,490 --> 00:30:12,430 و آنچه که آدرس برای اشاره؟ 745 00:30:12,430 --> 00:30:13,780 ظاهرا، کاراکتر. 746 00:30:13,780 --> 00:30:16,410 >> اما ما می تواند کاملا باید اعضای هیات * و چیزهای دیگر. 747 00:30:16,410 --> 00:30:20,790 اما در حال حاضر، کاراکتر * واقعا بیشتر سر راست و یکی از علاقه. 748 00:30:20,790 --> 00:30:23,310 بنابراین این مشکل در جریان است به افزایش است، هر چند، دوباره. 749 00:30:23,310 --> 00:30:24,830 >> فرض کنید من باز کردن این برنامه است. 750 00:30:24,830 --> 00:30:27,670 بیایید ببینیم که اگر در حال حاضر ما می توانیم پیش بینی چه چیزی اشتباه است با این کد. 751 00:30:27,670 --> 00:30:31,140 بنابراین در این برنامه، کپی-0، I هستم رفتن به پیش بروید و دوباره تماس بگیرید 752 00:30:31,140 --> 00:30:34,190 GetString و ذخیره ارزش در ثانیه. 753 00:30:34,190 --> 00:30:38,800 >> و پس از آن، چرا من این کار، فقط به عنوان یک یادآوری از هفته گذشته؟ 754 00:30:38,800 --> 00:30:40,960 ما می گویند که GetString گاهی اوقات null بر می گردد. 755 00:30:40,960 --> 00:30:42,793 چه اگر منظور GetString به null؟ 756 00:30:42,793 --> 00:30:45,040 757 00:30:45,040 --> 00:30:46,034 چیزی را اشتباه رفت. 758 00:30:46,034 --> 00:30:48,950 این احتمالا به معنی رشته است بیش از حد بزرگ، از کامپیوتر از حافظه است. 759 00:30:48,950 --> 00:30:51,724 این اتفاق می افتد فوق العاده، فوق العاده، فوق العاده به ندرت، اما می تواند اتفاق می افتد. 760 00:30:51,724 --> 00:30:53,890 ما می خواهیم برای آن را بررسی کنید، و همه ما در حال انجام است. 761 00:30:53,890 --> 00:30:57,910 >> از آنجا که ما در حال حاضر را مشاهده کنید، اگر شما نمی شروع چک کردن عادت برای همه چیز 762 00:30:57,910 --> 00:31:00,870 مثل تهی، شما ممکن است در واقع شروع به 763 00:31:00,870 --> 00:31:03,106 به آدرس در حافظه بی اعتبار می باشد. 764 00:31:03,106 --> 00:31:05,980 و شما شروع کنید به پیش ببرند بیشتر و بیشتر گسل تقسیم بندی. 765 00:31:05,980 --> 00:31:08,360 یا در مک و یا PC، فقط ایجاد یک کامپیوتر به چسبیدن به 766 00:31:08,360 --> 00:31:10,340 و یا برنامه ای برای مسدود کردن، به طور بالقوه. 767 00:31:10,340 --> 00:31:14,930 >> بنابراین در حال حاضر، من در کپی 0.c ادعا می کنند، که من رفتن به کپی این رشته ها از طریق 768 00:31:14,930 --> 00:31:15,685 از خط 28. 769 00:31:15,685 --> 00:31:16,850 770 00:31:16,850 --> 00:31:18,750 و پس از آن، من قصد دارم ادعا در پایین 771 00:31:18,750 --> 00:31:21,430 در اینجا است که من قصد دارم یکی از آنها را تغییر دهید. 772 00:31:21,430 --> 00:31:22,330 >> بنابراین این اطلاع می دهد. 773 00:31:22,330 --> 00:31:24,370 من خواستار دوستان strlen قدیمی ما. 774 00:31:24,370 --> 00:31:28,960 و فقط به زبان انگلیسی توضیح آنچه این خط 34 در حال انجام است؟ 775 00:31:28,960 --> 00:31:32,480 چه تی براکت 0 نشان دهنده در سمت چپ. 776 00:31:32,480 --> 00:31:32,980 آره. 777 00:31:32,980 --> 00:31:34,339 >> رسید حرف اول از تی؟ 778 00:31:34,339 --> 00:31:35,880 DAVID J. مالان: شخصیت اول از تی. 779 00:31:35,880 --> 00:31:36,379 که در آن است. 780 00:31:36,379 --> 00:31:40,024 شخصیت اول از تی، من می خواهم به او واگذار نسخه بزرگ 781 00:31:40,024 --> 00:31:41,190 اولین حرف در تی. 782 00:31:41,190 --> 00:31:43,200 بنابراین این سرمایه گذاری حرف اول. 783 00:31:43,200 --> 00:31:46,340 و پس از آن، آخرین چیزی که من انجام در این برنامه این است که من ادعا می کنند در اینجا 784 00:31:46,340 --> 00:31:50,340 اصلی، این، و در اینجا کپی، تی است. 785 00:31:50,340 --> 00:31:54,610 >> اما بر اساس داستان ما فقط گفت در مورد آنچه که رشته واقعا هستند، 786 00:31:54,610 --> 00:31:57,520 خط 28 واقعا است انجام می دهند، و آنچه 787 00:31:57,520 --> 00:31:59,405 اشکال ناشی رفتن به بر روی صفحه نمایش می شود؟ 788 00:31:59,405 --> 00:32:01,300 789 00:32:01,300 --> 00:32:03,500 >> پس اول، سوال اول، 28. 790 00:32:03,500 --> 00:32:09,040 چه رشته ای تی = واقعا انجام می دهند؟ 791 00:32:09,040 --> 00:32:16,430 اگر ما در سمت چپ دست اند سمت در اینجا رشته = t و بازدید کنندگان. 792 00:32:16,430 --> 00:32:19,400 که به من می دهد یک جعبه در اینجا و در یک جعبه اینجا. 793 00:32:19,400 --> 00:32:25,530 و فرض کنید این آدرس 0x نمایش است، اجازه دهید بگویم، 50 این زمان، خودسرانه. 794 00:32:25,530 --> 00:32:28,847 چه رشته ای تی = بازدید کنندگان در زیر هود انجام دهید؟ 795 00:32:28,847 --> 00:32:30,340 >> رسید [نامفهوم] 796 00:32:30,340 --> 00:32:34,100 >> DAVID J. مالان: این حافظه ذخیره می آدرس وجود دارد، بنابراین وجود دارد 0x50 می رود. 797 00:32:34,100 --> 00:32:37,980 بنابراین اگر در حال حاضر، من به اول شخصیت در t و حروف بزرگ آن، 798 00:32:37,980 --> 00:32:39,535 آنچه من به طور موثر به بازدید کنندگان انجام می دهند؟ 799 00:32:39,535 --> 00:32:41,300 800 00:32:41,300 --> 00:32:43,450 من واقعا انجام همین کار، درست است؟ 801 00:32:43,450 --> 00:32:47,680 از آنجا که اگر آدرس 0x50-- و فقط، من اتاق بسیار در هیئت مدیره را در اینجا نیست، 802 00:32:47,680 --> 00:32:51,750 اما فرض کنیم که این است که در اینجا 0x50 پایین، جایی در حافظه کامپیوتر من است. 803 00:32:51,750 --> 00:32:55,825 >> و من، به عنوان مثال، گیب در اینجا کوچک، مثل این. 804 00:32:55,825 --> 00:32:57,120 805 00:32:57,120 --> 00:33:01,980 و من گفته ام تی براکت 0 با حروف بزرگ می شود. 806 00:33:01,980 --> 00:33:04,860 خوب، تی براکت 0 است حرف اول در تی. 807 00:33:04,860 --> 00:33:07,840 بنابراین کمی گرم است که به تبدیل بزرگ G. اما مشکل 808 00:33:07,840 --> 00:33:09,410 است، چه ها نیز به نقطه؟ 809 00:33:09,410 --> 00:33:10,300 >> رسید همان. 810 00:33:10,300 --> 00:33:11,841 >> DAVID J. مالان: دقیقا همان. 811 00:33:11,841 --> 00:33:16,342 بنابراین یک توضیح ساده شاید، حتی اگر به نحو کمی عجیب و غریب است. 812 00:33:16,342 --> 00:33:17,050 بنابراین اجازه دهید این کار را انجام. 813 00:33:17,050 --> 00:33:20,210 ساخت کپی-0 و سپس ./copy-0. 814 00:33:20,210 --> 00:33:21,820 815 00:33:21,820 --> 00:33:24,110 بگو چیزی: گیب. 816 00:33:24,110 --> 00:33:26,760 و متاسفانه، هر دو از آنها در حال حاضر با حروف بزرگ شده است، 817 00:33:26,760 --> 00:33:29,500 اما برای که زمینه ای دلیل است که ما به سادگی می 818 00:33:29,500 --> 00:33:32,350 در حال حاضر با آدرس خرید و فروش. 819 00:33:32,350 --> 00:33:36,470 >> پس ما چگونه به شروع address-- بدون جناس در intended-- 820 00:33:36,470 --> 00:33:39,270 چگونه ما شروع به رسیدگی این مشکل خاصی را دارد؟ 821 00:33:39,270 --> 00:33:44,400 خوب، در copy1.c، همه چیز به کمی پیچیده تر است. 822 00:33:44,400 --> 00:33:49,310 اما من یک ادعا راه حل مفهومی ساده است. 823 00:33:49,310 --> 00:33:50,852 >> خیلی سخته به در نگاه اول دریافت کنید. 824 00:33:50,852 --> 00:33:53,560 نه برای رفتن به آسان برای اولین زمانی که شما از آن نوع از، شاید، 825 00:33:53,560 --> 00:33:57,440 اما اگر مشکل این است که به سادگی انجام تی = فقط 826 00:33:57,440 --> 00:33:59,694 کپی آدرس، چه، دوباره اگر من می توانم در شما انتخاب کنید، 827 00:33:59,694 --> 00:34:02,110 در حال رفتن به راه حل برای در واقع کپی کردن یک رشته؟ 828 00:34:02,110 --> 00:34:04,906 829 00:34:04,906 --> 00:34:06,770 >> رسید ما احتمالا دوباره با استفاده از یک حلقه. 830 00:34:06,770 --> 00:34:06,890 >> DAVID J. مالان: آره. 831 00:34:06,890 --> 00:34:08,390 بنابراین ما در حال رفتن به نیاز به یک حلقه دوباره. 832 00:34:08,390 --> 00:34:11,800 و از آنجایی که اگر ما می خواهید کپی کنید بازدید کنندگان رشته به رشته دیگر، 833 00:34:11,800 --> 00:34:14,120 ما احتمالا می خواهید این کار را انجام شخصیت های شخصیت. 834 00:34:14,120 --> 00:34:17,199 اما مشکل این است، اگر این اصل ها، 835 00:34:17,199 --> 00:34:22,159 در حال حاضر ما نیاز به شروع به صراحت تخصیص حافظه برای تی. 836 00:34:22,159 --> 00:34:24,320 >> به عبارت دیگر، اجازه دهید دوباره ترسیم این برای آخرین بار. 837 00:34:24,320 --> 00:34:28,659 اگر این رشته ها = GetString است. 838 00:34:28,659 --> 00:34:30,956 839 00:34:30,956 --> 00:34:32,455 و اجازه دهید این قرار داده تا اینجا، و همچنین. 840 00:34:32,455 --> 00:34:36,639 841 00:34:36,639 --> 00:34:37,420 این GetString است. 842 00:34:37,420 --> 00:34:39,070 843 00:34:39,070 --> 00:34:43,860 و سپس، تصویر برای چیزی مانند که در حال رفتن به مانند قبل، 844 00:34:43,860 --> 00:34:44,360 گرم ب-الکترونیکی / 0. 845 00:34:44,360 --> 00:34:47,294 846 00:34:47,294 --> 00:34:48,960 که به نظر می رسد چیزی کمی شبیه به این. 847 00:34:48,960 --> 00:34:53,650 و بازدید کنندگان به همین دلیل، ما به این 0x50، و که رفتن به 51، 52. 848 00:34:53,650 --> 00:34:54,409 >> بنابراین این 0x50 است. 849 00:34:54,409 --> 00:34:55,679 850 00:34:55,679 --> 00:34:59,690 و پس از آن، من رشته تی. 851 00:34:59,690 --> 00:35:02,450 در حافظه، که فقط رفتن به من یک مربع کمی شبیه به این را. 852 00:35:02,450 --> 00:35:04,080 پس چه گام مهم در حال حاضر؟ 853 00:35:04,080 --> 00:35:09,870 اگر من می خواهم برای کپی کردن بازدید کنندگان به تن، چه خالی ما نیاز به پر کردن در اینجا؟ 854 00:35:09,870 --> 00:35:12,050 یا ما چه چیزی داریم به نیاز در سطح بالا انجام دهید؟ 855 00:35:12,050 --> 00:35:14,101 856 00:35:14,101 --> 00:35:14,600 آره؟ 857 00:35:14,600 --> 00:35:16,200 858 00:35:16,200 --> 00:35:17,020 کسی؟ 859 00:35:17,020 --> 00:35:17,690 آره. 860 00:35:17,690 --> 00:35:19,214 >> رسید ما به [نامفهوم] نیاز دارید. 861 00:35:19,214 --> 00:35:21,380 DAVID J. مالان: بله، ما نیاز به پر کردن در این قسمت را خالی. 862 00:35:21,380 --> 00:35:24,340 من نمی توانم کپی کنید و سپس سرمایه گذاری نام گیب است 863 00:35:24,340 --> 00:35:28,120 تا زمانی که من از سیستم عامل برای تکه دیگری از حافظه 864 00:35:28,120 --> 00:35:30,640 که حداقل به عنوان اصلی. 865 00:35:30,640 --> 00:35:32,130 به طوری که ما را با یک سوال. 866 00:35:32,130 --> 00:35:36,080 >> چگونه سیستم عامل بپرسید من فقط برای یک pointer-- ساده 867 00:35:36,080 --> 00:35:38,530 به عنوان این است که به نام، آدرس، pointer-- نمی 868 00:35:38,530 --> 00:35:40,980 برای یک جعبه ساده مثل این نام یک رشته؟ 869 00:35:40,980 --> 00:35:44,200 چگونه عامل درخواست I سیستم برای یک تکه بزرگ از حافظه؟ 870 00:35:44,200 --> 00:35:48,430 تا کنون، من تنها که پشت بدست به طور غیر مستقیم از طریق تماس GetString. 871 00:35:48,430 --> 00:35:50,740 پس چگونه است GetString حتی گرفتن حافظه خود را؟ 872 00:35:50,740 --> 00:35:53,430 >> خوب، آن را تبدیل وجود دارد که این تابع دیگر در اینجا 873 00:35:53,430 --> 00:35:55,160 که ما در حال حاضر شروع به استفاده کنید. 874 00:35:55,160 --> 00:35:59,780 در حال حاضر، این به نظر می رسد than-- راه مرموز تر و من تنها کسی بود که می توانید ببینید it-- هستم 875 00:35:59,780 --> 00:36:03,150 این خط به نظر می رسد راه مرموز تر سپس آن را در نگاه اول باید. 876 00:36:03,150 --> 00:36:04,650 اما اجازه دهید آن را به کسی را دست انداختن از هم جدا. 877 00:36:04,650 --> 00:36:07,950 >> در سمت چپ، من کاراکتر * تی. 878 00:36:07,950 --> 00:36:13,280 پس به زبان انگلیسی، اجازه دهید شروع به تدوین و فرموله جملات مناسب در اصطلاحات مخصوص یک صنف فنی. 879 00:36:13,280 --> 00:36:19,757 پس این است اختصاص متغیر از نوع char * به نام تی. 880 00:36:19,757 --> 00:36:21,090 در حال حاضر، چه چیزی را که واقعا چیست؟ 881 00:36:21,090 --> 00:36:23,881 >> خوب، این بدان معناست که، چی بگذارم در این متغیر به نام تی قرار داده است؟ 882 00:36:23,881 --> 00:36:24,780 883 00:36:24,780 --> 00:36:26,402 آدرس یک کاراکتر. 884 00:36:26,402 --> 00:36:28,360 به طوری که فقط ساده تر، راه معقول تر 885 00:36:28,360 --> 00:36:29,930 توصیف در سمت چپ. 886 00:36:29,930 --> 00:36:32,890 به طوری که این کادر در اینجا تنها ایجاد می کند. 887 00:36:32,890 --> 00:36:34,760 بنابراین سمت راست، احتمالا، در جریان است 888 00:36:34,760 --> 00:36:37,170 را به خود اختصاص که بزرگتر تکه از حافظه چگونه؟ 889 00:36:37,170 --> 00:36:38,340 بنابراین اجازه دهید این کسی را دست انداختن از هم جدا. 890 00:36:38,340 --> 00:36:41,131 >> این قریب به اتفاق در نگاه اول، اما چه خبر است در داخل که اینجا هستید؟ 891 00:36:41,131 --> 00:36:43,740 ابتدا، malloc، وجود دارد که ظاهرا دوست جدید ما، 892 00:36:43,740 --> 00:36:45,450 "به حافظه اختصاص دهد." 893 00:36:45,450 --> 00:36:49,560 بنابراین این استدلال که گذشت است در آن، پس از آن یک استدلال بسیار بزرگ است. 894 00:36:49,560 --> 00:36:50,970 بنابراین اجازه دهید این کسی را دست انداختن از هم جدا. 895 00:36:50,970 --> 00:36:53,410 >> strlen از بازدید کنندگان، البته، نشان دهنده the-- 896 00:36:53,410 --> 00:36:54,142 897 00:36:54,142 --> 00:36:55,600 رسید تعداد کاراکتر باشد. 898 00:36:55,600 --> 00:36:56,710 DAVID J. مالان: فقط تعداد کاراکتر در ثانیه. 899 00:36:56,710 --> 00:36:59,040 بنابراین طول ها، رشته اصلی است. 900 00:36:59,040 --> 00:37:00,350 بنابراین G-ب ه. 901 00:37:00,350 --> 00:37:02,320 پس از آن احتمالا چهار در این مورد. 902 00:37:02,320 --> 00:37:05,485 چرا من انجام +1 پس از تماس strlen از بازدید کنندگان؟ 903 00:37:05,485 --> 00:37:06,360 رسید [نامفهوم] 904 00:37:06,360 --> 00:37:07,590 DAVID J. مالان: برای که شخصیت تهی خاص. 905 00:37:07,590 --> 00:37:11,260 اگر شما از من بپرسید آنچه را که طول است نام گیب است، من می خواهم بگویم چهار. 906 00:37:11,260 --> 00:37:14,480 در قسمت پایین هود، هر چند، من نیاز که بایت پنجم برای شخصیت پوچ. 907 00:37:14,480 --> 00:37:16,100 به همین دلیل من انجام +1. 908 00:37:16,100 --> 00:37:21,730 >> در حال حاضر فقط در مورد شما در حال اجرا هستند این برنامه بر روی یک کامپیوتر دیگر از، می گویند، 909 00:37:21,730 --> 00:37:24,610 دستگاه CS50، که در آن به اندازه یک کاراکتر 910 00:37:24,610 --> 00:37:26,350 ممکن است متفاوت باشد از computer-- خود من 911 00:37:26,350 --> 00:37:30,590 معلوم است که من می توانم این تماس sizeof عملگر، فقط بخواهید کامپیوتر، 912 00:37:30,590 --> 00:37:32,870 چه به اندازه یک است کاراکتر در این کامپیوتر؟ 913 00:37:32,870 --> 00:37:37,400 >> و با ضرب پنج در این به عنوان مثال با به اندازه یک کاراکتر، که 914 00:37:37,400 --> 00:37:40,440 در اغلب کامپیوترها خواهد شد فقط یک، malloc است 915 00:37:40,440 --> 00:37:44,830 رفتن به اختصاص برای من این بزرگ تکه از حافظه بیش از اینجا در سمت راست. 916 00:37:44,830 --> 00:37:47,140 و آن را به return-- آن function-- است پس از آن 917 00:37:47,140 --> 00:37:48,265 رفتن به بازگشت به به من چه؟ 918 00:37:48,265 --> 00:37:50,914 919 00:37:50,914 --> 00:37:51,830 رسید آدرس؟ 920 00:37:51,830 --> 00:37:53,709 DAVID J. مالان: آدرس از چه؟ 921 00:37:53,709 --> 00:37:55,250 رسید از حافظه را اختصاص داده؟ 922 00:37:55,250 --> 00:37:56,450 DAVID J. مالان: از حافظه آن اختصاص داده است. 923 00:37:56,450 --> 00:37:59,189 بنابراین من هیچ نظری ندارم، رک و پوست کنده، که در آن این است که برای پایان دادن به. 924 00:37:59,189 --> 00:38:01,480 من قصد دارم به پیشنهاد که آن را برای پایان دادن به در 0x88. 925 00:38:01,480 --> 00:38:02,770 926 00:38:02,770 --> 00:38:06,009 کاملا خودسرانه است، اما جایی غیر از 0x50، 927 00:38:06,009 --> 00:38:08,800 چون سیستم عامل، چه ویندوز و سیستم عامل مک برای من انجام است، 928 00:38:08,800 --> 00:38:11,230 مطمئن شوید که آن را به من تکه های مختلف از RAM. 929 00:38:11,230 --> 00:38:14,210 >> بنابراین این ارزش که در آن این است تکه از حافظه ممکن است در نهایت. 930 00:38:14,210 --> 00:38:16,060 بنابراین این چیزی است که به پایان می رسد تا در اینجا، 0x88. 931 00:38:16,060 --> 00:38:17,480 932 00:38:17,480 --> 00:38:21,570 بنابراین در حال حاضر به وضوح، من می توانم درک که این همان است که در این نیست، 933 00:38:21,570 --> 00:38:23,960 دلیل اینکه به آنها اشاره تکه های مختلف از حافظه است. 934 00:38:23,960 --> 00:38:29,980 بنابراین اگر من در حال حاضر در واقع می خواهید کپی کنید این در، بگذارید راه حل پیشنهادی خود را. 935 00:38:29,980 --> 00:38:36,870 >> اجازه دهید برود، ایجاد یک حلقه، و انجام آزمون t براکت من می شود بازدید کنندگان براکت من. 936 00:38:36,870 --> 00:38:39,760 از آنجا که در حال حاضر من می توانید استفاده کنید این نماد مانند آرایه، 937 00:38:39,760 --> 00:38:43,390 چرا که حتی اگر malloc بسیار عام من حافظه را اختصاص، 938 00:38:43,390 --> 00:38:45,290 حافظه بایت فقط به هم پیوسته است. 939 00:38:45,290 --> 00:38:47,240 بایت، بایت، بایت، پشت به پشت به پشت. 940 00:38:47,240 --> 00:38:50,030 >> من قطعا می تواند به عنوان یک برنامه نویس آن را به عنوان یک آرایه، که 941 00:38:50,030 --> 00:38:55,090 به معنی من می توانم این در نهایت آشنا استفاده نماد تنها برخی از براکت مربع است. 942 00:38:55,090 --> 00:38:56,462 943 00:38:56,462 --> 00:39:00,020 >> بنابراین اجازه دهید من مکث وجود دارد، چرا این مقدار زیادی است همه در یک بار، حتی 944 00:39:00,020 --> 00:39:03,530 هر چند ایده اولیه به روکش که رشته است، تمام این مدت، 945 00:39:03,530 --> 00:39:05,550 یک نوع جدید داده به خودی نیست. 946 00:39:05,550 --> 00:39:10,150 این فقط یک اشاره گر به اصطلاح است، یک آدرس از یک شخصیت، 947 00:39:10,150 --> 00:39:12,650 که فقط به معنی آن است که یک تعداد است که یک قرارداد بشری 948 00:39:12,650 --> 00:39:15,350 ما تمایل به به عنوان 0x نمایش چیزی می نویسیم. 949 00:39:15,350 --> 00:39:18,590 >> اما این فقط یک عدد است، مانند 33 خیابان آکسفورد، 950 00:39:18,590 --> 00:39:20,530 که اتفاق می افتد به آدرس CS ساختمان. 951 00:39:20,530 --> 00:39:22,000 952 00:39:22,000 --> 00:39:23,545 هر گونه سؤال در این جزئیات؟ 953 00:39:23,545 --> 00:39:24,790 954 00:39:24,790 --> 00:39:25,289 آره؟ 955 00:39:25,289 --> 00:39:28,530 >> رسید چرا ما را بررسی کنید برای t برابر با تهی؟ 956 00:39:28,530 --> 00:39:30,740 >> DAVID J. مالان: چرا ما برای t برابر با null به؟ 957 00:39:30,740 --> 00:39:33,250 اگر ما به عنوان خوانده شده documentation-- question-- بزرگ برای malloc، 958 00:39:33,250 --> 00:39:37,020 آن را می گویند در چاپ خوب، گاهی اوقات ممکن است malloc بازگشت تهی، 959 00:39:37,020 --> 00:39:38,080 درست مثل GetString. 960 00:39:38,080 --> 00:39:41,820 و در واقع، GetString به null اگر، به نوبه خود، malloc null بر می گردد، 961 00:39:41,820 --> 00:39:43,130 چون GetString با استفاده از malloc. 962 00:39:43,130 --> 00:39:46,400 >> و این ممکن است در صورتی که سیستم عامل رخ می دهد، سیستم عامل مک، ویندوز، هر آنچه که است، به سادگی 963 00:39:46,400 --> 00:39:48,130 از حافظه را برای شما. 964 00:39:48,130 --> 00:39:49,820 بنابراین این چیزی است که وجود دارد اتفاق افتاده است. 965 00:39:49,820 --> 00:39:52,910 >> و اجازه دهید به یک چیز دیگر را نشان دهد که ممکن است فقط ضربه و ذهن شما 966 00:39:52,910 --> 00:39:55,100 یا به طور کامل بیش از حد بر روی خط باشد. 967 00:39:55,100 --> 00:39:59,770 اما اجازه بدهید من را بالا بکشد همین کار را برای حلقه برای کپی کردن، 968 00:39:59,770 --> 00:40:05,480 که یک لحظه پیش، فراخوان شد این. تی براکت من می شود بازدید کنندگان براکت من. 969 00:40:05,480 --> 00:40:06,740 >> زیبا و کاربر پسند. 970 00:40:06,740 --> 00:40:09,330 انگار هفته دو بار دیگر. 971 00:40:09,330 --> 00:40:14,920 اما این نسخه در واقع می تواند بازنویسی به عنوان این که به نظر می رسد مرموز. 972 00:40:14,920 --> 00:40:18,280 این روش به نام اشاره گر است حساب، آدرس حسابی. 973 00:40:18,280 --> 00:40:19,600 اما چرا این کار را می کند؟ 974 00:40:19,600 --> 00:40:22,220 >> در حال حاضر آزاردهنده، نویسندگان C تصمیم به استفاده از 975 00:40:22,220 --> 00:40:25,070 * نماد برای مقاصد مختلف. 976 00:40:25,070 --> 00:40:29,020 ما را دیده ام آن در حال حاضر مورد استفاده یک بار، * کاراکتر، که به معنی "من یک متغیر را 977 00:40:29,020 --> 00:40:31,210 که رفتن به شامل آدرس یک کاراکتر. " 978 00:40:31,210 --> 00:40:33,990 * بنابراین char در این زمینه به معنی "من یک متغیر را." 979 00:40:33,990 --> 00:40:40,050 >> متاسفانه، در صورت استفاده از * بدون یک کلمه در مقابل آن، مانند کاراکتر، 980 00:40:40,050 --> 00:40:41,905 که در حال حاضر به نام اپراتور ارجاع. 981 00:40:41,905 --> 00:40:43,530 و ما بیشتر از این قبل از اینکه طولانی را ببینید. 982 00:40:43,530 --> 00:40:44,930 اما این فقط به معنی "وجود دارد." 983 00:40:44,930 --> 00:40:49,070 این ضرب المثل مثل است، اگر کسی به من دادند بر روی یک تکه کاغذ "33 خیابان آکسفورد،" 984 00:40:49,070 --> 00:40:53,830 اگر من "* 33 خیابان آکسفورد،" این بدان معناست که "به پایین جاده به ساختمان CS." 985 00:40:53,830 --> 00:40:57,220 >> بنابراین * فقط به معنی وجود دارد اگر هیچ کلمه ای در مقابل آن وجود دارد. 986 00:40:57,220 --> 00:40:59,100 پس چه تی است، تا روشن شود؟ 987 00:40:59,100 --> 00:41:03,250 تی آدرس تکه از است حافظه که به من پشت داده شد. 988 00:41:03,250 --> 00:41:06,650 بازدید کنندگان آدرس از آنچه، به روشن باشد، در مثال ما بحث شده است، 989 00:41:06,650 --> 00:41:07,500 از گیب کوچک؟ 990 00:41:07,500 --> 00:41:08,990 991 00:41:08,990 --> 00:41:10,005 بازدید کنندگان آدرس است of-- 992 00:41:10,005 --> 00:41:11,585 993 00:41:11,585 --> 00:41:12,460 رسید رشته. 994 00:41:12,460 --> 00:41:14,126 DAVID J. مالان: از نام اصلی گیب است. 995 00:41:14,126 --> 00:41:16,660 پس از آن آدرس است این تکه از حافظه است. 996 00:41:16,660 --> 00:41:22,220 بنابراین اگر من می گویم تی + i-- من، اطلاع، فقط دوستان قدیمی ما است. 997 00:41:22,220 --> 00:41:24,770 این فقط یک متغیر شاخص است که تکرار از صفر در تا 998 00:41:24,770 --> 00:41:26,960 به طول رشته s. 999 00:41:26,960 --> 00:41:30,367 پس از آن برای رفتن به صفر، از یک، پس از آن دو، پس از آن سه، پس از آن چهار. 1000 00:41:30,367 --> 00:41:33,200 بنابراین اجازه دهید این جمع جدید قطعات پازل مانند خراش، اگر شما خواهد شد، 1001 00:41:33,200 --> 00:41:36,140 حتی اگر، دوباره، نحو به مراتب پیچیده تر از خراش. 1002 00:41:36,140 --> 00:41:39,522 بنابراین تی یک آدرس + است من در حال رفتن به من می دهد 1003 00:41:39,522 --> 00:41:42,480 تعداد، چرا که این همه اعداد است که ما به عنوان سحر و جادو رسم. 1004 00:41:42,480 --> 00:41:43,560 اما آنها فقط اعداد هستند. 1005 00:41:43,560 --> 00:41:49,960 >> بنابراین اگر آدرس تی ما گفت: بود 0x88، 0x88 چه به اضافه صفر است. 1006 00:41:49,960 --> 00:41:51,564 1007 00:41:51,564 --> 00:41:53,980 حتی اگر شما راحت نیست با سحر و جادو در عین حال، یک حدس. 1008 00:41:53,980 --> 00:41:54,410 >> رسید اصلی. 1009 00:41:54,410 --> 00:41:55,850 >> DAVID J. مالان: هنوز 0x88. 1010 00:41:55,850 --> 00:41:58,910 پس چه * 0x88 چیست؟ 1011 00:41:58,910 --> 00:42:02,670 این بدان معنی است، "وجود دارد" که به معنی به طور موثر، "قرار دادن انگشت خود را در اینجا." 1012 00:42:02,670 --> 00:42:06,930 و در حال حاضر در سمت راست این بیان، * و پس از آن در parens، 1013 00:42:06,930 --> 00:42:11,586 بازدید کنندگان + من به معنی بازدید کنندگان است، که آدرس در اینجا از گرم کم است. 1014 00:42:11,586 --> 00:42:16,220 بازدید کنندگان + 0 است، البته، این، هر آنچه که است. 1015 00:42:16,220 --> 00:42:21,230 >> بنابراین در حال حاضر، آن را به بازدید کنندگان *، که درست مثل * 33 خیابان آکسفورد به معنای رفتن به آدرس 1016 00:42:21,230 --> 00:42:22,010 است. 1017 00:42:22,010 --> 00:42:24,170 بنابراین در اینجا این انگشت، دست راست است. 1018 00:42:24,170 --> 00:42:26,050 پس چه هستم رفتن به کپی را به چه؟ 1019 00:42:26,050 --> 00:42:30,260 چیزی که در سمت راست است که گیب، گرم کوچک، به اینجا. 1020 00:42:30,260 --> 00:42:32,750 >> و به این ترتیب اثر است که تکرار اول حلقه، 1021 00:42:32,750 --> 00:42:36,200 به شما به عنوان پیشنهاد، حتی اگر آن را به نظر می رسد دیوانه پیچیده تر از هر چیز 1022 00:42:36,200 --> 00:42:42,110 ما قبل از دیده می شود، به سادگی گفت: بروید اینجا و کپی کردن است که شخصیت در اینجا. 1023 00:42:42,110 --> 00:42:44,700 این شما با دادن یک نقشه به هر دو منطقه. 1024 00:42:44,700 --> 00:42:46,130 >> و ما به مراتب بیشتر از این را ببینید. 1025 00:42:46,130 --> 00:42:50,600 اما در حال حاضر، این امید است فقط به معرفی برخی از این ایده ها ساده است. 1026 00:42:50,600 --> 00:42:53,550 و در واقع، اجازه دهید نگاهی به نگاه یک برنامه نهایی در اینجا، 1027 00:42:53,550 --> 00:42:57,480 و پس از آن claymation وعده داده شده، که همه چیز درست خواهد شد. 1028 00:42:57,480 --> 00:42:57,980 خوب. 1029 00:42:57,980 --> 00:43:01,680 بنابراین، اجازه دهید باز up-- وجود دارد ما. 1030 00:43:01,680 --> 00:43:02,850 1031 00:43:02,850 --> 00:43:05,440 بنابراین اجازه دهید me-- ما می آیند به این تصویر قبل از طولانی است. 1032 00:43:05,440 --> 00:43:08,360 اجازه بدهید باز کردن این مثال نهایی در اینجا. 1033 00:43:08,360 --> 00:43:09,440 1034 00:43:09,440 --> 00:43:12,710 >> بنابراین در اینجا فوق العاده، فوق العاده است برنامه ای است که انجام 1035 00:43:12,710 --> 00:43:15,050 هیچ چیز در زندگی که به شرح زیر انجام می دهد. 1036 00:43:15,050 --> 00:43:18,740 این برای اولین بار اعلام کرد که دو متغیر، ایکس و y، که تعداد این زمان، 1037 00:43:18,740 --> 00:43:19,240 در هر سه. 1038 00:43:19,240 --> 00:43:20,448 آنها اعداد صحیح نیست، در هر سه. 1039 00:43:20,448 --> 00:43:22,899 آنها به ظاهر اعضای هیات *. 1040 00:43:22,899 --> 00:43:25,690 پس فقط هر کسی، به چه معناست اگر نوع داده های خود، متغیر خود را، 1041 00:43:25,690 --> 00:43:26,860 است از نوع int * ستاره؟ 1042 00:43:26,860 --> 00:43:30,240 این آدرس از یک int است. 1043 00:43:30,240 --> 00:43:31,990 >> بنابراین من هیچ ایده که در آن است هنوز. 1044 00:43:31,990 --> 00:43:35,150 این فقط به معنی "قرار داده، در نهایت، آدرس یک int است. " 1045 00:43:35,150 --> 00:43:38,340 0x50، 0x88، هر جا آن را در است حافظه، یک آدرس است که وجود دارد. 1046 00:43:38,340 --> 00:43:40,200 و این چیزی است که سالانه است رفتن به، و همچنین. 1047 00:43:40,200 --> 00:43:44,920 >> اگر من در حال حاضر می گویند x = malloc (sizeof (هوشمند))، این یک راه فانتزی گفتن است، 1048 00:43:44,920 --> 00:43:49,000 سلام سیستم عامل، از طریق malloc، من حافظه به اندازه کافی برای اندازه 1049 00:43:49,000 --> 00:43:52,370 از یک int، که احتمالا رفتن به 32 بیت یا چهار بایت. 1050 00:43:52,370 --> 00:43:53,680 >> پس چه malloc بازگشت؟ 1051 00:43:53,680 --> 00:43:55,250 Malloc یک آدرس گرداند. 1052 00:43:55,250 --> 00:43:57,020 بنابراین آنچه که به در x ذخیره می شود؟ 1053 00:43:57,020 --> 00:44:00,600 آدرس تکه از حافظه، از چهار بایت، که malloc 1054 00:44:00,600 --> 00:44:03,360 فقط برای من با درخواست پیدا نشد سیستم عامل. 1055 00:44:03,360 --> 00:44:08,240 >> در حال حاضر در عین حال، خط چهار در اینجا، * x = 42. 1056 00:44:08,240 --> 00:44:09,990 فقط به روشن، چه خبر است پایین وجود دارد؟ 1057 00:44:09,990 --> 00:44:11,530 در سمت چپ، * x است. 1058 00:44:11,530 --> 00:44:13,610 که مانند * 33 خیابان آکسفورد است. 1059 00:44:13,610 --> 00:44:15,523 بنابراین * X یعنی چه؟ 1060 00:44:15,523 --> 00:44:16,450 >> رسید برو به. 1061 00:44:16,450 --> 00:44:17,908 >> DAVID J. مالان: برو به این آدرس. 1062 00:44:17,908 --> 00:44:20,466 هر جا که تکه حافظه است، به آن. 1063 00:44:20,466 --> 00:44:21,979 و آنچه وجود دارد، بدیهی است؟ 1064 00:44:21,979 --> 00:44:22,520 رسید 42. 1065 00:44:22,520 --> 00:44:23,580 DAVID J. مالان: 42. 1066 00:44:23,580 --> 00:44:25,650 همه حق است، * و y، همان ایده. 1067 00:44:25,650 --> 00:44:26,860 برو به آدرس را در y است. 1068 00:44:26,860 --> 00:44:31,740 تعداد 13 قرار داده وجود دارد، اما آنچه سالانه در حال حاضر است؟ 1069 00:44:31,740 --> 00:44:33,172 1070 00:44:33,172 --> 00:44:34,630 رسید هیچ حافظه وجود دارد برای y است. 1071 00:44:34,630 --> 00:44:35,710 DAVID J. مالان: وجود دارد بدون حافظه برای y است. 1072 00:44:35,710 --> 00:44:38,215 پس چه سالانه انجام می دهد احتمالا باشد، به عنوان گفته ایم که؟ 1073 00:44:38,215 --> 00:44:38,520 >> رسید زباله. 1074 00:44:38,520 --> 00:44:39,480 >> DAVID J. مالان: برخی از ارزش زباله. 1075 00:44:39,480 --> 00:44:41,320 در حال حاضر، ارزش زباله است که هنوز هم یک عدد است. 1076 00:44:41,320 --> 00:44:43,160 این هنوز هم می تواند برای یک آدرس اشتباه گرفته شود. 1077 00:44:43,160 --> 00:44:45,160 آن را به عنوان هر چند کسی است چیزی نوشته پایین، 1078 00:44:45,160 --> 00:44:48,002 و من آن را به عنوان معنی بد تفسیر برخی از ساختمان در خیابان. 1079 00:44:48,002 --> 00:44:50,460 و اگر شما فقط سعی کنید برای رفتن به برخی از ساختمان متعلق به شما نیست، 1080 00:44:50,460 --> 00:44:53,710 و یا برخی از تکه از حافظه شما ندارد داده شده است، همه چیز بد ممکن است رخ دهد. 1081 00:44:53,710 --> 00:44:57,740 کامپیوتر ممکن است به سقوط، و یا برخی دیگر رفتار نامشخص ممکن است رخ دهد. 1082 00:44:57,740 --> 00:45:01,310 >> بنابراین مقدمه، پس از آن، به Binky این است. 1083 00:45:01,310 --> 00:45:04,290 من هنوز هم به یاد داشته باشید، 20 چند سال بعد عجیب و غریب، 1084 00:45:04,290 --> 00:45:07,200 که در آن I زمانی که من در نهایت بود اشاره گر قابل درک باشد. 1085 00:45:07,200 --> 00:45:09,520 >> کدام می گویند، اگر شما ترک در اینجا در سه دقیقه 1086 00:45:09,520 --> 00:45:12,170 و فکر می کنم من نمی درک اشاره گر، متوجه 1087 00:45:12,170 --> 00:45:14,410 من برای 20 به یاد سال برای برخی از دلیل دیوانه 1088 00:45:14,410 --> 00:45:17,140 هنگامی که و به همین دلیل آن را در نهایت غرق شده در، نشسته با آموزش من 1089 00:45:17,140 --> 00:45:19,501 همکار، Nishat مهتا در پشت سالن ناهار خوری الیوت. 1090 00:45:19,501 --> 00:45:21,250 در حال حاضر، من به یاد ام این به دلیل این بود 1091 00:45:21,250 --> 00:45:23,920 یکی از موضوعات I، در خاص، با مشکلاتی مواجه شد. 1092 00:45:23,920 --> 00:45:26,470 و سپس، آن را در نهایت کلیک، مثل من به جرات می گفت بسیاری از مباحث 1093 00:45:26,470 --> 00:45:27,460 در نهایت خواهد شد. 1094 00:45:27,460 --> 00:45:32,590 و در حال حاضر، را که احساس می کنند همه شادتر و قانع کننده همه بیشتر، 1095 00:45:32,590 --> 00:45:35,360 اجازه دهید نگاهی به نهایی در ما سه دقیقه گذشته اینجا در Binky، 1096 00:45:35,360 --> 00:45:37,675 از دوستان ما، نیک Parlante از دانشگاه استنفورد. 1097 00:45:37,675 --> 00:45:38,910 1098 00:45:38,910 --> 00:45:41,580 >> [VIDEO پخش] 1099 00:45:41,580 --> 00:45:42,750 >> -Hey، Binky. 1100 00:45:42,750 --> 00:45:43,500 از خواب بیدار شوید! 1101 00:45:43,500 --> 00:45:45,960 این زمان برای اشاره گر سرگرم کننده است. 1102 00:45:45,960 --> 00:45:47,012 >> چه که؟ 1103 00:45:47,012 --> 00:45:48,723 اطلاعات در مورد اشاره گر؟ 1104 00:45:48,723 --> 00:45:50,580 اوه، بسیار خوب! 1105 00:45:50,580 --> 00:45:53,563 >> خوب، برای شروع، من حدس می زنم ما نیاز به رفتن به یک زن و شوهر اشاره گر. 1106 00:45:53,563 --> 00:45:54,390 >> -OK. 1107 00:45:54,390 --> 00:45:57,930 این کد اختصاص دو اشاره گر، که می تواند به اعداد صحیح اشاره نمود. 1108 00:45:57,930 --> 00:45:58,430 -OK. 1109 00:45:58,430 --> 00:46:02,140 خوب، من این دو اشاره گر، اما آنها به نظر نمی رسد به اشاره به هر چیزی. 1110 00:46:02,140 --> 00:46:02,980 >> یعنی درست است. 1111 00:46:02,980 --> 00:46:05,100 در ابتدا، اشاره گر به هر چیزی اشاره نشده است. 1112 00:46:05,100 --> 00:46:08,030 چیزهایی را که به گفته می شود اشاره pointees، و راه آنها را در 1113 00:46:08,030 --> 00:46:09,370 یک گام جداگانه. 1114 00:46:09,370 --> 00:46:10,220 >> اوه، درست است، درست است. 1115 00:46:10,220 --> 00:46:10,950 من می دانستم که. 1116 00:46:10,950 --> 00:46:12,385 pointees جدا هستند. 1117 00:46:12,385 --> 00:46:14,315 استروژن، پس چگونه می توانم به شما اختصاص pointee؟ 1118 00:46:14,315 --> 00:46:15,340 1119 00:46:15,340 --> 00:46:15,960 >> -OK. 1120 00:46:15,960 --> 00:46:18,970 خوب، این کد اختصاص pointee عدد صحیح جدید، 1121 00:46:18,970 --> 00:46:20,950 و این مجموعه بخشی x به اشاره به آن است. 1122 00:46:20,950 --> 00:46:22,050 1123 00:46:22,050 --> 00:46:23,230 >> -Hey، که به نظر می رسد بهتر است. 1124 00:46:23,230 --> 00:46:25,060 بنابراین، آن را به انجام کاری. 1125 00:46:25,060 --> 00:46:25,990 >> -OK. 1126 00:46:25,990 --> 00:46:30,455 من ارجاع ایکس اشاره گر به ذخیره تعداد 42 به pointee آن است. 1127 00:46:30,455 --> 00:46:32,830 برای این ترفند، من نیاز من سحر و جادو ترکه از غیر مرجع. 1128 00:46:32,830 --> 00:46:34,130 1129 00:46:34,130 --> 00:46:36,080 >> سحر و جادو ترکه همراه خود از غیر مرجع؟ 1130 00:46:36,080 --> 00:46:37,357 1131 00:46:37,357 --> 00:46:38,190 That-- فوق العاده است. 1132 00:46:38,190 --> 00:46:39,340 1133 00:46:39,340 --> 00:46:41,080 >> -این چیزی است که کد به نظر می رسد. 1134 00:46:41,080 --> 00:46:44,110 من فقط راه اندازی تعداد، و [POP] 1135 00:46:44,110 --> 00:46:44,700 >> -Hey، نگاه کنید. 1136 00:46:44,700 --> 00:46:46,140 وجود دارد از آن می رود. 1137 00:46:46,140 --> 00:46:50,980 >> -So انجام یک ارجاع در ایکس شرح زیر است فلش برای دسترسی به pointee آن است. 1138 00:46:50,980 --> 00:46:53,160 در این مورد، یک فروشگاه 42 در آن وجود دارد. 1139 00:46:53,160 --> 00:46:57,710 با سلام با استفاده از آن برای ذخیره تعداد را امتحان کنید 13 از طریق اشاره گر دیگر، y است. 1140 00:46:57,710 --> 00:46:58,760 >> -OK. 1141 00:46:58,760 --> 00:47:03,270 من فقط بیش از اینجا به y، و تعداد 13 مجموعه. 1142 00:47:03,270 --> 00:47:07,930 و پس از آن، گرفتن ترکه از غیر مرجع و فقط [BUZZ] 1143 00:47:07,930 --> 00:47:08,960 >> اوه! 1144 00:47:08,960 --> 00:47:09,500 >> اوه، سلام! 1145 00:47:09,500 --> 00:47:11,090 که کار نمی کند. 1146 00:47:11,090 --> 00:47:15,630 بگو، Binky، من فکر نمی کنم هرگاه سالانه یک ایده خوب است، چرا که شما می دانید، 1147 00:47:15,630 --> 00:47:17,850 راه اندازی pointee یک گام جداگانه است. 1148 00:47:17,850 --> 00:47:20,450 و من فکر نمی کنم که ما تا کنون آن را انجام داد. 1149 00:47:20,450 --> 00:47:21,480 >> نقطه -Good. 1150 00:47:21,480 --> 00:47:21,980 آره. 1151 00:47:21,980 --> 00:47:25,680 ما اختصاص داده سالانه اشاره گر است، اما ما هرگز آن را به نقطه را به pointee. 1152 00:47:25,680 --> 00:47:27,190 1153 00:47:27,190 --> 00:47:28,616 >> -Very ناظر. 1154 00:47:28,616 --> 00:47:30,240 -Hey، شما به دنبال خوب وجود دارد، Binky. 1155 00:47:30,240 --> 00:47:33,400 آیا می توانید آن را تعمیر به طوری که نقاط سالانه به pointee همانند x؟ 1156 00:47:33,400 --> 00:47:34,000 >> -Sure. 1157 00:47:34,000 --> 00:47:36,780 من سحر و جادو ترکه من استفاده کنید از واگذاری اشاره گر. 1158 00:47:36,780 --> 00:47:38,740 >> -Is که برای رفتن به یک مشکل مثل قبل؟ 1159 00:47:38,740 --> 00:47:39,240 -No. 1160 00:47:39,240 --> 00:47:40,660 این به این pointees را لمس کنید. 1161 00:47:40,660 --> 00:47:44,450 این فقط تغییر یک اشاره گر به اشاره به همان چیزی که به عنوان یکی دیگر. 1162 00:47:44,450 --> 00:47:45,450 >> آه، من را ببینید. 1163 00:47:45,450 --> 00:47:48,200 در حال حاضر نقاط سالانه به همان محل به عنوان ایکس. 1164 00:47:48,200 --> 00:47:48,910 پس صبر کنید. 1165 00:47:48,910 --> 00:47:49,950 در حال حاضر، سالانه ثابت است. 1166 00:47:49,950 --> 00:47:51,120 از آن است که pointee. 1167 00:47:51,120 --> 00:47:54,510 بنابراین شما می توانید ترکه از سعی غیر مرجع دوباره به ارسال بیش از 13. 1168 00:47:54,510 --> 00:47:56,510 >> -Uh، OK. 1169 00:47:56,510 --> 00:47:58,160 در اینجا از آن می رود. [POP] 1170 00:47:58,160 --> 00:47:59,340 >> -Hey، در آن نگاه کنید. 1171 00:47:59,340 --> 00:48:00,750 در حال حاضر هرگاه آثار در سال. 1172 00:48:00,750 --> 00:48:04,991 و از آنجایی که اشاره گر به اشتراک گذاری که یکی pointee، آنها هر دو 13 را ببینید. 1173 00:48:04,991 --> 00:48:05,490 آره. 1174 00:48:05,490 --> 00:48:06,870 به اشتراک گذاری، هر آنچه. 1175 00:48:06,870 --> 00:48:08,820 بنابراین می خواهیم به تغییر مکان در حال حاضر؟ 1176 00:48:08,820 --> 00:48:09,440 >> اوه، نگاه کنید. 1177 00:48:09,440 --> 00:48:10,830 ما از زمان. 1178 00:48:10,830 --> 00:48:11,570 >> -But-- 1179 00:48:11,570 --> 00:48:13,530 >> دقیقا وقتی سه قانون اشاره گر به یاد داشته باشید. 1180 00:48:13,530 --> 00:48:16,560 شماره یک، ساختار پایه است که شما یک اشاره گر، 1181 00:48:16,560 --> 00:48:18,680 و آن را اشاره به pointee. 1182 00:48:18,680 --> 00:48:20,640 اما اشاره گر و pointee جدا هستند، 1183 00:48:20,640 --> 00:48:22,610 و خطای رایج است به راه اندازی یک اشاره گر، 1184 00:48:22,610 --> 00:48:25,000 اما فراموش نکنید که به آن pointee دهد. 1185 00:48:25,000 --> 00:48:28,170 >> شماره دو، غیر مرجع اشاره گر شروع می شود در اشاره گر 1186 00:48:28,170 --> 00:48:31,050 و زیر فلش خود را بیش از برای دسترسی به pointee آن است. 1187 00:48:31,050 --> 00:48:33,400 همانطور که همه ما می دانیم، این فقط در صورتیکه وجود دارد 1188 00:48:33,400 --> 00:48:36,270 pointee، که نوع می شود به اصل شماره یک. 1189 00:48:36,270 --> 00:48:39,000 >> شماره سه، اشاره گر انتساب طول می کشد یک اشاره گر 1190 00:48:39,000 --> 00:48:42,320 و تغییر آن به نقطه را به همان pointee به عنوان اشاره گر دیگر. 1191 00:48:42,320 --> 00:48:44,160 بنابراین پس از انتساب، دو اشاره گر 1192 00:48:44,160 --> 00:48:45,910 به pointee همان نقطه. 1193 00:48:45,910 --> 00:48:47,990 گاهی اوقات، که به اشتراک گذاری نامیده می شود. 1194 00:48:47,990 --> 00:48:49,740 و این همه به آن وجود دارد، واقعا. 1195 00:48:49,740 --> 00:48:50,277 خداحافظ خداحافظی کن. 1196 00:48:50,277 --> 00:48:51,110 [END VIDEO پخش] 1197 00:48:51,110 --> 00:48:52,568 DAVID J. مالان: که در آن است برای CS50. 1198 00:48:52,568 --> 00:48:55,110 ما شما را در هفته آینده را ببینید. 1199 00:48:55,110 --> 00:48:56,064