### 3.2 Pointer testing functions

A number of functions are provided for testing various properties of pointers. The most basic, pointerp, tests whether an object is a pointer. In the following examples the first expression returns `nil`, because 7 is a number, and not a pointer. The second returns `t` because `point4` is a pointer.

```(fli:pointerp 7)
```
```(fli:pointerp point4)
```

The address pointed to by a pointer is obtained using pointer-address. For example, the following expression returns the address pointed to by `point4`, which was defined to be `100`.

```(fli:pointer-address point4)
```

Pointers which point to address `0` are known as null pointers. Passing the Lisp object `nil` instead of a pointer results in `nil` being treated as a null pointer. The function null-pointer-p tests whether a pointer is a null pointer or not. If the pointer is a null pointer the value `t` is returned. We know that `point4` points to address `100` and is therefore not a null pointer. As a result, the following expression returns `nil`.

```(fli:null-pointer-p point4)
```

Another testing function is pointer-eq which returns `t` if two pointers point to the same address, and `nil` if they do not. In the previous section we created `point3` by making a copy of `point1`, and so both point to the same address. Therefore the following expression returns `t`.

```(fli:pointer-eq point1 point3)
```

Two functions are provided to return information about the object pointed to by a pointer, pointer-element-type and pointer-element-size. In practice, it is the pointer which holds the information as to the type of the object at a given memory locationâ€”the memory location itself only contains data in the form of bytes. Recall that `point1` was defined in the previous section as a pointer to an :int. As a result the following two lines of code return `4` (the size of an :int) and :int.

```(fli:pointer-element-size point1)
```
```(fli:pointer-element-type point1)
```

The question of pointer types is discussed further in the next section.

Foreign Language Interface User Guide and Reference Manual - 01 Dec 2021 19:34:57