--- /dev/null
+#include <stdio.h>
+#include <stdint.h>
+
+int main()
+{
+ /*
+ * Structs
+ */
+ struct person {
+ char *name;
+ int age;
+ };
+
+ struct person andy = { "Andy", 33 };
+
+ printf("%s is %d years old!\n",
+ andy.name, andy.age);
+ printf("\n");
+
+ /*
+ * Typedefs
+ */
+ typedef struct {
+ char *name;
+ int age;
+ } person_t;
+
+ person_t andys = { "Andy Spencer", 33 };
+
+ printf("%s is %d years old!\n",
+ andys.name, andys.age);
+ printf("\n");
+
+ /*
+ * Pointers.
+ */
+ person_t *who = &andys;
+
+ printf("%s is %d years old!\n",
+ (*who).name, (*who).age);
+
+ printf("%s is %d years old!\n",
+ who->name, who->age);
+ printf("\n");
+
+ /*
+ * Unions.
+ */
+ union cake {
+ char *have;
+ char *eat;
+ };
+
+ union cake chocolate = {};
+
+ chocolate.have = "Yes please";
+ printf("Chocolate? %s!\n", chocolate.have);
+ chocolate.eat = "Yum";
+ printf("Chocolate? %s!\n", chocolate.eat);
+ printf("Chocolate? %s!\n", chocolate.have);
+ printf("\n");
+
+ /*
+ * Unions.
+ */
+ union types {
+ uint32_t number;
+ char string[4];
+ };
+
+ union types abc = {
+ .string = "abc"
+ };
+
+ printf("Number: %08x\n", abc.number);
+ printf("String: %s\n", abc.string);
+
+ return 0;
+}