Установите значение поля в массиве структур, задайте индекс и номер поля
#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
. The index
последнего элемента N-1
, где N
- количество элементов в массиве. В Фортране первый элемент mxArray
имеет index
от 1
. The index
последнего элемента N
, где N
- количество элементов в массиве.
Посмотрите mxCalcSingleSubscript
для получения дополнительной информации о вычислении индекса.
fieldnumber
Положение поля в структуре. Поле должно существовать в структуре.
В C первое поле внутри каждого элемента имеет fieldnumber
от 0
. The fieldnumber
последнего - N-1
, где N
количество полей.
В Фортране первое поле внутри каждого элемента имеет fieldnumber
от 1
. The 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