Main Content

传递数组示例

print2darray 函数

shrlibsample 库中的 print2darray 函数显示列数为三、行数可变的二维数组的值。参数 my2ddouble 类型的二维数组。参数 len 是行数。

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");
    }
}

将 MATLAB 数组转换为 C 样式的维度

此示例说明如何将 MATLAB® 数组中按列存储的数据传递给采用行×列格式的 C 函数。

加载包含 print2darray 函数的库。

if not(libisloaded('shrlibsample'))
    addpath(fullfile(matlabroot,'extern','examples','shrlib'))
    loadlibrary('shrlibsample')
end

创建一个 4 行 3 列的 MATLAB 数组。

m = reshape(1:12,4,3)
m = 4×3

     1     5     9
     2     6    10
     3     7    11
     4     8    12

显示值。第一列是 [1 4 7 10] 而不是 [1 2 3 4]。

calllib('shrlibsample','print2darray',m,4)
         1         2         3
         4         5         6
         7         8         9
        10        11        12

转置 m 以获得所需的结果。

calllib('shrlibsample','print2darray',m',4)
         1         5         9
         2         6        10
         3         7        11
         4         8        12

multDoubleArray 函数

shrlibsample 库中的 multDoubleArray 函数将数组中的每个元素乘以三。该函数使用单一下标(线性索引)来导航输入数组。

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;
}

MATLAB® 函数签名是:

返回类型名称参量
doublePtrmultDoubleArray(doublePtr,
int32)

保留三维 MATLAB 数组

此示例说明 C 函数如何更改 MATLAB® 数组的维度,以及如何还原它的形状。

加载库。

if not(libisloaded('shrlibsample'))
    addpath(fullfile(matlabroot,'extern','examples','shrlib'))
    loadlibrary('shrlibsample')
end

创建一个 2×5×2 输入数组并显示其维度。

vin = reshape(1:20,2,5,2);
vs = size(vin)
vs = 1×3

     2     5     2

调用 multDoubleArray 以对每个元素进行乘法运算。显示输出的维度。

vout = calllib('shrlibsample','multDoubleArray',vin,20);
size(vout)
ans = 1×2

     2    10

还原初始形状:

vout = reshape(vout,vs);
size(vout)
ans = 1×3

     2     5     2