Указатель на значение поля из массива структур, учитывая индекс и полевой номер
#include "matrix.h" mxArray *mxGetFieldByNumber(const mxArray *pm, mwIndex index, int fieldnumber);
#include "fintrf.h" mwPointer mxGetFieldByNumber(pm, index, fieldnumber) mwPointer pm mwIndex index integer*4 fieldnumber
pm
Указатель на структуру mxArray
index
Индекс желаемого элемента.
В C, первом элементе mxArray
имеет index
из 0
. index
из последнего элемента N-1
, где N
число элементов в массиве. На Фортране, первом элементе mxArray
имеет index
из 1
. index
из последнего элемента N
, где N
число элементов в массиве.
Смотрите mxCalcSingleSubscript
для получения дополнительной информации о вычислении index
.
fieldnumber
Положение поля, значение которого вы хотите извлечь
В C первое поле в каждом элементе имеет полевое количество 0
, второе поле имеет полевое количество 1
, и так далее. Последнее поле имеет полевое количество N-1
, где N
количество полей.
На Фортране первое поле в каждом элементе имеет полевое количество 1
, второе поле имеет полевое количество 2
, и так далее. Последнее поле имеет полевое количество N
, где N
количество полей.
Указатель на mxArray
в заданном поле для желаемого элемента, на успехе. Возвращает NULL
в C (0
на Фортране), если передано недействительный аргумент или если нет никакого значения, присвоенного заданному полю. Частые причины отказа включают:
Определение указателя массивов pm
это не указывает на структуру mxArray
. Вызвать mxIsStruct
определить ли pm
точки к структуре mxArray
.
Определение index
к элементу вне границ mxArray
. Например, учитывая структуру mxArray
это содержит 10 элементов, вы не можете задать index
больше, чем 9
в C (10
на Фортране).
Определение несуществующего полевого номера. Вызвать mxGetFieldNumber
определить полевой номер, который соответствует данному имени поля.
Вызвать mxGetFieldByNumber
содержать значение в заданном fieldnumber
в индексируемом элементе.
Не вызывать mxDestroyArray
на mxArray
возвращенный mxGetFieldByNumber
функция.
Примечание
Входными параметрами к файлу MEX является постоянный mxArray
только для чтенияs. Не изменяйте входные параметры. Используя
mxSetCell
*
или mxSetField
*
функции, чтобы изменить ячейки или поля аргумента MATLAB® вызывают непредсказуемые результаты.
В C, если у вас есть 1
- 1
структура, затем вызывая:
mxGetField(pa, index, "field_name");
эквивалентно вызову:
field_num = mxGetFieldNumber(pa, "field_name"); mxGetFieldByNumber(pa, index, field_num);
где index
0
.
На Фортране, если у вас есть 1
- 1
структура, затем вызывая:
mxGetField(pm, index, 'fieldname')
эквивалентно вызову:
fieldnum = mxGetFieldNumber(pm, 'fieldname') mxGetFieldByNumber(pm, index, fieldnum)
где index
1
.
Смотрите эти примеры в
:matlabroot
/extern/examples/refbook
Смотрите эти примеры в
:matlabroot
/extern/examples/mx
Смотрите эти примеры в
:matlabroot
/extern/examples/mex
mxGetField
, mxGetFieldNameByNumber
, mxGetFieldNumber
, mxGetNumberOfFields
, mxIsStruct
, mxSetField
, mxSetFieldByNumber