# Foreign Data Structure Examples

Now that we have alien types, operations and variables, we can manipulate foreign data structures. This C declaration

```struct foo {
int a;
struct foo *b[100];
};```
can be translated into the following alien type:
```(define-alien-type nil
(struct foo
(a int)
(b (array (* (struct foo)) 100))))```

Once the foo alien type has been defined as above, the C expression

```struct foo f;
f.b[7].a```
can be translated in this way:
```(with-alien ((f (struct foo)))
(slot (deref (slot f 'b) 7) 'a)
;;
;; Do something with f...
)```

Or consider this example of an external C variable and some accesses:

```struct c_struct {
short x, y;
char a, b;
int z;
c_struct *n;
};
extern struct c_struct *my_struct;
my_struct->x++;
my_struct->a = 5;
my_struct = my_struct->n;```
which can be manipulated in Lisp like this:
```(define-alien-type nil
(struct c-struct
(x short)
(y short)
(a char)
(b char)
(z int)
(n (* c-struct))))
(define-alien-variable "my_struct" (* c-struct))
(incf (slot my-struct 'x))
(setf (slot my-struct 'a) 5)
(setq my-struct (slot my-struct 'n))```