Rozdiel medzi miestnou a globálnou premennou
Obsah
Ako sme už diskutovali, premenná je názov priradený miestu v pamäti a pred použitím sa musí deklarovať. V C sú všetky premenné deklarované na začiatku programu. V C ++ sa premenné môžu deklarovať kedykoľvek pred tým, ako sa použijú v pokynoch.
Premenné sú klasifikované ako „lokálna“ a „globálna“ premenná, ktorá je hlavnou témou našej diskusie. Tu je hlavný rozdiel medzi lokálnou a globálnou premennou ten, že lokálna premenná je deklarovaná vo funkčnom bloku. Naopak, globálna premenná je deklarovaná mimo funkcií v programe.
Pozrime sa na ďalšie rozdiely medzi miestnou a globálnou premennou spolu s porovnávacou tabuľkou.
- Porovnávacia tabuľka
- definícia
- Kľúčové rozdiely
- výhody
- nevýhody
- záver
Porovnávacia tabuľka:
ZÁKLAD PRE POROVNANIE | MIESTNA PREMENNÁ | GLOBÁLNA PREMENNÁ |
---|---|---|
vyhlásenie | Premenné sú deklarované vo vnútri funkcie. | Premenné sú deklarované mimo akejkoľvek funkcie. |
Rozsah | V rámci funkcie, v ktorej sú deklarované. | V priebehu celého programu. |
hodnota | Neinicializovaná lokálna premenná má za následok uloženie hodnoty odpadu. | Neinicializovaná globálna premenná predvolene ukladá nulu. |
prístup | Prístup k nim majú iba vyhlásenia, vo vnútri funkcie, v ktorej sú deklarované. | Prístup k akémukoľvek vyhláseniu v celom programe. |
Zdieľanie údajov | Neboli poskytnuté | uľahčenie |
život | Vytvorené, keď je funkčný blok zadaný a zničený pri ukončení. | Zostaňte po celú dobu vykonávania programu. |
skladovanie | Lokálne premenné sa ukladajú do zásobníka, pokiaľ nie je uvedené inak. | Uložené na pevnom mieste, o ktorom rozhodne kompilátor. |
Prechod parametrov | Potrebné | Nevyžaduje sa pre globálne premenné. |
Zmeny v premennej hodnote | Akákoľvek zmena zahrnutá v lokálnej premennej neovplyvní ďalšie funkcie programu. | Zmeny použité v globálnej premennej funkcie odrážajú zmeny v celom programe. |
Definícia miestnej premennej
lokálna premenná je vždy deklarovaná vo funkčnom bloku. V C sa lokálna premenná deklaruje na začiatku bloku kódu. V C ++ ich možno deklarovať kdekoľvek v kódovom bloku pred ich použitím. Prístup k lokálnym premenným je možný iba príkazmi napísanými vo vnútri funkcie, v ktorej sú deklarované lokálne premenné. Sú bezpečné v tom zmysle, že k nim nemôže byť prístupná iná funkcia toho istého programu.
Lokálna premenná existuje, kým nie je blok vykonaný vo funkcii, a preto je zničený po ukončení vykonávania bloku. Lokálne premenné strácajú svoj obsah, len čo vykonávanie opustilo blok, v ktorom sú deklarované.
Dôvodom je to, že lokálne premenné sú uložené v zásobníku, pokiaľ nie je špecifikované ich špeciálne uloženie. Zásobník je dynamickej povahy a zmena umiestnenia pamäte vedie k dôvodu, prečo lokálna premenná neponecháva svoju hodnotu, akonáhle blok funkcie neexistuje.
Poznámka:
Existuje však spôsob, ako zachovať hodnotu miestnej premennej pomocou modifikátora „statický“.
Definícia globálnej premennej
globálna premenná je deklarovaná mimo všetkých funkcií prítomných v programe. Na rozdiel od lokálnych premenných, ku globálnej premennej sa dá dostať pomocou akejkoľvek funkcie prítomnej v programe. Globálne premenné nie sú príliš spoľahlivé, pretože ich hodnota môže byť zmenená akoukoľvek funkciou prítomnou v programe.
Zostávajú v platnosti až do úplného spustenia celého programu. Globálne premenné si zachovávajú svoje hodnoty, až kým sa program nespustí. Dôvod je ten, že sú uložené v pevnej oblasti pamäte, o ktorej rozhodne kompilátor.
Globálna premenná je užitočná v situáciách, keď k rovnakým údajom pristupuje viacero funkcií. Používanie veľkého počtu globálnych premenných môže byť problematické, pretože môžu dôjsť k nežiaducim zmenám hodnoty globálnej premennej.
- Miestne premenné sa nazývajú „miestne“, pretože sú známe iba pre príkazy napísané vo funkcii, v ktorej sú deklarované, a nie sú známe žiadnej inej funkcii prítomnej mimo tohto funkčného bloku. V prípade globálnej premennej sú známe každej funkcii prítomnej v programe; preto sa nazývajú „globálne“.
- Globálne premenné si zachovávajú svoju hodnotu, kým sa program nenachádza vo fáze vykonávania, pretože sú uložené na pevnom mieste, o ktorom rozhodne kompilátor. Lokálne premenné sú uložené v zásobníku; preto si nezachovávajú svoju hodnotu, pretože „stack“ má dynamickú povahu, ale kompilátor môže byť vyzvaný, aby si zachoval svoju hodnotu pomocou „statického“ modifikátora.
- Ak sú globálna a lokálna premenná deklarované s rovnakým názvom, všetky príkazy kódového bloku, v ktorom je deklarovaná lokálna premenná, sa budú vzťahovať iba na lokálnu premennú a nespôsobia žiadny účinok pre globálnu premennú.
- Lokálna premenná je zničená, keď je kontrola výstupu programu z bloku, v ktorom je deklarovaná lokálna premenná. Po ukončení celého programu sa však globálna premenná zruší.
výhody
Lokálna premenná
- Hlavnou výhodou miestnej premennej je to, že nedochádza k náhodnej zmene údajov. Premenná je deklarovaná vo vnútri bloku a tento blok kódu používa premennú a zabraňuje nežiaducim vedľajším účinkom.
- Lokálna premenná spotrebuje pamäť na obmedzenú dobu, iba ak sa vykoná blok obsahujúci premennú.
Globálna premenná
- Globálne premenné sú veľmi užitočné, keď pracujete s niekoľkými funkciami programu, ktoré manipulujú s rovnakými údajmi.
- Zmeny, ktoré je potrebné uplatniť v celom programe, by sa uľahčili implementáciou globálnej premennej.
- Môžeme pristupovať odkiaľkoľvek alebo prostredníctvom ľubovoľnej náhodnej funkcie programu.
nevýhody
Lokálna premenná
- Rozsah lokálnej premennej je obmedzený.
- Zakazuje zdieľanie údajov.
- Nie sú schopní uchovať dáta medzi hovormi, pretože miestne premenné sú generované a odstraňované pri každom vstupe a výstupe z bloku. Statický modifikátor sa však môže použiť na zachovanie hodnôt.
Globálna premenná
- Použitie veľkého množstva globálnych premenných by mohlo mať za následok generovanie programových chýb.
- Hlavným problémom, ktorý spôsobuje, je náhodný výskyt zmien v dôsledku šírených globálnych premenných v celom programe.
- Mohlo by to tiež viesť k potrebe vykonať zmenu kódu, čo je veľmi rozsiahly proces, v rámci ktorého sa celý programový kód reštrukturalizuje.
záver:
Pri písaní programu sú potrebné lokálne aj globálne premenné. Vyhlásenie veľkého počtu globálnych premenných by však mohlo byť v masívnom programe problematické, pretože by mohlo spôsobiť nežiaduce zmeny globálnej premennej; a bolo by ťažké zistiť, ktorá časť programu túto zmenu vykonala. Preto by sme sa mali vyhýbať deklarovaniu nepotrebných globálnych premenných.