Lokal variabel

Den aktuella versionen av sidan har ännu inte granskats av erfarna bidragsgivare och kan skilja sig väsentligt från versionen som granskades den 20 februari 2016; kontroller kräver 13 redigeringar .

I programmering är en lokal variabel en variabel som deklareras inom ett kodblock. Omfattningen av en lokal variabel börjar vid punkten för dess deklaration och slutar i slutet av detta block [1] [2] . Till exempel, i C är variabler som deklareras inuti en funktion eller ett block lokala (i C avgränsas block av klammerparenteser { och }) [3] .

Det finns programmeringsspråk där en lokal variabel bara kan deklareras i en funktion, eftersom i dessa språk en lokal variabel som deklareras i ett block deklareras i funktionen för den omedelbara platsen för detta block.

Organisation i minnet

Lokala variabler lagras i samtalsstacken på de flesta språk [4] . Detta innebär att om en funktion anropar sig själv rekursivt, så återskapas variablerna varje gång och tilldelas personligt minne, istället för att skrivas till samma plats.

Begränsningar

En lokal variabel begränsas endast av mängden minne som tilldelats av operativsystemet eller datorn för stacken.

Algolliknande språk låter dig ordna godtyckligt stora kapslingar av block, och var och en kommer att ha sina egna lokala variabler.

Omfattning

Lokala variabler möjliggör rekursion [5] .

Lokala scope-variabler används för att undvika biverkningsproblem som kan uppstå med globala variabler.

Programmeringsspråk som använder call by value ger varje subrutin ett lokalt omfång av lokala variabler med en lokal kopia av argumenten som skickas till den.

En lokal variabel är en funktionsparameter (till exempel i C-språket) som inte använder referenser eller pekare.

Statiska lokala variabler

Statiska variabler är en speciell typ av lokala variabler tillgängliga på många populära språk (inklusive c/c++, Visual Basic, VB.NET), vars essens är att denna variabel behåller sitt värde i varje funktionsanrop. Och i varje samtal kommer det att vara exakt samma som det var när du stängde kroppen av denna funktion innan [6] .

locali Perl

Perl har ett nyckelord, local, för att "lokalisera" variabler, men i det här fallet localbetyder det inte vad de flesta skulle förvänta sig att det skulle betyda. [2] Den skapar en temporär variabel med en begränsad livslängd, men placerad i det globala namnområdet. Detta gör att du kan se denna variabel i vilken funktion som helst som anropas från detta block. För att skapa lexikaliska variabler, som är mer som automatiska variabler, använd my. För att förstå hur detta fungerar, överväg följande kod:

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

Resultat:

ett 2 ett

detta händer med ett globalt variabelnamn $asom börjar peka på en ny temporär variabel som skapats i funktionen f(), men det globala värdet återställs när du lämnar f(). Använd myi det här fallet istället localskulle skriva ut 1 tre gånger, eftersom variabeln i så fall $averkligen skulle vara lokal för funktionen f()och inte ses g(). Av den anledningen anser många att operatören localborde ha ett annat namn, som save. [5]

Lokala variabler i Ruby

Ruby som språk var också inspirerat av Perl, men i det här fallet gjordes notationen enklare: namnet på en global variabel måste föregås av ett $-tecken, till exempel $variabelnamn, medan en lokal variabel helt enkelt inte har en $ tecken framför namnet, till exempel variabelnamn (i medan i Perl har alla skalära värden en $ framför).

Ett exempel på användning av lokala variabler i C

#include <stdio.h> int a = 0 ; // global variabel int main () { printf ( "%d" , a ); // talet 0 kommer att visas { int a = 1 ; // lokal variabel a deklareras, global variabel a är inte synlig printf ( "%d" , a ); // siffran 1 kommer att visas { int a = 2 ; // fortfarande en lokal variabel i blocket, den globala variabeln a är inte synlig och den tidigare lokala variabeln är inte synlig printf ( "%d" , a ); // siffran 2 kommer att visas } } }

Kommer utfärda:

012

Anteckningar

  1. Lokala variabler . Datum för åtkomst: 26 februari 2013. Arkiverad från originalet den 4 augusti 2013.
  2. Exempel 22-8. Omfattning av lokala variabler . Hämtad 26 februari 2013. Arkiverad från originalet 16 februari 2013.
  3. Alfred Aho, Monica Lam, Ravi Seti, Jeffrey Ullman. 1.6.3 Statisk omfattning och blockstruktur // Kompilatorer : principer, tekniker och verktyg. - 2:a uppl. - Williams, 2008. - S.  62 . — 1184 sid. - ISBN 978-5-8459-1349-4 .
  4. Lokala variabler . - "Som standard lagras lokala variabler i stacken." Datum för åtkomst: 26 februari 2013. Arkiverad från originalet den 4 augusti 2013.
  5. 22.2.1. Lokala variabler möjliggör rekursion. . Hämtad 26 februari 2013. Arkiverad från originalet 16 februari 2013.
  6. Statiska variabler (nedlänk) . Datum för åtkomst: 26 februari 2013. Arkiverad från originalet 30 januari 2013.