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