1 00:00:00,000 --> 00:00:02,310 [Powered by Google Translate] [هفته 4، ادامه داد] 2 00:00:02,310 --> 00:00:04,240 [دیوید J. مالان - دانشگاه هاروارد] 3 00:00:04,240 --> 00:00:07,290 [این CS50 است. - CS50.TV] 4 00:00:07,290 --> 00:00:11,290 >> این CS50 است، و این است که در پایان هفته 4. 5 00:00:11,290 --> 00:00:14,030 بنابراین برخی از اخبار خوب و اخبار بد. 6 00:00:14,030 --> 00:00:26,240 هیچ سخنرانی در تاریخ دوشنبه، هیچ مشکلی را در هفته آینده است. [دانش آموزان تشویق] 7 00:00:26,240 --> 00:00:28,680 شما نمی مانند که در آن این است که رفتن. 8 00:00:28,680 --> 00:00:31,590 اما ما باید این جای چهارشنبه آینده، 9 00:00:31,590 --> 00:00:37,740 نیز وجود دارد در برنامه درسی 1 جمعه سخنرانی جمعه آینده به طوری که ما می توانیم در مسیر باقی بماند. 10 00:00:37,740 --> 00:00:40,580 اما همه چیز به طور معمول فیلم برداری شده، بنابراین نگران نباشید. 11 00:00:40,580 --> 00:00:44,100 >> و با توجه به مسابقه 0 چیزی است که ما را نسبت به پایان هفته انجام دهید 12 00:00:44,100 --> 00:00:47,140 پست ارسال یک پیام خصوصی به cs50.net البته توضیح 13 00:00:47,140 --> 00:00:50,160 از چه نوع انتظارات شما باید هنگامی که آن را به مسابقه اول می آید. 14 00:00:50,160 --> 00:00:55,100 به طور کلی، از آن خواهد شد که چند گزینه ای، درست و نادرست، پاسخ کوتاه، کوتاه برنامه نویسی مشکلات است. 15 00:00:55,100 --> 00:00:57,360 شما نمی توان انتظار داشت پیاده سازی معادل 16 00:00:57,360 --> 00:01:00,030 مشکل این است که شما می توانید بر روی pset را ببینید، برای شما که به یک کامپیوتر 17 00:01:00,030 --> 00:01:03,240 دیباگر و مانند آن، اما کوچک برنامه نویسی مشکلات وجود خواهد داشت. 18 00:01:03,240 --> 00:01:06,900 >> و در واقع، بهترین راهنمای برای گرفتن حس چه CS50 آزمونها مانند 19 00:01:06,900 --> 00:01:09,180 است به cs50.net، به لینک سوالات بروید، 20 00:01:09,180 --> 00:01:11,920 و شما می توانید ببینید که در چند سال گذشته به ارزش آزمونها. 21 00:01:11,920 --> 00:01:16,600 فقط که برنامه درسی همواره یکسان نیست در طول سال بوده است تحقق بخشند. 22 00:01:16,600 --> 00:01:18,510 گاهی اوقات اضافه می کنیم، گاهی اوقات تفریق، 23 00:01:18,510 --> 00:01:20,670 بنابراین اگر برخی از موضوع شما را به یکی از کسانی که قدیمی آزمونها 24 00:01:20,670 --> 00:01:25,380 که شما هیچ ایده چه چیزی در آن صحبت کردن در مورد، آن را یا که ما آن را پوشش میدهد 25 00:01:25,380 --> 00:01:27,210 یا که ما آن را پوشش نمی دهد. 26 00:01:27,210 --> 00:01:31,110 اما در فرم از بررسی، این یکشنبه، دوشنبه، و سه شنبه 27 00:01:31,110 --> 00:01:34,770 و همچنین به عنوان یک دوره گسترده جلسه بررسی در شب یکشنبه - 28 00:01:34,770 --> 00:01:37,500 زمان و مکان را بر روی صفحه اصلی این دوره اعلام کرد - 29 00:01:37,500 --> 00:01:40,120 همه شما باید یک فرصت برای این فایل نقد می نویسید: با همراهان تدریس درس 30 00:01:40,120 --> 00:01:44,830 مواد لازم برای این سال، در هر دو بخش و به عنوان یک طبقه کامل، 31 00:01:44,830 --> 00:01:48,400 و آن خواهد بود به طور معمول فیلم برداری و همچنین. 32 00:01:48,400 --> 00:01:53,380 >> بسیار خوب. بنابراین بدون ado بیشتر، یک نظر منتقل / شکست و اضافه کردن / رها. 33 00:01:53,380 --> 00:01:57,980 شما ممکن است یادداشت های من شب گذشته، و این است که واقعا فقط برخی از اطمینان اضافی 34 00:01:57,980 --> 00:02:01,250 که اگر شما در میان کسانی که به ویژه کمتر و راحت و یا جایی در میان 35 00:02:01,250 --> 00:02:04,870 و شما فقط یک کمی احساس سر خود، 36 00:02:04,870 --> 00:02:08,430 متوجه است که در واقع کاملا نرمال است، و ساختار حمایت کافی در محل وجود دارد، 37 00:02:08,430 --> 00:02:13,530 که یکی از آنها قصد ساعات اداری در بهبود هر چه بیشتر در هر شب به ایمیل من آخرین، 38 00:02:13,530 --> 00:02:16,520 و تحقق بیش از حد که یک گزینه ای مانند عبور / برای یک کلاس مثل این شکست 39 00:02:16,520 --> 00:02:21,540 واقعا به عنوان یک مکانیسم را به لبه یک دوره مثل این به معنای، 40 00:02:21,540 --> 00:02:24,200 به طوری که دوباره اگر شما هزینه های 10، 15، 20 ساعت 41 00:02:24,200 --> 00:02:28,160 تلاش برای بدست آوردن برخی از pset به کار و شما می دانیم که شما 90-95 درصد از راه وجود دارد 42 00:02:28,160 --> 00:02:32,100 اما شما می توانید از برخی از اشکال لعنتی را پیدا کند، در یک پاس / شکست مدل که مرتب سازی بر اساس درست است. 43 00:02:32,100 --> 00:02:36,230 >> ایده این است که با آن مکانیزم بعد از آن شما می تواند به تمرکز در psets دیگر خود را 44 00:02:36,230 --> 00:02:39,530 یا خواب و یا هر آنچه در آن است که شما می خواهید به تمرکز بر روی. 45 00:02:39,530 --> 00:02:43,390 به طوری که شما تا زمانی که این سه شنبه آینده تحقق - از لحاظ فنی 5 دوشنبه، 46 00:02:43,390 --> 00:02:50,840 اما آن یک روز تعطیل است، بنابراین این سه آمدن - به سوئیچ از پاس / خرابی به عکس مدرج و یا معاون است. 47 00:02:50,840 --> 00:02:54,450 و اگر شما واقعا در پرتگاه و به فکر انداختن در دسترس نباشد، 48 00:02:54,450 --> 00:02:56,440 لطفا من بعد از سخنرانی گرفتن و یا توجه داشته باشید به من رها. 49 00:02:56,440 --> 00:02:59,990 ما می خواهم به حداقل چت عشق قبل از اینکه شما پیشنهاد بدرود. 50 00:02:59,990 --> 00:03:03,470 بسیار خوب. بنابراین ما شروع به در نظر گرفتن آموزش چرخ کردن زمان گذشته است. 51 00:03:03,470 --> 00:03:06,030 به طور خاص، ما در رشته متمرکز شده است. 52 00:03:06,030 --> 00:03:09,740 رشته چیزی که در کتابخانه CS50 اعلام شده است، 53 00:03:09,740 --> 00:03:14,340 به طور خاص در آن فایل به نام cs50.h که ما شروع به در این هفته و در کنار نگاه کنید. 54 00:03:14,340 --> 00:03:17,250 اما رشته است که واقعا فقط یک ساده سازی از چیزی 55 00:03:17,250 --> 00:03:20,980 که کمی بیشتر arcanely * کاراکتر است. 56 00:03:20,980 --> 00:03:24,090 کاراکتر ما با آن آشنا هستیم. این فقط یک شخصیت واحد است. 57 00:03:24,090 --> 00:03:28,010 * روز دوشنبه نشان داده می شود چه؟ >> [دانشجو] یک اشاره گر است. 58 00:03:28,010 --> 00:03:31,290 یک اشاره گر است. و یک اشاره گر است؟ >> [دانشجو] آدرس. 59 00:03:31,290 --> 00:03:33,420 >> آن را مانند یک آدرس، یک محل در حافظه است. 60 00:03:33,420 --> 00:03:35,910 چه آدرس و یا مکان و یا حافظه؟ 61 00:03:35,910 --> 00:03:40,290 باز هم، همه ما لپ تاپ با فرفره یا 2 گیگابایت RAM به احتمال زیاد این روزها، 62 00:03:40,290 --> 00:03:44,160 و این بدان معناست که شما باید یک میلیارد یا 2 میلیارد بایت ارزش از حافظه است. 63 00:03:44,160 --> 00:03:46,240 و آن را واقعا مهم نیست که چه چیزی آن را از لحاظ جسمی مانند به نظر می رسد، 64 00:03:46,240 --> 00:03:51,220 اما در ایمان است که شما می توانید تعداد بایت فردی که لپ تاپ خود را - 65 00:03:51,220 --> 00:03:54,580 BYTE 0، این است بایت 1 بایت، این است که 2 میلیارد - 66 00:03:54,580 --> 00:03:56,100 و این دقیقا همان چیزی است که یک کامپیوتر می کند. 67 00:03:56,100 --> 00:04:00,030 وقتی که شما اختصاص فضا برای یک شخصیت واحد، برای مثال، 68 00:04:00,030 --> 00:04:02,480 بدیهی است که برای زندگی در جایی در حافظه کامپیوتر شما، 69 00:04:02,480 --> 00:04:05,860 و شاید آن را در شماره 12،345 بایت، 70 00:04:05,860 --> 00:04:08,470 و این جایی تا اینجا در حافظه کامپیوتر شما است. 71 00:04:08,470 --> 00:04:12,630 و آدرس پس از آن که شخصیت 12345 است. 72 00:04:12,630 --> 00:04:16,140 >> در حال حاضر، در هفته 0، از طریق در حال حاضر تا کنون، ما واقعا نمی مراقبت 73 00:04:16,140 --> 00:04:19,170 که در آن همه چیز حافظه ذخیره می شوند از آنجا که ما معمولا استفاده از نمادها، 74 00:04:19,170 --> 00:04:22,540 متغیرها، آرایه ها و به واقع در داده های ما دریافت کنید. 75 00:04:22,540 --> 00:04:24,950 اما همانطور که از دوشنبه و امروز، شما در حال حاضر رفتن به 76 00:04:24,950 --> 00:04:27,710 تمام قابلیت های بیانی بیشتر با برنامه نوشتن 77 00:04:27,710 --> 00:04:31,330 واقعا به دستکاری حافظه یک کامپیوتر با این حال شما مناسب است، 78 00:04:31,330 --> 00:04:33,720 برای هر دو اهداف خوب و بد، 79 00:04:33,720 --> 00:04:39,620 اشکالات نتیجه بسیار معمول است در این مرحله در یادگیری این مسائل است. 80 00:04:39,620 --> 00:04:42,460 اما آنچه که آن را واقعا به * کاراکتر چیست؟ 81 00:04:42,460 --> 00:04:46,140 بگذارید جلو بروید برگشت به - و ما باید به Binky امروز وعده. 82 00:04:46,140 --> 00:04:48,670 بیایید به یک مثال ساده در اینجا. 83 00:04:48,670 --> 00:04:53,060 اجازه دهید این فایل را به عنوان compare.c (Save me) مرا نگه دار، و اجازه دهید من فقط در اینجا برخی از کد قالب 84 00:04:53,060 --> 00:05:00,490 به طوری که عبارتند از: stdio.h، اجازه دهید من هم خودم را شامل cs50.h. من در بالا وجود دارد زوم. 85 00:05:00,490 --> 00:05:05,850 اجازه بدهید شروع به نوشتن بین المللی اصلی، اصلی (خالی)، و در حال حاضر من می خواهم به انجام این کار چیزی شبیه به این: 86 00:05:05,850 --> 00:05:13,520 printf ("من یک رشته دهد:") و پس از آن من خواهد شد استفاده از رشته s می شود GetString 87 00:05:13,520 --> 00:05:16,750 برای دریافت یک رشته از کاربر، پس از آن من قصد دارم به درخواست کاربر برای یکی دیگر. 88 00:05:16,750 --> 00:05:21,870 ("من دیگر رشته دهد:") و من قصد دارم به آنها را از طریق GetString که برای دریافت بپرسید. 89 00:05:21,870 --> 00:05:27,020 من آن را T تماس بگیرید چرا که T می آید پس از و یک نام خوب برای یک رشته اگر آن را بسیار عمومی است. 90 00:05:27,020 --> 00:05:30,030 بنابراین GetString، و در حال حاضر من فقط می خواهم برای انجام بررسی سلامت عقل و من قصد دارم برای گفتن 91 00:05:30,030 --> 00:05:39,770 اگر (S == T) و سپس من فقط رفتن به کاربر printf ("شما همان چیزی که \ N!" تایپ)؛ 92 00:05:39,770 --> 00:05:45,520 دیگری من قصد دارم برای چاپ کردن چیزی شبیه به ("شما چیزی تایپ های مختلف! \ N") 93 00:05:45,520 --> 00:05:48,460 یا هر چه که باشد حکم خواهد بود. بنابراین چیزی شبیه به آن. 94 00:05:48,460 --> 00:05:52,200 سپس طبق معمول، من 0 که فقط معنی که هیچ چیز بدی اتفاق افتاده است بازگشت، 95 00:05:52,200 --> 00:05:54,400 و من قصد دارم به جلو بروید و این برنامه را کامپایل و اجرا کنید. 96 00:05:54,400 --> 00:05:56,540 >> اما در روز دوشنبه به فرار این برنامه، 97 00:05:56,540 --> 00:06:00,420 و در واقع گفته شد که HELLO HELLO نیست و خداحافظی خداحافظی است. 98 00:06:00,420 --> 00:06:03,140 رفتار ما دیدیم کمی بیشتر شبیه این بود. 99 00:06:03,140 --> 00:06:11,450 اجازه بدهید من به پوشه منبع من، بزرگنمایی در اینجا، و اجازه دهید را مقایسه. 100 00:06:11,450 --> 00:06:14,570 به کوشش درست است. به من اجازه اجرا را با هم مقایسه کنید. من رشته: سلام. 101 00:06:14,570 --> 00:06:16,300 من دیگر رشته: سلام. 102 00:06:16,300 --> 00:06:18,000 شما تایپ چیزی متفاوت! 103 00:06:18,000 --> 00:06:22,650 خوب، اجازه دهید من چیزی ساده تر مانند 50، 50 را امتحان کنید. شما تایپ چیزی متفاوت! 104 00:06:22,650 --> 00:06:25,740 سلام، سلام. بنابراین به وضوح، چیزی است که در اینجا. 105 00:06:25,740 --> 00:06:28,440 اما چه توضیحی برای اینکه چرا بود؟ 106 00:06:28,440 --> 00:06:33,850 ظاهرا، خط 12 کاملا ناکارآمد است. 107 00:06:34,300 --> 00:06:39,430 مشکل اساسی در اینجا چه خبر؟ آره. >> [دانشجو] مقایسه آدرس. 108 00:06:39,430 --> 00:06:41,850 بله، دقیقا. در واقع در مقایسه با آدرس 109 00:06:41,850 --> 00:06:44,580 که در آن سلام و درود ذخیره می شوند. 110 00:06:44,580 --> 00:06:48,290 این نامه ها در مقایسه با نه سلام دوباره و دوباره، 111 00:06:48,290 --> 00:06:52,370 زیرا آنچه واقعا اتفاق افتاده است، تمام این مدت ما شده ایم با استفاده از GetString - 112 00:06:52,370 --> 00:06:56,130 این تخته سیاه است دوباره حافظه کامپیوتر، 113 00:06:56,130 --> 00:07:00,100 و اجازه دهید بگویم من اسمش GetString پس از اعلام یک ثانیه متغیر است. 114 00:07:00,100 --> 00:07:01,930 خاطره ام چه شکلی است؟ 115 00:07:01,930 --> 00:07:07,070 بیایید خودسرانه می گویند که مثل این به نظر می رسد. این یک مربع است. 116 00:07:07,070 --> 00:07:09,040 و تقریبا هر زمانی که من کشیده شده است یک تکه از حافظه بر روی صفحه نمایش 117 00:07:09,040 --> 00:07:12,860 اگر آن را به 32 بیت من بوده ام رسم مربع شبیه به این چون در واقع در دستگاه، 118 00:07:12,860 --> 00:07:17,380 یک اشاره گر، آدرس، 32 بیت است. این همان نوع int است. 119 00:07:17,380 --> 00:07:19,420 است که می تواند بر روی سیستم های کامپیوتری متفاوت باشد. 120 00:07:19,420 --> 00:07:24,630 کسانی از شما که مبهم آشنا با این حقیقت که مک یا PC خود را 64 بیت، 121 00:07:24,630 --> 00:07:28,120 که در واقع بیانگر گزینه ای است که پاسخ دادن که کامپیوتر خود را با استفاده از اشاره گر 64 بیتی، 122 00:07:28,120 --> 00:07:33,730 آدرس های 64 بیتی، و در میان upsides که از کامپیوتر شما می باشد 123 00:07:33,730 --> 00:07:35,560 RAM بسیار بیشتر از گذشته می تواند داشته باشد. 124 00:07:35,560 --> 00:07:39,240 داستان کوتاه مدت، در روز هنگامی که کامپیوتر تنها با استفاده از 32 بیت 125 00:07:39,240 --> 00:07:42,740 برای نشان دادن آدرس، بزرگترین تعداد کلمه در ادامه متن، شما می توانید از نمایندگی 126 00:07:42,740 --> 00:07:46,280 در آن صورت چه می شود اگر شما دارای 32 بیت؟ 127 00:07:46,280 --> 00:07:49,590 SO 4 میلیارد، درست است، چرا که 2 تا از 32 است 4 میلیارد. 128 00:07:49,590 --> 00:07:51,370 این تعداد تکرار در این دوره شده است. 129 00:07:51,370 --> 00:07:55,240 >> بنابراین اگر شما فقط 32 بیت، بیشترین تعداد است که شما می توانید به دفعات مشاهده شده است در حدود 4 میلیارد دلار است. 130 00:07:55,240 --> 00:07:58,750 اما این محدودیت های اساسی کامپیوترها تا چند سال پیش بود 131 00:07:58,750 --> 00:08:01,180 چرا که اگر شما فقط می توانید تعداد دفعات مشاهده به عنوان بالا به 4 میلیارد، 132 00:08:01,180 --> 00:08:05,270 مهم نیست که اگر شما خرید 8 گیگابایت RAM و یا حتی 5 گیگابایت RAM؛ 133 00:08:05,270 --> 00:08:07,780 شما نمی توانید شمارش، پس از آن بی فایده است. 134 00:08:07,780 --> 00:08:11,430 شما تنها می تواند 3 یا 4 گیگابایت از حافظه کامپیوتر شما دسترسی داشته باشند. 135 00:08:11,430 --> 00:08:14,410 که کمتر از یک مسئله در حال حاضر، و شما می توانید از مزایا و Dells مک بوک خرید 136 00:08:14,410 --> 00:08:17,680 با 8 گیگابایت RAM و یا حتی بیشتر این روزها. 137 00:08:17,680 --> 00:08:24,100 اما اگر من اختصاص کاملا به سادگی در این برنامه اشاره گر، یک اشاره گر به نام S، 138 00:08:24,100 --> 00:08:28,370 آن ممکن است شبیه این کار را بر روی صفحه نمایش نگاه کنید چون در واقع ما نیاز به پوست این لایه است. 139 00:08:28,370 --> 00:08:33,520 من نگه داشتن رشته گفت، اما روز دوشنبه، رشته واقعا کاراکتر * 140 00:08:33,520 --> 00:08:35,590 آدرس برخی از شخصیت. 141 00:08:35,590 --> 00:08:39,280 بنابراین که چرخ آموزش خاموش اجازه دهید حتی اگر با استفاده از GetString در حال حاضر ادامه خواهیم داد. 142 00:08:39,280 --> 00:08:42,600 بنابراین من اعلام S، و این است که یک تکه از حافظه 32 بیت است. 143 00:08:42,600 --> 00:08:47,370 آنچه در اینجا در حافظه به طور پیش فرض است؟ >> [پاسخ دانش آموز نامفهوم] 144 00:08:47,370 --> 00:08:50,040 که چیست؟ >> [دانشجو] زباله. زباله. >> دقیقا. 145 00:08:50,040 --> 00:08:54,610 اگر شما برنامه نویس می توانم در یک مقدار در یک متغیر قرار نیست، چه کسی می داند آنچه در آن است؟ 146 00:08:54,610 --> 00:08:57,990 گاهی اوقات شما خوش شانس است و آن را به 0، که، نوع، مقدار پیش فرض پاک و خوب است، 147 00:08:57,990 --> 00:09:00,310 اما همانطور که می دیدم دوشنبه، گاهی اوقات آن را مزخرف کامل، 148 00:09:00,310 --> 00:09:04,130 برخی از شماره واقعا بزرگ مثبت یا منفی که از جایی که آمد؟ 149 00:09:05,350 --> 00:09:07,010 آره. >> [دانشجو] تابع قبل از. >> آره. 150 00:09:07,010 --> 00:09:10,170 >> اغلب تابع است که قبل از اینکه به خاطر به یاد داشته باشید به نام کردم، 151 00:09:10,170 --> 00:09:13,920 که با شما تماس توابع در حافظه، آنها را تا فضای بیشتر و بیشتر از پایین به بالا، 152 00:09:13,920 --> 00:09:17,040 و به زودی به عنوان گرداند، که حافظه مورد استفاده مجدد قرار می شود 153 00:09:17,040 --> 00:09:20,890 پسر بعدی می شود که به نام است که با استفاده از همان برش خود را از حافظه است. 154 00:09:20,890 --> 00:09:23,450 و اگر شما زباله سمت چپ وجود دارد، مقادیر قبلی، 155 00:09:23,450 --> 00:09:28,190 ما ممکن است به عنوان داشتن برخی از ارزش زمانی که واقعا ما هیچ چیزی قرار نیست وجود دارد اشتباه است. 156 00:09:28,190 --> 00:09:30,960 بنابراین RAM خود را در این نقطه به نظر می رسد مثل این. 157 00:09:30,960 --> 00:09:36,030 در حال حاضر در سمت راست خط 7 ما تماس GetString، 158 00:09:36,030 --> 00:09:40,150 که ایم انجام شده است در حال حاضر برای هفته ها، اما چیزی است که GetString واقعا انجام؟ 159 00:09:40,150 --> 00:09:43,350 GetString نوشته شده توسط کارکنان CS50 است کمی هوشمند 160 00:09:43,350 --> 00:09:46,500 که در آن به محض آن که کاربر شروع به تایپ کلید و بازدید را وارد کنید، 161 00:09:46,500 --> 00:09:50,010 چهره های GetString که چگونه بسیاری از کلید ضربه کاربر 162 00:09:50,010 --> 00:09:53,360 که چگونه بسیاری از شخصیت من نیاز به تخصیص حافظه برای. 163 00:09:53,360 --> 00:09:55,660 و جایی است که RAM می آید از، که می داند؟ 164 00:09:55,660 --> 00:09:58,930 این در جایی در کامپیوتر خود را به 2 گیگابایت یا فلان چیز از حافظه است. 165 00:09:58,930 --> 00:10:05,200 اما اجازه دهید فرض کنید که کامپیوتر در بر داشت فضا برای کلمه HELLO حق در اینجا. 166 00:10:05,200 --> 00:10:08,710 کلمه ای که تایپ کردید H-E-L-L-O بود. 167 00:10:08,710 --> 00:10:13,510 و اگر ما این رسم را به عنوان دنباله ای از کاراکتر ها، ما ممکن است آن را شبیه به این قرعه کشی. 168 00:10:13,510 --> 00:10:17,860 اما من نیاز به به 1 چیز اضافی. در پایان از هر رشته در C چه به آن تعلق دارد؟ 169 00:10:17,860 --> 00:10:20,710 شخصیت تهی، که ما آن را به عنوان \ 0 ارسال. 170 00:10:20,710 --> 00:10:23,980 فنی 0 تعداد، اما اسلش همه روشن تر می سازد 171 00:10:23,980 --> 00:10:28,150 این است که به معنای واقعی کلمه، شماره 0، 0 صحیح است؛ 172 00:10:28,150 --> 00:10:32,440 به عنوان مثال، نقل قول، نقل قول را تمام 0 است که شما ممکن است در صفحه کلید تایپ، نه. 173 00:10:32,440 --> 00:10:33,940 بنابراین این HELLO. 174 00:10:33,940 --> 00:10:36,350 >> و چه ما در تاریخ دوشنبه می گویند که یک تابع مانند GetString 175 00:10:36,350 --> 00:10:39,580 است که در واقع بازگشت همه این هفته؟ 176 00:10:39,580 --> 00:10:43,960 این رشته در جنوب شرقی بازگشت نمی کند چرا که آن را واقعا به این معنی 177 00:10:43,960 --> 00:10:47,710 به دلیل رشته ها وجود ندارد. آنها مرتب سازی بر از ساخت در کتابخانه CS50. 178 00:10:47,710 --> 00:10:51,300 آنچه واقعا یک رشته، از لحاظ فنی تر است؟ >> [دانشجو] این شخصیت اول می باشد. 179 00:10:51,300 --> 00:10:55,950 دقیقا. این کاملا به سادگی آدرس اولین کاراکتر که کاربر تایپ شوید. 180 00:10:55,950 --> 00:11:02,810 بنابراین اگر کلمه من HELLO آن به پایان می رسد تا در 123 بایت تعداد و پس از آن در بایت شماره 124، 181 00:11:02,810 --> 00:11:08,320 125، 126، و غیره، اگر من فقط شماره بایت من از 0 تا، 182 00:11:08,320 --> 00:11:12,650 آنچه واقعا GetString بازگشت به معنای واقعی کلمه از 123 شماره است. 183 00:11:12,650 --> 00:11:19,270 پس چه می شود در S قرار داده شده است از 123 شماره، حرف H نیست، نه کلمه HELLO 184 00:11:19,270 --> 00:11:23,130 کاملا به سادگی آدرس را که در آن من می توانم حرف اول HELLO پیدا کنید. 185 00:11:23,130 --> 00:11:26,500 اما این مثل به اندازه کافی به نظر نمی رسد. من شما را برای یک رشته خواسته است، نه یک شخصیت است. 186 00:11:26,500 --> 00:11:32,970 پس چگونه ما و یا کامپیوتر می دانم که ELLO نوع همراه با H می آیند؟ 187 00:11:35,760 --> 00:11:37,460 مرتب کردن بر اساس توافق ما چه خبر؟ آره. 188 00:11:37,460 --> 00:11:40,100 [دانشجوی] آن را نگه می دارد گفتن خود را به پیدا کردن شخصیت های برخی از. >> دقیقا. 189 00:11:40,100 --> 00:11:44,570 >> انسان و کامپیوتر این کنوانسیون که به موجب آن هنگامی که شما در حال خرید و فروش با رشته وجود دارد، 190 00:11:44,570 --> 00:11:49,410 در غیر این صورت در حال حاضر به عنوان ستاره کاراکتر شناخته می شود، شما به سادگی باید به شکل 191 00:11:49,410 --> 00:11:54,350 که در پایان از هر رشته ای در زندگی است واقعا کمی بیش از آن را با یک حلقه for تکرار، 192 00:11:54,350 --> 00:11:57,820 یک حلقه در حالی که، هر چه، به طوری که هنگامی که شما در پیدا کردن انتهای رشته 193 00:11:57,820 --> 00:12:02,160 در حال حاضر شما می توانید از آن استنباط، آه، تمام کلمه HELLO بود. 194 00:12:02,160 --> 00:12:04,820 کسانی که از شما با تجربه برنامه نویسی قبلی ممکن است در جاوا می دانم 195 00:12:04,820 --> 00:12:09,880 شما فقط می توانید تماس بگیرید طول و به زبان های دیگر، شما می توانید طول یا مشابه آن تماس بگیرید. 196 00:12:09,880 --> 00:12:14,060 دلیلش این است که در بسیاری از زبانها، به خصوص چیزهای به نام زبانهای شی گرا، 197 00:12:14,060 --> 00:12:18,580 طول چیزی نوع در داخل محصور شده از قطعه ای از داده های خود است. 198 00:12:18,580 --> 00:12:24,000 خیلی دوست دارم ما محصور شناسه و نام ها و خانه ها در داخل یک دانشجو در روز دوشنبه است. 199 00:12:24,000 --> 00:12:28,700 اما C بسیار پایین تر از سطح است. هیچ اشیاء و یا کلاس ها وجود دارد، اگر شما شنیده ام کسانی که شرایط قبل از. 200 00:12:28,700 --> 00:12:31,490 همه شما باید در واقع آدرس حافظه است. 201 00:12:31,490 --> 00:12:35,540 بنابراین این نوع از راه قدیمی از مد افتاده به نمایندگی از ساختارهای داده ای جالب است. 202 00:12:35,540 --> 00:12:38,760 شما باید یک مقدار شروع مانند آدرس اولین کاراکتر 203 00:12:38,760 --> 00:12:42,340 و پس از آن فقط به برخی از کنوانسیون های خودسرانه که هر کس موافق است به دنبال. 204 00:12:42,340 --> 00:12:46,420 پس چگونه است که طول رشته اجرا می شود، ما پیشنهاد می کنیم؟ 205 00:12:46,420 --> 00:12:51,360 Strlen، strlen، که برخی از شما که در حال حاضر از چند بار استفاده شده است. این بسیار ساده است، درست است؟ 206 00:12:51,360 --> 00:12:53,060 این مثل 2 خط کد است. 207 00:12:53,060 --> 00:12:56,140 این تقریبا یک حلقه برای برخی از مرتب کردن بر اساس، شاید با یک متغیر اضافی محلی. 208 00:12:56,140 --> 00:13:00,540 اما strlen فقط به یک اشاره گر و سپس شروع به دنبال \ 0. 209 00:13:00,540 --> 00:13:05,190 >> و به محض این که آن را می یابد، می تواند تعداد کل مراحل است که آن را در این رشته گرفته شده را به شما بر می گردانند. 210 00:13:05,190 --> 00:13:07,150 بنابراین ما می توانیم از این استنباط آنچه در آینده می رود. 211 00:13:07,150 --> 00:13:11,850 فرض کنید T اعلام من به عنوان من در خط 10 انجام می شود. 212 00:13:11,850 --> 00:13:14,280 این برخی از ارزش زباله است. چه کسی می داند در ابتدا؟ 213 00:13:14,280 --> 00:13:18,490 اما در سمت راست خط 10 من خواستار GetString دوباره. 214 00:13:18,490 --> 00:13:20,050 چه کسی می داند که در آن به پایان می رسد تا؟ 215 00:13:20,050 --> 00:13:23,830 بیایید خودسرانه می گویند که سیستم عامل در بر داشت اتاق را برای آن راه در اینجا. 216 00:13:23,830 --> 00:13:28,610 من به اتفاق اتفاقی تایپ H-E-L-L-O دوباره، 217 00:13:28,610 --> 00:13:31,260 و بنابراین ما می توانیم همان نوع تصویر رسم کنید. 218 00:13:31,260 --> 00:13:34,290 اما این واقعیت که من دوباره ترسیم این تصویر این است آگاهانه 219 00:13:34,290 --> 00:13:37,720 که به دلیل متفاوت سلام از این یکی است 220 00:13:37,720 --> 00:13:43,920 بنابراین در اینجا ممکن است این محل 456، 457 است، و غیره. 221 00:13:43,920 --> 00:13:47,170 پس چه می شود که در آن علامت سوال قرار داده بود؟ 222 00:13:47,170 --> 00:13:50,190 در این مورد 456. 223 00:13:50,190 --> 00:13:53,540 ما در حال چیدن این اعداد خودسرانه چون واقعا بعد از امروز 224 00:13:53,540 --> 00:13:57,110 ما قصد داریم به مراقبت بسیار در مورد آنچه که آدرس هر چیزی است. 225 00:13:57,110 --> 00:14:02,690 همه ما در مورد مراقبت از این است که ما می توانیم از آدرس برخی از قطعه ای از داده ها مانند HELLO. 226 00:14:02,690 --> 00:14:07,100 >> پس در واقع چیزی است که اکثر مردم در علم کامپیوتر انجام دهید که صحبت کردن در مورد آدرس های حافظه 227 00:14:07,100 --> 00:14:10,210 و صحبت کردن در مورد اشاره گر به طور خاص، 228 00:14:10,210 --> 00:14:14,220 به جای زحمت بدانند 123 - چه کسی اهمیت میدهد که این مسائل واقع شده است، 229 00:14:14,220 --> 00:14:17,440 ما فقط می دانیم که آن را در برخی از آدرس های عددی است - 230 00:14:17,440 --> 00:14:22,180 ما ساده و فقط می گویند که اشاره به آن شخصیت 231 00:14:22,180 --> 00:14:25,080 و T است که اشاره به آن شخصیت است. 232 00:14:25,080 --> 00:14:27,430 و این واقعیت است که آن را به یک پیکان کاملا عمدی است 233 00:14:27,430 --> 00:14:31,610 چرا که در حال حاضر به معنای واقعی کلمه است با اشاره به H و T اشاره H 234 00:14:31,610 --> 00:14:34,720 زیرا در پایان روز، مهم نیست که چه آدرس، 235 00:14:34,720 --> 00:14:40,240 اما نشانی از آن ماده است که در حال حاضر توانایی به بیان است که آدرس را با برخی از قطعه ای از کد. 236 00:14:40,240 --> 00:14:42,730 ما واقعا نمی دستکاری این آدرس فقط رتبهدهی نشده است 237 00:14:42,730 --> 00:14:47,770 بنابراین خواهیم دید که در آن ما می توانیم نکته و مرتب کردن از چیزهای با اشاره گر، 238 00:14:47,770 --> 00:14:52,030 اما در حال حاضر در خط 12 به معنای واقعی کلمه ارزش ما مقایسه 239 00:14:52,030 --> 00:14:55,500 با توجه به این داستان در خط 12؟ 240 00:14:56,570 --> 00:15:01,290 ما نمی گوییم 123 برابر برابر به 456 است؟ و این که قطعا چنین نیست. 241 00:15:01,290 --> 00:15:05,320 و حتی مفهومی، این اشاره گر است که قطعا همین نیست 242 00:15:05,320 --> 00:15:09,500 GetString دلیل این که شما به نام دو بار، و GetString می کند سعی نکنید که فوق العاده باهوش، 243 00:15:09,500 --> 00:15:12,470 آن را نشانی از سعی کنید به درک، آه، شما تایپ HELLO 5 دقیقه پیش؛ 244 00:15:12,470 --> 00:15:15,090 اجازه دهید من به شما همان اشاره گر را به عنوان من به شما داد، 245 00:15:15,090 --> 00:15:18,450 فقط اختصاص یک قطعه جدیدی از حافظه هر بار که شما آن را فراخوانی می باشد. 246 00:15:18,450 --> 00:15:20,350 >> پس چگونه می توانم این مشکل را حل کنیم؟ 247 00:15:20,350 --> 00:15:24,270 اگر سطح بالاتر، من می خواهم به مقایسه رشته: سلام و خوش آمدید - 248 00:15:24,270 --> 00:15:28,680 من در مورد اشاره گر ها اهمیتی نمی - چگونه می توانم در مورد پاسخ به این سوال، 249 00:15:28,680 --> 00:15:31,980 کاربر نوع همان چیزی است؟ در اینجا لازم است؟ آره. 250 00:15:31,980 --> 00:15:35,200 [دانشجو] با استفاده از یک تابع. >> من می توانم یک تابع استفاده از جعبه. 251 00:15:35,200 --> 00:15:38,170 من می توانم با استفاده از یک تابع به نام strcmp، s-t-R-C-M-p 252 00:15:38,170 --> 00:15:41,190 تنها نسخه به صورت مختصر گفت رشته مقایسه است. 253 00:15:41,190 --> 00:15:45,070 و اگر ما به به، به عنوان مثال، مقایسه 2، است که در میان جزوات امروز، 254 00:15:45,070 --> 00:15:46,690 من که دقیقا. 255 00:15:46,690 --> 00:15:51,750 من هر چیز دیگری از همان خط 1 را به 26 یا بیشتر نگهداری می شود، 256 00:15:51,750 --> 00:15:54,360 و در حال حاضر این بخش فقط کمی تغییر کرده است اطلاع می دهد. 257 00:15:54,360 --> 00:15:57,690 اجازه چشم پوشی خط 28 برای یک لحظه و تمرکز تنها بر روی یکی از این. 258 00:15:57,690 --> 00:16:00,410 آنچه ما می گویند دوشنبه STR مقایسه می کند؟ 259 00:16:00,410 --> 00:16:05,200 این دسته روند خوردن 2 اشاره گر، S و T در این مورد، 260 00:16:05,200 --> 00:16:08,480 مرتب سازی بر اساس عملا با قرار دادن انگشت خود را بر روی آن 2 حرف، 261 00:16:08,480 --> 00:16:11,530 و آنچه که باید انجام دهید چیزی شبیه به حلقه در حالی که یک یا یک حلقه است، 262 00:16:11,530 --> 00:16:16,050 آن را می گوید و این همان است؟ اگر چنین است، انگشتان دست یا اشاره گر رو به جلو حرکت می کند. 263 00:16:16,050 --> 00:16:17,970 آیا این همان است، این همان، این، همان 264 00:16:17,970 --> 00:16:22,710 این همان است، این همان است؟ و آه، من در پایان از رشته در هر دو و t هستم. 265 00:16:22,710 --> 00:16:26,780 من هیچ تناقضی یافت نشد. بله، این رشته ها یکسان است. 266 00:16:26,780 --> 00:16:31,940 و چه STR بازگشت اگر 2 رشته ها یکسان مقایسه، ظاهرا؟ صفر. 267 00:16:31,940 --> 00:16:35,900 بنابراین 0 است خوب در این مورد است، زیرا اگر آن را برمی گرداند -1 و یا 1، 268 00:16:35,900 --> 00:16:40,560 که بدان معنی است که فقط اتفاق می افتد قبل از T بر اساس حروف الفبا و یا بعد از T آمده است. 269 00:16:40,560 --> 00:16:43,760 و چرا که مفید باشد به یک تابع است که به شما می گوید که رشته پیش می آید 270 00:16:43,760 --> 00:16:46,720 و یا پس از یک فرهنگ لغت؟ 271 00:16:46,720 --> 00:16:48,740 [دانشجو] به جستجو میکرد. >> جستجو و مرتب سازی. 272 00:16:48,740 --> 00:16:51,730 >> بنابراین شما می توانید چیزهایی مانند جستجو دودویی یا مرتب سازی بر حباب انجام یا ادغام مرتب سازی بر اساس 273 00:16:51,730 --> 00:16:53,230 که در آن شما را به چیزهایی مقایسه است. 274 00:16:53,230 --> 00:16:56,420 تا کنون کرده ایم نوع قطع برخی از گوشه و فقط در مورد مرتب سازی صحبت کردیم 275 00:16:56,420 --> 00:16:59,430 در زمینه ای از اعداد به این دلیل آن را به خوبی و آسان به صحبت کردن در مورد، 276 00:16:59,430 --> 00:17:02,430 اما شما قطعا می توانید رشته ها، سیب و موز مقایسه، 277 00:17:02,430 --> 00:17:05,349 چرا که اگر اپل شناخته شده است قبل از موز، به طور مشابه، 278 00:17:05,349 --> 00:17:09,319 می توانید رشته ها را به اطراف حرکت در حافظه درست مثل راب با مرتب کردن بر اساس ادغام در این ویدئو 279 00:17:09,319 --> 00:17:15,880 و ما در اینجا بر روی صحنه با مرتب کردن بر اساس انتخاب، مرتب کردن بر اساس درج و مرتب سازی بر حباب بود. 280 00:17:15,880 --> 00:17:18,710 پس کجا دیگر می تواند ما را؟ بیایید سعی کنید این. 281 00:17:18,710 --> 00:17:23,980 مرتب سازی بر بیایید را فراموش کرده ام که درس را برای یک لحظه و سعی کنید در حال حاضر و کپی 1.c به انجام موارد زیر است. 282 00:17:23,980 --> 00:17:26,800 در خط 21 من که چیزی گفته باشد چاپ، 283 00:17:26,800 --> 00:17:28,520 پس از آن من گرفتن یک رشته از کاربر، 284 00:17:28,520 --> 00:17:30,690 سپس من دارم این است. 285 00:17:30,690 --> 00:17:33,620 ما را به این عادت واقعا بدست رتبهدهی نشده است، اما اجازه دهید در حال حاضر انجام این کار شده است. 286 00:17:33,620 --> 00:17:40,990 اجازه دهید در واقع پوست بازنگری این لایه است. این است که واقعا کاراکتر *. این مرد واقعا کاراکتر *. 287 00:17:40,990 --> 00:17:45,690 بنابراین آن چه به چک کردن اگر S == NULL؟ 288 00:17:45,690 --> 00:17:48,380 به نظر می رسد که زمانی که شما به یک تابع مانند GetString 289 00:17:48,380 --> 00:17:51,540 و یا به طور کلی فقط یک کامپیوتر به شما برخی از حافظه را بپرسید، 290 00:17:51,540 --> 00:17:53,030 چیزی ممکن است اشتباه است. 291 00:17:53,030 --> 00:17:56,630 شما می توانید دیوانه و از کامپیوتر برای ترابایت حافظه 292 00:17:56,630 --> 00:18:01,780 با پرسیدن تریلیون بایت از حافظه است که تنها در کامپیوتر وجود ندارد، 293 00:18:01,780 --> 00:18:05,130 اما GetString و دیگر توابع، نیاز به برخی از راه های از فریاد در تو 294 00:18:05,130 --> 00:18:06,820 اگر شما بیش از حد خواسته شده است. 295 00:18:06,820 --> 00:18:10,450 و راه GetString می کند این است که اگر شما برای حافظه بیشتر پرسیده 296 00:18:10,450 --> 00:18:14,250 از در کامپیوتر در دسترس است، حتی اگر این احتمال فوق العاده، فوق العاده کم 297 00:18:14,250 --> 00:18:17,730 چرا که هیچ یک از ما در حال رفتن به تایپ یک تریلیون شخصیت ها و پس از آن ضربه را وارد کنید. 298 00:18:17,730 --> 00:18:21,980 اما احتمال کم هر چند که ممکن است، من هنوز هم می خواهید به آن را چک کنید فقط در مورد، 299 00:18:21,980 --> 00:18:26,120 و ارزش ویژه ای است که GetString، پاسخ، و دیگر توابع را برمی گرداند 300 00:18:26,120 --> 00:18:30,630 اگر چیزی را اشتباه رفته است NULL در همه کلاه است. 301 00:18:30,630 --> 00:18:36,520 >> و آنچه NULL؟ NULL فقط تا اتفاقی می افتد به نمایندگی از یک اشاره گر است. 0 آدرس حافظه است. 302 00:18:36,520 --> 00:18:40,800 جهان تصمیم گرفته است که خودسرانه، در صورتی که از این حافظه کامپیوتر من - شما می دانید چه؟ - 303 00:18:40,800 --> 00:18:46,260 ما قصد داریم به سرقت فقط 1 بایت از حافظه هر کامپیوتر و این محل سکونت 0 است. 304 00:18:46,260 --> 00:18:49,560 ما قصد داریم به آن نام مستعار NULL می دهد، و ما در حال رفتن به وعده 305 00:18:49,560 --> 00:18:52,660 که ما در واقع هرگز قرار دادن داده های واقعی وجود دارد. 306 00:18:52,660 --> 00:18:56,770 چون ما فقط فردی را خودسرانه نیاز به یک مقدار خاص، 0، NULL با نام مستعار، 307 00:18:56,770 --> 00:19:00,230 به طوری که ما می توانیم در کاربران داد، اگر چیزی را اشتباه می رود. 308 00:19:00,230 --> 00:19:03,590 در غیر این صورت شما ممکن است می دانم که می کند 0 به معنای قرار دادن چیزی در اینجا 309 00:19:03,590 --> 00:19:05,490 یا اینکه معنی چیزی را اشتباه رفت؟ 310 00:19:05,490 --> 00:19:09,190 ما باید به همه توافق دارند که هیچ چیز معنی NULL برگردانده شد، 311 00:19:09,190 --> 00:19:11,700 هیچ نشانی واقعی بازگشته است. 312 00:19:11,700 --> 00:19:15,210 در حال حاضر، در اینجا من فقط اتخاذ کنوانسیون انسان من از من بازگشت 1 از اصلی 313 00:19:15,210 --> 00:19:17,040 اگر چیزی را اشتباه می رود. 314 00:19:17,040 --> 00:19:20,650 دلیلش این است که بازگشت کنوانسیون اصلی است 0 اگر خوب به بازگشت، 315 00:19:20,650 --> 00:19:22,990 1 یا برخی از ارزش های دیگر اگر بد. 316 00:19:22,990 --> 00:19:28,200 اما GetString و هر تابعی که معاملات در بازده حافظه NULL اگر چیزی می رود بد است. 317 00:19:28,200 --> 00:19:33,480 >> باشه. بنابراین متاسفانه، خط 27، فوق العاده ساده هر چند از آن است، به طور کامل با شکست مواجه برای کپی کردن رشته است. 318 00:19:33,480 --> 00:19:35,740 چرا؟ ما می توانیم این را به عنوان شرح زیر است. 319 00:19:35,740 --> 00:19:40,120 من ادعا در خط 27 به ساخت یک کپی از S و خواستار آن T است. 320 00:19:40,120 --> 00:19:45,790 بنابراین من کاربر برای 2 رشته در این زمان تقاضا را ندارم، من فقط گفت: ارزش ها 321 00:19:45,790 --> 00:19:47,870 باید در T را نیز قرار داده شده است. 322 00:19:47,870 --> 00:19:52,890 بنابراین در حال حاضر فقط برای نشان دادن چگونه شکسته این است، در خط 29 به بعد چه کار من؟ 323 00:19:52,890 --> 00:19:56,980 اول من دارم اگر طول T بزرگتر از 0 است. 324 00:19:56,980 --> 00:19:59,330 در برخی از رشته وجود دارد. کاربر چیزی وارد تایپ 325 00:19:59,330 --> 00:20:03,410 خط 32 انجام می دهند، ظاهرا چیست؟ 326 00:20:03,410 --> 00:20:08,910 [پاسخ دانش آموز نامفهوم] >> راست. می توانید آن را نوع استنباط از آنچه که من می گفت که آن را انجام می دهند. 327 00:20:08,910 --> 00:20:13,200 اما از نظر فنی، این چیزی است که انجام شده است؟ T [0] نشان دهنده چه؟ 328 00:20:13,200 --> 00:20:15,140 [دانشجو] شخصیت 0 >> [مالان] شخصیت 0. 329 00:20:15,140 --> 00:20:19,620 یا به مانند انسان، اولین شخصیت در T، به هر چه که است، H شاید در این مورد. 330 00:20:19,620 --> 00:20:24,990 و toupper چه می گوید. این سرمایه شخصیت 0 T و آن را تغییر. 331 00:20:24,990 --> 00:20:28,430 بنابراین این بدان معنی شخصیت 0 از تی، آن را به بزرگ، 332 00:20:28,430 --> 00:20:30,320 و آن را که در همان محل است. 333 00:20:30,320 --> 00:20:35,540 بنابراین اگر من خوش آمدید در حروف کوچک تایپ کنید، این باید ساعت حروف کوچک به H. پایتخت تغییر 334 00:20:35,540 --> 00:20:41,400 اما مشکل این است که در خطوط 35 و 36 آنچه که من در مورد به انجام این کار هستم نسخه قابل چاپ کردن برای ما S و T است. 335 00:20:41,400 --> 00:20:43,120 و قوز شما؟ 336 00:20:43,120 --> 00:20:47,250 چه هستم من در واقع می خواهم برای دیدن اگر من خوش آمدید در تمام حروف کوچک تایپ؟ 337 00:20:47,250 --> 00:20:52,280 چه رفتن به چاپ؟ >> [پاسخ دانش آموز نامفهوم] >> که چه؟ 338 00:20:52,280 --> 00:20:58,360 [دانشجوی] H بزرگ و بقیه کوچک است. >> H بزرگ و بقیه کوچک که برای آن، یا T؟ 339 00:20:58,360 --> 00:21:03,170 [دانشجو] هر دو. >> هر دو. دقیقا. پس اجازه دهید را ببینید چه خبر است در اینجا. 340 00:21:03,170 --> 00:21:08,380 >> اجازه بدهید من بروم جلو و تدوین این. این copy1، بنابراین copy1 کند. بسیار خوب. 341 00:21:08,380 --> 00:21:14,840 بزرگنمایی شوید اجازه دهید من به جلو بروید و آن را اجرا copy1، وارد، چیزی بگو: سلام در حروف کوچک. 342 00:21:14,840 --> 00:21:19,570 حروف بزرگ کپی، بلکه آن را ظاهرا با حروف بزرگ اصلی به عنوان، 343 00:21:19,570 --> 00:21:22,070 زیرا آنچه در حال حاضر در این داستان اتفاق می افتد؟ 344 00:21:22,070 --> 00:21:27,030 در خط 27 من در واقع به نظر می رسد به رشته کپی کردن، 345 00:21:27,030 --> 00:21:30,450 اما حتی اگر شما ممکن است به طور مستقیم امید می رود که به صورت، 346 00:21:30,450 --> 00:21:33,680 اگر شما در مورد این عکس فکر می کنم، که واقعا چه کرده ام؟ 347 00:21:33,680 --> 00:21:35,410 نیمی از تصویر همان است. 348 00:21:35,410 --> 00:21:39,390 بنابراین عقب در زمان اجازه دهید به طوری که تی در داستان هنوز رتبهدهی نشده است وجود داشته باشد. 349 00:21:39,390 --> 00:21:43,160 S می تواند در داستان وجود داشته باشد، اما اجازه دهید کوچک خوش آمدید این زمان. 350 00:21:43,160 --> 00:21:46,710 پس من رو درست چیزی است که من در واقع تایپ شوید. 351 00:21:46,710 --> 00:21:51,280 در این مورد در اینجا ما باید H-E-l-l-O. 352 00:21:51,280 --> 00:21:58,050 ما می خواهیم آن را به عنوان دنباله ای از کاراکتر ها قرعه کشی، قرار دادن خطوط جدا من و من \ 0. 353 00:21:58,050 --> 00:22:05,980 بنابراین این جایی است که ما به عنوان به زودی به عنوان خط 1 را از طریق 24-پذیری، دادن و یا گرفتن، اعدام کرده اند. 354 00:22:05,980 --> 00:22:07,800 این تصویر از حافظه من است. 355 00:22:07,800 --> 00:22:10,800 هنگامی که من به خط 27، چه اتفاقی می افتد؟ 356 00:22:10,800 --> 00:22:14,730 فقط مثل قبل، من یک اشاره گر، که من آن را به عنوان این مربع قرعه کشی. 357 00:22:14,730 --> 00:22:19,740 آن را به نام T است. و چیزی که ارزش خود را به طور پیش فرض چیست؟ چه کسی می داند؟ برخی از ارزش زباله. 358 00:22:19,740 --> 00:22:22,060 >> بنابراین من خلاصه اون دور به عنوان یک علامت سوال. 359 00:22:22,060 --> 00:22:27,670 و به زودی به عنوان سمت راست خط 27 اجرا، چه هستم من قرار دادن در داخل T؟ 360 00:22:27,670 --> 00:22:30,770 همان چیزی که در S است. 361 00:22:30,770 --> 00:22:34,120 بنابراین اگر ما برای یک لحظه حذف این انتزاع از فلش و ما می گویند، 362 00:22:34,120 --> 00:22:40,330 آه، این حافظه آدرس بار 123 است، زمانی که به شما می گویند T می شود S، نقطه و ویرگول بدین شکل؛ 363 00:22:40,330 --> 00:22:42,700 شما به معنای واقعی کلمه قرار دادن 123 اینجا کلیک کنید. 364 00:22:42,700 --> 00:22:45,200 حالا اگر ما نوع ساده جهان ما دوباره با تصاویر، 365 00:22:45,200 --> 00:22:48,750 آنچه که تو واقعا انجام می شود فقط یک فلش جهان را به خود اضافه شده است 366 00:22:48,750 --> 00:22:52,910 که با اشاره از T به رشته یکسان است. 367 00:22:52,910 --> 00:22:59,730 بنابراین، هنگامی که در خط 31 و 32 در واقع من در مورد تغییر T [0] 368 00:22:59,730 --> 00:23:05,580 آنچه که T [0] ظاهرا در حال حاضر مترادف با؟ [0] 369 00:23:05,580 --> 00:23:07,030 به طوری که همه که اتفاق می افتد. 370 00:23:07,030 --> 00:23:09,900 و حتی هر چند این نوع احساس کمی کم و محرمانه 371 00:23:09,900 --> 00:23:12,760 و این نوع از احساس می کند مانند شاید به طور مستقیم این باید کار می کرد - 372 00:23:12,760 --> 00:23:15,410 من کپی از کارهای قبل از ساخته شده و آن را فقط به کار کرده است - 373 00:23:15,410 --> 00:23:18,590 اگر شما واقعا در مورد آنچه که یک رشته واقعا فکر می کنم، آن * کاراکتر است. 374 00:23:18,590 --> 00:23:21,700 خب، چه است؟ این آدرس برخی از شخصیت است. 375 00:23:21,700 --> 00:23:24,930 پس شاید آن را حس می کند که هنگامی که شما سعی می کنید برای انجام کاری 376 00:23:24,930 --> 00:23:29,220 فوق العاده ظاهر ساده، مثل این همه شما در حال انجام کپی کردن یک آدرس حافظه است. 377 00:23:29,220 --> 00:23:32,530 شما در واقع نه انجام هر چیزی را با خود رشته. 378 00:23:32,530 --> 00:23:37,500 بنابراین حتی اگر شما هیچ ایده چگونه شما می توانید حل این مشکل در کد 379 00:23:37,500 --> 00:23:45,080 مفهومی، سطح بالا، چه چیزی ما نیاز به انجام به منظور ایجاد TA کپی واقعی از S، ظاهرا؟ 380 00:23:46,670 --> 00:23:48,820 آره. >> [دانشجو] آن را به یک محل جدید به من بدهید؟ >> دقیقا. 381 00:23:48,820 --> 00:23:50,800 >> ما باید به یک مکان تجاری جدید. 382 00:23:50,800 --> 00:23:55,230 ما باید به نحوی ایجاد یک جهان که در آن ما یک تکه جدیدی از حافظه، 383 00:23:55,230 --> 00:24:00,090 که فقط به خاطر وضوح را من درست در زیر این قرعه کشی، اما لازم نیست وجود داشته باشد. 384 00:24:00,090 --> 00:24:04,880 اما برای این کار باید به همان اندازه است، بنابراین من از این خط عمودی در همان محل رسم. 385 00:24:04,880 --> 00:24:09,720 خوب اگر این است که همه زباله در ابتدا. چه کسی می داند چه بود؟ 386 00:24:09,720 --> 00:24:13,850 اما مرحله 1 است به زودی به من به عنوان حافظه زیادی را که من باید 387 00:24:13,850 --> 00:24:18,630 به تناسب یک کپی از خوش آمدید، پس از آن شکل چگونه برای کپی کردن ساعت در اینجا، E در اینجا، 388 00:24:18,630 --> 00:24:20,390 ل و غیره. 389 00:24:20,390 --> 00:24:24,880 اما در حال حاضر باید این احساس کمی واضح است، حتی اگر برخی از جزئیات هنوز مجرد هستند. 390 00:24:24,880 --> 00:24:28,690 برای کپی کردن این رشته را به این، آن را فقط یک حلقه یا حلقه 391 00:24:28,690 --> 00:24:31,580 و یا چیزی که شما با آن بیشتر آشنا شده ام. 392 00:24:31,580 --> 00:24:35,970 بنابراین سعی کنید این اجازه. اجازه دهید من به copy2.c. 393 00:24:35,970 --> 00:24:43,270 در copy2.c در حال حاضر تقریبا همان برنامه به جز خط 27. 394 00:24:43,270 --> 00:24:47,260 کمی پیچیده به نظر می رسد، اما اگر ما آن را شکستن تکه تکه، 395 00:24:47,260 --> 00:24:48,950 سمت چپ همان است. 396 00:24:48,950 --> 00:24:52,790 کاراکتر * T ایجاد این چیزی که در حافظه، البته با یک علامت سوال 397 00:24:52,790 --> 00:24:54,680 چرا که ما هیچ ایده چه چیزی وجود دارد به طور پیش فرض. 398 00:24:54,680 --> 00:24:57,920 در سمت راست ما در حال حاضر معرفی تابع جدید، malloc، 399 00:24:57,920 --> 00:25:00,640 برای به حافظه اختصاص دهد، حافظه را، 400 00:25:00,640 --> 00:25:06,900 و ظاهرا طول می کشد که چگونه بسیاری از استدلال، چگونه بسیاری از چیزهای داخل پرانتز؟ 401 00:25:09,660 --> 00:25:12,130 من شنیده ام زمزمه 1 و 2 است، اما این فقط 1. 402 00:25:12,130 --> 00:25:15,320 هیچ کاما از هم وجود دارد، که به معنی فقط 1 چیزی که در داخل پرانتز وجود دارد. 403 00:25:15,320 --> 00:25:17,720 گرچه پرانتز دیگر وجود دارد، به من اجازه برجسته 404 00:25:17,720 --> 00:25:21,460 آنچه در داخل پرانتز خارجی ترین است، و آن این عبارت است: 405 00:25:21,460 --> 00:25:25,880 (strlen () + 1) * sizeof (کاراکتر). 406 00:25:25,880 --> 00:25:29,190 بنابراین، اگر ما در واقع فکر می کنم این از طریق، این است که گفت: در طول S را به من بدهید. 407 00:25:29,190 --> 00:25:34,440 چرا من، هر چند، و اضافه (1) بر روی طول؟ >> [پاسخ دانش آموز نامفهوم] 408 00:25:34,440 --> 00:25:40,200 دقیقا. ما باید فضا را برای این مرد در دم، شخصیت ششم است که هیچ معنی انگلیسی 409 00:25:40,200 --> 00:25:42,250 کند، اما معنا و مفهوم خاصی برنامه ریزی شده است. 410 00:25:42,250 --> 00:25:46,800 >> بنابراین ما نیاز به یک + 1 است که به دلیل از strlen بازده انتظار بشر از طول، 411 00:25:46,800 --> 00:25:50,890 خوش آمدید یا 5، آن را نشانی از به شما شخصیت تهی اضافی نیست. 412 00:25:50,890 --> 00:25:52,980 بنابراین من دستی این کار را با + 1 را اضافه کنید. 413 00:25:52,980 --> 00:25:56,060 و پس از این، اندازه * (کاراکتر)، ما را دیده اند، نه قبل از این. 414 00:25:56,060 --> 00:25:57,480 این است که از لحاظ فنی یک تابع نیست. 415 00:25:57,480 --> 00:26:04,150 این یک کلمه کلیدی خاص که فقط به شما می گوید که چه اندازه از برخی از نوع داده ها بر روی یک کامپیوتر 416 00:26:04,150 --> 00:26:06,980 زیرا در واقع، بعضی از ما رایانه های 32 بیتی است. 417 00:26:06,980 --> 00:26:10,900 من یک کامپیوتر در خانه خیلی قدیمی است، و آن را تنها با استفاده از 32 بیت برای نشان دادن اشاره گر است. 418 00:26:10,900 --> 00:26:13,900 و بنابراین اگر من به اندازه نوع داده، آن را ممکن است 32 بیت. 419 00:26:13,900 --> 00:26:18,300 اما اگر من با استفاده از کامپیوتر فانتزی جدید من، من ممکن است یک مقدار از 64 بیت 420 00:26:18,300 --> 00:26:20,510 چیزی شبیه به یک آدرس. 421 00:26:20,510 --> 00:26:25,400 بنابراین در این مورد، فقط به امن فوق العاده، ما را به چیزی کد سخت مانند رفتن نیست - 422 00:26:25,400 --> 00:26:28,740 خب، به اندازه یک کاراکتر با توجه به آنچه که ما انجام داده ایم، گفت: تا کنون چیست؟ 423 00:26:28,740 --> 00:26:34,450 ما بسیار گفت شفاهی که آن را به 1 بایت، و این خیلی واقعی در سراسر هیئت مدیره. 424 00:26:34,450 --> 00:26:37,000 اما باز هم، مفروضات تمایل به بد. 425 00:26:37,000 --> 00:26:40,850 آنها به نرم افزار حشره دار منجر اگر از افراد استفاده از نرم افزار خود را در راه شما قصد. 426 00:26:40,850 --> 00:26:44,750 بنابراین انتزاعی اجازه دهید این دور و تنها عام می گویند 427 00:26:44,750 --> 00:26:46,830 من نیاز به این تکه های بسیاری از حافظه 428 00:26:46,830 --> 00:26:50,210 و هر تکه از حافظه باید به اندازه یک کاراکتر معادل، 429 00:26:50,210 --> 00:26:54,870 است که در واقع برابر با 1 در این مورد است، اما این یک راه عمومی تر از نوشتن آن است. 430 00:26:54,870 --> 00:27:00,460 بنابراین، در صورتی که کلمه خوش آمدید، که چگونه بسیاری از بایت malloc ظاهرا خوش آمدید اختصاص؟ 431 00:27:00,460 --> 00:27:04,980 [دانشجو] شش. >> شش. دقیقا همانطور که بسیاری به عنوان علامت سوال بر روی صفحه نمایش. 432 00:27:04,980 --> 00:27:07,800 و سپس یک حدس در حال حاضر بر اساس درک خود را از GetString 433 00:27:07,800 --> 00:27:12,790 چه malloc احتمالا بازگشت؟ >> [دانشجو] آدرس. 434 00:27:12,790 --> 00:27:17,020 آدرس از چه؟ اولین تکه از حافظه است. 435 00:27:17,020 --> 00:27:20,670 >> در حال حاضر هیچ ایده چه چیزی وجود دارد زیرا برخی از عملکرد های دیگر 436 00:27:20,670 --> 00:27:23,010 می توانست با استفاده از این حافظه که قبلا. 437 00:27:23,010 --> 00:27:28,380 اما malloc، مانند GetString، آدرس را بر می گرداند از اولین بایت از حافظه 438 00:27:28,380 --> 00:27:30,540 است که آن را کنار گذاشته برای شما تنظیم شده است. 439 00:27:30,540 --> 00:27:38,380 با این حال، آنچه در آن انجام نمی دهد در این خالی با یک کاراکتر بک اسلش تهی را پر کنید 440 00:27:38,380 --> 00:27:43,030 زیرا به نظر می رسد از شما می توانید malloc هر چیزی را به اختصاص استفاده کنید: نوع داده int، رشته ها، آرایه ها، 441 00:27:43,030 --> 00:27:45,700 شناور، سازه های دانشجویی. 442 00:27:45,700 --> 00:27:47,750 شما می توانید malloc به طور کامل عموما استفاده کنید. 443 00:27:47,750 --> 00:27:51,470 این کار اهمیتی نمی دهند و یا باید بدانید که آنچه شما اختصاص حافظه برای. 444 00:27:51,470 --> 00:27:55,810 پس از آن خواهد بود مغرور malloc برای قرار دادن 0 \ 445 00:27:55,810 --> 00:27:58,340 در پایان هر تکه از حافظه شما را دادن 446 00:27:58,340 --> 00:28:02,620 زیرا این \ 0 از چیزهایی است که فقط کنوانسیون رشته است. 447 00:28:02,620 --> 00:28:06,310 آن را برای نوع داده int استفاده نمی شود، آن را برای شناور استفاده نمی شود، آن را برای دانش آموزان استفاده می شود. 448 00:28:06,310 --> 00:28:11,730 و به این ترتیب مارپیچ با malloc این است که این بار به طور کامل به شما برنامه نویس 449 00:28:11,730 --> 00:28:16,790 به یاد داشته باشید که چگونه بسیاری از بایت به شما اختصاص داده شده و نه تا به حال با استفاده از حلقه for 450 00:28:16,790 --> 00:28:21,570 و یا یک حلقه و در حالی که به گذشته از مرز تکه از حافظه شما داده شده است. 451 00:28:21,570 --> 00:28:23,540 به عبارت دیگر، به محض اینکه شما به حافظه اختصاص دهد. 452 00:28:23,540 --> 00:28:28,510 شما می توانید از سیستم عامل بپرسید، آه، به هر حال، چگونه از یک تکه از حافظه بزرگ بود؟ 453 00:28:28,510 --> 00:28:32,080 این کاملا به شما به خاطر داشته باشید اگر شما نیاز دارید که ارزش. 454 00:28:32,080 --> 00:28:34,330 >> بنابراین اجازه دهید را ببینید چگونه می توانم اقدام به استفاده از این حافظه است. 455 00:28:34,330 --> 00:28:38,430 در خط 28 و 29 چرا من انجام این کار؟ 456 00:28:39,850 --> 00:28:42,260 ورود به سلامت عقل کل. 457 00:28:42,260 --> 00:28:45,110 فقط در مورد چیزی رفت و اشتباه است، من برای برخی از مقدار دیوانه از حافظه بخواهید 458 00:28:45,110 --> 00:28:48,690 یا من بسیاری از چیزها را در حال اجرا بر روی کامپیوتر که فقط حافظه کافی نیست، 459 00:28:48,690 --> 00:28:51,780 چیزی شبیه به آن، من حداقل می خواهید برای تهی چک کنید. 460 00:28:51,780 --> 00:28:55,260 در واقع، بسیاری از رایانهها، به شما این توهم را که هر برنامه 461 00:28:55,260 --> 00:28:57,080 می تواند به طور کامل از RAM شما را استفاده کنید، 462 00:28:57,080 --> 00:29:00,740 اما با این حال، در صورتی که کاربر در برخی از رشته طولانی دیوانه شاید به دلیل که آنها یک پسر بد 463 00:29:00,740 --> 00:29:03,440 و آنها در واقع تلاش برای سقوط برنامه و یا هک شما را به آن، 464 00:29:03,440 --> 00:29:07,300 شما می خواهید به حداقل مقدار بازگشتی از malloc چک و این که آیا آن را برابر تهی است. 465 00:29:07,300 --> 00:29:11,630 و اگر چنین شود، اجازه دهید فقط ترک در حال حاضر به خاطر من نمی دانم چه چیزی را در این مورد انجام دهد. 466 00:29:11,630 --> 00:29:13,950 چگونه می توانم این رشته من را کپی کنید؟ چند راه برای انجام این کار وجود دارد. 467 00:29:13,950 --> 00:29:18,850 خ کپی توابع در C وجود دارد، اما آن را فوق العاده ساده است برای ما برای انجام این کار راه قدیمی از مد افتاده است. 468 00:29:18,850 --> 00:29:23,110 >> اول من کشف کردن آنچه در طول S است. 469 00:29:23,110 --> 00:29:26,930 من می توانستم این کار را در حلقه قرار داده است اما جای من فقط آن را از اینجا برای وضوح است. 470 00:29:26,930 --> 00:29:30,610 بنابراین N در حال حاضر فروشگاه ها طول رشته اصلی، که ظاهرا 5. 471 00:29:30,610 --> 00:29:35,290 سپس در حلقه برای من من تکرار از 0 تا N، 472 00:29:35,290 --> 00:29:40,940 و در هر تکرار من قرار دادن [من] در داخل T [من]. 473 00:29:40,940 --> 00:29:45,060 بنابراین این چیزی است که من با 2 انگشت اشاره در رشته قبل از بیان است. 474 00:29:45,060 --> 00:29:49,260 از آنجا که این حلقه برای تکرار شبیه به این، من قصد دارم به کپی کردن ساعت به اینجا، 475 00:29:49,260 --> 00:29:52,890 E به اینجا، L به اینجا به دلیل این ها، این است که T. 476 00:29:52,890 --> 00:29:58,770 و پس از آن در نهایت، در خط 35 به همین دلیل من برای انجام این کار؟ 477 00:29:58,770 --> 00:30:03,770 من نیاز به مطمئن شوید که من پایان دادن به رشته T. 478 00:30:03,770 --> 00:30:06,170 و من را در این راه فوق العاده صریح و روشن است. 479 00:30:06,170 --> 00:30:09,510 اما پیشنهاد، کسی، اگر شما می توانید راه های مختلف انجام این کار است. 480 00:30:09,510 --> 00:30:13,930 من واقعا نیاز به خط 35. یکی دیگر از راه برای انجام این کار وجود دارد. 481 00:30:13,930 --> 00:30:18,880 آره. >> [پاسخ دانش آموز نامفهوم] >> بگو آن را بلندتر است. 482 00:30:18,880 --> 00:30:20,960 [دانشجو] کمتر از یا مساوی است. >> دقیقا. 483 00:30:20,960 --> 00:30:24,450 ما فقط می تواند کمتر یا مساوی N، که به طور کلی بوده است بد می گویند 484 00:30:24,450 --> 00:30:28,190 چون تقریبا همیشه وقتی میریم به یک مساوی به چیزی که ما در حال شمارش 485 00:30:28,190 --> 00:30:30,000 ما به 1 مرحله بیش از حد. 486 00:30:30,000 --> 00:30:32,170 اما به یاد داشته باشید، که چگونه بسیاری از ما اختصاص بایت؟ 487 00:30:32,170 --> 00:30:37,210 ما اختصاص داده strlen ها، تا 5 + 1، از مجموع 6. 488 00:30:37,210 --> 00:30:39,980 بنابراین در این مورد ما می تواند چیزی شبیه به این را انجام دهد 489 00:30:39,980 --> 00:30:46,450 به طوری که ما در حال کپی کردن نه تنها خوش آمدید 0 \ در پایان بسیار است. 490 00:30:46,450 --> 00:30:49,860 روش دیگر، ما می توانیم یک تابع به نام STR نسخه، استفاده از strcpy، 491 00:30:49,860 --> 00:30:51,700 اما تقریبا به همان اندازه سرگرم کننده خواهد بود. 492 00:30:51,700 --> 00:30:54,000 اما این تمام آن را زیر هود انجام می دهد. 493 00:30:54,000 --> 00:30:56,050 سپس در نهایت، ما همان چیزی قبل از. 494 00:30:56,050 --> 00:31:01,620 T سرمایه گذاری من و سپس من ادعا می کنند که اصلی به نظر می رسد مثل این و نسخه به نظر می رسد که می خواهم. 495 00:31:01,620 --> 00:31:08,570 بنابراین سعی کنید این در حال حاضر. اجازه بدهید در اینجا بروید. را copy2. خواهیم زوم در داخل و اجرا copy2. 496 00:31:08,570 --> 00:31:13,840 من قصد دارم به در خوش آمدید تایپ حروف کوچک، و در واقع من کوچک خوش آمدید به عنوان اصلی 497 00:31:13,840 --> 00:31:16,930 اما سرمایه خوش آمدید برای کپی. 498 00:31:16,930 --> 00:31:20,300 اما من نه تنها هنوز. من نیاز به انجام 1 آخرین چیزی در اینجا. 499 00:31:20,300 --> 00:31:28,000 46 و 47 است که به وضوح آزاد حافظه، اما چه چیزی است که در واقع به معنای؟ 500 00:31:28,000 --> 00:31:33,250 چه هستم من انجام می دهند، آیا شما فکر می کنید، از طریق تماس با خط 46 و خط 47؟ 501 00:31:33,250 --> 00:31:38,900 چه تأثیری داشت؟ آره. 502 00:31:38,900 --> 00:31:43,140 [پاسخ دانش آموز نامفهوم] >> دقیقا. 503 00:31:43,140 --> 00:31:46,380 >> شما فقط گفتن سیستم عامل، با سلام، با تشکر از این حافظه است. 504 00:31:46,380 --> 00:31:48,320 شما هم اکنون می توانید آن را برای شخص دیگری استفاده کنید. 505 00:31:48,320 --> 00:31:50,790 و در اینجا یک مثال کامل از ارزش های زباله است. 506 00:31:50,790 --> 00:31:55,430 من فقط استفاده از این حافظه به نوشتن کلمه سلام در 2 مکان، 507 00:31:55,430 --> 00:31:57,490 در اینجا، اینجا، اینجا، و اینجا. 508 00:31:57,490 --> 00:32:00,910 بنابراین این H-e-l-l-O-\ 0 است. 509 00:32:00,910 --> 00:32:06,960 اما پس از آن من به خط 46 و خط 47، و شما می دانید چه اتفاقی می افتد وجود دارد در تصویر؟ 510 00:32:06,960 --> 00:32:10,010 در واقع، صبر کنید، این تصویر یکی از قدیمی است. 511 00:32:10,010 --> 00:32:12,550 هنگامی که ما را کپی کنید، این پسر است که در واقع اشاره در اینجا، 512 00:32:12,550 --> 00:32:16,110 بنابراین حذف اعداد و فقط انتزاعی دور به عنوان فلش ما دوباره بگذارید. 513 00:32:16,110 --> 00:32:19,370 در این تصویر چه اتفاقی می افتد وقتی که من تماس رایگان؟ 514 00:32:19,370 --> 00:32:22,750 [پاسخ دانش آموز نامفهوم] >> حتی. 515 00:32:22,750 --> 00:32:29,510 اگر من به رایگان در S و T - نوع سوال ترفند - این تصویر تغییر نه در همه 516 00:32:29,510 --> 00:32:33,880 به دلیل فراخوانی و خواستار T فقط می گوید که سیستم عامل، 517 00:32:33,880 --> 00:32:39,010 با سلام، شما می توانید این حافظه را دوباره استفاده کنید، اما آن تغییر نمی کند این را به تهی 518 00:32:39,010 --> 00:32:41,840 و یا برخی از کاراکتر ویژه ای، آن را نشانی از این تغییر نیست، 519 00:32:41,840 --> 00:32:47,350 آن را نشانی از H یا الکترونیکی و یا ل ل یا O در هر دو محل را به هر چیز دیگری تغییر نمی کند. 520 00:32:47,350 --> 00:32:51,610 در تصویر، به زودی با شما تماس رایگان، هیچ تغییری رخ نمی. 521 00:32:51,610 --> 00:32:56,570 و در آن نهفته است منشاء ارزش زباله چرا که اگر من پس از آن بعد از آن در این برنامه 522 00:32:56,570 --> 00:33:01,010 درخواست سیستم عامل برای حافظه بیشتر با GetString یا malloc یا چیزی شبیه به این است که 523 00:33:01,010 --> 00:33:04,900 و سیستم عامل می گوید، مطمئن، من 12 بایت از حافظه آزاد، 524 00:33:04,900 --> 00:33:08,080 با استفاده از این، آنچه می خواهید به دست؟ 525 00:33:08,080 --> 00:33:10,830 شما در حال رفتن به دست یک تکه از حافظه است که ما به طور معمول می ترسیم 526 00:33:10,830 --> 00:33:13,700 با علامت سوال، چه کسانی هستند علامت سوال؟ 527 00:33:13,700 --> 00:33:17,000 آنها اتفاق می افتد به H--l-l-O، H-E-l-l-O. 528 00:33:17,000 --> 00:33:20,940 اینها ارزش های زباله جدید ما در اسرع وقت شما که حافظه آزاد است. 529 00:33:20,940 --> 00:33:22,750 >> دلالت دنیای واقعی وجود دارد در اینجا بیش از حد. 530 00:33:22,750 --> 00:33:24,720 این اتفاق می افتد با RAM انجام دهید، اما کامپیوتر شما 531 00:33:24,720 --> 00:33:26,720 در واقع همین کار را با دیسک انجام دهد. 532 00:33:26,720 --> 00:33:30,620 ما می خواهیم در این مورد خاص صحبت با یک مجموعه مشکل در آینده است که بر پزشکی قانونی. 533 00:33:30,620 --> 00:33:36,170 اما آنچه در واقع اتفاق می افتد اگر شما برخی از فایل های حساس مالی را بر روی میز کار خود قرار 534 00:33:36,170 --> 00:33:39,600 و یا برخی از JPEG ناقص و شما آن را به سطل زباله خود را بکشید، 535 00:33:39,600 --> 00:33:44,390 چه اتفاقی می افتد زمانی که شما آن را بکشید به سطل زباله یا سطل بازیافت؟ 536 00:33:44,390 --> 00:33:47,240 شما می دانست آنچه که من صحبت کردن در مورد. [خنده] 537 00:33:47,240 --> 00:33:52,370 چه اتفاقی می افتد هنگامی که شما که شواهد به سطل بازیافت و یا سطل زباله شما می تواند کشیده شده؟ 538 00:33:52,370 --> 00:33:55,920 [پاسخ دانش آموز نامفهوم] 539 00:33:55,920 --> 00:33:58,000 خب، پس مراقب باشید. چه اتفاقی می افتد هنگامی که شما انجام این کار؟ 540 00:33:58,000 --> 00:34:01,030 پاسخ کوتاه این چیزی است، درست است؟ 541 00:34:01,030 --> 00:34:04,790 فایل ناقص یا حساس است هنوز هم تنها نشسته وجود دارد جایی در هارد دیسک شما. 542 00:34:04,790 --> 00:34:07,940 بسیاری از ما حداقل آموخته اند راه سخت است که شما نیاز دارید که برای خالی کردن سطل زباله شما 543 00:34:07,940 --> 00:34:10,429 یا سطل بازیافت خود را به واقع فایل حذف کنید. 544 00:34:10,429 --> 00:34:13,440 و در واقع، زمانی که شما راست کلیک کنید و یا کنترل کلیک بر روی سطل زباله شما می تواند 545 00:34:13,440 --> 00:34:15,580 یا فایل، سطل زباله خالی است و یا هر چیز دیگری را انتخاب کنید 546 00:34:15,580 --> 00:34:21,420 و شما در واقع خالی کردن سطل زباله می تواند و یا سطل بازیافت، آنچه در واقع اتفاق می افتد و سپس به این تصویر؟ 547 00:34:22,810 --> 00:34:25,969 هیچ چیز نیست. بنابراین هیچ چیز در واقع بر روی دیسک اتفاق می افتد. 548 00:34:25,969 --> 00:34:30,880 >> و اگر ما فقط به طور موقت از پرت شدن و نوشتن - I'll فقط پشت این استفاده کنید. 549 00:34:30,880 --> 00:34:34,639 بنابراین در حال حاضر داستان از RAM، که جایی است که برنامه وجود دارد در حال تغییر است 550 00:34:34,639 --> 00:34:39,250 در حالی که شما آنها را در حال اجرا، بر روی دیسک، که جایی است که در دراز مدت ذخیره می شوند 551 00:34:39,250 --> 00:34:42,920 حتی در هنگامی که برق می رود بیرون، در حال حاضر - و ما باید به این در آینده - 552 00:34:42,920 --> 00:34:46,380 اجازه دهید این است که این نشان دهنده در داخل دیسک سخت از کامپیوتر شما وانمود 553 00:34:46,380 --> 00:34:50,110 چرا که در روز آنها استفاده می شود هارد دایره، بسیار شبیه به فلاپی دیسک. 554 00:34:50,110 --> 00:34:55,130 بنابراین اگر شما برخی از فایل اکسل حساس، آن را ممکن است تا این تکه از حافظه 555 00:34:55,130 --> 00:34:59,770 بر روی دیسک کامپیوتر شما، و من فقط به رسم خودسرانه و 0s و 1S می شوند. 556 00:34:59,770 --> 00:35:03,970 هنگامی که فایل را که می خواهم به شما کشیدن سطل زباله شما می تواند یا سطل آشغال، 557 00:35:03,970 --> 00:35:07,750 به معنای واقعی کلمه هیچ چیز اتفاق می افتد چرا که اپل و مایکروسافت به تازگی تصمیم گرفته 558 00:35:07,750 --> 00:35:10,450 سطل زباله و سطل بازیافت است که واقعا فقط یک حفره یا سوراخ به طور موقت. 559 00:35:10,450 --> 00:35:14,710 شاید در نهایت OS آن را برای شما خالی است، اما به طور معمول، آن را به هیچ کاری انجام نمی، 560 00:35:14,710 --> 00:35:17,090 حداقل تا زمانی که شما در فضا بسیار کم است. 561 00:35:17,090 --> 00:35:20,870 >> با این حال، هنگامی که شما را به سطل زباله خالی است و یا خالی سطل بازیافت، 562 00:35:20,870 --> 00:35:23,460 به همین ترتیب، هیچ چیز اتفاق می افتد به این تصویر است. 563 00:35:23,460 --> 00:35:28,590 همه اتفاق می افتد که در جای دیگر بر روی کامپیوتر شما است، برخی از نوع جدول وجود دارد. 564 00:35:28,590 --> 00:35:35,400 این نوعی مانند یک برگه تقلب کوچک است که می گوید که بیایید می گویند، resume.doc، 565 00:35:35,400 --> 00:35:40,920 تا رزومه کاری خود را در یک فایل مایکروسافت ورد استفاده می شود در محل 123 بر روی هارد دیسک خود را زندگی می کنند، 566 00:35:40,920 --> 00:35:43,710 در حافظه و نه در RAM بر روی هارد دیسک شما، 567 00:35:43,710 --> 00:35:49,050 و زندگی JPEG ناقص در 456، و فایل اکسل خود را 789 یا هر کجا که زندگی می کند. 568 00:35:49,050 --> 00:35:53,640 هنگامی که فایل را حذف کنید در واقع تخلیه زباله یا سطل بازیافت، 569 00:35:53,640 --> 00:35:59,530 این تصویر تغییر نمی کند. و 0s و 1S بر روی هارد دیسک خود را به جایی نمی. 570 00:35:59,530 --> 00:36:03,930 اما این جدول، این پایگاه داده های کمی از انواع، تغییر می کند. 571 00:36:03,930 --> 00:36:08,750 وقتی که رزومه کاری خود را حذف کنید، آن است که به عنوان اینکه فایل حذف شده در بعضی جهات، 572 00:36:08,750 --> 00:36:12,790 اما همه کامپیوتر است که فراموش کرده ام که در آن چیزی که بر روی هارد دیسک خود را زندگی می کند. 573 00:36:12,790 --> 00:36:17,870 0s و 1S که نوشتن رزومه کاری شما و یا هر یک از این فایل های دیگر هنوز هم دست نخورده. 574 00:36:17,870 --> 00:36:21,960 >> بنابراین اگر شما به طور تصادفی، هنوز هم وجود دارد احتمال غیر صفر 575 00:36:21,960 --> 00:36:25,800 که شما می توانید اطلاعات خود را با استفاده از نرم افزار نورتون و یا برخی از نرم افزار های تجاری بازیابی 576 00:36:25,800 --> 00:36:29,810 هدف آنها در زندگی است و برای پیدا کردن 0s و 1S که مرتب سازی بر اساس یتیم، 577 00:36:29,810 --> 00:36:33,300 فراموش شده اینجا اما در اینجا، به طوری که شما می توانید اطلاعات خود را به عقب. 578 00:36:33,300 --> 00:36:38,410 یا بازرسان قانونی با پلیس و FBI در واقع یک هارد دیسک 579 00:36:38,410 --> 00:36:42,550 و در واقع الگوهای از 0s و 1S که شبیه عکس JPEG، مانند فایل های اکسل، 580 00:36:42,550 --> 00:36:46,400 و آنها را که راه را حتی اگر کامپیوتر آنها را فراموش شده را بازیابی کنید. 581 00:36:46,400 --> 00:36:49,820 بنابراین تنها راه واقعا به حذف داده ها، همانطور که ما در آینده بحث خواهیم کرد، 582 00:36:49,820 --> 00:36:54,190 به درخت یا بوته کوتاه و رشد نکرده و یا پاک کردن فایل ها و یا هارد دیسک - 583 00:36:54,190 --> 00:36:56,540 شما واقعا نمی توانید از شر 0s و 1S 584 00:36:56,540 --> 00:36:59,440 چرا که در غیر این صورت شما می خواهم با گیگابایت درایو سخت 585 00:36:59,440 --> 00:37:02,380 و از شما می خواهم تا پایان با یک درایو سخت مگابایت اگر شما به طور مداوم به حذف، 586 00:37:02,380 --> 00:37:04,380 به معنای واقعی کلمه، 0s و 1S. 587 00:37:04,380 --> 00:37:06,310 پس چه کار می کنید اگر شما واقعا می خواستند برای پوشش دادن آهنگ خود را 588 00:37:06,310 --> 00:37:10,510 و مشکل اساسی این است که هنوز هم وجود دارد 0s و و 1S بر روی دیسک؟ 589 00:37:10,510 --> 00:37:14,930 من gesticulating کسی است که شما را از لحاظ جسمی شکستن دستگاه. که کار خواهد کرد. 590 00:37:14,930 --> 00:37:19,600 [خنده] اما در صورتی که نوع یک راه حل گران قیمت، چه خواهد بود معقول تر است؟ 591 00:37:19,600 --> 00:37:23,270 آره. >> [دانشجو] جاینوشت آنها. >> آنها را با آنچه که رونویسی کنید؟ >> [دانشجو] اطلاعات دیگر. 592 00:37:23,270 --> 00:37:29,070 دیگر داده است. شما فقط می توانید هارد دیسک خود را با 0s و 1S یا تمام 0s و تمام 1S بازنویسی. 593 00:37:29,070 --> 00:37:31,230 >> و این در واقع چیزی است که برخی از این نرم افزار می کند. 594 00:37:31,230 --> 00:37:33,570 شما می توانید نرم افزار یا خرید حتی دریافت نرم افزار رایگان، 595 00:37:33,570 --> 00:37:36,610 و حتی به سیستم عامل مک این روز ساخته شده است، کمتر در ویندوز، 596 00:37:36,610 --> 00:37:38,660 توانایی پاک کردن امن است. 597 00:37:38,660 --> 00:37:41,960 در واقع، اگر شما را به خانه اجرا می خواهم امروز اگر شما مک و انجام این کار، 598 00:37:41,960 --> 00:37:45,740 اگر شما برخی از مسائل در سطل زباله شما می تواند، شما می توانید سطل زباله امن خالی انجام دهید، 599 00:37:45,740 --> 00:37:47,610 که می کند که دقیقا همان است. 600 00:37:47,610 --> 00:37:53,350 نه از تنها فایل های پاک اینجا، آن را نشانی از اینجا 0s و 1S را پاک کنید، 601 00:37:53,350 --> 00:38:01,240 در عوض، آن را فقط به تغییر همه آنها را، برای مثال، به 0s و و نقطه، نقطه، نقطه. 602 00:38:01,240 --> 00:38:05,330 بنابراین یکی از psets آینده شما واقع خواهد شد به عمد بازیابی اطلاعات - 603 00:38:05,330 --> 00:38:08,430 عکس های که ما از مردم، مکان ها، و همه چیز در محوطه دانشگاه گرفته شده 604 00:38:08,430 --> 00:38:12,810 که ما قانونی یک تصویر از کارت حافظه دوربین های دیجیتال، 605 00:38:12,810 --> 00:38:17,120 که این ایده همان است - و شما باید به واقع به چالش کشیده شوند. 606 00:38:17,120 --> 00:38:20,160 الگوهایی که نشان دهنده عکس JPEG بر روی هارد دیسک شما، 607 00:38:20,160 --> 00:38:23,610 بسیار شبیه آن دانش آموز سابق که ایمیل من چند هفته پیش بود که 608 00:38:23,610 --> 00:38:25,860 برای بازیابی عکس خواهر خود را. 609 00:38:25,860 --> 00:38:30,300 چرا ما را به یک استراحت 5 دقیقه ای در اینجا، و ما را بر روی حافظه دوباره. 610 00:38:33,030 --> 00:38:38,610 بنابراین در اینجا است که در آن همه چیز ذهن کمی خم است، اما این یک گام بسیار قدرتمند 611 00:38:38,610 --> 00:38:40,480 جهت درک این همه بیشتر است. 612 00:38:40,480 --> 00:38:42,900 در اینجا است که یک برنامه ای به نام pointers.c. 613 00:38:42,900 --> 00:38:45,430 این میان نمونه کد امروز است. 614 00:38:45,430 --> 00:38:51,280 توجه کنید که در چند خط اول، 19 را از طریق 22، همه ما در حال انجام است چیزی شبیه به GetString 615 00:38:51,280 --> 00:38:54,460 و بازگشت آدرس، ذخیره سازی و آن را در S است. 616 00:38:54,460 --> 00:38:58,380 پس برای pset حتی 3 اگر شما می خواهید، اما pset 4 و 617 00:38:58,380 --> 00:39:01,030 که در آن شما می توانید شروع به گرفتن این چرخ آموزش خاموش خود، 618 00:39:01,030 --> 00:39:04,030 هیچ دلیلی برای وانمود کنیم که رشته های دیگر وجود دارد وجود دارد. 619 00:39:04,030 --> 00:39:07,030 این قطعا درست فقط شروع به گفت * کاراکتر است. 620 00:39:07,030 --> 00:39:12,610 >> تا به کنار، در منابع آنلاین و در کتاب شما اغلب ممکن است ستاره بعدی را به این متغیر را ببینید. 621 00:39:12,610 --> 00:39:15,600 شما حتی ممکن است فاصله ای که در اطراف هر دو طرف از آن را ببینید. 622 00:39:15,600 --> 00:39:17,680 همه از کسانی که عملکرد صحیح هستند. 623 00:39:17,680 --> 00:39:21,180 در حال حاضر، هر چند، ما را در این رویکرد استاندارد را فوق العاده روشن 624 00:39:21,180 --> 00:39:24,000 که * کاراکتر ضرب المثل مثل اشاره گر شخصیت. 625 00:39:24,000 --> 00:39:25,680 این نوع داده ها است. 626 00:39:25,680 --> 00:39:28,730 و سپس نام متغیر است در این مورد. 627 00:39:28,730 --> 00:39:31,180 پس ما رو بدست یک رشته است و ما آن را به نام ها. 628 00:39:31,180 --> 00:39:35,180 و پس از آن را در اینجا توجه کنید که من انجام می دهند در واقع کمی از حیله گری است. 629 00:39:35,180 --> 00:39:39,080 این ریاضی اشاره گر، که مرتب سازی بر اساس ساده فوق العاده نامیده می شود. 630 00:39:39,080 --> 00:39:41,790 این فقط به این معنی که اضافه کردن و تفریق اعداد به اشاره گر. 631 00:39:41,790 --> 00:39:43,660 اما این در واقع کار می کند. 632 00:39:43,660 --> 00:39:49,170 این برنامه ظاهرا S 1 رشته کاراکتر در هر خط هایی که نتیجه نهایی را چاپ - 633 00:39:49,170 --> 00:39:54,920 درست به همین دلیل ما می توانیم فاسد که در آن این است که رفتن، اشاره گر را، اجرا اشاره گر، به من اجازه زوم شوید. 634 00:39:54,920 --> 00:39:58,940 حالا به من اجازه دهید چیزی شبیه سلام و نوع را وارد کنید 635 00:39:58,940 --> 00:40:01,080 و آن را چاپ 1 کاراکتر در هر خط است. 636 00:40:01,080 --> 00:40:04,730 تا یک ثانیه قبل، ما را با علامت کروشه مربع انجام می شود. 637 00:40:04,730 --> 00:40:09,760 ما یک حلقه داشته باشند و ما می خواهم انجام printf از S [i] و ما می خواهم که دوباره و دوباره و دوباره انجام دهید 638 00:40:09,760 --> 00:40:11,950 با N اسلش در انتهای هر خط است. 639 00:40:11,950 --> 00:40:16,800 اما این برنامه متفاوت است. این برنامه با استفاده از، به معنای واقعی کلمه، حسابی. 640 00:40:16,800 --> 00:40:18,860 پس چه اینجا چه خبره؟ 641 00:40:18,860 --> 00:40:24,720 اول از همه، قبل از این حلقه حتی اجرا، چه، فقط برای روشن، در واقع؟ 642 00:40:24,720 --> 00:40:27,270 S است؟ >> [دانشجو] آدرس. >> آدرس. 643 00:40:27,270 --> 00:40:32,980 >> و این آدرس، در مورد میهمان گرامی، شخصیت اول در آن کلمه، که در ساعت است. 644 00:40:32,980 --> 00:40:37,370 است، در این مثال خاص، آدرس H. 645 00:40:37,370 --> 00:40:41,850 پس چه این به معنای به S + من؟ 646 00:40:41,850 --> 00:40:46,280 خوب، من از 0 شروع می شود در این حلقه است. بار که بسیاری از ما انجام داده ایم. 647 00:40:46,280 --> 00:40:49,760 من در حال رفتن به تا طول رشته، ظاهرا. 648 00:40:49,760 --> 00:40:53,950 پس تکرار برای اولین بار از این حلقه، من واضح است که 0 است. 649 00:40:53,950 --> 00:41:01,740 بنابراین این عبارت می گوید S + من - نه، S +0- که به وضوح S تنها. 650 00:41:01,740 --> 00:41:04,320 پس چه شده است * S؟ 651 00:41:04,320 --> 00:41:08,530 در حال حاضر ما در حال استفاده از این ستاره در راه کمی متفاوت است. 652 00:41:08,530 --> 00:41:13,080 اجازه بدهید من به جلو بروید و خلاص شدن از تی از آنجا که ما در حال صحبت کردن در مورد T و کپی از S. 653 00:41:13,080 --> 00:41:15,540 در حال حاضر ما فقط می خواهم به بیان داستان ها است. 654 00:41:15,540 --> 00:41:20,090 و بنابراین در این لحظه، بعد از نوع String است، جهان ما به نظر می رسد کاملا مانند آن قبل از 655 00:41:20,090 --> 00:41:26,630 S تنها ذخیره سازی آدرس H و به طور کلی اشاره در رشته خوش آمدید. 656 00:41:26,630 --> 00:41:33,170 اگر من در حال حاضر یک خط مانند * (+ من)، اجازه دهید از این را امتحان کنید. 657 00:41:33,170 --> 00:41:40,140 بنابراین * (+ من). اجازه دهید این ساده من به خاطر این است 0 است، بنابراین این * (+0) است. 658 00:41:40,140 --> 00:41:43,790 خب، یک دقیقه صبر کنید. ساده بیشتر است. این * () است. 659 00:41:43,790 --> 00:41:47,020 خوب، در حال حاضر پرانتز نوع احمقانه، بنابراین در حال حاضر فقط * S به شما اجازه می دهد تا. 660 00:41:47,020 --> 00:41:50,540 بنابراین در تکرار برای اولین بار از این حلقه، که خط که برجسته شده، 26، 661 00:41:50,540 --> 00:41:53,650 تقریبا به چاپ این معادل است. 662 00:41:53,650 --> 00:41:56,040 چه نوع داده * S؟ 663 00:41:56,040 --> 00:42:00,770 در این زمینه، به این دلیل که ستاره اتفاق می افتد به آینده را به بازدید کنندگان خود، 664 00:42:00,770 --> 00:42:04,930 اما به طور خاص تر، از آنجا که ما دیگر اعلام S، 665 00:42:04,930 --> 00:42:09,730 ما یک متغیر ایجاد نمی کنه، هیچ اشاره ای به * کاراکتر در خط 26 وجود دارد، 666 00:42:09,730 --> 00:42:14,280 هیچ اشاره ای به رشته کلید واژه وجود دارد، ما فقط با استفاده از یک متغیر به نام های، 667 00:42:14,280 --> 00:42:19,650 به نظر می رسد در حال حاضر ستاره کمی متفاوت است، و مسلما، معنای گیج کننده است. 668 00:42:19,650 --> 00:42:26,590 * اینجا به معنای رفتن به آدرس و چاپ هر آنچه که وجود دارد. 669 00:42:26,590 --> 00:42:33,750 است در اینجا، * S - مرتب کردن بر اساس مانند سینی و نردبان، به دنبال فلش - در اینجا. 670 00:42:33,750 --> 00:42:35,850 بنابراین این * است. 671 00:42:35,850 --> 00:42:39,060 >> پس چه می شود در اولین تکرار حلقه در خط 26 چاپ شده است؟ 672 00:42:39,060 --> 00:42:42,170 من نسخه قابل چاپ کردن٪ C، است که مکان نگه دار برای یک شخصیت، 673 00:42:42,170 --> 00:42:48,520 پس از آن یک \ n یک خط جدید است. (+ من) که در آن من است 0 است فقط این است. 674 00:42:48,520 --> 00:42:53,670 پس چه کاراکتر می توانم در C٪ قرار داد؟ H. 675 00:42:53,670 --> 00:42:56,900 در تکرار بعدی حلقه - احتمالا شما می توانید ببینید که در آن این است که رفتن - 676 00:42:56,900 --> 00:43:01,350 تکرار بعد من واضح است که 1 است، بنابراین این بدان معنی است 1، 677 00:43:01,350 --> 00:43:05,580 و پس از آن در حال حاضر من می توانم نیاز به پرانتز چرا که در حال حاضر ستاره نیاز به گفتن نیست 678 00:43:05,580 --> 00:43:08,620 برو به آدرس حافظه 1. 679 00:43:08,620 --> 00:43:14,170 ها چیست؟ اجازه بدهید به عقب در زمان و می گویند این پیکان اکنون در واقع نه انجام با ما هر نعمت است. 680 00:43:14,170 --> 00:43:18,450 بیایید بیشتر به طور خاص می گویند که این ذخیره سازی از 123 شماره 681 00:43:18,450 --> 00:43:25,110 به دلیل شروع این رشته خوش آمدید، این آدرس 123، این است 124، و غیره. 682 00:43:25,110 --> 00:43:30,550 بنابراین در تکرار دوم وقتی که من و گفت ها 1، ضرب المثل مثل 123 1، 683 00:43:30,550 --> 00:43:35,340 در غیر این صورت به عنوان 124 شناخته می شود، چه کاراکتر می شود و در تکرار دوم چاپ شده است؟ 684 00:43:35,340 --> 00:43:37,850 E در آدرس حافظه 124. 685 00:43:37,850 --> 00:43:44,440 سپس + دوباره، 125، 126، 127، و این حلقه خوشبختانه متوقف می شود قبل از ما در اینجا 686 00:43:44,440 --> 00:43:49,040 چون من با استفاده از strlen را به مطمئن شوید که من به حساب نمی کند بیش از حد بالا است. 687 00:43:49,040 --> 00:43:50,810 به طوری که بیش از حد آن است. 688 00:43:50,810 --> 00:43:55,000 باز هم، این است که فقط به عنوان اینکه ما یک هفته پیش انجام داده بود. 689 00:43:55,000 --> 00:43:59,200 اجازه بدهید من آن را بنویسید در خط زیر حتی اگر ما نمی خواهیم به هر دو است. 690 00:43:59,200 --> 00:44:02,500 این یکسان است در حال حاضر به این. 691 00:44:02,500 --> 00:44:08,310 >> بنابراین حتی اگر است یک رشته، به عنوان ما شده ایم آن را فراخوانی برای هفته، S واقعا * کاراکتر است. 692 00:44:08,310 --> 00:44:13,270 بنابراین اگر ما می خواهیم به مقعد فوق العاده، آن را بسیار مناسب برای ارسال نامه های خاص 693 00:44:13,270 --> 00:44:17,490 در مکان i ام با استفاده از این آدرس های عددی و این اپراتور ستاره، 694 00:44:17,490 --> 00:44:20,470 اما صادقانه بگویم، این بسیار پاک کننده است. پس این است که بد نیست. 695 00:44:20,470 --> 00:44:26,720 هیچ دلیلی برای جلوگیری از انجام خط 27 در اینجا، اما 26 عملکرد همان است، 696 00:44:26,720 --> 00:44:31,570 و آن را عملکرد همان دقیقا همان دلایلی است که ما در حال بحث در مورد تا کنون. 697 00:44:31,570 --> 00:44:33,650 و در نهایت، 29 عمل فقط خوب است. 698 00:44:33,650 --> 00:44:38,420 خواستار عاری از S به این معنی است که در حال حاضر شما در حال دادن حافظه است که GetString به شما داد 699 00:44:38,420 --> 00:44:41,630 چرا که در دوباره، من به عنوان ذکر شده است دوشنبه، GetString برای هفته ها 700 00:44:41,630 --> 00:44:44,180 معرفی یک اشکال شده است را به کد شما. 701 00:44:44,180 --> 00:44:46,490 کد های خود استفاده کنید را برای هفته ها تا به حال نشت حافظه 702 00:44:46,490 --> 00:44:49,970 به موجب آن شما درخواست شده است GetString برای حافظه است اما شما هرگز آن را دادن. 703 00:44:49,970 --> 00:44:53,410 و است که عمدا توسط ما انتخاب شد آموزشی 704 00:44:53,410 --> 00:44:55,880 زیرا این فقط در مورد در اوایل فکر می کنم بیش از حد به. 705 00:44:55,880 --> 00:44:57,710 اما در حال حاضر ما نیاز به تقارن بیشتر. 706 00:44:57,710 --> 00:45:00,830 اگر شما بخواهید از کامپیوتر را برای حافظه، به عنوان مورد GetString، 707 00:45:00,830 --> 00:45:02,820 به عنوان مورد ظاهرا برای malloc، 708 00:45:02,820 --> 00:45:07,970 شما در حال حاضر باید برای pset 4 به بعد نیز رایگان هر حافظه مانند. 709 00:45:07,970 --> 00:45:11,650 توجه داشته باشید که این متفاوت است از گفتن N از نوع int است. 710 00:45:11,650 --> 00:45:15,040 شما لازم نیست به این به این دلیل آزاد GetString را صدا نمی زنم 711 00:45:15,040 --> 00:45:16,890 و شما malloc را صدا نمی زنم. 712 00:45:16,890 --> 00:45:20,610 >> و حتی اگر شما به نام GetInt همانطور که ما در نهایت خواهید دید، 713 00:45:20,610 --> 00:45:25,520 GetInt حافظه برای شما اختصاص دهد، زیرا شما در واقع می توانند در اطراف اعداد صحیح 714 00:45:25,520 --> 00:45:29,430 و شناور می شود و کاراکتر تنها راه ما برای هفته ها انجام شده است. 715 00:45:29,430 --> 00:45:33,960 رشته ها، هر چند، ویژه هستند زیرا واقعا به آنها الحاق از کاراکتر های مختلف. 716 00:45:33,960 --> 00:45:37,450 بنابراین آنها متفاوت از کاراکتر و شناور می شود و نوع داده int است و مانند آن. 717 00:45:37,450 --> 00:45:39,980 اما ما آمده است که قبل از بلند. 718 00:45:39,980 --> 00:45:44,920 هر گونه سؤال و سپس در این آغاز اشاره گر؟ آره. 719 00:45:44,920 --> 00:45:49,690 [سوال دانش آموز نامفهوم] 720 00:45:49,690 --> 00:45:51,440 آه، سوال بسیار خوبی است. 721 00:45:51,440 --> 00:45:55,790 یکی از چیزهایی که چند C در واقع برای شما انجام می دهد، که مناسب است، 722 00:45:55,790 --> 00:46:00,110 آن ارقام را برای شما به چه اندازه از نوع داده 723 00:46:00,110 --> 00:46:03,060 و پس از آن می کند که نوع ضرب را برای شما می باشد. 724 00:46:03,060 --> 00:46:06,610 این در مورد کاراکتر بی ربط است زیرا تقریبا همیشه یک کاراکتر 1 بایت، 725 00:46:06,610 --> 00:46:08,150 بنابراین این فقط کار می کند. 726 00:46:08,150 --> 00:46:11,220 اما به خاطر بحث و گفتگو، اگر شما در واقع چاپ اعداد صحیح 727 00:46:11,220 --> 00:46:15,500 و شما در تلاش بودند برای چاپ کردن برخی از ارزش است که اشاره به یک عدد صحیح بود، 728 00:46:15,500 --> 00:46:20,720 شما به همین ترتیب نیاز به انجام + 4 * من فقط به خاطر اینکه از نوع int است 4 بایت است. 729 00:46:20,720 --> 00:46:25,780 ریاضی اشاره گر، این بدان معنی است که C و کامپایلر انجام تمام کارهایی که ریاضی را برای شما می باشد. 730 00:46:25,780 --> 00:46:29,190 همه شما باید در مورد مراقبت از شمارش آرا در مرتب کردن بر اساس حس انسان است. آره. 731 00:46:29,190 --> 00:46:35,200 [دانشجو] اگر رشته شما اعلام در داخل یک حلقه for، آیا شما را به این برنامه رایگان است؟ 732 00:46:35,200 --> 00:46:36,760 خوب سوال. 733 00:46:36,760 --> 00:46:41,390 >> اگر شما در داخل رشته از حلقه اعلام کرد، شما نیاز به این برنامه رایگان! 734 00:46:41,390 --> 00:46:47,520 شما فقط نیاز به حافظه آزاد است که شما را با GetString و یا با malloc تخصیص. 735 00:46:47,520 --> 00:46:53,110 بنابراین اگر شما فقط می گویند چیزی شبیه - آکولاد قرار داده است من در حال حاضر تا تمام کد مربوط است. 736 00:46:53,110 --> 00:46:58,580 اگر شما کاری انجام دادند، البته buggily، مثل این، کاراکتر * T = S، 737 00:46:58,580 --> 00:47:03,450 شما نیاز به T آزاد نمی کند چرا که T هیچ اشاره ای به malloc یا GetString درگیر نیست. 738 00:47:03,450 --> 00:47:08,960 اگر در مقابل شما انجام این کار، GetString، سپس بله، شما می توانید به T آزاد نیاز دارند. 739 00:47:08,960 --> 00:47:14,350 و در واقع، تنها شانس خود را برای انجام این کار در حال حاضر در داخل این حلقه، همان شماره از محدوده 740 00:47:14,350 --> 00:47:16,060 که ما در گذشته مورد بحث قرار گرفته است. 741 00:47:16,060 --> 00:47:18,830 در غیر این صورت شما می خواهم تخصیص حافظه، تخصیص حافظه، تخصیص حافظه، 742 00:47:18,830 --> 00:47:21,230 و در پایان این برنامه به دلیل این که شما در خارج از آن حلقه هستید، 743 00:47:21,230 --> 00:47:24,240 T وجود ندارد، اما شما سیستم عامل گفت: هرگز 744 00:47:24,240 --> 00:47:26,750 که شما که حافظه نیاز ندارد. 745 00:47:26,750 --> 00:47:30,430 و قبل از اینکه طولانی، برای pset 4 یا 5 خواهیم شما را با برنامه ای به نام Valgrind تجهیز، 746 00:47:30,430 --> 00:47:34,160 است که در روح GDB که در آن تا حدودی از یک رابط محرمانه کردم، 747 00:47:34,160 --> 00:47:35,750 اما هدف خود را در زندگی این است که به شما کمک کند. 748 00:47:35,750 --> 00:47:39,380 و Valgrind برنامه ای است که در آینده برنامه های خود را 749 00:47:39,380 --> 00:47:42,550 به دنبال نشت حافظه، چه از GetString یا malloc، 750 00:47:42,550 --> 00:47:47,800 که ما شروع به استفاده از همه بیشتر به عنوان ما با استفاده از کتابخانه CS50 به همان اندازه را متوقف. 751 00:47:47,800 --> 00:47:53,030 ما در نهایت در حال حاضر نوع از واژگان و مرتب سازی بر اساس مدل ذهنی در تئوری 752 00:47:53,030 --> 00:47:55,170 که با آن برای حل این برنامه شکسته است. 753 00:47:55,170 --> 00:47:59,410 >> بنابراین در این برنامه شکسته، مبادله با این نسخهها کار در داخل مبادله، 754 00:47:59,410 --> 00:48:05,280 اما آن را به در اصلی در واقع هرگز به کار کرده است به دلیل اصلی به تصویب رسید در X و Y، فراخوان، 755 00:48:05,280 --> 00:48:07,260 و کسانی که با ارزش های منتقل شده، پس به صحبت می کنند. 756 00:48:07,260 --> 00:48:09,330 نسخه از آنها را به مبادله داده شد. 757 00:48:09,330 --> 00:48:12,520 پایان مبادله، A و B، در واقع رد و بدل شده است، 758 00:48:12,520 --> 00:48:16,120 اما البته x و y، همانطور که ما در روز دوشنبه مورد بحث بود، نشده است. 759 00:48:16,120 --> 00:48:19,940 بنابراین من پیشنهاد سبز در اینجا این است که در واقع راه حل در اینجا. 760 00:48:19,940 --> 00:48:22,640 و در واقع، اجازه دهید ستاره من حرکت من تنها به سازگار 761 00:48:22,640 --> 00:48:24,440 حتی اگر، دوباره، عملکرد این مهم نیست. 762 00:48:24,440 --> 00:48:28,730 در هفته های آینده توضیح خواهیم داد که چه وقت و چرا مهم است. 763 00:48:28,730 --> 00:48:30,600 بنابراین در سبز در حال حاضر یک راه حل است. 764 00:48:30,600 --> 00:48:33,700 صادقانه بگویم، به نظر می رسد تعداد زیادی کل مسیه چون من تمام این ستاره ها. 765 00:48:33,700 --> 00:48:35,380 اجازه بدهید یک چیز است. 766 00:48:35,380 --> 00:48:40,040 خط بالا که در آن می گوید: اعضای هیات * و int * ب 767 00:48:40,040 --> 00:48:42,820 اساسا انجام همان چیزی که آن را به عنوان همیشه. 768 00:48:42,820 --> 00:48:47,070 این است که اعلام 2 استدلال یا پارامترهای به مبادله، 769 00:48:47,070 --> 00:48:49,940 اولین بار است که یک اشاره گر از نوع int به نام، 770 00:48:49,940 --> 00:48:53,100 دوم که یک اشاره گر از نوع int به نام B است. 771 00:48:53,100 --> 00:48:55,770 تنها چیزی که در این مرحله جدید، این واقعیت است که یک ستاره وجود دارد. 772 00:48:55,770 --> 00:48:59,340 >> به چه می کند که به معنی؟ بین المللی نیست، B بین المللی نمی باشد. 773 00:48:59,340 --> 00:49:04,100 آدرس بین المللی است و B است که آدرس های مختلف بین المللی است. 774 00:49:04,100 --> 00:49:06,980 را در اینجا، این است که من اعتراف C می شود گیج کننده است. 775 00:49:06,980 --> 00:49:09,790 در حال حاضر ما در حال استفاده از یک ستاره، اما آن را تا به معنی های مختلف در این زمینه است. 776 00:49:09,790 --> 00:49:13,150 از آنجا که ما در حال اشاره گر اعلام نمی کند که ما در اینجا، 777 00:49:13,150 --> 00:49:15,500 در اینجا ما به همه چیز غیر مرجع. 778 00:49:15,500 --> 00:49:21,520 بنابراین از لحاظ فنی، این ستاره را در این زمینه از خط اول، دوم و سوم در داخل مبادله 779 00:49:21,520 --> 00:49:24,560 اپراتور dereference، که فقط به معنی رفتن وجود دارد. 780 00:49:24,560 --> 00:49:27,400 بنابراین فقط به عنوان انگشت من به دنبال فلش را به ساعت، 781 00:49:27,400 --> 00:49:31,100 * یک وسیله به این آدرس بروید و مرا هوشمند است که وجود دارد پیدا کنید. 782 00:49:31,100 --> 00:49:34,250 * به معنی B به آدرس بروید و با تصویب من چه چیزی وجود دارد. 783 00:49:34,250 --> 00:49:40,730 پس اجازه بازکشیدن تصویر از دوشنبه در حال حاضر با استفاده از یک پشته از قاب ها، 784 00:49:40,730 --> 00:49:43,130 یکی از پایین است که برای رفتن به بخش اصلی آمار سایت 785 00:49:43,130 --> 00:49:47,600 یکی از بالایی است که برای رفتن به مبادله، 786 00:49:47,600 --> 00:49:50,880 به طوری که جهان ما به نظر می رسد، درست مثل دوشنبه، شبیه به این است. 787 00:49:50,880 --> 00:49:53,620 در اینجا این است که یک تکه از حافظه است که اصلی است که قصد استفاده از. 788 00:49:53,620 --> 00:49:56,520 >> به یاد بیاورید از دوشنبه که برنامه فقط به حال 2 متغیر، 789 00:49:56,520 --> 00:50:01,930 یکی به نام X و یک به نام Y است، و من اعداد 1 و 2 قرار داده شده بود وجود دارد. 790 00:50:01,930 --> 00:50:06,580 حالا وقتی که من اسمش مبادله مانند من در روز دوشنبه، 791 00:50:06,580 --> 00:50:11,000 قبلا وقتی که من استفاده نسخه قرمز از این برنامه، که به نظر می رسد، مثل این: 792 00:50:11,000 --> 00:50:17,470 من 2 پارامتر، A و B، و آنچه ما می نویسیم به اینجا و اینجا؟ 793 00:50:17,470 --> 00:50:21,160 فقط 1 و 2، به معنای واقعی کلمه از x و y کپی. 794 00:50:21,160 --> 00:50:23,070 امروز که ما تغییر می کند. 795 00:50:23,070 --> 00:50:28,510 امروز به جای عبور در نوع داده int A و B ما در حال رفتن به در 2 آدرس منتقل می کند. 796 00:50:28,510 --> 00:50:34,290 این آدرس ها رخ می دهد به نقطه را به نوع داده int است، ولی برای کسانی که آدرس خود را به نوع داده int نیست. 797 00:50:34,290 --> 00:50:37,330 آنها آدرس. آن را مانند یک آدرس پستی به جای. 798 00:50:37,330 --> 00:50:40,580 بنابراین در حال حاضر ما فقط نیاز به جزئیات کمی بیشتر به خودم بر روی صفحه نمایش می دهد. 799 00:50:40,580 --> 00:50:43,250 این حافظه کامپیوتر من است به عنوان آن را در تمام طول روز است. 800 00:50:43,250 --> 00:50:45,120 در حال حاضر ما نیاز به برخی از طرح های دلخواه شماره. 801 00:50:45,120 --> 00:50:50,580 بنابراین اجازه دهید فقط می گویند، فقط با شانس، این است که آدرس حافظه 123، 124. 802 00:50:50,580 --> 00:50:55,660 اجازه دهید فقط می گویند این است که 125، 126 است، و غیره، اما کاملا خودسرانه است. 803 00:50:55,660 --> 00:50:58,590 ما فقط نیاز به برخی از طرح شماره در حافظه من است. 804 00:50:58,590 --> 00:51:04,030 بنابراین در حال حاضر زمانی که من در واقع در X و Y عبور، من قصد ندارم تا در x و y منتقل می کند؛ 805 00:51:04,030 --> 00:51:08,400 من قصد دارم به آدرس پستی منتقل می کند، پس به صحبت می کنند، X و Y 806 00:51:08,400 --> 00:51:11,870 به طوری که آنچه اینجا می شود ذخیره می شود و در اینجا است 1 و 2، 807 00:51:11,870 --> 00:51:16,030 اما اگر شما می توانید متن کوچک من، آنچه می شود در اینجا و اینجا منتقل می شود؟ 808 00:51:16,030 --> 00:51:23,340 [پاسخ دانش آموز نامفهوم] >> دقیقا. 123 در اینجا قرار داده می شود و 124 در اینجا قرار داده می شود. 809 00:51:23,340 --> 00:51:28,910 >> در حال حاضر، به خاطر اینکه من ستاره را در این راه خط اول تا اینجا در بالا استفاده می شود، 810 00:51:28,910 --> 00:51:34,340 برنامه من فقط می داند که 123 و 124، حتی اگر آنها به وضوح اعداد صحیح 811 00:51:34,340 --> 00:51:40,160 که هر انسان می تواند متوجه آنها باید به عنوان آدرس ها، آدرس های عددی تفسیر شده است. 812 00:51:40,160 --> 00:51:43,250 آنها در و از خود نوع داده int هستند، آنها به آدرس، 813 00:51:43,250 --> 00:51:46,120 و این که چون من به صراحت قرار دادن ستاره وجود دارد. 814 00:51:46,120 --> 00:51:51,360 بنابراین در حال حاضر در خط های اول، دوم و سوم من از کد واقعی چه اتفاقی می افتد در اینجا؟ 815 00:51:51,360 --> 00:51:53,380 اجازه جلب بقیه عکس. 816 00:51:53,380 --> 00:51:56,980 TMP است درست مثل آن را در روز دوشنبه بود. هیچ چیز ویژه ای در مورد TMP. 817 00:51:56,980 --> 00:52:03,060 فقط 32 بیت محلی متغیر است، و در داخل که من ظاهرا ذخیره سازی ارزش *. 818 00:52:03,060 --> 00:52:08,580 در حال حاضر، اگر من فقط گفت TMP =، آنچه را که من قرار اینجا؟ >> [دانشجو] 123. 819 00:52:08,580 --> 00:52:10,370 123. اما این چیزی است که من انجام نمی دهد. 820 00:52:10,370 --> 00:52:13,670 من گفت: TMP = *. به معنای رفتن وجود دارد. 821 00:52:13,670 --> 00:52:19,370 بنابراین در اینجا 123. چگونه می توانم به آنجا رفت؟ وانمود کنیم یک فلش وجود دارد. 822 00:52:19,370 --> 00:52:24,460 خوب، آن است که وجود دارد، 1. پس چه می شود در TMP ذخیره می شود، ظاهرا؟ فقط 1. 823 00:52:24,460 --> 00:52:29,620 بنابراین به عبارت دیگر، TMP است *، * به معنای رفتن به آدرس که در حال حاضر در، 824 00:52:29,620 --> 00:52:31,320 است که ظاهرا 123. 825 00:52:31,320 --> 00:52:33,910 >> خوب، در اینجا ما در محل 123، شماره 1، 826 00:52:33,910 --> 00:52:35,670 بنابراین من قصد دارم برای قرار دادن شماره 1 وجود دارد. 827 00:52:35,670 --> 00:52:39,020 در حال حاضر آنچه را می توانم در خط 2، * = * B؟ 828 00:52:39,020 --> 00:52:44,570 این یکی کمی بیشتر درگیر زیرا در حال حاضر چیست؟ این برنامه 123. 829 00:52:44,570 --> 00:52:50,220 بنابراین * این است که کجا؟ درست جایی که قبلا بودم. بنابراین وجود دارد بروید. باشه. 830 00:52:50,220 --> 00:52:53,420 در حال حاضر، در نهایت، و سپس در نهایت این کار را شروع به ساختن حس، امیدوارم، 831 00:52:53,420 --> 00:53:00,280 * ب به معنی آنچه در ب؟ 124. بنابراین من نیاز به رفتن وجود دارد، است که 2. 832 00:53:00,280 --> 00:53:03,430 بنابراین چه چیزی من قرار داده که در آن؟ 833 00:53:03,430 --> 00:53:10,100 2 رود به اینجا به دلیل * B می رود به *. بنابراین من انجام دهد. 834 00:53:10,100 --> 00:53:13,120 و شما در حال حاضر می تواند، نگاه کنید شاید که ما بسیار نزدیک تر است 835 00:53:13,120 --> 00:53:17,710 برای حل این مشکل ساده و احمق، به درستی برای اولین بار 836 00:53:17,710 --> 00:53:20,920 چرا که در حال حاضر ما هنوز هم خاطراتی از آنچه ایکس، 837 00:53:20,920 --> 00:53:23,230 ما دارای 2 نسخه، مسلما، Y، 838 00:53:23,230 --> 00:53:25,850 اما خط 3 در حال حاضر می گوید: * ب. 839 00:53:25,850 --> 00:53:31,080 بنابراین در اینجا ب. * ب به معنی به وجود دارد. پس کجاست محل سکونت: 124؟ 840 00:53:31,080 --> 00:53:35,560 این ظاهرا در اینجا. بنابراین چه چیزی قرار داده که اینجا هستید؟ بدیهی است، TMP. 841 00:53:35,560 --> 00:53:39,600 بنابراین در حال حاضر من این کار را. پس من باید 2 1 در اینجا و اینجا. 842 00:53:39,600 --> 00:53:43,560 و در حال حاضر آنچه که در مورد تمام از این، 123، 124، و: از شماره 1؟ 843 00:53:43,560 --> 00:53:47,910 به محض به عنوان بازده مبادله، این حافظه به خوبی به عنوان دست داده است 844 00:53:47,910 --> 00:53:51,070 زیرا به محض به عنوان بازده مبادله، سیستم عامل 845 00:53:51,070 --> 00:53:54,190 برای استفاده از این حافظه در آینده است. 846 00:53:54,190 --> 00:53:58,870 فقط حافظه اصلی در پایین این پشته به اصطلاح میله های اطراف. 847 00:53:58,870 --> 00:54:01,470 >> و به این ترتیب ما در نهایت در حال حاضر یک نسخه از کار است. 848 00:54:01,470 --> 00:54:06,310 اجازه بدهید من به swap.c، و توجه به موارد زیر است. 849 00:54:06,310 --> 00:54:11,280 در بالای این برنامه من تغییر نمونه من به هوشمند * و هوشمند * ب. 850 00:54:11,280 --> 00:54:15,000 بنابراین تنها چیزی که من از قرمز، که بد بود، به رنگ سبز، که خوب است، 851 00:54:15,000 --> 00:54:17,350 این است که من این ستاره اضافه شده امروز. 852 00:54:17,350 --> 00:54:21,520 اما سپس در اینجا در خود مبادله من تا به حال برای کپی کردن، رب چه بود فقط در اسلاید. 853 00:54:21,520 --> 00:54:24,140 من یک ستاره در اینجا، ستاره اینجا - که منطبق بر نمونه - 854 00:54:24,140 --> 00:54:27,930 و سپس تمام این چیزها در حال حاضر ستاره به جز TMP 855 00:54:27,930 --> 00:54:30,680 به دلیل استفاده از یک متغیر موقت، هیچ چیز جدیدی وجود دارد. 856 00:54:30,680 --> 00:54:33,040 من فقط نیاز به ذخیره سازی موقت یک int است. 857 00:54:33,040 --> 00:54:34,820 بنابراین ما به یک ستاره لازم نیست وجود دارد. 858 00:54:34,820 --> 00:54:39,310 ما فقط نیاز به ستاره به طوری که ما می توانیم این نوع از مرز خودسرانه عبور 859 00:54:39,310 --> 00:54:42,900 بین این 2 فریم در حافظه کامپیوتر من است. 860 00:54:42,900 --> 00:54:45,630 اما یک چیز را تغییر دهید، و شما ممکن است آن را دیدم در حال حاضر است. 861 00:54:45,630 --> 00:54:48,810 چه خط دیگر است که به وضوح متفاوت است در حال حاضر؟ >> [دانشجو] و ایکس. 862 00:54:48,810 --> 00:54:53,270 >> آره، بنابراین 25 آخرین خط از کد من باید برای این تغییر به کار است. 863 00:54:53,270 --> 00:54:58,360 یک هفته پیش و حتی در روز دوشنبه خط 25 نگاه مثل این، مبادله x و y، 864 00:54:58,360 --> 00:55:02,020 و این فقط شکسته شد، زیرا اگر به شما می گویند مبادله (x، y) 865 00:55:02,020 --> 00:55:05,660 شما در حال ارائه نسخه های X و Y به مبادله، سپس آن را کار خود را انجام 866 00:55:05,660 --> 00:55:09,080 اما شما در واقع هرگز تغییر X و Y خود. 867 00:55:09,080 --> 00:55:12,880 بنابراین حتی اگر شما در این شخصیت دیده می شود پیش از این هرگز با علامت در کد، 868 00:55:12,880 --> 00:55:15,860 فقط حدس می زنم. چه آن & را داشتند، ظاهرا؟ 869 00:55:15,860 --> 00:55:17,890 [دانشجو] طول می کشد آدرس. >> طول می کشد آدرس. 870 00:55:17,890 --> 00:55:21,160 بنابراین علامت است گفت: آدرس X را به من بدهید. 871 00:55:21,160 --> 00:55:25,590 چه کسی می داند که در آن است؟ آن اتفاق می افتد 123. من اهمیتی نمی دهند. فقط من را به آدرس X. 872 00:55:25,590 --> 00:55:28,340 & Y معنی است که آدرس Y را به من بدهید. 873 00:55:28,340 --> 00:55:34,450 و در آن نقطه داستان کاملا مطابق با تصویر یک لحظه پیش کشید. 874 00:55:34,450 --> 00:55:38,310 >> بنابراین من اشاره گر، اعتراف قطعا برای من وقتی که من برای اولین بار شروع به یادگیری این، 875 00:55:38,310 --> 00:55:40,570 قطعا یکی از سخت ترین کارها برای بسته بندی کردن ذهن من به اطراف. 876 00:55:40,570 --> 00:55:43,760 اما درک، به خصوص به عنوان ما در حفظ و بازی کردن با این نوع از همه چیز، 877 00:55:43,760 --> 00:55:48,030 اگر شما آن را شکستن به این نوع فوق العاده ساده و بی فکری مشکلات 878 00:55:48,030 --> 00:55:52,270 فقط در حال حرکت اعداد در اطراف، پاسخ به بسیاری از سردرگمی با اشاره گرها 879 00:55:52,270 --> 00:55:56,590 واقعا می توان از این مکانیک های بسیار اساسی مشتق شده است. 880 00:55:56,590 --> 00:55:59,070 در اینجا یک آدرس است. برو با ستاره. 881 00:55:59,070 --> 00:56:03,830 یا برعکس، در اینجا یک علامت است. از چه آدرس واقع شده است. 882 00:56:03,830 --> 00:56:06,270 بسیار خوب. 883 00:56:06,270 --> 00:56:09,000 تا جایی که همه از این حافظه که از؟ 884 00:56:09,000 --> 00:56:12,360 ما کشیده شده است این تصویر یک زن و شوهر از بار، و من در حفظ و امیدوار کننده ما باید به آن آمده، 885 00:56:12,360 --> 00:56:14,920 اما در اینجا به نمایندگی از حافظه کامپیوتر شما است 886 00:56:14,920 --> 00:56:17,420 که کمی بیشتر دارای برچسب از تخته سیاه ما در اینجا می باشد. 887 00:56:17,420 --> 00:56:21,590 بخش متن در بالا نشان دهنده چیزی است که با توجه به برنامه های خود را؟ 888 00:56:21,590 --> 00:56:26,090 [پاسخ دانش آموز نامفهوم] >> متاسفم؟ بگو دوباره. 889 00:56:26,090 --> 00:56:28,660 [دانشجو] برنامه واقعی. >> برنامه واقعی. 890 00:56:28,660 --> 00:56:32,430 >> بنابراین و صدای جرنگ جرنگ 0s و 1S است که شما بعد از نوشتن کد C کامپایل شده و پس از آن در حال اجرا 891 00:56:32,430 --> 00:56:35,910 و تولید 0s و به پایان می رسد و 1S تا در حافظه جمع 892 00:56:35,910 --> 00:56:38,570 زیرا وقتی شما با دوبار کلیک بر روی آیکون در مک یا PC خود را 893 00:56:38,570 --> 00:56:43,010 و یا اجرای یک فرمان مانند ماریو در سریع شما، 0s و 1S خود را از دیسک 894 00:56:43,010 --> 00:56:45,700 در حافظه بارگذاری می شود به طوری که کامپیوتر می تواند آنها را دستکاری 895 00:56:45,700 --> 00:56:47,540 و آنها را با سرعت بیشتری اجرا. 896 00:56:47,540 --> 00:56:50,880 بنابراین مقدار دهی اولیه داده ها و آماده سازی اطلاعات، ما نمی خواهد صحبت در مورد آن، 897 00:56:50,880 --> 00:56:52,420 ولی برای کسانی که تنها متغیرهای جهانی است. 898 00:56:52,420 --> 00:56:54,710 مقداردهی اولیه به معنی متغیر های جهانی که شما به ارزش ها به؛ 899 00:56:54,710 --> 00:56:59,300 مقدار دهی نکردن به معنی متغیر های جهانی که شما هنوز رتبهدهی نشده است دادن مقدار به. 900 00:56:59,300 --> 00:57:01,900 سپس این متغیر محیطی است که من کاملا به تکان دست من در وجود دارد، 901 00:57:01,900 --> 00:57:04,860 اما آنها هستند و وجود دارد که فروشگاه چیزهایی مانند نام کاربری خود را 902 00:57:04,860 --> 00:57:08,090 و نوع دیگر از جزئیات سطح پایین تر. 903 00:57:08,090 --> 00:57:12,880 اما juiciest قطعه از قالب قرار گیری حافظه خود را چیزی به نام پشته و پشته است. 904 00:57:12,880 --> 00:57:17,470 پشته دوباره روشن می شود، حافظه استفاده می شود که هر زمان که توابع نامیده می شوند، 905 00:57:17,470 --> 00:57:19,710 هر زمان که متغیرهای محلی وجود دارد 906 00:57:19,710 --> 00:57:22,120 و هر زمان که پارامتر وجود دارد که به تصویب رسید در اطراف. 907 00:57:22,120 --> 00:57:24,490 همه از آن اتفاق می افتد در پشته است. 908 00:57:24,490 --> 00:57:29,570 پشته ما در مورد صحبت کردیم، اما حدس می زنم که با استفاده از پشته. 909 00:57:31,120 --> 00:57:32,690 فقط یک تکه از حافظه است. 910 00:57:32,690 --> 00:57:36,620 این اتفاق می افتد به در بالا کشیده شده است، اما این کنوانسیون تصویری خودسرانه است. 911 00:57:36,620 --> 00:57:41,670 ظاهرا شده است با استفاده از حافظه را برای هفته ها از پشته؟ 912 00:57:41,670 --> 00:57:44,830 این از لحاظ فنی شما اما به طور غیر مستقیم. >> [دانشجو] GetString. 913 00:57:44,830 --> 00:57:47,950 GetString و malloc. بنابراین در اینجا تفاوت اساسی است. 914 00:57:47,950 --> 00:57:51,300 >> شما برای چند هفته گذشته می دانند که اگر شما نیاز به حافظه، فقط یک متغیر است. 915 00:57:51,300 --> 00:57:54,560 اگر شما نیاز به مقدار زیادی از حافظه، اعلام یک آرایه داخل تابع خود را. 916 00:57:54,560 --> 00:57:59,620 اما مشکل ما را نگه داشته ام مواجه است اگر متغیرهای محلی در داخل توابع تعریف، 917 00:57:59,620 --> 00:58:05,340 و به زودی به عنوان بازده عملکرد، چه اتفاقی می افتد به حافظه و کسانی که متغیرهای؟ 918 00:58:05,340 --> 00:58:09,620 فقط مرتب کردن بر اساس از آن دیگر شما، درست است؟ این تنها مرتب کردن بر اساس مفهومی از بین می رود. 919 00:58:09,620 --> 00:58:13,950 این هنوز از نظر جسمی وجود دارد، بدیهی است، اما این دیگر حق خود را به استفاده از. 920 00:58:13,950 --> 00:58:17,160 این واضح است که مشکل ساز است اگر شما می خواهید برای نوشتن توابع در زندگی 921 00:58:17,160 --> 00:58:20,440 که در واقع حافظه و تخصیص آن را به عقب بلافاصله. 922 00:58:20,440 --> 00:58:24,180 در نقطه: هدف GetString در زندگی این است که هیچ ایده را در پیش 923 00:58:24,180 --> 00:58:26,390 چگونه بزرگی از یک رشته که من قصد دارم در صفحه کلید تایپ، 924 00:58:26,390 --> 00:58:30,390 اما آن را باید به قادر به اختصاص دادن حافظه برای نگهداری دیوید یا سلام 925 00:58:30,390 --> 00:58:32,860 یا کل مقاله است که کاربر ممکن است تایپ شوید. 926 00:58:32,860 --> 00:58:35,280 بنابراین GetString شده است با استفاده از malloc. 927 00:58:35,280 --> 00:58:38,910 Malloc بنابراین باید با استفاده از نه پشته؛ 928 00:58:38,910 --> 00:58:40,770 در عوض آن را با استفاده از این چیزی به نام پشته است. 929 00:58:40,770 --> 00:58:44,430 هیچ چیز در مورد حافظه متفاوت وجود دارد. این سریعتر یا آهسته تر و یا هر چیزی شبیه به آن است. 930 00:58:44,430 --> 00:58:46,570 این فقط از لحاظ فیزیکی در یک مکان متفاوت است. 931 00:58:46,570 --> 00:58:50,120 >> اما قاعده این است که حافظه اختصاص داده شده است که بر روی پشته 932 00:58:50,120 --> 00:58:56,180 خواهد شد هرگز به دور از شما گرفته شده تا با شما تماس - حدس - رایگان. 933 00:58:56,180 --> 00:59:00,510 در مقابل، هر گونه حافظه شما را بر روی پشته در با اعلام یک آرایه بخواهید 934 00:59:00,510 --> 00:59:03,320 و یا اعلام یک متغیر ایم برای هفته ها انجام شده است، 935 00:59:03,320 --> 00:59:05,640 که به طور پیش فرض به پایان می رسد تا در پشته. 936 00:59:05,640 --> 00:59:09,550 و آنکه کارهای بزرگ 90 درصد از زمان است، اما در موارد نادر آن 937 00:59:09,550 --> 00:59:12,470 که در آن شما می خواهید برای تخصیص حافظه و نگه داشتن آن در اطراف، 938 00:59:12,470 --> 00:59:14,730 سپس شما نیاز به استفاده از یک تابع مانند malloc. 939 00:59:14,730 --> 00:59:19,370 و یا ما استفاده کرده اند یک تابع مانند GetString، که به نوبه خود با استفاده از malloc. 940 00:59:19,370 --> 00:59:23,300 بیایید ببینید که این ممکن است بشکند و پایین و پس از آن را زیرچشمی نگاه کردن در Binky. 941 00:59:23,300 --> 00:59:25,820 خواهیم آمد به آن در آینده است. 942 00:59:25,820 --> 00:59:29,270 در اینجا یک برنامه فوق العاده ساده است که در 2 خط اول چه؟ 943 00:59:29,270 --> 00:59:33,460 در زبان انگلیسی، چه چیزی این 2 خط اول از کد را در داخل اصلی؟ 944 00:59:33,460 --> 00:59:35,600 [پاسخ دانش آموز نامفهوم] 945 00:59:35,600 --> 00:59:37,880 مراقب باشید. این کار به من آدرس X یا Y نیست. 946 00:59:37,880 --> 00:59:41,840 [دانشجو] می دهد اشاره گر به نوع داده int است. >> خوب است. من 2 اشاره گرها را به اعداد صحیح است. 947 00:59:41,840 --> 00:59:45,130 به عبارت دیگر، 2 تکه از حافظه است که من در حفظ و نقاشی امروز به من بدهد، 948 00:59:45,130 --> 00:59:46,950 حتی اگر من آن را پاک در حال حاضر، به عنوان مربع. 949 00:59:46,950 --> 00:59:50,000 2 تکه از حافظه را در اختیار من قرار دهید، یکی به نام X، به نام Y - 950 00:59:50,000 --> 00:59:54,320 قبلا من به نام آنها و T - و چه نوع از آن تکه از حافظه چیست؟ 951 00:59:54,320 --> 00:59:57,160 رفتن به ذخیره آدرس. 952 00:59:57,160 --> 00:59:59,110 این * نوع int است. 953 00:59:59,110 --> 01:00:01,630 >> بنابراین آدرس بین المللی خواهد شد در نهایت در X زندگی می کنند، 954 01:00:01,630 --> 01:00:03,860 آدرس بین المللی خواهد شد در نهایت در Y زندگی می کنند، 955 01:00:03,860 --> 01:00:08,460 اما در ابتدا، آنچه در داخل X و Y است؟ چه کسی می داند؟ ارزش زباله. 956 01:00:08,460 --> 01:00:10,180 این هیچ ربطی به با اشاره گر می باشد. 957 01:00:10,180 --> 01:00:12,720 اگر ما چیزی وجود دارد، می داند که آنچه در واقع وجود دارد قرار داده است؟ 958 01:00:12,720 --> 01:00:18,950 در حال حاضر، ایکس. در اینجا چه اتفاقی می افتد؟ این حلال است در حال حاضر به دلیل یک اشاره گر است. این * نوع int است. 959 01:00:18,950 --> 01:00:21,870 بنابراین این بدان معناست که من می توانم در x قرار دادن آدرس برخی از تکه از حافظه است. 960 01:00:21,870 --> 01:00:25,120 malloc چه بازگشت؟ کامل، آن را برمی گرداند آدرس، 961 01:00:25,120 --> 01:00:28,510 آدرس بایت اول در یک تکه از حافظه است. 962 01:00:28,510 --> 01:00:31,140 چگونه بسیاری از کلمه در ادامه متن می باشد ظاهرا این تخصیص، به عنوان مثال، در دستگاه؟ 963 01:00:31,140 --> 01:00:33,510 به اندازه یک int؟ 4. 964 01:00:33,510 --> 01:00:36,600 اگر شما فکر می کنم به 1 هفته، فوق العاده مهم نیست که همیشه به یاد داشته باشید که، 965 01:00:36,600 --> 01:00:38,870 اما در این مورد آن را مفید می دانید، 4 بایت است. 966 01:00:38,870 --> 01:00:41,770 پس این است که تخصیص در 4 بایت heap از 967 01:00:41,770 --> 01:00:46,110 و آن را بازگشت به آدرس یکی از اولین به من خودسرانه. 968 01:00:46,110 --> 01:00:47,700 در حال حاضر، چه در آن x انجام شده است؟ 969 01:00:47,700 --> 01:00:52,200 A * x = 42 در حال انجام چه؟ 970 01:00:52,200 --> 01:00:57,150 اگر در این نقطه در داستان x، که به نظر می رسد، مثل این برخی با ارزش زباله، 971 01:00:57,150 --> 01:01:04,120 Y این است که در حال حاضر برخی از با ارزش زباله، در حال حاضر در خط 3 به من اختصاص داده 4 بایت است. 972 01:01:04,120 --> 01:01:06,950 این تصویر در اصل مثل این به نظر می رسد. 973 01:01:06,950 --> 01:01:12,010 یا دقیق تر، در صورتی که این آدرس های دلخواه 123، این همان چیزی است که داستان ما در حال حاضر مانند به نظر می رسد. 974 01:01:12,010 --> 01:01:23,940 * x = 42 در حال حاضر یعنی چه؟ این بدان معناست که به 123 آدرس بروید و با قرار دادن شماره 42 وجود دارد. 975 01:01:23,940 --> 01:01:26,220 من لازم نیست برای رسم این خطوط از آنجا که ما در حال رشته ها را انجام نمی دهد. 976 01:01:26,220 --> 01:01:29,480 >> من باید فقط آن را شبیه به این نوشته شده است، و فقط برای خاطر تظاهرات، 977 01:01:29,480 --> 01:01:33,240 42 به عنوان یک نوع از نوع int طول می کشد تا مقدار زیادی از فضا، 4 بایت است. 978 01:01:33,240 --> 01:01:35,960 به طوری که آنچه اتفاق افتاده، وجود دارد، اما یک مشکل وجود دارد. 979 01:01:35,960 --> 01:01:40,580 * Y = 13. چه اتفاق می افتد؟ 980 01:01:40,580 --> 01:01:46,470 مشکل این است که Y * در جهان ساده ما فقط به معنای رفتن به آدرس در Y است. 981 01:01:46,470 --> 01:01:48,590 چه خبر از Y است؟ برخی از آن ارزش زباله است. 982 01:01:48,590 --> 01:01:53,150 بنابراین اجازه دهید فرض کنیم که آن مقدار زباله است 5551212، و این چیزی دیوانه می خواهم که. 983 01:01:53,150 --> 01:01:56,750 * به معنی Y برو به آدرس 5،551،212. 984 01:01:56,750 --> 01:02:00,450 که می خواهم در اینجا. آن وجود ندارد، به عنوان مثال. 985 01:02:00,450 --> 01:02:05,310 بنابراین * Y می شود 13 یعنی من دارم تلاش به منظور جلب 13 در اینجا. آن وجود ندارد. 986 01:02:05,310 --> 01:02:08,790 من بیش از حد قطعه از تخته سیاه است. چه چیزی را دریافت کنم؟ 987 01:02:08,790 --> 01:02:14,930 که مرموز پیام خطا تقسیم بندی چون من در تلاش برای قرار دادن در حافظه 988 01:02:14,930 --> 01:02:19,470 یک مقدار مانند 13 در یک محل که وجود ندارد. 989 01:02:19,470 --> 01:02:23,900 بقیه از این برنامه ممکن است کار خوب، اما تا زمانی که آن را نمی کند. 990 01:02:23,900 --> 01:02:25,350 بنابراین سعی کنید این مطلب را به بگویید. 991 01:02:25,350 --> 01:02:27,830 ما باید آمده است که هنگامی که ما در مورد سحر و جادو صحبت کرده اید. 992 01:02:27,830 --> 01:02:30,290 اجازه بازگشت به این نتیجه گیری با این چیزی که به نام Binky، 993 01:02:30,290 --> 01:02:33,710 که فراخوان یک استاد دانشگاه استنفورد در خانه نشسته بازی با claymation است، 994 01:02:33,710 --> 01:02:36,380 به داستان دقیقا همان است که برنامه های مشابه است. 995 01:02:36,380 --> 01:02:40,580 این فقط در حدود 3 دقیقه طول. در اینجا ما باید Binky. 996 01:02:40,580 --> 01:02:45,030 [MALE بلندگو بر روی ویدئو] هی Binky، از خواب بیدار می شوید. این زمان برای تفریح ​​و اشاره گر است. 997 01:02:45,030 --> 01:02:50,080 [Binky] چه خبر؟ اطلاعات در مورد اشاره گر؟ اوه، مغز گردو و غیره! 998 01:02:50,080 --> 01:02:53,700 بلندگو مرد خوب، برای شروع، من حدس می زنم ما در حال رفتن به نیاز به یک اشاره گر زن و شوهر است. 999 01:02:53,700 --> 01:02:57,890 >> [Binky] باشه. این کد اختصاص 2 اشاره گر است که می تواند اشاره به اعداد صحیح است. 1000 01:02:57,890 --> 01:03:02,220 [مرد سخنران] خوب. خب، می بینم 2 به اشاره گر، اما آنها به نظر نمی رسد با اشاره به هر چیزی. 1001 01:03:02,220 --> 01:03:05,550 [Binky] درست است. در ابتدا، اشاره گر به هر چیزی نیست. 1002 01:03:05,550 --> 01:03:09,270 چیزهایی که آنها را به نقطه نامیده می شوند pointees و تنظیم آنها را تا مرحله جداگانه است. 1003 01:03:09,270 --> 01:03:12,330 [مرد سخنران: اوه، راست، درست است. من می دانستم که. pointees جدا هستند. 1004 01:03:12,330 --> 01:03:15,630 استروژن، پس چگونه می توانم در یک pointee شما اختصاص؟ 1005 01:03:15,630 --> 01:03:21,510 [Binky] باشه. این کد اختصاص یک pointee جدید صحیح است، و این بخش مجموعه X به آن اشاره. 1006 01:03:21,510 --> 01:03:23,500 [مرد سخنران] با سلام، به نظر می رسد که بهتر است. 1007 01:03:23,500 --> 01:03:26,030 بنابراین کاری آن را. >> [Binky] باشه. 1008 01:03:26,030 --> 01:03:30,300 من dereference X اشاره گر به ذخیره شماره 42 به pointee آن. 1009 01:03:30,300 --> 01:03:34,410 برای این ترفند من گرز جادویی من از غیر مرجع نیاز دارید. 1010 01:03:34,410 --> 01:03:38,610 [مرد سخنران] گرز جادویی خود را از غیر مرجع؟ که بزرگ است. 1011 01:03:38,610 --> 01:03:44,230 [Binky] این همان چیزی است که کد به نظر می رسد مانند. من فقط تنظیم تعداد و ... [ظاهر صدا] 1012 01:03:44,230 --> 01:03:46,100 [مرد سخنران] هی نگاه کنید، آن می رود وجود دارد. 1013 01:03:46,100 --> 01:03:50,990 بنابراین انجام dereference در X فلش به دسترسی به pointee خود را به شرح زیر، 1014 01:03:50,990 --> 01:03:53,230 در این مورد به ذخیره 42 در آن وجود دارد. 1015 01:03:53,230 --> 01:03:57,630 با سلام، سعی کنید با استفاده از آن برای ذخیره شماره 13 از طریق اشاره گر دیگر، y است. 1016 01:03:57,630 --> 01:04:03,250 [Binky] باشه. من فقط بیش از اینجا بروید به Y و شماره 13 راه اندازی 1017 01:04:03,250 --> 01:04:08,360 و پس از آن عصا را بصورت غیر مرجع و فقط ... [صدای وزوز ایست! 1018 01:04:08,360 --> 01:04:10,980 [مرد سخنران] اوه هی، که کار نمی کند. 1019 01:04:10,980 --> 01:04:14,870 >> بگو، Binky، من فکر نمی کنم غیر مرجع Y است که یک ایده خوب 1020 01:04:14,870 --> 01:04:17,880 به دلیل راه اندازی pointee مرحله جداگانه است 1021 01:04:17,880 --> 01:04:19,850 و من فکر نمی کنم ما تا کنون آن را انجام داد. 1022 01:04:19,850 --> 01:04:21,770 [Binky] HMM، نقطه خوبی است. 1023 01:04:21,770 --> 01:04:26,640 [مرد سخنران] آره. ما اختصاص داده اشاره گر Y، اما ما آن را هرگز به نقطه را به pointee. 1024 01:04:26,640 --> 01:04:28,780 [Binky] سلام، بسیار هوشیار است. 1025 01:04:28,780 --> 01:04:30,690 [مرد سخنران] با سلام، شما به دنبال خوبی وجود دارد، Binky. 1026 01:04:30,690 --> 01:04:34,160 آیا می توانید آن را تعمیر کنید به طوری که به pointee همان X Y؟ >> [Binky] مطمئنا. 1027 01:04:34,160 --> 01:04:37,100 من گرز جادویی من از انتساب اشاره گر استفاده کنید. 1028 01:04:37,100 --> 01:04:39,070 [بلندگو مرد] است که برای رفتن به یک مشکل مثل قبل؟ 1029 01:04:39,070 --> 01:04:40,840 [Binky] نه، این بدان pointees لمس نیست. 1030 01:04:40,840 --> 01:04:44,780 این فقط یک اشاره گر به اشاره به همان چیزی که به عنوان یکی دیگر از تغییر. [ظاهر صدا] 1031 01:04:44,780 --> 01:04:48,570 [مرد سخنران: اوه، می بینم. در حال حاضر نقاط Y به جای X همان. 1032 01:04:48,570 --> 01:04:51,140 پس صبر کنید. در حال حاضر سالانه ثابت است. این pointee. 1033 01:04:51,140 --> 01:04:54,520 بنابراین شما می توانید گرز غیر مرجع را دوباره به ارسال بیش از 13 را امتحان کنید. 1034 01:04:54,520 --> 01:04:58,130 [Binky] آه، درست است. در اینجا می رود. [ظاهر صدا] 1035 01:04:58,130 --> 01:05:01,250 [مرد سخنران] با سلام، در آن نگاه کنید. در حال حاضر غیر مرجع با این نسخهها کار بر روی Y است. 1036 01:05:01,250 --> 01:05:05,200 و از آنجا که اشاره گرها به اشتراک گذاری که یکی pointee، هر دو آنها از 13. 1037 01:05:05,200 --> 01:05:06,910 [Binky] آره، به اشتراک گذاری. هر چیز دیگری. 1038 01:05:06,910 --> 01:05:08,880 >> بنابراین می خواهیم به تغییر مکان در حال حاضر؟ 1039 01:05:08,880 --> 01:05:11,420 [مرد سخنران] آه، نگاه کن، ما از زمان. >> [Binky اما - 1040 01:05:11,420 --> 01:05:13,880 [سخنران MALE] فقط به یاد داشته باشید 3 قوانین اشاره گر. 1041 01:05:13,880 --> 01:05:18,630 شماره 1، ساختار اولیه این است که شما باید یک اشاره گر و آن را به pointee. 1042 01:05:18,630 --> 01:05:23,120 اما اشاره گر و pointee جدا هستند، و خطا رایج است به راه اندازی یک اشاره گر 1043 01:05:23,120 --> 01:05:25,680 اما فراموش به آن pointee. 1044 01:05:25,680 --> 01:05:29,580 شماره 2، غیر مرجع اشاره گر در اشاره گر شروع می شود و پس از فلش خود را بیش از 1045 01:05:29,580 --> 01:05:31,060 به دسترسی به pointee آن. 1046 01:05:31,060 --> 01:05:34,340 همانطور که همه ما می دانیم، این فقط اگر pointee وجود دارد، 1047 01:05:34,340 --> 01:05:36,460 که نوع می شود برگشت به رد شماره 1. 1048 01:05:36,460 --> 01:05:39,870 شماره 3، انتساب اشاره گر طول می کشد یک اشاره گر و تغییرات آن 1049 01:05:39,870 --> 01:05:42,390 به نقطه را به pointee به عنوان یکی دیگر از اشاره گر. 1050 01:05:42,390 --> 01:05:45,890 بنابراین پس از انتساب، 2 اشاره گر به همان pointee. 1051 01:05:45,890 --> 01:05:47,800 گاهی اوقات که به اشتراک گذاری نامیده می شود. 1052 01:05:47,800 --> 01:05:50,910 >> و آن همه به آن وجود دارد واقعا. خداحافظ خداحافظی در حال حاضر. 1053 01:05:50,910 --> 01:05:55,840 Binky. این CS50 است. ما شما را در هفته آینده را ببینید. [تشویق حضار] 1054 01:05:55,840 --> 01:05:59,000 >> [CS50.TV]