ДАГ Lloyd: Коли ви починаєте роботі з функціями,
інша справа, стане дуже важливо для розуміння,
який є поняття області видимості змінних.
Так сфера є характеристика змінної
який визначає, які функції з змінна може бути доступна.
>> Є два основних областей в С, локальні змінні і глобальні змінні.
Тепер, локальні змінні можуть тільки Доступ у функції
в якому вони створені.
Вони не можуть бути доступні кожен функція, яка існує у вашій програмі,
тільки функція в якій вона була створена.
Глобальні змінні, на З іншого боку, можна отримати
будь-якою функцією в програмі.
І причина в тому, тому що вони не створені всередині
будь-якої конкретної функції.
Ми оголошуємо їх межами всі функції, які
означає, що кожна функція знає, де це і може отримати доступ і маніпулювати.
>> Дотепер в процесі ви маєте досить багато працює виключно
з локальними змінними.
Ось приклад дуже, дуже просто основна функція і дуже простий
додаткова функція, яку ми написали.
У цьому випадку X, який Я тільки зеленого кольору
щоб підкреслити розташування або обсяг цієї змінної,
є локальною для функції потрійний.
головним чином, не може посилатися на х взагалі.
Він не знає, що це таке.
Немає іншої функції, справді, якщо ми були додаткові функції тут,
може відноситися до х.
>> Точно так само, призводить, які я синього кольору, тільки локально на головну.
Тільки головний знає, що змінна результат.
потрійний не може його використовувати.
>> Тепер, як я вже говорив, глобальні змінні існують.
Якщо ви оголошуєте змінну, що поза будь-якої функції,
всі функції в Програма може звертатися до нього.
Таким чином, в цьому випадку я виділив в зелений глобальна змінна декларації.
У цьому випадку, Мінлива оголошується
називається глобальної, просто бути гранично ясно про це.
Це типу поплавця.
І я присвоїти йому значення 0.5050.
>> Ви помітите, що в основній і в потрійний, я можу звернутися до глобальних.
І справді, якщо я йду за програмою як зазначено, основні виклики перший потрійний,
тримісні розмножується глобальні по 3, які встановлює його значення в 1,5-то,
1.51 або щось подібне, і Потім головний також виводить значення
глобального.
Так головним чином, не буде друкувати 0.5050 його, виведе глобальні раз 3, 1,51.
Отже, ви повинні бути обережні, коли Ви працюєте з глобальними змінними.
У той час як вони дуже гнучкі в будучи в змозі передати інформацію
навколо так, що кожен Функція може використовувати його,
він також може мати деякі небезпечні наслідки
якщо зміни однієї функції значення змінної
перш ніж очікувати, що вона буде змінена.
>> Чому це розходження має значення?
Чому ми дбаємо деяких змінних місцеві та інші глобальні?
Ну, по більшій частині, локальні змінні в C це те, що називається передаються за значенням
коли ми виклик функції.
Що це означає?
>> Добре, коли передається змінна за значенням, що викликається, який
це ще один спосіб сказати функції що отримує змінну,
отримує прийнятий в якості вхідних даних, насправді не одержати саму цю змінну.
Він отримує власний Копія цього працювати.
Це дійсно важлива відмінність.
Ми тільки що бачили секунду тому що з глобальними змінними,
якщо ми маніпулювати світової змінна в однієї функції, ефект
в тому, що одна функція здійснює до будь-якої іншої функції.
>> Але з локальними змінними, це не правда.
Кожна функція, коли його отримує в якості вхідних змінних
отримувати копії цих змінних, а не самі змінні.
Так що це побічний ефект, що?
Це означає, що змінна в абонент, функція,
це робить виклик функції, є без змін, якщо ви не зміните його.
>> Наприклад, в цьому коді Foo не змінився.
Int Foo дорівнює 4, телефонуйте потрійний взувши, всередині потрійний,
можна очікувати, що Foo буде помножити на 3 і повертається,
але немає насправді ніякого ефекту.
>> Тут, хоча, дуже тонка різниця.
Це має ефект ми хочемо.
Ви бачите, чому?
Ми перевизначення Foo в головному цей час.
>> Так INT Foo дорівнює 4, Foo дорівнює потрійний Foo, коли ми зробити цей заклик,
потрійний отримує свою власну копію взувши, своєю копією 4.
Це говорить повернутися 4 рази 3, або будь Мінлива отримує пройшло за часів 3.
І тоді ми призначаємо повернення Значення потрійний Foo знову.
Так що це насправді буде переписати Foo.
Це єдиний спосіб зробити це з локальної змінної.
Так що тепер, якщо ми додамо ще один рядок коду тут
У кінці головної до роздрукувати значення Foo,
було б насправді роздрукувати 12.
>> Область видимості змінної, як правило, не надто велика проблема
якщо ви назвати всі ваші змінні різні речі.
Але він може отримати посвідку противний якщо ж ім'я змінної
з'являється в декількох функцій, що станеться багато.
Якщо ви коли-небудь працювати в реальний світ, де
Ви працюєте на спільній програми і люди в різних командах
працюють разом, щоб написати те ж саме програма або ж набір програм,
вони часто повторно змінну імена, зокрема, загальні,
як х, у, I, J, і так далі.
>> Але коли змінні мають те ж саме ім'я, питання сфери застосування
може отримати трохи складніше для аналізу.
Наприклад, ви знаєте, що б бути роздруковані
Наприкінці цій програмі?
Зупиніться на хвилинку.
Пауза відео і читати за допомогою цієї програми.
Ви можете побачити на верху ми є функція декларацію
для виклику функції збільшення.
Ця функція приймає один Параметр, ціле число, яке ми називаємо х.
І це виводить ціле число.
Це тип повертається на початку.
>> Тоді у нас є головний, кілька рядків коду в основний, останній з яких
це оператор друку.
І пам'ятайте, що це питання тут.
Що насправді відбувається, щоб бути друкується в кінці цієї функції?
І тоді ми насправді є Визначення приросту нижче.
>> Так що беріть хвилину, покроково код, простежити речі.
Ви знаєте, що буде надруковано в кінець цій програмі?
>> Добре.
Сподіваюся, ви взяли кілька секунд щоб спробувати розібрати цей один з.
Давайте зробимо це разом.
>> Так що я викреслив прирощення-х Заява на вершині там.
Це був свого роду відволікання.
Це не його власної змінної.
Він не має свою область застосування.
Це просто функція Декларація, так і для цілей
в спробі розібрати те, що що відбувається в цій програмі,
ми могли б також просто уникати його.
>> Тепер ми маємо в цьому випадку Причина ця проблема є складним
тому, що ми мати локальні змінні в і основний і прирощення, кожен з яких
Називається х.
І, звичайно, суть цього питання намагаючись дізнатися, які змінили х отримує
і як це отримати змінилося.
Так що я пофарбовані кожен екземпляр х це місцевий до основного червоний.
І я кольоровий кожен екземпляр х це локальна для збільшення синій.
>> Зверніть увагу на те третьої лінії з основної, у дорівнює прирощення
х, що приріст не будучи Минуло х Майні, або червоний хрестик.
Це стає пройшов копію.
І це буде тільки працювати з що його копія, синій х.
Якщо ви математично схильні, ви, можливо,
замість цього думав про це, як суб х м для основного і х Sub Я для збільшення.
Але це та ж ідея.
х суб м, або червоний ікси в попередньому слайді,
є змінними, які local-- є екземпляром х, а що
є локальною для основної, і х я на південь, або блакитні змінні в попередньому слайді,
є випадки х, що локальні для збільшення.
>> Так, ви змогли з'ясувати, що ця функція надрукована в кінці?
Я Дуг Ллойд, і це CS50.