Příklad struktur
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
//definice struktury
typedef struct //zahájení definice
{
char jmeno[31]; //textový řetezec
int vek; //celé čílo
}UZIVATEL; //pojmenování struktury
void main()
{
UZIVATEL uzivatle[3]; //založení pole o 3 položkách typu uživatel
for (int i = 0; i < 3; i++) //cyklus k naplnění pole
{
printf("Zadej jméno uživatele: "); //výzva uživateli
scanf("%30s", &uzivatle[i].jmeno); //načtení textového řetězce do položky jméno ve struktuře uživatel
printf("Zadej vek: "); //výzva užiovateli
scanf("%d", &uzivatle[i].vek); //načtení celého čísla do položky věk ve struktuře uživatel
}
printf("\n\n"); //dvojité odřádkování
for (int j = 0; j < 3; j++) //cyklus k vypsání strukutry
{
printf("Uživatel na indexu %d\n", j);
printf("Jméno: %s\n", uzivatle[j].jmeno); //vypsání jména ze struktury uživatel
printf("Věk: %d\n", uzivatle[j].vek); //vypsání věku ze struktury uživatel
}
}
Kopírovaní struktur
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
//definice struktury
typedef struct //zahájení definice
{
char jmeno[31]; //textový řetezec
int vek; //celé čílo
}UZIVATEL; //pojmenování struktury
void main()
{
UZIVATEL Karel; //inicializace struktury
Karel.vek = 20; //přiřazení hodnoty
strcpy(Karel.jmeno, "Karel"); //přiřazení stringu jako hodnoty
UZIVATEL KarelKopie;
KarelKopie = Karel; //Struktura Karel se zkopíruje do struktury KarelKopie
//porovníní stuktur Karel a KarelKopie
if (Karel.jmeno == KarelKopie.jmeno && Karel.vek == KarelKopie.vek){
printf("Struktury jsou shodne");
}else{
printf("Struktuy jsou rozdilne");
}
}
Porovnání struktur
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
//definice struktury
typedef struct //zahájení definice
{
char jmeno[31]; //textový řetezec
int vek; //celé čílo
}UZIVATEL; //pojmenování struktury
void main()
{
UZIVATEL Karel; //inicializace struktury
Karel.vek = 20; //přiřazení hodnoty
strcpy(Karel.jmeno, "Karel"); //přiřazení stringu jako hodnoty
UZIVATEL Martin;
Martin.vek = 20;
strcpy(Martin.jmeno, "Martin");
//porovníní stuktur Karel a Martin
if (Karel.jmeno == Martin.jmeno && Karel.vek == Martin.vek){
printf("Struktury jsou shodne");
}else{
printf("Struktuy jsou rozdilne");
}
}
Vnořené struktury
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
//definice struktury
typedef struct //zahájení definice
{
float sirka;
float delka;
}POLOHA; //pojmenování struktury
//definice struktury
typedef struct //zahájení definice
{
int id; //textový řetezec
POLOHA poloha; //vnoření struktur
}VUZ; //pojmenování struktury
//funkce pro posunutí vozu
void VUZposun(VUZ* vuz, float sirka, float delka)
{
vuz->poloha.delka += delka; //přidání zeměpisné délky do polohy vozu
vuz->poloha.sirka += sirka; //přidání zeměpisné šířky do polohy vozu
}
void main()
{
VUZ osobak; //vytvoření struktury jménem osobak
osobak.id = 1; //uložení hodnoty do prvku struktury
osobak.poloha.delka = 41.40338; //uložení hodnoty do prvku vnořené struktury
osobak.poloha.sirka = 2.17403;
printf("Osobni auto má id %d a začíná na poloze %fN, %fW", osobak.id, osobak.poloha.sirka, osobak.poloha.delka);
VUZposun(&osobak, 10, 10); //volání funkce s předáním reference na strukturu
printf("\nOsobni auto má id %d a polohu %fN, %fW", osobak.id, osobak.poloha.sirka, osobak.poloha.delka);
}
Dynamicky alokovaná struktura
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
//definice struktury
typedef struct //zahájení definice
{
char jmeno[31]; //textový řetezec
int vek; //celé čílo
}UZIVATEL; //pojmenování struktury
void main()
{
UZIVATEL *ukazatel; //ukazatel na stukturu Uzivatel
//dynamická alokace struktury v paměti
ukazatel = (UZIVATEL*) malloc(sizeof(UZIVATEL));
//přítup ke členům struktury
ukazatel->vek = 2; //přiřazení celého čísla pomocí ukazatele
strcpy(ukazatel->jmeno, "Michal"); //přiřazení textu pomocí ukazatele
//vypsání obsahu dynamicky alokované struktury
printf("Malý %s chodí do školky už ve %d letech", ukazatel->jmeno, ukazatel->vek);
free(ukazatel); //uvolnění dynamicky alokované struktury
}
Spojový seznam
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
//definice prvku spojového seznamu
typedef struct
{
int cislo; //data
//další datové položky různých typů
struct data *nasl, *pred; //ukazatel na následující a předchozí prvek seznamu
}SEZNAM; //pojmenování prvku seznamu
void main()
{
SEZNAM *prvni = NULL; //inicializace spojového seznamu
//alokace paměti pro nový prvek
SEZNAM *novy = (SEZNAM*) malloc(sizeof(SEZNAM));
if(novy == NULL) //kontroloa alokování paměti
{
printf("Nedostatek pameti !\n");
system("pause");
exit(1);
}
//inicializace ukazatelů
novy->pred = NULL;
novy->nasl = NULL;
//naplneni dat
printf("Zadej cele cislo: ");
scanf("%d", &novy->cislo);
//zařazeni na začátek seznamu
if (prvni == NULL) //pokud byl seznam prázdný, zařadí se na první místo
{
prvni = novy;
}
else
{
prvni->pred = novy; //zařazení před první prvek
novy->nasl = prvni; //nastavení následujícího záznamu v aktuálně vkládaném prvku
prvni = novy; //kopírování dat
}
//výpis seznamu
for (SEZNAM *i = prvni; i != NULL; i = i ->nasl) //definice cyklu procházejícího seznam
{
printf("%d, ", i->cislo); //vypsání číslené datov hodnoty
free(i->pred); //uvolnění alokované paměti předešlého prvku
}
}
Deklarace enum
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
//definice enum
typedef enum //zahájení definice
{
zelena, oranzova, cervena
}barva; //pojmenování enum
void main()
{
barva semafor;
semafor = zelena;
switch (semafor)
{
case 0:
printf("Můžeš jít");
break;
case 1:
printf("Připrav se");
break;
case 2:
printf("Stůj");
break;
default:
printf("Nevalidní hodnota");
break;
}
}
Union
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
//definice unie
typedef union
{
int cislo;
char znak;
} unie; //pojmenování struktury
// unie bude mít velikost rovnou sizeof(int)
void main()
{
unie ZnakCislo; //inicializace unie
ZnakCislo.cislo = 101; // v unii bude číslo 101
if (ZnakCislo.znak == 'e')
{
printf("Do unie bylo ascii kódem vloženo písmeno e");
}
}