O’zgaruvchilar obyekt sifatida. C tilining asosiy tushunchalaridan biri nomlangan xotira qismi – obyekt tushunchasidir. Obyektning xususiy holi bu o’zgaruvchidir. O’zgaruvchiga qiymat berilganda unga ajratilgan xotira qismiga shu qiymat kodi yoziladi. O’zgaruvchi qiymatiga nomi orqali murojaat qilish mumkin, xotira qismiga esa faqat adresi orqali murojaat qilinadi. O’zgaruvchi nomi bu erkin kiritiladigan identifikatordir. O’zgaruvchi nomi sifatida xizmatchi so’zlarni ishlatish mumkin emas.
O’zgaruvchilarni ta’riflash. C tilida o’zgaruvchini aniqlash uchun kompyuterga uning turi (masalan, int, char yoki float) hamda ismi haqida ma’lumot beriladi. Bu axborot asosida kompilyatorga o’zgaruvchi uchun qancha joy ajratish lozim va bu o’zgaruvchida qanday turdagi qiymat saqlanishi mumkinligi haqida ma’lumot aniq bo’ladi. O’zgaruvchi nomi identifikator bo’lib, xizmatchi so’zlardan farqli bo’lishi kerak.Har bir yacheyka bir bayt o’lchovga ega. Agar o’zgaruvchi uchun ko’rsatilgan tur 4 baytni talab qilsa, uning uchun to’rtta yacheyka ajratiladi. Aynan o’zgaruvchini turiga muvofiq ravishda kompilyator bu o’zgaruvchi uchun qancha joy ajratish kerakligini aniqlaydi.Kompyuterda qiymatlarni ifodalash uchun bitlar va baytlar qo’llaniladi va xotira baytlarda hisoblanadi.
O’zgaruvchilar turlari. O’zgaruvchilarning quyidagi turlari mavjud:
- char – bitta simvol;
- long char – uzun simvol;
- int – butun son;
- short yoki short int – qisqa butun son;
- long yoki long int – uzun butun son;
- float haqiqiy son;
- long float yoki double – ikkilangan haqiqiy son;
- long double – uzun ikkilangan haqiqiy son.
Butun sonlar ta’riflanganda ko’rilgan turlar oldiga unsigned (ishorasiz) ta’rifi qo’shilishi mumkin. Bu ta’rif qo’shilgan butun sonlar ustida amallar mod 2n arifmetikasiga asoslangandir. Bu yerda n soni int turi xotirada egallovchi razryadlar sonidir. Agar ishorasiz k soni uzunligi int soni razryadlar sonidan uzun bo’lsa, bu son qiymati k mod 2n ga teng bo’ladi. Ishorasiz k son uchun ga –k amali 2n–k formula asosida hisoblanadi. Ishorali, ya’ni signed turidagi sonlarning eng katta razryadi son ishorasini ko’rsatish uchun ishlatilsa unsigned (ishorasiz) turdagi sonlarda bu razryad sonni tasvirlash uchun ishlatiladi.
O’zgaruvchilarni dasturning ixtiyoriy qismida ta’riflash yoki qayta ta’riflash mumkin.
Misol uchun:
int a, b1, ac; yoki int a;
int b1; int ac;
O’zgaruvchilar ta’riflanganda ularning qiymatlari aniqlanmagan bo’ladi. Lekin o’zgaruvchilarni ta’riflashda inisializasiya ya’ni boshlang’ich qiymatlarini ko’rsatish mumkin.
Misol uchun:
int i = 0; char c = ’k’;
Typedef ta’riflovchisi yangi turlarni kiritishga imkon beradi.
Misol uchun yangi COD turini kiritish:
typedef unsigned char COD; COD simbol;
Butun turlar o’lchami. Bir xil turdagi o’zgaruvchilar uchun turli kompyuterlarda xotiradan turli hajmdagi joy ajratilishi mumkin. Lekin bitta kompyuterda bir xil turdagi ikkita o’zgaruvchi bir xil miqdorda joy egallaydi. Masalan, char turli o’zgaruvchi bir bayt hajmni egallaydi. Ko’pgina kompyuterlarda short int (qisqa butun) turi ikki bayt, long int turi esa 4 bayt joy egallaydi. Butun qiymatlar o’lchovini kompyuter sistemasi va ishlatiladigan kompilyator aniqlaydi. 32 razryadli kompyuterlarda butun o’zgaruvchilar 4 bayt joy egallaydi.
Lokal va global o’zgaruvchilar. C tilida o’zgaruvchi ta’rifi albatta blok boshida joylashishi lozim. O’zgaruvchi mavjudlik sohasi deb shu o’zgaruvchiga ajratilgan xotira mavjud bo’lgan dastur qismiga aytiladi. O’zgaruvchi ko’rinish sohasi deb o’zgaruvchi qiymatini olish mumkin bo’lgan dastur qismiga aytiladi. Biror blokda ta’riflangan o’zgaruvchi lokal o’zgaruvchi deyiladi. Har qanday blokdan tashqarida ta’riflangan o’zgaruvchi global o’zgaruvchi deyiladi. Lokal o’zgaruvchi mavjudlik va ko’rinish sohasi ta’rifdan to shu ta’rif joylashgan blok oxirigachadir. Tashqi blokdagi o’zgaruvchi nomi shu blokda joylashgan yoki shu blokdagi ichki blokda o’zgaruvchi nomi bilan bir xil bo’lmasligi kerak. Global o’zgaruvchi mavjudlik sohasi ta’rifdan to dastur oxirigachadir. Agar ichki blokdagi o’zgaruvchi nomi global o’zgaruvchi nomi bilan bir xil bo’lsa lokal o’zgaruvchi ko’rinish sohasida global o’zgaruvchi ko’rinmay qoladi.
#include<stdio.h>
int i = 5;
int k = 6;
int main()
{
int i = 9;
printf("%d\n",i);
printf("%d\n",k);
return 0;
}