Darsliklar C Struktura xossalari

C C Struktura xossalari

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’rsatkichistrukturaga 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.