Rozdíl mezi místní a globální proměnnou
Obsah
Jak jsme již diskutovali dříve, proměnná je jméno dané umístění v paměti a musí být deklarováno před použitím. V C jsou všechny proměnné deklarovány na začátku programu. V C ++ mohou být proměnné deklarovány kdykoli předtím, než jsou použity v pokynech.
Proměnné jsou klasifikovány jako „lokální“ a „globální“ proměnná, což je hlavní téma naší diskuse. Zde je hlavní rozdíl mezi lokální a globální proměnnou v tom, že lokální proměnná je deklarována uvnitř funkčního bloku. Naproti tomu globální proměnná je deklarována mimo funkce v programu.
Podívejme se na další rozdíly mezi místní a globální proměnnou spolu s srovnávacím grafem.
- Srovnávací tabulka
- Definice
- Klíčové rozdíly
- Výhody
- Nevýhody
- Závěr
Srovnávací tabulka:
ZÁKLAD PRO POROVNÁNÍ | MÍSTNÍ Proměnná | GLOBÁLNÍ variabilní |
---|---|---|
Prohlášení | Proměnné jsou deklarovány uvnitř funkce. | Proměnné jsou deklarovány mimo jakoukoli funkci. |
Rozsah | V rámci funkce, v níž jsou deklarovány. | V celém programu. |
Hodnota | Neinicializovaná lokální proměnná má za následek uložení hodnoty odpadu. | Neinicializovaná globální proměnná ve výchozím nastavení ukládá nulu. |
Přístup | Přístupné pouze pomocí příkazů, uvnitř funkce, ve které jsou deklarovány. | Přístup k jakémukoli prohlášení v celém programu. |
Sdílení dat | Není poskytováno | Usnadněno |
Život | Vytvořeno, když je funkční blok zadán a zničen při ukončení. | Zůstaňte po celou dobu provádění programu. |
Úložný prostor | Lokální proměnné se ukládají do zásobníku, pokud není uvedeno. | Uloženo na pevném místě, o kterém rozhodl překladač. |
Předávání parametrů | Nutně nutné | Není požadováno pro globální proměnné. |
Změny proměnné hodnoty | Jakákoli modifikace implikovaná v lokální proměnné neovlivní ostatní funkce programu. | Změny použité v globální proměnné funkce odrážejí změny v celém programu. |
Definice lokální proměnné
A lokální proměnná je vždy deklarována uvnitř funkčního bloku. V C je lokální proměnná deklarována na začátku bloku kódu. V C ++ mohou být deklarovány kdekoli v kódovém bloku před jejich použitím. K lokálním proměnným lze přistupovat pouze pomocí příkazů zapsaných uvnitř funkce, ve které jsou deklarovány lokální proměnné. Jsou v bezpečí v tom smyslu, že k nim nemá přístup žádná jiná funkce stejného programu.
Lokální proměnná existuje, dokud není blok funkce ve vykonání, a proto je zničen po ukončení opuštění bloku. Lokální proměnné ztratí svůj obsah, jakmile provádění opustí blok, ve kterém jsou deklarovány.
Důvodem je to, že lokální proměnné jsou uloženy v zásobníku, pokud není uvedeno jejich speciální úložiště. Zásobník je dynamické povahy a změna umístění paměti vede k důvodu, proč lokální proměnná neudrží svou hodnotu, jakmile blok funkce existuje.
Poznámka:
Existuje však způsob, jak zachovat hodnotu místní proměnné pomocí modifikátoru „statický“.
Definice globální proměnné
A globální proměnná je deklarována mimo všechny funkce přítomné v programu. Na rozdíl od lokálních proměnných je globální proměnná přístupná libovolnou funkcí přítomnou v programu. Globální proměnné nejsou příliš spolehlivé, protože jejich hodnotu lze změnit jakoukoli funkcí přítomnou v programu.
Zůstávají v platnosti, dokud nebude celý program proveden úplně. Globální proměnné si zachovají své hodnoty, dokud není program spuštěn. Důvod je ten, že jsou uloženy v pevné oblasti paměti, o které rozhoduje kompilátor.
Globální proměnná je užitečná v situacích, kdy ke stejným datům přistupuje více funkcí. Použití velkého počtu globálních proměnných může být problematické, protože může dojít k nežádoucím změnám hodnoty globální proměnné.
- Místní proměnné se nazývají „místní“, protože jsou známy pouze příkazům psaným ve funkci, uvnitř které jsou deklarovány, a nejsou známy žádné jiné funkci přítomné mimo tento funkční blok. V případě globální proměnné jsou známy každé funkci přítomné v programu; proto se nazývají „globální“.
- Globální proměnné si zachovávají svou hodnotu, dokud není program ve fázi provádění, protože jsou uloženy na pevném místě, o kterém rozhodne kompilátor. Lokální proměnné jsou uloženy v zásobníku; proto si nezachovávají svou hodnotu, protože „stack“ je dynamický charakter, ale kompilátor může být nasměrován, aby si udržel svou hodnotu pomocí „statického“ modifikátoru.
- Pokud jsou globální a lokální proměnná deklarovány se stejným názvem, budou všechny příkazy bloku kódu, ve kterém je deklarována lokální proměnná, odkazovat pouze na lokální proměnnou a nebudou mít vliv na globální proměnnou.
- Lokální proměnná je zničena, když je kontrola programu ukončena z bloku, ve kterém je deklarována lokální proměnná. Po ukončení celého programu je však globální proměnná zničena.
Výhody
Místní proměnná
- Hlavní výhodou lokální proměnné je, že nedochází k náhodným změnám dat. Proměnná je deklarována uvnitř bloku a tento blok kódu používá proměnnou a zabraňuje nežádoucím vedlejším účinkům.
- Lokální proměnná spotřebovává paměť po omezenou dobu, pouze pokud je spuštěn blok obsahující proměnnou.
Globální proměnná
- Globální proměnné jsou velmi užitečné, když pracujete s několika funkcemi v programu, které manipulují se stejnými daty.
- Změny, které je třeba použít v celém programu, by byly jednodušší implementací globální proměnné.
- Můžeme získat přístup odkudkoli nebo prostřednictvím libovolné náhodné funkce programu.
Nevýhody
Místní proměnná
- Rozsah lokální proměnné je omezen.
- Zakazuje sdílení dat.
- Nejsou schopni uchovat data mezi hovory, protože místní proměnné jsou generovány a odstraňovány s každým vstupem a výstupem z bloku. Statický modifikátor však lze použít k zachování hodnot.
Globální proměnná
- Použití velkého počtu globálních proměnných by mohlo vést ke generování programových chyb.
- Hlavním problémem, který způsobuje, je náhodný výskyt změn v důsledku šířených globálních proměnných v celém programu.
- Mohlo by to také zvýšit potřebu provádět refaktoring kódu, což je velmi rozsáhlý proces, ve kterém dochází k restrukturalizaci celého programového kódu.
Závěr:
Místní i globální proměnné jsou při psaní programu nezbytné a stejně nutné. Deklarace velkého počtu globálních proměnných by však mohla být v masivním programu problematická, protože by to mohlo způsobit nežádoucí změny globální proměnné; a bylo by obtížné určit, která část programu tuto změnu provedla. Proto by se člověk neměl vyhýbat deklarování zbytečných globálních proměnných.