داگ لوید: همانطور که شما شروع کار با توابع،
یک چیز دیگر است که برای تبدیل شدن به واقعا مهم به درک،
که مفهوم از حوزه دید متغیر است.
بنابراین دامنه است از ویژگی های یک متغیر
که تعریف می کند که از آن توابع که متغیر دیده می شود.
>> دو حوزه اصلی در C وجود دارد، متغیرهای محلی و متغیرهای جهانی است.
در حال حاضر، متغیرهای محلی می تواند تنها در داخل توابع دیده
که در آن ایجاد شده است.
آنها می توانند با هر دیده نمی شود تابع که در برنامه شما وجود دارد،
تنها تابع در که در آن ساخته شده است.
متغیرهای جهانی، در از سوی دیگر، می تواند دیده
هر تابع در برنامه است.
و دلیل آن این است چرا که آنها در داخل ایجاد نمی
هر تابع خاص است.
ما آنها را در خارج از اعلام تمام توابع که
بدان معنی است که هر تابع می داند که آن است و می توانید دسترسی و دستکاری آن.
>> تا کنون در این دوره شما به زیبا بسیار شده است کار منحصرا
با متغیرهای محلی.
در اینجا یک مثال از یک بسیار بسیار تابع اصلی ساده و بسیار ساده
تابع اضافی است که ما نوشته شده است.
در این مورد، X، که من سبز رنگ فقط
به برجسته محل یا دامنه متغیر،
محلی برای تابع سه گانه است.
اصلی نمی تواند در همه به X مراجعه کنید.
آن را نمی داند آنچه در آن است.
هیچ تابع دیگر، در واقع، اگر ما توابع اضافی در اینجا،
می تواند به X مراجعه کنید.
>> به طور مشابه، نتایج که من رنگ آبی، محلی تنها به اصلی است.
تنها اصلی می داند چه نتیجه متغیر است.
سه گانه می توانید از آن استفاده کنید.
>> در حال حاضر به عنوان اشاره کردم، متغیر های جهانی وجود دارد.
اگر شما که متغیر خارج از هر تابع،
تمام توابع در این برنامه می تواند به آن مراجعه کنید.
بنابراین در این مورد من در برجسته کرده ام سبز تعریف متغیر جهانی است.
در این مورد، متغیر موردنظر
است جهانی به نام، فقط به باشد بسیار روشن در مورد آن.
این از نوع float است.
و من آن را اختصاص دادن مقدار 0.5050.
>> شما متوجه خواهید شد که در اصلی و در سه گانه، من قادر به مراجعه به جهانی است.
و در واقع، اگر من از طریق برنامه به به عنوان نشان داد، تماس اصلی برای اولین بار سه گانه،
ضرب سه گانه جهانی 3، که مجموعه ارزش خود را به 1.5 چیزی،
1.51 یا چیزی شبیه به آن، و پس از آن اصلی نیز چاپ ارزش
از جهانی است.
بنابراین اصلی را نمی خواهد از چاپ 0.5050 آن، چاپ خواهد شد بار جهانی 3، 1.51.
بنابراین شما باید مراقب باشید که شما در حال کار با متغیرهای جهانی است.
در حالی که آنها در بسیار انعطاف پذیر هستید قادر بودن به انتقال اطلاعات
در اطراف به طوری که هر تابع می تواند از آن استفاده کنید،
همچنین می تواند برخی از آنها عواقب خطرناک
اگر تغییرات یک تابع ارزش یک متغیر
قبل از شما انتظار آن را تغییر داد.
>> چرا این تمایز مهم است؟
چرا برای ما مهم است که آیا برخی از متغیرهای محلی و برخی دیگر جهانی است؟
خب، در بیشتر قسمت ها، متغیرهای محلی در C هستند آنچه به نام تصویب شده توسط ارزش
وقتی که ما فراخوانی تابع است.
معنی آن چیست؟
>> خوب، هنگامی که یک متغیر به تصویب می رسد با ارزش، پذیرنده، که
دیگری از راه گفت تابع است است که دریافت متغیر است که
می شود در به عنوان ورودی به تصویب رسید، آن را در واقع که خود متغیر دریافت نمی کنند.
آن را دریافت خود را کپی از آن برای کار با.
این تمایز واقعا مهم است.
ما فقط یک ثانیه پیش دیدم که با متغیرهای جهانی،
اگر ما جهانی دستکاری متغیر در یک تابع، اثر
در یک تابع حمل از طریق به هر تابع دیگر.
>> اما با متغیرهای محلی، این درست نیست.
هر تابع که آن را متغیرهای دریافت به عنوان ورودی
دریافت نسخه از آن متغیرها، نه متغیرهای خود را دارند.
پس چه اثر جانبی آن است؟
این بدان معناست که متغیر در تماس گیرنده، تابع است که
است از برقراری تماس تابع، بدون تغییر مگر اینکه شما آن زیر پا بگذارند.
>> به عنوان مثال، در این کد تولی تغییر نکرده است.
INT تولی برابر 4، پاسخ سه گانه مواد غذایی، در داخل سه گانه،
ما انتظار داریم که تولی را توان با 3 ضرب و بازگشت،
اما در واقع هیچ اثر وجود دارد.
>> در اینجا هر چند، تفاوت بسیار ظریف است.
این کار اثر ما می خواهیم.
آیا به نظر شما چرا؟
ما در حال فارغ Foo در اصلی این زمان.
>> بنابراین تولی INT برابر 4، تولی برابر تولی سه گانه، هنگامی که ما را که تماس،
سه گانه می شود کپی خود را مواد غذایی، کپی خود را از 4.
این گزارش می گوید بازگشت 4 بار 3، و یا هر متغیر می شود در برابر 3 منتقل می شود.
و سپس ما بازگشت اختصاص ارزش سه گانه به FOO دوباره.
بنابراین این در واقع تولی بازنویسی.
این تنها راه برای انجام شده است این متغیر محلی است.
بنابراین در حال حاضر اگر ما دیگر اضافه کنید خط از کد در اینجا
در پایان اصلی نسخه قابل چاپ کردن ارزش تولی،
آن را در واقع نسخه قابل چاپ کردن 12.
>> دامنه متغیر است به طور کلی بیش از حد از یک مشکل نیست
اگر شما همه نام شما متغیرهای مختلف.
اما می توان آن نوع از تند و زننده دریافت اگر همان نام متغیر
به نظر می رسد در توابع مختلف، که بسیاری اتفاق می افتد.
اگر تا به حال کار در دنیای واقعی که در آن
شما در حال کار بر روی مشترک برنامه ها و مردم در تیم های مختلف
در حال کار با هم به ارسال همان برنامه و یا همان مجموعه ای از برنامه ها،
آنها اغلب خواهید متغیر استفاده مجدد نام، آنهایی که به خصوص رایج
مانند X، Y، I، J، و غیره.
>> اما زمانی که متغیرها به همین نام، مسائل دامنه
می توانید کمی سختتر به تجزیه.
به عنوان مثال، شما می دانید که آنچه که می توان چاپ
در پایان این برنامه خاص؟
یک دقیقه.
مکث ویدیو و خواندن از طریق این برنامه است.
شما می توانید در بالا مشاهده می کنید ما یک تعریف تابع
برای یک تابع به نام افزایش.
این تابع طول می کشد یک پارامتر، یک عدد صحیح است که ما X پاسخ.
و خروجی یک عدد صحیح.
که نوع برگشت در آغاز راه است.
>> پس ما باید اصلی، یک زن و شوهر از خطوط کد در اصلی، که آخرین آن
بیانیه چاپ است.
و به یاد داشته باشید که این سوال در اینجا است.
آنچه در واقع رفتن به در پایان این تابع چاپ شده؟
و سپس ما در واقع دارند تعریف افزایش زیر کلیک کنید.
>> بنابراین یک دقیقه را، به قدم از طریق کد، ردیابی مسائل را.
آیا می دانید چه خواهد شد در چاپ در پایان این برنامه خاص؟
>> خیلی خوب.
امیدوارم، شما چند ثانیه گرفته شده را امتحان کنید و تجزیه این یکی از.
بیا با هم انجامش بدیم.
>> بنابراین من از گذشته ایم افزایش است اعلامیه در بالا وجود دارد.
این نوع از انحراف بود.
این متغیر خود نیست.
آن دامنه خود را ندارد.
این فقط یک تابع اعلامیه، به طوری که برای اهداف
از تلاش برای تجزیه کردن آنچه که اتفاق می افتد در این برنامه،
ما نیز ممکن است فقط آن را اجتناب کنند.
>> در حال حاضر ما در این مورد داشته باشد، دلیل این مشکل روی حیله و تزویر است
است، زیرا ما متغیرهای محلی در هر دو اصلی و افزایش، که هر کدام
به نام x است.
و البته مسئله دشوار از این موضوع است تلاش برای Süß کردن که X تغییر می شود
و چگونه آن را دریافت کند تغییر کرده است.
بنابراین من هر نمونه رنگی ام از x که محلی به قرمز اصلی.
و من هر نمونه از رنگی ام X که محلی برای افزایش آبی رنگ است.
>> توجه کنید که در خط سوم که از اصلی، y برابر افزایش
X، که افزایش است که نمی تصویب X اصلی، یا قرمز *.
آن را تصویب گرفتن یک کپی از آن.
و آن را تنها رفتن به کار با که نسخه ای از آن، رنگ آبی X.
اگر شما ریاضی هستید تمایل، شما ممکن است
به جای این فکر X فرعی متر برای اصلی و فرعی X برای افزایش.
اما همان ایده است.
X زیر متر، و یا قرمز X را در اسلاید قبلی،
متغیرهایی که وسعت وحشی گری هستند به عنوان مثال از x و نه است که
محلی برای اصلی است، و X زیر من، یا متغیرهای آبی در اسلاید قبلی،
نمونه های X است که محلی برای افزایش می باشد.
>> بنابراین، شما قادر به کشف کردن آنچه بود این تابع چاپ در پایان؟
من داگ لوید هستم، و این CS50 است.