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: