Iterate Through an Array

Create Cell Array from lib.pointer Object

This example shows how to create a MATLAB® cell array of character vectors, mlStringArray, from the output of the getListOfStrings function.

Load the shrlibsample library.

if not(libisloaded('shrlibsample'))
    addpath(fullfile(matlabroot,'extern','examples','shrlib'))
    loadlibrary('shrlibsample')
end

Call the getListOfStrings function to create an array of character vectors. The function returns a pointer to the array.

ptr = calllib('shrlibsample','getListOfStrings');
class(ptr)
ans = 
'lib.pointer'

Create indexing variables to iterate through the arrays. Use ptrindex for the array returned by the function and index for the MATLAB array.

ptrindex = ptr;
index = 1;

Create the cell array of character vectors mlStringArray. Copy the output of getListOfStrings to the cell array.

% read until end of list (NULL)
while ischar(ptrindex.value{1}) 
    mlStringArray{index} = ptrindex.value{1};
    % increment pointer 
    ptrindex = ptrindex + 1; 
    % increment array index
    index = index + 1; 
end

View the contents of the cell array.

mlStringArray
mlStringArray = 1x4 cell array
    {'String 1'}    {'String Two'}    {0x0 char}    {'Last string'}

Perform Pointer Arithmetic on Structure Array

This example shows how to use pointer arithmetic to access elements of a structure. The example creates a MATLAB structure, based on the c_struct definition in the shrlibsample.h header file.

Load the definition.

if not(libisloaded('shrlibsample'))
    addpath(fullfile(matlabroot,'extern','examples','shrlib'))
    loadlibrary('shrlibsample')
end

Create the MATLAB structure.

s = struct('p1',{1,2,3},'p2',{1.1,2.2,3.3},'p3',{0});

Create a pointer to the structure.

sptr = libpointer('c_struct',s);

Read the values of the first element.

v1 = sptr.Value
v1 = struct with fields:
    p1: 1
    p2: 1
    p3: 0

Read the values of the next element by incrementing the pointer.

sptr = sptr + 1;
v2 = sptr.Value
v2 = struct with fields:
    p1: 2
    p2: 2
    p3: 0