Tijekom vašeg iskustva s programiranjem možda ćete osjetiti potrebu za definiranjem vlastite vrste podataka. U C-u to se radi pomoću dvije ključne riječi: struct
i typedef
. Strukture i udruživanja pružit će vam priliku da pohranite nehomogene vrste podataka u jednu zbirku.
Izjava o novom tipu podataka
typedef struct student_structure{ char* name; char* surname; int year_of_birth; }student;
Nakon ovog malog koda student
bit će nova rezervirana ključna riječ i moći ćete stvoriti varijable tipa student
. Imajte na umu da će ova nova vrsta varijable biti strukturirana, što znači da definira fizički grupirani popis varijabli koje će se smjestiti pod jednim imenom u blok memorije.
Nova upotreba vrste podataka
Stvorimo sada novu student
varijablu i inicijalizirajmo njene atribute:
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);
Kao što možete vidjeti u ovom primjeru, od vas se zahtijeva da dodijelite vrijednost svim varijablama koje sadrže vaš novi tip podataka. Za pristup varijabli strukture možete koristiti točku kao u stu.name
. Postoji i kraći način dodjeljivanja vrijednosti strukturi:
typedef struct{ int x; int y; }point; point image_dimension = {640,480};
Ili ako želite postaviti vrijednosti prema drugom redoslijedu:
point img_dim = { .y = 480, .x = 640 };
Sindikati vs strukture
Sindikati su deklarirani u istoj strukturi, ali su različiti jer se u jednom trenutku može koristiti samo jedna stavka unutar unije.
typedef union{ int circle; int triangle; int ovel; }shape;
Trebali biste koristiti union
u onom slučaju u kojem će se primijeniti samo jedan uvjet i koristiti samo jedna varijabla. Ne zaboravite da možemo koristiti i naš potpuno novi tip podataka:
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;
Još nekoliko trikova
- Kada kreirate pokazivač na strukturu pomoću
&
operatora, možete upotrijebiti posebni->
infiksni operator da biste je odredili. To se vrlo koristi, na primjer, pri radu s povezanim popisima u C-u - Novi definirani tip može se koristiti kao i drugi osnovni tipovi za gotovo sve. Pokušajte, na primjer, stvoriti niz vrsta
student
i vidjeti kako to radi. - Strukture se mogu kopirati ili dodijeliti, ali ih ne možete uspoređivati!
Više informacija:
- Priručnik za početnike C: Naučite osnove programskog jezika C u samo nekoliko sati
- Tipovi podataka u C - Objašnjeno cjelobrojno, plutajuće zarez i praznina
- malloc u C: Objašnjeno dinamičko dodjeljivanje memorije u C