mxGetField (C и Фортран)

Указатель на значение поля из массива структур, учитывая индекс и имя поля

Синтаксис C

#include "matrix.h"
mxArray *mxGetField(const mxArray *pm, mwIndex index, const char *fieldname);

Синтаксис языка ФОРТРАН

#include "fintrf.h"
mwPointer mxGetField(pm, index, fieldname)
mwPointer pm
mwIndex index
character*(*) fieldname

Аргументы

\pm

Указатель на структуру mxArray

index

Индекс желаемого элемента.

В C первый элемент mxArray имеет index 0. index последнего элемента является N-1, где N является числом элементов в массиве. На Фортране первый элемент mxArray имеет index 1. index последнего элемента является N, где N является числом элементов в массиве.

fieldname

Имя поля, значение которого вы хотите извлечь.

Возвращается

Указатель на mxArray в заданном поле в заданном fieldname, на успехе. Возвращает NULL в C (0 на Фортране), если передано недействительный аргумент или если нет никакого значения, присвоенного заданному полю. Частые причины отказа включают:

  • Определение указателя массивов pm, который не указывает на структуру mxArray. Чтобы определить, указывает ли pm на структуру mxArray, вызовите mxIsStruct.

  • Определение index к элементу вне границ mxArray. Например, учитывая структуру mxArray, который содержит 10 элементов, вы не можете задать index, больше, чем 9 в C (10 на Фортране).

  • Определение несуществующего fieldname. Вызовите mxGetFieldNameByNumber или mxGetFieldNumber, чтобы получить существующие имена полей.

  • Недостаточное пространство "кучи".

Описание

Вызовите mxGetField, чтобы содержать значение в заданном элементе заданного поля. В pseudo-C терминологии mxGetField возвращает значение в:

pm[index].fieldname

mxGetFieldByNumber похож на mxGetField. Обе функции возвращают то же значение. Единственная разница находится в способе, которым вы задаете поле. mxGetFieldByNumber берет полевой номер в качестве своего третьего аргумента, и mxGetField берет имя поля в качестве своего третьего аргумента.

Не вызывайте mxDestroyArray на mxArray, возвращенном функцией mxGetField.

Примечание

Вводами к файлу MEX является постоянный mxArray только для чтения s. Не изменяйте входные параметры. Используя mxSetCell * или mxSetField функции *, чтобы изменить ячейки или поля аргумента MATLAB® вызывают непредсказуемые результаты.

В C, вызывая:

mxGetField(pa, index, "field_name");

эквивалентно вызову:

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

где, если у вас есть 1-by-1 структура, index является 0.

На Фортране, вызывая:

mxGetField(pm, index, 'fieldname')

эквивалентно вызову:

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

где, если у вас есть 1-by-1 структура, index является 1.

Примеры

Смотрите следующий пример в matlabroot /extern/examples/eng_mat.

Представлено до R2006a

Была ли эта тема полезной?