Указатель на значение поля из массива структур, учитывая индекс и полевой номер
#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
-by-1
структура, затем вызывая:
mxGetField(pa, index, "field_name");
эквивалентно вызову:
field_num = mxGetFieldNumber(pa, "field_name"); mxGetFieldByNumber(pa, index, field_num);
где index
является 0
.
На Фортране, если у вас есть 1
-by-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