În timpul experienței dvs. de programare este posibil să simțiți nevoia să vă definiți propriul tip de date. În C, acest lucru se face folosind două cuvinte cheie: struct și typedef. Structurile și uniunile vă vor oferi șansa de a stoca tipuri de date neomogene într-o singură colecție.

Declararea unui nou tip de date

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

După acest mic cod student va fi un nou cuvânt cheie rezervat și veți putea crea variabile de tip student. Rețineți că acest nou tip de variabilă va fi structurat, ceea ce înseamnă că definește o listă grupată fizic de variabile care trebuie plasate sub un singur nume într-un bloc de memorie.

Utilizare tip nou de date

Să creăm acum un nou student variabilă și inițializează atributele sale:

   student stu;
 
   strcpy( stu.name, "John");
   strcpy( stu.surname, "Snow"); 
   stu.year_of_birth = 1990;
 
   printf( "Student name : %sn", stu.name);
   printf( "Student surname : %sn", stu.surname);
   printf( "Student year of birth : %dn", stu.year_of_birth);

După cum puteți vedea în acest exemplu, vi se cere să atribuiți o valoare tuturor variabilelor conținute în noul dvs. tip de date. Pentru a accesa o variabilă de structură puteți utiliza punctul ca în stu.name. Există, de asemenea, o modalitate mai scurtă de a atribui valori unei structuri:

typedef struct{
   int    x;
   int    y;
}point;

point image_dimension = {640,480};

Sau dacă preferați să setați valorile acesteia urmând o altă ordine:

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

Uniuni vs Structuri

Sindicatele sunt declarate la fel ca structurile, dar sunt diferite deoarece doar un singur element din cadrul uniunii poate fi utilizat în orice moment.

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

Ar trebui să utilizați union într-un astfel de caz în care se va aplica o singură condiție și se va utiliza o singură variabilă. Vă rugăm să nu uitați că putem utiliza și noi tipul nostru de date:

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;

Câteva trucuri

  • Când creați un pointer către o structură folosind & operator puteți utiliza specialul -> operatorul infix pentru a-l respecta. Acest lucru este foarte utilizat, de exemplu, atunci când se lucrează cu liste legate în C
  • Noul tip definit poate fi folosit la fel ca alte tipuri de bază pentru aproape orice. Încercați, de exemplu, să creați o matrice de tip student și vedeți cum funcționează.
  • Structurile pot fi copiate sau atribuite, dar nu le puteți compara!

Mai multe informatii:

  • Manualul pentru începători C: Aflați elementele de bază ale limbajului de programare C în doar câteva ore
  • Tipuri de date în C – întreg, virgulă plutitoare și vid explicate
  • malloc în C: Alocarea dinamică a memoriei în C explicată