1 00:00:00,000 --> 00:00:02,742 2 00:00:02,742 --> 00:00:05,680 >> SPEAKER 1: سلام بر همه. 3 00:00:05,680 --> 00:00:07,530 ما در حال رفتن به شروع کنید. 4 00:00:07,530 --> 00:00:09,330 من فکر می کنم مردم هنوز هم رفتن به فیلتر کردن در. 5 00:00:09,330 --> 00:00:12,840 اما در جهت منافع هم، به طوری که ما می توانیم شما بچه ها از اینجا در زمان، 6 00:00:12,840 --> 00:00:14,110 ما قصد داریم به شروع می شود. 7 00:00:14,110 --> 00:00:18,780 بنابراین به CS50 امتحان 0 بررسی خوش آمدید. 8 00:00:18,780 --> 00:00:23,020 برای کسانی از شما که متوجه نشده اند در عین حال، شما یک سوال در چهارشنبه. 9 00:00:23,020 --> 00:00:25,700 وو هو. 10 00:00:25,700 --> 00:00:29,780 >> اگر شما آغاز شده است مطالعه است یا متوجه نیست که این وجود دارد با این حال، 11 00:00:29,780 --> 00:00:34,070 آزمونها گذشته و تمام اطلاعات در مورد مسابقه خود را در cs50.net/quizzes می باشد. 12 00:00:34,070 --> 00:00:38,090 در برخی از مسائل بسیار خوب وجود دارد در وجود دارد، آزمونها گذشته از آخرین 10 13 00:00:38,090 --> 00:00:43,760 سال و همچنین اطلاعات در مورد این مسابقه و موضوعات 14 00:00:43,760 --> 00:00:46,250 که تحت پوشش خواهد شد. 15 00:00:46,250 --> 00:00:48,980 بنابراین اجازه دهید شروع کنید. 16 00:00:48,980 --> 00:00:54,240 >> پس شما بچه ها ممکن است به یاد داشته باشید، اول روز کلاس دیوید کسانی که لامپ در حال. 17 00:00:54,240 --> 00:00:59,650 بنابراین اساسا، همه چیز است که می رود در زیر هود از یک کامپیوتر است 18 00:00:59,650 --> 00:01:00,860 انجام شده در دودویی. 19 00:01:00,860 --> 00:01:04,080 دودویی به معنای آنچه در آن برای تلفن های موبایل مانند، 0 و 1 است. 20 00:01:04,080 --> 00:01:09,290 این دو مقدار است که می توان بیان کرد. 21 00:01:09,290 --> 00:01:14,675 >> بنابراین درست مانند روز اول از بخش هنگامی که دیوید تبدیل در نور 22 00:01:14,675 --> 00:01:21,990 لامپ برای نشان دادن در، و یا 1، کامپیوتر ما درک دودویی به عنوان 0 و 23 00:01:21,990 --> 00:01:24,110 1 در، روشن یا خاموش. 24 00:01:24,110 --> 00:01:25,360 مبانی دودویی. 25 00:01:25,360 --> 00:01:29,440 26 00:01:29,440 --> 00:01:32,470 هر محل نشان داده شده است در پایه دو. 27 00:01:32,470 --> 00:01:36,260 بنابراین شما اضافه 2 به 0 به 1 به 2 از همه طرف است. 28 00:01:36,260 --> 00:01:41,970 >> برای محاسبه چه باینری خود را به اعشاری، شما فقط به دنبال این معادله 29 00:01:41,970 --> 00:01:42,840 نوع چیزی. 30 00:01:42,840 --> 00:01:49,510 اگر شما یک 1 در هر یک از این مکان ها، شما آن را با ضرب هر 31 00:01:49,510 --> 00:01:53,820 پایه آن در، آن را به اضافه کردن، و شما دهدهی دریافت کنید. 32 00:01:53,820 --> 00:01:57,930 پس این است که چگونه شما تعداد دفعات مشاهده به 5 باینری. 33 00:01:57,930 --> 00:02:01,400 درست مثل آنچه که ما در حال انجام آخرین اسلاید، این است که چگونه شما را 34 00:02:01,400 --> 00:02:02,650 نماینده 1 از 5. 35 00:02:02,650 --> 00:02:05,320 36 00:02:05,320 --> 00:02:09,660 >> به طور مشابه، درست مثل شما می توانید اضافه کردن و تفریق در مبنای ده می و یا پایه 10 و یا 37 00:02:09,660 --> 00:02:13,040 واقعا هر پایه، در می توانید اضافه کنید و تفریق دودویی. 38 00:02:13,040 --> 00:02:18,400 دقیقا همان چیزی است که شما انتظار می رود زمانی که شما اضافه کردن دو تا، اگر آن را برابر بیشتر 39 00:02:18,400 --> 00:02:24,220 از 1، شما حمل 1، آن را یک 0، و انجام آن علاوه بر این که راه، فقط 40 00:02:24,220 --> 00:02:29,910 مثل وقتی که با منظم دهدهی و یا هر پایگاه دیگر. 41 00:02:29,910 --> 00:02:30,970 دانلود. 42 00:02:30,970 --> 00:02:35,140 >> بنابراین مانند قبل از من، همه چیز را گفت که در زیر هود از کامپیوتر ما می رود 43 00:02:35,140 --> 00:02:37,560 در، یا باینری 0 و 1 انجام می شود. 44 00:02:37,560 --> 00:02:43,470 پس چگونه بیان ما، به عنوان مثال، نامه ها و یا اعداد، و یا شخصیت؟ 45 00:02:43,470 --> 00:02:45,560 و پاسخ به این ASCII است. 46 00:02:45,560 --> 00:02:49,380 >> ASCII یک نگاشت بین شخصیت است که ما به طور معمول در مراجعه کنید 47 00:02:49,380 --> 00:02:53,360 زبان انگلیسی مانند است، در B، C است، تاکید، خط تیره، و 48 00:02:53,360 --> 00:02:54,910 هر چیزی مانند آن. 49 00:02:54,910 --> 00:02:57,260 و این نقشه ها که به ارزش ASCII. 50 00:02:57,260 --> 00:03:03,080 ارزش ASCII فقط یک عدد است که می توان با کامپیوتر شما قابل درک باشد. 51 00:03:03,080 --> 00:03:07,430 و درست مثل شما می توانید علاوه بر انجام و تفریق با اعداد، شما می توانید انجام دهید 52 00:03:07,430 --> 00:03:10,890 آنها با ارزش های ASCII. 53 00:03:10,890 --> 00:03:14,050 >> بنابراین در این مثال، این نسخه قابل چاپ کردن؟ 54 00:03:14,050 --> 00:03:26,790 55 00:03:26,790 --> 00:03:35,480 آره، بنابراین فقط یک فضا فضای B فضای C D. کجا موس من بود؟ 56 00:03:35,480 --> 00:03:39,200 57 00:03:39,200 --> 00:03:43,380 توجه کنید شما می توانید یک int در 65 تعریف کنیم. 58 00:03:43,380 --> 00:03:47,080 و هنگامی که شما نسخه قابل چاپ که با استفاده از درصد C، آن را تفسیر که به عنوان یک 59 00:03:47,080 --> 00:03:49,330 شخصیت و چاپ خواهد شد A. 60 00:03:49,330 --> 00:03:52,800 >> به طور مشابه، شما می توانید اعلام آن را به عنوان کاراکتر. 61 00:03:52,800 --> 00:03:56,860 و هنگامی که شما آن را چاپ کنید و با استفاده از درصد C، آن را تفسیر است که به عنوان 62 00:03:56,860 --> 00:04:05,240 درصد D. و درست مثل شما می توانید اضافه کنید تعداد، شما می توانید اضافه کردن کاراکتر است 63 00:04:05,240 --> 00:04:06,878 ارزش ASCII، در این مورد. 64 00:04:06,878 --> 00:04:11,370 65 00:04:11,370 --> 00:04:16,130 >> بنابراین یک اشاره گر کمی برای همه. 66 00:04:16,130 --> 00:04:19,610 5، به عنوان یک رشته، نمی در واقع برابر با 5. 67 00:04:19,610 --> 00:04:26,610 پس چگونه ممکن است تبدیل ما رشته 5 به عدد صحیح 5؟ 68 00:04:26,610 --> 00:04:28,930 هر گونه ایده ها؟ 69 00:04:28,930 --> 00:04:31,630 آره. 70 00:04:31,630 --> 00:04:36,720 >> بنابراین اگر در حال حاضر 5 به عنوان یک رشته، ما می توانیم 0 تفریق. 71 00:04:36,720 --> 00:04:37,820 و این هم به ما 5 را. 72 00:04:37,820 --> 00:04:41,670 و به طور مشابه، اگر در حال حاضر 5 عنوان عدد صحیح، اضافه کنید که به رشته 0. 73 00:04:41,670 --> 00:04:43,112 و این به ما می دهد رشته 5. 74 00:04:43,112 --> 00:04:46,350 75 00:04:46,350 --> 00:04:48,350 دانلود. 76 00:04:48,350 --> 00:04:52,940 >> در حال حاضر، به خاطر به سخنرانی که در آن ما در مورد الگوریتم صحبت کردیم. 77 00:04:52,940 --> 00:04:57,260 پس چگونه ما در واقع می خواهند یک کامپیوتر به انجام کارهای جالب؟ 78 00:04:57,260 --> 00:05:00,460 شما می دانید، فقط جمع و تفریق اعداد و چاپ چیز نیست 79 00:05:00,460 --> 00:05:01,730 که هیجان انگیز است. 80 00:05:01,730 --> 00:05:04,620 معمولا، ما می خواهیم کامپیوتر ما به انجام نوعی از الگوریتم. 81 00:05:04,620 --> 00:05:07,820 چیزی کمی پیچیده تر از حساب ساده. 82 00:05:07,820 --> 00:05:11,930 >> یک الگوریتم فقط یک گام به گام مجموعه ای است از دستورالعمل در مورد چگونگی انجام 83 00:05:11,930 --> 00:05:14,640 task-- خاص 84 00:05:14,640 --> 00:05:15,660 درست مثل دستور غذا. 85 00:05:15,660 --> 00:05:19,990 شما ممکن است در روز اول به یاد داشته باشید کلاس و جایی که داوود کرده بود ما حساب یک اتاق 86 00:05:19,990 --> 00:05:22,550 مردم و چگونه بسیاری از مردم در اتاق بودند. 87 00:05:22,550 --> 00:05:24,480 شما ممکن است به شمارش استفاده می شود یک به یک. 88 00:05:24,480 --> 00:05:25,860 1، 2، 3، 4. 89 00:05:25,860 --> 00:05:28,010 در این صورت، یک الگوریتم زمان خطی. 90 00:05:28,010 --> 00:05:31,710 >> اما دیوید معرفی یک الگوریتم برای شما به تعداد افراد در اتاق 91 00:05:31,710 --> 00:05:37,340 که در آن هر کس می ایستد، به شما می گویند شما تعداد به شخص دیگری، اضافه کردن که 92 00:05:37,340 --> 00:05:39,200 تعداد، و یک نفر نشسته. 93 00:05:39,200 --> 00:05:40,410 و دوباره تکرار کنید. 94 00:05:40,410 --> 00:05:42,910 این یک نوع الگوریتم است. 95 00:05:42,910 --> 00:05:47,520 ما می توانیم چگونه کارآمد تجزیه و تحلیل الگوریتم بر اساس بر آن زمان اجرا شود. 96 00:05:47,520 --> 00:05:49,680 اما ما کمی صحبت اطلاعات بیشتر در مورد که بعدا. 97 00:05:49,680 --> 00:05:52,740 98 00:05:52,740 --> 00:05:57,090 >> بنابراین تمام الگوریتم همچنین می توانید در شبه نوشته شده است. 99 00:05:57,090 --> 00:06:01,120 شبه فقط انگلیسی مانند گرامر استفاده شده برای نشان دادن 100 00:06:01,120 --> 00:06:02,420 یک زبان برنامه نویسی. 101 00:06:02,420 --> 00:06:06,070 به عنوان مثال، اگر ما می خواستیم به درخواست کاربر تعداد مورد علاقه من به حدس زدن، ما 102 00:06:06,070 --> 00:06:08,390 ممکن است شبه به عنوان مثل است. 103 00:06:08,390 --> 00:06:09,850 >> دریافت کاربران را حدس بزنید. 104 00:06:09,850 --> 00:06:13,570 اگر حدس درست باشد، به آنها بگویید آنها درست کنید، چیز دیگری به آنها بگویید 105 00:06:13,570 --> 00:06:15,560 آنها درست نیست. 106 00:06:15,560 --> 00:06:22,530 و شبه راه به راحتی است به نمایندگی از یک ایده و یا یک الگوریتم. 107 00:06:22,530 --> 00:06:26,910 بنابراین در حال حاضر ما در صورت تمایل به واقع ارسال این در زبان که کامپیوتر 108 00:06:26,910 --> 00:06:27,980 ممکن است درک. 109 00:06:27,980 --> 00:06:35,660 بنابراین ما می تواند شبه ما ارسال و تفسیر که به کد منبع آن است. 110 00:06:35,660 --> 00:06:41,320 >> تا کنون، کد منبع باید پایبند به نحو خاصی از 111 00:06:41,320 --> 00:06:42,490 یک زبان برنامه نویسی. 112 00:06:42,490 --> 00:06:45,430 و تا کنون، در CS50، ما شده است با استفاده از بیشتر ج. 113 00:06:45,430 --> 00:06:48,320 بنابراین این ممکن است کد منبع برای ج. 114 00:06:48,320 --> 00:06:51,440 بعد ها در این دوره، شما شب در تماس با برنامه نویسی دیگر 115 00:06:51,440 --> 00:06:52,480 زبان هایی مانند PHP. 116 00:06:52,480 --> 00:06:57,540 یا اگر شما حتی کلاس های دیگر را، شما ممکن جاوا، پایتون، و یا حتی OCML انجام دهد. 117 00:06:57,540 --> 00:07:01,570 اما در زبان برنامه ج ما، این است چگونه ممکن است ما کد منبع را برای ارسال 118 00:07:01,570 --> 00:07:04,760 الگوریتم شبه که من فقط قبل از آن شرح داده شده. 119 00:07:04,760 --> 00:07:08,630 120 00:07:08,630 --> 00:07:11,430 >> پس چگونه کامپیوتر خود را در واقع درک کنند که؟ 121 00:07:11,430 --> 00:07:14,490 من می خواهم قبل، از آن گفت که تنها واقعا صفر و آنهایی که درک می کند. 122 00:07:14,490 --> 00:07:17,880 پس چگونه آن را از منبع دریافت کد را به چیزی است که می تواند 123 00:07:17,880 --> 00:07:18,960 درک؟ 124 00:07:18,960 --> 00:07:22,920 خب، ما باید چیزی به نام یک کامپایلر. 125 00:07:22,920 --> 00:07:28,450 >> اگر شما به یاد پشت در بسیاری از خود psets، شما یک نوع از برنامه به حال 126 00:07:28,450 --> 00:07:30,370 نوشته شده در یک فایل نقطه ج. 127 00:07:30,370 --> 00:07:32,550 و سپس شما می توانید را تایپ کنید. 128 00:07:32,550 --> 00:07:35,970 پس چه شده است را انجام می دهند؟ 129 00:07:35,970 --> 00:07:39,970 >> شما می توانید را تایپ به کامپایل شما برنامه به دلیل someone-- 130 00:07:39,970 --> 00:07:42,730 هر کس مجموعه ای ص خود را نوشت. احتمالا David-- 131 00:07:42,730 --> 00:07:44,190 ایجاد یک فایل را. 132 00:07:44,190 --> 00:07:51,320 و که می گوید را می دانم که برای اجرای خود را کامپایلر، به نام صدای جرنگ جرنگ، که اراده 133 00:07:51,320 --> 00:07:55,560 سپس کامپایل کد منبع خود را به اعتراض کد، که صفر و آنهایی که 134 00:07:55,560 --> 00:07:57,720 که کامپیوتر شما را درک کنند. 135 00:07:57,720 --> 00:08:01,610 اما کمی بعد، ما خواهد شد بیشتر در عمق در مورد کامپایلرها. 136 00:08:01,610 --> 00:08:05,640 137 00:08:05,640 --> 00:08:10,800 >> بنابراین به یاد pset 0، where-- بله، شما سوالی دارید؟ 138 00:08:10,800 --> 00:08:11,620 >> رسید [نامفهوم]؟ 139 00:08:11,620 --> 00:08:12,490 >> SPEAKER 1: بله. 140 00:08:12,490 --> 00:08:14,960 من فکر می کنم آنها در واقع باید آنلاین باشد. 141 00:08:14,960 --> 00:08:15,120 آره. 142 00:08:15,120 --> 00:08:16,572 >> رسید آیا آن را مانند [نامفهوم]؟ 143 00:08:16,572 --> 00:08:19,476 144 00:08:19,476 --> 00:08:20,830 >> SPEAKER 1: این طور نیست. 145 00:08:20,830 --> 00:08:25,810 در cs50.net/quizzes می باشد. 146 00:08:25,810 --> 00:08:32,900 >> رسید آزمونها اسلش، بریده بریده 2013، بریده بریده 0، و فقط از طریق کلیک کنید 147 00:08:32,900 --> 00:08:35,956 آزمونها 2013 و مسابقه 0، بررسی لام بخش. 148 00:08:35,956 --> 00:08:40,380 >> SPEAKER 1: آره، بنابراین اگر شما بچه ها می خواهید به کشیدن آن را به بالا و به آن نگاه خود را در 149 00:08:40,380 --> 00:08:42,740 کامپیوتر خود، که خوب است بیش از حد. 150 00:08:42,740 --> 00:08:43,130 دوباره بگو. 151 00:08:43,130 --> 00:08:44,546 >> رسید [نامفهوم]. 152 00:08:44,546 --> 00:08:48,780 >> SPEAKER 1: آره، [نامفهوم] متغیر ساختگی است. 153 00:08:48,780 --> 00:08:49,644 آه، بله؟ 154 00:08:49,644 --> 00:08:51,372 >> رسید [نامفهوم]؟ 155 00:08:51,372 --> 00:08:54,300 >> SPEAKER 1: نه، اعتصاب می در آزمون نیست. 156 00:08:54,300 --> 00:08:55,950 با عرض پوزش، سوال او بود، اعتصاب در آزمون. 157 00:08:55,950 --> 00:08:59,530 و آن نمی باشد. 158 00:08:59,530 --> 00:09:05,780 بنابراین pset 0، شما بچه ها باید همه چیزی اجرا با استفاده از ابتدا. 159 00:09:05,780 --> 00:09:13,100 و ما برخی از برنامه های اساسی یاد گرفته بلوک های ساختمان با استفاده از ابتدا. 160 00:09:13,100 --> 00:09:15,590 >> بنابراین اجازه دهید نگاهی به برخی از از این بلوک های ساختمانی 161 00:09:15,590 --> 00:09:18,170 که یک برنامه را تشکیل می دهند. 162 00:09:18,170 --> 00:09:20,570 نخست عبارت بولی باشد. 163 00:09:20,570 --> 00:09:24,540 عبارات بولی هستند و 0 یا هر چیزی که 164 00:09:24,540 --> 00:09:25,700 دو مقدار ممکن است. 165 00:09:25,700 --> 00:09:30,320 در این مورد، درست یا غلط، روشن یا خاموش، و آری یا نه. 166 00:09:30,320 --> 00:09:35,390 نمونه ای از یک ساده، بسیار ساده است، برنامه ای است که با استفاده از بولی 167 00:09:35,390 --> 00:09:39,140 بیان اینجا. 168 00:09:39,140 --> 00:09:43,220 >> بنابراین به منظور برای عبارات بولی به مفید باشد، ما باید عملگرهای بولی. 169 00:09:43,220 --> 00:09:48,920 این اپراتور است که می تواند مورد استفاده قرار گیرد مقایسه برخی از ارزش ها. 170 00:09:48,920 --> 00:09:52,820 بنابراین ما باید و یا نه برابر، کمتر از یا مساوی، بزرگتر یا 171 00:09:52,820 --> 00:09:55,130 برابر و کمتر از یا بیشتر از. 172 00:09:55,130 --> 00:09:59,060 اما این اپراتور بسیار مفید نیست مگر ما می توانیم آنها را به ترکیب 173 00:09:59,060 --> 00:10:00,320 شرایط. 174 00:10:00,320 --> 00:10:04,370 >> پس شما بچه ها ممکن است از ابتدا به یاد داشته باشید و از ص خود مجموعه است که ما 175 00:10:04,370 --> 00:10:05,400 شرایط بود. 176 00:10:05,400 --> 00:10:09,710 آنها، در اصل، مانند چنگال در منطق برنامه خود را که 177 00:10:09,710 --> 00:10:12,670 اجرا بسته به اینکه آیا شرط ملاقات است. 178 00:10:12,670 --> 00:10:18,150 پس یکی از شرایط است که ما تا به حال چند بار در این دوره استفاده می شود 179 00:10:18,150 --> 00:10:21,470 اگر، دیگری، اگر، و شرایط دیگر. 180 00:10:21,470 --> 00:10:24,060 >> در اینجا یک مثال از اینکه چگونه است شما ممکن است استفاده از آن. 181 00:10:24,060 --> 00:10:28,430 آیا کسی می داند تفاوت بین فقط با استفاده از دستور if همه 182 00:10:28,430 --> 00:10:32,530 راه را به پایین آیات اگر، دیگری، اگر، و دیگری ترکیب؟ 183 00:10:32,530 --> 00:10:33,013 بله؟ 184 00:10:33,013 --> 00:10:34,263 >> رسید [نامفهوم]. 185 00:10:34,263 --> 00:10:40,741 186 00:10:40,741 --> 00:10:42,160 >> SPEAKER 1: دقیقا. 187 00:10:42,160 --> 00:10:50,210 بنابراین اگر من تا به حال اگر تمام راه را به این راه، حتی اگر این وضعیت را برمی گرداند 188 00:10:50,210 --> 00:10:52,800 درست است، آن را هنوز هم ادامه خواهد داد تست دو بعدی. 189 00:10:52,800 --> 00:11:00,120 در حالی که، با دیگری، اگر، دیگری بیانیه، اگر یک مقدار true برگرداند 190 00:11:00,120 --> 00:11:02,640 برخی دیگر آزمایش نشده است. 191 00:11:02,640 --> 00:11:05,955 هر گونه سؤال در مورد آن؟ 192 00:11:05,955 --> 00:11:06,890 دانلود. 193 00:11:06,890 --> 00:11:12,240 >> بنابراین شما با استفاده از اگر، دیگری از دیگری بیانیه اگر شما می دانید که آن را تنها می تواند 194 00:11:12,240 --> 00:11:14,470 یکی از این موارد. 195 00:11:14,470 --> 00:11:21,550 بنابراین ما می دانیم اگر x کمتر از 0 باشد، آن را قطعا نمی شود 196 00:11:21,550 --> 00:11:22,890 بیشتر از 0. 197 00:11:22,890 --> 00:11:26,940 198 00:11:26,940 --> 00:11:31,480 >> بعد، یکی دیگر از بلوک ساختمان که ما یاد گرفته حلقه می باشد. 199 00:11:31,480 --> 00:11:33,310 ما سه نوع از حلقه. 200 00:11:33,310 --> 00:11:35,830 برای حلقه، در حالی که حلقه ها، و در حالی که حلقه. 201 00:11:35,830 --> 00:11:38,730 و به طور کلی، هنگامی که شما نشستن به چیزی ارسال، شما باید تصمیم بگیرید 202 00:11:38,730 --> 00:11:40,060 که از سه شما می خواهید به استفاده از. 203 00:11:40,060 --> 00:11:41,900 پس چگونه ما که یکی تصمیم می گیرید؟ 204 00:11:41,900 --> 00:11:44,920 205 00:11:44,920 --> 00:11:48,790 >> ما به طور کلی استفاده از یک حلقه for اگر ما می دانیم چند بار ما می خواهیم به تکرار 206 00:11:48,790 --> 00:11:53,650 از چیزی و یا چند بار ما می خواهیم برای انجام یک کار. 207 00:11:53,650 --> 00:11:58,830 ما در حالی که حلقه استفاده کنید اگر ما نیاز به برخی از شرایط درست باشد به نگه داشتن در حال اجرا. 208 00:11:58,830 --> 00:12:03,730 و ما در حالی که استفاده از بسیار شبیه به انجام در حالی که، اما ما می خواهیم کد خود را به اجرا در 209 00:12:03,730 --> 00:12:04,880 حداقل یک بار. 210 00:12:04,880 --> 00:12:09,410 >> در حالی که انجام دهید، این است هر آنچه در انجام خواهد شد همیشه حداقل یک زمان اجرا شود. 211 00:12:09,410 --> 00:12:13,120 در حالی که، با در حالی که، آن ممکن است اجرا شود نه در همه اگر 212 00:12:13,120 --> 00:12:15,490 شرایط راضی نیست. 213 00:12:15,490 --> 00:12:16,740 هر گونه سؤال با که؟ 214 00:12:16,740 --> 00:12:20,480 215 00:12:20,480 --> 00:12:22,860 >> بنابراین ساختار یک حلقه for. 216 00:12:22,860 --> 00:12:23,620 شما بچه ها همه این دیده می شود. 217 00:12:23,620 --> 00:12:25,320 شما آن را مقداردهی اولیه. 218 00:12:25,320 --> 00:12:26,600 شما باید به نوعی از بیماری است. 219 00:12:26,600 --> 00:12:32,340 بنابراین، برای مثال، ما ممکن است مقداردهی اولیه برای من برابر با 0. 220 00:12:32,340 --> 00:12:34,040 من کمتر از 10 است. 221 00:12:34,040 --> 00:12:35,442 و من + +. 222 00:12:35,442 --> 00:12:39,010 بسیار ساده است که ما انجام داده ایم. 223 00:12:39,010 --> 00:12:42,210 >> برای یک حلقه در حالی که، به طور مشابه، شما باید به برخی از نوع اولیه، 224 00:12:42,210 --> 00:12:44,980 نوعی از شرایط، و نوعی از به روز رسانی. 225 00:12:44,980 --> 00:12:51,990 بنابراین ما می توانیم ما برای حلقه اجرا نیز به عنوان یک حلقه در حالی که با استفاده از این. 226 00:12:51,990 --> 00:12:56,000 و به طور مشابه با کارهای در حالی که حلقه، ما ممکن است برخی دهی اولیه داشته باشد، 227 00:12:56,000 --> 00:12:58,640 اجرای چیزی، به روز رسانی آن، و پس از مشورت کنید. 228 00:12:58,640 --> 00:13:03,500 229 00:13:03,500 --> 00:13:05,140 >> بنابراین در حال حاضر توابع. 230 00:13:05,140 --> 00:13:06,460 ما همه چیز را با هم. 231 00:13:06,460 --> 00:13:10,140 ما در صورت تمایل به ارسال برخی از نوع تابع. 232 00:13:10,140 --> 00:13:12,790 عملکرد مشترک است که شما ممکن است را دیده اند، در حال حاضر اصلی است. 233 00:13:12,790 --> 00:13:13,770 بخش اصلی یک تابع است. 234 00:13:13,770 --> 00:13:16,160 این یک نوع بازگشت، اعضای هیات. 235 00:13:16,160 --> 00:13:18,470 از آن است که نام تابع، اصلی. 236 00:13:18,470 --> 00:13:20,810 و آن را تا استدلال، تعداد آنها و argv را. 237 00:13:20,810 --> 00:13:24,040 بنابراین اصلی فقط یک تابع است. 238 00:13:24,040 --> 00:13:27,230 >> سایر توابع شما ممکن است مورد استفاده قرار گیرد، تابع () printf printf-- function-- است 239 00:13:27,230 --> 00:13:29,330 GetInt، toupper. 240 00:13:29,330 --> 00:13:32,010 اما این اتفاق می افتد به شده است برای ما اجرا 241 00:13:32,010 --> 00:13:33,270 نوعی از کتابخانه. 242 00:13:33,270 --> 00:13:37,400 اگر شما بچه ها به یاد داشته باشید از جمله این کتابخانه CS50.h یا 243 00:13:37,400 --> 00:13:38,510 I استاندارد / کتابخانه O. 244 00:13:38,510 --> 00:13:39,200 بله، سوال؟ 245 00:13:39,200 --> 00:13:41,610 >> رسید اصلی آیا فقط ذاتی در ج؟ 246 00:13:41,610 --> 00:13:44,740 آیا آن را فقط به نوع [نامفهوم]؟ 247 00:13:44,740 --> 00:13:47,370 >> SPEAKER 1: سوال این است که اگر اصلی ذاتی در ج است. 248 00:13:47,370 --> 00:13:51,460 و بله، همه توابع یک تابع اصلی. 249 00:13:51,460 --> 00:13:55,290 این نوع از لازم برای کامپیوتر می دانم که در آن برای شروع 250 00:13:55,290 --> 00:13:55,993 در حال اجرا کد. 251 00:13:55,993 --> 00:13:58,108 >> رسید بنابراین شما نمی خواهد [نامفهوم]؟ 252 00:13:58,108 --> 00:13:59,480 >> SPEAKER 1: شماره 253 00:13:59,480 --> 00:14:00,760 هر گونه سؤال دیگر؟ 254 00:14:00,760 --> 00:14:03,430 255 00:14:03,430 --> 00:14:04,770 دانلود. 256 00:14:04,770 --> 00:14:08,050 بنابراین درست مانند شما می توانید یک تابع استفاده کنید که برای شما نوشته شده است، شما همچنین می توانید 257 00:14:08,050 --> 00:14:10,380 نوشتن تابع خود را. 258 00:14:10,380 --> 00:14:17,050 این یک تابع است که کسی ممکن است نوشته اند برای محاسبه حجم 259 00:14:17,050 --> 00:14:18,395 یک پرسش، به عنوان مثال. 260 00:14:18,395 --> 00:14:21,300 261 00:14:21,300 --> 00:14:29,500 یک نوع بازگشت وجود دارد، در این مورد اعضای هیات، ما نام تابع q و ما 262 00:14:29,500 --> 00:14:31,360 لیستی از پارامترها. 263 00:14:31,360 --> 00:14:34,550 >> و توجه داشته باشید که شما را به ارسال داده ها نوع پارامتر می خواهید به 264 00:14:34,550 --> 00:14:38,660 استفاده و یا دیگری تابع نیست می دانید چه نوع 265 00:14:38,660 --> 00:14:41,650 پارامتر باید پذیرش شود. 266 00:14:41,650 --> 00:14:48,110 بنابراین، در این مورد، ما می خواهیم یک عدد صحیح به عنوان ورودی است. 267 00:14:48,110 --> 00:14:50,390 پس چرا ممکن است ما می خواهیم به استفاده از توابع؟ 268 00:14:50,390 --> 00:14:52,800 >> اول از همه، بزرگ برای سازمان است. 269 00:14:52,800 --> 00:14:56,350 آنها کمک به شکستن کد خود را به تر تکه های سازمان یافته و 270 00:14:56,350 --> 00:14:57,960 آن را آسان تر به عنوان خوانده شده. 271 00:14:57,960 --> 00:14:59,760 ساده سازی. 272 00:14:59,760 --> 00:15:01,740 این خوب است برای طراحی است. 273 00:15:01,740 --> 00:15:04,570 هنگامی که شما در حال خواندن یک قطعه از کد و تابع اصلی است که واقعا، 274 00:15:04,570 --> 00:15:07,750 واقعا طولانی، ممکن است آن را سخت تر به دلیل در مورد آنچه اتفاق افتاده است. 275 00:15:07,750 --> 00:15:11,710 بنابراین اگر شما شکستن آن را به توابع، ممکن است آن را آسان تر به عنوان خوانده شده. 276 00:15:11,710 --> 00:15:12,750 و استفاده مجدد از توانایی. 277 00:15:12,750 --> 00:15:16,940 اگر شما یک تکه از کد که بودن نام و یا اجرای چند بار، 278 00:15:16,940 --> 00:15:20,690 به جای بازنویسی که کد 10 بار در تابع اصلی خود را، شما ممکن است 279 00:15:20,690 --> 00:15:21,440 می خواهید آن را استفاده مجدد. 280 00:15:21,440 --> 00:15:25,740 و پس از آن هر زمانی که شما نیاز به استفاده از آن قطعه ای از کد، فراخوانی تابع. 281 00:15:25,740 --> 00:15:30,550 282 00:15:30,550 --> 00:15:35,380 >> بنابراین در حال حاضر اگر ما به یاد داشته باشید به خراش، ما همچنین در مورد چند مفهوم صحبت کردیم، 283 00:15:35,380 --> 00:15:37,680 که یکی از آنها نخ است. 284 00:15:37,680 --> 00:15:41,120 موضوع مفهوم چند است توالی کد 285 00:15:41,120 --> 00:15:43,040 اجرای در همان زمان. 286 00:15:43,040 --> 00:15:47,490 بنابراین فکر می کنم پشت به روز که در آن دیوید به حال شما بچه ها را از تعداد دفعات مشاهده شده 287 00:15:47,490 --> 00:15:48,440 مردم در اتاق. 288 00:15:48,440 --> 00:15:50,550 >> اساسا، آنچه که قرار بود در است همه شما بچه ها بود 289 00:15:50,550 --> 00:15:52,370 در حال اجرا موضوعات جداگانه. 290 00:15:52,370 --> 00:15:55,540 و این موضوعات با هم آمدند برای به دست آوردن نوعی از پاسخ. 291 00:15:55,540 --> 00:15:58,890 به طور مشابه، در ابتدا، هنگامی که شما به جن های متعدد، شما ممکن است 292 00:15:58,890 --> 00:16:01,070 یک گربه و یک سگ. 293 00:16:01,070 --> 00:16:08,770 و آنها به طور همزمان خواهد بود در حال اجرا اسکریپت خود را دارند. 294 00:16:08,770 --> 00:16:10,020 این یک نمونه از نخ است. 295 00:16:10,020 --> 00:16:12,860 296 00:16:12,860 --> 00:16:18,000 >> و مفهوم دیگری که بود معرفی شده در ابتدا حوادث بود. 297 00:16:18,000 --> 00:16:22,550 و وقایع قطعات زمانی مختلف از کد خود را در ارتباط با یکدیگر. 298 00:16:22,550 --> 00:16:26,840 در ابتدا، این بود که شما با استفاده از کنترل پخش و وقتی که من 299 00:16:26,840 --> 00:16:29,500 دریافت بلوک. 300 00:16:29,500 --> 00:16:35,170 >> و همچنین، در مجموعه مسائل 4، ما شاهد کمی از وقایع را به عنوان به خوبی. 301 00:16:35,170 --> 00:16:38,250 شما بچه ها ممکن است مورد استفاده قرار گیرد کتابخانه Gevent. 302 00:16:38,250 --> 00:16:42,450 و یک تابع وجود دارد waitForClick که در آن شما در انتظار بودند 303 00:16:42,450 --> 00:16:44,300 برای کاربر به را کلیک کنید. 304 00:16:44,300 --> 00:16:47,870 و کلیک خود را، در این مورد، خواهد بود این رویداد و منتظر کلیک شما می باشد 305 00:16:47,870 --> 00:16:49,120 کنترل رویدادها. 306 00:16:49,120 --> 00:16:53,690 307 00:16:53,690 --> 00:16:58,630 >> و همچنین، در طول در حال اجرا psets شما و کار بر روی psets خود را، شما 308 00:16:58,630 --> 00:17:01,920 ممکن است در تماس با آمده برخی از این دستورات. 309 00:17:01,920 --> 00:17:05,579 این چیزی است که شما را به تایپ خود را پنجره ترمینال یا هر پنجره 310 00:17:05,579 --> 00:17:12,119 که نشان می دهد تا در گرم ویرایش خود را به، اساسا، حرکت به کامپیوتر شما. 311 00:17:12,119 --> 00:17:19,440 >> بنابراین برای مثال، LS لیست محتویات یک دایرکتوری. 312 00:17:19,440 --> 00:17:22,510 ساخت فهرست یک پوشه جدید ایجاد می کند. 313 00:17:22,510 --> 00:17:24,819 CD، دایرکتوری تغییر دهید. 314 00:17:24,819 --> 00:17:28,400 RM، حذف، حذف یک فایل و یا برخی از دایرکتوری. 315 00:17:28,400 --> 00:17:31,050 و سپس حذف دایرکتوری حذف یک دایرکتوری. 316 00:17:31,050 --> 00:17:32,300 >> رسید [نامفهوم]؟ 317 00:17:32,300 --> 00:17:36,978 318 00:17:36,978 --> 00:17:38,370 >> SPEAKER 1: آره، مطمئن شوید. 319 00:17:38,370 --> 00:17:42,530 320 00:17:42,530 --> 00:17:46,040 با عرض پوزش، این سوال بود اگر شما را نشان می دهد با قرار دادن این 321 00:17:46,040 --> 00:17:48,840 در بازی ورق. 322 00:17:48,840 --> 00:17:49,440 این می تواند کمک کند. 323 00:17:49,440 --> 00:17:51,490 اگر شما اتاق، شما می توانید آن را در قرار داده است. 324 00:17:51,490 --> 00:17:56,170 این هم فقط به طور کلی به اندازه کافی خوب به خاطر داشته باشید، چرا که وقتی از آن استفاده کنید 325 00:17:56,170 --> 00:17:59,060 در صورت تمایل به تنها آن را حفظ. 326 00:17:59,060 --> 00:18:02,750 که زندگی شما را بسیار ساده تر می کند. 327 00:18:02,750 --> 00:18:04,000 آیا من به سوال شما پاسخ خواهد داد؟ 328 00:18:04,000 --> 00:18:10,528 329 00:18:10,528 --> 00:18:14,290 >> بنابراین در حال حاضر، ما صحبت کردیم کمی به طور خلاصه در مورد کتابخانه ها. 330 00:18:14,290 --> 00:18:18,570 اما دو اصلی است که ما شده است با استفاده از تا کنون در این دوره می باشد 331 00:18:18,570 --> 00:18:20,860 استاندارد I / O و cs50. 332 00:18:20,860 --> 00:18:25,410 چه نوع چیزهایی را شامل می شوند در I / O کتابخانه استاندارد؟ 333 00:18:25,410 --> 00:18:28,410 >> آره، تا کنون ما تابع () printf استفاده می شود. 334 00:18:28,410 --> 00:18:31,150 در cs50، ما GetInt استفاده می شود و GetString. 335 00:18:31,150 --> 00:18:37,200 و رشته نوع داده نیز اتفاق می افتد در این کتابخانه cs50 اعلام شود. 336 00:18:37,200 --> 00:18:40,250 ما کمی بیشتر در عمق مورد بحث چگونه کتابخانه ها کار می کنند و چگونه آنها 337 00:18:40,250 --> 00:18:41,870 با بقیه کد شما تداخل می کنند. 338 00:18:41,870 --> 00:18:46,220 اما آن دو اصلی هستند که ما در تماس با تا کنون در آمده 339 00:18:46,220 --> 00:18:48,430 البته. 340 00:18:48,430 --> 00:18:50,050 >> انواع. 341 00:18:50,050 --> 00:18:58,120 این خوب است به یاد داشته باشید که چقدر می هر نوع است و یا چگونه نشان داده 342 00:18:58,120 --> 00:19:02,840 بسیاری از بایت هر نوع requires-- 343 00:19:02,840 --> 00:19:04,990 اعضای هیات، 4 بایت. کاراکتر، 1 بایت. 344 00:19:04,990 --> 00:19:06,550 شناور 4 بایت است. 345 00:19:06,550 --> 00:19:07,782 چه دو برابر شده است؟ 346 00:19:07,782 --> 00:19:09,032 >> رسید [نامفهوم]. 347 00:19:09,032 --> 00:19:11,398 348 00:19:11,398 --> 00:19:16,240 >> SPEAKER 1: آره، بنابراین شناور اما دو برابر اندازه. 349 00:19:16,240 --> 00:19:17,150 چه در مورد مدت؟ 350 00:19:17,150 --> 00:19:18,400 >> رسید [نامفهوم]. 351 00:19:18,400 --> 00:19:21,614 352 00:19:21,614 --> 00:19:24,680 >> SPEAKER 1: OK. 353 00:19:24,680 --> 00:19:25,410 چه مدت؟ 354 00:19:25,410 --> 00:19:26,660 >> رسید [نامفهوم]. 355 00:19:26,660 --> 00:19:29,400 356 00:19:29,400 --> 00:19:31,450 >> SPEAKER 1: آره، دو برابر یک int. 357 00:19:31,450 --> 00:19:34,240 358 00:19:34,240 --> 00:19:34,705 بله. 359 00:19:34,705 --> 00:19:36,100 >> رسید [نامفهوم]. 360 00:19:36,100 --> 00:19:38,030 >> SPEAKER 1: بلند [نامفهوم]. 361 00:19:38,030 --> 00:19:41,860 و بعد بلند بلند دو برابر است. 362 00:19:41,860 --> 00:19:42,814 >> رسید نه، نه. 363 00:19:42,814 --> 00:19:47,107 طولانی فقط برای اعضای هیات است. 364 00:19:47,107 --> 00:19:50,910 آن را در معماری بستگی دارد قبل از [نامفهوم] 365 00:19:50,910 --> 00:19:52,922 و اعضای هیات باید به همان اندازه. 366 00:19:52,922 --> 00:19:54,172 [نامفهوم]. 367 00:19:54,172 --> 00:19:58,841 368 00:19:58,841 --> 00:20:00,920 >> SPEAKER 1: پس بلند و اعضای هیات یکسان هستند. 369 00:20:00,920 --> 00:20:02,943 و بعد بلند بلند دو برابر int است. 370 00:20:02,943 --> 00:20:03,910 دانلود. 371 00:20:03,910 --> 00:20:05,550 و پس از آن، آخرین نوع است؟ 372 00:20:05,550 --> 00:20:06,510 >> رسید اشاره گر. 373 00:20:06,510 --> 00:20:10,350 >> SPEAKER 1: آره، بنابراین ما آموخته کمی در مورد اشاره گر. 374 00:20:10,350 --> 00:20:14,015 و صرف نظر از آنچه که یک اشاره گر است اشاره to-- از آن می تواند یک ستاره کاراکتر 375 00:20:14,015 --> 00:20:15,880 یا اعضای هیات star-- 376 00:20:15,880 --> 00:20:20,530 همیشه 4 بایت برای اشاره گر. 377 00:20:20,530 --> 00:20:21,633 سوالات در مورد آن؟ 378 00:20:21,633 --> 00:20:22,116 بله؟ 379 00:20:22,116 --> 00:20:24,531 >> رسید [نامفهوم]؟ 380 00:20:24,531 --> 00:20:29,530 >> SPEAKER 1: پس بلند و یک int است همان در این دستگاه cs50. 381 00:20:29,530 --> 00:20:32,302 >> رسید دستگاه به طور کامل تعویض. 382 00:20:32,302 --> 00:20:33,510 >> SPEAKER 1: آره. 383 00:20:33,510 --> 00:20:36,610 پس بلند بلند دو برابر یک int است. 384 00:20:36,610 --> 00:20:39,250 >> رسید این 32 بیت است؟ 385 00:20:39,250 --> 00:20:40,620 >> SPEAKER 1: 32 بیتی، آره. 386 00:20:40,620 --> 00:20:43,572 >> رسید پس [نامفهوم]؟ 387 00:20:43,572 --> 00:20:46,790 >> SPEAKER 1: بله، اگر آن را نمی کند به صراحت می گویند، شما 388 00:20:46,790 --> 00:20:47,870 باید کمی 32 فرض کنیم. 389 00:20:47,870 --> 00:20:50,040 >> رسید این که چیزی می گویند مانند فرض 390 00:20:50,040 --> 00:20:51,498 معماری مانند لوازم خانگی. 391 00:20:51,498 --> 00:20:58,800 392 00:20:58,800 --> 00:21:01,710 برای 64 بیتی، تنها چیزهایی که تغییر پوزیشن های خرید و اشاره گر می باشد. 393 00:21:01,710 --> 00:21:05,614 آنها هر دو [نامفهوم]. 394 00:21:05,614 --> 00:21:06,590 >> SPEAKER 1: بله؟ 395 00:21:06,590 --> 00:21:07,566 >> رسید سوال. 396 00:21:07,566 --> 00:21:10,982 بنابراین در یکی از آزمونها عمل، آن را در مورد یک int بدون علامت می پرسد. 397 00:21:10,982 --> 00:21:15,374 پس چگونه خواهد بود که تعیین می شود از یک int [نامفهوم]؟ 398 00:21:15,374 --> 00:21:18,140 >> SPEAKER 1: بدون علامت در هم 4 بایت. 399 00:21:18,140 --> 00:21:21,172 اما آنچه در مورد امضا متفاوت است int و یک int بدون علامت؟ 400 00:21:21,172 --> 00:21:22,422 >> رسید [نامفهوم]. 401 00:21:22,422 --> 00:21:24,868 402 00:21:24,868 --> 00:21:25,630 >> SPEAKER 1: راست. 403 00:21:25,630 --> 00:21:27,570 در واقع می توان مقادیر منفی نشان دهند. 404 00:21:27,570 --> 00:21:28,580 اما چگونه این کار را انجام داد؟ 405 00:21:28,580 --> 00:21:30,536 >> رسید [نامفهوم]. 406 00:21:30,536 --> 00:21:36,370 >> SPEAKER 1: آره، آن را موجب صرفه جویی در 1 بیت برای نشان دادن علامت. 407 00:21:36,370 --> 00:21:40,910 408 00:21:40,910 --> 00:21:45,040 امضا یک کمی که نشان دهنده علامت. 409 00:21:45,040 --> 00:21:48,886 و بدون علامت فقط همه مثبت است. 410 00:21:48,886 --> 00:21:50,365 >> رسید OK. 411 00:21:50,365 --> 00:21:54,230 بنابراین شما می گویند که دو برابر شده است دو بار به اندازه یک شناور؟ 412 00:21:54,230 --> 00:21:58,202 >> SPEAKER 1: دو دو برابر به اندازه یک شناور، بله. 413 00:21:58,202 --> 00:22:01,639 >> رسید چگونه یک اشاره گر به بلند بلند [نامفهوم]؟ 414 00:22:01,639 --> 00:22:06,058 415 00:22:06,058 --> 00:22:10,870 >> SPEAKER 1: بنابراین سوال این است که چگونه می کند اشاره گر به یک long-- طولانی 416 00:22:10,870 --> 00:22:13,800 چگونه است که تنها چهار بایت زمانی بلند بلند 8 بایت است. 417 00:22:13,800 --> 00:22:17,310 بنابراین به یاد داشته باشید آنچه که یک اشاره گر است، اساسا، در ارزش بسیار پایه. 418 00:22:17,310 --> 00:22:19,046 >> رسید [نامفهوم]. 419 00:22:19,046 --> 00:22:22,670 >> SPEAKER 1: آره، بنابراین یک اشاره گر فقط یک محل حافظه است. 420 00:22:22,670 --> 00:22:28,040 بنابراین مهم فضای چقدر کنید که اشاره گر با اشاره به. 421 00:22:28,040 --> 00:22:32,060 تنها نیاز 4 بایت برای پیگیری از آن مکان حافظه است. 422 00:22:32,060 --> 00:22:34,760 423 00:22:34,760 --> 00:22:36,010 هر گونه سؤال دیگر؟ 424 00:22:36,010 --> 00:22:39,800 425 00:22:39,800 --> 00:22:41,050 دانلود. 426 00:22:41,050 --> 00:22:42,920 427 00:22:42,920 --> 00:22:47,460 >> بنابراین آخرین چیزی من خروجی استاندارد است. 428 00:22:47,460 --> 00:22:51,020 شما باید آنها را به طور مکرر استفاده به اندازه کافی که شما می توانید به یاد داشته باشید. 429 00:22:51,020 --> 00:22:54,800 اما این زمانی است که استفاده می کنیم تابع () printf، به عنوان مثال. 430 00:22:54,800 --> 00:22:59,260 و ما این متغیرهایی که کدهای فرمت نامیده می شدند. 431 00:22:59,260 --> 00:23:03,910 >> بنابراین درصد ج کاراکتر، درصد من برای هوشمند، و ما نیز می تواند درصد د استفاده کنید. 432 00:23:03,910 --> 00:23:05,130 این همان چیزی است. 433 00:23:05,130 --> 00:23:08,200 اما، به طور کلی، در CS50 ما سعی کنید به استفاده درصد من. 434 00:23:08,200 --> 00:23:09,860 درصد f برای شناور. 435 00:23:09,860 --> 00:23:15,620 LD درصد برای مدت طولانی طولانی و درصد برای رشته است. 436 00:23:15,620 --> 00:23:18,550 >> به طور مشابه، ما شده ایم با استفاده از چند از این توالی های گریز. 437 00:23:18,550 --> 00:23:22,431 به عنوان مثال، بک اسلش نفر برای خط جدید. 438 00:23:22,431 --> 00:23:26,910 این فقط برای زمانی که می خواهید قالب بندی کد خود را برای چاپ ج. 439 00:23:26,910 --> 00:23:27,260 بله؟ 440 00:23:27,260 --> 00:23:28,906 >> رسید درصد د برای چیست؟ 441 00:23:28,906 --> 00:23:31,850 >> SPEAKER 1: بنابراین سوال آن چیزی است که درصد د است؟ 442 00:23:31,850 --> 00:23:33,270 درصد د است برای نوع داده int. 443 00:23:33,270 --> 00:23:37,392 درصد د و درصد من همان است. 444 00:23:37,392 --> 00:23:41,130 >> رسید چه تفاوتی بین است بک اسلش n و بک اسلش تحقیق؟ 445 00:23:41,130 --> 00:23:45,300 >> SPEAKER 1: بنابراین سوال این است که چه چیزی تفاوت بین عکس العمل n و 446 00:23:45,300 --> 00:23:48,615 تحقیق واکنش شدید؟ 447 00:23:48,615 --> 00:23:50,906 من فکر می کنم بک اسلش تحقیق is-- 448 00:23:50,906 --> 00:23:54,340 >> رسید بنابراین بک اسلش تحقیق فقط دلالت دارد بازگشت به ابتدای خط 449 00:23:54,340 --> 00:23:56,670 در واقع بدون به یک خط جدید رفتن. 450 00:23:56,670 --> 00:24:01,000 بنابراین اگر شما یک تحقیق بک اسلش چاپ و شما بازگشت به ابتدای خط 451 00:24:01,000 --> 00:24:04,005 پس از آن شما نسخه قابل چاپ چیزهای بیشتر، شما بازنویسی چیزهایی که در حال حاضر در 452 00:24:04,005 --> 00:24:04,390 [نامفهوم]. 453 00:24:04,390 --> 00:24:06,725 در حالی که، نفر در واقع به یک می رود خط و می رود به [نامفهوم]. 454 00:24:06,725 --> 00:24:10,525 455 00:24:10,525 --> 00:24:13,915 >> SPEAKER 1: خوب، هر گونه سوال دیگر؟ 456 00:24:13,915 --> 00:24:15,430 خوب. 457 00:24:15,430 --> 00:24:18,617 من قصد دارم به آن دست به دن که ادامه خواهد داد. 458 00:24:18,617 --> 00:24:25,078 >> [تشویق حضار] 459 00:24:25,078 --> 00:25:08,814 460 00:25:08,814 --> 00:25:09,720 >> DAN: تمام righty. 461 00:25:09,720 --> 00:25:18,590 بنابراین من در مورد یکی دیگر از گسترده صحبت کردن طیف وسیعی از ایده ها را از کلاس که 462 00:25:18,590 --> 00:25:23,220 تقریبا نماینده هفته دو و آغاز هفته سه شروع کردن 463 00:25:23,220 --> 00:25:28,690 با ریخته گری، است که فقط یک راه درمان یک مقدار از نوع خاصی به عنوان 464 00:25:28,690 --> 00:25:30,830 یک مقدار از نوع مختلف. 465 00:25:30,830 --> 00:25:34,110 بنابراین ما می توانیم این کار را با کاراکتر به انجام نوع داده int، شناور خطوط به نوع داده int، و 466 00:25:34,110 --> 00:25:35,360 پوزیشن های خرید طولانی برای دو برابر شود. 467 00:25:35,360 --> 00:25:38,170 468 00:25:38,170 --> 00:25:44,500 >> همه این موارد می تواند به عنوان روش استفاده می شود درمان برخی از ارزش های عددی 469 00:25:44,500 --> 00:25:48,370 کاراکتر منفی به عنوان برخی دیگر از مقدار عددی. 470 00:25:48,370 --> 00:25:54,480 بنابراین برخی از مسائل با این، وجود دارد البته، که می آید زمانی که شما بازیگران 471 00:25:54,480 --> 00:25:57,860 چیزهایی مانند شناور به نوع داده int. 472 00:25:57,860 --> 00:26:00,500 پس این است که کمی عجیب و غریب. 473 00:26:00,500 --> 00:26:03,170 ما یک شناور است که 1.31. 474 00:26:03,170 --> 00:26:05,220 ما آن را به 10000 افزایش دهند. 475 00:26:05,220 --> 00:26:08,380 و بعد ما آن را به عنوان اعضای هیات چاپ. 476 00:26:08,380 --> 00:26:09,630 چه این خروجی؟ 477 00:26:09,630 --> 00:26:11,600 478 00:26:11,600 --> 00:26:14,020 10،000 بار 1.31. 479 00:26:14,020 --> 00:26:18,761 بنابراین 13،000، این است که حدس می زنم؟ 480 00:26:18,761 --> 00:26:20,685 >> رسید من فکر می کنم 10000. 481 00:26:20,685 --> 00:26:24,234 >> DAN: پس من آن را ضرب در 10000 قبل از من آن را ریخته گری. 482 00:26:24,234 --> 00:26:25,202 >> رسید اوه. 483 00:26:25,202 --> 00:26:27,622 آیا وجود دارد یکی 9 و برخی 0 تعداد؟ 484 00:26:27,622 --> 00:26:29,270 >> DAN: شما ممکن است برخی از ارقام عجیب و غریب داشته باشد. 485 00:26:29,270 --> 00:26:32,410 486 00:26:32,410 --> 00:26:37,670 بنابراین درست است، آن را 1.3 برابر 10000. 487 00:26:37,670 --> 00:26:40,040 به طوری که 13000 است. 488 00:26:40,040 --> 00:26:41,313 و این weird-- اضافی 489 00:26:41,313 --> 00:26:42,160 >> رسید 13،100. 490 00:26:42,160 --> 00:26:42,650 >> DAN: 13100. 491 00:26:42,650 --> 00:26:44,910 با تشکر از شما، راب. 492 00:26:44,910 --> 00:26:46,610 و این weirdness-- اضافی 493 00:26:46,610 --> 00:26:48,060 این 9،9-- 494 00:26:48,060 --> 00:26:53,860 است تنها به دلیل این ریخته گری به پایان رسید تا گرد کردن پایین که در آن 495 00:26:53,860 --> 00:26:55,394 باید آن را ندارد. 496 00:26:55,394 --> 00:26:55,871 آره. 497 00:26:55,871 --> 00:26:58,256 >> رسید ریخته گری اتفاق می افتد بعد از هر چیز دیگری؟ 498 00:26:58,256 --> 00:27:03,865 >> DAN: پس چون من این را در چاپ، آن را به آیا این ضرب قبل از آن 499 00:27:03,865 --> 00:27:05,230 آیا این ریخته گری. 500 00:27:05,230 --> 00:27:06,140 >> رسید [نامفهوم]. 501 00:27:06,140 --> 00:27:11,350 >> DAN: من فکر می کنم اول بازیگران، آره، خواهد بود که 10000. 502 00:27:11,350 --> 00:27:12,610 دیگر چه؟ 503 00:27:12,610 --> 00:27:13,330 دانلود. 504 00:27:13,330 --> 00:27:16,344 پس این 13099 است. 505 00:27:16,344 --> 00:27:17,840 چرا این اتفاق می افتد؟ 506 00:27:17,840 --> 00:27:18,900 عدم دقت. 507 00:27:18,900 --> 00:27:21,020 >> شناور هستند بی نقص نیست. 508 00:27:21,020 --> 00:27:27,550 آنها فقط می توانند اعداد به تعداد معینی از چهره های قابل توجه است. 509 00:27:27,550 --> 00:27:35,120 بنابراین اگر ما از چاپ 8 انجیر زنگ در این شناور، ما یک نوع 510 00:27:35,120 --> 00:27:36,800 زشت تعدادی به دنبال. 511 00:27:36,800 --> 00:27:45,580 و این به دلیل 1.31 نمی تواند با دقت توان با ساده نشان داده شده است 512 00:27:45,580 --> 00:27:49,000 قدرت دو در ماشین است. 513 00:27:49,000 --> 00:27:53,530 پس از آن به پایان می رسد تا با در نظر گرفتن نزدیک حدس می زنم، که به پایان می رسد 514 00:27:53,530 --> 00:27:55,710 که کمی کم. 515 00:27:55,710 --> 00:27:57,730 را حس؟ 516 00:27:57,730 --> 00:27:59,110 OK. 517 00:27:59,110 --> 00:28:05,840 >> در حال حاضر، روشن است راه های مختلف از انجام عبارات شرطی که در آن همه 518 00:28:05,840 --> 00:28:09,900 ما در مورد مراقبت از متغیر است. 519 00:28:09,900 --> 00:28:16,570 بنابراین در این مثال خاص، ما گرفتن یک عدد صحیح از کاربر. 520 00:28:16,570 --> 00:28:21,070 و پس از آن ما به دنبال در آنچه که عدد صحیح است. 521 00:28:21,070 --> 00:28:23,500 احتمالا، آن را به تعداد بین یک تا چهار. 522 00:28:23,500 --> 00:28:24,800 این چیزی است که ما برای پرسیدن. 523 00:28:24,800 --> 00:28:28,450 >> بنابراین شما می توانم در یک سوئیچ نام متغیر. 524 00:28:28,450 --> 00:28:34,290 سپس به شما در تنظیم موارد ممکن ارزش آن می تواند باشد. 525 00:28:34,290 --> 00:28:37,730 بنابراین یک مورد، می گویند آن را کم. 526 00:28:37,730 --> 00:28:41,080 و سپس شما شکستن به خارج وضعیت سوئیچ تا 527 00:28:41,080 --> 00:28:43,270 شما را نگه نمی رفتن. 528 00:28:43,270 --> 00:28:44,830 >> در case-- بعدی 529 00:28:44,830 --> 00:28:46,940 بنابراین مورد دو و مورد three-- 530 00:28:46,940 --> 00:28:51,920 اگر آن را به صورت دو آن را فقط قطره به پایین اولین خط از کد آن را به عنوان با می بیند 531 00:28:51,920 --> 00:28:55,400 حروف سه تا زمانی که می بیند یک استراحت. 532 00:28:55,400 --> 00:29:00,430 بنابراین به این دلیل مورد یکی از شما را به فقط کم چاپ است چون من 533 00:29:00,430 --> 00:29:01,890 این استراحت کنید. 534 00:29:01,890 --> 00:29:05,360 اگر من، می گویند، نادیده گرفته این break-- اگر من این breakaway-- انداخت 535 00:29:05,360 --> 00:29:09,740 آن را چاپ کم، و سپس آن را چاپ میانی، و سپس آن را بشکند. 536 00:29:09,740 --> 00:29:12,200 >> بنابراین استراحت بخش مهمی از تغییر شرایط و 537 00:29:12,200 --> 00:29:14,340 آنها باید وجود داشته باشد. 538 00:29:14,340 --> 00:29:20,070 هر گونه موارد است که به صراحت بیان نشده توسط به طور پیش فرض به کار گرفته می 539 00:29:20,070 --> 00:29:26,645 در مورد سوئیچ و باید بازیگران شود. 540 00:29:26,645 --> 00:29:31,363 >> رسید بنابراین 1، 2، 3، و 4 نفر خواهد بود؟ 541 00:29:31,363 --> 00:29:33,310 >> DAN: ارزش که نفر می تواند باشد. 542 00:29:33,310 --> 00:29:34,654 بله. 543 00:29:34,654 --> 00:29:35,146 آره؟ 544 00:29:35,146 --> 00:29:37,606 >> رسید بنابراین، هنگامی که شما که [نامفهوم]؟ 545 00:29:37,606 --> 00:29:44,002 546 00:29:44,002 --> 00:29:46,830 >> DAN: شما می چاپ کم، و پس از آن آن را وسط، چاپ و 547 00:29:46,830 --> 00:29:47,400 سپس آن را بشکند. 548 00:29:47,400 --> 00:29:50,244 >> رسید چرا آن را چاپ عمق دفاع حریف، اگر [نامفهوم]؟ 549 00:29:50,244 --> 00:29:54,036 550 00:29:54,036 --> 00:30:00,550 >> DAN: بنابراین همه چیز در مورد قبل از یک استراحت می افتد تحت. 551 00:30:00,550 --> 00:30:09,390 بنابراین مورد یک چاپ مورد زیر است به عنوان یکی از این چاپ به شرح زیر است. 552 00:30:09,390 --> 00:30:09,890 آره؟ 553 00:30:09,890 --> 00:30:11,140 >> رسید [نامفهوم]؟ 554 00:30:11,140 --> 00:30:15,890 555 00:30:15,890 --> 00:30:22,170 >> DAN: پس این تعداد فقط یک خاص ارزش است که این متغیر 556 00:30:22,170 --> 00:30:23,420 می توانید، درست است؟ 557 00:30:23,420 --> 00:30:26,740 558 00:30:26,740 --> 00:30:28,490 آیا این را حس؟ 559 00:30:28,490 --> 00:30:28,990 آره. 560 00:30:28,990 --> 00:30:31,490 >> رسید [نامفهوم]؟ 561 00:30:31,490 --> 00:30:34,130 >> DAN: بله، دو مورد را چاپ وسط و سپس شکستن. 562 00:30:34,130 --> 00:30:35,380 >> رسید [نامفهوم]؟ 563 00:30:35,380 --> 00:30:37,954 564 00:30:37,954 --> 00:30:40,050 >> DAN: من فکر می کنم هر؟ 565 00:30:40,050 --> 00:30:43,855 چه نوع داده دیگر می تواند شما را تغییر دهید بیش از؟ 566 00:30:43,855 --> 00:30:46,320 >> رسید شما می توانید تغییر دهید بیش از هر نوع داده. 567 00:30:46,320 --> 00:30:50,905 اما این فقط به معنی هر چیزی بیش از کاراکتر و نوع داده int و چیزهای مانند آن، به دلیل 568 00:30:50,905 --> 00:30:55,600 اگر شما در حال تغییر بیش از یک اشاره گر که واقعا حس نمی کند، 569 00:30:55,600 --> 00:30:59,555 تعویض بیش از بارهای، اگر آن را حتی اجازه دهید شما این کار را، به دلیل ممیز شناور 570 00:30:59,555 --> 00:31:02,840 در دقت، شما را واقعا نمی می خواهید برای انجام این کار به هر حال. 571 00:31:02,840 --> 00:31:07,320 بنابراین بسیار زیاد است، فقط نوع داده int و کاراکتر و چیزهای که. 572 00:31:07,320 --> 00:31:12,360 >> DAN: آره، آن را هنگامی که شما صریح و روشن ارزش هایی که شما می دانید، من فکر می کنم، می تواند 573 00:31:12,360 --> 00:31:14,250 که یک سوئیچ در واقع مفید است. 574 00:31:14,250 --> 00:31:17,094 575 00:31:17,094 --> 00:31:18,990 خوب؟ 576 00:31:18,990 --> 00:31:21,370 OK. 577 00:31:21,370 --> 00:31:26,180 >> محدوده محدوده که اعلام شده است متغیر گسترش یافته است. 578 00:31:26,180 --> 00:31:32,190 بنابراین در این بخش کمی از کد من، این امر می تواند پر از اشتباهات. 579 00:31:32,190 --> 00:31:41,450 و دلیل آن این است که من این نوع int اعلام کرد من در محدوده این حلقه. 580 00:31:41,450 --> 00:31:46,390 و بعد من در تلاش برای مرجع است که من خارج از آن برای دامنه حلقه. 581 00:31:46,390 --> 00:31:50,330 >> بنابراین اساسا، شما می توانید در مورد دامنه فکر می کنم به عنوان هر چیزی که شما اعلام 582 00:31:50,330 --> 00:31:59,750 با در داخل مجموعه ای از آکولاد تنها در آن آکولاد وجود دارد. 583 00:31:59,750 --> 00:32:04,990 و اگر شما سعی می کنید و استفاده کنید که متغیر خارج از این آکولاد، شما 584 00:32:04,990 --> 00:32:08,356 دریافت خطا از کامپایلر. 585 00:32:08,356 --> 00:32:08,812 آره؟ 586 00:32:08,812 --> 00:32:09,724 >> رسید پس این یکی کار نمی کند؟ 587 00:32:09,724 --> 00:32:11,790 >> DAN: این کار نمی کند، بله. 588 00:32:11,790 --> 00:32:17,190 589 00:32:17,190 --> 00:32:18,660 رشته. 590 00:32:18,660 --> 00:32:19,780 رشته کاراکتر *. 591 00:32:19,780 --> 00:32:22,250 آنها دقیقا همان است. 592 00:32:22,250 --> 00:32:25,540 آنها فقط به حرف اشاره گرها. 593 00:32:25,540 --> 00:32:33,000 و هر رشته که شما باید خاتمه با بک اسلش صفر است که فقط 594 00:32:33,000 --> 00:32:34,410 کنوانسیون ج. 595 00:32:34,410 --> 00:32:36,680 >> این است که به نابودگر NULL نامیده می شود. 596 00:32:36,680 --> 00:32:39,050 و NULL-- 597 00:32:39,050 --> 00:32:41,670 سرمایه N، سرمایه U، سرمایه L، سرمایه L-- 598 00:32:41,670 --> 00:32:44,290 است همان نیست نابودگر NULL. 599 00:32:44,290 --> 00:32:46,640 این یک اشاره گر است. 600 00:32:46,640 --> 00:32:48,280 این شخصیت است. 601 00:32:48,280 --> 00:32:49,530 آنها بسیار متفاوت می باشد. 602 00:32:49,530 --> 00:32:50,200 به یاد داشته باشید آن است. 603 00:32:50,200 --> 00:32:52,320 آن را در مسابقه باشد، احتمالا. 604 00:32:52,320 --> 00:32:54,040 من مسابقه را دیده اند، نیست. 605 00:32:54,040 --> 00:32:57,880 606 00:32:57,880 --> 00:32:58,840 آره؟ 607 00:32:58,840 --> 00:33:01,232 >> رسید بنابراین NULL است، می گویند، اشاره گر؟ 608 00:33:01,232 --> 00:33:01,995 >> DAN: بله. 609 00:33:01,995 --> 00:33:05,170 >> رسید چه [نامفهوم]؟ 610 00:33:05,170 --> 00:33:10,050 >> DAN: اگر، می گویند، malloc نامیده می شود که شما آیا حافظه به اندازه کافی برای به دست آوردن ندارد 611 00:33:10,050 --> 00:33:14,400 هر اندازه که شما برای درخواست، malloc خواهد NULL بازگشت. 612 00:33:14,400 --> 00:33:19,550 این، در واقع، هر زمان که یک تابع است قرار برای بازگشت به اشاره گر، شما 613 00:33:19,550 --> 00:33:22,600 نیاز به در برابر NULL به دلیل بررسی NULL good-- بسیار است 614 00:33:22,600 --> 00:33:25,260 آن، نوع، ارزش زباله. 615 00:33:25,260 --> 00:33:27,050 این یک صفر تا آنجا که اشاره گرها به است. 616 00:33:27,050 --> 00:33:29,630 617 00:33:29,630 --> 00:33:32,250 >> هر زمان که شما یک تابع فراخوانی، که یک اشاره گر را بر می گرداند. 618 00:33:32,250 --> 00:33:35,960 شما در حال رفتن به می خواهم برای بررسی به شوید که که اشاره گر NULL است نه 619 00:33:35,960 --> 00:33:37,760 به دلیل NULL بسیار معمول است. 620 00:33:37,760 --> 00:33:40,160 این نوع بازگشت زباله است. 621 00:33:40,160 --> 00:33:44,902 بنابراین اگر چیزی نمی راست، فقط به جای NULL بازگشت. 622 00:33:44,902 --> 00:33:45,898 >> رسید [نامفهوم]؟ 623 00:33:45,898 --> 00:33:48,922 >> DAN: بله، و این که این. 624 00:33:48,922 --> 00:33:51,750 >> رسید [نامفهوم]؟ 625 00:33:51,750 --> 00:33:52,800 >> DAN: املا آن را به عنوان این. 626 00:33:52,800 --> 00:33:54,150 این نابودگر NULL است. 627 00:33:54,150 --> 00:33:56,560 این کوچک N-U-L-L اگر شما آن را شرح. 628 00:33:56,560 --> 00:33:59,860 >> رسید و من فقط رفت پشت و تست شده است. 629 00:33:59,860 --> 00:34:03,010 و اگر شما سعی می کنید برای قرار دادن یک ممیز شناور ارزش را به یک سوئیچ، آن را به شما داد 630 00:34:03,010 --> 00:34:05,916 گفت: بیانیه ای نیاز به بیان از نوع عدد صحیح است. 631 00:34:05,916 --> 00:34:07,166 >> DAN: شما بروید وجود دارد. 632 00:34:07,166 --> 00:34:09,639 633 00:34:09,639 --> 00:34:12,246 اما آره، چه سوال باز؟ 634 00:34:12,246 --> 00:34:13,496 >> رسید [نامفهوم]؟ 635 00:34:13,496 --> 00:34:16,150 636 00:34:16,150 --> 00:34:23,679 >> DAN: بنابراین سرمایه N، سرمایه U، سرمایه L، L سرمایه چیزی ج واقعی است. 637 00:34:23,679 --> 00:34:29,719 این اشاره گر NULL است و خواهد شد تنها به عنوان درمان می شود. 638 00:34:29,719 --> 00:34:33,530 شما هرگز نمی خواهد امتحان کنید و طلسم شخصیت NULL و دیدن هر 639 00:34:33,530 --> 00:34:35,630 از روشی غیر از این. 640 00:34:35,630 --> 00:34:36,610 آره؟ 641 00:34:36,610 --> 00:34:42,490 >> رسید پس از بازگشت به char یا حداکثر چیزی در یادداشت ها، آن 642 00:34:42,490 --> 00:34:43,960 تجسم همان تابع به عنوان [نامفهوم]؟ 643 00:34:43,960 --> 00:34:50,655 644 00:34:50,655 --> 00:34:54,949 >> رسید بنابراین شما به اشاره بازگشت حداکثر کاراکتر از getchar، و یا 645 00:34:54,949 --> 00:34:55,444 هر چه در آن است؟ 646 00:34:55,444 --> 00:34:55,940 >> رسید آره. 647 00:34:55,940 --> 00:34:58,620 >> رسید آره، بنابراین به طور کلی مدت برای همه کسانی که همه چیز 648 00:34:58,620 --> 00:34:59,920 ارزش نگهبان. 649 00:34:59,920 --> 00:35:03,640 پس چون از بازگشت اعضای هیات حداکثر از GetInt و کاراکتر حداکثر از getchar، آن را 650 00:35:03,640 --> 00:35:06,010 قرار است به مانند، همه حق است، اگر این چیزها در حال بازگشت به ما، 651 00:35:06,010 --> 00:35:07,210 چیزی را اشتباه رفت. 652 00:35:07,210 --> 00:35:09,950 >> برای اشاره گر، ما فقط اتفاق می افتد به این مقدار نگهبان که هر کس 653 00:35:09,950 --> 00:35:10,750 موافق به. 654 00:35:10,750 --> 00:35:13,210 و این چیزی که شما بازگشت است زمانی که همه چیز به اشتباه است. 655 00:35:13,210 --> 00:35:15,910 بنابراین حداکثر کاراکتر چیزی است که ما با استفاده از برای نشان دادن چیزی 656 00:35:15,910 --> 00:35:18,100 مانند NULL یا getchar. 657 00:35:18,100 --> 00:35:23,420 >> رسید بنابراین اگر شما در حال آزمایش getchar، می تواند شما را فقط با قرار دادن NULL؟ 658 00:35:23,420 --> 00:35:23,910 آیا برای ایجاد تغییر؟ 659 00:35:23,910 --> 00:35:25,400 >> DAN: شما نه تنها می تواند بررسی NULL. 660 00:35:25,400 --> 00:35:30,130 شما می خواهم که به بررسی کاراکتر حداکثر به این دلیل که مقدار بازگشتی از تابع است 661 00:35:30,130 --> 00:35:35,416 شخصیت یک اشاره گر نیست. 662 00:35:35,416 --> 00:35:35,888 آره؟ 663 00:35:35,888 --> 00:35:38,248 >> رسید این سوال می پرسد برای طول رشته. 664 00:35:38,248 --> 00:35:40,136 آیا که شامل شخصیت NULL؟ 665 00:35:40,136 --> 00:35:41,000 >> DAN: شماره 666 00:35:41,000 --> 00:35:45,930 و این در واقع چگونه طول رشته می داند برای جلوگیری از به خاطر آن می رود از طریق 667 00:35:45,930 --> 00:35:49,070 آرایه خود را از شخصیت های تا آن یک شخصیت NULL را می بیند. 668 00:35:49,070 --> 00:35:51,030 و بعد آن را مانند، تمام درست است، من انجام داده ام. 669 00:35:51,030 --> 00:35:52,130 >> رسید [نامفهوم] پنج؟ 670 00:35:52,130 --> 00:35:53,990 >> DAN: خوش خواهد بود پنج. 671 00:35:53,990 --> 00:35:55,240 بله. 672 00:35:55,240 --> 00:35:59,580 673 00:35:59,580 --> 00:36:02,880 بنابراین آرایه های پیوسته بلوک از حافظه است. 674 00:36:02,880 --> 00:36:08,480 آنها دسترسی سریع با گفتن دارند نام آرایه و پس از آن، در مجعد 675 00:36:08,480 --> 00:36:16,720 پرانتز، هر صفحه که می خواهید بروید به، آنها را از صفر از طریق نمایه 676 00:36:16,720 --> 00:36:20,100 طول آرایه منهای 1. 677 00:36:20,100 --> 00:36:23,070 >> و آنها با توجه به نوع اعلام کرد چیزی که شما در حال ذخیره سازی در 678 00:36:23,070 --> 00:36:29,750 آرایه، نام آرایه، و پس از آن هر چه اندازه است که آرایه. 679 00:36:29,750 --> 00:36:36,660 بنابراین این یک آرایه کاراکتر طول است شش است که این ارزش ها. 680 00:36:36,660 --> 00:36:42,050 681 00:36:42,050 --> 00:36:42,700 آره؟ 682 00:36:42,700 --> 00:36:43,950 >> رسید [نامفهوم]؟ 683 00:36:43,950 --> 00:36:47,980 684 00:36:47,980 --> 00:36:48,460 >> DAN: آره. 685 00:36:48,460 --> 00:36:51,340 >> رسید [نامفهوم]؟ 686 00:36:51,340 --> 00:36:56,700 >> DAN: اگر شما از آنچه در جریان است در آرایه در حال حاضر ساخته شده است. 687 00:36:56,700 --> 00:37:02,260 بنابراین شما می توانید از این به جای مشخص به عنوان، مثلا، کاراکتر، هر آنچه که به نام شما 688 00:37:02,260 --> 00:37:12,200 آرایه است، براکت خالی برابر مجعد تجدید و احیای روحیه H کاما E کاما L L کاما از هم با کاما 689 00:37:12,200 --> 00:37:16,290 O کاما شخصیت NULL و آکولاد. 690 00:37:16,290 --> 00:37:18,180 که همچنین به عنوان یک بیانیه کار می کنند. 691 00:37:18,180 --> 00:37:20,886 >> رسید [نامفهوم]؟ 692 00:37:20,886 --> 00:37:23,110 >> DAN: سپس شما نیاز به اندازه در حال حاضر ساخته شده است. 693 00:37:23,110 --> 00:37:23,896 >> رسید [نامفهوم]؟ 694 00:37:23,896 --> 00:37:25,146 >> DAN: بله. 695 00:37:25,146 --> 00:37:30,114 696 00:37:30,114 --> 00:37:32,420 تمام righty. 697 00:37:32,420 --> 00:37:36,430 استدلال خط فرمان یک راه گرفتن ورودی از کاربر به عنوان 698 00:37:36,430 --> 00:37:39,380 استدلال اصلی. 699 00:37:39,380 --> 00:37:40,600 بخش اصلی دو آرگومان می گیرد. 700 00:37:40,600 --> 00:37:47,680 تعداد استدلال است که در حال گذشت در امتداد خط فرمان و 701 00:37:47,680 --> 00:37:55,340 بردار رشته یا یک آرایه رشته ای از همه از استدلال. 702 00:37:55,340 --> 00:38:07,840 >> بنابراین اگر من، می گویند، یک تابع به نام مثل یک نقطه از فضای 1، 2 فضا، سه، 703 00:38:07,840 --> 00:38:10,110 تعداد آنها خواهد بود 4. 704 00:38:10,110 --> 00:38:17,370 و argv را 0 می تواند یک نقطه است. 705 00:38:17,370 --> 00:38:19,130 Argv1 خواهد بود 1. 706 00:38:19,130 --> 00:38:23,030 argv2 خواهد بود 2. argv3 خواهد بود 3، در آن مورد خاص. 707 00:38:23,030 --> 00:38:23,310 آره؟ 708 00:38:23,310 --> 00:38:25,400 >> رسید [نامفهوم]؟ 709 00:38:25,400 --> 00:38:34,010 >> DAN: آخرین عنصر در آرایه به این دلیل که تعداد آنها آرایه طول است به علاوه 710 00:38:34,010 --> 00:38:41,050 یکی از argb، آخرین عنصر اشاره گر NULL است. 711 00:38:41,050 --> 00:38:42,580 این تعداد آنها به علاوه 1 می باشد. 712 00:38:42,580 --> 00:38:46,210 713 00:38:46,210 --> 00:38:52,150 بنابراین در صورتی که من فقط گفت، آن خواهد بود argv را 0 یک نقطه است. 714 00:38:52,150 --> 00:38:56,330 ی argv 1 است 1. argv2 2. ی argv 3 3 است. 715 00:38:56,330 --> 00:39:03,490 ی argv 4، که یکی بزرگتر از تعداد آنها می تواند NULL. 716 00:39:03,490 --> 00:39:04,870 >> و این اشاره گر NULL است. 717 00:39:04,870 --> 00:39:06,590 بله. 718 00:39:06,590 --> 00:39:11,250 و این به دلیل رشته است یک ستاره کاراکتر یک اشاره گر است. 719 00:39:11,250 --> 00:39:14,102 بنابراین آن را به همان نوع. 720 00:39:14,102 --> 00:39:14,595 آره؟ 721 00:39:14,595 --> 00:39:16,074 >> رسید دو پرسش. 722 00:39:16,074 --> 00:39:21,004 بنابراین یکی، چه تفاوت بین است این و GetString دیگر از یک نوع 723 00:39:21,004 --> 00:39:22,483 در موتور کاربر؟ 724 00:39:22,483 --> 00:39:25,934 و دو است، آن را ذخیره شده در درون حافظه خود را؟ 725 00:39:25,934 --> 00:39:28,399 بنابراین مانند، GetString را است [نامفهوم]؟ 726 00:39:28,399 --> 00:39:31,357 727 00:39:31,357 --> 00:39:33,650 >> DAN: کجاست آن ذخیره می شود؟ 728 00:39:33,650 --> 00:39:34,905 من نمی دانم که در آن ذخیره می شود. 729 00:39:34,905 --> 00:39:40,000 >> رسید بنابراین، در واقع، شما می دانید که چگونه هر عمل با شما تماس آن استدلال 730 00:39:40,000 --> 00:39:42,170 در پشته ذخیره می شود؟ 731 00:39:42,170 --> 00:39:46,610 بنابراین تعداد آنها و argv را استدلال به اصلی و آنها را در پشته واقعا، یا 732 00:39:46,610 --> 00:39:49,131 فقط از آنچه شما به عنوان فکر می کنم آغاز پشته. 733 00:39:49,131 --> 00:39:53,490 چه بخشی دیگر بود از سوال؟ 734 00:39:53,490 --> 00:39:56,821 >> رسید پس چه [نامفهوم]؟ 735 00:39:56,821 --> 00:40:00,990 >> DAN: آره، آن را فقط یک راه متفاوت است گرفتن ورودی از کاربر. 736 00:40:00,990 --> 00:40:06,030 کمی بیشتر کارآمد و این یکی را آن را برای اسکریپت handier دلیل این که شما 737 00:40:06,030 --> 00:40:10,070 می تواند تنها آرگومان اصلی خود را تابع به جای داشتن صبر کنید 738 00:40:10,070 --> 00:40:13,400 برای کاربران اگر شما هر گونه کاربران ندارد. 739 00:40:13,400 --> 00:40:16,280 >> رسید و آره، دریافت رشته ها خواهد بود [نامفهوم]. 740 00:40:16,280 --> 00:40:17,922 این امر می چیزهای را که نیاز دارید ذخیره کنید. 741 00:40:17,922 --> 00:40:18,834 >> DAN: آره؟ 742 00:40:18,834 --> 00:40:21,114 >> رسید [نامفهوم]؟ 743 00:40:21,114 --> 00:40:27,545 >> DAN: بله، argv را 0 همیشه شامل نقطه از فراخوانی تابع بریده بریده. 744 00:40:27,545 --> 00:40:28,042 آره؟ 745 00:40:28,042 --> 00:40:29,292 >> رسید [نامفهوم]؟ 746 00:40:29,292 --> 00:40:33,509 747 00:40:33,509 --> 00:40:37,310 >> DAN: بله، هر یک از استدلال است به پایان رسید در شخصیت NULL زیرا آنها 748 00:40:37,310 --> 00:40:38,310 رشته ها. 749 00:40:38,310 --> 00:40:40,892 >> رسید [نامفهوم]؟ 750 00:40:40,892 --> 00:40:44,116 >> DAN: بله، تعداد آنها argv را یک اشاره گر NULL است. 751 00:40:44,116 --> 00:40:45,112 >> رسید [نامفهوم]؟ 752 00:40:45,112 --> 00:40:47,104 >> DAN: اوه آره. 753 00:40:47,104 --> 00:40:48,100 آره، ببخشید. 754 00:40:48,100 --> 00:40:49,594 >> رسید پس [نامفهوم]؟ 755 00:40:49,594 --> 00:41:08,518 756 00:41:08,518 --> 00:41:16,340 >> DAN: بنابراین سوال این است که اگر شما تا به حال خط فرمان نقطه بریده بریده یک نقطه از 1، 2، 757 00:41:16,340 --> 00:41:20,410 که تعداد خط فرمان استدلال می شود دو یا می شود آن را سه؟ 758 00:41:20,410 --> 00:41:24,420 759 00:41:24,420 --> 00:41:28,240 >> رسید من فکر می کنم آن را نمی کند واقعا مهم. 760 00:41:28,240 --> 00:41:31,370 من تمایل به می گویند، آه، شما را انجام نمی دهد هر گونه استدلال خط فرمان هنگامی که، 761 00:41:31,370 --> 00:41:32,730 بدیهی است، شما تابع نامیده می شود. 762 00:41:32,730 --> 00:41:37,950 بنابراین من تمایل به vocally حذف تابع را از خط فرمان 763 00:41:37,950 --> 00:41:40,350 استدلال حتی اگر آن را موجود در argv را. 764 00:41:40,350 --> 00:41:42,600 >> DAN: اما اگر آن را در test-- بود 765 00:41:42,600 --> 00:41:46,550 yeah-- و همچنین اگر شما چیزی می گویند مانند تعداد آنها برابر با 3، 766 00:41:46,550 --> 00:41:48,512 شما در جایگاه امن است. 767 00:41:48,512 --> 00:41:49,416 آره؟ 768 00:41:49,416 --> 00:41:50,666 >> رسید [نامفهوم]؟ 769 00:41:50,666 --> 00:42:00,990 770 00:42:00,990 --> 00:42:09,510 >> DAN: من فکر می کنم اگر به جای فراخوانی این در تعداد آنها و رشته براکت ی argv 771 00:42:09,510 --> 00:42:14,350 اما نگه داشته همان نوع و فقط به نام آنها چیزی شبیه به یک مختلف 772 00:42:14,350 --> 00:42:16,640 و ب، آن را هنوز هم کار می کند؟ 773 00:42:16,640 --> 00:42:18,790 و آن را هنوز هم کار می کنند، شما می just-- 774 00:42:18,790 --> 00:42:21,520 به جای استفاده از argc-- شما می خواهم استفاده از a و b. 775 00:42:21,520 --> 00:42:24,436 776 00:42:24,436 --> 00:42:25,408 آره؟ 777 00:42:25,408 --> 00:42:26,658 >> رسید [نامفهوم]؟ 778 00:42:26,658 --> 00:42:34,642 779 00:42:34,642 --> 00:42:38,850 >> DAN: بنابراین سوال این است GetString است رفتن به ذخیره حافظه در پشته 780 00:42:38,850 --> 00:42:42,280 چون GetString کاراکتر است *. 781 00:42:42,280 --> 00:42:47,530 این فروشگاه حافظه در پشته به دلیل آن خواستار اکنون در واقعی malloc 782 00:42:47,530 --> 00:42:49,258 اجرای GetString. 783 00:42:49,258 --> 00:42:53,210 784 00:42:53,210 --> 00:42:55,090 OK، در حال حرکت. 785 00:42:55,090 --> 00:42:55,950 >> امنیت. 786 00:42:55,950 --> 00:43:01,090 بنابراین برای اینکه واقعا امن، شما را در هیچ تکیه یک و شما اجازه می دهد هیچ یک از دسترسی به هر 787 00:43:01,090 --> 00:43:04,540 اطلاعات شما، همین دلیل است که همه ایجاد دستگاه های خود، 788 00:43:04,540 --> 00:43:09,580 سیستم عامل خود را، تمام خود را برنامه، از ابتدا، و بدیهی است که 789 00:43:09,580 --> 00:43:13,410 به هیچ دستگاه های دیگر وصل کنید از طریق اینترنت. 790 00:43:13,410 --> 00:43:17,350 بنابراین کامپیوتر نا امن می باشد. 791 00:43:17,350 --> 00:43:19,200 آنها واقعا هستند. 792 00:43:19,200 --> 00:43:20,940 ما باید به افراد دیگر اعتماد. 793 00:43:20,940 --> 00:43:26,500 >> و این ایده از امنیت این است که شما هستید تلاش برای محدود کردن میزان 794 00:43:26,500 --> 00:43:27,540 اعتماد که شما نیاز دارید. 795 00:43:27,540 --> 00:43:32,080 و یکی از ابزار را انجام می دهید از طریق رمزنگاری. 796 00:43:32,080 --> 00:43:34,950 رمزنگاری است، در اصل، ما باید اسرار است. 797 00:43:34,950 --> 00:43:38,880 >> گاهی اوقات ما باید به تصویب اسرار ما همراه از طریق، مثلا، اینترنت و یا 798 00:43:38,880 --> 00:43:39,980 چیزهای دیگر. 799 00:43:39,980 --> 00:43:43,180 و ما از مردم می خواهم نه برای آگاهی از اسرار است. 800 00:43:43,180 --> 00:43:50,100 بنابراین ما رمز در آوردن اسرار ما را به راه که ما امیدواریم که هیچ کس نمی تواند کشف کردن. 801 00:43:50,100 --> 00:43:51,600 >> بنابراین ما used-- 802 00:43:51,600 --> 00:43:54,340 از طریق این دوره از این class-- 803 00:43:54,340 --> 00:44:00,750 چیزهایی مانند رمزنگاری سزار و [نامفهوم]، که هر دو بسیار بسیار 804 00:44:00,750 --> 00:44:03,200 راه های نا امن از رمز نگاری چیز. 805 00:44:03,200 --> 00:44:07,930 آنها آسان به شکل از آنچه آنها و آنچه اسرار شما هستند. 806 00:44:07,930 --> 00:44:12,130 در دنیای واقعی استفاده می کند خیلی بیشتر طرح های رمزگذاری پیچیده است. 807 00:44:12,130 --> 00:44:13,880 و ما نمی خواهد به دریافت خیلی بیشتر از آن. 808 00:44:13,880 --> 00:44:18,280 809 00:44:18,280 --> 00:44:19,430 >> رفع اشکال. 810 00:44:19,430 --> 00:44:20,785 GDB بهترین است. 811 00:44:20,785 --> 00:44:24,014 812 00:44:24,014 --> 00:44:25,810 من قصد دارم به تاکید دوباره. 813 00:44:25,810 --> 00:44:30,920 استفاده از GDB در همه زمان ها هر زمان مشکل. 814 00:44:30,920 --> 00:44:36,030 دستورات که در GDB مفید هستند شکستن، که به شما منتقل یا خط 815 00:44:36,030 --> 00:44:41,330 تعداد، نام تابع، در اصل که در آن در کد شما می خواهید برای متوقف کردن، 816 00:44:41,330 --> 00:44:45,600 و قادر به کنترل. 817 00:44:45,600 --> 00:44:54,140 >> چاپ طول می کشد یک متغیر و چاپ هر چه که متغیر است که در آن 818 00:44:54,140 --> 00:44:55,990 نقطه در اجرای خود را. 819 00:44:55,990 --> 00:45:00,130 بعدی حرکت می کند اعدام شما در طول یک مرحله. 820 00:45:00,130 --> 00:45:05,050 و گام به گام در داخل یک تابع در اجرای خود را. 821 00:45:05,050 --> 00:45:10,480 >> چیزهای دیگر اجرا می شوند، این است که چگونه شما در واقع کد را اجرا کنید. 822 00:45:10,480 --> 00:45:16,630 ادامه تمام مراحل مورد نیاز طول می کشد برای رسیدن به نقطه سر بعدی. 823 00:45:16,630 --> 00:45:18,300 و بسیاری، بسیاری دیگر وجود دارد. 824 00:45:18,300 --> 00:45:19,040 نگاه آنها را. 825 00:45:19,040 --> 00:45:19,901 آنها بزرگ است. 826 00:45:19,901 --> 00:45:20,863 آره؟ 827 00:45:20,863 --> 00:45:22,113 >> رسید [نامفهوم]؟ 828 00:45:22,113 --> 00:45:26,635 829 00:45:26,635 --> 00:45:28,200 >> DAN: بله، است که یک ابزار اشکالزدایی. 830 00:45:28,200 --> 00:45:34,230 بنابراین یک دیباگر برنامه ای است که شما اجازه می دهد اشکال زدایی برنامه های خود را. 831 00:45:34,230 --> 00:45:39,931 این برنامه ای است که می یابد اشکالات نه شما، هر چند که بزرگ خواهد بود. 832 00:45:39,931 --> 00:45:43,020 833 00:45:43,020 --> 00:45:46,040 >> و برای آخرین بار به من جستجو می باشد. 834 00:45:46,040 --> 00:45:51,470 بنابراین نوع جستجو است که ما صحبت کردیم در مورد در این کلاس می باشد جستجوی خطی، 835 00:45:51,470 --> 00:45:55,960 است که درست است که شما را از طریق هر یک نگاه عنصر از فضای جستجو، یک 836 00:45:55,960 --> 00:46:00,410 عنصر در یک زمان، تا زمانی که شما پیدا کردن آنچه در شما دنبال آن هستید و یا تا زمانی که شما رسیدن به 837 00:46:00,410 --> 00:46:03,350 پایان فضای جستجوی خود را که در آن اشاره به شما می گویند که شما می توانید پیدا کنید 838 00:46:03,350 --> 00:46:06,360 این عنصر است که شما به دنبال. 839 00:46:06,360 --> 00:46:13,450 و این زمان در بهترین حالت ثابت، که 0 نفر از 1 است و در بدترین حالت خطی 840 00:46:13,450 --> 00:46:16,070 زمان، که 0 نفر از. 841 00:46:16,070 --> 00:46:19,250 >> جستجو دودویی، که نیاز به عناصر کثیف. 842 00:46:19,250 --> 00:46:24,230 شما به وسط عناصر خود، ببینید اگر عنصر شما به دنبال 843 00:46:24,230 --> 00:46:30,120 بزرگتر و یا کوچکتر از عنصر است که شما در وسط است. 844 00:46:30,120 --> 00:46:36,510 این آن را بزرگتر، به شما می گویند که پایین از جستجوی خود را فضایی خود را است 845 00:46:36,510 --> 00:46:41,550 مکان فعلی، در عمق و شما روند راه اندازی مجدد. 846 00:46:41,550 --> 00:46:46,150 اگر آن را کوچکتر، به شما نگاه می گویند که the-- آره، چه خبر؟ 847 00:46:46,150 --> 00:46:47,400 >> رسید [نامفهوم]؟ 848 00:46:47,400 --> 00:46:51,000 849 00:46:51,000 --> 00:46:54,260 >> DAN: بله. 850 00:46:54,260 --> 00:46:58,360 هر نوع از نوع است که در تدریس کلاس بازی منصفانه برای تست است. 851 00:46:58,360 --> 00:47:01,504 852 00:47:01,504 --> 00:47:04,920 >> [خنده] 853 00:47:04,920 --> 00:47:10,260 >> DAN: و این واقعیت است که شما را به حال نه آن را برای مجموعه ای مشکل، آن را عادلانه 854 00:47:10,260 --> 00:47:12,420 بازی برای تست است. 855 00:47:12,420 --> 00:47:15,186 >> رسید آیا ما می توانیم بیش از آن چگونه to-- 856 00:47:15,186 --> 00:47:17,052 >> DAN: این خواهد شد بیش از رفته است. 857 00:47:17,052 --> 00:47:20,496 >> SPEAKER 2: کد واقعی برای [نامفهوم] در study.cs50.net است. 858 00:47:20,496 --> 00:47:25,910 859 00:47:25,910 --> 00:47:32,680 بنابراین اگر شما در مشکل عمل نگاه در صفحه مرتب کردن بر اساس ادغام از 860 00:47:32,680 --> 00:47:35,880 study.cs50.net، کد وجود دارد برای پیاده سازی ادغام مرتب کردن بر اساس. 861 00:47:35,880 --> 00:47:38,550 بنابراین شما لازم نیست برای پیاده سازی خودتان آن را امشب. 862 00:47:38,550 --> 00:47:42,090 اما مطمئن شوید که شما آن را درک و نه از آن به خاطر سپردن. 863 00:47:42,090 --> 00:47:45,035 >> رسید [نامفهوم]؟ 864 00:47:45,035 --> 00:47:49,720 >> SPEAKER 2: در این صفحه نوع ادغام در study.cs50.net، یک عمل وجود دارد 865 00:47:49,720 --> 00:47:53,570 مشکل این است که، اگر شما از طریق کلیک کنید مشکل، در پایان وجود دارد 866 00:47:53,570 --> 00:47:56,280 راه حل، که ادغام اجرای مرتب کردن بر اساس. 867 00:47:56,280 --> 00:47:58,510 اما مطمئن شوید که شما آن را درک و نه تنها آن را حفظ 868 00:47:58,510 --> 00:47:59,760 و یا کپی کردن آن را. 869 00:47:59,760 --> 00:48:02,870 870 00:48:02,870 --> 00:48:06,340 >> رسید و کاملا معتبر مشکل برای امتحان خواهد بود 871 00:48:06,340 --> 00:48:07,990 چیزی شبیه در اینجا یک لیست است. 872 00:48:07,990 --> 00:48:12,100 این لیست چگونه بنظر میرسد بعد از یک قدم از انتخاب نوع و یا 873 00:48:12,100 --> 00:48:13,330 مرتب کردن بر اساس اتصال و یا هر چیز دیگری. 874 00:48:13,330 --> 00:48:14,940 یک تکرار کامل از لیست. 875 00:48:14,940 --> 00:48:18,530 بنابراین حتی اگر شما پایان ندارد تا نیاز به کد برای آن، شما نیاز به آن را درک 876 00:48:18,530 --> 00:48:20,440 به اندازه کافی است که بدانیم چگونه آن را به اصلاح این آرایه. 877 00:48:20,440 --> 00:48:24,144 878 00:48:24,144 --> 00:48:25,394 >> DAN: که در آن است برای من. 879 00:48:25,394 --> 00:48:30,604 880 00:48:30,604 --> 00:48:32,588 >> [تشویق حضار] 881 00:48:32,588 --> 00:49:06,316 882 00:49:06,316 --> 00:49:07,410 >> LUCAS: سلام به همه. 883 00:49:07,410 --> 00:49:08,390 نام من لوکاس است. 884 00:49:08,390 --> 00:49:16,840 من قصد دارم تا در مورد بازگشت صحبت می کنید، همه انواع که ما آموخته اند، و 885 00:49:16,840 --> 00:49:18,050 کمی از همه اشاره گر. 886 00:49:18,050 --> 00:49:18,740 OK؟ 887 00:49:18,740 --> 00:49:20,340 پس اول از همه، بازگشت. 888 00:49:20,340 --> 00:49:22,951 به چه معنی است که می گویند که یک تابع بازگشتی است؟ 889 00:49:22,951 --> 00:49:24,675 >> رسید خود را تلفن. 890 00:49:24,675 --> 00:49:26,500 >> LUCAS: OK، خود را خواند، آره. 891 00:49:26,500 --> 00:49:27,700 بنابراین مانند این تصویر، به عنوان مثال. 892 00:49:27,700 --> 00:49:30,280 آن را مانند تصویر در داخل از یک تصویر و غیره. 893 00:49:30,280 --> 00:49:35,740 بنابراین به عنوان مثال، شما می توانید به عنوان دن have-- که در مورد جستجوی دودویی صحبت شد. 894 00:49:35,740 --> 00:49:41,840 یکی از راه های است که در آن جستجوی دودویی است بازگشتی این واقعیت است که شما است 895 00:49:41,840 --> 00:49:43,130 تلاش برای پیدا کردن یک عدد است. 896 00:49:43,130 --> 00:49:44,250 بنابراین شما به میدن. 897 00:49:44,250 --> 00:49:47,130 و سپس شما اگر اعداد وجود دارد چک کنید در سمت چپ و در سمت راست. 898 00:49:47,130 --> 00:49:49,650 >> و پس از آن اگر شما در پیدا کردن تعداد است رفتن به سمت چپ است، این همان 899 00:49:49,650 --> 00:49:53,340 چیزی که به عنوان انجام جستجو را دوباره اما فقط در سمت چپ این فهرست است. 900 00:49:53,340 --> 00:49:57,350 بنابراین این که چگونه آن را برای تلفن های موبایل می خواهم آن را بازگشتی. 901 00:49:57,350 --> 00:50:01,870 به همین دلیل شما بچه ها باید بازگشتی راه حل برای مرتب سازی ادغام. 902 00:50:01,870 --> 00:50:04,270 >> OK، بنابراین در اینجا یک مثال است. 903 00:50:04,270 --> 00:50:07,280 بنابراین اجازه دهید بگویم که من می خواهم به را انتخاب کنید تمام اعداد از 1 تا n. 904 00:50:07,280 --> 00:50:13,790 من می توانم درک کنند که از مجموع نفر تعداد نفر است به علاوه نفر منهای 1 تا 1. 905 00:50:13,790 --> 00:50:17,810 اما پس از آن، اگر من در ان منهای 1 نگاه به علاوه نفر منهای 2 به علاوه 1، که همان 906 00:50:17,810 --> 00:50:20,680 چیزی که به عنوان اعداد جمع به نفر منهای 1. 907 00:50:20,680 --> 00:50:25,890 بنابراین من می توانم مجموع مبلغ برابر می گویند برابر با نفر باضافه مجموع نفر منهای 1. 908 00:50:25,890 --> 00:50:28,010 آیا این را حس؟ 909 00:50:28,010 --> 00:50:32,630 >> و من هم که چیز دیگری داشته باشد نام مورد پایه، این است که 910 00:50:32,630 --> 00:50:37,440 مجموع اعداد به صفر صفر میشد. 911 00:50:37,440 --> 00:50:42,770 بنابراین به عنوان به زودی به عنوان من به تعداد دریافت صفر، من متوقف شمارش. 912 00:50:42,770 --> 00:50:45,330 آیا این را حس؟ 913 00:50:45,330 --> 00:50:48,120 >> بنابراین در اینجا یک مثال از اینکه چگونه است من می توانم پیاده سازی شده است. 914 00:50:48,120 --> 00:50:49,860 بنابراین من این تابع در برخی داشته باشد. 915 00:50:49,860 --> 00:50:51,700 که طول می کشد نفر عدد صحیح است. 916 00:50:51,700 --> 00:50:56,300 بنابراین در اینجا من برای اولین بار چک کنید اگر n است کمتر و یا برابر صفر است. 917 00:50:56,300 --> 00:51:00,310 بنابراین اگر آن را کمتر یا برابر با صفر است، I بازگشت به صفر است، که در این صورت پایگاه ما. 918 00:51:00,310 --> 00:51:05,690 در غیر این صورت، من فقط می تواند بازگشت به علاوه نفر مجموع اعداد از 919 00:51:05,690 --> 00:51:07,190 یک به یک نفر منفی شود. 920 00:51:07,190 --> 00:51:09,360 را حس؟ 921 00:51:09,360 --> 00:51:10,100 OK. 922 00:51:10,100 --> 00:51:11,610 >> بنابراین در اینجا چیزی است که آن را مانند به نظر می رسد. 923 00:51:11,610 --> 00:51:15,260 شما باید حاصل جمع 2 برابر 2 باضافه مجموع 1. 924 00:51:15,260 --> 00:51:18,930 و برخی از 1 1 به همراه است مجموع 0، که 0. 925 00:51:18,930 --> 00:51:20,216 را حس؟ 926 00:51:20,216 --> 00:51:25,342 بنابراین اگر ما در پشته از نگاه شما برنامه، این چیزی است که آن را مانند به نظر می رسد. 927 00:51:25,342 --> 00:51:26,820 >> اول، ما باید تابع اصلی. 928 00:51:26,820 --> 00:51:30,320 و سپس تابع اصلی نام مجموع 2. 929 00:51:30,320 --> 00:51:36,690 و بعد حاصل جمع 2 در حال رفتن به می گویند، آه، مجموع 2 برابر 2 به علاوه مبلغ یک. 930 00:51:36,690 --> 00:51:39,460 پس من جمع 1 اضافه کردن به پشته. 931 00:51:39,460 --> 00:51:43,860 و مجموع 1 رفتن به مجموع تماس بگیرید 0، که همچنین رفتن به آن اضافه شود 932 00:51:43,860 --> 00:51:44,630 به پشته. 933 00:51:44,630 --> 00:51:49,240 و پس از آن هر یک از این آنهایی هستند که در بالای دیگر مجبور به بازگشت 934 00:51:49,240 --> 00:51:52,020 قبل از آنهایی که دیگر را می توانید نگه دارید. 935 00:51:52,020 --> 00:51:56,240 >> بنابراین به عنوان مثال، در اینجا، مجموع 0، اول، رفتن برای بازگشت به 0. 936 00:51:56,240 --> 00:51:58,320 و بعد حاصل جمع 1 را انتخاب کنید. 937 00:51:58,320 --> 00:52:00,850 سپس مجموع 1 رفتن به بازگشت 1 به طور خلاصه از 2. 938 00:52:00,850 --> 00:52:03,900 و در نهایت، مجموع 2 است که برای بازگشت به صفحه اصلی 3. 939 00:52:03,900 --> 00:52:05,320 آیا این را حس؟ 940 00:52:05,320 --> 00:52:09,496 >> این واقعا مهم است به درک چگونگی پشته در حال کار کنید و سعی کنید به 941 00:52:09,496 --> 00:52:11,980 ببینید که اگر آن را حس می کند. 942 00:52:11,980 --> 00:52:13,260 OK، بنابراین مرتب سازی. 943 00:52:13,260 --> 00:52:16,170 پس چرا مرتب سازی مهم است، اول از همه؟ 944 00:52:16,170 --> 00:52:18,260 چرا باید توجه کنیم؟ 945 00:52:18,260 --> 00:52:20,310 همه؟ 946 00:52:20,310 --> 00:52:20,695 من یک مثال بزنم؟ 947 00:52:20,695 --> 00:52:21,040 آره؟ 948 00:52:21,040 --> 00:52:22,968 >> رسید [نامفهوم]. 949 00:52:22,968 --> 00:52:24,700 >> LUCAS: آره، OK. 950 00:52:24,700 --> 00:52:26,090 بنابراین شما می توانید جستجو موثر تر است. 951 00:52:26,090 --> 00:52:28,580 این راه خوبی است. 952 00:52:28,580 --> 00:52:32,462 بنابراین، برای مثال، ما یک مقدار زیادی از همه چیز، در واقع، در زندگی ما که 953 00:52:32,462 --> 00:52:32,920 ها طبقه بندی شده اند. 954 00:52:32,920 --> 00:52:34,830 به عنوان مثال، واژه نامه ها. 955 00:52:34,830 --> 00:52:39,210 >> این بسیار مهم است که تمام کلمات در نوعی از جهت است که ما 956 00:52:39,210 --> 00:52:41,970 به راحتی می توانید دسترسی داشته باشید. 957 00:52:41,970 --> 00:52:43,280 بنابراین این چیزی است که او می گفت. 958 00:52:43,280 --> 00:52:45,530 شما می توانید موثر تر است. 959 00:52:45,530 --> 00:52:48,740 از چقدر سخت خواهد بود که فکر می کنم فرهنگ لغت است که در آن واژگان در می 960 00:52:48,740 --> 00:52:49,500 به صورت تصادفی. 961 00:52:49,500 --> 00:52:53,120 شما باید به در نگاه کنید، بسیار زیاد است، هر کلمه تا زمانی که شما پیدا کردن 962 00:52:53,120 --> 00:52:54,720 کلمه ای که شما دنبال آن هستید. 963 00:52:54,720 --> 00:52:58,710 >> اگر شما با استفاده از فیس بوک نیز، زمانی که شما دنبال آن هستید در دوستان خود، شما 964 00:52:58,710 --> 00:53:03,540 رفتن به که فیس بوک قرار داده خود را دوستان نزدیک تر است در بالا از آنهایی که 965 00:53:03,540 --> 00:53:05,470 که شما به آن صحبت نه خیلی زیاد. 966 00:53:05,470 --> 00:53:08,080 اگر شما به تمام راه را به پایین لیست دوستان خود، شما در حال رفتن برای دیدن 967 00:53:08,080 --> 00:53:11,250 مردم که شما احتمالا حتی نمی به یاد داشته باشید که شما دوستان با است. 968 00:53:11,250 --> 00:53:14,590 و این به دلیل نوع صفحه دوستان خود را بر اساس 969 00:53:14,590 --> 00:53:16,472 بستن شما به آنها می باشد. 970 00:53:16,472 --> 00:53:17,930 >> بنابراین سازماندهی داده ها. 971 00:53:17,930 --> 00:53:18,450 همچنین عکس. 972 00:53:18,450 --> 00:53:21,400 بنابراین شما می بینید که تمام Pokemons شماره تلفن های. 973 00:53:21,400 --> 00:53:27,210 و این مثل یک آسان راه دسترسی به اطلاعات. 974 00:53:27,210 --> 00:53:29,050 >> رسید دسترسی به انجمن مذهبی. 975 00:53:29,050 --> 00:53:29,890 >> LUCAS: آره. 976 00:53:29,890 --> 00:53:32,395 >> رسید [نامفهوم]. 977 00:53:32,395 --> 00:53:33,460 >> LUCAS: بله. 978 00:53:33,460 --> 00:53:35,140 OK، بنابراین انتخاب نوع. 979 00:53:35,140 --> 00:53:41,610 مرتب کردن بر اساس انتخاب است که رفتن را انتخاب کنید کوچکترین مقدار خشک جدانشده از یک لیست هر 980 00:53:41,610 --> 00:53:43,300 زمان در هر تکرار. 981 00:53:43,300 --> 00:53:46,800 این نوع مانند نوع که شما باید انجام دهید در سر خود را هنگامی که شما در تلاش برای 982 00:53:46,800 --> 00:53:48,430 مرتب سازی بر اساس یک لیست در دست. 983 00:53:48,430 --> 00:53:51,990 >> در واقع، همه شما باید انجام دهید این است که شما نگاه کنید برای کوچکترین عدد است. 984 00:53:51,990 --> 00:53:54,280 شما آن را در لیست مرتب شده اند. 985 00:53:54,280 --> 00:53:56,230 و پس از آن شما برای نگاه بعدی تعداد کوچکترین. 986 00:53:56,230 --> 00:54:00,080 و پس از آن شما در حفظ و انجام که و غیره. 987 00:54:00,080 --> 00:54:04,600 >> بنابراین انتخاب نوع اساسا شما هر بار که کوچکترین انتخاب کنید 988 00:54:04,600 --> 00:54:05,750 ارزش خشک جدانشده. 989 00:54:05,750 --> 00:54:10,840 قرار است در پایان از طبقه بندی شده اند بخشی از لیست. 990 00:54:10,840 --> 00:54:12,370 و نگه دارید این کار را می. 991 00:54:12,370 --> 00:54:15,890 بنابراین اجازه دهید به سرعت ببینید که چه این به نظر می رسد. 992 00:54:15,890 --> 00:54:19,340 بنابراین در اینجا طبقه بندی شده اند و لیست خشک جدانشده. 993 00:54:19,340 --> 00:54:23,350 >> بنابراین برای طبقه بندی شده اند از لیست، آن را در ابتدا خالی است. 994 00:54:23,350 --> 00:54:26,760 و پس از آن من قصد دارم برای انتخاب تعداد کوچکترین اینجا است که 2. 995 00:54:26,760 --> 00:54:30,650 بنابراین من شماره 2 و I قرار داده در مقابل این فهرست است. 996 00:54:30,650 --> 00:54:34,910 و بعد من برای آینده کوچکترین نگاه عنصر است که 3. 997 00:54:34,910 --> 00:54:37,050 بنابراین من آن را در پایان قرار داده لیست طبقه بندی شده اند. 998 00:54:37,050 --> 00:54:38,140 و بعد من انجام این کار نگه دارید. 999 00:54:38,140 --> 00:54:40,040 من 4 و آن را در پایان. 1000 00:54:40,040 --> 00:54:41,360 یافتن 5 و آن را در پایان. 1001 00:54:41,360 --> 00:54:44,830 >> و در چگونه از آن زمان نگاه که من گفت: آن را در پایان است، 1002 00:54:44,830 --> 00:54:46,850 اساسا، مبادله دو ارزش. 1003 00:54:46,850 --> 00:54:48,100 OK؟ 1004 00:54:48,100 --> 00:54:50,140 1005 00:54:50,140 --> 00:54:52,825 و پس از آن یکی از آخرین، شما فقط یک عنصر است. 1006 00:54:52,825 --> 00:54:55,870 پس از آن در حال حاضر طبقه بندی شده اند. 1007 00:54:55,870 --> 00:54:57,800 >> OK، بنابراین مرتب کردن بر اساس درج. 1008 00:54:57,800 --> 00:55:03,180 مرتب کردن بر اساس درج شما در حال رفتن به هم چیزی که به عنوان یک طبقه بندی شده اند و 1009 00:55:03,180 --> 00:55:04,690 لیست خشک جدانشده. 1010 00:55:04,690 --> 00:55:14,540 تنها چیزی است که هر بار که شما با اضافه کردن یک عنصر به طبقه بندی شده اند 1011 00:55:14,540 --> 00:55:18,170 لیست، شما فقط انتخاب عنصر که در مقابل لیست خشک جدانشده است. 1012 00:55:18,170 --> 00:55:20,880 و پس از آن شما در حال رفتن به پیدا کردن آنچه در موقعیت آن را باید در مرتب شده است 1013 00:55:20,880 --> 00:55:22,300 بخشی از لیست. 1014 00:55:22,300 --> 00:55:25,840 >> بیایید ببینید چه این چنین است این را حس می کند بیشتر است. 1015 00:55:25,840 --> 00:55:29,360 بنابراین در ابتدا، به عنوان مثال، من در تلاش برای وارد کردن شماره سه در 1016 00:55:29,360 --> 00:55:30,680 بخش مرتب شده از لیست. 1017 00:55:30,680 --> 00:55:31,800 بنابراین لیست هیچ چیزی ندارد. 1018 00:55:31,800 --> 00:55:34,160 بنابراین من فقط می توانید تعداد 3. 1019 00:55:34,160 --> 00:55:37,480 >> در حال حاضر، من می خواهم برای اضافه کردن عدد 5 به بخش مرتب شده از لیست. 1020 00:55:37,480 --> 00:55:38,900 بنابراین من در شماره 5 نگاه کنید. 1021 00:55:38,900 --> 00:55:40,450 من متوجه که این بیشتر از 3. 1022 00:55:40,450 --> 00:55:41,980 بنابراین من می دانم که آن را پس از 3 تا باشد. 1023 00:55:41,980 --> 00:55:44,100 بنابراین من قرار داده 3 و 5. 1024 00:55:44,100 --> 00:55:45,940 >> سپس من می خواهم برای وارد کردن عدد 2. 1025 00:55:45,940 --> 00:55:51,630 من متوجه است که تعداد 2 است که در واقع آخرین و سپس هر دو 3 و 5. 1026 00:55:51,630 --> 00:55:54,580 بنابراین من در واقع برای قرار دادن همه آن را راه در ابتدای فهرست. 1027 00:55:54,580 --> 00:55:59,030 بنابراین من به، نوع، تغییر همه عناصر در لیست طبقه بندی شده اند، بنابراین من می تواند 1028 00:55:59,030 --> 00:56:01,970 اتاق را برای تعداد 2. 1029 00:56:01,970 --> 00:56:03,160 >> سپس من شماره 6 را ببینید. 1030 00:56:03,160 --> 00:56:05,450 من می بینم که آن را باید پس از 5 باشد. 1031 00:56:05,450 --> 00:56:06,240 بنابراین من آن را قرار داده است. 1032 00:56:06,240 --> 00:56:07,965 و در نهایت، من در شماره 4 نگاه کنید. 1033 00:56:07,965 --> 00:56:11,030 و من متوجه آن باید بین 3 و 5 است. 1034 00:56:11,030 --> 00:56:14,870 و بعد من آن را قرار داده وجود دارد و تغییر تمام عناصر دیگر. 1035 00:56:14,870 --> 00:56:16,120 را حس؟ 1036 00:56:16,120 --> 00:56:17,880 1037 00:56:17,880 --> 00:56:19,150 >> حباب مرتب سازی بر. 1038 00:56:19,150 --> 00:56:25,730 بنابراین مرتب سازی حبابی است که اساسا چه شما رفتن به do-- به آن حباب 1039 00:56:25,730 --> 00:56:30,113 مرتب کردن بر اساس دلیل این که شما از طریق list-- به در واقع بهتر است اگر من فقط نشان می دهد 1040 00:56:30,113 --> 00:56:32,300 دوست دارید this-- 1041 00:56:32,300 --> 00:56:35,030 و شما در حال رفتن برای مقایسه تعداد مجاور. 1042 00:56:35,030 --> 00:56:38,410 و شما در حال رفتن به مبادله آنها موقعیت اگر آنها نمی 1043 00:56:38,410 --> 00:56:39,190 در جهت سمت راست. 1044 00:56:39,190 --> 00:56:42,570 >> بنابراین اساسا، آنچه که در حال رفتن به رخ می دهد است که در اینجا، به عنوان مثال، 1045 00:56:42,570 --> 00:56:44,160 شما باید 8 و 6. 1046 00:56:44,160 --> 00:56:47,270 شما می دانید که مرتب خواهد شد در واقع می شود 6 و 5، درست است؟ 1047 00:56:47,270 --> 00:56:49,540 بنابراین شما به مبادله و دستورات است. 1048 00:56:49,540 --> 00:56:51,370 سپس من 8 و 4 در اینجا مشاهده کنید. 1049 00:56:51,370 --> 00:56:52,250 و من همین کار را. 1050 00:56:52,250 --> 00:56:53,400 من دوباره مبادله. 1051 00:56:53,400 --> 00:56:55,070 و در نهایت، 2 و 8. 1052 00:56:55,070 --> 00:56:56,670 من هم آنها را مبادله. 1053 00:56:56,670 --> 00:57:01,690 >> این حباب مرتب سازی بر چرا که پس از به نام هر یک از این تکرار، در واقع، 1054 00:57:01,690 --> 00:57:05,910 بیشترین تعداد در فهرست می شود تمام راه را به انتهای لیست. 1055 00:57:05,910 --> 00:57:06,940 آیا این را حس؟ 1056 00:57:06,940 --> 00:57:11,880 از آنجا که آن را نگه می دارد مبادله آن و حرکت آن به سمت راست. 1057 00:57:11,880 --> 00:57:14,440 >> OK، بنابراین این تکرار دوم است. 1058 00:57:14,440 --> 00:57:17,200 این امر می تواند همین. 1059 00:57:17,200 --> 00:57:20,190 من یک مبادله را انجام دهد و پس از آن یکی از آخرین. 1060 00:57:20,190 --> 00:57:23,290 من که هیچ معاوضه وجود دارد و فهرست طبقه بندی شده اند است. 1061 00:57:23,290 --> 00:57:27,460 بنابراین در حباب مرتب سازی بر، ما اساسا حفظ رفتن را از طریق لیست و مبادله 1062 00:57:27,460 --> 00:57:32,310 همه چیز تا زمانی که من متوجه است که این کار را نکردم هر گونه معاوضه انجام این کار تکرار، که 1063 00:57:32,310 --> 00:57:34,270 بدان معنی است که لیست در حال حاضر طبقه بندی شده اند. 1064 00:57:34,270 --> 00:57:35,520 را حس؟ 1065 00:57:35,520 --> 00:57:38,400 1066 00:57:38,400 --> 00:57:40,870 >> اجازه دهید بحث در کمی در مورد زمان در حال اجرا. 1067 00:57:40,870 --> 00:57:45,165 پس شما بچه ها به یاد داشته باشید بزرگ O، امگا و تتا؟ 1068 00:57:45,165 --> 00:57:49,290 1069 00:57:49,290 --> 00:57:50,990 آره؟ 1070 00:57:50,990 --> 00:57:53,070 OK، چه O بزرگ است، اول از همه؟ 1071 00:57:53,070 --> 00:57:54,315 >> رسید [نامفهوم]. 1072 00:57:54,315 --> 00:57:59,070 >> LUCAS: آره، آن را به بدترین حالت نامیده می شود زمان اجرا، که فقط بدان معناست که این 1073 00:57:59,070 --> 00:58:03,470 چقدر شما انتظار برنامه به را اجرا کنند. 1074 00:58:03,470 --> 00:58:04,910 مانند، از نظر of-- 1075 00:58:04,910 --> 00:58:06,660 در این case-- نفر. 1076 00:58:06,660 --> 00:58:09,150 تعداد عناصر در لیست در بدترین حالت. 1077 00:58:09,150 --> 00:58:12,520 مانند، در بدترین حالت ممکن است. 1078 00:58:12,520 --> 00:58:17,100 >> بنابراین برای حباب مرتب سازی بر، برای مثال، ما O بزرگ از n مربع است. 1079 00:58:17,100 --> 00:58:20,580 چرا ما باید که؟ 1080 00:58:20,580 --> 00:58:24,716 چرا حباب مرتب سازی بر بزرگ مربع O نفر است؟ 1081 00:58:24,716 --> 00:58:27,614 >> رسید [نامفهوم]. 1082 00:58:27,614 --> 00:58:35,670 >> LUCAS: آره، بنابراین بدترین حالت خواهد بود که من را مجبور به انجام تعداد تکرار. 1083 00:58:35,670 --> 00:58:39,260 بنابراین هر یک از تکرار است که به را بزرگترین عنصر به انتهای 1084 00:58:39,260 --> 00:58:40,290 از لیست. 1085 00:58:40,290 --> 00:58:44,230 بنابراین بدترین حالت این است که من برای انجام این کار چیزی که n بار. 1086 00:58:44,230 --> 00:58:48,550 و برای هر یک از آن زمان، من به انجام نفر سواپ چون من برای مقایسه 1087 00:58:48,550 --> 00:58:49,870 هر دو عنصر. 1088 00:58:49,870 --> 00:58:53,730 به همین دلیل آن را به نفر مربع چرا که آن را n بار نفر. 1089 00:58:53,730 --> 00:59:00,120 >> سپس، انتخاب نوع نیز نفر مربع چرا که، برای هر تکرار، من به 1090 00:59:00,120 --> 00:59:02,650 در هر عنصر نگاه در این فهرست است. 1091 00:59:02,650 --> 00:59:04,980 و سپس پیدا کردن کوچکترین، به این معنی که من به 1092 00:59:04,980 --> 00:59:06,130 از n عنصر است. 1093 00:59:06,130 --> 00:59:11,750 و من برای انجام این کار بار نفر به دلیل من به انتخاب همه عناصر نفر. 1094 00:59:11,750 --> 00:59:18,273 >> مرتب کردن بر اساس درج نیز نفر مربع به این دلیل که بدترین سناریو مورد خواهد شد 1095 00:59:18,273 --> 00:59:20,950 شود، یکی، من برای وارد کردن عدد n، درست است؟ 1096 00:59:20,950 --> 00:59:22,765 بنابراین من در حال حاضر می دانیم که من قصد دارم به نفر تکرار. 1097 00:59:22,765 --> 00:59:25,466 1098 00:59:25,466 --> 00:59:29,840 اما برای هر یک از این اعداد، اگر من تا به حال در تمام اعداد در نگاه 1099 00:59:29,840 --> 00:59:34,380 لیست طبقه بندی شده اند و آن را تمام راه را در مقابل، خواهد شد که تعداد مربع 1100 00:59:34,380 --> 00:59:36,230 چرا که از آن خواهد شد n بار نفر دیگر. 1101 00:59:36,230 --> 00:59:38,280 را حس؟ 1102 00:59:38,280 --> 00:59:41,512 چه در مورد امگا؟ 1103 00:59:41,512 --> 00:59:42,886 >> رسید [نامفهوم]. 1104 00:59:42,886 --> 00:59:44,620 >> LUCAS: این بهترین حالت است. 1105 00:59:44,620 --> 00:59:48,810 بنابراین آن را مانند، در بسیاری از اوقات برای مرتب سازی، بهترین شرایط است 1106 00:59:48,810 --> 00:59:50,660 هنگامی که لیست در حال حاضر طبقه بندی شده اند. 1107 00:59:50,660 --> 00:59:52,670 بنابراین شما واقعا باید به هیچ چیز. 1108 00:59:52,670 --> 00:59:56,290 حباب مرتب سازی بر بهترین است سناریو از n. 1109 00:59:56,290 --> 00:59:58,820 آیا شما بچه ها می دانید چرا؟ 1110 00:59:58,820 --> 01:00:00,620 >> رسید [نامفهوم]. 1111 01:00:00,620 --> 01:00:05,640 >> LUCAS: بله، اگر شما پیگیری آیا سهمیه بندی داده های هر سواپ حال یا 1112 01:00:05,640 --> 01:00:10,533 نه، اگر شما چیزی مانند به راه اگر درست بود تکرار وجود دارد، اگر 1113 01:00:10,533 --> 01:00:15,140 لیست در حال حاضر طبقه بندی شده اند، اساسا، چه اتفاقی خواهد افتاد این است که من قصد دارم به 1114 01:00:15,140 --> 01:00:17,890 سعی کنید به مبادله هر دو عناصر مجاور. 1115 01:00:17,890 --> 01:00:19,920 من قصد دارم که برای دیدن هیچ معاوضه وجود دارد. 1116 01:00:19,920 --> 01:00:21,230 و من فقط بازگشت حق دور. 1117 01:00:21,230 --> 01:00:24,240 >> پس از آن بدان معنی است که من فقط به حال از طریق لیست یک زمان است. 1118 01:00:24,240 --> 01:00:28,990 پس از آن نفر چون من نگاه در تعداد عناصر. 1119 01:00:28,990 --> 01:00:30,930 چرا انتخاب نوع n به میدان؟ 1120 01:00:30,930 --> 01:00:35,150 1121 01:00:35,150 --> 01:00:45,520 >> آره، حتی اگر این فهرست طبقه بندی شده اند، برای هر تکرار از انتخاب نوع، I 1122 01:00:45,520 --> 01:00:47,590 باید به انتخاب حداقل عنصر. 1123 01:00:47,590 --> 01:00:49,980 بنابراین این بدان معناست که من آن را به نگاه در تمام عناصر در خشک جدانشده 1124 01:00:49,980 --> 01:00:53,350 لیست و پیدا کردن حداقل برای هر تکرار. 1125 01:00:53,350 --> 01:00:54,600 آیا این را حس؟ 1126 01:00:54,600 --> 01:00:56,880 1127 01:00:56,880 --> 01:01:04,690 >> و شمشیر درج شده است N چرا که در مورد که من در تلاش برای وارد کردن 1128 01:01:04,690 --> 01:01:09,320 اعداد و تمام اعداد، زمانی که من سعی کنید به آنها وارد است، من می بینم که آنها 1129 01:01:09,320 --> 01:01:10,510 در سمت راست هستند. 1130 01:01:10,510 --> 01:01:15,120 من لازم نیست برای رفتن به بررسی تمام دیگر اعداد در لیست خشک جدانشده. 1131 01:01:15,120 --> 01:01:17,170 به همین دلیل آن را به نفر خواهد بود. 1132 01:01:17,170 --> 01:01:19,480 را حس؟ 1133 01:01:19,480 --> 01:01:21,035 و چه تتا است؟ 1134 01:01:21,035 --> 01:01:23,410 >> رسید [نامفهوم]. 1135 01:01:23,410 --> 01:01:24,380 >> LUCAS: چه، ببخشید؟ 1136 01:01:24,380 --> 01:01:24,960 دوباره بگو. 1137 01:01:24,960 --> 01:01:25,666 >> رسید [نامفهوم]. 1138 01:01:25,666 --> 01:01:26,490 >> LUCAS: دقیقا. 1139 01:01:26,490 --> 01:01:31,280 بنابراین شما می توانید ببینید که تنها انتخاب ذخیره شده در ادغام مرتب کردن بر اساس thetas داشته باشد. 1140 01:01:31,280 --> 01:01:39,920 و این دلیل این که شما فقط تتا دارند اگر هر دو بزرگ O و امگا یکسان هستند. 1141 01:01:39,920 --> 01:01:41,520 OK. 1142 01:01:41,520 --> 01:01:44,210 و در نهایت، ادغام مرتب کردن بر اساس است در log n است. 1143 01:01:44,210 --> 01:01:48,910 >> و پس از آن، به عنوان دن گفت، ادغام مرتب کردن بر اساس است نوع مانند راه همان است که 1144 01:01:48,910 --> 01:01:50,320 شما انجام جستجوی دودویی. 1145 01:01:50,320 --> 01:01:53,530 بنابراین لیست شما. 1146 01:01:53,530 --> 01:01:55,170 و شما به نصف کاهش دهد. 1147 01:01:55,170 --> 01:02:00,580 و سپس شما آنها را برش در نیمه کوچکتر است. 1148 01:02:00,580 --> 01:02:01,730 و سپس شما آنها را ادغام خواهند شد. 1149 01:02:01,730 --> 01:02:02,960 شما بچه ها به یاد داشته باشید که، درست است؟ 1150 01:02:02,960 --> 01:02:04,960 OK، به عنوان او گفت شد. 1151 01:02:04,960 --> 01:02:08,330 >> OK، اشاره گرها. 1152 01:02:08,330 --> 01:02:11,078 پس چه یک اشاره گر است؟ 1153 01:02:11,078 --> 01:02:12,050 >> رسید [نامفهوم]. 1154 01:02:12,050 --> 01:02:12,820 >> LUCAS: آدرس. 1155 01:02:12,820 --> 01:02:13,720 OK. 1156 01:02:13,720 --> 01:02:18,530 من می دانم که دیوید نشان می دهد یک دسته از فیلم ها از binky و چیزهایی اشاره 1157 01:02:18,530 --> 01:02:19,080 هر یک از دیگر. 1158 01:02:19,080 --> 01:02:22,960 اما من می خواهم از اشاره گر فکر می کنم به عنوان صرفا یک آدرس. 1159 01:02:22,960 --> 01:02:26,110 پس از آن یک متغیر است که رفتن است برای ذخیره یک آدرس. 1160 01:02:26,110 --> 01:02:31,940 >> بنابراین آن را فقط به این متغیر خاص است است که چهار بایت. 1161 01:02:31,940 --> 01:02:36,550 به یاد داشته باشید، که اشاره گر به هر چیزی است همیشه چهار بایت برای ما 32 بیتی 1162 01:02:36,550 --> 01:02:39,370 دستگاه تا در مورد دستگاه. 1163 01:02:39,370 --> 01:02:41,920 1164 01:02:41,920 --> 01:02:47,050 و آن را فقط دارای محل یک متغیر در داخل آن است. 1165 01:02:47,050 --> 01:02:50,240 >> OK، بنابراین این حافظه وجود دارد، اساسا. 1166 01:02:50,240 --> 01:02:57,420 بنابراین هر بلوک از حافظه در واقع تا به برچسب است که آدرس 1167 01:02:57,420 --> 01:02:58,890 حافظه slotty. 1168 01:02:58,890 --> 01:03:02,370 به طوری که بدان معنی است که من می تواند داشته اشاره به اشاره گر 1169 01:03:02,370 --> 01:03:03,380 هر یک از این آدرس. 1170 01:03:03,380 --> 01:03:09,930 بنابراین به همین دلیل ما به اشاره گر استفاده شده است اگر من به یاد داشته باشید محل 1171 01:03:09,930 --> 01:03:12,300 که یک متغیر خاص از حافظه است. 1172 01:03:12,300 --> 01:03:16,560 >> و شما بچه ها به یاد داشته باشید که یکی از آن موارد اگر من یک تابع باید 1173 01:03:16,560 --> 01:03:20,820 اگر من در واقع می خواهید مبادله برای reals به، من در واقع 1174 01:03:20,820 --> 01:03:22,110 برای ارسال اشاره گر. 1175 01:03:22,110 --> 01:03:23,460 نه متغیر. 1176 01:03:23,460 --> 01:03:25,200 آیا شما بچه ها به یاد داشته باشید که؟ 1177 01:03:25,200 --> 01:03:26,450 between-- تفاوت 1178 01:03:26,450 --> 01:03:33,350 1179 01:03:33,350 --> 01:03:34,120 چه نام است؟ 1180 01:03:34,120 --> 01:03:36,010 تماس با مقدار و فراخوانی توسط مرجع، درست است؟ 1181 01:03:36,010 --> 01:03:36,840 >> OK، آره. 1182 01:03:36,840 --> 01:03:38,330 بنابراین با ارزش تماس بگیرید. 1183 01:03:38,330 --> 01:03:43,570 هنگامی که شما فقط یک متغیر به ارسال عمل شما فقط با ارسال یک ارزش. 1184 01:03:43,570 --> 01:03:45,610 بنابراین شما در واقع ارسال یک کپی از متغیر. 1185 01:03:45,610 --> 01:03:49,720 و برنامه های خود را نمی تواند کمتر اهمیت می دهند در مورد اگر متغیر همان در واقع 1186 01:03:49,720 --> 01:03:51,650 باعث می شود یک کپی. 1187 01:03:51,650 --> 01:03:56,330 >> و خواستار با اشاره بدان معنی است که من در واقع از ارسال یک کپی از 1188 01:03:56,330 --> 01:03:57,550 اشاره گر به آن متغیر. 1189 01:03:57,550 --> 01:04:00,970 پس از آن بدان معنی است که من از ارسال محل که متغیر. 1190 01:04:00,970 --> 01:04:04,440 بنابراین احساس من محل متغیر، زمانی که من فراخوانی تابع 1191 01:04:04,440 --> 01:04:09,700 با اشاره گر، من قادر هستم در واقع تغییر داده است که در اصلی بود. 1192 01:04:09,700 --> 01:04:12,050 را حس؟ 1193 01:04:12,050 --> 01:04:17,560 >> اگر چه، اشاره گر یک کپی است، اشاره گر هنوز آدرس واقعی 1194 01:04:17,560 --> 01:04:20,090 متغیر است که من می خواهم به تغییر. 1195 01:04:20,090 --> 01:04:21,920 را حس؟ 1196 01:04:21,920 --> 01:04:24,290 >> بنابراین ایجاد اشاره گر. 1197 01:04:24,290 --> 01:04:28,410 به یاد داشته باشید، اشاره گر همیشه نوع است که آن را با اشاره 1198 01:04:28,410 --> 01:04:29,890 و سپس به یک ستاره. 1199 01:04:29,890 --> 01:04:31,030 و پس از آن شما به نام قرار داده است. 1200 01:04:31,030 --> 01:04:35,765 بنابراین به یاد داشته باشید که هر زمان که شما هر ستاره، آن را مانند یک اشاره گر به در 1201 01:04:35,765 --> 01:04:38,990 که هر متغیر نوع می باشد که شما تا به حال. 1202 01:04:38,990 --> 01:04:42,850 >> بنابراین در اینجا در ستاره، به عنوان مثال، آن را یک اشاره گر و یک عدد صحیح. 1203 01:04:42,850 --> 01:04:47,680 و پس از آن ستاره کاراکتر یک اشاره گر است ستاره کاراکتر و غیره. 1204 01:04:47,680 --> 01:04:47,960 آره؟ 1205 01:04:47,960 --> 01:04:52,710 >> رسید چه اگر ما اشاره گر به نفر به ستاره ایکس. 1206 01:04:52,710 --> 01:04:55,255 من می دانم که یک اشاره گر به x ایجاد می کند. 1207 01:04:55,255 --> 01:04:59,432 آیا آن را نیز x را یک عدد صحیح اعلام؟ 1208 01:04:59,432 --> 01:05:05,170 >> LUCAS: OK، تا زمانی که به شما می گویند نفر ستاره ایکس، شما یک اشاره گر به ایجاد نشده است 1209 01:05:05,170 --> 01:05:06,000 متغیر x. 1210 01:05:06,000 --> 01:05:08,170 شما در حال ایجاد یک اشاره گر به نام ایکس. 1211 01:05:08,170 --> 01:05:09,396 >> رسید [نامفهوم]. 1212 01:05:09,396 --> 01:05:14,250 >> LUCAS: بنابراین، هنگامی که من می گویم نفر ستاره ایکس من گفت، با سلام، در حافظه، من قصد دارم به 1213 01:05:14,250 --> 01:05:16,390 یکی از این سه جعبه. 1214 01:05:16,390 --> 01:05:20,750 و من قصد دارم برای گفتن که که در حال رفتن به x، است که 1215 01:05:20,750 --> 01:05:22,000 برای رفتن به یک اشاره گر. 1216 01:05:22,000 --> 01:05:26,860 1217 01:05:26,860 --> 01:05:30,640 و چیزی جالب در مورد اشاره گر این است که ما می گویند که آنها 1218 01:05:30,640 --> 01:05:32,620 4 بایت برای یک ماشین 32 بیتی. 1219 01:05:32,620 --> 01:05:36,320 و دلیل برای آن است که به دلیل 4 بایت 32 بیت می باشد. 1220 01:05:36,320 --> 01:05:40,490 >> و ماشین هایی که 64 بیت در واقع دارای آدرس های اشاره گر 1221 01:05:40,490 --> 01:05:43,480 که 64 بیت طول دارند. 1222 01:05:43,480 --> 01:05:49,820 بنابراین آن را فقط به این معنی است که به اندازه آدرس در دستگاه های مختلف است. 1223 01:05:49,820 --> 01:05:52,270 >> بنابراین مرجع و غیر مرجع. 1224 01:05:52,270 --> 01:05:54,310 دو عملگر وجود دارد که شما بچه ها باید به یاد داشته باشید. 1225 01:05:54,310 --> 01:05:55,450 اولین علامت است. 1226 01:05:55,450 --> 01:05:56,810 دومین ستاره است. 1227 01:05:56,810 --> 01:06:05,060 آیا در آن ستاره و این اشتباه می کنید ستاره به دلیل به یاد داشته باشید که، در 1228 01:06:05,060 --> 01:06:06,950 این مورد، شما باید تعداد ستاره. 1229 01:06:06,950 --> 01:06:08,700 >> آن را مانند یک چیز تمام است با هم. 1230 01:06:08,700 --> 01:06:10,720 هیچ ستاره فضای نفر وجود دارد. 1231 01:06:10,720 --> 01:06:12,070 پس از آن بدان معنی است که این نوع. 1232 01:06:12,070 --> 01:06:14,870 به یاد داشته باشید، که زمانی که شما ستاره متغیر، شما 1233 01:06:14,870 --> 01:06:16,230 صحبت کردن در مورد نوع. 1234 01:06:16,230 --> 01:06:20,540 >> هنگامی که شما فقط ستاره و پس از آن نام متغیر، به این معنی که 1235 01:06:20,540 --> 01:06:24,100 شما هرگاه اشاره گر، که بدان معنی است که شما به دنبال در 1236 01:06:24,100 --> 01:06:28,290 اشاره گر، پیدا کردن آدرس آن را با اشاره به، رفتن به آن آدرس، 1237 01:06:28,290 --> 01:06:30,850 و به دنبال در هر زمان شما وجود دارد. 1238 01:06:30,850 --> 01:06:34,310 بنابراین من دانش آموزان من می گویند که هنگامی که شما به ستاره، شما باید فکر می کنم که این 1239 01:06:34,310 --> 01:06:36,850 مخفف محتوای. 1240 01:06:36,850 --> 01:06:39,770 >> بنابراین اگر شما یک اشاره گر و شما انجام اشاره گر ستاره، آن را 1241 01:06:39,770 --> 01:06:41,720 محتوای اشاره گر. 1242 01:06:41,720 --> 01:06:44,580 بنابراین شما به هر چه آن را اشاره به و در محتوای ثابت نگاه کنید. 1243 01:06:44,580 --> 01:06:47,730 و امپرسند (&) همان است چیزی که به عنوان آدرس. 1244 01:06:47,730 --> 01:06:52,560 >> بنابراین اگر من یک متغیر a-- مانند دارند، اجازه دهید به می گویند که من اعضای هیات برابر 3-- 1245 01:06:52,560 --> 01:06:56,900 اگر من می خواهم برای پیدا کردن آدرس آن متغیر حافظه، من فقط می تواند انجام دهد 1246 01:06:56,900 --> 01:06:58,240 علامت. 1247 01:06:58,240 --> 01:07:00,280 پس از آن آدرس یک است. 1248 01:07:00,280 --> 01:07:01,530 را حس؟ 1249 01:07:01,530 --> 01:07:03,790 1250 01:07:03,790 --> 01:07:05,040 >> بنابراین در اینجا یک مثال است. 1251 01:07:05,040 --> 01:07:08,370 1252 01:07:08,370 --> 01:07:11,530 این از دست رفته است اعضای هیات ب و ج هوشمند. 1253 01:07:11,530 --> 01:07:16,520 بنابراین اعضای هیات برابر 3 بدان معنی است که من قصد دارم برای رفتن به حافظه است. 1254 01:07:16,520 --> 01:07:19,870 و من قصد دارم برای پیدا کردن یک اسلات قرار داده و تعداد 3 اینجا. 1255 01:07:19,870 --> 01:07:22,200 >> و پس از آن اعضای هیات ب برابر با 4. 1256 01:07:22,200 --> 01:07:23,100 من قصد دارم به انجام همان. 1257 01:07:23,100 --> 01:07:25,840 برو به حافظه قرار داده و تعداد 4 در یکی از جعبه. 1258 01:07:25,840 --> 01:07:27,100 و اعضای هیات برابر 5. 1259 01:07:27,100 --> 01:07:29,740 یافتن جعبه دیگر قرار داده و تعداد 5. 1260 01:07:29,740 --> 01:07:36,160 >> پس چه این خط انجام است؟ بسته نفر ستاره برابر است با علامت. 1261 01:07:36,160 --> 01:07:37,800 پس اول از همه، نفر بست ستاره. 1262 01:07:37,800 --> 01:07:39,050 چه آن را انجام می دهند؟ 1263 01:07:39,050 --> 01:07:40,930 1264 01:07:40,930 --> 01:07:42,298 >> رسید [نامفهوم]. 1265 01:07:42,298 --> 01:07:47,890 >> LUCAS: آره، بنابراین نفر بست ستاره، اولین، اعلام یک اشاره گر به نام بسته. 1266 01:07:47,890 --> 01:07:53,720 و سپس آن را تعیین ارزش که اشاره گر به آدرس. 1267 01:07:53,720 --> 01:07:55,790 بنابراین علامت. 1268 01:07:55,790 --> 01:07:58,510 سپس، اگر من سرب ستاره، چه سرب ستاره است؟ 1269 01:07:58,510 --> 01:08:02,418 1270 01:08:02,418 --> 01:08:03,150 >> اوه، ببخشید. 1271 01:08:03,150 --> 01:08:06,330 این نیز از دست رفته. نفر سرب ستاره. 1272 01:08:06,330 --> 01:08:07,905 منظور من ستاره کامپیوتر. 1273 01:08:07,905 --> 01:08:11,200 خیلی معذرت میخوام. 1274 01:08:11,200 --> 01:08:11,940 این همان چیزی است. 1275 01:08:11,940 --> 01:08:16,408 اما در حال حاضر من خوب تاریخ ایجاد اشاره گر هستم به ب و سپس یک اشاره گر به ج. 1276 01:08:16,408 --> 01:08:16,886 آره؟ 1277 01:08:16,886 --> 01:08:18,136 >> رسید [نامفهوم]؟ 1278 01:08:18,136 --> 01:08:25,490 1279 01:08:25,490 --> 01:08:26,670 >> LUCAS: بله. 1280 01:08:26,670 --> 01:08:32,630 بنابراین اگر شما به حافظه بروید و شما به جعبه این است که دهنده بسته، 1281 01:08:32,630 --> 01:08:37,149 شما در واقع به رفتن آدرس مشاهده کنید. 1282 01:08:37,149 --> 01:08:38,399 OK؟ 1283 01:08:38,399 --> 01:08:42,970 1284 01:08:42,970 --> 01:08:43,300 آره؟ 1285 01:08:43,300 --> 01:08:45,605 >> رسید [نامفهوم]؟ 1286 01:08:45,605 --> 01:08:49,260 >> LUCAS: آره، اشاره گر آدرس است. 1287 01:08:49,260 --> 01:08:50,120 هرگز فراموش نکنید که. 1288 01:08:50,120 --> 01:08:52,800 این مثل از مهم ترین بخشی در مورد اشاره گر. 1289 01:08:52,800 --> 01:08:56,180 در ذخیره سازی و آدرس وجود دارد به برخی از متغیر. 1290 01:08:56,180 --> 01:08:56,890 دیگر چه؟ 1291 01:08:56,890 --> 01:08:58,370 هر گونه سؤال دیگر؟ 1292 01:08:58,370 --> 01:08:59,189 OK. 1293 01:08:59,189 --> 01:09:00,399 >> پس از اشاره گرها و آرایه ها. 1294 01:09:00,399 --> 01:09:08,189 به یاد داشته باشید که زمانی که من انجام اعضای هیات آرایه 3، اساسا، آنچه که من انجام می دهند این است که من هستم، نوع 1295 01:09:08,189 --> 01:09:12,779 از، اعلام در یک اشاره گر. 1296 01:09:12,779 --> 01:09:18,960 بنابراین آرایه است نوع مانند یک اشاره گر به محل خاص در حافظه است که در آن I 1297 01:09:18,960 --> 01:09:21,999 سه اسلات برای اعداد صحیح اختصاص داده است. 1298 01:09:21,999 --> 01:09:23,430 آیا این را حس؟ 1299 01:09:23,430 --> 01:09:30,250 >> بنابراین، هنگامی که من انجام آرایه هوشمند 3، چیزی که من هستم انجام می دهند، در واقع، در حال ایجاد سه 1300 01:09:30,250 --> 01:09:31,479 شکاف در حافظه است. 1301 01:09:31,479 --> 01:09:33,899 بنابراین من فقط سه اسلات در حافظه پیدا کنید. 1302 01:09:33,899 --> 01:09:38,810 بنابراین اگر من انجام دهید، سپس، یک آرایه ستاره، آن اساسا این معنی است که محتوای آرایه، 1303 01:09:38,810 --> 01:09:46,180 که به معنی من اشاره گر را پاک، من به به آن محل است که آن را با اشاره به، 1304 01:09:46,180 --> 01:09:47,939 و من قرار است که شماره یک. 1305 01:09:47,939 --> 01:09:53,729 >> و پس از آن، اگر من آرایه ستاره به علاوه 1، که همان انجام آرایه است 1306 01:09:53,729 --> 01:09:59,690 لوستر یکی، که فقط بدان معناست I به جایی که آن را به اشاره در. 1307 01:09:59,690 --> 01:10:03,000 و پس از آن به علاوه 1 می سازد من یک حالت تغییر. 1308 01:10:03,000 --> 01:10:06,510 ولی من به این سمت برود، در واقع، قرار داده و تعداد دو. 1309 01:10:06,510 --> 01:10:10,900 >> و پس از آن، در نهایت، زمانی که من انجام آرایه به علاوه 2، I به جایی که به 1310 01:10:10,900 --> 01:10:11,825 اشاره آرایه در. 1311 01:10:11,825 --> 01:10:14,690 و پس از آن من به بلوک های حافظه حرکت می کند. 1312 01:10:14,690 --> 01:10:16,240 و بعد من تعداد سه قرار داده است. 1313 01:10:16,240 --> 01:10:16,600 آره؟ 1314 01:10:16,600 --> 01:10:21,400 >> رسید آرایه بنابراین ستاره است که به سادگی گفت: نقطه اول. 1315 01:10:21,400 --> 01:10:25,090 و شما می توانید فقط به خاطر اضافه کردن 1، ما فقط واقعا 1316 01:10:25,090 --> 01:10:27,295 ارجاع که آدرس اول است. 1317 01:10:27,295 --> 01:10:28,545 >> LUCAS: آره. 1318 01:10:28,545 --> 01:10:32,720 1319 01:10:32,720 --> 01:10:36,020 چرا ما، به عنوان مثال، می گویند آرایه 0، آرایه 1 و آرایه 2؟ 1320 01:10:36,020 --> 01:10:38,970 1321 01:10:38,970 --> 01:10:42,790 من ادعا، چرا شما انجام دهد 0، 1، 2، 3 به جای 1، 2، 3؟ 1322 01:10:42,790 --> 01:10:46,550 یکی از دلایل است، یکی، کامپیوتر برنامه نویسان ترجیح می دهند به شروع 1323 01:10:46,550 --> 01:10:47,750 شمارش از 0. 1324 01:10:47,750 --> 01:10:52,370 دو دلیل است که وقتی آرایه 0، این همان چیزی که انجام آرایه 1325 01:10:52,370 --> 01:10:56,330 به علاوه، 0، که به معنی من به آن موقعیت، و من نمی 1326 01:10:56,330 --> 01:10:59,320 جست و خیز هر بلوک حافظه است. 1327 01:10:59,320 --> 01:11:01,750 بنابراین من هیچ بلوک حافظه حرکت نمی کند. 1328 01:11:01,750 --> 01:11:02,015 آره؟ 1329 01:11:02,015 --> 01:11:03,265 >> رسید [نامفهوم]؟ 1330 01:11:03,265 --> 01:11:05,928 1331 01:11:05,928 --> 01:11:12,670 >> LUCAS: بنابراین او درخواست آنچه که تفاوت بین انجام 1332 01:11:12,670 --> 01:11:14,000 این یا انجام malloc. 1333 01:11:14,000 --> 01:11:17,550 یکی از تفاوت این است که آرایه هوشمند 3 است ایجاد 1334 01:11:17,550 --> 01:11:19,260 آرایه در پشته. 1335 01:11:19,260 --> 01:11:23,080 و وقتی که من انجام malloc آن، ایجاد در پشته. 1336 01:11:23,080 --> 01:11:25,250 آیا این را حس؟ 1337 01:11:25,250 --> 01:11:28,870 >> پس چگونه malloc در واقع کار می کند؟ 1338 01:11:28,870 --> 01:11:32,245 پس چرا ما حتی نیاز به استفاده از malloc؟ 1339 01:11:32,245 --> 01:11:35,730 1340 01:11:35,730 --> 01:11:39,700 نوع کامپایلر شما از چهره های همه متغیرهای که شما اعلام کرد. 1341 01:11:39,700 --> 01:11:44,040 و او ایجاد فضا برای همه از آنها در پشته. 1342 01:11:44,040 --> 01:11:47,180 بنابراین همه متغیرهای خود را در حال رفتن به جایی در پشته باشد. 1343 01:11:47,180 --> 01:11:49,460 بنابراین در اینجا متغیر های محیط زیست است. 1344 01:11:49,460 --> 01:11:53,850 >> بنابراین اساسا، فضا برای آن متغیر در حافظه است که در اختصاص 1345 01:11:53,850 --> 01:11:55,080 زمان کامپایل. 1346 01:11:55,080 --> 01:11:58,790 پس از آن بدان معنی است که کامپیوتر شما است که تمام آن متغیرها 1347 01:11:58,790 --> 01:11:59,790 از قبل. 1348 01:11:59,790 --> 01:12:02,500 لازم نیست بدانید که چه چیزی ارزش شما در حال رفتن به در آنها قرار داده است. 1349 01:12:02,500 --> 01:12:05,490 اما باید بدانید که چگونه حافظه شما نیاز دارید. 1350 01:12:05,490 --> 01:12:09,380 >> اما در حال حاضر اجازه دهید بگویم که، برای مثال، شما در حال ایجاد یک آرایه یا گرفتن 1351 01:12:09,380 --> 01:12:13,430 رشته ای که شما در حال گرفتن از کاربر. 1352 01:12:13,430 --> 01:12:17,300 چگونه شما نمی دانید که طولانی رشته در حال رفتن به، به عنوان مثال. 1353 01:12:17,300 --> 01:12:20,600 بنابراین شما نمی دانید که دقیقا چه تعداد بلوک حافظه شما اختصاص، درست است؟ 1354 01:12:20,600 --> 01:12:24,120 >> پس از آن شما واقعا به معنی برای شما می گویند قرار 100 حرف می باشد. 1355 01:12:24,120 --> 01:12:26,420 و سپس آنچه در صورتی که کاربر می نویسد 150؟ 1356 01:12:26,420 --> 01:12:27,670 شما در حال رفتن به پیچ شود. 1357 01:12:27,670 --> 01:12:30,160 1358 01:12:30,160 --> 01:12:34,620 >> بنابراین اساسا، شما می توانید مطمئن باشید که چگونه حافظه شما نیاز به اختصاص 1359 01:12:34,620 --> 01:12:35,960 زمانی که شما برنامه را کامپایل. 1360 01:12:35,960 --> 01:12:38,240 شما فقط می دانیم که در زمان اجرا شود. 1361 01:12:38,240 --> 01:12:39,950 به همین دلیل شما باید پشته. 1362 01:12:39,950 --> 01:12:47,610 پس پشته است که به حافظه که شما در تخصیص 1363 01:12:47,610 --> 01:12:50,810 طول مدت برنامه در حال اجرا است. 1364 01:12:50,810 --> 01:12:55,780 >> بنابراین اساسا، هنگامی که شما انجام malloc، چه شما در حال انجام است تخصیص حافظه در 1365 01:12:55,780 --> 01:13:00,160 زمان اجرا، به این معنی که شما تصمیم گیری درست در آن لحظه که شما 1366 01:13:00,160 --> 01:13:02,670 باید که حافظه داشته باشد. 1367 01:13:02,670 --> 01:13:04,210 به طوری که زمانی که شما آن را به تخصیص. 1368 01:13:04,210 --> 01:13:06,430 آیا این را حس؟ 1369 01:13:06,430 --> 01:13:11,690 >> بنابراین به یاد داشته باشید، پشته است متغیر که در زمان کامپایل ایجاد می شود. 1370 01:13:11,690 --> 01:13:14,560 و پس از آن پشته است متغیر که ایجاد شده تا شما را به 1371 01:13:14,560 --> 01:13:15,600 با malloc، به عنوان مثال. 1372 01:13:15,600 --> 01:13:16,850 >> رسید [نامفهوم]؟ 1373 01:13:16,850 --> 01:13:19,179 1374 01:13:19,179 --> 01:13:24,340 >> LUCAS: پس GetString است رفتن به malloc تماس بگیرید. 1375 01:13:24,340 --> 01:13:26,710 اجازه بدهید در مورد malloc صحبت می کنید، و I GetString توضیح خواهیم داد. 1376 01:13:26,710 --> 01:13:32,000 بنابراین malloc همان چیزی است به عنوان تخصیص حافظه. 1377 01:13:32,000 --> 01:13:34,600 بنابراین آن را به اختصاص حافظه در پشته. 1378 01:13:34,600 --> 01:13:40,010 و آن را به بازگشت به یک اشاره گر به که در آن است که حافظه اختصاص داده شده بود. 1379 01:13:40,010 --> 01:13:43,090 >> بنابراین، هنگامی که شما do-- 1380 01:13:43,090 --> 01:13:44,910 در اینجا برای example-- 1381 01:13:44,910 --> 01:13:45,830 نفر اشاره گر ستاره. 1382 01:13:45,830 --> 01:13:50,520 و سپس اشاره گر برابر با malloc اندازه اینچ برابر 10. 1383 01:13:50,520 --> 01:13:52,110 من ایجاد یک اشاره گر. 1384 01:13:52,110 --> 01:13:59,020 و سپس من اختصاص که اشاره گر به ارزش اشاره گر که malloc 1385 01:13:59,020 --> 01:13:59,680 من به. 1386 01:13:59,680 --> 01:14:04,150 >> بنابراین من درخواست malloc می تواند به شما اختصاص فضا برای 10 عدد صحیح. 1387 01:14:04,150 --> 01:14:05,390 این چیزی است که آن را گفت. 1388 01:14:05,390 --> 01:14:09,020 و malloc به من می دهد به عقب اشاره گر به آن محل. 1389 01:14:09,020 --> 01:14:11,460 را حس؟ 1390 01:14:11,460 --> 01:14:12,270 OK. 1391 01:14:12,270 --> 01:14:17,940 من و GetString است، اساسا، انجام تماس بگیرید به malloc بنابراین شما می توانید اختصاص 1392 01:14:17,940 --> 01:14:21,680 حافظه در زمان اجرا. 1393 01:14:21,680 --> 01:14:26,460 >> همیشه به یاد داشته باشید برای تهی بررسی چرا که malloc است که به بازگشت تهی 1394 01:14:26,460 --> 01:14:28,200 اگر آن را می تواند به حافظه اختصاص دهد. 1395 01:14:28,200 --> 01:14:31,660 اجازه دهید بگویم که شما برای یک مسخره بپرسید مقدار حافظه. 1396 01:14:31,660 --> 01:14:33,950 کامپیوتر شما نخواهد بود قادر به تخصیص که بسیار. 1397 01:14:33,950 --> 01:14:36,410 >> بنابراین malloc فقط رفتن برای بازگشت به صفر. 1398 01:14:36,410 --> 01:14:42,210 پس همیشه به یاد داشته باشید در صورتی که برای بررسی اشاره گر است که شما از malloc رو است 1399 01:14:42,210 --> 01:14:45,640 تهی یا نه به این دلیل، اگر چنین باشد، شما ممکن است شود هرگاه یک اشاره گر و 1400 01:14:45,640 --> 01:14:48,340 ایجاد گسل طرف. 1401 01:14:48,340 --> 01:14:50,930 و در نهایت، فراموش نکنید حافظه آزاد خود را. 1402 01:14:50,930 --> 01:14:57,800 1403 01:14:57,800 --> 01:15:00,560 >> Malloc ایجاد حافظه در پشته. 1404 01:15:00,560 --> 01:15:03,436 و شما باید برای آزاد کردن حافظه قبل از برنامه به پایان می رسد. 1405 01:15:03,436 --> 01:15:05,370 OK، که همه برای من. 1406 01:15:05,370 --> 01:15:07,900 با عرض پوزش، راب. 1407 01:15:07,900 --> 01:15:07,950 تشکر. 1408 01:15:07,950 --> 01:15:09,878 >> [تشویق حضار] 1409 01:15:09,878 --> 01:15:12,679 >> LUCAS: هر گونه سؤال آخرین قبل از راب می آید؟ 1410 01:15:12,679 --> 01:15:13,138 نه؟ 1411 01:15:13,138 --> 01:15:13,597 آره؟ 1412 01:15:13,597 --> 01:15:15,892 >> رسید من نمی بینم این یک آنلاین. 1413 01:15:15,892 --> 01:15:17,269 آیا شما آن را آپلود رتبهدهی نشده است؟ 1414 01:15:17,269 --> 01:15:19,106 >> LUCAS: من فکر می کنم دیو است آپلود آن را به زودی. 1415 01:15:19,106 --> 01:15:19,880 >> DAVE: این خواهید ارسال شود. 1416 01:15:19,880 --> 01:15:20,310 >> LUCAS: این آنلاین خواهید بود. 1417 01:15:20,310 --> 01:15:21,175 >> رسید این است. 1418 01:15:21,175 --> 01:15:22,090 >> LUCAS: این خبر؟ 1419 01:15:22,090 --> 01:15:23,157 OK. 1420 01:15:23,157 --> 01:15:23,644 آره؟ 1421 01:15:23,644 --> 01:15:27,053 >> رسید [نامفهوم]؟ 1422 01:15:27,053 --> 01:15:30,285 >> LUCAS: بله، شما باید آزاد کردن همه حافظه است که در پشته قرار داده است. 1423 01:15:30,285 --> 01:15:31,535 >> رسید [نامفهوم]؟ 1424 01:15:31,535 --> 01:15:34,518 1425 01:15:34,518 --> 01:15:36,160 >> LUCAS: بله. 1426 01:15:36,160 --> 01:15:39,980 هر زمان که شما یک malloc فرهنگ، شما باید یک فرهنگ آزاد 1427 01:15:39,980 --> 01:15:42,640 بعد از اینکه شما را متوقف و با استفاده از آن متغیر. 1428 01:15:42,640 --> 01:15:44,800 بنابراین malloc و آزاد هستند همیشه با هم. 1429 01:15:44,800 --> 01:15:45,410 بهترین دوستان خود. 1430 01:15:45,410 --> 01:15:46,720 آره. 1431 01:15:46,720 --> 01:15:47,970 راب؟ 1432 01:15:47,970 --> 01:15:55,595 1433 01:15:55,595 --> 01:15:56,850 >> ROB: من به سرعت می روم. 1434 01:15:56,850 --> 01:16:00,466 و همچنین ویدئو را قرار داده تا. 1435 01:16:00,466 --> 01:16:01,716 من میکروفون در. 1436 01:16:01,716 --> 01:16:24,060 1437 01:16:24,060 --> 01:16:26,230 >> OK، بنابراین در هفته پنج مسائل. 1438 01:16:26,230 --> 01:16:27,970 اولین چیزی که ما باید پشته است. 1439 01:16:27,970 --> 01:16:33,390 بنابراین به یاد داشته باشید که فقط یک پشته وجود دارد فریم در هر فراخوانی تابع فعال است. 1440 01:16:33,390 --> 01:16:34,710 خواهیم دید که در یک ثانیه. 1441 01:16:34,710 --> 01:16:37,850 و همچنین به یاد داشته باشید آنچه که واقعا می رود در هر قاب پشته در حال رفتن به 1442 01:16:37,850 --> 01:16:41,880 متغیرهای محلی از توابع ما، استدلال است که به تصویب ما 1443 01:16:41,880 --> 01:16:43,880 توابع، همراه با یک زن و شوهر چیزهای دیگری که واقعا 1444 01:16:43,880 --> 01:16:45,260 نیاز به نگرانی در مورد. 1445 01:16:45,260 --> 01:16:50,950 >> بنابراین در اینجا یک مثال برنامه که در آن است، اخطار، اصلی است printfing بازگشت 1446 01:16:50,950 --> 01:16:52,830 ارزش مواد غذایی 4. 1447 01:16:52,830 --> 01:16:57,930 مواد غذایی فقط رفتن برای بازگشت به ارزش نوار 4 کاما از هم 6. 1448 01:16:57,930 --> 01:17:02,380 و نوار است که به مجموعه ای از محلی متغیر n تا 4 برابر 6 برابر است. 1449 01:17:02,380 --> 01:17:03,920 و سپس بازگشت n است. 1450 01:17:03,920 --> 01:17:09,130 >> بنابراین اجازه دهید در پشته در سراسر نگاه تکرار واقعی از این برنامه است. 1451 01:17:09,130 --> 01:17:10,500 پس پایین پشته ما وجود دارد. 1452 01:17:10,500 --> 01:17:12,620 به یاد داشته باشید که پشته رشد می کند. 1453 01:17:12,620 --> 01:17:15,370 بنابراین در پایین پشته ما، ما یک قاب پشته برای اصلی. 1454 01:17:15,370 --> 01:17:17,000 هنگامی که برنامه شروع می شود، اصلی همیشه به در می شود 1455 01:17:17,000 --> 01:17:18,560 پایین پشته است. 1456 01:17:18,560 --> 01:17:20,880 >> و آنچه که در درون ما پشته قاب برای اصلی؟ 1457 01:17:20,880 --> 01:17:23,810 بنابراین حتی اگر هیچ محلی وجود دارد متغیرهای اصلی، مثل من گفت: قبل از، 1458 01:17:23,810 --> 01:17:29,670 ما تعداد آنها و rgv مصرف کردن فضای در داخل قاب پشته اصلی. 1459 01:17:29,670 --> 01:17:33,260 بنابراین اصلی در حال حاضر به رفتن تابع تولی تماس بگیرید. 1460 01:17:33,260 --> 01:17:35,125 و این به معنای مواد غذایی است که به دریافت قاب پشته خودش را دارد. 1461 01:17:35,125 --> 01:17:36,970 >> بنابراین در حال حاضر ما در داخل هستیم صنایع غذایی تابع. 1462 01:17:36,970 --> 01:17:38,610 و آنچه نیاز به در قاب پشته مواد غذایی است؟ 1463 01:17:38,610 --> 01:17:41,100 خوب، مواد غذایی دارای یک نفر بحث. 1464 01:17:41,100 --> 01:17:45,440 و n تا 4 برابر است از آن چیزی است اصلی به عنوان آرگومان مواد غذایی در عبور. 1465 01:17:45,440 --> 01:17:48,490 >> بنابراین در حال حاضر مواد غذایی در حال رفتن به نوار تماس بگیرید. 1466 01:17:48,490 --> 01:17:52,070 چه نوار از رفتن به داخل از قاب پشته خود را؟ 1467 01:17:52,070 --> 01:17:55,610 این عدد به 4 سال تا شش برابر. 1468 01:17:55,610 --> 01:17:58,540 این نیست که ما در حال رفتن به در قاب پشته به دلیل نوار 1469 01:17:58,540 --> 01:18:00,580 همچنین دارای یک متغیر نفر محلی است. 1470 01:18:00,580 --> 01:18:03,370 و n ما در حال رفتن به راه تا 24 برابر است. 1471 01:18:03,370 --> 01:18:05,750 >> بنابراین در حال حاضر نوار است که برای بازگشت به n است. 1472 01:18:05,750 --> 01:18:09,300 بنابراین نوار است از بازگشت به 24 صنایع غذایی قاب پشته. 1473 01:18:09,300 --> 01:18:12,560 و از آنجایی که نوار در حال حاضر از بازگشت، که به این معنی است که ما در حال ظاهر قاب پشته 1474 01:18:12,560 --> 01:18:14,250 برای نوار از پشته. 1475 01:18:14,250 --> 01:18:18,430 بنابراین تمام حافظه است که نوار بوده است با استفاده از در حال حاضر در خارج از پشته. 1476 01:18:18,430 --> 01:18:21,550 >> در حال حاضر، تولی نیز رفتن برای بازگشت به 24 به اصلی. 1477 01:18:21,550 --> 01:18:25,470 بنابراین در حال حاضر که مواد غذایی باز می گردد، در حافظه که مواد غذایی با استفاده از در 'آن شد 1478 01:18:25,470 --> 01:18:27,550 قاب پشته نیز رفته است. 1479 01:18:27,550 --> 01:18:29,660 و در حال حاضر، اصلی است که به تابع () printf تماس بگیرید. 1480 01:18:29,660 --> 01:18:31,660 بنابراین تابع () printf فقط تابع دیگری است. 1481 01:18:31,660 --> 01:18:35,320 هنگامی که ما تابع () printf تماس بگیرید، آن را به یکی دیگر از قاب پشته برای تابع () printf 1482 01:18:35,320 --> 01:18:36,470 فراخوانی تابع. 1483 01:18:36,470 --> 01:18:37,990 >> چیزی که ما عبور می کنند تابع () printf؟ 1484 01:18:37,990 --> 01:18:40,090 این چیزی است که برای رفتن در قاب پشته آن است. 1485 01:18:40,090 --> 01:18:44,970 حداقل، ما در حال عبور که درصد من بک اسلش n و 1486 01:18:44,970 --> 01:18:47,180 استدلال 24. 1487 01:18:47,180 --> 01:18:50,370 این ممکن است بیشتر باید در آن قاب پشته است اگر تابع () printf اتفاق می افتد باید با استفاده از 1488 01:18:50,370 --> 01:18:51,200 متغیرهای محلی. 1489 01:18:51,200 --> 01:18:51,920 ما نمی دانیم. 1490 01:18:51,920 --> 01:18:53,810 >> اما همه که می رود در تابع () printf را پشته قاب. 1491 01:18:53,810 --> 01:18:55,740 آن را برای اجرای تابع () printf. 1492 01:18:55,740 --> 01:18:56,830 سپس تابع () printf انجام است. 1493 01:18:56,830 --> 01:18:57,820 این باز خواهد گشت. 1494 01:18:57,820 --> 01:18:58,960 در نهایت، اصلی انجام شده است. 1495 01:18:58,960 --> 01:18:59,860 بخش اصلی باز خواهد گشت. 1496 01:18:59,860 --> 01:19:02,020 و پس از آن برنامه ما انجام شده است. 1497 01:19:02,020 --> 01:19:02,480 آره؟ 1498 01:19:02,480 --> 01:19:04,505 >> رسید آیا شما از دیدن [نامفهوم] 1499 01:19:04,505 --> 01:19:05,900 استدلال [نامفهوم] 1500 01:19:05,900 --> 01:19:06,830 پارامترهای؟ 1501 01:19:06,830 --> 01:19:09,970 >> ROB: بنابراین یک تفاوت ظریف وجود دارد بین بحث ها و پارامترها. 1502 01:19:09,970 --> 01:19:14,400 و واقعا، در صحبت های مشترک، مردم تمایل دارند به فقط آنها را به مخلوط کردن تمام وقت. 1503 01:19:14,400 --> 01:19:17,550 اما پارامترهای رسمی نام از چیزهایی که. 1504 01:19:17,550 --> 01:19:20,180 >> بنابراین تعداد آنها و argv را می پارامترهای اصلی. 1505 01:19:20,180 --> 01:19:23,440 استدلال همان چیزی است که شما در واقع عبور در به عنوان کسانی که پارامتر. 1506 01:19:23,440 --> 01:19:28,340 پس وقتی که من مواد غذایی از 4، 4 تماس بگیرید استدلال من در عبور است. 1507 01:19:28,340 --> 01:19:31,460 و n پارامتر، در داخل مواد غذایی، طول می کشد در ارزش 4 1508 01:19:31,460 --> 01:19:32,880 از 4 استدلال بود. 1509 01:19:32,880 --> 01:19:35,826 >> رسید [نامفهوم]؟ 1510 01:19:35,826 --> 01:19:37,880 >> ROB: نفر یک متغیر محلی به نوار است. 1511 01:19:37,880 --> 01:19:41,420 1512 01:19:41,420 --> 01:19:44,960 نفر هنوز محلی برای غذ، اما این پارامتر به مواد غذایی است. 1513 01:19:44,960 --> 01:19:48,190 این یک متغیر محلی نیست. 1514 01:19:48,190 --> 01:19:48,546 آره؟ 1515 01:19:48,546 --> 01:19:51,180 >> رسید [نامفهوم]؟ 1516 01:19:51,180 --> 01:19:55,400 >> ROB: مواد غذایی است که فقط خواستار نوار و بازگشت هر چه بازده میاره. 1517 01:19:55,400 --> 01:19:56,786 >> رسید [نامفهوم]؟ 1518 01:19:56,786 --> 01:19:59,591 >> ROB: آره، فقط برای دیدن چند پشته قاب. 1519 01:19:59,591 --> 01:20:00,082 آره؟ 1520 01:20:00,082 --> 01:20:03,519 >> رسید: چرا مواد غذایی نامیده می شد قبل از تابع () printf؟ 1521 01:20:03,519 --> 01:20:05,920 >> ROB: چرا مواد غذایی قبل از تابع () printf نامیده می شد؟ 1522 01:20:05,920 --> 01:20:10,740 بنابراین من می تواند داشته باشد، به جای آن، چیزی است که انجام می شود برای مثال، int x را برابر مواد غذایی از 4 1523 01:20:10,740 --> 01:20:12,980 و آنگاه x چاپ شده است. 1524 01:20:12,980 --> 01:20:17,900 اما در عوض، من ترکیب تابع تماس بگیرید به بحث تابع () printf. 1525 01:20:17,900 --> 01:20:23,670 >> اما توجه کنید که ما نمی توانیم در واقع اجرا از تماس به تابع () printf تا زمانی که ما 1526 01:20:23,670 --> 01:20:25,610 شکل چه مواد غذایی از 4 است. 1527 01:20:25,610 --> 01:20:27,480 بنابراین ما قصد داریم به بررسی این. 1528 01:20:27,480 --> 01:20:32,504 و فقط یک بار که انجام می رویم به بازگشت و ارزیابی این. 1529 01:20:32,504 --> 01:20:32,990 آره؟ 1530 01:20:32,990 --> 01:20:37,364 >> رسید از آنجا که هر دو نوار [نامفهوم] 1531 01:20:37,364 --> 01:20:41,738 ارزش، چرا ما [نامفهوم] ندارد؟ 1532 01:20:41,738 --> 01:20:44,400 >> ROB: آنها کاملا باید اعضای هیات باشد. 1533 01:20:44,400 --> 01:20:46,260 این بود بیش از گرفتار نیست پاس های متعدد. 1534 01:20:46,260 --> 01:20:49,010 پس از آن باید نوار هوشمند و هوشمند است مواد غذایی از هر دوی این 1535 01:20:49,010 --> 01:20:50,460 در حال بازگشت به اعداد صحیح. 1536 01:20:50,460 --> 01:20:54,214 از درجه اعتبار ساقط است تنها در صورتی که قصد برای بازگشت به ارزش های واقعی. 1537 01:20:54,214 --> 01:20:54,692 آره؟ 1538 01:20:54,692 --> 01:20:58,038 >> رسید اگر شما تا به حال یک خط بالا بازگشت، [نامفهوم]؟ 1539 01:20:58,038 --> 01:21:01,862 1540 01:21:01,862 --> 01:21:03,730 >> ROB: A خط بالا بازگشت؟ 1541 01:21:03,730 --> 01:21:04,410 >> رسید آره. 1542 01:21:04,410 --> 01:21:10,780 مانند اگر شما printf و [نامفهوم] انجام داد، به چاپ آن دو بار؟ 1543 01:21:10,780 --> 01:21:12,992 >> ROB: بنابراین در داخل از کفش؟ 1544 01:21:12,992 --> 01:21:15,945 اگر ما یک تابع () printf را در اینجا به حال؟ 1545 01:21:15,945 --> 01:21:16,750 >> رسید آره. 1546 01:21:16,750 --> 01:21:19,510 >> ROB: بنابراین اگر ما حق تابع () printf به حال در اینجا، آن را یک بار چاپ. 1547 01:21:19,510 --> 01:21:23,400 از آنجا که ما خواستار غذ یک بار سمت راست در اینجا، پس از آن خواهیم تابع () printf رسید. 1548 01:21:23,400 --> 01:21:24,620 سپس می کنیم نوار تماس بگیرید. 1549 01:21:24,620 --> 01:21:25,710 و پس از آن مواد غذایی باز خواهد گشت. 1550 01:21:25,710 --> 01:21:26,275 و این آن است. 1551 01:21:26,275 --> 01:21:30,985 ما تنها روبرو می شوند تابع () printf یک بار. 1552 01:21:30,985 --> 01:21:31,482 آره؟ 1553 01:21:31,482 --> 01:21:32,973 >> رسید [نامفهوم] 1554 01:21:32,973 --> 01:21:37,950 تابع () printf تماس مواد غذایی از آنجا که ما اولین هستیم تماس printf و پس از آن ما در حال عبور 1555 01:21:37,950 --> 01:21:38,580 استدلال. 1556 01:21:38,580 --> 01:21:40,960 >> ROB: بنابراین در تئوری، نه تابع () printf تماس مواد غذایی؟ 1557 01:21:40,960 --> 01:21:42,220 بنابراین هیچ. 1558 01:21:42,220 --> 01:21:47,360 فقط برای اینکه ج در حال رفتن به اجرای این چیزها است، قبل از ما می توانیم 1559 01:21:47,360 --> 01:21:49,800 فراخوانی تابع، همه از استدلال به تابع به 1560 01:21:49,800 --> 01:21:51,600 به طور کامل بررسی شده است. 1561 01:21:51,600 --> 01:21:53,540 بنابراین این به طور کامل مورد بررسی قرار؟ 1562 01:21:53,540 --> 01:21:54,610 بله، آن را تنها یک رشته است. 1563 01:21:54,610 --> 01:21:55,480 این فقط یک ارزش است. 1564 01:21:55,480 --> 01:21:57,200 >> سپس ما را به طور کامل داشته باشد ارزیابی این. 1565 01:21:57,200 --> 01:21:59,720 به محض این که انجام شده است، در حال حاضر تمام استدلال آن ها بررسی شده است. 1566 01:21:59,720 --> 01:22:01,982 و در حال حاضر ما می توانیم را تماس به تابع () printf. 1567 01:22:01,982 --> 01:22:02,478 آره؟ 1568 01:22:02,478 --> 01:22:03,966 >> رسید یک سوال. 1569 01:22:03,966 --> 01:22:06,942 اگر شما یک تابع از درجه اعتبار ساقط، باید شما نقطه و ویرگول بازگشت؟ 1570 01:22:06,942 --> 01:22:09,910 >> ROB: شما می توانم در یک نقطه و ویرگول بازگشت ندارد اگر شما یک تابع از درجه اعتبار ساقط. 1571 01:22:09,910 --> 01:22:13,370 1572 01:22:13,370 --> 01:22:14,780 OK. 1573 01:22:14,780 --> 01:22:15,830 بنابراین در حال حاضر برخی از مسائل پشته. 1574 01:22:15,830 --> 01:22:19,640 پس پشته این است که چگونه ما قصد داریم برای مقابله با مدیریت حافظه پویا. 1575 01:22:19,640 --> 01:22:23,100 و این به طور مستقیم با تضاد پشته که ما تماس بگیرید به صورت خودکار 1576 01:22:23,100 --> 01:22:24,100 مدیریت حافظه. 1577 01:22:24,100 --> 01:22:27,140 >> بنابراین در پشته، هرگز به شما واقعا برای مقابله با توجه به متغیرهای محلی 1578 01:22:27,140 --> 01:22:30,400 در حال تحت فشار قرار دادند و ظهور کردن همه این قاب پشته و تمام چیزهای که. 1579 01:22:30,400 --> 01:22:31,070 شما لازم نیست که در مورد آن نگران باشید. 1580 01:22:31,070 --> 01:22:32,070 این خودکار. 1581 01:22:32,070 --> 01:22:36,990 پس پشته کتابچه راهنمای کاربر. 1582 01:22:36,990 --> 01:22:38,070 و [نامفهوم] 1583 01:22:38,070 --> 01:22:41,260 می آید از این توابع malloc و رایگان. 1584 01:22:41,260 --> 01:22:43,550 >> بنابراین در اینجا برنامه دیگری است. 1585 01:22:43,550 --> 01:22:47,145 اکنون ما در حال انجام است mallocing یک عدد صحیح. 1586 01:22:47,145 --> 01:22:49,360 ما آن را ذخیره سازی در ستاره ایکس. 1587 01:22:49,360 --> 01:22:52,520 البته، ما باید برای بررسی برای دیدن اگر x صفر است. 1588 01:22:52,520 --> 01:22:56,400 سپس ما قصد داریم به اون چه ایکس با اشاره به 50. 1589 01:22:56,400 --> 01:23:00,350 1590 01:23:00,350 --> 01:23:03,260 چاپ آنچه ایکس است با اشاره به، چاپ x، و پس از آن آزاد ایکس. 1591 01:23:03,260 --> 01:23:08,920 >> پس چگونه است که این در واقع رفتن به نگاه اگر ما در پشته و heap از ما نگاه می کنید؟ 1592 01:23:08,920 --> 01:23:10,950 بنابراین ما دوباره شروع می شود. 1593 01:23:10,950 --> 01:23:12,580 پایین پشته ما را به عنوان قبل از. 1594 01:23:12,580 --> 01:23:15,930 به یاد داشته باشید که تو پشته به طور مستقیم مخالفت پشته؟ 1595 01:23:15,930 --> 01:23:18,850 بنابراین ما در حال رفتن به بالای پشته ما وجود دارد. 1596 01:23:18,850 --> 01:23:22,590 >> بنابراین پایین پشته ما، ما قاب پشته ما برای اصلی. 1597 01:23:22,590 --> 01:23:28,000 این فضا برای تعداد آنها، argv را، و ما در حال حاضر یک متغیر x با مقدار، و این 1598 01:23:28,000 --> 01:23:30,030 یک ستاره بین المللی است. 1599 01:23:30,030 --> 01:23:32,240 بنابراین ما قصد داریم به تکرار از طریق این برنامه. 1600 01:23:32,240 --> 01:23:34,420 اولین چیزی که ما باید است یک تماس به malloc. 1601 01:23:34,420 --> 01:23:36,250 >> بنابراین ما در حال ساخت یک تماس به malloc. 1602 01:23:36,250 --> 01:23:37,100 Malloc یک تابع است. 1603 01:23:37,100 --> 01:23:38,770 آن را به یک قاب پشته. 1604 01:23:38,770 --> 01:23:40,180 چیزی که ما عبور به malloc؟ 1605 01:23:40,180 --> 01:23:41,610 رفتن که به داخل از قاب پشته. 1606 01:23:41,610 --> 01:23:45,130 ما در حال عبور از اندازه n که 4. 1607 01:23:45,130 --> 01:23:49,700 به طوری که به malloc منتقل می شود. 1608 01:23:49,700 --> 01:23:50,910 >> چه malloc انجام دهید؟ 1609 01:23:50,910 --> 01:23:53,820 این به ما کاغذ برداشته برخی از فضای در پشته. 1610 01:23:53,820 --> 01:23:55,320 بنابراین ما در حال رفتن به رفتن به پشته. 1611 01:23:55,320 --> 01:23:57,990 و ما در حال رفتن به گرفتن 4 بایت از پشته. 1612 01:23:57,990 --> 01:24:01,500 بنابراین اجازه دهید فقط می دهد که یک آدرس دلخواه. 1613 01:24:01,500 --> 01:24:06,680 0x123 فقط وانمود کرد که یک آدرس این است که در پشته. 1614 01:24:06,680 --> 01:24:12,300 >> پس چه شده است در واقع در داخل آن منطقه حافظه به آدرس Ox123؟ 1615 01:24:12,300 --> 01:24:13,080 زباله. 1616 01:24:13,080 --> 01:24:15,270 بنابراین ما هر چیزی را در آن ذخیره شده است. 1617 01:24:15,270 --> 01:24:18,830 بنابراین تا آنجا که ما می دانیم، آن می تواند هر چیزی. 1618 01:24:18,830 --> 01:24:20,560 شما باید فرض کنید آن صفر است. 1619 01:24:20,560 --> 01:24:23,870 این به احتمال زیاد نمی صفر است. 1620 01:24:23,870 --> 01:24:26,260 >> بازده بنابراین در حال حاضر malloc. 1621 01:24:26,260 --> 01:24:28,020 و چه کار می کنیم زمانی که بازگشت malloc؟ 1622 01:24:28,020 --> 01:24:29,800 ما مجموعه ای آنچه در آن می گرداند. 1623 01:24:29,800 --> 01:24:32,290 ما مجموعه ای ایکس برابر آنچه از آن بازگشت است. 1624 01:24:32,290 --> 01:24:33,690 بنابراین چه چیزی است که از بازگشت؟ 1625 01:24:33,690 --> 01:24:38,150 این بازگشت 0x123 از آن است که آدرس بلوک از حافظه است که آن را 1626 01:24:38,150 --> 01:24:40,850 فقط در پشته اختصاص داده است. 1627 01:24:40,850 --> 01:24:47,160 >> بنابراین بازگشت 0x123 X در حال حاضر رفتن به تنظیم شود به 0x123 برابر آن، pictorially، 1628 01:24:47,160 --> 01:24:52,940 ما اغلب به عنوان ایکس داشتن واقعی رسم فلش اشاره به آن بلوک. 1629 01:24:52,940 --> 01:24:55,820 اما ایکس است فقط ذخیره سازی آن آدرس. 1630 01:24:55,820 --> 01:24:58,670 بنابراین در حال حاضر ما باید برای بررسی اگر x صفر است. 1631 01:24:58,670 --> 01:24:59,120 این تهی نیست. 1632 01:24:59,120 --> 01:25:02,170 ما وانمود می کرد که malloc موفق شد. 1633 01:25:02,170 --> 01:25:04,950 >> بنابراین در حال حاضر ستاره ایکس برابر با 50. 1634 01:25:04,950 --> 01:25:08,450 بنابراین ستاره به یاد این معنی رفتن به آن آدرس. 1635 01:25:08,450 --> 01:25:12,700 بنابراین 0x123 ما قصد داریم به رفتن به آن آدرس. 1636 01:25:12,700 --> 01:25:14,660 به طوری که ما به ارمغان می آورد وجود دارد. 1637 01:25:14,660 --> 01:25:16,310 در آن آدرس چه کار می کنیم؟ 1638 01:25:16,310 --> 01:25:19,020 ما در حال ذخیره سازی 50. 1639 01:25:19,020 --> 01:25:22,500 >> بنابراین پس از این خط، که چه چیزی است همه چیز به مانند نگاه کنید. 1640 01:25:22,500 --> 01:25:24,640 بنابراین در حال حاضر این دیگر زباله وجود دارد. 1641 01:25:24,640 --> 01:25:28,910 در حال حاضر ما می دانیم که 50 است در آن آدرس خاص به دلیل 1642 01:25:28,910 --> 01:25:32,410 ما آن را به مجموعه. 1643 01:25:32,410 --> 01:25:32,790 OK؟ 1644 01:25:32,790 --> 01:25:34,370 بنابراین در حال حاضر ما در حال رفتن برای چاپ ج. 1645 01:25:34,370 --> 01:25:38,490 >> بنابراین برای اولین بار ما قصد داریم تا در آن چاپ ستاره ایکس. 1646 01:25:38,490 --> 01:25:39,640 پس چه ستاره x است؟ 1647 01:25:39,640 --> 01:25:44,300 باز هم، ستاره ایکس به معنی رفتن به چیزی که x با اشاره به. 1648 01:25:44,300 --> 01:25:47,140 بنابراین ایکس است ذخیره سازی 0x123 برو به که. 1649 01:25:47,140 --> 01:25:48,490 ما 50. 1650 01:25:48,490 --> 01:25:50,540 پس تابع f که چاپ. 1651 01:25:50,540 --> 01:25:54,900 و این بدان معناست که آن را به چاپ 50. 1652 01:25:54,900 --> 01:25:56,850 و پس از آن که باز می گردد. 1653 01:25:56,850 --> 01:25:58,340 >> و بعد ما printf دوم. 1654 01:25:58,340 --> 01:25:59,370 ما در حال حاضر درصد بود. 1655 01:25:59,370 --> 01:26:01,680 اگر شما آن را ندیده، که چقدر شما یک اشاره گر را چاپ کنید. 1656 01:26:01,680 --> 01:26:04,960 بنابراین ما باید درصد من، درصد (f) و تمام کسانی که در حال حاضر. 1657 01:26:04,960 --> 01:26:07,160 بنابراین درصد فسفر، چاپ یک اشاره گر. 1658 01:26:07,160 --> 01:26:08,920 >> بنابراین x یک اشاره گر است. 1659 01:26:08,920 --> 01:26:13,440 بنابراین اگر ما می خواهیم به چاپ ایکس خود را، ما در حال چاپ آنچه است که در واقع در داخل 1660 01:26:13,440 --> 01:26:19,220 x، است که 0x123 بنابراین اولین چاپ ج است که برای چاپ 50. 1661 01:26:19,220 --> 01:26:23,620 چاپ دوم ج در جریان است به چاپ 0x123 آره؟ 1662 01:26:23,620 --> 01:26:27,460 >> رسید آیا شما استفاده از درصد x به چاپ یک اشاره گر؟ 1663 01:26:27,460 --> 01:26:31,200 >> ROB: پس شما با استفاده از درصد x به چاپ یک اشاره گر؟ 1664 01:26:31,200 --> 01:26:38,350 بنابراین شما می توانید اما درصد x است فقط، به طور کلی، برای مثل اگر شما برخی 1665 01:26:38,350 --> 01:26:40,325 عدد صحیح و شما می خواهید برای چاپ آن را به عنوان مبنای شانزده. 1666 01:26:40,325 --> 01:26:43,250 1667 01:26:43,250 --> 01:26:44,880 که چقدر شما انجام دهد. 1668 01:26:44,880 --> 01:26:47,160 >> در حالی که، درصد د را چاپ به عنوان دهدهی. 1669 01:26:47,160 --> 01:26:50,310 این بود که ما از گرفتن درصد د. من فقط عدد صحیح است. 1670 01:26:50,310 --> 01:26:52,690 درصد فسفر است به طور خاص برای اشاره گر. 1671 01:26:52,690 --> 01:26:54,060 >> بنابراین x یک اشاره گر است. 1672 01:26:54,060 --> 01:26:56,360 ما می خواهیم به استفاده از درصد ص. 1673 01:26:56,360 --> 01:26:57,937 اما درصد ایکس می تواند کار کند. 1674 01:26:57,937 --> 01:26:58,414 آره؟ 1675 01:26:58,414 --> 01:26:59,664 >> رسید [نامفهوم]؟ 1676 01:26:59,664 --> 01:27:04,138 1677 01:27:04,138 --> 01:27:05,388 >> ROB: آره. 1678 01:27:05,388 --> 01:27:07,870 1679 01:27:07,870 --> 01:27:13,440 حداقل برای این call-- بنابراین من آن را در اینجا را شامل نمی شود. 1680 01:27:13,440 --> 01:27:19,850 اما این دو استدلال لزوما در داخل این قاب پشته 1681 01:27:19,850 --> 01:27:23,040 همراه با هر متغیر محلی تابع () printf اتفاق می افتد باید با استفاده از. 1682 01:27:23,040 --> 01:27:27,020 و پس از آن تماس بعدی به تابع () printf اکنون در داخل تابع () printf قاب پشته است 1683 01:27:27,020 --> 01:27:33,960 درصد فسفر بک اسلش n و هر چه مقدار x است، که 0x123. 1684 01:27:33,960 --> 01:27:34,425 آره؟ 1685 01:27:34,425 --> 01:27:35,675 >> رسید [نامفهوم]؟ 1686 01:27:35,675 --> 01:27:38,145 1687 01:27:38,145 --> 01:27:40,880 >> ROB: این چیزی چاپ که به نظر می رسد مثل این. 1688 01:27:40,880 --> 01:27:41,846 >> رسید [نامفهوم]. 1689 01:27:41,846 --> 01:27:44,510 >> ROB: پس از آن را چاپ به صورت آدرس. 1690 01:27:44,510 --> 01:27:47,003 آن را مانند یک آدرس به نظر می رسد. 1691 01:27:47,003 --> 01:27:47,494 آره؟ 1692 01:27:47,494 --> 01:27:49,458 >> رسید [نامفهوم]؟ 1693 01:27:49,458 --> 01:27:51,075 >> ROB: چرا چیزی است؟ 1694 01:27:51,075 --> 01:27:52,920 >> رسید [نامفهوم]؟ 1695 01:27:52,920 --> 01:27:55,240 >> ROB: چرا این اشاره گر 4 بایت است؟ 1696 01:27:55,240 --> 01:27:58,500 بنابراین یک دسته کامل وجود دارد 0 در مقابل این. 1697 01:27:58,500 --> 01:28:03,740 بنابراین واقعا 0x0000000123. 1698 01:28:03,740 --> 01:28:06,510 در یک سیستم 64 بیتی، وجود دارد خواهد بود یک دسته کامل از صفر است. 1699 01:28:06,510 --> 01:28:11,410 1700 01:28:11,410 --> 01:28:11,900 آره؟ 1701 01:28:11,900 --> 01:28:13,150 >> رسید [نامفهوم]. 1702 01:28:13,150 --> 01:28:17,290 1703 01:28:17,290 --> 01:28:21,130 >> ROB: بنابراین تابع () printf اول رفتن به print-- 1704 01:28:21,130 --> 01:28:21,980 >> رسید [نامفهوم]. 1705 01:28:21,980 --> 01:28:24,420 >> ROB: بله، آن را به چاپ چه ایکس است با اشاره به. 1706 01:28:24,420 --> 01:28:27,030 1707 01:28:27,030 --> 01:28:29,070 ستاره می گوید: این چیست چیزی که با اشاره به. 1708 01:28:29,070 --> 01:28:30,300 چنگ زدن به آن. 1709 01:28:30,300 --> 01:28:31,455 پس چه شده است آن را به اشاره؟ 1710 01:28:31,455 --> 01:28:31,850 50. 1711 01:28:31,850 --> 01:28:32,410 چنگ زدن به آن. 1712 01:28:32,410 --> 01:28:33,390 این چیزی است که ما قصد داریم برای چاپ. 1713 01:28:33,390 --> 01:28:37,020 در حالی که، یک بعدی، ما فقط چاپ ایکس خود را. 1714 01:28:37,020 --> 01:28:38,850 چه در داخل از f؟ 1715 01:28:38,850 --> 01:28:43,710 0x123. 1716 01:28:43,710 --> 01:28:44,500 OK. 1717 01:28:44,500 --> 01:28:46,620 >> و پس از آن، در نهایت، در حال حاضر آزاد است. 1718 01:28:46,620 --> 01:28:48,040 چیزی که ما عبور می کنند را به رایگان؟ 1719 01:28:48,040 --> 01:28:49,470 ما در حال عبور از x است. 1720 01:28:49,470 --> 01:28:52,380 در آن زمان من در واقع نمایش داده آن را در قاب پشته. 1721 01:28:52,380 --> 01:28:56,370 >> بنابراین ما در حال عبور از ارزش 0x123 به رایگان. 1722 01:28:56,370 --> 01:28:59,070 بنابراین در حال حاضر آزاد می داند، همه حق است، من باید تا به پشته 1723 01:28:59,070 --> 01:29:00,050 و رایگان است که حافظه است. 1724 01:29:00,050 --> 01:29:03,920 این با استفاده از دیگر آنچه در آدرس 0x123. 1725 01:29:03,920 --> 01:29:07,010 >> پس آزاد است که برای انتشار که از پشته. 1726 01:29:07,010 --> 01:29:09,490 در حال حاضر پشته ما دوباره خالی است. 1727 01:29:09,490 --> 01:29:11,120 ما هیچ نشت حافظه است. 1728 01:29:11,120 --> 01:29:12,940 در حال حاضر رایگان باز خواهد گشت. 1729 01:29:12,940 --> 01:29:16,130 توجه کنید که ایکس است که هنوز هم 0x123. 1730 01:29:16,130 --> 01:29:18,240 اما در حال حاضر حافظه معتبر نیست. 1731 01:29:18,240 --> 01:29:21,220 1732 01:29:21,220 --> 01:29:23,986 ما باید دیگر ارجاع ایکس. 1733 01:29:23,986 --> 01:29:24,440 آره؟ 1734 01:29:24,440 --> 01:29:27,240 >> رسید از: آیا بازگشت 0 برکنار؟ 1735 01:29:27,240 --> 01:29:28,290 >> ROB: آیا باز شدن 0 برکنار؟ 1736 01:29:28,290 --> 01:29:31,110 بله. 1737 01:29:31,110 --> 01:29:33,950 ما فقط با قرار دادن آن وجود دارد به دلیل ما یک بازگشت یک هوا. 1738 01:29:33,950 --> 01:29:36,830 بنابراین آن را مانند، آره، اجازه می دهد شامل بازگشت 0. 1739 01:29:36,830 --> 01:29:37,310 آره؟ 1740 01:29:37,310 --> 01:29:38,560 >> رسید [نامفهوم]؟ 1741 01:29:38,560 --> 01:29:42,110 1742 01:29:42,110 --> 01:29:45,580 >> ROB: بنابراین پس از آزاد ایکس، چه اتفاقی می افتد اگر ما به ارجاع اشاره گر را امتحان کنید؟ 1743 01:29:45,580 --> 01:29:47,240 این امکان وجود دارد که هیچ چیز را اشتباه می رود. 1744 01:29:47,240 --> 01:29:49,330 این امکان وجود دارد که ما هنوز هم 50. 1745 01:29:49,330 --> 01:29:53,590 >> این امکان وجود دارد، نیز، که حافظه است در حال حاضر برای چیز دیگری استفاده می شود. 1746 01:29:53,590 --> 01:29:57,140 پس از آن رفتار تعریف نشده است. 1747 01:29:57,140 --> 01:30:00,772 و تعریف نشده به معنی هر چیزی می تواند رخ دهد. 1748 01:30:00,772 --> 01:30:01,250 آره؟ 1749 01:30:01,250 --> 01:30:02,500 >> رسید [نامفهوم]؟ 1750 01:30:02,500 --> 01:30:07,942 1751 01:30:07,942 --> 01:30:10,830 >> ROB: نه، بنابراین اگر شما اختصاص x به چیز دیگری. 1752 01:30:10,830 --> 01:30:15,870 بنابراین اگر حق در اینجا ما گفت ایکس برابر چیزی malloc else-- 1753 01:30:15,870 --> 01:30:17,100 malloc event-- اندازه 1754 01:30:17,100 --> 01:30:20,180 پس از آن که بلوک های اصلی از حافظه آزاد است. 1755 01:30:20,180 --> 01:30:21,490 و ما رسما آن را از دست داد. 1756 01:30:21,490 --> 01:30:23,150 که نشت حافظه است. 1757 01:30:23,150 --> 01:30:25,090 ما تمام منابع از دست داده ام به آن بلوک از حافظه است. 1758 01:30:25,090 --> 01:30:26,827 بنابراین هیچ راهی که ما تا کنون می توانید آن را آزاد وجود دارد. 1759 01:30:26,827 --> 01:30:32,074 1760 01:30:32,074 --> 01:30:36,630 OK، بنابراین و سپس بازگشت 0 وسیله انجام می شود. 1761 01:30:36,630 --> 01:30:37,900 >> خوب، سرریز تا پشته. 1762 01:30:37,900 --> 01:30:39,320 این ایده در اینجا چه خبر؟ 1763 01:30:39,320 --> 01:30:41,210 بنابراین به یاد داشته باشید، پشته سرنگون است. 1764 01:30:41,210 --> 01:30:43,480 پشته است تا. 1765 01:30:43,480 --> 01:30:48,000 پس این است که به عنوان مثال از سخنرانی، من فکر می کنم، که در آن اصلی است که فقط رفتن به 1766 01:30:48,000 --> 01:30:51,380 به این تابع تولی، که رفتن تا خود را به صورت بازگشتی فراخوانی بیش از و 1767 01:30:51,380 --> 01:30:52,320 دوباره و دوباره. 1768 01:30:52,320 --> 01:30:55,370 >> پس پشته فریم در حال رفتن به کار دقیقا همان. 1769 01:30:55,370 --> 01:30:58,130 بنابراین ما در حال رفتن به شروع با اصلی به عنوان قاب پشته پایین. 1770 01:30:58,130 --> 01:31:02,000 سپس اصلی است که به مواد غذایی تماس بگیرید، که در حال رفتن به یک قاب پشته. 1771 01:31:02,000 --> 01:31:04,260 >> سپس مواد غذایی است که به مواد غذایی تماس بگیرید دوباره، که برای به دست آوردن 1772 01:31:04,260 --> 01:31:05,500 یکی دیگر از قاب پشته. 1773 01:31:05,500 --> 01:31:08,270 و پس از آن دوباره، و دوباره، و دوباره، و دوباره تا، در نهایت، ما اجرا 1774 01:31:08,270 --> 01:31:09,190 به پشته. 1775 01:31:09,190 --> 01:31:11,990 پس این است که چگونه ما سرریز پشته. 1776 01:31:11,990 --> 01:31:14,910 و در این مرحله، شما SEG گسل. 1777 01:31:14,910 --> 01:31:17,335 یا شما واقعا می SEG قبل از گسل این نقطه اما آره. 1778 01:31:17,335 --> 01:31:19,660 >> رسید از: آیا هسته روگرفت همان گسل SEG؟ 1779 01:31:19,660 --> 01:31:26,140 >> ROB: پس شما تقسیم بندی ببینید هسته گسل انداختند. 1780 01:31:26,140 --> 01:31:28,760 شما دریافت می کنید روگرفت هسته هنگامی که شما SEG گسل. 1781 01:31:28,760 --> 01:31:32,580 و آن را مانند یک روگرفت از تمام است محتویات حافظه خود را به طوری 1782 01:31:32,580 --> 01:31:36,670 که شما می توانید امتحان کنید و شناسایی چرا شما SEG ایراد گرفت. 1783 01:31:36,670 --> 01:31:37,135 آره؟ 1784 01:31:37,135 --> 01:31:38,385 >> رسید [نامفهوم]؟ 1785 01:31:38,385 --> 01:31:40,855 1786 01:31:40,855 --> 01:31:45,460 >> ROB: بنابراین وسیله گسل تقسیم بندی یک سرریز پشته وجود دارد. 1787 01:31:45,460 --> 01:31:47,060 بنابراین نه لزوما. 1788 01:31:47,060 --> 01:31:49,880 گسل تقسیم بندی بدان معنی است که شما حافظه لمس کردن در راه 1789 01:31:49,880 --> 01:31:50,880 شما نباید باشد. 1790 01:31:50,880 --> 01:31:54,750 پس یک راه است که اتفاق می افتد، زمانی که شما پشته سرریز، ما شروع به دست زدن 1791 01:31:54,750 --> 01:31:58,736 حافظه در راه است که ما نباید باشد. 1792 01:31:58,736 --> 01:31:59,208 آره؟ 1793 01:31:59,208 --> 01:32:00,458 >> رسید [نامفهوم]؟ 1794 01:32:00,458 --> 01:32:03,456 1795 01:32:03,456 --> 01:32:05,830 >> ROB: بنابراین در داخل یک حلقه بی نهایت. 1796 01:32:05,830 --> 01:32:08,770 مانند، این است که مانند یک بی نهایت بازگشتی حلقه و بنابراین ما دیگر دریافت کنید 1797 01:32:08,770 --> 01:32:09,770 پشته فریم در هر زمان. 1798 01:32:09,770 --> 01:32:13,540 اما فقط در داخل یک به طور منظم بی نهایت در حالی که one-- 1799 01:32:13,540 --> 01:32:16,390 خوب، اجازه دهید حتی چاپ f-- 1800 01:32:16,390 --> 01:32:17,040 انجام کاری. 1801 01:32:17,040 --> 01:32:18,390 هر چه. 1802 01:32:18,390 --> 01:32:20,610 >> ما نمی گرفتن یکی دیگر از قاب پشته. 1803 01:32:20,610 --> 01:32:22,530 ما فقط قصد داریم برای حفظ حلقه بیش از این دستور. 1804 01:32:22,530 --> 01:32:23,920 پشته در حال رشد است. 1805 01:32:23,920 --> 01:32:27,290 این واقعیت است که هر بازگشتی است تماس با ما دادن قاب پشته. 1806 01:32:27,290 --> 01:32:31,231 به همین دلیل ما یک سرریز پشته. 1807 01:32:31,231 --> 01:32:31,728 آره؟ 1808 01:32:31,728 --> 01:32:38,189 >> رسید بنابراین اگر شما گفت: برای دریافت در حالی که حلقه و پس از آن [نامفهوم]؟ 1809 01:32:38,189 --> 01:32:42,000 >> ROB: بنابراین اگر در داخل حلقه در حالی که یک تابع () printf وجود دارد، شما هنوز هم می 1810 01:32:42,000 --> 01:32:42,790 گسل SEG نیست. 1811 01:32:42,790 --> 01:32:46,090 من فقط نمی خواست به اشتباه چیز. 1812 01:32:46,090 --> 01:32:46,610 آن را حلقه. 1813 01:32:46,610 --> 01:32:48,225 شما می خواهم یک پشته تک قاب برای تابع () printf. 1814 01:32:48,225 --> 01:32:49,580 >> سپس تابع () printf را می گردانند. 1815 01:32:49,580 --> 01:32:50,280 سپس شما حلقه دوباره می خواهم. 1816 01:32:50,280 --> 01:32:51,460 شما می خواهم یک پشته تک قاب برای تابع () printf. 1817 01:32:51,460 --> 01:32:52,850 این امر می گشت. 1818 01:32:52,850 --> 01:32:54,060 قاب پشته تنها. 1819 01:32:54,060 --> 01:33:00,215 بنابراین شما نمی این بی نهایت ستون قاب پشته. 1820 01:33:00,215 --> 01:33:03,185 >> رسید [نامفهوم]؟ 1821 01:33:03,185 --> 01:33:04,040 >> ROB: بله. 1822 01:33:04,040 --> 01:33:09,360 بنابراین این سرریز پشته اتفاق می افتد چرا که هیچ یک از این 1823 01:33:09,360 --> 01:33:11,600 تماس به مواد غذایی باز می گردند. 1824 01:33:11,600 --> 01:33:15,250 بنابراین اگر بازگشت ما، پس ما را شروع از دست دادن فریم پشته. 1825 01:33:15,250 --> 01:33:17,870 و سپس ما را سرریز پشته است. 1826 01:33:17,870 --> 01:33:20,070 و به همین دلیل شما نیاز به یک مورد پایه برای توابع شخصی شما. 1827 01:33:20,070 --> 01:33:22,992 1828 01:33:22,992 --> 01:33:23,479 آره؟ 1829 01:33:23,479 --> 01:33:27,375 >> رسید آیا به اندازه بالقوه و پشته برای پشته همین کار را برای 1830 01:33:27,375 --> 01:33:29,880 تمام برنامه ها؟ 1831 01:33:29,880 --> 01:33:31,910 >> ROB: تقریبا. 1832 01:33:31,910 --> 01:33:35,090 آیا به اندازه بالقوه از پشته و پشته برای تمام برنامه ها؟ 1833 01:33:35,090 --> 01:33:37,180 تقریبا. 1834 01:33:37,180 --> 01:33:40,080 برخی از تصادفی به وجود که در آن شروع می شود پشته و 1835 01:33:40,080 --> 01:33:42,400 که در آن پشته شروع می شود. 1836 01:33:42,400 --> 01:33:45,870 اگر شما اتفاق می افتد به کل بسیاری از متغیرهای جهانی و همه چیز، شما ممکن است 1837 01:33:45,870 --> 01:33:49,520 را به دور از برخی از فضای برای پشته خود را. 1838 01:33:49,520 --> 01:33:54,060 >> در یک سیستم 64 بیتی، شما عملا دارای حافظه بی نهایت است. 1839 01:33:54,060 --> 01:33:55,820 فقط آنقدر وجود دارد. 1840 01:33:55,820 --> 01:33:59,250 بین 32 بیت و 64 بیت، که تفاوت قابل توجه است. 1841 01:33:59,250 --> 01:34:02,350 >> شما در حال رفتن به یک کل خیلی بیشتر پشته و فضای پشته در 64 بیتی 1842 01:34:02,350 --> 01:34:05,810 سیستم به دلیل تنها تر وجود دارد آدرسی را که آنها می توانید استفاده کنید. 1843 01:34:05,810 --> 01:34:09,360 اما در یک سیستم منحصر به فرد، آن را که تقریبا همان مقدار از پشته 1844 01:34:09,360 --> 01:34:10,785 و فضای پشته. 1845 01:34:10,785 --> 01:34:13,635 1846 01:34:13,635 --> 01:34:15,530 خوب. 1847 01:34:15,530 --> 01:34:18,220 >> بنابراین آخرین چیزی که تلفیقی است. 1848 01:34:18,220 --> 01:34:19,810 بنابراین شما باید این فرآیند را می دانم. 1849 01:34:19,810 --> 01:34:22,240 چهار مرحله بزرگ وجود دارد. 1850 01:34:22,240 --> 01:34:24,400 بنابراین یکی از اولین باید آسان به یاد داشته باشید. 1851 01:34:24,400 --> 01:34:25,085 قبل از پردازش. 1852 01:34:25,085 --> 01:34:28,390 این پیشوند قبل در آن است. 1853 01:34:28,390 --> 01:34:32,080 پس از آن قبل از هر چیز دیگری می آید. 1854 01:34:32,080 --> 01:34:34,000 >> چیزی به خاطر داشته باشید هش است. 1855 01:34:34,000 --> 01:34:37,250 بنابراین هش را تعریف می کند و هش شامل در تمام آن. 1856 01:34:37,250 --> 01:34:39,560 کسانی که تمام پیش پردازنده می باشد دستورات. 1857 01:34:39,560 --> 01:34:42,030 این چیزهایی که می پیش پردازنده می کشد مراقبت از. 1858 01:34:42,030 --> 01:34:43,680 >> پس چه پیش پردازنده انجام دهید؟ 1859 01:34:43,680 --> 01:34:44,850 این یک چیز واقعا گنگ است. 1860 01:34:44,850 --> 01:34:49,380 تمام آن را قادر به همه از این کپی، و برش و چسباندن عملیات. 1861 01:34:49,380 --> 01:34:51,790 >> بنابراین هش شامل استاندارد I0 نقطه در ساعت. 1862 01:34:51,790 --> 01:34:52,990 چه شده است که انجام می دهند؟ 1863 01:34:52,990 --> 01:34:56,610 این استاندارد I0 نقطه ساعت گرفتن فایل و چسباندن آن را به بالا 1864 01:34:56,610 --> 01:34:58,960 هر جا که می گوید هش شامل استاندارد نقطه I0 ساعت. 1865 01:34:58,960 --> 01:35:02,480 >> و هر هش تعریف که ما کرده ایم دیده می شود، چیزی است که که انجام می دهند؟ 1866 01:35:02,480 --> 01:35:06,730 کپی کردن آن مقدار که هش تعریف شده است به عنوان و چسباندن (paste) تعریف شده است که 1867 01:35:06,730 --> 01:35:08,500 هر کجا که شما با استفاده از مقدار است. 1868 01:35:08,500 --> 01:35:13,400 بنابراین پیش پردازنده فقط واقعا عملیات متنی ساده است. 1869 01:35:13,400 --> 01:35:15,870 این هیچ کاری نمی کند هوشمند. 1870 01:35:15,870 --> 01:35:18,920 بنابراین هر چیز دیگری است پیچیده تر است. 1871 01:35:18,920 --> 01:35:22,970 >> بنابراین در حال حاضر که پیش پردازنده است انجام، ما در واقع کامپایل. 1872 01:35:22,970 --> 01:35:24,320 چه چیزی را تدوین چیست؟ 1873 01:35:24,320 --> 01:35:27,310 ما در حال حاضر از کد ج رفتن به کد اسمبلی. 1874 01:35:27,310 --> 01:35:27,570 آره؟ 1875 01:35:27,570 --> 01:35:28,820 >> رسید [نامفهوم]؟ 1876 01:35:28,820 --> 01:35:32,390 1877 01:35:32,390 --> 01:35:34,220 >> ROB: بله، ما گرفتار آن است. 1878 01:35:34,220 --> 01:35:36,880 1879 01:35:36,880 --> 01:35:38,660 پس از کامپایل. 1880 01:35:38,660 --> 01:35:40,310 ما قصد داریم از ج به مونتاژ. 1881 01:35:40,310 --> 01:35:42,470 بنابراین این تغییر زبان واقعی است. 1882 01:35:42,470 --> 01:35:45,240 تدوین خود را به معنای رفتن از یک زبان سطح بالاتر به 1883 01:35:45,240 --> 01:35:47,340 یک زبان سطح پایین تر. 1884 01:35:47,340 --> 01:35:50,720 >> و ج یک زبان سطح بالا است در مقایسه با مونتاژ. 1885 01:35:50,720 --> 01:35:52,320 مونتاژ چیست؟ 1886 01:35:52,320 --> 01:35:56,440 دستورالعمل آن است که، بسیار زیاد است، ساخته شده برای CPU خود را. 1887 01:35:56,440 --> 01:35:59,130 اما کامپیوتر شما هنوز هم می کند مونتاژ درک نمی کنند. 1888 01:35:59,130 --> 01:36:01,570 این تنها یک و صفر می فهمد. 1889 01:36:01,570 --> 01:36:06,160 بنابراین گام بعدی این است مونتاژ، که ما را از این دستورالعمل به ارمغان می آورد که 1890 01:36:06,160 --> 01:36:08,760 CPU خود را درک می کند و در واقع آنها را ترجمه، به 1891 01:36:08,760 --> 01:36:10,820 یک و صفر. 1892 01:36:10,820 --> 01:36:13,570 >> بنابراین C به مونتاژ به باینری. 1893 01:36:13,570 --> 01:36:15,870 اما من یک فایل اجرایی نشده است. 1894 01:36:15,870 --> 01:36:19,550 پس از کتابخانه cs50 فکر می کنم. 1895 01:36:19,550 --> 01:36:23,070 ما شما را با یک فایل باینری برای ارائه این کتابخانه cs50، که GetString 1896 01:36:23,070 --> 01:36:24,400 و GetInt و تمام. 1897 01:36:24,400 --> 01:36:25,700 >> اما cs50 library-- 1898 01:36:25,700 --> 01:36:27,650 در و از itself-- قابل اجرا نیست. 1899 01:36:27,650 --> 01:36:29,570 این کار یک تابع اصلی ندارد. 1900 01:36:29,570 --> 01:36:32,230 این فقط یک دسته از باینری است که شما می توانید استفاده کنید. 1901 01:36:32,230 --> 01:36:41,730 بنابراین ارتباط این است که چگونه ما را با هم تمام از این فایل های باینری های مختلف 1902 01:36:41,730 --> 01:36:43,110 به اجرایی واقعی. 1903 01:36:43,110 --> 01:36:45,900 یکی که شما می توانید نوع نقطه بریده بریده یک نقطه است. 1904 01:36:45,900 --> 01:36:51,660 >> پس این است که مانند فایل که شما نوشت، - هر برنامه خود را is-- 1905 01:36:51,660 --> 01:36:53,620 Ceaser نقطه ج. 1906 01:36:53,620 --> 01:36:55,100 اما در حال حاضر آن را وارد شده است را به باینری. 1907 01:36:55,100 --> 01:36:56,480 بنابراین Ceaser نقطه ای. 1908 01:36:56,480 --> 01:36:59,620 و این است که cs50 ما کتابخانه باینری. 1909 01:36:59,620 --> 01:37:02,284 و آنها از ترکیب به وسیله یک فایل اجرایی. 1910 01:37:02,284 --> 01:37:02,758 آره؟ 1911 01:37:02,758 --> 01:37:04,008 >> رسید [نامفهوم]؟ 1912 01:37:04,008 --> 01:37:08,800 1913 01:37:08,800 --> 01:37:12,710 >> ROB: پس اول شامل، به یاد داشته باشید، هش شامل است که در واقع 1914 01:37:12,710 --> 01:37:13,810 مرحله پیش پردازنده. 1915 01:37:13,810 --> 01:37:14,750 اما این جداگانه. 1916 01:37:14,750 --> 01:37:20,730 اگر شما با استفاده از توابع نیست که خارج از فایل های خود را پس از آن، 1917 01:37:20,730 --> 01:37:26,100 نه، شما لازم نیست که به لینک هر چیزی از آنجایی که شما همه چیز را داشته باشد. 1918 01:37:26,100 --> 01:37:30,310 >> گفته می شود، تابع () printf است که در ارتباط است. 1919 01:37:30,310 --> 01:37:32,820 اگر شما تا به حال با استفاده از تابع () printf، که چیزی که نیاز به در مرتبط است 1920 01:37:32,820 --> 01:37:35,740 چرا که شما ارسال نشده است. 1921 01:37:35,740 --> 01:37:39,530 و، در واقع، تابع () printf است به طور خودکار مرتبط در. 1922 01:37:39,530 --> 01:37:42,760 شما می دانید که چگونه در خط فرمان و یا زمانی که وارد کنید، شما نگاه کنید به آن را دارند 1923 01:37:42,760 --> 01:37:46,690 فاصله ل cs50، که لینک در کتابخانه cs50؟ 1924 01:37:46,690 --> 01:37:49,070 تابع () printf، و چیزهای که است، رفتن به در به طور خودکار مرتبط است. 1925 01:37:49,070 --> 01:37:51,730 1926 01:37:51,730 --> 01:37:53,930 هر گونه سؤال دیگر در هر چیزی؟ 1927 01:37:53,930 --> 01:37:56,280 >> رسید [نامفهوم]؟ 1928 01:37:56,280 --> 01:37:58,300 >> ROB: لینک کردن؟ 1929 01:37:58,300 --> 01:38:03,450 ما یک دسته کامل از فایل های مختلف باینری. 1930 01:38:03,450 --> 01:38:06,410 این مثال متعارف است که استفاده می کنیم کتابخانه cs50 است. 1931 01:38:06,410 --> 01:38:09,960 ما وارد شده و با توجه به شما دودویی برای این کتابخانه cs50. 1932 01:38:09,960 --> 01:38:12,410 >> شما می خواهید به استفاده از GetString در برنامه های خود را. 1933 01:38:12,410 --> 01:38:14,750 بنابراین شما و استفاده از GetString. 1934 01:38:14,750 --> 01:38:19,700 اما بدون کد باینری من برای GetString، هنگامی که شما کد خود را کامپایل 1935 01:38:19,700 --> 01:38:23,140 پایین، شما در واقع می تواند اجرا شما برنامه به دلیل GetString عبارات است 1936 01:38:23,140 --> 01:38:25,080 هنوز به طور کامل مشخص نشده است. 1937 01:38:25,080 --> 01:38:29,220 >> این تنها زمانی که شما در دودویی من پیوند دارند که شامل GetString که در حال حاضر، همه 1938 01:38:29,220 --> 01:38:31,130 درست است، من در واقع می تواند اجرا GetString. 1939 01:38:31,130 --> 01:38:32,330 فایل من کامل است. 1940 01:38:32,330 --> 01:38:34,208 و من می توانم این را اجرا کنید. 1941 01:38:34,208 --> 01:38:34,697 آره؟ 1942 01:38:34,697 --> 01:38:37,631 >> رسید آیا لینک کردن تبدیل باینری را اجرایی یا Executable؟ 1943 01:38:37,631 --> 01:38:42,032 بنابراین حتی اگر شما دیگر ندارد کتابخانه ها، هنوز هم نمی شود آن را 1944 01:38:42,032 --> 01:38:44,477 لازم به ترجمه [نامفهوم]؟ 1945 01:38:44,477 --> 01:38:48,640 >> ROB: بنابراین اجرایی هنوز در دودویی. 1946 01:38:48,640 --> 01:38:51,750 این فقط ترکیب یک کل دسته ای از فایل های باینری. 1947 01:38:51,750 --> 01:38:55,124 1948 01:38:55,124 --> 01:38:56,591 >> رسید از شما بسیار سپاسگزارم. 1949 01:38:56,591 --> 01:38:58,560 >> ROB: مشکلی نیست. 1950 01:38:58,560 --> 01:38:59,540 هر گونه سؤال دیگر؟ 1951 01:38:59,540 --> 01:39:02,001 در غیر این صورت، ما در حال تمام مجموعه. 1952 01:39:02,001 --> 01:39:02,690 خوب. 1953 01:39:02,690 --> 01:39:02,990 تشکر. 1954 01:39:02,990 --> 01:39:03,590 >> [تشویق حضار] 1955 01:39:03,590 --> 01:39:04,490 >> رسید با تشکر از شما. 1956 01:39:04,490 --> 01:39:05,740 >> ROB: آره. 1957 01:39:05,740 --> 01:39:06,582