The function foreign-aref
accesses a specified element in an array and returns its value if the element is an immediate type. If it is an aggregate type, such as a :struct
, :union
, or :c-array
, the function foreign-aref
returns a copy of the element. In this case, the copy must be de-allocated after use to reclaim the memory allocated for it by foreign-aref
.
The value of an element in an array can be changed using setf
and foreign-aref
. See the examples section for an example of this.
In the first example, a 3 by 3 integer array is created, and foreign-aref
is used with setf
to set all the element equal to 42.
(setq array1 (fli:allocate-foreign-object
:type '(:c-array :int 3 3)))
(dotimes (x 3)
(dotimes (y 3)
(setf (fli:foreign-aref array1 x y)
42)))
Next, foreign-aref
is used to dereference the value at position 2 2
in array1
. Remember that the count for the indices of an array start at 0
.
(fli:foreign-aref array1 2 2)
In the following example, an array of arrays of integers is created. When an element is dereferenced, a copy of an array of integers is returned.
(setq array2 (fli:allocate-foreign-object
:type '(:c-array (:c-array :int 3) 3))
(fli:foreign-aref array2 2)
The array returned can be bound to the variable array3
, and accessed using foreign-aref
again. This time an integer is returned.
(setq array3 *)
(fli:foreign-aref array3 1)