1 00:00:00,000 --> 00:00:05,300 2 00:00:05,300 --> 00:00:07,300 داگ لوید: همانطور که شما شروع کار با توابع، 3 00:00:07,300 --> 00:00:09,966 یک چیز دیگر است که برای تبدیل شدن به واقعا مهم به درک، 4 00:00:09,966 --> 00:00:12,380 که مفهوم از حوزه دید متغیر است. 5 00:00:12,380 --> 00:00:14,490 بنابراین دامنه است از ویژگی های یک متغیر 6 00:00:14,490 --> 00:00:18,860 که تعریف می کند که از آن توابع که متغیر دیده می شود. 7 00:00:18,860 --> 00:00:24,595 >> دو حوزه اصلی در C وجود دارد، متغیرهای محلی و متغیرهای جهانی است. 8 00:00:24,595 --> 00:00:27,830 در حال حاضر، متغیرهای محلی می تواند تنها در داخل توابع دیده 9 00:00:27,830 --> 00:00:29,045 که در آن ایجاد شده است. 10 00:00:29,045 --> 00:00:32,170 آنها می توانند با هر دیده نمی شود تابع که در برنامه شما وجود دارد، 11 00:00:32,170 --> 00:00:34,184 تنها تابع در که در آن ساخته شده است. 12 00:00:34,184 --> 00:00:36,350 متغیرهای جهانی، در از سوی دیگر، می تواند دیده 13 00:00:36,350 --> 00:00:37,719 هر تابع در برنامه است. 14 00:00:37,719 --> 00:00:40,260 و دلیل آن این است چرا که آنها در داخل ایجاد نمی 15 00:00:40,260 --> 00:00:41,441 هر تابع خاص است. 16 00:00:41,441 --> 00:00:43,690 ما آنها را در خارج از اعلام تمام توابع که 17 00:00:43,690 --> 00:00:48,940 بدان معنی است که هر تابع می داند که آن است و می توانید دسترسی و دستکاری آن. 18 00:00:48,940 --> 00:00:52,010 >> تا کنون در این دوره شما به زیبا بسیار شده است کار منحصرا 19 00:00:52,010 --> 00:00:54,280 با متغیرهای محلی. 20 00:00:54,280 --> 00:00:58,320 در اینجا یک مثال از یک بسیار بسیار تابع اصلی ساده و بسیار ساده 21 00:00:58,320 --> 00:01:00,680 تابع اضافی است که ما نوشته شده است. 22 00:01:00,680 --> 00:01:03,180 در این مورد، X، که من سبز رنگ فقط 23 00:01:03,180 --> 00:01:07,400 به برجسته محل یا دامنه متغیر، 24 00:01:07,400 --> 00:01:09,240 محلی برای تابع سه گانه است. 25 00:01:09,240 --> 00:01:12,300 اصلی نمی تواند در همه به X مراجعه کنید. 26 00:01:12,300 --> 00:01:14,259 آن را نمی داند آنچه در آن است. 27 00:01:14,259 --> 00:01:17,050 هیچ تابع دیگر، در واقع، اگر ما توابع اضافی در اینجا، 28 00:01:17,050 --> 00:01:19,360 می تواند به X مراجعه کنید. 29 00:01:19,360 --> 00:01:23,520 >> به طور مشابه، نتایج که من رنگ آبی، محلی تنها به اصلی است. 30 00:01:23,520 --> 00:01:26,980 تنها اصلی می داند چه نتیجه متغیر است. 31 00:01:26,980 --> 00:01:30,010 سه گانه می توانید از آن استفاده کنید. 32 00:01:30,010 --> 00:01:32,580 >> در حال حاضر به عنوان اشاره کردم، متغیر های جهانی وجود دارد. 33 00:01:32,580 --> 00:01:35,575 اگر شما که متغیر خارج از هر تابع، 34 00:01:35,575 --> 00:01:38,290 تمام توابع در این برنامه می تواند به آن مراجعه کنید. 35 00:01:38,290 --> 00:01:44,010 بنابراین در این مورد من در برجسته کرده ام سبز تعریف متغیر جهانی است. 36 00:01:44,010 --> 00:01:45,830 در این مورد، متغیر موردنظر 37 00:01:45,830 --> 00:01:48,720 است جهانی به نام، فقط به باشد بسیار روشن در مورد آن. 38 00:01:48,720 --> 00:01:49,720 این از نوع float است. 39 00:01:49,720 --> 00:01:52,940 و من آن را اختصاص دادن مقدار 0.5050. 40 00:01:52,940 --> 00:01:58,080 >> شما متوجه خواهید شد که در اصلی و در سه گانه، من قادر به مراجعه به جهانی است. 41 00:01:58,080 --> 00:02:03,480 و در واقع، اگر من از طریق برنامه به به عنوان نشان داد، تماس اصلی برای اولین بار سه گانه، 42 00:02:03,480 --> 00:02:10,440 ضرب سه گانه جهانی 3، که مجموعه ارزش خود را به 1.5 چیزی، 43 00:02:10,440 --> 00:02:16,080 1.51 یا چیزی شبیه به آن، و پس از آن اصلی نیز چاپ ارزش 44 00:02:16,080 --> 00:02:16,620 از جهانی است. 45 00:02:16,620 --> 00:02:24,424 بنابراین اصلی را نمی خواهد از چاپ 0.5050 آن، چاپ خواهد شد بار جهانی 3، 1.51. 46 00:02:24,424 --> 00:02:27,340 بنابراین شما باید مراقب باشید که شما در حال کار با متغیرهای جهانی است. 47 00:02:27,340 --> 00:02:30,260 در حالی که آنها در بسیار انعطاف پذیر هستید قادر بودن به انتقال اطلاعات 48 00:02:30,260 --> 00:02:32,650 در اطراف به طوری که هر تابع می تواند از آن استفاده کنید، 49 00:02:32,650 --> 00:02:34,580 همچنین می تواند برخی از آنها عواقب خطرناک 50 00:02:34,580 --> 00:02:38,770 اگر تغییرات یک تابع ارزش یک متغیر 51 00:02:38,770 --> 00:02:42,360 قبل از شما انتظار آن را تغییر داد. 52 00:02:42,360 --> 00:02:44,200 >> چرا این تمایز مهم است؟ 53 00:02:44,200 --> 00:02:48,070 چرا برای ما مهم است که آیا برخی از متغیرهای محلی و برخی دیگر جهانی است؟ 54 00:02:48,070 --> 00:02:53,880 خب، در بیشتر قسمت ها، متغیرهای محلی در C هستند آنچه به نام تصویب شده توسط ارزش 55 00:02:53,880 --> 00:02:56,087 وقتی که ما فراخوانی تابع است. 56 00:02:56,087 --> 00:02:56,920 معنی آن چیست؟ 57 00:02:56,920 --> 00:03:00,880 >> خوب، هنگامی که یک متغیر به تصویب می رسد با ارزش، پذیرنده، که 58 00:03:00,880 --> 00:03:04,350 دیگری از راه گفت تابع است است که دریافت متغیر است که 59 00:03:04,350 --> 00:03:08,465 می شود در به عنوان ورودی به تصویب رسید، آن را در واقع که خود متغیر دریافت نمی کنند. 60 00:03:08,465 --> 00:03:12,490 آن را دریافت خود را کپی از آن برای کار با. 61 00:03:12,490 --> 00:03:14,350 این تمایز واقعا مهم است. 62 00:03:14,350 --> 00:03:18,250 ما فقط یک ثانیه پیش دیدم که با متغیرهای جهانی، 63 00:03:18,250 --> 00:03:23,240 اگر ما جهانی دستکاری متغیر در یک تابع، اثر 64 00:03:23,240 --> 00:03:26,390 در یک تابع حمل از طریق به هر تابع دیگر. 65 00:03:26,390 --> 00:03:28,920 >> اما با متغیرهای محلی، این درست نیست. 66 00:03:28,920 --> 00:03:32,060 هر تابع که آن را متغیرهای دریافت به عنوان ورودی 67 00:03:32,060 --> 00:03:36,367 دریافت نسخه از آن متغیرها، نه متغیرهای خود را دارند. 68 00:03:36,367 --> 00:03:37,825 پس چه اثر جانبی آن است؟ 69 00:03:37,825 --> 00:03:40,450 این بدان معناست که متغیر در تماس گیرنده، تابع است که 70 00:03:40,450 --> 00:03:45,600 است از برقراری تماس تابع، بدون تغییر مگر اینکه شما آن زیر پا بگذارند. 71 00:03:45,600 --> 00:03:50,420 >> به عنوان مثال، در این کد تولی تغییر نکرده است. 72 00:03:50,420 --> 00:03:55,450 INT تولی برابر 4، پاسخ سه گانه مواد غذایی، در داخل سه گانه، 73 00:03:55,450 --> 00:03:58,850 ما انتظار داریم که تولی را توان با 3 ضرب و بازگشت، 74 00:03:58,850 --> 00:04:01,450 اما در واقع هیچ اثر وجود دارد. 75 00:04:01,450 --> 00:04:03,460 >> در اینجا هر چند، تفاوت بسیار ظریف است. 76 00:04:03,460 --> 00:04:06,520 این کار اثر ما می خواهیم. 77 00:04:06,520 --> 00:04:07,730 آیا به نظر شما چرا؟ 78 00:04:07,730 --> 00:04:11,500 ما در حال فارغ Foo در اصلی این زمان. 79 00:04:11,500 --> 00:04:16,899 >> بنابراین تولی INT برابر 4، تولی برابر تولی سه گانه، هنگامی که ما را که تماس، 80 00:04:16,899 --> 00:04:21,680 سه گانه می شود کپی خود را مواد غذایی، کپی خود را از 4. 81 00:04:21,680 --> 00:04:27,340 این گزارش می گوید بازگشت 4 بار 3، و یا هر متغیر می شود در برابر 3 منتقل می شود. 82 00:04:27,340 --> 00:04:32,109 و سپس ما بازگشت اختصاص ارزش سه گانه به FOO دوباره. 83 00:04:32,109 --> 00:04:33,650 بنابراین این در واقع تولی بازنویسی. 84 00:04:33,650 --> 00:04:35,816 این تنها راه برای انجام شده است این متغیر محلی است. 85 00:04:35,816 --> 00:04:38,120 بنابراین در حال حاضر اگر ما دیگر اضافه کنید خط از کد در اینجا 86 00:04:38,120 --> 00:04:40,870 در پایان اصلی نسخه قابل چاپ کردن ارزش تولی، 87 00:04:40,870 --> 00:04:45,030 آن را در واقع نسخه قابل چاپ کردن 12. 88 00:04:45,030 --> 00:04:48,600 >> دامنه متغیر است به طور کلی بیش از حد از یک مشکل نیست 89 00:04:48,600 --> 00:04:51,190 اگر شما همه نام شما متغیرهای مختلف. 90 00:04:51,190 --> 00:04:54,920 اما می توان آن نوع از تند و زننده دریافت اگر همان نام متغیر 91 00:04:54,920 --> 00:04:58,820 به نظر می رسد در توابع مختلف، که بسیاری اتفاق می افتد. 92 00:04:58,820 --> 00:05:02,130 اگر تا به حال کار در دنیای واقعی که در آن 93 00:05:02,130 --> 00:05:06,080 شما در حال کار بر روی مشترک برنامه ها و مردم در تیم های مختلف 94 00:05:06,080 --> 00:05:11,000 در حال کار با هم به ارسال همان برنامه و یا همان مجموعه ای از برنامه ها، 95 00:05:11,000 --> 00:05:13,900 آنها اغلب خواهید متغیر استفاده مجدد نام، آنهایی که به خصوص رایج 96 00:05:13,900 --> 00:05:18,020 مانند X، Y، I، J، و غیره. 97 00:05:18,020 --> 00:05:20,370 >> اما زمانی که متغیرها به همین نام، مسائل دامنه 98 00:05:20,370 --> 00:05:23,080 می توانید کمی سختتر به تجزیه. 99 00:05:23,080 --> 00:05:26,790 به عنوان مثال، شما می دانید که آنچه که می توان چاپ 100 00:05:26,790 --> 00:05:30,190 در پایان این برنامه خاص؟ 101 00:05:30,190 --> 00:05:31,280 یک دقیقه. 102 00:05:31,280 --> 00:05:33,382 مکث ویدیو و خواندن از طریق این برنامه است. 103 00:05:33,382 --> 00:05:35,590 شما می توانید در بالا مشاهده می کنید ما یک تعریف تابع 104 00:05:35,590 --> 00:05:37,350 برای یک تابع به نام افزایش. 105 00:05:37,350 --> 00:05:40,800 این تابع طول می کشد یک پارامتر، یک عدد صحیح است که ما X پاسخ. 106 00:05:40,800 --> 00:05:42,610 و خروجی یک عدد صحیح. 107 00:05:42,610 --> 00:05:44,820 که نوع برگشت در آغاز راه است. 108 00:05:44,820 --> 00:05:48,140 >> پس ما باید اصلی، یک زن و شوهر از خطوط کد در اصلی، که آخرین آن 109 00:05:48,140 --> 00:05:49,250 بیانیه چاپ است. 110 00:05:49,250 --> 00:05:51,140 و به یاد داشته باشید که این سوال در اینجا است. 111 00:05:51,140 --> 00:05:54,240 آنچه در واقع رفتن به در پایان این تابع چاپ شده؟ 112 00:05:54,240 --> 00:05:58,110 و سپس ما در واقع دارند تعریف افزایش زیر کلیک کنید. 113 00:05:58,110 --> 00:06:01,760 >> بنابراین یک دقیقه را، به قدم از طریق کد، ردیابی مسائل را. 114 00:06:01,760 --> 00:06:08,100 آیا می دانید چه خواهد شد در چاپ در پایان این برنامه خاص؟ 115 00:06:08,100 --> 00:06:08,600 >> خیلی خوب. 116 00:06:08,600 --> 00:06:11,433 امیدوارم، شما چند ثانیه گرفته شده را امتحان کنید و تجزیه این یکی از. 117 00:06:11,433 --> 00:06:13,370 بیا با هم انجامش بدیم. 118 00:06:13,370 --> 00:06:16,022 >> بنابراین من از گذشته ایم افزایش است اعلامیه در بالا وجود دارد. 119 00:06:16,022 --> 00:06:17,230 این نوع از انحراف بود. 120 00:06:17,230 --> 00:06:18,570 این متغیر خود نیست. 121 00:06:18,570 --> 00:06:19,879 آن دامنه خود را ندارد. 122 00:06:19,879 --> 00:06:21,920 این فقط یک تابع اعلامیه، به طوری که برای اهداف 123 00:06:21,920 --> 00:06:24,330 از تلاش برای تجزیه کردن آنچه که اتفاق می افتد در این برنامه، 124 00:06:24,330 --> 00:06:26,660 ما نیز ممکن است فقط آن را اجتناب کنند. 125 00:06:26,660 --> 00:06:29,560 >> در حال حاضر ما در این مورد داشته باشد، دلیل این مشکل روی حیله و تزویر است 126 00:06:29,560 --> 00:06:34,030 است، زیرا ما متغیرهای محلی در هر دو اصلی و افزایش، که هر کدام 127 00:06:34,030 --> 00:06:35,090 به نام x است. 128 00:06:35,090 --> 00:06:39,830 و البته مسئله دشوار از این موضوع است تلاش برای Süß کردن که X تغییر می شود 129 00:06:39,830 --> 00:06:41,890 و چگونه آن را دریافت کند تغییر کرده است. 130 00:06:41,890 --> 00:06:46,900 بنابراین من هر نمونه رنگی ام از x که محلی به قرمز اصلی. 131 00:06:46,900 --> 00:06:52,040 و من هر نمونه از رنگی ام X که محلی برای افزایش آبی رنگ است. 132 00:06:52,040 --> 00:06:55,220 >> توجه کنید که در خط سوم که از اصلی، y برابر افزایش 133 00:06:55,220 --> 00:07:00,800 X، که افزایش است که نمی تصویب X اصلی، یا قرمز *. 134 00:07:00,800 --> 00:07:03,320 آن را تصویب گرفتن یک کپی از آن. 135 00:07:03,320 --> 00:07:06,987 و آن را تنها رفتن به کار با که نسخه ای از آن، رنگ آبی X. 136 00:07:06,987 --> 00:07:08,820 اگر شما ریاضی هستید تمایل، شما ممکن است 137 00:07:08,820 --> 00:07:14,230 به جای این فکر X فرعی متر برای اصلی و فرعی X برای افزایش. 138 00:07:14,230 --> 00:07:15,700 اما همان ایده است. 139 00:07:15,700 --> 00:07:18,999 X زیر متر، و یا قرمز X را در اسلاید قبلی، 140 00:07:18,999 --> 00:07:21,790 متغیرهایی که وسعت وحشی گری هستند به عنوان مثال از x و نه است که 141 00:07:21,790 --> 00:07:26,900 محلی برای اصلی است، و X زیر من، یا متغیرهای آبی در اسلاید قبلی، 142 00:07:26,900 --> 00:07:30,760 نمونه های X است که محلی برای افزایش می باشد. 143 00:07:30,760 --> 00:07:36,220 >> بنابراین، شما قادر به کشف کردن آنچه بود این تابع چاپ در پایان؟ 144 00:07:36,220 --> 00:07:39,420 من داگ لوید هستم، و این CS50 است. 145 00:07:39,420 --> 00:07:41,542