One can perform exactly the same operations on Cell arrays in mex-files as in oct-files. An example that duplicates the function of the celldemo.cc oct-file in a mex-file is given by mycell.c as shown below.
#include "mex.h" void mexFunction (int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[]) { mwSize n; mwIndex i; if (nrhs != 1 || ! mxIsCell (prhs[0])) mexErrMsgTxt ("ARG1 must be a cell"); n = mxGetNumberOfElements (prhs[0]); n = (n > nlhs ? nlhs : n); for (i = 0; i < n; i++) plhs[i] = mxDuplicateArray (mxGetCell (prhs[0], i)); }
The output is identical to the oct-file version as well.
[b1, b2, b3] = mycell ({1, [1, 2], "test"}) ⇒ b1 = 1 b2 = 1 2 b3 = test
Note in the example the use of the mxDuplicateArray
function. This is
needed as the mxArray
pointer returned by mxGetCell
might be
deallocated. The inverse function to mxGetCell
, used for setting Cell
values, is mxSetCell
and is defined as
void mxSetCell (mxArray *ptr, int idx, mxArray *val);
Finally, to create a cell array or matrix, the appropriate functions are
mxArray *mxCreateCellArray (int ndims, const int *dims); mxArray *mxCreateCellMatrix (int m, int n);