通過欄位名稱傳遞結構
此示例說明如何從 MATLAB 讀取各種型別的結構條目,並將其傳遞給 C 等效型別變數。
雖然從示例中可以很容易地找出如何通過數字載入欄位,但是這裡通過將欄位名稱與字串進行比較來實現。因此,struct 欄位可以通過它們的欄位名來定址,其中的變數可以由 C 讀取。
structIn.c
#include "mex.h"
#include <string.h> // strcmp
void mexFunction (int nlhs, mxArray *plhs[],
int nrhs, const mxArray *prhs[])
{
// helpers
double* double_ptr;
unsigned int i; // loop variable
// to be read variables
bool optimal;
int randomseed;
unsigned int desiredNodes;
if (!mxIsStruct(prhs[0])) {
mexErrMsgTxt("First argument has to be a parameter struct!");
}
for (i=0; i<mxGetNumberOfFields(prhs[0]); i++) {
if (0==strcmp(mxGetFieldNameByNumber(prhs[0],i),"randomseed")) {
mxArray *p = mxGetFieldByNumber(prhs[0],0,i);
randomseed = *mxGetPr(p);
}
if (0==strcmp(mxGetFieldNameByNumber(prhs[0],i),"optimal")) {
mxArray *p = mxGetFieldByNumber(prhs[0],0,i);
optimal = (bool)*mxGetPr(p);
}
if (0==strcmp(mxGetFieldNameByNumber(prhs[0],i),"numNodes")) {
mxArray *p = mxGetFieldByNumber(prhs[0],0,i);
desiredNodes = *mxGetPr(p);
}
}
}
i
上的迴圈遍歷給定結構中的每個欄位,而 if(0==strcmp)
-parts 將 matlab 欄位的名稱與給定字串進行比較。如果匹配,則將相應的值提取到 C 變數。