Локальная переменная

Материал из Википедии — свободной энциклопедии
Перейти к: навигация, поиск
Пример локальной переменной в среде MS Visual Studio 2012

Локальная переменная — переменная, чья область видимости начинается с момента объявления, а заканчивается закрытием текущего блока[1], до момента объявления считается, что переменной не существует и быть вызванной уже не может, хотя функция, при этом, уже вызывалась[2].

Существуют языки программирования, которые создают локальные переменные только в теле функции(JavaScript)[3], а переменные блоков а переменные объявленные внутри блоков добавляются в область видимости функции до этого или становятся глобальными.

В языке Си все переменные объявленные в функция, даже в main() являются локальными[4].

Содержание

Организация в памяти [править]

Локальные переменные хранятся в стеке вызовов в большинстве языков[5]. Это означает, что если функция рекурсивно вызывает сама себя, то переменные каждый раз создаются заново и им выделяется персональная память, а не запись в одно и то же место.

Ограничения [править]

Локальная переменная ограничивается только размером памяти выделенной операционной системой или компьютером под стек.

Алгол–подобные языки позволяют устраивать сколь угодно большую вложенность блоков и в каждом будут свои локальные переменные.

Область применения [править]

Локальные переменные делают возможной рекурсию[6].

Переменные локальной области видимости используются, чтобы избежать проблем с побочными эффектами, которые могут произойти с глобальными переменными.

Языки программирования, которые используют вызов по значению, выделяют каждой подпрограмме локальную область видимости из локальных переменных с локальной копией аргументов переданных ей.

Локальной переменной является любой параметр функции(например, в языке Си), что не использует ссылок или указателей.

Статические локальные переменные [править]

Статические переменные — это особый тип локальных переменных, доступен во многих популярных языках(включая c/c++, Visual Basic, VB.NET), суть его заключается в том, что эта переменная сохраняет в себе значение в каждом вызове функции. И в каждом вызове она будет ровно такой, какой была при закрытии тела этой функции до этого[7].

В местном Perl [править]

Perl имеет ключевое слово, местные, для «локализации» переменных, но в этом случае, местных не то, что большинство людей думает, как "местный". [2] Это дает временный, динамически областью значения в глобальных (пакет) переменную, которая длится до конца окружающий блок. Однако, переменная видна любая функция вызывается из блока. Для создания лексических переменных, которые больше похожи на автоматические переменные говорилось выше, используйте оператор моем вместо. Чтобы понять, как это работает рассмотрим следующий код:

$a = 1;
 
sub f()
{
    local $a;
    $a = 2;
    g();
}
sub g()
{
    print "$a\n";
}
 
g();
f();
g();

Результат:

1
2
1

это происходит с глобальной переменной $ изменен на новый временный (местного) значения в F (), но глобальное значение восстанавливается при выходе из сферы F (). Используя мои в этом случае вместо локального бы печатного 1 три раза, так как в этом случае $ переменная действительно локальные рамки функции F () и не видели г (). По этой причине многие считают, что оператор местной должны были различные названия, как сохранение. [5]

Локальные переменные в Ruby [править]

Руби как язык был вдохновлен также Perl, но в этом случае, запись была сделана проще: имя глобальной переменной должно предшествовать знак $, например, $ имя_переменной, в то время как локальная переменная имеет не просто знак $ перед ее имя, как variable_name (в то время как в Perl все скалярные значения имеют $ спереди).

Пример [править]

int main()
{
    int num = 7;
    {
        num = 10;
        printf( "num = %i", num );
    }
    printf( "num = %i", num );
}

Выдаст:

num = 10
num = 7

Примечания [править]

  1. Локальные переменные. Архивировано из первоисточника 14 марта 2013. Проверено 26 февраля 2013.
  2. Пример 22-8. Область видимости локальных переменных. Архивировано из первоисточника 14 марта 2013. Проверено 26 февраля 2013.
  3. Область видимости переменной в Javascript (ликбез). — «Такая строка всегда создает новую локальную переменную. Если объявление происходит вне функций, то она будет глобальной, что вполне логично.»  Архивировано из первоисточника 14 марта 2013. Проверено 26 февраля 2013.
  4. УРОК 12. ЛОКАЛЬНЫЕ ПЕРЕМЕННЫЕ И ОБЛАСТЬ ВИДИМОСТИ. Архивировано из первоисточника 14 марта 2013. Проверено 26 февраля 2013.
  5. Локальные переменные. — «По умолчанию локальные переменные хранятся в стеке.»  Архивировано из первоисточника 14 марта 2013. Проверено 26 февраля 2013.
  6. 22.2.1. Локальные переменные делают возможной рекурсию.. Архивировано из первоисточника 14 марта 2013. Проверено 26 февраля 2013.
  7. Cтатические переменные. Архивировано из первоисточника 14 марта 2013. Проверено 26 февраля 2013.