| MATLAB Application Program Interface | Search  Help Desk | 
| mxGetField | Examples See Also | 
Get a field value, given a field name and an index in a structure array
#include "matrix.h" mxArray *mxGetField(const mxArray *array_ptr, int index, const char *field_name);array_ptr
mxArray.
index
mxArray has an index of 0, the second element has an index of 1, and the last element has an index of N-1, where N is the total number of elements in the structure mxArray.
field_name
mxArray in the specified field at the specified field_name, on success. Returns NULL otherwise. One possibility is that there is no value assigned to the specified field. Another possibility is that there is a value, but the call failed. Common causes of failure include
array_ptr that does not point to a structure mxArray. To determine if array_ptr points to a structure mxArray, call mxIsStruct. 
index to an element past the end of the mxArray. For example, given a structure mxArray that contains 10 elements, you cannot specify an index greater than 9. 
field_name. Call mxGetFieldNameByNumber or mxGetFieldNumber to get existing field names. 
mxArray.
mxGetField to get the value held in the specified element of the specified field. In pseudo-C terminology, mxGetField returns the value at
array_ptr[index].field_name
mxGetFieldByIndex is similar to mxGetField. Both functions return the same value. The only difference is in the way you specify the field. mxGetFieldByIndex takes field_num as its third argument, and mxGetField takes field_name as its third argument. 
When you finish using the returned mxArray, call mxDestroyArray to deallocate it. Note: Changing data contained within the field may cause unpredictable results.
Consider a MEX-file named WhatBill that prints the value of the "Billing" field in each element of an input structure mxArray:
void
mexFunction(int nlhs,mxArray *plhs[],int nrhs,const mxArray 
*prhs[])
{
 mxArray  *field_array_ptr;
 double    value_in_billing_field;
 int       index, number_of_elements;
 /* Find the values of the billing field. */ 
   if (mxIsStruct(prhs[0]))  {
   /* Loop through each element of the structure. */ 
     number_of_elements = mxGetM(prhs[0]) * mxGetN(prhs[0]);
     for (index=0; index<number_of_elements; index++)  {
      /* Get the value in the "billing" field at this index. */
        field_array_ptr = mxGetField(prhs[0], index, "billing"); 
      /* The returned "field" is a pointer to a scalar mxArray. 
         Get the value associated with the scalar mxArray. */
        if (field_array_ptr)  {
           value_in_billing_field = mxGetScalar(field_array_ptr);
           mexPrintf("%g\n", value_in_billing_field); 
        }
        else
          mexWarnMsgTxt("Missing 'billing' field.");
     }
   }
   else
     mexErrMsgTxt("You must pass a structure mxArray.");
}
In MATLAB, create a structure named patient initialized to
>> patient(1).name='Cheryl Doe'; >> patient(1).billing=827; >> patient(2).name='Scott Woe'; >> patient(2).billing=435; >> patient(3).name='Cleve Roe'; >> patient(3).billing=256;Passing
patient as the first argument to WhatBill yields
>> WhatBill(patient) 827 435 256For an additional example, see
mxgetfield.c in the mx subdirectory of the examples directory.
mxGetFieldByNumber, mxGetFieldNameByNumber, mxGetFieldNumber, mxGetNumberOfFields, mxIsStruct, mxSetField, mxSetFieldByNumber