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