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类对象和指针功能是类似的。