Указатель на значение поля из массива структур, учитывая индекс и имя поля
#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
-by-1
структура, index
является 0
.
На Фортране, вызывая:
mxGetField(pm, index, 'fieldname')
эквивалентно вызову:
fieldnum = mxGetFieldNumber(pm, 'fieldname') mxGetFieldByNumber(pm, index, fieldnum)
где, если у вас есть 1
-by-1
структура, index
является 1
.
mxGetFieldByNumber
, mxGetFieldNameByNumber
, mxGetFieldNumber
, mxGetNumberOfFields
, mxIsStruct
, mxSetField
, mxSetFieldByNumber