Main Content

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

  • indexmxArray の範囲外の要素に指定している。たとえば、10 個の要素をもつ構造体 mxArray がある場合、C では 9 (Fortran では 10) より大きい index を指定することはできません。

  • 存在しないフィールド番号を指定している。mxGetFieldNumber を呼び出して、任意のフィールド名に対応するフィールド番号を判断します。

説明

mxGetFieldByNumber を呼び出して、インデックスの示す要素にある、指定された fieldnumber に格納されている値を取得します。

関数 mxGetFieldByNumber によって返された mxArray では、mxDestroyArray を呼び出さないでください。

メモ

MEX ファイルへの入力値は、読み取り専用の定数 mxArray です。入力値を変更しないでください。関数 mxSetCell* または関数 mxSetField* を使用して MATLAB® 引数のセルまたはフィールドを変更すると、予期しない結果が生じます。

C では、11 列の構造体がある場合、以下を呼び出すことは、

mxGetField(pa, index, "field_name");

以下を呼び出すことと等価です。

field_num = mxGetFieldNumber(pa, "field_name");
mxGetFieldByNumber(pa, index, field_num);

ここで index0 です。

Fortran では、11 列の構造体がある場合、以下を呼び出すことは、

mxGetField(pm, index, 'fieldname')

以下を呼び出すことと等価です。

fieldnum = mxGetFieldNumber(pm, 'fieldname')
mxGetFieldByNumber(pm, index, fieldnum)

ここで index1 です。

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

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

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

バージョン履歴

R2006a より前に導入