mxSetFieldByNumber (C и Фортран)

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

Синтаксис C

#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

В 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)

Примеры

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

Представлено до R2006a