Struktura (programovací jazyk C)

Z Wikipedie, otevřené encyklopedie
Skočit na: Navigace, Hledání
Související informace naleznete také v článku Záznam (informatika).

Struktura (anglicky struct) je v programovacím jazyce C, a z něj odvozených, deklarace složeného datového typu, která definuje skupinu proměnných v operační paměti, se kterými umožňuje pracovat jako s jedním celkem.

K této struktuře se potom přistupuje prostřednictvím ukazatele na její adresu, nebo odkazem. Struktura může obsahovat libovolné množství existujících, jednoduchých i složených (komplexních) datových typů, takže jde o přirozený způsob zápisu pro záznamy, jako jsou smíšené typy dat v seznamech položek adresáře čtoucí pevný disk (délka souboru, název, rozšíření, fyzické (válec, disk, index hlavy) adresa, atd.), nebo jiný smíšený typ záznamu (jméno pacienta, adresa, telefon...  ...číslo pojištění, váha, atd.).

Protože obsah struktury je uložený v souvislé paměti, musí být použit operátor sizeof, aby se zjistil počet bajtů potřebných pro uložení struktury určitého typu, stejně jako může být použit pro základní typy. Zarovnání jednotlivých oblastí v struktuře (s ohledem na zarovnání na délku slova počítače) je specifické pro implementaci a mohou zahrnovat různá zarovnání, i když moderní kompilátory obvykle podporují #pragma pack direktivu, která upravuje velikost v bajtech použitých pro zarovnání.[1]

V programovacím jazyce C++, je struktura příbuzná s třídou, ale existuje rozdíl ve výchozí viditelnosti: členi třídy jsou implicitně soukromí, kdežto členi struktury jsou ve výchozím nastavení veřejní.

V jiných jazycích[editovat | editovat zdroj]

Stejně jako jeho C protějšek, datový typ struct v C# (Strukture v jazyce Visual Basic .NET) je podobný třídě. Největší rozdíl mezi struct a class v těchto jazycích je, že když je struct předán jako argument funkce, změny struktury v této funkci se neprojeví v původní proměnné (pokud je požadováno předání odkazem).[2]

Tímto rysem se liší od C++, kde třídy a struktury mohou být přiděleny buď na zásobníku (podobně jako C#) nebo na haldě, s explicitním ukazatelem. V C++ jediný rozdíl mezi struct a class spočívá v tom, že členové a základní třídy struct, jsou ve výchozím nastavení veřejní. (Třídy definované pomocí klíčového slova class, má členy a základní třídy ve výchozím nastavení soukromé.)

Deklarace[editovat | editovat zdroj]

Obecná syntaxe deklarace struktury v C je:

Kde tag_name je volitelný název v některých kontextech. Taková deklarace struktury může také objevit v souvislosti s deklarací typedef typu alias nebo deklarace nebo definice proměnné:

Často je lepší tyto subjekty deklarovat samostatně, stejně jako v:

Například:

definuje typ, označované jako struct account (struktura účet). Pro vytvoření nové proměnné tohoto typu, můžeme psát

který obsahuje číslo součásti, přistupované prostřednictvím s.account_number a desetinnou část, přistupovanou přes s.balance, stejně jako části first_name a last_name. Struktura s obsahuje všechny čtyři hodnoty a všechny čtyři pole mohou být změněny nezávisle na sobě.

Ukazatel na instanci struktury "account" bude ukazovat na adresu paměti první proměnné, tedy "account_number". Celková paměť potřebná pro uložení tohoto objektu struct odpovídá součtu požadavků na uložení všech obsažených polí (ev. datových členů), plus režie závislá na konkrétním systému.


Související články[editovat | editovat zdroj]

  • Třída
  • Union
  • Složený datový typ
  • Flexibilní člen pole
  • Bitové pole

Reference[editovat | editovat zdroj]

V tomto článku byl použit překlad textu z článku Struct (C programming language) na anglické Wikipedii.

  1. C struct memory layout?
  2. Parameter passing in C#