Ero rakenteen ja unionin välillä C
Mikä on rakenne?
Rakenne on käyttäjän määrittämä tietotyyppi C-ohjelmointikielellä, joka yhdistää loogisesti toisiinsa liittyviä eri tietotyyppejä.
Kaikki rakenneelementit on tallennettu vierekkäisiin muistipaikkoihin. Rakennetyyppimuuttuja voi tallentaa yhden nimen alle useita eri tietotyyppejä sisältäviä tietokohteita.
Mikä on Unioni
Unioni on käyttäjän määrittämä tietotyyppi, aivan kuten rakenne. Union yhdistää erityyppisiä ja -kokoisia esineitä yhteen. Liitäntämuuttuja varaa muistitilan, joka on yhtä suuri kuin tilan, johon liiton suurin muuttuja mahtuu. Sen avulla erityyppiset objektit voivat jakaa saman sijainnin.
Ilmoituksen rakenteen syntaksi
struct [name of the structure] { type member1; type member2; type member3; };
Rakenne määritellään "struct"-avainsanalla ja rakenteen nimellä. Numero 1, numero 2, numero 3 ovat yksittäisiä rakenteen jäseniä. Runko-osan lopussa on puolipiste (;).
Esimerkki C-ohjelmoinnin rakenteesta
#include <stdio.h> struct student { char name[60]; int roll_no; float marks; } sdt; int main() { printf("Enter the following information:\n"); printf("Enter student name: "); fgets(sdt.name, sizeof(sdt.name), stdin); printf("Enter student roll number: "); scanf("%d", & sdt. roll_no); printf("Enter students marks: "); scanf("%f", & sdt.marks); printf("The information you have entered is: \n"); printf("Student name: "); printf("%s", sdt.name); printf("Student roll number: %d\n", sdt. roll_no); printf("Student marks: %.1f\n", sdt.marks); return 0; }
Yllä olevassa ohjelmassa luodaan rakenne nimeltä opiskelija. Tässä rakenteessa on kolme datajäsentä: 1) nimi (merkkijono), 2) roll_no (kokonaisluku) ja 3) merkit (float).
Tämän jälkeen luodaan rakennemuuttuja sdt, joka tallentaa opiskelijatiedot ja näyttää ne tietokoneen näytöllä.
lähtö:
Kirjoita seuraavat tiedot:
Kirjoita opiskelijan nimi: James
Syötä opiskelijaluettelon numero: 21
Anna oppilaiden arvosanat: 67
Antamasi tiedot ovat:
Oppilaan nimi: John
Opiskelijaluettelon numero: 21
Opiskelijoiden pisteet: 67.0
Unionin julistamisen syntaksi
union [name of union] { type member1; type member2; type member3; };
Unioni julistetaan käyttämällä "liitto" avainsanaa ja liiton nimeä. Numero 1, numero 2, numero 3 ovat ammattiliiton yksittäisiä jäseniä. Runko-osan lopussa on puolipiste (;).
Esimerkki unionista C-ohjelmointiin
#include <stdio.h> union item { int x; float y; char ch; }; int main( ) { union item it; it.x = 12; it.y = 20.2; it.ch = 'a'; printf("%d\n", it.x); printf("%f\n", it.y); printf("%c\n", it.ch); return 0; }
lähtö:
1101109601
20.199892
a
Yllä olevassa ohjelmassa voit nähdä, että x:n ja y:n arvot vioittuvat. Vain muuttuja ch tulostaa odotetun tuloksen. Tämä johtuu siitä, että liitossa muistipaikka jaetaan kaikkien jäsentietotyyppien kesken.
Siksi ainoa datajäsen, jonka arvo on tällä hetkellä tallennettu, vie muistitilaa. Muuttujan ch arvo tallentui vihdoin, joten muun arvon arvo muuttujat on kadonnut.
Rakenne vs. liitto
Tässä on tärkeä ero rakenteen ja liiton välillä:
Tuote mallit | Liitto |
---|---|
Voit käyttää struct-avainsanaa rakenteen määrittämiseen. | Voit määrittää liiton avainsanan avulla. |
Jokaiselle rakenteen jäsenelle on määritetty yksilöllinen muistipaikka. | Liitossa kaikki datajäsenet jakavat muistipaikan. |
Yhden datajäsenen arvon muuttaminen ei vaikuta rakenteen muihin datajäseniin. | Yhden datajäsenen arvon muuttaminen muuttaa liitossa olevien muiden datajäsenten arvoa. |
Sen avulla voit alustaa useita jäseniä kerralla. | Sen avulla voit alustaa vain liiton ensimmäisen jäsenen. |
Rakenteen kokonaiskoko on jokaisen datajäsenen koon summa. | Liiton kokonaiskoko on suurimman datajäsenen koko. |
Sitä käytetään pääasiassa erilaisten tietotyyppien tallentamiseen. | Sitä käytetään pääasiassa yhden monista käytettävissä olevista tietotyypeistä tallentamiseen. |
Se vie tilaa jokaiselle jäsenelle, joka on kirjoitettu sisäisiin parametreihin. | Se vie tilaa jäsenelle, jonka sisäparametreihin on kirjoitettu suurin koko. |
Voit hakea minkä tahansa jäsenen kerrallaan. | Liittoon voi liittyä yksi jäsen kerrallaan. |
Se tukee joustavaa ryhmää. | Se ei tue joustavaa taulukkoa. |
Rakenteen edut
Tässä on rakenteen käytön edut/edut:
- Rakenteet keräävät useamman kuin yhden datan samasta aiheesta samassa paikassa.
- Se on hyödyllinen, kun haluat kerätä tietoja samanlaisista tietotyypeistä ja parametreista, kuten etunimi, sukunimi jne.
- Se on erittäin helppo ylläpitää, koska voimme edustaa koko tietuetta käyttämällä yhtä nimeä.
- Rakenteessa voimme siirtää täydelliset tietueet mille tahansa funktiolle yhdellä parametrilla.
- Voit tallentaa useampia samantyyppisiä tietueita käyttämällä rakennejonoa.
Liiton edut
Tässä on liiton käytön edut/edut:
- Se vie vähemmän muistia rakenteeseen verrattuna.
- Kun käytät unionia, vain viimeiseen muuttujaan pääsee suoraan.
- Unionia käytetään, kun sinun on käytettävä samaa muistipaikkaa kahdelle tai useammalle datajäsenelle.
- Sen avulla voit säilyttää vain yhden datajäsenen tietoja.
- Sen varattu tila on yhtä suuri kuin datajäsenen enimmäiskoko.
Rakenteen haitat
Tässä on rakenteen käytön haittoja/haittoja:
- Jos IT-projektin monimutkaisuus ylittää rajan, sitä on vaikea hallita.
- Yhden tietorakenteen muuttaminen koodissa edellyttää muutoksia monissa muissa paikoissa. Siksi muutoksia on vaikea seurata.
- Rakenne on hitaampi, koska se vaatii tallennustilaa kaikille tiedoille.
- Voit hakea minkä tahansa jäsenen kerrallaan rakenteessa, kun taas voit käyttää yhtä jäsentä kerrallaan liitossa.
- Rakenne vie tilaa jokaiselle sisäparametreihin kirjoitetulle jäsenelle, kun taas liitto vie tilaa jäsenelle, jolla on suurin sisäparametreihin kirjoitettu koko.
- Rakenne tukee joustavaa taulukkoa. Unioni ei tue joustavaa taulukkoa.
Liiton haitat
Tässä on haittoja / haittoja liiton käyttämiseen:
- Voit käyttää vain yhtä liiton jäsentä kerrallaan.
- Kaikkia liittomuuttujia ei voi alustaa tai käyttää vaihtelevilla arvoilla kerrallaan.
- Liitto osoittaa kaikille jäsenilleen yhden yhteisen säilytystilan.
KESKEISET EROT:
- Jokaiselle rakenteen jäsenelle on määritetty yksilöllinen muistipaikka, kun taas liitossa muistipaikan jakaa kaikki datajäsenet.
- Yhden datajäsenen arvon muuttaminen ei vaikuta rakenteen muihin datajäseniin, kun taas yhden datajäsenen arvon muuttaminen muuttaa liitossa olevien muiden dataosien arvoa.
- Rakennetta käytetään pääasiassa erilaisten tietotyyppien tallentamiseen, kun taas liittoa käytetään pääasiassa yhden monista tietotyypeistä tallentamiseen.
- Rakenteessa voit hakea minkä tahansa jäsenen kerrallaan, toisaalta liitossa voit käyttää yhtä jäsentä kerrallaan.
- Rakenne tukee joustavaa taulukkoa, kun taas liitto ei tue joustavaa taulukkoa.
Katso myös C-opetusohjelma aloittelijoille: - Klikkaa tästä