Interested Article - Локальная переменная
- 2021-06-05
- 1
В программировании локальной переменной называют переменную , объявленную внутри блока кода. Область видимости локальной переменной начинается в точке её объявления и заканчивается в конце этого блока . Например, в языке Си локальными являются переменные объявленные внутри функции или блока (в Си, блоки ограничиваются фигурными скобками { и }) .
Существуют языки программирования, в которых локальную переменную можно объявить только в функции, так как в этих языках локальная переменная, объявленная в блоке, объявляется в функции непосредственного расположения этого блока.
Организация в памяти
Локальные переменные хранятся в стеке вызовов в большинстве языков . Это означает, что если функция рекурсивно вызывает сама себя, то переменные каждый раз создаются заново и им выделяется персональная память, а не запись в одно и то же место.
Ограничения
Локальная переменная ограничивается только размером памяти выделенной операционной системой или компьютером под стек.
Алгол–подобные языки позволяют устраивать сколь угодно большую вложенность блоков и в каждом будут свои локальные переменные.
Область применения
Локальные переменные делают возможной рекурсию .
Переменные локальной области видимости используются, чтобы избежать проблем с побочными эффектами, которые могут произойти с глобальными переменными.
Языки программирования, которые используют вызов по значению, выделяют каждой подпрограмме локальную область видимости из локальных переменных с локальной копией аргументов переданных ей.
Локальной переменной является любой параметр функции(например, в языке Си), что не использует ссылок или указателей.
Статические локальные переменные
Статические переменные — это особый тип локальных переменных, доступен во многих популярных языках(включая c/c++, Visual Basic, VB.NET), суть его заключается в том, что эта переменная сохраняет в себе значение в каждом вызове функции. И в каждом вызове она будет ровно такой, какой была при закрытии тела этой функции до этого .
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
Примечания
- . Дата обращения: 26 февраля 2013. 4 августа 2013 года.
- . Дата обращения: 26 февраля 2013. 16 февраля 2013 года.
- Альфред Ахо, Моника Лам, Рави Сети, Джеффри Ульман. 1.6.3 Статическая область видимости и блочная структура // Компиляторы: принципы, технологии и инструменты = Compilers: Principles, Techniques, and Tools. — 2-е изд. — Вильямс, 2008. — С. . — 1184 с. — ISBN 978-5-8459-1349-4 .
- . — «По умолчанию локальные переменные хранятся в стеке.» Дата обращения: 26 февраля 2013. 4 августа 2013 года.
- Дата обращения: 26 февраля 2013. 16 февраля 2013 года.
- . Дата обращения: 26 февраля 2013. Архивировано из 30 января 2013 года.
- 2021-06-05
- 1