ДАГ 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.