Vydělávej až 160.000 Kč měsíčně! Akreditované rekvalifikační kurzy s garancí práce od 0 Kč. Více informací.
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.

Diskuze: C - Rozdíl mezi strukturou a vlastním datovým typem

Aktivity
Avatar
Tycek
Člen
Avatar
Tycek:15.5.2014 12:31

Zdravím.

Četl jsem kapitolu o vlastních datových typech (http://www.sallyx.org/sally/c/c15.php) a dočetl jsem se, že používání vlastních datových typů je mnohem příjemnější, než používání struktury samotné.
Chci se teda zeptat v čem je to příjemnější, popřípadě jaké jsou rozdíly mezi strukturou a datovým typem, protože mi s nimi práce příjde stejná.

 
Odpovědět
15.5.2014 12:31
Avatar
coells
Tvůrce
Avatar
Odpovídá na Tycek
coells:15.5.2014 12:43

Práce se strukturou:

struct cislo {
  int i;
};

void main()
{
  struct cislo x;
  x.i = 0;
}

Práce s definovaným typem:

typedef struct {
  int i;
} cislo;

void main()
{
  cislo x;
  x.i = 0;
}

Takže nemusíš psát všude 'struct'.

Druhá otázka: struktura je datový typ, můžeš si ale zadefinovat vlastní datový typ, který zjednoduší zápis.

 
Nahoru Odpovědět
15.5.2014 12:43
Avatar
Tycek
Člen
Avatar
Odpovídá na coells
Tycek:15.5.2014 12:47

Právě že ani u struktury nemusíš psát struct

struct cislo {
  int i;
}x;

void main()
{
  x.i = 0;
}
 
Nahoru Odpovědět
15.5.2014 12:47
Avatar
coells
Tvůrce
Avatar
Odpovídá na Tycek
coells:15.5.2014 13:04

Ve skutečnost jsi struct napsal :-) jenom jsi to přehlédl.
Zadefinoval jsi totiž strukturu cislo a proměnnou toho typu.

Podívej se, jak funguje tenhle kód.

struct {
  int i;
} x;

struct cislo {
  int i;
} y;

int get_cislo(struct cislo x)
{
  return x.i;
}

void main()
{
  struct cislo z;
  z = y; // ok
  x = y; // chyba, rozdílné datové typy
  get_cislo(z);
}

A pokud bys chtěl funkci, který by tuhle strukturu přijímala jako parametr, budeš muset vždy psát struct cislo.

Editováno 15.5.2014 13:05
 
Nahoru Odpovědět
15.5.2014 13:04
Avatar
Tycek
Člen
Avatar
Odpovídá na coells
Tycek:15.5.2014 13:11

Aha, chápu. :)
A zkrácení zápisu je všechno, co vlastní datový typ nabízí, nebo má více jiných výhod oproti struktuře?

 
Nahoru Odpovědět
15.5.2014 13:11
Avatar
coells
Tvůrce
Avatar
Odpovídá na Tycek
coells:15.5.2014 13:21

Definice vlastního datového typu nabízí vyšší úroveň abstrakce.

Pokud je datový typ tzv opaque (nevidíš do jeho definice), pak se může do budoucna libovolně měnit a celý kód bude stále fungovat. Například pracuješ s typem X a netušíš, jestli je to int nebo struktura (občas to bývá obojí naráz) - a díky abstrakci datového typu to ani nepotřebuješ vědět.

 
Nahoru Odpovědět
15.5.2014 13:21
Avatar
Tycek
Člen
Avatar
Tycek:15.5.2014 13:42

Aha, chápu.
Díky za rady, zase jsem o něco moudřejší. :)

 
Nahoru Odpovědět
15.5.2014 13:42
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 7 zpráv z 7.