主要内容

通过指针的例子

multDoubleRef功能

multDoubleRef功能shrlibsample库的输入乘以5

exportted_function double * multidoubleref (double *x) {*x *= 5;返回x;}

输入是指向a的指针,函数返回指向a的指针.MATLAB®功能签名是:

返回类型 的名字 参数
[lib.pointer,
doublePtr]
multDoubleRef (doublePtr)

通过类型双重的指针

这个例子展示了如何构造和传递一个指向C函数的指针multDoubleRef

加载包含该函数的库。

如果不是(libisloaded (“shrlibsample”)目录(fullfile (matlabroot,'extern''例子'“shrlib”) loadlibrary (“shrlibsample”结束

构造一个指针,XPTR.,转换为输入参数,X

X = 13.3;Xptr = libpointer (“doublePtr”,X);

核实XPTR.

get (Xptr)
取值范围:13.3000数据类型:'doublePtr'

调用函数并检查结果。

calllib (“shrlibsample”“multDoubleRef”, Xptr);Xptr。价值
ans = 66.5000

XPTR.是句柄对象。句柄的副本引用相同的基础对象,在句柄对象上执行的任何操作都会影响该对象的所有副本。然而,XPTR.不是C语言指针。尽管它指向X,不包含的地址X.该函数修改了值属性XPTR.但不修改基础对象中的值X.原始价值X是不变的。

X
X = 13.3000

从现有库中创建指针偏移量。指针对象

这个例子展示了如何创建一个指向MATLAB向量子集的指针X.只有原始指针存在时,新指针才有效。

创建指向向量的指针。

x = 1:10;XP = libpointer(“doublePtr”,X);XP.Value.
ans =1×101 2 3 4 5 6 7 8 9 10

使用lib.pointer plus运算符(+)创建指向最后六个要素的指针X

Xp2 = xp + 4;xp2。价值
ans =1×65 6 7 8 9 10

多级指针

多级指针具有多个引用级别的参数。MATLAB中的多级指针类型使用后缀PtrPtr.例如,使用doublePtrPtr对于C论证双* *

调用带有多级指针参数的函数时,使用alib.pointer对象,并让MATLAB将其转换为多级指针。

allocateStructdeallocateStruct功能

allocateStruct功能shrlibsample图书馆需要c_structPtrPtr争论。

导出void void AlloCateTruct(struct c_struct ** val){* val =(struct c_struct *)malloc(staulefof(struct c_struct));(* val) - > P1 = 12.4;(* val) - > P2 = 222;(* val) - > P3 = 333333;}

MATLAB函数签名如下:

返回类型 的名字 参数
c_structPtrPtr allocateStruct (c_structPtrPtr)
voidptr. deallocateStruct (voidptr)

通过多级指针

此示例显示如何将多级指针传递给C函数。

加载包含allocateStructdeallocateStruct

如果不是(libisloaded (“shrlibsample”)目录(fullfile (matlabroot,'extern''例子'“shrlib”) loadlibrary (“shrlibsample”结束

创建一个c_structptr.指针。

sp = libpointer (“c_structPtr”);

调用allocateStruct为结构分配内存。

res = calllib (“shrlibsample”“allocateStruct”SP)
res =结构体字段:P1: 12.4000 p2: 222 p3: 333333

释放由allocateStruct函数。

calllib (“shrlibsample”“deallocateStruct”SP)

返回字符串数组

假设你有一个库,myLib,带有函数,获取,它读取一个字符串数组。函数签名为:

返回类型 的名字 参数
Char ** 获取 (空白)
char * * acquireString(空白)

下列伪代码演示如何操作返回值,即指向字符串的指针数组。

ptr = calllib (myLib acquireString)

MATLAB创建一个lib.pointer对象ptr类型的stringPtrPtr.这个对象指向第一个字符串。要查看其他字符串,请增加指针。例如,要显示前三个字符串,输入:

for index = 0:2 temppptr = ptr + index;tempPtr。价值结束
Ans = 'str1' Ans = 'str2' Ans = 'str3'

另请参阅