mxGetFieldByNumber (C および Fortran)
構造体配列からフィールド値へのポインター (インデックスおよびフィールド番号を指定)
C 構文
#include "matrix.h" mxArray *mxGetFieldByNumber(const mxArray *pm, mwIndex index, int fieldnumber);
Fortran 構文
#include "fintrf.h" mwPointer mxGetFieldByNumber(pm, index, fieldnumber) mwPointer pm mwIndex index integer*4 fieldnumber
引数
pm
構造体
mxArray
へのポインターindex
目的の要素のインデックス。
C では、
mxArray
の最初の要素は0
のindex
をもっています。最後の要素のindex
はN-1
です。ここで、N
は配列内の要素の数です。Fortran では、mxArray
の最初の要素のindex
は1
です。最後の要素のindex
はN
です。ここで、N
は配列内の要素の数です。index
の計算の詳細については、mxCalcSingleSubscript
を参照してください。fieldnumber
抽出する値をもつフィールドの位置。
C では、各要素内の最初のフィールドは
0
のフィールド数をもち、2 番目のフィールドは1
のフィールド数をもちます (以下同様)。最後のフィールドのフィールド番号はN-1
になります。ここで、N
はフィールドの数です。Fortan では、各要素内の最初のフィールドは
1
のフィールド数をもち、2 番目のフィールドは2
のフィールド数をもちます (以下同様)。最後のフィールドのフィールド番号はN
になります。ここで、N
はフィールドの数です。
戻り値
成功した場合、目的の要素に対する指定されたフィールドの mxArray
へのポインター。無効な引数が渡されたか、指定されたフィールドに値が割り当てられていない場合、C では NULL
(Fortran では 0
) を返します。よくある失敗の原因には、以下があります。
構造体
mxArray
を指していない配列ポインターpm
を指定している。mxIsStruct
を呼び出して、pm
が構造体mxArray
を指しているかどうかを判断します。index
をmxArray
の範囲外の要素に指定している。たとえば、10 個の要素をもつ構造体mxArray
がある場合、C では9
(Fortran では10
) より大きいindex
を指定することはできません。存在しないフィールド番号を指定している。
mxGetFieldNumber
を呼び出して、任意のフィールド名に対応するフィールド番号を判断します。
説明
mxGetFieldByNumber
を呼び出して、インデックスの示す要素にある、指定された fieldnumber
に格納されている値を取得します。
関数 mxGetFieldByNumber
によって返された mxArray
では、mxDestroyArray
を呼び出さないでください。
メモ
MEX ファイルへの入力値は、読み取り専用の定数 mxArray
です。入力値を変更しないでください。関数 mxSetCell
*
または関数 mxSetField
*
を使用して MATLAB® 引数のセルまたはフィールドを変更すると、予期しない結果が生じます。
C では、1
行 1
列の構造体がある場合、以下を呼び出すことは、
mxGetField(pa, index, "field_name");
以下を呼び出すことと等価です。
field_num = mxGetFieldNumber(pa, "field_name"); mxGetFieldByNumber(pa, index, field_num);
ここで index
は 0
です。
Fortran では、1
行 1
列の構造体がある場合、以下を呼び出すことは、
mxGetField(pm, index, 'fieldname')
以下を呼び出すことと等価です。
fieldnum = mxGetFieldNumber(pm, 'fieldname') mxGetFieldByNumber(pm, index, fieldnum)
ここで index
は 1
です。
例
の次の例を参照してください。matlabroot
/extern/examples/refbook
の次の例を参照してください。matlabroot
/extern/examples/mx
の次の例を参照してください。matlabroot
/extern/examples/mex
参考
mxGetField
, mxGetFieldNameByNumber
, mxGetFieldNumber
, mxGetNumberOfFields
, mxIsStruct
, mxSetField
, mxSetFieldByNumber
バージョン履歴
R2006a より前に導入