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
pm
Pointer to a structure
mxArray
. CallmxIsStruct
to determine whetherpm
points to a structuremxArray
.index
Index of the desired element.
In C, the first element of an
mxArray
has anindex
of0
. Theindex
of the last element isN-1
, whereN
is the number of elements in the array. In Fortran, the first element of anmxArray
has anindex
of1
. Theindex
of the last element isN
, whereN
is the number of elements in the array.See
mxCalcSingleSubscript
for details on calculating an index.fieldnumber
Position of the field in the structure. The field must exist in the structure.
In C, the first field within each element has a
fieldnumber
of0
. Thefieldnumber
of the last isN-1
, whereN
is the number of fields.In Fortran, the first field within each element has a
fieldnumber
of1
. Thefieldnumber
of the last isN
, whereN
is the number of fields.pvalue
Pointer to the
mxArray
containing 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 mxArray
s.
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)
See Also
mxCreateStructArray
, mxCreateStructMatrix
, mxGetFieldByNumber
, mxGetFieldNameByNumber
, mxGetFieldNumber
, mxGetNumberOfFields
, mxIsStruct
,
mxSetField
,
mxDestroyArray
,
mxCalcSingleSubscript
Version History
Introduced before R2006a