multDoubleRef
功能的multDoubleRef
功能shrlibsample
库的输入乘以5
.
exportted_function double * multidoubleref (double *x) {*x *= 5;返回x;}
输入是指向a的指针双
,函数返回指向a的指针双
.MATLAB®功能签名是:
返回类型 | 的名字 | 参数 |
---|---|---|
[lib.pointer, |
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将其转换为多级指针。
allocateStruct
和deallocateStruct
功能的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函数。
加载包含allocateStruct
和deallocateStruct
.
如果不是(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'