zoukankan      html  css  js  c++  java
  • 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类对象和指针功能是类似的。

  • 相关阅读:
    嵌入式:指针的指针、链表、UCOS 的 OSMemCreate 。
    嵌入式&iOS:回调函数(C)与block(OC)传 参/函数 对比
    嵌入式&iOS:回调函数(C)与block(OC)回调对比
    iOS:以前笔记,未整理版。太多了,先放着吧。。。。。。。
    嵌入式:小技巧(慢慢回忆更新)(16.12.17更)
    嵌入式:J-link刷固件(坑)
    iOS:GCD组
    Android Studio教程07-Fragment的使用
    Android Studio教程06-布局,监听器以及基本控件
    Android Studio教程05-Parcelables和Bundles.md
  • 原文地址:https://www.cnblogs.com/li12242/p/4242038.html
Copyright © 2011-2022 走看看