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