Strukturoidut tietotyypit C: ssä - Struct ja Typedef Selitetty esimerkeillä

Ohjelmointikokemuksen aikana saatat tuntea tarpeen määritellä oman tyyppisi tiedot. C: ssä tämä tehdään kahdella avainsanalla: structja typedef. Rakenteet ja liitot antavat sinulle mahdollisuuden tallentaa ei-homogeenisia tietotyyppejä yhteen kokoelmaan.

Uuden tietotyypin ilmoittaminen

typedef struct student_structure{ char* name; char* surname; int year_of_birth; }student;

Tämän pienen koodin jälkeen studenttulee uusi varattu avainsana ja voit luoda tyypiltään muuttujia student. Huomaa, että tämän tyyppinen muuttuja rakennetaan, mikä tarkoittaa, että määritetään fyysisesti ryhmitelty muuttujalista, joka sijoitetaan yhden nimen alle muistilohkoon.

Uusi tietotyyppikäyttö

Luodaan nyt uusi studentmuuttuja ja alustetaan sen määritteet:

 student stu; strcpy( stu.name, "John"); strcpy( stu.surname, "Snow"); stu.year_of_birth = 1990; printf( "Student name : %s\n", stu.name); printf( "Student surname : %s\n", stu.surname); printf( "Student year of birth : %d\n", stu.year_of_birth);

Kuten näet tästä esimerkistä, sinun on määritettävä arvo kaikille uuden tietotyypin muuttujille. Voit käyttää rakennemuuttujaa käyttämällä pistettä kuten stu.name. On myös lyhyempi tapa määrittää arvoja rakenteeseen:

typedef struct{ int x; int y; }point; point image_dimension = {640,480};

Tai jos haluat asettaa arvot eri järjestyksessä:

point img_dim = { .y = 480, .x = 640 };

Ammattiliitot vs. rakenteet

Ammattiliitot ilmoitetaan samassa muodossa kuin rakenteet, mutta ne ovat erilaisia, koska vain yhtä tuotetta unionissa voidaan käyttää milloin tahansa.

typedef union{ int circle; int triangle; int ovel; }shape;

Käytä unionsitä, jos vain yhtä ehtoa sovelletaan ja vain yhtä muuttujaa käytetään. Älä unohda, että voimme käyttää myös upouutta tietotyyppiämme:

typedef struct{ char* model; int year; }car_type; typedef struct{ char* owner; int weight; }truck_type; typedef union{ car_type car; truck_type truck; }vehicle;

Muutama temppu lisää

  • Kun luot osoittimen rakenteeseen &operaattorin avulla, voit käyttää sitä erityiseen ->infix-operaattoriin. Tätä käytetään hyvin esimerkiksi työskenneltäessä linkitettyjen luetteloiden kanssa C: ssä
  • Uutta määriteltyä tyyppiä voidaan käyttää aivan kuten muita perustyyppejä melkein kaikkeen. Yritä esimerkiksi luoda tyyppinen taulukko studentja nähdä, miten se toimii.
  • Rakenteita voidaan kopioida tai määrittää, mutta et voi verrata niitä!

Lisää tietoa:

  • C-aloittelijan käsikirja: Opi C-ohjelmointikielen perusteet muutamassa tunnissa
  • Tietotyypit C-luvulla - kokonaisluku, liukuluku ja mitätöity selitys
  • malloc C: ssä: Dynaaminen muistin allokointi C: ssä selitetty