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