文档

通过指针

multDoubleRef函数

multDoubleRef功能shrlibsample图书馆增加输入5

EXPORTED_FUNCTION双* multDoubleRef(双* x) {* x * = 5;返回x;}

输入是一个指向函数返回一个指向。MATLAB®函数签名:

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

通过指针类型的翻倍

这个例子展示了如何构建并将指针传递给C函数multDoubleRef

加载包含函数的库。

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

              

构造一个指针,Xptr输入参数,X

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

验证的内容Xptr

get (Xptr)
值:13.3000数据类型:“doublePtr”

调用这个函数并检查结果。

calllib (“shrlibsample”,“multDoubleRef”,Xptr);Xptr.Value
ans = 66.5000

Xptr是一个处理对象。这个处理是指相同的底层对象的副本和任何操作执行处理对象的对象影响所有的副本。然而,Xptr不是一个C语言指针。尽管它指向X,它不包含的地址X。修改的值属性的函数Xptr但没有修改底层对象的价值X。的初始值X是不变的。

X
X = 13.3000

从现有的lib.pointer对象创建指针偏移

这个例子展示了如何创建一个指针指向一个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 +运算符(+)来创建一个指向过去的六要素X

xp2 = xp + 4;xp2.Value
ans =1×65 6 7 8 9 10

多级指针

多级指针参数有多个级别的引用。一个多级指针类型在MATLAB使用后缀PtrPtr。例如,使用doublePtrPtrC参数双* *

当调用一个函数,它接受一个多级指针参数,使用lib.pointer对象和MATLAB将它转换成多级指针。

allocateStructdeallocateStruct功能

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

EXPORTED_FUNCTION空白allocateStruct (struct c_struct * * val) {* val = (struct c_struct *) malloc (sizeof (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,“外来的”,“例子”,“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一个函数,acquireString读取一个字符串数组。函数签名:

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

以下伪代码显示了如何操纵返回值,一个指向字符串的指针数组。

ptr = calllib (myLib acquireString)

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

指数= 0:2 tempPtr = ptr +指数;tempPtr。结束值
ans = ' str1 ' ans = ' str2 ans =“str3”

另请参阅

这个主题有帮助吗?