Strukturirani tipovi podataka u C - Struct i Typedef Objašnjeno s primjerima

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: structi 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 studentbit ć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 studentvarijablu 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 unionu 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 studenti 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