メインコンテンツ

mxSetFieldByNumber (C および Fortran)

R2026b

インデックスおよびフィールド番号を指定して、構造体配列にフィールド値を設定

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)

例

例を開くには、次のように入力します。

edit([fullfile(matlabroot,"extern","examples","mx","filename")]);

ここで filename は、次のようになります。

バージョン履歴

R2006a より前に導入