Eslatma. Sanash qiymatlar oralig'i uning barcha qiymatlarini tasvirlash uchun zarur bitlar soni bilan aniqlanadi. Butun sonli tipdagi ixtiyoriy qiymatni sanash tipiga oshkora keltirish mumkin, lekin uning oralig'i chegaralaridan chiqishda natija aniqlanmagan.
Strukturalar (struct)
Barcha elementlari bir xil tipda bo'lgan massivdan farqli, struktura turli tipdagi elementlarni o'z ichiga oladi. C++ tilida struktura sinf turi hisoblanadi va uning barcha xossalariga ega, lekin ko'p hollarda strukturalarni C tilde qanday aniqlangan bo'lsa shunday foydalanish yetarli.
struct [ tip_nomi ] {
1_tip 1_element;
2_tip 2_element;
…
n_tip n_element;
} [ tavsiflovchilar_ro'yxati ]
Struktura elementlari struktura maydonlari deb ataladi va bu struktura tipidan tashqari ixtiyoriy tipga ega, lekin unga ko'rsatgichlar bo'lishi mumkin. Agar tip nomi bo'lmasa, o'zgaruvchilar tavsiflovchilari, ko'rsatgichlar yoki massivlar ro'yxati ko'rsatilishi lozim. Bu holda struktura tavsifi bu ro'yxat elementlari ta'rifi bo'lib xizmat qiladi.
// strukturalar massivi va strukturaga ko'rsatgich ta'rifi
struct {
char fio[30];
int date, code;
double salary;
}staff[100], *ps;
Agar ro'yxat yo'q bo'lsa, struktura tavsifi yangi tipni aniqlaydi, uning nomini standart tiplar bilan bir qatorda kelgusida foydalanish mumkin, masalan:
struct Worker{ // yangi Worker tipiga tavsif
char fio[30];
int date, code;
double salary;
}; // tavsif nuqtali vergul bilan tugaydi
// Worker tipidagi massivni va Worker tipidagi ko'rsatgich ta'rifi
Struktura nomini kompilyatorga struktura o'lchamini bilish talab etilmagan hollarda uning e'lon qilgandan so'ng foydalanish mumkin, masalan:
struct List; // List struktura e'loni
struct Link{
List *p; // List strukturaga ko'rsatgich
Link *prev, *succ; // Link strukturaga ko'rsatgich
};
struct List { /* List strukturaga tavsif */};
Bu strukturalarning bog'lamli ro'yxatini yaratishga imkon beradi.
Struktura initsializatsiyasi uchun uning elementlari qiymatlari ularni tavsiflash tartibida figurali qavslarda sanab o'tiladi:
struct {
char fio[30];
int date, code;
double salary;
} worker = {"Страусенко", 31, 215, 3400.55};
Strukturalar massivlarini initsializatsiyalashda massivning har bir elementi figurali qavslarga olish lozim (ko'p o'lchovli massiv – massivlar massivi ekanligini hisobga olish):
struct complex{
float real, im;
} compl [2][3] = {
{{1, 1}, {1, 1}, {1, 1}}, // 1 satr. то есть массив compl[0]
{{2, 2}, {2, 2}, {2, 2}} // 2 satr. то есть массив compl[0]
};
Bir struktura tipdagi o'zgaruvchilar uchun qiymat berish aniqlangan, bunda elementlar bo'yicha nusxalash ro'y beradi. Strukturani funksiyaga berish mumkin va funksiya qiymati sifatida qaytarish mumkin. Strukturalar bilan boshqa amallar foydalanuvchi tomonidan aniqlanishi mumkin. Struktura o'lchami uning elementlari o'lchamlari yig'indisiga teng bo'lishi shart emas, chunki ular satr chegaralari bo'yicha tekislanishi mumkin.
Struktura maydonlariga kirish maydoncha . (nuqta) struktura nomi orqali murojaat qilinganda va ko'rsatgich orqali murojaat qilganda tanlash amali yordamida bajariladi, masalan:
Worker worker, staff[100], *ps;
…
worker. fio = "Страусенко";
staff[8].code = 215;
ps->salary = 0.12;
Agar struktura elementlari boshqa struktura bo'lsa, u holda uning elementlariga kirish ikkita tanlash amali orqali bajariladi:
srtuct A {int a; double x;};
struct B {A a; double x;} x[2];
x[0].a.a = 1;
x[1].x = 0.1;
Misoldan ko'rinadiki, turli strukturalar maydonlari bir xil ismlarga ega, chunki ularda turlicha ko'rinish sohasi bo'ladi. Bir ko'rinish sohasida bir xil nomli struktura va obyektni e'lon qilish mumkin, agar struktura o'zgaruvchini ta'riflashda struct so'zidan foydalanilsa, lekin buni qilishni maslahat bermayman – kompilyatorni o'zingizcha qaraganda chalkashtirish qiyinroq.
Do'stlaringiz bilan baham: |