exponenta event banner

mxSetStartStartNumber (C и Fortran)

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

Синтаксис 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 - количество полей.

В Fortran первое поле в каждом элементе имеет 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-файл доступны только для чтения mxArrays. Не изменяйте входные данные. Используя 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