在结构数组中设置字段值,给定索引和字段号
#include "matrix.h" void mxSetFieldByNumber(mxArray *pm, mwIndex index, int fieldnumber, mxArray *pvalue);
#include "fintrf.h"子例程mxSetFieldByNumber(pm, index, fieldnumber, pvalue) mpointer pm, pvalue mwIndex index integer*4 fieldnumber
点
指向结构的指针mxArray
.调用mxIsStruct
以确定是否点
指向一个结构mxArray
.
指数
所需元素的索引。
在C中,a的第一个元素mxArray
有一个指数
的0
.的指数
最后一个要素是n - 1
,在那里N
是数组中元素的个数。在Fortran语言中,元素的第一个元素mxArray
有一个指数
的1
.的指数
最后一个要素是N
,在那里N
是数组中元素的个数。
看到mxCalcSingleSubscript
有关计算索引的详细信息。
fieldnumber
场在结构中的位置。该字段必须在结构中存在。
在C语言中,每个元素的第一个字段都有一个fieldnumber
的0
.的fieldnumber
最后一点是n - 1
,在那里N
是字段的数量。
在Fortran中,每个元素的第一个字段有一个fieldnumber
的1
.的fieldnumber
最后一点是N
,在那里N
是字段的数量。
pvalue
指针mxArray
包含要分配的数据。
使用mxSetFieldByNumber
分配…的内容pvalue
指定的字段fieldnumber
的元素指数
.mxSetFieldByNumber
就像mxSetField
;但是,该函数通过位置号而不是名称来标识字段。
如果你想替换fieldnumber
,然后首先释放现有数据的内存。使用mxGetFieldByNumber
函数获取指向该字段的指针,调用mxDestroyArray
在指针上,然后调用mxSetFieldByNumber
来分配新值。
你不能分配pvalue
转换为结构中的多个字段或mxArray
.如果你想要分配pvalue
,然后使用mxDuplicateArray
函数复制数据,然后调用mxSetFieldByNumber
在每个副本。
要释放使用此函数创建的结构的内存,请调用mxDestroyArray
仅在结构数组上。不叫mxDestroyArray
在数组中pvalue
点。如果有,用MATLAB®试图释放相同的内存两次,这可能会损坏内存。
请注意
mex文件的输入是常量只读的mxArray
s.不要修改输入。使用mxSetCell
*
或mxSetField
*
修改MATLAB参数的单元格或字段的函数将导致不可预知的结果。
在C语言中,调用:
mxSetField(pa, index, "field_name", new_value_pa);
等价于调用:
field_num = mxGetFieldNumber(pa, "field_name");mxSetFieldByNumber(pa, index, field_num, new_value_pa);
在Fortran语言调用:
mxSetField(pm, index, 'fieldname', newvalue)
等价于调用:
mxSetFieldByNumber(pm, index, fieldnum, newvalue) = mxGetFieldNumber(pm, 'fieldname')
mxCreateStructArray
,mxCreateStructMatrix
,mxGetFieldByNumber
,mxGetFieldNameByNumber
,mxGetFieldNumber
,mxGetNumberOfFields
,mxIsStruct
,mxSetField
,mxDestroyArray
,mxCalcSingleSubscript