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