Указатель на значение поля из массива структур, учитывая индекс и имя поля
#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