Итерация через массив

Создание Массива ячеек из Объекта lib.pointer

Этот пример показывает, как создать массив ячеек из символьных векторов MATLAB®, mlStringArray, от вывода функции getListOfStrings.

Загрузите библиотеку shrlibsample.

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

Вызовите функцию getListOfStrings, чтобы создать массив векторов символов. Функция возвращает указатель на массив.

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

Создайте переменные индексации, чтобы выполнить итерации через массивы. Используйте ptrindex для массива, возвращенного функцией и index для массива MATLAB.

ptrindex = ptr;
index = 1;

Создайте массив ячеек из символьных векторов mlStringArray. Скопируйте вывод getListOfStrings к массиву ячеек.

% 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

Просмотрите содержимое массива ячеек.

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

Выполнение адресной арифметики с указателями на массиве структур

Этот пример показывает, как использовать адресную арифметику с указателями, чтобы получить доступ к элементам структуры. Пример создает структуру MATLAB, на основе определения c_struct в заголовочном файле shrlibsample.h.

Загрузите определение.

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

Создайте структуру MATLAB.

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

Создайте указатель на структуру.

sptr = libpointer('c_struct',s);

Считайте значения первого элемента.

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

Считайте значения следующего элемента путем постепенного увеличения указателя.

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

Была ли эта тема полезной?