Erinevus struktuuri ja liidu vahel C-s
Mis on struktuur?
Struktuur on kasutaja mรครคratud andmetรผรผp C-programmeerimiskeeles, mis รผhendab erinevate andmetรผรผpide loogiliselt seotud andmeรผksused.
Kรตik struktuurielemendid on salvestatud kรผlgnevatesse mรคlukohtadesse. Struktuuritรผรผbi muutuja vรตib รผhe nime all salvestada rohkem kui รผhe erinevat tรผรผpi andmeรผksuse.
Mis on Liit
Liit on kasutaja mรครคratud andmetรผรผp, nagu struktuur. Liit kombineerib erinevat tรผรผpi ja suurusega esemeid. รhenduse muutuja eraldab mรคluruumi, mis on vรตrdne liidu suurima muutuja hoidmiseks mรตeldud ruumiga. See vรตimaldab erinevat tรผรผpi objektidel jagada sama asukohta.
Struktuuri deklareerimise sรผntaks
struct [name of the structure]
{
type member1;
type member2;
type member3;
};
Struktuur deklareeritakse mรคrksรตna "struct" ja struktuuri nime abil. Number 1, number 2, number 3 on struktuuri รผksikud liikmed. Kehaosa lรตpetatakse semikooloniga (;).
Nรคide struktuurist C-programmeerimises
#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;
}
รlaltoodud programmis luuakse struktuur nimega รตpilane. Sellel struktuuril on kolm andmeliiget: 1) nimi (string), 2) roll_no (tรคisarv) ja 3) mรคrgid (float).
Pรคrast seda luuakse รตpilase teabe salvestamiseks ja arvutiekraanil kuvamiseks struktuurimuutuja sdt.
Vรคljund:
Sisestage jรคrgmine teave:
Sisestage รตpilase nimi: James
Sisestage รตpilase nimekirja number: 21
Sisestage รตpilaste hinded: 67
Teie sisestatud teave on:
รpilase nimi: John
รpilase nimekirja number: 21
รpilaste hinded: 67.0
Liidu deklareerimise sรผntaks
union [name of union]
{
type member1;
type member2;
type member3;
};
Liidu deklareerimiseks kasutatakse mรคrksรตna "liit" ja ametiรผhingu nime. Number 1, number 2, number 3 on ametiรผhingu รผksikliikmed. Kehaosa lรตpetatakse semikooloniga (;).
Nรคide liidust C-programmeerimises
#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;
}
Vรคljund:
1101109601
20.199892
a
รlaltoodud programmis nรคete, et x ja y vรครคrtused rikutakse. Ainult muutuja ch prindib oodatud tulemuse. Pรตhjus on selles, et liidus jagatakse mรคlu asukoht kรตigi liikmete andmetรผรผpide vahel.
Seetรตttu vรตtab mรคluruumi ainus andmeliige, mille vรครคrtus on praegu salvestatud. Muutuja ch vรครคrtus salvestati lรตpuks, seega ka รผlejรครคnud osa vรครคrtus muutujad on kadunud.
Struktuur vs. liit

Siin on oluline erinevus struktuuri ja liidu vahel:
| struktuur | Liit |
|---|---|
| Struktuuri mรครคratlemiseks saate kasutada mรคrksรตna struct. | Ametiรผhingu mรครคratlemiseks saate kasutada ametiรผhingu mรคrksรตna. |
| Igale struktuuri liikmele on mรครคratud ainulaadne mรคlukoht. | รhenduses jagavad mรคlu asukohta kรตik andmeliikmed. |
| รhe andmeliikme vรครคrtuse muutmine ei mรตjuta struktuuri teisi andmeliikmeid. | รhe andmeliikme vรครคrtuse muutmine muudab รผhenduse teiste andmeliikmete vรครคrtust. |
| See vรตimaldab teil initsialiseerida mitu liiget korraga. | See vรตimaldab teil initsialiseerida ainult liidu esimest liiget. |
| Struktuuri kogusuurus on iga andmeliikme suuruse summa. | Liidu kogusuurus on suurima andmeliikme suurus. |
| Seda kasutatakse peamiselt erinevate andmetรผรผpide salvestamiseks. | Seda kasutatakse peamiselt รผhe paljudest saadaolevatest andmetรผรผpidest salvestamiseks. |
| See vรตtab ruumi iga sisemiste parameetritega kirjutatud liikme jaoks. | See vรตtab ruumi liikme jaoks, mille siseparameetritesse on kirjutatud suurim suurus. |
| Saate tuua iga liikme korraga. | Liitu pรครคsete korraga รผhele liikmele. |
| See toetab paindlikku massiivi. | See ei toeta paindlikku massiivi. |
Struktuuri eelised
Siin on struktuuri kasutamise plussid / eelised:
- Struktuurid koguvad รผhte kohta sama teema kohta rohkem kui รผhe andmeid.
- See on kasulik, kui soovite koguda sarnaste andmetรผรผpide ja parameetrite andmeid, nagu eesnimi, perekonnanimi jne.
- Seda on vรคga lihtne hooldada, kuna saame esitada kogu kirje รผhe nime kasutades.
- Struktuuris saame รผhe parameetri abil edastada tรคieliku kirjete komplekti mis tahes funktsioonile.
- Saate kasutada struktuurimassiivi, et salvestada rohkem sarnast tรผรผpi kirjeid.
Liidu eelised
Siin on liidu kasutamise plussid/kasud:
- See vรตtab struktuuriga vรตrreldes vรคhem mรคlu.
- รhenduse kasutamisel pรครคseb otse juurde ainult viimasele muutujale.
- รhendust kasutatakse siis, kui peate kasutama sama mรคlukohta kahe vรตi enama andmeliikme jaoks.
- See vรตimaldab teil hoida ainult รผhe andmeliikme andmeid.
- Sellele eraldatud ruum on vรตrdne andmeliikme maksimaalse suurusega.
Struktuuri puudused
Siin on struktuuri kasutamise miinused / puudused:
- Kui IT-projekti keerukus รผletab piiri, muutub seda raskeks juhtida.
- รhe andmestruktuuri muutmine koodis nรตuab muudatusi paljudes teistes kohtades. Seetรตttu on muudatusi raske ellu viia. track.
- Struktuur on aeglasem, kuna see nรตuab kรตigi andmete jaoks salvestusruumi.
- Struktuuris saate hankida kรตik liikmed korraga, samas kui liidus pรครคsete juurde รผhele liikmele korraga.
- Struktuur vรตtab ruumi iga sisemiste parameetritega kirjutatud liikme jaoks, samas kui liit vรตtab ruumi liikme jaoks, millel on sisemistes parameetrites kirjutatud suurim suurus.
- Struktuur toetab paindlikku massiivi. Liit ei toeta paindlikku massiivi.
Liidu miinused
Siin on liidu kasutamise miinused / puudused:
- Korraga saate kasutada ainult รผhte ametiรผhinguliiget.
- Kรตiki liitmuutujaid ei saa korraga initsialiseerida ega kasutada muutuvate vรครคrtustega.
- Liit mรครคrab kรตigile oma liikmetele รผhe รผhise laoruumi.
PEAMISED ERINEVUSED:
- Igale struktuuri liikmele on mรครคratud ainulaadne mรคlukoht, samas kui liidus jagavad mรคlukohta kรตik andmeliikmed.
- รhe andmeliikme vรครคrtuse muutmine ei mรตjuta teisi andmeliikmeid struktuuris, samas kui รผhe andmeliikme vรครคrtuse muutmine muudab รผhenduse teiste andmeliikmete vรครคrtust.
- Struktuuri kasutatakse peamiselt erinevate andmetรผรผpide salvestamiseks, samas kui รผhendust kasutatakse peamiselt รผhe paljudest andmetรผรผpidest salvestamiseks.
- Struktuuris saate hankida kรตik liikmed korraga, samas kui liidus pรครคsete juurde รผhele liikmele korraga.
- Struktuur toetab paindlikku massiivi, samas kui liit ei toeta paindlikku massiivi.
Vaadake ka meie C-รตpetust algajatele: - Kliki siia
