Birlashmalar
Strukturalarga yaqin tushuncha bu birlashma tushunchasidir. Birlashmalar union xizmatchi so’zi yordamida kiritiladi. Misol uchun:
union
{ long h;
int i,j; char c[4] }UNI;
Birlashmalarning asosiy xususiyati shundaki, uning hamma elementlari bir xil boshlang’ich adresga ega bo’ladi. Birlashmalarning asosiy afzalliklaridan biri xotira biror qismi qiymatini har xil tipdagi qiymat shaklida qarash mumkin.
Union
{
float f;
unsigned long k;
char h[4];
}fl;
Birlashmalar
Quyidagi dastur yordamida birlashma xususiyatini tekshirish mumkin:
#include
enum paytype{CARD, CHECK};
struct {
paytype ptype;
union{
char card[4];
long check;
};
}info;
int main()
{
info.ptype = CHECK;
info.check = 77;
switch (info.ptype) {
case CARD:printf("\nKarta bilan to'lash:%s", info.card); break;
case CHECK:printf("\nChek bilan to'lash:%ld", info.check); break;
}
return 0;
}
Natija Chek bilan to'lash:77
Birlashmalar
Imkoniyatlarini ko’rsatish uchun bioskey() funksiyasidan foydalanishni ko’rib chiqamiz. Bu funksiya bios.h sarlavhali faylda joylashgan bo’lib, quyidagi prototipga ega: int bioskey(int);
MS DOS operasion tizimida ixtiyoriy klavishaning bosilishi klaviatura buferiga ma’lumot yozilishiga olib keladi. Agar funksiyaga bioskey(0) shaklda murojaat qilinsa va bufer bo’sh bo’lsa biror klavishaga bosilishi kutiladi, agar bufer bo’sh bo’lmasa funksiya buferdan ikki baytli kodni o’qib butun son sifatida qaytaradi. Funksiyaga bioskey(0) shaklda murojaat qilinsa va bufer bo’sh bo’lsa biror klavisha bosilishi kutiladi, agar bufer bo’sh bo’lmasa funksiya buferdagi navbatdagi kodni qaytaradi. Funksiyaga bioskey(1) shaklda murojaat qilish bufer bo’sh yoki bo’shmasligini aniqlashga imkon beradi. Agar bufer bo’sh bo’lmasa funksiya buferdagi navbatdagi kodni qaytaradi, lekin bu kod buferdan o’chirilmaydi.
Birlashmalar
Quyidagi dastur buferga kelib tushuvchi kodlarni o’qib monitorga chiqarishga imkon beradi:
int main()
{
union
{
char hh[2];
int ii;
} cc;
unsigned char scn,asc;
printf("\n\n Ctrl+Z bilan chiqish.");
printf("\n Klavishani bosib, kodini oling. \n ");
printf("\n SCAN || ASCII"); printf("\n (10) (16) (10) (16)");
Birlashmalar
Do
{ printf("\n"); cc.ii = bioskey(0); asc = cc.hh[0];
scn = cc.hh[1];
printf(" %4d %3xH || %4d %3xH |", scn, scn, asc, asc);
}
while(asc! = 26 || scn! = 44);
return 0;
}
Bu dasturda cc nomli birlashma kiritilgan bo’lib, cc.ii elementiga bioskey(0) funksiyasi natijasi yoziladi. So’ngra natijaning alohida baytlari scn va ASCII kodlar sifatida monitorga chiqariladi.
Sikl to 26 ASCII kod va 44 scn kod paydo bo’lmaguncha (ctrl+Z klavishlari bosilmaguncha) davom etadi.
Ⅱ.bob.2.2 Ikkita (nomsiz) strukturani e’lon qilish
Struktura turini e’lonida turning nomi bo’lmasligi mumkin, lekin bu holda struktura aniqlanishidan keyin albatta o’zgaruvchilar nomlari yozilishi kerak:
struct
{
unsigned int x, y;
unsigned char Rang;
}Point1, Point2;
Keltirilgan misolda struktura turidagi Point1, Point2 o’zgaruvchilari e’lon qilingan.
Do'stlaringiz bilan baham: |