Pass Arrays Examples
print2darray Function
The print2darray function in the
shrlibsample library displays the values of a 2-D array with
three columns and a variable number of rows. The my2d parameter
is a two-dimensional array of double. The len
parameter is the number of rows.
EXPORTED_FUNCTION void print2darray(double my2d[][3],int len)
{
int indxi,indxj;
for(indxi=0;indxi<len;++indxi)
{
for(indxj=0;indxj<3;++indxj)
{
mexPrintf("%10g",my2d[indxi][indxj]);
}
mexPrintf("\n");
}
}Convert MATLAB Array to C-Style Dimensions
This example shows how to pass data stored columnwise in a MATLAB® array to a C function that assumes a row-by-column format.
Load the library containing the print2darray function.
if not(libisloaded('shrlibsample')) addpath(fullfile(matlabroot,'extern','examples','shrlib')) loadlibrary('shrlibsample') end
Create a MATLAB array with 4 rows and 3 columns.
m = reshape(1:12,4,3)
m = 4×3
1 5 9
2 6 10
3 7 11
4 8 12
Display the values. The first column is [1 4 7 10] instead of [1 2 3 4].
calllib('shrlibsample','print2darray',m,4)
1 2 3
4 5 6
7 8 9
10 11 12
ans = 4×3
1 5 9
2 6 10
3 7 11
4 8 12
Transpose m to get the desired result.
calllib('shrlibsample','print2darray',m',4)
1 5 9
2 6 10
3 7 11
4 8 12
ans = 3×4
1 2 3 4
5 6 7 8
9 10 11 12
multDoubleArray Function
The multDoubleArray function in the
shrlibsample library multiplies each element of an array by
three. The function uses a single subscript (linear indexing) to navigate the input
array.
EXPORTED_FUNCTION void multDoubleArray(double *x,int size)
{
/* Multiple each element of the array by 3 */
int i;
for (i=0;i<size;i++)
*x++ *= 3;
}The MATLAB® function signature is:
| Return Type | Name | Arguments |
|---|---|---|
doublePtr | multDoubleArray | (doublePtr, |
Preserve 3-D MATLAB Array
This example shows how a C function changes the dimensions of a MATLAB® array, and how to restore its shape.
Load the library.
if not(libisloaded('shrlibsample')) addpath(fullfile(matlabroot,'extern','examples','shrlib')) loadlibrary('shrlibsample') end
Create a 2-by-5-by-2 input array and display its dimensions.
vin = reshape(1:20,2,5,2); vs = size(vin)
vs = 1×3
2 5 2
Call multDoubleArray to multiply each element. Display the dimensions of the output.
vout = calllib('shrlibsample','multDoubleArray',vin,20); size(vout)
ans = 1×2
2 10
Restore the original shape.
vout = reshape(vout,vs); size(vout)
ans = 1×3
2 5 2