Soovitatav, 2024

Toimetaja Valik

Erinevus kohaliku ja globaalse muutuja vahel

Nagu me varem arutasime, on muutuja nimi, mis antakse mälukohale ja see tuleb deklareerida enne selle kasutamist. C-s deklareeritakse kõik muutujad programmi käivitamisel. C ++ puhul võib muutujaid igal ajahetkel deklareerida enne, kui neid juhiseid kasutatakse.

Muutujad liigitatakse edaspidi „kohalikuks“ ja „globaalseks” muutujaks, mis on meie arutelu peamine teema. Siin on peamine erinevus kohaliku ja globaalse muutuja vahel see, et funktsionaalplokis deklareeritakse kohalik muutuja, kus globaalse muutujana deklareeritakse väljaspool programmi funktsioone.

Uurime veel mõningaid erinevusi kohaliku ja globaalse muutuja vahel koos võrdluskaardiga.

Võrdluskaart:

Võrdluse alusKohalik muutujaGlobaalne muutuja
DeklaratsioonMuutujad deklareeritakse funktsiooni sees.Muutujad deklareeritakse väljaspool mis tahes funktsiooni.
ReguleerimisalaFunktsioonis, mille sees nad deklareeritakse.Kogu programmi vältel.
JuurdepääsJuurdepääs ainult avaldustele, funktsioonis, milles nad on deklareeritud.Juurdepääs mis tahes avaldusele kogu programmis.
EluLoodud, kui funktsiooni plokk sisestatakse ja hävitatakse väljumisel.Jääb kogu programmi kestuse ajal püsima.
LadustamineKohalikud muutujad salvestatakse virnale, kui ei ole täpsustatud.Salvestatud fikseeritud asukohas, mille otsustab kompilaator.

Kohaliku muutuja määratlus

Kohalik muutuja deklareeritakse alati funktsiooniploki sees. C-s deklareeritakse koodiploki alguses kohalik muutuja. C ++-s võib neid enne nende kasutamist deklareerida kodeerimisplokis. Kohalikud muutujad on kättesaadavad ainult nende funktsioonide kaudu, mille kohalik muutuja on deklareeritud. Need on turvalised sellises mõttes, et neile ei pääse ligi ükskõik milline sama programmi funktsioon.

Kohalik muutuja eksisteerib seni, kuni funktsiooni plokk on täitmisel ja seega hävitatakse pärast teostuse lõpetamist blokist. Kohalikud muutujad kaotavad oma sisu niipea, kui täitmine on jätnud ploki, kus need on deklareeritud.

Selle põhjuseks on see, et kohalikud muutujad salvestatakse virnale, välja arvatud juhul, kui nende spetsiaalne säilitamine on määratud. Stack on oma olemuselt dünaamiline ja mälu asukoha muutus toob kaasa põhjuse, miks kohalik muutuja ei hoia oma väärtust kohe, kui funktsiooni plokk on olemas.

Märge:
Siiski on olemas võimalus säilitada kohaliku muutuja väärtus, kasutades staatilist modifikaatorit.

Globaalse muutuja määratlus

Globaalne muutuja deklareeritakse väljaspool kõiki programmi funktsioone. Erinevalt kohalikest muutujatest on globaalne muutuja ligipääsetav mis tahes programmi funktsiooniga. Globaalsed muutujad ei ole palju usaldusväärsed, sest nende väärtust saab muuta mis tahes programmi funktsioon.

Globaalsed muutujad jäävad alles, kuni kogu programm on täielikult teostatud. Globaalsed muutujad säilitavad oma väärtused, kuni programm on täitmisel. Põhjuseks on see, et need on salvestatud kindlasse mälupiirkonda, mille otsustab kompilaator.

Globaalne muutuja on kasulik olukordades, kus mitmed funktsioonid on samadele andmetele ligipääsud. Paljude globaalsete muutujate kasutamine võib olla problemaatiline, kuna globaalse muutuja väärtuses võib esineda soovimatuid muutusi.

Kohalike ja globaalsete muutujate peamine erinevus.

  1. Kohalikke muutujaid nimetatakse "kohalikeks", sest need on teada ainult nendes funktsioonides kirjutatud avalduste kohta, mille sees nad on deklareeritud ja mis ei ole teada mis tahes muust funktsioonist, mis asub väljaspool seda funktsiooni plokki. Ülemaailmse muutuja puhul on need teada iga programmi funktsioonist; seega nimetatakse neid "globaalseks".
  2. Globaalsed muutujad säilitavad oma väärtuse, kuni programm on teostusfaasis, kuna neid salvestatakse fikseeritud asukohas, mille otsustab kompilaator. Kohalikud muutujad salvestatakse virnale; seega ei säilita nad oma väärtust, kuna stack on looduses dünaamiline, kuid kompilaatorit saab suunata oma väärtuse säilitamiseks, kasutades staatilist modifikaatorit.
  3. Kui globaalne ja kohalik muutuja deklareeritakse sama nimega, siis kõik koodiploki avaldused, milles kohalik muutuja on deklareeritud, viitavad ainult kohalikule muutujale ega põhjusta globaalse muutuja mõju.
  4. Kohalik muutuja hävitatakse siis, kui programmi väljumist kontrollitakse plokist, kus kohalik muutuja on deklareeritud. Globaalne muutuja hävitatakse kogu programmi lõpetamisel.

Järeldus:

Kohalikud ja globaalsed muutujad on programmi kirjutamise ajal võrdselt vajalikud. Kuid suure hulga globaalsete muutujate deklareerimine võib suures programmis olla problemaatiline, sest see võib põhjustada soovimatuid muutusi globaalses muutujas; ja oleks raske tuvastada, milline programmi osa seda muutis. Seega tuleks vältida tarbetute globaalsete muutujate deklareerimist.

Top