Matlab指针
Matlab指针
第一印象貌似是Matlab中不存在指针,所有变量与函数的赋值都是按值传递的,不会对参数进行修改。其实Matlab提供了handle类作为指针代替品。只要我们利用handle子类,就可以像使用指针一样来操作对象中包含的数据。
handle 类可参考 Matlab Object-Oriented Programming R2012a 第五章中介绍内容。
Matlab Object-Oriented Programming R2012a
ch5. Value or Handle Class
A handle class constructor returns a handle object that is a reference to the object created. You can assign the handle object to multiple variables or pass it to functions without causing MATLAB to make a copy of the original object. A function that modifies a handle object passed as an input argument does not need to return the object.
由上面所述内容可看出,handle类型对象在赋值给其他变量时,不会对原始对象进行复制。此外,在函数中对handle类型对象做修改后,也不需在将其作为返回参数输出。也就是说,在使用handle类型对象时,我们可以认为所操作的就是一个指针,其指向的内容就是构造函数初始化的实例。
实例—Filewriter类
首先给个类的文件Filewriter.m
classdef Filewriter < handle
properties(SetAccess=private, GetAccess=public)
num
end
methods
% Construct an object and set num
function obj = Filewriter(num)
obj.num = num;
end
function addOne(obj)
obj.num = obj.num +1;
end
end % methods
end % class
我们通过如下语句使用这个自定义的对象:
file = Filewriter(1)
这句代码实现了两个功能,将类实例化了一个对象(object),并将该对象的句柄赋给变量file
。
毫无疑问,我们调用file.addOne
成员函数就可以对变量file
自身进行操作。
但是我们还是不放心,假如我调用下面语句,我是将file对象指向地址给了other_file
,还是另外为其实例化了一个对象?
other_file = file;
用下面方法验证
>> other_file = file
other_file =
Filewriter with properties:
num: 2
>> other_file.addOne
>> file
file =
Filewriter with properties:
num: 3
可以看到,通过句柄other_file
对实例化的对象进行的操作直接作用在file
所指对象上。因此,Matlab 中handle类对象和指针功能是类似的。