通过指针
multDoubleRef
函数
的multDoubleRef
功能shrlibsample
图书馆增加输入5
。
EXPORTED_FUNCTION双* multDoubleRef(双* x) {* x * = 5;返回x;}
输入是一个指向双
函数返回一个指向双
。MATLAB®函数签名:
返回类型 | 的名字 | 参数 |
---|---|---|
[lib.pointer, |
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
。例如,使用doublePtrPtr
C参数双* *
。
当调用一个函数,它接受一个多级指针参数,使用lib.pointer
对象和MATLAB将它转换成多级指针。
allocateStruct
和deallocateStruct
功能
的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函数。
加载库包含allocateStruct
和deallocateStruct
。
如果不是(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”