exponenta event banner

mxSetField (C и 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-файл доступны только для чтения mxArrays. Не изменяйте входные данные. Используя 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);

Фортранский язык

В Fortran можно заменить следующие инструкции:

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

с вызовом mxSetField:

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