Ўзгарувчилар ва ифодалар
Ихтиёрий дастурда ҳисоблашларни бажариш талаб этилади. Қийматларни ҳисоблаш учун операндлар, амаллар ишоралари ва қавслардан иборат ифадалардан фойдаланилади. Операндлар ҳисоблашлар учун маълумотларни беради. Амаллар бажариш учун зарур харакатларни беради. Ҳар бир операнд ўз навбатида ифода ёки унинг хусусий ҳолидан бири масалан, константа ёки ўзгарувчи бўлади. Амаллар устивориги бўйича бажарилади. Амаллар бажарилиш тартибини ўзгартириш учун қавслар ишлатилади.
Ифодалар таркибининг қисмлари ва уларни ҳисоблаш қоидаларини қараймиз.
O’zgaruvchilar
O’zgaruvchi - bu ma’lum tipdagi ma’lumotlar saqlanadigan xotiraning nomlangan sohasi. O’zgaruvchining nomi va qiymati bor. Nom qiymat saqlanadigan xotira sohasiga ko’rsatish uchun xizmat qiladi. Dasturni bajarish paytida o’zgaruvchi qiymatini o’zgartirish mumkin.
Foydalanishdan oldin ixtiyoriy o’zgaruvchi tavsiflanishi lozim. a ismli va x xaqiqiy o’zgaruvchili butun o’zgaruvchi tavsifiga misol.
Ўзгарувчи - бу маълум типдаги маълумотлар сақланадиган хотиранинг номланган соҳаси. Ўзгарувчининг номи ва қиймати бор. Ном қиймат сақланадиган хотира соҳасига мурожаат қилиш учун хизмат қилади. Дастурни бажариш давомида ўзгарувчи қийматини ўзгартириш мумкин.
Фойдаланишдан олдин ҳар бир ўзгарувчи тавсифланиши лозим. а номли бутун ўзгарувчи ва х хақиқий ўзгарувчининг тавсифланиши:
int a; float x;
Ўзгарувчиларни тасвирлаш операторининг умумий кўриниши:
[xotira sinfi] [const] tip nom [initsializator]
Bu operatorning tarkibiy qismlarini berishning qoidalarini qaraymiz:
- хотиранинг мажбурий бўлмаган синфи auto, extern, satatic ва register қийматлардан бирини қабул қилиши мумкин;
- const модификатор ўзгарувчи қийматини ўзгартириш мумкин эмаслигини кўрсатади. Бундай ўзгарувчи номланган константа ёки канстанталар деб аталади;
-тавсифлашда ўзгарувчига бошланғич қиймат бериш мумкин, бу инициализация деб аталади. Инициализаторни икки шаклда: тенглик белгси билан (= қиймат) ёки оддий қавслар ( ) билан ёзиш мумкин.
Константа эълон қилишда инициализацияланиши шарт. Битта операторда бир типдаги бир нечта ўзгарувчини вергуллар билан ажратиб тасвирлаш мумкин.
Мисоллар:
short int а = 1; // a butun o’zgaruvchi
const char С = ' С '; // C simvol konstanta
char s, sf = ' f '; // initsializatsiya faqat sf ga taaluqli
char t (54);
float с = 0.22, x(3), sum;
Агар инициализацияланадиган қиймат типи ўзгарувчи типи билан мос тушмаса маълум қоидалар бўйича тип алмаштириши бажарилади.
Хотира типи ва синфидан ташқари тавсифи ошкора ёки жимлик бўйича унинг амал қилиш соҳасини беради. Хотира синфи ва амал қилиш соҳаси нафақат мос тавсифга балки унинг дастури матни жойига боғлиқ.
Идентификатор амал қилиш соҳаси – бу дастурнинг шундай қисмики, унда у билан боғлиқ хотира соҳасига кириш учун фойдаланиш мумкин. Амал қилиш соҳасига боғлиқ равишда ўзгарувчи локал ёки глобал бўлиши мумкин.
Агар ўзгарувчи блок ичида аниқланган бўлса (блок фигурали қавслари чегараланган) у локал деб аталади, унинг амал қилиш соҳаси – блок охиригача тавсиф нуқтасидан барча ичма - ич жойлашган блокларни ўз ичига олган. Агар ўзгарувчи ихтиёрий блокдан ташқарида аниқланган бўлса, у глобал деб аталади ва унинг амал қилиш соҳаси глобал деб ҳисобланади, унда у тавсиф нуқтасидан унинг охиригача аниқланган.
Хотира синфи ҳаётий муддатини ва дастурий обектнинг кўриниш соҳасини (хухсусан, ўзгарувчини) аниқлайди. Агар хотира синфи ошкора кўрсатилмаган бўлса, у компютер томонидан еълон контекстига асосланиб аниқланади.
Дастурни бажариш давомида ( блокни бажариш давомида ) ҳаёт муддати доимий ва ўзгарувчи бўлиши мумкин.
Идентификатор кўриниши соҳаси деб - идентификатор билан боғлиқ хотира соҳасига оддий киришга кириш мумкин бўлган дастур матни қисмига айтилади. Кўпроқ кўриниш соҳаси амал қилиш соҳаси билан устма – уст тушади. Бундан истисно, ичма-ич жойлашган блокда ўша номдаги ўзгарувчи тавсифланган. Бу ҳолда ичма-ич жойлашган блокда ташқи ўзгарувчи кўринмас, вахоланки у амал қилиш соҳасига киради. Шунга қарамай агар бу ўзгарувчига агар глобал бўлса, кўриниш соҳасига кириш амалидан фойдаланиб мурожаат қилиш мумкин::.
Xotira sinfini berish uchun quyidagi identifiktordan foydalaniladi:
auto - avtomat o’zgaruvchi. Unga xotira stekda ajratiladi va ta’rini o’z ichiga olgan operatorni bajarishda har safar initsializatsiyalanadi. Xotirani tozalash o’zgaruvchi tavsiflangan blokdan chiqishda ro’y beradi. Uning hayot muddati - tavsiflash momentidan blok oxirigacha. Global o’zgaruvchilar uchun bu identifikatordan foydalanilmaydi, lokallar uchun u jimlik bo’yicha qabul qilinadi, shuning uchun uni oshkora ravishda katta ma’noga ega emas.
extern - o’zgaruvchi dasturning boshqa joyida aniqlanishini bildiradi ( boshqa joyida yoki matn bo’yicha). Dasturning barcha modullarida mumkin bo’lgan o’zgaruvchilarni yaratish uchun foydalaniladi.
static - statik o’zgaruvchi. Hayotiy muddati – doimiy. O’zgaruvchi ta’kidini o’zagiga olgan operatsiyani birinchi bajarishda bir marta initsializatsiyalashda tavsiflash operatorning joylashishiga bog’liq ravishda statik o’zgaruvchilar global va lokal bo’lishi mumkin. Global statik o’zgaruvchilar faqat ular tavsiflanishi modulda ko’rinadi.
register - auto ga o’xshash, lekin xotira protsessor registrlarida imkoniyati bo’yicha ajratiladi. Agar bunday kompilyator bunday imkoniyat bo’lmasa o’zgaruvchilar auto kabi qayta ishlanadi.
int а; //1 a global o’zgaruvchi
int main( ){
int b; // 2 b lokal o’zgaruvchi
extern int x; // 3 x o’zgaruvchi boshqa joyda aniqlangan
static int с; // 4 с lokal statik o’zgaruvchi
а = 1; // 5 global o’zgaruvchi berish
int а; // 6 а lokal o’zgaruvchi
а = 2; // 7 lokal o’zgaruvchi berish
::а = 3; // 8 global o’zgaruvchi berish
return 0;
}
int x = 4; // 9 x ni aniqlash va initsializatsiyalash
Bu misolda a global o’zgaruvchi barcha bloklardan tashqarida aniqlangan. Unga xotira dastur ish boshlaganda ma’lumotlar segmentida ajratiladi, amal qilsih sohasi butun dastur hisoblanadi, ko’rinish sohasi 6-8 satrlaridan boshqa butun uchun ulardan birinchida aniqlanadi o’sha paytdagi lokal o’zgaruvchi aniqlanadi, uning amal qilish sohasi uni tavsiflash nuqtasidan boshlanadi va blokdan chiqishda tugaydi b va c o’zgaruvchilar – lokal, ularning ko’rinish sohasi – blok, lekin yashash davri turlicha: b ga xotira bloki kirishda stekda ajratiladi va undan chiqishda ozod qilinadi, c o’zgaruvhi esa ma’lumotlar segmentida joylashadi va dastur ishlash davrida mavjud bo’ladi.
Agar ta’riflashda o’zgaruvchilarning boshlang’ich qiymati oshkor berilmasa, u holda kompilyator global va lokal o’zgaruvchilarga mos tipdagi nol qiymat beradi. Avtomat o’zgaruvchilar initsializatsiyalanmaydi.
O’zgaruvchi nomi o’z amal qilish sohasida yagona bo’lishi lozim (masalan, bir blokda ikkita bir xil nomga ega ikkita o’zgaruvchi bo’lishi mumkin emas).
Dostları ilə paylaş: |