mxSetField (C and Fortran)

Установите значение поля в массиве структур, учитывая индекс и имя поля

Синтаксис C

#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 является постоянный mxArray только для чтенияs. Не изменяйте входные параметры. Используя mxSetCell* или mxSetField* функции, чтобы изменить ячейки или поля аргумента MATLAB вызывают непредсказуемые результаты.

Примеры

Смотрите эти примеры в matlabroot/extern/examples/mx:

Альтернативы

Язык C

В C можно заменить операторы:

field_num = mxGetFieldNumber(pa, "fieldname");
mxSetFieldByNumber(pa, index, field_num, new_value_pa);

с вызовом mxSetField:

mxSetField(pa, index, "fieldname", new_value_pa);

Язык Фортрана

На Фортране можно заменить операторы:

fieldnum = mxGetFieldNumber(pm, 'fieldname')
mxSetFieldByNumber(pm, index, fieldnum, newvalue)

с вызовом mxSetField:

mxSetField(pm, index, 'fieldname', newvalue)
Представлено до R2006a