# Structures, Unions and Bit Manipulation ## Concept of Structures Structures are derived from different data types, **they're a collection of related variables under one name.** - used to define records stored in files - formation of complex data structures - linked lists - queues - stacks - trees ## Syntax ```C struct structure_name{ data_type member1 data_type member2 }; //remember the semicolon! ``` Example: ```C struct Person { char gender; unsigned int age; char name[50]; int citNo; float salary; }; ``` ## Self-Referential Structure Structures cannot contain an instance of itself, **however pointers of the structure can be included:** ```C struct employee2 { char firstName[20]; char lastName[20]; unsigned int age; char gender; float hourlySalary; struct employee2 person; // ERROR struct employee2 *ePtr; // pointer }; ``` Pointers to reference the address of `struct employee2` can be accepted. ```C struct test{ int x; int y; struct m{ int z1; int z2; }z[2]; }a[2]; int main(){ a[0].z[1].z1 = 5; printf("%d", a[0].z[1].z1); } ``` ## Definition ## Passing `struct` and Returning `struct` Using Functions ```C #include <stdio.h> struct point { int x; int y; }c; struct point makepoint(struct point b){ printf("%d %d", b.x, b.y); return b; } int main() { c.x = 20; c.y = 30; makepoint(c); return 0; } ```