Strukturált adattípusok a C - Struct és Typedef példákkal magyarázva

A programozási tapasztalatok során szükségét érezheti saját adattípusának megadására. A C-ben ez két kulcsszóval történik: structés typedef. A struktúrák és szakszervezetek lehetőséget adnak arra, hogy nem homogén adattípusokat egyetlen gyűjteményben tárolhasson.

Új adattípus deklarálása

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

Ez után a kis kód studentegy új fenntartott kulcsszó lesz, és képes leszel típusú változókat létrehozni student. Kérjük, vegye figyelembe, hogy ez az új típusú változó strukturálódik, ami azt jelenti, hogy meghatározza a változók fizikailag csoportosított listáját, amelyeket egy név alatt kell elhelyezni a memória blokkjában.

Új adattípus-használat

Hozzunk létre most egy új studentváltozót, és inicializáljuk annak attribútumait:

 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);

Amint ebben a példában láthatja, értéket kell rendelnie az új adattípus összes változójához. Egy struktúraváltozó eléréséhez használhatja a pontot, mint a stu.name. Van egy rövidebb módszer is az értékek hozzárendeléséhez egy struktúrához:

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

Vagy ha más sorrendben szeretné beállítani az értékeit:

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

Szakszervezetek vs struktúrák

A szakszervezetek ugyanabban a formában vannak deklarálva, mint a struktúrák, de különböznek, mert az unión belül csak egy elem használható fel bármikor.

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

Akkor használja union, ha csak egy feltétel kerül alkalmazásra, és csak egy változó kerül felhasználásra. Kérjük, ne felejtse el, hogy a vadonatúj adattípusunkat is használhatjuk:

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;

Még néhány trükk

  • Amikor az &operátor segítségével létrehoz egy mutatót egy szerkezetre , akkor a speciális ->infix operátorral elháríthatja azt. Ezt nagyon használják például a C-ben lévő összekapcsolt listákkal való munka során
  • Az új definiált típus szinte minden más típushoz hasonlóan használható. Próbáljon meg például létrehozni egy tömböt, studentés nézze meg, hogyan működik.
  • A struktúrákat lehet másolni vagy hozzárendelni, de nem lehet összehasonlítani őket!

Több információ:

  • A C kezdő kézikönyve: A C programozási nyelv alapjainak elsajátítása néhány óra alatt
  • Adattípusok C-ben - egész szám, lebegőpont és érvényesség magyarázata
  • malloc C-ben: Dinamikus memóriaallokáció C-ben magyarázva