Struktura (programovací jazyk C)

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: členy třídy jsou implicitně soukromé, kdežto členy struktury jsou ve výchozím nastavení veřejné.

V jiných jazycích

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 členy 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

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átkterý 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.

Odkazy

Reference

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#. yoda.arachsys.com [online]. [cit. 2016-06-02]. Dostupné v archivu pořízeném dne 2016-05-30. 

Související články