Задать значение поля в массиве структуры, заданный индекс и имя поля
#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-файл доступны только для чтения mxArrays. Не изменяйте входные данные. Используя 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);
В Fortran можно заменить следующие инструкции:
fieldnum = mxGetFieldNumber(pm, 'fieldname') mxSetFieldByNumber(pm, index, fieldnum, newvalue)
с вызовом mxSetField:
mxSetField(pm, index, 'fieldname', newvalue)