Matlab指针数组

Matlab指针数组

前面博客Matlab指针中介绍了如何在Matlab中使用handle类型对象作为指针使用,本文则介绍一些使用这些类型指针的小技巧。

自定义类型的指针数组

在大部分编程语言中,我们都可以采用结构体来定义一些自定义类型。对于多个自定义类型的变量数据组合,我们可以采用指针指向各个变量,然后将所有指针组成一个数组储存起来(自定义类型指针数组)。如此便获得了能够访问所有变量数据的简单方法。

举例来说,每个netcdf文件中都会包含多个变量,若每个变量都使用一个指针代替,并且将这些指针组成一个数组varArray,那么在代表netcdf文件的对象中,只需要一个成员变量varArray即可访问所有变量所包含的内容,而不再需要将每个变量的指针都作为成员变量储存起来。

Matlab中指针数组

在 Matlab 中,实现上面的过程就稍显复杂。首先,Matlab 并没有普通的指针,需使用handle类对象来代替。其次,相同类型的handle对象组成数组时需要特殊方法。

Matlab中一般的实数数组可以先声明(申请内存),随后对数组元素进行赋值。

np = 3
a  = zeros(np)
for i = 1:np
    a(np) = i^2;
end% for

但是这种方法并不适用于指针数组。

>> help zeros
 zeros  Zeros array.
    ......
 
    zeros(..., CLASSNAME) is an array of zeros of class specified by the
    string CLASSNAME.
 
    ......

查看help zeros命令可以看到,zeros可以生成某种类型变量(CLASSNAME),但是可惜的是,这并不包括用户的自定义类型。

>> a = zeros(3, 'StdRegions.Line')
Error using zeros
CLASSNAME input must be a valid numeric or logical class name.

因此,唯一的一种办法就是用大括号将各个指针连接起来变成一个数组。如

linArray = [];
for i = 1:3
    t = StdRegions.Line(i);
    linArray = [t, linArray];
end

注意需要首相将数组赋值为空向量,否则会报错。得到结果为

>> linArray

linArray = 

  1x3 Line array with properties:
posted @ 2016-08-15 20:14  li12242  阅读(2922)  评论(0编辑  收藏  举报