Struktura xossalari — strukturalar bilan ishlashning chuqurroq imkoniyatlari. O’tgan darsda struktura yaratishni ko’rdik; endi ularni funksiyaga uzatish, ko’rsatkichlar bilan ishlash va ichma-ich strukturalarni o’rganamiz. Bu xossalar strukturalarni haqiqiy kuchli vositaga aylantiradi.
Struktura ko’rsatkichi — strukturaga ishora qiluvchi ko’rsatkich. Uning maydonlariga
->(strelka) operatori orqali murojaat qilinadi.
Strukturani funksiyaga uzatish
Struktura funksiyaga qiymat yoki manzil bo’yicha uzatilishi mumkin. Katta strukturalarni manzil bilan uzatish tejamkorroq:
#include <stdio.h>
typedef struct {
char nomi[30];
int narxi;
} Mahsulot;
void korsat(Mahsulot m) {
printf("%s — %d\n", m.nomi, m.narxi);
}
int main(void) {
Mahsulot t = {"iPhone", 12000000};
korsat(t);
return 0;
}
iPhone — 12000000
korsat funksiyasi strukturani qabul qilib, uning maydonlarini chiqardi. Bu strukturani bir birlik sifatida uzatishning namunasi.
Struktura ko’rsatkichi va -> operatori
Strukturaga ko’rsatkich orqali murojaat qilganda, . o’rniga -> (strelka) ishlatiladi:
#include <stdio.h>
typedef struct {
char nomi[30];
int narxi;
} Mahsulot;
void chegirma(Mahsulot *m) {
m->narxi = m->narxi - 1000; /* -> orqali murojaat */
}
int main(void) {
Mahsulot t = {"Telefon", 12000};
chegirma(&t);
printf("Yangi narx: %d\n", t.narxi);
return 0;
}
Yangi narx: 11000
m->narxi — bu (*m).narxi ning qisqartmasidir. Struktura manzil bilan uzatilgani uchun funksiya asl strukturani o’zgartira oldi. -> — C’da struktura ko’rsatkichlari bilan ishlashning standart usuli.
. va -> farqi
Ikki operatorni jadvalda solishtiramiz:
| Operator | Qachon ishlatiladi | Misol |
|---|---|---|
. (nuqta) |
struktura o’zgaruvchisi bilan | t.narxi |
-> (strelka) |
struktura ko’rsatkichi bilan | m->narxi |
Bu farqni yodda tuting: obyektning o’zi bo’lsa ., ko’rsatkich bo’lsa ->.
Ichma-ich struktura
Struktura ichida boshqa struktura bo’lishi mumkin — bu murakkab ma’lumotni modellashda foydali:
#include <stdio.h>
typedef struct {
int yil;
int oy;
} Sana;
typedef struct {
char nomi[30];
Sana tugilgan;
} Odam;
int main(void) {
Odam o = {"Farrux", {1998, 5}};
printf("%s — %d-yil\n", o.nomi, o.tugilgan.yil);
return 0;
}
Farrux — 1998-yil
Odam strukturasi ichida Sana strukturasi joylashdi. Ichki maydonga o.tugilgan.yil orqali murojaat qilinadi.
Xulosa
Bu bo’limda strukturani funksiyaga uzatish, struktura ko’rsatkichi va -> operatori, . bilan farqi hamda ichma-ich strukturalarni ko’rib chiqdik. Bu xossalar strukturalarni kuchli qiladi. Keyingi darsda abstrakt turlarni tasvirlashga o’tamiz.