mxSetFieldByNumber (C and Fortran)
Set field value in structure array, given index and field number
C Syntax
#include "matrix.h" void mxSetFieldByNumber(mxArray *pm, mwIndex index, int fieldnumber, mxArray *pvalue);
Fortran Syntax
#include "fintrf.h" subroutine mxSetFieldByNumber(pm, index, fieldnumber, pvalue) mwPointer pm, pvalue mwIndex index integer*4 fieldnumber
Arguments
pmPointer to a structure
mxArray. CallmxIsStructto determine whetherpmpoints to a structuremxArray.indexIndex of the desired element.
In C, the first element of an
mxArrayhas anindexof0. Theindexof the last element isN-1, whereNis the number of elements in the array. In Fortran, the first element of anmxArrayhas anindexof1. Theindexof the last element isN, whereNis the number of elements in the array.See
mxCalcSingleSubscriptfor details on calculating an index.fieldnumberPosition of the field in the structure. The field must exist in the structure.
In C, the first field within each element has a
fieldnumberof0. Thefieldnumberof the last isN-1, whereNis the number of fields.In Fortran, the first field within each element has a
fieldnumberof1. Thefieldnumberof the last isN, whereNis the number of fields.pvaluePointer to the
mxArraycontaining the data you want to assign.
Description
Use mxSetFieldByNumber to assign the contents of
pvalue to the field specified by fieldnumber
of element index. mxSetFieldByNumber is like
mxSetField; however, the function identifies the field by
position number, not by name.
If you want to replace the contents at fieldnumber, then first free
the memory of the existing data. Use the mxGetFieldByNumber
function to get a pointer to the field, call mxDestroyArray on the
pointer, then call mxSetFieldByNumber to assign the new
value.
You cannot assign pvalue to more than one field in a structure or
to more than one element in the mxArray. If you want to assign the
contents of pvalue to multiple fields, then use the
mxDuplicateArray function to make copies of the data then call
mxSetFieldByNumber on each copy.
To free memory for structures created using this function, call
mxDestroyArray only on the structure array. Do not call
mxDestroyArray on the array pvalue points to. If you
do, then MATLAB® attempts to free the same memory twice, which can corrupt
memory.
Note
Inputs to a MEX file are constant read-only mxArrays. Do not modify the
inputs. Using mxSetCell* or
mxSetField* functions to modify the cells or
fields of a MATLAB argument causes unpredictable results.
Alternatives
C Language
In C, calling:
mxSetField(pa, index, "field_name", new_value_pa);
is equivalent to calling:
field_num = mxGetFieldNumber(pa, "field_name"); mxSetFieldByNumber(pa, index, field_num, new_value_pa);
Fortran Language
In Fortran, calling:
mxSetField(pm, index, 'fieldname', newvalue)
is equivalent to calling:
fieldnum = mxGetFieldNumber(pm, 'fieldname') mxSetFieldByNumber(pm, index, fieldnum, newvalue)
Examples
To open an example, type:
edit([fullfile(matlabroot,"extern","examples","mx","filename")]);
where filename is:
See Also
mxCreateStructArray, mxCreateStructMatrix, mxGetFieldByNumber, mxGetFieldNameByNumber, mxGetFieldNumber, mxGetNumberOfFields, mxIsStruct,
mxSetField,
mxDestroyArray,
mxCalcSingleSubscript
Version History
Introduced before R2006a