mxSetFieldByNumber (C and 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. 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

На 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