Полевой номер из массива структур, учитывая имя поля
#include "matrix.h" int mxGetFieldNumber(const mxArray *pm, const char *fieldname);
#include "fintrf.h" integer*4 mxGetFieldNumber(pm, fieldname) mwPointer pm character*(*) fieldname
pmУказатель на структуру mxArray
fieldnameИмя поля в структуре mxArray
Полевое количество заданного fieldname, на успехе. В C первое поле имеет полевое количество 0, второе поле имеет полевое количество 1, и так далее. На Фортране первое поле имеет полевое количество 1, второе поле имеет полевое количество 2, и так далее. Возвращает -1 в C (0 на Фортране) на отказе. Частые причины отказа включают
Определение указателя массивов pm это не указывает на структуру mxArray. Вызвать mxIsStruct определить ли pm точки к структуре mxArray.
Определение fieldname из несуществующего поля.
Если вы знаете имя поля, но не знаете его полевой номер, вызвать mxGetFieldNumber. С другой стороны, если вы знаете полевой номер, но не знаете его имя поля, вызвать mxGetFieldNameByNumber.
Например, считайте структуру MATLAB® инициализированной к:
patient.name = 'John Doe'; patient.billing = 127.00; patient.test = [79 75 73; 180 178 177.5; 220 210 205];
В C, поле name имеет полевое количество 0; поле billing имеет полевое количество 1; и поле test имеет полевое количество 2. Если вы вызываете mxGetFieldNumber и задайте имя поля чего-либо кроме name, billing, или test, mxGetFieldNumber возвращает -1.
Если у вас есть 1- 1 структура, затем вызывая:
mxGetField(pa, index, "field_name");
эквивалентно вызову:
field_num = mxGetFieldNumber(pa, "field_name"); mxGetFieldByNumber(pa, index, field_num);
где index 0.
На Фортране, поле name имеет полевое количество 1; поле billing имеет полевое количество 2; и поле test имеет полевое количество 3. Если вы вызываете mxGetFieldNumber и задайте имя поля чего-либо кроме name, billing, или test, mxGetFieldNumber возвращает 0.
Если у вас есть 1- 1 структура, затем вызывая:
mxGetField(pm, index, 'fieldname');
эквивалентно вызову:
fieldnum = mxGetFieldNumber(pm, 'fieldname'); mxGetFieldByNumber(pm, index, fieldnum);
где index 1.
mxGetField, mxGetFieldByNumber, mxGetFieldNameByNumber, mxGetNumberOfFields, mxIsStruct, mxSetField, mxSetFieldByNumber