A struktúramegadás formailag nagyon hasonlít az enum típusú deklarációkra, alakja:
tárolási osztály struct típuscímke
{
típus_1 azonosítólista_1;
típus_2 azonosítólista_2;
...
} azonosítólista;
Az enum deklarációhoz hasonlóan elmaradhat a típuscímke (a struktúra megnevezése), ha a késõbbiekben nem kívánunk hivatkozni rá, illetve elmaradhat az azonosítólista is, ha csak a struktúra alakját kívánjuk megadni. A struktúrát felépítõ elemek, a mezõk ( members) deklarálása típusuk és nevük megadásával történik. A típuscímke tipikus alkalmazása az önhivatkozó (rekurzív) adatstruktúrák definiálása. Példa struktúra megadására:
struct s1 { int a, b; float f; char *s, nev[30]; struct s1 *link; } sv, *s1h;amely az s1 struktúra alakjának rögzítése mellett definiál két - a definíció elhelyezésétõl függõen - globális vagy auto változót, az egyiket mint a fenti struktúrának megfelelõ tárolási egységet, a másikat, mint egy ilyen típusú tárolási egységet megcímzõ mutatót. A struktúrát felépítõ mezõk típusa tetszõleges lehet, így bármely struktúra tartalmazhat újabb struktúrákat is (ezt beágyazásnak, angolul nesting-nek nevezzük); az egyetlen megkötés, hogy egy adott struktúrán belül elhelyezkedõ elem típusa sem lehet a deklarálás alatt levõ típus, azaz semelyik struktúra sem tartalmazhatja önmagát saját elemeként. Lehetõség van viszont arra (amint az elõbbi példában is látható), hogy a struktúra tartalmazzon mutatót olyan tárolási egységre, amelynek típusa az adott struktúra (lehetõség listák, fák és egyéb rekurzív adatstruktúrák kialakítására). A korszerû C implementációk - így a BORLAND C++ is - megengedik, hogy egy struktúraelem azonosítója megegyezzék valamely egyéb, más programegység azonosítójával, hiszen a mezõkre való hivatkozás - mint ahogy rögtön látni fogjuk - mindig egyértelmûen megadja a megfelelõ struktúrát is, így a két azonosító használata jól elkülöníthetõ. Ennek megfelelõen lehet két különbözõ struktúrának is azonos nevû mezõje. A struktúra típusú elemekbõl álló egydimenziós tömbök definiálása hasonlóan történik, mint az elemi típusokból való építkezés esetén:
stuct s1 s1_tomb[12];A változódefiníciók struktúrák esetén szintén tartalmazhatnak kezdõértékadást is. A C nyelvben minden aggregátum inicializátorát - mint azt az egydimenziós tömböknél láttuk - a { } zárójelpár közé zárt listával kell megadni:
struct tanulo{ char nev[30]; short jegy; } osztaly[ ] = { { "Nyilas Misi", 5 }, { "Pato Pali", 2 }, ... { "Bolond Istok", 1 } };A definiálandó struktúratömb méretét nem explicit módon írtuk elõ, hanem az inicializáló elemek számával. A tömb kezdõértékét { } zárójelpár között levõ listával adtuk meg - minden listaelem egy struktúra kezdõértékét határozza meg. Ezen aggregátumok inicializálása szintén { } közé zárt - kételemû - listákkal történik. Mivel karaktertömb alkotja a struktúra elsõ mezõjét, ezért itt egyszerûsített megadást is használhattunk, sztringkonstans inicializátort alkalmazva. A második mezõ már nem aggregátum, ezért használhattunk az a kezdõértékadásban közönséges konstansokat.