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