Studijní materiály
EXTRA Kontakt

Definice struktur a unií v jazyce C

Struktury a unie jsou v jazyce C používány k vytvoření nových datových typů, které umožňují kombinovat různé datové typy do jedné entity. Struktury umožňují ukládat různé typy dat do jednoho objektu, zatímco unie umožňují sdílet paměťovou oblast mezi různými datovými typy. V tomto výkladu se podrobně podíváme na definici struktur a unií v jazyce C a poskytneme konkrétní příklady jejich použití.

Definice a použití struktur

Struktura je ucelený datový typ, který umožňuje kombinovat různé datové typy do jedné entity. Každá položka ve struktuře má své jméno a typ dat.

Příklad definice a použití struktury:

#include <stdio.h>
      
      // Definice struktury
      struct Osoba {
          char jmeno[50];
          int vek;
          float vyska;
      };
      
      int main() {
          // Deklarace proměnné typu Osoba
          struct Osoba osoba1;
      
          // Inicializace struktury osoba1
          strcpy(osoba1.jmeno, "Jan Novak");
          osoba1.vek = 25;
          osoba1.vyska = 180.5;
      
          // Výpis informací o osobě
          printf("Jmeno: %s\n", osoba1.jmeno);
          printf("Vek: %d\n", osoba1.vek);
          printf("Vyska: %.1f\n", osoba1.vyska);
      
          return 0;
      }
      

V tomto příkladu jsme definovali strukturu Osoba, která obsahuje jméno, věk a výšku. Poté jsme vytvořili proměnnou osoba1 typu Osoba a inicializovali jsme její položky. Nakonec jsme vypisovali informace o osobě uložené ve struktuře.

Definice a použití unií

Unie jsou podobné strukturám, ale každá položka v unii sdílí stejnou paměťovou oblast. To znamená, že unie mohou ukládat pouze hodnotu jedné položky najednou.

Příklad definice a použití unie:

#include <stdio.h>
      
      // Definice unie
      union Hodnota {
          int cele_cislo;
          float desetinne_cislo;
      };
      
      int main() {
          // Deklarace proměnné typu Hodnota
          union Hodnota hodnota;
      
          // Přiřazení hodnoty integer do unie
          hodnota.cele_cislo = 10;
      
          // Výpis hodnoty integer z unie
          printf("Cele cislo: %d\n", hodnota.cele_cislo);
      
          // Přiřazení hodnoty float do unie
          hodnota.desetinne_cislo = 3.14;
      
          // Výpis hodnoty float z unie
          printf("Desetinne cislo: %.2f\n", hodnota.desetinne_cislo);
      
          return 0;
      }
      

V tomto příkladu jsme definovali unii Hodnota, která může obsahovat buď celé číslo nebo desetinné číslo. Poté jsme vytvořili proměnnou hodnota typu Hodnota a využili jsme ji k uložení a výpisu různých typů hodnot.

Struktury a unie jsou důležitými koncepty v jazyce C, které umožňují efektivní práci s daty a vytváření složitějších datových struktur.

Přístup k prvkům struktur a unií v jazyce C

Prvky struktur a unií lze přistupovat pomocí tečkového operátoru (. pro struktury) nebo pomocí šipkového operátoru (-> pro ukazatele na struktury). Tato operace umožňuje čtení a zápis hodnot do jednotlivých prvků struktur a unií. V tomto výkladu se podrobně podíváme na způsoby přístupu k prvkům struktur a unií v jazyce C a poskytneme konkrétní příklady jejich použití.

Přístup k prvkům struktur pomocí tečkového operátoru

Tečkový operátor (.) se používá k přístupu k prvkům struktur, když máme přímý přístup k samotné struktuře (nikoli ukazateli na strukturu).

Příklad přístupu k prvkům struktur pomocí tečkového operátoru:

#include <stdio.h>
      
      // Definice struktury
      struct Bod {
          int x;
          int y;
      };
      
      int main() {
          // Deklarace a inicializace struktury
          struct Bod bod1 = {10, 20};
      
          // Přístup k prvkům struktury pomocí tečkového operátoru
          printf("Hodnota x: %d\n", bod1.x); // Výstup: Hodnota x: 10
          printf("Hodnota y: %d\n", bod1.y); // Výstup: Hodnota y: 20
      
          return 0;
      }
      

Přístup k prvkům struktur pomocí šipkového operátoru

Šipkový operátor (->) se používá k přístupu k prvkům struktur, když máme ukazatel na strukturu. Tento operátor se nejčastěji používá v kombinaci s dynamickou alokací paměti.

Příklad přístupu k prvkům struktur pomocí šipkového operátoru:

#include <stdio.h>
      #include <stdlib.h>
      
      // Definice struktury
      struct Bod {
          int x;
          int y;
      };
      
      int main() {
          // Dynamická alokace paměti pro strukturu
          struct Bod *bod1 = (struct Bod *)malloc(sizeof(struct Bod));
          if (bod1 == NULL) {
              printf("Chyba pri alokaci pameti.");
              return 1;
          }
      
          // Inicializace prvků struktury pomocí šipkového operátoru
          bod1->x = 10;
          bod1->y = 20;
      
          // Přístup k prvkům struktury pomocí šipkového operátoru
          printf("Hodnota x: %d\n", bod1->x); // Výstup: Hodnota x: 10
          printf("Hodnota y: %d\n", bod1->y); // Výstup: Hodnota y: 20
      
          // Uvolnění paměti
          free(bod1);
      
          return 0;
      }
      

Přístup k prvkům unie

Pro přístup k prvkům unie se používají stejné operátory jako pro struktury, protože unie fungují obdobně. Každý prvek v unii sdílí stejnou paměťovou oblast.

Příklad přístupu k prvkům unie:

#include <stdio.h>
      
      // Definice unie
      union Hodnota {
          int cele_cislo;
          float desetinne_cislo;
      };
      
      int main() {
          // Deklarace a inicializace unie
          union Hodnota hodnota;
      
          // Přístup k prvkům unie pomocí tečkového operátoru
          hodnota.cele_cislo = 42;
          printf("Cele cislo: %d\n", hodnota.cele_cislo); // Výstup: Cele cislo: 42
      
          // Přístup k prvkům unie pomocí tečkového operátoru
          hodnota.desetinne_cislo = 3.14;
          printf("Desetinne cislo: %.2f\n", hodnota.desetinne_cislo); // Výstup: Desetinne cislo: 3.14
      
          return 0;
      }
      

Přístup k prvkům struktur a unií je důležitý koncept v jazyce C, který umožňuje manipulovat s daty v paměti a vytvářet složitější datové struktury.

Pole struktur v jazyce C

Pole struktur v jazyce C umožňuje ukládat více instancí struktur do jedné proměnné. To je užitečné, pokud potřebujeme pracovat s více daty stejného typu, například seznam studentů nebo záznamy o knihách. V tomto výkladu se podrobně podíváme na vytváření, inicializaci a práci s polem struktur v jazyce C a poskytneme konkrétní příklady jejich použití.

Vytváření a inicializace pole struktur

Pole struktur se vytváří stejně jako pole běžných datových typů. Každá položka pole je instance struktury.

Příklad vytvoření a inicializace pole struktur:

#include <stdio.h>
      
      // Definice struktury
      struct Student {
          char jmeno[50];
          int vek;
          float prumer;
      };
      
      int main() {
          // Deklarace a inicializace pole struktur
          struct Student studenti[3] = {
              {"Jan", 20, 3.5},
              {"Petr", 22, 3.2},
              {"Eva", 21, 3.8}
          };
      
          // Výpis informací o studentech
          for (int i = 0; i < 3; i++) {
              printf("Jmeno: %s, Vek: %d, Prumer: %.2f\n", studenti[i].jmeno, studenti[i].vek, studenti[i].prumer);
          }
      
          return 0;
      }
      

V tomto příkladu jsme vytvořili pole struktur Student s třemi prvky a inicializovali jsme je hodnotami pro každého studenta. Poté jsme pomocí smyčky vypsali informace o každém studentovi v poli.

Přístup k prvkům pole struktur

K prvkům pole struktur lze přistupovat pomocí indexu pole stejně jako k prvkům běžného pole.

Příklad přístupu k prvkům pole struktur:

#include <stdio.h>
      
      // Definice struktury
      struct Bod {
          int x;
          int y;
      };
      
      int main() {
          // Deklarace pole struktur
          struct Bod body[3];
      
          // Inicializace prvků pole struktur
          body[0].x = 1;
          body[0].y = 2;
      
          body[1].x = 3;
          body[1].y = 4;
      
          body[2].x = 5;
          body[2].y = 6;
      
          // Výpis hodnot prvků pole struktur
          for (int i = 0; i < 3; i++) {
              printf("Bod %d: x=%d, y=%d\n", i+1, body[i].x, body[i].y);
          }
      
          return 0;
      }
      

V tomto příkladu jsme vytvořili pole struktur Bod a inicializovali jsme jej hodnotami. Poté jsme pomocí smyčky vypsali hodnoty prvků pole struktur.

Manipulace s polem struktur

Manipulace s polem struktur zahrnuje stejné operace jako manipulace s běžným polem. Můžeme provádět různé operace, jako je třídění, filtrování a vyhledávání dat.

Pole struktur jsou užitečným nástrojem v jazyce C pro organizaci a manipulaci s daty, které mají složitější strukturu.