Мавзу: Локал ва глобал ўзгарувчилар. Функсиялардан фойдаланиш. Олдиндан аниқланган функсиялар. Фойдаланувчи томонидан аниқланадиган функсиялар Локал ва глобал ўзгарувчилар Ўзгарувчилар функциятанаси ичида ёки ундан бошқаларида эълон қилиниши мумкин. Функция ичида эълон қилинган ўзгарувчиларга локал ўзгарувчилар дейилади. Бундай ўзгарувчилар программа стекида жойлашади ва фақат ўзи эълон қилинган функция танасида амал қилади. Бошқарув асосий функцияга қайтиши билан локал ўзгарувчилар учун ажратилган хотира бўшатилади.
Ҳар бир ўзгарувчи амал қилиш соҳаси ва яшаш вақти хусусияти билан характерланади.
Ўзгарувчи амал қилиш соҳаси деганда ўзгарувчини ишлатиш мумкин бўлган программа соҳаси (қноми) тушунилади. Бу тушунча билан ўзгарувчининг кўриниш сохаси узвий боғланган. Ўзгарувчи амал қилиш соҳасидан чиққанда кўринмай қолади. Иккинчи томондан, ўзгарувчи амал қилиш сохасида бўлиши, лекин кўринмас бўлиши мумкин. Охирги ҳолда кўришга рухсат берувчи амаллар ёрдамида кўринмас ўзгарувчига мурожат қилиш мумкин бўлади.
Ўзгарувчининг яшаш вақти деб у мавжуд бўлган программа бажариш интервалига айтилади.
Локал ўзгарувчилар ўзлари эълон қилган функция ёки блок чегарасида кўриниш соҳасига эга. Блок ичидаги ички блокларда худди шу номдаги ўзгарувчи эълон қилинган бўлса, ички блокларда локал ўзгарувчи амал қилмай қолади. Локал ўзгарувчи яшаш вақти блок ёки функцияни бажариш вақти билан аниқланади. Бу ҳол шуни англатадики, турли функцияларда бир хил номдаги, лекин бир-бирига умуман боғлиқ бўлмаган локал ўзгорувчиларни ишлатиш мумкин.
Қуйидаги программада main( ) ва sum( ) функцияларда бир хил номдаги ўзгарувчиларни ишлатиш кўрсатилган. Программада иккита соннинг йиғиндиси ҳисобланади ва чоп этилади:
# include // функция прототипи
// int sum(int a; int b);
int main( )
{
// локал ўзгарувчилар
int x = r;
int y=4;
cout <return 0;
}
int Sum(int a, int b)
{
// локал ўзгарувчи
int x=a+b;
return x;
}
Глобал ўзгарувчилар ҳар қандай функциялардан ташқарида эълон қилинади ва программа бажарилишининг охиригача амал қилади. Бундай ўзгарувчиларга программадан иҳтиёрий функциялардан мурожат қилиш мумкин. Функция ичидан глобал ўзгарувига мурожат қилиш учун функцияда унинг номи билан мос тушадиган локал ўзгарувчилар бўлмаслиги керак. Агар глобал ўзгарувчи эълонида унга бошланғич қиймат берилмаган бўлса, уларнинг қиймати 0 ҳисобланади. Глобал ўзгарувчининг амал қилиш соҳаси унинг кўриниш соҳаси билан устма-уст тушади.
Шуни қайд қилиш керакки, программа тузувчилар имкон қадар глобал ўзгарувчиларни ишлатмасликка ҳаракат қилади, чунки бундай ўзгарувчилар қийматини программанинг ихтиёрий жойидан ўзгартириш имконияти мавжуд ва бу ҳолат программанинг ишлашида мазмуний хатоларга олиб келиши мумкин. Бу фикримизни тасдиқловчи программани кўрайлик.
# include // глобал ўзгарувчи эълони
int test = 100;
void Chop_qilish(void );
int main( )
{
//локал ўзгарувчи эълони
int test =10;
//глобал ўзгарувчи чоп қилиш функциясини чақириш
Chop_qilish( );
сout << “Локал ўзгарувчи: ” << test<< ‘\n’;
return 0;
}
void Chop_qilish(void)
{
cout << “Глобал ўзгарувчи: ”<}
Бошда test глобал ўзгарувчи 100 қиймати билан эълон қилинади. Кейинчалик, main( ) функциясида test номи билан локал ўзгарувчиси 10 қиймати билан эълон қилинади. Программада, Chop_qilish( ) функциясига мурожаат қилинганида, асосий функция танасидан вақтинча чиқилади ва ерда эълон қилинган барча локал ўзгарувчиларга мурожаат қилиш мумкин бўлмайди ва Chop_qilish( ) функциясида глобал ўзгарувчи test қиймати чоп этилади. Асосий программага қайтгандан кейин, локал test ўзгарувчиси глобал test ўзгарувчисини “беркитади” ва “cout <<” қурилмаси билан локал test ўзгарувчини қиймати чоп этилади. Программа ишлаши натижасида экранга қуйидаги натижалар чоп этилади:
Глобал ўзгарувчи: 100
Локал ўзгарувчи: 10