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í.
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.
#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.
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.
#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.
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í.
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).
#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;
}
Š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.
#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;
}
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.
#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 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í.
Pole struktur se vytváří stejně jako pole běžných datových typů. Každá položka pole je instance struktury.
#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.
K prvkům pole struktur lze přistupovat pomocí indexu pole stejně jako k prvkům běžného pole.
#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 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.