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