mxSetFieldByNumber (C および Fortran)
インデックスおよびフィールド番号を指定して、構造体配列にフィールド値を設定
C 構文
#include "matrix.h" void mxSetFieldByNumber(mxArray *pm, mwIndex index, int fieldnumber, mxArray *pvalue);
Fortran 構文
#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
の最初の要素は0
のindex
をもっています。最後の要素のindex
はN-1
です。ここで、N
は配列内の要素の数です。Fortran では、mxArray
の最初の要素のindex
は1
です。最後の要素のindex
はN
です。ここで、N
は配列内の要素の数です。インデックスの計算の詳細については、
mxCalcSingleSubscript
を参照してください。fieldnumber
構造体内のフィールドの位置。フィールドが構造体内に存在しなければなりません。
C では、各要素内の最初のフィールドは
0
のfieldnumber
をもっています。最後のフィールドのfieldnumber
はN-1
です。ここで、N
はフィールドの数です。Fortran では、各要素内の最初のフィールドは
1
のfieldnumber
をもっています。最後のフィールドのfieldnumber
はN
です。ここで、N
はフィールドの数です。pvalue
割り当てるデータを含む
mxArray
へのポインター。
説明
mxSetFieldByNumber
を使用して、pvalue
の内容を要素 fieldnumber
の index
で指定されたフィールドに割り当てます。mxSetFieldByNumber
は mxSetField
と似ていますが、この関数は、名前ではなく位置番号によってフィールドを識別します。
fieldnumber
の内容を置換する場合は、まず既存のデータのメモリを解放します。関数 mxGetFieldByNumber
を使用してフィールドへのポインターを取得し、ポインターにある mxDestroyArray
を呼び出した後、mxSetFieldByNumber
を呼び出して新しい値を割り当てます。
構造体内の複数のフィールドや、mxArray
内の複数の要素に pvalue
を割り当てることはできません。pvalue
の内容を複数のフィールドに割り当てる場合は、関数 mxDuplicateArray
を使用してデータをコピーしてから、各コピーに対して mxSetFieldByNumber
を呼び出します。
この関数を使用して作成した構造体のメモリを解放するには、構造体配列のみに対して mxDestroyArray
を呼び出します。pvalue
が指している配列に対しては mxDestroyArray
を呼び出さないでください。これを行うと、MATLAB® が同じメモリを 2 回解放しようとするため、メモリが破損する可能性があります。
メモ
MEX ファイルへの入力値は、読み取り専用の定数 mxArray
です。入力値を変更しないでください。関数 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);
Fortran 言語
Fortan では、以下を呼び出すことは、
mxSetField(pm, index, 'fieldname', newvalue)
以下を呼び出すことと等価です。
fieldnum = mxGetFieldNumber(pm, 'fieldname') mxSetFieldByNumber(pm, index, fieldnum, newvalue)
参考
mxCreateStructArray
, mxCreateStructMatrix
, mxGetFieldByNumber
, mxGetFieldNameByNumber
, mxGetFieldNumber
, mxGetNumberOfFields
, mxIsStruct
, mxSetField
, mxDestroyArray
, mxCalcSingleSubscript
バージョン履歴
R2006a より前に導入