Struktura jest zbiorem elementów różnych typów. Każdy element struktury nazywany jest polem. Definicja struktury ma następującą postać:
Składnia definicji pola jest taka sama jak składnia definicji pojedynczej zmiennej. Nazwa pola (odpowiadająca nazwie zmiennej) jest nazwą lokalną widoczną tylko wewnątrz struktury. Struktura może posiadać nazwę. Można wtedy deklarować zmienne, będące strukturami opisanymi w definicji. Bezpośrednio po definicji struktury można podać nazwy zmiennych, które będą tymi strukturami. Dlatego możliwe jest również definiowanie struktur bez nazwy - definiuje się wtedy od razu odpowiednie zmienne.
Przykład:
struct osoba { char nazwisko[25]; char imie[10]; int wiek; } klient;
W pewnych sytuacjach może istnieć potrzeba poinformowania kompilatora, że dana struktura zostanie zdefiniowana później. Możliwa jest wtedy predefinicja w postaci:
Struktura taka nie musi być zdefiniowana, aż do momentu, w którym kompilator nie będzie musiał obliczyć jej rozmiaru, tzn. do momentu deklaracji pola lub zmiennej tego typu, wywołania operatora sizeof, itp.
Mając zdefiniowaną strukturę o określonej nazwie, można używać jej do definicji zmiennych lub pól innej struktury tak jak nowego typu:
Po zadeklarowaniu zmiennych strukturowych można odwoływać się do nich jako całości lub do poszczególnych pól. W szczególności można przypisywać jedną zmienną strukturową drugiej (tego samego typu) za pomocą pojedynczego operatora przypisania. Odwołanie do pola struktury jest możliwe przy użyciu operatora '.'. Z lewej strony podaje się nazwę zmiennej strukturowej, z prawej nazwę pola:
Przykład:
struct osoba { char nazwisko[25]; char imie[10]; int wiek; };
Struktury podobnie jak tablice można inicjować w deklaracji podając wartości kolejnych pól na liście zamkniętej w nawiasy klamrowe. Można również inicjować tablice struktur (we wszystkich kompilatorach możliwości inicjalizacji w deklaracji są dostępne od ANSI C):