Установите значение поля в массиве структур, задайте индекс и имя поля
#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. The index последнего элемента N-1, где N - количество элементов в массиве. В Фортране первый элемент mxArray имеет index от 1. The 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)