Main Content

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 の最初の要素は 0index をもっています。最後の要素の indexN-1 です。ここで、N は配列内の要素の数です。Fortran では、mxArray の最初の要素の index1 です。最後の要素の indexN です。ここで、N は配列内の要素の数です。

インデックスの計算の詳細については、mxCalcSingleSubscript を参照してください。

fieldnumber

構造体内のフィールドの位置。フィールドが構造体内に存在しなければなりません。

C では、各要素内の最初のフィールドは 0fieldnumber をもっています。最後のフィールドの fieldnumberN-1 です。ここで、N はフィールドの数です。

Fortran では、各要素内の最初のフィールドは 1fieldnumber をもっています。最後のフィールドの fieldnumberN です。ここで、N はフィールドの数です。

pvalue

割り当てるデータを含む mxArray へのポインター。

説明

mxSetFieldByNumber を使用して、pvalue の内容を要素 fieldnumberindex で指定されたフィールドに割り当てます。mxSetFieldByNumbermxSetField と似ていますが、この関数は、名前ではなく位置番号によってフィールドを識別します。

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)

matlabroot/extern/examples/mx の次の例を参照してください。

バージョン履歴

R2006a より前に導入