Задать значение поля в массиве структуры, заданный индекс и номер поля
#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 - количество полей.
В Fortran первое поле в каждом элементе имеет 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-файл доступны только для чтения mxArrays. Не изменяйте входные данные. Используя 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