* A **structure** is a user-defined type in C. It is based on the idea that at certain times, a programmer wants to manage not just primitive data-types, but also programmer-defined data-types.
* We can also define a **structure** using **typedef** which makes initializing a structure later in our program easier. Note that using typedef requires naming the structure, in the example below **struct StudentRecord** was given the name **Record**.
We can also dynamically allocate memory for a struct, as follows:
```C
Record *student1Ptr = (Record *)malloc(sizeof(Record));
//always check for null after malloc
```
This will make malloc calculate the size of all the elements in the struct and allocate the appropriate amount of memory accordingly. To access members of a struct's pointer we use an arrow `->`
```C
int main(void)
{
Record *student1Ptr = (Record *)malloc(sizeof(Record));