WikiSort.ru - Программирование

ПОИСК ПО САЙТУ | о проекте
Пример локальной переменной в среде MS Visual Studio 2012

В программировании локальной переменной называют переменную, объявленную внутри блока кода. Область видимости локальной переменной начинается в точке её объявления и заканчивается в конце этого блока[1][2]. Например, в языке Си локальными являются переменные объявленные внутри функции или блока (в Си, блоки ограничиваются фигурными скобками { и })[3].

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

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

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

Ограничения

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

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

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

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

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

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

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

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

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

local в Perl

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

$a = 1;

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

g();
f();
g();

Результат:

1
2
1

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

Локальные переменные в Ruby

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

Пример использования локальных переменных на языке С

#include <stdio.h>
int a = 0;  // глобальная переменная

int main()
{
    printf("%d", a); // будет выведено число 0
    {
       int a = 1; // объявлена локальная переменная а, глобальная переменная a не видна
       printf("%d", a); // будет выведено число 1
       {
          int a = 2; // еще локальная переменная в блоке, глобальная переменная a не видна, не видна и предыдущая локальная переменная
          printf("%d", a);  // будет выведено число 2
       }
    }
}

Выдаст:

012

Примечания

  1. Локальные переменные. Проверено 26 февраля 2013. Архивировано 14 марта 2013 года.
  2. Пример 22-8. Область видимости локальных переменных. Проверено 26 февраля 2013. Архивировано 14 марта 2013 года.
  3. Альфред Ахо, Моника Лам, Рави Сети, Джеффри Ульман. 1.6.3 Статическая область видимости и блочная структура // Компиляторы: принципы, технологии и инструменты = Compilers: Principles, Techniques, and Tools. — 2-е изд. — Вильямс, 2008. — С. 62. — 1184 с. ISBN 978-5-8459-1349-4.
  4. Область видимости переменной в Javascript (ликбез). — «...в Javascript область видимости переменной ограничивается только функциями, а не блоками...». Проверено 26 февраля 2013. Архивировано 14 марта 2013 года.
  5. Локальные переменные. — «По умолчанию локальные переменные хранятся в стеке.». Проверено 26 февраля 2013. Архивировано 14 марта 2013 года.
  6. 22.2.1. Локальные переменные делают возможной рекурсию.. Проверено 26 февраля 2013. Архивировано 14 марта 2013 года.
  7. Статические переменные. Проверено 26 февраля 2013. Архивировано 14 марта 2013 года.

Данная страница на сайте WikiSort.ru содержит текст со страницы сайта "Википедия".

Если Вы хотите её отредактировать, то можете сделать это на странице редактирования в Википедии.

Если сделанные Вами правки не будут кем-нибудь удалены, то через несколько дней они появятся на сайте WikiSort.ru .




Текст в блоке "Читать" взят с сайта "Википедия" и доступен по лицензии Creative Commons Attribution-ShareAlike; в отдельных случаях могут действовать дополнительные условия.

Другой контент может иметь иную лицензию. Перед использованием материалов сайта WikiSort.ru внимательно изучите правила лицензирования конкретных элементов наполнения сайта.

2019-2024
WikiSort.ru - проект по пересортировке и дополнению контента Википедии